{"version":3,"file":"taiga-ui-addon-charts-components-line-chart.mjs","sources":["../../../projects/addon-charts/components/line-chart/line-chart.options.ts","../../../projects/addon-charts/components/line-chart/line-chart-hint.directive.ts","../../../projects/addon-charts/components/line-chart/line-chart.component.ts","../../../projects/addon-charts/components/line-chart/line-chart.template.html","../../../projects/addon-charts/components/line-chart/taiga-ui-addon-charts-components-line-chart.ts"],"sourcesContent":["import {InjectionToken, type Provider} from '@angular/core';\nimport {tuiProvideOptions} from '@taiga-ui/cdk/utils/miscellaneous';\n\nexport interface TuiLineChartOptions {\n    readonly dots: boolean;\n    readonly filled: boolean;\n    readonly smoothingFactor: number;\n}\n\nexport const TUI_LINE_CHART_DEFAULT_OPTIONS: TuiLineChartOptions = {\n    dots: false,\n    filled: false,\n    smoothingFactor: 0,\n};\n\nexport const TUI_LINE_CHART_OPTIONS = new InjectionToken(\n    ngDevMode ? 'TUI_LINE_CHART_OPTIONS' : '',\n    {\n        factory: () => TUI_LINE_CHART_DEFAULT_OPTIONS,\n    },\n);\n\nexport function tuiLineChartOptionsProvider(\n    options: Partial<TuiLineChartOptions>,\n): Provider {\n    return tuiProvideOptions(\n        TUI_LINE_CHART_OPTIONS,\n        options,\n        TUI_LINE_CHART_DEFAULT_OPTIONS,\n    );\n}\n","import {\n    type AfterViewInit,\n    ContentChildren,\n    DestroyRef,\n    Directive,\n    ElementRef,\n    forwardRef,\n    inject,\n    Input,\n    NgZone,\n    type QueryList,\n    Renderer2,\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {EMPTY_QUERY} from '@taiga-ui/cdk/constants';\nimport {TuiHoveredService} from '@taiga-ui/cdk/directives/hovered';\nimport {tuiQueryListChanges, tuiZonefree} from '@taiga-ui/cdk/observables';\nimport {type TuiContext} from '@taiga-ui/cdk/types';\nimport {tuiPure} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {type TuiPoint} from '@taiga-ui/core/types';\nimport {type PolymorpheusContent} from '@taiga-ui/polymorpheus';\nimport {\n    combineLatest,\n    distinctUntilChanged,\n    filter,\n    map,\n    type Observable,\n    startWith,\n    switchMap,\n} from 'rxjs';\n\nimport {TuiLineChart} from './line-chart.component';\n\n@Directive({\n    standalone: true,\n    selector: '[tuiLineChartHint]',\n    providers: [TuiHoveredService],\n})\nexport class TuiLineChartHint implements AfterViewInit {\n    @ContentChildren(forwardRef(() => TuiLineChart))\n    private readonly charts: QueryList<TuiLineChart> = EMPTY_QUERY;\n\n    @ContentChildren(forwardRef(() => TuiLineChart), {read: ElementRef})\n    private readonly chartsRef: QueryList<ElementRef<HTMLElement>> = EMPTY_QUERY;\n\n    private readonly renderer = inject(Renderer2);\n    private readonly destroyRef = inject(DestroyRef);\n    private readonly zone = inject(NgZone);\n    private readonly hovered$ = inject(TuiHoveredService);\n\n    @Input('tuiLineChartHint')\n    public hint: PolymorpheusContent<TuiContext<readonly TuiPoint[]>>;\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.charts.forEach((chart) => chart.onHovered(NaN));\n            });\n    }\n\n    // _chart is required by TuiLineDaysChartComponent that impersonates this directive\n    public getContext(index: number, _chart: TuiLineChart): readonly TuiPoint[] {\n        return this.computeContext(...this.charts.map(({value}) => value))[index] || [];\n    }\n\n    // _chart is required by TuiLineDaysChartComponent that impersonates this directive\n    public raise(index: number, _chart: TuiLineChart): void {\n        const current = this.charts.map(\n            (chart) => chart.value[index] ?? ([0, 0] as const),\n        );\n\n        const sorted = [...current].sort((a, b) => a[1] - b[1]);\n\n        this.charts.forEach((chart) => chart.onHovered(index));\n        this.chartsRef.forEach(({nativeElement}, index) =>\n            this.renderer.setStyle(\n                nativeElement,\n                'z-index',\n                sorted.indexOf(current[index] ?? [0, 0]),\n            ),\n        );\n    }\n\n    @tuiPure\n    private computeContext(\n        ...values: ReadonlyArray<readonly TuiPoint[]>\n    ): ReadonlyArray<readonly TuiPoint[]> {\n        return (values[0] || []).map((_, index) =>\n            values.map((value) => value[index] ?? [0, 0]),\n        );\n    }\n}\n\nexport function tuiLineChartDrivers(\n    charts: QueryList<{drivers: QueryList<Observable<boolean>>}>,\n): Observable<boolean> {\n    return combineLatest(\n        charts.map(({drivers}) =>\n            tuiQueryListChanges(drivers).pipe(\n                map((drivers) => drivers.map((driver) => driver.pipe(startWith(false)))),\n            ),\n        ),\n    ).pipe(\n        map((all) => all.reduce((acc, drivers) => acc.concat(drivers), [])),\n        switchMap((drivers) => combineLatest(drivers)),\n        map((values) => values.some(Boolean)),\n        distinctUntilChanged(),\n    );\n}\n","import {AsyncPipe, NgForOf, NgIf} from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    inject,\n    Input,\n    NgZone,\n    type OnChanges,\n    type QueryList,\n    signal,\n    ViewChildren,\n} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {WaResizeObserverService} from '@ng-web-apis/resize-observer';\nimport {type TuiLineChartHintContext} from '@taiga-ui/addon-charts/types';\nimport {tuiDraw} from '@taiga-ui/addon-charts/utils';\nimport {EMPTY_QUERY} from '@taiga-ui/cdk/constants';\nimport {TuiLet} from '@taiga-ui/cdk/directives/let';\nimport {tuiZoneOptimized} from '@taiga-ui/cdk/observables';\nimport {tuiInjectId} from '@taiga-ui/cdk/services';\nimport {type TuiStringHandler} from '@taiga-ui/cdk/types';\nimport {tuiIsPresent, tuiPure} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {\n    TuiHint,\n    TuiHintHover,\n    TuiHintOptionsDirective,\n    tuiHintOptionsProvider,\n} from '@taiga-ui/core/directives/hint';\nimport {type TuiPoint} from '@taiga-ui/core/types';\nimport {type PolymorpheusContent} from '@taiga-ui/polymorpheus';\nimport {distinctUntilChanged, filter, map, type Observable, Subject} from 'rxjs';\n\nimport {TUI_LINE_CHART_OPTIONS} from './line-chart.options';\nimport {TuiLineChartHint} from './line-chart-hint.directive';\n\n@Component({\n    standalone: true,\n    selector: 'tui-line-chart',\n    imports: [AsyncPipe, NgForOf, NgIf, TuiHint, TuiLet],\n    templateUrl: './line-chart.template.html',\n    styleUrls: ['./line-chart.style.less'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [WaResizeObserverService],\n    viewProviders: [tuiHintOptionsProvider({direction: 'top', hideDelay: 0})],\n    host: {\n        '(mouseleave)': 'onMouseLeave()',\n    },\n})\nexport class TuiLineChart implements OnChanges {\n    private readonly zone = inject(NgZone);\n    private readonly options = inject(TUI_LINE_CHART_OPTIONS);\n    private readonly hover$ = new Subject<number>();\n    private readonly autoId = tuiInjectId();\n    private readonly resize = toSignal(\n        inject(WaResizeObserverService, {self: true}).pipe(\n            map(([e]) => e?.contentRect.height || NaN),\n            filter((height) => !Number.isNaN(height)),\n        ),\n        {initialValue: NaN},\n    );\n\n    private readonly box = signal('');\n\n    protected readonly hintDirective = inject(TuiLineChartHint, {optional: true});\n    protected readonly hintOptions = inject(TuiHintOptionsDirective, {optional: true});\n    protected readonly viewBox = computed(() => {\n        if (Number.isNaN(this.resize())) {\n            return '0 0 0 0';\n        }\n\n        const offset = this.height / Math.max(this.resize(), 1);\n        const [x = 0, y = 0, width = 0, height = 0] = this.box().split(' ').map(Number);\n\n        return `${x} ${y - offset} ${width} ${height + 2 * offset}`;\n    });\n\n    @ViewChildren(TuiHintHover)\n    public readonly drivers: QueryList<Observable<boolean>> = EMPTY_QUERY;\n\n    @Input()\n    public x = 0;\n\n    @Input()\n    public y = 0;\n\n    @Input()\n    public width = 0;\n\n    @Input()\n    public height = 0;\n\n    @Input()\n    public smoothingFactor = this.options.smoothingFactor;\n\n    @Input()\n    public xStringify: TuiStringHandler<number> | null = null;\n\n    @Input()\n    public yStringify: TuiStringHandler<number> | null = null;\n\n    @Input()\n    public filled = this.options.filled;\n\n    @Input()\n    public dots = this.options.dots;\n\n    public value: readonly TuiPoint[] = [];\n\n    @Input('value')\n    public set valueSetter(value: readonly TuiPoint[]) {\n        this.value = value.filter((item) => !item.some(Number.isNaN));\n    }\n\n    public ngOnChanges(): void {\n        this.box.set(`${this.x} ${this.y} ${this.width} ${this.height}`);\n    }\n\n    public onHovered(index: number): void {\n        this.hover$.next(index);\n    }\n\n    @tuiPure\n    protected get hovered$(): Observable<number> {\n        return this.hover$.pipe(distinctUntilChanged(), tuiZoneOptimized(this.zone));\n    }\n\n    protected get hintContent(): PolymorpheusContent<TuiLineChartHintContext<TuiPoint>> {\n        return this.hintOptions?.content || '';\n    }\n\n    protected get fillId(): string {\n        return `tui-line-chart-${this.autoId}`;\n    }\n\n    protected get fill(): string {\n        return this.filled ? `url(#${this.fillId})` : 'none';\n    }\n\n    protected get d(): string {\n        return this.getD(this.value, this.smoothingFactor);\n    }\n\n    protected get fillD(): string {\n        return this.value.length\n            ? `${this.d}V ${this.y} H ${this.value[0]?.[0]} V ${this.value[0]?.[1]}`\n            : this.d;\n    }\n\n    protected get isFocusable(): boolean {\n        return !this.hintDirective && this.hasHints;\n    }\n\n    protected get hasHints(): boolean {\n        return (\n            !!this.xStringify ||\n            !!this.yStringify ||\n            !!this.hintDirective?.hint ||\n            !!this.hintContent\n        );\n    }\n\n    protected onMouseLeave(): void {\n        if (!this.hintDirective) {\n            this.onHovered(NaN);\n        }\n    }\n\n    protected getX(index: number): number {\n        if (this.isSinglePoint) {\n            return (this.value[0]?.[0] || 0) / 2;\n        }\n\n        return index\n            ? ((this.value[index - 1]?.[0] || 0) + (this.value[index]?.[0] || 0)) / 2\n            : 2 * (this.value[0]?.[0] || 0) - this.getX(1);\n    }\n\n    protected getWidth(index: number): number {\n        return (100 * this.computeWidth(index)) / this.width;\n    }\n\n    protected getHintId(index: number): string {\n        return `${this.autoId}_${index}`;\n    }\n\n    protected getImplicit($implicit: TuiPoint): TuiPoint | readonly TuiPoint[] {\n        return (\n            this.hintDirective?.getContext(this.value.indexOf($implicit), this) ??\n            $implicit\n        );\n    }\n\n    protected getHovered(hovered: number | null): TuiPoint | null {\n        // This checks for NaN and null too since async pipe returns null before first item\n        return tuiIsPresent(hovered) && Number.isInteger(hovered)\n            ? (this.value[hovered] ?? null)\n            : null;\n    }\n\n    protected getBottom(y: number): number {\n        return (100 * (y - this.y)) / this.height;\n    }\n\n    protected getLeft(x: number): number {\n        return (100 * (x - this.x)) / this.width;\n    }\n\n    protected getOffset(x: number): number {\n        return (100 * ((this.value[x]?.[0] || 0) - this.getX(x))) / this.computeWidth(x);\n    }\n\n    protected onMouseEnter(index: number): void {\n        if (this.hintDirective) {\n            this.hintDirective.raise(index, this);\n        } else {\n            this.onHovered(index);\n        }\n    }\n\n    private get isSinglePoint(): boolean {\n        return this.value.length === 1;\n    }\n\n    @tuiPure\n    private getD(value: readonly TuiPoint[], smoothingFactor: number): string {\n        return value.reduce(\n            (d, point, index) =>\n                index ? `${d} ${tuiDraw(value, index, smoothingFactor)}` : `M ${point}`,\n            '',\n        );\n    }\n\n    private computeWidth(index: number): number {\n        return index === this.value.length - 1\n            ? 2 * ((this.value[index]?.[0] || 0) - this.getX(index))\n            : this.getX(index + 1) - this.getX(index);\n    }\n}\n","<ng-container *tuiLet=\"hovered$ | async as hovered\">\n    <svg\n        focusable=\"false\"\n        height=\"100%\"\n        preserveAspectRatio=\"none\"\n        width=\"100%\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        class=\"t-svg\"\n        [attr.viewBox]=\"viewBox()\"\n    >\n        <defs>\n            <linearGradient\n                x1=\"0\"\n                x2=\"0\"\n                y1=\"1\"\n                y2=\"0\"\n                [attr.id]=\"fillId\"\n            >\n                <stop\n                    offset=\"0%\"\n                    stop-color=\"currentColor\"\n                    stop-opacity=\"0.5\"\n                />\n                <stop\n                    offset=\"100%\"\n                    stop-color=\"currentColor\"\n                    stop-opacity=\"0\"\n                />\n            </linearGradient>\n        </defs>\n        <path\n            stroke=\"none\"\n            [attr.d]=\"fillD\"\n            [attr.fill]=\"fill\"\n        />\n        <path\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            vector-effect=\"non-scaling-stroke\"\n            [attr.d]=\"d\"\n        />\n    </svg>\n    <ng-container *ngIf=\"dots\">\n        <div\n            *ngFor=\"let point of value\"\n            class=\"t-dot\"\n            [style.bottom.%]=\"getBottom(point[1])\"\n            [style.left.%]=\"getLeft(point[0])\"\n        ></div>\n    </ng-container>\n    <ng-container *ngIf=\"hasHints\">\n        <ng-container *ngFor=\"let point of value; let index = index\">\n            <!-- TODO: Fix hint type -->\n            <div\n                *ngIf=\"value.length > 1 || dots\"\n                class=\"t-column\"\n                [class.t-column_hint_hovered]=\"drivers.get(index) | async\"\n                [class.t-column_hovered]=\"hovered === index\"\n                [style.left.%]=\"getLeft(getX(index))\"\n                [style.width.%]=\"getWidth(index)\"\n                [tuiHint]=\"$any(hintDirective?.hint || hintContent)\"\n                [tuiHintContext]=\"{$implicit: getImplicit(point), index: index}\"\n                [tuiHintDescribe]=\"isFocusable ? getHintId(index) : null\"\n                [tuiHintHost]=\"hintHost\"\n                (mouseenter)=\"onMouseEnter(index)\"\n            >\n                <div\n                    class=\"t-line t-line_vertical\"\n                    [style.left.%]=\"getOffset(index)\"\n                ></div>\n                <div\n                    #hintHost\n                    class=\"t-host\"\n                    [id]=\"getHintId(index)\"\n                    [style.bottom.%]=\"getBottom(point[1])\"\n                    [style.left.%]=\"getOffset(index)\"\n                    [tabIndex]=\"isFocusable ? 0 : -1\"\n                ></div>\n            </div>\n            <div\n                *ngIf=\"isFocusable\"\n                class=\"t-line t-line_horizontal\"\n                [style.bottom.%]=\"getBottom(point[1])\"\n            ></div>\n        </ng-container>\n    </ng-container>\n    <ng-container *ngIf=\"getHovered(hovered) as point\">\n        <div\n            *ngIf=\"xStringify\"\n            class=\"t-hint t-hint_x\"\n            [style.left.%]=\"getLeft(point[0])\"\n        >\n            {{ xStringify(point[0]) }}\n        </div>\n        <div\n            *ngIf=\"yStringify\"\n            class=\"t-hint t-hint_y\"\n            [style.bottom.%]=\"getBottom(point[1])\"\n        >\n            {{ yStringify(point[1]) }}\n        </div>\n    </ng-container>\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}