{"version":3,"file":"taiga-ui-cdk-directives-native-validator.mjs","sources":["../../../projects/cdk/directives/native-validator/native-validator.directive.ts","../../../projects/cdk/directives/native-validator/taiga-ui-cdk-directives-native-validator.ts"],"sourcesContent":["import {DOCUMENT} from '@angular/common';\nimport {Directive, effect, inject, input} from '@angular/core';\nimport {type AbstractControl, NgControl} from '@angular/forms';\nimport {tuiTakeUntilDestroyed, tuiZonefree} from '@taiga-ui/cdk/observables';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {delay, of, startWith, switchMap, timer} from 'rxjs';\n\n@Directive({\n    selector: '[tuiNativeValidator]',\n    host: {'(focusout)': 'handleValidation()'},\n})\nexport class TuiNativeValidator {\n    private readonly el = tuiInjectElement<HTMLInputElement>();\n    private readonly doc = inject(DOCUMENT);\n    private readonly ngControl = inject(NgControl, {self: true, optional: true});\n\n    protected readonly sub = timer(0) // https://github.com/angular/angular/issues/54418\n        .pipe(\n            switchMap(() => this.control?.events?.pipe(startWith(null)) ?? of(null)),\n            delay(0),\n            tuiZonefree(),\n            tuiTakeUntilDestroyed(),\n        )\n        .subscribe(() => this.handleValidation());\n\n    /**\n     * There is no `InteropNgControl.events` for signal forms\n     * Their `InteropNgControl` state (getters `touched` / `invalid`) is backed by signals,\n     * so the effect tracks it instead\n     */\n    protected readonly ref = effect(() => this.handleValidation());\n\n    public readonly tuiNativeValidator = input('Invalid');\n    public id = '';\n\n    public get control(): AbstractControl | null {\n        return this.ngControl?.control ?? null;\n    }\n\n    protected handleValidation(): void {\n        const invalid = !!this.control?.touched && this.control?.invalid;\n\n        // TODO: Replace with :has(:invalid) when supported\n        this.el.closest('tui-textfield')?.classList.toggle('tui-invalid', invalid);\n        this.el.setCustomValidity?.(invalid ? this.tuiNativeValidator() : '');\n        this.el.setAttribute('aria-invalid', String(invalid));\n\n        if (!this.id && invalid) {\n            this.doc.dispatchEvent(new CustomEvent('tui-validator', {detail: this}));\n            this.el.setAttribute('aria-describedby', this.id);\n        }\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;MAWa,kBAAkB,CAAA;AAJ/B,IAAA,WAAA,GAAA;QAKqB,IAAA,CAAA,EAAE,GAAG,gBAAgB,EAAoB;AACzC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AAEzD,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AAC5B,aAAA,IAAI,CACD,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EACxE,KAAK,CAAC,CAAC,CAAC,EACR,WAAW,EAAE,EACb,qBAAqB,EAAE;aAE1B,SAAS,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAE7C;;;;AAIG;QACgB,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAE9C,QAAA,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAC,SAAS,CAAC;QAC9C,IAAA,CAAA,EAAE,GAAG,EAAE;AAmBjB,IAAA;AAjBG,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,OAAO,IAAI,IAAI;IAC1C;IAEU,gBAAgB,GAAA;AACtB,QAAA,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO;;AAGhE,QAAA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC;AAC1E,QAAA,IAAI,CAAC,EAAE,CAAC,iBAAiB,GAAG,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC;AACrE,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAErD,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE;AACrB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,eAAe,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;YACxE,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAAC;QACrD;IACJ;+GAxCS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,IAAI,EAAE,EAAC,YAAY,EAAE,oBAAoB,EAAC;AAC7C,iBAAA;;;ACVD;;AAEG;;;;"}