@eui/eds 22.0.0-alpha.33 → 22.0.0-alpha.35

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/llms.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  # eui documentation
2
2
 
3
- > Generated by compodoc 2.0.0 at 2026-09-30T11:29:14.430Z, llm-md export.
3
+ > Generated by compodoc 2.0.0 at 2026-09-30T17:58:06.467Z, llm-md export.
4
4
 
5
5
  ## Components
6
6
 
@@ -2225,12 +2225,16 @@ Description: EDS Multiselect component — a combobox-style dropdown that allows
2225
2225
 
2226
2226
  Inputs:
2227
2227
  - `ariaLabel: string = 'Select options'` — Aria-label for the combobox trigger. 'Select options'
2228
+ - `cancelLabel: string = 'Cancel'` — Label for the panel-footer "Cancel" button. 'Cancel'
2229
+ - `confirmLabel: string = 'Confirm choice'` — Label for the panel-footer "Confirm choice" button. 'Confirm choice'
2228
2230
  - `disabled: boolean = false` — Controls whether the multiselect is disabled. false
2229
2231
  - `e2eAttr: string = 'eds-multiselect'` — Data attribute value for end-to-end testing identification. 'eds-multiselect'
2230
2232
  - `isInvalid: boolean = false` — Controls whether the multiselect shows an invalid/error state. false
2231
2233
  - `placeholder: string = 'Select options'` — Placeholder text displayed when no options are selected. 'Select options'
2232
2234
 
2233
2235
  Outputs:
2236
+ - `cancelled: void` — Emits when the "Cancel" button is clicked (selection reverted to its pre-open state).
2237
+ - `confirmed: string[]` — Emits the confirmed selection when the "Confirm choice" button is clicked.
2234
2238
  - `valueChange: string[]` — Emits the current selection whenever it changes.
2235
2239
 
2236
2240
  Properties:
@@ -2255,6 +2259,7 @@ Description: An individual option within the EDS Multiselect dropdown. Supports
2255
2259
 
2256
2260
  Inputs:
2257
2261
  - `isDisabled: boolean = false` — Whether this option is disabled. false
2262
+ - `isGroup: boolean = false` — Whether this entry is a non-selectable group header. When true the entry renders as plain label text, is skipped by keyboard navigation, and cannot be selected. false
2258
2263
  - `label: string` — The display label for this option.
2259
2264
  - `value: string` — The value associated with this option.
2260
2265
 
@@ -128,7 +128,7 @@
128
128
  </ol>
129
129
  <ul class="properties-list">
130
130
  <li>
131
- <b>Version</b> : 22.0.0-alpha.33</li>
131
+ <b>Version</b> : 22.0.0-alpha.35</li>
132
132
  </ul>
133
133
 
134
134
 
@@ -8,6 +8,10 @@ import { ActiveDescendantKeyManager, A11yModule } from '@angular/cdk/a11y';
8
8
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
9
9
  import * as i1 from '@eui/eds/eds-icon';
10
10
  import { EDS_ICON } from '@eui/eds/eds-icon';
11
+ import * as i3 from '@eui/eds/eds-input-checkbox';
12
+ import { EDS_INPUT_CHECKBOX } from '@eui/eds/eds-input-checkbox';
13
+ import * as i4 from '@eui/eds/eds-button';
14
+ import { EDS_BUTTON } from '@eui/eds/eds-button';
11
15
 
12
16
  /**
13
17
  * @description
@@ -36,6 +40,13 @@ class EdsMultiselectOption {
36
40
  * @default false
37
41
  */
