@vsn-ux/ngx-gaia 0.12.4 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/input.md CHANGED
@@ -22,7 +22,40 @@ Export: `gaInput`
22
22
 
23
23
  ## `<ga-input>`
24
24
 
25
- Wrapper component for inputs with prefix/suffix elements.
25
+ Wrapper component for inputs with prefix/suffix elements. Automatically sets `aria-busy="true"` when `ga-input-loading` is present inside. Built-in suffix components include `<ga-input-clear-button>` and `<ga-input-loading>`, but any custom content can also be placed after the input as a suffix.
26
+
27
+ ## `<ga-input-loading>`
28
+
29
+ Loading spinner for use inside `<ga-input>`.
30
+
31
+ ### Inputs
32
+
33
+ - `announcement: string` - Screen reader announcement via `aria-label` (default: `''`)
34
+ - `ariaLive: 'polite' | 'assertive'` - `aria-live` region behavior (default: `'polite'`)
35
+
36
+ ## `<ga-input-clear-button>`
37
+
38
+ Clear button for use inside `<ga-input>`. Displays a CircleX icon.
39
+
40
+ ### Inputs
41
+
42
+ - `ariaLabel: string` - Button aria-label override (default: `GaInputI18n.clearLabel`)
43
+
44
+ ### Outputs
45
+
46
+ - `cleared: void` - Emitted when the clear button is clicked
47
+
48
+ ## GaInputI18n
49
+
50
+ Abstract class for input internationalization.
51
+
52
+ ### Properties
53
+
54
+ - `clearLabel: string` - Default label for the clear button (default: `'Clear'`)
55
+
56
+ ## Providers
57
+
58
+ - `provideGaInputI18n(value: GaInputI18n | (() => GaInputI18n))` - Configure input i18n labels
26
59
 
27
60
  ## Examples
28
61
 
@@ -41,17 +74,39 @@ Input with prefix icon
41
74
  </ga-input>
42
75
  ```
43
76
 
44
- Input with suffix button
77
+ Input with clear button
45
78
 
46
79
  ```html
47
80
  <ga-input>
48
81
  <input gaInput type="text" placeholder="Search" [(ngModel)]="search" />
49
- <button type="button" aria-label="clear" (click)="search = ''">
50
- <ga-icon [icon]="CircleXIcon" size="16" />
51
- </button>
82
+ <ga-input-clear-button (cleared)="search = ''" />
52
83
  </ga-input>
53
84
  ```
54
85
 
86
+ Input with loading spinner
87
+
88
+ ```html
89
+ <ga-input>
90
+ <input gaInput type="text" placeholder="Search" [(ngModel)]="search" />
91
+ <ga-input-loading announcement="Searching..." />
92
+ </ga-input>
93
+ ```
94
+
95
+ Input with custom suffix
96
+
97
+ ```html
98
+ <ga-input>
99
+ <input gaInput type="text" placeholder="0.00" />
100
+ <span>EUR</span>
101
+ </ga-input>
102
+ ```
103
+
104
+ Custom i18n labels
105
+
106
+ ```typescript
107
+ provideGaInputI18n({ clearLabel: 'Tøm' });
108
+ ```
109
+
55
110
  Programmatic focus
56
111
 
57
112
  ```typescript
@@ -1336,10 +1336,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
1336
1336
  args: ['placeholder']
1337
1337
  }] }], propDecorators: { inErrorInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "inError", required: false }] }], idInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
1338
1338
 
1339
+ class GaInputLoadingComponent {
1340
+ announcement = input('', ...(ngDevMode ? [{ debugName: "announcement" }] : []));
1341
+ ariaLive = input('polite', ...(ngDevMode ? [{ debugName: "ariaLive" }] : []));
1342
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaInputLoadingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1343
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: GaInputLoadingComponent, isStandalone: true, selector: "ga-input-loading", inputs: { announcement: { classPropertyName: "announcement", publicName: "announcement", isSignal: true, isRequired: false, transformFunction: null }, ariaLive: { classPropertyName: "ariaLive", publicName: "ariaLive", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "status" }, properties: { "attr.aria-label": "announcement() || null", "attr.aria-live": "ariaLive()" } }, ngImport: i0, template: `<ga-spinner size="16" />`, isInline: true, styles: [":host{display:inline-flex}\n"], dependencies: [{ kind: "component", type: GaSpinnerComponent, selector: "ga-spinner", inputs: ["size"] }] });
1344
+ }
1345
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaInputLoadingComponent, decorators: [{
1346
+ type: Component,
1347
+ args: [{ selector: 'ga-input-loading', template: `<ga-spinner size="16" />`, imports: [GaSpinnerComponent], host: {
1348
+ role: 'status',
1349
+ '[attr.aria-label]': 'announcement() || null',
1350
+ '[attr.aria-live]': 'ariaLive()',
1351
+ }, styles: [":host{display:inline-flex}\n"] }]
1352
+ }], propDecorators: { announcement: [{ type: i0.Input, args: [{ isSignal: true, alias: "announcement", required: false }] }], ariaLive: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLive", required: false }] }] } });
1353
+
1339
1354
  class GaInputComponent {
1340
1355
  gaInput = contentChild.required(GaInputDirective);
1356
+ loading = contentChild(GaInputLoadingComponent, ...(ngDevMode ? [{ debugName: "loading" }] : []));
1341
1357
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1342
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type: GaInputComponent, isStandalone: true, selector: "ga-input", host: { listeners: { "click": "gaInput().focus()" }, properties: { "class.ga-input--invalid": "gaInput().inError()" }, classAttribute: "ga-input" }, queries: [{ propertyName: "gaInput", first: true, predicate: GaInputDirective, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1$1.CdkOverlayOrigin }], ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1358
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type: GaInputComponent, isStandalone: true, selector: "ga-input", host: { listeners: { "click": "gaInput().focus()" }, properties: { "class.ga-input--invalid": "gaInput().inError()", "attr.aria-busy": "loading() ? \"true\" : null" }, classAttribute: "ga-input" }, queries: [{ propertyName: "gaInput", first: true, predicate: GaInputDirective, descendants: true, isSignal: true }, { propertyName: "loading", first: true, predicate: GaInputLoadingComponent, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1$1.CdkOverlayOrigin }], ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1343
1359
  }
1344
1360
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaInputComponent, decorators: [{
1345
1361
  type: Component,
@@ -1351,10 +1367,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
1351
1367
  host: {
1352
1368
  class: 'ga-input',
1353
1369
  '[class.ga-input--invalid]': 'gaInput().inError()',
1370
+ '[attr.aria-busy]': 'loading() ? "true" : null',
1354
1371
  '(click)': 'gaInput().focus()',
1355
1372
  },
1356
1373
  }]
1357
- }], propDecorators: { gaInput: [{ type: i0.ContentChild, args: [i0.forwardRef(() => GaInputDirective), { isSignal: true }] }] } });
1374
+ }], propDecorators: { gaInput: [{ type: i0.ContentChild, args: [i0.forwardRef(() => GaInputDirective), { isSignal: true }] }], loading: [{ type: i0.ContentChild, args: [i0.forwardRef(() => GaInputLoadingComponent), { isSignal: true }] }] } });
1358
1375
 
