@scion/components 22.4.0 → 22.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/_index.scss +32 -88
  2. package/fesm2022/scion-components-common.mjs +179 -5
  3. package/fesm2022/scion-components-common.mjs.map +1 -1
  4. package/fesm2022/scion-components-dimension.mjs +3 -3
  5. package/fesm2022/scion-components-dimension.mjs.map +1 -1
  6. package/fesm2022/scion-components-icon.mjs +134 -98
  7. package/fesm2022/scion-components-icon.mjs.map +1 -1
  8. package/fesm2022/scion-components-menu.mjs +61 -60
  9. package/fesm2022/scion-components-menu.mjs.map +1 -1
  10. package/fesm2022/scion-components-sashbox.mjs +1 -1
  11. package/fesm2022/scion-components-sashbox.mjs.map +1 -1
  12. package/fesm2022/scion-components-splitter.mjs +2 -2
  13. package/fesm2022/scion-components-splitter.mjs.map +1 -1
  14. package/fesm2022/scion-components-table.mjs +584 -182
  15. package/fesm2022/scion-components-table.mjs.map +1 -1
  16. package/fesm2022/scion-components-text.mjs +83 -40
  17. package/fesm2022/scion-components-text.mjs.map +1 -1
  18. package/fesm2022/scion-components-throbber.mjs +1 -1
  19. package/fesm2022/scion-components-throbber.mjs.map +1 -1
  20. package/fesm2022/scion-components-viewport.mjs +31 -18
  21. package/fesm2022/scion-components-viewport.mjs.map +1 -1
  22. package/package.json +2 -2
  23. package/types/scion-components-common.d.ts +125 -4
  24. package/types/scion-components-icon.d.ts +42 -15
  25. package/types/scion-components-menu.d.ts +7 -2
  26. package/types/scion-components-sashbox.d.ts +1 -1
  27. package/types/scion-components-splitter.d.ts +1 -1
  28. package/types/scion-components-table.d.ts +772 -69
  29. package/types/scion-components-text.d.ts +6 -5
  30. package/types/scion-components-throbber.d.ts +1 -1
  31. package/types/scion-components-viewport.d.ts +20 -11
  32. package/viewport/scrollbar/_scrollbar.scss +12 -0
  33. package/design/icons/_scion-icon-font.scss +0 -50
@@ -1,19 +1,19 @@
1
1
  import * as i0 from '@angular/core';
2
- import { untracked, inject, Injector, InjectionToken, computed, runInInjectionContext, effect, assertNotInReactiveContext, NgZone, DOCUMENT, DestroyRef, isSignal, Injectable, Pipe, input, createComponent, inputBinding, ElementRef, EnvironmentInjector, ApplicationRef, Component, model, viewChild, signal, viewChildren, linkedSignal, ViewContainerRef, afterRenderEffect, Directive } from '@angular/core';
2
+ import { untracked, inject, Injector, InjectionToken, computed, runInInjectionContext, effect, assertNotInReactiveContext, NgZone, DOCUMENT, DestroyRef, isSignal, Injectable, Pipe, input, createComponent, inputBinding, ElementRef, EnvironmentInjector, ApplicationRef, Component, model, viewChild, signal, viewChildren, linkedSignal, ViewContainerRef, onIdle, afterRenderEffect, Directive } from '@angular/core';
3
3
  import * as i1$1 from '@scion/components/common';
4
- import { coerceSignal, createDestroyableInjector, SciComponentOutletDirective, SciAttributesDirective, assertInInjectionContext } from '@scion/components/common';
4
+ import { coerceSignal, ɵcreateDestroyableInjector as _createDestroyableInjector, SciComponentOutletDirective, SciAttributesDirective, ɵassertInInjectionContext as _assertInInjectionContext } from '@scion/components/common';
5
5
  import { Objects, Arrays, prune, Maps } from '@scion/toolkit/util';
6
6
  import { text, SciTextPipe } from '@scion/components/text';
7
- import { noop, merge, fromEvent, animationFrameScheduler, EMPTY } from 'rxjs';
7
+ import { noop, merge, fromEvent, animationFrameScheduler, EMPTY, concat, of, timer } from 'rxjs';
8
8
  import { subscribeIn, observeIn } from '@scion/toolkit/operators';
9
9
  import { coerceElement } from '@angular/cdk/coercion';
10
- import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
10
+ import { takeUntilDestroyed, toObservable, rxResource } from '@angular/core/rxjs-interop';
11
11
  import * as i1 from '@angular/forms';
12
12
  import { FormsModule } from '@angular/forms';
13
13
  import { SciIconComponent } from '@scion/components/icon';
14
14
  import { NgTemplateOutlet } from '@angular/common';
15
- import { SciViewportComponent } from '@scion/components/viewport';
16
- import { filter, observeOn, raceWith, take, switchMap } from 'rxjs/operators';
15
+ import { SciScrollbarComponent } from '@scion/components/viewport';
16
+ import { filter, observeOn, raceWith, take, switchMap, map, startWith } from 'rxjs/operators';
17
17
  import { dimension } from '@scion/components/dimension';
18
18
  import { UUID } from '@scion/toolkit/uuid';
19
19
 
@@ -120,7 +120,6 @@ const SCI_MENU_ACCELERATOR_TARGET_PROVIDER = new InjectionToken('SCI_MENU_ACCELE
120
120
  /**
121
121
  * DI token to inject {@link SciMenuAcceleratorTargetProviderFn} functions provided in the current and parent injectors.
122
122
  *
123
- *
124
123
  * @see injectMenuAcceleratorTargets
125
124
  */
126
125
  const SCI_MENU_ACCELERATOR_TARGET_PROVIDERS = new InjectionToken('SCI_MENU_ACCELERATOR_TARGET_PROVIDERS');
@@ -151,7 +150,7 @@ const SCI_MENU_ACCELERATOR_TARGET_PROVIDERS = new InjectionToken('SCI_MENU_ACCEL
151
150
  * @experimental since 22.3.0; API and behavior may change in any version without notice.
152
151
  */
153
152
  function installMenuAccelerators(location, options) {
154
- const injector = createDestroyableInjector({ parent: options?.injector ?? inject(Injector) });
153
+ const injector = _createDestroyableInjector({ parent: options?.injector ?? inject(Injector) });
155
154
  return runInInjectionContext(injector, () => {
156
155
  const environmentContext = injectMenuContext();
157
156
  const environmentTargets = injectMenuAcceleratorTargets();
@@ -186,7 +185,7 @@ function ɵinstallMenuAccelerators(menuItems, options) {
186
185
  if (!menuItemsWithAccelerator.length) {
187
186
  return { dispose: noop };
188
187
  }
189
- const injector = createDestroyableInjector({ parent: options?.injector ?? inject(Injector) });
188
+ const injector = _createDestroyableInjector({ parent: options?.injector ?? inject(Injector) });
190
189
  const zone = injector.get(NgZone);
191
190
  const targets = coerceElements(options?.targets) ?? coerceElements(options?.environmentTargets) ?? [injector.get(DOCUMENT)];
192
191
  const onSelectFn = options?.onSelect ?? (menuItem => menuItem.onSelect?.());
@@ -500,9 +499,6 @@ class ɵSciMenuFactory {
500
499
  attributes: descriptor.attributes,
501
500
  onSelect: async () => await descriptor.onSelect() ?? descriptor.checked === undefined, // Returning `true` will close the popover. Non-checkable items close by default.
502
501
  }));
503
- if (descriptor.checked && descriptor.icon) {
504
- throw Error('[MenuDefinitionError] Cannot use `checked` and `icon` together.');
505
- }
506
502
  return this;
507
503
  }
508
504
  /** @inheritDoc */
@@ -862,7 +858,7 @@ class SciMenuFilterComponent {
862
858
  this.focus();
863
859
  }
864
860
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SciMenuFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
865
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.7", type: SciMenuFilterComponent, isStandalone: true, selector: "sci-menu-filter", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: true, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { text: "textChange" }, host: { listeners: { "focus": "focus()" }, properties: { "attr.tabindex": "-1" } }, viewQueries: [{ propertyName: "_inputField", first: true, predicate: ["input"], descendants: true, isSignal: true }], ngImport: i0, template: "<input type=\"text\" autocomplete=\"off\" class=\"e2e-menu-filter-input\" [attr.placeholder]=\"placeholder()\" [(ngModel)]=\"text\" #input>\r\n<button class=\"clear\" (click)=\"onClear()\" [title]=\"('%scion.components.clear.tooltip' | sciText)()\" tabindex=\"-1\">\r\n <sci-icon>scion.clear</sci-icon>\r\n</button>\r\n", styles: [":host{display:flex}:host>input{all:unset;flex:1 1 0;appearance:auto;width:0;min-width:0}:host>input::placeholder{color:var(--sci-color-gray-400)}:host>input:placeholder-shown+button:is(.clear,#sci-reset){visibility:hidden}:host>button:is(.clear,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;padding:.25em;border-radius:var(--sci-button-border-radius);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-button-cursor);--sci-icon-size: var(--sci-button-icon-size)}:host>button:is(.clear,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-button-background-color-hover)}:host>button:is(.clear,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-button-background-color-active)}:host>button:is(.clear,#sci-reset):focus:not(:focus-visible){outline:none}:host>button:is(.clear,#sci-reset):focus-visible{outline:var(--sci-button-outline-width) solid var(--sci-color-accent)}:host>button:is(.clear,#sci-reset):disabled{color:var(--sci-button-text-color-disabled)}:host>button:is(.clear,#sci-reset){padding:1px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SciIconComponent, selector: "sci-icon" }, { kind: "pipe", type: SciTextPipe, name: "sciText" }] });
861
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.7", type: SciMenuFilterComponent, isStandalone: true, selector: "sci-menu-filter", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: true, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { text: "textChange" }, host: { listeners: { "focus": "focus()" }, properties: { "attr.tabindex": "-1" } }, viewQueries: [{ propertyName: "_inputField", first: true, predicate: ["input"], descendants: true, isSignal: true }], ngImport: i0, template: "<input type=\"text\" autocomplete=\"off\" class=\"e2e-menu-filter-input\" [attr.placeholder]=\"placeholder()\" [(ngModel)]=\"text\" #input>\r\n<button class=\"clear\" (click)=\"onClear()\" [title]=\"('%scion:components:clear.tooltip' | sciText)()\" tabindex=\"-1\">\r\n <sci-icon>scion:clear</sci-icon>\r\n</button>\r\n", styles: [":host{display:flex}:host>input{all:unset;flex:1 1 0;appearance:auto;width:0;min-width:0}:host>input::placeholder{color:var(--sci-color-gray-400)}:host>input:placeholder-shown+button:is(.clear,#sci-reset){visibility:hidden}:host>button:is(.clear,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;padding:.25em;border-radius:var(--sci-button-border-radius);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-button-cursor);--sci-icon-size: var(--sci-button-icon-size)}:host>button:is(.clear,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-button-background-color-hover)}:host>button:is(.clear,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-button-background-color-active)}:host>button:is(.clear,#sci-reset):focus:not(:focus-visible){outline:none}:host>button:is(.clear,#sci-reset):focus-visible{outline:var(--sci-button-outline-width) solid var(--sci-color-accent)}:host>button:is(.clear,#sci-reset):disabled{color:var(--sci-button-text-color-disabled)}:host>button:is(.clear,#sci-reset){padding:1px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SciIconComponent, selector: "sci-icon" }, { kind: "pipe", type: SciTextPipe, name: "sciText" }] });
866
862
  }
867
863
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SciMenuFilterComponent, decorators: [{
868
864
  type: Component,
@@ -873,7 +869,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
873
869
  ], host: {
874
870
  '[attr.tabindex]': '-1', // enable delegation of programmatic focus requests
875
871
  '(focus)': 'focus()',
876
- }, template: "<input type=\"text\" autocomplete=\"off\" class=\"e2e-menu-filter-input\" [attr.placeholder]=\"placeholder()\" [(ngModel)]=\"text\" #input>\r\n<button class=\"clear\" (click)=\"onClear()\" [title]=\"('%scion.components.clear.tooltip' | sciText)()\" tabindex=\"-1\">\r\n <sci-icon>scion.clear</sci-icon>\r\n</button>\r\n", styles: [":host{display:flex}:host>input{all:unset;flex:1 1 0;appearance:auto;width:0;min-width:0}:host>input::placeholder{color:var(--sci-color-gray-400)}:host>input:placeholder-shown+button:is(.clear,#sci-reset){visibility:hidden}:host>button:is(.clear,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;padding:.25em;border-radius:var(--sci-button-border-radius);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-button-cursor);--sci-icon-size: var(--sci-button-icon-size)}:host>button:is(.clear,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-button-background-color-hover)}:host>button:is(.clear,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-button-background-color-active)}:host>button:is(.clear,#sci-reset):focus:not(:focus-visible){outline:none}:host>button:is(.clear,#sci-reset):focus-visible{outline:var(--sci-button-outline-width) solid var(--sci-color-accent)}:host>button:is(.clear,#sci-reset):disabled{color:var(--sci-button-text-color-disabled)}:host>button:is(.clear,#sci-reset){padding:1px}\n"] }]
872
+ }, template: "<input type=\"text\" autocomplete=\"off\" class=\"e2e-menu-filter-input\" [attr.placeholder]=\"placeholder()\" [(ngModel)]=\"text\" #input>\r\n<button class=\"clear\" (click)=\"onClear()\" [title]=\"('%scion:components:clear.tooltip' | sciText)()\" tabindex=\"-1\">\r\n <sci-icon>scion:clear</sci-icon>\r\n</button>\r\n", styles: [":host{display:flex}:host>input{all:unset;flex:1 1 0;appearance:auto;width:0;min-width:0}:host>input::placeholder{color:var(--sci-color-gray-400)}:host>input:placeholder-shown+button:is(.clear,#sci-reset){visibility:hidden}:host>button:is(.clear,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;padding:.25em;border-radius:var(--sci-button-border-radius);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-button-cursor);--sci-icon-size: var(--sci-button-icon-size)}:host>button:is(.clear,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-button-background-color-hover)}:host>button:is(.clear,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-button-background-color-active)}:host>button:is(.clear,#sci-reset):focus:not(:focus-visible){outline:none}:host>button:is(.clear,#sci-reset):focus-visible{outline:var(--sci-button-outline-width) solid var(--sci-color-accent)}:host>button:is(.clear,#sci-reset):disabled{color:var(--sci-button-text-color-disabled)}:host>button:is(.clear,#sci-reset){padding:1px}\n"] }]
877
873
  }], propDecorators: { placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: true }] }], text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }, { type: i0.Output, args: ["textChange"] }], _inputField: [{ type: i0.ViewChild, args: ['input', { isSignal: true }] }] } });
878
874
 
