{"version":3,"file":"koobiq-components-tree-select.mjs","sources":["../../../packages/components/tree-select/tree-select.component.ts","../../../packages/components/tree-select/tree-select.html","../../../packages/components/tree-select/tree-select.module.ts","../../../packages/components/tree-select/koobiq-components-tree-select.ts"],"sourcesContent":["import { CdkMonitorFocus } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport { Platform, _getEventTarget } from '@angular/cdk/platform';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterContentInit,\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    DestroyRef,\n    DoCheck,\n    ElementRef,\n    EventEmitter,\n    Host,\n    Inject,\n    InjectionToken,\n    Input,\n    NgZone,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output,\n    Provider,\n    QueryList,\n    Renderer2,\n    Self,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    ViewEncapsulation,\n    afterNextRender,\n    booleanAttribute,\n    inject,\n    numberAttribute\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm, UntypedFormControl } from '@angular/forms';\nimport {\n    DOWN_ARROW,\n    END,\n    ENTER,\n    ESCAPE,\n    HOME,\n    LEFT_ARROW,\n    PAGE_DOWN,\n    PAGE_UP,\n    RIGHT_ARROW,\n    SPACE,\n    TAB,\n    UP_ARROW,\n    hasModifierKey,\n    isSelectAll\n} from '@koobiq/cdk/keycodes';\nimport {\n    CanUpdateErrorState,\n    ErrorStateMatcher,\n    KBQ_LOCALE_SERVICE,\n    KBQ_PARENT_POPUP,\n    KBQ_SELECT_SCROLL_STRATEGY,\n    KBQ_VALIDATION,\n    KBQ_WINDOW,\n    KbqAbstractSelect,\n    KbqComponentColors,\n    KbqLocaleService,\n    KbqSelectMatcher,\n    KbqSelectSearch,\n    KbqSelectTrigger,\n    MultipleMode,\n    defaultOffsetY,\n    getKbqSelectDynamicMultipleError,\n    getKbqSelectNonArrayValueError,\n    isUndefined,\n    kbqSelectAnimations\n} from '@koobiq/components/core';\nimport { KbqCleaner, KbqFormField, KbqFormFieldControl } from '@koobiq/components/form-field';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTag, KbqTagRemove } from '@koobiq/components/tags';\nimport { KbqTree, KbqTreeOption, KbqTreeSelection } from '@koobiq/components/tree';\nimport { SizeXxs as SelectSizeMultipleContentGap } from '@koobiq/design-tokens';\nimport { Observable, Subject, Subscription, audit, defer, fromEvent, merge } from 'rxjs';\nimport { debounceTime, delay, distinctUntilChanged, filter, map, startWith, switchMap, take } from 'rxjs/operators';\n\nlet nextUniqueId = 0;\n\n/** Tree select trigger value type. */\nexport type KbqTreeSelectTriggerValue = {\n    disabled: boolean;\n    value: string;\n    viewValue: string;\n};\n\n/** Tree select panel width type. */\nexport type KbqTreeSelectPanelWidth = 'auto' | number | null;\n\n/** Options for the `kbq-tree-select` that can be configured using the `KBQ_TREE_SELECT_OPTIONS` injection token. */\nexport type KbqTreeSelectOptions = Partial<{\n    /**\n     * Width of the panel. If set to `auto`, the panel will match the trigger width.\n     * If set to null or an empty string, the panel will grow to match the longest option's text.\n     */\n    panelWidth: KbqTreeSelectPanelWidth;\n    /**\n     * Minimum width of the panel. If minWidth is larger than window width or property set to null, it will be ignored.\n     */\n    panelMinWidth: Exclude<KbqTreeSelectPanelWidth, 'auto'>;\n    /**\n     * Whether to enable hiding search by default if options is less than minimum.\n     *\n     * - `'auto'` uses `KBQ_SELECT_SEARCH_MIN_OPTIONS_THRESHOLD` as min value.\n     * - number - will enables search hiding and uses value as min.\n     * @see KBQ_SELECT_SEARCH_MIN_OPTIONS_THRESHOLD\n     */\n    searchMinOptionsThreshold: 'auto' | number;\n}>;\n\n/** Injection token that can be used to provide the default options for the `kbq-tree-select`. */\nexport const KBQ_TREE_SELECT_OPTIONS = new InjectionToken<KbqTreeSelectOptions>('KBQ_TREE_SELECT_OPTIONS');\n\n/** Utility provider for `KBQ_TREE_SELECT_OPTIONS`. */\nexport const kbqTreeSelectOptionsProvider = (options: KbqTreeSelectOptions): Provider => {\n    return {\n        provide: KBQ_TREE_SELECT_OPTIONS,\n        useValue: options\n    };\n};\n\n/** Change event object that is emitted when the select value has changed. */\nexport class KbqTreeSelectChange {\n    constructor(\n        public source: KbqTreeSelect,\n        public value: any,\n        public isUserInput = false,\n        public values?: unknown[]\n    ) {}\n}\n\n@Component({\n    selector: 'kbq-tree-select',\n    imports: [\n        CdkOverlayOrigin,\n        KbqIconModule,\n        KbqTagRemove,\n        CdkConnectedOverlay,\n        CdkMonitorFocus,\n        NgClass,\n        KbqTag,\n        NgTemplateOutlet\n    ],\n    templateUrl: 'tree-select.html',\n    styleUrls: ['./tree-select.scss', './tree-select-tokens.scss', '../select/select-tokens.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqTreeSelect',\n    host: {\n        class: 'kbq-tree-select',\n        '[class.kbq-select_multiple]': 'multiple',\n        '[class.kbq-select_multiline]': 'multiline',\n        '[class.kbq-disabled]': 'disabled',\n        '[class.kbq-invalid]': 'errorState',\n        '[attr.tabindex]': 'tabIndex',\n        '[attr.disabled]': 'disabled || null',\n        '(click)': 'handleClick()',\n        '(keydown)': 'handleKeydown($event)',\n        '(focus)': 'onFocus()',\n        '(blur)': 'onBlur()'\n    },\n    animations: [\n        kbqSelectAnimations.transformPanel,\n        kbqSelectAnimations.fadeInContent\n    ],\n    providers: [\n        { provide: KbqFormFieldControl, useExisting: KbqTreeSelect },\n        { provide: KbqTree, useExisting: KbqTreeSelect },\n        { provide: KBQ_PARENT_POPUP, useExisting: KbqTreeSelect }\n    ]\n})\nexport class KbqTreeSelect\n    extends KbqAbstractSelect\n    implements\n        AfterContentInit,\n        AfterViewInit,\n        OnDestroy,\n        OnInit,\n        DoCheck,\n        ControlValueAccessor,\n        KbqFormFieldControl<KbqTreeOption>,\n        CanUpdateErrorState\n{\n    protected readonly isBrowser = inject(Platform).isBrowser;\n\n    private readonly useLegacyValidation = inject(KBQ_VALIDATION, { optional: true })?.useValidation ?? false;\n    private readonly defaultOptions = inject(KBQ_TREE_SELECT_OPTIONS, { optional: true });\n\n    /** Whether the component is in an error state. */\n    errorState: boolean = false;\n    /**\n     * Emits whenever the component state changes and should cause the parent\n     * form-field to update. Implemented as part of `KbqFormFieldControl`.\n     * @docs-private\n     */\n    readonly stateChanges = new Subject<void>();\n\n    /** A name for this control that can be used by `kbq-form-field`. */\n    controlType = 'select';\n\n    hiddenItems: number = 0;\n\n    /** The last measured value for the trigger's client bounding rect. */\n    triggerRect: DOMRect;\n\n    /** The cached font-size of the trigger element. */\n    triggerFontSize = 0;\n\n    /** Deals with the selection logic. */\n    selectionModel: SelectionModel<any>;\n\n    /** The value of the select panel's transform-origin property. */\n    transformOrigin: string = 'top';\n\n    /** Emits when the panel element is finished transforming in. */\n    panelDoneAnimatingStream = new Subject<string>();\n\n    /** Strategy that will be used to handle scrolling while the select panel is open. */\n    scrollStrategy = this.scrollStrategyFactory();\n\n    /**\n     * The y-offset of the overlay panel in relation to the trigger's top start corner.\n     * This must be adjusted to align the selected option text over the trigger text.\n     * when the panel opens. Will change based on the y-position of the selected option.\n     */\n    offsetY = defaultOffsetY;\n\n    /**\n     * This position config ensures that the top \"start\" corner of the overlay\n     * is aligned with with the top \"start\" of the origin by default (overlapping\n     * the trigger completely). If the panel cannot fit below the trigger, it\n     * will fall back to a position above the trigger.\n     */\n    positions: ConnectedPosition[] = [\n        {\n            originX: 'start',\n            originY: 'bottom',\n            overlayX: 'start',\n            overlayY: 'top',\n            offsetY: this.offsetY\n        },\n        {\n            originX: 'start',\n            originY: 'top',\n            overlayX: 'start',\n            overlayY: 'bottom',\n            offsetY: -this.offsetY\n        }\n    ];\n\n    options: QueryList<KbqTreeOption>;\n\n    /**\n     * Trigger - is a clickable field to open select dropdown panel\n     */\n    @ViewChild('trigger', { static: false }) trigger: ElementRef;\n\n    @ViewChild('panel', { static: false }) panel: ElementRef;\n\n    @ViewChild(CdkConnectedOverlay, { static: false }) overlayDir: CdkConnectedOverlay;\n\n    @ViewChildren(KbqTag) tags: QueryList<KbqTag>;\n\n    @ContentChild('kbqSelectCleaner', { static: true }) cleaner: KbqCleaner;\n\n    /** User-supplied override of the trigger element. */\n    @ContentChild(KbqSelectTrigger, { static: false }) customTrigger: KbqSelectTrigger;\n\n    @ContentChild(KbqSelectMatcher, { static: false }) customMatcher: KbqSelectMatcher;\n\n    @ContentChild('kbqSelectTagContent', { static: false, read: TemplateRef }) customTagTemplateRef: TemplateRef<any>;\n\n    @ContentChild(KbqTreeSelection, { static: false }) tree: KbqTreeSelection;\n\n    @ContentChild(KbqSelectSearch, { static: false }) search: KbqSelectSearch;\n\n    @Input() hiddenItemsText: string = '+{{ number }}';\n\n    /** Event emitted when the select panel has been toggled. */\n    @Output() readonly openedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n    /** Event emitted when the select has been opened. */\n    @Output('opened') readonly openedStream: Observable<void> = this.openedChange.pipe(\n        filter((o) => o),\n        map(() => {})\n    );\n\n    /** Event emitted when the select has been closed. */\n    @Output('closed') readonly closedStream: Observable<void> = this.openedChange.pipe(\n        filter((o) => !o),\n        map(() => {})\n    );\n\n    /** Event emitted when the selected value has been changed by the user. */\n    @Output() readonly selectionChange = new EventEmitter<KbqTreeSelectChange>();\n\n    /**\n     * Event that emits whenever the raw value of the select changes. This is here primarily\n     * to facilitate the two-way binding for the `value` input.\n     * @docs-private\n     */\n    @Output() readonly valueChange: EventEmitter<any> = new EventEmitter<any>();\n\n    /** Classes to be passed to the select panel. Supports the same syntax as `ngClass`. */\n    @Input() panelClass: string | string[] | Set<string> | { [key: string]: any };\n\n    @Input() backdropClass: string = 'cdk-overlay-transparent-backdrop';\n\n    /** Object used to control when error messages are shown. */\n    @Input() errorStateMatcher: ErrorStateMatcher;\n\n    /**\n     * Function used to sort the values in a select in multiple mode.\n     * Follows the same logic as `Array.prototype.sort`.\n     */\n    @Input() sortComparator: (a: KbqTreeOption, b: KbqTreeOption, options: KbqTreeOption[]) => number;\n\n    /**\n     * Whether to use a multiline matcher or not. Default is false\n     */\n    @Input({ transform: booleanAttribute }) multiline: boolean = false;\n\n    /** Combined stream of all of the child options' change events. */\n    readonly optionSelectionChanges: Observable<KbqTreeSelectChange> = defer(() => {\n        if (this.options) {\n            return this.options.changes.pipe(\n                startWith(this.options),\n                switchMap(() => merge(...this.options.map((option) => option.onSelectionChange)))\n            );\n        }\n\n        return this.ngZone.onStable.asObservable().pipe(\n            take(1),\n            switchMap(() => this.optionSelectionChanges)\n        );\n    }) as Observable<KbqTreeSelectChange>;\n\n    /** Combined stream of all of the child options userInteraction events. */\n    readonly userInteractionChanges: Observable<void> = defer(() => {\n        if (this.options) {\n            return this.options.changes.pipe(\n                startWith(this.options),\n                switchMap(() => merge(...this.options.map((option) => option.userInteraction)))\n            );\n        }\n\n        return this.ngZone.onStable.asObservable().pipe(\n            take(1),\n            switchMap(() => this.userInteractionChanges)\n        );\n    });\n\n    @Input()\n    get placeholder(): string {\n        return this._placeholder;\n    }\n\n    set placeholder(value: string) {\n        this._placeholder = value;\n\n        this.stateChanges.next();\n    }\n\n    private _placeholder: string;\n\n    @Input()\n    get required(): boolean {\n        return this._required;\n    }\n\n    set required(value: boolean) {\n        this._required = coerceBooleanProperty(value);\n\n        this.stateChanges.next();\n    }\n\n    private _required: boolean = false;\n\n    @Input({ transform: booleanAttribute })\n    get multiple(): boolean {\n        return this._multiple;\n    }\n\n    set multiple(value: boolean) {\n        if (this.selectionModel) {\n            throw getKbqSelectDynamicMultipleError();\n        }\n\n        this._multiple = coerceBooleanProperty(value);\n    }\n\n    private _multiple: boolean = false;\n\n    @Input()\n    get autoSelect(): boolean {\n        if (this.multiSelection) {\n            return false;\n        }\n\n        return this._autoSelect;\n    }\n\n    set autoSelect(value: boolean) {\n        this._autoSelect = coerceBooleanProperty(value);\n    }\n\n    private _autoSelect: boolean = true;\n\n    get value(): any {\n        return this.tree.getSelectedValues();\n    }\n\n    @Input()\n    get id(): string {\n        return this._id;\n    }\n\n    set id(value: string) {\n        this._id = value || this.uid;\n        this.stateChanges.next();\n    }\n\n    private _id: string;\n\n    @Input()\n    get hasBackdrop(): boolean {\n        return this._hasBackdrop;\n    }\n\n    set hasBackdrop(value: boolean) {\n        this._hasBackdrop = coerceBooleanProperty(value);\n    }\n\n    private _hasBackdrop: boolean = false;\n\n    @Input()\n    get tabIndex(): number | null {\n        return this.disabled ? -1 : this._tabIndex;\n    }\n\n    set tabIndex(value: number | null) {\n        if (Number.isInteger(value) || value === null) {\n            this._tabIndex = value;\n        }\n    }\n\n    private _tabIndex: number | null = 0;\n\n    @Input({ transform: booleanAttribute })\n    get disabled(): boolean {\n        return this._disabled;\n    }\n\n    set disabled(value: boolean) {\n        if (value !== this.disabled) {\n            this._disabled = value;\n\n            if (this.parentFormField) {\n                Promise.resolve().then(() => {\n                    this._disabled ? this.parentFormField.stopFocusMonitor() : this.parentFormField.runFocusMonitor();\n                });\n            }\n\n            // Let the parent form field know to run change detection when the disabled state changes.\n            this.stateChanges.next();\n        }\n    }\n\n    private _disabled: boolean = false;\n\n    /**\n     * Function for handling the combination Ctrl + A (select all). By default, the internal handler is used.\n     */\n    @Input()\n    get selectAllHandler() {\n        return this._selectAllHandler;\n    }\n\n    set selectAllHandler(fn: (event: KeyboardEvent, select: KbqTreeSelect) => void) {\n        if (typeof fn !== 'function') {\n            throw Error('`selectAllHandler` must be a function.');\n        }\n\n        this._selectAllHandler = fn;\n    }\n\n    /** Function for handling the combination Ctrl + A (select all). By default, the internal handler is used. */\n    private _selectAllHandler(event: KeyboardEvent, select: KbqTreeSelect): void {\n        event.preventDefault();\n\n        select.tree.selectAllOptions();\n    }\n\n    /** Whether the select is focused. */\n    get focused(): boolean {\n        return this._focused || this._panelOpen;\n    }\n\n    set focused(value: boolean) {\n        this._focused = value;\n    }\n\n    /** Whether multiple choice is enabled or not. True if multiple or multiline */\n    get multiSelection(): boolean {\n        return this.multiple || this.multiline;\n    }\n\n    private _focused = false;\n\n    /** Width of the overlay panel. */\n    protected overlayWidth: string | number;\n\n    /** Min width of the overlay panel. */\n    protected overlayMinWidth: string | number;\n\n    /**\n     * Minimum width of the panel.\n     * If minWidth is larger than window width, it will be ignored.\n     */\n    @Input({ transform: numberAttribute }) panelMinWidth: Exclude<KbqTreeSelectPanelWidth, 'auto'> =\n        this.defaultOptions?.panelMinWidth ?? 200;\n\n    /** Origin for the overlay panel. */\n    protected overlayOrigin?: CdkOverlayOrigin | ElementRef;\n\n    /**\n     * Width of the panel. If set to `auto`, the panel will match the trigger width.\n     * If set to null or an empty string, the panel will grow to match the longest option's text.\n     */\n    @Input() panelWidth: KbqTreeSelectPanelWidth = this.defaultOptions?.panelWidth || null;\n    /**\n     * Controls when the search functionality is displayed based on the number of available options.\n     *\n     * Automatically enables search hiding if value provided, even if `defaultOptions.searchMinOptionsThreshold` is provided.\n     * @default undefined\n     */\n    @Input() set searchMinOptionsThreshold(value: 'auto' | number | undefined) {\n        this._searchMinOptionsThreshold =\n            this.resolveSearchMinOptionsThreshold(value) ??\n            this.resolveSearchMinOptionsThreshold(this.defaultOptions?.searchMinOptionsThreshold);\n    }\n\n    get searchMinOptionsThreshold(): number | undefined {\n        return this._searchMinOptionsThreshold;\n    }\n\n    private _searchMinOptionsThreshold = this.resolveSearchMinOptionsThreshold();\n\n    get panelOpen(): boolean {\n        return this._panelOpen;\n    }\n\n    get canShowCleaner(): boolean {\n        return !this.disabled && this.cleaner && this.selectionModel.hasValue();\n    }\n\n    /** @docs-private */\n    get colorForState(): KbqComponentColors {\n        const hasLegacyValidateDirective = this.elementRef.nativeElement.classList.contains(\n            'kbq-control_has-validate-directive'\n        );\n\n        return (hasLegacyValidateDirective && this.ngControl?.invalid) || this.errorState\n            ? KbqComponentColors.Error\n            : KbqComponentColors.ContrastFade;\n    }\n\n    isEmptySearchResult: boolean;\n\n    triggerValues: KbqTreeSelectTriggerValue[] = [];\n\n    private closeSubscription = Subscription.EMPTY;\n\n    private _panelOpen = false;\n\n    private originalOnKeyDown: (event: KeyboardEvent) => void;\n\n    /** The scroll position of the overlay panel, calculated to center the selected option. */\n    private scrollTop = 0;\n\n    /** Unique id for this input. */\n    private readonly uid = `kbq-tree-select-${nextUniqueId++}`;\n\n    // Used for storing the values that were assigned before the options were initialized.\n    private tempValues: string | string[] | null;\n\n    private readonly destroyRef = inject(DestroyRef);\n    private readonly window = inject(KBQ_WINDOW);\n\n    constructor(\n        public elementRef: ElementRef<HTMLElement>,\n        readonly changeDetectorRef: ChangeDetectorRef,\n        private readonly ngZone: NgZone,\n        private readonly renderer: Renderer2,\n        public defaultErrorStateMatcher: ErrorStateMatcher,\n        @Inject(KBQ_SELECT_SCROLL_STRATEGY) private readonly scrollStrategyFactory,\n        @Optional() private readonly dir: Directionality,\n        @Optional() public parentForm: NgForm,\n        @Optional() public parentFormGroup: FormGroupDirective,\n        @Host() @Optional() private readonly parentFormField: KbqFormField,\n        @Optional() @Self() public ngControl: NgControl,\n        @Optional() @Inject(KBQ_LOCALE_SERVICE) private localeService?: KbqLocaleService\n    ) {\n        super();\n\n        this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n\n        if (this.ngControl) {\n            // Note: we provide the value accessor through here, instead of\n            // the `providers` to avoid running into a circular import.\n            this.ngControl.valueAccessor = this;\n        }\n\n        // Force setter to be called in case id was not specified.\n        this.id = this.id;\n\n        afterNextRender(() => {\n            if (this.multiple && !this.multiline) {\n                merge(fromEvent(this.window, 'resize'), this.tags.changes)\n                    .pipe(delay(0), debounceTime(50), takeUntilDestroyed(this.destroyRef))\n                    .subscribe(this.calculateHiddenItems);\n            }\n        });\n    }\n\n    ngOnInit() {\n        this.stateChanges.next();\n\n        // We need `distinctUntilChanged` here, because some browsers will\n        // fire the animation end event twice for the same animation. See:\n        // https://github.com/angular/angular/issues/24084\n        this.panelDoneAnimatingStream\n            .pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => {\n                if (this.panelOpen) {\n                    this.scrollTop = 0;\n\n                    setTimeout(() => {\n                        this.highlightCorrectOption();\n\n                        if (this.search) {\n                            this.search.focus();\n                        }\n                    });\n\n                    this.openedChange.emit(true);\n                } else {\n                    this.openedChange.emit(false);\n                    this.overlayDir.offsetX = 0;\n                    this.changeDetectorRef.markForCheck();\n                }\n            });\n    }\n\n    ngDoCheck() {\n        if (this.ngControl) {\n            this.updateErrorState();\n        }\n    }\n\n    ngAfterContentInit() {\n        if (!this.tree) return;\n\n        this.tree.resetFocusedItemOnBlur = false;\n        this.tree.optionShouldHoldFocusOnBlur = !!this.search;\n\n        this.selectionModel = this.tree.selectionModel = new SelectionModel<any>(this.multiSelection);\n\n        this.selectionModel.changed.subscribe(() => {\n            this.onChange(this.selectedValues);\n\n            if (this.multiSelection) {\n                this.refreshTriggerValues();\n            }\n        });\n\n        this.selectionModel.changed.pipe(delay(0)).subscribe(() => this.setOverlayPosition());\n\n        // eslint-disable-next-line @angular-eslint/no-lifecycle-call\n        this.tree.ngAfterContentInit();\n\n        this.initKeyManager();\n\n        this.options = this.tree.renderedOptions;\n        this.tree.autoSelect = this.autoSelect;\n\n        if (this.tree.multipleMode === null) {\n            // setTimeout need for prevent an error \"NG0100: ExpressionChangedAfterItHasBeenCheckedError\"\n            setTimeout(() => (this.tree.multipleMode = this.multiSelection ? MultipleMode.CHECKBOX : null));\n        }\n\n        if (this.multiSelection) {\n            this.tree.noUnselectLast = false;\n        }\n\n        if (this.tempValues) {\n            this.setSelectionByValue(this.tempValues);\n            this.tempValues = null;\n        }\n\n        this.userInteractionChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n            if (!this.multiSelection && this.panelOpen) {\n                this.close();\n\n                Promise.resolve().then(() => this.focus());\n            }\n        });\n\n        this.tree.selectionChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n            this.selectionChange.emit(new KbqTreeSelectChange(this, event.option, false, event.options));\n\n            if (this.search) {\n                this.search.focus();\n            }\n        });\n\n        if (!this.multiSelection) {\n            this.selectionModel.changed\n                .pipe(\n                    filter(({ added }) => !!added.length),\n                    takeUntilDestroyed(this.destroyRef)\n                )\n                .subscribe(({ added }) => {\n                    this.tree.keyManager.setFocusOrigin('program');\n                    this.tree.keyManager.setActiveItem(this.options.find(({ data }) => data === added[0]) as any);\n                });\n        }\n\n        this.subscribeOnSearchChanges();\n    }\n\n    ngAfterViewInit() {\n        if (!this.tree) return;\n\n        this.tree.treeControl.expansionModel.changed\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => this.setOverlayPosition());\n    }\n\n    ngOnDestroy() {\n        this.stateChanges.complete();\n        this.closeSubscription.unsubscribe();\n    }\n\n    updateErrorState() {\n        const oldState = this.errorState;\n        const parent = this.parentFormGroup || this.parentForm;\n        const matcher = this.errorStateMatcher || this.defaultErrorStateMatcher;\n        const control = this.ngControl ? (this.ngControl.control as UntypedFormControl) : null;\n        const newState = matcher.isErrorState(control, parent);\n\n        if (newState !== oldState) {\n            this.errorState = newState;\n            this.stateChanges.next();\n        }\n    }\n\n    @Input()\n    hiddenItemsTextFormatter(hiddenItemsText: string, hiddenItems: number): string {\n        return hiddenItemsText.replace('{{ number }}', hiddenItems.toString());\n    }\n\n    clearValue($event): void {\n        // need to prevent opening\n        $event.stopPropagation();\n        // need to prevent scrolling\n        $event.preventDefault();\n\n        this.selectionModel.clear();\n        this.tree.keyManager.setActiveItem(-1);\n\n        this.setSelectionByValue([]);\n\n        this.onChange(this.selectedValues);\n\n        this.selectionChange.emit(new KbqTreeSelectChange(this, this.selectedValues));\n\n        this.focus();\n    }\n\n    /** `View -> model callback called when value changes` */\n    onChange: (value: any) => void = () => {};\n\n    /** `View -> model callback called when select has been touched` */\n    onTouched = () => {};\n\n    handleClick() {\n        if (this.customMatcher && !this.customMatcher.useDefaultHandlers) return;\n\n        this.toggle();\n    }\n\n    toggle(): void {\n        if (this.panelOpen) {\n            this.close();\n        } else {\n            this.open();\n        }\n    }\n\n    open(): void {\n        if (this.disabled || !this.options || !this.options.length || this._panelOpen) return;\n\n        // add check for form-field bounding rectangles, since it adds extra padding around the trigger\n        this.triggerRect = (\n            this.parentFormField?.getConnectedOverlayOrigin().nativeElement || this.trigger.nativeElement\n        ).getBoundingClientRect();\n\n        // Note: The computed font-size will be a string pixel value (e.g. \"16px\").\n        // `parseInt` ignores the trailing 'px' and converts this to a number.\n        this.triggerFontSize = parseInt(this.window.getComputedStyle(this.trigger.nativeElement)['font-size']);\n\n        // It's important that we read this as late as possible, because doing so earlier will\n        // return a different element since it's based on queries in the form field which may\n        // not have run yet. Also this needs to be assigned before we measure the overlay width.\n        if (this.parentFormField) {\n            this.overlayOrigin = this.parentFormField.getConnectedOverlayOrigin();\n        }\n\n        this.overlayWidth = this.getOverlayWidth(this.overlayOrigin);\n        // set overlayMinWidth to the largest of `panelMinWidth` and `triggerRect.width`\n        // only if `overlayWidth` falsy and `panelMinWidth` not provided.\n        // This ensures panel isn't narrow.\n        this.overlayMinWidth =\n            this.panelMinWidth !== null && !this.overlayWidth\n                ? Math.max(this.panelMinWidth, this.triggerRect.width)\n                : '';\n\n        this._panelOpen = true;\n\n        this.changeDetectorRef.markForCheck();\n\n        // Set the font size on the panel element once it exists.\n        this.ngZone.onStable\n            .asObservable()\n            .pipe(take(1))\n            .subscribe(() => {\n                if (this.triggerFontSize && this.overlayDir.overlayRef && this.overlayDir.overlayRef.overlayElement) {\n                    this.overlayDir.overlayRef.overlayElement.style.fontSize = `${this.triggerFontSize}px`;\n                }\n            });\n    }\n\n    /** Closes the overlay panel and focuses the host element. */\n    close(): void {\n        if (!this._panelOpen) {\n            return;\n        }\n\n        this._panelOpen = false;\n\n        this.changeDetectorRef.markForCheck();\n        this.onTouched();\n\n        if (this.search) {\n            this.search.reset();\n        }\n    }\n\n    /**\n     * Sets the select's value. Part of the ControlValueAccessor interface\n     * required to integrate with Angular's core forms API.\n     *\n     * @param value New value to be written to the model.\n     */\n    writeValue(value: any): void {\n        if (this.tree) {\n            this.setSelectionByValue(value);\n        } else {\n            this.tempValues = value;\n        }\n    }\n\n    /**\n     * Saves a callback function to be invoked when the select's value\n     * changes from user input. Part of the ControlValueAccessor interface\n     * required to integrate with Angular's core forms API.\n     *\n     * @param fn Callback to be triggered when the value changes.\n     */\n    registerOnChange(fn: (value: any) => void) {\n        this.onChange = fn;\n    }\n\n    /**\n     * Saves a callback function to be invoked when the select is blurred\n     * by the user. Part of the ControlValueAccessor interface required\n     * to integrate with Angular's core forms API.\n     *\n     * @param fn Callback to be triggered when the component has been touched.\n     */\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    registerOnTouched(fn: () => {}) {\n        this.onTouched = fn;\n    }\n\n    /**\n     * Disables the select. Part of the ControlValueAccessor interface required\n     * to integrate with Angular's core forms API.\n     *\n     * @param isDisabled Sets whether the component is disabled.\n     */\n    setDisabledState(isDisabled: boolean) {\n        this.disabled = isDisabled;\n        this.changeDetectorRef.markForCheck();\n        this.stateChanges.next();\n    }\n\n    get selected(): any {\n        return this.multiSelection ? this.selectionModel?.selected : this.selectionModel?.selected[0];\n    }\n\n    get selectedValues(): any {\n        const selectedValues = this.selectionModel.selected.map((value) => this.tree.treeControl.getValue(value));\n\n        return this.multiSelection ? selectedValues : selectedValues[0];\n    }\n\n    get triggerValue(): string {\n        if (this.empty) {\n            return '';\n        }\n\n        return this.tree.treeControl.getViewValue(this.selected);\n    }\n\n    get empty(): boolean {\n        return !this.selectionModel || this.selectionModel.isEmpty();\n    }\n\n    isRtl(): boolean {\n        return this.dir ? this.dir.value === 'rtl' : false;\n    }\n\n    get firstSelected() {\n        return this.selectionModel.selected.filter((node) => !this.tree.treeControl.isDisabled(node))[0];\n    }\n\n    handleKeydown(event: KeyboardEvent) {\n        if (this.customMatcher && !this.customMatcher.useDefaultHandlers) return;\n\n        if (!this.disabled) {\n            if (this.panelOpen) {\n                this.panelKeydownHandler(event);\n            } else {\n                this.triggerKeydownHandler(event);\n            }\n        }\n    }\n\n    onFocus() {\n        if (this.customMatcher && !this.customMatcher.useDefaultHandlers) return;\n\n        if (!this.disabled) {\n            this._focused = true;\n\n            this.stateChanges.next();\n        }\n    }\n\n    /**\n     * Calls the touched callback only if the panel is closed. Otherwise, the trigger will\n     * \"blur\" to the panel when it opens, causing a false positive.\n     */\n    onBlur() {\n        if (this.customMatcher && !this.customMatcher.useDefaultHandlers) return;\n\n        this._focused = false;\n\n        if (!this.disabled && !this.panelOpen) {\n            this.onTouched();\n            this.changeDetectorRef.markForCheck();\n            this.stateChanges.next();\n\n            if (this.useLegacyValidation && this.ngControl?.control) {\n                const control = this.ngControl.control;\n\n                control.updateValueAndValidity({ emitEvent: false });\n                (control.statusChanges as EventEmitter<string>).emit(control.status);\n            }\n        }\n    }\n\n    /** Callback that is invoked when the overlay panel has been attached. */\n    onAttached() {\n        this.overlayDir.positionChange.pipe(take(1)).subscribe(() => {\n            this.changeDetectorRef.detectChanges();\n            this.setOverlayPosition();\n            this.panel.nativeElement.scrollTop = this.scrollTop;\n\n            this.tree.updateScrollSize();\n        });\n\n        this.closeSubscription = this.closingActions().subscribe(() => this.close());\n    }\n\n    /** Returns the theme to be used on the panel. */\n    getPanelTheme(): string {\n        return this.parentFormField ? `kbq-${this.parentFormField.color}` : '';\n    }\n\n    focus() {\n        this.elementRef.nativeElement.focus();\n    }\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    onContainerClick() {\n        this.focus();\n    }\n\n    /** Invoked when an option is clicked. */\n    onRemoveSelectedOption(selectedOption: any, $event) {\n        $event.stopPropagation();\n\n        this.selectionModel.deselect(\n            this.selected.find((value) => this.tree.treeControl.getValue(value) === selectedOption.value)\n        );\n\n        this.selectionChange.emit(\n            new KbqTreeSelectChange(\n                this,\n                this.options.find((option) => option.value === selectedOption.value) || selectedOption.value\n            )\n        );\n\n        this.onChange(this.selectedValues);\n    }\n\n    calculateHiddenItems = () => {\n        if (\n            !this.isBrowser ||\n            this.customTrigger ||\n            this.customMatcher ||\n            this.empty ||\n            !this.multiple ||\n            this.multiline\n        )\n            return;\n\n        const totalItemsWidth = this.getTotalItemsWidthInMatcher();\n        const [totalVisibleItemsWidth, visibleItems] = this.getTotalVisibleItems();\n\n        this.hiddenItems = this.selectionModel.selected.length - visibleItems;\n        this.changeDetectorRef.detectChanges();\n\n        if (this.hiddenItems) {\n            const itemsCounter = this.trigger.nativeElement.querySelector('.kbq-select__match-hidden-text');\n            const matcherList = this.trigger.nativeElement.querySelector('.kbq-select__match-list');\n\n            const itemsCounterShowed = itemsCounter.offsetTop < itemsCounter.offsetHeight;\n            const itemsCounterWidth: number = Math.floor(itemsCounter.getBoundingClientRect().width);\n\n            const matcherListWidth: number = Math.floor(matcherList.getBoundingClientRect().width);\n            const matcherWidth: number = matcherListWidth + (itemsCounterShowed ? itemsCounterWidth : 0);\n\n            if (itemsCounterShowed && totalItemsWidth < matcherWidth) {\n                this.hiddenItems = 0;\n                this.changeDetectorRef.detectChanges();\n            }\n\n            if (\n                totalVisibleItemsWidth === matcherListWidth ||\n                totalVisibleItemsWidth + itemsCounterWidth < matcherListWidth\n            ) {\n                this.changeDetectorRef.markForCheck();\n\n                return;\n            }\n        }\n\n        this.changeDetectorRef.markForCheck();\n    };\n\n    triggerKeydownHandler(event: KeyboardEvent) {\n        const keyCode = event.keyCode;\n        const isArrowKey =\n            keyCode === DOWN_ARROW || keyCode === UP_ARROW || keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW;\n        const isOpenKey = keyCode === ENTER || keyCode === SPACE;\n\n        // Open the select on ALT + arrow key to match the native <select>\n        if (isOpenKey || ((this.multiSelection || event.altKey) && isArrowKey)) {\n            // prevents the page from scrolling down when pressing space\n            event.preventDefault();\n\n            this.open();\n        } else if (!this.multiSelection && this.tree.keyManager && this.tree.keyManager.onKeydown) {\n            this.tree.keyManager.onKeydown(event);\n        }\n    }\n\n    panelKeydownHandler(event: KeyboardEvent) {\n        const keyCode = event.keyCode;\n        const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;\n\n        if ((isArrowKey && event.altKey) || keyCode === ESCAPE || keyCode === TAB) {\n            // Close the select on ALT + arrow key to match the native <select>\n            event.preventDefault();\n            this.close();\n            this.focus();\n        } else if (keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW) {\n            return this.originalOnKeyDown.call(this.tree, event);\n        } else if (keyCode === HOME) {\n            event.preventDefault();\n\n            this.tree.keyManager.setFirstItemActive();\n        } else if (keyCode === END) {\n            event.preventDefault();\n\n            this.tree.keyManager.setLastItemActive();\n        } else if (keyCode === PAGE_UP) {\n            event.preventDefault();\n\n            this.tree.keyManager.setPreviousPageItemActive();\n        } else if (keyCode === PAGE_DOWN) {\n            event.preventDefault();\n\n            this.tree.keyManager.setNextPageItemActive();\n        } else if ((keyCode === ENTER || keyCode === SPACE) && this.tree.keyManager.activeItem) {\n            event.preventDefault();\n\n            if (!this.autoSelect) {\n                this.originalOnKeyDown.call(this.tree, event);\n            } else {\n                this.close();\n                this.focus();\n            }\n        } else if (this.multiSelection && isSelectAll(event)) {\n            this.selectAllHandler(event, this);\n        } else {\n            const previouslyFocusedIndex = this.tree.keyManager.activeItemIndex;\n\n            this.tree.keyManager.setFocusOrigin('keyboard');\n            this.tree.keyManager.onKeydown(event);\n\n            if (\n                this.multiSelection &&\n                isArrowKey &&\n                event.shiftKey &&\n                this.tree.keyManager.activeItem &&\n                this.tree.keyManager.activeItemIndex !== previouslyFocusedIndex\n            ) {\n                this.tree.keyManager.activeItem.selectViaInteraction(event);\n            }\n\n            if (this.autoSelect && this.tree.keyManager.activeItem) {\n                this.tree.setSelectedOptionsByKey(\n                    this.tree.keyManager.activeItem,\n                    hasModifierKey(event, 'shiftKey'),\n                    // ctrlKey is for Windows, metaKey is for MacOS\n                    hasModifierKey(event, 'ctrlKey', 'metaKey')\n                );\n            }\n\n            // Ensure the active option's keyboard-focus indicator is shown even when the\n            // index didn't change (e.g. ArrowDown on a single-option list) — without this\n            // setActiveItem isn't invoked and the focus stays on the trigger.\n            if (isArrowKey && this.tree.keyManager.activeItemIndex === previouslyFocusedIndex) {\n                this.tree.keyManager.activeItem?.focus('keyboard');\n            }\n\n            if (this.search && this.shouldShowSearch()) {\n                this.search.focus();\n            }\n        }\n    }\n\n    /** @docs-private */\n    protected shouldShowSearch(): boolean {\n        return (\n            isUndefined(this.searchMinOptionsThreshold) ||\n            !!this.search.value() ||\n            this.options.length >= this.searchMinOptionsThreshold\n        );\n    }\n\n    private updateLocaleParams = () => {\n        this.hiddenItemsText = this.localeService?.getParams('select').hiddenItemsText;\n\n        this.changeDetectorRef.markForCheck();\n    };\n\n    private closingActions() {\n        const backdrop = this.overlayDir.overlayRef!.backdropClick();\n        const outsidePointerEvents = this.overlayDir\n            .overlayRef!.outsidePointerEvents()\n            .pipe(filter((event) => !this.elementRef.nativeElement.contains(_getEventTarget(event))));\n        const detachments = this.overlayDir.overlayRef!.detachments();\n\n        return merge(backdrop, outsidePointerEvents, detachments);\n    }\n\n    private getTotalItemsWidthInMatcher(): number {\n        const triggerClone = this.buildTriggerClone();\n\n        triggerClone.querySelector('.kbq-select__match-hidden-text')?.remove();\n        this.renderer.appendChild(this.trigger.nativeElement, triggerClone);\n\n        let totalItemsWidth: number = 0;\n        const selectedItemsViewValueContainers = triggerClone.querySelectorAll<HTMLElement>('kbq-tag');\n\n        selectedItemsViewValueContainers.forEach((item) => (totalItemsWidth += this.getItemWidth(item)));\n\n        triggerClone.remove();\n\n        return totalItemsWidth;\n    }\n\n    private getTotalVisibleItems(): [number, number] {\n        const triggerClone = this.buildTriggerClone();\n\n        this.renderer.setStyle(triggerClone.querySelector('.kbq-select__match-hidden-text'), 'display', 'block');\n        this.renderer.appendChild(this.trigger.nativeElement, triggerClone);\n\n        let visibleItemsCount: number = 0;\n        let totalVisibleItemsWidth: number = 0;\n\n        (triggerClone.querySelectorAll('kbq-tag') as NodeListOf<HTMLElement>).forEach((item) => {\n            if (item.offsetTop < item.offsetHeight) {\n                totalVisibleItemsWidth += this.getItemWidth(item);\n                visibleItemsCount++;\n            }\n        });\n\n        triggerClone.remove();\n\n        return [totalVisibleItemsWidth, visibleItemsCount];\n    }\n\n    /** Gets how wide the overlay panel should be. */\n    private getOverlayWidth(origin?: ElementRef | CdkOverlayOrigin): string | number {\n        if (this.panelWidth === 'auto') {\n            const elementRef = origin instanceof CdkOverlayOrigin ? origin.elementRef : origin || this.elementRef;\n\n            return elementRef.nativeElement.getBoundingClientRect().width;\n        }\n\n        return this.panelWidth ?? '';\n    }\n\n    private buildTriggerClone(): HTMLDivElement {\n        const triggerClone = this.trigger.nativeElement.cloneNode(true);\n\n        this.renderer.setStyle(triggerClone, 'position', 'absolute');\n        this.renderer.setStyle(triggerClone, 'visibility', 'hidden');\n        this.renderer.setStyle(triggerClone, 'top', '-100%');\n        this.renderer.setStyle(triggerClone, 'left', '0');\n\n        return triggerClone;\n    }\n\n    private getItemWidth(element: HTMLElement): number {\n        const computedStyle = this.window.getComputedStyle(element);\n\n        const width: number = parseInt(computedStyle.width as string);\n        const marginLeft: number = parseInt(computedStyle.marginLeft as string);\n        const marginRight: number = parseInt(computedStyle.marginRight as string);\n\n        return width + marginLeft + marginRight + parseInt(SelectSizeMultipleContentGap);\n    }\n\n    private refreshTriggerValues(): void {\n        this.triggerValues = this.selectionModel.selected.map((node) => ({\n            value: this.tree.treeControl.getValue(node),\n            viewValue: this.tree.treeControl.getViewValue(node),\n            disabled: this.tree.treeControl.isDisabled(node)\n        }));\n\n        this.changeDetectorRef.detectChanges();\n    }\n\n    /**\n     * Sets the selected option based on a value. If no option can be\n     * found with the designated value, the select trigger is cleared.\n     */\n    private setSelectionByValue(value: any | any[]) {\n        if (this.multiSelection && value) {\n            if (!Array.isArray(value)) {\n                throw getKbqSelectNonArrayValueError();\n            }\n\n            this.tree.setOptionsFromValues(value);\n\n            this.sortValues();\n        } else {\n            this.tree.setOptionsFromValues([value]);\n        }\n\n        this.changeDetectorRef.detectChanges();\n    }\n\n    private initKeyManager() {\n        this.originalOnKeyDown = this.tree.onKeyDown;\n\n        this.tree.onKeyDown = () => {};\n\n        this.tree.keyManager.change.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n            if (this._panelOpen && this.panel) {\n                this.scrollActiveOptionIntoView();\n            } else if (!this._panelOpen && !this.multiSelection && this.tree.keyManager.activeItem) {\n                this.tree.keyManager.activeItem.selectViaInteraction();\n            }\n        });\n    }\n\n    /** Sorts the selected values in the selected based on their order in the panel. */\n    private sortValues() {\n        if (this.multiSelection) {\n            const options = this.options.toArray();\n\n            this.selectionModel.sort((a, b) => {\n                return this.sortComparator\n                    ? this.sortComparator(a, b, options)\n                    : options.indexOf(a) - options.indexOf(b);\n            });\n\n            this.stateChanges.next();\n        }\n    }\n\n    /**\n     * Highlights the selected item. If no option is selected, it will highlight\n     * the first item instead.\n     */\n    private highlightCorrectOption() {\n        if (!this.tree.keyManager) {\n            return;\n        }\n\n        const selectedOption = this.options.find((option) => (option.data as any) === this.firstSelected);\n\n        this.tree.keyManager.setFocusOrigin('keyboard');\n\n        if (selectedOption) {\n            this.tree.keyManager.setActiveItem(selectedOption);\n        } else {\n            this.tree.keyManager.setFirstItemActive();\n\n            if (this.tree.keyManager.activeItem?.disabled) {\n                this.tree.keyManager.setActiveItem(-1);\n            }\n        }\n    }\n\n    /** Scrolls the active option into view. */\n    private scrollActiveOptionIntoView() {\n        this.tree.keyManager.activeItem?.focus();\n    }\n\n    private subscribeOnSearchChanges() {\n        if (!this.search?.ngControl.valueChanges) return;\n\n        this.search.ngControl.valueChanges.pipe(audit(() => this.tree.unorderedOptions.changes)).subscribe((value) => {\n            this.isEmptySearchResult = !!value && this.tree.isEmpty;\n            this.changeDetectorRef.markForCheck();\n        });\n    }\n}\n","<div\n    #fallbackOverlayOrigin=\"cdkOverlayOrigin\"\n    #trigger\n    cdkOverlayOrigin\n    class=\"kbq-select__trigger\"\n    [class.kbq-select__trigger_empty]=\"empty\"\n    [class.kbq-select__trigger_multiline]=\"multiline\"\n    [class.kbq-select__trigger_multiple]=\"multiple\"\n    [class.kbq-select__trigger_single]=\"!multiple\"\n>\n    @if (!!customMatcher) {\n        <ng-content select=\"kbq-select-matcher, [kbq-select-matcher]\" />\n    } @else {\n        <div class=\"kbq-select__matcher\">\n            @if (empty) {\n                <span class=\"kbq-select__placeholder\">\n                    {{ placeholder || '\\u00A0' }}\n                </span>\n            } @else {\n                @if (!!customTrigger) {\n                    <ng-content select=\"kbq-select-trigger, [kbq-select-trigger]\" />\n                } @else {\n                    <div class=\"kbq-select__match-container\">\n                        @if (multiSelection) {\n                            <div\n                                [class.kbq-select__match-list]=\"!multiline\"\n                                [class.kbq-select__multiline-match-list]=\"multiline\"\n                            >\n                                @if (!customTagTemplateRef) {\n                                    @for (option of triggerValues; track option) {\n                                        <kbq-tag\n                                            [color]=\"colorForState\"\n                                            [disabled]=\"option.disabled || disabled\"\n                                            [selectable]=\"false\"\n                                        >\n                                            {{ option.viewValue }}\n                                            @if (!option.disabled && !disabled) {\n                                                <i\n                                                    kbq-icon=\"kbq-xmark-s_16\"\n                                                    kbqTagRemove\n                                                    (click)=\"onRemoveSelectedOption(option, $event)\"\n                                                ></i>\n                                            }\n                                        </kbq-tag>\n                                    }\n                                }\n                                @if (customTagTemplateRef) {\n                                    @for (option of triggerValues; track option) {\n                                        <ng-container\n                                            [ngTemplateOutlet]=\"customTagTemplateRef\"\n                                            [ngTemplateOutletContext]=\"{ $implicit: option, select: this }\"\n                                        />\n                                    }\n                                }\n                            </div>\n                        } @else {\n                            <span class=\"kbq-select__matcher-text\">\n                                {{ triggerValue }}\n                            </span>\n                        }\n                        @if (!multiline) {\n                            <div\n                                class=\"kbq-select__match-hidden-text\"\n                                [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\"\n                            >\n                                {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\n                            </div>\n                        }\n                    </div>\n                }\n            }\n\n            @if (canShowCleaner) {\n                <div\n                    class=\"kbq-select__cleaner\"\n                    (click)=\"clearValue($event)\"\n                    (keydown.enter)=\"clearValue($event)\"\n                    (keydown.space)=\"clearValue($event)\"\n                >\n                    <ng-content select=\"kbq-cleaner\" />\n                </div>\n            }\n\n            <div class=\"kbq-select__arrow-wrapper\">\n                <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"kbq-select__arrow\" [color]=\"colorForState\"></i>\n            </div>\n        </div>\n    }\n</div>\n\n<ng-template\n    cdkConnectedOverlay\n    cdkConnectedOverlayLockPosition\n    [cdkConnectedOverlayBackdropClass]=\"backdropClass\"\n    [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop\"\n    [cdkConnectedOverlayMinWidth]=\"overlayMinWidth\"\n    [cdkConnectedOverlayOffsetY]=\"offsetY\"\n    [cdkConnectedOverlayOpen]=\"panelOpen\"\n    [cdkConnectedOverlayOrigin]=\"overlayOrigin || fallbackOverlayOrigin\"\n    [cdkConnectedOverlayPanelClass]=\"overlayPanelClass\"\n    [cdkConnectedOverlayPositions]=\"positions\"\n    [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n    [cdkConnectedOverlayWidth]=\"overlayWidth\"\n    (attach)=\"onAttached()\"\n    (backdropClick)=\"close()\"\n>\n    <div\n        #panel\n        class=\"kbq-tree-select__panel {{ getPanelTheme() }}\"\n        cdkMonitorSubtreeFocus\n        [ngClass]=\"panelClass\"\n        [style.font-size.px]=\"triggerFontSize\"\n        [style.transformOrigin]=\"transformOrigin\"\n        (keydown)=\"panelKeydownHandler($event)\"\n    >\n        @if (search && shouldShowSearch()) {\n            <div class=\"kbq-select__search-container\">\n                <ng-content select=\"[kbqSelectSearch]\" />\n            </div>\n        }\n\n        <div\n            #optionsContainer\n            class=\"kbq-tree-select__content kbq-scrollbar\"\n            [@fadeInContent]=\"'showing'\"\n            (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\"\n        >\n            @if (isEmptySearchResult) {\n                <ng-content select=\"[kbq-select-search-empty-result]\" />\n            }\n\n            <ng-content select=\"kbq-tree-selection\" />\n        </div>\n\n        <ng-content select=\"kbq-select-footer,[kbq-tree-select-footer]\" />\n    </div>\n</ng-template>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport {\n    KBQ_SELECT_SCROLL_STRATEGY_PROVIDER,\n    KbqPseudoCheckboxModule,\n    KbqSelectFooter,\n    KbqSelectMatcher,\n    KbqSelectSearch,\n    KbqSelectSearchEmptyResult,\n    KbqSelectTrigger\n} from '@koobiq/components/core';\nimport { KbqFormFieldModule } from '@koobiq/components/form-field';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTagsModule } from '@koobiq/components/tags';\nimport { KbqTreeModule } from '@koobiq/components/tree';\nimport { KbqTreeSelect } from './tree-select.component';\n\n@NgModule({\n    imports: [\n        OverlayModule,\n        KbqTreeModule,\n        KbqIconModule,\n        KbqTagsModule,\n        KbqPseudoCheckboxModule,\n        KbqSelectSearch,\n        KbqSelectFooter,\n        KbqSelectMatcher,\n        KbqSelectTrigger,\n        KbqSelectSearchEmptyResult,\n        NgClass,\n        NgTemplateOutlet,\n        A11yModule,\n        KbqTreeSelect\n    ],\n    exports: [\n        KbqTreeSelect,\n        KbqSelectSearch,\n        KbqSelectFooter,\n        KbqSelectMatcher,\n        KbqSelectTrigger,\n        KbqSelectSearchEmptyResult,\n        KbqFormFieldModule\n    ],\n    providers: [KBQ_SELECT_SCROLL_STRATEGY_PROVIDER]\n})\nexport class KbqTreeSelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["SelectSizeMultipleContentGap"],"mappings":"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"}