@fundamental-ngx/core 0.65.0-rc.30 → 0.65.0-rc.31
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.
|
@@ -60,6 +60,11 @@ class ComboboxMobileComponent extends MobileModeBase {
|
|
|
60
60
|
* List element, which will be rendered inside dialog.
|
|
61
61
|
*/
|
|
62
62
|
this.childContent = null;
|
|
63
|
+
/** @hidden */
|
|
64
|
+
this._handlingDialogAction = false;
|
|
65
|
+
/** @hidden */
|
|
66
|
+
this._dismissedByAction = false;
|
|
67
|
+
this._component.setMobileModeConfig(this.mobileConfig);
|
|
63
68
|
}
|
|
64
69
|
/** @hidden */
|
|
65
70
|
ngOnInit() {
|
|
@@ -67,22 +72,29 @@ class ComboboxMobileComponent extends MobileModeBase {
|
|
|
67
72
|
}
|
|
68
73
|
/** @hidden */
|
|
69
74
|
handleDismiss() {
|
|
70
|
-
this.
|
|
71
|
-
this._component.dialogDismiss(
|
|
75
|
+
this._handlingDialogAction = true;
|
|
76
|
+
this._component.dialogDismiss();
|
|
77
|
+
this._dismissedByAction = true;
|
|
78
|
+
this._dismissDialog();
|
|
79
|
+
this._handlingDialogAction = false;
|
|
72
80
|
}
|
|
73
81
|
/** @hidden */
|
|
74
82
|
handleApprove() {
|
|
75
|
-
this.
|
|
83
|
+
this._handlingDialogAction = true;
|
|
76
84
|
this._component.dialogApprove();
|
|
85
|
+
this._closeDialog();
|
|
86
|
+
this._handlingDialogAction = false;
|
|
77
87
|
}
|
|
78
88
|
/** @hidden */
|
|
79
89
|
_toggleDialog(open) {
|
|
80
90
|
if (open) {
|
|
81
|
-
this._selectedBackup = this._component.getValue();
|
|
82
91
|
if (!this._dialogService.hasOpenDialogs()) {
|
|
83
92
|
this._open();
|
|
84
93
|
}
|
|
85
94
|
}
|
|
95
|
+
else if (!this._handlingDialogAction) {
|
|
96
|
+
this._closeDialog();
|
|
97
|
+
}
|
|
86
98
|
}
|
|
87
99
|
/** @hidden */
|
|
88
100
|
_listenOnMultiInputOpenChange() {
|
|
@@ -92,8 +104,10 @@ class ComboboxMobileComponent extends MobileModeBase {
|
|
|
92
104
|
}
|
|
93
105
|
/** @hidden */
|
|
94
106
|
_open() {
|
|
107
|
+
this._dismissedByAction = false;
|
|
95
108
|
this.dialogRef = this._dialogService.open(this.dialogTemplate, {
|
|
96
109
|
mobile: true,
|
|
110
|
+
focusTrapped: true,
|
|
97
111
|
...this.dialogConfig,
|
|
98
112
|
backdropClickCloseable: false,
|
|
99
113
|
container: this._elementRef.nativeElement,
|
|
@@ -101,15 +115,31 @@ class ComboboxMobileComponent extends MobileModeBase {
|
|
|
101
115
|
});
|
|
102
116
|
this._focusInputElementOnceOpened();
|
|
103
117
|
const refSub = this.dialogRef.afterClosed.subscribe({
|
|
104
|
-
error: (
|
|
105
|
-
if (
|
|
106
|
-
this._component.dialogDismiss(
|
|
107
|
-
refSub.unsubscribe();
|
|
118
|
+
error: () => {
|
|
119
|
+
if (this.dialogRef.status() === 'dismissed' && !this._dismissedByAction) {
|
|
120
|
+
this._component.dialogDismiss();
|
|
108
121
|
}
|
|
122
|
+
refSub.unsubscribe();
|
|
109
123
|
}
|
|
110
124
|
});
|
|
111
125
|
}
|
|
112
126
|
/** @hidden */
|
|
127
|
+
_closeDialog() {
|
|
128
|
+
if (this._canCloseDialog()) {
|
|
129
|
+
this.dialogRef.close();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/** @hidden */
|
|
133
|
+
_dismissDialog() {
|
|
134
|
+
if (this._canCloseDialog()) {
|
|
135
|
+
this.dialogRef.dismiss();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/** @hidden */
|
|
139
|
+
_canCloseDialog() {
|
|
140
|
+
return (this.dialogRef?.isOpen() || this.dialogRef?.status() === 'pending') && !this.dialogRef.isClosed();
|
|
141
|
+
}
|
|
142
|
+
/** @hidden */
|
|
113
143
|
_focusInputElementOnceOpened() {
|
|
114
144
|
this.dialogRef.afterLoaded
|
|
115
145
|
.pipe(observeOn(asyncScheduler), // making the listener async
|
|
@@ -127,7 +157,7 @@ class ComboboxMobileComponent extends MobileModeBase {
|
|
|
127
157
|
});
|
|
128
158
|
}
|
|
129
159
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ComboboxMobileComponent, deps: [{ token: COMBOBOX_COMPONENT }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
130
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: ComboboxMobileComponent, isStandalone: true, selector: "fd-combobox-mobile", viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 fd-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button title=\"Close\" fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n }\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (
|
|
160
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: ComboboxMobileComponent, isStandalone: true, selector: "fd-combobox-mobile", viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 fd-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button title=\"Close\" fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n }\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n @if (mobileConfig.instruction) {\n <p data-dialog-instruction>{{ mobileConfig.instruction }}</p>\n }\n <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (_component.hasMobileApproveAction()) {\n <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"handleApprove()\">\n </fd-button-bar>\n }\n @if (mobileConfig.cancelButtonText) {\n <fd-button-bar fdkInitialFocus [label]=\"mobileConfig.cancelButtonText!\" (click)=\"handleDismiss()\">\n </fd-button-bar>\n }\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n", dependencies: [{ kind: "directive", type: TemplateDirective, selector: "[fdkTemplate]", inputs: ["fdkTemplate"] }, { kind: "directive", type: BarMiddleDirective, selector: "[fd-bar-middle]", inputs: ["stackContentsVertically"] }, { kind: "directive", type: BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "component", type: DialogHeaderComponent, selector: "fd-dialog-header", inputs: ["inShellbar"] }, { kind: "component", type: DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title", "ariaLabel"] }, { kind: "component", type: DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: DialogBodyComponent, selector: "fd-dialog-body", inputs: ["disablePaddings"] }, { kind: "component", type: DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["twoLineClamp", "headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: InitialFocusDirective, selector: "[fdkInitialFocus]", inputs: ["fdkInitialFocus", "enabled", "focusLastElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
131
161
|
}
|
|
132
162
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ComboboxMobileComponent, decorators: [{
|
|
133
163
|
type: Component,
|
|
@@ -146,7 +176,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
146
176
|
TemplateDirective,
|
|
147
177
|
NgTemplateOutlet,
|
|
148
178
|
InitialFocusDirective
|
|
149
|
-
], template: "<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 fd-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button title=\"Close\" fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n }\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (
|
|
179
|
+
], template: "<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 fd-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button title=\"Close\" fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n }\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n @if (mobileConfig.instruction) {\n <p data-dialog-instruction>{{ mobileConfig.instruction }}</p>\n }\n <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (_component.hasMobileApproveAction()) {\n <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"handleApprove()\">\n </fd-button-bar>\n }\n @if (mobileConfig.cancelButtonText) {\n <fd-button-bar fdkInitialFocus [label]=\"mobileConfig.cancelButtonText!\" (click)=\"handleDismiss()\">\n </fd-button-bar>\n }\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n" }]
|
|
150
180
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
151
181
|
type: Inject,
|
|
152
182
|
args: [COMBOBOX_COMPONENT]
|
|
@@ -355,7 +385,7 @@ class ComboboxComponent {
|
|
|
355
385
|
fromEvent(document, 'mousedown')
|
|
356
386
|
.pipe(takeUntilDestroyed(this._destroyRef))
|
|
357
387
|
.subscribe((event) => {
|
|
358
|
-
if (!this.closeOnOutsideClick) {
|
|
388
|
+
if (this.mobile || !this.closeOnOutsideClick) {
|
|
359
389
|
return;
|
|
360
390
|
}
|
|
361
391
|
const target = event.target;
|
|
@@ -469,15 +499,35 @@ class ComboboxComponent {
|
|
|
469
499
|
this.itemClicked.emit({ item: value, index });
|
|
470
500
|
}
|
|
471
501
|
}
|
|
472
|
-
/**
|
|
502
|
+
/**
|
|
503
|
+
* @hidden
|
|
504
|
+
* Receives the resolved mobile configuration from the mobile wrapper.
|
|
505
|
+
*/
|
|
506
|
+
setMobileModeConfig(config) {
|
|
507
|
+
this._mobileModeConfig = config;
|
|
508
|
+
}
|
|
509
|
+
/**
|
|
510
|
+
* @hidden
|
|
511
|
+
* Whether the resolved mobile configuration provides a usable Approve action.
|
|
512
|
+
*/
|
|
513
|
+
hasMobileApproveAction() {
|
|
514
|
+
return !!this._mobileModeConfig?.approveButtonText?.trim();
|
|
515
|
+
}
|
|
516
|
+
/** Handle dialog dismissing, restoring an unconfirmed mobile selection when needed. */
|
|
473
517
|
dialogDismiss(term) {
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
518
|
+
if (this._isMobileConfirmationMode()) {
|
|
519
|
+
this._restoreMobileConfirmationSnapshot();
|
|
520
|
+
}
|
|
521
|
+
else if (term !== undefined) {
|
|
522
|
+
this.inputText = this.displayFn(term);
|
|
523
|
+
this.setValue(term);
|
|
524
|
+
this._lastConfirmedValue = term;
|
|
525
|
+
}
|
|
477
526
|
this.isOpenChangeHandle(false);
|
|
478
527
|
}
|
|
479
528
|
/** Handle dialog approval, closes popover and propagates data changes. */
|
|
480
529
|
dialogApprove() {
|
|
530
|
+
this._confirmMobileSelection();
|
|
481
531
|
this._propagateChange();
|
|
482
532
|
this.isOpenChangeHandle(false);
|
|
483
533
|
}
|
|
@@ -534,6 +584,9 @@ class ComboboxComponent {
|
|
|
534
584
|
this.searchInputElement.nativeElement.value = this.inputTextValue;
|
|
535
585
|
}
|
|
536
586
|
this._lastConfirmedValue = valueToDisplay;
|
|
587
|
+
if (this.open && this._isMobileConfirmationMode()) {
|
|
588
|
+
this._captureMobileConfirmationSnapshot();
|
|
589
|
+
}
|
|
537
590
|
this._cdRef.markForCheck();
|
|
538
591
|
}
|
|
539
592
|
/** @hidden */
|
|
@@ -578,6 +631,9 @@ class ComboboxComponent {
|
|
|
578
631
|
if (this.mobile && !this.open) {
|
|
579
632
|
this._resetDisplayedValues();
|
|
580
633
|
}
|
|
634
|
+
if (isOpen && !this.open && this._isMobileConfirmationMode()) {
|
|
635
|
+
this._captureMobileConfirmationSnapshot();
|
|
636
|
+
}
|
|
581
637
|
if (this.open !== isOpen) {
|
|
582
638
|
this.open = isOpen;
|
|
583
639
|
this.openChange.emit(isOpen);
|
|
@@ -749,18 +805,21 @@ class ComboboxComponent {
|
|
|
749
805
|
}
|
|
750
806
|
/** @hidden */
|
|
751
807
|
_handleClickActions(term, shouldClosePopover = true) {
|
|
752
|
-
|
|
808
|
+
const confirmationMode = this._isMobileConfirmationMode();
|
|
809
|
+
if (!confirmationMode) {
|
|
810
|
+
this._lastConfirmedValue = term;
|
|
811
|
+
}
|
|
753
812
|
if (this.fillOnSelect) {
|
|
754
813
|
this.setValue(term);
|
|
755
814
|
const displayText = this.displayFn(term);
|
|
756
815
|
this.searchInputElement.nativeElement.value = displayText;
|
|
757
816
|
this.inputText = displayText;
|
|
758
817
|
this._cdRef.detectChanges();
|
|
759
|
-
if (this.mobile) {
|
|
818
|
+
if (this.mobile && !confirmationMode) {
|
|
760
819
|
this._propagateChange();
|
|
761
820
|
}
|
|
762
821
|
}
|
|
763
|
-
if (this.closeOnSelect && shouldClosePopover) {
|
|
822
|
+
if (!confirmationMode && this.closeOnSelect && shouldClosePopover) {
|
|
764
823
|
this.isOpenChangeHandle(false);
|
|
765
824
|
}
|
|
766
825
|
if (shouldClosePopover) {
|
|
@@ -772,6 +831,42 @@ class ComboboxComponent {
|
|
|
772
831
|
return this.dropdownValues.filter((value) => this.displayFn(value) === displayValue);
|
|
773
832
|
}
|
|
774
833
|
/** @hidden */
|
|
834
|
+
_isMobileConfirmationMode() {
|
|
835
|
+
return this.mobile && this.hasMobileApproveAction();
|
|
836
|
+
}
|
|
837
|
+
/** @hidden */
|
|
838
|
+
_captureMobileConfirmationSnapshot() {
|
|
839
|
+
this._mobileConfirmationSnapshot = {
|
|
840
|
+
inputText: this.inputTextValue,
|
|
841
|
+
nativeInputValue: this.searchInputElement?.nativeElement.value ?? this.inputTextValue,
|
|
842
|
+
value: this._value,
|
|
843
|
+
lastConfirmedValue: this._lastConfirmedValue
|
|
844
|
+
};
|
|
845
|
+
}
|
|
846
|
+
/** @hidden */
|
|
847
|
+
_restoreMobileConfirmationSnapshot() {
|
|
848
|
+
const snapshot = this._mobileConfirmationSnapshot;
|
|
849
|
+
if (!snapshot) {
|
|
850
|
+
return;
|
|
851
|
+
}
|
|
852
|
+
this.inputText = snapshot.inputText;
|
|
853
|
+
this._value = snapshot.value;
|
|
854
|
+
this._lastConfirmedValue = snapshot.lastConfirmedValue;
|
|
855
|
+
if (this.searchInputElement?.nativeElement) {
|
|
856
|
+
this.searchInputElement.nativeElement.value = snapshot.nativeInputValue;
|
|
857
|
+
}
|
|
858
|
+
this._cdRef.markForCheck();
|
|
859
|
+
}
|
|
860
|
+
/** @hidden */
|
|
861
|
+
_confirmMobileSelection() {
|
|
862
|
+
if (!this._isMobileConfirmationMode()) {
|
|
863
|
+
return;
|
|
864
|
+
}
|
|
865
|
+
const selectedValues = this._getOptionObjectByDisplayedValue(this.inputText);
|
|
866
|
+
this._lastConfirmedValue =
|
|
867
|
+
this.communicateByObject && selectedValues.length === 1 ? selectedValues[0] : this.inputText;
|
|
868
|
+
}
|
|
869
|
+
/** @hidden */
|
|
775
870
|
_refreshDisplayedValues() {
|
|
776
871
|
if (this.inputText) {
|
|
777
872
|
this.displayedValues = this.filterFn(this.dropdownValues, this.inputText);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-core-combobox.mjs","sources":["../../../../libs/core/combobox/combobox-item.directive.ts","../../../../libs/core/combobox/combobox.interface.ts","../../../../libs/core/combobox/combobox-mobile/combobox-mobile.component.ts","../../../../libs/core/combobox/combobox-mobile/combobox-mobile.component.html","../../../../libs/core/combobox/list-group.pipe.ts","../../../../libs/core/combobox/tokens.ts","../../../../libs/core/combobox/combobox.component.ts","../../../../libs/core/combobox/combobox.component.html","../../../../libs/core/combobox/combobox.module.ts","../../../../libs/core/combobox/fundamental-ngx-core-combobox.ts"],"sourcesContent":["import { Directive, Input, TemplateRef, inject } from '@angular/core';\nimport { ComboboxItemDirectiveContext } from './combobox.interface';\n\n@Directive({\n selector: '[fdComboboxItem]',\n standalone: true\n})\nexport class ComboboxItemDirective<T = unknown> {\n /**\n * @hidden\n * Used for type support.\n */\n @Input()\n fdComboboxItemUse: T;\n\n /** Template reference. */\n templateRef = inject(TemplateRef<ComboboxItemDirectiveContext<T>>);\n\n /** @hidden */\n static ngTemplateContextGuard<T>(\n dir: ComboboxItemDirective<T>,\n ctx: ComboboxItemDirectiveContext<T>\n ): ctx is ComboboxItemDirectiveContext<T> {\n return true;\n }\n}\n","import { EventEmitter, InjectionToken } from '@angular/core';\nimport { MobileMode } from '@fundamental-ngx/core/mobile-mode';\n\nexport const COMBOBOX_COMPONENT = new InjectionToken<string[]>('ComboboxInterface');\n\n/**\n * Combobox Interface to have typing and avoid circular dependency between\n * ComboboxComponent <==> ComboboxMobileComponent\n */\nexport interface ComboboxInterface extends MobileMode {\n inputText: string;\n openChange: EventEmitter<boolean>;\n inShellbar: boolean;\n\n getValue(): any;\n dialogApprove(): void;\n dialogDismiss(backup: string): void;\n}\n\nexport interface ComboboxItemDirectiveContext<T = unknown> {\n $implicit: T;\n inputText: string;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Inject,\n isDevMode,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { observeOn } from 'rxjs/operators';\n\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { InitialFocusDirective, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { BarElementDirective, BarMiddleDirective, ButtonBarComponent } from '@fundamental-ngx/core/bar';\n\nimport {\n DialogBodyComponent,\n DialogCloseButtonComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { asyncScheduler } from 'rxjs';\nimport { COMBOBOX_COMPONENT, ComboboxInterface } from '../combobox.interface';\n\n@Component({\n selector: 'fd-combobox-mobile',\n templateUrl: './combobox-mobile.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n TemplateDirective,\n BarMiddleDirective,\n BarElementDirective,\n ButtonBarComponent,\n DialogHeaderComponent,\n DialogCloseButtonComponent,\n DialogComponent,\n DialogBodyComponent,\n DialogFooterComponent,\n TitleComponent,\n TitleComponent,\n TemplateDirective,\n NgTemplateOutlet,\n InitialFocusDirective\n ]\n})\nexport class ComboboxMobileComponent extends MobileModeBase<ComboboxInterface> implements OnInit {\n /** @hidden */\n @ViewChild('dialogTemplate') dialogTemplate: TemplateRef<any>;\n\n /**\n * @hidden\n * For internal usage\n * Control element, which will be rendered inside dialog.\n * List element, which will be rendered inside dialog.\n */\n childContent: { listTemplate: TemplateRef<any>; controlTemplate: TemplateRef<any> } | null = null;\n\n /** @hidden */\n private _selectedBackup: string;\n\n /** @hidden */\n constructor(@Inject(COMBOBOX_COMPONENT) comboboxComponent: ComboboxInterface) {\n super(comboboxComponent, MobileModeControl.COMBOBOX);\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._listenOnMultiInputOpenChange();\n }\n\n /** @hidden */\n handleDismiss(): void {\n this.dialogRef.dismiss();\n this._component.dialogDismiss(this._selectedBackup);\n }\n\n /** @hidden */\n handleApprove(): void {\n this.dialogRef.close();\n this._component.dialogApprove();\n }\n\n /** @hidden */\n private _toggleDialog(open: boolean): void {\n if (open) {\n this._selectedBackup = this._component.getValue();\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n }\n\n /** @hidden */\n private _listenOnMultiInputOpenChange(): void {\n this._component.openChange\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((isOpen) => this._toggleDialog(isOpen));\n }\n\n /** @hidden */\n private _open(): void {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n ...this.dialogConfig,\n backdropClickCloseable: false,\n container: this._elementRef.nativeElement,\n disablePaddings: true\n });\n\n this._focusInputElementOnceOpened();\n\n const refSub = this.dialogRef.afterClosed.subscribe({\n error: (type) => {\n if (type === 'escape') {\n this._component.dialogDismiss(this._selectedBackup);\n refSub.unsubscribe();\n }\n }\n });\n }\n\n /** @hidden */\n private _focusInputElementOnceOpened(): void {\n this.dialogRef.afterLoaded\n .pipe(\n observeOn(asyncScheduler), // making the listener async\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(() => {\n try {\n const input = this._elementRef.nativeElement.querySelector('fd-input-group input[role=\"combobox\"]');\n input.focus();\n } catch (error) {\n if (isDevMode()) {\n console.error('Failed to focus combobox search input', error);\n }\n }\n });\n }\n}\n","<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 fd-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button title=\"Close\" fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n }\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (mobileConfig.approveButtonText) {\n <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"handleApprove()\">\n </fd-button-bar>\n }\n @if (mobileConfig.cancelButtonText) {\n <fd-button-bar fdkInitialFocus [label]=\"mobileConfig.cancelButtonText!\" (click)=\"handleDismiss()\">\n </fd-button-bar>\n }\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n","import { KeyValue } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\n\nexport type GroupFunction<T = any> = (items: T[]) => { [key: string]: T[] };\n\n@Pipe({\n name: 'listGroupPipe',\n standalone: true\n})\nexport class ListGroupPipe<T = any> implements PipeTransform {\n /** Group items */\n transform(items: any[], group: GroupFunction<T>): KeyValue<string, T[]>[] {\n return Object.entries(group(items)).map(([key, value]) => ({ key, value }));\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ComboboxInterface } from './combobox.interface';\n\nexport const FD_COMBOBOX_COMPONENT = new InjectionToken<ComboboxInterface>('FdComboboxComponent');\n","import {\n BACKSPACE,\n CONTROL,\n DOWN_ARROW,\n ENTER,\n ESCAPE,\n LEFT_ARROW,\n RIGHT_ARROW,\n SHIFT,\n SPACE,\n TAB,\n UP_ARROW\n} from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n forwardRef,\n inject,\n input\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription, fromEvent } from 'rxjs';\n\nimport {\n AutoCompleteEvent,\n DynamicComponentService,\n FocusEscapeDirection,\n FocusTrapService,\n KeyUtil,\n Nullable,\n TruncatedTitleDirective\n} from '@fundamental-ngx/cdk/utils';\nimport { FormItemControl, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { MenuKeyboardService } from '@fundamental-ngx/core/menu';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { PopoverComponent } from '@fundamental-ngx/core/popover';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\n\nimport { Overlay, RepositionScrollStrategy } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormStates, SingleDropdownValueControl } from '@fundamental-ngx/cdk/forms';\nimport { AutoCompleteDirective, DisplayFnPipe, SearchHighlightPipe } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport {\n ContentDensityModule,\n ContentDensityObserver,\n contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconComponent, IconFont } from '@fundamental-ngx/core/icon';\nimport { InputGroupComponent, InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\nimport {\n FD_LIST_MESSAGE_DIRECTIVE,\n ListComponent,\n ListItemComponent,\n ListMessageDirective,\n ListTitleDirective\n} from '@fundamental-ngx/core/list';\nimport { PopoverBodyComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { FdTranslatePipe, resolveTranslationSignal } from '@fundamental-ngx/i18n';\nimport { ComboboxItem } from './combobox-item';\nimport { ComboboxItemDirective } from './combobox-item.directive';\nimport { ComboboxMobileComponent } from './combobox-mobile/combobox-mobile.component';\nimport { COMBOBOX_COMPONENT, ComboboxInterface, ComboboxItemDirectiveContext } from './combobox.interface';\nimport { GroupFunction, ListGroupPipe } from './list-group.pipe';\nimport { FD_COMBOBOX_COMPONENT } from './tokens';\n\nlet comboboxUniqueId = 0;\n\n/**\n * Allows users to filter through results and select a value.\n *\n * Supports Angular Forms.\n * ```html\n * <fd-combobox\n * [(ngModel)]=\"searchTerm\"\n * [dropdownValues]=\"dropdownValues\"\n * placeholder=\"Type some text...\">\n * </fd-combobox>\n * ```\n */\n@Component({\n selector: 'fd-combobox',\n templateUrl: './combobox.component.html',\n styleUrl: './combobox.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ComboboxComponent),\n multi: true\n },\n registerFormItemControl(ComboboxComponent),\n MenuKeyboardService,\n DynamicComponentService,\n contentDensityObserverProviders(),\n {\n provide: FD_COMBOBOX_COMPONENT,\n useExisting: ComboboxComponent\n }\n ],\n host: {\n '[class.fd-combobox-custom-class]': 'true',\n '[class.fd-combobox-input]': 'true',\n '[class.fd-combobox-custom-class--mobile]': 'mobile',\n '[style.width]': 'width'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgTemplateOutlet,\n PopoverComponent,\n PopoverControlComponent,\n PopoverBodyComponent,\n ListComponent,\n ListItemComponent,\n ListTitleDirective,\n InputGroupComponent,\n InputGroupInputDirective,\n FormsModule,\n AutoCompleteDirective,\n ButtonComponent,\n IconComponent,\n ContentDensityModule,\n DisplayFnPipe,\n SearchHighlightPipe,\n FdTranslatePipe,\n ListGroupPipe,\n TruncatedTitleDirective\n ]\n})\nexport class ComboboxComponent<T = any>\n implements\n ComboboxInterface,\n SingleDropdownValueControl,\n ControlValueAccessor,\n OnInit,\n OnChanges,\n AfterViewInit,\n OnDestroy,\n FormItemControl\n{\n /** Id for the Combobox. */\n @Input()\n comboboxId = `fd-combobox-${comboboxUniqueId++}`;\n\n /** Id attribute for input element inside Combobox component */\n @Input()\n inputId = '';\n\n /** Aria-label for Combobox. */\n @Input()\n ariaLabel: Nullable<string>;\n\n /** Aria-Labelledby for element describing Combobox. */\n @Input()\n ariaLabelledBy: Nullable<string>;\n\n /** If it is mandatory field */\n @Input()\n required = false;\n\n /** Values to be filtered in the search input. */\n @Input()\n dropdownValues: T[] = [];\n\n /** Filter function. Accepts an array of objects and a search term as arguments\n * and returns a string. See search input examples for details. */\n @Input()\n filterFn = this._defaultFilter;\n\n /** Whether the search input is disabled. **/\n @Input()\n disabled: boolean;\n\n /** Placeholder of the search input. **/\n @Input()\n placeholder: string;\n\n /**\n * Whether the Combobox is a Search Field\n */\n @Input()\n isSearch = false;\n\n /** Icon to display in the right-side button. */\n @Input()\n glyph = 'navigation-down-arrow';\n\n /** Glyph font family */\n @Input()\n glyphFont: IconFont = FD_DEFAULT_ICON_FONT_FAMILY;\n\n /**\n * Whether to show the clear search term button\n */\n @Input()\n showClearButton = false;\n\n /**\n * The trigger events that will open/close the options popover.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n */\n @Input()\n triggers: string[] = [];\n\n /** Whether the combobox should close, when a click is performed outside its boundaries. True by default */\n @Input()\n closeOnOutsideClick = true;\n\n /**\n * Whether the combobox should open, when any key is pressed in input (except Escape, Space, Enter). True by default\n */\n @Input()\n openOnKeyboardEvent = true;\n\n /**\n * The state of the form control - applies css classes.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n @Input()\n state?: FormStates;\n\n /**\n * The template with which to display the individual listed items.\n * Use it by passing an ng-template with implicit content. See examples for more info.\n */\n @Input()\n itemTemplate: TemplateRef<ComboboxItemDirectiveContext<T>>;\n\n /**\n * Function used to handle grouping of items.\n */\n @Input()\n groupFn: Nullable<GroupFunction>;\n\n /** Max height of the popover. Any overflowing elements will be accessible through scrolling. */\n @Input()\n maxHeight = '50vh';\n\n /** Max width of the dropdown in pixels. Default is 640px (40rem). */\n @Input()\n dropDownMaxWidthPx = 640;\n\n /**\n * Whether the dropdown should have max width.\n * Set to true if you want the dropdown to take the width of the control.\n * Default is false */\n @Input()\n noDropDownMaxWidth = false;\n\n /** Custom width of the control. */\n @Input()\n width: Nullable<string>;\n\n /** Search function to execute when the Enter key is pressed on the main input. */\n @Input()\n searchFn: () => void;\n\n /** Whether the matching string should be highlighted during filtration. */\n @Input()\n highlighting = true;\n\n /** Whether the popover should close when a user selects a result. */\n @Input()\n closeOnSelect = true;\n\n /** Whether the input field should be populated with the result picked by the user. */\n @Input()\n fillOnSelect = true;\n\n /** Whether the autocomplete should be enabled; Enabled by default */\n @Input()\n autoComplete = true;\n\n /**\n * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * 'fit-content' will apply width needed to properly display items inside, independent of control.\n */\n @Input()\n fillControlMode: PopoverFillMode = 'at-least';\n\n /** Defines if combobox should behave same as dropdown. When it's enabled writing inside text input won't\n * trigger onChange function, until it matches one of displayed dropdown values. Also communicating with combobox\n * can be achieved only by objects with same type as dropdownValue */\n @Input()\n communicateByObject = false;\n\n /** Display function. Accepts an object of the same type as the\n * items passed to dropdownValues as argument, and outputs a string.\n * An arrow function can be used to access the *this* keyword in the calling component.\n * See search input examples for details. */\n @Input()\n displayFn = this._defaultDisplay;\n\n /**\n * Whether AddOn Button should be focusable\n * @default false\n */\n @Input()\n buttonFocusable = false;\n\n /**\n * Whether clear button should be focusable.\n * @default true\n */\n @Input()\n clearButtonFocusable = true;\n\n /** Whether the combobox is readonly. */\n @Input()\n readOnly = false;\n\n /** Whether the combobox should be built on mobile mode */\n @Input()\n mobile = false;\n\n /** Multi Input Mobile Configuration, it's applied only, when mobile is enabled */\n @Input()\n mobileConfig: MobileModeConfig;\n\n /** Whether to display the addon button. */\n @Input()\n showDropdownButton = true;\n\n /**\n * Whether to return results where the input matches the entire string. By default, only results that start\n * with the input search term will be returned.\n */\n @Input()\n includes = false;\n\n /**\n * The tooltip for the multi-input icon.\n */\n @Input()\n title: string;\n\n /** Whether list item options should be rendered as byline. */\n @Input()\n byline = false;\n\n /**\n * Action to perform when the user shifts focus away from the dropdown (Tab or click outside).\n * - `close` will close the dropdown preserving previously selected value.\n * - `closeAndSelect` will close the dropdown and select last focused dropdown item.\n */\n @Input()\n tabOutStrategy: 'close' | 'closeAndSelect' = 'closeAndSelect';\n\n /** Event emitted when an item is clicked. Use *$event* to retrieve it. */\n @Output()\n readonly itemClicked: EventEmitter<ComboboxItem> = new EventEmitter<ComboboxItem>();\n\n /** Event emitted, when the combobox's popover body is opened or closed */\n @Output()\n readonly openChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when the input text changes. */\n @Output()\n inputTextChange: EventEmitter<string> = new EventEmitter<string>();\n\n /** @hidden */\n @ViewChild(ListComponent)\n listComponent: ListComponent;\n\n /** @hidden */\n @ViewChild('searchInputElement')\n searchInputElement: ElementRef<HTMLInputElement>;\n\n /** @hidden */\n @ViewChild(PopoverComponent)\n popoverComponent: PopoverComponent;\n\n /** @hidden */\n @ViewChild(InputGroupComponent)\n inputGroup: InputGroupComponent;\n\n /** @hidden */\n @ContentChildren(FD_LIST_MESSAGE_DIRECTIVE)\n listMessages: QueryList<ListMessageDirective>;\n\n /** @hidden */\n @ViewChild('controlTemplate')\n controlTemplate: TemplateRef<HTMLElement>;\n\n /** @hidden */\n @ViewChild('listTemplate')\n listTemplate: TemplateRef<HTMLElement>;\n\n /** @hidden */\n @ContentChild(ComboboxItemDirective)\n private readonly _comboboxItemRenderer: ComboboxItemDirective;\n\n /** When communicateByObject is true, specifies which property of the selected object\n * should be used as the form control value. If not specified, the entire object is returned.\n * Example: if dropdownValues = [{ displayedValue: 'Apple', code: 'A1' }] and valueProperty = 'code',\n * the form control value will be 'A1' instead of the entire object.\n * @default null\n */\n public readonly valueProperty = input<string | null>(null);\n\n /** Whether the matching string should be highlighted after combobox value is selected. */\n filterHighlight = true;\n\n /** Keys, that won't trigger the popover's open state, when dispatched on search input */\n readonly nonOpeningKeys: number[] = [\n ESCAPE,\n ENTER,\n LEFT_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n UP_ARROW,\n CONTROL,\n TAB,\n SHIFT\n ];\n\n /** @hidden */\n readonly _repositionScrollStrategy: RepositionScrollStrategy;\n\n /** @hidden */\n readonly _defaultFontFamily = FD_DEFAULT_ICON_FONT_FAMILY;\n\n /** Whether the combobox is opened. */\n open = false;\n\n /**\n * Whether or not the input coup is in the shellbar. Only for internal use by combobox component\n * @hidden\n */\n inShellbar = false;\n\n /** @hidden */\n displayedValues: any[] = [];\n\n /** @hidden */\n inputTextValue = '';\n\n /** @hidden */\n clearInputBtnFocused = false;\n\n /** @hidden */\n _itemMousedown = false;\n\n /** @hidden */\n protected readonly _clearButtonTitle = resolveTranslationSignal('coreCombobox.clearButtonTitle');\n\n /** @hidden */\n get _customRenderer(): Nullable<TemplateRef<ComboboxItemDirectiveContext<T>>> {\n return this._comboboxItemRenderer?.templateRef || this.itemTemplate;\n }\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _value: any;\n\n /** Last value confirmed by an explicit selection (item click) or external writeValue. */\n private _lastConfirmedValue: any;\n\n private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor(\n private readonly _overlay: Overlay,\n private readonly _cdRef: ChangeDetectorRef,\n private readonly _injector: Injector,\n private readonly _viewContainerRef: ViewContainerRef,\n private readonly _dynamicComponentService: DynamicComponentService,\n private readonly _focusTrapService: FocusTrapService,\n readonly _contentDensityObserver: ContentDensityObserver\n ) {\n this._repositionScrollStrategy = this._overlay.scrollStrategies.reposition({ autoClose: true });\n\n fromEvent<MouseEvent>(document, 'mousedown')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((event) => {\n if (!this.closeOnOutsideClick) {\n return;\n }\n const target = event.target as Node;\n if (this._elementRef.nativeElement.contains(target)) {\n return;\n }\n const overlayPane = this._popoverOverlayPane();\n if (overlayPane?.contains(target)) {\n return;\n }\n if (!this._isInputDirtyVsModel()) {\n return;\n }\n this._close();\n });\n }\n\n /** @hidden */\n onChange: (value: any) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n /** @hidden */\n ngOnInit(): void {\n if (this.readOnly) {\n this.showDropdownButton = false;\n }\n this._refreshDisplayedValues();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (this.dropdownValues && (changes.dropdownValues || changes.searchTerm)) {\n this._refreshDisplayedValues();\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._addShellbarClass();\n\n if (this.mobile) {\n this._setUpMobileMode();\n }\n\n this._setupValueSynchronization();\n }\n\n /** @hidden */\n onInputKeydownHandler(event: KeyboardEvent | string): void {\n if (this.readOnly) {\n return;\n }\n\n if (typeof event === 'string') {\n if (event === 'fromPaste') {\n this.isOpenChangeHandle(true);\n }\n } else {\n if (KeyUtil.isKeyCode(event, TAB) && this.open) {\n this._close();\n return;\n }\n\n if (KeyUtil.isKeyCode(event, ENTER)) {\n if (this.searchFn) {\n this.searchFn();\n }\n } else if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n if (event.altKey) {\n this._resetDisplayedValues();\n this.isOpenChangeHandle(true);\n }\n if (this.open && this.listComponent) {\n this.listComponent.setItemActive(0);\n } else if (!this.open) {\n this._chooseOtherItem(1);\n }\n event.preventDefault();\n } else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this._chooseOtherItem(-1);\n event.preventDefault();\n } else if (\n this.openOnKeyboardEvent &&\n !event.ctrlKey &&\n !event.altKey &&\n !KeyUtil.isKeyCode(event, this.nonOpeningKeys)\n ) {\n this.isOpenChangeHandle(true);\n if (this.isEmptyValue && KeyUtil.isKeyType(event, 'control') && !KeyUtil.isKeyCode(event, BACKSPACE)) {\n this.listComponent.setItemActive(0);\n }\n }\n }\n }\n\n /** @hidden */\n onItemKeyDownHandler(event: KeyboardEvent, value: any): void {\n if (KeyUtil.isKeyCode(event, ENTER) || KeyUtil.isKeyCode(event, SPACE)) {\n this._itemMousedown = true;\n event.preventDefault();\n this.onMenuClickHandler(value);\n }\n }\n\n /** @hidden */\n onItemFocused(value: any): void {\n if (!this._itemMousedown && !this.mobile) {\n this.onMenuClickHandler(value, false);\n }\n this._itemMousedown = false;\n }\n\n /** @hidden */\n onMenuClickHandler(value: any, shouldClosePopover = true): void {\n if (value || value === 0) {\n const index: number = this.dropdownValues.findIndex((_value) => _value === value);\n this._handleClickActions(value, shouldClosePopover);\n this.filterHighlight = false;\n this.itemClicked.emit({ item: value, index });\n }\n }\n\n /** Handle dialog dismissing, closes popover and sets backup data. */\n dialogDismiss(term: any): void {\n this.inputText = this.displayFn(term);\n this.setValue(term);\n this._lastConfirmedValue = term;\n this.isOpenChangeHandle(false);\n }\n\n /** Handle dialog approval, closes popover and propagates data changes. */\n dialogApprove(): void {\n this._propagateChange();\n this.isOpenChangeHandle(false);\n }\n\n /** If true value empty */\n get isEmptyValue(): boolean {\n return !this.inputText || this.inputText?.trim().length === 0;\n }\n\n /** Input text of the input. */\n set inputText(value: string) {\n this.inputTextValue = value;\n if (!this.communicateByObject) {\n this._value = value;\n }\n this.inputTextChange.emit(value);\n if (!this.mobile) {\n this._propagateChange();\n }\n }\n get inputText(): string {\n return this.inputTextValue;\n }\n\n /** Get the glyph value based on whether the combobox is used as a search field or not. */\n get glyphValue(): string {\n return this.isSearch ? 'search' : this.glyph;\n }\n\n /** @hidden */\n _handleClearSearchTerm(): void {\n this.inputTextValue = '';\n this.inputTextChange.emit('');\n this.displayedValues = this.dropdownValues || [];\n this.searchInputElement.nativeElement.value = '';\n this.searchInputElement.nativeElement.focus();\n if (!this.mobile) {\n this._propagateChange();\n }\n this._cdRef.detectChanges();\n }\n\n /** @hidden */\n writeValue(value: any): void {\n // If valueProperty is specified, we need to find the object with matching property value\n let valueToDisplay = value;\n const valueProp = this.valueProperty();\n if (this.communicateByObject && valueProp && value !== null && value !== undefined) {\n // Find the object in dropdownValues that matches the given property value\n const matchingObject = this.dropdownValues?.find(\n (item) => item != null && (item as any)[valueProp] === value\n );\n if (matchingObject) {\n valueToDisplay = matchingObject;\n }\n }\n\n this.inputTextValue = this.displayFn(valueToDisplay);\n this.setValue(valueToDisplay);\n\n // Sync native input element value to ensure programmatic changes are reflected\n if (this.searchInputElement?.nativeElement) {\n this.searchInputElement.nativeElement.value = this.inputTextValue;\n }\n\n this._lastConfirmedValue = valueToDisplay;\n this._cdRef.markForCheck();\n }\n\n /** @hidden */\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n /** @hidden */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** Method passed to list component */\n handleListFocusEscape(direction: FocusEscapeDirection): void {\n if (direction === 'up') {\n this.searchInputElement.nativeElement.focus();\n }\n }\n\n /** @hidden */\n handleSearchTermChange(): void {\n this.displayedValues = this.filterFn(this.dropdownValues, this.inputText);\n this.popoverComponent?.refreshPosition();\n }\n\n /** @hidden */\n onPrimaryButtonClick(): void {\n // Prevent primary button click behaviour on mobiles\n if (this.mobile) {\n return;\n }\n\n if (this.searchFn) {\n this.searchFn();\n }\n this._resetDisplayedValues();\n this.isOpenChangeHandle(!this.open);\n this.searchInputElement.nativeElement.focus();\n this.filterHighlight = false;\n if (this.open) {\n this.searchInputElement?.nativeElement.focus();\n }\n }\n\n /** @hidden */\n isOpenChangeHandle(isOpen: boolean): void {\n /** Reset displayed values on every mobile open */\n if (this.mobile && !this.open) {\n this._resetDisplayedValues();\n }\n if (this.open !== isOpen) {\n this.open = isOpen;\n this.openChange.emit(isOpen);\n\n /** Allow combobox up and down arrows to work properly when combobox is inside a dialog with a trapped focus */\n if (this.open) {\n this._focusTrapService.pauseCurrentFocusTrap();\n } else {\n this._focusTrapService.unpauseCurrentFocusTrap();\n }\n }\n\n if (!this.open && !this.mobile) {\n this.handleBlur();\n this.searchInputElement.nativeElement.focus({ preventScroll: true });\n }\n\n this._cdRef.detectChanges();\n }\n\n /** @hidden */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._cdRef.detectChanges();\n }\n\n /** Method that handles complete event from auto complete directive, setting the new value, and closing popover */\n handleAutoComplete(event: AutoCompleteEvent): void {\n if (this.inputText !== event.term) {\n const matchingValues = this._getOptionObjectByDisplayedValue(event.term);\n if (matchingValues.length === 1) {\n this._lastConfirmedValue = matchingValues[0];\n }\n this.inputText = event.term;\n this.handleSearchTermChange();\n }\n if (event.forceClose && this.inputText) {\n this.isOpenChangeHandle(false);\n }\n }\n\n /** @hidden */\n handleBlur(): void {\n if (!this.open) {\n this.onTouched();\n this.handleAutoComplete({\n term: this.searchInputElement.nativeElement.value,\n forceClose: false\n });\n }\n }\n\n /** @hidden */\n clearInputBtnFocus(): void {\n this.clearInputBtnFocused = true;\n }\n\n /** @hidden */\n clearInputBtnBlur(): void {\n this.clearInputBtnFocused = false;\n }\n\n /** Current select value */\n getValue(): any {\n return this._value;\n }\n\n /** @hidden */\n _close(): void {\n const completedValue =\n this.tabOutStrategy === 'closeAndSelect' ? this._getCompletedAutocompleteValue() : undefined;\n\n if (completedValue !== undefined) {\n if (completedValue !== this._lastConfirmedValue) {\n this._commitCompletedAutocompleteValue(completedValue);\n }\n if (this.open) {\n this.isOpenChangeHandle(false);\n }\n this.searchInputElement.nativeElement.focus();\n return;\n }\n\n if (this.tabOutStrategy === 'closeAndSelect' && !this.communicateByObject) {\n this.searchInputElement.nativeElement.value = this.inputText;\n this.isOpenChangeHandle(false);\n this.searchInputElement.nativeElement.focus();\n return;\n }\n\n const revertText = this._lastConfirmedValue != null ? this.displayFn(this._lastConfirmedValue) : '';\n this.inputText = revertText;\n this.searchInputElement.nativeElement.value = revertText;\n if (this.tabOutStrategy === 'closeAndSelect') {\n const focusedItem = this.listComponent.getActiveItem();\n if (focusedItem && !this.inputText) {\n this._handleClickActions(focusedItem.value);\n return;\n }\n }\n this.isOpenChangeHandle(false);\n this.searchInputElement.nativeElement.focus();\n }\n\n /** @hidden */\n isSelected(term: any): boolean {\n const termValue = this.communicateByObject ? term : this.displayFn(term);\n return this.getValue() === termValue;\n }\n\n /** @hidden */\n private _popoverOverlayPane(): Element | null {\n // The combobox template sets additionalBodyClass=\"fd-popover-custom-list\" on the popover body.\n // That class is placed inside the .cdk-overlay-pane by the CDK overlay portal.\n // Walking up finds the pane, which contains all dropdown list content.\n return document.querySelector('.fd-popover-custom-list')?.closest('.cdk-overlay-pane') ?? null;\n }\n\n /** @hidden */\n private _isInputDirtyVsModel(): boolean {\n const expected = this._lastConfirmedValue != null ? this.displayFn(this._lastConfirmedValue) : '';\n return this.inputText !== expected;\n }\n\n /** @hidden */\n private _getCompletedAutocompleteValue(): any | undefined {\n const nativeInput = this.searchInputElement.nativeElement;\n const nativeValue = nativeInput.value;\n const hasSelectedSuffix =\n nativeValue !== this.inputText &&\n nativeInput.selectionStart === this.inputText.length &&\n nativeInput.selectionEnd === nativeValue.length;\n\n if (nativeValue !== this.inputText && !hasSelectedSuffix) {\n return;\n }\n\n const matchingValues = this._getOptionObjectByDisplayedValue(nativeValue);\n return matchingValues.length === 1 ? matchingValues[0] : undefined;\n }\n\n /** @hidden */\n private _commitCompletedAutocompleteValue(value: any): void {\n this._lastConfirmedValue = value;\n this.setValue(value);\n this.inputText = this.displayFn(value);\n this.searchInputElement.nativeElement.value = this.inputText;\n }\n\n /** Method that picks other value moved from current one by offset, called only when combobox is closed */\n private _chooseOtherItem(offset: number): void {\n const activeValue: any = this._getOptionObjectByDisplayedValue(this.inputTextValue)[0];\n const index: number = this.dropdownValues.findIndex((value) => value === activeValue);\n if (this.dropdownValues[index + offset]) {\n this.onMenuClickHandler(this.dropdownValues[index + offset]);\n }\n }\n\n /** Method that reset filtering for displayed values. It overrides displayed values by all possible dropdown values */\n private _resetDisplayedValues(): void {\n this.displayedValues = this.dropdownValues || [];\n }\n\n /** @hidden */\n private _addShellbarClass(): void {\n if (this.inShellbar) {\n this.searchInputElement.nativeElement.classList.add('fd-shellbar__input-group-input');\n if (this.inputGroup) {\n this.inputGroup.setInShellbar(true);\n }\n }\n }\n\n /** @hidden */\n private _defaultDisplay(str: any): string {\n return `${str}`;\n }\n\n /** @hidden */\n private _defaultFilter(contentArray: any[], searchTerm: any): any[] {\n this.filterHighlight = true;\n if (typeof searchTerm === 'string') {\n const searchLower = searchTerm.toLocaleLowerCase();\n return contentArray.filter((item) => {\n if (item) {\n const term = this.displayFn(item).toLocaleLowerCase();\n return this.includes ? term.includes(searchLower) : term.startsWith(searchLower);\n }\n });\n } else if (typeof searchTerm === 'object') {\n return contentArray.filter((item) => item === searchTerm);\n }\n return contentArray || [];\n }\n\n /** @hidden */\n private _handleClickActions(term: any, shouldClosePopover = true): void {\n this._lastConfirmedValue = term;\n if (this.fillOnSelect) {\n this.setValue(term);\n const displayText = this.displayFn(term);\n this.searchInputElement.nativeElement.value = displayText;\n this.inputText = displayText;\n this._cdRef.detectChanges();\n\n if (this.mobile) {\n this._propagateChange();\n }\n }\n if (this.closeOnSelect && shouldClosePopover) {\n this.isOpenChangeHandle(false);\n }\n if (shouldClosePopover) {\n this.handleSearchTermChange();\n }\n }\n\n /** @hidden */\n private _getOptionObjectByDisplayedValue(displayValue: string): any {\n return this.dropdownValues.filter((value) => this.displayFn(value) === displayValue);\n }\n\n /** @hidden */\n private _refreshDisplayedValues(): void {\n if (this.inputText) {\n this.displayedValues = this.filterFn(this.dropdownValues, this.inputText);\n } else {\n this.displayedValues = this.dropdownValues || [];\n }\n }\n\n /** @hidden */\n private _propagateChange(): void {\n if (this.communicateByObject) {\n const values = this._getOptionObjectByDisplayedValue(this.inputText);\n if (values.length === 1 && this.displayFn(values[0]) !== this.displayFn(this.getValue())) {\n this.setValue(values[0]);\n } else if (values.length === 0) {\n this.setValue(null);\n }\n this.onChange(this.getValue());\n } else {\n this.onChange(this.inputText);\n }\n }\n\n /** @hidden */\n private setValue(value: any): void {\n if (this.communicateByObject) {\n // If valueProperty is specified, extract that property from the selected object\n const valueProp = this.valueProperty();\n if (valueProp && typeof value === 'object' && value !== null) {\n this._value = (value as any)[valueProp];\n } else {\n this._value = value;\n }\n } else {\n this._value = this.displayFn(value);\n }\n }\n\n /** @hidden */\n private _setUpMobileMode(): void {\n const injector = Injector.create({\n providers: [{ provide: COMBOBOX_COMPONENT, useValue: this }],\n parent: this._injector\n });\n\n this._dynamicComponentService.createDynamicComponent(\n { listTemplate: this.listTemplate, controlTemplate: this.controlTemplate },\n ComboboxMobileComponent,\n {\n containerRef: this._viewContainerRef\n },\n {\n injector\n }\n );\n }\n\n /** @hidden */\n private _setupValueSynchronization(): void {\n if (!this.searchInputElement) {\n return;\n }\n\n // Listen for focus events to detect programmatic changes\n this._subscriptions.add(\n fromEvent(this.searchInputElement.nativeElement, 'focus').subscribe(() => {\n this._syncDomValueToModel();\n })\n );\n }\n\n /** @hidden */\n private _syncDomValueToModel(): void {\n if (!this.searchInputElement) {\n return;\n }\n\n const domValue = this.searchInputElement.nativeElement.value;\n if (domValue !== this.inputText) {\n // Update the model and trigger change detection\n this.inputText = domValue;\n this.handleSearchTermChange();\n this._cdRef.detectChanges();\n }\n }\n}\n","<ng-template [ngTemplateOutlet]=\"mobile ? mobileTemplate : desktopTemplate\"></ng-template>\n<ng-template #desktopTemplate>\n <fd-popover\n additionalBodyClass=\"fd-popover-custom-list\"\n [class.fd-combobox-full-width]=\"isSearch || showClearButton\"\n [isOpen]=\"open && displayedValues && displayedValues.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [scrollStrategy]=\"_repositionScrollStrategy\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"false\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readOnly\"\n [maxWidth]=\"!mobile && noDropDownMaxWidth ? null : dropDownMaxWidthPx\"\n [style.width]=\"width && '100%'\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"!displayedValues.length\">\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n<ng-template let-term=\"term\" #itemSource>\n @if (!_customRenderer) {\n <span\n fd-list-title\n fdTruncatedTitle\n [innerHTML]=\"term | displayFnPipe: displayFn | highlight: inputText : highlighting && filterHighlight\"\n >\n </span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"_customRenderer\"\n [ngTemplateOutletContext]=\"{ $implicit: term, inputText: inputText }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template #mobileTemplate>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n</ng-template>\n<ng-template #controlTemplate>\n <fd-input-group\n [button]=\"showDropdownButton\"\n [glyph]=\"showDropdownButton ? glyphValue : null\"\n [glyphFont]=\"isSearch ? _defaultFontFamily : glyphFont\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [isControl]=\"true\"\n [isExpanded]=\"!mobile && open && displayedValues.length > 0\"\n [showFocus]=\"!clearInputBtnFocused\"\n [glyphAriaLabel]=\"ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)()\"\n [iconTitle]=\"title || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)()\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n (click)=\"mobile && isOpenChangeHandle(true)\"\n >\n <input\n #searchInputElement\n fdkAutoComplete\n fd-input-group-input\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-describedby]=\"comboboxId + '-list-results'\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-expanded]=\"!mobile && open && displayedValues.length\"\n [attr.aria-required]=\"required\"\n [attr.tabindex]=\"readOnly || disabled ? -1 : null\"\n [enable]=\"autoComplete && !mobile\"\n [displayFn]=\"displayFn\"\n [options]=\"dropdownValues\"\n [inputText]=\"inputText\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [attr.aria-readonly]=\"readOnly\"\n [placeholder]=\"placeholder\"\n [id]=\"inputId\"\n [(ngModel)]=\"inputText\"\n (onComplete)=\"handleAutoComplete($event)\"\n (keydown)=\"onInputKeydownHandler($event)\"\n (paste)=\"onInputKeydownHandler('fromPaste')\"\n (ngModelChange)=\"handleSearchTermChange()\"\n (blur)=\"handleBlur()\"\n />\n @if ((isSearch || showClearButton) && inputText && inputText.length > 0) {\n <span\n class=\"fd-input-group__addon fd-input-group__addon--button\"\n [class.fd-shellbar__input-group-addon]=\"inShellbar\"\n >\n <button\n fd-button\n class=\"fd-input-group__button\"\n type=\"button\"\n [fdType]=\"inShellbar ? 'standard' : 'transparent'\"\n [title]=\"_clearButtonTitle()\"\n [class.fd-shellbar__button]=\"inShellbar\"\n [attr.tabindex]=\"clearButtonFocusable ? 0 : -1\"\n (focus)=\"clearInputBtnFocus()\"\n (blur)=\"clearInputBtnBlur()\"\n (click)=\"_handleClearSearchTerm()\"\n >\n <fd-icon glyph=\"decline\"></fd-icon>\n </button>\n </span>\n }\n </fd-input-group>\n <div [id]=\"comboboxId + '-list-results'\" class=\"fd-combobox-count-list-results\">\n {{ displayedValues.length || 0 }} result list items\n </div>\n</ng-template>\n<ng-template #listTemplate>\n @if (groupFn) {\n <div\n class=\"fd-combobox-custom-list\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n (keydown.tab)=\"_close()\"\n (keydown.shift.tab)=\"_close()\"\n >\n <ng-content></ng-content>\n @for (group of displayedValues | listGroupPipe: groupFn; track group.key; let groupIndex = $index) {\n <label class=\"fd-list__group-header\" [id]=\"comboboxId + '-group-header-' + groupIndex\">\n <span fd-list-title>{{ group.key }}</span>\n </label>\n <ul\n fd-list\n [dropdownMode]=\"true\"\n [id]=\"comboboxId + '-result-' + groupIndex\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"comboboxId + '-group-header-' + groupIndex\"\n [hasMessage]=\"listMessages && listMessages.length > 0\"\n [byline]=\"byline\"\n [tabindex]=\"groupIndex === 0 ? 0 : -1\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n >\n @for (term of group.value; track $index; let index = $index) {\n <li\n fd-list-item\n ariaRole=\"option\"\n [attr.aria-placeholder]=\"group.key\"\n [attr.aria-setsize]=\"group.value.length\"\n [attr.aria-posinset]=\"index + 1\"\n class=\"fd-combobox-list-item\"\n [selected]=\"isSelected(term)\"\n [value]=\"term\"\n (keydown)=\"onItemKeyDownHandler($event, term)\"\n (mousedown)=\"_itemMousedown = true\"\n (click)=\"onMenuClickHandler(term)\"\n (focus)=\"onItemFocused(term)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"itemSource\"\n [ngTemplateOutletContext]=\"{ term: term }\"\n ></ng-template>\n </li>\n }\n </ul>\n }\n </div>\n } @else {\n <ul\n fd-list\n class=\"fd-combobox-custom-list\"\n [dropdownMode]=\"true\"\n [id]=\"comboboxId + '-result'\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"comboboxId + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [hasMessage]=\"listMessages && listMessages.length > 0\"\n [byline]=\"byline\"\n [tabindex]=\"0\"\n (keydown.tab)=\"_close()\"\n (keydown.shift.tab)=\"_close()\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n >\n <ng-content></ng-content>\n @for (term of displayedValues; track $index) {\n <li\n fd-list-item\n ariaRole=\"option\"\n [tabindex]=\"0\"\n class=\"fd-combobox-list-item\"\n [selected]=\"isSelected(term)\"\n (keydown)=\"onItemKeyDownHandler($event, term)\"\n (mousedown)=\"_itemMousedown = true\"\n (click)=\"onMenuClickHandler(term)\"\n [value]=\"term\"\n (focus)=\"onItemFocused(term)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"itemSource\"\n [ngTemplateOutletContext]=\"{ term: term }\"\n ></ng-template>\n </li>\n }\n </ul>\n }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { ComboboxItemDirective } from './combobox-item.directive';\nimport { ComboboxComponent } from './combobox.component';\nimport { ListGroupPipe } from './list-group.pipe';\n\n/**\n * @deprecated\n * Use `ComboboxComponent` import instead.\n */\n@NgModule({\n imports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe],\n exports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe]\n})\nexport class ComboboxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;MAOa,qBAAqB,CAAA;AAJlC,IAAA,WAAA,GAAA;;AAaI,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,EAAC,WAA4C,EAAC;AASrE,IAAA;;AANG,IAAA,OAAO,sBAAsB,CACzB,GAA6B,EAC7B,GAAoC,EAAA;AAEpC,QAAA,OAAO,IAAI;IACf;8GAjBS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE;AACf,iBAAA;;sBAMI;;;MCTQ,kBAAkB,GAAG,IAAI,cAAc,CAAW,mBAAmB;;ACiD5E,MAAO,uBAAwB,SAAQ,cAAiC,CAAA;;AAgB1E,IAAA,WAAA,CAAwC,iBAAoC,EAAA;AACxE,QAAA,KAAK,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,QAAQ,CAAC;AAbxD;;;;;AAKG;QACH,IAAA,CAAA,YAAY,GAAiF,IAAI;IAQjG;;IAGA,QAAQ,GAAA;QACJ,IAAI,CAAC,6BAA6B,EAAE;IACxC;;IAGA,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;QACxB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;IACvD;;IAGA,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;IACnC;;AAGQ,IAAA,aAAa,CAAC,IAAa,EAAA;QAC/B,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;YACjD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE;gBACvC,IAAI,CAAC,KAAK,EAAE;YAChB;QACJ;IACJ;;IAGQ,6BAA6B,GAAA;QACjC,IAAI,CAAC,UAAU,CAAC;AACX,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1D;;IAGQ,KAAK,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC3D,YAAA,MAAM,EAAE,IAAI;YACZ,GAAG,IAAI,CAAC,YAAY;AACpB,YAAA,sBAAsB,EAAE,KAAK;AAC7B,YAAA,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa;AACzC,YAAA,eAAe,EAAE;AACpB,SAAA,CAAC;QAEF,IAAI,CAAC,4BAA4B,EAAE;QAEnC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC;AAChD,YAAA,KAAK,EAAE,CAAC,IAAI,KAAI;AACZ,gBAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;oBACnB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;oBACnD,MAAM,CAAC,WAAW,EAAE;gBACxB;YACJ;AACH,SAAA,CAAC;IACN;;IAGQ,4BAA4B,GAAA;QAChC,IAAI,CAAC,SAAS,CAAC;AACV,aAAA,IAAI,CACD,SAAS,CAAC,cAAc,CAAC;AACzB,QAAA,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;aAEvC,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI;AACA,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,uCAAuC,CAAC;gBACnG,KAAK,CAAC,KAAK,EAAE;YACjB;YAAE,OAAO,KAAK,EAAE;gBACZ,IAAI,SAAS,EAAE,EAAE;AACb,oBAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC;gBACjE;YACJ;AACJ,QAAA,CAAC,CAAC;IACV;AA7FS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,kBAgBZ,kBAAkB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAhB7B,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpDpC,kiDAgCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDIQ,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,kBAAkB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,qBAAqB,qFACrB,0BAA0B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,cAAc,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGd,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,SAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGhB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAtBnC,SAAS;+BACI,oBAAoB,EAAA,eAAA,EAEb,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACL,iBAAiB;wBACjB,kBAAkB;wBAClB,mBAAmB;wBACnB,kBAAkB;wBAClB,qBAAqB;wBACrB,0BAA0B;wBAC1B,eAAe;wBACf,mBAAmB;wBACnB,qBAAqB;wBACrB,cAAc;wBACd,cAAc;wBACd,iBAAiB;wBACjB,gBAAgB;wBAChB;AACH,qBAAA,EAAA,QAAA,EAAA,kiDAAA,EAAA;;0BAkBY,MAAM;2BAAC,kBAAkB;;sBAdrC,SAAS;uBAAC,gBAAgB;;;ME7ClB,aAAa,CAAA;;IAEtB,SAAS,CAAC,KAAY,EAAE,KAAuB,EAAA;AAC3C,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/E;8GAJS,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCLY,qBAAqB,GAAG,IAAI,cAAc,CAAoB,qBAAqB;;ACmFhG,IAAI,gBAAgB,GAAG,CAAC;AAExB;;;;;;;;;;;AAWG;MAkDU,iBAAiB,CAAA;;AAgU1B,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,qBAAqB,EAAE,WAAW,IAAI,IAAI,CAAC,YAAY;IACvE;;AAgBA,IAAA,WAAA,CACqB,QAAiB,EACjB,MAAyB,EACzB,SAAmB,EACnB,iBAAmC,EACnC,wBAAiD,EACjD,iBAAmC,EAC3C,uBAA+C,EAAA;QANvC,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,wBAAwB,GAAxB,wBAAwB;QACxB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACzB,IAAA,CAAA,uBAAuB,GAAvB,uBAAuB;;AA5UpC,QAAA,IAAA,CAAA,UAAU,GAAG,CAAA,YAAA,EAAe,gBAAgB,EAAE,EAAE;;QAIhD,IAAA,CAAA,OAAO,GAAG,EAAE;;QAYZ,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAIhB,IAAA,CAAA,cAAc,GAAQ,EAAE;AAExB;AACkE;AAElE,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,cAAc;AAU9B;;AAEG;QAEH,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAIhB,IAAA,CAAA,KAAK,GAAG,uBAAuB;;QAI/B,IAAA,CAAA,SAAS,GAAa,2BAA2B;AAEjD;;AAEG;QAEH,IAAA,CAAA,eAAe,GAAG,KAAK;AAEvB;;;AAGG;QAEH,IAAA,CAAA,QAAQ,GAAa,EAAE;;QAIvB,IAAA,CAAA,mBAAmB,GAAG,IAAI;AAE1B;;AAEG;QAEH,IAAA,CAAA,mBAAmB,GAAG,IAAI;;QAwB1B,IAAA,CAAA,SAAS,GAAG,MAAM;;QAIlB,IAAA,CAAA,kBAAkB,GAAG,GAAG;AAExB;;;AAGsB;QAEtB,IAAA,CAAA,kBAAkB,GAAG,KAAK;;QAY1B,IAAA,CAAA,YAAY,GAAG,IAAI;;QAInB,IAAA,CAAA,aAAa,GAAG,IAAI;;QAIpB,IAAA,CAAA,YAAY,GAAG,IAAI;;QAInB,IAAA,CAAA,YAAY,GAAG,IAAI;AAEnB;;;;;AAKG;QAEH,IAAA,CAAA,eAAe,GAAoB,UAAU;AAE7C;;AAEqE;QAErE,IAAA,CAAA,mBAAmB,GAAG,KAAK;AAE3B;;;AAG4C;AAE5C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,eAAe;AAEhC;;;AAGG;QAEH,IAAA,CAAA,eAAe,GAAG,KAAK;AAEvB;;;AAGG;QAEH,IAAA,CAAA,oBAAoB,GAAG,IAAI;;QAI3B,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAIhB,IAAA,CAAA,MAAM,GAAG,KAAK;;QAQd,IAAA,CAAA,kBAAkB,GAAG,IAAI;AAEzB;;;AAGG;QAEH,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAUhB,IAAA,CAAA,MAAM,GAAG,KAAK;AAEd;;;;AAIG;QAEH,IAAA,CAAA,cAAc,GAA+B,gBAAgB;;AAIpD,QAAA,IAAA,CAAA,WAAW,GAA+B,IAAI,YAAY,EAAgB;;AAI1E,QAAA,IAAA,CAAA,UAAU,GAA0B,IAAI,YAAY,EAAW;;AAIxE,QAAA,IAAA,CAAA,eAAe,GAAyB,IAAI,YAAY,EAAU;AAkClE;;;;;AAKG;QACa,IAAA,CAAA,aAAa,GAAG,KAAK,CAAgB,IAAI;0FAAC;;QAG1D,IAAA,CAAA,eAAe,GAAG,IAAI;;AAGb,QAAA,IAAA,CAAA,cAAc,GAAa;YAChC,MAAM;YACN,KAAK;YACL,UAAU;YACV,WAAW;YACX,UAAU;YACV,QAAQ;YACR,OAAO;YACP,GAAG;YACH;SACH;;QAMQ,IAAA,CAAA,kBAAkB,GAAG,2BAA2B;;QAGzD,IAAA,CAAA,IAAI,GAAG,KAAK;AAEZ;;;AAGG;QACH,IAAA,CAAA,UAAU,GAAG,KAAK;;QAGlB,IAAA,CAAA,eAAe,GAAU,EAAE;;QAG3B,IAAA,CAAA,cAAc,GAAG,EAAE;;QAGnB,IAAA,CAAA,oBAAoB,GAAG,KAAK;;QAG5B,IAAA,CAAA,cAAc,GAAG,KAAK;;AAGH,QAAA,IAAA,CAAA,iBAAiB,GAAG,wBAAwB,CAAC,+BAA+B,CAAC;;AAQxF,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE;AAQ1B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAA0B,UAAU,CAAC;AAEzD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AAoCjD,QAAA,IAAA,CAAA,QAAQ,GAAyB,MAAK,EAAE,CAAC;;AAGzC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAW,EAAE,CAAC;AA3BtB,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAE/F,QAAA,SAAS,CAAa,QAAQ,EAAE,WAAW;AACtC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAC3B;YACJ;AACA,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAc;YACnC,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBACjD;YACJ;AACA,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC9C,YAAA,IAAI,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;gBAC/B;YACJ;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;gBAC9B;YACJ;YACA,IAAI,CAAC,MAAM,EAAE;AACjB,QAAA,CAAC,CAAC;IACV;;IASA,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;QACnC;QACA,IAAI,CAAC,uBAAuB,EAAE;IAClC;;AAGA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;YACvE,IAAI,CAAC,uBAAuB,EAAE;QAClC;IACJ;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;IACrC;;IAGA,eAAe,GAAA;QACX,IAAI,CAAC,iBAAiB,EAAE;AAExB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,gBAAgB,EAAE;QAC3B;QAEA,IAAI,CAAC,0BAA0B,EAAE;IACrC;;AAGA,IAAA,qBAAqB,CAAC,KAA6B,EAAA;AAC/C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;QACJ;AAEA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC3B,YAAA,IAAI,KAAK,KAAK,WAAW,EAAE;AACvB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;YACjC;QACJ;aAAO;AACH,YAAA,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;gBAC5C,IAAI,CAAC,MAAM,EAAE;gBACb;YACJ;YAEA,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AACjC,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACf,IAAI,CAAC,QAAQ,EAAE;gBACnB;YACJ;iBAAO,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;AAC7C,gBAAA,IAAI,KAAK,CAAC,MAAM,EAAE;oBACd,IAAI,CAAC,qBAAqB,EAAE;AAC5B,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;gBACjC;gBACA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE;AACjC,oBAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;gBACvC;AAAO,qBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACnB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBAC5B;gBACA,KAAK,CAAC,cAAc,EAAE;YAC1B;iBAAO,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;AAC3C,gBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBACzB,KAAK,CAAC,cAAc,EAAE;YAC1B;iBAAO,IACH,IAAI,CAAC,mBAAmB;gBACxB,CAAC,KAAK,CAAC,OAAO;gBACd,CAAC,KAAK,CAAC,MAAM;gBACb,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,EAChD;AACE,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;gBAC7B,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;AAClG,oBAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;gBACvC;YACJ;QACJ;IACJ;;IAGA,oBAAoB,CAAC,KAAoB,EAAE,KAAU,EAAA;AACjD,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AACpE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;YAC1B,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;QAClC;IACJ;;AAGA,IAAA,aAAa,CAAC,KAAU,EAAA;QACpB,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACtC,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC;QACzC;AACA,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;IAC/B;;AAGA,IAAA,kBAAkB,CAAC,KAAU,EAAE,kBAAkB,GAAG,IAAI,EAAA;AACpD,QAAA,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,EAAE;AACtB,YAAA,MAAM,KAAK,GAAW,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,KAAK,CAAC;AACjF,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,CAAC;AACnD,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACjD;IACJ;;AAGA,IAAA,aAAa,CAAC,IAAS,EAAA;QACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACrC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAClC;;IAGA,aAAa,GAAA;QACT,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAClC;;AAGA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;IACjE;;IAGA,IAAI,SAAS,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAC3B,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACvB;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,IAAI,CAAC,gBAAgB,EAAE;QAC3B;IACJ;AACA,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,cAAc;IAC9B;;AAGA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK;IAChD;;IAGA,sBAAsB,GAAA;AAClB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE;QAChD,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;AAChD,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,IAAI,CAAC,gBAAgB,EAAE;QAC3B;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;IAC/B;;AAGA,IAAA,UAAU,CAAC,KAAU,EAAA;;QAEjB,IAAI,cAAc,GAAG,KAAK;AAC1B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AACtC,QAAA,IAAI,IAAI,CAAC,mBAAmB,IAAI,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;;YAEhF,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,CAC5C,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,IAAK,IAAY,CAAC,SAAS,CAAC,KAAK,KAAK,CAC/D;YACD,IAAI,cAAc,EAAE;gBAChB,cAAc,GAAG,cAAc;YACnC;QACJ;QAEA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;AACpD,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;;AAG7B,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,aAAa,EAAE;YACxC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc;QACrE;AAEA,QAAA,IAAI,CAAC,mBAAmB,GAAG,cAAc;AACzC,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;IAC9B;;AAGA,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AACrC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACtB;;AAGA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACvB;;AAGA,IAAA,qBAAqB,CAAC,SAA+B,EAAA;AACjD,QAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACpB,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;QACjD;IACJ;;IAGA,sBAAsB,GAAA;AAClB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC;AACzE,QAAA,IAAI,CAAC,gBAAgB,EAAE,eAAe,EAAE;IAC5C;;IAGA,oBAAoB,GAAA;;AAEhB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACb;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,QAAQ,EAAE;QACnB;QACA,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;AAC7C,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,KAAK,EAAE;QAClD;IACJ;;AAGA,IAAA,kBAAkB,CAAC,MAAe,EAAA;;QAE9B,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAC3B,IAAI,CAAC,qBAAqB,EAAE;QAChC;AACA,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI,GAAG,MAAM;AAClB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;;AAG5B,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACX,gBAAA,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,EAAE;YAClD;iBAAO;AACH,gBAAA,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,EAAE;YACpD;QACJ;QAEA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAC5B,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACxE;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;IAC/B;;AAGA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;IAC/B;;AAGA,IAAA,kBAAkB,CAAC,KAAwB,EAAA;QACvC,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,IAAI,EAAE;YAC/B,MAAM,cAAc,GAAG,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,IAAI,CAAC;AACxE,YAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,gBAAA,IAAI,CAAC,mBAAmB,GAAG,cAAc,CAAC,CAAC,CAAC;YAChD;AACA,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI;YAC3B,IAAI,CAAC,sBAAsB,EAAE;QACjC;QACA,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE;AACpC,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;QAClC;IACJ;;IAGA,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACZ,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,kBAAkB,CAAC;AACpB,gBAAA,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK;AACjD,gBAAA,UAAU,EAAE;AACf,aAAA,CAAC;QACN;IACJ;;IAGA,kBAAkB,GAAA;AACd,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;IACpC;;IAGA,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;IACrC;;IAGA,QAAQ,GAAA;QACJ,OAAO,IAAI,CAAC,MAAM;IACtB;;IAGA,MAAM,GAAA;AACF,QAAA,MAAM,cAAc,GAChB,IAAI,CAAC,cAAc,KAAK,gBAAgB,GAAG,IAAI,CAAC,8BAA8B,EAAE,GAAG,SAAS;AAEhG,QAAA,IAAI,cAAc,KAAK,SAAS,EAAE;AAC9B,YAAA,IAAI,cAAc,KAAK,IAAI,CAAC,mBAAmB,EAAE;AAC7C,gBAAA,IAAI,CAAC,iCAAiC,CAAC,cAAc,CAAC;YAC1D;AACA,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACX,gBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;YAClC;AACA,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;YAC7C;QACJ;QAEA,IAAI,IAAI,CAAC,cAAc,KAAK,gBAAgB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YACvE,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS;AAC5D,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC9B,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;YAC7C;QACJ;QAEA,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE;AACnG,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU;QAC3B,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,GAAG,UAAU;AACxD,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,gBAAgB,EAAE;YAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;AACtD,YAAA,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAChC,gBAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC;gBAC3C;YACJ;QACJ;AACA,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;IACjD;;AAGA,IAAA,UAAU,CAAC,IAAS,EAAA;AAChB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACxE,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,KAAK,SAAS;IACxC;;IAGQ,mBAAmB,GAAA;;;;AAIvB,QAAA,OAAO,QAAQ,CAAC,aAAa,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,IAAI,IAAI;IAClG;;IAGQ,oBAAoB,GAAA;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE;AACjG,QAAA,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;IACtC;;IAGQ,8BAA8B,GAAA;AAClC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa;AACzD,QAAA,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK;AACrC,QAAA,MAAM,iBAAiB,GACnB,WAAW,KAAK,IAAI,CAAC,SAAS;AAC9B,YAAA,WAAW,CAAC,cAAc,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM;AACpD,YAAA,WAAW,CAAC,YAAY,KAAK,WAAW,CAAC,MAAM;QAEnD,IAAI,WAAW,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,iBAAiB,EAAE;YACtD;QACJ;QAEA,MAAM,cAAc,GAAG,IAAI,CAAC,gCAAgC,CAAC,WAAW,CAAC;AACzE,QAAA,OAAO,cAAc,CAAC,MAAM,KAAK,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS;IACtE;;AAGQ,IAAA,iCAAiC,CAAC,KAAU,EAAA;AAChD,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACtC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS;IAChE;;AAGQ,IAAA,gBAAgB,CAAC,MAAc,EAAA;AACnC,QAAA,MAAM,WAAW,GAAQ,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACtF,QAAA,MAAM,KAAK,GAAW,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,WAAW,CAAC;QACrF,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;QAChE;IACJ;;IAGQ,qBAAqB,GAAA;QACzB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE;IACpD;;IAGQ,iBAAiB,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,gCAAgC,CAAC;AACrF,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC;YACvC;QACJ;IACJ;;AAGQ,IAAA,eAAe,CAAC,GAAQ,EAAA;QAC5B,OAAO,CAAA,EAAG,GAAG,CAAA,CAAE;IACnB;;IAGQ,cAAc,CAAC,YAAmB,EAAE,UAAe,EAAA;AACvD,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AAChC,YAAA,MAAM,WAAW,GAAG,UAAU,CAAC,iBAAiB,EAAE;AAClD,YAAA,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;gBAChC,IAAI,IAAI,EAAE;oBACN,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE;oBACrD,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;gBACpF;AACJ,YAAA,CAAC,CAAC;QACN;AAAO,aAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AACvC,YAAA,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,UAAU,CAAC;QAC7D;QACA,OAAO,YAAY,IAAI,EAAE;IAC7B;;AAGQ,IAAA,mBAAmB,CAAC,IAAS,EAAE,kBAAkB,GAAG,IAAI,EAAA;AAC5D,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACxC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,GAAG,WAAW;AACzD,YAAA,IAAI,CAAC,SAAS,GAAG,WAAW;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AAE3B,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,IAAI,CAAC,gBAAgB,EAAE;YAC3B;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,kBAAkB,EAAE;AAC1C,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;QAClC;QACA,IAAI,kBAAkB,EAAE;YACpB,IAAI,CAAC,sBAAsB,EAAE;QACjC;IACJ;;AAGQ,IAAA,gCAAgC,CAAC,YAAoB,EAAA;QACzD,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,YAAY,CAAC;IACxF;;IAGQ,uBAAuB,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC;QAC7E;aAAO;YACH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE;QACpD;IACJ;;IAGQ,gBAAgB,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,SAAS,CAAC;YACpE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;gBACtF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5B;AAAO,iBAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACvB;YACA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC;aAAO;AACH,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;QACjC;IACJ;;AAGQ,IAAA,QAAQ,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;;AAE1B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;YACtC,IAAI,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC1D,gBAAA,IAAI,CAAC,MAAM,GAAI,KAAa,CAAC,SAAS,CAAC;YAC3C;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK;YACvB;QACJ;aAAO;YACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACvC;IACJ;;IAGQ,gBAAgB,GAAA;AACpB,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC7B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC5D,MAAM,EAAE,IAAI,CAAC;AAChB,SAAA,CAAC;QAEF,IAAI,CAAC,wBAAwB,CAAC,sBAAsB,CAChD,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,EAC1E,uBAAuB,EACvB;YACI,YAAY,EAAE,IAAI,CAAC;SACtB,EACD;YACI;AACH,SAAA,CACJ;IACL;;IAGQ,0BAA0B,GAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1B;QACJ;;AAGA,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,MAAK;YACrE,IAAI,CAAC,oBAAoB,EAAE;QAC/B,CAAC,CAAC,CACL;IACL;;IAGQ,oBAAoB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1B;QACJ;QAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK;AAC5D,QAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;;AAE7B,YAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;YACzB,IAAI,CAAC,sBAAsB,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;QAC/B;IACJ;8GAp5BS,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,OAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,wCAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,EAAA,EAAA,SAAA,EA7Cf;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE;AACV,aAAA;YACD,uBAAuB,CAAC,iBAAiB,CAAC;YAC1C,mBAAmB;YACnB,uBAAuB;AACvB,YAAA,+BAA+B,EAAE;AACjC,YAAA;AACI,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,WAAW,EAAE;AAChB;SACJ,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAqSa,qBAAqB,kEAZlB,yBAAyB,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAhB/B,aAAa,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAQb,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAIhB,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3YlC,2+RA6MA,qeD7EQ,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,gBAAgB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,uBAAuB,mFACvB,oBAAoB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,aAAa,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,iBAAiB,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,kBAAkB,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,mBAAmB,0VACnB,wBAAwB,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACxB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,eAAe,EAAA,QAAA,EAAA,kDAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,aAAa,gLACb,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAKpB,uBAAuB,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAJvB,aAAa,iDACb,mBAAmB,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACnB,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACf,aAAa,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAIR,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAjD7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,SAAA,EAGZ;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE;AACV,yBAAA;AACD,wBAAA,uBAAuB,CAAA,iBAAA,CAAmB;wBAC1C,mBAAmB;wBACnB,uBAAuB;AACvB,wBAAA,+BAA+B,EAAE;AACjC,wBAAA;AACI,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,WAAW,EAAA;AACd;qBACJ,EAAA,IAAA,EACK;AACF,wBAAA,kCAAkC,EAAE,MAAM;AAC1C,wBAAA,2BAA2B,EAAE,MAAM;AACnC,wBAAA,0CAA0C,EAAE,QAAQ;AACpD,wBAAA,eAAe,EAAE;AACpB,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACL,gBAAgB;wBAChB,gBAAgB;wBAChB,uBAAuB;wBACvB,oBAAoB;wBACpB,aAAa;wBACb,iBAAiB;wBACjB,kBAAkB;wBAClB,mBAAmB;wBACnB,wBAAwB;wBACxB,WAAW;wBACX,qBAAqB;wBACrB,eAAe;wBACf,aAAa;wBACb,oBAAoB;wBACpB,aAAa;wBACb,mBAAmB;wBACnB,eAAe;wBACf,aAAa;wBACb;AACH,qBAAA,EAAA,QAAA,EAAA,2+RAAA,EAAA,MAAA,EAAA,CAAA,6aAAA,CAAA,EAAA;;sBAcA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAKA;;sBAIA;;sBAIA;;sBAMA;;sBAIA;;sBAIA;;sBAMA;;sBAOA;;sBAIA;;sBAMA;;sBAOA;;sBAOA;;sBAMA;;sBAIA;;sBAIA;;sBAOA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBASA;;sBAMA;;sBAOA;;sBAOA;;sBAOA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAOA;;sBAMA;;sBAIA;;sBAQA;;sBAIA;;sBAIA;;sBAIA;;sBAIA,SAAS;uBAAC,aAAa;;sBAIvB,SAAS;uBAAC,oBAAoB;;sBAI9B,SAAS;uBAAC,gBAAgB;;sBAI1B,SAAS;uBAAC,mBAAmB;;sBAI7B,eAAe;uBAAC,yBAAyB;;sBAIzC,SAAS;uBAAC,iBAAiB;;sBAI3B,SAAS;uBAAC,cAAc;;sBAIxB,YAAY;uBAAC,qBAAqB;;;AEtZvC;;;AAGG;MAKU,cAAc,CAAA;8GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAd,cAAc,EAAA,OAAA,EAAA,CAHb,iBAAiB,EAAE,qBAAqB,EAAE,aAAa,CAAA,EAAA,OAAA,EAAA,CACvD,iBAAiB,EAAE,qBAAqB,EAAE,aAAa,CAAA,EAAA,CAAA,CAAA;AAExD,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAHb,iBAAiB,CAAA,EAAA,CAAA,CAAA;;2FAGlB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,aAAa,CAAC;AAClE,oBAAA,OAAO,EAAE,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,aAAa;AACpE,iBAAA;;;ACZD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-core-combobox.mjs","sources":["../../../../libs/core/combobox/combobox-item.directive.ts","../../../../libs/core/combobox/combobox.interface.ts","../../../../libs/core/combobox/combobox-mobile/combobox-mobile.component.ts","../../../../libs/core/combobox/combobox-mobile/combobox-mobile.component.html","../../../../libs/core/combobox/list-group.pipe.ts","../../../../libs/core/combobox/tokens.ts","../../../../libs/core/combobox/combobox.component.ts","../../../../libs/core/combobox/combobox.component.html","../../../../libs/core/combobox/combobox.module.ts","../../../../libs/core/combobox/fundamental-ngx-core-combobox.ts"],"sourcesContent":["import { Directive, Input, TemplateRef, inject } from '@angular/core';\nimport { ComboboxItemDirectiveContext } from './combobox.interface';\n\n@Directive({\n selector: '[fdComboboxItem]',\n standalone: true\n})\nexport class ComboboxItemDirective<T = unknown> {\n /**\n * @hidden\n * Used for type support.\n */\n @Input()\n fdComboboxItemUse: T;\n\n /** Template reference. */\n templateRef = inject(TemplateRef<ComboboxItemDirectiveContext<T>>);\n\n /** @hidden */\n static ngTemplateContextGuard<T>(\n dir: ComboboxItemDirective<T>,\n ctx: ComboboxItemDirectiveContext<T>\n ): ctx is ComboboxItemDirectiveContext<T> {\n return true;\n }\n}\n","import { EventEmitter, InjectionToken } from '@angular/core';\nimport { MobileMode } from '@fundamental-ngx/core/mobile-mode';\n\nexport const COMBOBOX_COMPONENT = new InjectionToken<string[]>('ComboboxInterface');\n\n/**\n * Combobox Interface to have typing and avoid circular dependency between\n * ComboboxComponent <==> ComboboxMobileComponent\n */\nexport interface ComboboxInterface extends MobileMode {\n inputText: string;\n openChange: EventEmitter<boolean>;\n inShellbar: boolean;\n\n getValue(): any;\n dialogApprove(): void;\n dialogDismiss(term?: any): void;\n}\n\nexport interface ComboboxItemDirectiveContext<T = unknown> {\n $implicit: T;\n inputText: string;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Inject,\n isDevMode,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { observeOn } from 'rxjs/operators';\n\nimport { MobileModeBase, MobileModeConfig, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { InitialFocusDirective, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { BarElementDirective, BarMiddleDirective, ButtonBarComponent } from '@fundamental-ngx/core/bar';\n\nimport {\n DialogBodyComponent,\n DialogCloseButtonComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { asyncScheduler } from 'rxjs';\nimport { COMBOBOX_COMPONENT, ComboboxInterface } from '../combobox.interface';\n\ninterface ComboboxMobileBridge extends ComboboxInterface {\n setMobileModeConfig(config: MobileModeConfig): void;\n hasMobileApproveAction(): boolean;\n}\n\n@Component({\n selector: 'fd-combobox-mobile',\n templateUrl: './combobox-mobile.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n TemplateDirective,\n BarMiddleDirective,\n BarElementDirective,\n ButtonBarComponent,\n DialogHeaderComponent,\n DialogCloseButtonComponent,\n DialogComponent,\n DialogBodyComponent,\n DialogFooterComponent,\n TitleComponent,\n TitleComponent,\n TemplateDirective,\n NgTemplateOutlet,\n InitialFocusDirective\n ]\n})\nexport class ComboboxMobileComponent extends MobileModeBase<ComboboxMobileBridge> implements OnInit {\n /** @hidden */\n @ViewChild('dialogTemplate') dialogTemplate: TemplateRef<any>;\n\n /**\n * @hidden\n * For internal usage\n * Control element, which will be rendered inside dialog.\n * List element, which will be rendered inside dialog.\n */\n childContent: { listTemplate: TemplateRef<any>; controlTemplate: TemplateRef<any> } | null = null;\n\n /** @hidden */\n private _handlingDialogAction = false;\n\n /** @hidden */\n private _dismissedByAction = false;\n\n /** @hidden */\n constructor(@Inject(COMBOBOX_COMPONENT) comboboxComponent: ComboboxMobileBridge) {\n super(comboboxComponent, MobileModeControl.COMBOBOX);\n this._component.setMobileModeConfig(this.mobileConfig);\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._listenOnMultiInputOpenChange();\n }\n\n /** @hidden */\n handleDismiss(): void {\n this._handlingDialogAction = true;\n this._component.dialogDismiss();\n this._dismissedByAction = true;\n this._dismissDialog();\n this._handlingDialogAction = false;\n }\n\n /** @hidden */\n handleApprove(): void {\n this._handlingDialogAction = true;\n this._component.dialogApprove();\n this._closeDialog();\n this._handlingDialogAction = false;\n }\n\n /** @hidden */\n private _toggleDialog(open: boolean): void {\n if (open) {\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n } else if (!this._handlingDialogAction) {\n this._closeDialog();\n }\n }\n\n /** @hidden */\n private _listenOnMultiInputOpenChange(): void {\n this._component.openChange\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((isOpen) => this._toggleDialog(isOpen));\n }\n\n /** @hidden */\n private _open(): void {\n this._dismissedByAction = false;\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n focusTrapped: true,\n ...this.dialogConfig,\n backdropClickCloseable: false,\n container: this._elementRef.nativeElement,\n disablePaddings: true\n });\n\n this._focusInputElementOnceOpened();\n\n const refSub = this.dialogRef.afterClosed.subscribe({\n error: () => {\n if (this.dialogRef.status() === 'dismissed' && !this._dismissedByAction) {\n this._component.dialogDismiss();\n }\n refSub.unsubscribe();\n }\n });\n }\n\n /** @hidden */\n private _closeDialog(): void {\n if (this._canCloseDialog()) {\n this.dialogRef.close();\n }\n }\n\n /** @hidden */\n private _dismissDialog(): void {\n if (this._canCloseDialog()) {\n this.dialogRef.dismiss();\n }\n }\n\n /** @hidden */\n private _canCloseDialog(): boolean {\n return (this.dialogRef?.isOpen() || this.dialogRef?.status() === 'pending') && !this.dialogRef.isClosed();\n }\n\n /** @hidden */\n private _focusInputElementOnceOpened(): void {\n this.dialogRef.afterLoaded\n .pipe(\n observeOn(asyncScheduler), // making the listener async\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(() => {\n try {\n const input = this._elementRef.nativeElement.querySelector('fd-input-group input[role=\"combobox\"]');\n input.focus();\n } catch (error) {\n if (isDevMode()) {\n console.error('Failed to focus combobox search input', error);\n }\n }\n });\n }\n}\n","<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 fd-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button title=\"Close\" fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n }\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n @if (mobileConfig.instruction) {\n <p data-dialog-instruction>{{ mobileConfig.instruction }}</p>\n }\n <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (_component.hasMobileApproveAction()) {\n <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"handleApprove()\">\n </fd-button-bar>\n }\n @if (mobileConfig.cancelButtonText) {\n <fd-button-bar fdkInitialFocus [label]=\"mobileConfig.cancelButtonText!\" (click)=\"handleDismiss()\">\n </fd-button-bar>\n }\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n","import { KeyValue } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\n\nexport type GroupFunction<T = any> = (items: T[]) => { [key: string]: T[] };\n\n@Pipe({\n name: 'listGroupPipe',\n standalone: true\n})\nexport class ListGroupPipe<T = any> implements PipeTransform {\n /** Group items */\n transform(items: any[], group: GroupFunction<T>): KeyValue<string, T[]>[] {\n return Object.entries(group(items)).map(([key, value]) => ({ key, value }));\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ComboboxInterface } from './combobox.interface';\n\nexport const FD_COMBOBOX_COMPONENT = new InjectionToken<ComboboxInterface>('FdComboboxComponent');\n","import {\n BACKSPACE,\n CONTROL,\n DOWN_ARROW,\n ENTER,\n ESCAPE,\n LEFT_ARROW,\n RIGHT_ARROW,\n SHIFT,\n SPACE,\n TAB,\n UP_ARROW\n} from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n forwardRef,\n inject,\n input\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription, fromEvent } from 'rxjs';\n\nimport {\n AutoCompleteEvent,\n DynamicComponentService,\n FocusEscapeDirection,\n FocusTrapService,\n KeyUtil,\n Nullable,\n TruncatedTitleDirective\n} from '@fundamental-ngx/cdk/utils';\nimport { FormItemControl, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { MenuKeyboardService } from '@fundamental-ngx/core/menu';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { PopoverComponent } from '@fundamental-ngx/core/popover';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\n\nimport { Overlay, RepositionScrollStrategy } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormStates, SingleDropdownValueControl } from '@fundamental-ngx/cdk/forms';\nimport { AutoCompleteDirective, DisplayFnPipe, SearchHighlightPipe } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport {\n ContentDensityModule,\n ContentDensityObserver,\n contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconComponent, IconFont } from '@fundamental-ngx/core/icon';\nimport { InputGroupComponent, InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\nimport {\n FD_LIST_MESSAGE_DIRECTIVE,\n ListComponent,\n ListItemComponent,\n ListMessageDirective,\n ListTitleDirective\n} from '@fundamental-ngx/core/list';\nimport { PopoverBodyComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { FdTranslatePipe, resolveTranslationSignal } from '@fundamental-ngx/i18n';\nimport { ComboboxItem } from './combobox-item';\nimport { ComboboxItemDirective } from './combobox-item.directive';\nimport { ComboboxMobileComponent } from './combobox-mobile/combobox-mobile.component';\nimport { COMBOBOX_COMPONENT, ComboboxInterface, ComboboxItemDirectiveContext } from './combobox.interface';\nimport { GroupFunction, ListGroupPipe } from './list-group.pipe';\nimport { FD_COMBOBOX_COMPONENT } from './tokens';\n\nlet comboboxUniqueId = 0;\n\n/**\n * Allows users to filter through results and select a value.\n *\n * Supports Angular Forms.\n * ```html\n * <fd-combobox\n * [(ngModel)]=\"searchTerm\"\n * [dropdownValues]=\"dropdownValues\"\n * placeholder=\"Type some text...\">\n * </fd-combobox>\n * ```\n */\n@Component({\n selector: 'fd-combobox',\n templateUrl: './combobox.component.html',\n styleUrl: './combobox.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ComboboxComponent),\n multi: true\n },\n registerFormItemControl(ComboboxComponent),\n MenuKeyboardService,\n DynamicComponentService,\n contentDensityObserverProviders(),\n {\n provide: FD_COMBOBOX_COMPONENT,\n useExisting: ComboboxComponent\n }\n ],\n host: {\n '[class.fd-combobox-custom-class]': 'true',\n '[class.fd-combobox-input]': 'true',\n '[class.fd-combobox-custom-class--mobile]': 'mobile',\n '[style.width]': 'width'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgTemplateOutlet,\n PopoverComponent,\n PopoverControlComponent,\n PopoverBodyComponent,\n ListComponent,\n ListItemComponent,\n ListTitleDirective,\n InputGroupComponent,\n InputGroupInputDirective,\n FormsModule,\n AutoCompleteDirective,\n ButtonComponent,\n IconComponent,\n ContentDensityModule,\n DisplayFnPipe,\n SearchHighlightPipe,\n FdTranslatePipe,\n ListGroupPipe,\n TruncatedTitleDirective\n ]\n})\nexport class ComboboxComponent<T = any>\n implements\n ComboboxInterface,\n SingleDropdownValueControl,\n ControlValueAccessor,\n OnInit,\n OnChanges,\n AfterViewInit,\n OnDestroy,\n FormItemControl\n{\n /** Id for the Combobox. */\n @Input()\n comboboxId = `fd-combobox-${comboboxUniqueId++}`;\n\n /** Id attribute for input element inside Combobox component */\n @Input()\n inputId = '';\n\n /** Aria-label for Combobox. */\n @Input()\n ariaLabel: Nullable<string>;\n\n /** Aria-Labelledby for element describing Combobox. */\n @Input()\n ariaLabelledBy: Nullable<string>;\n\n /** If it is mandatory field */\n @Input()\n required = false;\n\n /** Values to be filtered in the search input. */\n @Input()\n dropdownValues: T[] = [];\n\n /** Filter function. Accepts an array of objects and a search term as arguments\n * and returns a string. See search input examples for details. */\n @Input()\n filterFn = this._defaultFilter;\n\n /** Whether the search input is disabled. **/\n @Input()\n disabled: boolean;\n\n /** Placeholder of the search input. **/\n @Input()\n placeholder: string;\n\n /**\n * Whether the Combobox is a Search Field\n */\n @Input()\n isSearch = false;\n\n /** Icon to display in the right-side button. */\n @Input()\n glyph = 'navigation-down-arrow';\n\n /** Glyph font family */\n @Input()\n glyphFont: IconFont = FD_DEFAULT_ICON_FONT_FAMILY;\n\n /**\n * Whether to show the clear search term button\n */\n @Input()\n showClearButton = false;\n\n /**\n * The trigger events that will open/close the options popover.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n */\n @Input()\n triggers: string[] = [];\n\n /** Whether the combobox should close, when a click is performed outside its boundaries. True by default */\n @Input()\n closeOnOutsideClick = true;\n\n /**\n * Whether the combobox should open, when any key is pressed in input (except Escape, Space, Enter). True by default\n */\n @Input()\n openOnKeyboardEvent = true;\n\n /**\n * The state of the form control - applies css classes.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n @Input()\n state?: FormStates;\n\n /**\n * The template with which to display the individual listed items.\n * Use it by passing an ng-template with implicit content. See examples for more info.\n */\n @Input()\n itemTemplate: TemplateRef<ComboboxItemDirectiveContext<T>>;\n\n /**\n * Function used to handle grouping of items.\n */\n @Input()\n groupFn: Nullable<GroupFunction>;\n\n /** Max height of the popover. Any overflowing elements will be accessible through scrolling. */\n @Input()\n maxHeight = '50vh';\n\n /** Max width of the dropdown in pixels. Default is 640px (40rem). */\n @Input()\n dropDownMaxWidthPx = 640;\n\n /**\n * Whether the dropdown should have max width.\n * Set to true if you want the dropdown to take the width of the control.\n * Default is false */\n @Input()\n noDropDownMaxWidth = false;\n\n /** Custom width of the control. */\n @Input()\n width: Nullable<string>;\n\n /** Search function to execute when the Enter key is pressed on the main input. */\n @Input()\n searchFn: () => void;\n\n /** Whether the matching string should be highlighted during filtration. */\n @Input()\n highlighting = true;\n\n /** Whether the popover should close when a user selects a result. */\n @Input()\n closeOnSelect = true;\n\n /** Whether the input field should be populated with the result picked by the user. */\n @Input()\n fillOnSelect = true;\n\n /** Whether the autocomplete should be enabled; Enabled by default */\n @Input()\n autoComplete = true;\n\n /**\n * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * 'fit-content' will apply width needed to properly display items inside, independent of control.\n */\n @Input()\n fillControlMode: PopoverFillMode = 'at-least';\n\n /** Defines if combobox should behave same as dropdown. When it's enabled writing inside text input won't\n * trigger onChange function, until it matches one of displayed dropdown values. Also communicating with combobox\n * can be achieved only by objects with same type as dropdownValue */\n @Input()\n communicateByObject = false;\n\n /** Display function. Accepts an object of the same type as the\n * items passed to dropdownValues as argument, and outputs a string.\n * An arrow function can be used to access the *this* keyword in the calling component.\n * See search input examples for details. */\n @Input()\n displayFn = this._defaultDisplay;\n\n /**\n * Whether AddOn Button should be focusable\n * @default false\n */\n @Input()\n buttonFocusable = false;\n\n /**\n * Whether clear button should be focusable.\n * @default true\n */\n @Input()\n clearButtonFocusable = true;\n\n /** Whether the combobox is readonly. */\n @Input()\n readOnly = false;\n\n /** Whether the combobox should be built on mobile mode */\n @Input()\n mobile = false;\n\n /** Multi Input Mobile Configuration, it's applied only, when mobile is enabled */\n @Input()\n mobileConfig: MobileModeConfig;\n\n /** Whether to display the addon button. */\n @Input()\n showDropdownButton = true;\n\n /**\n * Whether to return results where the input matches the entire string. By default, only results that start\n * with the input search term will be returned.\n */\n @Input()\n includes = false;\n\n /**\n * The tooltip for the multi-input icon.\n */\n @Input()\n title: string;\n\n /** Whether list item options should be rendered as byline. */\n @Input()\n byline = false;\n\n /**\n * Action to perform when the user shifts focus away from the dropdown (Tab or click outside).\n * - `close` will close the dropdown preserving previously selected value.\n * - `closeAndSelect` will close the dropdown and select last focused dropdown item.\n */\n @Input()\n tabOutStrategy: 'close' | 'closeAndSelect' = 'closeAndSelect';\n\n /** Event emitted when an item is clicked. Use *$event* to retrieve it. */\n @Output()\n readonly itemClicked: EventEmitter<ComboboxItem> = new EventEmitter<ComboboxItem>();\n\n /** Event emitted, when the combobox's popover body is opened or closed */\n @Output()\n readonly openChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when the input text changes. */\n @Output()\n inputTextChange: EventEmitter<string> = new EventEmitter<string>();\n\n /** @hidden */\n @ViewChild(ListComponent)\n listComponent: ListComponent;\n\n /** @hidden */\n @ViewChild('searchInputElement')\n searchInputElement: ElementRef<HTMLInputElement>;\n\n /** @hidden */\n @ViewChild(PopoverComponent)\n popoverComponent: PopoverComponent;\n\n /** @hidden */\n @ViewChild(InputGroupComponent)\n inputGroup: InputGroupComponent;\n\n /** @hidden */\n @ContentChildren(FD_LIST_MESSAGE_DIRECTIVE)\n listMessages: QueryList<ListMessageDirective>;\n\n /** @hidden */\n @ViewChild('controlTemplate')\n controlTemplate: TemplateRef<HTMLElement>;\n\n /** @hidden */\n @ViewChild('listTemplate')\n listTemplate: TemplateRef<HTMLElement>;\n\n /** @hidden */\n @ContentChild(ComboboxItemDirective)\n private readonly _comboboxItemRenderer: ComboboxItemDirective;\n\n /** When communicateByObject is true, specifies which property of the selected object\n * should be used as the form control value. If not specified, the entire object is returned.\n * Example: if dropdownValues = [{ displayedValue: 'Apple', code: 'A1' }] and valueProperty = 'code',\n * the form control value will be 'A1' instead of the entire object.\n * @default null\n */\n public readonly valueProperty = input<string | null>(null);\n\n /** Whether the matching string should be highlighted after combobox value is selected. */\n filterHighlight = true;\n\n /** Keys, that won't trigger the popover's open state, when dispatched on search input */\n readonly nonOpeningKeys: number[] = [\n ESCAPE,\n ENTER,\n LEFT_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n UP_ARROW,\n CONTROL,\n TAB,\n SHIFT\n ];\n\n /** @hidden */\n readonly _repositionScrollStrategy: RepositionScrollStrategy;\n\n /** @hidden */\n readonly _defaultFontFamily = FD_DEFAULT_ICON_FONT_FAMILY;\n\n /** Whether the combobox is opened. */\n open = false;\n\n /**\n * Whether or not the input coup is in the shellbar. Only for internal use by combobox component\n * @hidden\n */\n inShellbar = false;\n\n /** @hidden */\n displayedValues: any[] = [];\n\n /** @hidden */\n inputTextValue = '';\n\n /** @hidden */\n clearInputBtnFocused = false;\n\n /** @hidden */\n _itemMousedown = false;\n\n /** @hidden */\n protected readonly _clearButtonTitle = resolveTranslationSignal('coreCombobox.clearButtonTitle');\n\n /** @hidden */\n get _customRenderer(): Nullable<TemplateRef<ComboboxItemDirectiveContext<T>>> {\n return this._comboboxItemRenderer?.templateRef || this.itemTemplate;\n }\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _value: any;\n\n /** Last value confirmed by an explicit selection (item click) or external writeValue. */\n private _lastConfirmedValue: any;\n\n /** Value state to restore when a mobile confirmation dialog is dismissed. */\n private _mobileConfirmationSnapshot?: {\n inputText: string;\n nativeInputValue: string;\n value: any;\n lastConfirmedValue: any;\n };\n\n /** Resolved global and local mobile configuration supplied by the mobile wrapper. */\n private _mobileModeConfig?: MobileModeConfig;\n\n private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor(\n private readonly _overlay: Overlay,\n private readonly _cdRef: ChangeDetectorRef,\n private readonly _injector: Injector,\n private readonly _viewContainerRef: ViewContainerRef,\n private readonly _dynamicComponentService: DynamicComponentService,\n private readonly _focusTrapService: FocusTrapService,\n readonly _contentDensityObserver: ContentDensityObserver\n ) {\n this._repositionScrollStrategy = this._overlay.scrollStrategies.reposition({ autoClose: true });\n\n fromEvent<MouseEvent>(document, 'mousedown')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((event) => {\n if (this.mobile || !this.closeOnOutsideClick) {\n return;\n }\n const target = event.target as Node;\n if (this._elementRef.nativeElement.contains(target)) {\n return;\n }\n const overlayPane = this._popoverOverlayPane();\n if (overlayPane?.contains(target)) {\n return;\n }\n if (!this._isInputDirtyVsModel()) {\n return;\n }\n this._close();\n });\n }\n\n /** @hidden */\n onChange: (value: any) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n /** @hidden */\n ngOnInit(): void {\n if (this.readOnly) {\n this.showDropdownButton = false;\n }\n this._refreshDisplayedValues();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (this.dropdownValues && (changes.dropdownValues || changes.searchTerm)) {\n this._refreshDisplayedValues();\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._addShellbarClass();\n\n if (this.mobile) {\n this._setUpMobileMode();\n }\n\n this._setupValueSynchronization();\n }\n\n /** @hidden */\n onInputKeydownHandler(event: KeyboardEvent | string): void {\n if (this.readOnly) {\n return;\n }\n\n if (typeof event === 'string') {\n if (event === 'fromPaste') {\n this.isOpenChangeHandle(true);\n }\n } else {\n if (KeyUtil.isKeyCode(event, TAB) && this.open) {\n this._close();\n return;\n }\n\n if (KeyUtil.isKeyCode(event, ENTER)) {\n if (this.searchFn) {\n this.searchFn();\n }\n } else if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n if (event.altKey) {\n this._resetDisplayedValues();\n this.isOpenChangeHandle(true);\n }\n if (this.open && this.listComponent) {\n this.listComponent.setItemActive(0);\n } else if (!this.open) {\n this._chooseOtherItem(1);\n }\n event.preventDefault();\n } else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this._chooseOtherItem(-1);\n event.preventDefault();\n } else if (\n this.openOnKeyboardEvent &&\n !event.ctrlKey &&\n !event.altKey &&\n !KeyUtil.isKeyCode(event, this.nonOpeningKeys)\n ) {\n this.isOpenChangeHandle(true);\n if (this.isEmptyValue && KeyUtil.isKeyType(event, 'control') && !KeyUtil.isKeyCode(event, BACKSPACE)) {\n this.listComponent.setItemActive(0);\n }\n }\n }\n }\n\n /** @hidden */\n onItemKeyDownHandler(event: KeyboardEvent, value: any): void {\n if (KeyUtil.isKeyCode(event, ENTER) || KeyUtil.isKeyCode(event, SPACE)) {\n this._itemMousedown = true;\n event.preventDefault();\n this.onMenuClickHandler(value);\n }\n }\n\n /** @hidden */\n onItemFocused(value: any): void {\n if (!this._itemMousedown && !this.mobile) {\n this.onMenuClickHandler(value, false);\n }\n this._itemMousedown = false;\n }\n\n /** @hidden */\n onMenuClickHandler(value: any, shouldClosePopover = true): void {\n if (value || value === 0) {\n const index: number = this.dropdownValues.findIndex((_value) => _value === value);\n this._handleClickActions(value, shouldClosePopover);\n this.filterHighlight = false;\n this.itemClicked.emit({ item: value, index });\n }\n }\n\n /**\n * @hidden\n * Receives the resolved mobile configuration from the mobile wrapper.\n */\n setMobileModeConfig(config: MobileModeConfig): void {\n this._mobileModeConfig = config;\n }\n\n /**\n * @hidden\n * Whether the resolved mobile configuration provides a usable Approve action.\n */\n hasMobileApproveAction(): boolean {\n return !!this._mobileModeConfig?.approveButtonText?.trim();\n }\n\n /** Handle dialog dismissing, restoring an unconfirmed mobile selection when needed. */\n dialogDismiss(term?: any): void {\n if (this._isMobileConfirmationMode()) {\n this._restoreMobileConfirmationSnapshot();\n } else if (term !== undefined) {\n this.inputText = this.displayFn(term);\n this.setValue(term);\n this._lastConfirmedValue = term;\n }\n this.isOpenChangeHandle(false);\n }\n\n /** Handle dialog approval, closes popover and propagates data changes. */\n dialogApprove(): void {\n this._confirmMobileSelection();\n this._propagateChange();\n this.isOpenChangeHandle(false);\n }\n\n /** If true value empty */\n get isEmptyValue(): boolean {\n return !this.inputText || this.inputText?.trim().length === 0;\n }\n\n /** Input text of the input. */\n set inputText(value: string) {\n this.inputTextValue = value;\n if (!this.communicateByObject) {\n this._value = value;\n }\n this.inputTextChange.emit(value);\n if (!this.mobile) {\n this._propagateChange();\n }\n }\n get inputText(): string {\n return this.inputTextValue;\n }\n\n /** Get the glyph value based on whether the combobox is used as a search field or not. */\n get glyphValue(): string {\n return this.isSearch ? 'search' : this.glyph;\n }\n\n /** @hidden */\n _handleClearSearchTerm(): void {\n this.inputTextValue = '';\n this.inputTextChange.emit('');\n this.displayedValues = this.dropdownValues || [];\n this.searchInputElement.nativeElement.value = '';\n this.searchInputElement.nativeElement.focus();\n if (!this.mobile) {\n this._propagateChange();\n }\n this._cdRef.detectChanges();\n }\n\n /** @hidden */\n writeValue(value: any): void {\n // If valueProperty is specified, we need to find the object with matching property value\n let valueToDisplay = value;\n const valueProp = this.valueProperty();\n if (this.communicateByObject && valueProp && value !== null && value !== undefined) {\n // Find the object in dropdownValues that matches the given property value\n const matchingObject = this.dropdownValues?.find(\n (item) => item != null && (item as any)[valueProp] === value\n );\n if (matchingObject) {\n valueToDisplay = matchingObject;\n }\n }\n\n this.inputTextValue = this.displayFn(valueToDisplay);\n this.setValue(valueToDisplay);\n\n // Sync native input element value to ensure programmatic changes are reflected\n if (this.searchInputElement?.nativeElement) {\n this.searchInputElement.nativeElement.value = this.inputTextValue;\n }\n\n this._lastConfirmedValue = valueToDisplay;\n if (this.open && this._isMobileConfirmationMode()) {\n this._captureMobileConfirmationSnapshot();\n }\n this._cdRef.markForCheck();\n }\n\n /** @hidden */\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n /** @hidden */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** Method passed to list component */\n handleListFocusEscape(direction: FocusEscapeDirection): void {\n if (direction === 'up') {\n this.searchInputElement.nativeElement.focus();\n }\n }\n\n /** @hidden */\n handleSearchTermChange(): void {\n this.displayedValues = this.filterFn(this.dropdownValues, this.inputText);\n this.popoverComponent?.refreshPosition();\n }\n\n /** @hidden */\n onPrimaryButtonClick(): void {\n // Prevent primary button click behaviour on mobiles\n if (this.mobile) {\n return;\n }\n\n if (this.searchFn) {\n this.searchFn();\n }\n this._resetDisplayedValues();\n this.isOpenChangeHandle(!this.open);\n this.searchInputElement.nativeElement.focus();\n this.filterHighlight = false;\n if (this.open) {\n this.searchInputElement?.nativeElement.focus();\n }\n }\n\n /** @hidden */\n isOpenChangeHandle(isOpen: boolean): void {\n /** Reset displayed values on every mobile open */\n if (this.mobile && !this.open) {\n this._resetDisplayedValues();\n }\n if (isOpen && !this.open && this._isMobileConfirmationMode()) {\n this._captureMobileConfirmationSnapshot();\n }\n if (this.open !== isOpen) {\n this.open = isOpen;\n this.openChange.emit(isOpen);\n\n /** Allow combobox up and down arrows to work properly when combobox is inside a dialog with a trapped focus */\n if (this.open) {\n this._focusTrapService.pauseCurrentFocusTrap();\n } else {\n this._focusTrapService.unpauseCurrentFocusTrap();\n }\n }\n\n if (!this.open && !this.mobile) {\n this.handleBlur();\n this.searchInputElement.nativeElement.focus({ preventScroll: true });\n }\n\n this._cdRef.detectChanges();\n }\n\n /** @hidden */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._cdRef.detectChanges();\n }\n\n /** Method that handles complete event from auto complete directive, setting the new value, and closing popover */\n handleAutoComplete(event: AutoCompleteEvent): void {\n if (this.inputText !== event.term) {\n const matchingValues = this._getOptionObjectByDisplayedValue(event.term);\n if (matchingValues.length === 1) {\n this._lastConfirmedValue = matchingValues[0];\n }\n this.inputText = event.term;\n this.handleSearchTermChange();\n }\n if (event.forceClose && this.inputText) {\n this.isOpenChangeHandle(false);\n }\n }\n\n /** @hidden */\n handleBlur(): void {\n if (!this.open) {\n this.onTouched();\n this.handleAutoComplete({\n term: this.searchInputElement.nativeElement.value,\n forceClose: false\n });\n }\n }\n\n /** @hidden */\n clearInputBtnFocus(): void {\n this.clearInputBtnFocused = true;\n }\n\n /** @hidden */\n clearInputBtnBlur(): void {\n this.clearInputBtnFocused = false;\n }\n\n /** Current select value */\n getValue(): any {\n return this._value;\n }\n\n /** @hidden */\n _close(): void {\n const completedValue =\n this.tabOutStrategy === 'closeAndSelect' ? this._getCompletedAutocompleteValue() : undefined;\n\n if (completedValue !== undefined) {\n if (completedValue !== this._lastConfirmedValue) {\n this._commitCompletedAutocompleteValue(completedValue);\n }\n if (this.open) {\n this.isOpenChangeHandle(false);\n }\n this.searchInputElement.nativeElement.focus();\n return;\n }\n\n if (this.tabOutStrategy === 'closeAndSelect' && !this.communicateByObject) {\n this.searchInputElement.nativeElement.value = this.inputText;\n this.isOpenChangeHandle(false);\n this.searchInputElement.nativeElement.focus();\n return;\n }\n\n const revertText = this._lastConfirmedValue != null ? this.displayFn(this._lastConfirmedValue) : '';\n this.inputText = revertText;\n this.searchInputElement.nativeElement.value = revertText;\n if (this.tabOutStrategy === 'closeAndSelect') {\n const focusedItem = this.listComponent.getActiveItem();\n if (focusedItem && !this.inputText) {\n this._handleClickActions(focusedItem.value);\n return;\n }\n }\n this.isOpenChangeHandle(false);\n this.searchInputElement.nativeElement.focus();\n }\n\n /** @hidden */\n isSelected(term: any): boolean {\n const termValue = this.communicateByObject ? term : this.displayFn(term);\n return this.getValue() === termValue;\n }\n\n /** @hidden */\n private _popoverOverlayPane(): Element | null {\n // The combobox template sets additionalBodyClass=\"fd-popover-custom-list\" on the popover body.\n // That class is placed inside the .cdk-overlay-pane by the CDK overlay portal.\n // Walking up finds the pane, which contains all dropdown list content.\n return document.querySelector('.fd-popover-custom-list')?.closest('.cdk-overlay-pane') ?? null;\n }\n\n /** @hidden */\n private _isInputDirtyVsModel(): boolean {\n const expected = this._lastConfirmedValue != null ? this.displayFn(this._lastConfirmedValue) : '';\n return this.inputText !== expected;\n }\n\n /** @hidden */\n private _getCompletedAutocompleteValue(): any | undefined {\n const nativeInput = this.searchInputElement.nativeElement;\n const nativeValue = nativeInput.value;\n const hasSelectedSuffix =\n nativeValue !== this.inputText &&\n nativeInput.selectionStart === this.inputText.length &&\n nativeInput.selectionEnd === nativeValue.length;\n\n if (nativeValue !== this.inputText && !hasSelectedSuffix) {\n return;\n }\n\n const matchingValues = this._getOptionObjectByDisplayedValue(nativeValue);\n return matchingValues.length === 1 ? matchingValues[0] : undefined;\n }\n\n /** @hidden */\n private _commitCompletedAutocompleteValue(value: any): void {\n this._lastConfirmedValue = value;\n this.setValue(value);\n this.inputText = this.displayFn(value);\n this.searchInputElement.nativeElement.value = this.inputText;\n }\n\n /** Method that picks other value moved from current one by offset, called only when combobox is closed */\n private _chooseOtherItem(offset: number): void {\n const activeValue: any = this._getOptionObjectByDisplayedValue(this.inputTextValue)[0];\n const index: number = this.dropdownValues.findIndex((value) => value === activeValue);\n if (this.dropdownValues[index + offset]) {\n this.onMenuClickHandler(this.dropdownValues[index + offset]);\n }\n }\n\n /** Method that reset filtering for displayed values. It overrides displayed values by all possible dropdown values */\n private _resetDisplayedValues(): void {\n this.displayedValues = this.dropdownValues || [];\n }\n\n /** @hidden */\n private _addShellbarClass(): void {\n if (this.inShellbar) {\n this.searchInputElement.nativeElement.classList.add('fd-shellbar__input-group-input');\n if (this.inputGroup) {\n this.inputGroup.setInShellbar(true);\n }\n }\n }\n\n /** @hidden */\n private _defaultDisplay(str: any): string {\n return `${str}`;\n }\n\n /** @hidden */\n private _defaultFilter(contentArray: any[], searchTerm: any): any[] {\n this.filterHighlight = true;\n if (typeof searchTerm === 'string') {\n const searchLower = searchTerm.toLocaleLowerCase();\n return contentArray.filter((item) => {\n if (item) {\n const term = this.displayFn(item).toLocaleLowerCase();\n return this.includes ? term.includes(searchLower) : term.startsWith(searchLower);\n }\n });\n } else if (typeof searchTerm === 'object') {\n return contentArray.filter((item) => item === searchTerm);\n }\n return contentArray || [];\n }\n\n /** @hidden */\n private _handleClickActions(term: any, shouldClosePopover = true): void {\n const confirmationMode = this._isMobileConfirmationMode();\n if (!confirmationMode) {\n this._lastConfirmedValue = term;\n }\n if (this.fillOnSelect) {\n this.setValue(term);\n const displayText = this.displayFn(term);\n this.searchInputElement.nativeElement.value = displayText;\n this.inputText = displayText;\n this._cdRef.detectChanges();\n\n if (this.mobile && !confirmationMode) {\n this._propagateChange();\n }\n }\n if (!confirmationMode && this.closeOnSelect && shouldClosePopover) {\n this.isOpenChangeHandle(false);\n }\n if (shouldClosePopover) {\n this.handleSearchTermChange();\n }\n }\n\n /** @hidden */\n private _getOptionObjectByDisplayedValue(displayValue: string): any {\n return this.dropdownValues.filter((value) => this.displayFn(value) === displayValue);\n }\n\n /** @hidden */\n private _isMobileConfirmationMode(): boolean {\n return this.mobile && this.hasMobileApproveAction();\n }\n\n /** @hidden */\n private _captureMobileConfirmationSnapshot(): void {\n this._mobileConfirmationSnapshot = {\n inputText: this.inputTextValue,\n nativeInputValue: this.searchInputElement?.nativeElement.value ?? this.inputTextValue,\n value: this._value,\n lastConfirmedValue: this._lastConfirmedValue\n };\n }\n\n /** @hidden */\n private _restoreMobileConfirmationSnapshot(): void {\n const snapshot = this._mobileConfirmationSnapshot;\n if (!snapshot) {\n return;\n }\n\n this.inputText = snapshot.inputText;\n this._value = snapshot.value;\n this._lastConfirmedValue = snapshot.lastConfirmedValue;\n if (this.searchInputElement?.nativeElement) {\n this.searchInputElement.nativeElement.value = snapshot.nativeInputValue;\n }\n this._cdRef.markForCheck();\n }\n\n /** @hidden */\n private _confirmMobileSelection(): void {\n if (!this._isMobileConfirmationMode()) {\n return;\n }\n\n const selectedValues = this._getOptionObjectByDisplayedValue(this.inputText);\n this._lastConfirmedValue =\n this.communicateByObject && selectedValues.length === 1 ? selectedValues[0] : this.inputText;\n }\n\n /** @hidden */\n private _refreshDisplayedValues(): void {\n if (this.inputText) {\n this.displayedValues = this.filterFn(this.dropdownValues, this.inputText);\n } else {\n this.displayedValues = this.dropdownValues || [];\n }\n }\n\n /** @hidden */\n private _propagateChange(): void {\n if (this.communicateByObject) {\n const values = this._getOptionObjectByDisplayedValue(this.inputText);\n if (values.length === 1 && this.displayFn(values[0]) !== this.displayFn(this.getValue())) {\n this.setValue(values[0]);\n } else if (values.length === 0) {\n this.setValue(null);\n }\n this.onChange(this.getValue());\n } else {\n this.onChange(this.inputText);\n }\n }\n\n /** @hidden */\n private setValue(value: any): void {\n if (this.communicateByObject) {\n // If valueProperty is specified, extract that property from the selected object\n const valueProp = this.valueProperty();\n if (valueProp && typeof value === 'object' && value !== null) {\n this._value = (value as any)[valueProp];\n } else {\n this._value = value;\n }\n } else {\n this._value = this.displayFn(value);\n }\n }\n\n /** @hidden */\n private _setUpMobileMode(): void {\n const injector = Injector.create({\n providers: [{ provide: COMBOBOX_COMPONENT, useValue: this }],\n parent: this._injector\n });\n\n this._dynamicComponentService.createDynamicComponent(\n { listTemplate: this.listTemplate, controlTemplate: this.controlTemplate },\n ComboboxMobileComponent,\n {\n containerRef: this._viewContainerRef\n },\n {\n injector\n }\n );\n }\n\n /** @hidden */\n private _setupValueSynchronization(): void {\n if (!this.searchInputElement) {\n return;\n }\n\n // Listen for focus events to detect programmatic changes\n this._subscriptions.add(\n fromEvent(this.searchInputElement.nativeElement, 'focus').subscribe(() => {\n this._syncDomValueToModel();\n })\n );\n }\n\n /** @hidden */\n private _syncDomValueToModel(): void {\n if (!this.searchInputElement) {\n return;\n }\n\n const domValue = this.searchInputElement.nativeElement.value;\n if (domValue !== this.inputText) {\n // Update the model and trigger change detection\n this.inputText = domValue;\n this.handleSearchTermChange();\n this._cdRef.detectChanges();\n }\n }\n}\n","<ng-template [ngTemplateOutlet]=\"mobile ? mobileTemplate : desktopTemplate\"></ng-template>\n<ng-template #desktopTemplate>\n <fd-popover\n additionalBodyClass=\"fd-popover-custom-list\"\n [class.fd-combobox-full-width]=\"isSearch || showClearButton\"\n [isOpen]=\"open && displayedValues && displayedValues.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [scrollStrategy]=\"_repositionScrollStrategy\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"false\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readOnly\"\n [maxWidth]=\"!mobile && noDropDownMaxWidth ? null : dropDownMaxWidthPx\"\n [style.width]=\"width && '100%'\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"!displayedValues.length\">\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n<ng-template let-term=\"term\" #itemSource>\n @if (!_customRenderer) {\n <span\n fd-list-title\n fdTruncatedTitle\n [innerHTML]=\"term | displayFnPipe: displayFn | highlight: inputText : highlighting && filterHighlight\"\n >\n </span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"_customRenderer\"\n [ngTemplateOutletContext]=\"{ $implicit: term, inputText: inputText }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template #mobileTemplate>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n</ng-template>\n<ng-template #controlTemplate>\n <fd-input-group\n [button]=\"showDropdownButton\"\n [glyph]=\"showDropdownButton ? glyphValue : null\"\n [glyphFont]=\"isSearch ? _defaultFontFamily : glyphFont\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [isControl]=\"true\"\n [isExpanded]=\"!mobile && open && displayedValues.length > 0\"\n [showFocus]=\"!clearInputBtnFocused\"\n [glyphAriaLabel]=\"ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)()\"\n [iconTitle]=\"title || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)()\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n (click)=\"mobile && isOpenChangeHandle(true)\"\n >\n <input\n #searchInputElement\n fdkAutoComplete\n fd-input-group-input\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-describedby]=\"comboboxId + '-list-results'\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-expanded]=\"!mobile && open && displayedValues.length\"\n [attr.aria-required]=\"required\"\n [attr.tabindex]=\"readOnly || disabled ? -1 : null\"\n [enable]=\"autoComplete && !mobile\"\n [displayFn]=\"displayFn\"\n [options]=\"dropdownValues\"\n [inputText]=\"inputText\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [attr.aria-readonly]=\"readOnly\"\n [placeholder]=\"placeholder\"\n [id]=\"inputId\"\n [(ngModel)]=\"inputText\"\n (onComplete)=\"handleAutoComplete($event)\"\n (keydown)=\"onInputKeydownHandler($event)\"\n (paste)=\"onInputKeydownHandler('fromPaste')\"\n (ngModelChange)=\"handleSearchTermChange()\"\n (blur)=\"handleBlur()\"\n />\n @if ((isSearch || showClearButton) && inputText && inputText.length > 0) {\n <span\n class=\"fd-input-group__addon fd-input-group__addon--button\"\n [class.fd-shellbar__input-group-addon]=\"inShellbar\"\n >\n <button\n fd-button\n class=\"fd-input-group__button\"\n type=\"button\"\n [fdType]=\"inShellbar ? 'standard' : 'transparent'\"\n [title]=\"_clearButtonTitle()\"\n [class.fd-shellbar__button]=\"inShellbar\"\n [attr.tabindex]=\"clearButtonFocusable ? 0 : -1\"\n (focus)=\"clearInputBtnFocus()\"\n (blur)=\"clearInputBtnBlur()\"\n (click)=\"_handleClearSearchTerm()\"\n >\n <fd-icon glyph=\"decline\"></fd-icon>\n </button>\n </span>\n }\n </fd-input-group>\n <div [id]=\"comboboxId + '-list-results'\" class=\"fd-combobox-count-list-results\">\n {{ displayedValues.length || 0 }} result list items\n </div>\n</ng-template>\n<ng-template #listTemplate>\n @if (groupFn) {\n <div\n class=\"fd-combobox-custom-list\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n (keydown.tab)=\"_close()\"\n (keydown.shift.tab)=\"_close()\"\n >\n <ng-content></ng-content>\n @for (group of displayedValues | listGroupPipe: groupFn; track group.key; let groupIndex = $index) {\n <label class=\"fd-list__group-header\" [id]=\"comboboxId + '-group-header-' + groupIndex\">\n <span fd-list-title>{{ group.key }}</span>\n </label>\n <ul\n fd-list\n [dropdownMode]=\"true\"\n [id]=\"comboboxId + '-result-' + groupIndex\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"comboboxId + '-group-header-' + groupIndex\"\n [hasMessage]=\"listMessages && listMessages.length > 0\"\n [byline]=\"byline\"\n [tabindex]=\"groupIndex === 0 ? 0 : -1\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n >\n @for (term of group.value; track $index; let index = $index) {\n <li\n fd-list-item\n ariaRole=\"option\"\n [attr.aria-placeholder]=\"group.key\"\n [attr.aria-setsize]=\"group.value.length\"\n [attr.aria-posinset]=\"index + 1\"\n class=\"fd-combobox-list-item\"\n [selected]=\"isSelected(term)\"\n [value]=\"term\"\n (keydown)=\"onItemKeyDownHandler($event, term)\"\n (mousedown)=\"_itemMousedown = true\"\n (click)=\"onMenuClickHandler(term)\"\n (focus)=\"onItemFocused(term)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"itemSource\"\n [ngTemplateOutletContext]=\"{ term: term }\"\n ></ng-template>\n </li>\n }\n </ul>\n }\n </div>\n } @else {\n <ul\n fd-list\n class=\"fd-combobox-custom-list\"\n [dropdownMode]=\"true\"\n [id]=\"comboboxId + '-result'\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"comboboxId + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [hasMessage]=\"listMessages && listMessages.length > 0\"\n [byline]=\"byline\"\n [tabindex]=\"0\"\n (keydown.tab)=\"_close()\"\n (keydown.shift.tab)=\"_close()\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n >\n <ng-content></ng-content>\n @for (term of displayedValues; track $index) {\n <li\n fd-list-item\n ariaRole=\"option\"\n [tabindex]=\"0\"\n class=\"fd-combobox-list-item\"\n [selected]=\"isSelected(term)\"\n (keydown)=\"onItemKeyDownHandler($event, term)\"\n (mousedown)=\"_itemMousedown = true\"\n (click)=\"onMenuClickHandler(term)\"\n [value]=\"term\"\n (focus)=\"onItemFocused(term)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"itemSource\"\n [ngTemplateOutletContext]=\"{ term: term }\"\n ></ng-template>\n </li>\n }\n </ul>\n }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { ComboboxItemDirective } from './combobox-item.directive';\nimport { ComboboxComponent } from './combobox.component';\nimport { ListGroupPipe } from './list-group.pipe';\n\n/**\n * @deprecated\n * Use `ComboboxComponent` import instead.\n */\n@NgModule({\n imports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe],\n exports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe]\n})\nexport class ComboboxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fundamental-ngx/core",
|
|
3
|
-
"version": "0.65.0-rc.
|
|
3
|
+
"version": "0.65.0-rc.31",
|
|
4
4
|
"schematics": "./schematics/collection.json",
|
|
5
5
|
"ng-update": {
|
|
6
6
|
"packageGroupName": "@fundamental-ngx/core",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"@angular/forms": "^22.0.0",
|
|
38
38
|
"@angular/platform-browser": "^22.0.0",
|
|
39
39
|
"@angular/router": "^22.0.0",
|
|
40
|
-
"@fundamental-ngx/cdk": "0.65.0-rc.
|
|
41
|
-
"@fundamental-ngx/i18n": "0.65.0-rc.
|
|
40
|
+
"@fundamental-ngx/cdk": "0.65.0-rc.31",
|
|
41
|
+
"@fundamental-ngx/i18n": "0.65.0-rc.31",
|
|
42
42
|
"@sap-theming/theming-base-content": "^11.36.0",
|
|
43
43
|
"fundamental-styles": "0.41.9",
|
|
44
44
|
"rxjs": "^7.8.0"
|
package/schematics/package.json
CHANGED
|
@@ -30,7 +30,7 @@ interface ComboboxInterface extends MobileMode {
|
|
|
30
30
|
inShellbar: boolean;
|
|
31
31
|
getValue(): any;
|
|
32
32
|
dialogApprove(): void;
|
|
33
|
-
dialogDismiss(
|
|
33
|
+
dialogDismiss(term?: any): void;
|
|
34
34
|
}
|
|
35
35
|
interface ComboboxItemDirectiveContext<T = unknown> {
|
|
36
36
|
$implicit: T;
|
|
@@ -51,7 +51,11 @@ declare class ComboboxItemDirective<T = unknown> {
|
|
|
51
51
|
static ɵdir: i0.ɵɵDirectiveDeclaration<ComboboxItemDirective<any>, "[fdComboboxItem]", never, { "fdComboboxItemUse": { "alias": "fdComboboxItemUse"; "required": false; }; }, {}, never, never, true, never>;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
interface ComboboxMobileBridge extends ComboboxInterface {
|
|
55
|
+
setMobileModeConfig(config: MobileModeConfig): void;
|
|
56
|
+
hasMobileApproveAction(): boolean;
|
|
57
|
+
}
|
|
58
|
+
declare class ComboboxMobileComponent extends MobileModeBase<ComboboxMobileBridge> implements OnInit {
|
|
55
59
|
/** @hidden */
|
|
56
60
|
dialogTemplate: TemplateRef<any>;
|
|
57
61
|
/**
|
|
@@ -65,9 +69,11 @@ declare class ComboboxMobileComponent extends MobileModeBase<ComboboxInterface>
|
|
|
65
69
|
controlTemplate: TemplateRef<any>;
|
|
66
70
|
} | null;
|
|
67
71
|
/** @hidden */
|
|
68
|
-
private
|
|
72
|
+
private _handlingDialogAction;
|
|
73
|
+
/** @hidden */
|
|
74
|
+
private _dismissedByAction;
|
|
69
75
|
/** @hidden */
|
|
70
|
-
constructor(comboboxComponent:
|
|
76
|
+
constructor(comboboxComponent: ComboboxMobileBridge);
|
|
71
77
|
/** @hidden */
|
|
72
78
|
ngOnInit(): void;
|
|
73
79
|
/** @hidden */
|
|
@@ -81,6 +87,12 @@ declare class ComboboxMobileComponent extends MobileModeBase<ComboboxInterface>
|
|
|
81
87
|
/** @hidden */
|
|
82
88
|
private _open;
|
|
83
89
|
/** @hidden */
|
|
90
|
+
private _closeDialog;
|
|
91
|
+
/** @hidden */
|
|
92
|
+
private _dismissDialog;
|
|
93
|
+
/** @hidden */
|
|
94
|
+
private _canCloseDialog;
|
|
95
|
+
/** @hidden */
|
|
84
96
|
private _focusInputElementOnceOpened;
|
|
85
97
|
static ɵfac: i0.ɵɵFactoryDeclaration<ComboboxMobileComponent, never>;
|
|
86
98
|
static ɵcmp: i0.ɵɵComponentDeclaration<ComboboxMobileComponent, "fd-combobox-mobile", never, {}, {}, never, never, true, never>;
|
|
@@ -306,6 +318,10 @@ declare class ComboboxComponent<T = any> implements ComboboxInterface, SingleDro
|
|
|
306
318
|
private _value;
|
|
307
319
|
/** Last value confirmed by an explicit selection (item click) or external writeValue. */
|
|
308
320
|
private _lastConfirmedValue;
|
|
321
|
+
/** Value state to restore when a mobile confirmation dialog is dismissed. */
|
|
322
|
+
private _mobileConfirmationSnapshot?;
|
|
323
|
+
/** Resolved global and local mobile configuration supplied by the mobile wrapper. */
|
|
324
|
+
private _mobileModeConfig?;
|
|
309
325
|
private readonly _elementRef;
|
|
310
326
|
private readonly _destroyRef;
|
|
311
327
|
/** @hidden */
|
|
@@ -330,8 +346,18 @@ declare class ComboboxComponent<T = any> implements ComboboxInterface, SingleDro
|
|
|
330
346
|
onItemFocused(value: any): void;
|
|
331
347
|
/** @hidden */
|
|
332
348
|
onMenuClickHandler(value: any, shouldClosePopover?: boolean): void;
|
|
333
|
-
/**
|
|
334
|
-
|
|
349
|
+
/**
|
|
350
|
+
* @hidden
|
|
351
|
+
* Receives the resolved mobile configuration from the mobile wrapper.
|
|
352
|
+
*/
|
|
353
|
+
setMobileModeConfig(config: MobileModeConfig): void;
|
|
354
|
+
/**
|
|
355
|
+
* @hidden
|
|
356
|
+
* Whether the resolved mobile configuration provides a usable Approve action.
|
|
357
|
+
*/
|
|
358
|
+
hasMobileApproveAction(): boolean;
|
|
359
|
+
/** Handle dialog dismissing, restoring an unconfirmed mobile selection when needed. */
|
|
360
|
+
dialogDismiss(term?: any): void;
|
|
335
361
|
/** Handle dialog approval, closes popover and propagates data changes. */
|
|
336
362
|
dialogApprove(): void;
|
|
337
363
|
/** If true value empty */
|
|
@@ -396,6 +422,14 @@ declare class ComboboxComponent<T = any> implements ComboboxInterface, SingleDro
|
|
|
396
422
|
/** @hidden */
|
|
397
423
|
private _getOptionObjectByDisplayedValue;
|
|
398
424
|
/** @hidden */
|
|
425
|
+
private _isMobileConfirmationMode;
|
|
426
|
+
/** @hidden */
|
|
427
|
+
private _captureMobileConfirmationSnapshot;
|
|
428
|
+
/** @hidden */
|
|
429
|
+
private _restoreMobileConfirmationSnapshot;
|
|
430
|
+
/** @hidden */
|
|
431
|
+
private _confirmMobileSelection;
|
|
432
|
+
/** @hidden */
|
|
399
433
|
private _refreshDisplayedValues;
|
|
400
434
|
/** @hidden */
|
|
401
435
|
private _propagateChange;
|
|
@@ -5,6 +5,8 @@ import { InjectionToken, DestroyRef, ElementRef } from '@angular/core';
|
|
|
5
5
|
interface MobileModeConfig {
|
|
6
6
|
/** Dialog Title */
|
|
7
7
|
title?: string;
|
|
8
|
+
/** Short instruction text rendered below the dialog title to guide the user. */
|
|
9
|
+
instruction?: string;
|
|
8
10
|
/** Approve Button Label. If empty, button will not appear */
|
|
9
11
|
approveButtonText?: string;
|
|
10
12
|
/** Cancel Button Label. If empty, button will not appear */
|