1359
1376
  class GaDatepickerToggleComponent {
1360
1377
  icons = { CalendarDays };
@@ -1438,13 +1455,13 @@ class GaDatepickerToggleComponent {
1438
1455
  this.close();
1439
1456
  }
1440
1457
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaDatepickerToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1441
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: GaDatepickerToggleComponent, isStandalone: true, selector: "ga-datepicker-toggle", inputs: { for: { classPropertyName: "for", publicName: "for", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "keydown.escape": "close()" } }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"ga-datepicker-toggle\"\n [disabled]=\"for().disabled()\"\n (click)=\"toggle()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-label]=\"i18n.openCalendarLabel\"\n tabindex=\"-1\"\n>\n <ga-icon [icon]=\"icons.CalendarDays\" size=\"24\" />\n</button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"repositionScrollStrategy\"\n (overlayOutsideClick)=\"close()\"\n (overlayKeydown)=\"$event.code === 'Escape' && close()\"\n>\n <div class=\"ga-datepicker\">\n <ga-datepicker\n [value]=\"for().value()\"\n (valueChange)=\"onDatepickerValueChange($event)\"\n [min]=\"for().min()\"\n [max]=\"for().max()\"\n />\n <div class=\"ga-datepicker__footer\">\n <button type=\"button\" gaButton (click)=\"setToday()\">\n {{ i18n.todayButtonLabel }}\n </button>\n </div>\n </div>\n</ng-template>\n", styles: [".ga-datepicker__footer{text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: GaIconModule }, { kind: "component", type: GaIconComponent, selector: "ga-icon", inputs: ["icon", "size", "color", "strokeWidth"] }, { kind: "ngmodule", type: GaButtonModule }, { kind: "component", type: GaButtonDirective, selector: "button[gaButton], a[gaButton]", inputs: ["gaButton", "gaButtonLoading", "gaButtonLoadingLabel", "disabled"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1$1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "component", type: GaDatepickerComponent, selector: "ga-datepicker", inputs: ["value", "min", "max"], outputs: ["valueChange"] }], encapsulation: i0.ViewEncapsulation.None });
1458
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: GaDatepickerToggleComponent, isStandalone: true, selector: "ga-datepicker-toggle", inputs: { for: { classPropertyName: "for", publicName: "for", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "keydown.escape": "close()" } }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"ga-datepicker-toggle\"\n [disabled]=\"for().disabled()\"\n (click)=\"toggle()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-label]=\"i18n.openCalendarLabel\"\n tabindex=\"-1\"\n>\n <ga-icon [icon]=\"icons.CalendarDays\" size=\"24\" />\n</button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"repositionScrollStrategy\"\n (overlayOutsideClick)=\"close()\"\n (overlayKeydown)=\"$event.code === 'Escape' && close()\"\n>\n <div\n class=\"ga-datepicker\"\n animate.enter=\"ga-animation-reveal\"\n animate.leave=\"ga-animation-dismiss\"\n >\n <ga-datepicker\n [value]=\"for().value()\"\n (valueChange)=\"onDatepickerValueChange($event)\"\n [min]=\"for().min()\"\n [max]=\"for().max()\"\n />\n <div class=\"ga-datepicker__footer\">\n <button type=\"button\" gaButton (click)=\"setToday()\">\n {{ i18n.todayButtonLabel }}\n </button>\n </div>\n </div>\n</ng-template>\n", styles: [".ga-datepicker__footer{text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: GaIconModule }, { kind: "component", type: GaIconComponent, selector: "ga-icon", inputs: ["icon", "size", "color", "strokeWidth"] }, { kind: "ngmodule", type: GaButtonModule }, { kind: "component", type: GaButtonDirective, selector: "button[gaButton], a[gaButton]", inputs: ["gaButton", "gaButtonLoading", "gaButtonLoadingLabel", "disabled"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1$1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "component", type: GaDatepickerComponent, selector: "ga-datepicker", inputs: ["value", "min", "max"], outputs: ["valueChange"] }], encapsulation: i0.ViewEncapsulation.None });
1442
1459
  }
1443
1460
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaDatepickerToggleComponent, decorators: [{
1444
1461
  type: Component,
1445
1462
  args: [{ selector: 'ga-datepicker-toggle', imports: [GaIconModule, GaButtonModule, OverlayModule, GaDatepickerComponent], encapsulation: ViewEncapsulation.None, host: {
1446
1463
  '(keydown.escape)': 'close()',
1447
- }, template: "<button\n type=\"button\"\n class=\"ga-datepicker-toggle\"\n [disabled]=\"for().disabled()\"\n (click)=\"toggle()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-label]=\"i18n.openCalendarLabel\"\n tabindex=\"-1\"\n>\n <ga-icon [icon]=\"icons.CalendarDays\" size=\"24\" />\n</button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"repositionScrollStrategy\"\n (overlayOutsideClick)=\"close()\"\n (overlayKeydown)=\"$event.code === 'Escape' && close()\"\n>\n <div class=\"ga-datepicker\">\n <ga-datepicker\n [value]=\"for().value()\"\n (valueChange)=\"onDatepickerValueChange($event)\"\n [min]=\"for().min()\"\n [max]=\"for().max()\"\n />\n <div class=\"ga-datepicker__footer\">\n <button type=\"button\" gaButton (click)=\"setToday()\">\n {{ i18n.todayButtonLabel }}\n </button>\n </div>\n </div>\n</ng-template>\n", styles: [".ga-datepicker__footer{text-align:center}\n"] }]
1464
+ }, template: "<button\n type=\"button\"\n class=\"ga-datepicker-toggle\"\n [disabled]=\"for().disabled()\"\n (click)=\"toggle()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-label]=\"i18n.openCalendarLabel\"\n tabindex=\"-1\"\n>\n <ga-icon [icon]=\"icons.CalendarDays\" size=\"24\" />\n</button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"repositionScrollStrategy\"\n (overlayOutsideClick)=\"close()\"\n (overlayKeydown)=\"$event.code === 'Escape' && close()\"\n>\n <div\n class=\"ga-datepicker\"\n animate.enter=\"ga-animation-reveal\"\n animate.leave=\"ga-animation-dismiss\"\n >\n <ga-datepicker\n [value]=\"for().value()\"\n (valueChange)=\"onDatepickerValueChange($event)\"\n [min]=\"for().min()\"\n [max]=\"for().max()\"\n />\n <div class=\"ga-datepicker__footer\">\n <button type=\"button\" gaButton (click)=\"setToday()\">\n {{ i18n.todayButtonLabel }}\n </button>\n </div>\n </div>\n</ng-template>\n", styles: [".ga-datepicker__footer{text-align:center}\n"] }]
1448
1465
  }], propDecorators: { for: [{ type: i0.Input, args: [{ isSignal: true, alias: "for", required: true }] }] } });
1449
1466
 
1450
1467
  function GA_DATEPICKER_PARSER_FORMATTER_FACTORY() {
@@ -2102,16 +2119,81 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
2102
2119
  }]
2103
2120
  }] });
2104
2121
 
2122
+ function GA_INPUT_I18N_FACTORY() {
2123
+ return new GaInputI18nDefault();
2124
+ }
2125
+ class GaInputI18n {
2126
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaInputI18n, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2127
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaInputI18n, providedIn: 'root', useFactory: GA_INPUT_I18N_FACTORY });
2128
+ }
2129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaInputI18n, decorators: [{
2130
+ type: Injectable,
2131
+ args: [{
2132
+ providedIn: 'root',
2133
+ useFactory: GA_INPUT_I18N_FACTORY,
2134
+ }]
2135
+ }] });
2136
+ class GaInputI18nDefault extends GaInputI18n {
2137
+ /** A label for the clear button */
2138
+ clearLabel = 'Clear';
2139
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaInputI18nDefault, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
2140
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaInputI18nDefault });
2141
+ }
2142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaInputI18nDefault, decorators: [{
2143
+ type: Injectable
2144
+ }] });
2145
+ function provideGaInputI18n(value) {
2146
+ return makeEnvironmentProviders([
2147
+ typeof value === 'function'
2148
+ ? { provide: GaInputI18n, useFactory: value }
2149
+ : { provide: GaInputI18n, useValue: value },
2150
+ ]);
2151
+ }
2152
+
2153
+ class GaInputClearButtonComponent {
2154
+ i18n = inject(GaInputI18n);
2155
+ icon = CircleX;
2156
+ ariaLabel = input('', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
2157
+ cleared = output();
2158
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaInputClearButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2159
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: GaInputClearButtonComponent, isStandalone: true, selector: "ga-input-clear-button", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cleared: "cleared" }, host: { attributes: { "role": "button", "tabindex": "-1" }, listeners: { "click": "cleared.emit(); $event.stopPropagation()" }, properties: { "attr.aria-label": "ariaLabel() || i18n.clearLabel" } }, ngImport: i0, template: `<ga-icon [icon]="icon" size="16" />`, isInline: true, styles: [":host{display:flex;cursor:pointer}\n"], dependencies: [{ kind: "component", type: GaIconComponent, selector: "ga-icon", inputs: ["icon", "size", "color", "strokeWidth"] }] });
2160
+ }
2161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaInputClearButtonComponent, decorators: [{
2162
+ type: Component,
2163
+ args: [{ selector: 'ga-input-clear-button', template: `<ga-icon [icon]="icon" size="16" />`, imports: [GaIconComponent], host: {
2164
+ role: 'button',
2165
+ tabindex: '-1',
2166
+ '[attr.aria-label]': 'ariaLabel() || i18n.clearLabel',
2167
+ '(click)': 'cleared.emit(); $event.stopPropagation()',
2168
+ }, styles: [":host{display:flex;cursor:pointer}\n"] }]
2169
+ }], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], cleared: [{ type: i0.Output, args: ["cleared"] }] } });
2170
+
2105
2171
  class GaInputModule {
2106
2172
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2107
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: GaInputModule, imports: [GaInputComponent, GaInputDirective], exports: [GaInputComponent, GaInputDirective] });
2108
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaInputModule });
2173
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: GaInputModule, imports: [GaInputComponent,
2174
+ GaInputDirective,
2175
+ GaInputLoadingComponent,
2176
+ GaInputClearButtonComponent], exports: [GaInputComponent,
2177
+ GaInputDirective,
2178
+ GaInputLoadingComponent,
2179
+ GaInputClearButtonComponent] });
2180
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaInputModule, imports: [GaInputClearButtonComponent] });
2109
2181
  }
