{"version":3,"file":"nw-style-guide-picker.mjs","sources":["../../../projects/nw-style-guide/picker/picker.component.ts","../../../projects/nw-style-guide/picker/picker.component.html","../../../projects/nw-style-guide/picker/nw-style-guide-picker.ts"],"sourcesContent":["import {\n    Component,\n    Input,\n    Output,\n    ChangeDetectorRef,\n    ChangeDetectionStrategy,\n    EventEmitter,\n    ViewChild,\n    ViewChildren,\n    ElementRef,\n    QueryList,\n    OnInit,\n    OnDestroy,\n    OnChanges,\n    inject\n} from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { IPickerItem } from './IPickerItem';\nimport { Subscription } from 'rxjs';\nimport { isUndefined } from 'lodash-es';\nimport { NgClass } from '@angular/common';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\n\n@Component({\n    selector: 'nw-angular-picker',\n    templateUrl: './picker.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [ReactiveFormsModule, NgClass]\n})\nexport class NwPickerComponent implements OnInit, OnChanges, OnDestroy {\n    private _cdRef = inject(ChangeDetectorRef);\n    private _elementRef = inject(ElementRef);\n    private _liveAnnouncer = inject(LiveAnnouncer);\n\n    // static counter to generate unique ids for multiple instances of the component on the same page\n    private static _idCounter = 0;\n    public readonly pickerId = `nw-picker-${++NwPickerComponent._idCounter}`;\n\n    @Input() items: IPickerItem[] = [];\n    @Input() inputClasses: string = '';\n    @Input() placeholderText: string = 'Search...';\n    @Input() inputPlaceholderText: string = 'Search...';\n    @Input() noSelectionsPlaceholderText: string = 'Search...';\n    @Input() initialParentId: any = null;\n    @Input() shouldShowSelections: boolean = true;\n    @Input() canExclude: boolean = true;\n    @Input() isHeightDynamic: boolean;\n    @Input() isMultiSelect: boolean = true;\n    @Input() isMobileDisplay: boolean = false;\n    @Input() isDisabled: boolean = false;\n    @Input() isChevronHidden: boolean = false;\n\n    @Output() selections: EventEmitter<IPickerItem[]> = new EventEmitter<IPickerItem[]>();\n    @Output() toggleInclude: EventEmitter<{ item: IPickerItem; searchTerm: string }> = new EventEmitter<{\n        item: IPickerItem;\n        searchTerm: string;\n    }>();\n    @Output() toggleExclude: EventEmitter<{ item: IPickerItem; searchTerm: string }> = new EventEmitter<{\n        item: IPickerItem;\n        searchTerm: string;\n    }>();\n    @Output() edit: EventEmitter<any> = new EventEmitter<any>();\n    @Output() closed: EventEmitter<any> = new EventEmitter<any>();\n    @Output() focus: EventEmitter<ElementRef> = new EventEmitter<ElementRef>();\n    @Output() blur: EventEmitter<ElementRef> = new EventEmitter<ElementRef>();\n    @Output() clearAll: EventEmitter<any> = new EventEmitter<any>();\n    @Output() clearSingle: EventEmitter<IPickerItem> = new EventEmitter<IPickerItem>();\n    @Output() clearSearch: EventEmitter<any> = new EventEmitter<any>();\n    @Output() desc: EventEmitter<IPickerItem> = new EventEmitter<IPickerItem>();\n    @Output() asc: EventEmitter<IPickerItem> = new EventEmitter<IPickerItem>();\n\n    @ViewChild('inputEl', { static: true }) inputEl: ElementRef;\n    @ViewChildren('selectionsListItems') selectionsListItems: QueryList<ElementRef>;\n    @ViewChildren('optionsListItems') optionsListItems: QueryList<ElementRef>;\n\n    public displayItems: IPickerItem[] = [];\n    public searchTerm: FormControl<string> = new FormControl();\n    public canViewResults: boolean = false;\n    public parentId: any;\n    public selectionsAreShowing: boolean = false;\n    public maxHeight: number = 400;\n    public focusedIndex: number = -1;\n    private _subs: Subscription[] = [];\n\n    get focusedItemId(): string | null {\n        if (this.focusedIndex >= 0 && this.displayItems?.[this.focusedIndex]) {\n            return `${this.pickerId}-option-${this.displayItems[this.focusedIndex].id}`;\n        }\n        return null;\n    }\n\n    ngOnInit() {\n        this.parentId = this.initialParentId;\n        this._subscribeToSearchTermChanges();\n    }\n\n    ngOnChanges() {\n        if (this.isDisabled) {\n            this.searchTerm.disable();\n        }\n    }\n\n    ascend(event: Event, item: IPickerItem) {\n        event.stopPropagation();\n        this._setDisplayItemsFromParentId(item.parentId);\n        this.asc.emit(item);\n        this._cdRef.detectChanges();\n        this._focusListItem(0);\n    }\n\n    displaySelectedItems() {\n        this.displayItems = this.getSelections();\n    }\n\n    getSelections() {\n        return this.items.filter(ci => ci.added || ci.excluded);\n    }\n\n    getParentItem(parentId: number | string) {\n        return this.items.find(i => i.id === parentId);\n    }\n\n    hasChildren(id: number | string) {\n        return this.items.filter(i => i.parentId === id).length;\n    }\n\n    editSelections(event: Event) {\n        event.stopPropagation();\n        this._focusInput();\n        this.selectionsAreShowing = true;\n        this.edit.emit(event);\n    }\n\n    onBackClick(event: Event) {\n        event.preventDefault();\n        event.stopPropagation();\n        this._focusInput();\n        this.selectionsAreShowing = false;\n        this._setDisplayItemsFromParentId(null);\n    }\n\n    onOptionItemKeydown(e: KeyboardEvent, item: IPickerItem, index: number) {\n        switch (e.key) {\n            case 'ArrowDown':\n                this.focusNextItem(e);\n                break;\n            case 'ArrowUp':\n                this._focusPrevItem(e);\n                break;\n            case 'ArrowLeft':\n                this._onArrowLeft(e);\n                break;\n            case 'ArrowRight':\n                this.onDrilldown(item);\n                break;\n            case 'Enter':\n                this.toggleItemInclusion(item, e);\n                break;\n            case 'Escape':\n                this._onListItemEscape(e, index);\n                break;\n        }\n    }\n\n    onSelectionItemKeydown(e: KeyboardEvent, item: IPickerItem) {\n        switch (e.key) {\n            case 'ArrowDown':\n                this.focusNextItem(e);\n                break;\n            case 'ArrowUp':\n                this._focusPrevItem(e);\n                break;\n            case 'Enter':\n                this.clearSelection(e, item);\n                break;\n            case 'Escape':\n                this.onBackClick(e);\n                break;\n        }\n    }\n\n    clearSelection(event: Event, item: IPickerItem) {\n        event.preventDefault();\n        event.stopPropagation();\n        this._focusInput();\n        item.added = false;\n        item.excluded = false;\n\n        this.clearSingle.emit(item);\n\n        if (this.getSelections().length < 1) {\n            this._setDisplayItemsFromParentId(null);\n            this.selectionsAreShowing = false;\n        }\n\n        this.selections.emit(this.getSelections());\n    }\n\n    clearSelections(e?: Event) {\n        if (e) {\n            e.stopPropagation();\n        }\n\n        this.items = this.items.map(ci => {\n            ci.added = false;\n            ci.excluded = false;\n\n            return ci;\n        });\n\n        this.clearAll.emit();\n\n        this._setDisplayItemsFromParentId(null);\n        this.selectionsAreShowing = false;\n\n        this.selections.emit(this.getSelections());\n        this._announce('All selections cleared');\n    }\n\n    toggleItemInclusion(item: IPickerItem, event: Event) {\n        event.stopPropagation();\n\n        // we're assuming that if the component is not multiSelect, then only\n        // one item can be selected at any time\n        if (!this.isMultiSelect) {\n            this.items.forEach(item => {\n                item.added = false;\n                item.excluded = false;\n            });\n        }\n        item.added = this.isMultiSelect ? !item.added : true;\n        item.excluded = false;\n\n        // setting flag for duplicate id's as in case of location for selection and deselection on checkbox click\n        if (this.isMultiSelect) {\n            this.items.forEach(pickerItem => {\n                if (item.id === pickerItem.id) {\n                    pickerItem.added = item.added;\n                }\n            });\n        }\n\n        this._toggleAncestors(item, false, false);\n        this._toggleDescendants(item, false);\n\n        this.toggleInclude.emit({\n            item: item,\n            searchTerm: this.searchTerm.value\n        });\n        this.selections.emit(this.getSelections());\n        this._announce(`${item.displayName} ${item.added ? 'selected' : 'deselected'}`);\n\n        if (!this.isMultiSelect) {\n            this.closeResults();\n        }\n    }\n\n    toggleItemExclusion(item: IPickerItem, event: Event) {\n        event.stopPropagation();\n\n        item.added = false;\n        item.excluded = !item.excluded;\n        // setting flag for duplicate id's as in case of location for selection and deselection on checkbox click\n        if (this.isMultiSelect) {\n            this.items.forEach(pickerItem => {\n                if (item.id === pickerItem.id) {\n                    pickerItem.excluded = item.excluded;\n                }\n            });\n        }\n\n        this._toggleDescendants(item, false, false);\n        this._toggleAncestors(item, undefined, false);\n\n        this.toggleExclude.emit({\n            item: item,\n            searchTerm: this.searchTerm.value\n        });\n        this.selections.emit(this.getSelections());\n        this._announce(`${item.displayName} ${item.excluded ? 'excluded' : 'exclusion removed'}`);\n\n        if (!this.isMultiSelect) {\n            this.closeResults();\n        }\n    }\n\n    // Returns 0 for the focused row, or the first row when nothing is focused (roving tabindex)\n    getTabIndex(i: number): number {\n        return this.focusedIndex === i || (this.focusedIndex === -1 && i === 0) ? 0 : -1;\n    }\n\n    // Returns 0 only when this row is focused (for child elements like checkboxes and buttons)\n    getChildTabIndex(i: number): number {\n        return this.focusedIndex === i ? 0 : -1;\n    }\n\n    getAriaLabel(item: IPickerItem) {\n        let label = item.displayName;\n        if (item.added) label += ', selected';\n        if (item.excluded) label += ', excluded';\n        if (this.hasChildren(item.id)) label += ', has sub-items';\n        return label;\n    }\n\n    focusNextItem(event: Event) {\n        event.preventDefault();\n        if (!this.canViewResults) {\n            this._openResultsAndFocusFirstItem();\n            return;\n        }\n        const listLength = this.selectionsAreShowing ? this.getSelections().length : this.displayItems.length;\n        if (listLength) {\n            this._focusListItem(Math.min(this.focusedIndex + 1, listLength - 1));\n            this._cdRef.markForCheck();\n        }\n    }\n\n    onInputEnter() {\n        if (!this.canViewResults) {\n            this._openResultsAndFocusFirstItem();\n            return;\n        }\n    }\n\n    onListFocusOut(event: FocusEvent) {\n        const list = event.currentTarget as HTMLElement;\n        const relatedTarget = event.relatedTarget as HTMLElement;\n        if (!list.contains(relatedTarget)) {\n            this.focusedIndex = -1;\n            this._cdRef.markForCheck();\n        }\n    }\n\n    onContainerFocusOut() {\n        setTimeout(() => {\n            if (!this._elementRef.nativeElement.contains(document.activeElement)) {\n                this.closeResults({ refocusInput: false });\n                this.blur.emit(this.inputEl);\n            }\n        });\n    }\n\n    onFocus() {\n        if (!this.isDisabled) {\n            this.focus.emit(this.inputEl);\n        }\n    }\n\n    showResults() {\n        if (!this.isDisabled) {\n            this.parentId = this.initialParentId;\n            this.canViewResults = true;\n            this._setDisplayItemsFromParentId(this.parentId);\n        }\n    }\n\n    close() {\n        this.inputEl.nativeElement.blur();\n    }\n\n    closeResults({ refocusInput = true } = {}) {\n        if (!this.canViewResults) {\n            return;\n        }\n        this.canViewResults = false;\n        this.focusedIndex = -1;\n        this.selectionsAreShowing = false;\n        this.searchTerm.setValue('', { emitEvent: false });\n        this.closed.emit();\n        this._cdRef.detectChanges();\n        if (refocusInput) {\n            this._focusInput();\n        }\n    }\n\n    onReset() {\n        this.clearSearch.emit();\n        this.searchTerm.setValue('');\n        this.showResults();\n        this._focusInput();\n    }\n\n    onChevronClick() {\n        this.showResults();\n        this._focusInput();\n    }\n\n    onListItemTab(event: KeyboardEvent, index: number) {\n        const { li, children } = this._focusableChildren(index);\n        const lastFocusableChild = children[children.length - 1] ?? li;\n\n        if (event.target !== lastFocusableChild) return;\n        if (index + 1 >= this.displayItems.length) return;\n        event.preventDefault();\n        this.focusedIndex = index + 1;\n\n        this._cdRef.detectChanges();\n        const next = this._focusableChildren(this.focusedIndex);\n        (next.children[0] ?? next.li).focus();\n    }\n\n    onListItemShiftTab(event: KeyboardEvent, index: number) {\n        const { li, children } = this._focusableChildren(index);\n        const firstFocusableChild = children[0] ?? li;\n\n        if (event.target !== firstFocusableChild) return;\n        event.preventDefault();\n        if (index === 0) {\n            this._focusInput();\n            return;\n        }\n        this.focusedIndex = index - 1;\n\n        this._cdRef.detectChanges();\n        const prev = this._focusableChildren(this.focusedIndex);\n        (prev.children[prev.children.length - 1] ?? prev.li).focus();\n    }\n\n    onDrilldown(item: IPickerItem) {\n        this._setDisplayItemsFromParentId(item.id);\n        this.desc.emit(item);\n        this._cdRef.detectChanges();\n        this._focusListItem(0);\n    }\n\n    getPlaceholderText() {\n        return this.getSelections().length ? this.placeholderText : this.noSelectionsPlaceholderText;\n    }\n\n    getMaxHeight(el: HTMLElement) {\n        // no dynamic height for mobile\n        if (this.isMobileDisplay) {\n            return;\n        }\n\n        if (this.isHeightDynamic) {\n            const appContainer = document.querySelector('.app-container') as HTMLElement;\n            const appContainerOffsetTop = appContainer.getBoundingClientRect().top;\n            const elOffsetTop = el.getBoundingClientRect().top;\n            const buffer = 50;\n\n            const height = appContainer.offsetHeight - (elOffsetTop - appContainerOffsetTop);\n\n            if (height < this.maxHeight) {\n                return height - buffer + 'px';\n            }\n        }\n        return;\n    }\n\n    private _setDisplayItemsFromParentId(parentId: number | string | null) {\n        if (!this.hasChildren(parentId)) {\n            return;\n        }\n        this._resetSearchTerm();\n        this.parentId = parentId;\n        this.displayItems = this.items.filter(i => i.parentId === parentId);\n        this.focusedIndex = -1;\n    }\n\n    // Returns focus to the search input and clears the focused list item index.\n    private _focusInput() {\n        this.focusedIndex = -1;\n        this.inputEl.nativeElement.focus();\n    }\n\n    // Opens the results dropdown and moves focus to the first list item.\n    // Used when the user triggers a key action (ArrowDown/Enter) while the dropdown is closed.\n    private _openResultsAndFocusFirstItem() {\n        this.showResults();\n        this._cdRef.detectChanges();\n        this._focusListItem(0);\n    }\n\n    private _focusPrevItem(event: Event) {\n        event.preventDefault();\n        if (this.focusedIndex <= 0) {\n            this._focusInput();\n            return;\n        }\n        this._focusListItem(this.focusedIndex - 1);\n        this._cdRef.markForCheck();\n    }\n\n    private _toggleDescendants(item: IPickerItem, add?: boolean, exclude?: boolean) {\n        this.items\n            .filter(ci => ci.parentId === item.id)\n            .forEach(ci => {\n                if (!isUndefined(add)) {\n                    ci.added = add;\n                }\n\n                if (!isUndefined(exclude)) {\n                    ci.excluded = exclude;\n                }\n\n                this._toggleDescendants(ci, add, exclude);\n            });\n    }\n\n    private _toggleAncestors(item: IPickerItem, add?: boolean, exclude?: boolean) {\n        this.items\n            .filter(ci => ci.id === item.parentId)\n            .forEach(ci => {\n                if (!isUndefined(add)) {\n                    ci.added = add;\n                }\n\n                if (!isUndefined(exclude)) {\n                    ci.excluded = exclude;\n                }\n\n                this._toggleAncestors(ci, add, exclude);\n            });\n    }\n\n    private _onListItemEscape(event: Event, index: number) {\n        const li = this._elementRef.nativeElement.querySelector(\n            `#${this.pickerId}-option-${this.displayItems[index].id}`\n        );\n        if (event.target === li) {\n            this.closeResults();\n        } else {\n            event.stopPropagation();\n            li?.focus();\n        }\n    }\n\n    private _getActiveListItems(): QueryList<ElementRef> {\n        return this.selectionsAreShowing ? this.selectionsListItems : this.optionsListItems;\n    }\n\n    private _focusListItem(index: number) {\n        this.focusedIndex = index;\n        const items = this._getActiveListItems().toArray();\n        items?.[index].nativeElement.focus();\n    }\n\n    private _onArrowLeft(event: Event) {\n        if (!this.parentId) {\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        const parentItem = this.getParentItem(this.parentId);\n        this._setDisplayItemsFromParentId(parentItem!.parentId);\n        this.asc.emit(parentItem);\n        this._cdRef.detectChanges();\n        const index = this.displayItems.findIndex(i => i.id === parentItem!.id);\n        this._focusListItem(index >= 0 ? index : 0);\n    }\n\n    private _focusableChildren(index: number): { li: HTMLElement; children: HTMLElement[] } {\n        const li = this.optionsListItems.toArray()[index]?.nativeElement as HTMLElement;\n        const children = Array.from(li?.querySelectorAll('input, button') ?? []) as HTMLElement[];\n        return { li, children };\n    }\n\n    private _resetSearchTerm() {\n        this.searchTerm.setValue('', { emitEvent: false });\n    }\n\n    private _subscribeToSearchTermChanges() {\n        const sub = this.searchTerm.valueChanges.subscribe(val => {\n            this.selectionsAreShowing = false;\n            this.focusedIndex = -1;\n            this.canViewResults = true;\n\n            if (val.length) {\n                const displayItems = this.items.filter(item => {\n                    return (\n                        (item.searchValues || []).some(value => {\n                            return value.toLowerCase().includes(val.toLowerCase());\n                        }) || item.displayName.toLowerCase().includes(val.toLowerCase())\n                    );\n                });\n                // remove duplicate items\n                this.displayItems = displayItems.reduce<IPickerItem[]>(\n                    (items, item) => (items.find(x => x.id === item.id) ? items : [...items, item]),\n                    []\n                );\n            } else {\n                this._setDisplayItemsFromParentId(this.parentId);\n            }\n        });\n\n        this._subs.push(sub);\n    }\n\n    private _announce(text: string) {\n        this._liveAnnouncer.announce(text, 'polite');\n    }\n\n    ngOnDestroy() {\n        this._subs.forEach(sub => sub.unsubscribe());\n    }\n}\n","<div\n    class=\"nw-picker\"\n    (focusout)=\"onContainerFocusOut()\">\n    <!-- START: NOT xs screen -->\n    <div\n        class=\"input-container hidden-xs\"\n        [class.disabled]=\"isDisabled\">\n        <input\n            type=\"text\"\n            #inputEl\n            class=\"form-control search-input text-ellipsis\"\n            [class]=\"inputClasses\"\n            [formControl]=\"searchTerm\"\n            (focus)=\"onFocus()\"\n            (click)=\"showResults()\"\n            (keydown.escape)=\"closeResults()\"\n            (keydown.arrowdown)=\"focusNextItem($event)\"\n            (keydown.enter)=\"onInputEnter()\"\n            [placeholder]=\"inputPlaceholderText\"\n            role=\"combobox\"\n            [attr.aria-expanded]=\"canViewResults\"\n            aria-haspopup=\"listbox\"\n            aria-autocomplete=\"list\"\n            [attr.aria-controls]=\"pickerId + '-listbox'\"\n            [attr.aria-activedescendant]=\"focusedItemId\"\n            [attr.aria-label]=\"inputPlaceholderText\" />\n\n        <div\n            class=\"input-placeholder text-ellipsis\"\n            [innerHTML]=\"getPlaceholderText()\"></div>\n\n        @if (!isChevronHidden) {\n            <i\n                (click)=\"onChevronClick()\"\n                class=\"caret dropdown-icon\"\n                aria-hidden=\"true\"></i>\n        }\n    </div>\n    <!-- END: NOT xs screen -->\n\n    <!-- START: IS xs screen -->\n    <div\n        (click)=\"showResults()\"\n        tabindex=\"0\"\n        role=\"button\"\n        [attr.aria-expanded]=\"canViewResults\"\n        aria-haspopup=\"listbox\"\n        class=\"form-control search-input hidden-sm hidden-md hidden-lg text-ellipsis\"\n        [innerHTML]=\"getPlaceholderText()\"></div>\n    <i\n        (click)=\"showResults()\"\n        class=\"caret dropdown-icon hidden-sm hidden-md hidden-lg\"\n        aria-hidden=\"true\"></i>\n    <!-- END: IS xs screen -->\n\n    @if (searchTerm.value) {\n        <button\n            (mousedown)=\"$event.preventDefault()\"\n            (click)=\"onReset()\"\n            class=\"close reset-icon\"\n            aria-label=\"Clear search\">\n            <i\n                class=\"fas fa-times\"\n                aria-hidden=\"true\"></i>\n        </button>\n    }\n\n    @if (canViewResults) {\n        <div\n            class=\"search-results\"\n            animate.enter=\"slide-up-in\"\n            animate.leave=\"slide-down-out\"\n            [class.no-animation]=\"!isMobileDisplay\"\n            (mousedown)=\"$event.preventDefault()\">\n            <div class=\"results-header\">\n                <button\n                    class=\"close\"\n                    (click)=\"closeResults()\"\n                    aria-label=\"Close results\">\n                    <i\n                        class=\"fas fa-times\"\n                        aria-hidden=\"true\"></i>\n                </button>\n            </div>\n            <!-- Navigate up the tree -->\n            @if (parentId && displayItems.length && !searchTerm.value.length) {\n                <div class=\"results-actions\">\n                    <button\n                        type=\"button\"\n                        class=\"picker-action btn-link\"\n                        [attr.aria-label]=\"'Go back to ' + getParentItem(parentId).displayName\"\n                        (click)=\"ascend($event, getParentItem(parentId))\">\n                        <i\n                            class=\"fas fa-long-arrow-alt-left mr-4\"\n                            aria-hidden=\"true\"></i>\n                        <span>{{ getParentItem(parentId).displayName }}</span>\n                    </button>\n                </div>\n            }\n            <div\n                class=\"scroll-container\"\n                #searchResultsScrollEl\n                [style.max-height]=\"getMaxHeight(searchResultsScrollEl)\">\n                @if (shouldShowSelections && !selectionsAreShowing && parentId == null && !searchTerm.value.length) {\n                    <div class=\"results-actions\">\n                        @if (getSelections().length) {\n                            <button\n                                type=\"button\"\n                                class=\"picker-action btn-link\"\n                                (click)=\"editSelections($event)\">\n                                Edit selections\n                            </button>\n                            <button\n                                type=\"button\"\n                                class=\"picker-action btn-link\"\n                                (click)=\"clearSelections($event)\">\n                                Clear selections\n                            </button>\n                        }\n                        @if (!getSelections().length) {\n                            <p class=\"no-selections-text\">No selections</p>\n                        }\n                    </div>\n                }\n                <!-- DISPLAY THE SELECTED ITEMS -->\n                @if (selectionsAreShowing) {\n                    <div class=\"results-actions\">\n                        <button\n                            type=\"button\"\n                            class=\"picker-action btn-link\"\n                            (click)=\"onBackClick($event)\">\n                            <i\n                                class=\"fas fa-long-arrow-alt-left\"\n                                aria-hidden=\"true\"></i>\n                            Back\n                        </button>\n                        @if (getSelections().length) {\n                            <button\n                                type=\"button\"\n                                class=\"picker-action btn-link\"\n                                (click)=\"clearSelections($event)\">\n                                Clear all\n                            </button>\n                        }\n                    </div>\n                    <ul\n                        class=\"selected-items\"\n                        role=\"listbox\"\n                        aria-label=\"Current selections\"\n                        (focusout)=\"onListFocusOut($event)\">\n                        @for (item of getSelections(); track item; let i = $index) {\n                            <li\n                                #selectionsListItems\n                                class=\"search-result\"\n                                role=\"option\"\n                                [id]=\"'selection-' + item.id\"\n                                [attr.tabindex]=\"getTabIndex(i)\"\n                                [attr.aria-selected]=\"item.added || item.excluded\"\n                                [attr.aria-label]=\"getAriaLabel(item)\"\n                                (focusin)=\"focusedIndex = i\"\n                                (keydown)=\"onSelectionItemKeydown($event, item)\"\n                                [ngClass]=\"{ active: item.added, excluded: item.excluded }\">\n                                <span class=\"result-item\">\n                                    <span class=\"item-label\">{{ item.displayName }}</span>\n                                    <button\n                                        class=\"close\"\n                                        style=\"color: black\"\n                                        (click)=\"clearSelection($event, item)\"\n                                        [attr.aria-label]=\"'Remove ' + item.displayName\">\n                                        <i\n                                            class=\"fas fa-times\"\n                                            aria-hidden=\"true\"></i>\n                                    </button>\n                                </span>\n                            </li>\n                        }\n                    </ul>\n                }\n                @if (!selectionsAreShowing) {\n                    <ul\n                        role=\"listbox\"\n                        class=\"picker-options-list\"\n                        [attr.aria-label]=\"searchTerm.value ? 'Search results' : 'Options'\"\n                        (focusout)=\"onListFocusOut($event)\">\n                        @for (item of displayItems; track item; let i = $index) {\n                            <li\n                                #optionsListItems\n                                role=\"option\"\n                                [id]=\"pickerId + '-option-' + item.id\"\n                                class=\"search-result\"\n                                [class.active]=\"item.added\"\n                                [class.excluded]=\"item.excluded\"\n                                [class.has-children]=\"hasChildren(item.id)\"\n                                [class.keyboard-focused]=\"focusedIndex === i\"\n                                [attr.tabindex]=\"getTabIndex(i)\"\n                                [attr.aria-selected]=\"item.added\"\n                                [attr.aria-label]=\"getAriaLabel(item)\"\n                                (focusin)=\"focusedIndex = i\"\n                                (keydown)=\"onOptionItemKeydown($event, item, i)\">\n                                <span class=\"result-item\">\n                                    @if (isMultiSelect) {\n                                        <div class=\"checkbox checkbox-placeholder\">\n                                            <input\n                                                [id]=\"'include-' + item.id\"\n                                                type=\"checkbox\"\n                                                [attr.tabindex]=\"getChildTabIndex(i)\"\n                                                [attr.aria-label]=\"'Include ' + item.displayName\"\n                                                (click)=\"toggleItemInclusion(item, $event)\"\n                                                [checked]=\"item.added\"\n                                                (keydown.enter)=\"toggleItemInclusion(item, $event)\"\n                                                (keydown.tab)=\"onListItemTab($event, i)\"\n                                                (keydown.shift.tab)=\"onListItemShiftTab($event, i)\" />\n                                            <label\n                                                [for]=\"'include-' + item.id\"\n                                                aria-hidden=\"true\"></label>\n                                        </div>\n                                    }\n                                    @if (canExclude && isMultiSelect) {\n                                        <div class=\"checkbox checkbox-exclusion checkbox-placeholder\">\n                                            <input\n                                                [id]=\"'exclude-' + item.id\"\n                                                type=\"checkbox\"\n                                                [attr.tabindex]=\"getChildTabIndex(i)\"\n                                                [attr.aria-label]=\"'Exclude ' + item.displayName\"\n                                                (click)=\"toggleItemExclusion(item, $event)\"\n                                                [checked]=\"item.excluded\"\n                                                (keydown.enter)=\"toggleItemExclusion(item, $event)\"\n                                                (keydown.tab)=\"onListItemTab($event, i)\"\n                                                (keydown.shift.tab)=\"onListItemShiftTab($event, i)\" />\n                                            <label\n                                                [for]=\"'exclude-' + item.id\"\n                                                aria-hidden=\"true\"></label>\n                                        </div>\n                                    }\n                                    <span\n                                        class=\"item-label\"\n                                        title=\"{{ item.displayName }}\"\n                                        (click)=\"toggleItemInclusion(item, $event)\">\n                                        {{ item.displayName }}\n                                        @if (searchTerm.value.length && item.searchValues?.length) {\n                                            <span>\n                                                -\n                                                @for (val of item.searchValues; track val; let isLast = $last) {\n                                                    <em class=\"small\">{{ val }}{{ isLast ? '' : ', ' }}</em>\n                                                }\n                                            </span>\n                                        }\n                                    </span>\n                                    @if (hasChildren(item.id)) {\n                                        <button\n                                            class=\"btn btn-ghost drilldown\"\n                                            [attr.tabindex]=\"getChildTabIndex(i)\"\n                                            (click)=\"onDrilldown(item)\"\n                                            (keydown.enter)=\"$event.stopPropagation()\"\n                                            (keydown.tab)=\"onListItemTab($event, i)\"\n                                            (keydown.shift.tab)=\"onListItemShiftTab($event, i)\"\n                                            [attr.aria-label]=\"'Expand ' + item.displayName\">\n                                            <i\n                                                class=\"fas fa-chevron-right\"\n                                                aria-hidden=\"true\"></i>\n                                        </button>\n                                    }\n                                </span>\n                            </li>\n                        }\n                    </ul>\n                    @if (displayItems.length < 1) {\n                        <div class=\"results-actions\">\n                            <p\n                                role=\"status\"\n                                class=\"no-results-text\">\n                                No results\n                            </p>\n                        </div>\n                    }\n                }\n            </div>\n            <ng-content select=\".results-footer\"></ng-content>\n        </div>\n    }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}