{"version":3,"file":"koobiq-components-autocomplete.mjs","sources":["../../../packages/components/autocomplete/autocomplete-origin.directive.ts","../../../packages/components/autocomplete/autocomplete.component.ts","../../../packages/components/autocomplete/autocomplete.html","../../../packages/components/autocomplete/autocomplete-trigger.directive.ts","../../../packages/components/autocomplete/autocomplete.module.ts","../../../packages/components/autocomplete/koobiq-components-autocomplete.ts"],"sourcesContent":["import { Directive, ElementRef } from '@angular/core';\n\n/**\n * Directive applied to an element to make it usable\n * as a connection point for an autocomplete panel.\n */\n@Directive({\n    selector: '[kbqAutocompleteOrigin]',\n    exportAs: 'kbqAutocompleteOrigin'\n})\nexport class KbqAutocompleteOrigin {\n    constructor(public elementRef: ElementRef<HTMLElement>) {}\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { NgClass } from '@angular/common';\nimport {\n    AfterContentInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChildren,\n    DestroyRef,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    Host,\n    inject,\n    Inject,\n    InjectionToken,\n    Input,\n    numberAttribute,\n    Optional,\n    Output,\n    QueryList,\n    TemplateRef,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActiveDescendantKeyManager } from '@koobiq/cdk/a11y';\nimport { KBQ_OPTION_PARENT_COMPONENT, KbqOptgroup, KbqOption } from '@koobiq/components/core';\nimport { KbqFormField } from '@koobiq/components/form-field';\nimport { delay, filter } from 'rxjs/operators';\n\n/**\n * Autocomplete IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet uniqueAutocompleteIdCounter = 0;\n\n/** Footer that is rendered below the autocomplete options panel. */\n@Directive({\n    selector: '[kbqAutocompleteFooter], kbq-autocomplete-footer',\n    host: { class: 'kbq-autocomplete-footer' }\n})\nexport class KbqAutocompleteFooter {}\n\nexport class KbqAutocompleteSelectedEvent {\n    constructor(\n        public source: KbqAutocomplete,\n        public option: KbqOption\n    ) {}\n}\n\n/** Default `kbq-autocomplete` options that can be overridden. */\nexport interface KbqAutocompleteDefaultOptions {\n    /** Whether the first option should be highlighted when an autocomplete panel is opened. */\n    autoActiveFirstOption?: boolean;\n}\n\n/** Injection token to be used to override the default options for `kbq-autocomplete`. */\nexport const KBQ_AUTOCOMPLETE_DEFAULT_OPTIONS = new InjectionToken<KbqAutocompleteDefaultOptions>(\n    'kbq-autocomplete-default-options',\n    {\n        providedIn: 'root',\n        factory: KBQ_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY\n    }\n);\n\nexport function KBQ_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY(): KbqAutocompleteDefaultOptions {\n    return { autoActiveFirstOption: true };\n}\n\n@Component({\n    selector: 'kbq-autocomplete',\n    imports: [\n        NgClass\n    ],\n    templateUrl: 'autocomplete.html',\n    styleUrls: ['autocomplete.scss', 'autocomplete-tokens.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqAutocomplete',\n    host: {\n        class: 'kbq-autocomplete'\n    },\n    providers: [\n        {\n            provide: KBQ_OPTION_PARENT_COMPONENT,\n            useExisting: KbqAutocomplete\n        }\n    ]\n})\nexport class KbqAutocomplete implements AfterContentInit {\n    private readonly destroyRef = inject(DestroyRef);\n    /** Unique ID to be used by autocomplete trigger's \"aria-owns\" property. */\n    id: string = `kbq-autocomplete-${uniqueAutocompleteIdCounter++}`;\n\n    /** Manages active item in option list based on key events. */\n    keyManager: ActiveDescendantKeyManager<KbqOption>;\n\n    /** Whether the autocomplete panel should be visible, depending on option length. */\n    showPanel: boolean = false;\n\n    @ViewChild(TemplateRef, { static: true }) template: TemplateRef<any>;\n\n    @ViewChild('panel', { static: false }) panel: ElementRef;\n\n    @ContentChildren(KbqOption, { descendants: true }) options: QueryList<KbqOption>;\n\n    @ContentChildren(KbqOptgroup) optionGroups: QueryList<KbqOptgroup>;\n\n    /** Function that maps an option's control value to its display value in the trigger. */\n    @Input() displayWith: ((value: any) => string) | null = null;\n\n    /**\n     * Specify the width of the autocomplete panel.  Can be any CSS sizing value, otherwise it will\n     * match the width of its host.\n     */\n    @Input() panelWidth: string | number;\n\n    /**\n     * Minimum width of the panel in pixels.\n     * When panelWidth is not set, the panel will be at least as wide as its host and no less than panelMinWidth.\n     */\n    @Input({ transform: numberAttribute }) panelMinWidth: number = 200;\n\n    /** Event that is emitted whenever an option from the list is selected. */\n    @Output() readonly optionSelected: EventEmitter<KbqAutocompleteSelectedEvent> =\n        new EventEmitter<KbqAutocompleteSelectedEvent>();\n\n    /** Event that is emitted when the autocomplete panel is opened. */\n    @Output() readonly opened: EventEmitter<void> = new EventEmitter<void>();\n\n    /** Event that is emitted when the autocomplete panel is closed. */\n    @Output() readonly closed: EventEmitter<void> = new EventEmitter<void>();\n\n    /**\n     * Takes classes set on the host kbq-autocomplete element and applies them to the panel\n     * inside the overlay container to allow for easy styling.\n     */\n    @Input('class')\n    get classList() {\n        return this._classList;\n    }\n\n    set classList(value: string) {\n        if (value && value.length) {\n            value.split(' ').forEach((className) => (this._classList[className.trim()] = true));\n\n            this.elementRef.nativeElement.className = '';\n        }\n    }\n\n    private _classList: any = {};\n\n    /**\n     * Whether the first option should be highlighted when the autocomplete panel is opened.\n     * Can be configured globally through the `KBQ_AUTOCOMPLETE_DEFAULT_OPTIONS` token.\n     */\n    @Input()\n    get autoActiveFirstOption(): boolean {\n        return this._autoActiveFirstOption;\n    }\n\n    set autoActiveFirstOption(value: boolean) {\n        this._autoActiveFirstOption = coerceBooleanProperty(value);\n    }\n\n    private _autoActiveFirstOption: boolean;\n\n    get isOpen(): boolean {\n        return this._isOpen && this.showPanel;\n    }\n\n    set isOpen(value: boolean) {\n        this._isOpen = value;\n    }\n\n    private _isOpen: boolean = false;\n\n    @Input()\n    get openOnFocus(): boolean {\n        return this._openOnFocus;\n    }\n\n    set openOnFocus(value: boolean) {\n        this._openOnFocus = value;\n    }\n\n    private _openOnFocus: boolean = true;\n\n    constructor(\n        private changeDetectorRef: ChangeDetectorRef,\n        private elementRef: ElementRef<HTMLElement>,\n        @Inject(KBQ_AUTOCOMPLETE_DEFAULT_OPTIONS) defaults: KbqAutocompleteDefaultOptions,\n        @Host() @Optional() private readonly parentFormField: KbqFormField\n    ) {\n        this._autoActiveFirstOption = !!defaults.autoActiveFirstOption;\n    }\n\n    ngAfterContentInit() {\n        this.keyManager = new ActiveDescendantKeyManager<KbqOption>(this.options);\n        this.setVisibility();\n\n        this.parentFormField?.control.ngControl?.valueChanges\n            ?.pipe(\n                delay(0),\n                filter((value) => value === null || value === undefined || value === ''),\n                takeUntilDestroyed(this.destroyRef)\n            )\n            .subscribe(() => {\n                this.options.filter(({ selected }) => selected).forEach((option) => option.deselect(false));\n            });\n    }\n\n    setScrollTop(scrollTop: number): void {\n        if (this.panel) {\n            this.panel.nativeElement.scrollTop = scrollTop;\n        }\n    }\n\n    getScrollTop(): number {\n        return this.panel ? this.panel.nativeElement.scrollTop : 0;\n    }\n\n    setVisibility() {\n        this.showPanel = !!this.options.length;\n        this._classList['kbq-autocomplete_visible'] = this.showPanel;\n        this._classList['kbq-autocomplete_hidden'] = !this.showPanel;\n\n        this.updateFocusClass();\n\n        this.changeDetectorRef.markForCheck();\n    }\n\n    emitSelectEvent(option: KbqOption): void {\n        const event = new KbqAutocompleteSelectedEvent(this, option);\n\n        this.optionSelected.emit(event);\n    }\n\n    onKeydown(event: KeyboardEvent): any {\n        this.keyManager.onKeydown(event);\n\n        this.updateFocusClass();\n    }\n\n    private updateFocusClass() {\n        this._classList['cdk-keyboard-focused'] = this.parentFormField?.focusOrigin === 'keyboard';\n    }\n}\n","<ng-template>\n    <div class=\"kbq-autocomplete-panel\" [id]=\"id\" [ngClass]=\"classList\">\n        <div #panel role=\"listbox\" class=\"kbq-autocomplete-panel__content kbq-scrollbar\">\n            <ng-content />\n        </div>\n        <ng-content select=\"[kbqAutocompleteFooter], kbq-autocomplete-footer\" />\n    </div>\n</ng-template>\n","import { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n    ConnectedPosition,\n    FlexibleConnectedPositionStrategy,\n    Overlay,\n    OverlayConfig,\n    OverlayRef,\n    PositionStrategy,\n    ScrollStrategy\n} from '@angular/cdk/overlay';\nimport { _getEventTarget, _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { DOCUMENT } from '@angular/common';\nimport {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Directive,\n    ElementRef,\n    Host,\n    Inject,\n    InjectionToken,\n    Input,\n    NgZone,\n    OnDestroy,\n    Optional,\n    Provider,\n    ViewContainerRef,\n    afterNextRender,\n    forwardRef,\n    inject\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DOWN_ARROW, ENTER, ESCAPE, TAB, UP_ARROW } from '@koobiq/cdk/keycodes';\nimport {\n    KBQ_WINDOW,\n    KbqOption,\n    KbqOptionSelectionChange,\n    KeyboardNavigationHandler,\n    defaultOffsetY\n} from '@koobiq/components/core';\nimport { KbqFormField } from '@koobiq/components/form-field';\nimport { Observable, Subject, Subscription, defer, fromEvent, merge, of as observableOf } from 'rxjs';\nimport { delay, filter, map, switchMap, take, tap } from 'rxjs/operators';\nimport { KbqAutocompleteOrigin } from './autocomplete-origin.directive';\nimport { KbqAutocomplete } from './autocomplete.component';\n\n/**\n * The following style constants are necessary to save here in order\n * to properly calculate the scrollTop of the panel. Because we are not\n * actually focusing the active item, scroll must be handled manually.\n */\n\n/** The total height of the autocomplete panel. */\nexport const AUTOCOMPLETE_PANEL_HEIGHT = 256;\n\n/** Injection token that determines the scroll handling while the autocomplete panel is open. */\nexport const KBQ_AUTOCOMPLETE_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n    'kbq-autocomplete-scroll-strategy'\n);\n\nexport function KBQ_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n    return () => overlay.scrollStrategies.reposition();\n}\n\nexport const KBQ_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n    provide: KBQ_AUTOCOMPLETE_SCROLL_STRATEGY,\n    deps: [Overlay],\n    useFactory: KBQ_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY\n};\n\n/**\n * Provider that allows the autocomplete to register as a ControlValueAccessor.\n * @docs-private\n */\nexport const KBQ_AUTOCOMPLETE_VALUE_ACCESSOR: Provider = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => KbqAutocompleteTrigger),\n    multi: true\n};\n\n/**\n * Creates an error to be thrown when attempting to use an autocomplete trigger without a panel.\n * @docs-private\n */\nexport function getKbqAutocompleteMissingPanelError(): Error {\n    return Error(\n        'Attempting to open an undefined instance of `kbq-autocomplete`. ' +\n            'Make sure that the id passed to the `kbqAutocomplete` is correct and that ' +\n            \"you're attempting to open it after the ngAfterContentInit hook.\"\n    );\n}\n\n@Directive({\n    selector: `input[kbqAutocomplete], textarea[kbqAutocomplete]`,\n    host: {\n        class: 'kbq-autocomplete-trigger',\n        '[attr.autocomplete]': 'autocompleteAttribute',\n        // Note: we use `focusin`, as opposed to `focus`, in order to open the panel\n        // a little earlier. This avoids issues where IE delays the focusing of the input.\n        '(focusin)': 'handleFocus()',\n        '(blur)': 'onTouched()',\n        '(input)': 'handleInput($event)',\n        '(keydown)': 'handleKeydown($event)',\n        '(click)': 'handleClick($event)'\n    },\n    exportAs: 'kbqAutocompleteTrigger',\n    providers: [KBQ_AUTOCOMPLETE_VALUE_ACCESSOR]\n})\nexport class KbqAutocompleteTrigger\n    implements AfterViewInit, ControlValueAccessor, OnDestroy, KeyboardNavigationHandler\n{\n    protected readonly document = inject<Document>(DOCUMENT);\n\n    readonly optionSelections: Observable<KbqOptionSelectionChange> = defer(() => {\n        if (this.autocomplete && this.autocomplete.options) {\n            return merge(...this.autocomplete.options.map((option) => option.onSelectionChange));\n        }\n\n        // If there are any subscribers before `ngAfterViewInit`, the `autocomplete` will be undefined.\n        // Return a stream that we'll replace with the real one once everything is in place.\n        return this.zone.onStable.asObservable().pipe(\n            take(1),\n            switchMap(() => this.optionSelections)\n        );\n    });\n\n    /** The currently active option, coerced to MatOption type. */\n    get activeOption(): KbqOption | null {\n        return this.autocomplete?.keyManager?.activeItem;\n    }\n\n    get panelOpen(): boolean {\n        return this.overlayAttached && this.autocomplete.showPanel;\n    }\n\n    /** The autocomplete panel to be attached to this trigger. */\n    @Input('kbqAutocomplete') autocomplete: KbqAutocomplete;\n\n    /**\n     * Reference relative to which to position the autocomplete panel.\n     * Defaults to the autocomplete trigger element.\n     */\n    @Input('kbqAutocompleteConnectedTo') connectedTo: KbqAutocompleteOrigin;\n\n    /**\n     * `autocomplete` attribute to be set on the input element.\n     * @docs-private\n     */\n    @Input('autocomplete') autocompleteAttribute: string = 'off';\n\n    /**\n     * Whether the autocomplete is disabled. When disabled, the element will\n     * act as a regular input and the user won't be able to open the panel.\n     */\n    @Input('kbqAutocompleteDisabled')\n    get autocompleteDisabled(): boolean {\n        return this._autocompleteDisabled;\n    }\n\n    set autocompleteDisabled(value: boolean) {\n        this._autocompleteDisabled = coerceBooleanProperty(value);\n    }\n\n    /**\n     * Event handler for input blur events.\n     * Determines whether the blur event is triggered outside the specific target\n     * @returns A boolean indicating if the blur event happened outside the target element\n     */\n    @Input('kbqAutocompleteOnBlur') onInputBlur = (event: FocusEvent): boolean => {\n        const target: HTMLElement = event.relatedTarget as HTMLElement;\n\n        return !target || target.tagName !== 'KBQ-OPTION';\n    };\n\n    private _autocompleteDisabled = false;\n\n    private overlayAttached: boolean = false;\n\n    private overlayRef: OverlayRef | null;\n\n    private portal: TemplatePortal;\n\n    private componentDestroyed = false;\n\n    private scrollStrategy: () => ScrollStrategy;\n\n    /** Old value of the native input. Used to work around issues with the `input` event on IE. */\n    private previousValue: string | number | null;\n\n    /** Strategy that is used to position the panel. */\n    private positionStrategy: FlexibleConnectedPositionStrategy;\n\n    /** The subscription for closing actions (some are bound to document). */\n    private closingActionsSubscription: Subscription;\n\n    /** Subscription to viewport size changes. */\n    private viewportSubscription = Subscription.EMPTY;\n\n    /**\n     * Whether the autocomplete can open the next time it is focused. Used to prevent a focused,\n     * closed autocomplete from being reopened if the user switches to another browser tab and then\n     * comes back.\n     */\n    private canOpenOnNextFocus = true;\n\n    /** Stream of keyboard events that can close the panel. */\n    private readonly closeKeyEventStream = new Subject<void>();\n    private readonly window = inject(KBQ_WINDOW);\n\n    constructor(\n        private elementRef: ElementRef<HTMLInputElement>,\n        private viewContainerRef: ViewContainerRef,\n        private changeDetectorRef: ChangeDetectorRef,\n        private overlay: Overlay,\n        private zone: NgZone,\n        @Inject(KBQ_AUTOCOMPLETE_SCROLL_STRATEGY) scrollStrategy: any,\n        @Optional() private dir: Directionality,\n        @Optional() @Host() private formField: KbqFormField,\n        // @breaking-change 8.0.0 Make `_viewportRuler` required.\n        private viewportRuler?: ViewportRuler\n    ) {\n        afterNextRender(() => {\n            zone.runOutsideAngular(() => this.window.addEventListener('blur', this.windowBlurHandler));\n        });\n\n        this.scrollStrategy = scrollStrategy;\n    }\n\n    ngAfterViewInit(): void {\n        if (this.autocomplete) {\n            this.autocomplete.keyManager?.change.subscribe(() => {\n                if (this.panelOpen) {\n                    this.scrollActiveOptionIntoView();\n                    this.elementRef.nativeElement.focus();\n                } else if (!this.panelOpen && this.autocomplete.keyManager.activeItem) {\n                    this.autocomplete.keyManager.activeItem?.selectViaInteraction();\n                }\n            });\n        }\n    }\n\n    ngOnDestroy() {\n        this.window.removeEventListener('blur', this.windowBlurHandler);\n\n        this.viewportSubscription.unsubscribe();\n        this.componentDestroyed = true;\n        this.destroyPanel();\n        this.closeKeyEventStream.complete();\n    }\n\n    /** `View -> model callback called when value changes` */\n    onChange: (value: any) => void = () => {};\n\n    /** `View -> model callback called when autocomplete has been touched` */\n    onTouched: () => void = () => {};\n\n    /** Opens the autocomplete suggestion panel. */\n    open(): void {\n        this.attachOverlay();\n    }\n\n    /**\n     * @deprecated Will be removed in next major release. Use `open` instead.\n     * @docs-private\n     */\n    openPanel(): void {\n        this.open();\n    }\n\n    closePanel(): void {\n        if (!this.overlayAttached) {\n            return;\n        }\n\n        if (this.panelOpen) {\n            this.autocomplete.closed.emit();\n        }\n\n        this.autocomplete.isOpen = this.overlayAttached = false;\n\n        if (this.overlayRef && this.overlayRef.hasAttached()) {\n            this.overlayRef.detach();\n            this.closingActionsSubscription.unsubscribe();\n        }\n\n        // Note that in some cases this can end up being called after the component is destroyed.\n        // Add a check to ensure that we don't try to run change detection on a destroyed view.\n        if (!this.componentDestroyed) {\n            // We need to trigger change detection manually, because\n            // `fromEvent` doesn't seem to do it at the proper time.\n            // This ensures that the label is reset when the\n            // user clicks outside.\n            this.changeDetectorRef.detectChanges();\n        }\n    }\n\n    /**\n     * Updates the position of the autocomplete suggestion panel to ensure that it fits all options\n     * within the viewport.\n     */\n    updatePosition(): void {\n        if (this.overlayAttached) {\n            this.overlayRef!.updatePosition();\n        }\n    }\n\n    /**\n     * A stream of actions that should close the autocomplete panel, including\n     * when an option is selected, on blur, and when TAB is pressed.\n     */\n    get panelClosingActions(): Observable<KbqOptionSelectionChange | null> {\n        return merge(\n            this.optionSelections,\n            this.autocomplete.keyManager.tabOut.pipe(filter(() => this.overlayAttached)),\n            this.closeKeyEventStream,\n            this.getOutsideClickStream(),\n            this.overlayRef ? this.overlayRef.detachments().pipe(filter(() => this.overlayAttached)) : observableOf()\n        ).pipe(\n            // Normalize the output so we return a consistent type.\n            map((event) => (event instanceof KbqOptionSelectionChange ? event : null))\n        );\n    }\n\n    // Implemented as part of ControlValueAccessor.\n    writeValue(value: any): void {\n        Promise.resolve(null).then(() => this.setTriggerValue(value));\n    }\n\n    // Implemented as part of ControlValueAccessor.\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    registerOnChange(fn: (value: any) => {}): void {\n        this.onChange = fn;\n    }\n\n    // Implemented as part of ControlValueAccessor.\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    registerOnTouched(fn: () => {}) {\n        this.onTouched = fn;\n    }\n\n    // Implemented as part of ControlValueAccessor.\n    setDisabledState(isDisabled: boolean) {\n        this.elementRef.nativeElement.disabled = isDisabled;\n    }\n\n    handleKeydown(event: KeyboardEvent): void {\n        const keyCode = event.keyCode;\n\n        // Prevent the default action on all escape key presses. This is here primarily to bring IE\n        // in line with other browsers. By default, pressing escape on IE will cause it to revert\n        // the input value to the one that it had on focus, however it won't dispatch any events\n        // which means that the model value will be out of sync with the view.\n        if (keyCode === ESCAPE) {\n            event.preventDefault();\n        }\n\n        if (this.activeOption && keyCode === ENTER && this.panelOpen) {\n            this.activeOption.selectViaInteraction();\n            this.resetActiveItem();\n            event.preventDefault();\n        } else if (this.autocomplete) {\n            const prevActiveItem = this.autocomplete.keyManager.activeItem;\n\n            if (this.panelOpen || keyCode === TAB) {\n                this.autocomplete.onKeydown(event);\n            } else if (!this.panelOpen && keyCode === DOWN_ARROW && this.canOpen()) {\n                this.openPanel();\n            }\n\n            const isArrowKey = keyCode === UP_ARROW || keyCode === DOWN_ARROW;\n\n            if (isArrowKey && event.shiftKey && this.autocomplete.keyManager.activeItem !== prevActiveItem) {\n                this.autocomplete.keyManager.activeItem?.selectViaInteraction();\n            }\n        }\n    }\n\n    handleInput(event: KeyboardEvent): void {\n        const target = event.target as HTMLInputElement;\n        let value: number | string | null = target.value;\n\n        // Based on `NumberValueAccessor` from forms.\n        if (target.type === 'number') {\n            value = value === '' ? null : parseFloat(value);\n        }\n\n        // If the input has a placeholder, IE will fire the `input` event on page load,\n        // focus and blur, in addition to when the user actually changed the value. To\n        // filter out all of the extra events, we save the value on focus and between\n        // `input` events, and we check whether it changed.\n        // See: https://connect.microsoft.com/IE/feedback/details/885747/\n        if (this.previousValue !== value) {\n            this.previousValue = value;\n            this.onChange(value);\n\n            if (this.canOpen() && _getFocusedElementPierceShadowDom() === target) {\n                this.openPanel();\n            }\n        }\n    }\n\n    handleFocus(): void {\n        if (!this.canOpenOnNextFocus) {\n            this.canOpenOnNextFocus = true;\n        } else if (!this.panelOpen && this.canOpen() && this.autocomplete.openOnFocus) {\n            this.previousValue = this.elementRef.nativeElement.value;\n            this.attachOverlay();\n        }\n    }\n\n    handleClick($event: MouseEvent) {\n        if (!this.panelOpen && this.canOpen() && _getFocusedElementPierceShadowDom() === $event.target) {\n            this.openPanel();\n        }\n    }\n\n    scrollActiveOptionIntoView(): void {\n        this.autocomplete.keyManager.activeItem?.focus();\n    }\n\n    /** Stream of clicks outside of the autocomplete panel. */\n    private getOutsideClickStream(): Observable<any> {\n        return merge(\n            fromEvent(this.document, 'click') as Observable<MouseEvent>,\n            fromEvent(this.document, 'auxclick') as Observable<MouseEvent>,\n            fromEvent(this.document, 'touchend') as Observable<TouchEvent>\n        ).pipe(\n            filter((event) => {\n                const clickTarget = _getEventTarget<HTMLElement>(event);\n                const formField = this.formField ? this.formField.elementRef.nativeElement : null;\n                const customOrigin = this.connectedTo ? this.connectedTo.elementRef.nativeElement : null;\n\n                return (\n                    this.overlayAttached &&\n                    clickTarget !== this.elementRef.nativeElement &&\n                    (!formField || !formField.contains(clickTarget)) &&\n                    (!customOrigin || !customOrigin.contains(clickTarget)) &&\n                    !!this.overlayRef &&\n                    !this.overlayRef.overlayElement.contains(clickTarget)\n                );\n            })\n        );\n    }\n\n    /**\n     * Event handler for when the window is blurred. Needs to be an\n     * arrow function in order to preserve the context.\n     */\n    private windowBlurHandler = () => {\n        // If the user blurred the window while the autocomplete is focused, it means that it'll be\n        // refocused when they come back. In this case we want to skip the first focus event, if the\n        // pane was closed, in order to avoid reopening it unintentionally.\n        this.canOpenOnNextFocus = this.document.activeElement !== this.elementRef.nativeElement || this.panelOpen;\n    };\n\n    /**\n     * This method listens to a stream of panel closing actions and resets the\n     * stream every time the option list changes.\n     */\n    private subscribeToClosingActions(): Subscription {\n        const firstStable = this.zone.onStable.asObservable().pipe(take(1));\n        const optionChanges = this.autocomplete.options.changes.pipe(\n            tap(() => this.positionStrategy.reapplyLastPosition()),\n            // Defer emitting to the stream until the next tick, because changing\n            // bindings in here will cause \"changed after checked\" errors.\n            delay(0)\n        );\n\n        // When the zone is stable initially, and when the option list changes...\n        return (\n            merge(firstStable, optionChanges)\n                .pipe(\n                    // create a new stream of panelClosingActions, replacing any previous streams\n                    // that were created, and flatten it so our stream only emits closing events...\n                    switchMap(() => {\n                        const wasOpen = this.panelOpen;\n\n                        this.resetActiveItem();\n                        this.autocomplete.setVisibility();\n\n                        if (this.panelOpen) {\n                            this.overlayRef!.updatePosition();\n\n                            // If the `panelOpen` state changed, we need to make sure to emit the `opened`\n                            // event, because we may not have emitted it when the panel was attached. This\n                            // can happen if the users opens the panel and there are no options, but the\n                            // options come in slightly later or as a result of the value changing.\n                            if (wasOpen !== this.panelOpen) {\n                                this.autocomplete.opened.emit();\n                            }\n                        }\n\n                        return this.panelClosingActions;\n                    }),\n                    // when the first closing event occurs...\n                    take(1)\n                )\n                // set the value, close the panel, and complete.\n                .subscribe((event) => this.setValueAndClose(event))\n        );\n    }\n\n    /** Destroys the autocomplete suggestion panel. */\n    private destroyPanel(): void {\n        if (this.overlayRef) {\n            this.closePanel();\n            this.overlayRef.dispose();\n            this.overlayRef = null;\n        }\n    }\n\n    private setTriggerValue(value: any): void {\n        const toDisplay =\n            this.autocomplete && this.autocomplete.displayWith ? this.autocomplete.displayWith(value) : value;\n\n        // Simply falling back to an empty string if the display value is falsy does not work properly.\n        // The display value can also be the number zero and shouldn't fall back to an empty string.\n\n        const inputValue = toDisplay != null ? toDisplay : '';\n\n        // If it's used within a `MatFormField`, we should set it through the property so it can go\n        // through change detection.\n        if (this.formField) {\n            this.formField.control.value = inputValue;\n        } else {\n            this.elementRef.nativeElement.value = inputValue;\n        }\n\n        this.previousValue = inputValue;\n    }\n\n    /** This method closes the panel, and if a value is specified, also sets the associated\n     * control to that value. It will also mark the control as dirty if this interaction\n     * stemmed from the user.\n     */\n    private setValueAndClose(event: KbqOptionSelectionChange | null): void {\n        if (event?.source) {\n            this.clearPreviousSelectedOption(event.source);\n            this.setTriggerValue(event.source.value);\n            this.onChange(event.source.value);\n            this.elementRef.nativeElement.focus();\n\n            this.autocomplete.emitSelectEvent(event.source);\n        }\n\n        this.closePanel();\n    }\n\n    /** Clear any previous selected option and emit a selection change event for this option */\n    private clearPreviousSelectedOption(skip: KbqOption) {\n        this.autocomplete.options.forEach((option) => {\n            if (option !== skip && option.selected) {\n                option.deselect();\n            }\n        });\n    }\n\n    private attachOverlay(): void {\n        if (!this.autocomplete) {\n            throw getKbqAutocompleteMissingPanelError();\n        }\n\n        let overlayRef = this.overlayRef;\n\n        if (!overlayRef) {\n            this.portal = new TemplatePortal(this.autocomplete.template, this.viewContainerRef);\n            overlayRef = this.overlay.create(this.getOverlayConfig());\n            this.overlayRef = overlayRef;\n\n            // Use the `keydownEvents` in order to take advantage of\n            // the overlay event targeting provided by the CDK overlay.\n            overlayRef.keydownEvents().subscribe((event) => {\n                // Close when pressing ESCAPE or ALT + UP_ARROW, based on the a11y guidelines.\n                // See: https://www.w3.org/TR/wai-aria-practices-1.1/#textbox-keyboard-interaction\n                if (event.keyCode === ESCAPE || (event.keyCode === UP_ARROW && event.altKey)) {\n                    this.resetActiveItem();\n                    this.closeKeyEventStream.next();\n                }\n            });\n\n            if (this.viewportRuler) {\n                this.viewportSubscription = this.viewportRuler.change().subscribe(() => {\n                    if (this.panelOpen && overlayRef) {\n                        overlayRef.updateSize(this.getOverlaySize());\n                    }\n                });\n            }\n        } else {\n            const position = overlayRef.getConfig().positionStrategy as FlexibleConnectedPositionStrategy;\n\n            // Update the trigger, panel width and direction, in case anything has changed.\n            position.setOrigin(this.getConnectedElement());\n            overlayRef.updateSize(this.getOverlaySize());\n        }\n\n        if (overlayRef && !overlayRef.hasAttached()) {\n            overlayRef.attach(this.portal);\n            this.closingActionsSubscription = this.subscribeToClosingActions();\n        }\n\n        const wasOpen = this.panelOpen;\n\n        this.autocomplete.setVisibility();\n        this.autocomplete.isOpen = this.overlayAttached = true;\n\n        // We need to do an extra `panelOpen` check in here, because the\n        // autocomplete won't be shown if there are no options.\n        if (this.panelOpen && wasOpen !== this.panelOpen) {\n            this.autocomplete.opened.emit();\n        }\n\n        this.zone.onStable\n            .asObservable()\n            .pipe(take(1))\n            .subscribe(() => this.resetActiveItem());\n    }\n\n    private getOverlayConfig(): OverlayConfig {\n        return new OverlayConfig({\n            positionStrategy: this.getOverlayPosition(),\n            scrollStrategy: this.scrollStrategy(),\n            direction: this.dir,\n            ...this.getOverlaySize()\n        });\n    }\n\n    private getOverlayPosition(): PositionStrategy {\n        this.positionStrategy = this.overlay\n            .position()\n            .flexibleConnectedTo(this.getConnectedElement())\n            .withFlexibleDimensions(false)\n            .withPush(false)\n            .withPositions([\n                {\n                    originX: 'start',\n                    originY: 'bottom',\n                    overlayX: 'start',\n                    overlayY: 'top',\n                    offsetY: defaultOffsetY\n                },\n                {\n                    originX: 'start',\n                    originY: 'top',\n                    overlayX: 'start',\n                    overlayY: 'bottom',\n                    offsetY: -defaultOffsetY\n                }\n            ] as ConnectedPosition[]);\n\n        return this.positionStrategy;\n    }\n\n    private getConnectedElement(): ElementRef<HTMLElement> {\n        if (this.connectedTo) {\n            return this.connectedTo.elementRef;\n        }\n\n        return this.formField ? this.formField.getConnectedOverlayOrigin() : this.elementRef;\n    }\n\n    private getPanelMinWidth(): number {\n        return Math.max(this.autocomplete.panelMinWidth, this.getHostWidth());\n    }\n\n    private getOverlaySize(): { width: number | string } | { minWidth: number } {\n        const panelWidth = this.autocomplete.panelWidth;\n\n        return panelWidth ? { width: panelWidth } : { minWidth: this.getPanelMinWidth() };\n    }\n\n    private getHostWidth(): number {\n        return this.getConnectedElement().nativeElement.getBoundingClientRect().width;\n    }\n\n    /**\n     * Resets the active item to -1 so arrow events will activate the\n     * correct options, or to 0 if the consumer opted into it.\n     */\n    private resetActiveItem(): void {\n        if (this.autocomplete.autoActiveFirstOption) {\n            this.autocomplete.keyManager.setFirstItemActive();\n        } else {\n            this.autocomplete.keyManager.setActiveItem(-1);\n        }\n    }\n\n    private canOpen(): boolean {\n        const element = this.elementRef.nativeElement;\n\n        return !element.readOnly && !element.disabled && !this._autocompleteDisabled;\n    }\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { NgClass } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { KbqOptionModule } from '@koobiq/components/core';\nimport { KbqAutocompleteOrigin } from './autocomplete-origin.directive';\nimport {\n    KBQ_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER,\n    KbqAutocompleteTrigger\n} from './autocomplete-trigger.directive';\nimport { KbqAutocomplete, KbqAutocompleteFooter } from './autocomplete.component';\n\n@NgModule({\n    imports: [\n        KbqOptionModule,\n        OverlayModule,\n        NgClass,\n        KbqAutocomplete,\n        KbqAutocompleteTrigger,\n        KbqAutocompleteOrigin,\n        KbqAutocompleteFooter\n    ],\n    exports: [\n        KbqAutocomplete,\n        KbqOptionModule,\n        KbqAutocompleteTrigger,\n        KbqAutocompleteOrigin,\n        KbqAutocompleteFooter\n    ],\n    providers: [KBQ_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER]\n})\nexport class KbqAutocompleteModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["observableOf","i3"],"mappings":"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"}