2110
2182
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaInputModule, decorators: [{
2111
2183
  type: NgModule,
2112
2184
  args: [{
2113
- imports: [GaInputComponent, GaInputDirective],
2114
- exports: [GaInputComponent, GaInputDirective],
2185
+ imports: [
2186
+ GaInputComponent,
2187
+ GaInputDirective,
2188
+ GaInputLoadingComponent,
2189
+ GaInputClearButtonComponent,
2190
+ ],
2191
+ exports: [
2192
+ GaInputComponent,
2193
+ GaInputDirective,
2194
+ GaInputLoadingComponent,
2195
+ GaInputClearButtonComponent,
2196
+ ],
2115
2197
  }]
2116
2198
  }] });
2117
2199
 
@@ -2338,12 +2420,13 @@ class GaTooltipComponent {
2338
2420
  this.mouseLeaveSubject.next();
2339
2421
  }
2340
2422
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2341
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: GaTooltipComponent, isStandalone: true, selector: "ga-tooltip", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { hideTriggered: "hideTriggered" }, host: { listeners: { "mouseenter": "handleMouseEnter()", "mouseleave": "handleMouseLeave()" }, properties: { "attr.style": "inlineStyle()" } }, ngImport: i0, template: "<div role=\"tooltip\" [attr.id]=\"uniqueId\" [class]=\"cssClass()\">\n @if (text()) {\n {{ text() }}\n } @else if (template()) {\n <ng-container\n [ngTemplateOutlet]=\"template()\"\n [ngTemplateOutletContext]=\"{ hide: triggerHide }\"\n />\n }\n</div>\n", styles: [".top-start :host,.top-center :host,.top-end :host{padding-bottom:var(--ga-tooltip-offset)}.bottom-start :host,.bottom-center :host,.bottom-end :host{padding-top:var(--ga-tooltip-offset)}.left-start :host,.left-center :host,.left-end :host{padding-right:var(--ga-tooltip-offset)}.right-start :host,.right-center :host,.right-end :host{padding-left:var(--ga-tooltip-offset)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2423
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: GaTooltipComponent, isStandalone: true, selector: "ga-tooltip", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { hideTriggered: "hideTriggered" }, host: { attributes: { "animate.enter": "ga-animation-reveal" }, listeners: { "mouseenter": "handleMouseEnter()", "mouseleave": "handleMouseLeave()" }, properties: { "attr.style": "inlineStyle()" } }, ngImport: i0, template: "<div role=\"tooltip\" [attr.id]=\"uniqueId\" [class]=\"cssClass()\">\n @if (text()) {\n {{ text() }}\n } @else if (template()) {\n <ng-container\n [ngTemplateOutlet]=\"template()\"\n [ngTemplateOutletContext]=\"{ hide: triggerHide }\"\n />\n }\n</div>\n", styles: [".top-start :host,.top-center :host,.top-end :host{padding-bottom:var(--ga-tooltip-offset)}.bottom-start :host,.bottom-center :host,.bottom-end :host{padding-top:var(--ga-tooltip-offset)}.left-start :host,.left-center :host,.left-end :host{padding-right:var(--ga-tooltip-offset)}.right-start :host,.right-center :host,.right-end :host{padding-left:var(--ga-tooltip-offset)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2342
2424
  }
2343
2425
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaTooltipComponent, decorators: [{
2344
2426
  type: Component,
2345
2427
  args: [{ selector: 'ga-tooltip', imports: [NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, host: {
2346
2428
  '[attr.style]': 'inlineStyle()',
2429
+ 'animate.enter': 'ga-animation-reveal',
2347
2430
  }, template: "<div role=\"tooltip\" [attr.id]=\"uniqueId\" [class]=\"cssClass()\">\n @if (text()) {\n {{ text() }}\n } @else if (template()) {\n <ng-container\n [ngTemplateOutlet]=\"template()\"\n [ngTemplateOutletContext]=\"{ hide: triggerHide }\"\n />\n }\n</div>\n", styles: [".top-start :host,.top-center :host,.top-end :host{padding-bottom:var(--ga-tooltip-offset)}.bottom-start :host,.bottom-center :host,.bottom-end :host{padding-top:var(--ga-tooltip-offset)}.left-start :host,.left-center :host,.left-end :host{padding-right:var(--ga-tooltip-offset)}.right-start :host,.right-center :host,.right-end :host{padding-left:var(--ga-tooltip-offset)}\n"] }]
2348
2431
  }], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: true }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "offset", required: false }] }], hideTriggered: [{ type: i0.Output, args: ["hideTriggered"] }], handleMouseEnter: [{
2349
2432
  type: HostListener,
@@ -2373,6 +2456,7 @@ class GaTooltipDirective {
2373
2456
  _offset = GA_TOOLTIP_DEFAULT_OFFSET;
2374
2457
  mouseOver = false;
2375
2458
  focused = false;
2459
+ isAnimatingOut = false;
2376
2460
  ariaDescribedBy = signal(null, ...(ngDevMode ? [{ debugName: "ariaDescribedBy" }] : []));
2377
2461
  _showControlMode = null;
2378
2462
  _hideControlMode = null;
@@ -2439,12 +2523,17 @@ class GaTooltipDirective {
2439
2523
  }
2440
2524
  ngOnDestroy() {
2441
2525
  this.clearShowTimeout();
2526
+ this.isAnimatingOut = false;
2442
2527
  this.destroyed$.next();
2443
2528
  this.destroyed$.complete();
2444
2529
  this.overlayRef?.detach();
2445
2530
  this.overlayRef?.dispose();
2446
2531
  }
2447
2532
  show() {
2533
+ if (this.isAnimatingOut) {
2534
+ this.cancelDismissAnimation();
2535
+ return;
2536
+ }
2448
2537
  if (this.overlayRef?.hasAttached()) {
2449
2538
  return;
2450
2539
  }
@@ -2486,6 +2575,27 @@ class GaTooltipDirective {
2486
2575
  });
2487
2576
  }
2488
2577
  hide() {
2578
+ if (!this.overlayRef?.hasAttached() || this.isAnimatingOut) {
2579
+ return;
2580
+ }
2581
+ const hostEl = this.tooltipRef?.location.nativeElement;
2582
+ if (!hostEl) {
2583
+ this.detach();
2584
+ return;
2585
+ }
2586
+ hostEl.classList.add('ga-animation-dismiss');
2587
+ const duration = parseFloat(getComputedStyle(hostEl).animationDuration || '0');
2588
+ if (!duration) {
2589
+ this.detach();
2590
+ return;
2591
+ }
2592
+ this.isAnimatingOut = true;
2593
+ hostEl.addEventListener('animationend', () => this.detach(), {
2594
+ once: true,
2595
+ });
2596
+ }
2597
+ detach() {
2598
+ this.isAnimatingOut = false;
2489
2599
  if (!this.overlayRef?.hasAttached()) {
2490
2600
  return;
2491
2601
  }
@@ -2496,6 +2606,11 @@ class GaTooltipDirective {
2496
2606
  this.tooltipRef = undefined;
2497
2607
  this.ariaDescribedBy.set(null);
2498
2608
  }
2609
+ cancelDismissAnimation() {
2610
+ this.isAnimatingOut = false;
2611
+ const hostEl = this.tooltipRef?.location.nativeElement;
2612
+ hostEl?.classList.remove('ga-animation-dismiss');
2613
+ }
2499
2614
  toggle() {
2500
2615
  if (!this.overlayRef?.hasAttached()) {
2501
2616
  this.show();
@@ -2887,12 +3002,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
2887
3002
 
2888
3003
  class GaMenuComponent {
2889
3004
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2890
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: GaMenuComponent, isStandalone: true, selector: "ga-menu", host: { classAttribute: "ga-menu" }, hostDirectives: [{ directive: i1$2.CdkMenu }], ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host{margin-top:calc(var(--ga-size-spacing-03) * var(--ga-base-scaling-factor, 1));margin-bottom:calc(var(--ga-size-spacing-03) * var(--ga-base-scaling-factor, 1))}\n"] });
3005
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: GaMenuComponent, isStandalone: true, selector: "ga-menu", host: { attributes: { "animate.enter": "ga-animation-reveal", "animate.leave": "ga-animation-dismiss" }, classAttribute: "ga-menu" }, hostDirectives: [{ directive: i1$2.CdkMenu }], ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host{margin-top:calc(var(--ga-size-spacing-03) * var(--ga-base-scaling-factor, 1));margin-bottom:calc(var(--ga-size-spacing-03) * var(--ga-base-scaling-factor, 1))}\n"] });
2891
3006
  }
2892
3007
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaMenuComponent, decorators: [{
2893
3008
  type: Component,
2894
3009
  args: [{ selector: 'ga-menu', template: `<ng-content />`, hostDirectives: [CdkMenu], host: {
2895
3010
  class: 'ga-menu',
3011
+ 'animate.enter': 'ga-animation-reveal',
3012
+ 'animate.leave': 'ga-animation-dismiss',
2896
3013
  }, styles: [":host{margin-top:calc(var(--ga-size-spacing-03) * var(--ga-base-scaling-factor, 1));margin-bottom:calc(var(--ga-size-spacing-03) * var(--ga-base-scaling-factor, 1))}\n"] }]
2897
3014
  }] });
2898
3015
 
@@ -3979,12 +4096,14 @@ class GaSelectDropdownComponent {
3979
4096
  this.elementRef.nativeElement.scrollTo(0, 0);
3980
4097
  }
3981
4098
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaSelectDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3982
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: GaSelectDropdownComponent, isStandalone: true, selector: "ga-select-dropdown", inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "ga-dropdown ga-dropdown__content" }, hostDirectives: [{ directive: i1$5.CdkListbox }], ngImport: i0, template: "@if (loading()) {\n <ga-select-dropdown-spinner />\n} @else {\n <ng-content />\n}\n", dependencies: [{ kind: "component", type: GaSelectDropdownSpinnerComponent, selector: "ga-select-dropdown-spinner" }] });
4099
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: GaSelectDropdownComponent, isStandalone: true, selector: "ga-select-dropdown", inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "animate.enter": "ga-animation-reveal", "animate.leave": "ga-animation-dismiss" }, classAttribute: "ga-dropdown ga-dropdown__content" }, hostDirectives: [{ directive: i1$5.CdkListbox }], ngImport: i0, template: "@if (loading()) {\n <ga-select-dropdown-spinner />\n} @else {\n <ng-content />\n}\n", dependencies: [{ kind: "component", type: GaSelectDropdownSpinnerComponent, selector: "ga-select-dropdown-spinner" }] });
3983
4100
  }
