{"version":3,"file":"taiga-ui-addon-charts-components-line-days-chart.mjs","sources":["../../../projects/addon-charts/components/line-days-chart/line-days-chart-hint.directive.ts","../../../projects/addon-charts/components/line-days-chart/line-days-chart.component.ts","../../../projects/addon-charts/components/line-days-chart/line-days-chart.template.html","../../../projects/addon-charts/components/line-days-chart/taiga-ui-addon-charts-components-line-days-chart.ts"],"sourcesContent":["import {\n    type AfterContentInit,\n    computed,\n    contentChildren,\n    DestroyRef,\n    Directive,\n    forwardRef,\n    inject,\n    input,\n    NgZone,\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {tuiLineChartDrivers} from '@taiga-ui/addon-charts/components/line-chart';\nimport {type TuiDay} from '@taiga-ui/cdk/date-time';\nimport {TuiHoveredService} from '@taiga-ui/cdk/directives/hovered';\nimport {tuiZonefree} from '@taiga-ui/cdk/observables';\nimport {type TuiContext} from '@taiga-ui/cdk/types';\nimport {type TuiPoint} from '@taiga-ui/core/types';\nimport {type PolymorpheusContent} from '@taiga-ui/polymorpheus';\nimport {combineLatest, filter} from 'rxjs';\n\nimport {TuiLineDaysChart} from './line-days-chart.component';\n\nfunction find(value: ReadonlyArray<[TuiDay, number]>, current: TuiDay): [TuiDay, number] {\n    return value.find(([day]) => day.daySame(current)) || [current, Number.NaN];\n}\n\n// TODO: Consider extending TuiLineChartHintDirective\n@Directive({\n    selector: '[tuiLineChartHint]',\n    providers: [TuiHoveredService],\n})\nexport class TuiLineDaysChartHint implements AfterContentInit {\n    private readonly charts = contentChildren(forwardRef(() => TuiLineDaysChart));\n    private readonly map = computed(() =>\n        this.getMap(...this.charts().map(({value}) => value())),\n    );\n\n    private readonly destroyRef = inject(DestroyRef);\n    private readonly zone = inject(NgZone);\n    private readonly hovered$ = inject(TuiHoveredService);\n\n    public readonly hint = input<PolymorpheusContent<TuiContext<readonly TuiPoint[]>>>(\n        '',\n        {alias: 'tuiLineChartHint'},\n    );\n\n    public ngAfterContentInit(): void {\n        combineLatest([\n            ...this.charts().map(({charts}) => tuiLineChartDrivers(charts())),\n            this.hovered$,\n        ])\n            .pipe(\n                filter((result) => !result.some(Boolean)),\n                tuiZonefree(this.zone),\n                takeUntilDestroyed(this.destroyRef),\n            )\n            .subscribe(() => {\n                this.charts().forEach((chart) => chart.onHovered(Number.NaN));\n            });\n    }\n\n    public getContext(day: TuiDay): ReadonlyArray<[TuiDay, number]> {\n        return this.map().get(String(day)) || [];\n    }\n\n    public raise(day: TuiDay): void {\n        const current = this.charts()\n            .map(({value}) => (day ? find(value(), day) : []))\n            .filter(([_, value]) => !Number.isNaN(value));\n        const sorted = [...current].sort((a, b) => a[1] - b[1]);\n\n        this.charts().forEach((chart, index) => {\n            const item = current[index];\n\n            chart.onHovered(day);\n            chart.zIndex = Math.max(item ? sorted.indexOf(item) : 0, 0);\n        });\n    }\n\n    private getMap(\n        ...values: Array<ReadonlyArray<[TuiDay, number]>>\n    ): Map<string, ReadonlyArray<[TuiDay, number]>> {\n        return (values[0] || []).reduce(\n            (map, [day]) =>\n                map.set(\n                    String(day),\n                    values.map((value) => find(value, day)),\n                ),\n            new Map<string, ReadonlyArray<[TuiDay, number]>>(),\n        );\n    }\n}\n","import {\n    type AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    DestroyRef,\n    inject,\n    input,\n    NgZone,\n    viewChildren,\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {TuiChartHint} from '@taiga-ui/addon-charts/components/chart-hint';\nimport {\n    TUI_LINE_CHART_OPTIONS,\n    TuiLineChart,\n    tuiLineChartDrivers,\n    TuiLineChartHint,\n} from '@taiga-ui/addon-charts/components/line-chart';\nimport {TuiDay, TuiMonth} from '@taiga-ui/cdk/date-time';\nimport {TuiHoveredService} from '@taiga-ui/cdk/directives/hovered';\nimport {tuiZonefree} from '@taiga-ui/cdk/observables';\nimport {type TuiContext, type TuiStringHandler} from '@taiga-ui/cdk/types';\nimport {tuiIsNumber, tuiIsPresent} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {type TuiPoint} from '@taiga-ui/core/types';\nimport {type PolymorpheusContent, PolymorpheusOutlet} from '@taiga-ui/polymorpheus';\nimport {combineLatest, filter} from 'rxjs';\n\nimport {TuiLineDaysChartHint} from './line-days-chart-hint.directive';\n\nconst DUMMY: TuiPoint = [Number.NaN, Number.NaN];\n\n@Component({\n    selector: 'tui-line-days-chart',\n    imports: [PolymorpheusOutlet, TuiChartHint, TuiLineChart],\n    templateUrl: './line-days-chart.template.html',\n    styleUrl: './line-days-chart.style.less',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        TuiHoveredService,\n        {\n            provide: TuiLineChartHint,\n            useExisting: TuiLineDaysChart,\n        },\n    ],\n    host: {'[style.z-index]': 'zIndex'},\n})\nexport class TuiLineDaysChart implements AfterViewInit {\n    private readonly destroyRef = inject(DestroyRef);\n    private readonly zone = inject(NgZone);\n    private readonly hovered$ = inject(TuiHoveredService);\n    private readonly options = inject(TUI_LINE_CHART_OPTIONS);\n    private readonly hintDirective = inject(TuiLineDaysChartHint, {optional: true});\n\n    private readonly brokenMonths = computed(() => {\n        const value = this.value();\n        const offset = (value[0]?.[0].day || 1) - 1;\n        const start = value[0]?.[0];\n        const end = value[value.length - 1]?.[0];\n\n        return Array.from(\n            {length: start && end ? TuiMonth.lengthBetween(start, end) + 1 : 0},\n            (_, i) => i + (start?.month || 0) + (start?.year || 0) * 12,\n        )\n            .map((absoluteMonth) =>\n                value\n                    .map<TuiPoint | null>(([{month, year}, y], index) =>\n                        month + year * 12 === absoluteMonth ? [index + offset, y] : null,\n                    )\n                    .filter(tuiIsPresent),\n            )\n            .map((month, index, array) =>\n                index === array.length - 1\n                    ? month\n                    : [\n                          ...month,\n                          array[index + 1]?.find((day) => !Number.isNaN(day[1])) || DUMMY,\n                      ],\n            );\n    });\n\n    public readonly charts = viewChildren(TuiLineChart);\n    public readonly y = input(0);\n    public readonly height = input(0);\n    public readonly smoothingFactor = input(this.options.smoothingFactor);\n    public readonly hintContent =\n        input<PolymorpheusContent<TuiContext<[TuiDay, number]>>>();\n\n    public readonly xStringify = input<TuiStringHandler<TuiDay> | null>(null);\n    public readonly yStringify = input<TuiStringHandler<number> | null>(null);\n    public readonly dots = input(this.options.dots);\n\n    public zIndex = 0;\n\n    public readonly value = input<\n        ReadonlyArray<[TuiDay, number]>,\n        ReadonlyArray<[TuiDay, number]>\n    >([], {\n        transform: (value) => {\n            if (!value.length) {\n                return [];\n            }\n\n            const start = value[0]?.[0];\n            const end = value[value.length - 1];\n            const mutable = [...value];\n            const length = start && end ? TuiDay.lengthBetween(start, end[0]) + 1 : 0;\n\n            return Array.from({length}, (_, day) => {\n                const startMutable = mutable[0]?.[0];\n                const currentDay = start?.append({day});\n                const shifted =\n                    startMutable && currentDay?.daySame(startMutable)\n                        ? mutable.shift()\n                        : null;\n                const currentValue = shifted ? shifted[1] : Number.NaN;\n\n                return [currentDay, currentValue] as [TuiDay, number];\n            });\n        },\n    });\n\n    public readonly hint = computed<\n        | PolymorpheusContent<TuiContext<[TuiDay, number]>>\n        | PolymorpheusContent<TuiContext<readonly TuiPoint[]>>\n    >(() => this.hintDirective?.hint() ?? this.hintContent());\n\n    public ngAfterViewInit(): void {\n        combineLatest([tuiLineChartDrivers(this.charts()), this.hovered$])\n            .pipe(\n                filter((result) => !result.some(Boolean)),\n                tuiZonefree(this.zone),\n                takeUntilDestroyed(this.destroyRef),\n            )\n            .subscribe(() => {\n                this.onHovered(Number.NaN);\n            });\n    }\n\n    public onHovered(day: TuiDay | number): void {\n        if (tuiIsNumber(day)) {\n            this.charts().forEach((chart) => chart.onHovered(Number.NaN));\n\n            return;\n        }\n\n        const start = this.value()[0]?.[0];\n        const index = start && day ? TuiMonth.lengthBetween(start, day) : 0;\n        const x = start && day ? TuiDay.lengthBetween(start, day) + start.day - 1 : 0;\n        const current = this.charts()[index];\n\n        this.charts().forEach((chart) => {\n            if (chart === current) {\n                current.onHovered(current.value().findIndex((point) => point[0] === x));\n            } else {\n                chart.onHovered(Number.NaN);\n            }\n        });\n    }\n\n    public raise(index: number, {value}: TuiLineChart): void {\n        const x = value()[index]?.[0] || 0;\n        const month = this.getDay(x);\n\n        if (!month) {\n            return;\n        }\n\n        if (this.hintDirective) {\n            this.hintDirective.raise(month);\n        } else {\n            this.onHovered(month);\n        }\n    }\n\n    public getContext(index: number, {value}: TuiLineChart): unknown {\n        const x = value()[index]?.[0] || 0;\n        const day = this.getDay(x);\n\n        return this.hintDirective && day\n            ? this.hintDirective.getContext(day)\n            : this.getHintContext(x, this.value());\n    }\n\n    protected get months(): ReadonlyArray<readonly TuiPoint[]> {\n        return this.value().length ? this.brokenMonths() : [];\n    }\n\n    protected get firstWidth(): number {\n        return this.months.length * (this.value()[0]?.[0].daysCount || 0);\n    }\n\n    protected getHintContext(\n        x: number,\n        value: ReadonlyArray<[TuiDay, number]>,\n    ): [TuiDay, number] | null {\n        return value[x - (value[0]?.[0]?.day || 0) + 1] ?? null;\n    }\n\n    protected readonly daysStringify: TuiStringHandler<number> = (index) => {\n        const day = this.getDay(index);\n        const xStringify = this.xStringify();\n\n        return xStringify && day ? xStringify(day) : '';\n    };\n\n    protected getX(index: number): number {\n        const start = this.value()[0]?.[0];\n        const current = this.getDay(index);\n        const months = start && current ? TuiMonth.lengthBetween(start, current) : 0;\n        const offset = months * (current?.daysCount || 0);\n\n        return index - offset;\n    }\n\n    protected getWidth(index: number): number {\n        return (this.getDay(index)?.daysCount || 0) * this.months.length;\n    }\n\n    private getDay(index: number): TuiDay | undefined {\n        const start = this.value()[0]?.[0];\n\n        return this.value()[index - (start?.day || 0) + 1]?.[0];\n    }\n}\n","@for (month of months; track month) {\n    <tui-line-chart\n        class=\"t-chart\"\n        [dots]=\"dots()\"\n        [height]=\"height()\"\n        [smoothingFactor]=\"smoothingFactor()\"\n        [style.z-index]=\"zIndex\"\n        [tuiHintContent]=\"hintContent() ? hint : ''\"\n        [value]=\"month\"\n        [width]=\"$first ? firstWidth : getWidth(month[0]?.[0] ?? 0)\"\n        [x]=\"$first ? 0 : getX(month[0]?.[0] ?? 0)\"\n        [xStringify]=\"xStringify() ? daysStringify : null\"\n        [y]=\"y()\"\n        [yStringify]=\"yStringify()\"\n    />\n}\n<ng-template\n    #hint\n    let-point\n>\n    <ng-container *polymorpheusOutlet=\"hintContent() as text; context: {$implicit: getHintContext(point[0], value())}\">\n        {{ text }}\n    </ng-container>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}