@eui/eds 22.0.0-alpha.48 → 22.0.0-alpha.49

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.
@@ -69727,7 +69727,7 @@
69727
69727
  "assetsDirs": [],
69728
69728
  "styleUrlsData": [
69729
69729
  {
69730
- "data": "@use '../base' as base;\n\n.eui-21 {\n :host {\n display: block;\n position: relative;\n width: 100%;\n\n // Size-driven privates (defaults = `m`, matching eds-input() convention)\n --_eds-input-height: var(--eds-si-4xl); // 40px\n --_eds-input-pad-v: var(--eds-sp-xs);\n --_eds-input-pad-h: var(--eds-sp-s);\n --_eds-input-font: var(--eds-f-paragraph-m);\n\n @include base.eds-input-size();\n\n .eds-multiselect__trigger {\n @include base.eds-ellipsis();\n display: flex;\n align-items: center;\n gap: var(--eds-sp-xs);\n font: var(--_eds-input-font);\n appearance: none;\n background-color: var(--eds-c-surface-elevation);\n border: var(--eds-bw-xs) solid var(--eds-c-border-neutral); //EDS: color/border/neutral/default #48484F (not existing)\n border-radius: var(--eds-br-s);\n box-shadow: none;\n color: var(--eds-c-foreground);\n box-sizing: border-box;\n height: var(--_eds-input-height);\n padding: var(--_eds-input-pad-v) var(--_eds-input-pad-h);\n width: 100%;\n cursor: pointer;\n outline: none;\n transition: border-color 0.15s ease;\n\n // Hover — mirrors base.eds-input-hover(): elevation shadow + neutral hover border.\n &:hover:not([aria-disabled=\"true\"]) {\n box-shadow: var(--eds-sh-1);\n border-color: var(--eds-c-border);\n }\n\n // Focus ring — hand-written (no !important) since the trigger is a div, never readonly.\n &:focus {\n outline: var(--eds-bw-s) solid var(--eds-c-border-primary);\n outline-offset: 2px;\n }\n\n &:focus-visible {\n outline: 2px solid var(--eds-c-border-primary);\n outline-offset: 2px;\n transition: none;\n }\n }\n\n .eds-multiselect__display {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &--placeholder {\n color: var(--eds-c-foreground-placeholder);\n }\n }\n\n .eds-multiselect__caret {\n flex-shrink: 0;\n --_eds-icon-color-inherit: var(--eds-c-foreground);\n transition: transform 0.2s ease;\n }\n\n }\n\n // Open state — mirror the shared focus ring (base.eds-focus-visible-ring).\n :host([open]) {\n .eds-multiselect__trigger {\n border-color: var(--eds-c-border-primary);\n outline: var(--eds-bw-s) solid var(--eds-c-border-primary);\n outline-offset: 2px;\n }\n\n .eds-multiselect__caret {\n transform: rotate(180deg);\n }\n }\n\n // Disabled state\n :host([disabled]) {\n .eds-multiselect__trigger {\n background-color: var(--eds-c-surface-disabled-subtle);\n border-color: var(--eds-c-border-disabled);\n color: var(--eds-c-foreground-disabled);\n cursor: not-allowed;\n pointer-events: none;\n }\n\n .eds-multiselect__caret {\n --_eds-icon-color-inherit: var(--eds-c-foreground-disabled);\n }\n }\n\n // Invalid state\n :host([invalid]) {\n .eds-multiselect__trigger {\n border-color: var(--eds-c-border-critical);\n }\n\n .eds-multiselect__trigger:focus {\n outline: var(--eds-bw-s) solid var(--eds-c-border-critical);\n outline-offset: 2px;\n }\n\n .eds-multiselect__trigger:focus-visible {\n outline: 2px solid var(--eds-c-border-critical);\n outline-offset: 2px;\n transition: none;\n }\n \n // Open + invalid — mirror the critical focus ring.\n &[open] {\n .eds-multiselect__trigger {\n border-color: var(--eds-c-border-critical);\n outline: var(--eds-bw-s) solid var(--eds-c-border-critical);\n outline-offset: 2px;\n }\n }\n }\n}\n\n// Dropdown panel (content-projected into eds-floating-panel; global class so it applies to the\n// projected DOM regardless of the panel's own encapsulation boundary).\n.eds-multiselect__panel-wrapper {\n background-color: var(--eds-c-surface-elevation);\n border: var(--eds-bw-xs) solid var(--eds-c-border-divider); //EDS aligned\n border-radius: var(--eds-br-s);\n box-shadow: var(--eds-sh-1);\n display: flex;\n flex-direction: column;\n max-height: 280px;\n min-width: 100%;\n box-sizing: border-box;\n outline: none;\n}\n\n.eds-multiselect__panel {\n flex: 1;\n max-height: 240px;\n overflow-y: auto;\n padding: var(--eds-sp-xs); // EDS aligned\n outline: none;\n\n .eds-multiselect-group {\n padding: var(--eds-sp-xs) var(--eds-sp-s);\n font: var(--eds-f-label-m);\n font-weight: var(--eds-f-w-medium);\n color: var(--eds-c-foreground-subtle);\n cursor: default;\n user-select: none;\n }\n\n .eds-multiselect-option {\n display: flex;\n align-items: center;\n gap: var(--eds-sp-s);\n padding: var(--eds-sp-xs) var(--eds-sp-s); // EDS aligned\n cursor: pointer;\n font: var(--eds-f-paragraph-m);\n color: var(--eds-c-foreground);\n user-select: none;\n transition: background-color 0.1s ease;\n\n .eds-multiselect-option__label {\n flex: 1;\n }\n\n .eds-multiselect-option__checkbox {\n flex-shrink: 0;\n pointer-events: none;\n }\n\n // Proxy the eds-input-checkbox hover/focus states from the option row,\n // since the checkbox itself has pointer-events: none.\n &:hover:not(.eds-multiselect-option--disabled) .eds-multiselect-option__checkbox {\n box-shadow: var(--eds-sh-1);\n border-color: var(--eds-c-border-neutral); //EDS aligned\n\n &:checked,\n &[checked=\"true\"] {\n background-color: var(--eds-c-surface-primary--hover);\n }\n }\n\n &--active:not(.eds-multiselect-option--disabled) .eds-multiselect-option__checkbox {\n outline: var(--eds-bw-s) solid var(--eds-c-border-primary);\n outline-offset: 2px;\n }\n\n &:hover:not(.eds-multiselect-option--disabled) {\n background-color: var(--eds-c-surface-accent); //EDS aligned\n }\n\n &--active:not(.eds-multiselect-option--disabled) {\n outline: var(--eds-bw-xs) solid var(--eds-c-border-primary);\n outline-offset: -1px;\n }\n\n &--selected {\n background-color: var(--eds-c-surface-selected);\n\n &:hover:not(.eds-multiselect-option--disabled) {\n background-color: var(--eds-c-surface-selected);\n }\n }\n\n &--disabled {\n color: var(--eds-c-foreground-subtler);\n cursor: not-allowed;\n pointer-events: none;\n }\n }\n}\n\n.eds-multiselect__panel-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--eds-sp-xs);\n padding: var(--eds-sp-xs) var(--eds-sp-s);\n background-color: var(--eds-c-surface-elevation-elevated);\n box-shadow: 0 -14px 42px 0 var(--eds-sh-4, rgba(0, 0, 0, 0.14)); //EDS aligned\n}\n",
69730
+ "data": "@use '../base' as base;\n\n.eui-21 {\n :host {\n display: block;\n position: relative;\n width: 100%;\n\n // Size-driven privates (defaults = `m`, matching eds-input() convention)\n --_eds-input-height: var(--eds-si-4xl); // 40px\n --_eds-input-pad-v: var(--eds-sp-xs);\n --_eds-input-pad-h: var(--eds-sp-s);\n --_eds-input-font: var(--eds-f-paragraph-m);\n\n @include base.eds-input-size();\n\n .eds-multiselect__trigger {\n @include base.eds-ellipsis();\n display: flex;\n align-items: center;\n gap: var(--eds-sp-xs);\n font: var(--_eds-input-font);\n appearance: none;\n background-color: var(--eds-c-surface-elevation);\n border: var(--eds-bw-xs) solid var(--eds-c-border-neutral); //EDS: color/border/neutral/default #48484F (not existing)\n border-radius: var(--eds-br-s);\n box-shadow: none;\n color: var(--eds-c-foreground);\n box-sizing: border-box;\n height: var(--_eds-input-height);\n padding: var(--_eds-input-pad-v) var(--_eds-input-pad-h);\n width: 100%;\n cursor: pointer;\n outline: none;\n transition: border-color 0.15s ease;\n\n // Hover — mirrors base.eds-input-hover(): elevation shadow + neutral hover border.\n &:hover:not([aria-disabled=\"true\"]) {\n box-shadow: var(--eds-sh-1);\n border-color: var(--eds-c-border);\n }\n\n // Focus ring — hand-written (no !important) since the trigger is a div, never readonly.\n &:focus {\n outline: var(--eds-bw-s) solid var(--eds-c-border-primary);\n outline-offset: 2px;\n }\n\n &:focus-visible {\n outline: 2px solid var(--eds-c-border-primary);\n outline-offset: 2px;\n transition: none;\n }\n }\n\n .eds-multiselect__display {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &--placeholder {\n color: var(--eds-c-foreground-placeholder);\n }\n }\n\n .eds-multiselect__caret {\n flex-shrink: 0;\n --_eds-icon-color-inherit: var(--eds-c-foreground);\n transition: transform 0.2s ease;\n }\n\n }\n\n // Open state — mirror the shared focus ring (base.eds-focus-visible-ring).\n :host([open]) {\n .eds-multiselect__trigger {\n border-color: var(--eds-c-border-primary);\n outline: var(--eds-bw-s) solid var(--eds-c-border-primary);\n outline-offset: 2px;\n }\n\n .eds-multiselect__caret {\n transform: rotate(180deg);\n }\n }\n\n // Disabled state\n :host([disabled]) {\n .eds-multiselect__trigger {\n background-color: var(--eds-c-surface-disabled-subtle);\n border-color: var(--eds-c-border-disabled);\n color: var(--eds-c-foreground-disabled);\n cursor: not-allowed;\n pointer-events: none;\n }\n\n .eds-multiselect__caret {\n --_eds-icon-color-inherit: var(--eds-c-foreground-disabled);\n }\n }\n\n // Invalid state\n :host([invalid]) {\n .eds-multiselect__trigger {\n border-color: var(--eds-c-border-critical);\n }\n\n // Hover while invalid — keep the critical (red) border, don't fall back to neutral.\n .eds-multiselect__trigger:hover:not([aria-disabled=\"true\"]) {\n border-color: var(--eds-c-border-critical);\n }\n\n .eds-multiselect__trigger:focus {\n outline: var(--eds-bw-s) solid var(--eds-c-border-critical);\n outline-offset: 2px;\n }\n\n .eds-multiselect__trigger:focus-visible {\n outline: 2px solid var(--eds-c-border-critical);\n outline-offset: 2px;\n transition: none;\n }\n \n // Open + invalid — mirror the critical focus ring.\n &[open] {\n .eds-multiselect__trigger {\n border-color: var(--eds-c-border-critical);\n outline: var(--eds-bw-s) solid var(--eds-c-border-critical);\n outline-offset: 2px;\n }\n }\n }\n}\n\n// Dropdown panel (content-projected into eds-floating-panel; global class so it applies to the\n// projected DOM regardless of the panel's own encapsulation boundary).\n.eds-multiselect__panel-wrapper {\n background-color: var(--eds-c-surface-elevation);\n border: var(--eds-bw-xs) solid var(--eds-c-border-divider); //EDS aligned\n border-radius: var(--eds-br-s);\n box-shadow: var(--eds-sh-1);\n display: flex;\n flex-direction: column;\n max-height: 280px;\n min-width: 100%;\n box-sizing: border-box;\n outline: none;\n}\n\n.eds-multiselect__panel {\n flex: 1;\n max-height: 240px;\n overflow-y: auto;\n padding: var(--eds-sp-xs); // EDS aligned\n outline: none;\n // overflow creates a stacking context; pin it below the footer so the footer's\n // upward shadow paints over the panel instead of being covered by it.\n position: relative;\n z-index: 0;\n\n .eds-multiselect-group {\n padding: var(--eds-sp-xs) var(--eds-sp-s);\n font: var(--eds-f-label-m);\n font-weight: var(--eds-f-w-medium);\n color: var(--eds-c-foreground-subtle);\n cursor: default;\n user-select: none;\n }\n\n .eds-multiselect-option {\n display: flex;\n align-items: center;\n gap: var(--eds-sp-s);\n padding: var(--eds-sp-xs) var(--eds-sp-s); // EDS aligned\n cursor: pointer;\n font: var(--eds-f-paragraph-m);\n color: var(--eds-c-foreground);\n user-select: none;\n transition: background-color 0.1s ease;\n\n .eds-multiselect-option__label {\n flex: 1;\n }\n\n .eds-multiselect-option__checkbox {\n flex-shrink: 0;\n pointer-events: none;\n }\n\n // Proxy the eds-input-checkbox hover/focus states from the option row,\n // since the checkbox itself has pointer-events: none.\n &:hover:not(.eds-multiselect-option--disabled) .eds-multiselect-option__checkbox {\n box-shadow: var(--eds-sh-1);\n border-color: var(--eds-c-border-neutral); //EDS aligned\n\n &:checked,\n &[checked=\"true\"] {\n background-color: var(--eds-c-surface-primary--hover);\n }\n }\n\n &--active:not(.eds-multiselect-option--disabled) .eds-multiselect-option__checkbox {\n outline: var(--eds-bw-s) solid var(--eds-c-border-primary);\n outline-offset: 2px;\n }\n\n &:hover:not(.eds-multiselect-option--disabled) {\n background-color: var(--eds-c-surface-accent); //EDS aligned\n }\n\n &--active:not(.eds-multiselect-option--disabled) {\n outline: var(--eds-bw-xs) solid var(--eds-c-border-primary);\n outline-offset: -1px;\n }\n\n &--selected {\n background-color: var(--eds-c-surface-selected);\n\n &:hover:not(.eds-multiselect-option--disabled) {\n background-color: var(--eds-c-surface-selected);\n }\n }\n\n &--disabled {\n color: var(--eds-c-foreground-subtler);\n cursor: not-allowed;\n pointer-events: none;\n }\n }\n}\n\n.eds-multiselect__panel-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--eds-sp-xs);\n padding: var(--eds-sp-xs) var(--eds-sp-s);\n background-color: var(--eds-c-surface-elevation-elevated);\n // Lift the footer above the scrollable panel so its upward shadow isn't painted\n // over by the opaque panel content above it.\n position: relative;\n z-index: 1;\n box-shadow: var(--eds-sh-4); //EDS aligned\n}\n",
69731
69731
  "styleUrl": "./eds-multiselect.scss"
69732
69732
  }
69733
69733
  ],