879
875
  /*
@@ -1262,7 +1258,7 @@ class SciToolbarGroupComponent {
1262
1258
  return menuOpen;
1263
1259
  }
1264
1260
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SciToolbarGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1265
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SciToolbarGroupComponent, isStandalone: true, selector: "sci-toolbar-group", inputs: { menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: true, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, popoverViewContainerRef: { classPropertyName: "popoverViewContainerRef", publicName: "popoverViewContainerRef", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "attr.data-orientation": "orientation()" } }, viewQueries: [{ propertyName: "_childToolbarGroups", predicate: SciToolbarGroupComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@for (menuItem of menuItems(); track $index) {\r\n @let disabled = this.disabled() || menuItem.disabled?.() || false;\r\n @switch (menuItem.type) {\r\n <!-- Toolbar Item -->\r\n @case ('menu-item') {\r\n @let isSplitButton = (menuItem.onSelect || menuItem.control) && menuItem.menu?.children?.length;\r\n\r\n @if (isSplitButton) {\r\n <sci-toolbar-split-button [class]=\"menuItem.cssClass\" #split_button_element>\r\n <ng-container *ngTemplateOutlet=\"menu_item_template; context: {anchor: split_button_element.host}\"/>\r\n </sci-toolbar-split-button>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"menu_item_template\"/>\r\n }\r\n\r\n <!-- Template for rendering the content of a toolbar item. -->\r\n <ng-template #menu_item_template let-anchor=\"anchor\">\r\n <!-- Render push or toggle button. -->\r\n @if (menuItem.onSelect) {\r\n <button [attr.disabled]=\"disabled || null\"\r\n [attr.title]=\"menuItem.accelerator | sciFormatAccelerator:menuItem.tooltip?.()\"\r\n [class.checked]=\"menuItem.checked?.()\"\r\n [class]=\"menuItem.cssClass\" class=\"menu-item toolbar-button e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\"\r\n (click)=\"onSelect(menuItem)\">\r\n <!-- Render icon, if any. -->\r\n <ng-container *ngTemplateOutlet=\"icon_template; context: {$implicit: menuItem}\"/>\r\n <!-- Render label, if any. -->\r\n <ng-container *ngTemplateOutlet=\"label_template; context: {$implicit: menuItem}\"/>\r\n </button>\r\n } @else if (menuItem.control) {\r\n <!-- Render custom control. -->\r\n <sci-toolbar-control [attr.title]=\"menuItem.accelerator | sciFormatAccelerator:menuItem.tooltip?.()\"\r\n [class]=\"menuItem.cssClass\" class=\"e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\">\r\n <ng-container *sciComponentOutlet=\"menuItem.control\"/>\r\n </sci-toolbar-control>\r\n }\r\n\r\n <!-- Render menu button. -->\r\n @if (menuItem.menu?.children?.length) {\r\n @let hasLabel = menuItem.labelText || menuItem.labelComponent;\r\n @let hasIcon = menuItem.iconLigature || menuItem.iconComponent;\r\n @let hasVisualMenuIndicator = menuItem.visualMenuIndicator ?? true;\r\n @let hasIconChevron = hasVisualMenuIndicator && !isSplitButton && hasIcon && !hasLabel;\r\n @let hasChevron = hasVisualMenuIndicator && (isSplitButton || !hasIconChevron);\r\n\r\n <button [attr.disabled]=\"disabled || null\"\r\n [attr.title]=\"menuItem.tooltip?.()\"\r\n [class.menu-open]=\"activeMenuItem()?.menuItem === menuItem\"\r\n [class.menu-indicator]=\"hasIconChevron\"\r\n [class]=\"menuItem.cssClass\" class=\"menu-item e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\"\r\n (click)=\"onToolbarMenuButtonClick(menuItem, anchor ?? menu_button)\"\r\n (mousedown)=\"onToolbarMenuButtonMouseDown(menuItem)\"\r\n (mouseleave)=\"onToolbarMenuButtonMouseLeave(menuItem)\"\r\n #menu_button>\r\n @if (!isSplitButton) {\r\n <!-- Render icon, if any. -->\r\n <ng-container *ngTemplateOutlet=\"icon_template; context: {$implicit: menuItem}\"/>\r\n <!-- Render label, if any. -->\r\n <ng-container *ngTemplateOutlet=\"label_template; context: {$implicit: menuItem}\"/>\r\n }\r\n <!-- Render chevron to indicate dropdown. -->\r\n @if (hasChevron) {\r\n <sci-icon class=\"chevron\">scion.chevron_down</sci-icon>\r\n }\r\n </button>\r\n }\r\n </ng-template>\r\n }\r\n <!-- Toolbar Group -->\r\n @case ('group') {\r\n <sci-toolbar-group [menuItems]=\"menuItem.children\"\r\n [orientation]=\"orientation()\"\r\n [disabled]=\"disabled\"\r\n [popoverViewContainerRef]=\"popoverViewContainerRef()\"\r\n [class]=\"menuItem.cssClass\"/>\r\n }\r\n }\r\n}\r\n\r\n<!-- Renders the icon of a menu item, if any. -->\r\n<ng-template #icon_template let-menuItem>\r\n @if (menuItem.iconLigature) {\r\n <sci-icon>\r\n {{menuItem.iconLigature()}}\r\n </sci-icon>\r\n } @else if (menuItem.iconComponent) {\r\n <sci-toolbar-icon>\r\n <ng-container *sciComponentOutlet=\"menuItem.iconComponent\"/>\r\n </sci-toolbar-icon>\r\n }\r\n</ng-template>\r\n\r\n<!-- Renders the label of a menu item, if any. -->\r\n<ng-template #label_template let-menuItem>\r\n @if (menuItem.labelText) {\r\n <sci-toolbar-label>\r\n {{menuItem.labelText()}}\r\n </sci-toolbar-label>\r\n } @else if (menuItem.labelComponent) {\r\n <sci-toolbar-label>\r\n <ng-container *sciComponentOutlet=\"menuItem.labelComponent\"/>\r\n </sci-toolbar-label>\r\n }\r\n</ng-template>\r\n", styles: ["@charset \"UTF-8\";:host{--sci-icon-size: var(--sci-toolbar-item-size);--\\275sci-toolbar-item-padding-inline: calc(.5 * var(--sci-toolbar-item-size));--\\275sci-toolbar-item-padding-block: calc(.125 * var(--sci-toolbar-item-size));--\\275sci-toolbar-font-size: calc(.8125 * var(--sci-toolbar-item-size));--\\275sci-toolbar-item-border-size: 1px;font-size:var(--sci-toolbar-font-size, var(--\\275sci-toolbar-font-size));display:flex;gap:2px}:host[name]{min-height:calc(var(--sci-toolbar-item-size) + 2 * var(--\\275sci-toolbar-item-padding-block) + 2 * var(--\\275sci-toolbar-item-border-size));box-sizing:content-box}:host[data-orientation=vertical]{flex-direction:column}:host>sci-toolbar-group:not(:first-child):not(:has(>sci-toolbar-group:first-child)):before{content:\"\";background-color:var(--sci-color-border);margin:2px}:host>sci-toolbar-group:not(:first-child):not(:has(>sci-toolbar-group:first-child))[data-orientation=horizontal]:before{width:1px}:host>sci-toolbar-group:not(:first-child):not(:has(>sci-toolbar-group:first-child))[data-orientation=vertical]:before{height:1px}:host>sci-toolbar-group:not(:last-child):not(:has(+sci-toolbar-group)):after{content:\"\";background-color:var(--sci-color-border);margin:2px}:host>sci-toolbar-group:not(:last-child):not(:has(+sci-toolbar-group))[data-orientation=horizontal]:after{width:1px}:host>sci-toolbar-group:not(:last-child):not(:has(+sci-toolbar-group))[data-orientation=vertical]:after{height:1px}:host>sci-toolbar-split-button{display:flex;--\\275sci-toolbar-split-button: true}:host>sci-toolbar-split-button:has(>button:first-child.checked){--\\275sci-toolbar-split-button-checked: true}:host>sci-toolbar-split-button:has(>button:last-child.menu-open){--sci-toolbar-split-button-menu-open: true}:host>sci-toolbar-split-button:hover{--sci-toolbar-split-button-hover: true}:host>sci-toolbar-split-button:where(:hover,:has(>button:last-child.menu-open),:has(>button:first-child.checked),:has(>sci-toolbar-control:focus-within)):not(:has(>button:first-child:disabled)){--sci-toolbar-split-button-outline-visible: true}:host>sci-toolbar-split-button:focus-within{--sci-toolbar-split-button-focus-within: true}:host>sci-toolbar-split-button>sci-toolbar-control{border:var(--\\275sci-toolbar-item-border-size) solid var(--sci-color-border);border-radius:var(--sci-toolbar-item-border-radius);overflow:hidden}@container style(--sci-toolbar-split-button-outline-visible: true){@container not style(--sci-toolbar-item-border-color-hover: transparent){:host>sci-toolbar-split-button>sci-toolbar-control{border-color:var(--sci-toolbar-item-border-color-hover)}}:host>sci-toolbar-split-button>sci-toolbar-control{border-top-right-radius:0;border-bottom-right-radius:0}}:host button:is(.menu-item,#sci-reset){all:unset;display:inline-flex;gap:.3em;place-content:center;align-items:center;text-wrap:nowrap;padding:var(--\\275sci-toolbar-item-padding-block) var(--\\275sci-toolbar-item-padding-inline);border-radius:var(--sci-toolbar-item-border-radius);border:var(--\\275sci-toolbar-item-border-size) solid transparent;color:var(--sci-toolbar-item-text-color);background-color:var(--sci-toolbar-item-background-color);-webkit-user-select:none;user-select:none;cursor:var(--sci-toolbar-item-cursor)}:host button:is(.menu-item,#sci-reset):not(:has(>sci-toolbar-label)){--\\275sci-toolbar-item-padding-inline: var(--\\275sci-toolbar-item-padding-block)}@container style(--\\275sci-toolbar-split-button: true){:host button:is(.menu-item,#sci-reset):first-child{border-top-right-radius:0;border-bottom-right-radius:0}@container style(--sci-toolbar-split-button-menu-open: true) or (style(--\\275sci-toolbar-split-button-checked: true) and (not style(--sci-toolbar-split-button-hover: true))){:host button:is(.menu-item,#sci-reset):first-child{border-right:0;padding-right:calc(var(--\\275sci-toolbar-item-padding-inline) + 1px)}}:host button:is(.menu-item,#sci-reset):last-child{border-top-left-radius:0;border-bottom-left-radius:0;border-left:0;padding:0 .125em}@container style(--sci-toolbar-split-button-outline-visible: true){:host button:is(.menu-item,#sci-reset){border-color:var(--sci-color-border)}@container not style(--sci-toolbar-item-border-color-hover: transparent){:host button:is(.menu-item,#sci-reset){border-color:var(--sci-toolbar-item-border-color-hover)}}}@container style(--\\275sci-toolbar-split-button-checked: true){:host button:is(.menu-item,#sci-reset){border-color:var(--sci-toolbar-item-border-color-checked)}:host button:is(.menu-item,#sci-reset):not(:disabled){background-color:var(--sci-toolbar-item-background-color-checked)}}:host button:is(.menu-item,#sci-reset):focus-visible{border-radius:var(--sci-toolbar-item-border-radius);position:relative}}:host button:is(.menu-item,#sci-reset)>sci-toolbar-icon{display:inline-grid;height:var(--sci-toolbar-item-size);width:var(--sci-toolbar-item-size);overflow:hidden}:host button:is(.menu-item,#sci-reset):has(>sci-toolbar-label)>sci-icon.chevron{margin-left:calc(var(--\\275sci-toolbar-item-padding-inline) / 2)}:host button:is(.menu-item,#sci-reset)>sci-icon.chevron{--sci-icon-size: calc(.875 * var(--sci-icon-size))}:host button:is(.menu-item,#sci-reset).menu-indicator{position:relative}:host button:is(.menu-item,#sci-reset).menu-indicator:after{content:\"\";position:absolute;box-sizing:border-box;width:var(--sci-toolbar-item-menu-indicator-size);height:var(--sci-toolbar-item-menu-indicator-size);border:var(--sci-toolbar-item-menu-indicator-size) solid transparent;border-right-color:var(--sci-toolbar-item-menu-indicator-color);border-bottom-color:var(--sci-toolbar-item-menu-indicator-color);bottom:calc(var(--sci-corner) / 4);right:calc(var(--sci-corner) / 4)}:host button:is(.menu-item,#sci-reset).menu-indicator:disabled:after{border-right-color:var(--sci-toolbar-item-menu-indicator-color-disabled);border-bottom-color:var(--sci-toolbar-item-menu-indicator-color-disabled)}@container not style(--\\275sci-toolbar-split-button: true){:host button:is(.menu-item,#sci-reset).checked{border-color:var(--sci-toolbar-item-border-color-checked)}:host button:is(.menu-item,#sci-reset).checked:not(:disabled){background-color:var(--sci-toolbar-item-background-color-checked)}@container not style(--sci-toolbar-item-border-color-hover: transparent){:host button:is(.menu-item,#sci-reset):hover{border-color:var(--sci-toolbar-item-border-color-hover)}}}:host button:is(.menu-item,#sci-reset):disabled{color:var(--sci-toolbar-item-text-color-disabled)}:host button:is(.menu-item,#sci-reset):hover:not(:disabled){background-color:var(--sci-toolbar-item-background-color-hover)}:host button:is(.menu-item,#sci-reset):active:not(:disabled){background-color:var(--sci-toolbar-item-background-color-active)}:host button:is(.menu-item,#sci-reset):focus:not(:focus-visible){outline:none}:host button:is(.menu-item,#sci-reset):focus-visible{outline:var(--sci-toolbar-item-outline-width) solid var(--sci-color-accent)}:host button:is(.menu-item,#sci-reset).menu-open{background-color:var(--sci-toolbar-item-background-color-hover)}@container style(--sci-toolbar-split-button-menu-open: true){:host button:is(.menu-item,#sci-reset){background-color:var(--sci-toolbar-item-background-color-hover)}}\n"], dependencies: [{ kind: "component", type: SciToolbarGroupComponent, selector: "sci-toolbar-group", inputs: ["menuItems", "orientation", "disabled", "popoverViewContainerRef"] }, { kind: "directive", type: SciComponentOutletDirective, selector: "ng-template[sciComponentOutlet]", inputs: ["sciComponentOutlet"] }, { kind: "directive", type: SciAttributesDirective, selector: "[sciAttributes]", inputs: ["sciAttributes"] }, { kind: "component", type: SciIconComponent, selector: "sci-icon" }, { kind: "component", type: SciToolbarSplitButtonComponent, selector: "sci-toolbar-split-button" }, { kind: "component", type: SciToolbarControlComponent, selector: "sci-toolbar-control" }, { kind: "component", type: SciToolbarIconComponent, selector: "sci-toolbar-icon" }, { kind: "component", type: SciToolbarLabelComponent, selector: "sci-toolbar-label" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: SciFormatAcceleratorPipe, name: "sciFormatAccelerator" }] });
1261
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SciToolbarGroupComponent, isStandalone: true, selector: "sci-toolbar-group", inputs: { menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: true, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, popoverViewContainerRef: { classPropertyName: "popoverViewContainerRef", publicName: "popoverViewContainerRef", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "attr.data-orientation": "orientation()" } }, viewQueries: [{ propertyName: "_childToolbarGroups", predicate: SciToolbarGroupComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@for (menuItem of menuItems(); track $index) {\r\n @let disabled = this.disabled() || menuItem.disabled?.() || false;\r\n @switch (menuItem.type) {\r\n <!-- Toolbar Item -->\r\n @case ('menu-item') {\r\n @let isSplitButton = (menuItem.onSelect || menuItem.control) && menuItem.menu?.children?.length;\r\n\r\n @if (isSplitButton) {\r\n <sci-toolbar-split-button [class]=\"menuItem.cssClass\" #split_button_element>\r\n <ng-container *ngTemplateOutlet=\"menu_item_template; context: {anchor: split_button_element.host}\"/>\r\n </sci-toolbar-split-button>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"menu_item_template\"/>\r\n }\r\n\r\n <!-- Template for rendering the content of a toolbar item. -->\r\n <ng-template #menu_item_template let-anchor=\"anchor\">\r\n <!-- Render push or toggle button. -->\r\n @if (menuItem.onSelect) {\r\n <button [attr.disabled]=\"disabled || null\"\r\n [attr.title]=\"menuItem.accelerator | sciFormatAccelerator:menuItem.tooltip?.()\"\r\n [class.checked]=\"menuItem.checked?.()\"\r\n [class]=\"menuItem.cssClass\" class=\"menu-item toolbar-button e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\"\r\n (click)=\"onSelect(menuItem)\">\r\n <!-- Render icon, if any. -->\r\n <ng-container *ngTemplateOutlet=\"icon_template; context: {$implicit: menuItem}\"/>\r\n <!-- Render label, if any. -->\r\n <ng-container *ngTemplateOutlet=\"label_template; context: {$implicit: menuItem}\"/>\r\n </button>\r\n } @else if (menuItem.control) {\r\n <!-- Render custom control. -->\r\n <sci-toolbar-control [attr.title]=\"menuItem.accelerator | sciFormatAccelerator:menuItem.tooltip?.()\"\r\n [class]=\"menuItem.cssClass\" class=\"e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\">\r\n <ng-container *sciComponentOutlet=\"menuItem.control\"/>\r\n </sci-toolbar-control>\r\n }\r\n\r\n <!-- Render menu button. -->\r\n @if (menuItem.menu?.children?.length) {\r\n @let hasLabel = menuItem.labelText || menuItem.labelComponent;\r\n @let hasIcon = menuItem.iconLigature || menuItem.iconComponent;\r\n @let hasVisualMenuIndicator = menuItem.visualMenuIndicator ?? true;\r\n @let hasIconChevron = hasVisualMenuIndicator && !isSplitButton && hasIcon && !hasLabel;\r\n @let hasChevron = hasVisualMenuIndicator && (isSplitButton || !hasIconChevron);\r\n\r\n <button [attr.disabled]=\"disabled || null\"\r\n [attr.title]=\"menuItem.tooltip?.()\"\r\n [class.menu-open]=\"activeMenuItem()?.menuItem === menuItem\"\r\n [class.menu-indicator]=\"hasIconChevron\"\r\n [class]=\"menuItem.cssClass\" class=\"menu-item e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\"\r\n (click)=\"onToolbarMenuButtonClick(menuItem, anchor ?? menu_button)\"\r\n (mousedown)=\"onToolbarMenuButtonMouseDown(menuItem)\"\r\n (mouseleave)=\"onToolbarMenuButtonMouseLeave(menuItem)\"\r\n #menu_button>\r\n @if (!isSplitButton) {\r\n <!-- Render icon, if any. -->\r\n <ng-container *ngTemplateOutlet=\"icon_template; context: {$implicit: menuItem}\"/>\r\n <!-- Render label, if any. -->\r\n <ng-container *ngTemplateOutlet=\"label_template; context: {$implicit: menuItem}\"/>\r\n }\r\n <!-- Render chevron to indicate dropdown. -->\r\n @if (hasChevron) {\r\n <sci-icon class=\"chevron\">scion:chevron_down</sci-icon>\r\n }\r\n </button>\r\n }\r\n </ng-template>\r\n }\r\n <!-- Toolbar Group -->\r\n @case ('group') {\r\n <sci-toolbar-group [menuItems]=\"menuItem.children\"\r\n [orientation]=\"orientation()\"\r\n [disabled]=\"disabled\"\r\n [popoverViewContainerRef]=\"popoverViewContainerRef()\"\r\n [class]=\"menuItem.cssClass\"/>\r\n }\r\n }\r\n}\r\n\r\n<!-- Renders the icon of a menu item, if any. -->\r\n<ng-template #icon_template let-menuItem>\r\n @if (menuItem.iconLigature) {\r\n <sci-icon>\r\n {{menuItem.iconLigature()}}\r\n </sci-icon>\r\n } @else if (menuItem.iconComponent) {\r\n <sci-toolbar-icon>\r\n <ng-container *sciComponentOutlet=\"menuItem.iconComponent\"/>\r\n </sci-toolbar-icon>\r\n }\r\n</ng-template>\r\n\r\n<!-- Renders the label of a menu item, if any. -->\r\n<ng-template #label_template let-menuItem>\r\n @if (menuItem.labelText) {\r\n <sci-toolbar-label>\r\n {{menuItem.labelText()}}\r\n </sci-toolbar-label>\r\n } @else if (menuItem.labelComponent) {\r\n <sci-toolbar-label>\r\n <ng-container *sciComponentOutlet=\"menuItem.labelComponent\"/>\r\n </sci-toolbar-label>\r\n }\r\n</ng-template>\r\n", styles: ["@charset \"UTF-8\";:host{--sci-icon-size: var(--sci-toolbar-item-size);--\\275sci-toolbar-item-padding-inline: calc(.5 * var(--sci-toolbar-item-size));--\\275sci-toolbar-item-padding-block: calc(.125 * var(--sci-toolbar-item-size));--\\275sci-toolbar-font-size: calc(.8125 * var(--sci-toolbar-item-size));--\\275sci-toolbar-item-border-size: 1px;font-size:var(--sci-toolbar-font-size, var(--\\275sci-toolbar-font-size));display:flex;gap:2px}:host[name]{min-height:calc(var(--sci-toolbar-item-size) + 2 * var(--\\275sci-toolbar-item-padding-block) + 2 * var(--\\275sci-toolbar-item-border-size));box-sizing:content-box}:host[data-orientation=vertical]{flex-direction:column}:host>sci-toolbar-group:not(:first-child):not(:has(>sci-toolbar-group:first-child)):before{content:\"\";background-color:var(--sci-color-border);margin:2px}:host>sci-toolbar-group:not(:first-child):not(:has(>sci-toolbar-group:first-child))[data-orientation=horizontal]:before{width:1px}:host>sci-toolbar-group:not(:first-child):not(:has(>sci-toolbar-group:first-child))[data-orientation=vertical]:before{height:1px}:host>sci-toolbar-group:not(:last-child):not(:has(+sci-toolbar-group)):after{content:\"\";background-color:var(--sci-color-border);margin:2px}:host>sci-toolbar-group:not(:last-child):not(:has(+sci-toolbar-group))[data-orientation=horizontal]:after{width:1px}:host>sci-toolbar-group:not(:last-child):not(:has(+sci-toolbar-group))[data-orientation=vertical]:after{height:1px}:host>sci-toolbar-split-button{display:flex;--\\275sci-toolbar-split-button: true}:host>sci-toolbar-split-button:has(>button:first-child.checked){--\\275sci-toolbar-split-button-checked: true}:host>sci-toolbar-split-button:has(>button:last-child.menu-open){--sci-toolbar-split-button-menu-open: true}:host>sci-toolbar-split-button:hover{--sci-toolbar-split-button-hover: true}:host>sci-toolbar-split-button:where(:hover,:has(>button:last-child.menu-open),:has(>button:first-child.checked),:has(>sci-toolbar-control:focus-within)):not(:has(>button:first-child:disabled)){--sci-toolbar-split-button-outline-visible: true}:host>sci-toolbar-split-button:focus-within{--sci-toolbar-split-button-focus-within: true}:host>sci-toolbar-split-button>sci-toolbar-control{border:var(--\\275sci-toolbar-item-border-size) solid var(--sci-color-border);border-radius:var(--sci-toolbar-item-border-radius);overflow:hidden}@container style(--sci-toolbar-split-button-outline-visible: true){@container not style(--sci-toolbar-item-border-color-hover: transparent){:host>sci-toolbar-split-button>sci-toolbar-control{border-color:var(--sci-toolbar-item-border-color-hover)}}:host>sci-toolbar-split-button>sci-toolbar-control{border-top-right-radius:0;border-bottom-right-radius:0}}:host button:is(.menu-item,#sci-reset){all:unset;display:inline-flex;gap:.3em;place-content:center;align-items:center;text-wrap:nowrap;padding:var(--\\275sci-toolbar-item-padding-block) var(--\\275sci-toolbar-item-padding-inline);border-radius:var(--sci-toolbar-item-border-radius);border:var(--\\275sci-toolbar-item-border-size) solid transparent;color:var(--sci-toolbar-item-text-color);background-color:var(--sci-toolbar-item-background-color);-webkit-user-select:none;user-select:none;cursor:var(--sci-toolbar-item-cursor)}:host button:is(.menu-item,#sci-reset):not(:has(>sci-toolbar-label)){--\\275sci-toolbar-item-padding-inline: var(--\\275sci-toolbar-item-padding-block)}@container style(--\\275sci-toolbar-split-button: true){:host button:is(.menu-item,#sci-reset):first-child{border-top-right-radius:0;border-bottom-right-radius:0}@container style(--sci-toolbar-split-button-menu-open: true) or (style(--\\275sci-toolbar-split-button-checked: true) and (not style(--sci-toolbar-split-button-hover: true))){:host button:is(.menu-item,#sci-reset):first-child{border-right:0;padding-right:calc(var(--\\275sci-toolbar-item-padding-inline) + 1px)}}:host button:is(.menu-item,#sci-reset):last-child{border-top-left-radius:0;border-bottom-left-radius:0;border-left:0;padding:0 .125em}@container style(--sci-toolbar-split-button-outline-visible: true){:host button:is(.menu-item,#sci-reset){border-color:var(--sci-color-border)}@container not style(--sci-toolbar-item-border-color-hover: transparent){:host button:is(.menu-item,#sci-reset){border-color:var(--sci-toolbar-item-border-color-hover)}}}@container style(--\\275sci-toolbar-split-button-checked: true){:host button:is(.menu-item,#sci-reset){border-color:var(--sci-toolbar-item-border-color-checked)}:host button:is(.menu-item,#sci-reset):not(:disabled){background-color:var(--sci-toolbar-item-background-color-checked)}}:host button:is(.menu-item,#sci-reset):focus-visible{border-radius:var(--sci-toolbar-item-border-radius);position:relative}}:host button:is(.menu-item,#sci-reset)>sci-toolbar-icon{display:inline-grid;height:var(--sci-toolbar-item-size);width:var(--sci-toolbar-item-size);overflow:hidden}:host button:is(.menu-item,#sci-reset):has(>sci-toolbar-label)>sci-icon.chevron{margin-left:calc(var(--\\275sci-toolbar-item-padding-inline) / 2)}:host button:is(.menu-item,#sci-reset)>sci-icon.chevron{--sci-icon-size: calc(.875 * var(--sci-icon-size))}:host button:is(.menu-item,#sci-reset).menu-indicator{position:relative}:host button:is(.menu-item,#sci-reset).menu-indicator:after{content:\"\";position:absolute;box-sizing:border-box;width:var(--sci-toolbar-item-menu-indicator-size);height:var(--sci-toolbar-item-menu-indicator-size);border:var(--sci-toolbar-item-menu-indicator-size) solid transparent;border-right-color:var(--sci-toolbar-item-menu-indicator-color);border-bottom-color:var(--sci-toolbar-item-menu-indicator-color);bottom:calc(var(--sci-corner) / 4);right:calc(var(--sci-corner) / 4)}:host button:is(.menu-item,#sci-reset).menu-indicator:disabled:after{border-right-color:var(--sci-toolbar-item-menu-indicator-color-disabled);border-bottom-color:var(--sci-toolbar-item-menu-indicator-color-disabled)}@container not style(--\\275sci-toolbar-split-button: true){:host button:is(.menu-item,#sci-reset).checked{border-color:var(--sci-toolbar-item-border-color-checked)}:host button:is(.menu-item,#sci-reset).checked:not(:disabled){background-color:var(--sci-toolbar-item-background-color-checked)}@container not style(--sci-toolbar-item-border-color-hover: transparent){:host button:is(.menu-item,#sci-reset):hover{border-color:var(--sci-toolbar-item-border-color-hover)}}}:host button:is(.menu-item,#sci-reset):disabled{color:var(--sci-toolbar-item-text-color-disabled)}:host button:is(.menu-item,#sci-reset):hover:not(:disabled){background-color:var(--sci-toolbar-item-background-color-hover)}:host button:is(.menu-item,#sci-reset):active:not(:disabled){background-color:var(--sci-toolbar-item-background-color-active)}:host button:is(.menu-item,#sci-reset):focus:not(:focus-visible){outline:none}:host button:is(.menu-item,#sci-reset):focus-visible{outline:var(--sci-toolbar-item-outline-width) solid var(--sci-color-accent)}:host button:is(.menu-item,#sci-reset).menu-open{background-color:var(--sci-toolbar-item-background-color-hover)}@container style(--sci-toolbar-split-button-menu-open: true){:host button:is(.menu-item,#sci-reset){background-color:var(--sci-toolbar-item-background-color-hover)}}\n"], dependencies: [{ kind: "component", type: SciToolbarGroupComponent, selector: "sci-toolbar-group", inputs: ["menuItems", "orientation", "disabled", "popoverViewContainerRef"] }, { kind: "directive", type: SciComponentOutletDirective, selector: "ng-template[sciComponentOutlet]", inputs: ["sciComponentOutlet"] }, { kind: "directive", type: SciAttributesDirective, selector: "[sciAttributes]", inputs: ["sciAttributes"] }, { kind: "component", type: SciIconComponent, selector: "sci-icon" }, { kind: "component", type: SciToolbarSplitButtonComponent, selector: "sci-toolbar-split-button" }, { kind: "component", type: SciToolbarControlComponent, selector: "sci-toolbar-control" }, { kind: "component", type: SciToolbarIconComponent, selector: "sci-toolbar-icon" }, { kind: "component", type: SciToolbarLabelComponent, selector: "sci-toolbar-label" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: SciFormatAcceleratorPipe, name: "sciFormatAccelerator" }] });
1266
1262
  }
1267
1263
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SciToolbarGroupComponent, decorators: [{
1268
1264
  type: Component,
@@ -1278,7 +1274,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
1278
1274
  NgTemplateOutlet,
1279
1275
  ], host: {
1280
1276
  '[attr.data-orientation]': 'orientation()',
1281
- }, template: "@for (menuItem of menuItems(); track $index) {\r\n @let disabled = this.disabled() || menuItem.disabled?.() || false;\r\n @switch (menuItem.type) {\r\n <!-- Toolbar Item -->\r\n @case ('menu-item') {\r\n @let isSplitButton = (menuItem.onSelect || menuItem.control) && menuItem.menu?.children?.length;\r\n\r\n @if (isSplitButton) {\r\n <sci-toolbar-split-button [class]=\"menuItem.cssClass\" #split_button_element>\r\n <ng-container *ngTemplateOutlet=\"menu_item_template; context: {anchor: split_button_element.host}\"/>\r\n </sci-toolbar-split-button>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"menu_item_template\"/>\r\n }\r\n\r\n <!-- Template for rendering the content of a toolbar item. -->\r\n <ng-template #menu_item_template let-anchor=\"anchor\">\r\n <!-- Render push or toggle button. -->\r\n @if (menuItem.onSelect) {\r\n <button [attr.disabled]=\"disabled || null\"\r\n [attr.title]=\"menuItem.accelerator | sciFormatAccelerator:menuItem.tooltip?.()\"\r\n [class.checked]=\"menuItem.checked?.()\"\r\n [class]=\"menuItem.cssClass\" class=\"menu-item toolbar-button e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\"\r\n (click)=\"onSelect(menuItem)\">\r\n <!-- Render icon, if any. -->\r\n <ng-container *ngTemplateOutlet=\"icon_template; context: {$implicit: menuItem}\"/>\r\n <!-- Render label, if any. -->\r\n <ng-container *ngTemplateOutlet=\"label_template; context: {$implicit: menuItem}\"/>\r\n </button>\r\n } @else if (menuItem.control) {\r\n <!-- Render custom control. -->\r\n <sci-toolbar-control [attr.title]=\"menuItem.accelerator | sciFormatAccelerator:menuItem.tooltip?.()\"\r\n [class]=\"menuItem.cssClass\" class=\"e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\">\r\n <ng-container *sciComponentOutlet=\"menuItem.control\"/>\r\n </sci-toolbar-control>\r\n }\r\n\r\n <!-- Render menu button. -->\r\n @if (menuItem.menu?.children?.length) {\r\n @let hasLabel = menuItem.labelText || menuItem.labelComponent;\r\n @let hasIcon = menuItem.iconLigature || menuItem.iconComponent;\r\n @let hasVisualMenuIndicator = menuItem.visualMenuIndicator ?? true;\r\n @let hasIconChevron = hasVisualMenuIndicator && !isSplitButton && hasIcon && !hasLabel;\r\n @let hasChevron = hasVisualMenuIndicator && (isSplitButton || !hasIconChevron);\r\n\r\n <button [attr.disabled]=\"disabled || null\"\r\n [attr.title]=\"menuItem.tooltip?.()\"\r\n [class.menu-open]=\"activeMenuItem()?.menuItem === menuItem\"\r\n [class.menu-indicator]=\"hasIconChevron\"\r\n [class]=\"menuItem.cssClass\" class=\"menu-item e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\"\r\n (click)=\"onToolbarMenuButtonClick(menuItem, anchor ?? menu_button)\"\r\n (mousedown)=\"onToolbarMenuButtonMouseDown(menuItem)\"\r\n (mouseleave)=\"onToolbarMenuButtonMouseLeave(menuItem)\"\r\n #menu_button>\r\n @if (!isSplitButton) {\r\n <!-- Render icon, if any. -->\r\n <ng-container *ngTemplateOutlet=\"icon_template; context: {$implicit: menuItem}\"/>\r\n <!-- Render label, if any. -->\r\n <ng-container *ngTemplateOutlet=\"label_template; context: {$implicit: menuItem}\"/>\r\n }\r\n <!-- Render chevron to indicate dropdown. -->\r\n @if (hasChevron) {\r\n <sci-icon class=\"chevron\">scion.chevron_down</sci-icon>\r\n }\r\n </button>\r\n }\r\n </ng-template>\r\n }\r\n <!-- Toolbar Group -->\r\n @case ('group') {\r\n <sci-toolbar-group [menuItems]=\"menuItem.children\"\r\n [orientation]=\"orientation()\"\r\n [disabled]=\"disabled\"\r\n [popoverViewContainerRef]=\"popoverViewContainerRef()\"\r\n [class]=\"menuItem.cssClass\"/>\r\n }\r\n }\r\n}\r\n\r\n<!-- Renders the icon of a menu item, if any. -->\r\n<ng-template #icon_template let-menuItem>\r\n @if (menuItem.iconLigature) {\r\n <sci-icon>\r\n {{menuItem.iconLigature()}}\r\n </sci-icon>\r\n } @else if (menuItem.iconComponent) {\r\n <sci-toolbar-icon>\r\n <ng-container *sciComponentOutlet=\"menuItem.iconComponent\"/>\r\n </sci-toolbar-icon>\r\n }\r\n</ng-template>\r\n\r\n<!-- Renders the label of a menu item, if any. -->\r\n<ng-template #label_template let-menuItem>\r\n @if (menuItem.labelText) {\r\n <sci-toolbar-label>\r\n {{menuItem.labelText()}}\r\n </sci-toolbar-label>\r\n } @else if (menuItem.labelComponent) {\r\n <sci-toolbar-label>\r\n <ng-container *sciComponentOutlet=\"menuItem.labelComponent\"/>\r\n </sci-toolbar-label>\r\n }\r\n</ng-template>\r\n", styles: ["@charset \"UTF-8\";:host{--sci-icon-size: var(--sci-toolbar-item-size);--\\275sci-toolbar-item-padding-inline: calc(.5 * var(--sci-toolbar-item-size));--\\275sci-toolbar-item-padding-block: calc(.125 * var(--sci-toolbar-item-size));--\\275sci-toolbar-font-size: calc(.8125 * var(--sci-toolbar-item-size));--\\275sci-toolbar-item-border-size: 1px;font-size:var(--sci-toolbar-font-size, var(--\\275sci-toolbar-font-size));display:flex;gap:2px}:host[name]{min-height:calc(var(--sci-toolbar-item-size) + 2 * var(--\\275sci-toolbar-item-padding-block) + 2 * var(--\\275sci-toolbar-item-border-size));box-sizing:content-box}:host[data-orientation=vertical]{flex-direction:column}:host>sci-toolbar-group:not(:first-child):not(:has(>sci-toolbar-group:first-child)):before{content:\"\";background-color:var(--sci-color-border);margin:2px}:host>sci-toolbar-group:not(:first-child):not(:has(>sci-toolbar-group:first-child))[data-orientation=horizontal]:before{width:1px}:host>sci-toolbar-group:not(:first-child):not(:has(>sci-toolbar-group:first-child))[data-orientation=vertical]:before{height:1px}:host>sci-toolbar-group:not(:last-child):not(:has(+sci-toolbar-group)):after{content:\"\";background-color:var(--sci-color-border);margin:2px}:host>sci-toolbar-group:not(:last-child):not(:has(+sci-toolbar-group))[data-orientation=horizontal]:after{width:1px}:host>sci-toolbar-group:not(:last-child):not(:has(+sci-toolbar-group))[data-orientation=vertical]:after{height:1px}:host>sci-toolbar-split-button{display:flex;--\\275sci-toolbar-split-button: true}:host>sci-toolbar-split-button:has(>button:first-child.checked){--\\275sci-toolbar-split-button-checked: true}:host>sci-toolbar-split-button:has(>button:last-child.menu-open){--sci-toolbar-split-button-menu-open: true}:host>sci-toolbar-split-button:hover{--sci-toolbar-split-button-hover: true}:host>sci-toolbar-split-button:where(:hover,:has(>button:last-child.menu-open),:has(>button:first-child.checked),:has(>sci-toolbar-control:focus-within)):not(:has(>button:first-child:disabled)){--sci-toolbar-split-button-outline-visible: true}:host>sci-toolbar-split-button:focus-within{--sci-toolbar-split-button-focus-within: true}:host>sci-toolbar-split-button>sci-toolbar-control{border:var(--\\275sci-toolbar-item-border-size) solid var(--sci-color-border);border-radius:var(--sci-toolbar-item-border-radius);overflow:hidden}@container style(--sci-toolbar-split-button-outline-visible: true){@container not style(--sci-toolbar-item-border-color-hover: transparent){:host>sci-toolbar-split-button>sci-toolbar-control{border-color:var(--sci-toolbar-item-border-color-hover)}}:host>sci-toolbar-split-button>sci-toolbar-control{border-top-right-radius:0;border-bottom-right-radius:0}}:host button:is(.menu-item,#sci-reset){all:unset;display:inline-flex;gap:.3em;place-content:center;align-items:center;text-wrap:nowrap;padding:var(--\\275sci-toolbar-item-padding-block) var(--\\275sci-toolbar-item-padding-inline);border-radius:var(--sci-toolbar-item-border-radius);border:var(--\\275sci-toolbar-item-border-size) solid transparent;color:var(--sci-toolbar-item-text-color);background-color:var(--sci-toolbar-item-background-color);-webkit-user-select:none;user-select:none;cursor:var(--sci-toolbar-item-cursor)}:host button:is(.menu-item,#sci-reset):not(:has(>sci-toolbar-label)){--\\275sci-toolbar-item-padding-inline: var(--\\275sci-toolbar-item-padding-block)}@container style(--\\275sci-toolbar-split-button: true){:host button:is(.menu-item,#sci-reset):first-child{border-top-right-radius:0;border-bottom-right-radius:0}@container style(--sci-toolbar-split-button-menu-open: true) or (style(--\\275sci-toolbar-split-button-checked: true) and (not style(--sci-toolbar-split-button-hover: true))){:host button:is(.menu-item,#sci-reset):first-child{border-right:0;padding-right:calc(var(--\\275sci-toolbar-item-padding-inline) + 1px)}}:host button:is(.menu-item,#sci-reset):last-child{border-top-left-radius:0;border-bottom-left-radius:0;border-left:0;padding:0 .125em}@container style(--sci-toolbar-split-button-outline-visible: true){:host button:is(.menu-item,#sci-reset){border-color:var(--sci-color-border)}@container not style(--sci-toolbar-item-border-color-hover: transparent){:host button:is(.menu-item,#sci-reset){border-color:var(--sci-toolbar-item-border-color-hover)}}}@container style(--\\275sci-toolbar-split-button-checked: true){:host button:is(.menu-item,#sci-reset){border-color:var(--sci-toolbar-item-border-color-checked)}:host button:is(.menu-item,#sci-reset):not(:disabled){background-color:var(--sci-toolbar-item-background-color-checked)}}:host button:is(.menu-item,#sci-reset):focus-visible{border-radius:var(--sci-toolbar-item-border-radius);position:relative}}:host button:is(.menu-item,#sci-reset)>sci-toolbar-icon{display:inline-grid;height:var(--sci-toolbar-item-size);width:var(--sci-toolbar-item-size);overflow:hidden}:host button:is(.menu-item,#sci-reset):has(>sci-toolbar-label)>sci-icon.chevron{margin-left:calc(var(--\\275sci-toolbar-item-padding-inline) / 2)}:host button:is(.menu-item,#sci-reset)>sci-icon.chevron{--sci-icon-size: calc(.875 * var(--sci-icon-size))}:host button:is(.menu-item,#sci-reset).menu-indicator{position:relative}:host button:is(.menu-item,#sci-reset).menu-indicator:after{content:\"\";position:absolute;box-sizing:border-box;width:var(--sci-toolbar-item-menu-indicator-size);height:var(--sci-toolbar-item-menu-indicator-size);border:var(--sci-toolbar-item-menu-indicator-size) solid transparent;border-right-color:var(--sci-toolbar-item-menu-indicator-color);border-bottom-color:var(--sci-toolbar-item-menu-indicator-color);bottom:calc(var(--sci-corner) / 4);right:calc(var(--sci-corner) / 4)}:host button:is(.menu-item,#sci-reset).menu-indicator:disabled:after{border-right-color:var(--sci-toolbar-item-menu-indicator-color-disabled);border-bottom-color:var(--sci-toolbar-item-menu-indicator-color-disabled)}@container not style(--\\275sci-toolbar-split-button: true){:host button:is(.menu-item,#sci-reset).checked{border-color:var(--sci-toolbar-item-border-color-checked)}:host button:is(.menu-item,#sci-reset).checked:not(:disabled){background-color:var(--sci-toolbar-item-background-color-checked)}@container not style(--sci-toolbar-item-border-color-hover: transparent){:host button:is(.menu-item,#sci-reset):hover{border-color:var(--sci-toolbar-item-border-color-hover)}}}:host button:is(.menu-item,#sci-reset):disabled{color:var(--sci-toolbar-item-text-color-disabled)}:host button:is(.menu-item,#sci-reset):hover:not(:disabled){background-color:var(--sci-toolbar-item-background-color-hover)}:host button:is(.menu-item,#sci-reset):active:not(:disabled){background-color:var(--sci-toolbar-item-background-color-active)}:host button:is(.menu-item,#sci-reset):focus:not(:focus-visible){outline:none}:host button:is(.menu-item,#sci-reset):focus-visible{outline:var(--sci-toolbar-item-outline-width) solid var(--sci-color-accent)}:host button:is(.menu-item,#sci-reset).menu-open{background-color:var(--sci-toolbar-item-background-color-hover)}@container style(--sci-toolbar-split-button-menu-open: true){:host button:is(.menu-item,#sci-reset){background-color:var(--sci-toolbar-item-background-color-hover)}}\n"] }]
1277
+ }, template: "@for (menuItem of menuItems(); track $index) {\r\n @let disabled = this.disabled() || menuItem.disabled?.() || false;\r\n @switch (menuItem.type) {\r\n <!-- Toolbar Item -->\r\n @case ('menu-item') {\r\n @let isSplitButton = (menuItem.onSelect || menuItem.control) && menuItem.menu?.children?.length;\r\n\r\n @if (isSplitButton) {\r\n <sci-toolbar-split-button [class]=\"menuItem.cssClass\" #split_button_element>\r\n <ng-container *ngTemplateOutlet=\"menu_item_template; context: {anchor: split_button_element.host}\"/>\r\n </sci-toolbar-split-button>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"menu_item_template\"/>\r\n }\r\n\r\n <!-- Template for rendering the content of a toolbar item. -->\r\n <ng-template #menu_item_template let-anchor=\"anchor\">\r\n <!-- Render push or toggle button. -->\r\n @if (menuItem.onSelect) {\r\n <button [attr.disabled]=\"disabled || null\"\r\n [attr.title]=\"menuItem.accelerator | sciFormatAccelerator:menuItem.tooltip?.()\"\r\n [class.checked]=\"menuItem.checked?.()\"\r\n [class]=\"menuItem.cssClass\" class=\"menu-item toolbar-button e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\"\r\n (click)=\"onSelect(menuItem)\">\r\n <!-- Render icon, if any. -->\r\n <ng-container *ngTemplateOutlet=\"icon_template; context: {$implicit: menuItem}\"/>\r\n <!-- Render label, if any. -->\r\n <ng-container *ngTemplateOutlet=\"label_template; context: {$implicit: menuItem}\"/>\r\n </button>\r\n } @else if (menuItem.control) {\r\n <!-- Render custom control. -->\r\n <sci-toolbar-control [attr.title]=\"menuItem.accelerator | sciFormatAccelerator:menuItem.tooltip?.()\"\r\n [class]=\"menuItem.cssClass\" class=\"e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\">\r\n <ng-container *sciComponentOutlet=\"menuItem.control\"/>\r\n </sci-toolbar-control>\r\n }\r\n\r\n <!-- Render menu button. -->\r\n @if (menuItem.menu?.children?.length) {\r\n @let hasLabel = menuItem.labelText || menuItem.labelComponent;\r\n @let hasIcon = menuItem.iconLigature || menuItem.iconComponent;\r\n @let hasVisualMenuIndicator = menuItem.visualMenuIndicator ?? true;\r\n @let hasIconChevron = hasVisualMenuIndicator && !isSplitButton && hasIcon && !hasLabel;\r\n @let hasChevron = hasVisualMenuIndicator && (isSplitButton || !hasIconChevron);\r\n\r\n <button [attr.disabled]=\"disabled || null\"\r\n [attr.title]=\"menuItem.tooltip?.()\"\r\n [class.menu-open]=\"activeMenuItem()?.menuItem === menuItem\"\r\n [class.menu-indicator]=\"hasIconChevron\"\r\n [class]=\"menuItem.cssClass\" class=\"menu-item e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\"\r\n (click)=\"onToolbarMenuButtonClick(menuItem, anchor ?? menu_button)\"\r\n (mousedown)=\"onToolbarMenuButtonMouseDown(menuItem)\"\r\n (mouseleave)=\"onToolbarMenuButtonMouseLeave(menuItem)\"\r\n #menu_button>\r\n @if (!isSplitButton) {\r\n <!-- Render icon, if any. -->\r\n <ng-container *ngTemplateOutlet=\"icon_template; context: {$implicit: menuItem}\"/>\r\n <!-- Render label, if any. -->\r\n <ng-container *ngTemplateOutlet=\"label_template; context: {$implicit: menuItem}\"/>\r\n }\r\n <!-- Render chevron to indicate dropdown. -->\r\n @if (hasChevron) {\r\n <sci-icon class=\"chevron\">scion:chevron_down</sci-icon>\r\n }\r\n </button>\r\n }\r\n </ng-template>\r\n }\r\n <!-- Toolbar Group -->\r\n @case ('group') {\r\n <sci-toolbar-group [menuItems]=\"menuItem.children\"\r\n [orientation]=\"orientation()\"\r\n [disabled]=\"disabled\"\r\n [popoverViewContainerRef]=\"popoverViewContainerRef()\"\r\n [class]=\"menuItem.cssClass\"/>\r\n }\r\n }\r\n}\r\n\r\n<!-- Renders the icon of a menu item, if any. -->\r\n<ng-template #icon_template let-menuItem>\r\n @if (menuItem.iconLigature) {\r\n <sci-icon>\r\n {{menuItem.iconLigature()}}\r\n </sci-icon>\r\n } @else if (menuItem.iconComponent) {\r\n <sci-toolbar-icon>\r\n <ng-container *sciComponentOutlet=\"menuItem.iconComponent\"/>\r\n </sci-toolbar-icon>\r\n }\r\n</ng-template>\r\n\r\n<!-- Renders the label of a menu item, if any. -->\r\n<ng-template #label_template let-menuItem>\r\n @if (menuItem.labelText) {\r\n <sci-toolbar-label>\r\n {{menuItem.labelText()}}\r\n </sci-toolbar-label>\r\n } @else if (menuItem.labelComponent) {\r\n <sci-toolbar-label>\r\n <ng-container *sciComponentOutlet=\"menuItem.labelComponent\"/>\r\n </sci-toolbar-label>\r\n }\r\n</ng-template>\r\n", styles: ["@charset \"UTF-8\";:host{--sci-icon-size: var(--sci-toolbar-item-size);--\\275sci-toolbar-item-padding-inline: calc(.5 * var(--sci-toolbar-item-size));--\\275sci-toolbar-item-padding-block: calc(.125 * var(--sci-toolbar-item-size));--\\275sci-toolbar-font-size: calc(.8125 * var(--sci-toolbar-item-size));--\\275sci-toolbar-item-border-size: 1px;font-size:var(--sci-toolbar-font-size, var(--\\275sci-toolbar-font-size));display:flex;gap:2px}:host[name]{min-height:calc(var(--sci-toolbar-item-size) + 2 * var(--\\275sci-toolbar-item-padding-block) + 2 * var(--\\275sci-toolbar-item-border-size));box-sizing:content-box}:host[data-orientation=vertical]{flex-direction:column}:host>sci-toolbar-group:not(:first-child):not(:has(>sci-toolbar-group:first-child)):before{content:\"\";background-color:var(--sci-color-border);margin:2px}:host>sci-toolbar-group:not(:first-child):not(:has(>sci-toolbar-group:first-child))[data-orientation=horizontal]:before{width:1px}:host>sci-toolbar-group:not(:first-child):not(:has(>sci-toolbar-group:first-child))[data-orientation=vertical]:before{height:1px}:host>sci-toolbar-group:not(:last-child):not(:has(+sci-toolbar-group)):after{content:\"\";background-color:var(--sci-color-border);margin:2px}:host>sci-toolbar-group:not(:last-child):not(:has(+sci-toolbar-group))[data-orientation=horizontal]:after{width:1px}:host>sci-toolbar-group:not(:last-child):not(:has(+sci-toolbar-group))[data-orientation=vertical]:after{height:1px}:host>sci-toolbar-split-button{display:flex;--\\275sci-toolbar-split-button: true}:host>sci-toolbar-split-button:has(>button:first-child.checked){--\\275sci-toolbar-split-button-checked: true}:host>sci-toolbar-split-button:has(>button:last-child.menu-open){--sci-toolbar-split-button-menu-open: true}:host>sci-toolbar-split-button:hover{--sci-toolbar-split-button-hover: true}:host>sci-toolbar-split-button:where(:hover,:has(>button:last-child.menu-open),:has(>button:first-child.checked),:has(>sci-toolbar-control:focus-within)):not(:has(>button:first-child:disabled)){--sci-toolbar-split-button-outline-visible: true}:host>sci-toolbar-split-button:focus-within{--sci-toolbar-split-button-focus-within: true}:host>sci-toolbar-split-button>sci-toolbar-control{border:var(--\\275sci-toolbar-item-border-size) solid var(--sci-color-border);border-radius:var(--sci-toolbar-item-border-radius);overflow:hidden}@container style(--sci-toolbar-split-button-outline-visible: true){@container not style(--sci-toolbar-item-border-color-hover: transparent){:host>sci-toolbar-split-button>sci-toolbar-control{border-color:var(--sci-toolbar-item-border-color-hover)}}:host>sci-toolbar-split-button>sci-toolbar-control{border-top-right-radius:0;border-bottom-right-radius:0}}:host button:is(.menu-item,#sci-reset){all:unset;display:inline-flex;gap:.3em;place-content:center;align-items:center;text-wrap:nowrap;padding:var(--\\275sci-toolbar-item-padding-block) var(--\\275sci-toolbar-item-padding-inline);border-radius:var(--sci-toolbar-item-border-radius);border:var(--\\275sci-toolbar-item-border-size) solid transparent;color:var(--sci-toolbar-item-text-color);background-color:var(--sci-toolbar-item-background-color);-webkit-user-select:none;user-select:none;cursor:var(--sci-toolbar-item-cursor)}:host button:is(.menu-item,#sci-reset):not(:has(>sci-toolbar-label)){--\\275sci-toolbar-item-padding-inline: var(--\\275sci-toolbar-item-padding-block)}@container style(--\\275sci-toolbar-split-button: true){:host button:is(.menu-item,#sci-reset):first-child{border-top-right-radius:0;border-bottom-right-radius:0}@container style(--sci-toolbar-split-button-menu-open: true) or (style(--\\275sci-toolbar-split-button-checked: true) and (not style(--sci-toolbar-split-button-hover: true))){:host button:is(.menu-item,#sci-reset):first-child{border-right:0;padding-right:calc(var(--\\275sci-toolbar-item-padding-inline) + 1px)}}:host button:is(.menu-item,#sci-reset):last-child{border-top-left-radius:0;border-bottom-left-radius:0;border-left:0;padding:0 .125em}@container style(--sci-toolbar-split-button-outline-visible: true){:host button:is(.menu-item,#sci-reset){border-color:var(--sci-color-border)}@container not style(--sci-toolbar-item-border-color-hover: transparent){:host button:is(.menu-item,#sci-reset){border-color:var(--sci-toolbar-item-border-color-hover)}}}@container style(--\\275sci-toolbar-split-button-checked: true){:host button:is(.menu-item,#sci-reset){border-color:var(--sci-toolbar-item-border-color-checked)}:host button:is(.menu-item,#sci-reset):not(:disabled){background-color:var(--sci-toolbar-item-background-color-checked)}}:host button:is(.menu-item,#sci-reset):focus-visible{border-radius:var(--sci-toolbar-item-border-radius);position:relative}}:host button:is(.menu-item,#sci-reset)>sci-toolbar-icon{display:inline-grid;height:var(--sci-toolbar-item-size);width:var(--sci-toolbar-item-size);overflow:hidden}:host button:is(.menu-item,#sci-reset):has(>sci-toolbar-label)>sci-icon.chevron{margin-left:calc(var(--\\275sci-toolbar-item-padding-inline) / 2)}:host button:is(.menu-item,#sci-reset)>sci-icon.chevron{--sci-icon-size: calc(.875 * var(--sci-icon-size))}:host button:is(.menu-item,#sci-reset).menu-indicator{position:relative}:host button:is(.menu-item,#sci-reset).menu-indicator:after{content:\"\";position:absolute;box-sizing:border-box;width:var(--sci-toolbar-item-menu-indicator-size);height:var(--sci-toolbar-item-menu-indicator-size);border:var(--sci-toolbar-item-menu-indicator-size) solid transparent;border-right-color:var(--sci-toolbar-item-menu-indicator-color);border-bottom-color:var(--sci-toolbar-item-menu-indicator-color);bottom:calc(var(--sci-corner) / 4);right:calc(var(--sci-corner) / 4)}:host button:is(.menu-item,#sci-reset).menu-indicator:disabled:after{border-right-color:var(--sci-toolbar-item-menu-indicator-color-disabled);border-bottom-color:var(--sci-toolbar-item-menu-indicator-color-disabled)}@container not style(--\\275sci-toolbar-split-button: true){:host button:is(.menu-item,#sci-reset).checked{border-color:var(--sci-toolbar-item-border-color-checked)}:host button:is(.menu-item,#sci-reset).checked:not(:disabled){background-color:var(--sci-toolbar-item-background-color-checked)}@container not style(--sci-toolbar-item-border-color-hover: transparent){:host button:is(.menu-item,#sci-reset):hover{border-color:var(--sci-toolbar-item-border-color-hover)}}}:host button:is(.menu-item,#sci-reset):disabled{color:var(--sci-toolbar-item-text-color-disabled)}:host button:is(.menu-item,#sci-reset):hover:not(:disabled){background-color:var(--sci-toolbar-item-background-color-hover)}:host button:is(.menu-item,#sci-reset):active:not(:disabled){background-color:var(--sci-toolbar-item-background-color-active)}:host button:is(.menu-item,#sci-reset):focus:not(:focus-visible){outline:none}:host button:is(.menu-item,#sci-reset):focus-visible{outline:var(--sci-toolbar-item-outline-width) solid var(--sci-color-accent)}:host button:is(.menu-item,#sci-reset).menu-open{background-color:var(--sci-toolbar-item-background-color-hover)}@container style(--sci-toolbar-split-button-menu-open: true){:host button:is(.menu-item,#sci-reset){background-color:var(--sci-toolbar-item-background-color-hover)}}\n"] }]
1282
1278
  }], ctorParameters: () => [], propDecorators: { menuItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "menuItems", required: true }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], popoverViewContainerRef: [{ type: i0.Input, args: [{ isSignal: true, alias: "popoverViewContainerRef", required: true }] }], _childToolbarGroups: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => SciToolbarGroupComponent), { isSignal: true }] }] } });
1283
1279
 
1284
1280
  /*
@@ -1445,15 +1441,14 @@ class SciMenuComponent {
1445
1441
  _popoverRef = inject(PopoverRef);
1446
1442
  _filterField = viewChild(SciMenuFilterComponent, /* @ts-ignore */