3984
4101
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaSelectDropdownComponent, decorators: [{
3985
4102
  type: Component,
3986
4103
  args: [{ selector: 'ga-select-dropdown', imports: [GaSelectDropdownSpinnerComponent], hostDirectives: [CdkListbox], host: {
3987
4104
  class: 'ga-dropdown ga-dropdown__content',
4105
+ 'animate.enter': 'ga-animation-reveal',
4106
+ 'animate.leave': 'ga-animation-dismiss',
3988
4107
  }, template: "@if (loading()) {\n <ga-select-dropdown-spinner />\n} @else {\n <ng-content />\n}\n" }]
3989
4108
  }], propDecorators: { loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
3990
4109
 
@@ -5379,7 +5498,7 @@ class GaDataSelectComponent {
5379
5498
  useExisting: forwardRef(() => GaDataSelectComponent),
5380
5499
  multi: true,
5381
5500
  },
5382
- ], queries: [{ propertyName: "customValueTemplate", first: true, predicate: GaDataSelectValueDirective, descendants: true, isSignal: true }, { propertyName: "customOptionLabelTemplate", first: true, predicate: GaDataSelectOptionLabelDirective, descendants: true, isSignal: true }, { propertyName: "customOptgroupLabelTemplate", first: true, predicate: GaDataSelectOptgroupLabelDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "dropdownElRef", first: true, predicate: ["selectDropdown"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "gaOptions", predicate: GaDataOptionComponent, descendants: true, isSignal: true }, { propertyName: "cdkListbox", first: true, predicate: CdkListbox, descendants: true, isSignal: true }, { propertyName: "gaDropdown", first: true, predicate: GaDataSelectDropdownComponent, descendants: true, isSignal: true }, { propertyName: "inputSearch", first: true, predicate: ["inputSearch"], descendants: true, isSignal: true }, { propertyName: "connectedOverlay", first: true, predicate: CdkConnectedOverlay, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1$1.CdkOverlayOrigin }, { directive: GaLabelledByFormFieldDirective, inputs: ["aria-labelledby", "aria-labelledby"] }], ngImport: i0, template: "@if (leftIcon()) {\n <ga-icon [icon]=\"leftIcon()!\" />\n}\n\n<div class=\"ga-select__main-area\">\n @if (hasValue() && (!searchValue() || multiple())) {\n <ga-data-select-value\n [customValueTemplate]=\"customValueTemplate()?.templateRef\"\n />\n\n @if (multiple() && !searchable() && labelHidden()) {\n <div class=\"ga-select__placeholder\" [title]=\"placeholder()\">\n {{ placeholder() }}\n </div>\n }\n } @else if (!searchable()) {\n <div class=\"ga-select__placeholder\">\n {{ placeholder() }}\n </div>\n }\n\n @if (searchable()) {\n <input\n #inputSearch\n type=\"text\"\n tabindex=\"-1\"\n class=\"ga-select__input\"\n aria-autocomplete=\"list\"\n [value]=\"searchValue() ?? ''\"\n (input)=\"open(); searchValue.set(inputSearch.value)\"\n (click)=\"open(); $event.stopPropagation()\"\n [attr.aria-controls]=\"isOpen() ? cdkListbox()?.id : null\"\n [attr.aria-activedescendant]=\"isOpen() ? activeDescendantId() : null\"\n [attr.aria-label]=\"i18n.searchInputLabel\"\n [placeholder]=\"hasValue() && !labelHidden() ? '' : placeholder()\"\n [title]=\"labelHidden() ? placeholder() : ''\"\n (keydown)=\"onInputKeyDown($event)\"\n [disabled]=\"disabled()\"\n />\n }\n</div>\n\n<div class=\"ga-select__suffix\">\n @if (clearable() && hasValue()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"clearValue(); $event.stopPropagation()\"\n [attr.aria-label]=\"clearableLabel() ?? i18n.clearLabel\"\n style=\"font-size: 0\"\n >\n <ga-icon [icon]=\"icons.CircleX\" size=\"16\" />\n </button>\n }\n\n <ga-icon [icon]=\"menuStatusIcon()\" class=\"ga-select__action-icon\" />\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"repositionScrollStrategy\"\n [cdkConnectedOverlayMinWidth]=\"overlayWidth()\"\n (overlayOutsideClick)=\"close()\"\n (attach)=\"onOverlayAttach()\"\n (detach)=\"onOverlayDetach()\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n>\n <ga-data-select-dropdown\n [multiple]=\"multiple()\"\n [useActiveDescendant]=\"searchable()\"\n [navigationWrapDisabled]=\"loading()\"\n [compareWith]=\"listboxCompareWith()\"\n [loading]=\"loading()\"\n [hasNoOptions]=\"hasNoOptions()\"\n #selectDropdown\n >\n @if (hasNoOptions() && !loading()) {\n <div class=\"ga-dropdown__empty\">\n {{ noOptionsLabel() ?? i18n.noOptionsLabel }}\n </div>\n }\n\n @for (group of groupedItems(); track group.label) {\n @if (group.label) {\n <ga-data-optgroup\n [label]=\"group.label\"\n [customLabelTemplate]=\"customOptgroupLabelTemplate()?.templateRef\"\n [customLabelContext]=\"getOptgroupLabelTemplateContext(group)\"\n >\n @for (item of group.items; track getItemValue(item)) {\n <ga-data-option\n [value]=\"getItemValue(item)\"\n [withInput]=\"withOptionInput()\"\n [disabled]=\"getItemDisabled(item)\"\n [typeaheadLabel]=\"getItemTypeaheadLabel(item)\"\n >\n @if (customOptionLabelTemplate(); as labelTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"labelTemplate.templateRef\"\n [ngTemplateOutletContext]=\"\n getOptionLabelTemplateContext(item)\n \"\n />\n } @else {\n {{ getItemLabel(item) }}\n }\n </ga-data-option>\n }\n </ga-data-optgroup>\n } @else {\n @for (item of group.items; track getItemValue(item)) {\n <ga-data-option\n [value]=\"getItemValue(item)\"\n [withInput]=\"withOptionInput() ?? multiple()\"\n [disabled]=\"getItemDisabled(item)\"\n [typeaheadLabel]=\"getItemTypeaheadLabel(item)\"\n >\n @if (customOptionLabelTemplate(); as labelTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"labelTemplate.templateRef\"\n [ngTemplateOutletContext]=\"getOptionLabelTemplateContext(item)\"\n />\n } @else {\n {{ getItemLabel(item) }}\n }\n </ga-data-option>\n }\n }\n }\n\n <!--\n Virtual items: Render hidden disabled options for all selected values.\n This ensures cdkListbox maintains state when filtering occurs - even when\n selected values don't match the currently visible filtered options, they\n remain valid options in the listbox, preventing state loss.\n -->\n @for (item of virtualItems(); track getItemValue(item)) {\n <ga-data-option\n [value]=\"getItemValue(item)\"\n [withInput]=\"withOptionInput() ?? multiple()\"\n disabled\n hidden\n >\n @if (customOptionLabelTemplate(); as labelTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"labelTemplate.templateRef\"\n [ngTemplateOutletContext]=\"getOptionLabelTemplateContext(item)\"\n />\n } @else {\n {{ getItemLabel(item) }}\n }\n </ga-data-option>\n }\n\n <ga-intersection-trigger\n parentAsRoot\n rootMargin=\"0% 0% 20px 0%\"\n (trigger)=\"endReached()\"\n />\n </ga-data-select-dropdown>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: GaIconModule }, { kind: "component", type: GaIconComponent, selector: "ga-icon", inputs: ["icon", "size", "color", "strokeWidth"] }, { kind: "ngmodule", type: GaButtonModule }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1$1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "component", type: GaDataSelectValueComponent, selector: "ga-data-select-value", inputs: ["customValueTemplate"] }, { kind: "component", type: GaDataSelectDropdownComponent, selector: "ga-data-select-dropdown", inputs: ["loading", "hasNoOptions"] }, { kind: "component", type: GaDataOptionComponent, selector: "ga-data-option", inputs: ["value", "disabled", "withInput"] }, { kind: "component", type: GaDataOptgroupComponent, selector: "ga-data-optgroup", inputs: ["label", "customLabelTemplate", "customLabelContext"] }, { kind: "component", type: GaIntersectionTriggerComponent, selector: "ga-intersection-trigger", inputs: ["rootElement", "rootMargin", "parentAsRoot"], outputs: ["trigger"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
5501
+ ], queries: [{ propertyName: "customValueTemplate", first: true, predicate: GaDataSelectValueDirective, descendants: true, isSignal: true }, { propertyName: "customOptionLabelTemplate", first: true, predicate: GaDataSelectOptionLabelDirective, descendants: true, isSignal: true }, { propertyName: "customOptgroupLabelTemplate", first: true, predicate: GaDataSelectOptgroupLabelDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "dropdownElRef", first: true, predicate: ["selectDropdown"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "gaOptions", predicate: GaDataOptionComponent, descendants: true, isSignal: true }, { propertyName: "cdkListbox", first: true, predicate: CdkListbox, descendants: true, isSignal: true }, { propertyName: "gaDropdown", first: true, predicate: GaDataSelectDropdownComponent, descendants: true, isSignal: true }, { propertyName: "inputSearch", first: true, predicate: ["inputSearch"], descendants: true, isSignal: true }, { propertyName: "connectedOverlay", first: true, predicate: CdkConnectedOverlay, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1$1.CdkOverlayOrigin }, { directive: GaLabelledByFormFieldDirective, inputs: ["aria-labelledby", "aria-labelledby"] }], ngImport: i0, template: "@if (leftIcon()) {\n <ga-icon [icon]=\"leftIcon()!\" />\n}\n\n<div class=\"ga-select__main-area\">\n @if (hasValue() && (!searchValue() || multiple())) {\n <ga-data-select-value\n [customValueTemplate]=\"customValueTemplate()?.templateRef\"\n />\n\n @if (multiple() && !searchable() && labelHidden()) {\n <div class=\"ga-select__placeholder\" [title]=\"placeholder()\">\n {{ placeholder() }}\n </div>\n }\n } @else if (!searchable()) {\n <div class=\"ga-select__placeholder\">\n {{ placeholder() }}\n </div>\n }\n\n @if (searchable()) {\n <input\n #inputSearch\n type=\"text\"\n tabindex=\"-1\"\n class=\"ga-select__input\"\n aria-autocomplete=\"list\"\n [value]=\"searchValue() ?? ''\"\n (input)=\"open(); searchValue.set(inputSearch.value)\"\n (click)=\"open(); $event.stopPropagation()\"\n [attr.aria-controls]=\"isOpen() ? cdkListbox()?.id : null\"\n [attr.aria-activedescendant]=\"isOpen() ? activeDescendantId() : null\"\n [attr.aria-label]=\"i18n.searchInputLabel\"\n [placeholder]=\"hasValue() && !labelHidden() ? '' : placeholder()\"\n [title]=\"labelHidden() ? placeholder() : ''\"\n (keydown)=\"onInputKeyDown($event)\"\n [disabled]=\"disabled()\"\n />\n }\n</div>\n\n<div class=\"ga-select__suffix\">\n @if (clearable() && hasValue()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"clearValue(); $event.stopPropagation()\"\n [attr.aria-label]=\"clearableLabel() ?? i18n.clearLabel\"\n style=\"font-size: 0\"\n >\n <ga-icon [icon]=\"icons.CircleX\" size=\"16\" />\n </button>\n }\n\n <ga-icon [icon]=\"menuStatusIcon()\" class=\"ga-select__action-icon\" />\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"repositionScrollStrategy\"\n [cdkConnectedOverlayMinWidth]=\"overlayWidth()\"\n (overlayOutsideClick)=\"close()\"\n (attach)=\"onOverlayAttach()\"\n (detach)=\"onOverlayDetach()\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n>\n <ga-data-select-dropdown\n animate.enter=\"ga-animation-reveal\"\n animate.leave=\"ga-animation-dismiss\"\n [multiple]=\"multiple()\"\n [useActiveDescendant]=\"searchable()\"\n [navigationWrapDisabled]=\"loading()\"\n [compareWith]=\"listboxCompareWith()\"\n [loading]=\"loading()\"\n [hasNoOptions]=\"hasNoOptions()\"\n #selectDropdown\n >\n @if (hasNoOptions() && !loading()) {\n <div class=\"ga-dropdown__empty\">\n {{ noOptionsLabel() ?? i18n.noOptionsLabel }}\n </div>\n }\n\n @for (group of groupedItems(); track group.label) {\n @if (group.label) {\n <ga-data-optgroup\n [label]=\"group.label\"\n [customLabelTemplate]=\"customOptgroupLabelTemplate()?.templateRef\"\n [customLabelContext]=\"getOptgroupLabelTemplateContext(group)\"\n >\n @for (item of group.items; track getItemValue(item)) {\n <ga-data-option\n [value]=\"getItemValue(item)\"\n [withInput]=\"withOptionInput()\"\n [disabled]=\"getItemDisabled(item)\"\n [typeaheadLabel]=\"getItemTypeaheadLabel(item)\"\n >\n @if (customOptionLabelTemplate(); as labelTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"labelTemplate.templateRef\"\n [ngTemplateOutletContext]=\"\n getOptionLabelTemplateContext(item)\n \"\n />\n } @else {\n {{ getItemLabel(item) }}\n }\n </ga-data-option>\n }\n </ga-data-optgroup>\n } @else {\n @for (item of group.items; track getItemValue(item)) {\n <ga-data-option\n [value]=\"getItemValue(item)\"\n [withInput]=\"withOptionInput() ?? multiple()\"\n [disabled]=\"getItemDisabled(item)\"\n [typeaheadLabel]=\"getItemTypeaheadLabel(item)\"\n >\n @if (customOptionLabelTemplate(); as labelTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"labelTemplate.templateRef\"\n [ngTemplateOutletContext]=\"getOptionLabelTemplateContext(item)\"\n />\n } @else {\n {{ getItemLabel(item) }}\n }\n </ga-data-option>\n }\n }\n }\n\n <!--\n Virtual items: Render hidden disabled options for all selected values.\n This ensures cdkListbox maintains state when filtering occurs - even when\n selected values don't match the currently visible filtered options, they\n remain valid options in the listbox, preventing state loss.\n -->\n @for (item of virtualItems(); track getItemValue(item)) {\n <ga-data-option\n [value]=\"getItemValue(item)\"\n [withInput]=\"withOptionInput() ?? multiple()\"\n disabled\n hidden\n >\n @if (customOptionLabelTemplate(); as labelTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"labelTemplate.templateRef\"\n [ngTemplateOutletContext]=\"getOptionLabelTemplateContext(item)\"\n />\n } @else {\n {{ getItemLabel(item) }}\n }\n </ga-data-option>\n }\n\n <ga-intersection-trigger\n parentAsRoot\n rootMargin=\"0% 0% 20px 0%\"\n (trigger)=\"endReached()\"\n />\n </ga-data-select-dropdown>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: GaIconModule }, { kind: "component", type: GaIconComponent, selector: "ga-icon", inputs: ["icon", "size", "color", "strokeWidth"] }, { kind: "ngmodule", type: GaButtonModule }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1$1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "component", type: GaDataSelectValueComponent, selector: "ga-data-select-value", inputs: ["customValueTemplate"] }, { kind: "component", type: GaDataSelectDropdownComponent, selector: "ga-data-select-dropdown", inputs: ["loading", "hasNoOptions"] }, { kind: "component", type: GaDataOptionComponent, selector: "ga-data-option", inputs: ["value", "disabled", "withInput"] }, { kind: "component", type: GaDataOptgroupComponent, selector: "ga-data-optgroup", inputs: ["label", "customLabelTemplate", "customLabelContext"] }, { kind: "component", type: GaIntersectionTriggerComponent, selector: "ga-intersection-trigger", inputs: ["rootElement", "rootMargin", "parentAsRoot"], outputs: ["trigger"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
5383
5502
  }
