novo-elements 11.1.0 → 11.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/fesm2022/novo-elements-elements-button.mjs.map +1 -1
  2. package/fesm2022/novo-elements-elements-chips.mjs.map +1 -1
  3. package/fesm2022/novo-elements-elements-common.mjs +0 -11
  4. package/fesm2022/novo-elements-elements-common.mjs.map +1 -1
  5. package/fesm2022/novo-elements-elements-date-picker.mjs +1 -0
  6. package/fesm2022/novo-elements-elements-date-picker.mjs.map +1 -1
  7. package/fesm2022/novo-elements-elements-drag-drop.mjs.map +1 -1
  8. package/fesm2022/novo-elements-elements-field.mjs +0 -2
  9. package/fesm2022/novo-elements-elements-field.mjs.map +1 -1
  10. package/fesm2022/novo-elements-elements-form.mjs +9 -9
  11. package/fesm2022/novo-elements-elements-form.mjs.map +1 -1
  12. package/fesm2022/novo-elements-elements-layout.mjs +0 -2
  13. package/fesm2022/novo-elements-elements-layout.mjs.map +1 -1
  14. package/fesm2022/novo-elements-elements-picker.mjs +1 -1
  15. package/fesm2022/novo-elements-elements-picker.mjs.map +1 -1
  16. package/fesm2022/novo-elements-elements-query-builder.mjs +0 -1
  17. package/fesm2022/novo-elements-elements-query-builder.mjs.map +1 -1
  18. package/fesm2022/novo-elements-elements-search.mjs.map +1 -1
  19. package/fesm2022/novo-elements-elements-select-search.mjs +1 -2
  20. package/fesm2022/novo-elements-elements-select-search.mjs.map +1 -1
  21. package/fesm2022/novo-elements-elements-tabbed-group-picker.mjs +8 -3
  22. package/fesm2022/novo-elements-elements-tabbed-group-picker.mjs.map +1 -1
  23. package/fesm2022/novo-elements-utils.mjs +120 -8
  24. package/fesm2022/novo-elements-utils.mjs.map +1 -1
  25. package/package.json +1 -1
  26. package/utils/Helpers.d.ts +114 -0
