{"version":3,"file":"taiga-ui-cdk-directives-auto-focus.mjs","sources":["../../../projects/cdk/directives/auto-focus/handlers/abstract.handler.ts","../../../projects/cdk/directives/auto-focus/handlers/default.handler.ts","../../../projects/cdk/directives/auto-focus/handlers/ios.handler.ts","../../../projects/cdk/directives/auto-focus/autofocus.options.ts","../../../projects/cdk/directives/auto-focus/autofocus.directive.ts","../../../projects/cdk/directives/auto-focus/handlers/sync.handler.ts","../../../projects/cdk/directives/auto-focus/taiga-ui-cdk-directives-auto-focus.ts"],"sourcesContent":["import {type ElementRef} from '@angular/core';\n\nimport {type TuiAutofocusHandler, type TuiAutofocusOptions} from '../autofocus.options';\n\nexport abstract class AbstractTuiAutofocusHandler implements TuiAutofocusHandler {\n    constructor(\n        protected readonly el: ElementRef<HTMLElement>,\n        protected readonly options: TuiAutofocusOptions,\n    ) {}\n\n    public abstract setFocus(): void;\n\n    protected get element(): HTMLElement {\n        return (\n            this.el.nativeElement.querySelector<HTMLElement>(this.options.query) ??\n            this.el.nativeElement\n        );\n    }\n\n    protected get isTextFieldElement(): boolean {\n        return this.element.matches(this.options.query);\n    }\n}\n","import {type ElementRef, type NgZone} from '@angular/core';\nimport {tuiZonefreeScheduler} from '@taiga-ui/cdk/observables';\nimport {map, type Observable, race, skipWhile, take, throttleTime, timer} from 'rxjs';\n\nimport {type TuiAutofocusOptions} from '../autofocus.options';\nimport {AbstractTuiAutofocusHandler} from './abstract.handler';\n\nconst TIMEOUT = 1000;\nconst NG_ANIMATION_SELECTOR = '.ng-animating';\n\nexport class TuiDefaultAutofocusHandler extends AbstractTuiAutofocusHandler {\n    constructor(\n        el: ElementRef<HTMLElement>,\n        private readonly animationFrame$: Observable<number>,\n        private readonly zone: NgZone,\n        options: TuiAutofocusOptions,\n    ) {\n        super(el, options);\n    }\n\n    public setFocus(): void {\n        if (this.isTextFieldElement) {\n            race(\n                timer(this.options.delay || TIMEOUT),\n                this.animationFrame$.pipe(\n                    throttleTime(100, tuiZonefreeScheduler(this.zone)),\n                    map(() => this.element.closest(NG_ANIMATION_SELECTOR)),\n                    skipWhile(Boolean),\n                    take(1),\n                ),\n            ).subscribe(() =>\n                this.element.focus({preventScroll: this.options.preventScroll}),\n            );\n        } else {\n            this.element.focus({preventScroll: true});\n        }\n    }\n}\n","import {type ElementRef, type NgZone, type Renderer2} from '@angular/core';\nimport {tuiIsPresent, tuiPx} from '@taiga-ui/cdk/utils/miscellaneous';\n\nimport {type TuiAutofocusOptions} from '../autofocus.options';\nimport {AbstractTuiAutofocusHandler} from './abstract.handler';\n\nconst TEXTFIELD_ATTRS = [\n    'type',\n    'inputMode',\n    'autocomplete',\n    'accept',\n    'min',\n    'max',\n    'step',\n    'pattern',\n    'size',\n    'maxlength',\n] as const;\n\nexport class TuiIosAutofocusHandler extends AbstractTuiAutofocusHandler {\n    constructor(\n        el: ElementRef<HTMLElement>,\n        private readonly renderer: Renderer2,\n        private readonly zone: NgZone,\n        private readonly win: Window,\n        options: TuiAutofocusOptions,\n    ) {\n        super(el, options);\n    }\n\n    public setFocus(): void {\n        if (this.isTextFieldElement) {\n            this.zone.runOutsideAngular(() => this.iosWebkitAutofocus());\n        } else {\n            this.element.focus({preventScroll: true});\n        }\n    }\n\n    private iosWebkitAutofocus(): void {\n        const fakeInput = this.makeFakeInput();\n        const duration = this.getDurationTimeBeforeFocus();\n        let fakeFocusTimeoutId = 0;\n        let elementFocusTimeoutId = 0;\n\n        const blurHandler = (): void => fakeInput.focus({preventScroll: true});\n        const focusHandler = (): void => {\n            clearTimeout(fakeFocusTimeoutId);\n\n            fakeFocusTimeoutId = this.win.setTimeout(() => {\n                clearTimeout(elementFocusTimeoutId);\n\n                fakeInput.removeEventListener('blur', blurHandler);\n                fakeInput.removeEventListener('focus', focusHandler);\n\n                elementFocusTimeoutId = this.win.setTimeout(() => {\n                    this.element.focus({preventScroll: this.options.preventScroll});\n                    fakeInput.remove();\n                }, duration);\n            });\n        };\n\n        fakeInput.addEventListener('blur', blurHandler, {once: true});\n        fakeInput.addEventListener('focus', focusHandler);\n\n        if (this.insideDialog()) {\n            this.win.document.body.appendChild(fakeInput);\n        } else {\n            this.element.parentElement?.appendChild(fakeInput);\n        }\n\n        fakeInput.focus({preventScroll: true});\n    }\n\n    /**\n     * @note:\n     * emulate textfield position in layout with cursor\n     * before focus to real textfield element\n     *\n     * required note:\n     * [fakeInput.readOnly = true] ~\n     * don't use {readOnly: true} value, it's doesn't work for emulate autofill\n     *\n     * [fakeInput.style.opacity = 0] ~\n     * don't use {opacity: 0}, sometimes it's doesn't work for emulate real input\n     *\n     * [fakeInput.style.fontSize = 16px] ~\n     * disable possible auto zoom\n     *\n     * [fakeInput.style.top/left] ~\n     * emulate position cursor before focus to real textfield element\n     */\n    private makeFakeInput(): HTMLInputElement {\n        const fakeInput: HTMLInputElement = this.renderer.createElement('input');\n        const rect = this.element.getBoundingClientRect();\n\n        this.patchFakeInputFromFocusableElement(fakeInput);\n\n        fakeInput.style.height = tuiPx(rect.height);\n        fakeInput.style.width = tuiPx(rect.width / 2);\n        fakeInput.style.position = 'fixed';\n        fakeInput.style.zIndex = '-99999999';\n        fakeInput.style.caretColor = 'transparent';\n        fakeInput.style.border = 'none';\n        fakeInput.style.outline = 'none';\n        fakeInput.style.color = 'transparent';\n        fakeInput.style.background = 'transparent';\n        fakeInput.style.cursor = 'none';\n        fakeInput.style.fontSize = tuiPx(16);\n        fakeInput.style.top = tuiPx(rect.top);\n        fakeInput.style.left = tuiPx(rect.left);\n\n        return fakeInput;\n    }\n\n    private getDurationTimeBeforeFocus(): number {\n        return (\n            Number.parseFloat(\n                this.win\n                    .getComputedStyle(this.element)\n                    .getPropertyValue('--tui-duration'),\n            ) || 0\n        );\n    }\n\n    /**\n     * @note:\n     * unfortunately, in older versions of iOS\n     * there is a bug that the fake input cursor\n     * will move along with the dialog animation\n     * and then that dialog will be shaking\n     */\n    private insideDialog(): boolean {\n        return !!this.element.closest('tui-dialog');\n    }\n\n    /**\n     * @note:\n     * inherit basic attributes values from real input\n     * for help iOS detect what do you want see on keyboard,\n     * for example [inputMode=numeric, autocomplete=cc-number]\n     */\n    private patchFakeInputFromFocusableElement(fakeInput: HTMLInputElement): void {\n        TEXTFIELD_ATTRS.forEach((attr) => {\n            const value = this.element.getAttribute(attr);\n\n            if (tuiIsPresent(value)) {\n                fakeInput.setAttribute(attr, value);\n            }\n        });\n    }\n}\n","import {ElementRef, InjectionToken, NgZone, Renderer2} from '@angular/core';\nimport {WA_ANIMATION_FRAME, WA_WINDOW} from '@ng-web-apis/common';\nimport {WA_IS_IOS} from '@ng-web-apis/platform';\nimport {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\nimport {type Observable} from 'rxjs';\n\nimport {TuiDefaultAutofocusHandler} from './handlers/default.handler';\nimport {TuiIosAutofocusHandler} from './handlers/ios.handler';\n\nexport interface TuiAutofocusHandler {\n    setFocus(): void;\n}\n\nexport interface TuiAutofocusOptions {\n    readonly delay: number;\n    readonly query: string;\n    readonly preventScroll: boolean;\n}\n\nexport const [TUI_AUTOFOCUS_OPTIONS, tuiAutoFocusOptionsProvider] =\n    tuiCreateOptions<TuiAutofocusOptions>({\n        delay: Number.NaN, // NaN = no delay/sync\n        query: 'input, textarea, select, [contenteditable]',\n        preventScroll: false,\n    });\n\nexport const TUI_AUTOFOCUS_HANDLER = new InjectionToken<TuiAutofocusHandler>(\n    ngDevMode ? 'TUI_AUTOFOCUS_HANDLER' : '',\n);\n\nexport const TUI_AUTOFOCUS_PROVIDERS = [\n    {\n        provide: TUI_AUTOFOCUS_HANDLER,\n        deps: [\n            ElementRef,\n            WA_ANIMATION_FRAME,\n            Renderer2,\n            NgZone,\n            WA_WINDOW,\n            WA_IS_IOS,\n            TUI_AUTOFOCUS_OPTIONS,\n        ],\n        // eslint-disable-next-line @typescript-eslint/max-params,max-params\n        useFactory: (\n            el: ElementRef<HTMLElement>,\n            animationFrame$: Observable<number>,\n            renderer: Renderer2,\n            zone: NgZone,\n            win: Window,\n            isIos: boolean,\n            options: TuiAutofocusOptions,\n        ) =>\n            isIos\n                ? new TuiIosAutofocusHandler(el, renderer, zone, win, options)\n                : new TuiDefaultAutofocusHandler(el, animationFrame$, zone, options),\n    },\n];\n","import {type BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {type AfterViewInit, DestroyRef, Directive, inject, input} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {timer} from 'rxjs';\n\nimport {\n    TUI_AUTOFOCUS_HANDLER,\n    TUI_AUTOFOCUS_OPTIONS,\n    TUI_AUTOFOCUS_PROVIDERS,\n} from './autofocus.options';\n\n@Directive({\n    selector: '[tuiAutoFocus]',\n    providers: TUI_AUTOFOCUS_PROVIDERS,\n})\nexport class TuiAutoFocus implements AfterViewInit {\n    private readonly handler = inject(TUI_AUTOFOCUS_HANDLER);\n    private readonly options = inject(TUI_AUTOFOCUS_OPTIONS);\n    private readonly destroyRef = inject(DestroyRef);\n\n    public readonly autoFocus = input<BooleanInput, any>(undefined, {\n        alias: 'tuiAutoFocus',\n        transform: coerceBooleanProperty,\n    });\n\n    public ngAfterViewInit(): void {\n        if (this.autoFocus()) {\n            this.focus();\n        }\n    }\n\n    public focus(): void {\n        if (Number.isNaN(this.options.delay)) {\n            void Promise.resolve().then(() => this.handler.setFocus());\n        } else {\n            timer(this.options.delay)\n                .pipe(takeUntilDestroyed(this.destroyRef))\n                .subscribe(() => this.handler.setFocus());\n        }\n    }\n}\n","import {AbstractTuiAutofocusHandler} from './abstract.handler';\n\nexport class TuiSynchronousAutofocusHandler extends AbstractTuiAutofocusHandler {\n    public setFocus(): void {\n        this.element.focus({preventScroll: true});\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}