1447
1443
  ...(ngDevMode ? [{ debugName: "_filterField" }] : /* istanbul ignore next */ []));
1448
- _viewport = viewChild(SciViewportComponent, /* @ts-ignore */
1444
+ _viewport = viewChild('viewport', /* @ts-ignore */
1449
1445
  ...(ngDevMode ? [{ debugName: "_viewport" }] : /* istanbul ignore next */ []));
1450
1446
  hasGlyphArea = computed(() => this.glyphArea() ?? requiresGlyphArea(this.menuItems()), /* @ts-ignore */
1451
1447
  ...(ngDevMode ? [{ debugName: "hasGlyphArea" }] : /* istanbul ignore next */ []));
1452
1448
  menuItemsFiltered = computed(() => this.menuItems().filter(menuItem => this.matchesFilter(menuItem)()), /* @ts-ignore */
1453
1449
  ...(ngDevMode ? [{ debugName: "menuItemsFiltered" }] : /* istanbul ignore next */ []));
1454
1450
  popoverViewContainerRef = viewChild.required('popover_view_container_ref', { ...(ngDevMode ? { debugName: "popoverViewContainerRef" } : /* istanbul ignore next */ {}), read: ViewContainerRef });
1455
- scrolling = computed(() => this._viewport()?.scrolling(), /* @ts-ignore */
1456
- ...(ngDevMode ? [{ debugName: "scrolling" }] : /* istanbul ignore next */ []));
1451
+ scrolling = this.computeScrolling();
1457
1452
  activeSubmenuItem = linkedSignal({ ...(ngDevMode ? { debugName: "activeSubmenuItem" } : /* istanbul ignore next */ {}), source: this.menuItemsFiltered, // Unset when filtered menu items change. Otherwise, popopver may lose anchor and render left-top of the page viewport.
1458
1453
  computation: () => null,
1459
1454
  equal: (a, b) => a?.menuItem === b?.menuItem });
@@ -1595,14 +1590,8 @@ class SciMenuComponent {
1595
1590
  // Wait until menu items are available, maximal until idle; may initially be empty due to asynchronous menu contributions.
1596
1591
  toObservable(this.menuItems)
1597
1592
  .pipe(filter(menuItems => !!menuItems.length), observeOn(animationFrameScheduler), // Wait until next render cycle to capture menu width.
1598
- raceWith(new Promise(resolve => {
1599
- if (typeof requestIdleCallback === 'function') {
1600
- requestIdleCallback(resolve, { timeout: 250 });
1601
- }
1602
- else {
1603
- setTimeout(resolve, 250); // Fallback if browser does not support `requestIdleCallback`, e.g., Safari
1604
- }
1605
- })), take(1), takeUntilDestroyed())
1593
+ raceWith(onIdle({ timeout: 250 })), // Fallback if no menu items are contributed.
1594
+ take(1), takeUntilDestroyed())
1606
1595
  .subscribe(() => {
1607
1596
  this.menuSize.update(size => ({ ...size, width: `${host.getBoundingClientRect().width}px` }));
1608
1597
  });
@@ -1714,6 +1703,18 @@ class SciMenuComponent {
1714
1703
  });
