ng-primitives 0.101.1 → 0.102.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.
- package/combobox/index.d.ts +2 -3
- package/dialog/index.d.ts +0 -3
- package/fesm2022/ng-primitives-combobox.mjs +40 -24
- package/fesm2022/ng-primitives-combobox.mjs.map +1 -1
- package/fesm2022/ng-primitives-dialog.mjs +1 -4
- package/fesm2022/ng-primitives-dialog.mjs.map +1 -1
- package/fesm2022/ng-primitives-popover.mjs +14 -2
- package/fesm2022/ng-primitives-popover.mjs.map +1 -1
- package/fesm2022/ng-primitives-portal.mjs +1 -1
- package/fesm2022/ng-primitives-portal.mjs.map +1 -1
- package/fesm2022/ng-primitives-select.mjs +34 -18
- package/fesm2022/ng-primitives-select.mjs.map +1 -1
- package/fesm2022/ng-primitives-slider.mjs +50 -19
- package/fesm2022/ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/ng-primitives-tooltip.mjs +14 -2
- package/fesm2022/ng-primitives-tooltip.mjs.map +1 -1
- package/package.json +1 -1
- package/popover/index.d.ts +13 -1
- package/portal/index.d.ts +2 -0
- package/select/index.d.ts +2 -3
- package/tooltip/index.d.ts +13 -1
package/combobox/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { OnDestroy, Provider, Injector } from '@angular/core';
|
|
3
3
|
import * as ng_primitives_state from 'ng-primitives/state';
|
|
4
4
|
import * as ng_primitives_combobox from 'ng-primitives/combobox';
|
|
5
5
|
import * as ng_primitives_internal from 'ng-primitives/internal';
|
|
@@ -84,7 +84,7 @@ declare class NgpComboboxInput {
|
|
|
84
84
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgpComboboxInput, "input[ngpComboboxInput]", ["ngpComboboxInput"], { "id": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
declare class NgpComboboxOption implements
|
|
87
|
+
declare class NgpComboboxOption implements OnDestroy {
|
|
88
88
|
/** Access the combobox state. */
|
|
89
89
|
protected readonly state: _angular_core.Signal<ng_primitives_state.State<ng_primitives_combobox.NgpCombobox>>;
|
|
90
90
|
/**
|
|
@@ -111,7 +111,6 @@ declare class NgpComboboxOption implements OnInit, OnDestroy {
|
|
|
111
111
|
/** Whether this option is selected. */
|
|
112
112
|
protected readonly selected: _angular_core.Signal<boolean>;
|
|
113
113
|
constructor();
|
|
114
|
-
ngOnInit(): void;
|
|
115
114
|
ngOnDestroy(): void;
|
|
116
115
|
/**
|
|
117
116
|
* Select the option.
|
package/dialog/index.d.ts
CHANGED
|
@@ -53,9 +53,6 @@ declare class NgpDialogDescription implements OnDestroy {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
declare class NgpDialogOverlay {
|
|
56
|
-
/** Access the global configuration */
|
|
57
|
-
private readonly config;
|
|
58
|
-
/** Access the dialog ref. */
|
|
59
56
|
private readonly dialogRef;
|
|
60
57
|
/**
|
|
61
58
|
* Whether the dialog should close on backdrop click.
|
|
@@ -289,9 +289,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
|
|
|
289
289
|
* @returns true if all regular options are selected
|
|
290
290
|
*/
|
|
291
291
|
function areAllOptionsSelected(options, selectedValues, compareWith) {
|
|
292
|
-
const regularOptions = options
|
|
292
|
+
const regularOptions = options
|
|
293
|
+
.map(opt => ({ opt, value: opt.value() }))
|
|
294
|
+
.filter(({ value }) => value !== 'all' && value !== undefined);
|
|
293
295
|
return (regularOptions.length > 0 &&
|
|
294
|
-
regularOptions.every(
|
|
296
|
+
regularOptions.every(({ value }) => selectedValues.some(val => compareWith(val, value))));
|
|
295
297
|
}
|
|
296
298
|
|
|
297
299
|
class NgpComboboxOption {
|
|
@@ -341,7 +343,8 @@ class NgpComboboxOption {
|
|
|
341
343
|
this.selected = computed(() => {
|
|
342
344
|
const value = this.value();
|
|
343
345
|
const stateValue = this.state().value();
|
|
344
|
-
|
|
346
|
+
// Only treat `undefined` as "no value" (allow '', 0, false).
|
|
347
|
+
if (value === undefined) {
|
|
345
348
|
return false;
|
|
346
349
|
}
|
|
347
350
|
// Handle select all functionality - only works in multiple selection mode
|
|
@@ -352,7 +355,8 @@ class NgpComboboxOption {
|
|
|
352
355
|
const selectedValues = Array.isArray(stateValue) ? stateValue : [];
|
|
353
356
|
return areAllOptionsSelected(this.state().options(), selectedValues, this.state().compareWith());
|
|
354
357
|
}
|
|
355
|
-
|
|
358
|
+
// Only treat `undefined` as "no selection" (allow '', 0, false).
|
|
359
|
+
if (stateValue === undefined) {
|
|
356
360
|
return false;
|
|
357
361
|
}
|
|
358
362
|
if (this.state().multiple()) {
|
|
@@ -367,11 +371,6 @@ class NgpComboboxOption {
|
|
|
367
371
|
disabled: this.disabled,
|
|
368
372
|
});
|
|
369
373
|
}
|
|
370
|
-
ngOnInit() {
|
|
371
|
-
if (this.value() === undefined) {
|
|
372
|
-
throw new Error('ngpComboboxOption: The value input is required. Please provide a value for the option.');
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
374
|
ngOnDestroy() {
|
|
376
375
|
this.state().unregisterOption(this);
|
|
377
376
|
}
|
|
@@ -751,8 +750,13 @@ class NgpCombobox {
|
|
|
751
750
|
this.closeDropdown();
|
|
752
751
|
return;
|
|
753
752
|
}
|
|
753
|
+
const optionValue = option.value();
|
|
754
|
+
// if the option has no associated value, do nothing
|
|
755
|
+
if (optionValue === undefined) {
|
|
756
|
+
return;
|
|
757
|
+
}
|
|
754
758
|
// Handle select all functionality - only works in multiple selection mode
|
|
755
|
-
if (
|
|
759
|
+
if (optionValue === 'all') {
|
|
756
760
|
if (!this.state.multiple()) {
|
|
757
761
|
return; // Do nothing in single selection mode
|
|
758
762
|
}
|
|
@@ -765,17 +769,17 @@ class NgpCombobox {
|
|
|
765
769
|
}
|
|
766
770
|
if (this.state.multiple()) {
|
|
767
771
|
// if the option is already selected, do nothing
|
|
768
|
-
if (this.isOptionSelected(
|
|
772
|
+
if (this.isOptionSelected(optionValue)) {
|
|
769
773
|
return;
|
|
770
774
|
}
|
|
771
|
-
const value = [...this.state.value(),
|
|
775
|
+
const value = [...this.state.value(), optionValue];
|
|
772
776
|
// add the option to the value
|
|
773
777
|
this.state.value.set(value);
|
|
774
778
|
this.valueChange.emit(value);
|
|
775
779
|
}
|
|
776
780
|
else {
|
|
777
|
-
this.state.value.set(
|
|
778
|
-
this.valueChange.emit(
|
|
781
|
+
this.state.value.set(optionValue);
|
|
782
|
+
this.valueChange.emit(optionValue);
|
|
779
783
|
// close the dropdown on single selection
|
|
780
784
|
this.closeDropdown();
|
|
781
785
|
}
|
|
@@ -786,8 +790,13 @@ class NgpCombobox {
|
|
|
786
790
|
* @internal
|
|
787
791
|
*/
|
|
788
792
|
deselectOption(option) {
|
|
793
|
+
const optionValue = option.value();
|
|
794
|
+
// Options without values cannot be deselected (and should never be selected).
|
|
795
|
+
if (optionValue === undefined) {
|
|
796
|
+
return;
|
|
797
|
+
}
|
|
789
798
|
// if the combobox is disabled or the option is not selected, do nothing
|
|
790
|
-
if (this.state.disabled() || !this.isOptionSelected(
|
|
799
|
+
if (this.state.disabled() || !this.isOptionSelected(optionValue)) {
|
|
791
800
|
return;
|
|
792
801
|
}
|
|
793
802
|
// in single selection mode, only allow deselecting if allowDeselect is true
|
|
@@ -795,7 +804,7 @@ class NgpCombobox {
|
|
|
795
804
|
return;
|
|
796
805
|
}
|
|
797
806
|
// Handle select all for deselect all functionality - only works in multiple selection mode
|
|
798
|
-
if (
|
|
807
|
+
if (optionValue === 'all') {
|
|
799
808
|
if (!this.state.multiple()) {
|
|
800
809
|
return; // Do nothing in single selection mode
|
|
801
810
|
}
|
|
@@ -805,7 +814,7 @@ class NgpCombobox {
|
|
|
805
814
|
}
|
|
806
815
|
if (this.state.multiple()) {
|
|
807
816
|
const values = this.state.value() ?? [];
|
|
808
|
-
const newValue = values.filter(v => !this.state.compareWith()(v,
|
|
817
|
+
const newValue = values.filter(v => !this.state.compareWith()(v, optionValue));
|
|
809
818
|
// remove the option from the value
|
|
810
819
|
this.state.value.set(newValue);
|
|
811
820
|
this.valueChange.emit(newValue);
|
|
@@ -829,12 +838,17 @@ class NgpCombobox {
|
|
|
829
838
|
if (!option) {
|
|
830
839
|
return;
|
|
831
840
|
}
|
|
841
|
+
const optionValue = option.value();
|
|
842
|
+
// Options without values cannot be toggled.
|
|
843
|
+
if (optionValue === undefined) {
|
|
844
|
+
return;
|
|
845
|
+
}
|
|
832
846
|
// Handle select all for select/deselect all functionality - only works in multiple selection mode
|
|
833
|
-
if (
|
|
847
|
+
if (optionValue === 'all') {
|
|
834
848
|
if (!this.state.multiple()) {
|
|
835
849
|
return; // Do nothing in single selection mode
|
|
836
850
|
}
|
|
837
|
-
if (this.isOptionSelected(
|
|
851
|
+
if (this.isOptionSelected(optionValue)) {
|
|
838
852
|
this.deselectOption(option);
|
|
839
853
|
}
|
|
840
854
|
else {
|
|
@@ -844,7 +858,7 @@ class NgpCombobox {
|
|
|
844
858
|
}
|
|
845
859
|
if (this.state.multiple()) {
|
|
846
860
|
// In multiple selection mode, always allow toggling
|
|
847
|
-
if (this.isOptionSelected(
|
|
861
|
+
if (this.isOptionSelected(optionValue)) {
|
|
848
862
|
this.deselectOption(option);
|
|
849
863
|
}
|
|
850
864
|
else {
|
|
@@ -853,7 +867,7 @@ class NgpCombobox {
|
|
|
853
867
|
}
|
|
854
868
|
else {
|
|
855
869
|
// In single selection mode, check if deselection is allowed
|
|
856
|
-
if (this.isOptionSelected(
|
|
870
|
+
if (this.isOptionSelected(optionValue) && this.state.allowDeselect()) {
|
|
857
871
|
// Deselect the option by setting value to undefined
|
|
858
872
|
this.state.value.set(undefined);
|
|
859
873
|
this.valueChange.emit(undefined);
|
|
@@ -876,7 +890,8 @@ class NgpCombobox {
|
|
|
876
890
|
// Handle both NgpComboboxOption and T types
|
|
877
891
|
const optionValue = isOption(option) ? option.value() : option;
|
|
878
892
|
const value = this.state.value();
|
|
879
|
-
|
|
893
|
+
// Only treat `undefined` as "no value" (allow '', 0, false).
|
|
894
|
+
if (optionValue === undefined) {
|
|
880
895
|
return false;
|
|
881
896
|
}
|
|
882
897
|
// Handle select all functionality - only works in multiple selection mode
|
|
@@ -887,11 +902,12 @@ class NgpCombobox {
|
|
|
887
902
|
const selectedValues = Array.isArray(value) ? value : [];
|
|
888
903
|
return areAllOptionsSelected(this.sortedOptions(), selectedValues, this.state.compareWith());
|
|
889
904
|
}
|
|
890
|
-
|
|
905
|
+
// Only treat `undefined` as "no selection" (allow '', 0, false).
|
|
906
|
+
if (value === undefined) {
|
|
891
907
|
return false;
|
|
892
908
|
}
|
|
893
909
|
if (this.state.multiple()) {
|
|
894
|
-
return value && value.some(v => this.state.compareWith()(optionValue, v));
|
|
910
|
+
return Array.isArray(value) && value.some(v => this.state.compareWith()(optionValue, v));
|
|
895
911
|
}
|
|
896
912
|
return this.state.compareWith()(optionValue, value);
|
|
897
913
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-primitives-combobox.mjs","sources":["../../../../packages/ng-primitives/combobox/src/combobox/combobox-state.ts","../../../../packages/ng-primitives/combobox/src/combobox-button/combobox-button.ts","../../../../packages/ng-primitives/combobox/src/combobox-dropdown/combobox-dropdown.ts","../../../../packages/ng-primitives/combobox/src/combobox-input/combobox-input.ts","../../../../packages/ng-primitives/combobox/src/utils.ts","../../../../packages/ng-primitives/combobox/src/combobox-option/combobox-option.ts","../../../../packages/ng-primitives/combobox/src/combobox-portal/combobox-portal.ts","../../../../packages/ng-primitives/combobox/src/config/combobox-config.ts","../../../../packages/ng-primitives/combobox/src/combobox/combobox.ts","../../../../packages/ng-primitives/combobox/src/ng-primitives-combobox.ts"],"sourcesContent":["import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpCombobox } from './combobox';\n\n/**\n * The state token for the Combobox primitive.\n */\nexport const NgpComboboxStateToken = createStateToken<NgpCombobox>('Combobox');\n\n/**\n * Provides the Combobox state.\n */\nexport const provideComboboxState = createStateProvider(NgpComboboxStateToken);\n\n/**\n * Injects the Combobox state.\n */\nexport const injectComboboxState = createStateInjector<NgpCombobox>(NgpComboboxStateToken);\n\n/**\n * The Combobox state registration function.\n */\nexport const comboboxState = createState(NgpComboboxStateToken);\n","import { computed, Directive, HostListener, input } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectComboboxState } from '../combobox/combobox-state';\n\n@Directive({\n selector: 'button[ngpComboboxButton]',\n exportAs: 'ngpComboboxButton',\n host: {\n type: 'button',\n tabindex: '-1',\n 'aria-haspopup': 'listbox',\n '[id]': 'id()',\n '[attr.aria-controls]': 'dropdownId()',\n '[attr.aria-expanded]': 'state().open()',\n '[attr.data-open]': 'state().open() ? \"\" : undefined',\n '[attr.data-disabled]': 'state().disabled() ? \"\" : undefined',\n '[attr.data-multiple]': 'state().multiple() ? \"\" : undefined',\n '[disabled]': 'state().disabled()',\n },\n})\nexport class NgpComboboxButton {\n /** Access the combobox state. */\n protected readonly state = injectComboboxState();\n\n /**\n * Access the element reference.\n * @internal\n */\n readonly elementRef = injectElementRef<HTMLButtonElement>();\n\n /** The id of the button. */\n readonly id = input<string>(uniqueId('ngp-combobox-button'));\n\n /** The id of the dropdown. */\n readonly dropdownId = computed(() => this.state().dropdown()?.id());\n\n constructor() {\n ngpInteractions({\n hover: true,\n press: true,\n disabled: this.state().disabled,\n });\n\n this.state().registerButton(this);\n }\n\n @HostListener('click')\n protected async toggleDropdown(): Promise<void> {\n await this.state().toggleDropdown();\n this.state().input()?.focus();\n }\n}\n","import { Directive, input } from '@angular/core';\nimport { injectElementRef, observeResize } from 'ng-primitives/internal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectComboboxState } from '../combobox/combobox-state';\n\n@Directive({\n selector: '[ngpComboboxDropdown]',\n exportAs: 'ngpComboboxDropdown',\n host: {\n role: 'listbox',\n '[id]': 'id()',\n '[style.left.px]': 'state().overlay()?.position()?.x',\n '[style.top.px]': 'state().overlay()?.position()?.y',\n '[style.--ngp-combobox-transform-origin]': 'state().overlay()?.transformOrigin()',\n '[style.--ngp-combobox-width.px]': 'comboboxDimensions().width',\n '[style.--ngp-combobox-input-width.px]': 'inputDimensions().width',\n '[style.--ngp-combobox-button-width.px]': 'buttonDimensions().width',\n },\n})\nexport class NgpComboboxDropdown {\n /** Access the combobox state. */\n protected readonly state = injectComboboxState();\n\n /** The dimensions of the combobox. */\n protected readonly comboboxDimensions = observeResize(\n () => this.state().elementRef.nativeElement,\n );\n\n /** The dimensions of the combobox. */\n protected readonly inputDimensions = observeResize(\n () => this.state().input()?.elementRef.nativeElement,\n );\n\n /** Store the combobox button dimensions. */\n protected readonly buttonDimensions = observeResize(\n () => this.state().button()?.elementRef.nativeElement,\n );\n\n /**\n * Access the element reference.\n * @internal\n */\n readonly elementRef = injectElementRef();\n\n /** The id of the dropdown. */\n readonly id = input<string>(uniqueId('ngp-combobox-dropdown'));\n\n constructor() {\n this.state().registerDropdown(this);\n }\n}\n","import { computed, Directive, HostListener, input } from '@angular/core';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectComboboxState } from '../combobox/combobox-state';\n\n@Directive({\n selector: 'input[ngpComboboxInput]',\n exportAs: 'ngpComboboxInput',\n host: {\n role: 'combobox',\n type: 'text',\n autocomplete: 'off',\n autocorrect: 'off',\n spellcheck: 'false',\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'list',\n '[id]': 'id()',\n '[attr.aria-controls]': 'state().open() ? dropdownId() : undefined',\n '[attr.aria-expanded]': 'state().open()',\n '[attr.data-open]': 'state().open() ? \"\" : undefined',\n '[attr.data-disabled]': 'state().disabled() ? \"\" : undefined',\n '[attr.data-multiple]': 'state().multiple() ? \"\" : undefined',\n '[attr.aria-activedescendant]': 'activeDescendant()',\n '[disabled]': 'state().disabled()',\n },\n})\nexport class NgpComboboxInput {\n /** Access the combobox state. */\n protected readonly state = injectComboboxState();\n\n /**\n * Access the element reference.\n * @internal\n */\n readonly elementRef = injectElementRef<HTMLInputElement>();\n\n /** The id of the input. */\n readonly id = input<string>(uniqueId('ngp-combobox-input'));\n\n /** The id of the dropdown. */\n readonly dropdownId = computed(() => this.state().dropdown()?.id());\n\n /** The id of the active descendant. */\n protected readonly activeDescendant = computed(() => this.state().activeDescendantManager.id());\n\n /** Determine if the pointer was used to focus the input. */\n protected pointerFocused = false;\n\n /**\n * The control status - this is required as we apply them to the combobox element as well as the input element.\n * @internal\n */\n readonly controlStatus = ngpFormControl({ id: this.id, disabled: this.state().disabled });\n\n constructor() {\n ngpInteractions({\n focus: true,\n hover: true,\n press: true,\n disabled: this.state().disabled,\n });\n\n this.state().registerInput(this);\n }\n\n /** Handle keydown events for accessibility. */\n @HostListener('keydown', ['$event'])\n protected handleKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n if (this.state().open()) {\n this.state().activateNextOption();\n } else {\n this.state().openDropdown();\n }\n event.preventDefault();\n break;\n case 'ArrowUp':\n if (this.state().open()) {\n this.state().activatePreviousOption();\n } else {\n this.state().openDropdown();\n this.state().activeDescendantManager.last();\n }\n event.preventDefault();\n break;\n case 'Home':\n if (this.state().open()) {\n this.state().activeDescendantManager.first();\n }\n event.preventDefault();\n break;\n case 'End':\n if (this.state().open()) {\n this.state().activeDescendantManager.last();\n }\n event.preventDefault();\n break;\n case 'Enter':\n if (this.state().open()) {\n const activeItem = this.state().activeDescendantManager.id();\n\n if (activeItem) {\n this.state().toggleOption(activeItem);\n }\n }\n event.preventDefault();\n break;\n case 'Escape':\n this.state().closeDropdown();\n event.preventDefault();\n break;\n case 'Backspace':\n // if the input is not empty then open the dropdown\n if (this.elementRef.nativeElement.value.length > 0) {\n this.state().openDropdown();\n }\n break;\n default:\n // Ignore keys with length > 1 (e.g., 'Shift', 'ArrowLeft', 'Enter', etc.)\n // Filter out control/meta key combos (e.g., Ctrl+C)\n if (\n event.key !== 'Unidentified' &&\n (event.key.length > 1 || event.ctrlKey || event.metaKey || event.altKey)\n ) {\n return;\n }\n\n // if this was a character key, we want to open the dropdown\n this.state().openDropdown();\n }\n }\n\n @HostListener('blur', ['$event'])\n protected closeDropdown(event: FocusEvent): void {\n const relatedTarget = event.relatedTarget as HTMLElement;\n\n // if the blur was caused by focus moving to the dropdown, don't close\n if (\n relatedTarget &&\n this.state().dropdown()?.elementRef.nativeElement.contains(relatedTarget)\n ) {\n return;\n }\n\n // if the blur was caused by focus moving to the button, don't close\n if (relatedTarget && this.state().button()?.elementRef.nativeElement.contains(relatedTarget)) {\n return;\n }\n\n this.state().closeDropdown();\n event.preventDefault();\n }\n\n /**\n * Focus the input field\n * @internal\n */\n focus(): void {\n this.elementRef.nativeElement.focus({ preventScroll: true });\n }\n\n @HostListener('focus')\n protected highlightText(): void {\n if (this.pointerFocused) {\n this.pointerFocused = false;\n return;\n }\n\n // highlight the text in the input\n this.elementRef.nativeElement.setSelectionRange(0, this.elementRef.nativeElement.value.length);\n }\n\n @HostListener('pointerdown')\n protected handlePointerDown(): void {\n this.pointerFocused = true;\n }\n}\n","import type { NgpComboboxOption } from './combobox-option/combobox-option';\n\n/**\n * Check if all regular options (excluding 'all' and undefined) are selected.\n * @param options All available options\n * @param selectedValues Currently selected values\n * @param compareWith Comparison function\n * @returns true if all regular options are selected\n */\nexport function areAllOptionsSelected(\n options: NgpComboboxOption[],\n selectedValues: any[],\n compareWith: (a: any, b: any) => boolean,\n): boolean {\n const regularOptions = options.filter(opt => opt.value() !== 'all' && opt.value() !== undefined);\n return (\n regularOptions.length > 0 &&\n regularOptions.every(opt => selectedValues.some(val => compareWith(val, opt.value())))\n );\n}\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n computed,\n Directive,\n HostListener,\n input,\n numberAttribute,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef, scrollIntoViewIfNeeded } from 'ng-primitives/internal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectComboboxState } from '../combobox/combobox-state';\nimport { areAllOptionsSelected } from '../utils';\n\ntype T = any;\n\n@Directive({\n selector: '[ngpComboboxOption]',\n exportAs: 'ngpComboboxOption',\n host: {\n role: 'option',\n '[id]': 'id()',\n '[attr.tabindex]': '-1',\n '[attr.aria-selected]': 'selected() ? \"true\" : undefined',\n '[attr.data-selected]': 'selected() ? \"\" : undefined',\n '[attr.data-active]': 'active() ? \"\" : undefined',\n '[attr.data-disabled]': 'disabled() ? \"\" : undefined',\n '(click)': 'select()',\n },\n})\nexport class NgpComboboxOption implements OnInit, OnDestroy {\n /** Access the combobox state. */\n protected readonly state = injectComboboxState();\n\n /**\n * The element reference of the option.\n * @internal\n */\n readonly elementRef = injectElementRef();\n\n /** The id of the option. */\n readonly id = input<string>(uniqueId('ngp-combobox-option'));\n\n /** @required The value of the option. */\n readonly value = input<T>(undefined, {\n alias: 'ngpComboboxOptionValue',\n });\n\n /** The disabled state of the option. */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpComboboxOptionDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The index of the option in the combobox. This can be used to define the order of options\n * when virtual scrolling is used or when the order is not determined by DOM order.\n */\n readonly index = input<number, NumberInput>(undefined, {\n alias: 'ngpComboboxOptionIndex',\n transform: numberAttribute,\n });\n\n /**\n * Whether this option is the active descendant.\n * @internal\n */\n protected readonly active = computed(() => {\n // if the option has an index, use that to determine if it's active because this\n // is required for virtual scrolling scenarios\n const index = this.index();\n\n if (index !== undefined) {\n return this.state().activeDescendantManager.index() === index;\n }\n\n return this.state().activeDescendantManager.id() === this.id();\n });\n\n /** Whether this option is selected. */\n protected readonly selected = computed(() => {\n const value = this.value();\n const stateValue = this.state().value();\n\n if (!value) {\n return false;\n }\n\n // Handle select all functionality - only works in multiple selection mode\n if (value === 'all') {\n if (!this.state().multiple()) {\n return false; // Never selected in single selection mode\n }\n\n const selectedValues = Array.isArray(stateValue) ? stateValue : [];\n return areAllOptionsSelected(\n this.state().options(),\n selectedValues,\n this.state().compareWith(),\n );\n }\n\n if (!stateValue) {\n return false;\n }\n\n if (this.state().multiple()) {\n return (\n Array.isArray(stateValue) && stateValue.some(v => this.state().compareWith()(value, v))\n );\n }\n\n return this.state().compareWith()(value, stateValue);\n });\n\n constructor() {\n this.state().registerOption(this);\n\n ngpInteractions({\n hover: true,\n press: true,\n disabled: this.disabled,\n });\n }\n\n ngOnInit(): void {\n if (this.value() === undefined) {\n throw new Error(\n 'ngpComboboxOption: The value input is required. Please provide a value for the option.',\n );\n }\n }\n\n ngOnDestroy(): void {\n this.state().unregisterOption(this);\n }\n\n /**\n * Select the option.\n * @internal\n */\n select(): void {\n if (this.disabled()) {\n return;\n }\n\n this.state().toggleOption(this.id());\n }\n\n /**\n * Scroll the option into view.\n * @internal\n */\n scrollIntoView(): void {\n scrollIntoViewIfNeeded(this.elementRef.nativeElement);\n }\n\n /**\n * Whenever the pointer enters the option, activate it.\n * @internal\n */\n @HostListener('pointerenter')\n protected onPointerEnter(): void {\n // if we have a known index, use that to activate the option (required for virtual scrolling)\n const index = this.index();\n\n if (index !== undefined) {\n this.state().activeDescendantManager.activateByIndex(index, {\n scroll: false,\n origin: 'pointer',\n });\n return;\n }\n\n // otherwise, activate by id\n this.state().activeDescendantManager.activateById(this.id(), {\n scroll: false,\n origin: 'pointer',\n });\n }\n\n /**\n * Whenever the pointer leaves the option, deactivate it.\n * @internal\n */\n @HostListener('pointerleave')\n protected onPointerLeave(): void {\n if (this.state().activeDescendantManager.id() === this.id()) {\n this.state().activeDescendantManager.reset({ origin: 'pointer' });\n }\n }\n}\n","import {\n Directive,\n inject,\n Injector,\n OnDestroy,\n signal,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { createOverlay, NgpOverlay, NgpOverlayConfig } from 'ng-primitives/portal';\nimport { injectComboboxState } from '../combobox/combobox-state';\n\n@Directive({\n selector: '[ngpComboboxPortal]',\n exportAs: 'ngpComboboxPortal',\n})\nexport class NgpComboboxPortal implements OnDestroy {\n /** Access the combobox state. */\n private readonly state = injectComboboxState();\n /** Access the view container reference. */\n private readonly viewContainerRef = inject(ViewContainerRef);\n\n /** Access the template reference. */\n private readonly templateRef = inject(TemplateRef);\n\n /** Access the injector. */\n private readonly injector = inject(Injector);\n\n /**\n * The overlay that manages the popover\n * @internal\n */\n readonly overlay = signal<NgpOverlay<void> | null>(null);\n\n constructor() {\n this.state().registerPortal(this);\n }\n\n /** Cleanup the portal. */\n ngOnDestroy(): void {\n this.overlay()?.destroy();\n }\n\n /**\n * Attach the portal.\n * @internal\n */\n show(): Promise<void> {\n // Create the overlay if it doesn't exist yet\n if (!this.overlay()) {\n this.createOverlay();\n }\n\n // Show the overlay\n return this.overlay()!.show();\n }\n\n /**\n * Detach the portal.\n * @internal\n */\n async detach(): Promise<void> {\n this.overlay()?.hide();\n }\n\n /**\n * Create the overlay that will contain the dropdown\n */\n private createOverlay(): void {\n // Create config for the overlay\n const config: NgpOverlayConfig<void> = {\n content: this.templateRef,\n viewContainerRef: this.viewContainerRef,\n triggerElement: this.state().elementRef.nativeElement,\n injector: this.injector,\n placement: this.state().placement,\n closeOnOutsideClick: true,\n closeOnEscape: true,\n restoreFocus: false,\n scrollBehaviour: 'reposition',\n container: this.state().container(),\n };\n\n this.overlay.set(createOverlay(config));\n }\n}\n","import { InjectionToken, Provider, inject } from '@angular/core';\nimport { type NgpComboboxPlacement } from '../combobox/combobox';\n\nexport interface NgpComboboxConfig {\n /**\n * The default placement for the combobox dropdown.\n * @default 'bottom'\n */\n placement: NgpComboboxPlacement;\n\n /**\n * The container element or selector for the combobox dropdown.\n * This can be used to control where the dropdown is rendered in the DOM.\n * @default 'body'\n */\n container: HTMLElement | string | null;\n}\n\nexport const defaultComboboxConfig: NgpComboboxConfig = {\n placement: 'bottom',\n container: 'body',\n};\n\nexport const NgpComboboxConfigToken = new InjectionToken<NgpComboboxConfig>(\n 'NgpComboboxConfigToken',\n);\n\n/**\n * Provide the default Combobox configuration\n * @param config The Combobox configuration\n * @returns The provider\n */\nexport function provideComboboxConfig(config: Partial<NgpComboboxConfig>): Provider[] {\n return [\n {\n provide: NgpComboboxConfigToken,\n useValue: { ...defaultComboboxConfig, ...config },\n },\n ];\n}\n\n/**\n * Inject the Combobox configuration\n * @returns The global Combobox configuration\n */\nexport function injectComboboxConfig(): NgpComboboxConfig {\n return inject(NgpComboboxConfigToken, { optional: true }) ?? defaultComboboxConfig;\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n computed,\n Directive,\n HostListener,\n inject,\n Injector,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { activeDescendantManager } from 'ng-primitives/a11y';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { domSort, injectElementRef } from 'ng-primitives/internal';\nimport type { NgpComboboxButton } from '../combobox-button/combobox-button';\nimport type { NgpComboboxDropdown } from '../combobox-dropdown/combobox-dropdown';\nimport type { NgpComboboxInput } from '../combobox-input/combobox-input';\nimport { NgpComboboxOption } from '../combobox-option/combobox-option';\nimport type { NgpComboboxPortal } from '../combobox-portal/combobox-portal';\nimport { injectComboboxConfig } from '../config/combobox-config';\nimport { areAllOptionsSelected } from '../utils';\nimport { comboboxState, provideComboboxState } from './combobox-state';\n\n/**\n * Ideally we would use a generic type here, unfortunately, unlike in React,\n * we cannot infer the type based on another input. For example, if multiple\n * is true, we cannot infer that the value is an array of T. Using a union\n * type is not ideal either because it requires the user to handle multiple cases.\n * Using a generic also isn't ideal because we need to use T as both an array and\n * a single value.\n *\n * Any seems to be used by Angular Material, ng-select, and other libraries\n * so we will use it here as well.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype T = any;\n\n@Directive({\n selector: '[ngpCombobox]',\n exportAs: 'ngpCombobox',\n providers: [provideComboboxState()],\n host: {\n '[attr.tabindex]': 'input() ? -1 : (state.disabled() ? -1 : 0)',\n '[attr.data-open]': 'open() ? \"\" : undefined',\n '[attr.data-disabled]': 'state.disabled() ? \"\" : undefined',\n '[attr.data-multiple]': 'state.multiple() ? \"\" : undefined',\n '[attr.data-invalid]': 'controlStatus()?.invalid ? \"\" : undefined',\n '[attr.data-valid]': 'controlStatus()?.valid ? \"\" : undefined',\n '[attr.data-touched]': 'controlStatus()?.touched ? \"\" : undefined',\n '[attr.data-pristine]': 'controlStatus()?.pristine ? \"\" : undefined',\n '[attr.data-dirty]': 'controlStatus()?.dirty ? \"\" : undefined',\n '[attr.data-pending]': 'controlStatus()?.pending ? \"\" : undefined',\n },\n})\nexport class NgpCombobox {\n /** Access the combobox configuration. */\n protected readonly config = injectComboboxConfig();\n\n /** @internal Access the combobox element. */\n readonly elementRef = injectElementRef();\n\n /** Access the injector. */\n protected readonly injector = inject(Injector);\n\n /** The value of the combobox. */\n readonly value = input<T>(undefined, {\n alias: 'ngpComboboxValue',\n });\n\n /** Event emitted when the value changes. */\n readonly valueChange = output<T>({\n alias: 'ngpComboboxValueChange',\n });\n\n /** Whether the combobox is multiple selection. */\n readonly multiple = input<boolean, BooleanInput>(false, {\n alias: 'ngpComboboxMultiple',\n transform: booleanAttribute,\n });\n\n /** Whether the combobox is disabled. */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpComboboxDisabled',\n transform: booleanAttribute,\n });\n\n /** Whether the combobox allows deselection in single selection mode. */\n readonly allowDeselect = input<boolean, BooleanInput>(false, {\n alias: 'ngpComboboxAllowDeselect',\n transform: booleanAttribute,\n });\n\n /** Emit when the dropdown open state changes. */\n readonly openChange = output<boolean>({\n alias: 'ngpComboboxOpenChange',\n });\n\n /** The comparator function used to compare options. */\n readonly compareWith = input<(a: T | undefined, b: T | undefined) => boolean>(Object.is, {\n alias: 'ngpComboboxCompareWith',\n });\n\n /** The position of the dropdown. */\n readonly placement = input<NgpComboboxPlacement>(this.config.placement, {\n alias: 'ngpComboboxDropdownPlacement',\n });\n\n /** The container for the dropdown. */\n readonly container = input<HTMLElement | string | null>(this.config.container, {\n alias: 'ngpComboboxDropdownContainer',\n });\n\n /**\n * A function that will scroll the active option into view. This can be overridden\n * for cases such as virtual scrolling where we cannot scroll the option directly because\n * it may not be rendered.\n */\n readonly scrollToOption = input<(index: number) => void>(undefined, {\n alias: 'ngpComboboxScrollToOption',\n });\n\n /**\n * Provide all the option values to the combobox. This is useful for virtual scrolling scenarios\n * where not all options are rendered in the DOM. This is not an alternative to adding the options\n * in the DOM, it is only to provide the combobox with the full list of options. This list should match\n * the order of the options as they would appear in the DOM.\n */\n readonly allOptions = input<T[]>(undefined, { alias: 'ngpComboboxOptions' });\n\n /**\n * Store the combobox input\n * @internal\n */\n readonly input = signal<NgpComboboxInput | undefined>(undefined);\n\n /**\n * Store the combobox button.\n * @internal\n */\n readonly button = signal<NgpComboboxButton | undefined>(undefined);\n\n /**\n * Store the combobox portal.\n * @internal\n */\n readonly portal = signal<NgpComboboxPortal | undefined>(undefined);\n\n /**\n * Store the combobox dropdown.\n * @internal\n */\n readonly dropdown = signal<NgpComboboxDropdown | undefined>(undefined);\n\n /**\n * Store the combobox options.\n * @internal\n */\n readonly options = signal<NgpComboboxOption[]>([]);\n\n /**\n * Access the overlay\n * @internal\n */\n readonly overlay = computed(() => this.portal()?.overlay());\n\n /**\n * The open state of the combobox.\n * @internal\n */\n readonly open = computed(() => this.overlay()?.isOpen() ?? false);\n\n /**\n * The options sorted by their index or DOM position.\n * @internal\n */\n readonly sortedOptions = computed(() =>\n domSort(\n this.options(),\n option => option.elementRef.nativeElement,\n option => option.index(),\n ),\n );\n\n /**\n * The active key descendant manager.\n * @internal\n */\n readonly activeDescendantManager = activeDescendantManager({\n // we must wrap the signal in a computed to ensure it is not used before it is defined\n disabled: computed(() => this.state.disabled()),\n wrap: signal(true),\n count: computed(() => this.state.allOptions()?.length ?? this.options().length),\n getItemId: index => this.getOptionAtIndex(index)?.id(),\n isItemDisabled: index => this.getOptionAtIndex(index)?.disabled() ?? false,\n scrollIntoView: index => {\n const isPositioned = this.portal()?.overlay()?.isPositioned() ?? false;\n\n if (!isPositioned || index === -1) {\n return;\n }\n\n this.scrollTo(index);\n },\n });\n\n /** The control status */\n protected readonly controlStatus = computed(() => this.input()?.controlStatus());\n\n /** The state of the combobox. */\n protected readonly state = comboboxState<NgpCombobox>(this);\n\n constructor() {\n ngpInteractions({\n focus: true,\n focusWithin: true,\n hover: true,\n press: true,\n disabled: this.state.disabled,\n });\n }\n\n /**\n * Open the dropdown.\n * @internal\n */\n async openDropdown(): Promise<void> {\n if (this.state.disabled() || this.open()) {\n return;\n }\n\n this.openChange.emit(true);\n await this.portal()?.show();\n\n let selectedOptionIdx = -1;\n\n // if we have been provided with allOptions, we need to find the selected option(s) from that list\n if (this.state.allOptions()) {\n selectedOptionIdx = this.state\n .allOptions()!\n .findIndex(option => this.isOptionSelected(option));\n }\n\n // if we don't have allOptions, find the selected option(s) from the registered options\n if (selectedOptionIdx === -1) {\n // if there is a selected option(s), set the active descendant to the first selected option\n selectedOptionIdx = this.sortedOptions().findIndex(option =>\n this.isOptionSelected(option.value()),\n );\n }\n\n // if after checking there is a selected option, set the active descendant to the first option\n if (selectedOptionIdx !== -1) {\n // scroll to and activate the selected option\n this.scrollTo(selectedOptionIdx);\n this.activeDescendantManager.activateByIndex(selectedOptionIdx);\n return;\n }\n\n // activate the selected option or the first option\n this.activeDescendantManager.first();\n }\n\n /**\n * Close the dropdown.\n * @internal\n */\n closeDropdown(): void {\n if (!this.open()) {\n return;\n }\n\n this.openChange.emit(false);\n this.portal()?.detach();\n\n // clear the active descendant\n this.activeDescendantManager.reset();\n }\n\n /**\n * Toggle the dropdown.\n * @internal\n */\n async toggleDropdown(): Promise<void> {\n if (this.open()) {\n this.closeDropdown();\n } else {\n await this.openDropdown();\n }\n }\n\n /**\n * Select an option.\n * @param option The option to select.\n * @internal\n */\n selectOption(option: NgpComboboxOption | undefined): void {\n if (this.state.disabled()) {\n return;\n }\n\n if (!option) {\n this.state.value.set(undefined);\n this.closeDropdown();\n return;\n }\n\n // Handle select all functionality - only works in multiple selection mode\n if (option.value() === 'all') {\n if (!this.state.multiple()) {\n return; // Do nothing in single selection mode\n }\n\n // Get currently visible regular options (respects filtering)\n const regularOptions = this.sortedOptions().filter(\n opt => opt.value() !== 'all' && opt.value() !== undefined,\n );\n const allValues = regularOptions.map(opt => opt.value());\n\n this.state.value.set(allValues as T);\n this.valueChange.emit(allValues as T);\n return;\n }\n\n if (this.state.multiple()) {\n // if the option is already selected, do nothing\n if (this.isOptionSelected(option.value())) {\n return;\n }\n\n const value = [...(this.state.value() as T[]), option.value() as T];\n\n // add the option to the value\n this.state.value.set(value as T);\n this.valueChange.emit(value as T);\n } else {\n this.state.value.set(option.value() as T);\n this.valueChange.emit(option.value() as T);\n\n // close the dropdown on single selection\n this.closeDropdown();\n }\n }\n\n /**\n * Deselect an option.\n * @param option The option to deselect.\n * @internal\n */\n deselectOption(option: NgpComboboxOption): void {\n // if the combobox is disabled or the option is not selected, do nothing\n if (this.state.disabled() || !this.isOptionSelected(option.value())) {\n return;\n }\n\n // in single selection mode, only allow deselecting if allowDeselect is true\n if (!this.state.multiple() && !this.state.allowDeselect()) {\n return;\n }\n\n // Handle select all for deselect all functionality - only works in multiple selection mode\n if (option.value() === 'all') {\n if (!this.state.multiple()) {\n return; // Do nothing in single selection mode\n }\n\n this.state.value.set([] as T);\n this.valueChange.emit([] as T);\n return;\n }\n\n if (this.state.multiple()) {\n const values = (this.state.value() as T[]) ?? [];\n const newValue = values.filter(v => !this.state.compareWith()(v, option.value() as T));\n\n // remove the option from the value\n this.state.value.set(newValue as T);\n this.valueChange.emit(newValue as T);\n } else {\n // in single selection mode with allowDeselect enabled, set value to undefined\n this.state.value.set(undefined);\n this.valueChange.emit(undefined);\n }\n }\n\n /**\n * Toggle the selection of an option.\n * @param id The id of the option to toggle.\n * @internal\n */\n toggleOption(id: string): void {\n if (this.state.disabled()) {\n return;\n }\n\n const option = this.sortedOptions().find(opt => opt.id() === id);\n\n if (!option) {\n return;\n }\n\n // Handle select all for select/deselect all functionality - only works in multiple selection mode\n if (option.value() === 'all') {\n if (!this.state.multiple()) {\n return; // Do nothing in single selection mode\n }\n\n if (this.isOptionSelected(option.value())) {\n this.deselectOption(option);\n } else {\n this.selectOption(option);\n }\n return;\n }\n\n if (this.state.multiple()) {\n // In multiple selection mode, always allow toggling\n if (this.isOptionSelected(option.value())) {\n this.deselectOption(option);\n } else {\n this.selectOption(option);\n }\n } else {\n // In single selection mode, check if deselection is allowed\n if (this.isOptionSelected(option.value()) && this.state.allowDeselect()) {\n // Deselect the option by setting value to undefined\n this.state.value.set(undefined);\n this.valueChange.emit(undefined);\n } else {\n // Select the option (works even if already selected to update the input)\n this.selectOption(option);\n }\n }\n }\n\n /**\n * Determine if an option is selected.\n * @param option The option to check.\n * @internal\n */\n isOptionSelected(option: T): boolean {\n if (this.state.disabled()) {\n return false;\n }\n\n // Handle both NgpComboboxOption and T types\n const optionValue = isOption(option) ? option.value() : (option as T);\n const value = this.state.value();\n\n if (!optionValue) {\n return false;\n }\n\n // Handle select all functionality - only works in multiple selection mode\n if (optionValue === 'all') {\n if (!this.state.multiple()) {\n return false; // Never selected in single selection mode\n }\n\n const selectedValues = Array.isArray(value) ? value : [];\n return areAllOptionsSelected(this.sortedOptions(), selectedValues, this.state.compareWith());\n }\n\n if (!value) {\n return false;\n }\n\n if (this.state.multiple()) {\n return value && (value as T[]).some(v => this.state.compareWith()(optionValue, v));\n }\n\n return this.state.compareWith()(optionValue, value);\n }\n\n /**\n * Activate the next option in the list if there is one.\n * If there is no option currently active, activate the selected option or the first option.\n * @internal\n */\n activateNextOption(): void {\n if (this.state.disabled()) {\n return;\n }\n\n const options = this.sortedOptions();\n\n // if there are no options, do nothing\n if (options.length === 0) {\n return;\n }\n\n // if there is no active option, activate the first option\n if (this.activeDescendantManager.index() === -1) {\n const selectedOption = options.findIndex(option => this.isOptionSelected(option.value()));\n\n // if there is a selected option(s), set the active descendant to the first selected option\n const targetOption = selectedOption !== -1 ? selectedOption : 0;\n\n this.activeDescendantManager.activateByIndex(targetOption, { origin: 'keyboard' });\n return;\n }\n\n // otherwise activate the next option\n this.activeDescendantManager.next({ origin: 'keyboard' });\n }\n\n /**\n * Activate the previous option in the list if there is one.\n * @internal\n */\n activatePreviousOption(): void {\n if (this.state.disabled()) {\n return;\n }\n const options = this.sortedOptions();\n // if there are no options, do nothing\n if (options.length === 0) {\n return;\n }\n // if there is no active option, activate the last option\n if (this.activeDescendantManager.index() === -1) {\n const selectedOption = options.findIndex(option => this.isOptionSelected(option.value()));\n // if there is a selected option(s), set the active descendant to the first selected option\n const targetOption = selectedOption !== -1 ? selectedOption : options.length - 1;\n this.activeDescendantManager.activateByIndex(targetOption, { origin: 'keyboard' });\n return;\n }\n // otherwise activate the previous option\n this.activeDescendantManager.previous({ origin: 'keyboard' });\n }\n\n /**\n * Register the dropdown portal with the combobox.\n * @param portal The dropdown portal.\n * @internal\n */\n registerPortal(portal: NgpComboboxPortal): void {\n this.portal.set(portal);\n }\n\n /**\n * Register the combobox input with the combobox.\n * @param input The combobox input.\n * @internal\n */\n registerInput(input: NgpComboboxInput): void {\n this.input.set(input);\n }\n\n /**\n * Register the combobox button with the combobox.\n * @param button The combobox button.\n * @internal\n */\n registerButton(button: NgpComboboxButton): void {\n this.button.set(button);\n }\n\n /**\n * Register the dropdown with the combobox.\n * @param dropdown The dropdown to register.\n * @internal\n */\n registerDropdown(dropdown: NgpComboboxDropdown): void {\n this.dropdown.set(dropdown);\n }\n\n /**\n * Register an option with the combobox.\n * @param option The option to register.\n * @internal\n */\n registerOption(option: NgpComboboxOption): void {\n this.options.update(options => [...options, option]);\n }\n\n /**\n * Unregister an option from the combobox.\n * @param option The option to unregister.\n * @internal\n */\n unregisterOption(option: NgpComboboxOption): void {\n this.options.update(options => options.filter(o => o !== option));\n }\n\n /**\n * Focus the combobox.\n * When an input element is present, it will be focused.\n * Otherwise, the combobox element itself will be focused.\n * This enables keyboard navigation for comboboxes without input elements.\n * @internal\n */\n focus(): void {\n if (this.input()) {\n this.input()?.focus();\n } else {\n this.elementRef.nativeElement.focus();\n }\n }\n\n /**\n * Handle keydown events for keyboard navigation and accessibility.\n * Supports:\n * - Arrow Down: Open dropdown or navigate to next option\n * - Arrow Up: Open dropdown or navigate to previous option\n * - Home: Navigate to first option\n * - End: Navigate to last option\n * - Enter: Select the currently active option\n * - Escape: Close the dropdown\n * @param event - The keyboard event\n * @internal\n */\n @HostListener('keydown', ['$event'])\n protected handleKeydown(event: KeyboardEvent): void {\n // If the event originated from the input element, let the input handle it\n if (this.input() && event.target === this.input()?.elementRef.nativeElement) {\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n if (this.open()) {\n this.activateNextOption();\n } else {\n this.openDropdown();\n }\n event.preventDefault();\n break;\n case 'ArrowUp':\n if (this.open()) {\n this.activatePreviousOption();\n } else {\n this.openDropdown();\n // Use setTimeout to ensure dropdown is rendered before selecting last item\n setTimeout(() => this.activeDescendantManager.last());\n }\n event.preventDefault();\n break;\n case 'Home':\n if (this.open()) {\n this.activeDescendantManager.first({ origin: 'keyboard' });\n }\n event.preventDefault();\n break;\n case 'End':\n if (this.open()) {\n this.activeDescendantManager.last({ origin: 'keyboard' });\n }\n event.preventDefault();\n break;\n case 'Enter':\n if (this.open()) {\n const activeId = this.activeDescendantManager.id();\n\n if (activeId) {\n this.toggleOption(activeId);\n }\n }\n event.preventDefault();\n break;\n case 'Escape':\n if (this.open()) {\n this.closeDropdown();\n }\n event.preventDefault();\n break;\n case ' ':\n if (!this.input()) {\n this.toggleDropdown();\n event.preventDefault();\n }\n break;\n }\n }\n\n /**\n * Handle blur events to manage dropdown closing behavior.\n * The dropdown will remain open if focus moves to:\n * - The dropdown itself\n * - The combobox button\n * - The combobox input\n * Otherwise, the dropdown will be closed.\n * @param event - The focus event\n * @internal\n */\n @HostListener('blur', ['$event'])\n protected onBlur(event: FocusEvent): void {\n const relatedTarget = event.relatedTarget as HTMLElement;\n\n // if the blur was caused by focus moving to the dropdown, don't close\n if (relatedTarget && this.dropdown()?.elementRef.nativeElement.contains(relatedTarget)) {\n return;\n }\n\n // if the blur was caused by focus moving to the button, don't close\n if (relatedTarget && this.button()?.elementRef.nativeElement.contains(relatedTarget)) {\n return;\n }\n\n // if the blur was caused by focus moving to the input, don't close\n if (relatedTarget && this.input()?.elementRef.nativeElement === relatedTarget) {\n return;\n }\n\n this.closeDropdown();\n }\n\n private scrollTo(index: number): void {\n const scrollToOption = this.state.scrollToOption();\n\n if (scrollToOption) {\n scrollToOption(index);\n return;\n }\n\n const option = this.getOptionAtIndex(index);\n if (option) {\n option.scrollIntoView();\n }\n }\n\n private getOptionAtIndex(index: number): NgpComboboxOption | undefined {\n // if the option has an index, use that to get the option because this is required for virtual scrolling scenarios\n const optionIndex = this.options().findIndex(opt => opt.index() === index);\n\n if (optionIndex !== -1) {\n return this.options()[optionIndex];\n }\n\n return this.sortedOptions()[index];\n }\n}\n\nexport type NgpComboboxPlacement =\n | 'top'\n | 'right'\n | 'bottom'\n | 'left'\n | 'top-start'\n | 'top-end'\n | 'right-start'\n | 'right-end'\n | 'bottom-start'\n | 'bottom-end'\n | 'left-start'\n | 'left-end';\n\nfunction isOption(value: any): value is NgpComboboxOption {\n return (\n value && typeof value === 'object' && 'value' in value && typeof value.value === 'function'\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAQA;;AAEG;AACI,MAAM,qBAAqB,GAAG,gBAAgB,CAAc,UAAU,CAAC;AAE9E;;AAEG;MACU,oBAAoB,GAAG,mBAAmB,CAAC,qBAAqB;AAE7E;;AAEG;MACU,mBAAmB,GAAG,mBAAmB,CAAc,qBAAqB;AAEzF;;AAEG;AACI,MAAM,aAAa,GAAG,WAAW,CAAC,qBAAqB,CAAC;;MCJlD,iBAAiB,CAAA;AAgB5B,IAAA,WAAA,GAAA;;QAdmB,IAAA,CAAA,KAAK,GAAG,mBAAmB,EAAE;AAEhD;;;AAGG;QACM,IAAA,CAAA,UAAU,GAAG,gBAAgB,EAAqB;;QAGlD,IAAA,CAAA,EAAE,GAAG,KAAK,CAAS,QAAQ,CAAC,qBAAqB,CAAC,8CAAC;;AAGnD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,sDAAC;AAGjE,QAAA,eAAe,CAAC;AACd,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ;AAChC,SAAA,CAAC;QAEF,IAAI,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC;IACnC;AAGU,IAAA,MAAM,cAAc,GAAA;AAC5B,QAAA,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,cAAc,EAAE;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;IAC/B;8GA9BW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mCAAA,EAAA,oBAAA,EAAA,uCAAA,EAAA,oBAAA,EAAA,uCAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAhB7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,QAAQ,EAAE,IAAI;AACd,wBAAA,eAAe,EAAE,SAAS;AAC1B,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,sBAAsB,EAAE,cAAc;AACtC,wBAAA,sBAAsB,EAAE,gBAAgB;AACxC,wBAAA,kBAAkB,EAAE,iCAAiC;AACrD,wBAAA,sBAAsB,EAAE,qCAAqC;AAC7D,wBAAA,sBAAsB,EAAE,qCAAqC;AAC7D,wBAAA,YAAY,EAAE,oBAAoB;AACnC,qBAAA;AACF,iBAAA;;sBA2BE,YAAY;uBAAC,OAAO;;;MC7BV,mBAAmB,CAAA;AA4B9B,IAAA,WAAA,GAAA;;QA1BmB,IAAA,CAAA,KAAK,GAAG,mBAAmB,EAAE;;AAG7B,QAAA,IAAA,CAAA,kBAAkB,GAAG,aAAa,CACnD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa,CAC5C;;AAGkB,QAAA,IAAA,CAAA,eAAe,GAAG,aAAa,CAChD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,aAAa,CACrD;;AAGkB,QAAA,IAAA,CAAA,gBAAgB,GAAG,aAAa,CACjD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,aAAa,CACtD;AAED;;;AAGG;QACM,IAAA,CAAA,UAAU,GAAG,gBAAgB,EAAE;;QAG/B,IAAA,CAAA,EAAE,GAAG,KAAK,CAAS,QAAQ,CAAC,uBAAuB,CAAC,8CAAC;QAG5D,IAAI,CAAC,KAAK,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;IACrC;8GA9BW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,eAAA,EAAA,kCAAA,EAAA,cAAA,EAAA,kCAAA,EAAA,uCAAA,EAAA,sCAAA,EAAA,+BAAA,EAAA,4BAAA,EAAA,qCAAA,EAAA,yBAAA,EAAA,sCAAA,EAAA,0BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAd/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,iBAAiB,EAAE,kCAAkC;AACrD,wBAAA,gBAAgB,EAAE,kCAAkC;AACpD,wBAAA,yCAAyC,EAAE,sCAAsC;AACjF,wBAAA,iCAAiC,EAAE,4BAA4B;AAC/D,wBAAA,uCAAuC,EAAE,yBAAyB;AAClE,wBAAA,wCAAwC,EAAE,0BAA0B;AACrE,qBAAA;AACF,iBAAA;;;MCUY,gBAAgB,CAAA;AA4B3B,IAAA,WAAA,GAAA;;QA1BmB,IAAA,CAAA,KAAK,GAAG,mBAAmB,EAAE;AAEhD;;;AAGG;QACM,IAAA,CAAA,UAAU,GAAG,gBAAgB,EAAoB;;QAGjD,IAAA,CAAA,EAAE,GAAG,KAAK,CAAS,QAAQ,CAAC,oBAAoB,CAAC,8CAAC;;AAGlD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,sDAAC;;AAGhD,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,uBAAuB,CAAC,EAAE,EAAE,4DAAC;;QAGrF,IAAA,CAAA,cAAc,GAAG,KAAK;AAEhC;;;AAGG;QACM,IAAA,CAAA,aAAa,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC;AAGvF,QAAA,eAAe,CAAC;AACd,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ;AAChC,SAAA,CAAC;QAEF,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;IAClC;;AAIU,IAAA,aAAa,CAAC,KAAoB,EAAA;AAC1C,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;AACvB,oBAAA,IAAI,CAAC,KAAK,EAAE,CAAC,kBAAkB,EAAE;gBACnC;qBAAO;AACL,oBAAA,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE;gBAC7B;gBACA,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,SAAS;gBACZ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;AACvB,oBAAA,IAAI,CAAC,KAAK,EAAE,CAAC,sBAAsB,EAAE;gBACvC;qBAAO;AACL,oBAAA,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE;oBAC3B,IAAI,CAAC,KAAK,EAAE,CAAC,uBAAuB,CAAC,IAAI,EAAE;gBAC7C;gBACA,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,MAAM;gBACT,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;oBACvB,IAAI,CAAC,KAAK,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE;gBAC9C;gBACA,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,KAAK;gBACR,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;oBACvB,IAAI,CAAC,KAAK,EAAE,CAAC,uBAAuB,CAAC,IAAI,EAAE;gBAC7C;gBACA,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,OAAO;gBACV,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;oBACvB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,uBAAuB,CAAC,EAAE,EAAE;oBAE5D,IAAI,UAAU,EAAE;wBACd,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC;oBACvC;gBACF;gBACA,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa,EAAE;gBAC5B,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,WAAW;;AAEd,gBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAClD,oBAAA,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE;gBAC7B;gBACA;AACF,YAAA;;;AAGE,gBAAA,IACE,KAAK,CAAC,GAAG,KAAK,cAAc;qBAC3B,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,EACxE;oBACA;gBACF;;AAGA,gBAAA,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE;;IAEjC;AAGU,IAAA,aAAa,CAAC,KAAiB,EAAA;AACvC,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,aAA4B;;AAGxD,QAAA,IACE,aAAa;AACb,YAAA,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,EACzE;YACA;QACF;;AAGA,QAAA,IAAI,aAAa,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;YAC5F;QACF;AAEA,QAAA,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa,EAAE;QAC5B,KAAK,CAAC,cAAc,EAAE;IACxB;AAEA;;;AAGG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9D;IAGU,aAAa,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;YAC3B;QACF;;AAGA,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;IAChG;IAGU,iBAAiB,GAAA;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;IAC5B;8GAtJW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,cAAA,EAAA,KAAA,EAAA,aAAA,EAAA,KAAA,EAAA,YAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,uBAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,2CAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mCAAA,EAAA,oBAAA,EAAA,uCAAA,EAAA,oBAAA,EAAA,uCAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBArB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,YAAY,EAAE,KAAK;AACnB,wBAAA,WAAW,EAAE,KAAK;AAClB,wBAAA,UAAU,EAAE,OAAO;AACnB,wBAAA,eAAe,EAAE,SAAS;AAC1B,wBAAA,mBAAmB,EAAE,MAAM;AAC3B,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,sBAAsB,EAAE,2CAA2C;AACnE,wBAAA,sBAAsB,EAAE,gBAAgB;AACxC,wBAAA,kBAAkB,EAAE,iCAAiC;AACrD,wBAAA,sBAAsB,EAAE,qCAAqC;AAC7D,wBAAA,sBAAsB,EAAE,qCAAqC;AAC7D,wBAAA,8BAA8B,EAAE,oBAAoB;AACpD,wBAAA,YAAY,EAAE,oBAAoB;AACnC,qBAAA;AACF,iBAAA;;sBAyCE,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;sBAmElC,YAAY;uBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;;sBA6B/B,YAAY;uBAAC,OAAO;;sBAWpB,YAAY;uBAAC,aAAa;;;AC7K7B;;;;;;AAMG;SACa,qBAAqB,CACnC,OAA4B,EAC5B,cAAqB,EACrB,WAAwC,EAAA;IAExC,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,SAAS,CAAC;AAChG,IAAA,QACE,cAAc,CAAC,MAAM,GAAG,CAAC;QACzB,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAE1F;;MCca,iBAAiB,CAAA;AAqF5B,IAAA,WAAA,GAAA;;QAnFmB,IAAA,CAAA,KAAK,GAAG,mBAAmB,EAAE;AAEhD;;;AAGG;QACM,IAAA,CAAA,UAAU,GAAG,gBAAgB,EAAE;;QAG/B,IAAA,CAAA,EAAE,GAAG,KAAK,CAAS,QAAQ,CAAC,qBAAqB,CAAC,8CAAC;;QAGnD,IAAA,CAAA,KAAK,GAAG,KAAK,CAAI,SAAS,yCACjC,KAAK,EAAE,wBAAwB,EAAA,CAAA,GAAA,CADI;AACnC,gBAAA,KAAK,EAAE,wBAAwB;AAChC,aAAA,CAAA,CAAA,CAAC;;AAGO,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EACpD,KAAK,EAAE,2BAA2B;gBAClC,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAF2B;AACtD,gBAAA,KAAK,EAAE,2BAA2B;AAClC,gBAAA,SAAS,EAAE,gBAAgB;AAC5B,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAsB,SAAS,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EACnD,KAAK,EAAE,wBAAwB;gBAC/B,SAAS,EAAE,eAAe,EAAA,CAAA,GAAA,CAF2B;AACrD,gBAAA,KAAK,EAAE,wBAAwB;AAC/B,gBAAA,SAAS,EAAE,eAAe;AAC3B,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;AACgB,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;;;AAGxC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAE1B,YAAA,IAAI,KAAK,KAAK,SAAS,EAAE;gBACvB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,KAAK,KAAK;YAC/D;AAEA,YAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,uBAAuB,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE;AAChE,QAAA,CAAC,kDAAC;;AAGiB,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC1C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;YAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE;YAEvC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,KAAK;YACd;;AAGA,YAAA,IAAI,KAAK,KAAK,KAAK,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE;oBAC5B,OAAO,KAAK,CAAC;gBACf;AAEA,gBAAA,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,EAAE;gBAClE,OAAO,qBAAqB,CAC1B,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EACtB,cAAc,EACd,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAC3B;YACH;YAEA,IAAI,CAAC,UAAU,EAAE;AACf,gBAAA,OAAO,KAAK;YACd;YAEA,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE;AAC3B,gBAAA,QACE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAE3F;AAEA,YAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC;AACtD,QAAA,CAAC,oDAAC;QAGA,IAAI,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC;AAEjC,QAAA,eAAe,CAAC;AACd,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxB,SAAA,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,SAAS,EAAE;AAC9B,YAAA,MAAM,IAAI,KAAK,CACb,wFAAwF,CACzF;QACH;IACF;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,KAAK,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;IACrC;AAEA;;;AAGG;IACH,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB;QACF;QAEA,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACtC;AAEA;;;AAGG;IACH,cAAc,GAAA;AACZ,QAAA,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;IACvD;AAEA;;;AAGG;IAEO,cAAc,GAAA;;AAEtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAE1B,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,IAAI,CAAC,KAAK,EAAE,CAAC,uBAAuB,CAAC,eAAe,CAAC,KAAK,EAAE;AAC1D,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,MAAM,EAAE,SAAS;AAClB,aAAA,CAAC;YACF;QACF;;AAGA,QAAA,IAAI,CAAC,KAAK,EAAE,CAAC,uBAAuB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE;AAC3D,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,SAAS;AAClB,SAAA,CAAC;IACJ;AAEA;;;AAGG;IAEO,cAAc,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,uBAAuB,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,EAAE;AAC3D,YAAA,IAAI,CAAC,KAAK,EAAE,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACnE;IACF;8GAhKW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,UAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,eAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,mCAAA,EAAA,oBAAA,EAAA,+BAAA,EAAA,kBAAA,EAAA,6BAAA,EAAA,oBAAA,EAAA,+BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAd7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,iBAAiB,EAAE,IAAI;AACvB,wBAAA,sBAAsB,EAAE,iCAAiC;AACzD,wBAAA,sBAAsB,EAAE,6BAA6B;AACrD,wBAAA,oBAAoB,EAAE,2BAA2B;AACjD,wBAAA,sBAAsB,EAAE,6BAA6B;AACrD,wBAAA,SAAS,EAAE,UAAU;AACtB,qBAAA;AACF,iBAAA;;sBAoIE,YAAY;uBAAC,cAAc;;sBAwB3B,YAAY;uBAAC,cAAc;;;MC5KjB,iBAAiB,CAAA;AAkB5B,IAAA,WAAA,GAAA;;QAhBiB,IAAA,CAAA,KAAK,GAAG,mBAAmB,EAAE;;AAE7B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;;AAG3C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;;AAGjC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAE5C;;;AAGG;AACM,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAA0B,IAAI,mDAAC;QAGtD,IAAI,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC;IACnC;;IAGA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE;IAC3B;AAEA;;;AAGG;IACH,IAAI,GAAA;;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;YACnB,IAAI,CAAC,aAAa,EAAE;QACtB;;AAGA,QAAA,OAAO,IAAI,CAAC,OAAO,EAAG,CAAC,IAAI,EAAE;IAC/B;AAEA;;;AAGG;AACH,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE;IACxB;AAEA;;AAEG;IACK,aAAa,GAAA;;AAEnB,QAAA,MAAM,MAAM,GAA2B;YACrC,OAAO,EAAE,IAAI,CAAC,WAAW;YACzB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,cAAc,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa;YACrD,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS;AACjC,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,eAAe,EAAE,YAAY;AAC7B,YAAA,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE;SACpC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC;8GApEW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,mBAAmB;AAC9B,iBAAA;;;ACGM,MAAM,qBAAqB,GAAsB;AACtD,IAAA,SAAS,EAAE,QAAQ;AACnB,IAAA,SAAS,EAAE,MAAM;CAClB;AAEM,MAAM,sBAAsB,GAAG,IAAI,cAAc,CACtD,wBAAwB,CACzB;AAED;;;;AAIG;AACG,SAAU,qBAAqB,CAAC,MAAkC,EAAA;IACtE,OAAO;AACL,QAAA;AACE,YAAA,OAAO,EAAE,sBAAsB;AAC/B,YAAA,QAAQ,EAAE,EAAE,GAAG,qBAAqB,EAAE,GAAG,MAAM,EAAE;AAClD,SAAA;KACF;AACH;AAEA;;;AAGG;SACa,oBAAoB,GAAA;AAClC,IAAA,OAAO,MAAM,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,qBAAqB;AACpF;;MCQa,WAAW,CAAA;AA6JtB,IAAA,WAAA,GAAA;;QA3JmB,IAAA,CAAA,MAAM,GAAG,oBAAoB,EAAE;;QAGzC,IAAA,CAAA,UAAU,GAAG,gBAAgB,EAAE;;AAGrB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;;QAGrC,IAAA,CAAA,KAAK,GAAG,KAAK,CAAI,SAAS,yCACjC,KAAK,EAAE,kBAAkB,EAAA,CAAA,GAAA,CADU;AACnC,gBAAA,KAAK,EAAE,kBAAkB;AAC1B,aAAA,CAAA,CAAA,CAAC;;QAGO,IAAA,CAAA,WAAW,GAAG,MAAM,CAAI;AAC/B,YAAA,KAAK,EAAE,wBAAwB;AAChC,SAAA,CAAC;;AAGO,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EACpD,KAAK,EAAE,qBAAqB;gBAC5B,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAF2B;AACtD,gBAAA,KAAK,EAAE,qBAAqB;AAC5B,gBAAA,SAAS,EAAE,gBAAgB;AAC5B,aAAA,CAAA,CAAA,CAAC;;AAGO,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EACpD,KAAK,EAAE,qBAAqB;gBAC5B,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAF2B;AACtD,gBAAA,KAAK,EAAE,qBAAqB;AAC5B,gBAAA,SAAS,EAAE,gBAAgB;AAC5B,aAAA,CAAA,CAAA,CAAC;;AAGO,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAwB,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EACzD,KAAK,EAAE,0BAA0B;gBACjC,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAFgC;AAC3D,gBAAA,KAAK,EAAE,0BAA0B;AACjC,gBAAA,SAAS,EAAE,gBAAgB;AAC5B,aAAA,CAAA,CAAA,CAAC;;QAGO,IAAA,CAAA,UAAU,GAAG,MAAM,CAAU;AACpC,YAAA,KAAK,EAAE,uBAAuB;AAC/B,SAAA,CAAC;;QAGO,IAAA,CAAA,WAAW,GAAG,KAAK,CAAkD,MAAM,CAAC,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EACrF,KAAK,EAAE,wBAAwB,EAAA,CAAA,GAAA,CADwD;AACvF,gBAAA,KAAK,EAAE,wBAAwB;AAChC,aAAA,CAAA,CAAA,CAAC;;AAGO,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAuB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EACpE,KAAK,EAAE,8BAA8B,EAAA,CAAA,GAAA,CADiC;AACtE,gBAAA,KAAK,EAAE,8BAA8B;AACtC,aAAA,CAAA,CAAA,CAAC;;AAGO,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAA8B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAC3E,KAAK,EAAE,8BAA8B,EAAA,CAAA,GAAA,CADwC;AAC7E,gBAAA,KAAK,EAAE,8BAA8B;AACtC,aAAA,CAAA,CAAA,CAAC;AAEF;;;;AAIG;QACM,IAAA,CAAA,cAAc,GAAG,KAAK,CAA0B,SAAS,kDAChE,KAAK,EAAE,2BAA2B,EAAA,CAAA,GAAA,CADgC;AAClE,gBAAA,KAAK,EAAE,2BAA2B;AACnC,aAAA,CAAA,CAAA,CAAC;AAEF;;;;;AAKG;AACM,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAM,SAAS,8CAAI,KAAK,EAAE,oBAAoB,EAAA,CAAA,GAAA,CAA7B,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAC;AAE5E;;;AAGG;AACM,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAA+B,SAAS,iDAAC;AAEhE;;;AAGG;AACM,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAgC,SAAS,kDAAC;AAElE;;;AAGG;AACM,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAgC,SAAS,kDAAC;AAElE;;;AAGG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAkC,SAAS,oDAAC;AAEtE;;;AAGG;AACM,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAsB,EAAE,mDAAC;AAElD;;;AAGG;AACM,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,mDAAC;AAE3D;;;AAGG;AACM,QAAA,IAAA,CAAA,IAAI,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,KAAK,gDAAC;AAEjE;;;AAGG;AACM,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAChC,OAAO,CACL,IAAI,CAAC,OAAO,EAAE,EACd,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,aAAa,EACzC,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CACzB,yDACF;AAED;;;AAGG;QACM,IAAA,CAAA,uBAAuB,GAAG,uBAAuB,CAAC;;AAEzD,YAAA,QAAQ,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC/C,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;YAClB,KAAK,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;AAC/E,YAAA,SAAS,EAAE,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE;AACtD,YAAA,cAAc,EAAE,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,KAAK;YAC1E,cAAc,EAAE,KAAK,IAAG;AACtB,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,KAAK;gBAEtE,IAAI,CAAC,YAAY,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBACjC;gBACF;AAEA,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YACtB,CAAC;AACF,SAAA,CAAC;;AAGiB,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,yDAAC;;AAG7D,QAAA,IAAA,CAAA,KAAK,GAAG,aAAa,CAAc,IAAI,CAAC;AAGzD,QAAA,eAAe,CAAC;AACd,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;AAC9B,SAAA,CAAC;IACJ;AAEA;;;AAGG;AACH,IAAA,MAAM,YAAY,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;YACxC;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,QAAA,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE;AAE3B,QAAA,IAAI,iBAAiB,GAAG,CAAC,CAAC;;AAG1B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE;YAC3B,iBAAiB,GAAG,IAAI,CAAC;AACtB,iBAAA,UAAU;AACV,iBAAA,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACvD;;AAGA,QAAA,IAAI,iBAAiB,KAAK,CAAC,CAAC,EAAE;;YAE5B,iBAAiB,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,MAAM,IACvD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CACtC;QACH;;AAGA,QAAA,IAAI,iBAAiB,KAAK,CAAC,CAAC,EAAE;;AAE5B,YAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AAChC,YAAA,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,iBAAiB,CAAC;YAC/D;QACF;;AAGA,QAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE;IACtC;AAEA;;;AAGG;IACH,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;YAChB;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE;;AAGvB,QAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE;IACtC;AAEA;;;AAGG;AACH,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;YACf,IAAI,CAAC,aAAa,EAAE;QACtB;aAAO;AACL,YAAA,MAAM,IAAI,CAAC,YAAY,EAAE;QAC3B;IACF;AAEA;;;;AAIG;AACH,IAAA,YAAY,CAAC,MAAqC,EAAA;AAChD,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;YACzB;QACF;QAEA,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YAC/B,IAAI,CAAC,aAAa,EAAE;YACpB;QACF;;AAGA,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,KAAK,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;AAC1B,gBAAA,OAAO;YACT;;YAGA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAChD,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,SAAS,CAC1D;AACD,YAAA,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAExD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAc,CAAC;AACpC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAc,CAAC;YACrC;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;;YAEzB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE;gBACzC;YACF;AAEA,YAAA,MAAM,KAAK,GAAG,CAAC,GAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAU,EAAE,MAAM,CAAC,KAAK,EAAO,CAAC;;YAGnE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAU,CAAC;AAChC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAU,CAAC;QACnC;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAO,CAAC;YACzC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAO,CAAC;;YAG1C,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;AAEA;;;;AAIG;AACH,IAAA,cAAc,CAAC,MAAyB,EAAA;;AAEtC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE;YACnE;QACF;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE;YACzD;QACF;;AAGA,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,KAAK,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;AAC1B,gBAAA,OAAO;YACT;YAEA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAO,CAAC;AAC7B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAO,CAAC;YAC9B;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;YACzB,MAAM,MAAM,GAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAU,IAAI,EAAE;YAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAO,CAAC,CAAC;;YAGtF,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAa,CAAC;AACnC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAa,CAAC;QACtC;aAAO;;YAEL,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;QAClC;IACF;AAEA;;;;AAIG;AACH,IAAA,YAAY,CAAC,EAAU,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;YACzB;QACF;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;QAEhE,IAAI,CAAC,MAAM,EAAE;YACX;QACF;;AAGA,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,KAAK,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;AAC1B,gBAAA,OAAO;YACT;YAEA,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE;AACzC,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;YAC7B;iBAAO;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAC3B;YACA;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;;YAEzB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE;AACzC,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;YAC7B;iBAAO;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAC3B;QACF;aAAO;;AAEL,YAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE;;gBAEvE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;AAC/B,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;YAClC;iBAAO;;AAEL,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAC3B;QACF;IACF;AAEA;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,MAAS,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;AACzB,YAAA,OAAO,KAAK;QACd;;AAGA,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAI,MAAY;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;QAEhC,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,KAAK;QACd;;AAGA,QAAA,IAAI,WAAW,KAAK,KAAK,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;gBAC1B,OAAO,KAAK,CAAC;YACf;AAEA,YAAA,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AACxD,YAAA,OAAO,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9F;QAEA,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;YACzB,OAAO,KAAK,IAAK,KAAa,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACpF;QAEA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC;IACrD;AAEA;;;;AAIG;IACH,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;YACzB;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;;AAGpC,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB;QACF;;QAGA,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE;YAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;;AAGzF,YAAA,MAAM,YAAY,GAAG,cAAc,KAAK,CAAC,CAAC,GAAG,cAAc,GAAG,CAAC;AAE/D,YAAA,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YAClF;QACF;;QAGA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC3D;AAEA;;;AAGG;IACH,sBAAsB,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;YACzB;QACF;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;;AAEpC,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB;QACF;;QAEA,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE;YAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;;AAEzF,YAAA,MAAM,YAAY,GAAG,cAAc,KAAK,CAAC,CAAC,GAAG,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;AAChF,YAAA,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YAClF;QACF;;QAEA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC/D;AAEA;;;;AAIG;AACH,IAAA,cAAc,CAAC,MAAyB,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;IACzB;AAEA;;;;AAIG;AACH,IAAA,aAAa,CAAC,KAAuB,EAAA;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB;AAEA;;;;AAIG;AACH,IAAA,cAAc,CAAC,MAAyB,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;IACzB;AAEA;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,QAA6B,EAAA;AAC5C,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC7B;AAEA;;;;AAIG;AACH,IAAA,cAAc,CAAC,MAAyB,EAAA;AACtC,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC;IACtD;AAEA;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,MAAyB,EAAA;QACxC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC;IACnE;AAEA;;;;;;AAMG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;AAChB,YAAA,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;QACvB;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;QACvC;IACF;AAEA;;;;;;;;;;;AAWG;AAEO,IAAA,aAAa,CAAC,KAAoB,EAAA;;AAE1C,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,aAAa,EAAE;YAC3E;QACF;AAEA,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;oBACf,IAAI,CAAC,kBAAkB,EAAE;gBAC3B;qBAAO;oBACL,IAAI,CAAC,YAAY,EAAE;gBACrB;gBACA,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,SAAS;AACZ,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;oBACf,IAAI,CAAC,sBAAsB,EAAE;gBAC/B;qBAAO;oBACL,IAAI,CAAC,YAAY,EAAE;;oBAEnB,UAAU,CAAC,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;gBACvD;gBACA,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;oBACf,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;gBAC5D;gBACA,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;oBACf,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;gBAC3D;gBACA,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;oBACf,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,EAAE,EAAE;oBAElD,IAAI,QAAQ,EAAE;AACZ,wBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;oBAC7B;gBACF;gBACA,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;oBACf,IAAI,CAAC,aAAa,EAAE;gBACtB;gBACA,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,GAAG;AACN,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;oBACjB,IAAI,CAAC,cAAc,EAAE;oBACrB,KAAK,CAAC,cAAc,EAAE;gBACxB;gBACA;;IAEN;AAEA;;;;;;;;;AASG;AAEO,IAAA,MAAM,CAAC,KAAiB,EAAA;AAChC,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,aAA4B;;AAGxD,QAAA,IAAI,aAAa,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;YACtF;QACF;;AAGA,QAAA,IAAI,aAAa,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;YACpF;QACF;;AAGA,QAAA,IAAI,aAAa,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,aAAa,KAAK,aAAa,EAAE;YAC7E;QACF;QAEA,IAAI,CAAC,aAAa,EAAE;IACtB;AAEQ,IAAA,QAAQ,CAAC,KAAa,EAAA;QAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;QAElD,IAAI,cAAc,EAAE;YAClB,cAAc,CAAC,KAAK,CAAC;YACrB;QACF;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAC3C,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,cAAc,EAAE;QACzB;IACF;AAEQ,IAAA,gBAAgB,CAAC,KAAa,EAAA;;QAEpC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC;AAE1E,QAAA,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE;AACtB,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC;QACpC;AAEA,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC;IACpC;8GAnqBW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,4CAAA,EAAA,gBAAA,EAAA,2BAAA,EAAA,oBAAA,EAAA,qCAAA,EAAA,oBAAA,EAAA,qCAAA,EAAA,mBAAA,EAAA,6CAAA,EAAA,iBAAA,EAAA,2CAAA,EAAA,mBAAA,EAAA,6CAAA,EAAA,oBAAA,EAAA,8CAAA,EAAA,iBAAA,EAAA,2CAAA,EAAA,mBAAA,EAAA,6CAAA,EAAA,EAAA,EAAA,SAAA,EAdX,CAAC,oBAAoB,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAcxB,WAAW,EAAA,UAAA,EAAA,CAAA;kBAjBvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,SAAS,EAAE,CAAC,oBAAoB,EAAE,CAAC;AACnC,oBAAA,IAAI,EAAE;AACJ,wBAAA,iBAAiB,EAAE,4CAA4C;AAC/D,wBAAA,kBAAkB,EAAE,yBAAyB;AAC7C,wBAAA,sBAAsB,EAAE,mCAAmC;AAC3D,wBAAA,sBAAsB,EAAE,mCAAmC;AAC3D,wBAAA,qBAAqB,EAAE,2CAA2C;AAClE,wBAAA,mBAAmB,EAAE,yCAAyC;AAC9D,wBAAA,qBAAqB,EAAE,2CAA2C;AAClE,wBAAA,sBAAsB,EAAE,4CAA4C;AACpE,wBAAA,mBAAmB,EAAE,yCAAyC;AAC9D,wBAAA,qBAAqB,EAAE,2CAA2C;AACnE,qBAAA;AACF,iBAAA;;sBA8iBE,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;sBAyElC,YAAY;uBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;;AA8DlC,SAAS,QAAQ,CAAC,KAAU,EAAA;AAC1B,IAAA,QACE,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;AAE/F;;AC/uBA;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"ng-primitives-combobox.mjs","sources":["../../../../packages/ng-primitives/combobox/src/combobox/combobox-state.ts","../../../../packages/ng-primitives/combobox/src/combobox-button/combobox-button.ts","../../../../packages/ng-primitives/combobox/src/combobox-dropdown/combobox-dropdown.ts","../../../../packages/ng-primitives/combobox/src/combobox-input/combobox-input.ts","../../../../packages/ng-primitives/combobox/src/utils.ts","../../../../packages/ng-primitives/combobox/src/combobox-option/combobox-option.ts","../../../../packages/ng-primitives/combobox/src/combobox-portal/combobox-portal.ts","../../../../packages/ng-primitives/combobox/src/config/combobox-config.ts","../../../../packages/ng-primitives/combobox/src/combobox/combobox.ts","../../../../packages/ng-primitives/combobox/src/ng-primitives-combobox.ts"],"sourcesContent":["import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpCombobox } from './combobox';\n\n/**\n * The state token for the Combobox primitive.\n */\nexport const NgpComboboxStateToken = createStateToken<NgpCombobox>('Combobox');\n\n/**\n * Provides the Combobox state.\n */\nexport const provideComboboxState = createStateProvider(NgpComboboxStateToken);\n\n/**\n * Injects the Combobox state.\n */\nexport const injectComboboxState = createStateInjector<NgpCombobox>(NgpComboboxStateToken);\n\n/**\n * The Combobox state registration function.\n */\nexport const comboboxState = createState(NgpComboboxStateToken);\n","import { computed, Directive, HostListener, input } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectComboboxState } from '../combobox/combobox-state';\n\n@Directive({\n selector: 'button[ngpComboboxButton]',\n exportAs: 'ngpComboboxButton',\n host: {\n type: 'button',\n tabindex: '-1',\n 'aria-haspopup': 'listbox',\n '[id]': 'id()',\n '[attr.aria-controls]': 'dropdownId()',\n '[attr.aria-expanded]': 'state().open()',\n '[attr.data-open]': 'state().open() ? \"\" : undefined',\n '[attr.data-disabled]': 'state().disabled() ? \"\" : undefined',\n '[attr.data-multiple]': 'state().multiple() ? \"\" : undefined',\n '[disabled]': 'state().disabled()',\n },\n})\nexport class NgpComboboxButton {\n /** Access the combobox state. */\n protected readonly state = injectComboboxState();\n\n /**\n * Access the element reference.\n * @internal\n */\n readonly elementRef = injectElementRef<HTMLButtonElement>();\n\n /** The id of the button. */\n readonly id = input<string>(uniqueId('ngp-combobox-button'));\n\n /** The id of the dropdown. */\n readonly dropdownId = computed(() => this.state().dropdown()?.id());\n\n constructor() {\n ngpInteractions({\n hover: true,\n press: true,\n disabled: this.state().disabled,\n });\n\n this.state().registerButton(this);\n }\n\n @HostListener('click')\n protected async toggleDropdown(): Promise<void> {\n await this.state().toggleDropdown();\n this.state().input()?.focus();\n }\n}\n","import { Directive, input } from '@angular/core';\nimport { injectElementRef, observeResize } from 'ng-primitives/internal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectComboboxState } from '../combobox/combobox-state';\n\n@Directive({\n selector: '[ngpComboboxDropdown]',\n exportAs: 'ngpComboboxDropdown',\n host: {\n role: 'listbox',\n '[id]': 'id()',\n '[style.left.px]': 'state().overlay()?.position()?.x',\n '[style.top.px]': 'state().overlay()?.position()?.y',\n '[style.--ngp-combobox-transform-origin]': 'state().overlay()?.transformOrigin()',\n '[style.--ngp-combobox-width.px]': 'comboboxDimensions().width',\n '[style.--ngp-combobox-input-width.px]': 'inputDimensions().width',\n '[style.--ngp-combobox-button-width.px]': 'buttonDimensions().width',\n },\n})\nexport class NgpComboboxDropdown {\n /** Access the combobox state. */\n protected readonly state = injectComboboxState();\n\n /** The dimensions of the combobox. */\n protected readonly comboboxDimensions = observeResize(\n () => this.state().elementRef.nativeElement,\n );\n\n /** The dimensions of the combobox. */\n protected readonly inputDimensions = observeResize(\n () => this.state().input()?.elementRef.nativeElement,\n );\n\n /** Store the combobox button dimensions. */\n protected readonly buttonDimensions = observeResize(\n () => this.state().button()?.elementRef.nativeElement,\n );\n\n /**\n * Access the element reference.\n * @internal\n */\n readonly elementRef = injectElementRef();\n\n /** The id of the dropdown. */\n readonly id = input<string>(uniqueId('ngp-combobox-dropdown'));\n\n constructor() {\n this.state().registerDropdown(this);\n }\n}\n","import { computed, Directive, HostListener, input } from '@angular/core';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectComboboxState } from '../combobox/combobox-state';\n\n@Directive({\n selector: 'input[ngpComboboxInput]',\n exportAs: 'ngpComboboxInput',\n host: {\n role: 'combobox',\n type: 'text',\n autocomplete: 'off',\n autocorrect: 'off',\n spellcheck: 'false',\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'list',\n '[id]': 'id()',\n '[attr.aria-controls]': 'state().open() ? dropdownId() : undefined',\n '[attr.aria-expanded]': 'state().open()',\n '[attr.data-open]': 'state().open() ? \"\" : undefined',\n '[attr.data-disabled]': 'state().disabled() ? \"\" : undefined',\n '[attr.data-multiple]': 'state().multiple() ? \"\" : undefined',\n '[attr.aria-activedescendant]': 'activeDescendant()',\n '[disabled]': 'state().disabled()',\n },\n})\nexport class NgpComboboxInput {\n /** Access the combobox state. */\n protected readonly state = injectComboboxState();\n\n /**\n * Access the element reference.\n * @internal\n */\n readonly elementRef = injectElementRef<HTMLInputElement>();\n\n /** The id of the input. */\n readonly id = input<string>(uniqueId('ngp-combobox-input'));\n\n /** The id of the dropdown. */\n readonly dropdownId = computed(() => this.state().dropdown()?.id());\n\n /** The id of the active descendant. */\n protected readonly activeDescendant = computed(() => this.state().activeDescendantManager.id());\n\n /** Determine if the pointer was used to focus the input. */\n protected pointerFocused = false;\n\n /**\n * The control status - this is required as we apply them to the combobox element as well as the input element.\n * @internal\n */\n readonly controlStatus = ngpFormControl({ id: this.id, disabled: this.state().disabled });\n\n constructor() {\n ngpInteractions({\n focus: true,\n hover: true,\n press: true,\n disabled: this.state().disabled,\n });\n\n this.state().registerInput(this);\n }\n\n /** Handle keydown events for accessibility. */\n @HostListener('keydown', ['$event'])\n protected handleKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n if (this.state().open()) {\n this.state().activateNextOption();\n } else {\n this.state().openDropdown();\n }\n event.preventDefault();\n break;\n case 'ArrowUp':\n if (this.state().open()) {\n this.state().activatePreviousOption();\n } else {\n this.state().openDropdown();\n this.state().activeDescendantManager.last();\n }\n event.preventDefault();\n break;\n case 'Home':\n if (this.state().open()) {\n this.state().activeDescendantManager.first();\n }\n event.preventDefault();\n break;\n case 'End':\n if (this.state().open()) {\n this.state().activeDescendantManager.last();\n }\n event.preventDefault();\n break;\n case 'Enter':\n if (this.state().open()) {\n const activeItem = this.state().activeDescendantManager.id();\n\n if (activeItem) {\n this.state().toggleOption(activeItem);\n }\n }\n event.preventDefault();\n break;\n case 'Escape':\n this.state().closeDropdown();\n event.preventDefault();\n break;\n case 'Backspace':\n // if the input is not empty then open the dropdown\n if (this.elementRef.nativeElement.value.length > 0) {\n this.state().openDropdown();\n }\n break;\n default:\n // Ignore keys with length > 1 (e.g., 'Shift', 'ArrowLeft', 'Enter', etc.)\n // Filter out control/meta key combos (e.g., Ctrl+C)\n if (\n event.key !== 'Unidentified' &&\n (event.key.length > 1 || event.ctrlKey || event.metaKey || event.altKey)\n ) {\n return;\n }\n\n // if this was a character key, we want to open the dropdown\n this.state().openDropdown();\n }\n }\n\n @HostListener('blur', ['$event'])\n protected closeDropdown(event: FocusEvent): void {\n const relatedTarget = event.relatedTarget as HTMLElement;\n\n // if the blur was caused by focus moving to the dropdown, don't close\n if (\n relatedTarget &&\n this.state().dropdown()?.elementRef.nativeElement.contains(relatedTarget)\n ) {\n return;\n }\n\n // if the blur was caused by focus moving to the button, don't close\n if (relatedTarget && this.state().button()?.elementRef.nativeElement.contains(relatedTarget)) {\n return;\n }\n\n this.state().closeDropdown();\n event.preventDefault();\n }\n\n /**\n * Focus the input field\n * @internal\n */\n focus(): void {\n this.elementRef.nativeElement.focus({ preventScroll: true });\n }\n\n @HostListener('focus')\n protected highlightText(): void {\n if (this.pointerFocused) {\n this.pointerFocused = false;\n return;\n }\n\n // highlight the text in the input\n this.elementRef.nativeElement.setSelectionRange(0, this.elementRef.nativeElement.value.length);\n }\n\n @HostListener('pointerdown')\n protected handlePointerDown(): void {\n this.pointerFocused = true;\n }\n}\n","import type { NgpComboboxOption } from './combobox-option/combobox-option';\n\n/**\n * Check if all regular options (excluding 'all' and undefined) are selected.\n * @param options All available options\n * @param selectedValues Currently selected values\n * @param compareWith Comparison function\n * @returns true if all regular options are selected\n */\nexport function areAllOptionsSelected(\n options: NgpComboboxOption[],\n selectedValues: any[],\n compareWith: (a: any, b: any) => boolean,\n): boolean {\n const regularOptions = options\n .map(opt => ({ opt, value: opt.value() }))\n .filter(({ value }) => value !== 'all' && value !== undefined);\n return (\n regularOptions.length > 0 &&\n regularOptions.every(({ value }) => selectedValues.some(val => compareWith(val, value)))\n );\n}\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n computed,\n Directive,\n HostListener,\n input,\n numberAttribute,\n OnDestroy,\n} from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef, scrollIntoViewIfNeeded } from 'ng-primitives/internal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectComboboxState } from '../combobox/combobox-state';\nimport { areAllOptionsSelected } from '../utils';\n\ntype T = any;\n\n@Directive({\n selector: '[ngpComboboxOption]',\n exportAs: 'ngpComboboxOption',\n host: {\n role: 'option',\n '[id]': 'id()',\n '[attr.tabindex]': '-1',\n '[attr.aria-selected]': 'selected() ? \"true\" : undefined',\n '[attr.data-selected]': 'selected() ? \"\" : undefined',\n '[attr.data-active]': 'active() ? \"\" : undefined',\n '[attr.data-disabled]': 'disabled() ? \"\" : undefined',\n '(click)': 'select()',\n },\n})\nexport class NgpComboboxOption implements OnDestroy {\n /** Access the combobox state. */\n protected readonly state = injectComboboxState();\n\n /**\n * The element reference of the option.\n * @internal\n */\n readonly elementRef = injectElementRef();\n\n /** The id of the option. */\n readonly id = input<string>(uniqueId('ngp-combobox-option'));\n\n /** @required The value of the option. */\n readonly value = input<T>(undefined, {\n alias: 'ngpComboboxOptionValue',\n });\n\n /** The disabled state of the option. */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpComboboxOptionDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The index of the option in the combobox. This can be used to define the order of options\n * when virtual scrolling is used or when the order is not determined by DOM order.\n */\n readonly index = input<number, NumberInput>(undefined, {\n alias: 'ngpComboboxOptionIndex',\n transform: numberAttribute,\n });\n\n /**\n * Whether this option is the active descendant.\n * @internal\n */\n protected readonly active = computed(() => {\n // if the option has an index, use that to determine if it's active because this\n // is required for virtual scrolling scenarios\n const index = this.index();\n\n if (index !== undefined) {\n return this.state().activeDescendantManager.index() === index;\n }\n\n return this.state().activeDescendantManager.id() === this.id();\n });\n\n /** Whether this option is selected. */\n protected readonly selected = computed(() => {\n const value = this.value();\n const stateValue = this.state().value();\n\n // Only treat `undefined` as \"no value\" (allow '', 0, false).\n if (value === undefined) {\n return false;\n }\n\n // Handle select all functionality - only works in multiple selection mode\n if (value === 'all') {\n if (!this.state().multiple()) {\n return false; // Never selected in single selection mode\n }\n\n const selectedValues = Array.isArray(stateValue) ? stateValue : [];\n return areAllOptionsSelected(\n this.state().options(),\n selectedValues,\n this.state().compareWith(),\n );\n }\n\n // Only treat `undefined` as \"no selection\" (allow '', 0, false).\n if (stateValue === undefined) {\n return false;\n }\n\n if (this.state().multiple()) {\n return (\n Array.isArray(stateValue) && stateValue.some(v => this.state().compareWith()(value, v))\n );\n }\n\n return this.state().compareWith()(value, stateValue);\n });\n\n constructor() {\n this.state().registerOption(this);\n\n ngpInteractions({\n hover: true,\n press: true,\n disabled: this.disabled,\n });\n }\n\n ngOnDestroy(): void {\n this.state().unregisterOption(this);\n }\n\n /**\n * Select the option.\n * @internal\n */\n select(): void {\n if (this.disabled()) {\n return;\n }\n\n this.state().toggleOption(this.id());\n }\n\n /**\n * Scroll the option into view.\n * @internal\n */\n scrollIntoView(): void {\n scrollIntoViewIfNeeded(this.elementRef.nativeElement);\n }\n\n /**\n * Whenever the pointer enters the option, activate it.\n * @internal\n */\n @HostListener('pointerenter')\n protected onPointerEnter(): void {\n // if we have a known index, use that to activate the option (required for virtual scrolling)\n const index = this.index();\n\n if (index !== undefined) {\n this.state().activeDescendantManager.activateByIndex(index, {\n scroll: false,\n origin: 'pointer',\n });\n return;\n }\n\n // otherwise, activate by id\n this.state().activeDescendantManager.activateById(this.id(), {\n scroll: false,\n origin: 'pointer',\n });\n }\n\n /**\n * Whenever the pointer leaves the option, deactivate it.\n * @internal\n */\n @HostListener('pointerleave')\n protected onPointerLeave(): void {\n if (this.state().activeDescendantManager.id() === this.id()) {\n this.state().activeDescendantManager.reset({ origin: 'pointer' });\n }\n }\n}\n","import {\n Directive,\n inject,\n Injector,\n OnDestroy,\n signal,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { createOverlay, NgpOverlay, NgpOverlayConfig } from 'ng-primitives/portal';\nimport { injectComboboxState } from '../combobox/combobox-state';\n\n@Directive({\n selector: '[ngpComboboxPortal]',\n exportAs: 'ngpComboboxPortal',\n})\nexport class NgpComboboxPortal implements OnDestroy {\n /** Access the combobox state. */\n private readonly state = injectComboboxState();\n /** Access the view container reference. */\n private readonly viewContainerRef = inject(ViewContainerRef);\n\n /** Access the template reference. */\n private readonly templateRef = inject(TemplateRef);\n\n /** Access the injector. */\n private readonly injector = inject(Injector);\n\n /**\n * The overlay that manages the popover\n * @internal\n */\n readonly overlay = signal<NgpOverlay<void> | null>(null);\n\n constructor() {\n this.state().registerPortal(this);\n }\n\n /** Cleanup the portal. */\n ngOnDestroy(): void {\n this.overlay()?.destroy();\n }\n\n /**\n * Attach the portal.\n * @internal\n */\n show(): Promise<void> {\n // Create the overlay if it doesn't exist yet\n if (!this.overlay()) {\n this.createOverlay();\n }\n\n // Show the overlay\n return this.overlay()!.show();\n }\n\n /**\n * Detach the portal.\n * @internal\n */\n async detach(): Promise<void> {\n this.overlay()?.hide();\n }\n\n /**\n * Create the overlay that will contain the dropdown\n */\n private createOverlay(): void {\n // Create config for the overlay\n const config: NgpOverlayConfig<void> = {\n content: this.templateRef,\n viewContainerRef: this.viewContainerRef,\n triggerElement: this.state().elementRef.nativeElement,\n injector: this.injector,\n placement: this.state().placement,\n closeOnOutsideClick: true,\n closeOnEscape: true,\n restoreFocus: false,\n scrollBehaviour: 'reposition',\n container: this.state().container(),\n };\n\n this.overlay.set(createOverlay(config));\n }\n}\n","import { InjectionToken, Provider, inject } from '@angular/core';\nimport { type NgpComboboxPlacement } from '../combobox/combobox';\n\nexport interface NgpComboboxConfig {\n /**\n * The default placement for the combobox dropdown.\n * @default 'bottom'\n */\n placement: NgpComboboxPlacement;\n\n /**\n * The container element or selector for the combobox dropdown.\n * This can be used to control where the dropdown is rendered in the DOM.\n * @default 'body'\n */\n container: HTMLElement | string | null;\n}\n\nexport const defaultComboboxConfig: NgpComboboxConfig = {\n placement: 'bottom',\n container: 'body',\n};\n\nexport const NgpComboboxConfigToken = new InjectionToken<NgpComboboxConfig>(\n 'NgpComboboxConfigToken',\n);\n\n/**\n * Provide the default Combobox configuration\n * @param config The Combobox configuration\n * @returns The provider\n */\nexport function provideComboboxConfig(config: Partial<NgpComboboxConfig>): Provider[] {\n return [\n {\n provide: NgpComboboxConfigToken,\n useValue: { ...defaultComboboxConfig, ...config },\n },\n ];\n}\n\n/**\n * Inject the Combobox configuration\n * @returns The global Combobox configuration\n */\nexport function injectComboboxConfig(): NgpComboboxConfig {\n return inject(NgpComboboxConfigToken, { optional: true }) ?? defaultComboboxConfig;\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n computed,\n Directive,\n HostListener,\n inject,\n Injector,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { activeDescendantManager } from 'ng-primitives/a11y';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { domSort, injectElementRef } from 'ng-primitives/internal';\nimport type { NgpComboboxButton } from '../combobox-button/combobox-button';\nimport type { NgpComboboxDropdown } from '../combobox-dropdown/combobox-dropdown';\nimport type { NgpComboboxInput } from '../combobox-input/combobox-input';\nimport { NgpComboboxOption } from '../combobox-option/combobox-option';\nimport type { NgpComboboxPortal } from '../combobox-portal/combobox-portal';\nimport { injectComboboxConfig } from '../config/combobox-config';\nimport { areAllOptionsSelected } from '../utils';\nimport { comboboxState, provideComboboxState } from './combobox-state';\n\n/**\n * Ideally we would use a generic type here, unfortunately, unlike in React,\n * we cannot infer the type based on another input. For example, if multiple\n * is true, we cannot infer that the value is an array of T. Using a union\n * type is not ideal either because it requires the user to handle multiple cases.\n * Using a generic also isn't ideal because we need to use T as both an array and\n * a single value.\n *\n * Any seems to be used by Angular Material, ng-select, and other libraries\n * so we will use it here as well.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype T = any;\n\n@Directive({\n selector: '[ngpCombobox]',\n exportAs: 'ngpCombobox',\n providers: [provideComboboxState()],\n host: {\n '[attr.tabindex]': 'input() ? -1 : (state.disabled() ? -1 : 0)',\n '[attr.data-open]': 'open() ? \"\" : undefined',\n '[attr.data-disabled]': 'state.disabled() ? \"\" : undefined',\n '[attr.data-multiple]': 'state.multiple() ? \"\" : undefined',\n '[attr.data-invalid]': 'controlStatus()?.invalid ? \"\" : undefined',\n '[attr.data-valid]': 'controlStatus()?.valid ? \"\" : undefined',\n '[attr.data-touched]': 'controlStatus()?.touched ? \"\" : undefined',\n '[attr.data-pristine]': 'controlStatus()?.pristine ? \"\" : undefined',\n '[attr.data-dirty]': 'controlStatus()?.dirty ? \"\" : undefined',\n '[attr.data-pending]': 'controlStatus()?.pending ? \"\" : undefined',\n },\n})\nexport class NgpCombobox {\n /** Access the combobox configuration. */\n protected readonly config = injectComboboxConfig();\n\n /** @internal Access the combobox element. */\n readonly elementRef = injectElementRef();\n\n /** Access the injector. */\n protected readonly injector = inject(Injector);\n\n /** The value of the combobox. */\n readonly value = input<T>(undefined, {\n alias: 'ngpComboboxValue',\n });\n\n /** Event emitted when the value changes. */\n readonly valueChange = output<T>({\n alias: 'ngpComboboxValueChange',\n });\n\n /** Whether the combobox is multiple selection. */\n readonly multiple = input<boolean, BooleanInput>(false, {\n alias: 'ngpComboboxMultiple',\n transform: booleanAttribute,\n });\n\n /** Whether the combobox is disabled. */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpComboboxDisabled',\n transform: booleanAttribute,\n });\n\n /** Whether the combobox allows deselection in single selection mode. */\n readonly allowDeselect = input<boolean, BooleanInput>(false, {\n alias: 'ngpComboboxAllowDeselect',\n transform: booleanAttribute,\n });\n\n /** Emit when the dropdown open state changes. */\n readonly openChange = output<boolean>({\n alias: 'ngpComboboxOpenChange',\n });\n\n /** The comparator function used to compare options. */\n readonly compareWith = input<(a: T | undefined, b: T | undefined) => boolean>(Object.is, {\n alias: 'ngpComboboxCompareWith',\n });\n\n /** The position of the dropdown. */\n readonly placement = input<NgpComboboxPlacement>(this.config.placement, {\n alias: 'ngpComboboxDropdownPlacement',\n });\n\n /** The container for the dropdown. */\n readonly container = input<HTMLElement | string | null>(this.config.container, {\n alias: 'ngpComboboxDropdownContainer',\n });\n\n /**\n * A function that will scroll the active option into view. This can be overridden\n * for cases such as virtual scrolling where we cannot scroll the option directly because\n * it may not be rendered.\n */\n readonly scrollToOption = input<(index: number) => void>(undefined, {\n alias: 'ngpComboboxScrollToOption',\n });\n\n /**\n * Provide all the option values to the combobox. This is useful for virtual scrolling scenarios\n * where not all options are rendered in the DOM. This is not an alternative to adding the options\n * in the DOM, it is only to provide the combobox with the full list of options. This list should match\n * the order of the options as they would appear in the DOM.\n */\n readonly allOptions = input<T[]>(undefined, { alias: 'ngpComboboxOptions' });\n\n /**\n * Store the combobox input\n * @internal\n */\n readonly input = signal<NgpComboboxInput | undefined>(undefined);\n\n /**\n * Store the combobox button.\n * @internal\n */\n readonly button = signal<NgpComboboxButton | undefined>(undefined);\n\n /**\n * Store the combobox portal.\n * @internal\n */\n readonly portal = signal<NgpComboboxPortal | undefined>(undefined);\n\n /**\n * Store the combobox dropdown.\n * @internal\n */\n readonly dropdown = signal<NgpComboboxDropdown | undefined>(undefined);\n\n /**\n * Store the combobox options.\n * @internal\n */\n readonly options = signal<NgpComboboxOption[]>([]);\n\n /**\n * Access the overlay\n * @internal\n */\n readonly overlay = computed(() => this.portal()?.overlay());\n\n /**\n * The open state of the combobox.\n * @internal\n */\n readonly open = computed(() => this.overlay()?.isOpen() ?? false);\n\n /**\n * The options sorted by their index or DOM position.\n * @internal\n */\n readonly sortedOptions = computed(() =>\n domSort(\n this.options(),\n option => option.elementRef.nativeElement,\n option => option.index(),\n ),\n );\n\n /**\n * The active key descendant manager.\n * @internal\n */\n readonly activeDescendantManager = activeDescendantManager({\n // we must wrap the signal in a computed to ensure it is not used before it is defined\n disabled: computed(() => this.state.disabled()),\n wrap: signal(true),\n count: computed(() => this.state.allOptions()?.length ?? this.options().length),\n getItemId: index => this.getOptionAtIndex(index)?.id(),\n isItemDisabled: index => this.getOptionAtIndex(index)?.disabled() ?? false,\n scrollIntoView: index => {\n const isPositioned = this.portal()?.overlay()?.isPositioned() ?? false;\n\n if (!isPositioned || index === -1) {\n return;\n }\n\n this.scrollTo(index);\n },\n });\n\n /** The control status */\n protected readonly controlStatus = computed(() => this.input()?.controlStatus());\n\n /** The state of the combobox. */\n protected readonly state = comboboxState<NgpCombobox>(this);\n\n constructor() {\n ngpInteractions({\n focus: true,\n focusWithin: true,\n hover: true,\n press: true,\n disabled: this.state.disabled,\n });\n }\n\n /**\n * Open the dropdown.\n * @internal\n */\n async openDropdown(): Promise<void> {\n if (this.state.disabled() || this.open()) {\n return;\n }\n\n this.openChange.emit(true);\n await this.portal()?.show();\n\n let selectedOptionIdx = -1;\n\n // if we have been provided with allOptions, we need to find the selected option(s) from that list\n if (this.state.allOptions()) {\n selectedOptionIdx = this.state\n .allOptions()!\n .findIndex(option => this.isOptionSelected(option));\n }\n\n // if we don't have allOptions, find the selected option(s) from the registered options\n if (selectedOptionIdx === -1) {\n // if there is a selected option(s), set the active descendant to the first selected option\n selectedOptionIdx = this.sortedOptions().findIndex(option =>\n this.isOptionSelected(option.value()),\n );\n }\n\n // if after checking there is a selected option, set the active descendant to the first option\n if (selectedOptionIdx !== -1) {\n // scroll to and activate the selected option\n this.scrollTo(selectedOptionIdx);\n this.activeDescendantManager.activateByIndex(selectedOptionIdx);\n return;\n }\n\n // activate the selected option or the first option\n this.activeDescendantManager.first();\n }\n\n /**\n * Close the dropdown.\n * @internal\n */\n closeDropdown(): void {\n if (!this.open()) {\n return;\n }\n\n this.openChange.emit(false);\n this.portal()?.detach();\n\n // clear the active descendant\n this.activeDescendantManager.reset();\n }\n\n /**\n * Toggle the dropdown.\n * @internal\n */\n async toggleDropdown(): Promise<void> {\n if (this.open()) {\n this.closeDropdown();\n } else {\n await this.openDropdown();\n }\n }\n\n /**\n * Select an option.\n * @param option The option to select.\n * @internal\n */\n selectOption(option: NgpComboboxOption | undefined): void {\n if (this.state.disabled()) {\n return;\n }\n\n if (!option) {\n this.state.value.set(undefined);\n this.closeDropdown();\n return;\n }\n\n const optionValue = option.value();\n\n // if the option has no associated value, do nothing\n if (optionValue === undefined) {\n return;\n }\n\n // Handle select all functionality - only works in multiple selection mode\n if (optionValue === 'all') {\n if (!this.state.multiple()) {\n return; // Do nothing in single selection mode\n }\n\n // Get currently visible regular options (respects filtering)\n const regularOptions = this.sortedOptions().filter(\n opt => opt.value() !== 'all' && opt.value() !== undefined,\n );\n const allValues = regularOptions.map(opt => opt.value());\n\n this.state.value.set(allValues as T);\n this.valueChange.emit(allValues as T);\n return;\n }\n\n if (this.state.multiple()) {\n // if the option is already selected, do nothing\n if (this.isOptionSelected(optionValue)) {\n return;\n }\n\n const value = [...(this.state.value() as T[]), optionValue as T];\n\n // add the option to the value\n this.state.value.set(value as T);\n this.valueChange.emit(value as T);\n } else {\n this.state.value.set(optionValue as T);\n this.valueChange.emit(optionValue as T);\n\n // close the dropdown on single selection\n this.closeDropdown();\n }\n }\n\n /**\n * Deselect an option.\n * @param option The option to deselect.\n * @internal\n */\n deselectOption(option: NgpComboboxOption): void {\n const optionValue = option.value();\n\n // Options without values cannot be deselected (and should never be selected).\n if (optionValue === undefined) {\n return;\n }\n\n // if the combobox is disabled or the option is not selected, do nothing\n if (this.state.disabled() || !this.isOptionSelected(optionValue)) {\n return;\n }\n\n // in single selection mode, only allow deselecting if allowDeselect is true\n if (!this.state.multiple() && !this.state.allowDeselect()) {\n return;\n }\n\n // Handle select all for deselect all functionality - only works in multiple selection mode\n if (optionValue === 'all') {\n if (!this.state.multiple()) {\n return; // Do nothing in single selection mode\n }\n\n this.state.value.set([] as T);\n this.valueChange.emit([] as T);\n return;\n }\n\n if (this.state.multiple()) {\n const values = (this.state.value() as T[]) ?? [];\n const newValue = values.filter(v => !this.state.compareWith()(v, optionValue as T));\n\n // remove the option from the value\n this.state.value.set(newValue as T);\n this.valueChange.emit(newValue as T);\n } else {\n // in single selection mode with allowDeselect enabled, set value to undefined\n this.state.value.set(undefined);\n this.valueChange.emit(undefined);\n }\n }\n\n /**\n * Toggle the selection of an option.\n * @param id The id of the option to toggle.\n * @internal\n */\n toggleOption(id: string): void {\n if (this.state.disabled()) {\n return;\n }\n\n const option = this.sortedOptions().find(opt => opt.id() === id);\n\n if (!option) {\n return;\n }\n\n const optionValue = option.value();\n\n // Options without values cannot be toggled.\n if (optionValue === undefined) {\n return;\n }\n\n // Handle select all for select/deselect all functionality - only works in multiple selection mode\n if (optionValue === 'all') {\n if (!this.state.multiple()) {\n return; // Do nothing in single selection mode\n }\n\n if (this.isOptionSelected(optionValue)) {\n this.deselectOption(option);\n } else {\n this.selectOption(option);\n }\n return;\n }\n\n if (this.state.multiple()) {\n // In multiple selection mode, always allow toggling\n if (this.isOptionSelected(optionValue)) {\n this.deselectOption(option);\n } else {\n this.selectOption(option);\n }\n } else {\n // In single selection mode, check if deselection is allowed\n if (this.isOptionSelected(optionValue) && this.state.allowDeselect()) {\n // Deselect the option by setting value to undefined\n this.state.value.set(undefined);\n this.valueChange.emit(undefined);\n } else {\n // Select the option (works even if already selected to update the input)\n this.selectOption(option);\n }\n }\n }\n\n /**\n * Determine if an option is selected.\n * @param option The option to check.\n * @internal\n */\n isOptionSelected(option: T): boolean {\n if (this.state.disabled()) {\n return false;\n }\n\n // Handle both NgpComboboxOption and T types\n const optionValue = isOption(option) ? option.value() : (option as T);\n const value = this.state.value();\n\n // Only treat `undefined` as \"no value\" (allow '', 0, false).\n if (optionValue === undefined) {\n return false;\n }\n\n // Handle select all functionality - only works in multiple selection mode\n if (optionValue === 'all') {\n if (!this.state.multiple()) {\n return false; // Never selected in single selection mode\n }\n\n const selectedValues = Array.isArray(value) ? value : [];\n return areAllOptionsSelected(this.sortedOptions(), selectedValues, this.state.compareWith());\n }\n\n // Only treat `undefined` as \"no selection\" (allow '', 0, false).\n if (value === undefined) {\n return false;\n }\n\n if (this.state.multiple()) {\n return Array.isArray(value) && value.some(v => this.state.compareWith()(optionValue, v));\n }\n\n return this.state.compareWith()(optionValue, value);\n }\n\n /**\n * Activate the next option in the list if there is one.\n * If there is no option currently active, activate the selected option or the first option.\n * @internal\n */\n activateNextOption(): void {\n if (this.state.disabled()) {\n return;\n }\n\n const options = this.sortedOptions();\n\n // if there are no options, do nothing\n if (options.length === 0) {\n return;\n }\n\n // if there is no active option, activate the first option\n if (this.activeDescendantManager.index() === -1) {\n const selectedOption = options.findIndex(option => this.isOptionSelected(option.value()));\n\n // if there is a selected option(s), set the active descendant to the first selected option\n const targetOption = selectedOption !== -1 ? selectedOption : 0;\n\n this.activeDescendantManager.activateByIndex(targetOption, { origin: 'keyboard' });\n return;\n }\n\n // otherwise activate the next option\n this.activeDescendantManager.next({ origin: 'keyboard' });\n }\n\n /**\n * Activate the previous option in the list if there is one.\n * @internal\n */\n activatePreviousOption(): void {\n if (this.state.disabled()) {\n return;\n }\n const options = this.sortedOptions();\n // if there are no options, do nothing\n if (options.length === 0) {\n return;\n }\n // if there is no active option, activate the last option\n if (this.activeDescendantManager.index() === -1) {\n const selectedOption = options.findIndex(option => this.isOptionSelected(option.value()));\n // if there is a selected option(s), set the active descendant to the first selected option\n const targetOption = selectedOption !== -1 ? selectedOption : options.length - 1;\n this.activeDescendantManager.activateByIndex(targetOption, { origin: 'keyboard' });\n return;\n }\n // otherwise activate the previous option\n this.activeDescendantManager.previous({ origin: 'keyboard' });\n }\n\n /**\n * Register the dropdown portal with the combobox.\n * @param portal The dropdown portal.\n * @internal\n */\n registerPortal(portal: NgpComboboxPortal): void {\n this.portal.set(portal);\n }\n\n /**\n * Register the combobox input with the combobox.\n * @param input The combobox input.\n * @internal\n */\n registerInput(input: NgpComboboxInput): void {\n this.input.set(input);\n }\n\n /**\n * Register the combobox button with the combobox.\n * @param button The combobox button.\n * @internal\n */\n registerButton(button: NgpComboboxButton): void {\n this.button.set(button);\n }\n\n /**\n * Register the dropdown with the combobox.\n * @param dropdown The dropdown to register.\n * @internal\n */\n registerDropdown(dropdown: NgpComboboxDropdown): void {\n this.dropdown.set(dropdown);\n }\n\n /**\n * Register an option with the combobox.\n * @param option The option to register.\n * @internal\n */\n registerOption(option: NgpComboboxOption): void {\n this.options.update(options => [...options, option]);\n }\n\n /**\n * Unregister an option from the combobox.\n * @param option The option to unregister.\n * @internal\n */\n unregisterOption(option: NgpComboboxOption): void {\n this.options.update(options => options.filter(o => o !== option));\n }\n\n /**\n * Focus the combobox.\n * When an input element is present, it will be focused.\n * Otherwise, the combobox element itself will be focused.\n * This enables keyboard navigation for comboboxes without input elements.\n * @internal\n */\n focus(): void {\n if (this.input()) {\n this.input()?.focus();\n } else {\n this.elementRef.nativeElement.focus();\n }\n }\n\n /**\n * Handle keydown events for keyboard navigation and accessibility.\n * Supports:\n * - Arrow Down: Open dropdown or navigate to next option\n * - Arrow Up: Open dropdown or navigate to previous option\n * - Home: Navigate to first option\n * - End: Navigate to last option\n * - Enter: Select the currently active option\n * - Escape: Close the dropdown\n * @param event - The keyboard event\n * @internal\n */\n @HostListener('keydown', ['$event'])\n protected handleKeydown(event: KeyboardEvent): void {\n // If the event originated from the input element, let the input handle it\n if (this.input() && event.target === this.input()?.elementRef.nativeElement) {\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n if (this.open()) {\n this.activateNextOption();\n } else {\n this.openDropdown();\n }\n event.preventDefault();\n break;\n case 'ArrowUp':\n if (this.open()) {\n this.activatePreviousOption();\n } else {\n this.openDropdown();\n // Use setTimeout to ensure dropdown is rendered before selecting last item\n setTimeout(() => this.activeDescendantManager.last());\n }\n event.preventDefault();\n break;\n case 'Home':\n if (this.open()) {\n this.activeDescendantManager.first({ origin: 'keyboard' });\n }\n event.preventDefault();\n break;\n case 'End':\n if (this.open()) {\n this.activeDescendantManager.last({ origin: 'keyboard' });\n }\n event.preventDefault();\n break;\n case 'Enter':\n if (this.open()) {\n const activeId = this.activeDescendantManager.id();\n\n if (activeId) {\n this.toggleOption(activeId);\n }\n }\n event.preventDefault();\n break;\n case 'Escape':\n if (this.open()) {\n this.closeDropdown();\n }\n event.preventDefault();\n break;\n case ' ':\n if (!this.input()) {\n this.toggleDropdown();\n event.preventDefault();\n }\n break;\n }\n }\n\n /**\n * Handle blur events to manage dropdown closing behavior.\n * The dropdown will remain open if focus moves to:\n * - The dropdown itself\n * - The combobox button\n * - The combobox input\n * Otherwise, the dropdown will be closed.\n * @param event - The focus event\n * @internal\n */\n @HostListener('blur', ['$event'])\n protected onBlur(event: FocusEvent): void {\n const relatedTarget = event.relatedTarget as HTMLElement;\n\n // if the blur was caused by focus moving to the dropdown, don't close\n if (relatedTarget && this.dropdown()?.elementRef.nativeElement.contains(relatedTarget)) {\n return;\n }\n\n // if the blur was caused by focus moving to the button, don't close\n if (relatedTarget && this.button()?.elementRef.nativeElement.contains(relatedTarget)) {\n return;\n }\n\n // if the blur was caused by focus moving to the input, don't close\n if (relatedTarget && this.input()?.elementRef.nativeElement === relatedTarget) {\n return;\n }\n\n this.closeDropdown();\n }\n\n private scrollTo(index: number): void {\n const scrollToOption = this.state.scrollToOption();\n\n if (scrollToOption) {\n scrollToOption(index);\n return;\n }\n\n const option = this.getOptionAtIndex(index);\n if (option) {\n option.scrollIntoView();\n }\n }\n\n private getOptionAtIndex(index: number): NgpComboboxOption | undefined {\n // if the option has an index, use that to get the option because this is required for virtual scrolling scenarios\n const optionIndex = this.options().findIndex(opt => opt.index() === index);\n\n if (optionIndex !== -1) {\n return this.options()[optionIndex];\n }\n\n return this.sortedOptions()[index];\n }\n}\n\nexport type NgpComboboxPlacement =\n | 'top'\n | 'right'\n | 'bottom'\n | 'left'\n | 'top-start'\n | 'top-end'\n | 'right-start'\n | 'right-end'\n | 'bottom-start'\n | 'bottom-end'\n | 'left-start'\n | 'left-end';\n\nfunction isOption(value: any): value is NgpComboboxOption {\n return (\n value && typeof value === 'object' && 'value' in value && typeof value.value === 'function'\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -153,15 +153,12 @@ function injectDialogRef() {
|
|
|
153
153
|
|
|
154
154
|
class NgpDialogOverlay {
|
|
155
155
|
constructor() {
|
|
156
|
-
/** Access the global configuration */
|
|
157
|
-
this.config = injectDialogConfig();
|
|
158
|
-
/** Access the dialog ref. */
|
|
159
156
|
this.dialogRef = injectDialogRef();
|
|
160
157
|
/**
|
|
161
158
|
* Whether the dialog should close on backdrop click.
|
|
162
159
|
* @default `true`
|
|
163
160
|
*/
|
|
164
|
-
this.closeOnClick = input(this.config.closeOnClick, ...(ngDevMode ? [{ debugName: "closeOnClick", alias: 'ngpDialogOverlayCloseOnClick',
|
|
161
|
+
this.closeOnClick = input(this.dialogRef.config.closeOnClick, ...(ngDevMode ? [{ debugName: "closeOnClick", alias: 'ngpDialogOverlayCloseOnClick',
|
|
165
162
|
transform: booleanAttribute }] : [{
|
|
166
163
|
alias: 'ngpDialogOverlayCloseOnClick',
|
|
167
164
|
transform: booleanAttribute,
|