5384
5503
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GaDataSelectComponent, decorators: [{
5385
5504
  type: Component,
@@ -5428,7 +5547,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5428
5547
  '(keydown.space)': 'open(); $event.preventDefault()',
5429
5548
  '(keydown.enter)': 'open(); $event.preventDefault()',
5430
5549
  '(keydown.backspace)': 'clearValue(); $event.preventDefault()',
5431
- }, template: "@if (leftIcon()) {\n <ga-icon [icon]=\"leftIcon()!\" />\n}\n\n<div class=\"ga-select__main-area\">\n @if (hasValue() && (!searchValue() || multiple())) {\n <ga-data-select-value\n [customValueTemplate]=\"customValueTemplate()?.templateRef\"\n />\n\n @if (multiple() && !searchable() && labelHidden()) {\n <div class=\"ga-select__placeholder\" [title]=\"placeholder()\">\n {{ placeholder() }}\n </div>\n }\n } @else if (!searchable()) {\n <div class=\"ga-select__placeholder\">\n {{ placeholder() }}\n </div>\n }\n\n @if (searchable()) {\n <input\n #inputSearch\n type=\"text\"\n tabindex=\"-1\"\n class=\"ga-select__input\"\n aria-autocomplete=\"list\"\n [value]=\"searchValue() ?? ''\"\n (input)=\"open(); searchValue.set(inputSearch.value)\"\n (click)=\"open(); $event.stopPropagation()\"\n [attr.aria-controls]=\"isOpen() ? cdkListbox()?.id : null\"\n [attr.aria-activedescendant]=\"isOpen() ? activeDescendantId() : null\"\n [attr.aria-label]=\"i18n.searchInputLabel\"\n [placeholder]=\"hasValue() && !labelHidden() ? '' : placeholder()\"\n [title]=\"labelHidden() ? placeholder() : ''\"\n (keydown)=\"onInputKeyDown($event)\"\n [disabled]=\"disabled()\"\n />\n }\n</div>\n\n<div class=\"ga-select__suffix\">\n @if (clearable() && hasValue()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"clearValue(); $event.stopPropagation()\"\n [attr.aria-label]=\"clearableLabel() ?? i18n.clearLabel\"\n style=\"font-size: 0\"\n >\n <ga-icon [icon]=\"icons.CircleX\" size=\"16\" />\n </button>\n }\n\n <ga-icon [icon]=\"menuStatusIcon()\" class=\"ga-select__action-icon\" />\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"repositionScrollStrategy\"\n [cdkConnectedOverlayMinWidth]=\"overlayWidth()\"\n (overlayOutsideClick)=\"close()\"\n (attach)=\"onOverlayAttach()\"\n (detach)=\"onOverlayDetach()\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n>\n <ga-data-select-dropdown\n [multiple]=\"multiple()\"\n [useActiveDescendant]=\"searchable()\"\n [navigationWrapDisabled]=\"loading()\"\n [compareWith]=\"listboxCompareWith()\"\n [loading]=\"loading()\"\n [hasNoOptions]=\"hasNoOptions()\"\n #selectDropdown\n >\n @if (hasNoOptions() && !loading()) {\n <div class=\"ga-dropdown__empty\">\n {{ noOptionsLabel() ?? i18n.noOptionsLabel }}\n </div>\n }\n\n @for (group of groupedItems(); track group.label) {\n @if (group.label) {\n <ga-data-optgroup\n [label]=\"group.label\"\n [customLabelTemplate]=\"customOptgroupLabelTemplate()?.templateRef\"\n [customLabelContext]=\"getOptgroupLabelTemplateContext(group)\"\n >\n @for (item of group.items; track getItemValue(item)) {\n <ga-data-option\n [value]=\"getItemValue(item)\"\n [withInput]=\"withOptionInput()\"\n [disabled]=\"getItemDisabled(item)\"\n [typeaheadLabel]=\"getItemTypeaheadLabel(item)\"\n >\n @if (customOptionLabelTemplate(); as labelTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"labelTemplate.templateRef\"\n [ngTemplateOutletContext]=\"\n getOptionLabelTemplateContext(item)\n \"\n />\n } @else {\n {{ getItemLabel(item) }}\n }\n </ga-data-option>\n }\n </ga-data-optgroup>\n } @else {\n @for (item of group.items; track getItemValue(item)) {\n <ga-data-option\n [value]=\"getItemValue(item)\"\n [withInput]=\"withOptionInput() ?? multiple()\"\n [disabled]=\"getItemDisabled(item)\"\n [typeaheadLabel]=\"getItemTypeaheadLabel(item)\"\n >\n @if (customOptionLabelTemplate(); as labelTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"labelTemplate.templateRef\"\n [ngTemplateOutletContext]=\"getOptionLabelTemplateContext(item)\"\n />\n } @else {\n {{ getItemLabel(item) }}\n }\n </ga-data-option>\n }\n }\n }\n\n <!--\n Virtual items: Render hidden disabled options for all selected values.\n This ensures cdkListbox maintains state when filtering occurs - even when\n selected values don't match the currently visible filtered options, they\n remain valid options in the listbox, preventing state loss.\n -->\n @for (item of virtualItems(); track getItemValue(item)) {\n <ga-data-option\n [value]=\"getItemValue(item)\"\n [withInput]=\"withOptionInput() ?? multiple()\"\n disabled\n hidden\n >\n @if (customOptionLabelTemplate(); as labelTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"labelTemplate.templateRef\"\n [ngTemplateOutletContext]=\"getOptionLabelTemplateContext(item)\"\n />\n } @else {\n {{ getItemLabel(item) }}\n }\n </ga-data-option>\n }\n\n <ga-intersection-trigger\n parentAsRoot\n rootMargin=\"0% 0% 20px 0%\"\n (trigger)=\"endReached()\"\n />\n </ga-data-select-dropdown>\n</ng-template>\n" }]
5550
+ }, template: "@if (leftIcon()) {\n <ga-icon [icon]=\"leftIcon()!\" />\n}\n\n<div class=\"ga-select__main-area\">\n @if (hasValue() && (!searchValue() || multiple())) {\n <ga-data-select-value\n [customValueTemplate]=\"customValueTemplate()?.templateRef\"\n />\n\n @if (multiple() && !searchable() && labelHidden()) {\n <div class=\"ga-select__placeholder\" [title]=\"placeholder()\">\n {{ placeholder() }}\n </div>\n }\n } @else if (!searchable()) {\n <div class=\"ga-select__placeholder\">\n {{ placeholder() }}\n </div>\n }\n\n @if (searchable()) {\n <input\n #inputSearch\n type=\"text\"\n tabindex=\"-1\"\n class=\"ga-select__input\"\n aria-autocomplete=\"list\"\n [value]=\"searchValue() ?? ''\"\n (input)=\"open(); searchValue.set(inputSearch.value)\"\n (click)=\"open(); $event.stopPropagation()\"\n [attr.aria-controls]=\"isOpen() ? cdkListbox()?.id : null\"\n [attr.aria-activedescendant]=\"isOpen() ? activeDescendantId() : null\"\n [attr.aria-label]=\"i18n.searchInputLabel\"\n [placeholder]=\"hasValue() && !labelHidden() ? '' : placeholder()\"\n [title]=\"labelHidden() ? placeholder() : ''\"\n (keydown)=\"onInputKeyDown($event)\"\n [disabled]=\"disabled()\"\n />\n }\n</div>\n\n<div class=\"ga-select__suffix\">\n @if (clearable() && hasValue()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"clearValue(); $event.stopPropagation()\"\n [attr.aria-label]=\"clearableLabel() ?? i18n.clearLabel\"\n style=\"font-size: 0\"\n >\n <ga-icon [icon]=\"icons.CircleX\" size=\"16\" />\n </button>\n }\n\n <ga-icon [icon]=\"menuStatusIcon()\" class=\"ga-select__action-icon\" />\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"repositionScrollStrategy\"\n [cdkConnectedOverlayMinWidth]=\"overlayWidth()\"\n (overlayOutsideClick)=\"close()\"\n (attach)=\"onOverlayAttach()\"\n (detach)=\"onOverlayDetach()\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n>\n <ga-data-select-dropdown\n animate.enter=\"ga-animation-reveal\"\n animate.leave=\"ga-animation-dismiss\"\n [multiple]=\"multiple()\"\n [useActiveDescendant]=\"searchable()\"\n [navigationWrapDisabled]=\"loading()\"\n [compareWith]=\"listboxCompareWith()\"\n [loading]=\"loading()\"\n [hasNoOptions]=\"hasNoOptions()\"\n #selectDropdown\n >\n @if (hasNoOptions() && !loading()) {\n <div class=\"ga-dropdown__empty\">\n {{ noOptionsLabel() ?? i18n.noOptionsLabel }}\n </div>\n }\n\n @for (group of groupedItems(); track group.label) {\n @if (group.label) {\n <ga-data-optgroup\n [label]=\"group.label\"\n [customLabelTemplate]=\"customOptgroupLabelTemplate()?.templateRef\"\n [customLabelContext]=\"getOptgroupLabelTemplateContext(group)\"\n >\n @for (item of group.items; track getItemValue(item)) {\n <ga-data-option\n [value]=\"getItemValue(item)\"\n [withInput]=\"withOptionInput()\"\n [disabled]=\"getItemDisabled(item)\"\n [typeaheadLabel]=\"getItemTypeaheadLabel(item)\"\n >\n @if (customOptionLabelTemplate(); as labelTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"labelTemplate.templateRef\"\n [ngTemplateOutletContext]=\"\n getOptionLabelTemplateContext(item)\n \"\n />\n } @else {\n {{ getItemLabel(item) }}\n }\n </ga-data-option>\n }\n </ga-data-optgroup>\n } @else {\n @for (item of group.items; track getItemValue(item)) {\n <ga-data-option\n [value]=\"getItemValue(item)\"\n [withInput]=\"withOptionInput() ?? multiple()\"\n [disabled]=\"getItemDisabled(item)\"\n [typeaheadLabel]=\"getItemTypeaheadLabel(item)\"\n >\n @if (customOptionLabelTemplate(); as labelTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"labelTemplate.templateRef\"\n [ngTemplateOutletContext]=\"getOptionLabelTemplateContext(item)\"\n />\n } @else {\n {{ getItemLabel(item) }}\n }\n </ga-data-option>\n }\n }\n }\n\n <!--\n Virtual items: Render hidden disabled options for all selected values.\n This ensures cdkListbox maintains state when filtering occurs - even when\n selected values don't match the currently visible filtered options, they\n remain valid options in the listbox, preventing state loss.\n -->\n @for (item of virtualItems(); track getItemValue(item)) {\n <ga-data-option\n [value]=\"getItemValue(item)\"\n [withInput]=\"withOptionInput() ?? multiple()\"\n disabled\n hidden\n >\n @if (customOptionLabelTemplate(); as labelTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"labelTemplate.templateRef\"\n [ngTemplateOutletContext]=\"getOptionLabelTemplateContext(item)\"\n />\n } @else {\n {{ getItemLabel(item) }}\n }\n </ga-data-option>\n }\n\n <ga-intersection-trigger\n parentAsRoot\n rootMargin=\"0% 0% 20px 0%\"\n (trigger)=\"endReached()\"\n />\n </ga-data-select-dropdown>\n</ng-template>\n" }]
5432
5551
  }], ctorParameters: () => [], propDecorators: { multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], labelHidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelHidden", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], inErrorInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "inError", required: false }] }], compareFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "compareFn", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], customFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "customFilter", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], clearableLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearableLabel", required: false }] }], noOptionsLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "noOptionsLabel", required: false }] }], canSelectNullable: [{ type: i0.Input, args: [{ isSignal: true, alias: "canSelectNullable", required: false }] }], leftIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "leftIcon", required: false }] }], idInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], bindValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindValue", required: false }] }], bindLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindLabel", required: false }] }], groupBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupBy", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], withOptionInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "withOptionInput", required: false }] }], valueDisplayLimit: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueDisplayLimit", required: false }] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }], searchValueChange: [{ type: i0.Output, args: ["searchValueChange"] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }], optionsEndReached: [{ type: i0.Output, args: ["optionsEndReached"] }], dropdownElRef: [{ type: i0.ViewChild, args: ['selectDropdown', { ...{
5433
5552
  read: ElementRef,
5434
5553
  }, isSignal: true }] }], gaOptions: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => GaDataOptionComponent), { isSignal: true }] }], cdkListbox: [{ type: i0.ViewChild, args: [i0.forwardRef(() => CdkListbox), { isSignal: true }] }], gaDropdown: [{ type: i0.ViewChild, args: [i0.forwardRef(() => GaDataSelectDropdownComponent), { isSignal: true }] }], customValueTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => GaDataSelectValueDirective), { isSignal: true }] }], customOptionLabelTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => GaDataSelectOptionLabelDirective), { isSignal: true }] }], customOptgroupLabelTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => GaDataSelectOptgroupLabelDirective), { isSignal: true }] }], inputSearch: [{ type: i0.ViewChild, args: ['inputSearch', { isSignal: true }] }], connectedOverlay: [{ type: i0.ViewChild, args: [i0.forwardRef(() => CdkConnectedOverlay), { isSignal: true }] }] } });