1715
1704
  });
1716
1705
  }
1706
+ /**
1707
+ * Tracks whether currently scrolling the viewport.
1708
+ */
1709
+ computeScrolling() {
1710
+ const zone = inject(NgZone);
1711
+ return rxResource({
1712
+ defaultValue: false,
1713
+ params: () => this._viewport()?.nativeElement,
1714
+ stream: ({ params: viewport }) => fromEvent(viewport, 'scroll', { passive: true })
1715
+ .pipe(switchMap(() => concat(of(true), timer(150).pipe(map(() => false)))), startWith(false), subscribeIn(fn => zone.runOutsideAngular(fn))),
1716
+ }).value;
1717
+ }
1717
1718
  /**
1718
1719
  * Evaluates whether the given menu item (or any of its child menu items) match the active filter.
1719
1720
  */
@@ -1734,7 +1735,7 @@ class SciMenuComponent {
1734
1735
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SciMenuComponent, isStandalone: true, selector: "sci-menu", inputs: { menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null }, group: { classPropertyName: "group", publicName: "group", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, minWidth: { classPropertyName: "minWidth", publicName: "minWidth", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, glyphArea: { classPropertyName: "glyphArea", publicName: "glyphArea", isSignal: true, isRequired: false, transformFunction: null }, anchorWidth: { classPropertyName: "anchorWidth", publicName: "anchorWidth", isSignal: true, isRequired: false, transformFunction: null }, cssClass: { classPropertyName: "cssClass", publicName: "cssClass", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--\u0275sci-menu-width": "menuSize().width", "style.--\u0275sci-menu-min-width": "menuSize().minWidth", "style.--\u0275sci-menu-max-width": "menuSize().maxWidth", "style.--\u0275sci-menu-max-height": "menuSize().maxHeight", "style.--\u0275sci-menu-scrolling": "scrolling() ? `true` : null", "attr.data-glyph-area": "hasGlyphArea() ? null : `none`", "style.visibility": "popoverHidden() ? `hidden` : null", "attr.tabindex": "role === `menu` ? `-1` : null", "class": "cssClass()" } }, providers: [
1735
1736
  providePopoverRef(),
1736
1737
  provideMenuFilter(),
1737
- ], viewQueries: [{ propertyName: "_filterField", first: true, predicate: SciMenuFilterComponent, descendants: true, isSignal: true }, { propertyName: "_viewport", first: true, predicate: SciViewportComponent, descendants: true, isSignal: true }, { propertyName: "popoverViewContainerRef", first: true, predicate: ["popover_view_container_ref"], descendants: true, read: ViewContainerRef, isSignal: true }], hostDirectives: [{ directive: i1$1.SciAttributesDirective, inputs: ["sciAttributes", "attributes"] }], ngImport: i0, template: "<!-- Filter Field -->\r\n@let filter = this.filter();\r\n@if (filter) {\r\n <div class=\"filter e2e-filter\">\r\n <sci-icon>scion.search</sci-icon>\r\n @let message = filter.placeholder?.() ?? '%scion.components.type_to_filter.action';\r\n <sci-menu-filter (textChange)=\"onFilterChange($event)\" [placeholder]=\"(message | sciText)()\"/>\r\n </div>\r\n <hr>\r\n}\r\n\r\n<!-- Group Header -->\r\n@if (group(); as group) {\r\n @if (group.collapsible) {\r\n <button class=\"group-header e2e-group-header\" (click)=\"onGroupHeaderButtonClick()\" (mouseenter)=\"onMenuItemMouseEnter(null)\">\r\n <sci-icon>{{isGroupExpanded() ? 'scion.chevron_down' : 'scion.chevron_right'}}</sci-icon>\r\n\r\n <div class=\"content\">\r\n <ng-container *ngTemplateOutlet=\"group_header_template\"/>\r\n </div>\r\n </button>\r\n } @else if (group.label) {\r\n <header class=\"group-header e2e-group-header\">\r\n <ng-container *ngTemplateOutlet=\"group_header_template\"/>\r\n </header>\r\n }\r\n\r\n <!-- Template for rendering group header. -->\r\n <ng-template #group_header_template>\r\n <sci-menu-group-label>{{group.label}}</sci-menu-group-label>\r\n\r\n @if (group.actions.length && !this.disabled()) {\r\n <sci-toolbar-group [menuItems]=\"group.actions\"\r\n [orientation]=\"'horizontal'\"\r\n [popoverViewContainerRef]=\"popoverViewContainerRef()\"\r\n (click)=\"$event.stopPropagation()\"\r\n class=\"actions e2e-actions\"/>\r\n }\r\n </ng-template>\r\n}\r\n\r\n<!-- Menu Items -->\r\n@if (isGroupExpanded()) {\r\n @if (maxHeight()) {\r\n <sci-viewport>\r\n <ng-container *ngTemplateOutlet=\"menu_items_template\"/>\r\n </sci-viewport>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"menu_items_template\"/>\r\n }\r\n\r\n <!-- Renders menu items. -->\r\n <ng-template #menu_items_template>\r\n @for (menuItem of menuItemsFiltered(); track $index) {\r\n @let disabled = this.disabled() || menuItem.disabled?.() || false;\r\n\r\n @switch (menuItem.type) {\r\n @case ('menu-item') {\r\n <!-- Menu Item -->\r\n @if (!menuItem.menu) {\r\n @let hasActionToolbar = !disabled && menuItem.actions?.length;\r\n @let showAcceleratorInTooltip = menuItem.accelerator && hasActionToolbar;\r\n\r\n <button [attr.disabled]=\"disabled || null\"\r\n [attr.title]=\"showAcceleratorInTooltip ? (menuItem.accelerator | sciFormatAccelerator:menuItem.tooltip?.()) : menuItem.tooltip?.()\"\r\n [class.checked]=\"menuItem.checked?.()\"\r\n [class.active]=\"menuItem.active?.()\"\r\n [class]=\"menuItem.cssClass\" class=\"menu-item e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\"\r\n (mouseenter)=\"onMenuItemMouseEnter(menuItem)\"\r\n (click)=\"onSelect(menuItem)\">\r\n <!-- Render icon if glyph area. -->\r\n @if (hasGlyphArea() && !group()?.hideGlyphArea) {\r\n <ng-container *ngTemplateOutlet=\"icon_template; context: {$implicit: menuItem}\"/>\r\n }\r\n\r\n <!-- Render label, accelerator and action toolbar. -->\r\n <div class=\"content\">\r\n <ng-container *ngTemplateOutlet=\"label_template; context: {$implicit: menuItem}\"/>\r\n\r\n @if (menuItem.accelerator) {\r\n <span class=\"accelerator\">{{menuItem.accelerator | sciFormatAccelerator}}</span>\r\n }\r\n\r\n @if (hasActionToolbar) {\r\n <sci-toolbar-group [menuItems]=\"menuItem.actions!\"\r\n [orientation]=\"'horizontal'\"\r\n [popoverViewContainerRef]=\"popoverViewContainerRef()\"\r\n [class.menu-open]=\"actions_toolbar.menuOpen()\"\r\n class=\"actions e2e-actions\"\r\n (click)=\"$event.stopPropagation()\"\r\n #actions_toolbar/>\r\n }\r\n </div>\r\n </button>\r\n }\r\n\r\n <!-- Submenu Item -->\r\n @if (menuItem.menu) {\r\n <button [attr.disabled]=\"disabled || null\"\r\n [attr.title]=\"menuItem.tooltip?.()\"\r\n [class.open]=\"activeSubmenuItem()?.menuItem === menuItem\"\r\n [class]=\"menuItem.cssClass\" class=\"menu e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\"\r\n (mouseenter)=\"onSubmenuItemMouseEnter({menuItem, element})\"\r\n (click)=\"onSubmenuItemClick({menuItem, element})\"\r\n #element>\r\n @if (hasGlyphArea() && !group()?.hideGlyphArea) {\r\n <!-- Render icon if glyph area. -->\r\n <ng-container *ngTemplateOutlet=\"icon_template; context: {$implicit: menuItem}\"/>\r\n }\r\n\r\n <!-- Render label. -->\r\n <div class=\"content\">\r\n <ng-container *ngTemplateOutlet=\"label_template; context: {$implicit: menuItem}\"/>\r\n <sci-icon class=\"chevron\">scion.chevron_right</sci-icon>\r\n </div>\r\n </button>\r\n }\r\n }\r\n @case ('group') {\r\n <sci-menu-group [group]=\"menuItem\"\r\n [glyphArea]=\"hasGlyphArea()\"\r\n [disabled]=\"disabled\"\r\n [cssClass]=\"menuItem.cssClass ?? []\"/>\r\n }\r\n }\r\n } @empty {\r\n <!-- TODO [Angular 23] Replace with optional chaining operator once the Angular compiler no longer logs the NG8107 false-positive warning. -->\r\n <!-- @let message = filter?.notFoundMessage?.() ?? '%scion.components.no_items.message'; -->\r\n @let message = (filter && filter.notFoundMessage?.()) ?? '%scion.components.no_items.message';\r\n <div class=\"message no-items e2e-no-items\">{{(message | sciText)()}}</div>\r\n }\r\n </ng-template>\r\n}\r\n\r\n<!-- Location where to insert the menu popover. Must not be a child of the menu item button to prevent hovering the menu item when hovering menu items in the popover. -->\r\n<ng-container #popover_view_container_ref/>\r\n\r\n<!-- Renders the icon of the passed menu item. -->\r\n<ng-template #icon_template let-menuItem>\r\n @if (menuItem.checked !== undefined) {\r\n <sci-icon>{{menuItem.checked() ? 'scion.checkmark' : undefined}}</sci-icon>\r\n } @else if (menuItem.iconLigature) {\r\n <sci-icon>{{menuItem.iconLigature()}}</sci-icon>\r\n } @else if (menuItem.iconComponent) {\r\n <sci-menu-item-icon>\r\n <ng-container *sciComponentOutlet=\"menuItem.iconComponent\"/>\r\n </sci-menu-item-icon>\r\n } @else {\r\n <sci-menu-item-icon/>\r\n }\r\n</ng-template>\r\n\r\n<!-- Renders the label of the passed menu item. -->\r\n<ng-template #label_template let-menuItem>\r\n @if (menuItem.labelText) {\r\n <sci-menu-item-label>\r\n {{menuItem.labelText()}}\r\n </sci-menu-item-label>\r\n } @else if (menuItem.labelComponent) {\r\n <sci-menu-item-label>\r\n <ng-container *sciComponentOutlet=\"menuItem.labelComponent\"/>\r\n </sci-menu-item-label>\r\n }\r\n</ng-template>\r\n", styles: ["@charset \"UTF-8\";:host{--sci-icon-size: var(--sci-menu-item-size);--\\275sci-menu-item-padding-inline: calc(.5 * var(--sci-menu-item-size));--\\275sci-menu-item-padding-block: calc(.225 * var(--sci-menu-item-size));--\\275sci-menu-item-min-height: calc(var(--sci-menu-item-size) + 2px);--\\275sci-menu-item-gap-inline: calc(.75 * var(--sci-menu-item-size));--\\275sci-menu-item-gap-block: calc(.125 * var(--sci-menu-item-size));--\\275sci-menu-padding-inline: .4em;--\\275sci-menu-padding-block: .3em;--\\275sci-menu-glyph-area: true;--\\275sci-menu-action-background-color-hover: color-mix(in srgb, var(--sci-menu-item-background-color-hover) 90%, light-dark(var(--sci-static-color-black), var(--sci-static-color-white)));--\\275sci-menu-action-background-color-active: color-mix(in srgb, var(--sci-menu-item-background-color-active) 90%, light-dark(var(--sci-static-color-black), var(--sci-static-color-white)));--\\275sci-menu-item-chevron-x-offset: calc(var(--sci-menu-item-size) / 4);--\\275sci-menu-font-size: var(--sci-menu-font-size, calc(.8125 * var(--sci-menu-item-size)));--\\275sci-menu-width: max-content;--\\275sci-menu-min-width: initial;--\\275sci-menu-max-width: initial;--\\275sci-menu-max-height: initial;--\\275sci-menu-scrolling: false;display:grid;gap:var(--\\275sci-menu-item-gap-block) var(--\\275sci-menu-item-gap-inline);align-items:center;font-size:var(--\\275sci-menu-font-size);border:1px solid var(--sci-color-border);border-radius:var(--sci-menu-border-radius);background-color:var(--sci-color-background-elevation);padding:var(--\\275sci-menu-padding-block) var(--\\275sci-menu-padding-inline);outline:none;box-sizing:border-box;width:var(--\\275sci-menu-width);min-width:var(--\\275sci-menu-min-width);max-width:var(--\\275sci-menu-max-width);-webkit-user-select:none;user-select:none;grid-template-columns:var(--sci-menu-item-size) minmax(0,1fr)}:host[data-glyph-area=none]{--\\275sci-menu-glyph-area: false;grid-template-columns:minmax(0,1fr)}:host[popover]{position:fixed;margin:unset;inset:unset;height:auto}:host[popover]:not(:popover-open){display:none}:host:not([popover]){grid-column:1/-1;grid-template-columns:subgrid;border:unset;border-radius:unset;color:inherit;padding:unset;background-color:inherit}:host>header.group-header{grid-column:1/-1;display:flex;gap:var(--\\275sci-menu-item-gap-inline);justify-content:space-between;align-items:center;padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline);box-sizing:content-box;min-height:var(--\\275sci-menu-item-min-height)}:host>header.group-header>sci-menu-group-label{flex:auto;color:var(--sci-menu-group-header-text-color);font-family:var(--sci-menu-group-header-font-family),sans-serif;font-weight:var(--sci-menu-group-header-font-weight);font-size:var(--sci-menu-group-header-font-size);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host>header.group-header>sci-toolbar-group.actions{flex:none;align-self:center}:host>button:is(.group-header,#sci-reset){all:unset;text-wrap:nowrap;padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline);border-radius:var(--sci-menu-item-border-radius);-webkit-user-select:none;user-select:none;cursor:var(--sci-menu-item-cursor);color:var(--sci-menu-item-text-color);min-height:var(--\\275sci-menu-item-min-height);box-sizing:content-box}@container not style(--\\275sci-menu-scrolling: true){:host>button:is(.group-header,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-menu-item-background-color-hover)}}:host>button:is(.group-header,#sci-reset):active:where(:not(:disabled)):focus{background-color:var(--sci-menu-item-background-color-active)}:host>button:is(.group-header,#sci-reset):focus:not(:focus-visible){outline:none}:host>button:is(.group-header,#sci-reset):focus-visible{outline:var(--sci-menu-item-outline-width) solid var(--sci-color-accent)}:host>button:is(.group-header,#sci-reset):disabled{color:var(--sci-menu-item-text-color-disabled)}:host>button:is(.group-header,#sci-reset){grid-column:1/-1;display:inline-grid;grid-template-columns:subgrid;align-items:center}:host>button:is(.group-header,#sci-reset):hover{--\\275sci-menu-item-hover: true}:host>button:is(.group-header,#sci-reset)>sci-icon{--sci-icon-size: calc(.875 * var(--sci-icon-size))}:host>button:is(.group-header,#sci-reset)>div.content{display:flex;gap:var(--\\275sci-menu-item-gap-inline);justify-content:space-between;align-items:center}:host>button:is(.group-header,#sci-reset)>div.content>sci-menu-group-label{flex:auto;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host>button:is(.group-header,#sci-reset)>div.content>sci-toolbar-group.actions{flex:none;align-self:center}@container style(--\\275sci-menu-item-hover: true){:host>button:is(.group-header,#sci-reset)>div.content>sci-toolbar-group.actions{--sci-toolbar-item-background-color-hover: var(--\\275sci-menu-action-background-color-hover);--sci-toolbar-item-background-color-active: var(--\\275sci-menu-action-background-color-active)}}:host:has(>sci-viewport){padding:var(--\\275sci-menu-padding-block) 0}:host:has(>sci-viewport)>header.group-header,:host:has(>sci-viewport)>button.group-header,:host:has(>sci-viewport)>div.filter,:host:has(>sci-viewport)>hr{margin:0 var(--\\275sci-menu-padding-inline)}:host>sci-viewport{grid-column:1/-1;max-height:var(--\\275sci-menu-max-height);box-sizing:border-box}:host>sci-viewport::part(content){grid-column:1/-1;display:grid;gap:var(--\\275sci-menu-item-gap-block) var(--\\275sci-menu-item-gap-inline);grid-template-columns:var(--sci-menu-item-size) minmax(0,1fr);padding:2px var(--\\275sci-menu-padding-inline)}@container style(--\\275sci-menu-glyph-area: false){:host>sci-viewport::part(content){grid-template-columns:minmax(0,1fr)}}:host>div.filter{grid-column:1/-1;display:inline-grid;grid-template-columns:subgrid;align-items:center;padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline);border-radius:var(--sci-menu-filter-outline-radius);box-sizing:content-box;min-height:var(--\\275sci-menu-item-min-height)}:host>div.filter:focus-within{outline:var(--sci-menu-filter-outline-width) solid var(--sci-color-accent)}@container style(--\\275sci-menu-glyph-area: false){:host>div.filter{display:flex;gap:var(--\\275sci-menu-item-gap-inline)}:host>div.filter>sci-icon{flex:none}:host>div.filter>sci-menu-filter{flex:auto}}:host>hr{all:unset;grid-column:1/-1;height:1px;background-color:var(--sci-color-border)}:host div.message.no-items{grid-column:1/-1;justify-self:center;color:var(--sci-color-text-subtlest);padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline)}:host *:not(hr)+sci-menu-group:not(:has(>sci-menu-group:first-child)):before{content:\"\";grid-column:1/-1;height:1px;background-color:var(--sci-color-border)}:host sci-menu-group:not(:last-child):not(:has(+sci-menu-group,+sci-menu:last-child)):after{content:\"\";grid-column:1/-1;height:1px;background-color:var(--sci-color-border)}:host button:is(.menu-item,.menu,#sci-reset){all:unset;text-wrap:nowrap;padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline);border-radius:var(--sci-menu-item-border-radius);-webkit-user-select:none;user-select:none;cursor:var(--sci-menu-item-cursor);color:var(--sci-menu-item-text-color);min-height:var(--\\275sci-menu-item-min-height);box-sizing:content-box}@container not style(--\\275sci-menu-scrolling: true){:host button:is(.menu-item,.menu,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-menu-item-background-color-hover)}}:host button:is(.menu-item,.menu,#sci-reset):active:where(:not(:disabled)):focus{background-color:var(--sci-menu-item-background-color-active)}:host button:is(.menu-item,.menu,#sci-reset):focus:not(:focus-visible){outline:none}:host button:is(.menu-item,.menu,#sci-reset):focus-visible{outline:var(--sci-menu-item-outline-width) solid var(--sci-color-accent)}:host button:is(.menu-item,.menu,#sci-reset):disabled{color:var(--sci-menu-item-text-color-disabled)}:host button:is(.menu-item,.menu,#sci-reset){grid-column:1/-1;display:inline-grid;grid-template-columns:subgrid;align-items:center;position:relative}:host button:is(.menu-item,.menu,#sci-reset):hover{--\\275sci-menu-item-hover: true}:host button:is(.menu-item,.menu,#sci-reset).checked{--\\275sci-menu-item-checked: true}:host button:is(.menu-item,.menu,#sci-reset).active{--\\275sci-menu-item-active: true}:host button:is(.menu-item,.menu,#sci-reset):has(sci-toolbar-group.actions.menu-open){--\\275sci-menu-item-actions-menu-open: true}:host button:is(.menu-item,.menu,#sci-reset):not(:disabled):is(:hover,.active,:has(sci-toolbar-group.actions.menu-open)){--\\275sci-action-toolbar-visible: true}:host button:is(.menu-item,.menu,#sci-reset).menu-item.active:before{position:absolute;content:\"\";box-sizing:border-box;height:calc(100% - var(--sci-menu-item-active-indicator-border-radius));width:var(--sci-menu-item-active-indicator-size);left:calc(-1 * var(--\\275sci-menu-padding-inline) + 1px);border-radius:var(--sci-menu-item-active-indicator-border-radius);background-color:var(--sci-menu-item-active-indicator-background-color)}:host button:is(.menu-item,.menu,#sci-reset).menu.open{background-color:var(--sci-menu-item-background-color-hover)}:host button:is(.menu-item,.menu,#sci-reset).menu>div.content>sci-icon.chevron{transform:translate(var(--\\275sci-menu-item-chevron-x-offset));--sci-icon-size: calc(.875 * var(--sci-icon-size))}:host button:is(.menu-item,.menu,#sci-reset).menu-item.checked>sci-icon:first-child{--sci-icon-size: calc(.875 * var(--sci-icon-size))}:host button:is(.menu-item,.menu,#sci-reset)>sci-menu-item-icon{display:inline-grid;place-content:center;height:var(--sci-menu-item-size);width:var(--sci-menu-item-size);overflow:hidden}:host button:is(.menu-item,.menu,#sci-reset)>div.content{display:flex;align-items:center;gap:var(--\\275sci-menu-item-gap-inline)}:host button:is(.menu-item,.menu,#sci-reset)>div.content:first-child{grid-column:1/-1}:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-menu-item-label{flex:auto;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host button:is(.menu-item,.menu,#sci-reset)>div.content>span.accelerator{flex:none;color:var(--sci-menu-item-accelerator-text-color);font-size:.9em}@container style(--\\275sci-action-toolbar-visible: true){:host button:is(.menu-item,.menu,#sci-reset)>div.content>span.accelerator:has(+sci-toolbar-group.actions){display:none}}:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-toolbar-group.actions{flex:none;align-self:center}@container style(--\\275sci-menu-item-hover: true){:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-toolbar-group.actions{--sci-toolbar-item-background-color-hover: var(--\\275sci-menu-action-background-color-hover);--sci-toolbar-item-background-color-active: var(--\\275sci-menu-action-background-color-active)}}@container not style(--\\275sci-action-toolbar-visible: true){:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-toolbar-group.actions{display:none}}@container style(--\\275sci-menu-scrolling: true) and (not style(--\\275sci-menu-item-active: true)) and (not style(--\\275sci-menu-item-actions-menu-open: true)){:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-toolbar-group.actions{visibility:hidden}}:host sci-toolbar-group.actions{transform:translate(var(--\\275sci-menu-item-chevron-x-offset));--sci-toolbar-item-size: var(--sci-menu-item-size);--\\275sci-toolbar-item-padding-block: 0}\n"], dependencies: [{ kind: "component", type: SciMenuGroupComponent, selector: "sci-menu-group", inputs: ["group", "glyphArea", "disabled", "cssClass"] }, { kind: "component", type: SciMenuFilterComponent, selector: "sci-menu-filter", inputs: ["placeholder", "text"], outputs: ["textChange"] }, { kind: "component", type: SciToolbarGroupComponent, selector: "sci-toolbar-group", inputs: ["menuItems", "orientation", "disabled", "popoverViewContainerRef"] }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }, { kind: "directive", type: SciComponentOutletDirective, selector: "ng-template[sciComponentOutlet]", inputs: ["sciComponentOutlet"] }, { kind: "directive", type: SciAttributesDirective, selector: "[sciAttributes]", inputs: ["sciAttributes"] }, { kind: "component", type: SciIconComponent, selector: "sci-icon" }, { kind: "component", type: SciMenuGroupLabelComponent, selector: "sci-menu-group-label" }, { kind: "component", type: SciMenuItemLabelComponent, selector: "sci-menu-item-label" }, { kind: "component", type: SciMenuItemIconComponent, selector: "sci-menu-item-icon" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: SciTextPipe, name: "sciText" }, { kind: "pipe", type: SciFormatAcceleratorPipe, name: "sciFormatAccelerator" }] });
1738
+ ], viewQueries: [{ propertyName: "_filterField", first: true, predicate: SciMenuFilterComponent, descendants: true, isSignal: true }, { propertyName: "_viewport", first: true, predicate: ["viewport"], descendants: true, isSignal: true }, { propertyName: "popoverViewContainerRef", first: true, predicate: ["popover_view_container_ref"], descendants: true, read: ViewContainerRef, isSignal: true }], hostDirectives: [{ directive: i1$1.SciAttributesDirective, inputs: ["sciAttributes", "attributes"] }], ngImport: i0, template: "<!-- Filter Field -->\r\n@let filter = this.filter();\r\n@if (filter) {\r\n <div class=\"filter e2e-filter\">\r\n <sci-icon>scion:search</sci-icon>\r\n @let message = filter.placeholder?.() ?? '%scion:components:type_to_filter.action';\r\n <sci-menu-filter (textChange)=\"onFilterChange($event)\" [placeholder]=\"(message | sciText)()\"/>\r\n </div>\r\n <hr>\r\n}\r\n\r\n<!-- Group Header -->\r\n@if (group(); as group) {\r\n @if (group.collapsible) {\r\n <button class=\"group-header e2e-group-header\" (click)=\"onGroupHeaderButtonClick()\" (mouseenter)=\"onMenuItemMouseEnter(null)\">\r\n <sci-icon>{{isGroupExpanded() ? 'scion:chevron_down' : 'scion:chevron_right'}}</sci-icon>\r\n\r\n <div class=\"content\">\r\n <ng-container *ngTemplateOutlet=\"group_header_template\"/>\r\n </div>\r\n </button>\r\n } @else if (group.label) {\r\n <header class=\"group-header e2e-group-header\">\r\n <ng-container *ngTemplateOutlet=\"group_header_template\"/>\r\n </header>\r\n }\r\n\r\n <!-- Template for rendering group header. -->\r\n <ng-template #group_header_template>\r\n <sci-menu-group-label>{{group.label}}</sci-menu-group-label>\r\n\r\n @if (group.actions.length && !this.disabled()) {\r\n <sci-toolbar-group [menuItems]=\"group.actions\"\r\n [orientation]=\"'horizontal'\"\r\n [popoverViewContainerRef]=\"popoverViewContainerRef()\"\r\n (click)=\"$event.stopPropagation()\"\r\n class=\"actions e2e-actions\"/>\r\n }\r\n </ng-template>\r\n}\r\n\r\n<!-- Menu Items -->\r\n@if (isGroupExpanded()) {\r\n @if (maxHeight()) {\r\n <!-- TODO [#384] Replace with sci-viewport -->\r\n <div class=\"viewport e2e-viewport\" #viewport>\r\n <ng-container *ngTemplateOutlet=\"menu_items_template\"/>\r\n </div>\r\n <sci-scrollbar direction=\"vscroll\" [viewport]=\"viewport\"/>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"menu_items_template\"/>\r\n }\r\n\r\n <!-- Renders menu items. -->\r\n <ng-template #menu_items_template>\r\n @for (menuItem of menuItemsFiltered(); track $index) {\r\n @let disabled = this.disabled() || menuItem.disabled?.() || false;\r\n\r\n @switch (menuItem.type) {\r\n @case ('menu-item') {\r\n <!-- Menu Item -->\r\n @if (!menuItem.menu) {\r\n @let hasActionToolbar = !disabled && menuItem.actions?.length;\r\n @let showAcceleratorInTooltip = menuItem.accelerator && hasActionToolbar;\r\n\r\n <button [attr.disabled]=\"disabled || null\"\r\n [attr.title]=\"showAcceleratorInTooltip ? (menuItem.accelerator | sciFormatAccelerator:menuItem.tooltip?.()) : menuItem.tooltip?.()\"\r\n [class.checked]=\"menuItem.checked?.()\"\r\n [class.active]=\"menuItem.active?.()\"\r\n [class]=\"menuItem.cssClass\" class=\"menu-item e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\"\r\n (mouseenter)=\"onMenuItemMouseEnter(menuItem)\"\r\n (click)=\"onSelect(menuItem)\">\r\n <!-- Render icon if glyph area. -->\r\n @if (hasGlyphArea() && !group()?.hideGlyphArea) {\r\n <ng-container *ngTemplateOutlet=\"icon_template; context: {$implicit: menuItem}\"/>\r\n }\r\n\r\n <div class=\"content\">\r\n <!-- Render icon inline if checkable. -->\r\n @if (menuItem.iconLigature && menuItem.checked) {\r\n <sci-icon>{{menuItem.iconLigature()}}</sci-icon>\r\n }\r\n\r\n <!-- Render icon component inline if checkable. -->\r\n @if (menuItem.iconComponent && menuItem.checked) {\r\n <sci-menu-item-icon>\r\n <ng-container *sciComponentOutlet=\"menuItem.iconComponent\"/>\r\n </sci-menu-item-icon>\r\n }\r\n\r\n <!-- Render label. -->\r\n <ng-container *ngTemplateOutlet=\"label_template; context: {$implicit: menuItem}\"/>\r\n\r\n <!-- Render accelerator. -->\r\n @if (menuItem.accelerator) {\r\n <span class=\"accelerator\">{{menuItem.accelerator | sciFormatAccelerator}}</span>\r\n }\r\n\r\n <!-- Render actions. -->\r\n @if (hasActionToolbar) {\r\n <sci-toolbar-group [menuItems]=\"menuItem.actions!\"\r\n [orientation]=\"'horizontal'\"\r\n [popoverViewContainerRef]=\"popoverViewContainerRef()\"\r\n [class.menu-open]=\"actions_toolbar.menuOpen()\"\r\n class=\"actions e2e-actions\"\r\n (click)=\"$event.stopPropagation()\"\r\n #actions_toolbar/>\r\n }\r\n </div>\r\n </button>\r\n }\r\n\r\n <!-- Submenu Item -->\r\n @if (menuItem.menu) {\r\n <button [attr.disabled]=\"disabled || null\"\r\n [attr.title]=\"menuItem.tooltip?.()\"\r\n [class.open]=\"activeSubmenuItem()?.menuItem === menuItem\"\r\n [class]=\"menuItem.cssClass\" class=\"menu e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\"\r\n (mouseenter)=\"onSubmenuItemMouseEnter({menuItem, element})\"\r\n (click)=\"onSubmenuItemClick({menuItem, element})\"\r\n #element>\r\n @if (hasGlyphArea() && !group()?.hideGlyphArea) {\r\n <!-- Render icon if glyph area. -->\r\n <ng-container *ngTemplateOutlet=\"icon_template; context: {$implicit: menuItem}\"/>\r\n }\r\n\r\n <!-- Render label. -->\r\n <div class=\"content\">\r\n <ng-container *ngTemplateOutlet=\"label_template; context: {$implicit: menuItem}\"/>\r\n <sci-icon class=\"chevron\">scion:chevron_right</sci-icon>\r\n </div>\r\n </button>\r\n }\r\n }\r\n @case ('group') {\r\n <sci-menu-group [group]=\"menuItem\"\r\n [glyphArea]=\"hasGlyphArea()\"\r\n [disabled]=\"disabled\"\r\n [cssClass]=\"menuItem.cssClass ?? []\"/>\r\n }\r\n }\r\n } @empty {\r\n <!-- TODO [Angular 23] Replace with optional chaining operator once the Angular compiler no longer logs the NG8107 false-positive warning. -->\r\n <!-- @let message = filter?.notFoundMessage?.() ?? '%scion:components:no_items.message'; -->\r\n @let message = (filter && filter.notFoundMessage?.()) ?? '%scion:components:no_items.message';\r\n <div class=\"message no-items e2e-no-items\">{{(message | sciText)()}}</div>\r\n }\r\n </ng-template>\r\n}\r\n\r\n<!-- Location where to insert the menu popover. Must not be a child of the menu item button to prevent hovering the menu item when hovering menu items in the popover. -->\r\n<ng-container #popover_view_container_ref/>\r\n\r\n<!-- Renders the icon of the passed menu item. -->\r\n<ng-template #icon_template let-menuItem>\r\n @if (menuItem.checked !== undefined) {\r\n <sci-icon data-checkmark>{{menuItem.checked() ? 'scion:checkmark' : undefined}}</sci-icon>\r\n } @else if (menuItem.iconLigature) {\r\n <sci-icon>{{menuItem.iconLigature()}}</sci-icon>\r\n } @else if (menuItem.iconComponent) {\r\n <sci-menu-item-icon>\r\n <ng-container *sciComponentOutlet=\"menuItem.iconComponent\"/>\r\n </sci-menu-item-icon>\r\n } @else {\r\n <sci-menu-item-icon/>\r\n }\r\n</ng-template>\r\n\r\n<!-- Renders the label of the passed menu item. -->\r\n<ng-template #label_template let-menuItem>\r\n @if (menuItem.labelText) {\r\n <sci-menu-item-label>\r\n {{menuItem.labelText()}}\r\n </sci-menu-item-label>\r\n } @else if (menuItem.labelComponent) {\r\n <sci-menu-item-label>\r\n <ng-container *sciComponentOutlet=\"menuItem.labelComponent\"/>\r\n </sci-menu-item-label>\r\n }\r\n</ng-template>\r\n", styles: ["@charset \"UTF-8\";:host{--sci-icon-size: var(--sci-menu-item-size);--\\275sci-menu-item-padding-inline: calc(.5 * var(--sci-menu-item-size));--\\275sci-menu-item-padding-block: calc(.225 * var(--sci-menu-item-size));--\\275sci-menu-item-min-height: calc(var(--sci-menu-item-size) + 2px);--\\275sci-menu-item-gap-inline: calc(.75 * var(--sci-menu-item-size));--\\275sci-menu-item-gap-block: calc(.125 * var(--sci-menu-item-size));--\\275sci-menu-padding-inline: .4em;--\\275sci-menu-padding-block: .3em;--\\275sci-menu-glyph-area: true;--\\275sci-menu-action-background-color-hover: color-mix(in srgb, var(--sci-menu-item-background-color-hover) 90%, light-dark(var(--sci-static-color-black), var(--sci-static-color-white)));--\\275sci-menu-action-background-color-active: color-mix(in srgb, var(--sci-menu-item-background-color-active) 90%, light-dark(var(--sci-static-color-black), var(--sci-static-color-white)));--\\275sci-menu-item-chevron-x-offset: calc(var(--sci-menu-item-size) / 4);--\\275sci-menu-font-size: var(--sci-menu-font-size, calc(.8125 * var(--sci-menu-item-size)));--\\275sci-menu-width: max-content;--\\275sci-menu-min-width: initial;--\\275sci-menu-max-width: initial;--\\275sci-menu-max-height: initial;--\\275sci-menu-scrolling: false;display:grid;gap:var(--\\275sci-menu-item-gap-block) var(--\\275sci-menu-item-gap-inline);align-items:center;font-size:var(--\\275sci-menu-font-size);border:1px solid var(--sci-color-border);border-radius:var(--sci-menu-border-radius);background-color:var(--sci-color-background-elevation);padding:var(--\\275sci-menu-padding-block) var(--\\275sci-menu-padding-inline);outline:none;box-sizing:border-box;width:var(--\\275sci-menu-width);min-width:var(--\\275sci-menu-min-width);max-width:var(--\\275sci-menu-max-width);-webkit-user-select:none;user-select:none;grid-template-columns:var(--sci-menu-item-size) minmax(0,1fr)}:host[data-glyph-area=none]{--\\275sci-menu-glyph-area: false;grid-template-columns:minmax(0,1fr)}:host[popover]{position:fixed;margin:unset;inset:unset;height:auto}:host[popover]:not(:popover-open){display:none}:host:not([popover]){grid-column:1/-1;grid-template-columns:subgrid;border:unset;border-radius:unset;color:inherit;padding:unset;background-color:inherit}:host>header.group-header{grid-column:1/-1;display:flex;gap:var(--\\275sci-menu-item-gap-inline);justify-content:space-between;align-items:center;padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline);box-sizing:content-box;min-height:var(--\\275sci-menu-item-min-height)}:host>header.group-header>sci-menu-group-label{flex:auto;color:var(--sci-menu-group-header-text-color);font-family:var(--sci-menu-group-header-font-family),sans-serif;font-weight:var(--sci-menu-group-header-font-weight);font-size:var(--sci-menu-group-header-font-size);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host>header.group-header>sci-toolbar-group.actions{flex:none;align-self:center}:host>button:is(.group-header,#sci-reset){all:unset;text-wrap:nowrap;padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline);border-radius:var(--sci-menu-item-border-radius);-webkit-user-select:none;user-select:none;cursor:var(--sci-menu-item-cursor);color:var(--sci-menu-item-text-color);min-height:var(--\\275sci-menu-item-min-height);box-sizing:content-box}@container not style(--\\275sci-menu-scrolling: true){:host>button:is(.group-header,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-menu-item-background-color-hover)}}:host>button:is(.group-header,#sci-reset):active:where(:not(:disabled)):focus{background-color:var(--sci-menu-item-background-color-active)}:host>button:is(.group-header,#sci-reset):focus:not(:focus-visible){outline:none}:host>button:is(.group-header,#sci-reset):focus-visible{outline:var(--sci-menu-item-outline-width) solid var(--sci-color-accent)}:host>button:is(.group-header,#sci-reset):disabled{color:var(--sci-menu-item-text-color-disabled)}:host>button:is(.group-header,#sci-reset){grid-column:1/-1;display:inline-grid;grid-template-columns:subgrid;align-items:center}:host>button:is(.group-header,#sci-reset):hover{--\\275sci-menu-item-hover: true}:host>button:is(.group-header,#sci-reset)>sci-icon{--sci-icon-size: calc(.875 * var(--sci-icon-size))}:host>button:is(.group-header,#sci-reset)>div.content{display:flex;gap:var(--\\275sci-menu-item-gap-inline);justify-content:space-between;align-items:center}:host>button:is(.group-header,#sci-reset)>div.content>sci-menu-group-label{flex:auto;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host>button:is(.group-header,#sci-reset)>div.content>sci-toolbar-group.actions{flex:none;align-self:center}@container style(--\\275sci-menu-item-hover: true){:host>button:is(.group-header,#sci-reset)>div.content>sci-toolbar-group.actions{--sci-toolbar-item-background-color-hover: var(--\\275sci-menu-action-background-color-hover);--sci-toolbar-item-background-color-active: var(--\\275sci-menu-action-background-color-active)}}:host>div.viewport{grid-column:1/-1;display:inline-grid;grid-template-columns:subgrid;overflow:auto;scrollbar-width:none;max-height:var(--\\275sci-menu-max-height);box-sizing:border-box;margin-block:calc(-1 * var(--sci-button-outline-width));padding-block:var(--sci-button-outline-width);margin-inline:calc(-1 * var(--\\275sci-menu-padding-inline));padding-inline:var(--\\275sci-menu-padding-inline);anchor-name:--sci-menu-viewport}:host>div.viewport:not(:hover)+sci-scrollbar{opacity:0}:host>div.viewport+sci-scrollbar{position:absolute;top:calc(anchor(--sci-menu-viewport top) + var(--sci-button-outline-width));right:anchor(--sci-menu-viewport right);bottom:calc(anchor(--sci-menu-viewport bottom) + var(--sci-button-outline-width))}:host>div.filter{grid-column:1/-1;display:inline-grid;grid-template-columns:subgrid;align-items:center;padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline);border-radius:var(--sci-menu-filter-outline-radius);box-sizing:content-box;min-height:var(--\\275sci-menu-item-min-height)}:host>div.filter:focus-within{outline:var(--sci-menu-filter-outline-width) solid var(--sci-color-accent)}@container style(--\\275sci-menu-glyph-area: false){:host>div.filter{display:flex;gap:var(--\\275sci-menu-item-gap-inline)}:host>div.filter>sci-icon{flex:none}:host>div.filter>sci-menu-filter{flex:auto}}:host>hr{all:unset;grid-column:1/-1;height:1px;background-color:var(--sci-color-border)}:host div.message.no-items{grid-column:1/-1;justify-self:center;color:var(--sci-color-text-subtlest);padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline)}:host *:not(hr)+sci-menu-group:not(:has(>sci-menu-group:first-child)):before{content:\"\";grid-column:1/-1;height:1px;background-color:var(--sci-color-border)}:host sci-menu-group:not(:last-child):not(:has(+sci-menu-group,+sci-menu:last-child)):after{content:\"\";grid-column:1/-1;height:1px;background-color:var(--sci-color-border)}:host button:is(.menu-item,.menu,#sci-reset){all:unset;text-wrap:nowrap;padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline);border-radius:var(--sci-menu-item-border-radius);-webkit-user-select:none;user-select:none;cursor:var(--sci-menu-item-cursor);color:var(--sci-menu-item-text-color);min-height:var(--\\275sci-menu-item-min-height);box-sizing:content-box}@container not style(--\\275sci-menu-scrolling: true){:host button:is(.menu-item,.menu,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-menu-item-background-color-hover)}}:host button:is(.menu-item,.menu,#sci-reset):active:where(:not(:disabled)):focus{background-color:var(--sci-menu-item-background-color-active)}:host button:is(.menu-item,.menu,#sci-reset):focus:not(:focus-visible){outline:none}:host button:is(.menu-item,.menu,#sci-reset):focus-visible{outline:var(--sci-menu-item-outline-width) solid var(--sci-color-accent)}:host button:is(.menu-item,.menu,#sci-reset):disabled{color:var(--sci-menu-item-text-color-disabled)}:host button:is(.menu-item,.menu,#sci-reset){grid-column:1/-1;display:inline-grid;grid-template-columns:subgrid;align-items:center;position:relative}:host button:is(.menu-item,.menu,#sci-reset):hover{--\\275sci-menu-item-hover: true}:host button:is(.menu-item,.menu,#sci-reset).checked{--\\275sci-menu-item-checked: true}:host button:is(.menu-item,.menu,#sci-reset).active{--\\275sci-menu-item-active: true}:host button:is(.menu-item,.menu,#sci-reset):has(sci-toolbar-group.actions.menu-open){--\\275sci-menu-item-actions-menu-open: true}:host button:is(.menu-item,.menu,#sci-reset):not(:disabled):is(:hover,.active,:has(sci-toolbar-group.actions.menu-open)){--\\275sci-action-toolbar-visible: true}:host button:is(.menu-item,.menu,#sci-reset).menu-item.active:before{position:absolute;content:\"\";box-sizing:border-box;height:calc(100% - var(--sci-menu-item-active-indicator-border-radius));width:var(--sci-menu-item-active-indicator-size);left:calc(-1 * var(--\\275sci-menu-padding-inline) + 1px);border-radius:var(--sci-menu-item-active-indicator-border-radius);background-color:var(--sci-menu-item-active-indicator-background-color)}:host button:is(.menu-item,.menu,#sci-reset).menu.open{background-color:var(--sci-menu-item-background-color-hover)}:host button:is(.menu-item,.menu,#sci-reset).menu>div.content>sci-icon.chevron{transform:translate(var(--\\275sci-menu-item-chevron-x-offset));--sci-icon-size: calc(.875 * var(--sci-icon-size))}:host button:is(.menu-item,.menu,#sci-reset).menu-item.checked>sci-icon:first-child{--sci-icon-size: calc(.875 * var(--sci-icon-size))}:host button:is(.menu-item,.menu,#sci-reset)>sci-menu-item-icon{display:inline-grid;place-content:center;height:var(--sci-menu-item-size);width:var(--sci-menu-item-size);overflow:hidden}:host button:is(.menu-item,.menu,#sci-reset)>div.content{display:flex;align-items:center;gap:var(--\\275sci-menu-item-gap-inline)}:host button:is(.menu-item,.menu,#sci-reset)>div.content:first-child{grid-column:1/-1}:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-menu-item-label{flex:auto;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host button:is(.menu-item,.menu,#sci-reset)>div.content>span.accelerator{flex:none;color:var(--sci-menu-item-accelerator-text-color);font-size:.9em}@container style(--\\275sci-action-toolbar-visible: true){:host button:is(.menu-item,.menu,#sci-reset)>div.content>span.accelerator:has(+sci-toolbar-group.actions){display:none}}:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-toolbar-group.actions{flex:none;align-self:center}@container style(--\\275sci-menu-item-hover: true){:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-toolbar-group.actions{--sci-toolbar-item-background-color-hover: var(--\\275sci-menu-action-background-color-hover);--sci-toolbar-item-background-color-active: var(--\\275sci-menu-action-background-color-active)}}@container not style(--\\275sci-action-toolbar-visible: true){:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-toolbar-group.actions{display:none}}@container style(--\\275sci-menu-scrolling: true) and (not style(--\\275sci-menu-item-active: true)) and (not style(--\\275sci-menu-item-actions-menu-open: true)){:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-toolbar-group.actions{visibility:hidden}}:host sci-toolbar-group.actions{transform:translate(var(--\\275sci-menu-item-chevron-x-offset));--sci-toolbar-item-size: var(--sci-menu-item-size);--\\275sci-toolbar-item-padding-block: 0}\n"], dependencies: [{ kind: "component", type: SciMenuGroupComponent, selector: "sci-menu-group", inputs: ["group", "glyphArea", "disabled", "cssClass"] }, { kind: "component", type: SciMenuFilterComponent, selector: "sci-menu-filter", inputs: ["placeholder", "text"], outputs: ["textChange"] }, { kind: "component", type: SciToolbarGroupComponent, selector: "sci-toolbar-group", inputs: ["menuItems", "orientation", "disabled", "popoverViewContainerRef"] }, { kind: "directive", type: SciComponentOutletDirective, selector: "ng-template[sciComponentOutlet]", inputs: ["sciComponentOutlet"] }, { kind: "directive", type: SciAttributesDirective, selector: "[sciAttributes]", inputs: ["sciAttributes"] }, { kind: "component", type: SciIconComponent, selector: "sci-icon" }, { kind: "component", type: SciMenuGroupLabelComponent, selector: "sci-menu-group-label" }, { kind: "component", type: SciMenuItemLabelComponent, selector: "sci-menu-item-label" }, { kind: "component", type: SciMenuItemIconComponent, selector: "sci-menu-item-icon" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SciScrollbarComponent, selector: "sci-scrollbar", inputs: ["direction", "viewport"] }, { kind: "pipe", type: SciTextPipe, name: "sciText" }, { kind: "pipe", type: SciFormatAcceleratorPipe, name: "sciFormatAccelerator" }] });
1738
1739
  }