@@ -78045,7 +78045,7 @@
78045
78045
  "assetsDirs": [],
78046
78046
  "styleUrlsData": [
78047
78047
  {
78048
- "data": "@use '../base' as base;\n\n.eui-21 {\n :host {\n display: block;\n flex: 1;\n padding: var(--eds-sp-xl);\n }\n\n @include base.media(base.$eds-bkp-mobile) {\n :host {\n padding: var(--eds-sp-m);\n }\n }\n}\n",
78048
+ "data": "@use '../base' as base;\n\n.eui-21 {\n :host {\n display: block;\n flex: 1;\n }\n}\n",
78049
78049
  "styleUrl": "./eds-shell-content.scss"
78050
78050
  }
78051
78051
  ],
@@ -78854,7 +78854,7 @@
78854
78854
  "assetsDirs": [],
78855
78855
  "styleUrlsData": [
78856
78856
  {
78857
- "data": "@use '../base' as base;\n\n.eui-21 {\n :host {\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: var(--eds-sp-4xs);\n min-width: 0;\n\n .app-name {\n font: var(--eds-f-label-m);\n font-weight: var(--eds-f-w-semibold);\n color: inherit;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .app-subtitle {\n font: var(--eds-f-microcopy-m);\n opacity: 0.8;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n}\n",
78857
+ "data": "@use '../base' as base;\n\n.eui-21 {\n :host {\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: var(--eds-sp-4xs);\n min-width: 0;\n\n .app-name {\n font: var(--eds-f-heading-s);\n font-weight: var(--eds-f-w-semibold);\n color: inherit;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .app-subtitle {\n font: var(--eds-f-microcopy-m);\n opacity: 0.8;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n}\n",
78858
78858
  "styleUrl": "./eds-shell-toolbar-app.scss"
78859
78859
  }
78860
78860
  ],
