{"version":3,"file":"uipath-angular-directives-ui-autofocus.mjs","sources":["../../../projects/angular/directives/ui-autofocus/src/ui-autofocus.directive.ts","../../../projects/angular/directives/ui-autofocus/src/ui-autofocus.module.ts","../../../projects/angular/directives/ui-autofocus/src/uipath-angular-directives-ui-autofocus.ts"],"sourcesContent":["import { merge } from 'rxjs';\nimport {\n    delay,\n    take,\n} from 'rxjs/operators';\n\nimport { InteractivityChecker } from '@angular/cdk/a11y';\nimport {\n    ChangeDetectorRef,\n    Directive,\n    ElementRef,\n    Input,\n    NgZone,\n    OnInit,\n} from '@angular/core';\n\n/**\n * @ignore\n */\nconst ELEMENT_NODE = 1;\n\n/**\n * A directive that autofocuses the decorated element OR the first focusable element inside the decorated element.\n *\n * @export\n */\n@Directive({\n    selector: '[uiAutofocus]',\n})\nexport class UiAutofocusDirective implements OnInit {\n    /**\n     * Configure if the element should be focused.\n     * Defaults to: `true`\n     *\n     */\n    @Input()\n    set uiAutofocus(condition: boolean) {\n        this._autofocus = condition;\n    }\n\n    /**\n     * Set to `true` if the element needs to be refocused.\n     * eg: `[refocus]=\"refocu$ | async\"`\n     *\n     */\n    @Input()\n    set refocus(condition: boolean) {\n        if (condition) {\n            this.enqueueFocus();\n        }\n    }\n\n    /**\n     * Where the selection location should be after the element is focused.\n     *\n     */\n    @Input()\n    selectionLocation: 'start' | 'end' = 'start';\n\n    /**\n     * The decorated `HTMLElement` reference.\n     *\n     */\n    element?: HTMLElement;\n\n    private _autofocus = true;\n\n    /**\n     * @ignore\n     */\n    constructor(\n        private _el: ElementRef,\n        private _zone: NgZone,\n        private _cd: ChangeDetectorRef,\n        private _checker: InteractivityChecker,\n    ) { }\n\n    /**\n     * @ignore\n     */\n    ngOnInit() {\n        this.enqueueFocus();\n    }\n\n    /**\n     * Enqueues a focus event.\n     *\n     */\n    enqueueFocus() {\n        if (this._autofocus) {\n            this._zone.runOutsideAngular(() => {\n                merge(\n                    this._zone.onMicrotaskEmpty,\n                    // IE doesn't play nicely with task empty only\n                    this._zone.onStable,\n                )\n                    .pipe(\n                        take(1),\n                        /* PREVENTS FOCUS TRAPS */\n                        delay(0),\n                    )\n                    .subscribe(() => {\n                        if (!this.element) {\n                            this.element = this._getFocusableNode(this._el.nativeElement);\n                        }\n                        this.focus(this.element);\n                    });\n            });\n        }\n    }\n\n    /**\n     * Focus the `element`.\n     *\n     */\n    focus(element?: HTMLElement) {\n        if (!element) { return; }\n        element.focus();\n\n        if (this._el.nativeElement instanceof HTMLInputElement) {\n            const position = this.selectionLocation === 'start' ?\n                0 :\n                this._el.nativeElement.value.length;\n\n            this._el.nativeElement.setSelectionRange(\n                position,\n                position,\n            );\n        }\n\n        this._cd.detectChanges();\n    }\n\n    private _getFocusableNode(el: HTMLElement): HTMLElement | undefined {\n        if (this._checker.isFocusable(el)) {\n            return el;\n        }\n\n        const children = el.children || el.childNodes;\n        // eslint-disable-next-line @typescript-eslint/prefer-for-of\n        for (let i = 0; i < children.length; i++) {\n            const focusable = children[i].nodeType === ELEMENT_NODE ?\n                this._getFocusableNode(children[i] as HTMLElement) :\n                null;\n\n            if (focusable) {\n                return focusable;\n            }\n        }\n    }\n}\n","import { NgModule } from '@angular/core';\n\nimport { UiAutofocusDirective } from './ui-autofocus.directive';\n\n@NgModule({\n    declarations: [UiAutofocusDirective],\n    exports: [UiAutofocusDirective],\n})\nexport class UiAutofocusModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}