1739
1740
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SciMenuComponent, decorators: [{
1740
1741
  type: Component,
@@ -1742,7 +1743,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
1742
1743
  SciMenuGroupComponent,
1743
1744
  SciMenuFilterComponent,
1744
1745
  SciToolbarGroupComponent,
1745
- SciViewportComponent,
1746
1746
  SciTextPipe,
1747
1747
  SciComponentOutletDirective,
1748
1748
  SciAttributesDirective,
@@ -1752,6 +1752,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
1752
1752
  SciMenuItemIconComponent,
1753
1753
  SciFormatAcceleratorPipe,
1754
1754
  NgTemplateOutlet,
1755
+ SciScrollbarComponent,
1755
1756
  ], providers: [
1756
1757
  providePopoverRef(),
1757
1758
  provideMenuFilter(),
@@ -1768,8 +1769,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
1768
1769
  '[class]': 'cssClass()',
1769
1770
  }, hostDirectives: [
1770
1771
  { directive: SciAttributesDirective, inputs: ['sciAttributes: attributes'] },
1771
- ], template: "<!-- Filter Field -->\r\n@let filter = this.filter();\r\n@if (filter) {\r\n <div class=\"filter e2e-filter\">\r\n <sci-icon>scion.search</sci-icon>\r\n @let message = filter.placeholder?.() ?? '%scion.components.type_to_filter.action';\r\n <sci-menu-filter (textChange)=\"onFilterChange($event)\" [placeholder]=\"(message | sciText)()\"/>\r\n </div>\r\n <hr>\r\n}\r\n\r\n<!-- Group Header -->\r\n@if (group(); as group) {\r\n @if (group.collapsible) {\r\n <button class=\"group-header e2e-group-header\" (click)=\"onGroupHeaderButtonClick()\" (mouseenter)=\"onMenuItemMouseEnter(null)\">\r\n <sci-icon>{{isGroupExpanded() ? 'scion.chevron_down' : 'scion.chevron_right'}}</sci-icon>\r\n\r\n <div class=\"content\">\r\n <ng-container *ngTemplateOutlet=\"group_header_template\"/>\r\n </div>\r\n </button>\r\n } @else if (group.label) {\r\n <header class=\"group-header e2e-group-header\">\r\n <ng-container *ngTemplateOutlet=\"group_header_template\"/>\r\n </header>\r\n }\r\n\r\n <!-- Template for rendering group header. -->\r\n <ng-template #group_header_template>\r\n <sci-menu-group-label>{{group.label}}</sci-menu-group-label>\r\n\r\n @if (group.actions.length && !this.disabled()) {\r\n <sci-toolbar-group [menuItems]=\"group.actions\"\r\n [orientation]=\"'horizontal'\"\r\n [popoverViewContainerRef]=\"popoverViewContainerRef()\"\r\n (click)=\"$event.stopPropagation()\"\r\n class=\"actions e2e-actions\"/>\r\n }\r\n </ng-template>\r\n}\r\n\r\n<!-- Menu Items -->\r\n@if (isGroupExpanded()) {\r\n @if (maxHeight()) {\r\n <sci-viewport>\r\n <ng-container *ngTemplateOutlet=\"menu_items_template\"/>\r\n </sci-viewport>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"menu_items_template\"/>\r\n }\r\n\r\n <!-- Renders menu items. -->\r\n <ng-template #menu_items_template>\r\n @for (menuItem of menuItemsFiltered(); track $index) {\r\n @let disabled = this.disabled() || menuItem.disabled?.() || false;\r\n\r\n @switch (menuItem.type) {\r\n @case ('menu-item') {\r\n <!-- Menu Item -->\r\n @if (!menuItem.menu) {\r\n @let hasActionToolbar = !disabled && menuItem.actions?.length;\r\n @let showAcceleratorInTooltip = menuItem.accelerator && hasActionToolbar;\r\n\r\n <button [attr.disabled]=\"disabled || null\"\r\n [attr.title]=\"showAcceleratorInTooltip ? (menuItem.accelerator | sciFormatAccelerator:menuItem.tooltip?.()) : menuItem.tooltip?.()\"\r\n [class.checked]=\"menuItem.checked?.()\"\r\n [class.active]=\"menuItem.active?.()\"\r\n [class]=\"menuItem.cssClass\" class=\"menu-item e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\"\r\n (mouseenter)=\"onMenuItemMouseEnter(menuItem)\"\r\n (click)=\"onSelect(menuItem)\">\r\n <!-- Render icon if glyph area. -->\r\n @if (hasGlyphArea() && !group()?.hideGlyphArea) {\r\n <ng-container *ngTemplateOutlet=\"icon_template; context: {$implicit: menuItem}\"/>\r\n }\r\n\r\n <!-- Render label, accelerator and action toolbar. -->\r\n <div class=\"content\">\r\n <ng-container *ngTemplateOutlet=\"label_template; context: {$implicit: menuItem}\"/>\r\n\r\n @if (menuItem.accelerator) {\r\n <span class=\"accelerator\">{{menuItem.accelerator | sciFormatAccelerator}}</span>\r\n }\r\n\r\n @if (hasActionToolbar) {\r\n <sci-toolbar-group [menuItems]=\"menuItem.actions!\"\r\n [orientation]=\"'horizontal'\"\r\n [popoverViewContainerRef]=\"popoverViewContainerRef()\"\r\n [class.menu-open]=\"actions_toolbar.menuOpen()\"\r\n class=\"actions e2e-actions\"\r\n (click)=\"$event.stopPropagation()\"\r\n #actions_toolbar/>\r\n }\r\n </div>\r\n </button>\r\n }\r\n\r\n <!-- Submenu Item -->\r\n @if (menuItem.menu) {\r\n <button [attr.disabled]=\"disabled || null\"\r\n [attr.title]=\"menuItem.tooltip?.()\"\r\n [class.open]=\"activeSubmenuItem()?.menuItem === menuItem\"\r\n [class]=\"menuItem.cssClass\" class=\"menu e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\"\r\n (mouseenter)=\"onSubmenuItemMouseEnter({menuItem, element})\"\r\n (click)=\"onSubmenuItemClick({menuItem, element})\"\r\n #element>\r\n @if (hasGlyphArea() && !group()?.hideGlyphArea) {\r\n <!-- Render icon if glyph area. -->\r\n <ng-container *ngTemplateOutlet=\"icon_template; context: {$implicit: menuItem}\"/>\r\n }\r\n\r\n <!-- Render label. -->\r\n <div class=\"content\">\r\n <ng-container *ngTemplateOutlet=\"label_template; context: {$implicit: menuItem}\"/>\r\n <sci-icon class=\"chevron\">scion.chevron_right</sci-icon>\r\n </div>\r\n </button>\r\n }\r\n }\r\n @case ('group') {\r\n <sci-menu-group [group]=\"menuItem\"\r\n [glyphArea]=\"hasGlyphArea()\"\r\n [disabled]=\"disabled\"\r\n [cssClass]=\"menuItem.cssClass ?? []\"/>\r\n }\r\n }\r\n } @empty {\r\n <!-- TODO [Angular 23] Replace with optional chaining operator once the Angular compiler no longer logs the NG8107 false-positive warning. -->\r\n <!-- @let message = filter?.notFoundMessage?.() ?? '%scion.components.no_items.message'; -->\r\n @let message = (filter && filter.notFoundMessage?.()) ?? '%scion.components.no_items.message';\r\n <div class=\"message no-items e2e-no-items\">{{(message | sciText)()}}</div>\r\n }\r\n </ng-template>\r\n}\r\n\r\n<!-- Location where to insert the menu popover. Must not be a child of the menu item button to prevent hovering the menu item when hovering menu items in the popover. -->\r\n<ng-container #popover_view_container_ref/>\r\n\r\n<!-- Renders the icon of the passed menu item. -->\r\n<ng-template #icon_template let-menuItem>\r\n @if (menuItem.checked !== undefined) {\r\n <sci-icon>{{menuItem.checked() ? 'scion.checkmark' : undefined}}</sci-icon>\r\n } @else if (menuItem.iconLigature) {\r\n <sci-icon>{{menuItem.iconLigature()}}</sci-icon>\r\n } @else if (menuItem.iconComponent) {\r\n <sci-menu-item-icon>\r\n <ng-container *sciComponentOutlet=\"menuItem.iconComponent\"/>\r\n </sci-menu-item-icon>\r\n } @else {\r\n <sci-menu-item-icon/>\r\n }\r\n</ng-template>\r\n\r\n<!-- Renders the label of the passed menu item. -->\r\n<ng-template #label_template let-menuItem>\r\n @if (menuItem.labelText) {\r\n <sci-menu-item-label>\r\n {{menuItem.labelText()}}\r\n </sci-menu-item-label>\r\n } @else if (menuItem.labelComponent) {\r\n <sci-menu-item-label>\r\n <ng-container *sciComponentOutlet=\"menuItem.labelComponent\"/>\r\n </sci-menu-item-label>\r\n }\r\n</ng-template>\r\n", styles: ["@charset \"UTF-8\";:host{--sci-icon-size: var(--sci-menu-item-size);--\\275sci-menu-item-padding-inline: calc(.5 * var(--sci-menu-item-size));--\\275sci-menu-item-padding-block: calc(.225 * var(--sci-menu-item-size));--\\275sci-menu-item-min-height: calc(var(--sci-menu-item-size) + 2px);--\\275sci-menu-item-gap-inline: calc(.75 * var(--sci-menu-item-size));--\\275sci-menu-item-gap-block: calc(.125 * var(--sci-menu-item-size));--\\275sci-menu-padding-inline: .4em;--\\275sci-menu-padding-block: .3em;--\\275sci-menu-glyph-area: true;--\\275sci-menu-action-background-color-hover: color-mix(in srgb, var(--sci-menu-item-background-color-hover) 90%, light-dark(var(--sci-static-color-black), var(--sci-static-color-white)));--\\275sci-menu-action-background-color-active: color-mix(in srgb, var(--sci-menu-item-background-color-active) 90%, light-dark(var(--sci-static-color-black), var(--sci-static-color-white)));--\\275sci-menu-item-chevron-x-offset: calc(var(--sci-menu-item-size) / 4);--\\275sci-menu-font-size: var(--sci-menu-font-size, calc(.8125 * var(--sci-menu-item-size)));--\\275sci-menu-width: max-content;--\\275sci-menu-min-width: initial;--\\275sci-menu-max-width: initial;--\\275sci-menu-max-height: initial;--\\275sci-menu-scrolling: false;display:grid;gap:var(--\\275sci-menu-item-gap-block) var(--\\275sci-menu-item-gap-inline);align-items:center;font-size:var(--\\275sci-menu-font-size);border:1px solid var(--sci-color-border);border-radius:var(--sci-menu-border-radius);background-color:var(--sci-color-background-elevation);padding:var(--\\275sci-menu-padding-block) var(--\\275sci-menu-padding-inline);outline:none;box-sizing:border-box;width:var(--\\275sci-menu-width);min-width:var(--\\275sci-menu-min-width);max-width:var(--\\275sci-menu-max-width);-webkit-user-select:none;user-select:none;grid-template-columns:var(--sci-menu-item-size) minmax(0,1fr)}:host[data-glyph-area=none]{--\\275sci-menu-glyph-area: false;grid-template-columns:minmax(0,1fr)}:host[popover]{position:fixed;margin:unset;inset:unset;height:auto}:host[popover]:not(:popover-open){display:none}:host:not([popover]){grid-column:1/-1;grid-template-columns:subgrid;border:unset;border-radius:unset;color:inherit;padding:unset;background-color:inherit}:host>header.group-header{grid-column:1/-1;display:flex;gap:var(--\\275sci-menu-item-gap-inline);justify-content:space-between;align-items:center;padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline);box-sizing:content-box;min-height:var(--\\275sci-menu-item-min-height)}:host>header.group-header>sci-menu-group-label{flex:auto;color:var(--sci-menu-group-header-text-color);font-family:var(--sci-menu-group-header-font-family),sans-serif;font-weight:var(--sci-menu-group-header-font-weight);font-size:var(--sci-menu-group-header-font-size);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host>header.group-header>sci-toolbar-group.actions{flex:none;align-self:center}:host>button:is(.group-header,#sci-reset){all:unset;text-wrap:nowrap;padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline);border-radius:var(--sci-menu-item-border-radius);-webkit-user-select:none;user-select:none;cursor:var(--sci-menu-item-cursor);color:var(--sci-menu-item-text-color);min-height:var(--\\275sci-menu-item-min-height);box-sizing:content-box}@container not style(--\\275sci-menu-scrolling: true){:host>button:is(.group-header,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-menu-item-background-color-hover)}}:host>button:is(.group-header,#sci-reset):active:where(:not(:disabled)):focus{background-color:var(--sci-menu-item-background-color-active)}:host>button:is(.group-header,#sci-reset):focus:not(:focus-visible){outline:none}:host>button:is(.group-header,#sci-reset):focus-visible{outline:var(--sci-menu-item-outline-width) solid var(--sci-color-accent)}:host>button:is(.group-header,#sci-reset):disabled{color:var(--sci-menu-item-text-color-disabled)}:host>button:is(.group-header,#sci-reset){grid-column:1/-1;display:inline-grid;grid-template-columns:subgrid;align-items:center}:host>button:is(.group-header,#sci-reset):hover{--\\275sci-menu-item-hover: true}:host>button:is(.group-header,#sci-reset)>sci-icon{--sci-icon-size: calc(.875 * var(--sci-icon-size))}:host>button:is(.group-header,#sci-reset)>div.content{display:flex;gap:var(--\\275sci-menu-item-gap-inline);justify-content:space-between;align-items:center}:host>button:is(.group-header,#sci-reset)>div.content>sci-menu-group-label{flex:auto;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host>button:is(.group-header,#sci-reset)>div.content>sci-toolbar-group.actions{flex:none;align-self:center}@container style(--\\275sci-menu-item-hover: true){:host>button:is(.group-header,#sci-reset)>div.content>sci-toolbar-group.actions{--sci-toolbar-item-background-color-hover: var(--\\275sci-menu-action-background-color-hover);--sci-toolbar-item-background-color-active: var(--\\275sci-menu-action-background-color-active)}}:host:has(>sci-viewport){padding:var(--\\275sci-menu-padding-block) 0}:host:has(>sci-viewport)>header.group-header,:host:has(>sci-viewport)>button.group-header,:host:has(>sci-viewport)>div.filter,:host:has(>sci-viewport)>hr{margin:0 var(--\\275sci-menu-padding-inline)}:host>sci-viewport{grid-column:1/-1;max-height:var(--\\275sci-menu-max-height);box-sizing:border-box}:host>sci-viewport::part(content){grid-column:1/-1;display:grid;gap:var(--\\275sci-menu-item-gap-block) var(--\\275sci-menu-item-gap-inline);grid-template-columns:var(--sci-menu-item-size) minmax(0,1fr);padding:2px var(--\\275sci-menu-padding-inline)}@container style(--\\275sci-menu-glyph-area: false){:host>sci-viewport::part(content){grid-template-columns:minmax(0,1fr)}}:host>div.filter{grid-column:1/-1;display:inline-grid;grid-template-columns:subgrid;align-items:center;padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline);border-radius:var(--sci-menu-filter-outline-radius);box-sizing:content-box;min-height:var(--\\275sci-menu-item-min-height)}:host>div.filter:focus-within{outline:var(--sci-menu-filter-outline-width) solid var(--sci-color-accent)}@container style(--\\275sci-menu-glyph-area: false){:host>div.filter{display:flex;gap:var(--\\275sci-menu-item-gap-inline)}:host>div.filter>sci-icon{flex:none}:host>div.filter>sci-menu-filter{flex:auto}}:host>hr{all:unset;grid-column:1/-1;height:1px;background-color:var(--sci-color-border)}:host div.message.no-items{grid-column:1/-1;justify-self:center;color:var(--sci-color-text-subtlest);padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline)}:host *:not(hr)+sci-menu-group:not(:has(>sci-menu-group:first-child)):before{content:\"\";grid-column:1/-1;height:1px;background-color:var(--sci-color-border)}:host sci-menu-group:not(:last-child):not(:has(+sci-menu-group,+sci-menu:last-child)):after{content:\"\";grid-column:1/-1;height:1px;background-color:var(--sci-color-border)}:host button:is(.menu-item,.menu,#sci-reset){all:unset;text-wrap:nowrap;padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline);border-radius:var(--sci-menu-item-border-radius);-webkit-user-select:none;user-select:none;cursor:var(--sci-menu-item-cursor);color:var(--sci-menu-item-text-color);min-height:var(--\\275sci-menu-item-min-height);box-sizing:content-box}@container not style(--\\275sci-menu-scrolling: true){:host button:is(.menu-item,.menu,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-menu-item-background-color-hover)}}:host button:is(.menu-item,.menu,#sci-reset):active:where(:not(:disabled)):focus{background-color:var(--sci-menu-item-background-color-active)}:host button:is(.menu-item,.menu,#sci-reset):focus:not(:focus-visible){outline:none}:host button:is(.menu-item,.menu,#sci-reset):focus-visible{outline:var(--sci-menu-item-outline-width) solid var(--sci-color-accent)}:host button:is(.menu-item,.menu,#sci-reset):disabled{color:var(--sci-menu-item-text-color-disabled)}:host button:is(.menu-item,.menu,#sci-reset){grid-column:1/-1;display:inline-grid;grid-template-columns:subgrid;align-items:center;position:relative}:host button:is(.menu-item,.menu,#sci-reset):hover{--\\275sci-menu-item-hover: true}:host button:is(.menu-item,.menu,#sci-reset).checked{--\\275sci-menu-item-checked: true}:host button:is(.menu-item,.menu,#sci-reset).active{--\\275sci-menu-item-active: true}:host button:is(.menu-item,.menu,#sci-reset):has(sci-toolbar-group.actions.menu-open){--\\275sci-menu-item-actions-menu-open: true}:host button:is(.menu-item,.menu,#sci-reset):not(:disabled):is(:hover,.active,:has(sci-toolbar-group.actions.menu-open)){--\\275sci-action-toolbar-visible: true}:host button:is(.menu-item,.menu,#sci-reset).menu-item.active:before{position:absolute;content:\"\";box-sizing:border-box;height:calc(100% - var(--sci-menu-item-active-indicator-border-radius));width:var(--sci-menu-item-active-indicator-size);left:calc(-1 * var(--\\275sci-menu-padding-inline) + 1px);border-radius:var(--sci-menu-item-active-indicator-border-radius);background-color:var(--sci-menu-item-active-indicator-background-color)}:host button:is(.menu-item,.menu,#sci-reset).menu.open{background-color:var(--sci-menu-item-background-color-hover)}:host button:is(.menu-item,.menu,#sci-reset).menu>div.content>sci-icon.chevron{transform:translate(var(--\\275sci-menu-item-chevron-x-offset));--sci-icon-size: calc(.875 * var(--sci-icon-size))}:host button:is(.menu-item,.menu,#sci-reset).menu-item.checked>sci-icon:first-child{--sci-icon-size: calc(.875 * var(--sci-icon-size))}:host button:is(.menu-item,.menu,#sci-reset)>sci-menu-item-icon{display:inline-grid;place-content:center;height:var(--sci-menu-item-size);width:var(--sci-menu-item-size);overflow:hidden}:host button:is(.menu-item,.menu,#sci-reset)>div.content{display:flex;align-items:center;gap:var(--\\275sci-menu-item-gap-inline)}:host button:is(.menu-item,.menu,#sci-reset)>div.content:first-child{grid-column:1/-1}:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-menu-item-label{flex:auto;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host button:is(.menu-item,.menu,#sci-reset)>div.content>span.accelerator{flex:none;color:var(--sci-menu-item-accelerator-text-color);font-size:.9em}@container style(--\\275sci-action-toolbar-visible: true){:host button:is(.menu-item,.menu,#sci-reset)>div.content>span.accelerator:has(+sci-toolbar-group.actions){display:none}}:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-toolbar-group.actions{flex:none;align-self:center}@container style(--\\275sci-menu-item-hover: true){:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-toolbar-group.actions{--sci-toolbar-item-background-color-hover: var(--\\275sci-menu-action-background-color-hover);--sci-toolbar-item-background-color-active: var(--\\275sci-menu-action-background-color-active)}}@container not style(--\\275sci-action-toolbar-visible: true){:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-toolbar-group.actions{display:none}}@container style(--\\275sci-menu-scrolling: true) and (not style(--\\275sci-menu-item-active: true)) and (not style(--\\275sci-menu-item-actions-menu-open: true)){:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-toolbar-group.actions{visibility:hidden}}:host sci-toolbar-group.actions{transform:translate(var(--\\275sci-menu-item-chevron-x-offset));--sci-toolbar-item-size: var(--sci-menu-item-size);--\\275sci-toolbar-item-padding-block: 0}\n"] }]
1772
- }], ctorParameters: () => [], propDecorators: { menuItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "menuItems", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], filter: [{ type: i0.Input, args: [{ isSignal: true, alias: "filter", required: false }] }], group: [{ type: i0.Input, args: [{ isSignal: true, alias: "group", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], minWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "minWidth", required: false }] }], maxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxWidth", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }], glyphArea: [{ type: i0.Input, args: [{ isSignal: true, alias: "glyphArea", required: false }] }], anchorWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "anchorWidth", required: false }] }], cssClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "cssClass", required: false }] }], _filterField: [{ type: i0.ViewChild, args: [i0.forwardRef(() => SciMenuFilterComponent), { isSignal: true }] }], _viewport: [{ type: i0.ViewChild, args: [i0.forwardRef(() => SciViewportComponent), { isSignal: true }] }], popoverViewContainerRef: [{ type: i0.ViewChild, args: ['popover_view_container_ref', { ...{ read: ViewContainerRef }, isSignal: true }] }] } });
1772
+ ], template: "<!-- Filter Field -->\r\n@let filter = this.filter();\r\n@if (filter) {\r\n <div class=\"filter e2e-filter\">\r\n <sci-icon>scion:search</sci-icon>\r\n @let message = filter.placeholder?.() ?? '%scion:components:type_to_filter.action';\r\n <sci-menu-filter (textChange)=\"onFilterChange($event)\" [placeholder]=\"(message | sciText)()\"/>\r\n </div>\r\n <hr>\r\n}\r\n\r\n<!-- Group Header -->\r\n@if (group(); as group) {\r\n @if (group.collapsible) {\r\n <button class=\"group-header e2e-group-header\" (click)=\"onGroupHeaderButtonClick()\" (mouseenter)=\"onMenuItemMouseEnter(null)\">\r\n <sci-icon>{{isGroupExpanded() ? 'scion:chevron_down' : 'scion:chevron_right'}}</sci-icon>\r\n\r\n <div class=\"content\">\r\n <ng-container *ngTemplateOutlet=\"group_header_template\"/>\r\n </div>\r\n </button>\r\n } @else if (group.label) {\r\n <header class=\"group-header e2e-group-header\">\r\n <ng-container *ngTemplateOutlet=\"group_header_template\"/>\r\n </header>\r\n }\r\n\r\n <!-- Template for rendering group header. -->\r\n <ng-template #group_header_template>\r\n <sci-menu-group-label>{{group.label}}</sci-menu-group-label>\r\n\r\n @if (group.actions.length && !this.disabled()) {\r\n <sci-toolbar-group [menuItems]=\"group.actions\"\r\n [orientation]=\"'horizontal'\"\r\n [popoverViewContainerRef]=\"popoverViewContainerRef()\"\r\n (click)=\"$event.stopPropagation()\"\r\n class=\"actions e2e-actions\"/>\r\n }\r\n </ng-template>\r\n}\r\n\r\n<!-- Menu Items -->\r\n@if (isGroupExpanded()) {\r\n @if (maxHeight()) {\r\n <!-- TODO [#384] Replace with sci-viewport -->\r\n <div class=\"viewport e2e-viewport\" #viewport>\r\n <ng-container *ngTemplateOutlet=\"menu_items_template\"/>\r\n </div>\r\n <sci-scrollbar direction=\"vscroll\" [viewport]=\"viewport\"/>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"menu_items_template\"/>\r\n }\r\n\r\n <!-- Renders menu items. -->\r\n <ng-template #menu_items_template>\r\n @for (menuItem of menuItemsFiltered(); track $index) {\r\n @let disabled = this.disabled() || menuItem.disabled?.() || false;\r\n\r\n @switch (menuItem.type) {\r\n @case ('menu-item') {\r\n <!-- Menu Item -->\r\n @if (!menuItem.menu) {\r\n @let hasActionToolbar = !disabled && menuItem.actions?.length;\r\n @let showAcceleratorInTooltip = menuItem.accelerator && hasActionToolbar;\r\n\r\n <button [attr.disabled]=\"disabled || null\"\r\n [attr.title]=\"showAcceleratorInTooltip ? (menuItem.accelerator | sciFormatAccelerator:menuItem.tooltip?.()) : menuItem.tooltip?.()\"\r\n [class.checked]=\"menuItem.checked?.()\"\r\n [class.active]=\"menuItem.active?.()\"\r\n [class]=\"menuItem.cssClass\" class=\"menu-item e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\"\r\n (mouseenter)=\"onMenuItemMouseEnter(menuItem)\"\r\n (click)=\"onSelect(menuItem)\">\r\n <!-- Render icon if glyph area. -->\r\n @if (hasGlyphArea() && !group()?.hideGlyphArea) {\r\n <ng-container *ngTemplateOutlet=\"icon_template; context: {$implicit: menuItem}\"/>\r\n }\r\n\r\n <div class=\"content\">\r\n <!-- Render icon inline if checkable. -->\r\n @if (menuItem.iconLigature && menuItem.checked) {\r\n <sci-icon>{{menuItem.iconLigature()}}</sci-icon>\r\n }\r\n\r\n <!-- Render icon component inline if checkable. -->\r\n @if (menuItem.iconComponent && menuItem.checked) {\r\n <sci-menu-item-icon>\r\n <ng-container *sciComponentOutlet=\"menuItem.iconComponent\"/>\r\n </sci-menu-item-icon>\r\n }\r\n\r\n <!-- Render label. -->\r\n <ng-container *ngTemplateOutlet=\"label_template; context: {$implicit: menuItem}\"/>\r\n\r\n <!-- Render accelerator. -->\r\n @if (menuItem.accelerator) {\r\n <span class=\"accelerator\">{{menuItem.accelerator | sciFormatAccelerator}}</span>\r\n }\r\n\r\n <!-- Render actions. -->\r\n @if (hasActionToolbar) {\r\n <sci-toolbar-group [menuItems]=\"menuItem.actions!\"\r\n [orientation]=\"'horizontal'\"\r\n [popoverViewContainerRef]=\"popoverViewContainerRef()\"\r\n [class.menu-open]=\"actions_toolbar.menuOpen()\"\r\n class=\"actions e2e-actions\"\r\n (click)=\"$event.stopPropagation()\"\r\n #actions_toolbar/>\r\n }\r\n </div>\r\n </button>\r\n }\r\n\r\n <!-- Submenu Item -->\r\n @if (menuItem.menu) {\r\n <button [attr.disabled]=\"disabled || null\"\r\n [attr.title]=\"menuItem.tooltip?.()\"\r\n [class.open]=\"activeSubmenuItem()?.menuItem === menuItem\"\r\n [class]=\"menuItem.cssClass\" class=\"menu e2e-menu-item\"\r\n [sciAttributes]=\"menuItem.attributes\"\r\n (mouseenter)=\"onSubmenuItemMouseEnter({menuItem, element})\"\r\n (click)=\"onSubmenuItemClick({menuItem, element})\"\r\n #element>\r\n @if (hasGlyphArea() && !group()?.hideGlyphArea) {\r\n <!-- Render icon if glyph area. -->\r\n <ng-container *ngTemplateOutlet=\"icon_template; context: {$implicit: menuItem}\"/>\r\n }\r\n\r\n <!-- Render label. -->\r\n <div class=\"content\">\r\n <ng-container *ngTemplateOutlet=\"label_template; context: {$implicit: menuItem}\"/>\r\n <sci-icon class=\"chevron\">scion:chevron_right</sci-icon>\r\n </div>\r\n </button>\r\n }\r\n }\r\n @case ('group') {\r\n <sci-menu-group [group]=\"menuItem\"\r\n [glyphArea]=\"hasGlyphArea()\"\r\n [disabled]=\"disabled\"\r\n [cssClass]=\"menuItem.cssClass ?? []\"/>\r\n }\r\n }\r\n } @empty {\r\n <!-- TODO [Angular 23] Replace with optional chaining operator once the Angular compiler no longer logs the NG8107 false-positive warning. -->\r\n <!-- @let message = filter?.notFoundMessage?.() ?? '%scion:components:no_items.message'; -->\r\n @let message = (filter && filter.notFoundMessage?.()) ?? '%scion:components:no_items.message';\r\n <div class=\"message no-items e2e-no-items\">{{(message | sciText)()}}</div>\r\n }\r\n </ng-template>\r\n}\r\n\r\n<!-- Location where to insert the menu popover. Must not be a child of the menu item button to prevent hovering the menu item when hovering menu items in the popover. -->\r\n<ng-container #popover_view_container_ref/>\r\n\r\n<!-- Renders the icon of the passed menu item. -->\r\n<ng-template #icon_template let-menuItem>\r\n @if (menuItem.checked !== undefined) {\r\n <sci-icon data-checkmark>{{menuItem.checked() ? 'scion:checkmark' : undefined}}</sci-icon>\r\n } @else if (menuItem.iconLigature) {\r\n <sci-icon>{{menuItem.iconLigature()}}</sci-icon>\r\n } @else if (menuItem.iconComponent) {\r\n <sci-menu-item-icon>\r\n <ng-container *sciComponentOutlet=\"menuItem.iconComponent\"/>\r\n </sci-menu-item-icon>\r\n } @else {\r\n <sci-menu-item-icon/>\r\n }\r\n</ng-template>\r\n\r\n<!-- Renders the label of the passed menu item. -->\r\n<ng-template #label_template let-menuItem>\r\n @if (menuItem.labelText) {\r\n <sci-menu-item-label>\r\n {{menuItem.labelText()}}\r\n </sci-menu-item-label>\r\n } @else if (menuItem.labelComponent) {\r\n <sci-menu-item-label>\r\n <ng-container *sciComponentOutlet=\"menuItem.labelComponent\"/>\r\n </sci-menu-item-label>\r\n }\r\n</ng-template>\r\n", styles: ["@charset \"UTF-8\";:host{--sci-icon-size: var(--sci-menu-item-size);--\\275sci-menu-item-padding-inline: calc(.5 * var(--sci-menu-item-size));--\\275sci-menu-item-padding-block: calc(.225 * var(--sci-menu-item-size));--\\275sci-menu-item-min-height: calc(var(--sci-menu-item-size) + 2px);--\\275sci-menu-item-gap-inline: calc(.75 * var(--sci-menu-item-size));--\\275sci-menu-item-gap-block: calc(.125 * var(--sci-menu-item-size));--\\275sci-menu-padding-inline: .4em;--\\275sci-menu-padding-block: .3em;--\\275sci-menu-glyph-area: true;--\\275sci-menu-action-background-color-hover: color-mix(in srgb, var(--sci-menu-item-background-color-hover) 90%, light-dark(var(--sci-static-color-black), var(--sci-static-color-white)));--\\275sci-menu-action-background-color-active: color-mix(in srgb, var(--sci-menu-item-background-color-active) 90%, light-dark(var(--sci-static-color-black), var(--sci-static-color-white)));--\\275sci-menu-item-chevron-x-offset: calc(var(--sci-menu-item-size) / 4);--\\275sci-menu-font-size: var(--sci-menu-font-size, calc(.8125 * var(--sci-menu-item-size)));--\\275sci-menu-width: max-content;--\\275sci-menu-min-width: initial;--\\275sci-menu-max-width: initial;--\\275sci-menu-max-height: initial;--\\275sci-menu-scrolling: false;display:grid;gap:var(--\\275sci-menu-item-gap-block) var(--\\275sci-menu-item-gap-inline);align-items:center;font-size:var(--\\275sci-menu-font-size);border:1px solid var(--sci-color-border);border-radius:var(--sci-menu-border-radius);background-color:var(--sci-color-background-elevation);padding:var(--\\275sci-menu-padding-block) var(--\\275sci-menu-padding-inline);outline:none;box-sizing:border-box;width:var(--\\275sci-menu-width);min-width:var(--\\275sci-menu-min-width);max-width:var(--\\275sci-menu-max-width);-webkit-user-select:none;user-select:none;grid-template-columns:var(--sci-menu-item-size) minmax(0,1fr)}:host[data-glyph-area=none]{--\\275sci-menu-glyph-area: false;grid-template-columns:minmax(0,1fr)}:host[popover]{position:fixed;margin:unset;inset:unset;height:auto}:host[popover]:not(:popover-open){display:none}:host:not([popover]){grid-column:1/-1;grid-template-columns:subgrid;border:unset;border-radius:unset;color:inherit;padding:unset;background-color:inherit}:host>header.group-header{grid-column:1/-1;display:flex;gap:var(--\\275sci-menu-item-gap-inline);justify-content:space-between;align-items:center;padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline);box-sizing:content-box;min-height:var(--\\275sci-menu-item-min-height)}:host>header.group-header>sci-menu-group-label{flex:auto;color:var(--sci-menu-group-header-text-color);font-family:var(--sci-menu-group-header-font-family),sans-serif;font-weight:var(--sci-menu-group-header-font-weight);font-size:var(--sci-menu-group-header-font-size);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host>header.group-header>sci-toolbar-group.actions{flex:none;align-self:center}:host>button:is(.group-header,#sci-reset){all:unset;text-wrap:nowrap;padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline);border-radius:var(--sci-menu-item-border-radius);-webkit-user-select:none;user-select:none;cursor:var(--sci-menu-item-cursor);color:var(--sci-menu-item-text-color);min-height:var(--\\275sci-menu-item-min-height);box-sizing:content-box}@container not style(--\\275sci-menu-scrolling: true){:host>button:is(.group-header,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-menu-item-background-color-hover)}}:host>button:is(.group-header,#sci-reset):active:where(:not(:disabled)):focus{background-color:var(--sci-menu-item-background-color-active)}:host>button:is(.group-header,#sci-reset):focus:not(:focus-visible){outline:none}:host>button:is(.group-header,#sci-reset):focus-visible{outline:var(--sci-menu-item-outline-width) solid var(--sci-color-accent)}:host>button:is(.group-header,#sci-reset):disabled{color:var(--sci-menu-item-text-color-disabled)}:host>button:is(.group-header,#sci-reset){grid-column:1/-1;display:inline-grid;grid-template-columns:subgrid;align-items:center}:host>button:is(.group-header,#sci-reset):hover{--\\275sci-menu-item-hover: true}:host>button:is(.group-header,#sci-reset)>sci-icon{--sci-icon-size: calc(.875 * var(--sci-icon-size))}:host>button:is(.group-header,#sci-reset)>div.content{display:flex;gap:var(--\\275sci-menu-item-gap-inline);justify-content:space-between;align-items:center}:host>button:is(.group-header,#sci-reset)>div.content>sci-menu-group-label{flex:auto;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host>button:is(.group-header,#sci-reset)>div.content>sci-toolbar-group.actions{flex:none;align-self:center}@container style(--\\275sci-menu-item-hover: true){:host>button:is(.group-header,#sci-reset)>div.content>sci-toolbar-group.actions{--sci-toolbar-item-background-color-hover: var(--\\275sci-menu-action-background-color-hover);--sci-toolbar-item-background-color-active: var(--\\275sci-menu-action-background-color-active)}}:host>div.viewport{grid-column:1/-1;display:inline-grid;grid-template-columns:subgrid;overflow:auto;scrollbar-width:none;max-height:var(--\\275sci-menu-max-height);box-sizing:border-box;margin-block:calc(-1 * var(--sci-button-outline-width));padding-block:var(--sci-button-outline-width);margin-inline:calc(-1 * var(--\\275sci-menu-padding-inline));padding-inline:var(--\\275sci-menu-padding-inline);anchor-name:--sci-menu-viewport}:host>div.viewport:not(:hover)+sci-scrollbar{opacity:0}:host>div.viewport+sci-scrollbar{position:absolute;top:calc(anchor(--sci-menu-viewport top) + var(--sci-button-outline-width));right:anchor(--sci-menu-viewport right);bottom:calc(anchor(--sci-menu-viewport bottom) + var(--sci-button-outline-width))}:host>div.filter{grid-column:1/-1;display:inline-grid;grid-template-columns:subgrid;align-items:center;padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline);border-radius:var(--sci-menu-filter-outline-radius);box-sizing:content-box;min-height:var(--\\275sci-menu-item-min-height)}:host>div.filter:focus-within{outline:var(--sci-menu-filter-outline-width) solid var(--sci-color-accent)}@container style(--\\275sci-menu-glyph-area: false){:host>div.filter{display:flex;gap:var(--\\275sci-menu-item-gap-inline)}:host>div.filter>sci-icon{flex:none}:host>div.filter>sci-menu-filter{flex:auto}}:host>hr{all:unset;grid-column:1/-1;height:1px;background-color:var(--sci-color-border)}:host div.message.no-items{grid-column:1/-1;justify-self:center;color:var(--sci-color-text-subtlest);padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline)}:host *:not(hr)+sci-menu-group:not(:has(>sci-menu-group:first-child)):before{content:\"\";grid-column:1/-1;height:1px;background-color:var(--sci-color-border)}:host sci-menu-group:not(:last-child):not(:has(+sci-menu-group,+sci-menu:last-child)):after{content:\"\";grid-column:1/-1;height:1px;background-color:var(--sci-color-border)}:host button:is(.menu-item,.menu,#sci-reset){all:unset;text-wrap:nowrap;padding:var(--\\275sci-menu-item-padding-block) var(--\\275sci-menu-item-padding-inline);border-radius:var(--sci-menu-item-border-radius);-webkit-user-select:none;user-select:none;cursor:var(--sci-menu-item-cursor);color:var(--sci-menu-item-text-color);min-height:var(--\\275sci-menu-item-min-height);box-sizing:content-box}@container not style(--\\275sci-menu-scrolling: true){:host button:is(.menu-item,.menu,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-menu-item-background-color-hover)}}:host button:is(.menu-item,.menu,#sci-reset):active:where(:not(:disabled)):focus{background-color:var(--sci-menu-item-background-color-active)}:host button:is(.menu-item,.menu,#sci-reset):focus:not(:focus-visible){outline:none}:host button:is(.menu-item,.menu,#sci-reset):focus-visible{outline:var(--sci-menu-item-outline-width) solid var(--sci-color-accent)}:host button:is(.menu-item,.menu,#sci-reset):disabled{color:var(--sci-menu-item-text-color-disabled)}:host button:is(.menu-item,.menu,#sci-reset){grid-column:1/-1;display:inline-grid;grid-template-columns:subgrid;align-items:center;position:relative}:host button:is(.menu-item,.menu,#sci-reset):hover{--\\275sci-menu-item-hover: true}:host button:is(.menu-item,.menu,#sci-reset).checked{--\\275sci-menu-item-checked: true}:host button:is(.menu-item,.menu,#sci-reset).active{--\\275sci-menu-item-active: true}:host button:is(.menu-item,.menu,#sci-reset):has(sci-toolbar-group.actions.menu-open){--\\275sci-menu-item-actions-menu-open: true}:host button:is(.menu-item,.menu,#sci-reset):not(:disabled):is(:hover,.active,:has(sci-toolbar-group.actions.menu-open)){--\\275sci-action-toolbar-visible: true}:host button:is(.menu-item,.menu,#sci-reset).menu-item.active:before{position:absolute;content:\"\";box-sizing:border-box;height:calc(100% - var(--sci-menu-item-active-indicator-border-radius));width:var(--sci-menu-item-active-indicator-size);left:calc(-1 * var(--\\275sci-menu-padding-inline) + 1px);border-radius:var(--sci-menu-item-active-indicator-border-radius);background-color:var(--sci-menu-item-active-indicator-background-color)}:host button:is(.menu-item,.menu,#sci-reset).menu.open{background-color:var(--sci-menu-item-background-color-hover)}:host button:is(.menu-item,.menu,#sci-reset).menu>div.content>sci-icon.chevron{transform:translate(var(--\\275sci-menu-item-chevron-x-offset));--sci-icon-size: calc(.875 * var(--sci-icon-size))}:host button:is(.menu-item,.menu,#sci-reset).menu-item.checked>sci-icon:first-child{--sci-icon-size: calc(.875 * var(--sci-icon-size))}:host button:is(.menu-item,.menu,#sci-reset)>sci-menu-item-icon{display:inline-grid;place-content:center;height:var(--sci-menu-item-size);width:var(--sci-menu-item-size);overflow:hidden}:host button:is(.menu-item,.menu,#sci-reset)>div.content{display:flex;align-items:center;gap:var(--\\275sci-menu-item-gap-inline)}:host button:is(.menu-item,.menu,#sci-reset)>div.content:first-child{grid-column:1/-1}:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-menu-item-label{flex:auto;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host button:is(.menu-item,.menu,#sci-reset)>div.content>span.accelerator{flex:none;color:var(--sci-menu-item-accelerator-text-color);font-size:.9em}@container style(--\\275sci-action-toolbar-visible: true){:host button:is(.menu-item,.menu,#sci-reset)>div.content>span.accelerator:has(+sci-toolbar-group.actions){display:none}}:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-toolbar-group.actions{flex:none;align-self:center}@container style(--\\275sci-menu-item-hover: true){:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-toolbar-group.actions{--sci-toolbar-item-background-color-hover: var(--\\275sci-menu-action-background-color-hover);--sci-toolbar-item-background-color-active: var(--\\275sci-menu-action-background-color-active)}}@container not style(--\\275sci-action-toolbar-visible: true){:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-toolbar-group.actions{display:none}}@container style(--\\275sci-menu-scrolling: true) and (not style(--\\275sci-menu-item-active: true)) and (not style(--\\275sci-menu-item-actions-menu-open: true)){:host button:is(.menu-item,.menu,#sci-reset)>div.content>sci-toolbar-group.actions{visibility:hidden}}:host sci-toolbar-group.actions{transform:translate(var(--\\275sci-menu-item-chevron-x-offset));--sci-toolbar-item-size: var(--sci-menu-item-size);--\\275sci-toolbar-item-padding-block: 0}\n"] }]
1773
+ }], ctorParameters: () => [], propDecorators: { menuItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "menuItems", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], filter: [{ type: i0.Input, args: [{ isSignal: true, alias: "filter", required: false }] }], group: [{ type: i0.Input, args: [{ isSignal: true, alias: "group", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], minWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "minWidth", required: false }] }], maxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxWidth", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }], glyphArea: [{ type: i0.Input, args: [{ isSignal: true, alias: "glyphArea", required: false }] }], anchorWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "anchorWidth", required: false }] }], cssClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "cssClass", required: false }] }], _filterField: [{ type: i0.ViewChild, args: [i0.forwardRef(() => SciMenuFilterComponent), { isSignal: true }] }], _viewport: [{ type: i0.ViewChild, args: ['viewport', { isSignal: true }] }], popoverViewContainerRef: [{ type: i0.ViewChild, args: ['popover_view_container_ref', { ...{ read: ViewContainerRef }, isSignal: true }] }] } });
1773
1774
  /**
1774
1775
  * Evaluates whether the given menu items (or any child groups) require a glyph area for displaying icons and checkmarks.
1775
1776
  */
