{"version":3,"file":"taiga-ui-layout-components-input-search.mjs","sources":["../../../projects/layout/components/input-search/input-search.component.ts","../../../projects/layout/components/input-search/input-search.component.html","../../../projects/layout/components/input-search/taiga-ui-layout-components-input-search.ts"],"sourcesContent":["import {\n    ChangeDetectionStrategy,\n    Component,\n    type ElementRef,\n    type EmbeddedViewRef,\n    inject,\n    input,\n    model,\n    type OnChanges,\n    TemplateRef,\n    viewChild,\n} from '@angular/core';\nimport {\n    tuiContainsOrAfter,\n    tuiInjectElement,\n    tuiIsElement,\n} from '@taiga-ui/cdk/utils/dom';\nimport {tuiGetClosestFocusable} from '@taiga-ui/cdk/utils/focus';\nimport {tuiCellOptionsProvider} from '@taiga-ui/core/components/cell';\nimport {TuiWithInput} from '@taiga-ui/core/components/input';\nimport {TuiTextfieldComponent} from '@taiga-ui/core/components/textfield';\nimport {tuiIconStart} from '@taiga-ui/core/directives/icons';\nimport {TuiPopupService} from '@taiga-ui/core/portals/popup';\nimport {TUI_COMMON_ICONS} from '@taiga-ui/core/tokens';\nimport {TUI_INPUT_SEARCH} from '@taiga-ui/layout/tokens';\nimport {type PolymorpheusContent, PolymorpheusOutlet} from '@taiga-ui/polymorpheus';\n\n@Component({\n    selector: 'input[tuiInputSearch]',\n    imports: [PolymorpheusOutlet],\n    templateUrl: './input-search.component.html',\n    styleUrl: './input-search.component.less',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [tuiCellOptionsProvider({size: 'm'})],\n    hostDirectives: [TuiWithInput],\n    host: {\n        ngSkipHydration: 'true',\n        '(focus)': 'open()',\n        '(keydown.tab.prevent)': '0',\n        '(keydown.arrowDown.prevent)': 'onArrow()',\n    },\n})\nexport class TuiInputSearch implements OnChanges {\n    private readonly template = viewChild.required(TemplateRef);\n    private readonly container = viewChild<ElementRef<HTMLElement>>('container');\n    private readonly el = tuiInjectElement<HTMLInputElement>();\n    private readonly service = inject(TuiPopupService);\n    private readonly textfield = inject(TuiTextfieldComponent);\n    private readonly i18n = inject(TUI_INPUT_SEARCH);\n    private parent = this.textfield.el.parentElement;\n    private neighbor = this.textfield.el.nextSibling;\n    private placeholder = '';\n    private ref?: EmbeddedViewRef<unknown>;\n\n    protected readonly icon = tuiIconStart(inject(TUI_COMMON_ICONS).search, {});\n\n    public readonly tuiInputSearch = input<PolymorpheusContent>();\n\n    public readonly searchOpen = model(false, {alias: 'tuiInputSearchOpen'});\n\n    public ngOnChanges(): void {\n        if (this.searchOpen()) {\n            this.open();\n        } else {\n            this.close();\n        }\n    }\n\n    public open(): void {\n        if (this.ref?.destroyed === false) {\n            return;\n        }\n\n        this.placeholder = this.el.placeholder;\n        this.parent = this.textfield.el.parentElement;\n        this.neighbor = this.textfield.el.nextSibling;\n        this.ref = this.service.add(this.template());\n        this.ref.rootNodes[0]?.insertAdjacentElement('afterbegin', this.textfield.el);\n        this.el.focus({preventScroll: true});\n        this.el.placeholder = this.i18n()?.placeholder || this.el.placeholder;\n        this.searchOpen.set(true);\n    }\n\n    public close(): void {\n        this.el.placeholder = this.placeholder || this.el.placeholder;\n        this.parent?.insertBefore(this.textfield.el, this.neighbor);\n        this.ref?.destroy();\n        this.searchOpen.set(false);\n    }\n\n    protected onArrow(): void {\n        tuiGetClosestFocusable({\n            initial: this.container()?.nativeElement || this.el,\n            root: this.container()?.nativeElement || this.el,\n        })?.focus();\n    }\n\n    protected onFocus({target}: Event): void {\n        if (\n            this.container() &&\n            target !== this.el &&\n            tuiIsElement(target) &&\n            !tuiContainsOrAfter(this.container()!.nativeElement, target)\n        ) {\n            this.close();\n        }\n    }\n}\n","<ng-template>\n    <div\n        tuiTheme=\"dark\"\n        class=\"t-container\"\n        (document:focusin)=\"onFocus($event)\"\n        (keydown.esc)=\"close()\"\n        (pointerdown.self)=\"close()\"\n    >\n        <div\n            #container\n            class=\"t-content\"\n        >\n            <ng-container *polymorpheusOutlet=\"tuiInputSearch()\" />\n        </div>\n    </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}