{"version":3,"file":"taiga-ui-core-components-input.mjs","sources":["../../../projects/core/components/input/input.directive.ts","../../../projects/core/components/input/input.ts","../../../projects/core/components/input/taiga-ui-core-components-input.ts"],"sourcesContent":["import {computed, Directive, effect, inject, INJECTOR, input} from '@angular/core';\nimport {NgControl} from '@angular/forms';\nimport {TuiControl} from '@taiga-ui/cdk/classes';\nimport {TuiId} from '@taiga-ui/cdk/directives/id';\nimport {TuiNativeValidator} from '@taiga-ui/cdk/directives/native-validator';\nimport {tuiInjectFormField} from '@taiga-ui/cdk/utils/di';\nimport {tuiInjectElement, tuiValue} from '@taiga-ui/cdk/utils/dom';\nimport {\n    TUI_TEXTFIELD_OPTIONS,\n    tuiAsTextfieldAccessor,\n    type TuiTextfieldAccessor,\n    TuiTextfieldComponent,\n} from '@taiga-ui/core/components/textfield';\nimport {\n    tuiAppearance,\n    tuiAppearanceFocus,\n    tuiAppearanceMode,\n    tuiAppearanceState,\n} from '@taiga-ui/core/directives/appearance';\nimport {\n    TUI_ITEMS_HANDLERS,\n    type TuiItemsHandlers,\n} from '@taiga-ui/core/directives/items-handlers';\nimport {TuiDropdownDirective} from '@taiga-ui/core/portals/dropdown';\nimport {type TuiInteractiveState} from '@taiga-ui/core/types';\n\n@Directive({\n    selector: 'input[tuiInput]',\n    providers: [tuiAsTextfieldAccessor(TuiInputDirective)],\n    hostDirectives: [TuiNativeValidator, TuiId],\n    host: {\n        tuiInput: '',\n        '[attr.role]': 'dropdown.content() && !el.matches(\"select\") ? \"combobox\" : null',\n        '[class._empty]': 'value() === \"\"',\n        '[class._untouched]': 'control?.untouched',\n        '[readOnly]': 'readOnly()',\n        '(focusin)': '0',\n        '(focusout)': '0',\n        '(input)': '0',\n    },\n})\nexport class TuiInputDirective<T> implements TuiTextfieldAccessor<T> {\n    private readonly field = tuiInjectFormField({self: true, optional: true});\n    private readonly computedInvalid = computed(\n        () => this.textfield.invalid() ?? (this.field() ? null : this.invalid()),\n    );\n\n    protected readonly el = tuiInjectElement<HTMLInputElement>();\n    protected readonly control = inject(NgControl, {optional: true});\n    protected readonly handlers: TuiItemsHandlers<T> = inject(TUI_ITEMS_HANDLERS);\n    protected readonly textfield = inject(TuiTextfieldComponent);\n    protected readonly dropdown = inject(TuiDropdownDirective);\n    protected readonly a = tuiAppearance(inject(TUI_TEXTFIELD_OPTIONS).appearance);\n    protected readonly m = tuiAppearanceMode(computed(() => this.mode()));\n    protected readonly s = tuiAppearanceState(\n        computed(() => this.state() ?? this.textfield.tuiAppearanceState()),\n    );\n\n    // TODO(v6): move to {@link TuiTextfieldComponent}\n    protected readonly f = tuiAppearanceFocus(\n        computed(\n            () =>\n                this.focused() ??\n                this.textfield.tuiAppearanceFocus() ??\n                this.textfield.focused(),\n        ),\n    );\n\n    /**\n     * @deprecated use `<input [readonly]=\"...\" />` instead\n     * TODO(v6): delete\n     */\n    public readonly readOnlyLegacy = input(false, {alias: 'readOnly'});\n    /**\n     * TODO(v6): delete, it's only for backward compatibility\n     */\n    public readonly readOnly = computed(() => this.readonly() || this.readOnlyLegacy());\n    public readonly readonly = input(false);\n\n    /**\n     * @deprecated use `<tui-textfield [invalid]=\"...\" />` instead\n     * TODO(v6): delete\n     */\n    public readonly invalid = input<boolean | null>(null);\n\n    /**\n     * @deprecated use `<tui-textfield [tuiAppearanceFocus]=\"...\" />` instead\n     * TODO(v6): delete\n     */\n    public readonly focused = input<boolean | null>(null);\n\n    /**\n     * @deprecated use `<tui-textfield [tuiAppearanceState]=\"...\" />` instead\n     * TODO(v6): delete\n     */\n    public readonly state = input<TuiInteractiveState | null>(null);\n    public readonly value = tuiValue(this.el);\n    public readonly mode = computed<string | null>(() => {\n        const invalid = this.computedInvalid();\n\n        if (this.readOnly()) {\n            return 'readonly';\n        }\n\n        if (invalid === false) {\n            return 'valid';\n        }\n\n        return invalid ? 'invalid' : null;\n    });\n\n    /**\n     * Temporary workaround until TuiControl has deprecated `pseudoInvalid = input(..., {alias: 'invalid'})` property\n     * We cannot inject `TuiTextfieldComponent` (@taiga-ui/core) inside `TuiControl` (`@taiga-ui/cdk`)\n     * TODO(v6): remove all logic inside constructor\n     */\n    constructor() {\n        const injector = inject(INJECTOR);\n\n        effect(() => {\n            const control = injector.get(TuiControl, null, {self: true});\n\n            control?.externalInvalid.set(this.textfield.invalid());\n        });\n    }\n\n    public setValue(value: T | null): void {\n        this.el.focus();\n        this.el.select();\n\n        if (value == null) {\n            this.el.ownerDocument.execCommand('delete');\n\n            // see https://github.com/taiga-family/taiga-ui/issues/11634\n            // ensure non-erasable affixes actually deleted\n            this.el.value = '';\n        } else {\n            this.el.ownerDocument.execCommand(\n                'insertText',\n                false,\n                this.handlers.stringify()(value),\n            );\n        }\n    }\n}\n\n@Directive({\n    hostDirectives: [\n        {\n            directive: TuiInputDirective,\n            inputs: ['invalid', 'focused', 'readOnly', 'readonly', 'state'],\n        },\n    ],\n})\nexport class TuiWithInput {}\n","import {TuiLabel} from '@taiga-ui/core/components/label';\nimport {\n    TuiTextfieldComponent,\n    TuiTextfieldOptionsDirective,\n} from '@taiga-ui/core/components/textfield';\nimport {TuiDropdownContent} from '@taiga-ui/core/portals/dropdown';\n\nimport {TuiInputDirective} from './input.directive';\n\nexport const TuiInput = [\n    TuiLabel,\n    TuiTextfieldComponent,\n    TuiTextfieldOptionsDirective,\n    TuiDropdownContent,\n    TuiInputDirective,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}