@@ -6549,5 +6668,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
6549
6668
  * Generated bundle index. Do not edit.
6550
6669
  */
6551
6670
 
6552
- export { CHECKBOX_CONTROL_VALUE_ACCESSOR, DEFAULT_MODAL_OPTIONS, GA_ALERT_I18N_FACTORY, GA_BASE_FONT_SIZE, GA_BUTTON_I18N_FACTORY, GA_CHECKBOX_REQUIRED_VALIDATOR, GA_DATA_SELECT_I18N_FACTORY, GA_DATA_SELECT_REQUIRED_VALIDATOR, GA_DATEPICKER_I18N_FACTORY, GA_DATEPICKER_INPUT_OPTIONS, GA_DATEPICKER_PARSER_FORMATTER_FACTORY, GA_DATEPICKER_VALUE_ADAPTER_FACTORY, GA_DATE_PARSER_FORMATTER_CONFIG, GA_DEFAULT_DATEPICKER_FORMATS, GA_DEFAULT_DATEPICKER_INPUT_OPTIONS, GA_DEFAULT_TOAST_OPTIONS, GA_FORM_CONTROL_ADAPTER, GA_FORM_ERRORS, GA_ICON_DEFAULT_SIZE, GA_MODAL_DATA, GA_MODAL_I18N_FACTORY, GA_SELECT_I18N_FACTORY, GA_SELECT_REQUIRED_VALIDATOR, GA_TABS_I18N_FACTORY, GA_TOAST_OPTIONS, GA_TOOLTIP_DEFAULT_OFFSET, GaAlertComponent, GaAlertI18n, GaAlertI18nDefault, GaAlertModule, GaAlertTitleActionsComponent, GaAlertTitleComponent, GaBadgeComponent, GaBadgeModule, GaButtonDirective, GaButtonI18n, GaButtonI18nDefault, GaButtonModule, GaCardComponent, GaCardModule, GaCheckboxComponent, GaCheckboxModule, GaCheckboxRequiredValidator, GaChipComponent, GaChipListboxComponent, GaChipModule, GaDataSelectComponent, GaDataSelectI18n, GaDataSelectI18nDefault, GaDataSelectModule, GaDataSelectOptgroupLabelDirective, GaDataSelectOptionLabelDirective, GaDataSelectRequiredValidator, GaDataSelectValueDirective, GaDatepickerComponent, GaDatepickerI18n, GaDatepickerI18nDefault, GaDatepickerInputDirective, GaDatepickerModule, GaDatepickerNativeUtcIsoValueAdapter, GaDatepickerNativeUtcValueAdapter, GaDatepickerParserFormatter, GaDatepickerParserFormatterDefault, GaDatepickerStructValueAdapter, GaDatepickerToggleComponent, GaDatepickerValueAdapter, GaFieldErrorDirective, GaFieldInfoComponent, GaFieldLabelComponent, GaFormControlDirective, GaFormControlErrorsDirective, GaFormFieldComponent, GaFormFieldConnector, GaFormFieldModule, GaIconButtonDirective, GaIconComponent, GaIconModule, GaInputComponent, GaInputDirective, GaInputModule, GaLabelledByFormFieldDirective, GaLinkDirective, GaLinkModule, GaMenuComponent, GaMenuItemComponent, GaMenuModule, GaMenuSeparatorComponent, GaMenuTitleComponent, GaMenuTriggerDirective, GaMenuTriggerIconComponent, GaModalActionsComponent, GaModalCloseDirective, GaModalComponent, GaModalContentComponent, GaModalDescriptionComponent, GaModalDescriptionDirective, GaModalHeaderComponent, GaModalI18n, GaModalI18nDefault, GaModalLabelDirective, GaModalModule, GaModalOptions, GaModalRef, GaModalService, GaModalTitleDirective, GaOptgroupComponent, GaOptionComponent, GaRadioButtonComponent, GaRadioGroupComponent, GaRadioModule, GaSegmentedControlButtonDirective, GaSegmentedControlComponent, GaSegmentedControlIconButtonComponent, GaSegmentedControlModule, GaSegmentedControlTextButtonComponent, GaSelectComponent, GaSelectDropdownComponent, GaSelectDropdownSpinnerComponent, GaSelectI18n, GaSelectI18nDefault, GaSelectModule, GaSelectRequiredValidator, GaSelectValueComponent, GaSpinnerComponent, GaSpinnerModule, GaStepComponent, GaStepperComponent, GaStepperModule, GaStepperPanelDirective, GaSwitchComponent, GaSwitchModule, GaTabComponent, GaTabContentDirective, GaTabsComponent, GaTabsI18n, GaTabsI18nDefault, GaTabsModule, GaTextAreaDirective, GaTextAreaModule, GaToastComponent, GaToaster, GaTooltipComponent, GaTooltipDirective, GaTooltipModule, GaTooltipTitleComponent, RADIO_CONTROL_VALUE_ACCESSOR, SWITCH_CONTROL_VALUE_ACCESSOR, compareStructs, extendGaDateParserFormatter, injectNgControlState, provideGaAlertI18n, provideGaBaseFontSize, provideGaButtonI18n, provideGaDataSelectI18n, provideGaDatepickerI18n, provideGaDatepickerInputOptions, provideGaDatepickerParserFormatter, provideGaDatepickerValueAdapter, provideGaFormErrors, provideGaModalI18n, provideGaModalOptions, provideGaSelectI18n, provideGaTabsI18n, provideGaToastOptions };
6671
+ export { CHECKBOX_CONTROL_VALUE_ACCESSOR, DEFAULT_MODAL_OPTIONS, GA_ALERT_I18N_FACTORY, GA_BASE_FONT_SIZE, GA_BUTTON_I18N_FACTORY, GA_CHECKBOX_REQUIRED_VALIDATOR, GA_DATA_SELECT_I18N_FACTORY, GA_DATA_SELECT_REQUIRED_VALIDATOR, GA_DATEPICKER_I18N_FACTORY, GA_DATEPICKER_INPUT_OPTIONS, GA_DATEPICKER_PARSER_FORMATTER_FACTORY, GA_DATEPICKER_VALUE_ADAPTER_FACTORY, GA_DATE_PARSER_FORMATTER_CONFIG, GA_DEFAULT_DATEPICKER_FORMATS, GA_DEFAULT_DATEPICKER_INPUT_OPTIONS, GA_DEFAULT_TOAST_OPTIONS, GA_FORM_CONTROL_ADAPTER, GA_FORM_ERRORS, GA_ICON_DEFAULT_SIZE, GA_INPUT_I18N_FACTORY, GA_MODAL_DATA, GA_MODAL_I18N_FACTORY, GA_SELECT_I18N_FACTORY, GA_SELECT_REQUIRED_VALIDATOR, GA_TABS_I18N_FACTORY, GA_TOAST_OPTIONS, GA_TOOLTIP_DEFAULT_OFFSET, GaAlertComponent, GaAlertI18n, GaAlertI18nDefault, GaAlertModule, GaAlertTitleActionsComponent, GaAlertTitleComponent, GaBadgeComponent, GaBadgeModule, GaButtonDirective, GaButtonI18n, GaButtonI18nDefault, GaButtonModule, GaCardComponent, GaCardModule, GaCheckboxComponent, GaCheckboxModule, GaCheckboxRequiredValidator, GaChipComponent, GaChipListboxComponent, GaChipModule, GaDataSelectComponent, GaDataSelectI18n, GaDataSelectI18nDefault, GaDataSelectModule, GaDataSelectOptgroupLabelDirective, GaDataSelectOptionLabelDirective, GaDataSelectRequiredValidator, GaDataSelectValueDirective, GaDatepickerComponent, GaDatepickerI18n, GaDatepickerI18nDefault, GaDatepickerInputDirective, GaDatepickerModule, GaDatepickerNativeUtcIsoValueAdapter, GaDatepickerNativeUtcValueAdapter, GaDatepickerParserFormatter, GaDatepickerParserFormatterDefault, GaDatepickerStructValueAdapter, GaDatepickerToggleComponent, GaDatepickerValueAdapter, GaFieldErrorDirective, GaFieldInfoComponent, GaFieldLabelComponent, GaFormControlDirective, GaFormControlErrorsDirective, GaFormFieldComponent, GaFormFieldConnector, GaFormFieldModule, GaIconButtonDirective, GaIconComponent, GaIconModule, GaInputClearButtonComponent, GaInputComponent, GaInputDirective, GaInputI18n, GaInputI18nDefault, GaInputLoadingComponent, GaInputModule, GaLabelledByFormFieldDirective, GaLinkDirective, GaLinkModule, GaMenuComponent, GaMenuItemComponent, GaMenuModule, GaMenuSeparatorComponent, GaMenuTitleComponent, GaMenuTriggerDirective, GaMenuTriggerIconComponent, GaModalActionsComponent, GaModalCloseDirective, GaModalComponent, GaModalContentComponent, GaModalDescriptionComponent, GaModalDescriptionDirective, GaModalHeaderComponent, GaModalI18n, GaModalI18nDefault, GaModalLabelDirective, GaModalModule, GaModalOptions, GaModalRef, GaModalService, GaModalTitleDirective, GaOptgroupComponent, GaOptionComponent, GaRadioButtonComponent, GaRadioGroupComponent, GaRadioModule, GaSegmentedControlButtonDirective, GaSegmentedControlComponent, GaSegmentedControlIconButtonComponent, GaSegmentedControlModule, GaSegmentedControlTextButtonComponent, GaSelectComponent, GaSelectDropdownComponent, GaSelectDropdownSpinnerComponent, GaSelectI18n, GaSelectI18nDefault, GaSelectModule, GaSelectRequiredValidator, GaSelectValueComponent, GaSpinnerComponent, GaSpinnerModule, GaStepComponent, GaStepperComponent, GaStepperModule, GaStepperPanelDirective, GaSwitchComponent, GaSwitchModule, GaTabComponent, GaTabContentDirective, GaTabsComponent, GaTabsI18n, GaTabsI18nDefault, GaTabsModule, GaTextAreaDirective, GaTextAreaModule, GaToastComponent, GaToaster, GaTooltipComponent, GaTooltipDirective, GaTooltipModule, GaTooltipTitleComponent, RADIO_CONTROL_VALUE_ACCESSOR, SWITCH_CONTROL_VALUE_ACCESSOR, compareStructs, extendGaDateParserFormatter, injectNgControlState, provideGaAlertI18n, provideGaBaseFontSize, provideGaButtonI18n, provideGaDataSelectI18n, provideGaDatepickerI18n, provideGaDatepickerInputOptions, provideGaDatepickerParserFormatter, provideGaDatepickerValueAdapter, provideGaFormErrors, provideGaInputI18n, provideGaModalI18n, provideGaModalOptions, provideGaSelectI18n, provideGaTabsI18n, provideGaToastOptions };
6553
6672
  //# sourceMappingURL=vsn-ux-ngx-gaia.mjs.map