@@ -1 +1 @@
1
- {"version":3,"file":"novo-elements-elements-search.mjs","sources":["../../../projects/novo-elements/src/elements/search/SearchBox.ts","../../../projects/novo-elements/src/elements/search/SearchBox.module.ts","../../../projects/novo-elements/src/elements/search/novo-elements-elements-search.ts"],"sourcesContent":["// NG2\nimport { ENTER, ESCAPE, TAB } from '@angular/cdk/keycodes';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Input,\n NgZone,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n// APP\nimport { NovoLabelService } from 'novo-elements/services';\nimport { Key } from 'novo-elements/utils';\nimport { NovoOverlayTemplateComponent } from 'novo-elements/elements/common';\n\n// Value accessor for the component (supports ngModel)\nconst SEARCH_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NovoSearchBoxElement),\n multi: true,\n};\n\n@Component({\n selector: 'novo-search',\n providers: [SEARCH_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <!-- SEARCH ICON -->\n <novo-icon (click)=\"showSearch($event)\" [tooltip]=\"hint\" tooltipPosition=\"bottom\">{{ icon }}</novo-icon>\n <!-- SEARCH INPUT -->\n <input\n type=\"text\"\n [attr.name]=\"name\"\n [attr.value]=\"displayValue\"\n [attr.placeholder]=\"placeholder\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown)=\"_handleKeydown($event)\"\n (input)=\"_handleInput($event)\"\n #input\n data-automation-id=\"novo-search-input\"\n />\n <!-- SEARCH OVERLAY -->\n <novo-overlay-template\n [parent]=\"element\"\n [closeOnSelect]=\"closeOnSelect\"\n [position]=\"position\"\n [hasBackdrop]=\"hasBackdrop\"\n (select)=\"onSelect()\"\n (closing)=\"onBlur()\"\n >\n <ng-content></ng-content>\n </novo-overlay-template>\n `,\n styleUrls: ['./SearchBox.scss'],\n standalone: false\n})\nexport class NovoSearchBoxElement implements ControlValueAccessor, OnInit {\n @Input()\n public name: string;\n @Input()\n public icon: string = 'search';\n @Input()\n public position: string = 'bottom-left';\n @Input()\n public placeholder: string = 'Search...';\n @Input()\n @HostBinding('class.always-open')\n public alwaysOpen: boolean = false;\n @Input()\n public theme: string;\n @Input()\n public color: string = 'positive';\n @Input()\n public closeOnSelect: boolean = true;\n @Input()\n public displayField: string;\n @Input()\n public displayValue: string;\n @Input()\n public hint: string;\n @Input()\n public keepOpen: boolean = false;\n @Input()\n public hasBackdrop: boolean = false;\n @Input()\n public allowPropagation: boolean = false;\n @Input()\n public overrideElement: ElementRef;\n @Output()\n public searchChanged: EventEmitter<string> = new EventEmitter<string>();\n @Output()\n public applySearch: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n @HostBinding('class.focused')\n focused: boolean = false;\n public value: any;\n\n /** View -> model callback called when value changes */\n _onChange: (value: any) => void = () => {};\n /** View -> model callback called when autocomplete has been touched */\n _onTouched = () => {};\n\n /** Element for the panel containing the autocomplete options. */\n @ViewChild(NovoOverlayTemplateComponent)\n overlay: any;\n @ViewChild('input', { static: true })\n input: any;\n\n private debounceSearchChange: any;\n\n constructor(\n public element: ElementRef,\n public labels: NovoLabelService,\n private _changeDetectorRef: ChangeDetectorRef,\n private _zone: NgZone,\n ) {}\n\n ngOnInit() {\n if (this.overrideElement) {\n this.element = this.overrideElement;\n }\n }\n\n /**\n * @name showFasterFind\n * @description This function shows the picker and adds the active class (for animation)\n */\n showSearch(event?: any, forceClose: boolean = false) {\n if (!this.panelOpen) {\n // Reset search\n // Set focus on search\n setTimeout(() => {\n const element = this.input.nativeElement;\n if (element) {\n element.focus();\n }\n }, 10);\n } else {\n this.closePanel();\n }\n }\n onFocus() {\n this._zone.run(() => {\n this.focused = true;\n this.openPanel();\n });\n }\n onBlur() {\n if (!this.keepOpen || !this.panelOpen) {\n this.focused = false;\n }\n }\n onSelect() {\n if (!this.keepOpen) {\n this.closePanel();\n }\n }\n /** BEGIN: Convenient Panel Methods. */\n openPanel(): void {\n this.overlay.openPanel();\n }\n closePanel(): void {\n setTimeout(() => this.overlay.closePanel());\n this.focused = false;\n }\n get panelOpen(): boolean {\n return this.overlay && this.overlay.panelOpen;\n }\n @HostBinding('class.active')\n get active(): boolean {\n return this.panelOpen || this.alwaysOpen;\n }\n /** END: Convenient Panel Methods. */\n\n _handleKeydown(event: KeyboardEvent): void {\n if ((event.key === Key.Escape || event.key === Key.Enter || event.key === Key.Tab) && this.panelOpen) {\n if (event.keyCode === ENTER) {\n this.applySearch.emit(event);\n }\n this.closePanel();\n if (!this.allowPropagation) {\n event.stopPropagation();\n }\n }\n }\n _handleInput(event: KeyboardEvent): void {\n if (document.activeElement === event.target) {\n this.value = (event.target as HTMLInputElement).value;\n this._onChange((event.target as HTMLInputElement).value);\n\n if (this.debounceSearchChange) {\n clearTimeout(this.debounceSearchChange);\n }\n this.debounceSearchChange = setTimeout(() => {\n this.searchChanged.emit((event.target as HTMLInputElement).value);\n }, 400);\n }\n }\n writeValue(value: any): void {\n this._setValue(value);\n }\n registerOnChange(fn: (value: any) => {}): void {\n this._onChange = fn;\n }\n registerOnTouched(fn: () => {}) {\n this._onTouched = fn;\n }\n private _setValue(value: any): void {\n this.value = value;\n let toDisplay = value;\n if (value && this.displayField) {\n toDisplay = value.hasOwnProperty(this.displayField) ? value[this.displayField] : 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 this.displayValue = toDisplay ? toDisplay : '';\n this.input.nativeElement.value = this.displayValue;\n this._changeDetectorRef.markForCheck();\n }\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 public setValueAndClose(event: any | null): void {\n if (event && event.value) {\n this._setValue(event.value);\n this._onChange(event.value);\n }\n this.closePanel();\n }\n\n /**\n * Clear any previous selected option and emit a selection change event for this option\n */\n public clearValue(skip: any) {\n this.writeValue(null);\n this._onChange(null);\n }\n}\n","// NG2\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n// APP\nimport { NovoOverlayModule } from 'novo-elements/elements/common';\nimport { NovoIconModule } from 'novo-elements/elements/icon';\nimport { NovoPickerModule } from 'novo-elements/elements/picker';\nimport { NovoTooltipModule } from 'novo-elements/elements/tooltip';\nimport { NovoSearchBoxElement } from './SearchBox';\n@NgModule({\n imports: [CommonModule, NovoIconModule, NovoPickerModule, NovoTooltipModule, NovoOverlayModule],\n declarations: [NovoSearchBoxElement],\n exports: [NovoSearchBoxElement],\n})\nexport class NovoSearchBoxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"novo-elements-elements-search.mjs","sources":["../../../projects/novo-elements/src/elements/search/SearchBox.ts","../../../projects/novo-elements/src/elements/search/SearchBox.module.ts","../../../projects/novo-elements/src/elements/search/novo-elements-elements-search.ts"],"sourcesContent":["// NG2\nimport { ENTER } from '@angular/cdk/keycodes';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Input,\n NgZone,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n// APP\nimport { NovoLabelService } from 'novo-elements/services';\nimport { Key } from 'novo-elements/utils';\nimport { NovoOverlayTemplateComponent } from 'novo-elements/elements/common';\n\n// Value accessor for the component (supports ngModel)\nconst SEARCH_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NovoSearchBoxElement),\n multi: true,\n};\n\n@Component({\n selector: 'novo-search',\n providers: [SEARCH_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <!-- SEARCH ICON -->\n <novo-icon (click)=\"showSearch($event)\" [tooltip]=\"hint\" tooltipPosition=\"bottom\">{{ icon }}</novo-icon>\n <!-- SEARCH INPUT -->\n <input\n type=\"text\"\n [attr.name]=\"name\"\n [attr.value]=\"displayValue\"\n [attr.placeholder]=\"placeholder\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown)=\"_handleKeydown($event)\"\n (input)=\"_handleInput($event)\"\n #input\n data-automation-id=\"novo-search-input\"\n />\n <!-- SEARCH OVERLAY -->\n <novo-overlay-template\n [parent]=\"element\"\n [closeOnSelect]=\"closeOnSelect\"\n [position]=\"position\"\n [hasBackdrop]=\"hasBackdrop\"\n (select)=\"onSelect()\"\n (closing)=\"onBlur()\"\n >\n <ng-content></ng-content>\n </novo-overlay-template>\n `,\n styleUrls: ['./SearchBox.scss'],\n standalone: false\n})\nexport class NovoSearchBoxElement implements ControlValueAccessor, OnInit {\n @Input()\n public name: string;\n @Input()\n public icon: string = 'search';\n @Input()\n public position: string = 'bottom-left';\n @Input()\n public placeholder: string = 'Search...';\n @Input()\n @HostBinding('class.always-open')\n public alwaysOpen: boolean = false;\n @Input()\n public theme: string;\n @Input()\n public color: string = 'positive';\n @Input()\n public closeOnSelect: boolean = true;\n @Input()\n public displayField: string;\n @Input()\n public displayValue: string;\n @Input()\n public hint: string;\n @Input()\n public keepOpen: boolean = false;\n @Input()\n public hasBackdrop: boolean = false;\n @Input()\n public allowPropagation: boolean = false;\n @Input()\n public overrideElement: ElementRef;\n @Output()\n public searchChanged: EventEmitter<string> = new EventEmitter<string>();\n @Output()\n public applySearch: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n @HostBinding('class.focused')\n focused: boolean = false;\n public value: any;\n\n /** View -> model callback called when value changes */\n _onChange: (value: any) => void = () => {};\n /** View -> model callback called when autocomplete has been touched */\n _onTouched = () => {};\n\n /** Element for the panel containing the autocomplete options. */\n @ViewChild(NovoOverlayTemplateComponent)\n overlay: any;\n @ViewChild('input', { static: true })\n input: any;\n\n private debounceSearchChange: any;\n\n constructor(\n public element: ElementRef,\n public labels: NovoLabelService,\n private _changeDetectorRef: ChangeDetectorRef,\n private _zone: NgZone,\n ) {}\n\n ngOnInit() {\n if (this.overrideElement) {\n this.element = this.overrideElement;\n }\n }\n\n /**\n * @name showFasterFind\n * @description This function shows the picker and adds the active class (for animation)\n */\n showSearch(event?: any, forceClose: boolean = false) {\n if (!this.panelOpen) {\n // Reset search\n // Set focus on search\n setTimeout(() => {\n const element = this.input.nativeElement;\n if (element) {\n element.focus();\n }\n }, 10);\n } else {\n this.closePanel();\n }\n }\n onFocus() {\n this._zone.run(() => {\n this.focused = true;\n this.openPanel();\n });\n }\n onBlur() {\n if (!this.keepOpen || !this.panelOpen) {\n this.focused = false;\n }\n }\n onSelect() {\n if (!this.keepOpen) {\n this.closePanel();\n }\n }\n /** BEGIN: Convenient Panel Methods. */\n openPanel(): void {\n this.overlay.openPanel();\n }\n closePanel(): void {\n setTimeout(() => this.overlay.closePanel());\n this.focused = false;\n }\n get panelOpen(): boolean {\n return this.overlay && this.overlay.panelOpen;\n }\n @HostBinding('class.active')\n get active(): boolean {\n return this.panelOpen || this.alwaysOpen;\n }\n /** END: Convenient Panel Methods. */\n\n _handleKeydown(event: KeyboardEvent): void {\n if ((event.key === Key.Escape || event.key === Key.Enter || event.key === Key.Tab) && this.panelOpen) {\n if (event.keyCode === ENTER) {\n this.applySearch.emit(event);\n }\n this.closePanel();\n if (!this.allowPropagation) {\n event.stopPropagation();\n }\n }\n }\n _handleInput(event: KeyboardEvent): void {\n if (document.activeElement === event.target) {\n this.value = (event.target as HTMLInputElement).value;\n this._onChange((event.target as HTMLInputElement).value);\n\n if (this.debounceSearchChange) {\n clearTimeout(this.debounceSearchChange);\n }\n this.debounceSearchChange = setTimeout(() => {\n this.searchChanged.emit((event.target as HTMLInputElement).value);\n }, 400);\n }\n }\n writeValue(value: any): void {\n this._setValue(value);\n }\n registerOnChange(fn: (value: any) => {}): void {\n this._onChange = fn;\n }\n registerOnTouched(fn: () => {}) {\n this._onTouched = fn;\n }\n private _setValue(value: any): void {\n this.value = value;\n let toDisplay = value;\n if (value && this.displayField) {\n toDisplay = value.hasOwnProperty(this.displayField) ? value[this.displayField] : 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 this.displayValue = toDisplay ? toDisplay : '';\n this.input.nativeElement.value = this.displayValue;\n this._changeDetectorRef.markForCheck();\n }\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 public setValueAndClose(event: any | null): void {\n if (event && event.value) {\n this._setValue(event.value);\n this._onChange(event.value);\n }\n this.closePanel();\n }\n\n /**\n * Clear any previous selected option and emit a selection change event for this option\n */\n public clearValue(skip: any) {\n this.writeValue(null);\n this._onChange(null);\n }\n}\n","// NG2\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n// APP\nimport { NovoOverlayModule } from 'novo-elements/elements/common';\nimport { NovoIconModule } from 'novo-elements/elements/icon';\nimport { NovoPickerModule } from 'novo-elements/elements/picker';\nimport { NovoTooltipModule } from 'novo-elements/elements/tooltip';\nimport { NovoSearchBoxElement } from './SearchBox';\n@NgModule({\n imports: [CommonModule, NovoIconModule, NovoPickerModule, NovoTooltipModule, NovoOverlayModule],\n declarations: [NovoSearchBoxElement],\n exports: [NovoSearchBoxElement],\n})\nexport class NovoSearchBoxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -57,7 +57,6 @@ var __metadata = (this && this.__metadata) || function (k, v) {
57
57
  /** The max height of the select's overlay panel. */
58
58
  const SELECT_PANEL_MAX_HEIGHT = 256;
59
59
  let autoIncrement = 1;
60
- /* tslint:disable:member-ordering component-selector */
61
60
  /**
62
61
  * Component providing an input field for searching NovoSelectElement options.
63
62
  *
@@ -262,7 +261,7 @@ class NovoSelectSearchComponent {
262
261
  .subscribe(() => this.adjustScrollTopToFitActiveOptionIntoView());
263
262
  }
264
263
  else {
265
- console.log('_keyManager was not initialized.');
264
+ console.warn('_keyManager was not initialized.');
266
265
  }
267
266
  this._options = this.novoSelect.contentOptions;
268
267
  // Closure variable for tracking the most recent first option.
@@ -1 +1 @@
1
- {"version":3,"file":"novo-elements-elements-select-search.mjs","sources":["../../../projects/novo-elements/src/elements/select-search/select-search-clear.directive.ts","../../../projects/novo-elements/src/elements/select-search/select-search.component.ts","../../../projects/novo-elements/src/elements/select-search/select-search.component.html","../../../projects/novo-elements/src/elements/select-search/select-search.module.ts","../../../projects/novo-elements/src/elements/select-search/novo-elements-elements-select-search.ts"],"sourcesContent":["import { Directive } from '@angular/core';\n\n/**\n * Directive for providing a custom clear-icon.\n * e.g.\n * <novo-select-search [formControl]=\"bankFilterCtrl\">\n * <novo-icon novoSelectSearchClear>x</novo-icon>\n * </novo-select-search>\n */\n@Directive({\n selector: '[novoSelectSearchClear]',\n standalone: false\n})\nexport class NovoSelectSearchClearDirective {}\n","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\nimport { debounceTime, delay, distinctUntilChanged, filter, map, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { BooleanInput, isAlphaNumeric, Key } from 'novo-elements/utils';\nimport { NovoOption, _countGroupLabelsBeforeOption } from 'novo-elements/elements/common';\nimport { NovoFieldElement } from 'novo-elements/elements/field';\nimport { NovoSelectElement } from 'novo-elements/elements/select';\nimport { NovoSelectSearchClearDirective } from './select-search-clear.directive';\n\n/** The max height of the select's overlay panel. */\nconst SELECT_PANEL_MAX_HEIGHT = 256;\nlet autoIncrement = 1;\n/* tslint:disable:member-ordering component-selector */\n/**\n * Component providing an input field for searching NovoSelectElement options.\n *\n * Example usage:\n *\n * interface Bank {\n * id: string;\n * name: string;\n * }\n *\n * @Component({\n * selector: 'my-app-data-selection',\n * template: `\n * <novo-form-field>\n * <novo-select [formControl]=\"bankCtrl\" placeholder=\"Bank\">\n * <novo-option>\n * <ngx-novo-select-search [formControl]=\"bankFilterCtrl\"></ngx-novo-select-search>\n * </novo-option>\n * <novo-option *ngFor=\"let bank of filteredBanks | async\" [value]=\"bank.id\">\n * {{bank.name}}\n * </novo-option>\n * </novo-select>\n * </novo-form-field>\n * `\n * })\n * export class DataSelectionComponent implements OnInit, OnDestroy {\n *\n * // control for the selected bank\n * public bankCtrl: FormControl = new FormControl();\n * // control for the NovoSelectElement filter keyword\n * public bankFilterCtrl: FormControl = new FormControl();\n *\n * // list of banks\n * private banks: Bank[] = [{name: 'Bank A', id: 'A'}, {name: 'Bank B', id: 'B'}, {name: 'Bank C', id: 'C'}];\n * // list of banks filtered by search keyword\n * public filteredBanks: ReplaySubject<Bank[]> = new ReplaySubject<Bank[]>(1);\n *\n * // Subject that emits when the component has been destroyed.\n * private _onDestroy = new Subject<void>();\n *\n *\n * ngOnInit() {\n * // load the initial bank list\n * this.filteredBanks.next(this.banks.slice());\n * // listen for search field value changes\n * this.bankFilterCtrl.valueChanges\n * .pipe(takeUntil(this._onDestroy))\n * .subscribe(() => {\n * this.filterBanks();\n * });\n * }\n *\n * ngOnDestroy() {\n * this._onDestroy.next();\n * this._onDestroy.complete();\n * }\n *\n * private filterBanks() {\n * if (!this.banks) {\n * return;\n * }\n *\n * // get the search keyword\n * let search = this.bankFilterCtrl.value;\n * if (!search) {\n * this.filteredBanks.next(this.banks.slice());\n * return;\n * } else {\n * search = search.toLowerCase();\n * }\n *\n * // filter the banks\n * this.filteredBanks.next(\n * this.banks.filter(bank => bank.name.toLowerCase().indexOf(search) > -1)\n * );\n * }\n * }\n */\n@Component({\n selector: 'novo-select-search',\n templateUrl: './select-search.component.html',\n styleUrls: ['./select-search.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NovoSelectSearchComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class NovoSelectSearchComponent implements OnInit, OnDestroy, ControlValueAccessor {\n @Input() name = 'select-search-' + autoIncrement++;\n /** Label of the search placeholder */\n @Input() placeholderLabel = 'Search';\n\n /** Type of the search input field */\n @Input() type = 'text';\n\n /** Label to be shown when no entries are found. Set to null if no message should be shown. */\n @Input() noEntriesFoundLabel = 'No Records Found';\n\n /**\n * Text that is appended to the currently active item label announced by screen readers,\n * informing the user of the current index, value and total options.\n * eg: Bank R (Germany) 1 of 6\n */\n @Input() indexAndLengthScreenReaderText = ' of ';\n\n /**\n * Whether or not the search field should be cleared after the dropdown menu is closed.\n * Useful for server-side filtering.\n */\n @Input() clearSearchInput = true;\n\n /** Whether to show the search-in-progress indicator */\n @Input() searching = false;\n\n /** Disables initial focusing of the input field */\n @Input() disableInitialFocus = false;\n\n /** Enable clear input on escape pressed */\n @Input() enableClearOnEscapePressed = false;\n\n /** Allow user to uncheck a value while filtering. */\n @Input() @BooleanInput() allowDeselectDuringFilter = false;\n\n /**\n * Prevents home / end key being propagated to novo-select,\n * allowing to move the cursor within the search input instead of navigating the options\n */\n @Input() preventHomeEndKeyPropagation = false;\n\n /** Disables scrolling to active options when option list changes. Useful for server-side search */\n @Input() disableScrollToActiveOnOptionsChanged = false;\n\n /** Adds 508 screen reader support for search box */\n @Input() ariaLabel = 'dropdown search';\n\n /** Whether to show Select All Checkbox (for novo-select[multi=true]) */\n @Input() showToggleAllCheckbox = false;\n\n /** select all checkbox checked state */\n @Input() toggleAllCheckboxChecked = false;\n\n /** select all checkbox indeterminate state */\n @Input() toggleAllCheckboxIndeterminate = false;\n\n /** Display a message in a tooltip on the toggle-all checkbox */\n @Input() toggleAllCheckboxTooltipMessage = '';\n\n /** Define the position of the tooltip on the toggle-all checkbox. */\n @Input() toogleAllCheckboxTooltipPosition: 'left' | 'right' | 'above' | 'below' | 'before' | 'after' = 'below';\n\n /** Show/Hide the search clear button of the search input */\n @Input() hideClearSearchButton = false;\n\n /**\n * Always restore selected options on selectionChange for mode multi (e.g. for lazy loading/infinity scrolling).\n * Defaults to false, so selected options are only restored while filtering is active.\n */\n @Input() alwaysRestoreSelectedOptionsMulti = false;\n\n /** Output emitter to send to parent component with the toggle all boolean */\n @Output() toggleAll = new EventEmitter<boolean>();\n\n /** Reference to the search input field */\n @ViewChild('searchSelectInput', { read: ElementRef, static: true }) searchSelectInput: ElementRef;\n\n /** Reference to the search input field */\n @ViewChild('innerSelectSearch', { read: ElementRef, static: true }) innerSelectSearch: ElementRef;\n\n /** Reference to custom search input clear icon */\n @ContentChild(NovoSelectSearchClearDirective, { static: false }) clearIcon: NovoSelectSearchClearDirective;\n\n @HostBinding('class.novo-select-search-inside-novo-option')\n get isInsideNovoOption(): boolean {\n return !!this.novoOption;\n }\n\n /** Current search value */\n get value(): string {\n return this._formControl.value;\n }\n private _lastExternalInputValue: string;\n\n onTouched: Function = (_: any) => {};\n\n public _formControl: FormControl = new FormControl('');\n\n /** Reference to the NovoSelectElement options */\n public set _options(_options: QueryList<NovoOption>) {\n this._options$.next(_options);\n }\n public get _options(): QueryList<NovoOption> {\n return this._options$.getValue();\n }\n public _options$: BehaviorSubject<QueryList<NovoOption>> = new BehaviorSubject<QueryList<NovoOption>>(null);\n\n private _filterFinishedRerender = this._formControl.valueChanges.pipe(debounceTime(1));\n\n private optionsList$: Observable<NovoOption[]> = this._options$.pipe(\n switchMap((_options) =>\n _options\n ? combineLatest([_options.changes, this._filterFinishedRerender]).pipe(\n map(([options,]) => options.toArray().filter(option => !(option._getHostElement()?.classList.contains('add-option') || option._getHostElement().hidden))),\n startWith<NovoOption[]>(_options.toArray()),\n distinctUntilChanged((optsA, optsB) => optsA.map(opt => opt.value).join(',') === optsB.map(opt => opt.value).join(','))\n )\n : of(null),\n ),\n );\n\n private optionsLength$: Observable<number> = this.optionsList$.pipe(map((options) => (options ? options.length : 0)));\n\n /** Previously selected values when using <novo-select [multiple]=\"true\">*/\n private previousSelectedValues: any[];\n\n /** whether to show the no entries found message */\n public _showNoEntriesFound$: Observable<boolean> = combineLatest([this._formControl.valueChanges, this.optionsLength$]).pipe(\n map(([value, optionsLength]) => this.noEntriesFoundLabel && value && optionsLength === this.getOptionsLengthOffset()),\n );\n\n /** Subject that emits when the component has been destroyed. */\n private _onDestroy = new Subject<void>();\n\n constructor(\n @Inject(NovoSelectElement) public novoSelect: NovoSelectElement,\n public changeDetectorRef: ChangeDetectorRef,\n private _viewportRuler: ViewportRuler,\n @Optional() @Inject(NovoOption) public novoOption: NovoOption = null,\n private liveAnnouncer: LiveAnnouncer,\n @Optional() @Inject(NovoFieldElement) public matFormField: NovoFieldElement = null,\n ) {\n this.novoSelect.hideLegacyOptionsForSearch.set(true);\n }\n\n ngOnInit() {\n // set custom novo-option class if the component was placed inside a novo-option\n if (this.novoOption) {\n this.novoOption.novoInert = true;\n this.novoOption._getHostElement().classList.add('contains-novo-select-search');\n } else {\n console.error('<novo-select-search> must be placed inside a <novo-option> element');\n }\n\n // when the select dropdown panel is opened or closed\n this.novoSelect.openedChange.pipe(delay(1), takeUntil(this._onDestroy)).subscribe((opened) => {\n if (opened) {\n this.updateInputWidth();\n // focus the search field when opening\n if (!this.disableInitialFocus) {\n this._focus();\n }\n } else {\n // clear it when closing\n if (this.clearSearchInput) {\n this._reset();\n }\n }\n });\n\n // set the first item active after the options changed\n this.novoSelect.openedChange\n .pipe(take(1))\n .pipe(takeUntil(this._onDestroy))\n .subscribe(() => {\n if (this.novoSelect._keyManager) {\n this.novoSelect._keyManager.change\n .pipe(takeUntil(this._onDestroy))\n .subscribe(() => this.adjustScrollTopToFitActiveOptionIntoView());\n } else {\n console.log('_keyManager was not initialized.');\n }\n\n this._options = this.novoSelect.contentOptions;\n\n // Closure variable for tracking the most recent first option.\n // In order to avoid avoid causing the list to\n // scroll to the top when options are added to the bottom of\n // the list (eg: infinite scroll), we compare only\n // the changes to the first options to determine if we\n // should set the first item as active.\n // This prevents unnecessary scrolling to the top of the list\n // when options are appended, but allows the first item\n // in the list to be set as active by default when there\n // is no active selection\n let previousFirstOption = this._options.toArray()[this.getOptionsLengthOffset()];\n\n this._options.changes.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n // avoid \"expression has been changed\" error\n setTimeout(() => {\n // Convert the QueryList to an array\n const options = this._options.toArray();\n\n // The true first item is offset by 1\n const currentFirstOption = options[this.getOptionsLengthOffset()];\n\n const keyManager = this.novoSelect._keyManager;\n if (keyManager && this.novoSelect.panelOpen) {\n // set first item active and input width\n\n // Check to see if the first option in these changes is different from the previous.\n const firstOptionIsChanged = !this.novoSelect.compareWith(previousFirstOption, currentFirstOption);\n\n // CASE: The first option is different now.\n // Indiciates we should set it as active and scroll to the top.\n if (\n firstOptionIsChanged ||\n !keyManager.activeItem ||\n !options.find((option) => this.novoSelect.compareWith(option, keyManager.activeItem))\n ) {\n keyManager.setFirstItemActive();\n }\n\n // wait for panel width changes\n setTimeout(() => {\n this.updateInputWidth();\n });\n\n if (!this.disableScrollToActiveOnOptionsChanged) {\n this.adjustScrollTopToFitActiveOptionIntoView();\n }\n }\n\n // Update our reference\n previousFirstOption = currentFirstOption;\n });\n });\n });\n\n // add or remove css class depending on whether to show the no entries found message\n // note: this is hacky\n this._showNoEntriesFound$.pipe(takeUntil(this._onDestroy)).subscribe((showNoEntriesFound) => {\n // set no entries found class on mat option\n if (this.novoOption) {\n if (showNoEntriesFound) {\n this.novoOption._getHostElement().classList.add('novo-select-search-no-entries-found');\n } else {\n this.novoOption._getHostElement().classList.remove('novo-select-search-no-entries-found');\n }\n }\n });\n\n // resize the input width when the viewport is resized, i.e. the trigger width could potentially be resized\n this._viewportRuler\n .change()\n .pipe(takeUntil(this._onDestroy))\n .subscribe(() => {\n if (this.novoSelect.panelOpen) {\n this.updateInputWidth();\n }\n });\n\n if (!this.allowDeselectDuringFilter) {\n this.initMultipleHandling();\n }\n\n this.optionsList$.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n // update view when available options change\n this.changeDetectorRef.markForCheck();\n });\n }\n\n _emitSelectAllBooleanToParent(state: boolean) {\n this.toggleAll.emit(state);\n }\n\n ngOnDestroy() {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n\n _isToggleAllCheckboxVisible(): boolean {\n return this.novoSelect.multiple && this.showToggleAllCheckbox;\n }\n\n /**\n * Handles the key down event with NovoSelectElement.\n * Allows e.g. selecting with enter key, navigation with arrow keys, etc.\n * @param event\n */\n _handleKeydown(event: KeyboardEvent) {\n // Prevent propagation for all alphanumeric characters in order to avoid selection issues\n if (\n (event.key && event.key.length === 1) ||\n isAlphaNumeric(event.key) ||\n event.key === Key.Space ||\n (this.preventHomeEndKeyPropagation && (event.key === Key.Home || event.key === Key.End))\n ) {\n event.stopPropagation();\n }\n\n if (this.novoSelect.multiple && event.key && event.key === Key.Enter) {\n // Regain focus after multiselect, so we can further type\n setTimeout(() => this._focus());\n }\n\n // Special case if click Escape, if input is empty, close the dropdown, if not, empty out the search field\n if (this.enableClearOnEscapePressed === true && event.key === Key.Escape && this.value) {\n this._reset(true);\n event.stopPropagation();\n }\n }\n\n /**\n * Handles the key up event with NovoSelectElement.\n * Allows e.g. the announcing of the currently activeDescendant by screen readers.\n */\n _handleKeyup(event: KeyboardEvent) {\n if (event.key === Key.ArrowUp || event.key === Key.ArrowDown) {\n const ariaActiveDescendantId = this.novoSelect._getAriaActiveDescendant();\n const index = this._options.toArray().findIndex((item) => item.id === ariaActiveDescendantId);\n if (index !== -1) {\n const activeDescendant = this._options.toArray()[index];\n this.liveAnnouncer.announce(\n activeDescendant.viewValue + ' ' + this.getAriaIndex(index) + this.indexAndLengthScreenReaderText + this.getAriaLength(),\n );\n }\n }\n }\n\n /**\n * Calculate the index of the current option, taking the offset to length into account.\n * examples:\n * Case 1 [Search, 1, 2, 3] will have offset of 1, due to search and will read index of total.\n * Case 2 [1, 2, 3] will have offset of 0 and will read index +1 of total.\n */\n getAriaIndex(optionIndex: number): number {\n if (this.getOptionsLengthOffset() === 0) {\n return optionIndex + 1;\n }\n return optionIndex;\n }\n\n /**\n * Calculate the length of the options, taking the offset to length into account.\n * examples:\n * Case 1 [Search, 1, 2, 3] will have length of options.length -1, due to search.\n * Case 2 [1, 2, 3] will have length of options.length.\n */\n getAriaLength(): number {\n return this._options.toArray().length - this.getOptionsLengthOffset();\n }\n\n writeValue(value: string) {\n this._lastExternalInputValue = value;\n this._formControl.setValue(value);\n this.changeDetectorRef.markForCheck();\n }\n\n onBlur() {\n this.onTouched();\n }\n\n registerOnChange(fn: (value: string) => void) {\n this._formControl.valueChanges\n .pipe(\n filter((value) => value !== this._lastExternalInputValue),\n tap(() => (this._lastExternalInputValue = undefined)),\n takeUntil(this._onDestroy),\n )\n .subscribe(fn);\n }\n\n registerOnTouched(fn: Function) {\n this.onTouched = fn;\n }\n\n /**\n * Focuses the search input field\n */\n public _focus() {\n if (!this.searchSelectInput || !this.novoSelect.panel) {\n return;\n }\n // save and restore scrollTop of panel, since it will be reset by focus()\n // note: this is hacky\n const panel = this.novoSelect.panel.nativeElement;\n const scrollTop = panel.scrollTop;\n\n // focus\n this.searchSelectInput.nativeElement.focus();\n\n panel.scrollTop = scrollTop;\n }\n\n /**\n * Resets the current search value\n * @param focus whether to focus after resetting\n */\n public _reset(focus?: boolean) {\n this._formControl.setValue('');\n if (focus) {\n this._focus();\n }\n }\n\n /**\n * Initializes handling <novo-select [multiple]=\"true\">\n * Note: to improve this code, novo-select should be extended to allow disabling resetting the selection while filtering.\n */\n private initMultipleHandling() {\n if (!this.novoSelect.ngControl) {\n if (this.novoSelect.multiple) {\n // note: the access to novoSelect.ngControl (instead of novoSelect.value / novoSelect.valueChanges)\n // is necessary to properly work in multi-selection mode.\n console.error('the novo-select containing novo-select-search must have a ngModel or formControl directive when multiple=true');\n }\n return;\n }\n // if <novo-select [multiple]=\"true\">\n // store previously selected values and restore them when they are deselected\n // because the option is not available while we are currently filtering\n this.previousSelectedValues = this.novoSelect.ngControl.value;\n\n this.novoSelect.ngControl.valueChanges.pipe(takeUntil(this._onDestroy)).subscribe((values) => {\n let restoreSelectedValues = false;\n if (this.novoSelect.multiple) {\n if (\n (this.alwaysRestoreSelectedOptionsMulti || (this._formControl.value && this._formControl.value.length)) &&\n this.previousSelectedValues &&\n Array.isArray(this.previousSelectedValues)\n ) {\n if (!values || !Array.isArray(values)) {\n values = [];\n }\n const optionValues = (this.novoSelect.options || []).map((option) => option.value);\n this.previousSelectedValues.forEach((previousValue) => {\n if (\n !values.some((v) => this.novoSelect.compareWith(v, previousValue)) &&\n !optionValues.some((v) => this.novoSelect.compareWith(v, previousValue))\n ) {\n // if a value that was selected before is deselected and not found in the options, it was deselected\n // due to the filtering, so we restore it.\n values.push(previousValue);\n restoreSelectedValues = true;\n }\n });\n }\n }\n this.previousSelectedValues = values;\n\n if (restoreSelectedValues) {\n // TODO: Fix this\n // this.novoSelect._onChange(values);\n }\n });\n }\n\n /**\n * Scrolls the currently active option into the view if it is not yet visible.\n */\n private adjustScrollTopToFitActiveOptionIntoView(): void {\n if (this.novoSelect.panel && this.novoSelect.contentOptions.length > 0) {\n const novoOptionHeight = this.getNovoOptionHeight();\n const activeOptionIndex = this.novoSelect._keyManager.activeItemIndex || 0;\n const labelCount = _countGroupLabelsBeforeOption(activeOptionIndex, this.novoSelect.contentOptions, this.novoSelect.optionGroups);\n // If the component is in a NovoOption, the activeItemIndex will be offset by one.\n const indexOfOptionToFitIntoView = (this.novoOption ? -1 : 0) + labelCount + activeOptionIndex;\n const currentScrollTop = this.novoSelect.panel.nativeElement.scrollTop;\n\n const searchInputHeight = this.innerSelectSearch.nativeElement.offsetHeight;\n const amountOfVisibleOptions = Math.floor((SELECT_PANEL_MAX_HEIGHT - searchInputHeight) / novoOptionHeight);\n\n const indexOfFirstVisibleOption = Math.round((currentScrollTop + searchInputHeight) / novoOptionHeight) - 1;\n\n if (indexOfFirstVisibleOption >= indexOfOptionToFitIntoView) {\n this.novoSelect.panel.nativeElement.scrollTop = indexOfOptionToFitIntoView * novoOptionHeight;\n } else if (indexOfFirstVisibleOption + amountOfVisibleOptions <= indexOfOptionToFitIntoView) {\n this.novoSelect.panel.nativeElement.scrollTop =\n (indexOfOptionToFitIntoView + 1) * novoOptionHeight - (SELECT_PANEL_MAX_HEIGHT - searchInputHeight);\n }\n }\n }\n\n /**\n * Set the width of the innerSelectSearch to fit even custom scrollbars\n * And support all Operation Systems\n */\n public updateInputWidth() {\n if (!this.innerSelectSearch || !this.innerSelectSearch.nativeElement) {\n return;\n }\n let element: HTMLElement = this.innerSelectSearch.nativeElement;\n let panelElement: HTMLElement;\n while ((element = element.parentElement)) {\n if (element.classList.contains('novo-select-panel')) {\n panelElement = element;\n break;\n }\n }\n if (panelElement) {\n this.innerSelectSearch.nativeElement.style.width = panelElement.clientWidth + 'px';\n }\n }\n\n private getNovoOptionHeight(): number {\n if (this.novoSelect.contentOptions.length > 0) {\n return this.novoSelect.contentOptions.first._getHostElement().getBoundingClientRect().height;\n }\n\n return 0;\n }\n\n /**\n * Determine the offset to length that can be caused by the optional novoOption used as a search input.\n */\n private getOptionsLengthOffset(): number {\n if (this.novoOption) {\n return 1;\n } else {\n return 0;\n }\n }\n}\n","<novo-field\n #innerSelectSearch\n class=\"novo-select-search-inner\"\n [ngClass]=\"{'novo-select-search-inner-multiple': novoSelect.multiple, 'novo-select-search-inner-toggle-all': _isToggleAllCheckboxVisible() }\">\n\n <novo-checkbox *ngIf=\"_isToggleAllCheckboxVisible()\"\n novoPrefix\n [color]=\"'primary'\"\n class=\"novo-select-search-toggle-all-checkbox\"\n [checked]=\"toggleAllCheckboxChecked\"\n [indeterminate]=\"toggleAllCheckboxIndeterminate\"\n [tooltip]=\"toggleAllCheckboxTooltipMessage\"\n tooltipClass=\"ngx-novo-select-search-toggle-all-tooltip\"\n [tooltipPosition]=\"toogleAllCheckboxTooltipPosition\"\n (change)=\"_emitSelectAllBooleanToParent($event.checked)\"></novo-checkbox>\n\n <novo-icon\n novoPrefix\n class=\"novo-select-search-icon\">search</novo-icon>\n\n <input class=\"novo-select-search-input\"\n #searchSelectInput\n novoInput\n [name]=\"name\"\n autocomplete=\"off\"\n [type]=\"type\"\n [formControl]=\"_formControl\"\n (keydown)=\"_handleKeydown($event)\"\n (keyup)=\"_handleKeyup($event)\"\n (blur)=\"onBlur()\"\n [placeholder]=\"placeholderLabel\"\n [attr.aria-label]=\"ariaLabel\" />\n\n <novo-spinner *ngIf=\"searching\"\n novoSuffix\n class=\"novo-select-search-spinner\"\n diameter=\"16\"></novo-spinner>\n\n <novo-button\n novoSuffix\n *ngIf=\"!hideClearSearchButton && value && !searching\"\n aria-label=\"Clear\"\n (click)=\"_reset(true)\"\n theme=\"icon\"\n size=\"small\"\n class=\"novo-select-search-clear\">\n <ng-content *ngIf=\"clearIcon; else defaultIcon\" select=\"[novoSelectSearchClear]\"></ng-content>\n <ng-template #defaultIcon>\n <novo-icon>close</novo-icon>\n </ng-template>\n </novo-button>\n\n <ng-content select=\".novo-select-search-custom-header-content\"></ng-content>\n\n</novo-field>\n\n<div *ngIf=\"_showNoEntriesFound$ | async\"\n class=\"novo-select-search-no-entries-found\">\n {{noEntriesFoundLabel}}\n</div>","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NovoButtonModule } from 'novo-elements/elements/button';\nimport { NovoCheckboxModule } from 'novo-elements/elements/checkbox';\nimport { NovoCommonModule } from 'novo-elements/elements/common';\nimport { NovoFieldModule } from 'novo-elements/elements/field';\nimport { NovoIconModule } from 'novo-elements/elements/icon';\nimport { NovoLoadingModule } from 'novo-elements/elements/loading';\nimport { NovoTooltipModule } from 'novo-elements/elements/tooltip';\nimport { NovoSelectSearchClearDirective } from './select-search-clear.directive';\nimport { NovoSelectSearchComponent } from './select-search.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n NovoCheckboxModule,\n NovoButtonModule,\n NovoCommonModule,\n NovoIconModule,\n NovoLoadingModule,\n NovoTooltipModule,\n NovoFieldModule,\n ],\n declarations: [NovoSelectSearchComponent, NovoSelectSearchClearDirective],\n exports: [NovoSelectSearchComponent, NovoSelectSearchClearDirective],\n})\nexport class NovoSelectSearchModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;;;;;;AAMG;MAKU,8BAA8B,CAAA;+GAA9B,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA9B,8BAA8B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,UAAU,EAAE;AACf,iBAAA;;;;;;;;;;;;ACiBD;AACA,MAAM,uBAAuB,GAAG,GAAG;AACnC,IAAI,aAAa,GAAG,CAAC;AACrB;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6EG;MAeU,yBAAyB,CAAA;AAoFpC,IAAA,IACI,kBAAkB,GAAA;AACpB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU;;;AAI1B,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK;;;IAShC,IAAW,QAAQ,CAAC,QAA+B,EAAA;AACjD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAE/B,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;;AA+BlC,IAAA,WAAA,CACoC,UAA6B,EACxD,iBAAoC,EACnC,cAA6B,EACE,UAAyB,GAAA,IAAI,EAC5D,aAA4B,EACS,YAAA,GAAiC,IAAI,EAAA;QALhD,IAAU,CAAA,UAAA,GAAV,UAAU;QACrC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QAChB,IAAc,CAAA,cAAA,GAAd,cAAc;QACiB,IAAU,CAAA,UAAA,GAAV,UAAU;QACzC,IAAa,CAAA,aAAA,GAAb,aAAa;QACwB,IAAY,CAAA,YAAA,GAAZ,YAAY;AA5IlD,QAAA,IAAA,CAAA,IAAI,GAAG,gBAAgB,GAAG,aAAa,EAAE;;QAEzC,IAAgB,CAAA,gBAAA,GAAG,QAAQ;;QAG3B,IAAI,CAAA,IAAA,GAAG,MAAM;;QAGb,IAAmB,CAAA,mBAAA,GAAG,kBAAkB;AAEjD;;;;AAIG;QACM,IAA8B,CAAA,8BAAA,GAAG,MAAM;AAEhD;;;AAGG;QACM,IAAgB,CAAA,gBAAA,GAAG,IAAI;;QAGvB,IAAS,CAAA,SAAA,GAAG,KAAK;;QAGjB,IAAmB,CAAA,mBAAA,GAAG,KAAK;;QAG3B,IAA0B,CAAA,0BAAA,GAAG,KAAK;;QAGlB,IAAyB,CAAA,yBAAA,GAAG,KAAK;AAE1D;;;AAGG;QACM,IAA4B,CAAA,4BAAA,GAAG,KAAK;;QAGpC,IAAqC,CAAA,qCAAA,GAAG,KAAK;;QAG7C,IAAS,CAAA,SAAA,GAAG,iBAAiB;;QAG7B,IAAqB,CAAA,qBAAA,GAAG,KAAK;;QAG7B,IAAwB,CAAA,wBAAA,GAAG,KAAK;;QAGhC,IAA8B,CAAA,8BAAA,GAAG,KAAK;;QAGtC,IAA+B,CAAA,+BAAA,GAAG,EAAE;;QAGpC,IAAgC,CAAA,gCAAA,GAA8D,OAAO;;QAGrG,IAAqB,CAAA,qBAAA,GAAG,KAAK;AAEtC;;;AAGG;QACM,IAAiC,CAAA,iCAAA,GAAG,KAAK;;AAGxC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAW;AAsBjD,QAAA,IAAA,CAAA,SAAS,GAAa,CAAC,CAAM,KAAI,GAAG;AAE7B,QAAA,IAAA,CAAA,YAAY,GAAgB,IAAI,WAAW,CAAC,EAAE,CAAC;AAS/C,QAAA,IAAA,CAAA,SAAS,GAA2C,IAAI,eAAe,CAAwB,IAAI,CAAC;AAEnG,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAE9E,QAAA,IAAA,CAAA,YAAY,GAA6B,IAAI,CAAC,SAAS,CAAC,IAAI,CAClE,SAAS,CAAC,CAAC,QAAQ,KACjB;cACI,aAAa,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAClE,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,MAAM,CAAC,eAAe,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EACzJ,SAAS,CAAe,QAAQ,CAAC,OAAO,EAAE,CAAC,EAC3C,oBAAoB,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE3H,cAAE,EAAE,CAAC,IAAI,CAAC,CACb,CACF;AAEO,QAAA,IAAA,CAAA,cAAc,GAAuB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;;AAM9G,QAAA,IAAA,CAAA,oBAAoB,GAAwB,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAC1H,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,IAAI,CAAC,mBAAmB,IAAI,KAAK,IAAI,aAAa,KAAK,IAAI,CAAC,sBAAsB,EAAE,CAAC,CACtH;;AAGO,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAQ;QAUtC,IAAI,CAAC,UAAU,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC;;IAGtD,QAAQ,GAAA;;AAEN,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI;AAChC,YAAA,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,6BAA6B,CAAC;;aACzE;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC;;;QAIrF,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YAC3F,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,gBAAgB,EAAE;;AAEvB,gBAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;oBAC7B,IAAI,CAAC,MAAM,EAAE;;;iBAEV;;AAEL,gBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;oBACzB,IAAI,CAAC,MAAM,EAAE;;;AAGnB,SAAC,CAAC;;QAGF,IAAI,CAAC,UAAU,CAAC;AACb,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;aAC/B,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;AAC/B,gBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;AACzB,qBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;qBAC/B,SAAS,CAAC,MAAM,IAAI,CAAC,wCAAwC,EAAE,CAAC;;iBAC9D;AACL,gBAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC;;YAGjD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc;;;;;;;;;;;AAY9C,YAAA,IAAI,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAEhF,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;;gBAEpE,UAAU,CAAC,MAAK;;oBAEd,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;;oBAGvC,MAAM,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAEjE,oBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW;oBAC9C,IAAI,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;;;AAI3C,wBAAA,MAAM,oBAAoB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;;;AAIlG,wBAAA,IACE,oBAAoB;4BACpB,CAAC,UAAU,CAAC,UAAU;4BACtB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,EACrF;4BACA,UAAU,CAAC,kBAAkB,EAAE;;;wBAIjC,UAAU,CAAC,MAAK;4BACd,IAAI,CAAC,gBAAgB,EAAE;AACzB,yBAAC,CAAC;AAEF,wBAAA,IAAI,CAAC,IAAI,CAAC,qCAAqC,EAAE;4BAC/C,IAAI,CAAC,wCAAwC,EAAE;;;;oBAKnD,mBAAmB,GAAG,kBAAkB;AAC1C,iBAAC,CAAC;AACJ,aAAC,CAAC;AACJ,SAAC,CAAC;;;AAIJ,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,KAAI;;AAE1F,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,kBAAkB,EAAE;AACtB,oBAAA,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,qCAAqC,CAAC;;qBACjF;AACL,oBAAA,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,qCAAqC,CAAC;;;AAG/F,SAAC,CAAC;;AAGF,QAAA,IAAI,CAAC;AACF,aAAA,MAAM;AACN,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;aAC/B,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;gBAC7B,IAAI,CAAC,gBAAgB,EAAE;;AAE3B,SAAC,CAAC;AAEJ,QAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACnC,IAAI,CAAC,oBAAoB,EAAE;;AAG7B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;;AAEhE,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AACvC,SAAC,CAAC;;AAGJ,IAAA,6BAA6B,CAAC,KAAc,EAAA;AAC1C,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;;IAG5B,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;;IAG5B,2BAA2B,GAAA;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,IAAI,CAAC,qBAAqB;;AAG/D;;;;AAIG;AACH,IAAA,cAAc,CAAC,KAAoB,EAAA;;AAEjC,QAAA,IACE,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC;AACpC,YAAA,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC;YACzB,KAAK,CAAC,GAAG,KAAc,GAAA;AACvB,aAAC,IAAI,CAAC,4BAA4B,KAAK,KAAK,CAAC,GAAG,KAAa,MAAA,mBAAI,KAAK,CAAC,GAAG,yBAAa,CAAC,EACxF;YACA,KAAK,CAAC,eAAe,EAAE;;AAGzB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,KAAA,OAAA,kBAAgB;;YAEpE,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;;;AAIjC,QAAA,IAAI,IAAI,CAAC,0BAA0B,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,kCAAmB,IAAI,CAAC,KAAK,EAAE;AACtF,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACjB,KAAK,CAAC,eAAe,EAAE;;;AAI3B;;;AAGG;AACH,IAAA,YAAY,CAAC,KAAoB,EAAA;QAC/B,IAAI,KAAK,CAAC,GAAG,KAAgB,SAAA,sBAAI,KAAK,CAAC,GAAG,KAAkB,WAAA,sBAAE;YAC5D,MAAM,sBAAsB,GAAG,IAAI,CAAC,UAAU,CAAC,wBAAwB,EAAE;YACzE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,sBAAsB,CAAC;AAC7F,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBAChB,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;gBACvD,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,gBAAgB,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,aAAa,EAAE,CACzH;;;;AAKP;;;;;AAKG;AACH,IAAA,YAAY,CAAC,WAAmB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,EAAE;YACvC,OAAO,WAAW,GAAG,CAAC;;AAExB,QAAA,OAAO,WAAW;;AAGpB;;;;;AAKG;IACH,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAAE;;AAGvE,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;;IAGvC,MAAM,GAAA;QACJ,IAAI,CAAC,SAAS,EAAE;;AAGlB,IAAA,gBAAgB,CAAC,EAA2B,EAAA;QAC1C,IAAI,CAAC,YAAY,CAAC;AACf,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC,uBAAuB,CAAC,EACzD,GAAG,CAAC,OAAO,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC,CAAC,EACrD,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;aAE3B,SAAS,CAAC,EAAE,CAAC;;AAGlB,IAAA,iBAAiB,CAAC,EAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGrB;;AAEG;IACI,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;YACrD;;;;QAIF,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa;AACjD,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS;;AAGjC,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE;AAE5C,QAAA,KAAK,CAAC,SAAS,GAAG,SAAS;;AAG7B;;;AAGG;AACI,IAAA,MAAM,CAAC,KAAe,EAAA;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,MAAM,EAAE;;;AAIjB;;;AAGG;IACK,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;AAC9B,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;;;AAG5B,gBAAA,OAAO,CAAC,KAAK,CAAC,+GAA+G,CAAC;;YAEhI;;;;;QAKF,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK;QAE7D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YAC3F,IAAI,qBAAqB,GAAG,KAAK;AACjC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;gBAC5B,IACE,CAAC,IAAI,CAAC,iCAAiC,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;AACtG,oBAAA,IAAI,CAAC,sBAAsB;oBAC3B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAC1C;oBACA,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;wBACrC,MAAM,GAAG,EAAE;;oBAEb,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC;oBAClF,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,aAAa,KAAI;wBACpD,IACE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;4BAClE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EACxE;;;AAGA,4BAAA,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;4BAC1B,qBAAqB,GAAG,IAAI;;AAEhC,qBAAC,CAAC;;;AAGN,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM;YAEpC,IAAI,qBAAqB,EAAE;;;;AAI7B,SAAC,CAAC;;AAGJ;;AAEG;IACK,wCAAwC,GAAA;AAC9C,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AACtE,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE;YACnD,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC;AAC1E,YAAA,MAAM,UAAU,GAAG,6BAA6B,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;;YAEjI,MAAM,0BAA0B,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,GAAG,iBAAiB;YAC9F,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS;YAEtE,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,YAAY;AAC3E,YAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,uBAAuB,GAAG,iBAAiB,IAAI,gBAAgB,CAAC;AAE3G,YAAA,MAAM,yBAAyB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,gBAAgB,GAAG,iBAAiB,IAAI,gBAAgB,CAAC,GAAG,CAAC;AAE3G,YAAA,IAAI,yBAAyB,IAAI,0BAA0B,EAAE;AAC3D,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,GAAG,0BAA0B,GAAG,gBAAgB;;AACxF,iBAAA,IAAI,yBAAyB,GAAG,sBAAsB,IAAI,0BAA0B,EAAE;AAC3F,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS;AAC3C,oBAAA,CAAC,0BAA0B,GAAG,CAAC,IAAI,gBAAgB,IAAI,uBAAuB,GAAG,iBAAiB,CAAC;;;;AAK3G;;;AAGG;IACI,gBAAgB,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;YACpE;;AAEF,QAAA,IAAI,OAAO,GAAgB,IAAI,CAAC,iBAAiB,CAAC,aAAa;AAC/D,QAAA,IAAI,YAAyB;QAC7B,QAAQ,OAAO,GAAG,OAAO,CAAC,aAAa,GAAG;YACxC,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;gBACnD,YAAY,GAAG,OAAO;gBACtB;;;QAGJ,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC,WAAW,GAAG,IAAI;;;IAI9E,mBAAmB,GAAA;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM;;AAG9F,QAAA,OAAO,CAAC;;AAGV;;AAEG;IACK,sBAAsB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,OAAO,CAAC;;aACH;AACL,YAAA,OAAO,CAAC;;;AAzgBD,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,EAwI1B,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,iBAAiB,EAGL,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,UAAU,0DAEV,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA7I3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAVvB,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,8BAAA,EAAA,gCAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,4BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,uCAAA,EAAA,SAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,8BAAA,EAAA,gCAAA,EAAA,+BAAA,EAAA,iCAAA,EAAA,gCAAA,EAAA,kCAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,iCAAA,EAAA,mCAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,6CAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC;AACxD,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;AACJ,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAsFW,8BAA8B,EANJ,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAU,EAGV,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAU,2CC5MpD,w9DA2DM,EAAA,MAAA,EAAA,CAAA,4yCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,0DAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;ADoGqB,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;;AAAmC,CAAA,EAAA,yBAAA,CAAA,SAAA,EAAA,2BAAA,EAAA,KAAA,CAAA,CAAA;4FAlChD,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAdrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAGnB,SAAA,EAAA;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,+BAA+B,CAAC;AACxD,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,KAAK,EAAA,QAAA,EAAA,w9DAAA,EAAA,MAAA,EAAA,CAAA,4yCAAA,CAAA,EAAA;;0BA0IhB,MAAM;2BAAC,iBAAiB;;0BAGxB;;0BAAY,MAAM;2BAAC,UAAU;;0BAE7B;;0BAAY,MAAM;2BAAC,gBAAgB;yCA5I7B,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,mBAAmB,EAAA,CAAA;sBAA3B;gBAOQ,8BAA8B,EAAA,CAAA;sBAAtC;gBAMQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAGQ,SAAS,EAAA,CAAA;sBAAjB;gBAGQ,mBAAmB,EAAA,CAAA;sBAA3B;gBAGQ,0BAA0B,EAAA,CAAA;sBAAlC;gBAGwB,yBAAyB,EAAA,CAAA;sBAAjD;gBAMQ,4BAA4B,EAAA,CAAA;sBAApC;gBAGQ,qCAAqC,EAAA,CAAA;sBAA7C;gBAGQ,SAAS,EAAA,CAAA;sBAAjB;gBAGQ,qBAAqB,EAAA,CAAA;sBAA7B;gBAGQ,wBAAwB,EAAA,CAAA;sBAAhC;gBAGQ,8BAA8B,EAAA,CAAA;sBAAtC;gBAGQ,+BAA+B,EAAA,CAAA;sBAAvC;gBAGQ,gCAAgC,EAAA,CAAA;sBAAxC;gBAGQ,qBAAqB,EAAA,CAAA;sBAA7B;gBAMQ,iCAAiC,EAAA,CAAA;sBAAzC;gBAGS,SAAS,EAAA,CAAA;sBAAlB;gBAGmE,iBAAiB,EAAA,CAAA;sBAApF,SAAS;uBAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGE,iBAAiB,EAAA,CAAA;sBAApF,SAAS;uBAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGD,SAAS,EAAA,CAAA;sBAAzE,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,8BAA8B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAG3D,kBAAkB,EAAA,CAAA;sBADrB,WAAW;uBAAC,6CAA6C;;;MErL/C,sBAAsB,CAAA;+GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,EAHlB,YAAA,EAAA,CAAA,yBAAyB,EAAE,8BAA8B,aAVtE,YAAY;YACZ,mBAAmB;YACnB,kBAAkB;YAClB,gBAAgB;YAChB,gBAAgB;YAChB,cAAc;YACd,iBAAiB;YACjB,iBAAiB;YACjB,eAAe,CAAA,EAAA,OAAA,EAAA,CAGP,yBAAyB,EAAE,8BAA8B,CAAA,EAAA,CAAA,CAAA;AAExD,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YAb/B,YAAY;YACZ,mBAAmB;YACnB,kBAAkB;YAClB,gBAAgB;YAChB,gBAAgB;YAChB,cAAc;YACd,iBAAiB;YACjB,iBAAiB;YACjB,eAAe,CAAA,EAAA,CAAA,CAAA;;4FAKN,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAflC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,kBAAkB;wBAClB,gBAAgB;wBAChB,gBAAgB;wBAChB,cAAc;wBACd,iBAAiB;wBACjB,iBAAiB;wBACjB,eAAe;AAChB,qBAAA;AACD,oBAAA,YAAY,EAAE,CAAC,yBAAyB,EAAE,8BAA8B,CAAC;AACzE,oBAAA,OAAO,EAAE,CAAC,yBAAyB,EAAE,8BAA8B,CAAC;AACrE,iBAAA;;;AC3BD;;AAEG;;;;"}
1
+ {"version":3,"file":"novo-elements-elements-select-search.mjs","sources":["../../../projects/novo-elements/src/elements/select-search/select-search-clear.directive.ts","../../../projects/novo-elements/src/elements/select-search/select-search.component.ts","../../../projects/novo-elements/src/elements/select-search/select-search.component.html","../../../projects/novo-elements/src/elements/select-search/select-search.module.ts","../../../projects/novo-elements/src/elements/select-search/novo-elements-elements-select-search.ts"],"sourcesContent":["import { Directive } from '@angular/core';\n\n/**\n * Directive for providing a custom clear-icon.\n * e.g.\n * <novo-select-search [formControl]=\"bankFilterCtrl\">\n * <novo-icon novoSelectSearchClear>x</novo-icon>\n * </novo-select-search>\n */\n@Directive({\n selector: '[novoSelectSearchClear]',\n standalone: false\n})\nexport class NovoSelectSearchClearDirective {}\n","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\nimport { debounceTime, delay, distinctUntilChanged, filter, map, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { BooleanInput, isAlphaNumeric, Key } from 'novo-elements/utils';\nimport { NovoOption, _countGroupLabelsBeforeOption } from 'novo-elements/elements/common';\nimport { NovoFieldElement } from 'novo-elements/elements/field';\nimport { NovoSelectElement } from 'novo-elements/elements/select';\nimport { NovoSelectSearchClearDirective } from './select-search-clear.directive';\n\n/** The max height of the select's overlay panel. */\nconst SELECT_PANEL_MAX_HEIGHT = 256;\nlet autoIncrement = 1;\n/**\n * Component providing an input field for searching NovoSelectElement options.\n *\n * Example usage:\n *\n * interface Bank {\n * id: string;\n * name: string;\n * }\n *\n * @Component({\n * selector: 'my-app-data-selection',\n * template: `\n * <novo-form-field>\n * <novo-select [formControl]=\"bankCtrl\" placeholder=\"Bank\">\n * <novo-option>\n * <ngx-novo-select-search [formControl]=\"bankFilterCtrl\"></ngx-novo-select-search>\n * </novo-option>\n * <novo-option *ngFor=\"let bank of filteredBanks | async\" [value]=\"bank.id\">\n * {{bank.name}}\n * </novo-option>\n * </novo-select>\n * </novo-form-field>\n * `\n * })\n * export class DataSelectionComponent implements OnInit, OnDestroy {\n *\n * // control for the selected bank\n * public bankCtrl: FormControl = new FormControl();\n * // control for the NovoSelectElement filter keyword\n * public bankFilterCtrl: FormControl = new FormControl();\n *\n * // list of banks\n * private banks: Bank[] = [{name: 'Bank A', id: 'A'}, {name: 'Bank B', id: 'B'}, {name: 'Bank C', id: 'C'}];\n * // list of banks filtered by search keyword\n * public filteredBanks: ReplaySubject<Bank[]> = new ReplaySubject<Bank[]>(1);\n *\n * // Subject that emits when the component has been destroyed.\n * private _onDestroy = new Subject<void>();\n *\n *\n * ngOnInit() {\n * // load the initial bank list\n * this.filteredBanks.next(this.banks.slice());\n * // listen for search field value changes\n * this.bankFilterCtrl.valueChanges\n * .pipe(takeUntil(this._onDestroy))\n * .subscribe(() => {\n * this.filterBanks();\n * });\n * }\n *\n * ngOnDestroy() {\n * this._onDestroy.next();\n * this._onDestroy.complete();\n * }\n *\n * private filterBanks() {\n * if (!this.banks) {\n * return;\n * }\n *\n * // get the search keyword\n * let search = this.bankFilterCtrl.value;\n * if (!search) {\n * this.filteredBanks.next(this.banks.slice());\n * return;\n * } else {\n * search = search.toLowerCase();\n * }\n *\n * // filter the banks\n * this.filteredBanks.next(\n * this.banks.filter(bank => bank.name.toLowerCase().indexOf(search) > -1)\n * );\n * }\n * }\n */\n@Component({\n selector: 'novo-select-search',\n templateUrl: './select-search.component.html',\n styleUrls: ['./select-search.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NovoSelectSearchComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class NovoSelectSearchComponent implements OnInit, OnDestroy, ControlValueAccessor {\n @Input() name = 'select-search-' + autoIncrement++;\n /** Label of the search placeholder */\n @Input() placeholderLabel = 'Search';\n\n /** Type of the search input field */\n @Input() type = 'text';\n\n /** Label to be shown when no entries are found. Set to null if no message should be shown. */\n @Input() noEntriesFoundLabel = 'No Records Found';\n\n /**\n * Text that is appended to the currently active item label announced by screen readers,\n * informing the user of the current index, value and total options.\n * eg: Bank R (Germany) 1 of 6\n */\n @Input() indexAndLengthScreenReaderText = ' of ';\n\n /**\n * Whether or not the search field should be cleared after the dropdown menu is closed.\n * Useful for server-side filtering.\n */\n @Input() clearSearchInput = true;\n\n /** Whether to show the search-in-progress indicator */\n @Input() searching = false;\n\n /** Disables initial focusing of the input field */\n @Input() disableInitialFocus = false;\n\n /** Enable clear input on escape pressed */\n @Input() enableClearOnEscapePressed = false;\n\n /** Allow user to uncheck a value while filtering. */\n @Input() @BooleanInput() allowDeselectDuringFilter = false;\n\n /**\n * Prevents home / end key being propagated to novo-select,\n * allowing to move the cursor within the search input instead of navigating the options\n */\n @Input() preventHomeEndKeyPropagation = false;\n\n /** Disables scrolling to active options when option list changes. Useful for server-side search */\n @Input() disableScrollToActiveOnOptionsChanged = false;\n\n /** Adds 508 screen reader support for search box */\n @Input() ariaLabel = 'dropdown search';\n\n /** Whether to show Select All Checkbox (for novo-select[multi=true]) */\n @Input() showToggleAllCheckbox = false;\n\n /** select all checkbox checked state */\n @Input() toggleAllCheckboxChecked = false;\n\n /** select all checkbox indeterminate state */\n @Input() toggleAllCheckboxIndeterminate = false;\n\n /** Display a message in a tooltip on the toggle-all checkbox */\n @Input() toggleAllCheckboxTooltipMessage = '';\n\n /** Define the position of the tooltip on the toggle-all checkbox. */\n @Input() toogleAllCheckboxTooltipPosition: 'left' | 'right' | 'above' | 'below' | 'before' | 'after' = 'below';\n\n /** Show/Hide the search clear button of the search input */\n @Input() hideClearSearchButton = false;\n\n /**\n * Always restore selected options on selectionChange for mode multi (e.g. for lazy loading/infinity scrolling).\n * Defaults to false, so selected options are only restored while filtering is active.\n */\n @Input() alwaysRestoreSelectedOptionsMulti = false;\n\n /** Output emitter to send to parent component with the toggle all boolean */\n @Output() toggleAll = new EventEmitter<boolean>();\n\n /** Reference to the search input field */\n @ViewChild('searchSelectInput', { read: ElementRef, static: true }) searchSelectInput: ElementRef;\n\n /** Reference to the search input field */\n @ViewChild('innerSelectSearch', { read: ElementRef, static: true }) innerSelectSearch: ElementRef;\n\n /** Reference to custom search input clear icon */\n @ContentChild(NovoSelectSearchClearDirective, { static: false }) clearIcon: NovoSelectSearchClearDirective;\n\n @HostBinding('class.novo-select-search-inside-novo-option')\n get isInsideNovoOption(): boolean {\n return !!this.novoOption;\n }\n\n /** Current search value */\n get value(): string {\n return this._formControl.value;\n }\n private _lastExternalInputValue: string;\n\n onTouched: Function = (_: any) => {};\n\n public _formControl: FormControl = new FormControl('');\n\n /** Reference to the NovoSelectElement options */\n public set _options(_options: QueryList<NovoOption>) {\n this._options$.next(_options);\n }\n public get _options(): QueryList<NovoOption> {\n return this._options$.getValue();\n }\n public _options$: BehaviorSubject<QueryList<NovoOption>> = new BehaviorSubject<QueryList<NovoOption>>(null);\n\n private _filterFinishedRerender = this._formControl.valueChanges.pipe(debounceTime(1));\n\n private optionsList$: Observable<NovoOption[]> = this._options$.pipe(\n switchMap((_options) =>\n _options\n ? combineLatest([_options.changes, this._filterFinishedRerender]).pipe(\n map(([options,]) => options.toArray().filter(option => !(option._getHostElement()?.classList.contains('add-option') || option._getHostElement().hidden))),\n startWith<NovoOption[]>(_options.toArray()),\n distinctUntilChanged((optsA, optsB) => optsA.map(opt => opt.value).join(',') === optsB.map(opt => opt.value).join(','))\n )\n : of(null),\n ),\n );\n\n private optionsLength$: Observable<number> = this.optionsList$.pipe(map((options) => (options ? options.length : 0)));\n\n /** Previously selected values when using <novo-select [multiple]=\"true\">*/\n private previousSelectedValues: any[];\n\n /** whether to show the no entries found message */\n public _showNoEntriesFound$: Observable<boolean> = combineLatest([this._formControl.valueChanges, this.optionsLength$]).pipe(\n map(([value, optionsLength]) => this.noEntriesFoundLabel && value && optionsLength === this.getOptionsLengthOffset()),\n );\n\n /** Subject that emits when the component has been destroyed. */\n private _onDestroy = new Subject<void>();\n\n constructor(\n @Inject(NovoSelectElement) public novoSelect: NovoSelectElement,\n public changeDetectorRef: ChangeDetectorRef,\n private _viewportRuler: ViewportRuler,\n @Optional() @Inject(NovoOption) public novoOption: NovoOption = null,\n private liveAnnouncer: LiveAnnouncer,\n @Optional() @Inject(NovoFieldElement) public matFormField: NovoFieldElement = null,\n ) {\n this.novoSelect.hideLegacyOptionsForSearch.set(true);\n }\n\n ngOnInit() {\n // set custom novo-option class if the component was placed inside a novo-option\n if (this.novoOption) {\n this.novoOption.novoInert = true;\n this.novoOption._getHostElement().classList.add('contains-novo-select-search');\n } else {\n console.error('<novo-select-search> must be placed inside a <novo-option> element');\n }\n\n // when the select dropdown panel is opened or closed\n this.novoSelect.openedChange.pipe(delay(1), takeUntil(this._onDestroy)).subscribe((opened) => {\n if (opened) {\n this.updateInputWidth();\n // focus the search field when opening\n if (!this.disableInitialFocus) {\n this._focus();\n }\n } else {\n // clear it when closing\n if (this.clearSearchInput) {\n this._reset();\n }\n }\n });\n\n // set the first item active after the options changed\n this.novoSelect.openedChange\n .pipe(take(1))\n .pipe(takeUntil(this._onDestroy))\n .subscribe(() => {\n if (this.novoSelect._keyManager) {\n this.novoSelect._keyManager.change\n .pipe(takeUntil(this._onDestroy))\n .subscribe(() => this.adjustScrollTopToFitActiveOptionIntoView());\n } else {\n console.warn('_keyManager was not initialized.');\n }\n\n this._options = this.novoSelect.contentOptions;\n\n // Closure variable for tracking the most recent first option.\n // In order to avoid avoid causing the list to\n // scroll to the top when options are added to the bottom of\n // the list (eg: infinite scroll), we compare only\n // the changes to the first options to determine if we\n // should set the first item as active.\n // This prevents unnecessary scrolling to the top of the list\n // when options are appended, but allows the first item\n // in the list to be set as active by default when there\n // is no active selection\n let previousFirstOption = this._options.toArray()[this.getOptionsLengthOffset()];\n\n this._options.changes.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n // avoid \"expression has been changed\" error\n setTimeout(() => {\n // Convert the QueryList to an array\n const options = this._options.toArray();\n\n // The true first item is offset by 1\n const currentFirstOption = options[this.getOptionsLengthOffset()];\n\n const keyManager = this.novoSelect._keyManager;\n if (keyManager && this.novoSelect.panelOpen) {\n // set first item active and input width\n\n // Check to see if the first option in these changes is different from the previous.\n const firstOptionIsChanged = !this.novoSelect.compareWith(previousFirstOption, currentFirstOption);\n\n // CASE: The first option is different now.\n // Indiciates we should set it as active and scroll to the top.\n if (\n firstOptionIsChanged ||\n !keyManager.activeItem ||\n !options.find((option) => this.novoSelect.compareWith(option, keyManager.activeItem))\n ) {\n keyManager.setFirstItemActive();\n }\n\n // wait for panel width changes\n setTimeout(() => {\n this.updateInputWidth();\n });\n\n if (!this.disableScrollToActiveOnOptionsChanged) {\n this.adjustScrollTopToFitActiveOptionIntoView();\n }\n }\n\n // Update our reference\n previousFirstOption = currentFirstOption;\n });\n });\n });\n\n // add or remove css class depending on whether to show the no entries found message\n // note: this is hacky\n this._showNoEntriesFound$.pipe(takeUntil(this._onDestroy)).subscribe((showNoEntriesFound) => {\n // set no entries found class on mat option\n if (this.novoOption) {\n if (showNoEntriesFound) {\n this.novoOption._getHostElement().classList.add('novo-select-search-no-entries-found');\n } else {\n this.novoOption._getHostElement().classList.remove('novo-select-search-no-entries-found');\n }\n }\n });\n\n // resize the input width when the viewport is resized, i.e. the trigger width could potentially be resized\n this._viewportRuler\n .change()\n .pipe(takeUntil(this._onDestroy))\n .subscribe(() => {\n if (this.novoSelect.panelOpen) {\n this.updateInputWidth();\n }\n });\n\n if (!this.allowDeselectDuringFilter) {\n this.initMultipleHandling();\n }\n\n this.optionsList$.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n // update view when available options change\n this.changeDetectorRef.markForCheck();\n });\n }\n\n _emitSelectAllBooleanToParent(state: boolean) {\n this.toggleAll.emit(state);\n }\n\n ngOnDestroy() {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n\n _isToggleAllCheckboxVisible(): boolean {\n return this.novoSelect.multiple && this.showToggleAllCheckbox;\n }\n\n /**\n * Handles the key down event with NovoSelectElement.\n * Allows e.g. selecting with enter key, navigation with arrow keys, etc.\n * @param event\n */\n _handleKeydown(event: KeyboardEvent) {\n // Prevent propagation for all alphanumeric characters in order to avoid selection issues\n if (\n (event.key && event.key.length === 1) ||\n isAlphaNumeric(event.key) ||\n event.key === Key.Space ||\n (this.preventHomeEndKeyPropagation && (event.key === Key.Home || event.key === Key.End))\n ) {\n event.stopPropagation();\n }\n\n if (this.novoSelect.multiple && event.key && event.key === Key.Enter) {\n // Regain focus after multiselect, so we can further type\n setTimeout(() => this._focus());\n }\n\n // Special case if click Escape, if input is empty, close the dropdown, if not, empty out the search field\n if (this.enableClearOnEscapePressed === true && event.key === Key.Escape && this.value) {\n this._reset(true);\n event.stopPropagation();\n }\n }\n\n /**\n * Handles the key up event with NovoSelectElement.\n * Allows e.g. the announcing of the currently activeDescendant by screen readers.\n */\n _handleKeyup(event: KeyboardEvent) {\n if (event.key === Key.ArrowUp || event.key === Key.ArrowDown) {\n const ariaActiveDescendantId = this.novoSelect._getAriaActiveDescendant();\n const index = this._options.toArray().findIndex((item) => item.id === ariaActiveDescendantId);\n if (index !== -1) {\n const activeDescendant = this._options.toArray()[index];\n this.liveAnnouncer.announce(\n activeDescendant.viewValue + ' ' + this.getAriaIndex(index) + this.indexAndLengthScreenReaderText + this.getAriaLength(),\n );\n }\n }\n }\n\n /**\n * Calculate the index of the current option, taking the offset to length into account.\n * examples:\n * Case 1 [Search, 1, 2, 3] will have offset of 1, due to search and will read index of total.\n * Case 2 [1, 2, 3] will have offset of 0 and will read index +1 of total.\n */\n getAriaIndex(optionIndex: number): number {\n if (this.getOptionsLengthOffset() === 0) {\n return optionIndex + 1;\n }\n return optionIndex;\n }\n\n /**\n * Calculate the length of the options, taking the offset to length into account.\n * examples:\n * Case 1 [Search, 1, 2, 3] will have length of options.length -1, due to search.\n * Case 2 [1, 2, 3] will have length of options.length.\n */\n getAriaLength(): number {\n return this._options.toArray().length - this.getOptionsLengthOffset();\n }\n\n writeValue(value: string) {\n this._lastExternalInputValue = value;\n this._formControl.setValue(value);\n this.changeDetectorRef.markForCheck();\n }\n\n onBlur() {\n this.onTouched();\n }\n\n registerOnChange(fn: (value: string) => void) {\n this._formControl.valueChanges\n .pipe(\n filter((value) => value !== this._lastExternalInputValue),\n tap(() => (this._lastExternalInputValue = undefined)),\n takeUntil(this._onDestroy),\n )\n .subscribe(fn);\n }\n\n registerOnTouched(fn: Function) {\n this.onTouched = fn;\n }\n\n /**\n * Focuses the search input field\n */\n public _focus() {\n if (!this.searchSelectInput || !this.novoSelect.panel) {\n return;\n }\n // save and restore scrollTop of panel, since it will be reset by focus()\n // note: this is hacky\n const panel = this.novoSelect.panel.nativeElement;\n const scrollTop = panel.scrollTop;\n\n // focus\n this.searchSelectInput.nativeElement.focus();\n\n panel.scrollTop = scrollTop;\n }\n\n /**\n * Resets the current search value\n * @param focus whether to focus after resetting\n */\n public _reset(focus?: boolean) {\n this._formControl.setValue('');\n if (focus) {\n this._focus();\n }\n }\n\n /**\n * Initializes handling <novo-select [multiple]=\"true\">\n * Note: to improve this code, novo-select should be extended to allow disabling resetting the selection while filtering.\n */\n private initMultipleHandling() {\n if (!this.novoSelect.ngControl) {\n if (this.novoSelect.multiple) {\n // note: the access to novoSelect.ngControl (instead of novoSelect.value / novoSelect.valueChanges)\n // is necessary to properly work in multi-selection mode.\n console.error('the novo-select containing novo-select-search must have a ngModel or formControl directive when multiple=true');\n }\n return;\n }\n // if <novo-select [multiple]=\"true\">\n // store previously selected values and restore them when they are deselected\n // because the option is not available while we are currently filtering\n this.previousSelectedValues = this.novoSelect.ngControl.value;\n\n this.novoSelect.ngControl.valueChanges.pipe(takeUntil(this._onDestroy)).subscribe((values) => {\n let restoreSelectedValues = false;\n if (this.novoSelect.multiple) {\n if (\n (this.alwaysRestoreSelectedOptionsMulti || (this._formControl.value && this._formControl.value.length)) &&\n this.previousSelectedValues &&\n Array.isArray(this.previousSelectedValues)\n ) {\n if (!values || !Array.isArray(values)) {\n values = [];\n }\n const optionValues = (this.novoSelect.options || []).map((option) => option.value);\n this.previousSelectedValues.forEach((previousValue) => {\n if (\n !values.some((v) => this.novoSelect.compareWith(v, previousValue)) &&\n !optionValues.some((v) => this.novoSelect.compareWith(v, previousValue))\n ) {\n // if a value that was selected before is deselected and not found in the options, it was deselected\n // due to the filtering, so we restore it.\n values.push(previousValue);\n restoreSelectedValues = true;\n }\n });\n }\n }\n this.previousSelectedValues = values;\n\n if (restoreSelectedValues) {\n // TODO: Fix this\n // this.novoSelect._onChange(values);\n }\n });\n }\n\n /**\n * Scrolls the currently active option into the view if it is not yet visible.\n */\n private adjustScrollTopToFitActiveOptionIntoView(): void {\n if (this.novoSelect.panel && this.novoSelect.contentOptions.length > 0) {\n const novoOptionHeight = this.getNovoOptionHeight();\n const activeOptionIndex = this.novoSelect._keyManager.activeItemIndex || 0;\n const labelCount = _countGroupLabelsBeforeOption(activeOptionIndex, this.novoSelect.contentOptions, this.novoSelect.optionGroups);\n // If the component is in a NovoOption, the activeItemIndex will be offset by one.\n const indexOfOptionToFitIntoView = (this.novoOption ? -1 : 0) + labelCount + activeOptionIndex;\n const currentScrollTop = this.novoSelect.panel.nativeElement.scrollTop;\n\n const searchInputHeight = this.innerSelectSearch.nativeElement.offsetHeight;\n const amountOfVisibleOptions = Math.floor((SELECT_PANEL_MAX_HEIGHT - searchInputHeight) / novoOptionHeight);\n\n const indexOfFirstVisibleOption = Math.round((currentScrollTop + searchInputHeight) / novoOptionHeight) - 1;\n\n if (indexOfFirstVisibleOption >= indexOfOptionToFitIntoView) {\n this.novoSelect.panel.nativeElement.scrollTop = indexOfOptionToFitIntoView * novoOptionHeight;\n } else if (indexOfFirstVisibleOption + amountOfVisibleOptions <= indexOfOptionToFitIntoView) {\n this.novoSelect.panel.nativeElement.scrollTop =\n (indexOfOptionToFitIntoView + 1) * novoOptionHeight - (SELECT_PANEL_MAX_HEIGHT - searchInputHeight);\n }\n }\n }\n\n /**\n * Set the width of the innerSelectSearch to fit even custom scrollbars\n * And support all Operation Systems\n */\n public updateInputWidth() {\n if (!this.innerSelectSearch || !this.innerSelectSearch.nativeElement) {\n return;\n }\n let element: HTMLElement = this.innerSelectSearch.nativeElement;\n let panelElement: HTMLElement;\n while ((element = element.parentElement)) {\n if (element.classList.contains('novo-select-panel')) {\n panelElement = element;\n break;\n }\n }\n if (panelElement) {\n this.innerSelectSearch.nativeElement.style.width = panelElement.clientWidth + 'px';\n }\n }\n\n private getNovoOptionHeight(): number {\n if (this.novoSelect.contentOptions.length > 0) {\n return this.novoSelect.contentOptions.first._getHostElement().getBoundingClientRect().height;\n }\n\n return 0;\n }\n\n /**\n * Determine the offset to length that can be caused by the optional novoOption used as a search input.\n */\n private getOptionsLengthOffset(): number {\n if (this.novoOption) {\n return 1;\n } else {\n return 0;\n }\n }\n}\n","<novo-field\n #innerSelectSearch\n class=\"novo-select-search-inner\"\n [ngClass]=\"{'novo-select-search-inner-multiple': novoSelect.multiple, 'novo-select-search-inner-toggle-all': _isToggleAllCheckboxVisible() }\">\n\n <novo-checkbox *ngIf=\"_isToggleAllCheckboxVisible()\"\n novoPrefix\n [color]=\"'primary'\"\n class=\"novo-select-search-toggle-all-checkbox\"\n [checked]=\"toggleAllCheckboxChecked\"\n [indeterminate]=\"toggleAllCheckboxIndeterminate\"\n [tooltip]=\"toggleAllCheckboxTooltipMessage\"\n tooltipClass=\"ngx-novo-select-search-toggle-all-tooltip\"\n [tooltipPosition]=\"toogleAllCheckboxTooltipPosition\"\n (change)=\"_emitSelectAllBooleanToParent($event.checked)\"></novo-checkbox>\n\n <novo-icon\n novoPrefix\n class=\"novo-select-search-icon\">search</novo-icon>\n\n <input class=\"novo-select-search-input\"\n #searchSelectInput\n novoInput\n [name]=\"name\"\n autocomplete=\"off\"\n [type]=\"type\"\n [formControl]=\"_formControl\"\n (keydown)=\"_handleKeydown($event)\"\n (keyup)=\"_handleKeyup($event)\"\n (blur)=\"onBlur()\"\n [placeholder]=\"placeholderLabel\"\n [attr.aria-label]=\"ariaLabel\" />\n\n <novo-spinner *ngIf=\"searching\"\n novoSuffix\n class=\"novo-select-search-spinner\"\n diameter=\"16\"></novo-spinner>\n\n <novo-button\n novoSuffix\n *ngIf=\"!hideClearSearchButton && value && !searching\"\n aria-label=\"Clear\"\n (click)=\"_reset(true)\"\n theme=\"icon\"\n size=\"small\"\n class=\"novo-select-search-clear\">\n <ng-content *ngIf=\"clearIcon; else defaultIcon\" select=\"[novoSelectSearchClear]\"></ng-content>\n <ng-template #defaultIcon>\n <novo-icon>close</novo-icon>\n </ng-template>\n </novo-button>\n\n <ng-content select=\".novo-select-search-custom-header-content\"></ng-content>\n\n</novo-field>\n\n<div *ngIf=\"_showNoEntriesFound$ | async\"\n class=\"novo-select-search-no-entries-found\">\n {{noEntriesFoundLabel}}\n</div>","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NovoButtonModule } from 'novo-elements/elements/button';\nimport { NovoCheckboxModule } from 'novo-elements/elements/checkbox';\nimport { NovoCommonModule } from 'novo-elements/elements/common';\nimport { NovoFieldModule } from 'novo-elements/elements/field';\nimport { NovoIconModule } from 'novo-elements/elements/icon';\nimport { NovoLoadingModule } from 'novo-elements/elements/loading';\nimport { NovoTooltipModule } from 'novo-elements/elements/tooltip';\nimport { NovoSelectSearchClearDirective } from './select-search-clear.directive';\nimport { NovoSelectSearchComponent } from './select-search.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n NovoCheckboxModule,\n NovoButtonModule,\n NovoCommonModule,\n NovoIconModule,\n NovoLoadingModule,\n NovoTooltipModule,\n NovoFieldModule,\n ],\n declarations: [NovoSelectSearchComponent, NovoSelectSearchClearDirective],\n exports: [NovoSelectSearchComponent, NovoSelectSearchClearDirective],\n})\nexport class NovoSelectSearchModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -51,6 +51,9 @@ class NovoTabbedGroupPickerElement {
51
51
  this.scrollViewportHeight = 351;
52
52
  this.virtualScrollItemSize = 39;
53
53
  this.getSelectedState = (childArray) => {
54
+ if (!Array.isArray(childArray)) {
55
+ return undefined;
56
+ }
54
57
  const numberOfSelectedItems = childArray.filter(({ selected }) => selected).length;
55
58
  if (!numberOfSelectedItems) {
56
59
  return undefined;
@@ -162,9 +165,11 @@ class NovoTabbedGroupPickerElement {
162
165
  };
163
166
  }
164
167
  replaceChildrenWithReferences(parent, sortedData, compareFunction, warnFunction) {
165
- parent.children = parent.children
166
- .map((child) => binarySearch(child, sortedData, compareFunction) || warnFunction(child))
167
- .filter(Boolean); // since map can return undefined, remove undefined elements
168
+ if (Array.isArray(parent?.children)) {
169
+ parent.children = parent.children
170
+ .map((child) => binarySearch(child, sortedData, compareFunction) || warnFunction(child))
171
+ .filter(Boolean); // since map can return undefined, remove undefined elements
172
+ }
168
173
  }
169
174
  makeWarningFunction(parentLabel, childLabel, childValueField) {
170
175
  return (child) => {
@@ -1 +1 @@
1
- {"version":3,"file":"novo-elements-elements-tabbed-group-picker.mjs","sources":["../../../projects/novo-elements/src/elements/tabbed-group-picker/TabbedGroupPicker.ts","../../../projects/novo-elements/src/elements/tabbed-group-picker/TabbedGroupPicker.html","../../../projects/novo-elements/src/elements/tabbed-group-picker/TabbedGroupPicker.module.ts","../../../projects/novo-elements/src/elements/tabbed-group-picker/novo-elements-elements-tabbed-group-picker.ts"],"sourcesContent":["import { CdkScrollable } from '@angular/cdk/scrolling';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { binarySearch, BooleanInput, Helpers } from 'novo-elements/utils';\nimport { NOVO_OPTION_PARENT_COMPONENT } from 'novo-elements/elements/common';\nimport { NovoDropdownElement } from 'novo-elements/elements/dropdown';\n\nexport type TabbedGroupPickerTab = {\n typeName: string;\n typeLabel: string;\n valueField: string;\n labelField: string;\n scrollOffset?: number;\n icon?: string;\n} & (ParentTab | ChildTab);\n\nexport type ParentTab = {\n childTypeName: string;\n data: Array<ParentOption>;\n};\n\ntype BaseOption = {\n selected?: boolean;\n indeterminate?: boolean;\n} & { [key: string]: any };\n\ntype ParentOption = BaseOption & {\n children: Option[];\n};\n\ntype Option = BaseOption | ParentOption;\n\nexport type ChildTab = {\n data: Array<{ selected?: boolean } & { [key: string]: any }>;\n};\n\nexport type TabbedGroupPickerQuickSelect = {\n label: string;\n selected?: boolean;\n childTypeName?: string;\n children?: (({ selected?: boolean } & { [key: string]: any }) | number)[];\n all?: boolean;\n};\n\nexport type QuickSelectConfig = { label: string; items: TabbedGroupPickerQuickSelect[] };\n\nexport type TabbedGroupPickerButtonConfig = {\n theme: string;\n side: string;\n icon: string;\n label: string;\n size?: string;\n};\n\n@Component({\n selector: 'novo-tabbed-group-picker',\n templateUrl: './TabbedGroupPicker.html',\n styleUrls: ['./TabbedGroupPicker.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NOVO_OPTION_PARENT_COMPONENT, useExisting: NovoTabbedGroupPickerElement }],\n standalone: false\n})\nexport class NovoTabbedGroupPickerElement implements OnDestroy, OnInit {\n @ViewChild('tabbedGroupPickerVirtualScrollViewport')\n private scrollableInstance: CdkScrollable;\n @ViewChild('inputElement')\n private inputElement: ElementRef<HTMLInputElement>;\n @ViewChild('dropdown')\n public dropdown: NovoDropdownElement;\n\n multiple = true;\n\n @Input() buttonConfig: TabbedGroupPickerButtonConfig;\n @Input() tabs: TabbedGroupPickerTab[];\n @Input() quickSelectConfig: QuickSelectConfig;\n @Input() showFooter = false;\n\n // In activation mode, no checkboxes are displayed, and only the selectionActivated event occurs.\n @BooleanInput()\n @Input() selectionEnabled = true;\n\n @Output() activation = new EventEmitter<any>();\n @Output() selectionChange = new EventEmitter<TabbedGroupPickerTab[]>();\n @Output() applyChange: EventEmitter<any> = new EventEmitter<any>();\n @Output() cancelChange: EventEmitter<any> = new EventEmitter<any>();\n\n displayTabs: TabbedGroupPickerTab[];\n displayTabIndex: number = 0;\n\n filterText: BehaviorSubject<string> = new BehaviorSubject('');\n filterTextSubscription: Subscription;\n\n loading = true;\n showClearAll: boolean = false;\n\n appliedState: TabbedGroupPickerTab[];\n\n // Initial height based on 13 px font rendered in chrome. Actual height retrieved onDropdownToggled.\n scrollViewportHeight: number = 351;\n virtualScrollItemSize: number = 39;\n\n constructor(public labelService: NovoLabelService, private ref: ChangeDetectorRef) {}\n\n get displayTab(): TabbedGroupPickerTab {\n return this.displayTabs[this.displayTabIndex];\n }\n set displayTab(tab: TabbedGroupPickerTab) {\n this.displayTabIndex = this.tabs.map(({ typeName }) => typeName).indexOf(tab.typeName);\n }\n\n get minBufferPx() {\n return this.scrollViewportHeight; // render at least 2x the number of items visible (viewport + min buffer)\n }\n\n get maxBufferPx() {\n return 2 * this.scrollViewportHeight; // render at most 3x the number of items visible (viewport + max buffer)\n }\n\n ngOnInit(): void {\n this.loadValues();\n this.loading = false;\n this.filterTextSubscription = this.filterText.pipe(debounceTime(300)).subscribe({\n next: this.filter,\n });\n }\n\n ngOnDestroy(): void {\n if (this.filterTextSubscription) {\n this.filterTextSubscription.unsubscribe();\n }\n }\n\n loadValues() {\n this.setupDisplayData();\n this.createChildrenReferences();\n this.initializeDescendantSelection();\n this.updateParentsAndQuickSelect();\n this.updateClearAll();\n }\n\n changeTab(tab: TabbedGroupPickerTab) {\n this.displayTab = tab;\n if (this.scrollableInstance) {\n this.scrollableInstance.scrollTo({ behavior: 'auto', top: 0 });\n }\n }\n\n getPixelHeight(element: HTMLElement) {\n return Number(getComputedStyle(element, '').height.match(/(\\d+(\\.\\d+)?)px$/)[1]);\n }\n\n setupDisplayData(): void {\n // shallow copy here so that reassigning displayTabs[i].data doesn't mutate tabs[i].data\n // but both data values point to the same items\n this.displayTabs = this.tabs.map((tab) => ({ ...tab }));\n this.displayTab = this.tabs[0];\n this.updateAppliedState();\n }\n\n // Replace each parent's child object with a reference to the child to avoid\n // a child lookup for selected status; linking references allows M x N\n // time complexity instead of M x N^2\n createChildrenReferences(): void {\n this.tabs.forEach((tab) => {\n // would rather filter but TypeScript still wants a type narrowing here\n if ('childTypeName' in tab) {\n const childTab = this.tabs.find(({ typeName }) => typeName === tab.childTypeName);\n const compareFunction = this.makeCompareFunction(childTab.valueField);\n const warnFunction = this.makeWarningFunction(tab.typeName, childTab.typeName, childTab.valueField);\n const sortedChildren = childTab.data.slice().sort(compareFunction);\n\n tab.data\n .filter(({ children }) => children?.length)\n .forEach((parent: { children?: any[] }) =>\n this.replaceChildrenWithReferences(parent as ParentOption, sortedChildren, compareFunction, warnFunction),\n );\n }\n });\n if (this.quickSelectConfig) {\n this.quickSelectConfig.items\n .filter((parent) => 'all' in parent)\n .forEach((parent) => {\n parent.children = this.tabs.find(({ typeName }) => parent.childTypeName === typeName).data;\n });\n\n this.quickSelectConfig.items\n .filter((parent) => !('all' in parent))\n .forEach((parent) => {\n const childTab = this.tabs.find(({ typeName }) => typeName === parent.childTypeName);\n const compareFunction = this.makeCompareFunction(childTab.valueField);\n const warnFunction = this.makeWarningFunction(parent.label, childTab.typeName, childTab.valueField);\n const sortedChildren = childTab.data.slice().sort(compareFunction);\n\n this.replaceChildrenWithReferences(parent as ParentOption, sortedChildren, compareFunction, warnFunction);\n });\n }\n }\n\n makeCompareFunction<T>(key: string): (a: T | { [key: string]: T }, b: T | { [key: string]: T }) => 1 | -1 | 0 | undefined {\n return (a: T | { [key: string]: T }, b: T | { [key: string]: T }) => {\n const aValue: T = (a && a[key]) || a;\n const bValue: T = (b && b[key]) || b;\n\n if (aValue < bValue) {\n return -1;\n } else if (aValue > bValue) {\n return 1;\n } else if (aValue === bValue) {\n return 0;\n } else {\n return undefined;\n }\n };\n }\n\n replaceChildrenWithReferences(\n parent: { children: any[] },\n sortedData: ChildTab['data'],\n compareFunction: (a, b) => 1 | -1 | 0,\n warnFunction: (child) => void,\n ): void {\n parent.children = parent.children\n .map((child) => binarySearch(child, sortedData, compareFunction) || warnFunction(child))\n .filter(Boolean); // since map can return undefined, remove undefined elements\n }\n\n makeWarningFunction(parentLabel: string, childLabel: string, childValueField): (child) => void {\n return (child) => {\n const childValue = child[childValueField] || child;\n console.warn(`No ${childLabel} found with value ${childValue} for parent ${parentLabel}`);\n };\n }\n\n onDropdownToggle(event) {\n this.filterText.next('');\n this.inputElement.nativeElement?.focus();\n if (event) {\n this.scrollViewportHeight = this.getPixelHeight(this.scrollableInstance.getElementRef().nativeElement);\n this.virtualScrollItemSize = this.getPixelHeight(this.scrollableInstance.getElementRef().nativeElement.querySelector('novo-option'));\n // Emit a fake scroll event so the rendered items update\n this.scrollableInstance.getElementRef().nativeElement.dispatchEvent(new Event('scroll'));\n }\n }\n\n activateItem(item: any, tab?: TabbedGroupPickerTab): void {\n if (this.selectionEnabled) {\n item.selected = !item.selected;\n this.onItemToggled(item);\n }\n this.activation.emit({ ...item, scope: tab?.typeName || 'quickselect' });\n }\n\n onItemToggled(item: Option) {\n if (Array.isArray(item.children)) {\n this.updateDescendants(item.selected, item.children);\n }\n this.updateParentsAndQuickSelect();\n this.updateClearAll(item.selected);\n this.emitSelectedValues();\n this.ref.markForCheck();\n }\n\n initializeDescendantSelection() {\n this.tabs.forEach((tab) => {\n if ('childTypeName' in tab && tab.data?.length) {\n tab.data.forEach((parent) => {\n if (parent.selected && parent.children?.length) {\n parent.children.forEach((child) => {\n child.selected = true;\n });\n }\n });\n }\n });\n }\n\n updateDescendants(parentIsSelected: boolean, children: Option[]): void {\n children.forEach((item) => {\n if (parentIsSelected) {\n item.selected = true;\n } else {\n delete item.selected;\n }\n if (Array.isArray(item.children)) {\n this.updateDescendants(item.selected, item.children);\n }\n });\n }\n\n updateClearAll(itemWasJustSelected?: boolean) {\n if (!this.selectionEnabled) {\n this.showClearAll = false;\n } else {\n this.showClearAll = itemWasJustSelected\n ? true\n : this.tabs.some((tab) => {\n if ((tab as ParentTab).childTypeName) {\n return tab.data.some(({ selected, indeterminate }) => selected || indeterminate);\n } else {\n return tab.data.some(({ selected }) => selected);\n }\n });\n }\n }\n\n updateParentsAndQuickSelect(): void {\n // mutate here to avoid dereferencing the objects in displayTabs\n this.tabs\n .filter((tab) => 'childTypeName' in tab && !!tab.childTypeName)\n .forEach((tab) => {\n const parents = tab.data.filter(({ children }: { children?: any[] }) => children?.length);\n\n parents.forEach((parent: ParentOption) => {\n ['indeterminate', 'selected'].forEach((selectedStateOption) => delete parent[selectedStateOption]);\n\n const selectedState = this.getSelectedState(parent.children);\n if (selectedState) {\n parent[selectedState] = true;\n }\n });\n });\n\n if (this.quickSelectConfig) {\n this.quickSelectConfig.items.forEach((quickSelect) => {\n delete quickSelect.selected;\n const selectedState = this.getSelectedState(quickSelect.children as (Option)[]);\n if (selectedState) {\n quickSelect[selectedState] = true;\n }\n });\n }\n }\n\n getSelectedState = (childArray: Option[]): 'selected' | 'indeterminate' | undefined => {\n const numberOfSelectedItems = childArray.filter(({ selected }) => selected).length;\n if (!numberOfSelectedItems) {\n return undefined;\n }\n return numberOfSelectedItems === childArray.length ? 'selected' : 'indeterminate';\n };\n\n getSelectedValues(): TabbedGroupPickerTab[] {\n return this.tabs.map((tab) => ({\n ...tab,\n data: tab.data.filter(({ selected }) => selected),\n }));\n }\n\n emitSelectedValues() {\n this.selectionChange.emit(this.getSelectedValues());\n }\n\n updateAppliedState() {\n this.appliedState = Helpers.deepClone(this.displayTabs);\n }\n\n apply() {\n this.updateAppliedState();\n this.applyChange.emit(this.getSelectedValues());\n this.dropdown.closePanel();\n }\n\n cancel() {\n this.revertState();\n this.cancelChange.emit(this.tabs);\n this.ref.markForCheck();\n this.dropdown.closePanel();\n }\n\n revertState() {\n this.tabs = Helpers.deepClone(this.appliedState);\n this.loadValues();\n }\n\n deselectEverything(event) {\n Helpers.swallowEvent(event);\n this.showClearAll = false;\n if (this.quickSelectConfig) {\n this.quickSelectConfig.items.forEach((quickSelect) => {\n delete quickSelect.selected;\n });\n }\n this.tabs.forEach((tab) => {\n if ((tab as ParentTab).childTypeName) {\n tab.data.forEach((item) => {\n delete item.selected;\n delete item.indeterminate;\n item.children.forEach((child) => delete child.selected);\n });\n } else {\n (tab as ChildTab).data.forEach((item) => delete item.selected);\n }\n });\n this.emitSelectedValues();\n this.ref.markForCheck();\n }\n\n onClearFilter(event) {\n Helpers.swallowEvent(event);\n this.filterText.next('');\n }\n\n onFilter(event: { target: { value: string } }) {\n this.filterText.next(event.target.value);\n }\n\n filter = (searchTerm: string) => {\n this.displayTabs.forEach(\n (displayTab, i) =>\n (displayTab.data = this.tabs[i].data.filter((item) =>\n item[displayTab.labelField].toLowerCase().includes(searchTerm.toLowerCase()) ||\n item[displayTab.valueField]?.toString().toLowerCase().includes(searchTerm.toLowerCase()),\n )),\n );\n this.ref.markForCheck();\n };\n}\n","<novo-dropdown (toggled)=\"onDropdownToggle($event)\" multiple #dropdown>\n <novo-button\n class=\"tabbed-group-picker-button\"\n [theme]=\"buttonConfig.theme\"\n [side]=\"buttonConfig.side\"\n [size]=\"buttonConfig.size\"\n [icon]=\"buttonConfig.icon\"\n [loading]=\"loading\">\n <ng-content></ng-content>\n <div class=\"tabbed-group-picker-button-label\">{{ buttonConfig.label }}</div>\n </novo-button>\n <div class=\"tabbed-group-picker-search\" data-automation-id=\"tabbed-group-picker-search\" (keydown)=\"dropdown._handleKeydown($event)\">\n <input #inputElement type=\"text\" [placeholder]=\"labelService.search\" [value]=\"filterText | async\" (input)=\"onFilter($event)\" />\n <i class=\"bhi-search\" *ngIf=\"!(filterText | async)\"></i>\n <i class=\"bhi-times\" *ngIf=\"(filterText | async)\" (click)=\"onClearFilter($event)\" (keydown.space)=\"onClearFilter($event)\"></i>\n </div>\n <div class=\"tabbed-group-picker-column-container\" (keydown)=\"dropdown._handleKeydown($event)\">\n <div class=\"tabbed-group-picker-column left\">\n <novo-nav theme=\"white\" direction=\"vertical\">\n <novo-tab *ngFor=\"let tab of displayTabs\" [attr.data-automation-id]=\"tab.typeName\"\n (activeChange)=\"changeTab(tab)\">\n <span>{{ tab.typeLabel }} ({{ tab.data.length }})</span><i class=\"bhi-next\"></i>\n </novo-tab>\n </novo-nav>\n <novo-button *ngIf=\"showClearAll && !showFooter\" class=\"clear-all-button\" theme=\"dialogue\" icon=\"times\" side=\"right\"\n color=\"grapefruit\" (click)=\"deselectEverything($event)\" (keydown.space)=\"deselectEverything($event)\">{{ labelService.clear }}</novo-button>\n </div>\n <div class=\"tabbed-group-picker-column right\">\n <div class=\"quick-select\" *ngIf=\"quickSelectConfig && !(filterText | async)\">\n <novo-optgroup class=\"quick-select-list\" [label]=\"quickSelectConfig.label\">\n <novo-option\n class=\"quick-select-item\"\n *ngFor=\"let quickSelect of quickSelectConfig.items\"\n [attr.data-automation-id]=\"quickSelect.label\"\n [allowSelection]=\"selectionEnabled\"\n [selected]=\"quickSelect.selected\"\n (click)=\"activateItem(quickSelect)\"\n (keydown.space)=\"activateItem(quickSelect)\"\n novoInert>\n {{quickSelect.label}}\n </novo-option>\n </novo-optgroup>\n </div>\n <novo-optgroup *ngIf=\"displayTab.data.length\">\n <cdk-virtual-scroll-viewport\n [itemSize]=\"virtualScrollItemSize\"\n [maxBufferPx]=\"maxBufferPx\"\n [minBufferPx]=\"minBufferPx\"\n #tabbedGroupPickerVirtualScrollViewport>\n <novo-option\n *cdkVirtualFor=\"let item of displayTab.data\"\n [attr.data-automation-id]=\"item[displayTab.labelField]\"\n [attr.data-automation-value]=\"item[displayTab.valueField]\"\n [allowSelection]=\"selectionEnabled\"\n [selected]=\"item.selected\"\n (click)=\"activateItem(item, displayTab)\"\n (keydown.space)=\"activateItem(item, displayTab)\"\n novoInert>\n {{item[displayTab.labelField]}}\n </novo-option>\n </cdk-virtual-scroll-viewport>\n </novo-optgroup>\n <div class=\"tabbed-group-picker-empty-item\" *ngIf=\"!displayTab.data.length && (filterText | async)\">\n <i class=\"{{ displayTab.icon || 'bhi-search' }}\"></i>\n <div class=\"empty-item-main-message\">{{ labelService.tabbedGroupPickerEmpty }}</div>\n <div class=\"empty-item-sub-message\">{{ labelService.tabbedGroupClearSuggestion(displayTab.typeLabel) }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"footer\" *ngIf=\"showFooter\">\n <div class=\"save-cancel-button-container\">\n <novo-button\n class=\"clear-all-button\"\n *ngIf=\"showClearAll\"\n theme=\"dialogue\"\n icon=\"times\"\n side=\"right\"\n color=\"grapefruit\"\n (click)=\"deselectEverything($event)\">{{ labelService.clear }}</novo-button>\n </div>\n <div class=\"save-cancel-button-container\">\n <novo-button\n class=\"cancel-button\"\n marginRight=\"1rem\"\n theme=\"dialogue\"\n (click)=\"cancel()\">{{ labelService.cancel }}</novo-button>\n <novo-button\n class=\"save-button\"\n theme=\"primary\"\n color=\"primary\"\n (click)=\"apply()\">{{ labelService.apply }}</novo-button>\n </div>\n </div>\n</novo-dropdown>","// NG2\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n// APP\nimport { NovoLabelService } from 'novo-elements/services';\nimport { NovoButtonModule } from 'novo-elements/elements/button';\nimport { NovoCheckboxModule } from 'novo-elements/elements/checkbox';\nimport { NovoOptionModule } from 'novo-elements/elements/common';\nimport { NovoDropdownModule } from 'novo-elements/elements/dropdown';\nimport { NovoFormExtrasModule } from 'novo-elements/elements/form';\nimport { NovoListModule } from 'novo-elements/elements/list';\nimport { NovoTabModule } from 'novo-elements/elements/tabs';\nimport { NovoTabbedGroupPickerElement } from './TabbedGroupPicker';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ScrollingModule,\n NovoTabModule,\n NovoListModule,\n NovoFormExtrasModule,\n NovoButtonModule,\n NovoDropdownModule,\n NovoOptionModule,\n NovoCheckboxModule,\n ],\n providers: [NovoLabelService],\n declarations: [NovoTabbedGroupPickerElement],\n exports: [NovoTabbedGroupPickerElement],\n})\nexport class NovoTabbedGroupPickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"novo-elements-elements-tabbed-group-picker.mjs","sources":["../../../projects/novo-elements/src/elements/tabbed-group-picker/TabbedGroupPicker.ts","../../../projects/novo-elements/src/elements/tabbed-group-picker/TabbedGroupPicker.html","../../../projects/novo-elements/src/elements/tabbed-group-picker/TabbedGroupPicker.module.ts","../../../projects/novo-elements/src/elements/tabbed-group-picker/novo-elements-elements-tabbed-group-picker.ts"],"sourcesContent":["import { CdkScrollable } from '@angular/cdk/scrolling';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { binarySearch, BooleanInput, Helpers } from 'novo-elements/utils';\nimport { NOVO_OPTION_PARENT_COMPONENT } from 'novo-elements/elements/common';\nimport { NovoDropdownElement } from 'novo-elements/elements/dropdown';\n\nexport type TabbedGroupPickerTab = {\n typeName: string;\n typeLabel: string;\n valueField: string;\n labelField: string;\n scrollOffset?: number;\n icon?: string;\n} & (ParentTab | ChildTab);\n\nexport type ParentTab = {\n childTypeName: string;\n data: Array<ParentOption>;\n};\n\ntype BaseOption = {\n selected?: boolean;\n indeterminate?: boolean;\n} & { [key: string]: any };\n\ntype ParentOption = BaseOption & {\n children: Option[];\n};\n\ntype Option = BaseOption | ParentOption;\n\nexport type ChildTab = {\n data: Array<{ selected?: boolean } & { [key: string]: any }>;\n};\n\nexport type TabbedGroupPickerQuickSelect = {\n label: string;\n selected?: boolean;\n childTypeName?: string;\n children?: (({ selected?: boolean } & { [key: string]: any }) | number)[];\n all?: boolean;\n};\n\nexport type QuickSelectConfig = { label: string; items: TabbedGroupPickerQuickSelect[] };\n\nexport type TabbedGroupPickerButtonConfig = {\n theme: string;\n side: string;\n icon: string;\n label: string;\n size?: string;\n};\n\n@Component({\n selector: 'novo-tabbed-group-picker',\n templateUrl: './TabbedGroupPicker.html',\n styleUrls: ['./TabbedGroupPicker.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NOVO_OPTION_PARENT_COMPONENT, useExisting: NovoTabbedGroupPickerElement }],\n standalone: false\n})\nexport class NovoTabbedGroupPickerElement implements OnDestroy, OnInit {\n @ViewChild('tabbedGroupPickerVirtualScrollViewport')\n private scrollableInstance: CdkScrollable;\n @ViewChild('inputElement')\n private inputElement: ElementRef<HTMLInputElement>;\n @ViewChild('dropdown')\n public dropdown: NovoDropdownElement;\n\n multiple = true;\n\n @Input() buttonConfig: TabbedGroupPickerButtonConfig;\n @Input() tabs: TabbedGroupPickerTab[];\n @Input() quickSelectConfig: QuickSelectConfig;\n @Input() showFooter = false;\n\n // In activation mode, no checkboxes are displayed, and only the selectionActivated event occurs.\n @BooleanInput()\n @Input() selectionEnabled = true;\n\n @Output() activation = new EventEmitter<any>();\n @Output() selectionChange = new EventEmitter<TabbedGroupPickerTab[]>();\n @Output() applyChange: EventEmitter<any> = new EventEmitter<any>();\n @Output() cancelChange: EventEmitter<any> = new EventEmitter<any>();\n\n displayTabs: TabbedGroupPickerTab[];\n displayTabIndex: number = 0;\n\n filterText: BehaviorSubject<string> = new BehaviorSubject('');\n filterTextSubscription: Subscription;\n\n loading = true;\n showClearAll: boolean = false;\n\n appliedState: TabbedGroupPickerTab[];\n\n // Initial height based on 13 px font rendered in chrome. Actual height retrieved onDropdownToggled.\n scrollViewportHeight: number = 351;\n virtualScrollItemSize: number = 39;\n\n constructor(public labelService: NovoLabelService, private ref: ChangeDetectorRef) {}\n\n get displayTab(): TabbedGroupPickerTab {\n return this.displayTabs[this.displayTabIndex];\n }\n set displayTab(tab: TabbedGroupPickerTab) {\n this.displayTabIndex = this.tabs.map(({ typeName }) => typeName).indexOf(tab.typeName);\n }\n\n get minBufferPx() {\n return this.scrollViewportHeight; // render at least 2x the number of items visible (viewport + min buffer)\n }\n\n get maxBufferPx() {\n return 2 * this.scrollViewportHeight; // render at most 3x the number of items visible (viewport + max buffer)\n }\n\n ngOnInit(): void {\n this.loadValues();\n this.loading = false;\n this.filterTextSubscription = this.filterText.pipe(debounceTime(300)).subscribe({\n next: this.filter,\n });\n }\n\n ngOnDestroy(): void {\n if (this.filterTextSubscription) {\n this.filterTextSubscription.unsubscribe();\n }\n }\n\n loadValues() {\n this.setupDisplayData();\n this.createChildrenReferences();\n this.initializeDescendantSelection();\n this.updateParentsAndQuickSelect();\n this.updateClearAll();\n }\n\n changeTab(tab: TabbedGroupPickerTab) {\n this.displayTab = tab;\n if (this.scrollableInstance) {\n this.scrollableInstance.scrollTo({ behavior: 'auto', top: 0 });\n }\n }\n\n getPixelHeight(element: HTMLElement) {\n return Number(getComputedStyle(element, '').height.match(/(\\d+(\\.\\d+)?)px$/)[1]);\n }\n\n setupDisplayData(): void {\n // shallow copy here so that reassigning displayTabs[i].data doesn't mutate tabs[i].data\n // but both data values point to the same items\n this.displayTabs = this.tabs.map((tab) => ({ ...tab }));\n this.displayTab = this.tabs[0];\n this.updateAppliedState();\n }\n\n // Replace each parent's child object with a reference to the child to avoid\n // a child lookup for selected status; linking references allows M x N\n // time complexity instead of M x N^2\n createChildrenReferences(): void {\n this.tabs.forEach((tab) => {\n // would rather filter but TypeScript still wants a type narrowing here\n if ('childTypeName' in tab) {\n const childTab = this.tabs.find(({ typeName }) => typeName === tab.childTypeName);\n const compareFunction = this.makeCompareFunction(childTab.valueField);\n const warnFunction = this.makeWarningFunction(tab.typeName, childTab.typeName, childTab.valueField);\n const sortedChildren = childTab.data.slice().sort(compareFunction);\n\n tab.data\n .filter(({ children }) => children?.length)\n .forEach((parent: { children?: any[] }) =>\n this.replaceChildrenWithReferences(parent as ParentOption, sortedChildren, compareFunction, warnFunction),\n );\n }\n });\n if (this.quickSelectConfig) {\n this.quickSelectConfig.items\n .filter((parent) => 'all' in parent)\n .forEach((parent) => {\n parent.children = this.tabs.find(({ typeName }) => parent.childTypeName === typeName).data;\n });\n\n this.quickSelectConfig.items\n .filter((parent) => !('all' in parent))\n .forEach((parent) => {\n const childTab = this.tabs.find(({ typeName }) => typeName === parent.childTypeName);\n const compareFunction = this.makeCompareFunction(childTab.valueField);\n const warnFunction = this.makeWarningFunction(parent.label, childTab.typeName, childTab.valueField);\n const sortedChildren = childTab.data.slice().sort(compareFunction);\n\n this.replaceChildrenWithReferences(parent as ParentOption, sortedChildren, compareFunction, warnFunction);\n });\n }\n }\n\n makeCompareFunction<T>(key: string): (a: T | { [key: string]: T }, b: T | { [key: string]: T }) => 1 | -1 | 0 | undefined {\n return (a: T | { [key: string]: T }, b: T | { [key: string]: T }) => {\n const aValue: T = (a && a[key]) || a;\n const bValue: T = (b && b[key]) || b;\n\n if (aValue < bValue) {\n return -1;\n } else if (aValue > bValue) {\n return 1;\n } else if (aValue === bValue) {\n return 0;\n } else {\n return undefined;\n }\n };\n }\n\n replaceChildrenWithReferences(\n parent: { children: any[] },\n sortedData: ChildTab['data'],\n compareFunction: (a, b) => 1 | -1 | 0,\n warnFunction: (child) => void,\n ): void {\n if (Array.isArray(parent?.children)) {\n parent.children = parent.children\n .map((child) => binarySearch(child, sortedData, compareFunction) || warnFunction(child))\n .filter(Boolean); // since map can return undefined, remove undefined elements\n }\n }\n\n makeWarningFunction(parentLabel: string, childLabel: string, childValueField): (child) => void {\n return (child) => {\n const childValue = child[childValueField] || child;\n console.warn(`No ${childLabel} found with value ${childValue} for parent ${parentLabel}`);\n };\n }\n\n onDropdownToggle(event) {\n this.filterText.next('');\n this.inputElement.nativeElement?.focus();\n if (event) {\n this.scrollViewportHeight = this.getPixelHeight(this.scrollableInstance.getElementRef().nativeElement);\n this.virtualScrollItemSize = this.getPixelHeight(this.scrollableInstance.getElementRef().nativeElement.querySelector('novo-option'));\n // Emit a fake scroll event so the rendered items update\n this.scrollableInstance.getElementRef().nativeElement.dispatchEvent(new Event('scroll'));\n }\n }\n\n activateItem(item: any, tab?: TabbedGroupPickerTab): void {\n if (this.selectionEnabled) {\n item.selected = !item.selected;\n this.onItemToggled(item);\n }\n this.activation.emit({ ...item, scope: tab?.typeName || 'quickselect' });\n }\n\n onItemToggled(item: Option) {\n if (Array.isArray(item.children)) {\n this.updateDescendants(item.selected, item.children);\n }\n this.updateParentsAndQuickSelect();\n this.updateClearAll(item.selected);\n this.emitSelectedValues();\n this.ref.markForCheck();\n }\n\n initializeDescendantSelection() {\n this.tabs.forEach((tab) => {\n if ('childTypeName' in tab && tab.data?.length) {\n tab.data.forEach((parent) => {\n if (parent.selected && parent.children?.length) {\n parent.children.forEach((child) => {\n child.selected = true;\n });\n }\n });\n }\n });\n }\n\n updateDescendants(parentIsSelected: boolean, children: Option[]): void {\n children.forEach((item) => {\n if (parentIsSelected) {\n item.selected = true;\n } else {\n delete item.selected;\n }\n if (Array.isArray(item.children)) {\n this.updateDescendants(item.selected, item.children);\n }\n });\n }\n\n updateClearAll(itemWasJustSelected?: boolean) {\n if (!this.selectionEnabled) {\n this.showClearAll = false;\n } else {\n this.showClearAll = itemWasJustSelected\n ? true\n : this.tabs.some((tab) => {\n if ((tab as ParentTab).childTypeName) {\n return tab.data.some(({ selected, indeterminate }) => selected || indeterminate);\n } else {\n return tab.data.some(({ selected }) => selected);\n }\n });\n }\n }\n\n updateParentsAndQuickSelect(): void {\n // mutate here to avoid dereferencing the objects in displayTabs\n this.tabs\n .filter((tab) => 'childTypeName' in tab && !!tab.childTypeName)\n .forEach((tab) => {\n const parents = tab.data.filter(({ children }: { children?: any[] }) => children?.length);\n\n parents.forEach((parent: ParentOption) => {\n ['indeterminate', 'selected'].forEach((selectedStateOption) => delete parent[selectedStateOption]);\n\n const selectedState = this.getSelectedState(parent.children);\n if (selectedState) {\n parent[selectedState] = true;\n }\n });\n });\n\n if (this.quickSelectConfig) {\n this.quickSelectConfig.items.forEach((quickSelect) => {\n delete quickSelect.selected;\n const selectedState = this.getSelectedState(quickSelect.children as (Option)[]);\n if (selectedState) {\n quickSelect[selectedState] = true;\n }\n });\n }\n }\n\n getSelectedState = (childArray: Option[]): 'selected' | 'indeterminate' | undefined => {\n if (!Array.isArray(childArray)) {\n return undefined;\n }\n const numberOfSelectedItems = childArray.filter(({ selected }) => selected).length;\n if (!numberOfSelectedItems) {\n return undefined;\n }\n return numberOfSelectedItems === childArray.length ? 'selected' : 'indeterminate';\n };\n\n getSelectedValues(): TabbedGroupPickerTab[] {\n return this.tabs.map((tab) => ({\n ...tab,\n data: tab.data.filter(({ selected }) => selected),\n }));\n }\n\n emitSelectedValues() {\n this.selectionChange.emit(this.getSelectedValues());\n }\n\n updateAppliedState() {\n this.appliedState = Helpers.deepClone(this.displayTabs);\n }\n\n apply() {\n this.updateAppliedState();\n this.applyChange.emit(this.getSelectedValues());\n this.dropdown.closePanel();\n }\n\n cancel() {\n this.revertState();\n this.cancelChange.emit(this.tabs);\n this.ref.markForCheck();\n this.dropdown.closePanel();\n }\n\n revertState() {\n this.tabs = Helpers.deepClone(this.appliedState);\n this.loadValues();\n }\n\n deselectEverything(event) {\n Helpers.swallowEvent(event);\n this.showClearAll = false;\n if (this.quickSelectConfig) {\n this.quickSelectConfig.items.forEach((quickSelect) => {\n delete quickSelect.selected;\n });\n }\n this.tabs.forEach((tab) => {\n if ((tab as ParentTab).childTypeName) {\n tab.data.forEach((item) => {\n delete item.selected;\n delete item.indeterminate;\n item.children.forEach((child) => delete child.selected);\n });\n } else {\n (tab as ChildTab).data.forEach((item) => delete item.selected);\n }\n });\n this.emitSelectedValues();\n this.ref.markForCheck();\n }\n\n onClearFilter(event) {\n Helpers.swallowEvent(event);\n this.filterText.next('');\n }\n\n onFilter(event: { target: { value: string } }) {\n this.filterText.next(event.target.value);\n }\n\n filter = (searchTerm: string) => {\n this.displayTabs.forEach(\n (displayTab, i) =>\n (displayTab.data = this.tabs[i].data.filter((item) =>\n item[displayTab.labelField].toLowerCase().includes(searchTerm.toLowerCase()) ||\n item[displayTab.valueField]?.toString().toLowerCase().includes(searchTerm.toLowerCase()),\n )),\n );\n this.ref.markForCheck();\n };\n}\n","<novo-dropdown (toggled)=\"onDropdownToggle($event)\" multiple #dropdown>\n <novo-button\n class=\"tabbed-group-picker-button\"\n [theme]=\"buttonConfig.theme\"\n [side]=\"buttonConfig.side\"\n [size]=\"buttonConfig.size\"\n [icon]=\"buttonConfig.icon\"\n [loading]=\"loading\">\n <ng-content></ng-content>\n <div class=\"tabbed-group-picker-button-label\">{{ buttonConfig.label }}</div>\n </novo-button>\n <div class=\"tabbed-group-picker-search\" data-automation-id=\"tabbed-group-picker-search\" (keydown)=\"dropdown._handleKeydown($event)\">\n <input #inputElement type=\"text\" [placeholder]=\"labelService.search\" [value]=\"filterText | async\" (input)=\"onFilter($event)\" />\n <i class=\"bhi-search\" *ngIf=\"!(filterText | async)\"></i>\n <i class=\"bhi-times\" *ngIf=\"(filterText | async)\" (click)=\"onClearFilter($event)\" (keydown.space)=\"onClearFilter($event)\"></i>\n </div>\n <div class=\"tabbed-group-picker-column-container\" (keydown)=\"dropdown._handleKeydown($event)\">\n <div class=\"tabbed-group-picker-column left\">\n <novo-nav theme=\"white\" direction=\"vertical\">\n <novo-tab *ngFor=\"let tab of displayTabs\" [attr.data-automation-id]=\"tab.typeName\"\n (activeChange)=\"changeTab(tab)\">\n <span>{{ tab.typeLabel }} ({{ tab.data.length }})</span><i class=\"bhi-next\"></i>\n </novo-tab>\n </novo-nav>\n <novo-button *ngIf=\"showClearAll && !showFooter\" class=\"clear-all-button\" theme=\"dialogue\" icon=\"times\" side=\"right\"\n color=\"grapefruit\" (click)=\"deselectEverything($event)\" (keydown.space)=\"deselectEverything($event)\">{{ labelService.clear }}</novo-button>\n </div>\n <div class=\"tabbed-group-picker-column right\">\n <div class=\"quick-select\" *ngIf=\"quickSelectConfig && !(filterText | async)\">\n <novo-optgroup class=\"quick-select-list\" [label]=\"quickSelectConfig.label\">\n <novo-option\n class=\"quick-select-item\"\n *ngFor=\"let quickSelect of quickSelectConfig.items\"\n [attr.data-automation-id]=\"quickSelect.label\"\n [allowSelection]=\"selectionEnabled\"\n [selected]=\"quickSelect.selected\"\n (click)=\"activateItem(quickSelect)\"\n (keydown.space)=\"activateItem(quickSelect)\"\n novoInert>\n {{quickSelect.label}}\n </novo-option>\n </novo-optgroup>\n </div>\n <novo-optgroup *ngIf=\"displayTab.data.length\">\n <cdk-virtual-scroll-viewport\n [itemSize]=\"virtualScrollItemSize\"\n [maxBufferPx]=\"maxBufferPx\"\n [minBufferPx]=\"minBufferPx\"\n #tabbedGroupPickerVirtualScrollViewport>\n <novo-option\n *cdkVirtualFor=\"let item of displayTab.data\"\n [attr.data-automation-id]=\"item[displayTab.labelField]\"\n [attr.data-automation-value]=\"item[displayTab.valueField]\"\n [allowSelection]=\"selectionEnabled\"\n [selected]=\"item.selected\"\n (click)=\"activateItem(item, displayTab)\"\n (keydown.space)=\"activateItem(item, displayTab)\"\n novoInert>\n {{item[displayTab.labelField]}}\n </novo-option>\n </cdk-virtual-scroll-viewport>\n </novo-optgroup>\n <div class=\"tabbed-group-picker-empty-item\" *ngIf=\"!displayTab.data.length && (filterText | async)\">\n <i class=\"{{ displayTab.icon || 'bhi-search' }}\"></i>\n <div class=\"empty-item-main-message\">{{ labelService.tabbedGroupPickerEmpty }}</div>\n <div class=\"empty-item-sub-message\">{{ labelService.tabbedGroupClearSuggestion(displayTab.typeLabel) }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"footer\" *ngIf=\"showFooter\">\n <div class=\"save-cancel-button-container\">\n <novo-button\n class=\"clear-all-button\"\n *ngIf=\"showClearAll\"\n theme=\"dialogue\"\n icon=\"times\"\n side=\"right\"\n color=\"grapefruit\"\n (click)=\"deselectEverything($event)\">{{ labelService.clear }}</novo-button>\n </div>\n <div class=\"save-cancel-button-container\">\n <novo-button\n class=\"cancel-button\"\n marginRight=\"1rem\"\n theme=\"dialogue\"\n (click)=\"cancel()\">{{ labelService.cancel }}</novo-button>\n <novo-button\n class=\"save-button\"\n theme=\"primary\"\n color=\"primary\"\n (click)=\"apply()\">{{ labelService.apply }}</novo-button>\n </div>\n </div>\n</novo-dropdown>","// NG2\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n// APP\nimport { NovoLabelService } from 'novo-elements/services';\nimport { NovoButtonModule } from 'novo-elements/elements/button';\nimport { NovoCheckboxModule } from 'novo-elements/elements/checkbox';\nimport { NovoOptionModule } from 'novo-elements/elements/common';\nimport { NovoDropdownModule } from 'novo-elements/elements/dropdown';\nimport { NovoFormExtrasModule } from 'novo-elements/elements/form';\nimport { NovoListModule } from 'novo-elements/elements/list';\nimport { NovoTabModule } from 'novo-elements/elements/tabs';\nimport { NovoTabbedGroupPickerElement } from './TabbedGroupPicker';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ScrollingModule,\n NovoTabModule,\n NovoListModule,\n NovoFormExtrasModule,\n NovoButtonModule,\n NovoDropdownModule,\n NovoOptionModule,\n NovoCheckboxModule,\n ],\n providers: [NovoLabelService],\n declarations: [NovoTabbedGroupPickerElement],\n exports: [NovoTabbedGroupPickerElement],\n})\nexport class NovoTabbedGroupPickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}