@@ -1855,7 +1856,7 @@ class SciMenuOpener {
1855
1856
  * Opens the specified menu at the specified position.
1856
1857
  */
1857
1858
  openMenu(menu, options) {
1858
- const injector = createDestroyableInjector({ parent: this._injector });
1859
+ const injector = _createDestroyableInjector({ parent: this._injector });
1859
1860
  const menuItems = Array.isArray(menu) ? signal(menu) : this.menuService.menuItems(menu, options.context ?? new Map(), { injector, metadata: options.metadata });
1860
1861
  return runInInjectionContext(injector, () => {
1861
1862
  // Get or create anchor at specified origin.
@@ -2170,7 +2171,7 @@ class ɵSciMenuRegistry {
2170
2171
  menuItems(location, context, options) {
2171
2172
  assertNotInReactiveContext(this.menuItems, 'Call menuItems() in a non-reactive (non-tracking) context, such as within the untracked() function.');
2172
2173
  if (!options.injector) {
2173
- assertInInjectionContext(this.menuItems, 'Call menuItems() in an injection context. It may allocate resources that are not released until the injection context is destroyed.');
2174
+ _assertInInjectionContext(this.menuItems, 'Call menuItems() in an injection context. It may allocate resources that are not released until the injection context is destroyed.');
2174
2175
  }
2175
2176
  const callingContextInjector = options.injector ?? inject(Injector);
2176
2177
  const menuService = this.menuService;
@@ -2204,7 +2205,7 @@ class ɵSciMenuRegistry {
2204
2205
  // Note: Function invoked in root injection context, which is destroyed when the last consumer (location) is disposed.
2205
2206
  // Inject dependency injection providers for the given menu context.
2206
2207
  const menuEnvironmentInjectionContextProviders = injectMenuInjectionContextProviders(context, { injector: callingContextInjector });
2207
- const menuEnvironmentInjectionContext = createDestroyableInjector({ parent: inject(Injector), providers: menuEnvironmentInjectionContextProviders });
2208
+ const menuEnvironmentInjectionContext = _createDestroyableInjector({ parent: inject(Injector), providers: menuEnvironmentInjectionContextProviders });
2208
2209
  return computed(() => {
2209
2210
  const menuItems = (() => {
2210
2211
  switch (menuContribution.type) {
@@ -2388,18 +2389,18 @@ class MenuItemsCache {
2388
2389
  }, /* @ts-ignore */
2389
2390
  ...(ngDevMode ? [{ debugName: "_cacheByContribution" }] : /* istanbul ignore next */ []));
2390
2391
  /**
2391
- * Gets the menu items of the given contribution used in the given context. Menu items are constructed via the passed factory function if absent (on cache miss).
2392
+ * Gets the menu items of the given contribution used in the given context. Menu items are constructed via the passed computation function if absent (on cache miss).
2392
2393
  *
2393
- * Menu items are cached. Cached menu items are evicted when no longer used, tracked via a reference count based on the provided injector;
2394
+ * Cached menu items are evicted when no longer used, tracked via a reference count based on the provided injector;
2394
2395
  * once all tracked injectors for a cache entry are destroyed, the cache entry is evicted.
2395
2396
  *
2396
- * The factory function is invoked in the root injection context. The injection context is destroyed when the last consumer (location) is disposed.
2397
+ * The computation function is invoked in the root injection context. The injection context is destroyed when the last consumer (location) is disposed.
2397
2398
  */
2398
2399
  computeIfAbsent(contribution, context, computeFn, options) {
2399
2400
  assertNotInReactiveContext(this.computeIfAbsent, 'Call computeIfAbsent() in a non-reactive (non-tracking) context, such as within the untracked() function.');
2400
2401
  const cacheEntry = this._cacheByContribution().get(contribution)?.find(cacheEntry => Objects.isEqual(cacheEntry.context, context)) ?? (() => {
2401
2402
  const rootInjector = options.injector.get(ApplicationRef).injector;
2402
- const cacheEntryInjector = createDestroyableInjector({ parent: rootInjector });
2403
+ const cacheEntryInjector = _createDestroyableInjector({ parent: rootInjector });
2403
2404
  const cacheEntry = {
2404
2405
  injector: cacheEntryInjector,
2405
2406
  contribution,
@@ -2659,6 +2660,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
2659
2660
  args: [{ providedIn: 'root', useExisting: ɵSciMenuService }]
2660
2661
  }] });
2661
2662
 
2663
+ /*
2664
+ * Copyright (c) 2018-2026 Swiss Federal Railways
2665
+ *
2666
+ * This program and the accompanying materials are made
2667
+ * available under the terms of the Eclipse Public License 2.0
2668
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
2669
+ *
2670
+ * SPDX-License-Identifier: EPL-2.0
2671
+ */
2672
+ /**
2673
+ * Provides {@link SciMenuService} for dependency injection.
2674
+ */
2675
+ function provideMenuService() {
2676
+ return [
2677
+ ɵSciMenuService,
2678
+ { provide: SciMenuService, useExisting: ɵSciMenuService },
2679
+ ];
2680
+ }
2681
+
2662
2682
  /*
2663
2683
  * Copyright (c) 2018-2026 Swiss Federal Railways
2664
2684
  *
@@ -2672,9 +2692,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
2672
2692
  function contributeMenu(locationLike, factoryFn, options) {
2673
2693
  assertNotInReactiveContext(contributeMenu, 'Call contributeMenu in a non-reactive (non-tracking) context, such as within the untracked() function.');
2674
2694
  if (!options?.injector) {
2675
- assertInInjectionContext(contributeMenu, 'Must be called within an injection context, or an explicit `Injector` passed via options. Disposes the contribution when the injection context is destroyed.');
2695
+ _assertInInjectionContext(contributeMenu, 'Must be called within an injection context, or an explicit `Injector` passed via options. Disposes the contribution when the injection context is destroyed.');
2676
2696
  }
2677
- const injector = createDestroyableInjector({ parent: options?.injector ?? inject(Injector) });
2697
+ const injector = _createDestroyableInjector({ parent: options?.injector ?? inject(Injector) });
2678
2698
  const location = typeof locationLike === 'string' ? { location: locationLike } : locationLike;
2679
2699
  const menuService = injector.get(ɵSciMenuService);
2680
2700
  const environmentContext = injectMenuContext({ injector });
@@ -3115,25 +3135,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
3115
3135
  * SPDX-License-Identifier: EPL-2.0
3116
3136
  */
3117
3137
 
3118
- /*
3119
- * Copyright (c) 2018-2026 Swiss Federal Railways
3120
- *
3121
- * This program and the accompanying materials are made
3122
- * available under the terms of the Eclipse Public License 2.0
3123
- * which is available at https://www.eclipse.org/legal/epl-2.0/
3124
- *
3125
- * SPDX-License-Identifier: EPL-2.0
3126
- */
3127
- /**
3128
- * Provides {@link SciMenuService} for dependency injection.
3129
- */
3130
- function provideMenuService() {
3131
- return [
3132
- ɵSciMenuService,
3133
- { provide: SciMenuService, useExisting: ɵSciMenuService },
3134
- ];
3135
- }
3136
-
3137
3138
  /*
3138
3139
  * Copyright (c) 2018-2026 Swiss Federal Railways
3139
3140
  *
@@ -3273,5 +3274,5 @@ function provideMenuAcceleratorTargetProvider(providerFn) {
3273
3274
  * Generated bundle index. Do not edit.
3274
3275
  */
3275
3276
 
3276
- export { SciMenuAdapter, SciMenuService, SciMenubarComponent, SciToolbarComponent, contributeMenu, installMenuAccelerators, provideMenuAcceleratorTargetProvider, provideMenuContextProvider, provideMenuInjectionContextProvider, ɵSciMenuService, injectMenuInjectionContextProviders as ɵinjectMenuInjectionContextProviders };
3277
+ export { SciMenuAdapter, SciMenuService, SciMenubarComponent, SciToolbarComponent, contributeMenu, installMenuAccelerators, provideMenuAcceleratorTargetProvider, provideMenuContextProvider, provideMenuInjectionContextProvider, provideMenuService, ɵSciMenuService, injectMenuInjectionContextProviders as ɵinjectMenuInjectionContextProviders };
3277
3278
  //# sourceMappingURL=scion-components-menu.mjs.map