38
42
  this.isDisabled = input(false, { ...(ngDevMode ? { debugName: "isDisabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
43
+ /**
44
+ * Whether this entry is a non-selectable group header.
45
+ * When true the entry renders as plain label text, is skipped by keyboard
46
+ * navigation, and cannot be selected.
47
+ * @default false
48
+ */
49
+ this.isGroup = input(false, { ...(ngDevMode ? { debugName: "isGroup" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
39
50
  /** Whether this option is currently selected. */
40
51
  this.selected = signal(false, /* @ts-ignore */
41
52
  ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
@@ -49,9 +60,10 @@ class EdsMultiselectOption {
49
60
  }
50
61
  /**
51
62
  * Required by Highlightable interface — reads the signal value.
63
+ * Group headers are treated as "disabled" so the key manager skips them.
52
64
  */
53
65
  get disabled() {
54
- return this.isDisabled();
66
+ return this.isDisabled() || this.isGroup();
55
67
  }
56
68
  // --- Highlightable interface ---
57
69
  setActiveStyles() {
@@ -62,12 +74,12 @@ class EdsMultiselectOption {
62
74
  }
63
75
  // --- Interaction ---
64
76
  onSelect() {
65
- if (!this.isDisabled()) {
77
+ if (!this.isDisabled() && !this.isGroup()) {
66
78
  this.selected.set(!this.selected());
67
79
  }
68
80
  }
69
81
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsMultiselectOption, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
70
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.2", type: EdsMultiselectOption, isStandalone: true, selector: "eds-multiselect-option", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "option" }, listeners: { "click": "onSelect()" }, properties: { "attr.selected": "selected() || null", "attr.active": "isActive() || null", "attr.disabled": "isDisabled() || null", "attr.aria-selected": "selected()", "attr.aria-disabled": "isDisabled() || null", "attr.data-e2e": "\"eds-multiselect-option\"", "id": "optionId()" }, classAttribute: "eds-multiselect-option" }, ngImport: i0, template: `
82
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.2", type: EdsMultiselectOption, isStandalone: true, selector: "eds-multiselect-option", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, isGroup: { classPropertyName: "isGroup", publicName: "isGroup", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "option" }, listeners: { "click": "onSelect()" }, properties: { "attr.selected": "selected() || null", "attr.active": "isActive() || null", "attr.disabled": "isDisabled() || null", "attr.aria-selected": "selected()", "attr.aria-disabled": "isDisabled() || null", "attr.data-e2e": "\"eds-multiselect-option\"", "id": "optionId()" }, classAttribute: "eds-multiselect-option" }, ngImport: i0, template: `
71
83
  <span class="eds-multiselect-option__label">{{ label() }}</span>
72
84
  <eds-icon
73
85
  class="eds-multiselect-option__check"
@@ -97,7 +109,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
97
109
  '[id]': 'optionId()',
98
110
  '(click)': 'onSelect()',
99
111
  }, styles: [".eui-21 :host{display:flex;align-items:center;gap:var(--eds-sp-s);padding:var(--eds-sp-xs) var(--eds-sp-s);cursor:pointer;font:var(--eds-f-paragraph-m);color:var(--eds-c-foreground-default);-webkit-user-select:none;user-select:none;transition:background-color .1s ease}.eui-21 :host .eds-multiselect-option__label{flex:1}.eui-21 :host .eds-multiselect-option__check{opacity:0;font-size:16px;color:var(--eds-c-foreground-primary)}.eui-21 :host(:hover:not([disabled])){background-color:var(--eds-c-surface-hover)}.eui-21 :host([active]:not([disabled])){background-color:var(--eds-c-surface-hover)}.eui-21 :host([selected]) .eds-multiselect-option__check{opacity:1}.eui-21 :host([disabled]){color:var(--eds-c-foreground-subtler);cursor:not-allowed;pointer-events:none}\n"] }]
100
- }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], isDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDisabled", required: false }] }] } });
112
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], isDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDisabled", required: false }] }], isGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: "isGroup", required: false }] }] } });
101
113
 
102
114
  /**
103
115
  * @description
@@ -161,10 +173,30 @@ class EdsMultiselect {
161
173
  */
162
174
  this.ariaLabel = input('Select options', /* @ts-ignore */
163
175
  ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
176
+ /**
177
+ * Label for the panel-footer "Cancel" button.
178
+ * @default 'Cancel'
179
+ */
180
+ this.cancelLabel = input('Cancel', /* @ts-ignore */
181
+ ...(ngDevMode ? [{ debugName: "cancelLabel" }] : /* istanbul ignore next */ []));
182
+ /**
183
+ * Label for the panel-footer "Confirm choice" button.
184
+ * @default 'Confirm choice'
185
+ */
186
+ this.confirmLabel = input('Confirm choice', /* @ts-ignore */
187
+ ...(ngDevMode ? [{ debugName: "confirmLabel" }] : /* istanbul ignore next */ []));
164
188
  /**
165
189
  * Emits the current selection whenever it changes.
166
190
  */
167
191
  this.valueChange = output();
192
+ /**
193
+ * Emits the confirmed selection when the "Confirm choice" button is clicked.
194
+ */
195
+ this.confirmed = output();
196
+ /**
197
+ * Emits when the "Cancel" button is clicked (selection reverted to its pre-open state).
198
+ */
199
+ this.cancelled = output();
168
200
  /** The projected option components. */
169
201
  this.options = contentChildren(EdsMultiselectOption, /* @ts-ignore */
170
202
  ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
@@ -180,6 +212,8 @@ class EdsMultiselect {
180
212
  /** Internal selected values. */
181
213
  this.internalValue = signal([], /* @ts-ignore */
182
214
  ...(ngDevMode ? [{ debugName: "internalValue" }] : /* istanbul ignore next */ []));
215
+ /** Snapshot of the selection taken when the dropdown opens, used to revert on Cancel. */
216
+ this.valueSnapshot = [];
183
217
  /** Internal disabled state (supports CVA setDisabledState). */
184
218
  this.internalDisabled = signal(false, /* @ts-ignore */
185
219
  ...(ngDevMode ? [{ debugName: "internalDisabled" }] : /* istanbul ignore next */ []));
@@ -291,7 +325,7 @@ class EdsMultiselect {
291
325
  }
292
326
  }
293
327
  onOptionClick(option) {
294
- if (option.isDisabled()) {
328
+ if (option.isDisabled() || option.isGroup()) {
295
329
  return;
296
330
  }
297
331
  option.onSelect();
@@ -299,7 +333,17 @@ class EdsMultiselect {
299
333
  this.keyManager?.setActiveItem(option);
300
334
  this.updateActiveDescendant();
301
335
  }
302
- onDoneClick() {
336
+ onConfirmClick() {
337
+ this.confirmed.emit(this.internalValue());
338
+ this.closeDropdown();
339
+ }
340
+ onCancelClick() {
341
+ // Revert selection to the snapshot taken when the dropdown opened.
342
+ this.internalValue.set([...this.valueSnapshot]);
343
+ this.syncOptionsFromValue();
344
+ this._onChange(this.valueSnapshot);
345
+ this.valueChange.emit(this.valueSnapshot);
346
+ this.cancelled.emit();
303
347
  this.closeDropdown();
304
348
  }
305
349
  onPanelKeydown(event) {
@@ -354,6 +398,8 @@ class EdsMultiselect {
354
398
  if (!triggerEl) {
355
399
  return;
356
400
  }
401
+ // Snapshot current selection so Cancel can revert to it.
402
+ this.valueSnapshot = [...this.internalValue()];
357
403
  const positionStrategy = this.overlay
358
404
  .position()
359
405
  .flexibleConnectedTo(triggerEl)
@@ -464,7 +510,7 @@ class EdsMultiselect {
464
510
  }
465
511
  syncValueFromOptions() {
466
512
  const selectedValues = this.options()
467
- .filter(o => o.selected())
513
+ .filter(o => o.selected() && !o.isGroup())
468
514
  .map(o => o.value());
469
515
  this.internalValue.set(selectedValues);
470
516
  this._onChange(selectedValues);
@@ -473,21 +519,21 @@ class EdsMultiselect {
473
519
  syncOptionsFromValue() {
474
520
  const currentValue = this.internalValue();
475
521
  this.options().forEach(option => {
476
- option.selected.set(currentValue.includes(option.value()));
522
+ option.selected.set(!option.isGroup() && currentValue.includes(option.value()));
477
523
  });
478
524
  }
479
525
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsMultiselect, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
480
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EdsMultiselect, isStandalone: true, selector: "eds-multiselect", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, isInvalid: { classPropertyName: "isInvalid", publicName: "isInvalid", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, host: { properties: { "attr.disabled": "internalDisabled() || null", "attr.invalid": "internalInvalid() || null", "attr.open": "isOpen() || null", "attr.data-e2e": "e2eAttr()" }, classAttribute: "eds-multiselect" }, providers: [
526
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EdsMultiselect, isStandalone: true, selector: "eds-multiselect", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, isInvalid: { classPropertyName: "isInvalid", publicName: "isInvalid", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, cancelLabel: { classPropertyName: "cancelLabel", publicName: "cancelLabel", isSignal: true, isRequired: false, transformFunction: null }, confirmLabel: { classPropertyName: "confirmLabel", publicName: "confirmLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", confirmed: "confirmed", cancelled: "cancelled" }, host: { properties: { "attr.disabled": "internalDisabled() || null", "attr.invalid": "internalInvalid() || null", "attr.open": "isOpen() || null", "attr.data-e2e": "e2eAttr()" }, classAttribute: "eds-multiselect" }, providers: [
481
527
  {
482
528
  provide: NG_VALUE_ACCESSOR,
483
529
  useExisting: EdsMultiselect,
484
530
  multi: true,
485
531
  },
486
- ], queries: [{ propertyName: "options", predicate: EdsMultiselectOption, isSignal: true }], viewQueries: [{ propertyName: "dropdownTemplate", first: true, predicate: ["dropdownTemplate"], descendants: true, isSignal: true }, { propertyName: "triggerRef", first: true, predicate: ["triggerRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Combobox trigger -->\n<div\n #triggerRef\n class=\"eds-multiselect__trigger\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"isOpen() ? 'eds-multiselect-listbox' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n [attr.aria-disabled]=\"internalDisabled() || null\"\n [attr.tabindex]=\"internalDisabled() ? -1 : 0\"\n (click)=\"onTriggerClick()\"\n (keydown)=\"onTriggerKeydown($event)\"\n>\n <span\n class=\"eds-multiselect__display\"\n [class.eds-multiselect__display--placeholder]=\"isPlaceholderShown()\"\n >\n {{ displayValue() }}\n </span>\n <eds-icon\n class=\"eds-multiselect__caret\"\n [icon]=\"'caret-down'\"\n aria-hidden=\"true\"\n />\n</div>\n\n<!-- Dropdown panel (rendered in overlay) -->\n<ng-template #dropdownTemplate>\n <div class=\"eds-multiselect__panel-wrapper\" tabindex=\"-1\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <div\n class=\"eds-multiselect__panel\"\n id=\"eds-multiselect-listbox\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n tabindex=\"0\"\n (keydown)=\"onPanelKeydown($event)\"\n >\n @for (option of options(); track option.value()) {\n <div\n class=\"eds-multiselect-option\"\n [class.eds-multiselect-option--selected]=\"option.selected()\"\n [class.eds-multiselect-option--active]=\"option.isActive()\"\n [class.eds-multiselect-option--disabled]=\"option.isDisabled()\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"option.selected()\"\n [attr.aria-disabled]=\"option.isDisabled() || null\"\n [id]=\"option.optionId()\"\n (click)=\"onOptionClick(option)\"\n >\n <eds-icon\n class=\"eds-multiselect-option__check\"\n [icon]=\"'check'\"\n edsSizeS\n aria-hidden=\"true\"\n />\n <span class=\"eds-multiselect-option__label\">{{ option.label() }}</span>\n </div>\n }\n </div>\n <div class=\"eds-multiselect__panel-footer\">\n <button\n type=\"button\"\n class=\"eds-multiselect__done-button\"\n (click)=\"onDoneClick()\"\n >\n Done\n </button>\n </div>\n </div>\n</ng-template>\n", styles: [".eui-21 :host{display:block;position:relative;width:100%}.eui-21 :host .eds-multiselect__trigger{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:var(--eds-sp-xs);font:var(--eds-f-paragraph-m);appearance:none;background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);border-radius:var(--eds-br-s);box-shadow:none;color:var(--eds-c-foreground-default);min-height:var(--eds-si-3xl);padding:var(--eds-sp-xs) var(--eds-sp-s);width:100%;cursor:pointer;outline:none;transition:border-color .15s ease}.eui-21 :host .eds-multiselect__trigger:hover:not([aria-disabled=true]){border-color:var(--eds-c-border-primary)}.eui-21 :host .eds-multiselect__trigger:focus-visible:not([aria-disabled=true]){outline:2px solid var(--eds-c-border-primary);outline-offset:-2px}.eui-21 :host .eds-multiselect__display{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-21 :host .eds-multiselect__display--placeholder{color:var(--eds-c-foreground-subtler)}.eui-21 :host .eds-multiselect__caret{flex-shrink:0;font-size:20px;color:var(--eds-c-foreground-default);transition:transform .2s ease}.eui-21 :host([open]) .eds-multiselect__trigger{border-color:var(--eds-c-border-primary);outline:2px solid var(--eds-c-border-primary);outline-offset:-2px}.eui-21 :host([open]) .eds-multiselect__caret{transform:rotate(180deg)}.eui-21 :host([disabled]) .eds-multiselect__trigger{background-color:var(--eds-c-surface-disabled);border-color:var(--eds-c-border-disabled);color:var(--eds-c-foreground-subtler);cursor:not-allowed;pointer-events:none}.eui-21 :host([disabled]) .eds-multiselect__caret{color:var(--eds-c-foreground-subtler)}.eui-21 :host([invalid]) .eds-multiselect__trigger{border-color:var(--eds-c-border-critical)}.eui-21 :host([invalid]) .eds-multiselect__trigger:focus-visible{outline-color:var(--eds-c-border-critical)}.eds-multiselect__panel-wrapper{background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);border-radius:var(--eds-br-s);box-shadow:var(--eds-sh-1);display:flex;flex-direction:column;max-height:280px;min-width:100%;box-sizing:border-box;outline:none}.eds-multiselect__panel{flex:1;max-height:240px;overflow-y:auto;padding:var(--eds-sp-3xs) 0;outline:none}.eds-multiselect__panel .eds-multiselect-option{display:flex;align-items:center;gap:var(--eds-sp-s);padding:var(--eds-sp-xs) var(--eds-sp-s);cursor:pointer;font:var(--eds-f-paragraph-m);color:var(--eds-c-foreground-default);-webkit-user-select:none;user-select:none;transition:background-color .1s ease}.eds-multiselect__panel .eds-multiselect-option .eds-multiselect-option__label{flex:1}.eds-multiselect__panel .eds-multiselect-option .eds-multiselect-option__check{opacity:0;font-size:16px;color:var(--eds-c-foreground-primary);transition:opacity .1s ease}.eds-multiselect__panel .eds-multiselect-option:hover:not(.eds-multiselect-option--disabled){background-color:var(--eds-c-surface-hover)}.eds-multiselect__panel .eds-multiselect-option--active:not(.eds-multiselect-option--disabled){background-color:var(--eds-c-surface-hover);outline:var(--eds-bw-s) solid var(--eds-c-border-primary);outline-offset:-2px}.eds-multiselect__panel .eds-multiselect-option--selected .eds-multiselect-option__check{opacity:1}.eds-multiselect__panel .eds-multiselect-option--disabled{color:var(--eds-c-foreground-subtler);cursor:not-allowed;pointer-events:none}.eds-multiselect__panel-footer{display:flex;justify-content:flex-start;padding:var(--eds-sp-xs) var(--eds-sp-s);border-top:var(--eds-bw-xs) solid var(--eds-c-border-divider)}.eds-multiselect__done-button{font:var(--eds-f-label-m-semibold);color:var(--eds-c-foreground-primary);background:none;border:none;cursor:pointer;padding:var(--eds-sp-3xs) var(--eds-sp-s);border-radius:var(--eds-br-s);transition:background-color .1s ease}.eds-multiselect__done-button:hover{background-color:var(--eds-c-surface-hover)}.eds-multiselect__done-button:focus-visible{outline:2px solid var(--eds-c-border-primary);outline-offset:-2px}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: i1.EdsIcon, selector: "eds-icon, span[edsIcon]", inputs: ["icon", "set", "color", "size", "ariaLabel", "ariaHidden", "rounded", "isLoading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
532
+ ], queries: [{ propertyName: "options", predicate: EdsMultiselectOption, isSignal: true }], viewQueries: [{ propertyName: "dropdownTemplate", first: true, predicate: ["dropdownTemplate"], descendants: true, isSignal: true }, { propertyName: "triggerRef", first: true, predicate: ["triggerRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Combobox trigger -->\n<div\n #triggerRef\n class=\"eds-multiselect__trigger\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"isOpen() ? 'eds-multiselect-listbox' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n [attr.aria-disabled]=\"internalDisabled() || null\"\n [attr.tabindex]=\"internalDisabled() ? -1 : 0\"\n (click)=\"onTriggerClick()\"\n (keydown)=\"onTriggerKeydown($event)\"\n>\n <span\n class=\"eds-multiselect__display\"\n [class.eds-multiselect__display--placeholder]=\"isPlaceholderShown()\"\n >\n {{ displayValue() }}\n </span>\n <eds-icon\n class=\"eds-multiselect__caret\"\n [icon]=\"'caret-down'\"\n aria-hidden=\"true\"\n />\n</div>\n\n<!-- Dropdown panel (rendered in overlay) -->\n<ng-template #dropdownTemplate>\n <div class=\"eds-multiselect__panel-wrapper\" tabindex=\"-1\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <div\n class=\"eds-multiselect__panel\"\n id=\"eds-multiselect-listbox\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n tabindex=\"0\"\n (keydown)=\"onPanelKeydown($event)\"\n >\n @for (option of options(); track option.value()) {\n @if (option.isGroup()) {\n <div\n class=\"eds-multiselect-group\"\n role=\"presentation\"\n [id]=\"option.optionId()\"\n >\n {{ option.label() }}\n </div>\n } @else {\n <div\n class=\"eds-multiselect-option\"\n [class.eds-multiselect-option--selected]=\"option.selected()\"\n [class.eds-multiselect-option--active]=\"option.isActive()\"\n [class.eds-multiselect-option--disabled]=\"option.isDisabled()\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"option.selected()\"\n [attr.aria-disabled]=\"option.isDisabled() || null\"\n [id]=\"option.optionId()\"\n (click)=\"onOptionClick(option)\"\n >\n <input\n class=\"eds-multiselect-option__checkbox\"\n edsInputCheckbox\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [checked]=\"option.selected()\"\n [disabled]=\"option.isDisabled()\"\n />\n <span class=\"eds-multiselect-option__label\">{{ option.label() }}</span>\n </div>\n }\n }\n </div>\n <div class=\"eds-multiselect__panel-footer\">\n <button\n edsButton\n type=\"button\"\n variant=\"tertiary\"\n size=\"s\"\n (click)=\"onCancelClick()\"\n >\n {{ cancelLabel() }}\n </button>\n <button\n edsButton\n type=\"button\"\n variant=\"secondary\"\n size=\"s\"\n (click)=\"onConfirmClick()\"\n >\n {{ confirmLabel() }}\n </button>\n </div>\n </div>\n</ng-template>\n", styles: [".eui-21 :host{display:block;position:relative;width:100%}.eui-21 :host .eds-multiselect__trigger{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:var(--eds-sp-xs);font:var(--eds-f-paragraph-m);appearance:none;background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);border-radius:var(--eds-br-s);box-shadow:none;color:var(--eds-c-foreground-default);min-height:var(--eds-si-3xl);padding:var(--eds-sp-xs) var(--eds-sp-s);width:100%;cursor:pointer;outline:none;transition:border-color .15s ease}.eui-21 :host .eds-multiselect__trigger:hover:not([aria-disabled=true]){border-color:var(--eds-c-border-primary)}.eui-21 :host .eds-multiselect__trigger:focus-visible:not([aria-disabled=true]){outline:2px solid var(--eds-c-border-primary);outline-offset:-2px}.eui-21 :host .eds-multiselect__display{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-21 :host .eds-multiselect__display--placeholder{color:var(--eds-c-foreground-subtler)}.eui-21 :host .eds-multiselect__caret{flex-shrink:0;font-size:20px;color:var(--eds-c-foreground-default);transition:transform .2s ease}.eui-21 :host([open]) .eds-multiselect__trigger{border-color:var(--eds-c-border-primary);outline:2px solid var(--eds-c-border-primary);outline-offset:-2px}.eui-21 :host([open]) .eds-multiselect__caret{transform:rotate(180deg)}.eui-21 :host([disabled]) .eds-multiselect__trigger{background-color:var(--eds-c-surface-disabled);border-color:var(--eds-c-border-disabled);color:var(--eds-c-foreground-subtler);cursor:not-allowed;pointer-events:none}.eui-21 :host([disabled]) .eds-multiselect__caret{color:var(--eds-c-foreground-subtler)}.eui-21 :host([invalid]) .eds-multiselect__trigger{border-color:var(--eds-c-border-critical)}.eui-21 :host([invalid]) .eds-multiselect__trigger:focus-visible{outline-color:var(--eds-c-border-critical)}.eds-multiselect__panel-wrapper{background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);border-radius:var(--eds-br-s);box-shadow:var(--eds-sh-1);display:flex;flex-direction:column;max-height:280px;min-width:100%;box-sizing:border-box;outline:none}.eds-multiselect__panel{flex:1;max-height:240px;overflow-y:auto;padding:var(--eds-sp-3xs) 0;outline:none}.eds-multiselect__panel .eds-multiselect-group{padding:var(--eds-sp-xs) var(--eds-sp-s);font:var(--eds-f-label-m-medium);color:var(--eds-c-foreground-subtle);cursor:default;-webkit-user-select:none;user-select:none}.eds-multiselect__panel .eds-multiselect-option{display:flex;align-items:center;gap:var(--eds-sp-s);padding:var(--eds-sp-xs) var(--eds-sp-s);cursor:pointer;font:var(--eds-f-paragraph-m);color:var(--eds-c-foreground-default);-webkit-user-select:none;user-select:none;transition:background-color .1s ease}.eds-multiselect__panel .eds-multiselect-option .eds-multiselect-option__label{flex:1}.eds-multiselect__panel .eds-multiselect-option .eds-multiselect-option__checkbox{flex-shrink:0;pointer-events:none}.eds-multiselect__panel .eds-multiselect-option:hover:not(.eds-multiselect-option--disabled){background-color:var(--eds-c-surface-hover)}.eds-multiselect__panel .eds-multiselect-option--active:not(.eds-multiselect-option--disabled){outline:var(--eds-bw-s) solid var(--eds-c-border-primary);outline-offset:-2px}.eds-multiselect__panel .eds-multiselect-option--selected{background-color:var(--eds-c-surface-selected)}.eds-multiselect__panel .eds-multiselect-option--selected:hover:not(.eds-multiselect-option--disabled){background-color:var(--eds-c-surface-selected)}.eds-multiselect__panel .eds-multiselect-option--disabled{color:var(--eds-c-foreground-subtler);cursor:not-allowed;pointer-events:none}.eds-multiselect__panel-footer{display:flex;justify-content:space-between;align-items:center;gap:var(--eds-sp-xs);padding:var(--eds-sp-xs) var(--eds-sp-s);border-top:var(--eds-bw-xs) solid var(--eds-c-border-divider)}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: i1.EdsIcon, selector: "eds-icon, span[edsIcon]", inputs: ["icon", "set", "color", "size", "ariaLabel", "ariaHidden", "rounded", "isLoading"] }, { kind: "component", type: i3.EdsInputCheckbox, selector: "input[edsInputCheckbox]", inputs: ["e2eAttr", "checked", "indeterminate", "disabled", "readonly", "isInvalid"], outputs: ["checkedChange", "indeterminateChange"] }, { kind: "component", type: i4.EdsButton, selector: "button[edsButton]", inputs: ["e2eAttr", "id", "variant", "color", "size", "disabled", "isBlock", "hasLineWrap", "isRounded", "isChecked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
487
533
  }
488
534
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsMultiselect, decorators: [{
489
535
  type: Component,
490
- args: [{ selector: 'eds-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, imports: [OverlayModule, A11yModule, ...EDS_ICON], providers: [
536
+ args: [{ selector: 'eds-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, imports: [OverlayModule, A11yModule, ...EDS_ICON, ...EDS_INPUT_CHECKBOX, ...EDS_BUTTON], providers: [
491
537
  {
492
538
  provide: NG_VALUE_ACCESSOR,
493
539
  useExisting: EdsMultiselect,
@@ -499,8 +545,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
499
545
  '[attr.invalid]': 'internalInvalid() || null',
500
546
  '[attr.open]': 'isOpen() || null',
501
547
  '[attr.data-e2e]': 'e2eAttr()',
502
- }, template: "<!-- Combobox trigger -->\n<div\n #triggerRef\n class=\"eds-multiselect__trigger\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"isOpen() ? 'eds-multiselect-listbox' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n [attr.aria-disabled]=\"internalDisabled() || null\"\n [attr.tabindex]=\"internalDisabled() ? -1 : 0\"\n (click)=\"onTriggerClick()\"\n (keydown)=\"onTriggerKeydown($event)\"\n>\n <span\n class=\"eds-multiselect__display\"\n [class.eds-multiselect__display--placeholder]=\"isPlaceholderShown()\"\n >\n {{ displayValue() }}\n </span>\n <eds-icon\n class=\"eds-multiselect__caret\"\n [icon]=\"'caret-down'\"\n aria-hidden=\"true\"\n />\n</div>\n\n<!-- Dropdown panel (rendered in overlay) -->\n<ng-template #dropdownTemplate>\n <div class=\"eds-multiselect__panel-wrapper\" tabindex=\"-1\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <div\n class=\"eds-multiselect__panel\"\n id=\"eds-multiselect-listbox\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n tabindex=\"0\"\n (keydown)=\"onPanelKeydown($event)\"\n >\n @for (option of options(); track option.value()) {\n <div\n class=\"eds-multiselect-option\"\n [class.eds-multiselect-option--selected]=\"option.selected()\"\n [class.eds-multiselect-option--active]=\"option.isActive()\"\n [class.eds-multiselect-option--disabled]=\"option.isDisabled()\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"option.selected()\"\n [attr.aria-disabled]=\"option.isDisabled() || null\"\n [id]=\"option.optionId()\"\n (click)=\"onOptionClick(option)\"\n >\n <eds-icon\n class=\"eds-multiselect-option__check\"\n [icon]=\"'check'\"\n edsSizeS\n aria-hidden=\"true\"\n />\n <span class=\"eds-multiselect-option__label\">{{ option.label() }}</span>\n </div>\n }\n </div>\n <div class=\"eds-multiselect__panel-footer\">\n <button\n type=\"button\"\n class=\"eds-multiselect__done-button\"\n (click)=\"onDoneClick()\"\n >\n Done\n </button>\n </div>\n </div>\n</ng-template>\n", styles: [".eui-21 :host{display:block;position:relative;width:100%}.eui-21 :host .eds-multiselect__trigger{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:var(--eds-sp-xs);font:var(--eds-f-paragraph-m);appearance:none;background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);border-radius:var(--eds-br-s);box-shadow:none;color:var(--eds-c-foreground-default);min-height:var(--eds-si-3xl);padding:var(--eds-sp-xs) var(--eds-sp-s);width:100%;cursor:pointer;outline:none;transition:border-color .15s ease}.eui-21 :host .eds-multiselect__trigger:hover:not([aria-disabled=true]){border-color:var(--eds-c-border-primary)}.eui-21 :host .eds-multiselect__trigger:focus-visible:not([aria-disabled=true]){outline:2px solid var(--eds-c-border-primary);outline-offset:-2px}.eui-21 :host .eds-multiselect__display{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-21 :host .eds-multiselect__display--placeholder{color:var(--eds-c-foreground-subtler)}.eui-21 :host .eds-multiselect__caret{flex-shrink:0;font-size:20px;color:var(--eds-c-foreground-default);transition:transform .2s ease}.eui-21 :host([open]) .eds-multiselect__trigger{border-color:var(--eds-c-border-primary);outline:2px solid var(--eds-c-border-primary);outline-offset:-2px}.eui-21 :host([open]) .eds-multiselect__caret{transform:rotate(180deg)}.eui-21 :host([disabled]) .eds-multiselect__trigger{background-color:var(--eds-c-surface-disabled);border-color:var(--eds-c-border-disabled);color:var(--eds-c-foreground-subtler);cursor:not-allowed;pointer-events:none}.eui-21 :host([disabled]) .eds-multiselect__caret{color:var(--eds-c-foreground-subtler)}.eui-21 :host([invalid]) .eds-multiselect__trigger{border-color:var(--eds-c-border-critical)}.eui-21 :host([invalid]) .eds-multiselect__trigger:focus-visible{outline-color:var(--eds-c-border-critical)}.eds-multiselect__panel-wrapper{background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);border-radius:var(--eds-br-s);box-shadow:var(--eds-sh-1);display:flex;flex-direction:column;max-height:280px;min-width:100%;box-sizing:border-box;outline:none}.eds-multiselect__panel{flex:1;max-height:240px;overflow-y:auto;padding:var(--eds-sp-3xs) 0;outline:none}.eds-multiselect__panel .eds-multiselect-option{display:flex;align-items:center;gap:var(--eds-sp-s);padding:var(--eds-sp-xs) var(--eds-sp-s);cursor:pointer;font:var(--eds-f-paragraph-m);color:var(--eds-c-foreground-default);-webkit-user-select:none;user-select:none;transition:background-color .1s ease}.eds-multiselect__panel .eds-multiselect-option .eds-multiselect-option__label{flex:1}.eds-multiselect__panel .eds-multiselect-option .eds-multiselect-option__check{opacity:0;font-size:16px;color:var(--eds-c-foreground-primary);transition:opacity .1s ease}.eds-multiselect__panel .eds-multiselect-option:hover:not(.eds-multiselect-option--disabled){background-color:var(--eds-c-surface-hover)}.eds-multiselect__panel .eds-multiselect-option--active:not(.eds-multiselect-option--disabled){background-color:var(--eds-c-surface-hover);outline:var(--eds-bw-s) solid var(--eds-c-border-primary);outline-offset:-2px}.eds-multiselect__panel .eds-multiselect-option--selected .eds-multiselect-option__check{opacity:1}.eds-multiselect__panel .eds-multiselect-option--disabled{color:var(--eds-c-foreground-subtler);cursor:not-allowed;pointer-events:none}.eds-multiselect__panel-footer{display:flex;justify-content:flex-start;padding:var(--eds-sp-xs) var(--eds-sp-s);border-top:var(--eds-bw-xs) solid var(--eds-c-border-divider)}.eds-multiselect__done-button{font:var(--eds-f-label-m-semibold);color:var(--eds-c-foreground-primary);background:none;border:none;cursor:pointer;padding:var(--eds-sp-3xs) var(--eds-sp-s);border-radius:var(--eds-br-s);transition:background-color .1s ease}.eds-multiselect__done-button:hover{background-color:var(--eds-c-surface-hover)}.eds-multiselect__done-button:focus-visible{outline:2px solid var(--eds-c-border-primary);outline-offset:-2px}\n"] }]
503
- }], ctorParameters: () => [], propDecorators: { e2eAttr: [{ type: i0.Input, args: [{ isSignal: true, alias: "e2eAttr", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], isInvalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "isInvalid", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], options: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => EdsMultiselectOption), { isSignal: true }] }], dropdownTemplate: [{ type: i0.ViewChild, args: ['dropdownTemplate', { isSignal: true }] }], triggerRef: [{ type: i0.ViewChild, args: ['triggerRef', { isSignal: true }] }] } });
548
+ }, template: "<!-- Combobox trigger -->\n<div\n #triggerRef\n class=\"eds-multiselect__trigger\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"isOpen() ? 'eds-multiselect-listbox' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n [attr.aria-disabled]=\"internalDisabled() || null\"\n [attr.tabindex]=\"internalDisabled() ? -1 : 0\"\n (click)=\"onTriggerClick()\"\n (keydown)=\"onTriggerKeydown($event)\"\n>\n <span\n class=\"eds-multiselect__display\"\n [class.eds-multiselect__display--placeholder]=\"isPlaceholderShown()\"\n >\n {{ displayValue() }}\n </span>\n <eds-icon\n class=\"eds-multiselect__caret\"\n [icon]=\"'caret-down'\"\n aria-hidden=\"true\"\n />\n</div>\n\n<!-- Dropdown panel (rendered in overlay) -->\n<ng-template #dropdownTemplate>\n <div class=\"eds-multiselect__panel-wrapper\" tabindex=\"-1\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <div\n class=\"eds-multiselect__panel\"\n id=\"eds-multiselect-listbox\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n tabindex=\"0\"\n (keydown)=\"onPanelKeydown($event)\"\n >\n @for (option of options(); track option.value()) {\n @if (option.isGroup()) {\n <div\n class=\"eds-multiselect-group\"\n role=\"presentation\"\n [id]=\"option.optionId()\"\n >\n {{ option.label() }}\n </div>\n } @else {\n <div\n class=\"eds-multiselect-option\"\n [class.eds-multiselect-option--selected]=\"option.selected()\"\n [class.eds-multiselect-option--active]=\"option.isActive()\"\n [class.eds-multiselect-option--disabled]=\"option.isDisabled()\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"option.selected()\"\n [attr.aria-disabled]=\"option.isDisabled() || null\"\n [id]=\"option.optionId()\"\n (click)=\"onOptionClick(option)\"\n >\n <input\n class=\"eds-multiselect-option__checkbox\"\n edsInputCheckbox\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [checked]=\"option.selected()\"\n [disabled]=\"option.isDisabled()\"\n />\n <span class=\"eds-multiselect-option__label\">{{ option.label() }}</span>\n </div>\n }\n }\n </div>\n <div class=\"eds-multiselect__panel-footer\">\n <button\n edsButton\n type=\"button\"\n variant=\"tertiary\"\n size=\"s\"\n (click)=\"onCancelClick()\"\n >\n {{ cancelLabel() }}\n </button>\n <button\n edsButton\n type=\"button\"\n variant=\"secondary\"\n size=\"s\"\n (click)=\"onConfirmClick()\"\n >\n {{ confirmLabel() }}\n </button>\n </div>\n </div>\n</ng-template>\n", styles: [".eui-21 :host{display:block;position:relative;width:100%}.eui-21 :host .eds-multiselect__trigger{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:var(--eds-sp-xs);font:var(--eds-f-paragraph-m);appearance:none;background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);border-radius:var(--eds-br-s);box-shadow:none;color:var(--eds-c-foreground-default);min-height:var(--eds-si-3xl);padding:var(--eds-sp-xs) var(--eds-sp-s);width:100%;cursor:pointer;outline:none;transition:border-color .15s ease}.eui-21 :host .eds-multiselect__trigger:hover:not([aria-disabled=true]){border-color:var(--eds-c-border-primary)}.eui-21 :host .eds-multiselect__trigger:focus-visible:not([aria-disabled=true]){outline:2px solid var(--eds-c-border-primary);outline-offset:-2px}.eui-21 :host .eds-multiselect__display{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-21 :host .eds-multiselect__display--placeholder{color:var(--eds-c-foreground-subtler)}.eui-21 :host .eds-multiselect__caret{flex-shrink:0;font-size:20px;color:var(--eds-c-foreground-default);transition:transform .2s ease}.eui-21 :host([open]) .eds-multiselect__trigger{border-color:var(--eds-c-border-primary);outline:2px solid var(--eds-c-border-primary);outline-offset:-2px}.eui-21 :host([open]) .eds-multiselect__caret{transform:rotate(180deg)}.eui-21 :host([disabled]) .eds-multiselect__trigger{background-color:var(--eds-c-surface-disabled);border-color:var(--eds-c-border-disabled);color:var(--eds-c-foreground-subtler);cursor:not-allowed;pointer-events:none}.eui-21 :host([disabled]) .eds-multiselect__caret{color:var(--eds-c-foreground-subtler)}.eui-21 :host([invalid]) .eds-multiselect__trigger{border-color:var(--eds-c-border-critical)}.eui-21 :host([invalid]) .eds-multiselect__trigger:focus-visible{outline-color:var(--eds-c-border-critical)}.eds-multiselect__panel-wrapper{background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);border-radius:var(--eds-br-s);box-shadow:var(--eds-sh-1);display:flex;flex-direction:column;max-height:280px;min-width:100%;box-sizing:border-box;outline:none}.eds-multiselect__panel{flex:1;max-height:240px;overflow-y:auto;padding:var(--eds-sp-3xs) 0;outline:none}.eds-multiselect__panel .eds-multiselect-group{padding:var(--eds-sp-xs) var(--eds-sp-s);font:var(--eds-f-label-m-medium);color:var(--eds-c-foreground-subtle);cursor:default;-webkit-user-select:none;user-select:none}.eds-multiselect__panel .eds-multiselect-option{display:flex;align-items:center;gap:var(--eds-sp-s);padding:var(--eds-sp-xs) var(--eds-sp-s);cursor:pointer;font:var(--eds-f-paragraph-m);color:var(--eds-c-foreground-default);-webkit-user-select:none;user-select:none;transition:background-color .1s ease}.eds-multiselect__panel .eds-multiselect-option .eds-multiselect-option__label{flex:1}.eds-multiselect__panel .eds-multiselect-option .eds-multiselect-option__checkbox{flex-shrink:0;pointer-events:none}.eds-multiselect__panel .eds-multiselect-option:hover:not(.eds-multiselect-option--disabled){background-color:var(--eds-c-surface-hover)}.eds-multiselect__panel .eds-multiselect-option--active:not(.eds-multiselect-option--disabled){outline:var(--eds-bw-s) solid var(--eds-c-border-primary);outline-offset:-2px}.eds-multiselect__panel .eds-multiselect-option--selected{background-color:var(--eds-c-surface-selected)}.eds-multiselect__panel .eds-multiselect-option--selected:hover:not(.eds-multiselect-option--disabled){background-color:var(--eds-c-surface-selected)}.eds-multiselect__panel .eds-multiselect-option--disabled{color:var(--eds-c-foreground-subtler);cursor:not-allowed;pointer-events:none}.eds-multiselect__panel-footer{display:flex;justify-content:space-between;align-items:center;gap:var(--eds-sp-xs);padding:var(--eds-sp-xs) var(--eds-sp-s);border-top:var(--eds-bw-xs) solid var(--eds-c-border-divider)}\n"] }]
549
+ }], ctorParameters: () => [], propDecorators: { e2eAttr: [{ type: i0.Input, args: [{ isSignal: true, alias: "e2eAttr", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], isInvalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "isInvalid", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], cancelLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "cancelLabel", required: false }] }], confirmLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "confirmLabel", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], confirmed: [{ type: i0.Output, args: ["confirmed"] }], cancelled: [{ type: i0.Output, args: ["cancelled"] }], options: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => EdsMultiselectOption), { isSignal: true }] }], dropdownTemplate: [{ type: i0.ViewChild, args: ['dropdownTemplate', { isSignal: true }] }], triggerRef: [{ type: i0.ViewChild, args: ['triggerRef', { isSignal: true }] }] } });
504
550
 
505
551
  /** Convenience array for importing all eds-multiselect components. */
506
552
  const EDS_MULTISELECT = [
@@ -1 +1 @@
1
- {"version":3,"file":"eui-eds-eds-multiselect.mjs","sources":["../../eds-multiselect/eds-multiselect-option.ts","../../eds-multiselect/eds-multiselect.ts","../../eds-multiselect/eds-multiselect.html","../../eds-multiselect/index.ts","../../eds-multiselect/eui-eds-eds-multiselect.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n input,\n signal,\n computed,\n booleanAttribute,\n ElementRef,\n inject,\n} from '@angular/core';\nimport { Highlightable } from '@angular/cdk/a11y';\nimport { EDS_ICON } from '@eui/eds/eds-icon';\n\n/**\n * @description\n * An individual option within the EDS Multiselect dropdown.\n * Supports selection state, disabled state, and keyboard navigation via CDK ActiveDescendantKeyManager.\n *\n * @usageNotes\n * ```html\n * <eds-multiselect-option value=\"opt1\" label=\"Option 1\" />\n * ```\n */\n@Component({\n selector: 'eds-multiselect-option',\n template: `\n <span class=\"eds-multiselect-option__label\">{{ label() }}</span>\n <eds-icon\n class=\"eds-multiselect-option__check\"\n [icon]=\"'check'\"\n aria-hidden=\"true\"\n />\n `,\n styleUrl: './eds-multiselect-option.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [...EDS_ICON],\n host: {\n class: 'eds-multiselect-option',\n '[attr.selected]': 'selected() || null',\n '[attr.active]': 'isActive() || null',\n '[attr.disabled]': 'isDisabled() || null',\n role: 'option',\n '[attr.aria-selected]': 'selected()',\n '[attr.aria-disabled]': 'isDisabled() || null',\n '[attr.data-e2e]': '\"eds-multiselect-option\"',\n '[id]': 'optionId()',\n '(click)': 'onSelect()',\n },\n})\nexport class EdsMultiselectOption implements Highlightable {\n /**\n * The value associated with this option.\n */\n value = input.required<string>();\n\n /**\n * The display label for this option.\n */\n label = input.required<string>();\n\n /**\n * Whether this option is disabled.\n * @default false\n */\n isDisabled = input(false, { transform: booleanAttribute });\n\n /**\n * Required by Highlightable interface — reads the signal value.\n */\n get disabled(): boolean {\n return this.isDisabled();\n }\n\n /** Whether this option is currently selected. */\n selected = signal(false);\n\n /** Whether this option is the active descendant (highlighted via keyboard). */\n isActive = signal(false);\n\n /** Unique ID for the option element (used for aria-activedescendant). */\n optionId = computed(() => `eds-multiselect-option-${this.value()}`);\n\n readonly elementRef = inject(ElementRef);\n\n // --- Highlightable interface ---\n\n setActiveStyles(): void {\n this.isActive.set(true);\n }\n\n setInactiveStyles(): void {\n this.isActive.set(false);\n }\n\n // --- Interaction ---\n\n onSelect(): void {\n if (!this.isDisabled()) {\n this.selected.set(!this.selected());\n }\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n signal,\n computed,\n contentChildren,\n viewChild,\n ElementRef,\n TemplateRef,\n ViewContainerRef,\n inject,\n booleanAttribute,\n effect,\n OnDestroy,\n AfterContentInit,\n DestroyRef,\n} from '@angular/core';\n/* eslint-disable @typescript-eslint/member-ordering */\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n Overlay,\n OverlayRef,\n OverlayModule,\n FlexibleConnectedPositionStrategy,\n ConnectionPositionPair,\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { EDS_ICON } from '@eui/eds/eds-icon';\n\nimport { EdsMultiselectOption } from './eds-multiselect-option';\n\n/**\n * @description\n * EDS Multiselect component — a combobox-style dropdown that allows multiple selections.\n * Implements the WAI-ARIA multiselect listbox pattern with full keyboard navigation.\n * Styled to match eds-input-text default/hover/focus/disabled states.\n *\n * Integrates with Angular Reactive Forms and Template-driven Forms via ControlValueAccessor.\n *\n * @usageNotes\n * ### Basic usage\n * ```html\n * <eds-multiselect placeholder=\"Select labels\" [(value)]=\"selectedLabels\">\n * <eds-multiselect-option value=\"important\" label=\"Important\" />\n * <eds-multiselect-option value=\"starred\" label=\"Starred\" />\n * <eds-multiselect-option value=\"work\" label=\"Work\" />\n * </eds-multiselect>\n * ```\n *\n * ### With Reactive Forms\n * ```html\n * <eds-multiselect placeholder=\"Select options\" [formControl]=\"myControl\">\n * <eds-multiselect-option value=\"a\" label=\"Option A\" />\n * <eds-multiselect-option value=\"b\" label=\"Option B\" />\n * </eds-multiselect>\n * ```\n *\n * ### Accessibility\n * - Implements ARIA combobox pattern with `role=\"combobox\"` on the trigger\n * - Listbox popup uses `role=\"listbox\"` with `aria-multiselectable=\"true\"`\n * - Arrow keys navigate options, Space toggles selection, Escape closes\n * - Active descendant pattern for screen reader announcements\n */\n@Component({\n selector: 'eds-multiselect',\n templateUrl: './eds-multiselect.html',\n styleUrl: './eds-multiselect.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [OverlayModule, A11yModule, ...EDS_ICON],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: EdsMultiselect,\n multi: true,\n },\n ],\n host: {\n class: 'eds-multiselect',\n '[attr.disabled]': 'internalDisabled() || null',\n '[attr.invalid]': 'internalInvalid() || null',\n '[attr.open]': 'isOpen() || null',\n '[attr.data-e2e]': 'e2eAttr()',\n },\n})\nexport class EdsMultiselect implements ControlValueAccessor, OnDestroy, AfterContentInit {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-multiselect'\n */\n e2eAttr = input('eds-multiselect');\n\n /**\n * Placeholder text displayed when no options are selected.\n * @default 'Select options'\n */\n placeholder = input('Select options');\n\n /**\n * Controls whether the multiselect is disabled.\n * @default false\n */\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the multiselect shows an invalid/error state.\n * @default false\n */\n isInvalid = input(false, { transform: booleanAttribute });\n\n /**\n * Aria-label for the combobox trigger.\n * @default 'Select options'\n */\n ariaLabel = input('Select options');\n\n /**\n * Emits the current selection whenever it changes.\n */\n valueChange = output<string[]>();\n\n /** The projected option components. */\n readonly options = contentChildren(EdsMultiselectOption);\n\n /** Reference to the dropdown template for the overlay. */\n readonly dropdownTemplate = viewChild<TemplateRef<unknown>>('dropdownTemplate');\n\n /** Reference to the trigger element. */\n readonly triggerRef = viewChild<ElementRef<HTMLElement>>('triggerRef');\n\n /** Whether the dropdown popup is open. */\n isOpen = signal(false);\n\n /** Internal selected values. */\n protected internalValue = signal<string[]>([]);\n\n /** Internal disabled state (supports CVA setDisabledState). */\n protected internalDisabled = signal(false);\n\n /** Internal invalid state. */\n protected internalInvalid = signal(false);\n\n /** The display value shown in the trigger. */\n protected displayValue = computed(() => {\n const selected = this.internalValue();\n if (selected.length === 0) {\n return this.placeholder();\n }\n const opts = this.options();\n const firstLabel = opts.find(o => o.value() === selected[0])?.label() ?? selected[0];\n if (selected.length === 1) {\n return firstLabel;\n }\n return `${firstLabel} + ${selected.length - 1} more`;\n });\n\n /** Whether the placeholder is shown (no selection). */\n protected isPlaceholderShown = computed(() => this.internalValue().length === 0);\n\n /** The active descendant ID for screen readers. */\n protected activeDescendantId = signal<string | null>(null);\n\n private overlay = inject(Overlay);\n private viewContainerRef = inject(ViewContainerRef);\n private destroyRef = inject(DestroyRef);\n private overlayRef: OverlayRef | null = null;\n private templatePortal: TemplatePortal | null = null;\n private keyManager: ActiveDescendantKeyManager<EdsMultiselectOption> | null = null;\n\n constructor() {\n // Sync disabled input → internal state\n effect(() => {\n this.internalDisabled.set(this.disabled());\n });\n\n // Sync isInvalid input → internal state\n effect(() => {\n this.internalInvalid.set(this.isInvalid());\n });\n }\n\n private _onChange: (value: string[]) => void = () => { /* noop */ };\n private _onTouched: () => void = () => { /* noop */ };\n\n ngAfterContentInit(): void {\n // Sync option selected states from internalValue whenever options change\n this.syncOptionsFromValue();\n }\n\n ngOnDestroy(): void {\n this.closeDropdown();\n this.overlayRef?.dispose();\n this.overlayRef = null;\n }\n\n // --- ControlValueAccessor ---\n\n writeValue(value: string[]): void {\n this.internalValue.set(value ?? []);\n this.syncOptionsFromValue();\n }\n\n registerOnChange(fn: (value: string[]) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.internalDisabled.set(isDisabled);\n }\n\n // --- Trigger interactions ---\n\n protected onTriggerClick(): void {\n if (this.internalDisabled()) {\n return;\n }\n if (this.isOpen()) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (this.internalDisabled()) {\n return;\n }\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openDropdown();\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openDropdown();\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openDropdown();\n }\n break;\n case 'Escape':\n event.preventDefault();\n if (this.isOpen()) {\n this.closeDropdown();\n }\n break;\n }\n }\n\n protected onOptionClick(option: EdsMultiselectOption): void {\n if (option.isDisabled()) {\n return;\n }\n option.onSelect();\n this.syncValueFromOptions();\n this.keyManager?.setActiveItem(option);\n this.updateActiveDescendant();\n }\n\n protected onDoneClick(): void {\n this.closeDropdown();\n }\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.keyManager?.setNextItemActive();\n this.updateActiveDescendant();\n this.scrollActiveOptionIntoView();\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.keyManager?.setPreviousItemActive();\n this.updateActiveDescendant();\n this.scrollActiveOptionIntoView();\n break;\n case 'Home':\n event.preventDefault();\n this.keyManager?.setFirstItemActive();\n this.updateActiveDescendant();\n this.scrollActiveOptionIntoView();\n break;\n case 'End':\n event.preventDefault();\n this.keyManager?.setLastItemActive();\n this.updateActiveDescendant();\n this.scrollActiveOptionIntoView();\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.toggleActiveOption();\n break;\n case 'Escape':\n event.preventDefault();\n this.closeDropdown();\n break;\n default:\n // Type-ahead: single printable character moves focus to next matching option\n if (event.key.length === 1 && !event.ctrlKey && !event.altKey && !event.metaKey) {\n this.handleTypeAhead(event.key);\n }\n break;\n }\n }\n\n // --- Dropdown management (private) ---\n\n private openDropdown(): void {\n if (this.isOpen() || !this.dropdownTemplate()) {\n return;\n }\n\n const triggerEl = this.triggerRef()?.nativeElement;\n if (!triggerEl) {\n return;\n }\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(triggerEl)\n .withPositions([\n new ConnectionPositionPair(\n { originX: 'start', originY: 'bottom' },\n { overlayX: 'start', overlayY: 'top' },\n ),\n new ConnectionPositionPair(\n { originX: 'start', originY: 'top' },\n { overlayX: 'start', overlayY: 'bottom' },\n ),\n ])\n .withFlexibleDimensions(false)\n .withPush(true);\n\n const scrollStrategy = this.overlay.scrollStrategies.reposition();\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy,\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n width: triggerEl.offsetWidth,\n disposeOnNavigation: true,\n });\n\n this.templatePortal = new TemplatePortal(this.dropdownTemplate(), this.viewContainerRef);\n this.overlayRef.attach(this.templatePortal);\n\n // Focus the panel wrapper so keyboard events are captured\n const panelEl = this.overlayRef.overlayElement.querySelector<HTMLElement>('.eds-multiselect__panel-wrapper');\n panelEl?.focus();\n\n this.overlayRef.backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.closeDropdown());\n\n this.overlayRef.keydownEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.closeDropdown();\n }\n });\n\n // Setup key manager\n const opts = this.options();\n if (opts.length > 0) {\n // Reset all active states from previous opening\n opts.forEach(o => o.setInactiveStyles());\n\n this.keyManager = new ActiveDescendantKeyManager(opts as unknown as EdsMultiselectOption[])\n .withVerticalOrientation(true)\n .withHomeAndEnd(true)\n .withWrap();\n\n // APG: If options are selected, focus first selected option; otherwise first option\n const firstSelectedIndex = opts.findIndex(o => o.selected());\n if (firstSelectedIndex >= 0) {\n this.keyManager.setActiveItem(firstSelectedIndex);\n } else {\n this.keyManager.setFirstItemActive();\n }\n this.updateActiveDescendant();\n }\n\n this.isOpen.set(true);\n }\n\n private closeDropdown(): void {\n if (!this.isOpen()) {\n return;\n }\n // Clear active styles on all options\n this.options().forEach(o => o.setInactiveStyles());\n\n this.overlayRef?.detach();\n this.overlayRef?.dispose();\n this.overlayRef = null;\n this.templatePortal = null;\n this.keyManager = null;\n this.activeDescendantId.set(null);\n this.isOpen.set(false);\n this._onTouched();\n this.triggerRef()?.nativeElement?.focus();\n }\n\n private toggleActiveOption(): void {\n const active = this.keyManager?.activeItem;\n if (active && !active.isDisabled()) {\n active.onSelect();\n this.syncValueFromOptions();\n }\n }\n\n private handleTypeAhead(char: string): void {\n const opts = this.options();\n const activeIndex = this.keyManager?.activeItemIndex ?? 0;\n const lowerChar = char.toLowerCase();\n\n // Search from after the active item, then wrap around\n for (let i = 1; i <= opts.length; i++) {\n const index = (activeIndex + i) % opts.length;\n const option = opts[index];\n if (!option.isDisabled() && option.label().toLowerCase().startsWith(lowerChar)) {\n this.keyManager?.setActiveItem(index);\n this.updateActiveDescendant();\n this.scrollActiveOptionIntoView();\n break;\n }\n }\n }\n\n private scrollActiveOptionIntoView(): void {\n const activeId = this.activeDescendantId();\n if (!activeId || !this.overlayRef) {\n return;\n }\n const activeEl = this.overlayRef.overlayElement.querySelector<HTMLElement>(`#${activeId}`);\n if (activeEl && typeof activeEl.scrollIntoView === 'function') {\n activeEl.scrollIntoView({ block: 'nearest' });\n }\n }\n\n private updateActiveDescendant(): void {\n const active = this.keyManager?.activeItem;\n this.activeDescendantId.set(active ? active.optionId() : null);\n }\n\n private syncValueFromOptions(): void {\n const selectedValues = this.options()\n .filter(o => o.selected())\n .map(o => o.value());\n this.internalValue.set(selectedValues);\n this._onChange(selectedValues);\n this.valueChange.emit(selectedValues);\n }\n\n private syncOptionsFromValue(): void {\n const currentValue = this.internalValue();\n this.options().forEach(option => {\n option.selected.set(currentValue.includes(option.value()));\n });\n }\n}\n","<!-- Combobox trigger -->\n<div\n #triggerRef\n class=\"eds-multiselect__trigger\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"isOpen() ? 'eds-multiselect-listbox' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n [attr.aria-disabled]=\"internalDisabled() || null\"\n [attr.tabindex]=\"internalDisabled() ? -1 : 0\"\n (click)=\"onTriggerClick()\"\n (keydown)=\"onTriggerKeydown($event)\"\n>\n <span\n class=\"eds-multiselect__display\"\n [class.eds-multiselect__display--placeholder]=\"isPlaceholderShown()\"\n >\n {{ displayValue() }}\n </span>\n <eds-icon\n class=\"eds-multiselect__caret\"\n [icon]=\"'caret-down'\"\n aria-hidden=\"true\"\n />\n</div>\n\n<!-- Dropdown panel (rendered in overlay) -->\n<ng-template #dropdownTemplate>\n <div class=\"eds-multiselect__panel-wrapper\" tabindex=\"-1\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <div\n class=\"eds-multiselect__panel\"\n id=\"eds-multiselect-listbox\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n tabindex=\"0\"\n (keydown)=\"onPanelKeydown($event)\"\n >\n @for (option of options(); track option.value()) {\n <div\n class=\"eds-multiselect-option\"\n [class.eds-multiselect-option--selected]=\"option.selected()\"\n [class.eds-multiselect-option--active]=\"option.isActive()\"\n [class.eds-multiselect-option--disabled]=\"option.isDisabled()\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"option.selected()\"\n [attr.aria-disabled]=\"option.isDisabled() || null\"\n [id]=\"option.optionId()\"\n (click)=\"onOptionClick(option)\"\n >\n <eds-icon\n class=\"eds-multiselect-option__check\"\n [icon]=\"'check'\"\n edsSizeS\n aria-hidden=\"true\"\n />\n <span class=\"eds-multiselect-option__label\">{{ option.label() }}</span>\n </div>\n }\n </div>\n <div class=\"eds-multiselect__panel-footer\">\n <button\n type=\"button\"\n class=\"eds-multiselect__done-button\"\n (click)=\"onDoneClick()\"\n >\n Done\n </button>\n </div>\n </div>\n</ng-template>\n","import { EdsMultiselect } from './eds-multiselect';\nimport { EdsMultiselectOption } from './eds-multiselect-option';\n\nexport {\n EdsMultiselect,\n EdsMultiselectOption,\n};\n\n/** Convenience array for importing all eds-multiselect components. */\nexport const EDS_MULTISELECT = [\n EdsMultiselect,\n EdsMultiselectOption,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
1
+ {"version":3,"file":"eui-eds-eds-multiselect.mjs","sources":["../../eds-multiselect/eds-multiselect-option.ts","../../eds-multiselect/eds-multiselect.ts","../../eds-multiselect/eds-multiselect.html","../../eds-multiselect/index.ts","../../eds-multiselect/eui-eds-eds-multiselect.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n input,\n signal,\n computed,\n booleanAttribute,\n ElementRef,\n inject,\n} from '@angular/core';\nimport { Highlightable } from '@angular/cdk/a11y';\nimport { EDS_ICON } from '@eui/eds/eds-icon';\n\n/**\n * @description\n * An individual option within the EDS Multiselect dropdown.\n * Supports selection state, disabled state, and keyboard navigation via CDK ActiveDescendantKeyManager.\n *\n * @usageNotes\n * ```html\n * <eds-multiselect-option value=\"opt1\" label=\"Option 1\" />\n * ```\n */\n@Component({\n selector: 'eds-multiselect-option',\n template: `\n <span class=\"eds-multiselect-option__label\">{{ label() }}</span>\n <eds-icon\n class=\"eds-multiselect-option__check\"\n [icon]=\"'check'\"\n aria-hidden=\"true\"\n />\n `,\n styleUrl: './eds-multiselect-option.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [...EDS_ICON],\n host: {\n class: 'eds-multiselect-option',\n '[attr.selected]': 'selected() || null',\n '[attr.active]': 'isActive() || null',\n '[attr.disabled]': 'isDisabled() || null',\n role: 'option',\n '[attr.aria-selected]': 'selected()',\n '[attr.aria-disabled]': 'isDisabled() || null',\n '[attr.data-e2e]': '\"eds-multiselect-option\"',\n '[id]': 'optionId()',\n '(click)': 'onSelect()',\n },\n})\nexport class EdsMultiselectOption implements Highlightable {\n /**\n * The value associated with this option.\n */\n value = input.required<string>();\n\n /**\n * The display label for this option.\n */\n label = input.required<string>();\n\n /**\n * Whether this option is disabled.\n * @default false\n */\n isDisabled = input(false, { transform: booleanAttribute });\n\n /**\n * Whether this entry is a non-selectable group header.\n * When true the entry renders as plain label text, is skipped by keyboard\n * navigation, and cannot be selected.\n * @default false\n */\n isGroup = input(false, { transform: booleanAttribute });\n\n /**\n * Required by Highlightable interface — reads the signal value.\n * Group headers are treated as \"disabled\" so the key manager skips them.\n */\n get disabled(): boolean {\n return this.isDisabled() || this.isGroup();\n }\n\n /** Whether this option is currently selected. */\n selected = signal(false);\n\n /** Whether this option is the active descendant (highlighted via keyboard). */\n isActive = signal(false);\n\n /** Unique ID for the option element (used for aria-activedescendant). */\n optionId = computed(() => `eds-multiselect-option-${this.value()}`);\n\n readonly elementRef = inject(ElementRef);\n\n // --- Highlightable interface ---\n\n setActiveStyles(): void {\n this.isActive.set(true);\n }\n\n setInactiveStyles(): void {\n this.isActive.set(false);\n }\n\n // --- Interaction ---\n\n onSelect(): void {\n if (!this.isDisabled() && !this.isGroup()) {\n this.selected.set(!this.selected());\n }\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n signal,\n computed,\n contentChildren,\n viewChild,\n ElementRef,\n TemplateRef,\n ViewContainerRef,\n inject,\n booleanAttribute,\n effect,\n OnDestroy,\n AfterContentInit,\n DestroyRef,\n} from '@angular/core';\n/* eslint-disable @typescript-eslint/member-ordering */\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n Overlay,\n OverlayRef,\n OverlayModule,\n FlexibleConnectedPositionStrategy,\n ConnectionPositionPair,\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { EDS_ICON } from '@eui/eds/eds-icon';\nimport { EDS_INPUT_CHECKBOX } from '@eui/eds/eds-input-checkbox';\nimport { EDS_BUTTON } from '@eui/eds/eds-button';\n\nimport { EdsMultiselectOption } from './eds-multiselect-option';\n\n/**\n * @description\n * EDS Multiselect component — a combobox-style dropdown that allows multiple selections.\n * Implements the WAI-ARIA multiselect listbox pattern with full keyboard navigation.\n * Styled to match eds-input-text default/hover/focus/disabled states.\n *\n * Integrates with Angular Reactive Forms and Template-driven Forms via ControlValueAccessor.\n *\n * @usageNotes\n * ### Basic usage\n * ```html\n * <eds-multiselect placeholder=\"Select labels\" [(value)]=\"selectedLabels\">\n * <eds-multiselect-option value=\"important\" label=\"Important\" />\n * <eds-multiselect-option value=\"starred\" label=\"Starred\" />\n * <eds-multiselect-option value=\"work\" label=\"Work\" />\n * </eds-multiselect>\n * ```\n *\n * ### With Reactive Forms\n * ```html\n * <eds-multiselect placeholder=\"Select options\" [formControl]=\"myControl\">\n * <eds-multiselect-option value=\"a\" label=\"Option A\" />\n * <eds-multiselect-option value=\"b\" label=\"Option B\" />\n * </eds-multiselect>\n * ```\n *\n * ### Accessibility\n * - Implements ARIA combobox pattern with `role=\"combobox\"` on the trigger\n * - Listbox popup uses `role=\"listbox\"` with `aria-multiselectable=\"true\"`\n * - Arrow keys navigate options, Space toggles selection, Escape closes\n * - Active descendant pattern for screen reader announcements\n */\n@Component({\n selector: 'eds-multiselect',\n templateUrl: './eds-multiselect.html',\n styleUrl: './eds-multiselect.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [OverlayModule, A11yModule, ...EDS_ICON, ...EDS_INPUT_CHECKBOX, ...EDS_BUTTON],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: EdsMultiselect,\n multi: true,\n },\n ],\n host: {\n class: 'eds-multiselect',\n '[attr.disabled]': 'internalDisabled() || null',\n '[attr.invalid]': 'internalInvalid() || null',\n '[attr.open]': 'isOpen() || null',\n '[attr.data-e2e]': 'e2eAttr()',\n },\n})\nexport class EdsMultiselect implements ControlValueAccessor, OnDestroy, AfterContentInit {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-multiselect'\n */\n e2eAttr = input('eds-multiselect');\n\n /**\n * Placeholder text displayed when no options are selected.\n * @default 'Select options'\n */\n placeholder = input('Select options');\n\n /**\n * Controls whether the multiselect is disabled.\n * @default false\n */\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the multiselect shows an invalid/error state.\n * @default false\n */\n isInvalid = input(false, { transform: booleanAttribute });\n\n /**\n * Aria-label for the combobox trigger.\n * @default 'Select options'\n */\n ariaLabel = input('Select options');\n\n /**\n * Label for the panel-footer \"Cancel\" button.\n * @default 'Cancel'\n */\n cancelLabel = input('Cancel');\n\n /**\n * Label for the panel-footer \"Confirm choice\" button.\n * @default 'Confirm choice'\n */\n confirmLabel = input('Confirm choice');\n\n /**\n * Emits the current selection whenever it changes.\n */\n valueChange = output<string[]>();\n\n /**\n * Emits the confirmed selection when the \"Confirm choice\" button is clicked.\n */\n confirmed = output<string[]>();\n\n /**\n * Emits when the \"Cancel\" button is clicked (selection reverted to its pre-open state).\n */\n cancelled = output<void>();\n\n /** The projected option components. */\n readonly options = contentChildren(EdsMultiselectOption);\n\n /** Reference to the dropdown template for the overlay. */\n readonly dropdownTemplate = viewChild<TemplateRef<unknown>>('dropdownTemplate');\n\n /** Reference to the trigger element. */\n readonly triggerRef = viewChild<ElementRef<HTMLElement>>('triggerRef');\n\n /** Whether the dropdown popup is open. */\n isOpen = signal(false);\n\n /** Internal selected values. */\n protected internalValue = signal<string[]>([]);\n\n /** Snapshot of the selection taken when the dropdown opens, used to revert on Cancel. */\n private valueSnapshot: string[] = [];\n\n /** Internal disabled state (supports CVA setDisabledState). */\n protected internalDisabled = signal(false);\n\n /** Internal invalid state. */\n protected internalInvalid = signal(false);\n\n /** The display value shown in the trigger. */\n protected displayValue = computed(() => {\n const selected = this.internalValue();\n if (selected.length === 0) {\n return this.placeholder();\n }\n const opts = this.options();\n const firstLabel = opts.find(o => o.value() === selected[0])?.label() ?? selected[0];\n if (selected.length === 1) {\n return firstLabel;\n }\n return `${firstLabel} + ${selected.length - 1} more`;\n });\n\n /** Whether the placeholder is shown (no selection). */\n protected isPlaceholderShown = computed(() => this.internalValue().length === 0);\n\n /** The active descendant ID for screen readers. */\n protected activeDescendantId = signal<string | null>(null);\n\n private overlay = inject(Overlay);\n private viewContainerRef = inject(ViewContainerRef);\n private destroyRef = inject(DestroyRef);\n private overlayRef: OverlayRef | null = null;\n private templatePortal: TemplatePortal | null = null;\n private keyManager: ActiveDescendantKeyManager<EdsMultiselectOption> | null = null;\n\n constructor() {\n // Sync disabled input → internal state\n effect(() => {\n this.internalDisabled.set(this.disabled());\n });\n\n // Sync isInvalid input → internal state\n effect(() => {\n this.internalInvalid.set(this.isInvalid());\n });\n }\n\n private _onChange: (value: string[]) => void = () => { /* noop */ };\n private _onTouched: () => void = () => { /* noop */ };\n\n ngAfterContentInit(): void {\n // Sync option selected states from internalValue whenever options change\n this.syncOptionsFromValue();\n }\n\n ngOnDestroy(): void {\n this.closeDropdown();\n this.overlayRef?.dispose();\n this.overlayRef = null;\n }\n\n // --- ControlValueAccessor ---\n\n writeValue(value: string[]): void {\n this.internalValue.set(value ?? []);\n this.syncOptionsFromValue();\n }\n\n registerOnChange(fn: (value: string[]) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.internalDisabled.set(isDisabled);\n }\n\n // --- Trigger interactions ---\n\n protected onTriggerClick(): void {\n if (this.internalDisabled()) {\n return;\n }\n if (this.isOpen()) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (this.internalDisabled()) {\n return;\n }\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openDropdown();\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openDropdown();\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openDropdown();\n }\n break;\n case 'Escape':\n event.preventDefault();\n if (this.isOpen()) {\n this.closeDropdown();\n }\n break;\n }\n }\n\n protected onOptionClick(option: EdsMultiselectOption): void {\n if (option.isDisabled() || option.isGroup()) {\n return;\n }\n option.onSelect();\n this.syncValueFromOptions();\n this.keyManager?.setActiveItem(option);\n this.updateActiveDescendant();\n }\n\n protected onConfirmClick(): void {\n this.confirmed.emit(this.internalValue());\n this.closeDropdown();\n }\n\n protected onCancelClick(): void {\n // Revert selection to the snapshot taken when the dropdown opened.\n this.internalValue.set([...this.valueSnapshot]);\n this.syncOptionsFromValue();\n this._onChange(this.valueSnapshot);\n this.valueChange.emit(this.valueSnapshot);\n this.cancelled.emit();\n this.closeDropdown();\n }\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.keyManager?.setNextItemActive();\n this.updateActiveDescendant();\n this.scrollActiveOptionIntoView();\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.keyManager?.setPreviousItemActive();\n this.updateActiveDescendant();\n this.scrollActiveOptionIntoView();\n break;\n case 'Home':\n event.preventDefault();\n this.keyManager?.setFirstItemActive();\n this.updateActiveDescendant();\n this.scrollActiveOptionIntoView();\n break;\n case 'End':\n event.preventDefault();\n this.keyManager?.setLastItemActive();\n this.updateActiveDescendant();\n this.scrollActiveOptionIntoView();\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.toggleActiveOption();\n break;\n case 'Escape':\n event.preventDefault();\n this.closeDropdown();\n break;\n default:\n // Type-ahead: single printable character moves focus to next matching option\n if (event.key.length === 1 && !event.ctrlKey && !event.altKey && !event.metaKey) {\n this.handleTypeAhead(event.key);\n }\n break;\n }\n }\n\n // --- Dropdown management (private) ---\n\n private openDropdown(): void {\n if (this.isOpen() || !this.dropdownTemplate()) {\n return;\n }\n\n const triggerEl = this.triggerRef()?.nativeElement;\n if (!triggerEl) {\n return;\n }\n\n // Snapshot current selection so Cancel can revert to it.\n this.valueSnapshot = [...this.internalValue()];\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(triggerEl)\n .withPositions([\n new ConnectionPositionPair(\n { originX: 'start', originY: 'bottom' },\n { overlayX: 'start', overlayY: 'top' },\n ),\n new ConnectionPositionPair(\n { originX: 'start', originY: 'top' },\n { overlayX: 'start', overlayY: 'bottom' },\n ),\n ])\n .withFlexibleDimensions(false)\n .withPush(true);\n\n const scrollStrategy = this.overlay.scrollStrategies.reposition();\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy,\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n width: triggerEl.offsetWidth,\n disposeOnNavigation: true,\n });\n\n this.templatePortal = new TemplatePortal(this.dropdownTemplate(), this.viewContainerRef);\n this.overlayRef.attach(this.templatePortal);\n\n // Focus the panel wrapper so keyboard events are captured\n const panelEl = this.overlayRef.overlayElement.querySelector<HTMLElement>('.eds-multiselect__panel-wrapper');\n panelEl?.focus();\n\n this.overlayRef.backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.closeDropdown());\n\n this.overlayRef.keydownEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.closeDropdown();\n }\n });\n\n // Setup key manager\n const opts = this.options();\n if (opts.length > 0) {\n // Reset all active states from previous opening\n opts.forEach(o => o.setInactiveStyles());\n\n this.keyManager = new ActiveDescendantKeyManager(opts as unknown as EdsMultiselectOption[])\n .withVerticalOrientation(true)\n .withHomeAndEnd(true)\n .withWrap();\n\n // APG: If options are selected, focus first selected option; otherwise first option\n const firstSelectedIndex = opts.findIndex(o => o.selected());\n if (firstSelectedIndex >= 0) {\n this.keyManager.setActiveItem(firstSelectedIndex);\n } else {\n this.keyManager.setFirstItemActive();\n }\n this.updateActiveDescendant();\n }\n\n this.isOpen.set(true);\n }\n\n private closeDropdown(): void {\n if (!this.isOpen()) {\n return;\n }\n // Clear active styles on all options\n this.options().forEach(o => o.setInactiveStyles());\n\n this.overlayRef?.detach();\n this.overlayRef?.dispose();\n this.overlayRef = null;\n this.templatePortal = null;\n this.keyManager = null;\n this.activeDescendantId.set(null);\n this.isOpen.set(false);\n this._onTouched();\n this.triggerRef()?.nativeElement?.focus();\n }\n\n private toggleActiveOption(): void {\n const active = this.keyManager?.activeItem;\n if (active && !active.isDisabled()) {\n active.onSelect();\n this.syncValueFromOptions();\n }\n }\n\n private handleTypeAhead(char: string): void {\n const opts = this.options();\n const activeIndex = this.keyManager?.activeItemIndex ?? 0;\n const lowerChar = char.toLowerCase();\n\n // Search from after the active item, then wrap around\n for (let i = 1; i <= opts.length; i++) {\n const index = (activeIndex + i) % opts.length;\n const option = opts[index];\n if (!option.isDisabled() && option.label().toLowerCase().startsWith(lowerChar)) {\n this.keyManager?.setActiveItem(index);\n this.updateActiveDescendant();\n this.scrollActiveOptionIntoView();\n break;\n }\n }\n }\n\n private scrollActiveOptionIntoView(): void {\n const activeId = this.activeDescendantId();\n if (!activeId || !this.overlayRef) {\n return;\n }\n const activeEl = this.overlayRef.overlayElement.querySelector<HTMLElement>(`#${activeId}`);\n if (activeEl && typeof activeEl.scrollIntoView === 'function') {\n activeEl.scrollIntoView({ block: 'nearest' });\n }\n }\n\n private updateActiveDescendant(): void {\n const active = this.keyManager?.activeItem;\n this.activeDescendantId.set(active ? active.optionId() : null);\n }\n\n private syncValueFromOptions(): void {\n const selectedValues = this.options()\n .filter(o => o.selected() && !o.isGroup())\n .map(o => o.value());\n this.internalValue.set(selectedValues);\n this._onChange(selectedValues);\n this.valueChange.emit(selectedValues);\n }\n\n private syncOptionsFromValue(): void {\n const currentValue = this.internalValue();\n this.options().forEach(option => {\n option.selected.set(!option.isGroup() && currentValue.includes(option.value()));\n });\n }\n}\n","<!-- Combobox trigger -->\n<div\n #triggerRef\n class=\"eds-multiselect__trigger\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"isOpen() ? 'eds-multiselect-listbox' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n [attr.aria-disabled]=\"internalDisabled() || null\"\n [attr.tabindex]=\"internalDisabled() ? -1 : 0\"\n (click)=\"onTriggerClick()\"\n (keydown)=\"onTriggerKeydown($event)\"\n>\n <span\n class=\"eds-multiselect__display\"\n [class.eds-multiselect__display--placeholder]=\"isPlaceholderShown()\"\n >\n {{ displayValue() }}\n </span>\n <eds-icon\n class=\"eds-multiselect__caret\"\n [icon]=\"'caret-down'\"\n aria-hidden=\"true\"\n />\n</div>\n\n<!-- Dropdown panel (rendered in overlay) -->\n<ng-template #dropdownTemplate>\n <div class=\"eds-multiselect__panel-wrapper\" tabindex=\"-1\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <div\n class=\"eds-multiselect__panel\"\n id=\"eds-multiselect-listbox\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n tabindex=\"0\"\n (keydown)=\"onPanelKeydown($event)\"\n >\n @for (option of options(); track option.value()) {\n @if (option.isGroup()) {\n <div\n class=\"eds-multiselect-group\"\n role=\"presentation\"\n [id]=\"option.optionId()\"\n >\n {{ option.label() }}\n </div>\n } @else {\n <div\n class=\"eds-multiselect-option\"\n [class.eds-multiselect-option--selected]=\"option.selected()\"\n [class.eds-multiselect-option--active]=\"option.isActive()\"\n [class.eds-multiselect-option--disabled]=\"option.isDisabled()\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"option.selected()\"\n [attr.aria-disabled]=\"option.isDisabled() || null\"\n [id]=\"option.optionId()\"\n (click)=\"onOptionClick(option)\"\n >\n <input\n class=\"eds-multiselect-option__checkbox\"\n edsInputCheckbox\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [checked]=\"option.selected()\"\n [disabled]=\"option.isDisabled()\"\n />\n <span class=\"eds-multiselect-option__label\">{{ option.label() }}</span>\n </div>\n }\n }\n </div>\n <div class=\"eds-multiselect__panel-footer\">\n <button\n edsButton\n type=\"button\"\n variant=\"tertiary\"\n size=\"s\"\n (click)=\"onCancelClick()\"\n >\n {{ cancelLabel() }}\n </button>\n <button\n edsButton\n type=\"button\"\n variant=\"secondary\"\n size=\"s\"\n (click)=\"onConfirmClick()\"\n >\n {{ confirmLabel() }}\n </button>\n </div>\n </div>\n</ng-template>\n","import { EdsMultiselect } from './eds-multiselect';\nimport { EdsMultiselectOption } from './eds-multiselect-option';\n\nexport {\n EdsMultiselect,\n EdsMultiselectOption,\n};\n\n/** Convenience array for importing all eds-multiselect components. */\nexport const EDS_MULTISELECT = [\n EdsMultiselect,\n EdsMultiselectOption,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":";;;;;;;;;;;;;;;AAaA;;;;;;;;;AASG;MA2BU,oBAAoB,CAAA;AA1BjC,IAAA,WAAA,GAAA;AA2BI;;AAEG;QACH,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ;kFAAU;AAEhC;;AAEG;QACH,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ;kFAAU;AAEhC;;;AAGG;QACH,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE1D;;;;;AAKG;QACH,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;QAWvD,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK;qFAAC;;QAGxB,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK;qFAAC;;QAGxB,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAA,uBAAA,EAA0B,IAAI,CAAC,KAAK,EAAE,CAAA,CAAE;qFAAC;AAE1D,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAmB3C,IAAA;AApCG;;;AAGG;AACH,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;IAC9C;;IAeA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;IAEA,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;;IAIA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;YACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvC;IACJ;8GA5DS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,YAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,4BAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxBnB;;;;;;;AAOT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,iwBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAiBQ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA1BhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAAA,QAAA,EACxB;;;;;;;KAOT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,GAAG,QAAQ,CAAC,EAAA,IAAA,EAChB;AACF,wBAAA,KAAK,EAAE,wBAAwB;AAC/B,wBAAA,iBAAiB,EAAE,oBAAoB;AACvC,wBAAA,eAAe,EAAE,oBAAoB;AACrC,wBAAA,iBAAiB,EAAE,sBAAsB;AACzC,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,sBAAsB,EAAE,YAAY;AACpC,wBAAA,sBAAsB,EAAE,sBAAsB;AAC9C,wBAAA,iBAAiB,EAAE,0BAA0B;AAC7C,wBAAA,MAAM,EAAE,YAAY;AACpB,wBAAA,SAAS,EAAE,YAAY;AAC1B,qBAAA,EAAA,MAAA,EAAA,CAAA,iwBAAA,CAAA,EAAA;;;ACTL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BG;MAsBU,cAAc,CAAA;AA6GvB,IAAA,WAAA,GAAA;AA5GA;;;AAGG;QACH,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,iBAAiB;oFAAC;AAElC;;;AAGG;QACH,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,gBAAgB;wFAAC;AAErC;;;AAGG;QACH,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExD;;;AAGG;QACH,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEzD;;;AAGG;QACH,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,gBAAgB;sFAAC;AAEnC;;;AAGG;QACH,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,QAAQ;wFAAC;AAE7B;;;AAGG;QACH,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,gBAAgB;yFAAC;AAEtC;;AAEG;QACH,IAAA,CAAA,WAAW,GAAG,MAAM,EAAY;AAEhC;;AAEG;QACH,IAAA,CAAA,SAAS,GAAG,MAAM,EAAY;AAE9B;;AAEG;QACH,IAAA,CAAA,SAAS,GAAG,MAAM,EAAQ;;QAGjB,IAAA,CAAA,OAAO,GAAG,eAAe,CAAC,oBAAoB;oFAAC;;QAG/C,IAAA,CAAA,gBAAgB,GAAG,SAAS,CAAuB,kBAAkB;6FAAC;;QAGtE,IAAA,CAAA,UAAU,GAAG,SAAS,CAA0B,YAAY;uFAAC;;QAGtE,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,KAAK;mFAAC;;QAGZ,IAAA,CAAA,aAAa,GAAG,MAAM,CAAW,EAAE;0FAAC;;QAGtC,IAAA,CAAA,aAAa,GAAa,EAAE;;QAG1B,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,KAAK;6FAAC;;QAGhC,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,KAAK;4FAAC;;AAG/B,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACnC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,gBAAA,OAAO,IAAI,CAAC,WAAW,EAAE;YAC7B;AACA,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,QAAQ,CAAC,CAAC,CAAC;AACpF,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,gBAAA,OAAO,UAAU;YACrB;YACA,OAAO,CAAA,EAAG,UAAU,CAAA,GAAA,EAAM,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA,KAAA,CAAO;QACxD,CAAC;yFAAC;;AAGQ,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,KAAK,CAAC;+FAAC;;QAGtE,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAgB,IAAI;+FAAC;AAElD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,IAAA,CAAA,UAAU,GAAsB,IAAI;QACpC,IAAA,CAAA,cAAc,GAA0B,IAAI;QAC5C,IAAA,CAAA,UAAU,GAA4D,IAAI;AAc1E,QAAA,IAAA,CAAA,SAAS,GAA8B,MAAK,EAAc,CAAC;AAC3D,QAAA,IAAA,CAAA,UAAU,GAAe,MAAK,EAAc,CAAC;;QAXjD,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC9C,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;AAC9C,QAAA,CAAC,CAAC;IACN;IAKA,kBAAkB,GAAA;;QAEd,IAAI,CAAC,oBAAoB,EAAE;IAC/B;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IAC1B;;AAIA,IAAA,UAAU,CAAC,KAAe,EAAA;QACtB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,oBAAoB,EAAE;IAC/B;AAEA,IAAA,gBAAgB,CAAC,EAA6B,EAAA;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACvB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACxB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;IACzC;;IAIU,cAAc,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YACzB;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,CAAC,aAAa,EAAE;QACxB;aAAO;YACH,IAAI,CAAC,YAAY,EAAE;QACvB;IACJ;AAEU,IAAA,gBAAgB,CAAC,KAAoB,EAAA;AAC3C,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YACzB;QACJ;AAEA,QAAA,QAAQ,KAAK,CAAC,GAAG;AACb,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACJ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAChB,IAAI,CAAC,YAAY,EAAE;gBACvB;gBACA;AACJ,YAAA,KAAK,WAAW;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAChB,IAAI,CAAC,YAAY,EAAE;gBACvB;gBACA;AACJ,YAAA,KAAK,SAAS;gBACV,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAChB,IAAI,CAAC,YAAY,EAAE;gBACvB;gBACA;AACJ,YAAA,KAAK,QAAQ;gBACT,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACf,IAAI,CAAC,aAAa,EAAE;gBACxB;gBACA;;IAEZ;AAEU,IAAA,aAAa,CAAC,MAA4B,EAAA;QAChD,IAAI,MAAM,CAAC,UAAU,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE;YACzC;QACJ;QACA,MAAM,CAAC,QAAQ,EAAE;QACjB,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,sBAAsB,EAAE;IACjC;IAEU,cAAc,GAAA;QACpB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACzC,IAAI,CAAC,aAAa,EAAE;IACxB;IAEU,aAAa,GAAA;;AAEnB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/C,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,aAAa,EAAE;IACxB;AAEU,IAAA,cAAc,CAAC,KAAoB,EAAA;AACzC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACb,YAAA,KAAK,WAAW;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,UAAU,EAAE,iBAAiB,EAAE;gBACpC,IAAI,CAAC,sBAAsB,EAAE;gBAC7B,IAAI,CAAC,0BAA0B,EAAE;gBACjC;AACJ,YAAA,KAAK,SAAS;gBACV,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,UAAU,EAAE,qBAAqB,EAAE;gBACxC,IAAI,CAAC,sBAAsB,EAAE;gBAC7B,IAAI,CAAC,0BAA0B,EAAE;gBACjC;AACJ,YAAA,KAAK,MAAM;gBACP,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,UAAU,EAAE,kBAAkB,EAAE;gBACrC,IAAI,CAAC,sBAAsB,EAAE;gBAC7B,IAAI,CAAC,0BAA0B,EAAE;gBACjC;AACJ,YAAA,KAAK,KAAK;gBACN,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,UAAU,EAAE,iBAAiB,EAAE;gBACpC,IAAI,CAAC,sBAAsB,EAAE;gBAC7B,IAAI,CAAC,0BAA0B,EAAE;gBACjC;AACJ,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACJ,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,kBAAkB,EAAE;gBACzB;AACJ,YAAA,KAAK,QAAQ;gBACT,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,aAAa,EAAE;gBACpB;AACJ,YAAA;;gBAEI,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AAC7E,oBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC;gBACnC;gBACA;;IAEZ;;IAIQ,YAAY,GAAA;QAChB,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC3C;QACJ;QAEA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;QAClD,IAAI,CAAC,SAAS,EAAE;YACZ;QACJ;;QAGA,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AAE9C,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACzB,aAAA,QAAQ;aACR,mBAAmB,CAAC,SAAS;AAC7B,aAAA,aAAa,CAAC;YACX,IAAI,sBAAsB,CACtB,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EACvC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CACzC;YACD,IAAI,sBAAsB,CACtB,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EACpC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAC5C;SACJ;aACA,sBAAsB,CAAC,KAAK;aAC5B,QAAQ,CAAC,IAAI,CAAC;QAEnB,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE;QAEjE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAClC,gBAAgB;YAChB,cAAc;AACd,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,kCAAkC;YACjD,KAAK,EAAE,SAAS,CAAC,WAAW;AAC5B,YAAA,mBAAmB,EAAE,IAAI;AAC5B,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC;QACxF,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;;AAG3C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,aAAa,CAAc,iCAAiC,CAAC;QAC5G,OAAO,EAAE,KAAK,EAAE;AAEhB,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa;AACxB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;AAE1C,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa;AACxB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;gBACxB,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,aAAa,EAAE;YACxB;AACJ,QAAA,CAAC,CAAC;;AAGN,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEjB,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,CAAC;AAExC,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,0BAA0B,CAAC,IAAyC;iBACrF,uBAAuB,CAAC,IAAI;iBAC5B,cAAc,CAAC,IAAI;AACnB,iBAAA,QAAQ,EAAE;;AAGf,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC5D,YAAA,IAAI,kBAAkB,IAAI,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC;YACrD;iBAAO;AACH,gBAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;YACxC;YACA,IAAI,CAAC,sBAAsB,EAAE;QACjC;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;IACzB;IAEQ,aAAa,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;YAChB;QACJ;;AAEA,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,CAAC;AAElD,QAAA,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE;AACzB,QAAA,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACtB,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE;IAC7C;IAEQ,kBAAkB,GAAA;AACtB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU;QAC1C,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE;YAChC,MAAM,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,oBAAoB,EAAE;QAC/B;IACJ;AAEQ,IAAA,eAAe,CAAC,IAAY,EAAA;AAChC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,IAAI,CAAC;AACzD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE;;AAGpC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,MAAM,KAAK,GAAG,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM;AAC7C,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;AAC5E,gBAAA,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,KAAK,CAAC;gBACrC,IAAI,CAAC,sBAAsB,EAAE;gBAC7B,IAAI,CAAC,0BAA0B,EAAE;gBACjC;YACJ;QACJ;IACJ;IAEQ,0BAA0B,GAAA;AAC9B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE;QAC1C,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAC/B;QACJ;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,aAAa,CAAc,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAC;QAC1F,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,cAAc,KAAK,UAAU,EAAE;YAC3D,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACjD;IACJ;IAEQ,sBAAsB,GAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU;AAC1C,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;IAClE;IAEQ,oBAAoB,GAAA;AACxB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO;AAC9B,aAAA,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;aACxC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC;AACtC,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC;IACzC;IAEQ,oBAAoB,GAAA;AACxB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;QACzC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,IAAG;YAC5B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACnF,QAAA,CAAC,CAAC;IACN;8GA9aS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,2BAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAfZ;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,cAAc;AAC3B,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;AACJ,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAoEkC,oBAAoB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtJ3D,6qHAiGA,EAAA,MAAA,EAAA,CAAA,i3HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtBc,aAAa,8BAAE,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAgB1B,cAAc,EAAA,UAAA,EAAA,CAAA;kBArB1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,mBAGV,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,aAAa,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,GAAG,kBAAkB,EAAE,GAAG,UAAU,CAAC,EAAA,SAAA,EAC5E;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,cAAgB;AAC3B,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;qBACJ,EAAA,IAAA,EACK;AACF,wBAAA,KAAK,EAAE,iBAAiB;AACxB,wBAAA,iBAAiB,EAAE,4BAA4B;AAC/C,wBAAA,gBAAgB,EAAE,2BAA2B;AAC7C,wBAAA,aAAa,EAAE,kBAAkB;AACjC,wBAAA,iBAAiB,EAAE,WAAW;AACjC,qBAAA,EAAA,QAAA,EAAA,6qHAAA,EAAA,MAAA,EAAA,CAAA,i3HAAA,CAAA,EAAA;w9BA6DkC,oBAAoB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAGK,kBAAkB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAGrB,YAAY,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEpJzE;AACO,MAAM,eAAe,GAAG;IAC3B,cAAc;IACd,oBAAoB;;;ACXxB;;AAEG;;;;"}
@@ -562,15 +562,11 @@ class EdsMaxlengthDirective {
562
562
  this._renderer.setProperty(input, 'maxLength', this._calculateMaxLength());
563
563
  if (this._maxLengthSpan) {
564
564
  if (remaining <= 0) {
565
- this._maxLengthSpan.style.backgroundColor = 'var(--eds-c-surface-warning)';
566
- this._maxLengthSpan.style.borderColor = 'var(--eds-c-border-warning)';
567
565
  this._maxLengthSpan.style.color = 'var(--eds-c-foreground-critical)';
568
566
  this.maxLengthReached.emit(true);
569
567
  }
570
568
  else {
571
- this._maxLengthSpan.style.backgroundColor = 'var(--eds-c-surface-elevation)';
572
- this._maxLengthSpan.style.borderColor = 'var(--eds-c-border-neutral)';
573
- this._maxLengthSpan.style.color = 'var(--eds-c-foreground)';
569
+ this._maxLengthSpan.style.color = 'var(--eds-c-foreground-subtler)';
574
570
  this.maxLengthReached.emit(false);
575
571
  }
576
572
  if (remaining < 0) {
@@ -580,10 +576,11 @@ class EdsMaxlengthDirective {
580
576
  else {
581
577
  input.value = input.value.substring(0, this._calculateMaxLength());
582
578
  }
583
- this._renderer.setProperty(this._maxLengthSpan, 'textContent', '0');
579
+ this._renderer.setProperty(this._maxLengthSpan, 'textContent', `${maxLen} / ${maxLen}`);
584
580
  }
585
581
  else {
586
- this._renderer.setProperty(this._maxLengthSpan, 'textContent', remaining.toString());
582
+ // Display current character count over the maximum, e.g. "12 / 100".
583
+ this._renderer.setProperty(this._maxLengthSpan, 'textContent', `${valueLength} / ${maxLen}`);
587
584
  }
588
585
  }
589
586
  }
@@ -593,20 +590,21 @@ class EdsMaxlengthDirective {
593
590
  }
594
591
  this._maxLengthSpan = this._renderer.createElement('span');
595
592
  this._renderer.addClass(this._maxLengthSpan, 'eds-maxlength');
596
- this._renderer.setProperty(this._maxLengthSpan, 'textContent', (this.edsMaxlength() || 0).toString());
597
- // Inline styles (self-contained, no global stylesheet dependency)
593
+ const initialLength = Math.min(this._getValueLength(), this.edsMaxlength() || 0);
594
+ this._renderer.setProperty(this._maxLengthSpan, 'textContent', `${initialLength} / ${this.edsMaxlength() || 0}`);
595
+ // Inline styles (self-contained, no global stylesheet dependency).
596
+ // No border, no background — only the foreground color. The counter sits
597
+ // above the top-right corner of the element it is attached to.
598
598
  this._maxLengthSpan.setAttribute('style', [
599
599
  'font: var(--eds-f-microcopy-xs)',
600
- 'background-color: var(--eds-c-surface-neutral-subtle, #f0f0f0)',
601
- 'border: 1px solid var(--eds-c-border-neutral)',
602
- 'border-radius: var(--eds-br-xs)',
603
- 'color: var(--eds-c-foreground)',
600
+ 'color: var(--eds-c-foreground-subtler)',
604
601
  'padding: 0 var(--eds-sp-3xs)',
605
602
  'position: absolute',
606
- 'right: calc(-1 * var(--eds-sp-xs))',
607
- 'top: calc(-1 * var(--eds-sp-xs))',
603
+ 'right: 0',
604
+ 'bottom: 100%',
608
605
  'z-index: 1',
609
606
  'line-height: 1.6',
607
+ 'pointer-events: none',
610
608
  ].join(';'));
611
609
  const nativeElement = this._el.nativeElement;
612
610
  const parent = nativeElement.parentNode;