{"version":3,"file":"taiga-ui-kit-components-pincode.mjs","sources":["../../../projects/kit/components/pincode/pincode-content.component.ts","../../../projects/kit/components/pincode/pincode-content.template.html","../../../projects/kit/components/pincode/pincode.component.ts","../../../projects/kit/components/pincode/pincode.ts","../../../projects/kit/components/pincode/taiga-ui-kit-components-pincode.ts"],"sourcesContent":["import {\n    ChangeDetectionStrategy,\n    Component,\n    inject,\n    ViewEncapsulation,\n} from '@angular/core';\n\nimport {TuiPincodeComponent} from './pincode.component';\n\n@Component({\n    selector: 'tui-pincode-content',\n    templateUrl: './pincode-content.template.html',\n    styleUrl: './pincode.style.less',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        'aria-hidden': 'true',\n        '[style.--t-length]': 'pincode.maxLength()',\n        '(animationend)': 'pincode.onAnimationEnd($event)',\n        '(animationstart)': 'pincode.onAnimationStart($event)',\n    },\n})\nexport class TuiPincodeContent {\n    protected readonly pincode = inject(TuiPincodeComponent);\n}\n","@for (_ of '-'.repeat(pincode.maxLength()); track $index) {\n    <span\n        class=\"t-item\"\n        [class.t-item_filled]=\"pincode.value()[$index]\"\n        [class.t-item_focus]=\"pincode.isFocused($index)\"\n        [style.--t-index]=\"$index\"\n        (pointerdown.prevent)=\"pincode.el.focus()\"\n    >\n        <span class=\"t-dot t-dot_placeholder\"></span>\n        <span class=\"t-dot t-dot_value\"></span>\n        <span class=\"t-value\">{{ pincode.el.type === 'password' ? '' : pincode.value()[$index] }}</span>\n    </span>\n}\n","import {computed, Directive, effect, inject, input, output, signal} from '@angular/core';\nimport {MaskitoDirective} from '@maskito/angular';\nimport {maskitoCaretGuard} from '@maskito/kit';\nimport {TuiControl} from '@taiga-ui/cdk/classes';\nimport {tuiFallbackValueProvider} from '@taiga-ui/cdk/tokens';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiFocusedIn} from '@taiga-ui/cdk/utils/focus';\nimport {tuiIsPresent} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {\n    tuiAsTextfieldContent,\n    TuiTextfieldComponent,\n    TuiTextfieldContent,\n} from '@taiga-ui/core/components/textfield';\nimport {tuiMaskito} from '@taiga-ui/kit/utils';\n\nimport {TuiPincodeContent} from './pincode-content.component';\n\nconst ANIMATION = {\n    confirmed: 'tuiPincodeDotIn',\n    collapsed: 'tuiPincodeDotCollapseScale',\n    rejected: 'tuiPincodeScale',\n} as const;\n\n@Directive({\n    selector: 'input[tuiPincode]',\n    providers: [\n        tuiAsTextfieldContent(() => TuiPincodeContent),\n        tuiFallbackValueProvider(''),\n    ],\n    hostDirectives: [MaskitoDirective, TuiTextfieldContent],\n    host: {\n        autocomplete: 'one-time-code',\n        inputmode: 'numeric',\n        spellcheck: 'false',\n        '[attr.data-state]': 'state()',\n        '[class._paste]': 'paste()',\n        '[maxLength]': 'maxLength()',\n        '[value]': 'value()',\n        '(input)': 'onInput($event.target.value)',\n    },\n})\nexport class TuiPincodeComponent extends TuiControl<string> {\n    private readonly textfield = inject(TuiTextfieldComponent);\n    private phase = 0;\n    private bounced = false;\n\n    // TODO(v6): use only `this.textfield.invalid()`\n    private readonly manualInvalid = computed(\n        () => this.textfield.invalid() ?? (this.field() ? null : this.pseudoInvalid()),\n    );\n\n    public readonly el = tuiInjectElement<HTMLInputElement>();\n    public readonly paste = signal(false);\n    public readonly focused = tuiFocusedIn(this.el);\n\n    protected readonly maskito = tuiMaskito({\n        mask: /^\\d+$/,\n        overwriteMode: 'replace',\n        plugins: [maskitoCaretGuard((value) => [value.length, value.length])],\n        postprocessors: [(newState, initial) => (this.state() ? initial : newState)],\n    });\n\n    public readonly maxLength = input(4, {\n        transform: (maxLength: number | undefined) => maxLength ?? 4,\n    });\n\n    public readonly confirmed = output();\n    public readonly finished = output();\n\n    protected readonly state = computed<'invalid' | 'pending' | 'success' | null>(() => {\n        if (tuiIsPresent(this.manualInvalid())) {\n            return this.manualInvalid() ? 'invalid' : 'success';\n        }\n\n        return this.value().length === this.maxLength() ? 'pending' : null;\n    });\n\n    protected readonly effect = effect(() => {\n        this.bounced = false;\n        this.phase = tuiIsPresent(this.manualInvalid()) ? this.value().length : 0;\n    });\n\n    public onAnimationStart({animationName}: AnimationEvent): void {\n        if (animationName === ANIMATION.confirmed && !this.bounced) {\n            this.bounced = true;\n            this.confirmed.emit();\n        }\n    }\n\n    public onAnimationEnd({animationName}: AnimationEvent): void {\n        const isCollapse = animationName === ANIMATION.collapsed;\n        const isReject = animationName === ANIMATION.rejected;\n\n        if ((!isReject && !isCollapse) || --this.phase) {\n            return;\n        }\n\n        if (isReject) {\n            this.onChange('');\n        }\n\n        this.finished.emit();\n    }\n\n    public isFocused(index: number): boolean {\n        return (\n            this.focused() &&\n            index === Math.min(this.value().length, this.maxLength() - 1)\n        );\n    }\n\n    protected onInput(value: string): void {\n        this.paste.set(!this.value().length && value.length === this.maxLength());\n        this.onChange(value);\n    }\n}\n","import {TuiLabel} from '@taiga-ui/core/components/label';\nimport {\n    TuiTextfieldComponent,\n    TuiTextfieldOptionsDirective,\n} from '@taiga-ui/core/components/textfield';\n\nimport {TuiPincodeComponent} from './pincode.component';\n\nexport const TuiPincode = [\n    TuiPincodeComponent,\n    TuiLabel,\n    TuiTextfieldComponent,\n    TuiTextfieldOptionsDirective,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}