{"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 {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\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, tuiLineChartOptionsProvider] = tuiCreateOptions(\n    TUI_LINE_CHART_DEFAULT_OPTIONS,\n);\n","import {\n    type AfterViewInit,\n    computed,\n    contentChildren,\n    DestroyRef,\n    Directive,\n    ElementRef,\n    inject,\n    input,\n    NgZone,\n    Renderer2,\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\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 {\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    selector: '[tuiLineChartHint]',\n    providers: [TuiHoveredService],\n})\nexport class TuiLineChartHint implements AfterViewInit {\n    private readonly charts = contentChildren(TuiLineChart);\n    private readonly chartsRef = contentChildren(TuiLineChart, {read: ElementRef});\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    private readonly computedContext = computed<ReadonlyArray<readonly TuiPoint[]>>(\n        (values = this.charts().map(({value}) => value())) =>\n            (values[0] || []).map((_, index) =>\n                values.map((value) => value[index] ?? [0, 0]),\n            ),\n    );\n\n    public readonly hint = input<PolymorpheusContent<TuiContext<readonly TuiPoint[]>>>(\n        '',\n        {alias: 'tuiLineChartHint'},\n    );\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(Number.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.computedContext()[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\nexport function tuiLineChartDrivers(\n    charts: ReadonlyArray<{drivers$: Observable<ReadonlyArray<Observable<boolean>>>}>,\n): Observable<boolean> {\n    return combineLatest(\n        charts.map(({drivers$}) =>\n            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} from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    inject,\n    input,\n    signal,\n    viewChildren,\n} from '@angular/core';\nimport {toObservable, toSignal} from '@angular/core/rxjs-interop';\nimport {WaResizeObserverService} from '@ng-web-apis/resize-observer';\nimport {TuiChartHint} from '@taiga-ui/addon-charts/components/chart-hint';\nimport {type TuiLineChartHintContext} from '@taiga-ui/addon-charts/types';\nimport {tuiDraw} from '@taiga-ui/addon-charts/utils';\nimport {type TuiStringHandler} from '@taiga-ui/cdk/types';\nimport {tuiGenerateId, tuiIsPresent} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TuiHint, TuiHintHover, tuiHintOptionsProvider} from '@taiga-ui/core/portals/hint';\nimport {type TuiPoint} from '@taiga-ui/core/types';\nimport {type PolymorpheusContent} from '@taiga-ui/polymorpheus';\nimport {filter, map} from 'rxjs';\n\nimport {TUI_LINE_CHART_OPTIONS} from './line-chart.options';\nimport {TuiLineChartHint} from './line-chart-hint.directive';\n\n@Component({\n    selector: 'tui-line-chart',\n    imports: [AsyncPipe, TuiHint],\n    templateUrl: './line-chart.template.html',\n    styleUrl: './line-chart.style.less',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [WaResizeObserverService],\n    viewProviders: [tuiHintOptionsProvider({direction: 'top', hideDelay: 0})],\n    host: {'(mouseleave)': 'onMouseLeave()'},\n})\nexport class TuiLineChart {\n    private readonly options = inject(TUI_LINE_CHART_OPTIONS);\n    private readonly autoId = tuiGenerateId();\n    private readonly resize = toSignal(\n        inject(WaResizeObserverService, {self: true}).pipe(\n            map(([e]) => e?.contentRect.height || Number.NaN),\n            filter((height) => !Number.isNaN(height)),\n        ),\n        {initialValue: Number.NaN},\n    );\n\n    private readonly box = computed(\n        () => `${this.x()} ${this.y()} ${this.width()} ${this.height()}`,\n    );\n\n    protected readonly hintDirective = inject(TuiLineChartHint, {optional: true});\n    protected readonly hintOptions = inject(TuiChartHint, {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    protected readonly d = computed(() =>\n        this.value().reduce(\n            (d, point, index) =>\n                index\n                    ? `${d} ${tuiDraw(this.value(), index, this.smoothingFactor())}`\n                    : `M ${point}`,\n            '',\n        ),\n    );\n\n    protected readonly fillD = computed(() =>\n        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    public readonly drivers = viewChildren(TuiHintHover);\n    public readonly drivers$ = toObservable(this.drivers);\n\n    public readonly x = input(0);\n    public readonly y = input(0);\n    public readonly width = input(0);\n    public readonly height = input(0);\n    public readonly smoothingFactor = input(this.options.smoothingFactor);\n\n    public readonly xStringify = input<TuiStringHandler<number> | null>(null);\n    public readonly yStringify = input<TuiStringHandler<number> | null>(null);\n\n    public readonly filled = input(this.options.filled);\n    public readonly dots = input(this.options.dots);\n\n    public readonly value = input<readonly TuiPoint[], readonly TuiPoint[]>([], {\n        transform: (value) => value.filter((item) => !item.some(Number.isNaN)),\n    });\n\n    public readonly hovered = signal(Number.NaN);\n\n    public onHovered(index: number): void {\n        this.hovered.set(index);\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 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(Number.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 (\n            (100 * ((this.value()[x]?.[0] || 0) - this.getX(x))) / this.computeWidth(x)\n        );\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    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","<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@if (dots()) {\n    @for (point of value(); track point) {\n        <div\n            class=\"t-dot\"\n            [style.inset-block-end.%]=\"getBottom(point[1])\"\n            [style.inset-inline-start.%]=\"getLeft(point[0])\"\n        ></div>\n    }\n}\n@if (hasHints) {\n    @for (point of value(); track point) {\n        <!-- TODO: Fix hint type -->\n        @if ($count > 1 || dots()) {\n            <div\n                class=\"t-column\"\n                [class.t-column_hint_hovered]=\"drivers()[$index] | async\"\n                [class.t-column_hovered]=\"hovered() === $index\"\n                [style.inset-inline-start.%]=\"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.inset-inline-start.%]=\"getOffset($index)\"\n                ></div>\n                <div\n                    #hintHost\n                    class=\"t-host\"\n                    [id]=\"getHintId($index)\"\n                    [style.inset-block-end.%]=\"getBottom(point[1])\"\n                    [style.inset-inline-start.%]=\"getOffset($index)\"\n                    [tabIndex]=\"isFocusable ? 0 : -1\"\n                ></div>\n            </div>\n        }\n        @if (isFocusable) {\n            <div\n                class=\"t-line t-line_horizontal\"\n                [style.inset-block-end.%]=\"getBottom(point[1])\"\n            ></div>\n        }\n    }\n}\n@if (getHovered(hovered()); as point) {\n    @let xString = xStringify();\n    @let yString = yStringify();\n    @if (xString) {\n        <div\n            class=\"t-hint t-hint_x\"\n            [style.inset-inline-start.%]=\"getLeft(point[0])\"\n        >\n            {{ xString(point[0]) }}\n        </div>\n    }\n    @if (yString) {\n        <div\n            class=\"t-hint t-hint_y\"\n            [style.inset-block-end.%]=\"getBottom(point[1])\"\n        >\n            {{ yString(point[1]) }}\n        </div>\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}