package/docs/llms.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  # eui documentation
2
2
 
3
- > Generated by compodoc 2.0.0 at 2026-10-18T07:00:45.147Z, llm-md export.
3
+ > Generated by compodoc 2.0.0 at 2026-10-20T13:59:08.170Z, llm-md export.
4
4
 
5
5
  ## Components
6
6
 
@@ -128,7 +128,7 @@
128
128
  </ol>
129
129
  <ul class="properties-list">
130
130
  <li>
131
- <b>Version</b> : 22.0.0-alpha.48</li>
131
+ <b>Version</b> : 22.0.0-alpha.49</li>
132
132
  </ul>
133
133
 
134
134
 
@@ -530,7 +530,7 @@ class EdsMultiselect {
530
530
  useExisting: EdsMultiselect,
531
531
  multi: true,
532
532
  },
533
- ], queries: [{ propertyName: "options", predicate: EdsMultiselectOption, isSignal: true }], viewQueries: [{ propertyName: "floatingPanel", first: true, predicate: ["floatingPanel"], descendants: true, isSignal: true }, { propertyName: "triggerRef", first: true, predicate: ["triggerEl"], descendants: true, isSignal: true }, { propertyName: "panelWrapperRef", first: true, predicate: ["panelWrapperRef"], descendants: true, isSignal: true }, { propertyName: "listboxRef", first: true, predicate: ["listboxRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Combobox trigger -->\n<div\n #triggerEl\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.aria-invalid]=\"internalInvalid() || 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 size=\"s\"\n aria-hidden=\"true\"\n />\n</div>\n\n<!--\n Dropdown panel positioned by eds-floating-panel (position: fixed, no CDK overlay container /\n portal). The listbox is content-projected in place, so contentChildren + the key manager resolve\n without a portal boundary. matchTriggerWidth mirrors the trigger width; the backdrop + outside\n click / escape drive close.\n-->\n<eds-floating-panel\n #floatingPanel\n [trigger]=\"triggerEl\"\n position=\"auto\"\n preferredPosition=\"bottom\"\n matchTriggerWidth\n hasBackdrop\n [backdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n (outsideClick)=\"onPanelOutsideClick()\"\n (escapePress)=\"onPanelEscapePress()\"\n (closed)=\"onPanelClosed()\"\n>\n <div #panelWrapperRef class=\"eds-multiselect__panel-wrapper\" tabindex=\"-1\" cdkTrapFocus>\n <div\n #listboxRef\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 edsCheckbox\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=\"m\"\n (click)=\"onCancelClick()\"\n >\n {{ cancelLabel() }}\n </button>\n <button\n edsButton\n type=\"button\"\n variant=\"secondary\"\n size=\"m\"\n (click)=\"onConfirmClick()\"\n >\n {{ confirmLabel() }}\n </button>\n </div>\n </div>\n</eds-floating-panel>\n", styles: [".eui-21 :host{display:block;position:relative;width:100%;--_eds-input-height: var(--eds-si-4xl);--_eds-input-pad-v: var(--eds-sp-xs);--_eds-input-pad-h: var(--eds-sp-s);--_eds-input-font: var(--eds-f-paragraph-m)}.eui-21 :host[input-size=s]{--_eds-input-height: calc(var(--eds-si-3xl) + var(--eds-si-2xs));--_eds-input-pad-v: var(--eds-sp-2xs);--_eds-input-pad-h: var(--eds-sp-s)}.eui-21 :host[input-size=l]{--_eds-input-height: var(--eds-si-6xl);--_eds-input-pad-v: var(--eds-sp-s);--_eds-input-pad-h: var(--eds-sp-m)}.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-input-font);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);box-sizing:border-box;height:var(--_eds-input-height);padding:var(--_eds-input-pad-v) var(--_eds-input-pad-h);width:100%;cursor:pointer;outline:none;transition:border-color .15s ease}.eui-21 :host .eds-multiselect__trigger:hover:not([aria-disabled=true]){box-shadow:var(--eds-sh-1);border-color:var(--eds-c-border)}.eui-21 :host .eds-multiselect__trigger:focus{outline:var(--eds-bw-s) solid var(--eds-c-border-primary);outline-offset:2px}.eui-21 :host .eds-multiselect__trigger:focus-visible{outline:2px solid var(--eds-c-border-primary);outline-offset:2px;transition:none}.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-placeholder)}.eui-21 :host .eds-multiselect__caret{flex-shrink:0;--_eds-icon-color-inherit: var(--eds-c-foreground);transition:transform .2s ease}.eui-21 :host([open]) .eds-multiselect__trigger{border-color:var(--eds-c-border-primary);outline:var(--eds-bw-s) 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-subtle);border-color:var(--eds-c-border-disabled);color:var(--eds-c-foreground-disabled);cursor:not-allowed;pointer-events:none}.eui-21 :host([disabled]) .eds-multiselect__caret{--_eds-icon-color-inherit: var(--eds-c-foreground-disabled)}.eui-21 :host([invalid]) .eds-multiselect__trigger{border-color:var(--eds-c-border-critical)}.eui-21 :host([invalid]) .eds-multiselect__trigger:focus{outline:var(--eds-bw-s) solid var(--eds-c-border-critical);outline-offset:2px}.eui-21 :host([invalid]) .eds-multiselect__trigger:focus-visible{outline:2px solid var(--eds-c-border-critical);outline-offset:2px;transition:none}.eui-21 :host([invalid])[open] .eds-multiselect__trigger{border-color:var(--eds-c-border-critical);outline:var(--eds-bw-s) solid var(--eds-c-border-critical);outline-offset:2px}.eds-multiselect__panel-wrapper{background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-divider);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-xs);outline:none}.eds-multiselect__panel .eds-multiselect-group{padding:var(--eds-sp-xs) var(--eds-sp-s);font:var(--eds-f-label-m);font-weight:var(--eds-f-w-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);-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) .eds-multiselect-option__checkbox{box-shadow:var(--eds-sh-1);border-color:var(--eds-c-border-neutral)}.eds-multiselect__panel .eds-multiselect-option:hover:not(.eds-multiselect-option--disabled) .eds-multiselect-option__checkbox:checked,.eds-multiselect__panel .eds-multiselect-option:hover:not(.eds-multiselect-option--disabled) .eds-multiselect-option__checkbox[checked=true]{background-color:var(--eds-c-surface-primary--hover)}.eds-multiselect__panel .eds-multiselect-option--active:not(.eds-multiselect-option--disabled) .eds-multiselect-option__checkbox{outline:var(--eds-bw-s) solid var(--eds-c-border-primary);outline-offset:2px}.eds-multiselect__panel .eds-multiselect-option:hover:not(.eds-multiselect-option--disabled){background-color:var(--eds-c-surface-accent)}.eds-multiselect__panel .eds-multiselect-option--active:not(.eds-multiselect-option--disabled){outline:var(--eds-bw-xs) solid var(--eds-c-border-primary);outline-offset:-1px}.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);background-color:var(--eds-c-surface-elevation-elevated);box-shadow:0 -14px 42px 0 var(--eds-sh-4, rgba(0, 0, 0, .14))}\n"], dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: EdsFloatingPanel, selector: "eds-floating-panel", inputs: ["trigger", "position", "preferredPosition", "matchTriggerWidth", "alignment", "overflow", "offset", "hasBackdrop", "backdropClass", "closeOnBackdropClick", "panelClass", "e2eAttr"], outputs: ["opened", "closed", "positionChange", "escapePress", "outsideClick", "backdropClick"] }, { kind: "component", type: i1.EdsIcon, selector: "eds-icon, span[edsIcon]", inputs: ["icon", "set", "color", "size", "ariaLabel", "ariaHidden", "rounded", "isLoading"] }, { kind: "component", type: i3.EdsCheckbox, selector: "input[edsCheckbox]", inputs: ["e2eAttr", "size", "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 }); }
533
+ ], queries: [{ propertyName: "options", predicate: EdsMultiselectOption, isSignal: true }], viewQueries: [{ propertyName: "floatingPanel", first: true, predicate: ["floatingPanel"], descendants: true, isSignal: true }, { propertyName: "triggerRef", first: true, predicate: ["triggerEl"], descendants: true, isSignal: true }, { propertyName: "panelWrapperRef", first: true, predicate: ["panelWrapperRef"], descendants: true, isSignal: true }, { propertyName: "listboxRef", first: true, predicate: ["listboxRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Combobox trigger -->\n<div\n #triggerEl\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.aria-invalid]=\"internalInvalid() || 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 size=\"s\"\n aria-hidden=\"true\"\n />\n</div>\n\n<!--\n Dropdown panel positioned by eds-floating-panel (position: fixed, no CDK overlay container /\n portal). The listbox is content-projected in place, so contentChildren + the key manager resolve\n without a portal boundary. matchTriggerWidth mirrors the trigger width; the backdrop + outside\n click / escape drive close.\n-->\n<eds-floating-panel\n #floatingPanel\n [trigger]=\"triggerEl\"\n position=\"auto\"\n preferredPosition=\"bottom\"\n matchTriggerWidth\n hasBackdrop\n [backdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n (outsideClick)=\"onPanelOutsideClick()\"\n (escapePress)=\"onPanelEscapePress()\"\n (closed)=\"onPanelClosed()\"\n>\n <div #panelWrapperRef class=\"eds-multiselect__panel-wrapper\" tabindex=\"-1\" cdkTrapFocus>\n <div\n #listboxRef\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 edsCheckbox\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=\"m\"\n (click)=\"onCancelClick()\"\n >\n {{ cancelLabel() }}\n </button>\n <button\n edsButton\n type=\"button\"\n variant=\"secondary\"\n size=\"m\"\n (click)=\"onConfirmClick()\"\n >\n {{ confirmLabel() }}\n </button>\n </div>\n </div>\n</eds-floating-panel>\n", styles: [".eui-21 :host{display:block;position:relative;width:100%;--_eds-input-height: var(--eds-si-4xl);--_eds-input-pad-v: var(--eds-sp-xs);--_eds-input-pad-h: var(--eds-sp-s);--_eds-input-font: var(--eds-f-paragraph-m)}.eui-21 :host[input-size=s]{--_eds-input-height: calc(var(--eds-si-3xl) + var(--eds-si-2xs));--_eds-input-pad-v: var(--eds-sp-2xs);--_eds-input-pad-h: var(--eds-sp-s)}.eui-21 :host[input-size=l]{--_eds-input-height: var(--eds-si-6xl);--_eds-input-pad-v: var(--eds-sp-s);--_eds-input-pad-h: var(--eds-sp-m)}.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-input-font);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);box-sizing:border-box;height:var(--_eds-input-height);padding:var(--_eds-input-pad-v) var(--_eds-input-pad-h);width:100%;cursor:pointer;outline:none;transition:border-color .15s ease}.eui-21 :host .eds-multiselect__trigger:hover:not([aria-disabled=true]){box-shadow:var(--eds-sh-1);border-color:var(--eds-c-border)}.eui-21 :host .eds-multiselect__trigger:focus{outline:var(--eds-bw-s) solid var(--eds-c-border-primary);outline-offset:2px}.eui-21 :host .eds-multiselect__trigger:focus-visible{outline:2px solid var(--eds-c-border-primary);outline-offset:2px;transition:none}.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-placeholder)}.eui-21 :host .eds-multiselect__caret{flex-shrink:0;--_eds-icon-color-inherit: var(--eds-c-foreground);transition:transform .2s ease}.eui-21 :host([open]) .eds-multiselect__trigger{border-color:var(--eds-c-border-primary);outline:var(--eds-bw-s) 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-subtle);border-color:var(--eds-c-border-disabled);color:var(--eds-c-foreground-disabled);cursor:not-allowed;pointer-events:none}.eui-21 :host([disabled]) .eds-multiselect__caret{--_eds-icon-color-inherit: var(--eds-c-foreground-disabled)}.eui-21 :host([invalid]) .eds-multiselect__trigger{border-color:var(--eds-c-border-critical)}.eui-21 :host([invalid]) .eds-multiselect__trigger:hover:not([aria-disabled=true]){border-color:var(--eds-c-border-critical)}.eui-21 :host([invalid]) .eds-multiselect__trigger:focus{outline:var(--eds-bw-s) solid var(--eds-c-border-critical);outline-offset:2px}.eui-21 :host([invalid]) .eds-multiselect__trigger:focus-visible{outline:2px solid var(--eds-c-border-critical);outline-offset:2px;transition:none}.eui-21 :host([invalid])[open] .eds-multiselect__trigger{border-color:var(--eds-c-border-critical);outline:var(--eds-bw-s) solid var(--eds-c-border-critical);outline-offset:2px}.eds-multiselect__panel-wrapper{background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-divider);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-xs);outline:none;position:relative;z-index:0}.eds-multiselect__panel .eds-multiselect-group{padding:var(--eds-sp-xs) var(--eds-sp-s);font:var(--eds-f-label-m);font-weight:var(--eds-f-w-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);-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) .eds-multiselect-option__checkbox{box-shadow:var(--eds-sh-1);border-color:var(--eds-c-border-neutral)}.eds-multiselect__panel .eds-multiselect-option:hover:not(.eds-multiselect-option--disabled) .eds-multiselect-option__checkbox:checked,.eds-multiselect__panel .eds-multiselect-option:hover:not(.eds-multiselect-option--disabled) .eds-multiselect-option__checkbox[checked=true]{background-color:var(--eds-c-surface-primary--hover)}.eds-multiselect__panel .eds-multiselect-option--active:not(.eds-multiselect-option--disabled) .eds-multiselect-option__checkbox{outline:var(--eds-bw-s) solid var(--eds-c-border-primary);outline-offset:2px}.eds-multiselect__panel .eds-multiselect-option:hover:not(.eds-multiselect-option--disabled){background-color:var(--eds-c-surface-accent)}.eds-multiselect__panel .eds-multiselect-option--active:not(.eds-multiselect-option--disabled){outline:var(--eds-bw-xs) solid var(--eds-c-border-primary);outline-offset:-1px}.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);background-color:var(--eds-c-surface-elevation-elevated);position:relative;z-index:1;box-shadow:var(--eds-sh-4)}\n"], dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: EdsFloatingPanel, selector: "eds-floating-panel", inputs: ["trigger", "position", "preferredPosition", "matchTriggerWidth", "alignment", "overflow", "offset", "hasBackdrop", "backdropClass", "closeOnBackdropClick", "panelClass", "e2eAttr"], outputs: ["opened", "closed", "positionChange", "escapePress", "outsideClick", "backdropClick"] }, { kind: "component", type: i1.EdsIcon, selector: "eds-icon, span[edsIcon]", inputs: ["icon", "set", "color", "size", "ariaLabel", "ariaHidden", "rounded", "isLoading"] }, { kind: "component", type: i3.EdsCheckbox, selector: "input[edsCheckbox]", inputs: ["e2eAttr", "size", "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 }); }
534
534
  }
535
535
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsMultiselect, decorators: [{
536
536
  type: Component,
@@ -547,7 +547,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
547
547
  '[attr.invalid]': 'internalInvalid() || null',
548
548
  '[attr.open]': 'isOpen() || null',
549
549
  '[attr.data-e2e]': 'e2eAttr()',
550
- }, template: "<!-- Combobox trigger -->\n<div\n #triggerEl\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.aria-invalid]=\"internalInvalid() || 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 size=\"s\"\n aria-hidden=\"true\"\n />\n</div>\n\n<!--\n Dropdown panel positioned by eds-floating-panel (position: fixed, no CDK overlay container /\n portal). The listbox is content-projected in place, so contentChildren + the key manager resolve\n without a portal boundary. matchTriggerWidth mirrors the trigger width; the backdrop + outside\n click / escape drive close.\n-->\n<eds-floating-panel\n #floatingPanel\n [trigger]=\"triggerEl\"\n position=\"auto\"\n preferredPosition=\"bottom\"\n matchTriggerWidth\n hasBackdrop\n [backdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n (outsideClick)=\"onPanelOutsideClick()\"\n (escapePress)=\"onPanelEscapePress()\"\n (closed)=\"onPanelClosed()\"\n>\n <div #panelWrapperRef class=\"eds-multiselect__panel-wrapper\" tabindex=\"-1\" cdkTrapFocus>\n <div\n #listboxRef\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 edsCheckbox\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=\"m\"\n (click)=\"onCancelClick()\"\n >\n {{ cancelLabel() }}\n </button>\n <button\n edsButton\n type=\"button\"\n variant=\"secondary\"\n size=\"m\"\n (click)=\"onConfirmClick()\"\n >\n {{ confirmLabel() }}\n </button>\n </div>\n </div>\n</eds-floating-panel>\n", styles: [".eui-21 :host{display:block;position:relative;width:100%;--_eds-input-height: var(--eds-si-4xl);--_eds-input-pad-v: var(--eds-sp-xs);--_eds-input-pad-h: var(--eds-sp-s);--_eds-input-font: var(--eds-f-paragraph-m)}.eui-21 :host[input-size=s]{--_eds-input-height: calc(var(--eds-si-3xl) + var(--eds-si-2xs));--_eds-input-pad-v: var(--eds-sp-2xs);--_eds-input-pad-h: var(--eds-sp-s)}.eui-21 :host[input-size=l]{--_eds-input-height: var(--eds-si-6xl);--_eds-input-pad-v: var(--eds-sp-s);--_eds-input-pad-h: var(--eds-sp-m)}.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-input-font);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);box-sizing:border-box;height:var(--_eds-input-height);padding:var(--_eds-input-pad-v) var(--_eds-input-pad-h);width:100%;cursor:pointer;outline:none;transition:border-color .15s ease}.eui-21 :host .eds-multiselect__trigger:hover:not([aria-disabled=true]){box-shadow:var(--eds-sh-1);border-color:var(--eds-c-border)}.eui-21 :host .eds-multiselect__trigger:focus{outline:var(--eds-bw-s) solid var(--eds-c-border-primary);outline-offset:2px}.eui-21 :host .eds-multiselect__trigger:focus-visible{outline:2px solid var(--eds-c-border-primary);outline-offset:2px;transition:none}.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-placeholder)}.eui-21 :host .eds-multiselect__caret{flex-shrink:0;--_eds-icon-color-inherit: var(--eds-c-foreground);transition:transform .2s ease}.eui-21 :host([open]) .eds-multiselect__trigger{border-color:var(--eds-c-border-primary);outline:var(--eds-bw-s) 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-subtle);border-color:var(--eds-c-border-disabled);color:var(--eds-c-foreground-disabled);cursor:not-allowed;pointer-events:none}.eui-21 :host([disabled]) .eds-multiselect__caret{--_eds-icon-color-inherit: var(--eds-c-foreground-disabled)}.eui-21 :host([invalid]) .eds-multiselect__trigger{border-color:var(--eds-c-border-critical)}.eui-21 :host([invalid]) .eds-multiselect__trigger:focus{outline:var(--eds-bw-s) solid var(--eds-c-border-critical);outline-offset:2px}.eui-21 :host([invalid]) .eds-multiselect__trigger:focus-visible{outline:2px solid var(--eds-c-border-critical);outline-offset:2px;transition:none}.eui-21 :host([invalid])[open] .eds-multiselect__trigger{border-color:var(--eds-c-border-critical);outline:var(--eds-bw-s) solid var(--eds-c-border-critical);outline-offset:2px}.eds-multiselect__panel-wrapper{background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-divider);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-xs);outline:none}.eds-multiselect__panel .eds-multiselect-group{padding:var(--eds-sp-xs) var(--eds-sp-s);font:var(--eds-f-label-m);font-weight:var(--eds-f-w-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);-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) .eds-multiselect-option__checkbox{box-shadow:var(--eds-sh-1);border-color:var(--eds-c-border-neutral)}.eds-multiselect__panel .eds-multiselect-option:hover:not(.eds-multiselect-option--disabled) .eds-multiselect-option__checkbox:checked,.eds-multiselect__panel .eds-multiselect-option:hover:not(.eds-multiselect-option--disabled) .eds-multiselect-option__checkbox[checked=true]{background-color:var(--eds-c-surface-primary--hover)}.eds-multiselect__panel .eds-multiselect-option--active:not(.eds-multiselect-option--disabled) .eds-multiselect-option__checkbox{outline:var(--eds-bw-s) solid var(--eds-c-border-primary);outline-offset:2px}.eds-multiselect__panel .eds-multiselect-option:hover:not(.eds-multiselect-option--disabled){background-color:var(--eds-c-surface-accent)}.eds-multiselect__panel .eds-multiselect-option--active:not(.eds-multiselect-option--disabled){outline:var(--eds-bw-xs) solid var(--eds-c-border-primary);outline-offset:-1px}.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);background-color:var(--eds-c-surface-elevation-elevated);box-shadow:0 -14px 42px 0 var(--eds-sh-4, rgba(0, 0, 0, .14))}\n"] }]
550
+ }, template: "<!-- Combobox trigger -->\n<div\n #triggerEl\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.aria-invalid]=\"internalInvalid() || 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 size=\"s\"\n aria-hidden=\"true\"\n />\n</div>\n\n<!--\n Dropdown panel positioned by eds-floating-panel (position: fixed, no CDK overlay container /\n portal). The listbox is content-projected in place, so contentChildren + the key manager resolve\n without a portal boundary. matchTriggerWidth mirrors the trigger width; the backdrop + outside\n click / escape drive close.\n-->\n<eds-floating-panel\n #floatingPanel\n [trigger]=\"triggerEl\"\n position=\"auto\"\n preferredPosition=\"bottom\"\n matchTriggerWidth\n hasBackdrop\n [backdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n (outsideClick)=\"onPanelOutsideClick()\"\n (escapePress)=\"onPanelEscapePress()\"\n (closed)=\"onPanelClosed()\"\n>\n <div #panelWrapperRef class=\"eds-multiselect__panel-wrapper\" tabindex=\"-1\" cdkTrapFocus>\n <div\n #listboxRef\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 edsCheckbox\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=\"m\"\n (click)=\"onCancelClick()\"\n >\n {{ cancelLabel() }}\n </button>\n <button\n edsButton\n type=\"button\"\n variant=\"secondary\"\n size=\"m\"\n (click)=\"onConfirmClick()\"\n >\n {{ confirmLabel() }}\n </button>\n </div>\n </div>\n</eds-floating-panel>\n", styles: [".eui-21 :host{display:block;position:relative;width:100%;--_eds-input-height: var(--eds-si-4xl);--_eds-input-pad-v: var(--eds-sp-xs);--_eds-input-pad-h: var(--eds-sp-s);--_eds-input-font: var(--eds-f-paragraph-m)}.eui-21 :host[input-size=s]{--_eds-input-height: calc(var(--eds-si-3xl) + var(--eds-si-2xs));--_eds-input-pad-v: var(--eds-sp-2xs);--_eds-input-pad-h: var(--eds-sp-s)}.eui-21 :host[input-size=l]{--_eds-input-height: var(--eds-si-6xl);--_eds-input-pad-v: var(--eds-sp-s);--_eds-input-pad-h: var(--eds-sp-m)}.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-input-font);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);box-sizing:border-box;height:var(--_eds-input-height);padding:var(--_eds-input-pad-v) var(--_eds-input-pad-h);width:100%;cursor:pointer;outline:none;transition:border-color .15s ease}.eui-21 :host .eds-multiselect__trigger:hover:not([aria-disabled=true]){box-shadow:var(--eds-sh-1);border-color:var(--eds-c-border)}.eui-21 :host .eds-multiselect__trigger:focus{outline:var(--eds-bw-s) solid var(--eds-c-border-primary);outline-offset:2px}.eui-21 :host .eds-multiselect__trigger:focus-visible{outline:2px solid var(--eds-c-border-primary);outline-offset:2px;transition:none}.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-placeholder)}.eui-21 :host .eds-multiselect__caret{flex-shrink:0;--_eds-icon-color-inherit: var(--eds-c-foreground);transition:transform .2s ease}.eui-21 :host([open]) .eds-multiselect__trigger{border-color:var(--eds-c-border-primary);outline:var(--eds-bw-s) 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-subtle);border-color:var(--eds-c-border-disabled);color:var(--eds-c-foreground-disabled);cursor:not-allowed;pointer-events:none}.eui-21 :host([disabled]) .eds-multiselect__caret{--_eds-icon-color-inherit: var(--eds-c-foreground-disabled)}.eui-21 :host([invalid]) .eds-multiselect__trigger{border-color:var(--eds-c-border-critical)}.eui-21 :host([invalid]) .eds-multiselect__trigger:hover:not([aria-disabled=true]){border-color:var(--eds-c-border-critical)}.eui-21 :host([invalid]) .eds-multiselect__trigger:focus{outline:var(--eds-bw-s) solid var(--eds-c-border-critical);outline-offset:2px}.eui-21 :host([invalid]) .eds-multiselect__trigger:focus-visible{outline:2px solid var(--eds-c-border-critical);outline-offset:2px;transition:none}.eui-21 :host([invalid])[open] .eds-multiselect__trigger{border-color:var(--eds-c-border-critical);outline:var(--eds-bw-s) solid var(--eds-c-border-critical);outline-offset:2px}.eds-multiselect__panel-wrapper{background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-divider);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-xs);outline:none;position:relative;z-index:0}.eds-multiselect__panel .eds-multiselect-group{padding:var(--eds-sp-xs) var(--eds-sp-s);font:var(--eds-f-label-m);font-weight:var(--eds-f-w-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);-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) .eds-multiselect-option__checkbox{box-shadow:var(--eds-sh-1);border-color:var(--eds-c-border-neutral)}.eds-multiselect__panel .eds-multiselect-option:hover:not(.eds-multiselect-option--disabled) .eds-multiselect-option__checkbox:checked,.eds-multiselect__panel .eds-multiselect-option:hover:not(.eds-multiselect-option--disabled) .eds-multiselect-option__checkbox[checked=true]{background-color:var(--eds-c-surface-primary--hover)}.eds-multiselect__panel .eds-multiselect-option--active:not(.eds-multiselect-option--disabled) .eds-multiselect-option__checkbox{outline:var(--eds-bw-s) solid var(--eds-c-border-primary);outline-offset:2px}.eds-multiselect__panel .eds-multiselect-option:hover:not(.eds-multiselect-option--disabled){background-color:var(--eds-c-surface-accent)}.eds-multiselect__panel .eds-multiselect-option--active:not(.eds-multiselect-option--disabled){outline:var(--eds-bw-xs) solid var(--eds-c-border-primary);outline-offset:-1px}.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);background-color:var(--eds-c-surface-elevation-elevated);position:relative;z-index:1;box-shadow:var(--eds-sh-4)}\n"] }]
551
551
  }], ctorParameters: () => [], propDecorators: { e2eAttr: [{ type: i0.Input, args: [{ isSignal: true, alias: "e2eAttr", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", 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 }] }], floatingPanel: [{ type: i0.ViewChild, args: ['floatingPanel', { isSignal: true }] }], triggerRef: [{ type: i0.ViewChild, args: ['triggerEl', { isSignal: true }] }], panelWrapperRef: [{ type: i0.ViewChild, args: ['panelWrapperRef', { isSignal: true }] }], listboxRef: [{ type: i0.ViewChild, args: ['listboxRef', { isSignal: true }] }] } });
552
552
 
553
553
  /** Convenience array for importing all eds-multiselect components. */
@@ -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@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 inject,\n booleanAttribute,\n effect,\n OnDestroy,\n AfterContentInit,\n} from '@angular/core';\n/* eslint-disable @typescript-eslint/member-ordering */\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { EDS_ICON } from '@eui/eds/eds-icon';\nimport { EDS_CHECKBOX } from '@eui/eds/eds-checkbox';\nimport { EDS_BUTTON } from '@eui/eds/eds-button';\nimport { EdsFloatingPanel } from '@eui/eds/shared';\n\nimport { EdsMultiselectOption } from './eds-multiselect-option';\n\n/**\n * Local narrowed size union — the multiselect's size contract.\n * `'s'` → 36px, `'m'` (default) → 40px, `'l'` → 48px trigger height.\n */\nexport type EdsMultiselectSize = 's' | 'm' | 'l';\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 * The popup is positioned by the framework-agnostic `eds-floating-panel` primitive\n * (`@eui/eds/shared`), which renders the panel in the component's own DOM using `position: fixed`\n * (no CDK Overlay container / `TemplatePortal`). The listbox panel is content-projected directly\n * into the panel, so `contentChildren` and the key manager resolve without a portal boundary.\n */\n@Component({\n selector: 'eds-multiselect',\n templateUrl: './eds-multiselect.html',\n styleUrl: './eds-multiselect.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [A11yModule, EdsFloatingPanel, ...EDS_ICON, ...EDS_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.input-size]': 'size()',\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 * Visual size of the multiselect trigger. Reflected as the `input-size` host\n * attribute (not `size`, which is reserved for the native DOM attribute) so it\n * drives the shared `eds-input-size()` SCSS mixin: `'s'` → 32px, `'m'` (default)\n * → 40px, `'l'` → 48px trigger height.\n * @default 'm'\n */\n size = input<EdsMultiselectSize>('m');\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 /** The floating panel that positions and renders the dropdown. */\n readonly floatingPanel = viewChild<EdsFloatingPanel>('floatingPanel');\n\n /** Reference to the trigger element. */\n readonly triggerRef = viewChild<ElementRef<HTMLElement>>('triggerEl');\n\n /** Reference to the panel wrapper (inside the floating panel) for scroll-into-view. */\n readonly panelWrapperRef = viewChild<ElementRef<HTMLElement>>('panelWrapperRef');\n\n /**\n * Reference to the listbox element — the element that owns `role=\"listbox\"`,\n * `aria-activedescendant` and the `(keydown)` handler. Focus must land here (not on the\n * outer wrapper) so arrow keys drive the key manager immediately on open; focusing the\n * wrapper instead left keydowns on a parent that never received them, so navigation only\n * started working after a Tab moved focus onto the listbox.\n */\n readonly listboxRef = viewChild<ElementRef<HTMLElement>>('listboxRef');\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 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 }\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 /** Handler for the floating panel's `outsideClick` output. */\n protected onPanelOutsideClick(): void {\n if (this.isOpen()) {\n this.closeDropdown();\n }\n }\n\n /** Handler for the floating panel's `escapePress` output. */\n protected onPanelEscapePress(): void {\n if (this.isOpen()) {\n this.closeDropdown();\n }\n }\n\n /** Handler for the floating panel's `closed` output (e.g. trigger scrolled out of view). */\n protected onPanelClosed(): void {\n if (this.isOpen()) {\n this.closeDropdown();\n }\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()) {\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 this.isOpen.set(true);\n this.floatingPanel()?.open();\n\n // Setup key manager + initial focus after the panel has rendered its content.\n queueMicrotask(() => {\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 // Focus the listbox itself (owns the keydown handler + aria-activedescendant) so arrow\n // navigation is live immediately — not the outer wrapper, whose keydowns never reached\n // the listbox. The floating panel renders its content `visibility: hidden` until it has\n // calculated a position, and a hidden element cannot take focus, so focusing in the same\n // microtask is a silent no-op (focus stays on the trigger and arrows do nothing until a\n // Tab moves focus onto the listbox). Defer until the listbox is actually visible.\n this.focusListboxWhenVisible();\n });\n }\n\n /**\n * Focuses the listbox once the floating panel has revealed it. The panel reveals the content\n * only after positioning (dropping its `visibility: hidden`), so we retry on animation frames\n * until the element is focusable, with a small frame budget as a safety stop.\n */\n private focusListboxWhenVisible(attemptsLeft = 10): void {\n const el = this.listboxRef()?.nativeElement;\n if (!el || !this.isOpen()) {\n return;\n }\n // `offsetParent === null` (and a hidden visibility) means the element is not yet renderable\n // for focus; keep waiting for the panel to reveal it.\n const isVisible = el.offsetParent !== null && getComputedStyle(el).visibility !== 'hidden';\n if (isVisible) {\n el.focus();\n return;\n }\n if (attemptsLeft > 0) {\n requestAnimationFrame(() => this.focusListboxWhenVisible(attemptsLeft - 1));\n }\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.floatingPanel()?.close();\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 const wrapper = this.panelWrapperRef()?.nativeElement;\n if (!activeId || !wrapper) {\n return;\n }\n const activeEl = wrapper.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 #triggerEl\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.aria-invalid]=\"internalInvalid() || 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 size=\"s\"\n aria-hidden=\"true\"\n />\n</div>\n\n<!--\n Dropdown panel positioned by eds-floating-panel (position: fixed, no CDK overlay container /\n portal). The listbox is content-projected in place, so contentChildren + the key manager resolve\n without a portal boundary. matchTriggerWidth mirrors the trigger width; the backdrop + outside\n click / escape drive close.\n-->\n<eds-floating-panel\n #floatingPanel\n [trigger]=\"triggerEl\"\n position=\"auto\"\n preferredPosition=\"bottom\"\n matchTriggerWidth\n hasBackdrop\n [backdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n (outsideClick)=\"onPanelOutsideClick()\"\n (escapePress)=\"onPanelEscapePress()\"\n (closed)=\"onPanelClosed()\"\n>\n <div #panelWrapperRef class=\"eds-multiselect__panel-wrapper\" tabindex=\"-1\" cdkTrapFocus>\n <div\n #listboxRef\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 edsCheckbox\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=\"m\"\n (click)=\"onCancelClick()\"\n >\n {{ cancelLabel() }}\n </button>\n <button\n edsButton\n type=\"button\"\n variant=\"secondary\"\n size=\"m\"\n (click)=\"onConfirmClick()\"\n >\n {{ confirmLabel() }}\n </button>\n </div>\n </div>\n</eds-floating-panel>\n","import { EdsMultiselect } from './eds-multiselect';\nimport { EdsMultiselectOption } from './eds-multiselect-option';\n\nexport type { EdsMultiselectSize } from './eds-multiselect';\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":["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@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 inject,\n booleanAttribute,\n effect,\n OnDestroy,\n AfterContentInit,\n} from '@angular/core';\n/* eslint-disable @typescript-eslint/member-ordering */\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { EDS_ICON } from '@eui/eds/eds-icon';\nimport { EDS_CHECKBOX } from '@eui/eds/eds-checkbox';\nimport { EDS_BUTTON } from '@eui/eds/eds-button';\nimport { EdsFloatingPanel } from '@eui/eds/shared';\n\nimport { EdsMultiselectOption } from './eds-multiselect-option';\n\n/**\n * Local narrowed size union — the multiselect's size contract.\n * `'s'` → 36px, `'m'` (default) → 40px, `'l'` → 48px trigger height.\n */\nexport type EdsMultiselectSize = 's' | 'm' | 'l';\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 * The popup is positioned by the framework-agnostic `eds-floating-panel` primitive\n * (`@eui/eds/shared`), which renders the panel in the component's own DOM using `position: fixed`\n * (no CDK Overlay container / `TemplatePortal`). The listbox panel is content-projected directly\n * into the panel, so `contentChildren` and the key manager resolve without a portal boundary.\n */\n@Component({\n selector: 'eds-multiselect',\n templateUrl: './eds-multiselect.html',\n styleUrl: './eds-multiselect.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [A11yModule, EdsFloatingPanel, ...EDS_ICON, ...EDS_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.input-size]': 'size()',\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 * Visual size of the multiselect trigger. Reflected as the `input-size` host\n * attribute (not `size`, which is reserved for the native DOM attribute) so it\n * drives the shared `eds-input-size()` SCSS mixin: `'s'` → 32px, `'m'` (default)\n * → 40px, `'l'` → 48px trigger height.\n * @default 'm'\n */\n size = input<EdsMultiselectSize>('m');\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 /** The floating panel that positions and renders the dropdown. */\n readonly floatingPanel = viewChild<EdsFloatingPanel>('floatingPanel');\n\n /** Reference to the trigger element. */\n readonly triggerRef = viewChild<ElementRef<HTMLElement>>('triggerEl');\n\n /** Reference to the panel wrapper (inside the floating panel) for scroll-into-view. */\n readonly panelWrapperRef = viewChild<ElementRef<HTMLElement>>('panelWrapperRef');\n\n /**\n * Reference to the listbox element — the element that owns `role=\"listbox\"`,\n * `aria-activedescendant` and the `(keydown)` handler. Focus must land here (not on the\n * outer wrapper) so arrow keys drive the key manager immediately on open; focusing the\n * wrapper instead left keydowns on a parent that never received them, so navigation only\n * started working after a Tab moved focus onto the listbox.\n */\n readonly listboxRef = viewChild<ElementRef<HTMLElement>>('listboxRef');\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 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 }\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 /** Handler for the floating panel's `outsideClick` output. */\n protected onPanelOutsideClick(): void {\n if (this.isOpen()) {\n this.closeDropdown();\n }\n }\n\n /** Handler for the floating panel's `escapePress` output. */\n protected onPanelEscapePress(): void {\n if (this.isOpen()) {\n this.closeDropdown();\n }\n }\n\n /** Handler for the floating panel's `closed` output (e.g. trigger scrolled out of view). */\n protected onPanelClosed(): void {\n if (this.isOpen()) {\n this.closeDropdown();\n }\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()) {\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 this.isOpen.set(true);\n this.floatingPanel()?.open();\n\n // Setup key manager + initial focus after the panel has rendered its content.\n queueMicrotask(() => {\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 // Focus the listbox itself (owns the keydown handler + aria-activedescendant) so arrow\n // navigation is live immediately — not the outer wrapper, whose keydowns never reached\n // the listbox. The floating panel renders its content `visibility: hidden` until it has\n // calculated a position, and a hidden element cannot take focus, so focusing in the same\n // microtask is a silent no-op (focus stays on the trigger and arrows do nothing until a\n // Tab moves focus onto the listbox). Defer until the listbox is actually visible.\n this.focusListboxWhenVisible();\n });\n }\n\n /**\n * Focuses the listbox once the floating panel has revealed it. The panel reveals the content\n * only after positioning (dropping its `visibility: hidden`), so we retry on animation frames\n * until the element is focusable, with a small frame budget as a safety stop.\n */\n private focusListboxWhenVisible(attemptsLeft = 10): void {\n const el = this.listboxRef()?.nativeElement;\n if (!el || !this.isOpen()) {\n return;\n }\n // `offsetParent === null` (and a hidden visibility) means the element is not yet renderable\n // for focus; keep waiting for the panel to reveal it.\n const isVisible = el.offsetParent !== null && getComputedStyle(el).visibility !== 'hidden';\n if (isVisible) {\n el.focus();\n return;\n }\n if (attemptsLeft > 0) {\n requestAnimationFrame(() => this.focusListboxWhenVisible(attemptsLeft - 1));\n }\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.floatingPanel()?.close();\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 const wrapper = this.panelWrapperRef()?.nativeElement;\n if (!activeId || !wrapper) {\n return;\n }\n const activeEl = wrapper.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 #triggerEl\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.aria-invalid]=\"internalInvalid() || 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 size=\"s\"\n aria-hidden=\"true\"\n />\n</div>\n\n<!--\n Dropdown panel positioned by eds-floating-panel (position: fixed, no CDK overlay container /\n portal). The listbox is content-projected in place, so contentChildren + the key manager resolve\n without a portal boundary. matchTriggerWidth mirrors the trigger width; the backdrop + outside\n click / escape drive close.\n-->\n<eds-floating-panel\n #floatingPanel\n [trigger]=\"triggerEl\"\n position=\"auto\"\n preferredPosition=\"bottom\"\n matchTriggerWidth\n hasBackdrop\n [backdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n (outsideClick)=\"onPanelOutsideClick()\"\n (escapePress)=\"onPanelEscapePress()\"\n (closed)=\"onPanelClosed()\"\n>\n <div #panelWrapperRef class=\"eds-multiselect__panel-wrapper\" tabindex=\"-1\" cdkTrapFocus>\n <div\n #listboxRef\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 edsCheckbox\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=\"m\"\n (click)=\"onCancelClick()\"\n >\n {{ cancelLabel() }}\n </button>\n <button\n edsButton\n type=\"button\"\n variant=\"secondary\"\n size=\"m\"\n (click)=\"onConfirmClick()\"\n >\n {{ confirmLabel() }}\n </button>\n </div>\n </div>\n</eds-floating-panel>\n","import { EdsMultiselect } from './eds-multiselect';\nimport { EdsMultiselectOption } from './eds-multiselect-option';\n\nexport type { EdsMultiselectSize } from './eds-multiselect';\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":["i2"],"mappings":"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"}
@@ -289,20 +289,20 @@ class EdsShellToolbarApp {
289
289
  ...(ngDevMode ? [{ debugName: "appSubTitle" }] : /* istanbul ignore next */ []));
290
290
  }
291
291
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsShellToolbarApp, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
292
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EdsShellToolbarApp, isStandalone: true, selector: "eds-shell-toolbar-app", inputs: { appName: { classPropertyName: "appName", publicName: "appName", isSignal: true, isRequired: false, transformFunction: null }, appShortName: { classPropertyName: "appShortName", publicName: "appShortName", isSignal: true, isRequired: false, transformFunction: null }, appSubTitle: { classPropertyName: "appSubTitle", publicName: "appSubTitle", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (appName()) {\n <span class=\"app-name\">{{ appName() }}</span>\n}\n@if (appSubTitle()) {\n <span class=\"app-subtitle\">{{ appSubTitle() }}</span>\n}\n<ng-content></ng-content>\n", styles: [".eui-21 :host{display:flex;flex-direction:column;justify-content:center;gap:var(--eds-sp-4xs);min-width:0}.eui-21 :host .app-name{font:var(--eds-f-label-m);font-weight:var(--eds-f-w-semibold);color:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.eui-21 :host .app-subtitle{font:var(--eds-f-microcopy-m);opacity:.8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }); }
292
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EdsShellToolbarApp, isStandalone: true, selector: "eds-shell-toolbar-app", inputs: { appName: { classPropertyName: "appName", publicName: "appName", isSignal: true, isRequired: false, transformFunction: null }, appShortName: { classPropertyName: "appShortName", publicName: "appShortName", isSignal: true, isRequired: false, transformFunction: null }, appSubTitle: { classPropertyName: "appSubTitle", publicName: "appSubTitle", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (appName()) {\n <span class=\"app-name\">{{ appName() }}</span>\n}\n@if (appSubTitle()) {\n <span class=\"app-subtitle\">{{ appSubTitle() }}</span>\n}\n<ng-content></ng-content>\n", styles: [".eui-21 :host{display:flex;flex-direction:column;justify-content:center;gap:var(--eds-sp-4xs);min-width:0}.eui-21 :host .app-name{font:var(--eds-f-heading-s);font-weight:var(--eds-f-w-semibold);color:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.eui-21 :host .app-subtitle{font:var(--eds-f-microcopy-m);opacity:.8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }); }
293
293
  }
294
294
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsShellToolbarApp, decorators: [{
295
295
  type: Component,
296
- args: [{ selector: 'eds-shell-toolbar-app', template: "@if (appName()) {\n <span class=\"app-name\">{{ appName() }}</span>\n}\n@if (appSubTitle()) {\n <span class=\"app-subtitle\">{{ appSubTitle() }}</span>\n}\n<ng-content></ng-content>\n", styles: [".eui-21 :host{display:flex;flex-direction:column;justify-content:center;gap:var(--eds-sp-4xs);min-width:0}.eui-21 :host .app-name{font:var(--eds-f-label-m);font-weight:var(--eds-f-w-semibold);color:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.eui-21 :host .app-subtitle{font:var(--eds-f-microcopy-m);opacity:.8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
296
+ args: [{ selector: 'eds-shell-toolbar-app', template: "@if (appName()) {\n <span class=\"app-name\">{{ appName() }}</span>\n}\n@if (appSubTitle()) {\n <span class=\"app-subtitle\">{{ appSubTitle() }}</span>\n}\n<ng-content></ng-content>\n", styles: [".eui-21 :host{display:flex;flex-direction:column;justify-content:center;gap:var(--eds-sp-4xs);min-width:0}.eui-21 :host .app-name{font:var(--eds-f-heading-s);font-weight:var(--eds-f-w-semibold);color:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.eui-21 :host .app-subtitle{font:var(--eds-f-microcopy-m);opacity:.8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
297
297
  }], propDecorators: { appName: [{ type: i0.Input, args: [{ isSignal: true, alias: "appName", required: false }] }], appShortName: [{ type: i0.Input, args: [{ isSignal: true, alias: "appShortName", required: false }] }], appSubTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "appSubTitle", required: false }] }] } });
298
298
 
299
299
  class EdsShellContent {
300
300
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsShellContent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
301
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.2", type: EdsShellContent, isStandalone: true, selector: "eds-shell-content", ngImport: i0, template: '<ng-content/>', isInline: true, styles: [".eui-21 :host{display:block;flex:1;padding:var(--eds-sp-xl)}@media screen and (max-width:767px){.eui-21 :host{padding:var(--eds-sp-m)}}\n"] }); }
301
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.2", type: EdsShellContent, isStandalone: true, selector: "eds-shell-content", ngImport: i0, template: '<ng-content/>', isInline: true, styles: [".eui-21 :host{display:block;flex:1}\n"] }); }
302
302
  }
303
303
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsShellContent, decorators: [{
304
304
  type: Component,
305
- args: [{ selector: 'eds-shell-content', template: '<ng-content/>', styles: [".eui-21 :host{display:block;flex:1;padding:var(--eds-sp-xl)}@media screen and (max-width:767px){.eui-21 :host{padding:var(--eds-sp-m)}}\n"] }]
305
+ args: [{ selector: 'eds-shell-content', template: '<ng-content/>', styles: [".eui-21 :host{display:block;flex:1}\n"] }]
306
306
  }] });
307
307
 
308
308
  class EdsShellFooter {