{"version":3,"file":"taiga-ui-kit-components-stepper.mjs","sources":["../../../projects/kit/components/stepper/stepper.component.ts","../../../projects/kit/components/stepper/step.component.ts","../../../projects/kit/components/stepper/step.template.html","../../../projects/kit/components/stepper/stepper.ts","../../../projects/kit/components/stepper/taiga-ui-kit-components-stepper.ts"],"sourcesContent":["import {\n    ChangeDetectionStrategy,\n    Component,\n    contentChildren,\n    ElementRef,\n    forwardRef,\n    inject,\n    input,\n    model,\n    type OnChanges,\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {WaResizeObserverService} from '@ng-web-apis/resize-observer';\nimport {tuiInjectElement, tuiIsElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiMoveFocus} from '@taiga-ui/cdk/utils/focus';\nimport {type TuiOrientation} from '@taiga-ui/core/types';\n\nimport {TuiStep} from './step.component';\n\n@Component({\n    selector: 'tui-stepper',\n    template: `\n        <ng-content />\n    `,\n    styleUrl: './stepper.style.less',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [WaResizeObserverService],\n    host: {\n        '[attr.data-orientation]': 'orientation()',\n        '(keydown.arrowDown)': 'onVertical($event, 1)',\n        '(keydown.arrowLeft)': 'onHorizontal($event, -1)',\n        '(keydown.arrowRight)': 'onHorizontal($event, 1)',\n        '(keydown.arrowUp)': 'onVertical($event, -1)',\n    },\n})\nexport class TuiStepperComponent implements OnChanges {\n    private readonly el = tuiInjectElement();\n\n    private readonly steps = contentChildren(\n        forwardRef(() => TuiStep),\n        {read: ElementRef},\n    );\n\n    protected readonly $ = inject(WaResizeObserverService, {self: true})\n        .pipe(takeUntilDestroyed())\n        .subscribe(() => this.scrollIntoView(this.activeItemIndex()));\n\n    public readonly orientation = input<TuiOrientation>('horizontal');\n    public readonly activeItemIndex = model(0);\n\n    public ngOnChanges(): void {\n        this.scrollIntoView(this.activeItemIndex());\n    }\n\n    public indexOf(step: HTMLElement): number {\n        const index = this.steps().findIndex(({nativeElement}) => nativeElement === step);\n\n        return index < 0 ? Number.NaN : index;\n    }\n\n    public isActive(index: number): boolean {\n        return index === this.activeItemIndex();\n    }\n\n    public activate(index: number): void {\n        if (this.activeItemIndex() === index) {\n            return;\n        }\n\n        this.activeItemIndex.set(index);\n        this.scrollIntoView(index);\n    }\n\n    protected onHorizontal(event: Event, step: number): void {\n        if (this.orientation() !== 'horizontal' || !event.target) {\n            return;\n        }\n\n        event.preventDefault();\n        this.moveFocus(event.target, step);\n    }\n\n    protected onVertical(event: Event, step: number): void {\n        if (this.orientation() !== 'vertical' || !event.target) {\n            return;\n        }\n\n        event.preventDefault();\n        this.moveFocus(event.target, step);\n    }\n\n    private moveFocus(current: EventTarget, step: number): void {\n        if (!tuiIsElement(current)) {\n            return;\n        }\n\n        const stepElements = this.steps().map(({nativeElement}) => nativeElement);\n        const index = stepElements.findIndex((element) => element === current);\n\n        tuiMoveFocus(index, stepElements, step);\n    }\n\n    private scrollIntoView(index: number): void {\n        const step = this.steps()[index]?.nativeElement;\n\n        if (!step) {\n            return;\n        }\n\n        const {clientHeight, clientWidth, offsetTop, offsetLeft} = this.el;\n\n        const {\n            offsetHeight,\n            offsetWidth,\n            offsetTop: stepOffsetTop,\n            offsetLeft: stepOffsetLeft,\n        } = step;\n\n        const top = stepOffsetTop - offsetTop - clientHeight / 2 + offsetHeight / 2;\n        const left = stepOffsetLeft - offsetLeft - clientWidth / 2 + offsetWidth / 2;\n\n        this.el.scrollTo?.({left: Math.max(0, left), top: Math.max(0, top)});\n    }\n}\n","import {ChangeDetectionStrategy, Component, computed, inject, input} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {RouterLinkActive} from '@angular/router';\nimport {tuiDirectiveBinding} from '@taiga-ui/cdk/utils/di';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {TuiCell} from '@taiga-ui/core/components/cell';\nimport {tuiAppearance, TuiWithAppearance} from '@taiga-ui/core/directives/appearance';\nimport {TUI_COMMON_ICONS} from '@taiga-ui/core/tokens';\nimport {TuiAvatar} from '@taiga-ui/kit/components/avatar';\nimport {EMPTY, filter} from 'rxjs';\n\nimport {TuiStepperComponent} from './stepper.component';\n\n@Component({\n    selector:\n        'button[tuiStep], a[tuiStep]:not([routerLink]), a[tuiStep][routerLink][routerLinkActive]',\n    imports: [TuiAvatar],\n    templateUrl: './step.template.html',\n    styleUrl: './step.style.less',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    hostDirectives: [TuiCell, TuiWithAppearance],\n    host: {\n        type: 'button',\n        '[class._active]': 'isActive()',\n        '[class._vertical]': 'stepper.orientation() === \"vertical\"',\n        '[tabIndex]': 'isActive() ? 0 : -1',\n        '(click)': 'activate()',\n    },\n})\nexport class TuiStep {\n    private readonly el = tuiInjectElement();\n    protected readonly icons = inject(TUI_COMMON_ICONS);\n\n    protected readonly appearance = tuiAppearance(\n        computed(() => (this.isActive() ? 'none' : 'action')),\n    );\n\n    protected readonly size = tuiDirectiveBinding(TuiCell, 'size', 'm');\n    protected readonly stepper = inject(TuiStepperComponent);\n\n    protected readonly $ = (\n        inject(RouterLinkActive, {optional: true})?.isActiveChange.asObservable() ?? EMPTY\n    )\n        .pipe(filter(Boolean), takeUntilDestroyed())\n        .subscribe(() => this.activate());\n\n    public readonly stepState = input<'error' | 'normal' | 'pass'>('normal');\n    public readonly icon = input('');\n\n    protected readonly isActive = computed(\n        () => this.stepper.activeItemIndex() === this.index,\n    );\n\n    protected readonly avatarAppearance = computed(() => {\n        if (this.isActive()) {\n            return 'primary';\n        }\n\n        return this.stepState() === 'error' ? 'negative' : 'secondary';\n    });\n\n    protected readonly avatarContent = computed(() =>\n        this.isActive() || (this.stepState() === 'normal' && !this.icon())\n            ? `${this.index + 1}`\n            : this.avatarIcon(),\n    );\n\n    protected readonly avatarIcon = computed(\n        () =>\n            this.icon() ||\n            (this.stepState() === 'error' ? this.icons.error : this.icons.check),\n    );\n\n    protected get index(): number {\n        return this.stepper.indexOf(this.el);\n    }\n\n    protected activate(): void {\n        this.stepper.activate(this.index);\n    }\n}\n","<div\n    [appearance]=\"avatarAppearance()\"\n    [tuiAvatar]=\"avatarContent()\"\n></div>\n<ng-content />\n","import {TuiStep} from './step.component';\nimport {TuiStepperComponent} from './stepper.component';\n\nexport const TuiStepper = [TuiStepperComponent, TuiStep] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}