@siemens/element-ng 49.10.0 → 49.11.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 (32) hide show
  1. package/fesm2022/siemens-element-ng-about.mjs +13 -4
  2. package/fesm2022/siemens-element-ng-about.mjs.map +1 -1
  3. package/fesm2022/siemens-element-ng-application-header.mjs +4 -4
  4. package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
  5. package/fesm2022/siemens-element-ng-date-range-filter.mjs +12 -3
  6. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
  7. package/fesm2022/siemens-element-ng-datepicker.mjs +1 -1
  8. package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
  9. package/fesm2022/siemens-element-ng-filtered-search.mjs +2 -2
  10. package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
  11. package/fesm2022/siemens-element-ng-form.mjs +6 -6
  12. package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
  13. package/fesm2022/siemens-element-ng-landing-page.mjs +2 -2
  14. package/fesm2022/siemens-element-ng-landing-page.mjs.map +1 -1
  15. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +355 -258
  16. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -1
  17. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +18 -2
  18. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
  19. package/fesm2022/siemens-element-ng-photo-upload.mjs +2 -2
  20. package/fesm2022/siemens-element-ng-select.mjs +2 -2
  21. package/fesm2022/siemens-element-ng-side-panel.mjs +2 -2
  22. package/fesm2022/siemens-element-ng-toast-notification.mjs +2 -2
  23. package/fesm2022/siemens-element-ng-tour.mjs +2 -2
  24. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  25. package/fesm2022/siemens-element-ng-tree-view.mjs +2 -2
  26. package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
  27. package/package.json +3 -3
  28. package/template-i18n.json +8 -6
  29. package/types/siemens-element-ng-about.d.ts +11 -1
  30. package/types/siemens-element-ng-date-range-filter.d.ts +10 -1
  31. package/types/siemens-element-ng-navbar-vertical-next.d.ts +161 -85
  32. package/types/siemens-element-ng-translate.d.ts +2 -0
@@ -1,18 +1,19 @@
1
1
  import * as i0 from '@angular/core';
2
- import { ChangeDetectionStrategy, Component, InjectionToken, model, input, booleanAttribute, inject, Injector, signal, computed, afterNextRender, linkedSignal, untracked, ViewContainerRef, effect, Directive, output, viewChild, NgModule } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, InjectionToken, input, linkedSignal, untracked, signal, inject, computed, ViewContainerRef, DestroyRef, Injector, effect, Directive, booleanAttribute, ElementRef, model, viewChild, contentChildren, afterNextRender, output, NgModule } from '@angular/core';
3
3
  import { BreakpointObserver } from '@angular/cdk/layout';
4
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
- import { elementLayoutPane2Right, elementLayoutPane2, elementDoubleRight, elementDoubleLeft, elementRight2, elementDown2, elementSearch } from '@siemens/element-icons';
4
+ import * as i1 from '@angular/cdk/portal';
5
+ import { TemplatePortal, DomPortal, PortalModule } from '@angular/cdk/portal';
6
+ import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
+ import { elementRight2, elementDown2, elementLayoutPane2Right, elementLayoutPane2, elementDoubleRight, elementDoubleLeft, elementSearch } from '@siemens/element-icons';
6
8
  import { SI_UI_STATE_SERVICE } from '@siemens/element-ng/common';
7
9
  import { addIcons, SiIconComponent } from '@siemens/element-ng/icon';
8
10
  import { BOOTSTRAP_BREAKPOINTS } from '@siemens/element-ng/resize-observer';
9
11
  import { SiSkipLinkTargetDirective } from '@siemens/element-ng/skip-links';
10
12
  import { t, SiTranslatePipe } from '@siemens/element-translate-ng/translate';
13
+ import { RouterLinkActive } from '@angular/router';
14
+ import { EMPTY } from 'rxjs';
11
15
  import { Overlay } from '@angular/cdk/overlay';
12
- import { TemplatePortal } from '@angular/cdk/portal';
13
16
  import { CdkTrapFocus } from '@angular/cdk/a11y';
14
- import { RouterLinkActive } from '@angular/router';
15
- import { SiLinkDirective } from '@siemens/element-ng/link';
16
17
  import { SiSearchBarComponent } from '@siemens/element-ng/search-bar';
17
18
 
18
19
  /**
@@ -40,6 +41,324 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
40
41
  /** @experimental */
41
42
  const SI_NAVBAR_VERTICAL_NEXT = new InjectionToken('SI_NAVBAR_VERTICAL_NEXT');
42
43
 
44
+ /**
45
+ * Copyright (c) Siemens 2016 - 2026
46
+ * SPDX-License-Identifier: MIT
47
+ */
48
+ /**
49
+ * Using this component, to anchor the flyout inside the navbar within the a11y tree.
50
+ * Otherwise, without aria-owns, screen reader will announce the leaving of the navbar when moving to the flyout.
51
+ * Aria-owns cannot be put directly on the trigger
52
+ * as chrome will include the flyout children in the a11y label of the trigger.
53
+ * @experimental
54
+ */
55
+ class SiNavbarFlyoutAnchorComponent {
56
+ groupId = input(...(ngDevMode ? [undefined, { debugName: "groupId" }] : []));
57
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarFlyoutAnchorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
58
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.8", type: SiNavbarFlyoutAnchorComponent, isStandalone: true, selector: "si-navbar-flyout-anchor", inputs: { groupId: { classPropertyName: "groupId", publicName: "groupId", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.aria-owns": "groupId()" } }, ngImport: i0, template: '', isInline: true });
59
+ }
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarFlyoutAnchorComponent, decorators: [{
61
+ type: Component,
62
+ args: [{
63
+ selector: 'si-navbar-flyout-anchor',
64
+ template: '',
65
+ host: { '[attr.aria-owns]': 'groupId()' }
66
+ }]
67
+ }], propDecorators: { groupId: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupId", required: false }] }] } });
68
+ /** @experimental */
69
+ class SiNavbarVerticalNextGroupTriggerDirective {
70
+ static idCounter = 0;
71
+ /** @internal */
72
+ groupId = `si-navbar-vertical-next-group-${SiNavbarVerticalNextGroupTriggerDirective.idCounter++}`;
73
+ id = `${this.groupId}-trigger`;
74
+ groupTemplate = input.required({ ...(ngDevMode ? { debugName: "groupTemplate" } : {}), alias: 'siNavbarVerticalNextGroupTriggerFor' });
75
+ stateId = input(...(ngDevMode ? [undefined, { debugName: "stateId" }] : []));
76
+ /** @defaultValue false */
77
+ expanded = linkedSignal({ ...(ngDevMode ? { debugName: "expanded" } : {}), source: () => {
78
+ const stateId = this.stateId();
79
+ return {
80
+ uiState: stateId ? this.navbar.uiStateExpandedItems()[stateId] : undefined,
81
+ alwaysFlyout: this.navbar.alwaysFlyout()
82
+ };
83
+ },
84
+ computation: (source, previous) => {
85
+ // `alwaysFlyout` toggled: reset expansion. When switching back to inline,
86
+ // surface the group that owns the active route.
87
+ if (previous && source.alwaysFlyout !== previous.source.alwaysFlyout) {
88
+ return !source.alwaysFlyout && untracked(() => this.active());
89
+ }
90
+ // First run or UIState (re)loaded: honor the persisted value when present,
91
+ // otherwise keep the user's current expansion.
92
+ if (source.uiState !== undefined) {
93
+ return source.uiState;
94
+ }
95
+ return previous?.value ?? false;
96
+ } });
97
+ /**
98
+ * Whether the group is currently rendered as a transient flyout overlay
99
+ * (true) or inline within the navbar (false). Automatically resets to
100
+ * `false` whenever the rendering mode changes.
101
+ * @internal
102
+ */
103
+ flyout = linkedSignal({ ...(ngDevMode ? { debugName: "flyout" } : {}), source: () => this.flyoutMode(),
104
+ computation: () => false });
105
+ /** `true` when this group contains the active route. Set by the group component.
106
+ * @internal
107
+ */
108
+ active = signal(false, ...(ngDevMode ? [{ debugName: "active" }] : []));
109
+ navbar = inject(SI_NAVBAR_VERTICAL_NEXT);
110
+ /** Signal mirror of the navbar's flyout mode. `true` when groups should render as transient overlays instead of inline.
111
+ * @internal
112
+ */
113
+ flyoutMode = computed(() => this.navbar.flyoutMode(), ...(ngDevMode ? [{ debugName: "flyoutMode" }] : []));
114
+ flyoutOutsideClickSubscription;
115
+ viewContainer = inject(ViewContainerRef);
116
+ overlay = inject(Overlay);
117
+ destroyRef = inject(DestroyRef);
118
+ injector = Injector.create({ parent: inject(Injector), providers: [] });
119
+ overlayRef = this.overlay.create({
120
+ positionStrategy: this.buildPositionStrategy(this.navbar.chipMode())
121
+ });
122
+ groupView;
123
+ flyoutAnchorComponentRef;
124
+ templatePortal = computed(() => new TemplatePortal(this.groupTemplate(), this.viewContainer, undefined, this.injector), ...(ngDevMode ? [{ debugName: "templatePortal" }] : []));
125
+ constructor() {
126
+ // Manage the rendering of the inline projection / flyout overlay in
127
+ // response to mode changes. Only side effects belong here; the related
128
+ // signal state is propagated by `flyout` / `expanded` linked signals.
129
+ effect(() => {
130
+ this.flyoutMode();
131
+ untracked(() => {
132
+ this.detachFlyout();
133
+ this.attachInline();
134
+ });
135
+ });
136
+ this.destroyRef.onDestroy(() => {
137
+ this.overlayRef.detach();
138
+ this.overlayRef.dispose();
139
+ });
140
+ }
141
+ /** @internal */
142
+ buildPositionStrategy(chipMode) {
143
+ const positions = chipMode
144
+ ? [
145
+ { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },
146
+ { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' }
147
+ ]
148
+ : [
149
+ { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top' },
150
+ { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom' }
151
+ ];
152
+ return this.overlay
153
+ .position()
154
+ .flexibleConnectedTo(this.viewContainer.element)
155
+ .withPositions(positions);
156
+ }
157
+ /** @internal */
158
+ hideFlyout() {
159
+ if (!this.flyout())
160
+ return;
161
+ this.flyout.set(false);
162
+ this.detachFlyout();
163
+ this.attachInline();
164
+ }
165
+ triggered() {
166
+ if (this.flyoutMode()) {
167
+ this.toggleFlyout();
168
+ }
169
+ else {
170
+ this.expanded.set(!this.expanded());
171
+ this.navbar.groupStateChanged(this.stateId(), this.expanded());
172
+ }
173
+ }
174
+ toggleFlyout() {
175
+ if (this.flyout()) {
176
+ this.hideFlyout();
177
+ }
178
+ else {
179
+ this.flyout.set(true);
180
+ this.attachFlyout();
181
+ }
182
+ }
183
+ attachInline() {
184
+ this.overlayRef.detach();
185
+ this.groupView?.destroy();
186
+ this.groupView = this.viewContainer.createEmbeddedView(this.groupTemplate(), undefined, {
187
+ injector: this.injector
188
+ });
189
+ }
190
+ attachFlyout() {
191
+ this.overlayRef.updatePositionStrategy(this.buildPositionStrategy(this.navbar.chipMode()));
192
+ this.groupView?.destroy();
193
+ this.groupView = this.overlayRef.attach(this.templatePortal());
194
+ // In chip mode the trigger's DOM is outside <nav> via DomPortal; use the
195
+ // navbar's in-nav anchor host so aria-owns stays within the navigation landmark.
196
+ const anchorHost = this.navbar.flyoutAnchorHost() ?? this.viewContainer;
197
+ this.flyoutAnchorComponentRef = anchorHost.createComponent(SiNavbarFlyoutAnchorComponent);
198
+ this.flyoutAnchorComponentRef.setInput('groupId', this.groupId);
199
+ this.flyoutOutsideClickSubscription = this.overlayRef
200
+ .outsidePointerEvents()
201
+ .subscribe(() => this.hideFlyout());
202
+ }
203
+ detachFlyout() {
204
+ this.flyoutAnchorComponentRef?.destroy();
205
+ this.flyoutAnchorComponentRef = undefined;
206
+ this.flyoutOutsideClickSubscription?.unsubscribe();
207
+ this.flyoutOutsideClickSubscription = undefined;
208
+ }
209
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextGroupTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
210
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.8", type: SiNavbarVerticalNextGroupTriggerDirective, isStandalone: true, selector: "button[siNavbarVerticalNextGroupTriggerFor]", inputs: { groupTemplate: { classPropertyName: "groupTemplate", publicName: "siNavbarVerticalNextGroupTriggerFor", isSignal: true, isRequired: true, transformFunction: null }, stateId: { classPropertyName: "stateId", publicName: "stateId", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "triggered()" }, properties: { "id": "id", "class.show": "expanded()", "attr.aria-controls": "groupId", "attr.aria-expanded": "flyoutMode() ? flyout() : expanded()" }, classAttribute: "dropdown-toggle" }, ngImport: i0 });
211
+ }
212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextGroupTriggerDirective, decorators: [{
213
+ type: Directive,
214
+ args: [{
215
+ selector: 'button[siNavbarVerticalNextGroupTriggerFor]',
216
+ host: {
217
+ class: 'dropdown-toggle',
218
+ '[id]': 'id',
219
+ '[class.show]': 'expanded()',
220
+ '[attr.aria-controls]': 'groupId',
221
+ '[attr.aria-expanded]': 'flyoutMode() ? flyout() : expanded()',
222
+ '(click)': 'triggered()'
223
+ }
224
+ }]
225
+ }], ctorParameters: () => [], propDecorators: { groupTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "siNavbarVerticalNextGroupTriggerFor", required: true }] }], stateId: [{ type: i0.Input, args: [{ isSignal: true, alias: "stateId", required: false }] }] } });
226
+
227
+ /**
228
+ * Copyright (c) Siemens 2016 - 2026
229
+ * SPDX-License-Identifier: MIT
230
+ */
231
+ /** @experimental */
232
+ class SiNavbarVerticalNextItemComponent {
233
+ icons = addIcons({ elementDown2, elementRight2 });
234
+ /** Optional icon to render before the label. */
235
+ icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : []));
236
+ /** Badge value to display. */
237
+ badge = input(...(ngDevMode ? [undefined, { debugName: "badge" }] : []));
238
+ /** Color of the badge. */
239
+ badgeColor = input(...(ngDevMode ? [undefined, { debugName: "badgeColor" }] : []));
240
+ /**
241
+ * Hide the badge when the navbar is collapsed.
242
+ *
243
+ * @defaultValue false
244
+ */
245
+ hideBadgeWhenCollapsed = input(false, { ...(ngDevMode ? { debugName: "hideBadgeWhenCollapsed" } : {}), transform: booleanAttribute });
246
+ /** Override the active state. Useful for action items. */
247
+ activeOverride = input(...(ngDevMode ? [undefined, { debugName: "activeOverride" }] : []));
248
+ navbar = inject(SI_NAVBAR_VERTICAL_NEXT);
249
+ parent = inject(SiNavbarVerticalNextItemComponent, {
250
+ skipSelf: true,
251
+ optional: true
252
+ });
253
+ group = inject(SiNavbarVerticalNextGroupTriggerDirective, {
254
+ optional: true,
255
+ self: true
256
+ });
257
+ routerLinkActive = inject(RouterLinkActive, { optional: true });
258
+ /** Signal mirror of `RouterLinkActive.isActive`.
259
+ * @internal
260
+ */
261
+ routerActive = toSignal(this.routerLinkActive?.isActiveChange ?? EMPTY, { initialValue: this.routerLinkActive?.isActive ?? false });
262
+ /** @internal */
263
+ elementRef = inject(ElementRef);
264
+ /** DOM portal relocated into the chip slot when collapsed.
265
+ * @internal
266
+ */
267
+ hostPortal = new DomPortal(this.elementRef.nativeElement);
268
+ /** Signal mirror of the navbar's chip mode. `true` when inline-collapse is active and the navbar is collapsed.
269
+ * @internal
270
+ */
271
+ chipMode = computed(() => this.navbar.chipMode(), ...(ngDevMode ? [{ debugName: "chipMode" }] : []));
272
+ /**
273
+ * Determines if the badge contains text-only content (not numeric)
274
+ */
275
+ textOnlyBadge = computed(() => {
276
+ const badge = this.badge();
277
+ return badge != null && badge !== '' ? typeof badge !== 'number' : false;
278
+ }, ...(ngDevMode ? [{ debugName: "textOnlyBadge" }] : []));
279
+ /** `true` when the `active` CSS class should be applied to this item.
280
+ *
281
+ * In chip mode, root-level items use `is-chip` styling instead of `active`, so the
282
+ * class is suppressed unless the item is a sub-item (`parent` is set) or it is a
283
+ * group trigger whose flyout is currently open.
284
+ * Outside chip mode the value equals `active()`.
285
+ * @internal
286
+ */
287
+ showActive = computed(() => {
288
+ if (this.chipMode()) {
289
+ return (!!this.parent || this.group?.flyout()) && this.active();
290
+ }
291
+ return this.active();
292
+ }, ...(ngDevMode ? [{ debugName: "showActive" }] : []));
293
+ /**
294
+ * Formats badge value to limit display to "+99" for numbers greater than 99
295
+ */
296
+ formattedBadge = computed(() => {
297
+ const badge = this.badge();
298
+ if (badge == null || badge === '') {
299
+ return '';
300
+ }
301
+ if (typeof badge === 'number') {
302
+ return badge > 99 ? '+99' : badge.toString();
303
+ }
304
+ return badge.toString();
305
+ }, ...(ngDevMode ? [{ debugName: "formattedBadge" }] : []));
306
+ /** Active via override or router link — excludes group state.
307
+ * @internal
308
+ */
309
+ anyRouteActive = computed(() => !!this.activeOverride() || this.routerActive(), ...(ngDevMode ? [{ debugName: "anyRouteActive" }] : []));
310
+ /** Own route is active, or a descendant route is active — includes group state, not gated on expansion.
311
+ * @internal
312
+ */
313
+ isOnActiveRoute = computed(() => this.anyRouteActive() || !!this.group?.active(), ...(ngDevMode ? [{ debugName: "isOnActiveRoute" }] : []));
314
+ /**
315
+ * `true` when this item should reflect activity.
316
+ *
317
+ * For non-trigger items: equivalent to being on the active route.
318
+ *
319
+ * For group trigger items: also `true` when a descendant route is active and
320
+ * the descendant is not currently visible inline — i.e. the group is collapsed
321
+ * or the navbar is collapsed. This surfaces the active state on the trigger
322
+ * when the active child cannot show it itself.
323
+ */
324
+ active = computed(() => this.anyRouteActive() ||
325
+ ((!this.group?.expanded() || this.navbar.collapsed()) && !!this.group?.active()), ...(ngDevMode ? [{ debugName: "active" }] : []));
326
+ /** `true` when this is a root-level item on the active route (ungated, so the chip survives collapse↔expand).
327
+ * @internal
328
+ */
329
+ isActiveRootItem = computed(() => !this.parent && this.isOnActiveRoute(), ...(ngDevMode ? [{ debugName: "isActiveRootItem" }] : []));
330
+ /** `true` when this item is currently rendered as a chip in the inline-collapse bar.
331
+ * @internal
332
+ */
333
+ isChip = computed(() => this.navbar.chipPortalAttached() && this.isActiveRootItem(), ...(ngDevMode ? [{ debugName: "isChip" }] : []));
334
+ ngOnInit() {
335
+ if (this.group && this.active()) {
336
+ this.group.expanded.set(true);
337
+ }
338
+ }
339
+ triggered() {
340
+ this.parent?.group?.hideFlyout();
341
+ if (!this.group) {
342
+ this.navbar.itemTriggered();
343
+ }
344
+ }
345
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
346
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiNavbarVerticalNextItemComponent, isStandalone: true, selector: "a[si-navbar-vertical-next-item], button[si-navbar-vertical-next-item]", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null }, badgeColor: { classPropertyName: "badgeColor", publicName: "badgeColor", isSignal: true, isRequired: false, transformFunction: null }, hideBadgeWhenCollapsed: { classPropertyName: "hideBadgeWhenCollapsed", publicName: "hideBadgeWhenCollapsed", isSignal: true, isRequired: false, transformFunction: null }, activeOverride: { classPropertyName: "activeOverride", publicName: "activeOverride", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "triggered()" }, properties: { "class.focus-inside": "!chipMode() || !!parent", "class.navbar-vertical-item": "!isChip()", "class.active": "showActive()", "class.is-chip": "isChip()", "class.btn": "isChip()", "class.btn-primary-ghost": "isChip()", "class.hide-badge-collapsed": "hideBadgeWhenCollapsed()" } }, ngImport: i0, template: "@let icon = this.icon();\n@if (icon) {\n <si-icon [class]=\"isChip() ? 'icon' : 'icon-lg'\" [icon]=\"icon\" />\n}\n<div class=\"item-title text-truncate si-h5\">\n <ng-content />\n</div>\n@if (!isChip() && !navbar.textOnly() && formattedBadge()) {\n @let badgeColor = this.badgeColor();\n <span\n [class]=\"[\n 'badge',\n badgeColor ? `bg-${badgeColor}` : 'bg-default',\n textOnlyBadge() ? 'badge-text-only' : '',\n navbar.collapsed() ? 'badge-collapsed' : ''\n ]\"\n >{{ formattedBadge() }}</span\n >\n}\n@if (group) {\n <si-icon\n class=\"dropdown-caret me-0 text-body\"\n [icon]=\"group.flyoutMode() ? icons.elementRight2 : icons.elementDown2\"\n />\n}\n", styles: [":host(.navbar-vertical-item){display:flex;align-items:center;position:relative;color:var(--element-text-primary);background:none;border:0;font-size:.875rem;padding-block:8px;padding-inline:0 12px;min-inline-size:0;min-block-size:calc(1lh + 24px);inline-size:100%;border-radius:0}:host(.navbar-vertical-item) .item-title{margin-inline-start:12px}:host(.navbar-vertical-item) .icon-lg{margin-inline-start:12px}:host(.navbar-vertical-item) .icon-lg+.item-title{margin-inline-start:8px}:host(.navbar-vertical-item).show .badge:not(.badge-collapsed){display:none}:host(.navbar-vertical-item):not(.show) .badge+.dropdown-caret{margin-inline:0;padding-inline:0}:host(.navbar-vertical-item).active{color:var(--element-action-primary-hover);background:var(--element-base-1-selected)}:host(.navbar-vertical-item).active:after{content:\"\";position:absolute;inset-block:0;inset-inline-start:0;inline-size:4px;background:var(--element-action-primary-hover)}:host(.navbar-vertical-item):hover{text-decoration:none;background:var(--element-base-1-hover)}:host-context(si-navbar-vertical-next-items > .navbar-vertical-item)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-items > si-navbar-vertical-next-group)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-items > si-navbar-flyout-anchor)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-footer-items > .navbar-vertical-item)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-footer-items > si-navbar-vertical-next-group)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-footer-items > si-navbar-flyout-anchor)+:host(.navbar-vertical-item){margin-block-start:8px}:host-context(.nav-text-only si-navbar-vertical-next-group) .item-title{margin-inline-start:0}:host-context(si-navbar-vertical-next-group) :host(.navbar-vertical-item){padding-inline-start:32px}:host-context(si-navbar-vertical-next-group) :host(.navbar-vertical-item) .item-title{font-weight:400}:host-context(.dropdown-menu) :host(.navbar-vertical-item){padding-inline-start:0}:host-context(.dropdown-menu) :host(.navbar-vertical-item) .item-title{font-weight:400}:host-context(.nav-collapsed):not(.is-chip) .badge{position:absolute;inset-block-start:4px;inset-inline-end:6px;min-inline-size:.875rem;border-radius:.4375rem;font-size:.75rem;line-height:.875rem;padding-block:0;padding-inline:4px;font-family:var(--element-body-font-family);font-weight:600;text-align:center}:host-context(.nav-collapsed):not(.is-chip) .badge.badge-text-only{color:transparent;font-size:0}:host-context(.nav-collapsed):not(.is-chip) :is(.item-title,.dropdown-caret){position:absolute!important;inline-size:1px!important;block-size:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}:host-context(.nav-collapsed):not(.is-chip).hide-badge-collapsed .badge{display:none}.badge{margin-inline:auto 0}:host(.is-chip).active:after{display:none}:host(.is-chip) .dropdown-caret{display:none}:host(.is-chip) .item-title{font-weight:400}:host-context(.chip).is-chip{border-start-start-radius:0;border-end-start-radius:0;inline-size:100%;min-inline-size:0}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
347
+ }
348
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextItemComponent, decorators: [{
349
+ type: Component,
350
+ args: [{ selector: 'a[si-navbar-vertical-next-item], button[si-navbar-vertical-next-item]', imports: [SiIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: {
351
+ '[class.focus-inside]': '!chipMode() || !!parent',
352
+ '[class.navbar-vertical-item]': '!isChip()',
353
+ '[class.active]': 'showActive()',
354
+ '[class.is-chip]': 'isChip()',
355
+ '[class.btn]': 'isChip()',
356
+ '[class.btn-primary-ghost]': 'isChip()',
357
+ '[class.hide-badge-collapsed]': 'hideBadgeWhenCollapsed()',
358
+ '(click)': 'triggered()'
359
+ }, template: "@let icon = this.icon();\n@if (icon) {\n <si-icon [class]=\"isChip() ? 'icon' : 'icon-lg'\" [icon]=\"icon\" />\n}\n<div class=\"item-title text-truncate si-h5\">\n <ng-content />\n</div>\n@if (!isChip() && !navbar.textOnly() && formattedBadge()) {\n @let badgeColor = this.badgeColor();\n <span\n [class]=\"[\n 'badge',\n badgeColor ? `bg-${badgeColor}` : 'bg-default',\n textOnlyBadge() ? 'badge-text-only' : '',\n navbar.collapsed() ? 'badge-collapsed' : ''\n ]\"\n >{{ formattedBadge() }}</span\n >\n}\n@if (group) {\n <si-icon\n class=\"dropdown-caret me-0 text-body\"\n [icon]=\"group.flyoutMode() ? icons.elementRight2 : icons.elementDown2\"\n />\n}\n", styles: [":host(.navbar-vertical-item){display:flex;align-items:center;position:relative;color:var(--element-text-primary);background:none;border:0;font-size:.875rem;padding-block:8px;padding-inline:0 12px;min-inline-size:0;min-block-size:calc(1lh + 24px);inline-size:100%;border-radius:0}:host(.navbar-vertical-item) .item-title{margin-inline-start:12px}:host(.navbar-vertical-item) .icon-lg{margin-inline-start:12px}:host(.navbar-vertical-item) .icon-lg+.item-title{margin-inline-start:8px}:host(.navbar-vertical-item).show .badge:not(.badge-collapsed){display:none}:host(.navbar-vertical-item):not(.show) .badge+.dropdown-caret{margin-inline:0;padding-inline:0}:host(.navbar-vertical-item).active{color:var(--element-action-primary-hover);background:var(--element-base-1-selected)}:host(.navbar-vertical-item).active:after{content:\"\";position:absolute;inset-block:0;inset-inline-start:0;inline-size:4px;background:var(--element-action-primary-hover)}:host(.navbar-vertical-item):hover{text-decoration:none;background:var(--element-base-1-hover)}:host-context(si-navbar-vertical-next-items > .navbar-vertical-item)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-items > si-navbar-vertical-next-group)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-items > si-navbar-flyout-anchor)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-footer-items > .navbar-vertical-item)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-footer-items > si-navbar-vertical-next-group)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-footer-items > si-navbar-flyout-anchor)+:host(.navbar-vertical-item){margin-block-start:8px}:host-context(.nav-text-only si-navbar-vertical-next-group) .item-title{margin-inline-start:0}:host-context(si-navbar-vertical-next-group) :host(.navbar-vertical-item){padding-inline-start:32px}:host-context(si-navbar-vertical-next-group) :host(.navbar-vertical-item) .item-title{font-weight:400}:host-context(.dropdown-menu) :host(.navbar-vertical-item){padding-inline-start:0}:host-context(.dropdown-menu) :host(.navbar-vertical-item) .item-title{font-weight:400}:host-context(.nav-collapsed):not(.is-chip) .badge{position:absolute;inset-block-start:4px;inset-inline-end:6px;min-inline-size:.875rem;border-radius:.4375rem;font-size:.75rem;line-height:.875rem;padding-block:0;padding-inline:4px;font-family:var(--element-body-font-family);font-weight:600;text-align:center}:host-context(.nav-collapsed):not(.is-chip) .badge.badge-text-only{color:transparent;font-size:0}:host-context(.nav-collapsed):not(.is-chip) :is(.item-title,.dropdown-caret){position:absolute!important;inline-size:1px!important;block-size:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}:host-context(.nav-collapsed):not(.is-chip).hide-badge-collapsed .badge{display:none}.badge{margin-inline:auto 0}:host(.is-chip).active:after{display:none}:host(.is-chip) .dropdown-caret{display:none}:host(.is-chip) .item-title{font-weight:400}:host-context(.chip).is-chip{border-start-start-radius:0;border-end-start-radius:0;inline-size:100%;min-inline-size:0}\n"] }]
360
+ }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], badge: [{ type: i0.Input, args: [{ isSignal: true, alias: "badge", required: false }] }], badgeColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgeColor", required: false }] }], hideBadgeWhenCollapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideBadgeWhenCollapsed", required: false }] }], activeOverride: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeOverride", required: false }] }] } });
361
+
43
362
  /**
44
363
  * Copyright (c) Siemens 2016 - 2026
45
364
  * SPDX-License-Identifier: MIT
@@ -128,6 +447,22 @@ class SiNavbarVerticalNextComponent {
128
447
  injector = inject(Injector);
129
448
  ready = signal(false, ...(ngDevMode ? [{ debugName: "ready" }] : []));
130
449
  smallScreen = signal(false, ...(ngDevMode ? [{ debugName: "smallScreen" }] : []));
450
+ /** Stable ViewContainerRef inside <nav>, used to host flyout anchors when the chip DomPortal moves a trigger outside the nav.
451
+ * @internal
452
+ */
453
+ flyoutAnchorHost = viewChild('flyoutAnchorHost', { ...(ngDevMode ? { debugName: "flyoutAnchorHost" } : {}), read: ViewContainerRef });
454
+ /** All projected nav items, including descendants inside group templates.
455
+ * @internal
456
+ */
457
+ items = contentChildren(SiNavbarVerticalNextItemComponent, { ...(ngDevMode ? { debugName: "items" } : {}), descendants: true });
458
+ /** The active root-level item; group triggers resolve for nested routes.
459
+ * @internal
460
+ */
461
+ activeItem = computed(() => this.items().find(item => item.isActiveRootItem()), ...(ngDevMode ? [{ debugName: "activeItem" }] : []));
462
+ /** `true` when the active item's portal should occupy the chip slot.
463
+ * @internal
464
+ */
465
+ chipPortalAttached = computed(() => this.inlineCollapse() && this.collapsed() && !!this.activeItem(), ...(ngDevMode ? [{ debugName: "chipPortalAttached" }] : []));
131
466
  /**
132
467
  * @defaultValue
133
468
  * ```
@@ -143,6 +478,14 @@ class SiNavbarVerticalNextComponent {
143
478
  }
144
479
  return this.collapsed() ? this.icons.elementDoubleRight : this.icons.elementDoubleLeft;
145
480
  }, ...(ngDevMode ? [{ debugName: "toggleIcon" }] : []));
481
+ /** `true` when inline-collapse is active and the nav is collapsed.
482
+ * @internal
483
+ */
484
+ chipMode = computed(() => this.inlineCollapse() && this.collapsed(), ...(ngDevMode ? [{ debugName: "chipMode" }] : []));
485
+ /** `true` when groups should render as flyout overlays.
486
+ * @internal
487
+ */
488
+ flyoutMode = computed(() => this.alwaysFlyout() || this.collapsed(), ...(ngDevMode ? [{ debugName: "flyoutMode" }] : []));
146
489
  constructor() {
147
490
  this.breakpointObserver
148
491
  .observe(`(max-width: ${BOOTSTRAP_BREAKPOINTS.lgMinimum}px)`)
@@ -223,19 +566,21 @@ class SiNavbarVerticalNextComponent {
223
566
  }
224
567
  }
225
568
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
226
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiNavbarVerticalNextComponent, isStandalone: true, selector: "si-navbar-vertical-next", inputs: { collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, textOnly: { classPropertyName: "textOnly", publicName: "textOnly", isSignal: true, isRequired: false, transformFunction: null }, inlineCollapse: { classPropertyName: "inlineCollapse", publicName: "inlineCollapse", isSignal: true, isRequired: false, transformFunction: null }, alwaysFlyout: { classPropertyName: "alwaysFlyout", publicName: "alwaysFlyout", isSignal: true, isRequired: false, transformFunction: null }, visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, toggleButtonText: { classPropertyName: "toggleButtonText", publicName: "toggleButtonText", isSignal: true, isRequired: false, transformFunction: null }, stateId: { classPropertyName: "stateId", publicName: "stateId", isSignal: true, isRequired: false, transformFunction: null }, skipLinkNavigationLabel: { classPropertyName: "skipLinkNavigationLabel", publicName: "skipLinkNavigationLabel", isSignal: true, isRequired: false, transformFunction: null }, skipLinkMainContentLabel: { classPropertyName: "skipLinkMainContentLabel", publicName: "skipLinkMainContentLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsed: "collapsedChange" }, host: { properties: { "class.nav-collapsed": "collapsed()", "class.nav-text-only": "textOnly()", "class.nav-inline-collapse": "inlineCollapse()", "class.visible": "visible()", "class.ready": "ready()" }, classAttribute: "si-layout-inner ready" }, providers: [{ provide: SI_NAVBAR_VERTICAL_NEXT, useExisting: SiNavbarVerticalNextComponent }], usesOnChanges: true, ngImport: i0, template: "@if (visible()) {\n @if (smallScreen() && !collapsed()) {\n <div class=\"modal-backdrop\" animate.leave=\"backdrop-leave\" (click)=\"toggleCollapse()\"></div>\n }\n @let inlineCollapsed = inlineCollapse() && collapsed();\n <nav\n tabindex=\"-1\"\n class=\"bg-base-1 focus-sub-inside\"\n [class.expanded]=\"!collapsed()\"\n [siSkipLinkTarget]=\"skipLinkNavigationLabel()\"\n [class.text-only]=\"textOnly()\"\n >\n <div class=\"collapse-toggle ms-auto\">\n <div class=\"mobile-drawer focus-inside\">\n <button\n type=\"button\"\n class=\"btn btn-icon toggle-button\"\n [class.btn-primary-ghost]=\"inlineCollapsed\"\n [class.btn-tertiary-ghost]=\"!inlineCollapsed\"\n [attr.aria-label]=\"toggleButtonText() | translate\"\n [attr.aria-expanded]=\"!collapsed()\"\n (click)=\"toggleCollapse()\"\n >\n <si-icon class=\"flip-rtl\" [icon]=\"toggleIcon()\" />\n </button>\n </div>\n </div>\n <div\n class=\"nav-content\"\n [attr.inert]=\"inlineCollapsed ? '' : null\"\n [attr.aria-hidden]=\"inlineCollapsed ? 'true' : null\"\n >\n <ng-content select=\"si-navbar-vertical-next-search\" />\n <ng-content select=\"si-navbar-vertical-next-items\" />\n <ng-content select=\"si-navbar-vertical-next-footer-items\" />\n </div>\n </nav>\n @if (inlineCollapse()) {\n <div class=\"toggle-placeholder\" aria-hidden=\"true\"></div>\n }\n}\n<main\n class=\"si-layout-inner focus-none\"\n tabindex=\"-1\"\n [siSkipLinkTarget]=\"skipLinkMainContentLabel()\"\n>\n <ng-content />\n</main>\n", styles: [":host{display:block;--si-layout-header-first-element-offset: 40px}:host.ready:not(.visible){padding-inline-start:0!important}:host.ready{transition:padding-inline-start calc(.5s * var(--element-animations-enabled, 1))}nav{display:flex;flex-direction:column;position:fixed;z-index:1031;inset-block-start:calc(1.5rem + 25px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px));inset-block-end:0;inset-inline-start:0;inline-size:0;transition:inline-size calc(.5s * var(--element-animations-enabled, 1)) ease}:host(.nav-collapsed) nav{z-index:1030}nav.expanded{inline-size:240px}.mobile-drawer{display:block;text-align:end;border:0;inline-size:calc(1.5rem + 24px);color:var(--element-text-primary);padding-block:4px;padding-inline:8px;margin-block-start:8px;border-start-end-radius:var(--element-radius-2);border-end-end-radius:var(--element-radius-2);transition:inline-size calc(.5s * var(--element-animations-enabled, 1)) ease,background-color calc(.5s * var(--element-animations-enabled, 1)) ease,box-shadow calc(.5s * var(--element-animations-enabled, 1)) ease}:host(:not(.nav-collapsed)) .mobile-drawer{inline-size:240px}.modal-backdrop{z-index:1031;transition:opacity calc(.15s * var(--element-animations-enabled, 1)) linear;opacity:1}@starting-style{.modal-backdrop{opacity:0}}.modal-backdrop.backdrop-leave{opacity:0}:host(.nav-text-only:not(.nav-inline-collapse)).nav-collapsed .mobile-drawer{background:var(--element-base-1);box-shadow:0 0 4px var(--element-box-shadow-color-1),0 4px 4px var(--element-box-shadow-color-2)}@media(max-width:575.98px){:host.nav-collapsed .mobile-drawer{background:var(--element-base-1);box-shadow:0 0 4px var(--element-box-shadow-color-1),0 4px 4px var(--element-box-shadow-color-2)}}@media(min-width:576px){:host:not(.nav-text-only),:host:not(.nav-collapsed),:host(.nav-inline-collapse){--si-layout-header-first-element-offset: 0}:host:where(:not(.nav-text-only):not(.nav-inline-collapse)){padding-inline-start:calc(1.5rem + 24px)}:host:where(:not(.nav-text-only):not(.nav-inline-collapse)) nav{inline-size:calc(1.5rem + 24px)}:host:where(:not(.nav-text-only):not(.nav-inline-collapse)) nav.expanded{inline-size:240px}}@media(min-width:992px){:host:not(.nav-collapsed){padding-inline-start:240px}}.nav-content{display:flex;flex-direction:column;flex:1 1 auto;min-block-size:0}:host(.nav-inline-collapse) nav{overflow:hidden}:host(.nav-inline-collapse) .mobile-drawer:before{content:\"\";display:block;block-size:calc(1lh + 16px)}:host(.nav-inline-collapse) .toggle-placeholder{block-size:0;margin-block-start:0;transition:block-size calc(.5s * var(--element-animations-enabled, 1)) ease,margin-block-start calc(.5s * var(--element-animations-enabled, 1)) ease}:host(.nav-inline-collapse) .toggle-button{position:fixed;z-index:1031;inset-block-start:calc(calc(1.5rem + 25px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px)) + 8px + 4px);inset-inline-start:calc(232px - (1lh + 16px));transition:inset-inline-start calc(.5s * var(--element-animations-enabled, 1)) ease,inset-block-start calc(.5s * var(--element-animations-enabled, 1)) ease}:host(.nav-inline-collapse).nav-collapsed .toggle-placeholder{block-size:calc(1lh + 16px);margin-block-start:16px}:host(.nav-inline-collapse).nav-collapsed .toggle-button{inset-block-start:calc(calc(1.5rem + 25px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px)) + 16px);inset-inline-start:32px}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "directive", type: SiSkipLinkTargetDirective, selector: "[siSkipLinkTarget]", inputs: ["siSkipLinkTarget"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
569
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiNavbarVerticalNextComponent, isStandalone: true, selector: "si-navbar-vertical-next", inputs: { collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, textOnly: { classPropertyName: "textOnly", publicName: "textOnly", isSignal: true, isRequired: false, transformFunction: null }, inlineCollapse: { classPropertyName: "inlineCollapse", publicName: "inlineCollapse", isSignal: true, isRequired: false, transformFunction: null }, alwaysFlyout: { classPropertyName: "alwaysFlyout", publicName: "alwaysFlyout", isSignal: true, isRequired: false, transformFunction: null }, visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, toggleButtonText: { classPropertyName: "toggleButtonText", publicName: "toggleButtonText", isSignal: true, isRequired: false, transformFunction: null }, stateId: { classPropertyName: "stateId", publicName: "stateId", isSignal: true, isRequired: false, transformFunction: null }, skipLinkNavigationLabel: { classPropertyName: "skipLinkNavigationLabel", publicName: "skipLinkNavigationLabel", isSignal: true, isRequired: false, transformFunction: null }, skipLinkMainContentLabel: { classPropertyName: "skipLinkMainContentLabel", publicName: "skipLinkMainContentLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsed: "collapsedChange" }, host: { properties: { "class.nav-collapsed": "collapsed()", "class.nav-text-only": "textOnly()", "class.nav-inline-collapse": "inlineCollapse()", "class.visible": "visible()", "class.ready": "ready()" }, classAttribute: "si-layout-inner ready" }, providers: [{ provide: SI_NAVBAR_VERTICAL_NEXT, useExisting: SiNavbarVerticalNextComponent }], queries: [{ propertyName: "items", predicate: SiNavbarVerticalNextItemComponent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "flyoutAnchorHost", first: true, predicate: ["flyoutAnchorHost"], descendants: true, read: ViewContainerRef, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "@if (visible()) {\n @if (smallScreen() && !collapsed()) {\n <div class=\"modal-backdrop\" animate.leave=\"backdrop-leave\" (click)=\"toggleCollapse()\"></div>\n }\n <nav\n tabindex=\"-1\"\n class=\"bg-base-1 focus-sub-inside\"\n [class.expanded]=\"!collapsed()\"\n [siSkipLinkTarget]=\"skipLinkNavigationLabel()\"\n [class.text-only]=\"textOnly()\"\n >\n <div class=\"collapse-toggle ms-auto\">\n <div class=\"mobile-drawer focus-inside\">\n <button\n type=\"button\"\n class=\"btn btn-icon toggle-button\"\n [class.btn-primary-ghost]=\"chipMode()\"\n [class.btn-tertiary-ghost]=\"!chipMode()\"\n [attr.aria-label]=\"toggleButtonText() | translate\"\n [attr.aria-expanded]=\"!collapsed()\"\n (click)=\"toggleCollapse()\"\n >\n <si-icon class=\"flip-rtl\" [icon]=\"toggleIcon()\" />\n </button>\n </div>\n </div>\n @if (inlineCollapse() && activeItem(); as item) {\n <div\n class=\"chip\"\n [class.chip-visible]=\"collapsed()\"\n [attr.inert]=\"collapsed() ? null : ''\"\n [attr.aria-hidden]=\"collapsed() ? null : 'true'\"\n >\n @if (chipPortalAttached()) {\n <ng-container [cdkPortalOutlet]=\"item.hostPortal\" />\n }\n </div>\n <ng-container #flyoutAnchorHost />\n }\n <div\n class=\"nav-content\"\n [attr.inert]=\"chipMode() ? '' : null\"\n [attr.aria-hidden]=\"chipMode() ? 'true' : null\"\n >\n <ng-content select=\"si-navbar-vertical-next-search\" />\n <ng-content select=\"si-navbar-vertical-next-items\" />\n <ng-content select=\"si-navbar-vertical-next-footer-items\" />\n </div>\n </nav>\n @if (inlineCollapse()) {\n <div class=\"toggle-placeholder\" aria-hidden=\"true\"></div>\n }\n}\n<main\n class=\"si-layout-inner focus-none\"\n tabindex=\"-1\"\n [siSkipLinkTarget]=\"skipLinkMainContentLabel()\"\n>\n <ng-content />\n</main>\n", styles: [":host{display:block;--si-layout-header-first-element-offset: 40px}:host.ready:not(.visible){padding-inline-start:0!important}:host.ready{transition:padding-inline-start calc(.5s * var(--element-animations-enabled, 1))}nav{display:flex;flex-direction:column;position:fixed;z-index:1031;inset-block-start:calc(1.5rem + 25px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px));inset-block-end:0;inset-inline-start:0;inline-size:0;transition:inline-size calc(.5s * var(--element-animations-enabled, 1)) ease}:host(.nav-collapsed) nav{z-index:1030}nav.expanded{inline-size:240px}.mobile-drawer{display:block;text-align:end;border:0;inline-size:calc(1.5rem + 24px);color:var(--element-text-primary);padding-block:4px;padding-inline:8px;margin-block-start:8px;border-start-end-radius:var(--element-radius-2);border-end-end-radius:var(--element-radius-2);transition:inline-size calc(.5s * var(--element-animations-enabled, 1)) ease,background-color calc(.5s * var(--element-animations-enabled, 1)) ease,box-shadow calc(.5s * var(--element-animations-enabled, 1)) ease}:host(:not(.nav-collapsed):not(.nav-inline-collapse)) .mobile-drawer{inline-size:240px}.modal-backdrop{z-index:1031;transition:opacity calc(.15s * var(--element-animations-enabled, 1)) linear;opacity:1}@starting-style{.modal-backdrop{opacity:0}}.modal-backdrop.backdrop-leave{opacity:0}:host(.nav-text-only:not(.nav-inline-collapse)).nav-collapsed .mobile-drawer{background:var(--element-base-1);box-shadow:0 0 4px var(--element-box-shadow-color-1),0 4px 4px var(--element-box-shadow-color-2)}@media(max-width:575.98px){:host.nav-collapsed .mobile-drawer{background:var(--element-base-1);box-shadow:0 0 4px var(--element-box-shadow-color-1),0 4px 4px var(--element-box-shadow-color-2)}}@media(min-width:576px){:host:not(.nav-text-only),:host:not(.nav-collapsed),:host(.nav-inline-collapse){--si-layout-header-first-element-offset: 0}:host:where(:not(.nav-text-only):not(.nav-inline-collapse)){padding-inline-start:calc(1.5rem + 24px)}:host:where(:not(.nav-text-only):not(.nav-inline-collapse)) nav{inline-size:calc(1.5rem + 24px)}:host:where(:not(.nav-text-only):not(.nav-inline-collapse)) nav.expanded{inline-size:240px}}@media(min-width:992px){:host:not(.nav-collapsed){padding-inline-start:240px}}.nav-content{display:flex;flex-direction:column;flex:1 1 auto;min-block-size:0}:host(.nav-inline-collapse){--si-layout-header-first-element-offset: 0;--si-navbar-parked-inline-start: 16px}@media(min-width:768px){:host(.nav-inline-collapse){--si-navbar-parked-inline-start: 32px}}:host(.nav-inline-collapse) nav{overflow:hidden}:host(.nav-inline-collapse) nav:before{content:\"\";position:absolute;inset:0;background:var(--element-base-1);z-index:1;pointer-events:none}:host(.nav-inline-collapse) .nav-content{position:relative;z-index:2}:host(.nav-inline-collapse) .mobile-drawer:before{content:\"\";display:block;block-size:calc(1lh + 16px)}:host(.nav-inline-collapse) .toggle-placeholder{block-size:0;margin-block-start:0;transition:block-size calc(.5s * var(--element-animations-enabled, 1)) ease,margin-block-start calc(.5s * var(--element-animations-enabled, 1)) ease}:host(.nav-inline-collapse) .toggle-button{position:fixed;z-index:1031;inset-block-start:calc(calc(1.5rem + 25px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px)) + 8px + 4px);inset-inline-start:calc(232px - (1lh + 16px));transition:inset-inline-start calc(.5s * var(--element-animations-enabled, 1)) ease,inset-block-start calc(.5s * var(--element-animations-enabled, 1)) ease}:host(.nav-inline-collapse) .chip{position:fixed;z-index:0;inset-block-start:calc(calc(1.5rem + 25px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px)) + 16px);max-inline-size:calc(100vi - 2 * var(--si-navbar-parked-inline-start) - calc(1lh + 16px) - 1px);inset-inline-start:var(--si-navbar-parked-inline-start);opacity:0;transition:inset-inline-start calc(.5s * var(--element-animations-enabled, 1)) ease,opacity calc(.5s * var(--element-animations-enabled, 1)) ease}:host(.nav-inline-collapse) .chip:has(:focus-visible){z-index:1032}@starting-style{:host(.nav-inline-collapse) .chip.chip-visible{inset-inline-start:var(--si-navbar-parked-inline-start);opacity:0}}:host(.nav-inline-collapse) .chip.chip-visible{inset-inline-start:calc(var(--si-navbar-parked-inline-start) + calc(1lh + 16px) + 1px);opacity:1}:host(.nav-inline-collapse).nav-collapsed .toggle-placeholder{block-size:calc(1lh + 16px);margin-block-start:16px}:host(.nav-inline-collapse).nav-collapsed .toggle-button{inset-block-start:calc(calc(1.5rem + 25px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px)) + 16px);inset-inline-start:var(--si-navbar-parked-inline-start)}:host(.nav-inline-collapse).nav-collapsed:has(.chip.chip-visible) .toggle-button{border-start-end-radius:0;border-end-end-radius:0}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "directive", type: SiSkipLinkTargetDirective, selector: "[siSkipLinkTarget]", inputs: ["siSkipLinkTarget"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
227
570
  }
228
571
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextComponent, decorators: [{
229
572
  type: Component,
230
- args: [{ selector: 'si-navbar-vertical-next', imports: [SiIconComponent, SiSkipLinkTargetDirective, SiTranslatePipe], providers: [{ provide: SI_NAVBAR_VERTICAL_NEXT, useExisting: SiNavbarVerticalNextComponent }], changeDetection: ChangeDetectionStrategy.OnPush, host: {
573
+ args: [{ selector: 'si-navbar-vertical-next', imports: [PortalModule, SiIconComponent, SiSkipLinkTargetDirective, SiTranslatePipe], providers: [{ provide: SI_NAVBAR_VERTICAL_NEXT, useExisting: SiNavbarVerticalNextComponent }], changeDetection: ChangeDetectionStrategy.OnPush, host: {
231
574
  class: 'si-layout-inner ready',
232
575
  '[class.nav-collapsed]': 'collapsed()',
233
576
  '[class.nav-text-only]': 'textOnly()',
234
577
  '[class.nav-inline-collapse]': 'inlineCollapse()',
235
578
  '[class.visible]': 'visible()',
236
579
  '[class.ready]': 'ready()'
237
- }, template: "@if (visible()) {\n @if (smallScreen() && !collapsed()) {\n <div class=\"modal-backdrop\" animate.leave=\"backdrop-leave\" (click)=\"toggleCollapse()\"></div>\n }\n @let inlineCollapsed = inlineCollapse() && collapsed();\n <nav\n tabindex=\"-1\"\n class=\"bg-base-1 focus-sub-inside\"\n [class.expanded]=\"!collapsed()\"\n [siSkipLinkTarget]=\"skipLinkNavigationLabel()\"\n [class.text-only]=\"textOnly()\"\n >\n <div class=\"collapse-toggle ms-auto\">\n <div class=\"mobile-drawer focus-inside\">\n <button\n type=\"button\"\n class=\"btn btn-icon toggle-button\"\n [class.btn-primary-ghost]=\"inlineCollapsed\"\n [class.btn-tertiary-ghost]=\"!inlineCollapsed\"\n [attr.aria-label]=\"toggleButtonText() | translate\"\n [attr.aria-expanded]=\"!collapsed()\"\n (click)=\"toggleCollapse()\"\n >\n <si-icon class=\"flip-rtl\" [icon]=\"toggleIcon()\" />\n </button>\n </div>\n </div>\n <div\n class=\"nav-content\"\n [attr.inert]=\"inlineCollapsed ? '' : null\"\n [attr.aria-hidden]=\"inlineCollapsed ? 'true' : null\"\n >\n <ng-content select=\"si-navbar-vertical-next-search\" />\n <ng-content select=\"si-navbar-vertical-next-items\" />\n <ng-content select=\"si-navbar-vertical-next-footer-items\" />\n </div>\n </nav>\n @if (inlineCollapse()) {\n <div class=\"toggle-placeholder\" aria-hidden=\"true\"></div>\n }\n}\n<main\n class=\"si-layout-inner focus-none\"\n tabindex=\"-1\"\n [siSkipLinkTarget]=\"skipLinkMainContentLabel()\"\n>\n <ng-content />\n</main>\n", styles: [":host{display:block;--si-layout-header-first-element-offset: 40px}:host.ready:not(.visible){padding-inline-start:0!important}:host.ready{transition:padding-inline-start calc(.5s * var(--element-animations-enabled, 1))}nav{display:flex;flex-direction:column;position:fixed;z-index:1031;inset-block-start:calc(1.5rem + 25px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px));inset-block-end:0;inset-inline-start:0;inline-size:0;transition:inline-size calc(.5s * var(--element-animations-enabled, 1)) ease}:host(.nav-collapsed) nav{z-index:1030}nav.expanded{inline-size:240px}.mobile-drawer{display:block;text-align:end;border:0;inline-size:calc(1.5rem + 24px);color:var(--element-text-primary);padding-block:4px;padding-inline:8px;margin-block-start:8px;border-start-end-radius:var(--element-radius-2);border-end-end-radius:var(--element-radius-2);transition:inline-size calc(.5s * var(--element-animations-enabled, 1)) ease,background-color calc(.5s * var(--element-animations-enabled, 1)) ease,box-shadow calc(.5s * var(--element-animations-enabled, 1)) ease}:host(:not(.nav-collapsed)) .mobile-drawer{inline-size:240px}.modal-backdrop{z-index:1031;transition:opacity calc(.15s * var(--element-animations-enabled, 1)) linear;opacity:1}@starting-style{.modal-backdrop{opacity:0}}.modal-backdrop.backdrop-leave{opacity:0}:host(.nav-text-only:not(.nav-inline-collapse)).nav-collapsed .mobile-drawer{background:var(--element-base-1);box-shadow:0 0 4px var(--element-box-shadow-color-1),0 4px 4px var(--element-box-shadow-color-2)}@media(max-width:575.98px){:host.nav-collapsed .mobile-drawer{background:var(--element-base-1);box-shadow:0 0 4px var(--element-box-shadow-color-1),0 4px 4px var(--element-box-shadow-color-2)}}@media(min-width:576px){:host:not(.nav-text-only),:host:not(.nav-collapsed),:host(.nav-inline-collapse){--si-layout-header-first-element-offset: 0}:host:where(:not(.nav-text-only):not(.nav-inline-collapse)){padding-inline-start:calc(1.5rem + 24px)}:host:where(:not(.nav-text-only):not(.nav-inline-collapse)) nav{inline-size:calc(1.5rem + 24px)}:host:where(:not(.nav-text-only):not(.nav-inline-collapse)) nav.expanded{inline-size:240px}}@media(min-width:992px){:host:not(.nav-collapsed){padding-inline-start:240px}}.nav-content{display:flex;flex-direction:column;flex:1 1 auto;min-block-size:0}:host(.nav-inline-collapse) nav{overflow:hidden}:host(.nav-inline-collapse) .mobile-drawer:before{content:\"\";display:block;block-size:calc(1lh + 16px)}:host(.nav-inline-collapse) .toggle-placeholder{block-size:0;margin-block-start:0;transition:block-size calc(.5s * var(--element-animations-enabled, 1)) ease,margin-block-start calc(.5s * var(--element-animations-enabled, 1)) ease}:host(.nav-inline-collapse) .toggle-button{position:fixed;z-index:1031;inset-block-start:calc(calc(1.5rem + 25px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px)) + 8px + 4px);inset-inline-start:calc(232px - (1lh + 16px));transition:inset-inline-start calc(.5s * var(--element-animations-enabled, 1)) ease,inset-block-start calc(.5s * var(--element-animations-enabled, 1)) ease}:host(.nav-inline-collapse).nav-collapsed .toggle-placeholder{block-size:calc(1lh + 16px);margin-block-start:16px}:host(.nav-inline-collapse).nav-collapsed .toggle-button{inset-block-start:calc(calc(1.5rem + 25px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px)) + 16px);inset-inline-start:32px}\n"] }]
238
- }], ctorParameters: () => [], propDecorators: { collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }, { type: i0.Output, args: ["collapsedChange"] }], textOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "textOnly", required: false }] }], inlineCollapse: [{ type: i0.Input, args: [{ isSignal: true, alias: "inlineCollapse", required: false }] }], alwaysFlyout: [{ type: i0.Input, args: [{ isSignal: true, alias: "alwaysFlyout", required: false }] }], visible: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: false }] }], toggleButtonText: [{ type: i0.Input, args: [{ isSignal: true, alias: "toggleButtonText", required: false }] }], stateId: [{ type: i0.Input, args: [{ isSignal: true, alias: "stateId", required: false }] }], skipLinkNavigationLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "skipLinkNavigationLabel", required: false }] }], skipLinkMainContentLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "skipLinkMainContentLabel", required: false }] }] } });
580
+ }, template: "@if (visible()) {\n @if (smallScreen() && !collapsed()) {\n <div class=\"modal-backdrop\" animate.leave=\"backdrop-leave\" (click)=\"toggleCollapse()\"></div>\n }\n <nav\n tabindex=\"-1\"\n class=\"bg-base-1 focus-sub-inside\"\n [class.expanded]=\"!collapsed()\"\n [siSkipLinkTarget]=\"skipLinkNavigationLabel()\"\n [class.text-only]=\"textOnly()\"\n >\n <div class=\"collapse-toggle ms-auto\">\n <div class=\"mobile-drawer focus-inside\">\n <button\n type=\"button\"\n class=\"btn btn-icon toggle-button\"\n [class.btn-primary-ghost]=\"chipMode()\"\n [class.btn-tertiary-ghost]=\"!chipMode()\"\n [attr.aria-label]=\"toggleButtonText() | translate\"\n [attr.aria-expanded]=\"!collapsed()\"\n (click)=\"toggleCollapse()\"\n >\n <si-icon class=\"flip-rtl\" [icon]=\"toggleIcon()\" />\n </button>\n </div>\n </div>\n @if (inlineCollapse() && activeItem(); as item) {\n <div\n class=\"chip\"\n [class.chip-visible]=\"collapsed()\"\n [attr.inert]=\"collapsed() ? null : ''\"\n [attr.aria-hidden]=\"collapsed() ? null : 'true'\"\n >\n @if (chipPortalAttached()) {\n <ng-container [cdkPortalOutlet]=\"item.hostPortal\" />\n }\n </div>\n <ng-container #flyoutAnchorHost />\n }\n <div\n class=\"nav-content\"\n [attr.inert]=\"chipMode() ? '' : null\"\n [attr.aria-hidden]=\"chipMode() ? 'true' : null\"\n >\n <ng-content select=\"si-navbar-vertical-next-search\" />\n <ng-content select=\"si-navbar-vertical-next-items\" />\n <ng-content select=\"si-navbar-vertical-next-footer-items\" />\n </div>\n </nav>\n @if (inlineCollapse()) {\n <div class=\"toggle-placeholder\" aria-hidden=\"true\"></div>\n }\n}\n<main\n class=\"si-layout-inner focus-none\"\n tabindex=\"-1\"\n [siSkipLinkTarget]=\"skipLinkMainContentLabel()\"\n>\n <ng-content />\n</main>\n", styles: [":host{display:block;--si-layout-header-first-element-offset: 40px}:host.ready:not(.visible){padding-inline-start:0!important}:host.ready{transition:padding-inline-start calc(.5s * var(--element-animations-enabled, 1))}nav{display:flex;flex-direction:column;position:fixed;z-index:1031;inset-block-start:calc(1.5rem + 25px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px));inset-block-end:0;inset-inline-start:0;inline-size:0;transition:inline-size calc(.5s * var(--element-animations-enabled, 1)) ease}:host(.nav-collapsed) nav{z-index:1030}nav.expanded{inline-size:240px}.mobile-drawer{display:block;text-align:end;border:0;inline-size:calc(1.5rem + 24px);color:var(--element-text-primary);padding-block:4px;padding-inline:8px;margin-block-start:8px;border-start-end-radius:var(--element-radius-2);border-end-end-radius:var(--element-radius-2);transition:inline-size calc(.5s * var(--element-animations-enabled, 1)) ease,background-color calc(.5s * var(--element-animations-enabled, 1)) ease,box-shadow calc(.5s * var(--element-animations-enabled, 1)) ease}:host(:not(.nav-collapsed):not(.nav-inline-collapse)) .mobile-drawer{inline-size:240px}.modal-backdrop{z-index:1031;transition:opacity calc(.15s * var(--element-animations-enabled, 1)) linear;opacity:1}@starting-style{.modal-backdrop{opacity:0}}.modal-backdrop.backdrop-leave{opacity:0}:host(.nav-text-only:not(.nav-inline-collapse)).nav-collapsed .mobile-drawer{background:var(--element-base-1);box-shadow:0 0 4px var(--element-box-shadow-color-1),0 4px 4px var(--element-box-shadow-color-2)}@media(max-width:575.98px){:host.nav-collapsed .mobile-drawer{background:var(--element-base-1);box-shadow:0 0 4px var(--element-box-shadow-color-1),0 4px 4px var(--element-box-shadow-color-2)}}@media(min-width:576px){:host:not(.nav-text-only),:host:not(.nav-collapsed),:host(.nav-inline-collapse){--si-layout-header-first-element-offset: 0}:host:where(:not(.nav-text-only):not(.nav-inline-collapse)){padding-inline-start:calc(1.5rem + 24px)}:host:where(:not(.nav-text-only):not(.nav-inline-collapse)) nav{inline-size:calc(1.5rem + 24px)}:host:where(:not(.nav-text-only):not(.nav-inline-collapse)) nav.expanded{inline-size:240px}}@media(min-width:992px){:host:not(.nav-collapsed){padding-inline-start:240px}}.nav-content{display:flex;flex-direction:column;flex:1 1 auto;min-block-size:0}:host(.nav-inline-collapse){--si-layout-header-first-element-offset: 0;--si-navbar-parked-inline-start: 16px}@media(min-width:768px){:host(.nav-inline-collapse){--si-navbar-parked-inline-start: 32px}}:host(.nav-inline-collapse) nav{overflow:hidden}:host(.nav-inline-collapse) nav:before{content:\"\";position:absolute;inset:0;background:var(--element-base-1);z-index:1;pointer-events:none}:host(.nav-inline-collapse) .nav-content{position:relative;z-index:2}:host(.nav-inline-collapse) .mobile-drawer:before{content:\"\";display:block;block-size:calc(1lh + 16px)}:host(.nav-inline-collapse) .toggle-placeholder{block-size:0;margin-block-start:0;transition:block-size calc(.5s * var(--element-animations-enabled, 1)) ease,margin-block-start calc(.5s * var(--element-animations-enabled, 1)) ease}:host(.nav-inline-collapse) .toggle-button{position:fixed;z-index:1031;inset-block-start:calc(calc(1.5rem + 25px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px)) + 8px + 4px);inset-inline-start:calc(232px - (1lh + 16px));transition:inset-inline-start calc(.5s * var(--element-animations-enabled, 1)) ease,inset-block-start calc(.5s * var(--element-animations-enabled, 1)) ease}:host(.nav-inline-collapse) .chip{position:fixed;z-index:0;inset-block-start:calc(calc(1.5rem + 25px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px)) + 16px);max-inline-size:calc(100vi - 2 * var(--si-navbar-parked-inline-start) - calc(1lh + 16px) - 1px);inset-inline-start:var(--si-navbar-parked-inline-start);opacity:0;transition:inset-inline-start calc(.5s * var(--element-animations-enabled, 1)) ease,opacity calc(.5s * var(--element-animations-enabled, 1)) ease}:host(.nav-inline-collapse) .chip:has(:focus-visible){z-index:1032}@starting-style{:host(.nav-inline-collapse) .chip.chip-visible{inset-inline-start:var(--si-navbar-parked-inline-start);opacity:0}}:host(.nav-inline-collapse) .chip.chip-visible{inset-inline-start:calc(var(--si-navbar-parked-inline-start) + calc(1lh + 16px) + 1px);opacity:1}:host(.nav-inline-collapse).nav-collapsed .toggle-placeholder{block-size:calc(1lh + 16px);margin-block-start:16px}:host(.nav-inline-collapse).nav-collapsed .toggle-button{inset-block-start:calc(calc(1.5rem + 25px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px)) + 16px);inset-inline-start:var(--si-navbar-parked-inline-start)}:host(.nav-inline-collapse).nav-collapsed:has(.chip.chip-visible) .toggle-button{border-start-end-radius:0;border-end-end-radius:0}\n"] }]
581
+ }], ctorParameters: () => [], propDecorators: { collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }, { type: i0.Output, args: ["collapsedChange"] }], textOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "textOnly", required: false }] }], inlineCollapse: [{ type: i0.Input, args: [{ isSignal: true, alias: "inlineCollapse", required: false }] }], alwaysFlyout: [{ type: i0.Input, args: [{ isSignal: true, alias: "alwaysFlyout", required: false }] }], visible: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: false }] }], toggleButtonText: [{ type: i0.Input, args: [{ isSignal: true, alias: "toggleButtonText", required: false }] }], stateId: [{ type: i0.Input, args: [{ isSignal: true, alias: "stateId", required: false }] }], skipLinkNavigationLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "skipLinkNavigationLabel", required: false }] }], skipLinkMainContentLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "skipLinkMainContentLabel", required: false }] }], flyoutAnchorHost: [{ type: i0.ViewChild, args: ['flyoutAnchorHost', { ...{ read: ViewContainerRef }, isSignal: true }] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => SiNavbarVerticalNextItemComponent), { ...{
582
+ descendants: true
583
+ }, isSignal: true }] }] } });
239
584
 
240
585
  /**
241
586
  * Copyright (c) Siemens 2016 - 2026
@@ -273,171 +618,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
273
618
  args: [{ selector: 'si-navbar-vertical-next-footer-items', template: '<ng-content />', changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;overflow-x:hidden;margin-block-start:auto;padding-block-end:8px}:host-context(.nav-collapsed){display:none}@media(min-width:576px){:host-context(:not(.nav-text-only).nav-collapsed){display:block}}\n"] }]
274
619
  }] });
275
620
 
276
- /**
277
- * Copyright (c) Siemens 2016 - 2026
278
- * SPDX-License-Identifier: MIT
279
- */
280
- /**
281
- * Using this component, to anchor the flyout inside the navbar within the a11y tree.
282
- * Otherwise, without aria-owns, screen reader will announce the leaving of the navbar when moving to the flyout.
283
- * Aria-owns cannot be put directly on the trigger
284
- * as chrome will include the flyout children in the a11y label of the trigger.
285
- * @experimental
286
- */
287
- class SiNavbarFlyoutAnchorComponent {
288
- groupId = input(...(ngDevMode ? [undefined, { debugName: "groupId" }] : []));
289
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarFlyoutAnchorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
290
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.8", type: SiNavbarFlyoutAnchorComponent, isStandalone: true, selector: "si-navbar-flyout-anchor", inputs: { groupId: { classPropertyName: "groupId", publicName: "groupId", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.aria-owns": "groupId()" } }, ngImport: i0, template: '', isInline: true });
291
- }
292
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarFlyoutAnchorComponent, decorators: [{
293
- type: Component,
294
- args: [{
295
- selector: 'si-navbar-flyout-anchor',
296
- template: '',
297
- host: { '[attr.aria-owns]': 'groupId()' }
298
- }]
299
- }], propDecorators: { groupId: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupId", required: false }] }] } });
300
- /** @experimental */
301
- class SiNavbarVerticalNextGroupTriggerDirective {
302
- static idCounter = 0;
303
- /** @internal */
304
- groupId = `si-navbar-vertical-next-group-${SiNavbarVerticalNextGroupTriggerDirective.idCounter++}`;
305
- id = `${this.groupId}-trigger`;
306
- groupTemplate = input.required({ ...(ngDevMode ? { debugName: "groupTemplate" } : {}), alias: 'siNavbarVerticalNextGroupTriggerFor' });
307
- stateId = input(...(ngDevMode ? [undefined, { debugName: "stateId" }] : []));
308
- /** @defaultValue false */
309
- expanded = linkedSignal({ ...(ngDevMode ? { debugName: "expanded" } : {}), source: () => {
310
- const stateId = this.stateId();
311
- return {
312
- uiState: stateId ? this.navbar.uiStateExpandedItems()[stateId] : undefined,
313
- alwaysFlyout: this.navbar.alwaysFlyout()
314
- };
315
- },
316
- computation: (source, previous) => {
317
- // `alwaysFlyout` toggled: reset expansion. When switching back to inline,
318
- // surface the group that owns the active route.
319
- if (previous && source.alwaysFlyout !== previous.source.alwaysFlyout) {
320
- return !source.alwaysFlyout && untracked(() => this.active());
321
- }
322
- // First run or UIState (re)loaded: honor the persisted value when present,
323
- // otherwise keep the user's current expansion.
324
- if (source.uiState !== undefined) {
325
- return source.uiState;
326
- }
327
- return previous?.value ?? false;
328
- } });
329
- /**
330
- * Whether the group is currently rendered as a transient flyout overlay
331
- * (true) or inline within the navbar (false). Automatically resets to
332
- * `false` whenever the rendering mode changes.
333
- * @internal
334
- */
335
- flyout = linkedSignal({ ...(ngDevMode ? { debugName: "flyout" } : {}), source: () => this.flyoutMode(),
336
- computation: () => false });
337
- /**
338
- * Whether the open flyout overlay currently contains the active route.
339
- * Reset together with `flyout` so it never lingers across mode changes.
340
- * @internal
341
- */
342
- active = linkedSignal({ ...(ngDevMode ? { debugName: "active" } : {}), source: () => this.flyout(),
343
- computation: (open, previous) => (open ? (previous?.value ?? false) : false) });
344
- navbar = inject(SI_NAVBAR_VERTICAL_NEXT);
345
- /** @internal */
346
- flyoutMode = computed(() => this.navbar.alwaysFlyout() || this.navbar.collapsed(), ...(ngDevMode ? [{ debugName: "flyoutMode" }] : []));
347
- flyoutOutsideClickSubscription;
348
- viewContainer = inject(ViewContainerRef);
349
- overlay = inject(Overlay);
350
- injector = Injector.create({ parent: inject(Injector), providers: [] });
351
- overlayRef = this.overlay.create({
352
- positionStrategy: this.overlay
353
- .position()
354
- .flexibleConnectedTo(this.viewContainer.element)
355
- .withPositions([
356
- { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top' },
357
- { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom' }
358
- ])
359
- });
360
- groupView;
361
- flyoutAnchorComponentRef;
362
- templatePortal = computed(() => new TemplatePortal(this.groupTemplate(), this.viewContainer, undefined, this.injector), ...(ngDevMode ? [{ debugName: "templatePortal" }] : []));
363
- constructor() {
364
- // Manage the rendering of the inline projection / flyout overlay in
365
- // response to mode changes. Only side effects belong here; the related
366
- // signal state is propagated by `flyout` / `expanded` linked signals.
367
- effect(() => {
368
- this.flyoutMode();
369
- untracked(() => {
370
- this.detachFlyout();
371
- this.attachInline();
372
- });
373
- });
374
- }
375
- /** @internal */
376
- hideFlyout() {
377
- if (!this.flyout())
378
- return;
379
- this.flyout.set(false);
380
- this.detachFlyout();
381
- this.attachInline();
382
- }
383
- triggered() {
384
- if (this.flyoutMode()) {
385
- this.toggleFlyout();
386
- }
387
- else {
388
- this.expanded.set(!this.expanded());
389
- this.navbar.groupStateChanged(this.stateId(), this.expanded());
390
- }
391
- }
392
- toggleFlyout() {
393
- if (this.flyout()) {
394
- this.hideFlyout();
395
- }
396
- else {
397
- this.flyout.set(true);
398
- this.attachFlyout();
399
- }
400
- }
401
- attachInline() {
402
- this.overlayRef.detach();
403
- this.groupView?.destroy();
404
- this.groupView = this.viewContainer.createEmbeddedView(this.groupTemplate(), undefined, {
405
- injector: this.injector
406
- });
407
- }
408
- attachFlyout() {
409
- this.groupView?.destroy();
410
- this.groupView = this.overlayRef.attach(this.templatePortal());
411
- this.flyoutAnchorComponentRef = this.viewContainer.createComponent(SiNavbarFlyoutAnchorComponent);
412
- this.flyoutAnchorComponentRef.setInput('groupId', this.groupId);
413
- this.flyoutOutsideClickSubscription = this.overlayRef
414
- .outsidePointerEvents()
415
- .subscribe(() => this.hideFlyout());
416
- }
417
- detachFlyout() {
418
- this.flyoutAnchorComponentRef?.destroy();
419
- this.flyoutAnchorComponentRef = undefined;
420
- this.flyoutOutsideClickSubscription?.unsubscribe();
421
- this.flyoutOutsideClickSubscription = undefined;
422
- }
423
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextGroupTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
424
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.8", type: SiNavbarVerticalNextGroupTriggerDirective, isStandalone: true, selector: "button[siNavbarVerticalNextGroupTriggerFor]", inputs: { groupTemplate: { classPropertyName: "groupTemplate", publicName: "siNavbarVerticalNextGroupTriggerFor", isSignal: true, isRequired: true, transformFunction: null }, stateId: { classPropertyName: "stateId", publicName: "stateId", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "triggered()" }, properties: { "id": "id", "class.show": "expanded()", "attr.aria-controls": "groupId", "attr.aria-expanded": "expanded()" }, classAttribute: "dropdown-toggle" }, ngImport: i0 });
425
- }
426
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextGroupTriggerDirective, decorators: [{
427
- type: Directive,
428
- args: [{
429
- selector: 'button[siNavbarVerticalNextGroupTriggerFor]',
430
- host: {
431
- class: 'dropdown-toggle',
432
- '[id]': 'id',
433
- '[class.show]': 'expanded()',
434
- '[attr.aria-controls]': 'groupId',
435
- '[attr.aria-expanded]': 'expanded()',
436
- '(click)': 'triggered()'
437
- }
438
- }]
439
- }], ctorParameters: () => [], propDecorators: { groupTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "siNavbarVerticalNextGroupTriggerFor", required: true }] }], stateId: [{ type: i0.Input, args: [{ isSignal: true, alias: "stateId", required: false }] }] } });
440
-
441
621
  /**
442
622
  * Copyright (c) Siemens 2016 - 2026
443
623
  * SPDX-License-Identifier: MIT
@@ -532,89 +712,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
532
712
  }, styles: [".divider,.title{opacity:1;transition:opacity calc(.25s * var(--element-animations-enabled, 1)) calc(.25s * var(--element-animations-enabled, 1)) ease-out}@starting-style{.divider,.title{opacity:0}}:host{display:flex;align-items:center;block-size:calc(1lh + 24px);transition:block-size calc(.5s * var(--element-animations-enabled, 1)) ease-out}:host.collapsed{block-size:13px}:host.component-enter{transition:none}:host.component-enter .title,:host.component-enter .divider{transition:none}.title.title-leave{opacity:0;transition:opacity calc(.25s * var(--element-animations-enabled, 1)) ease-in}.divider{flex:1;margin-block:0}.divider.divider-leave{opacity:0;transition-delay:0s}\n"] }]
533
713
  }] });
534
714
 
535
- /**
536
- * Copyright (c) Siemens 2016 - 2026
537
- * SPDX-License-Identifier: MIT
538
- */
539
- /** @experimental */
540
- class SiNavbarVerticalNextItemComponent {
541
- icons = addIcons({ elementDown2, elementRight2 });
542
- /** Optional icon to render before the label. */
543
- icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : []));
544
- /** Badge value to display. */
545
- badge = input(...(ngDevMode ? [undefined, { debugName: "badge" }] : []));
546
- /** Color of the badge. */
547
- badgeColor = input(...(ngDevMode ? [undefined, { debugName: "badgeColor" }] : []));
548
- /**
549
- * Hide the badge when the navbar is collapsed.
550
- *
551
- * @defaultValue false
552
- */
553
- hideBadgeWhenCollapsed = input(false, { ...(ngDevMode ? { debugName: "hideBadgeWhenCollapsed" } : {}), transform: booleanAttribute });
554
- /** Override the active state. Useful for action items. */
555
- activeOverride = input(...(ngDevMode ? [undefined, { debugName: "activeOverride" }] : []));
556
- navbar = inject(SI_NAVBAR_VERTICAL_NEXT);
557
- parent = inject(SiNavbarVerticalNextItemComponent, {
558
- skipSelf: true,
559
- optional: true
560
- });
561
- group = inject(SiNavbarVerticalNextGroupTriggerDirective, {
562
- optional: true,
563
- self: true
564
- });
565
- routerLinkActive = inject(RouterLinkActive, { optional: true });
566
- siLink = inject(SiLinkDirective, { optional: true });
567
- /**
568
- * Determines if the badge contains text-only content (not numeric)
569
- */
570
- textOnlyBadge = computed(() => {
571
- const badge = this.badge();
572
- return badge != null && badge !== '' ? typeof badge !== 'number' : false;
573
- }, ...(ngDevMode ? [{ debugName: "textOnlyBadge" }] : []));
574
- /**
575
- * Formats badge value to limit display to "+99" for numbers greater than 99
576
- */
577
- formattedBadge = computed(() => {
578
- const badge = this.badge();
579
- if (badge == null || badge === '') {
580
- return '';
581
- }
582
- if (typeof badge === 'number') {
583
- return badge > 99 ? '+99' : badge.toString();
584
- }
585
- return badge.toString();
586
- }, ...(ngDevMode ? [{ debugName: "formattedBadge" }] : []));
587
- ngOnInit() {
588
- if (this.group && this.active) {
589
- this.group.expanded.set(true);
590
- }
591
- }
592
- triggered() {
593
- this.parent?.group?.hideFlyout();
594
- if (!this.group) {
595
- this.navbar.itemTriggered();
596
- }
597
- }
598
- get active() {
599
- return (this.activeOverride() ||
600
- this.routerLinkActive?.isActive ||
601
- this.siLink?.active() ||
602
- ((!this.group?.expanded() || this.navbar.collapsed()) && this.group?.active()) ||
603
- false);
604
- }
605
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
606
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiNavbarVerticalNextItemComponent, isStandalone: true, selector: "a[si-navbar-vertical-next-item], button[si-navbar-vertical-next-item]", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null }, badgeColor: { classPropertyName: "badgeColor", publicName: "badgeColor", isSignal: true, isRequired: false, transformFunction: null }, hideBadgeWhenCollapsed: { classPropertyName: "hideBadgeWhenCollapsed", publicName: "hideBadgeWhenCollapsed", isSignal: true, isRequired: false, transformFunction: null }, activeOverride: { classPropertyName: "activeOverride", publicName: "activeOverride", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "triggered()" }, properties: { "class.active": "active", "class.hide-badge-collapsed": "hideBadgeWhenCollapsed()" }, classAttribute: "focus-inside navbar-vertical-item" }, ngImport: i0, template: "@let icon = this.icon();\n@if (icon) {\n <si-icon class=\"icon-lg\" [icon]=\"icon\" />\n}\n<div class=\"item-title text-truncate si-h5\">\n <ng-content />\n</div>\n@if (!navbar.textOnly() && formattedBadge()) {\n @let badgeColor = this.badgeColor();\n <span\n [class]=\"[\n 'badge',\n badgeColor ? `bg-${badgeColor}` : 'bg-default',\n textOnlyBadge() ? 'badge-text-only' : '',\n navbar.collapsed() ? 'badge-collapsed' : ''\n ]\"\n >{{ formattedBadge() }}</span\n >\n}\n@if (group) {\n <si-icon\n class=\"dropdown-caret me-0 text-body\"\n [icon]=\"group.flyoutMode() ? icons.elementRight2 : icons.elementDown2\"\n />\n}\n", styles: [":host(.navbar-vertical-item){display:flex;align-items:center;position:relative;color:var(--element-text-primary);background:none;border:0;font-size:.875rem;padding-block:8px;padding-inline:0 12px;min-inline-size:0;min-block-size:calc(1lh + 24px);inline-size:100%;border-radius:0}:host(.navbar-vertical-item) .item-title{margin-inline-start:12px}:host(.navbar-vertical-item) .icon-lg{margin-inline-start:12px}:host(.navbar-vertical-item) .icon-lg+.item-title{margin-inline-start:8px}:host(.navbar-vertical-item).show .badge:not(.badge-collapsed){display:none}:host(.navbar-vertical-item):not(.show) .badge+.dropdown-caret{margin-inline:0;padding-inline:0}:host(.navbar-vertical-item).active{color:var(--element-action-primary-hover);background:var(--element-base-1-selected)}:host(.navbar-vertical-item).active:after{content:\"\";position:absolute;inset-block:0;inset-inline-start:0;inline-size:4px;background:var(--element-action-primary-hover)}:host(.navbar-vertical-item):hover{text-decoration:none;background:var(--element-base-1-hover)}:host-context(si-navbar-vertical-next-items > .navbar-vertical-item)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-items > si-navbar-vertical-next-group)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-items > si-navbar-flyout-anchor)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-footer-items > .navbar-vertical-item)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-footer-items > si-navbar-vertical-next-group)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-footer-items > si-navbar-flyout-anchor)+:host(.navbar-vertical-item){margin-block-start:8px}:host-context(.nav-text-only si-navbar-vertical-next-group) .item-title{margin-inline-start:0}:host-context(si-navbar-vertical-next-group) :host(.navbar-vertical-item){padding-inline-start:32px}:host-context(si-navbar-vertical-next-group) :host(.navbar-vertical-item) .item-title{font-weight:400}:host-context(.dropdown-menu) :host(.navbar-vertical-item){padding-inline-start:0}:host-context(.dropdown-menu) :host(.navbar-vertical-item) .item-title{font-weight:400}:host-context(.nav-collapsed) .badge{position:absolute;inset-block-start:4px;inset-inline-end:6px;min-inline-size:.875rem;border-radius:.4375rem;font-size:.75rem;line-height:.875rem;padding-block:0;padding-inline:4px;font-family:var(--element-body-font-family);font-weight:600;text-align:center}:host-context(.nav-collapsed) .badge.badge-text-only{color:transparent;font-size:0}:host-context(.nav-collapsed) :is(.item-title,.dropdown-caret){position:absolute!important;inline-size:1px!important;block-size:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}:host-context(.nav-collapsed).hide-badge-collapsed .badge{display:none}.badge{margin-inline:auto 0}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
607
- }
608
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextItemComponent, decorators: [{
609
- type: Component,
610
- args: [{ selector: 'a[si-navbar-vertical-next-item], button[si-navbar-vertical-next-item]', imports: [SiIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: {
611
- 'class': 'focus-inside navbar-vertical-item',
612
- '[class.active]': 'active',
613
- '[class.hide-badge-collapsed]': 'hideBadgeWhenCollapsed()',
614
- '(click)': 'triggered()'
615
- }, template: "@let icon = this.icon();\n@if (icon) {\n <si-icon class=\"icon-lg\" [icon]=\"icon\" />\n}\n<div class=\"item-title text-truncate si-h5\">\n <ng-content />\n</div>\n@if (!navbar.textOnly() && formattedBadge()) {\n @let badgeColor = this.badgeColor();\n <span\n [class]=\"[\n 'badge',\n badgeColor ? `bg-${badgeColor}` : 'bg-default',\n textOnlyBadge() ? 'badge-text-only' : '',\n navbar.collapsed() ? 'badge-collapsed' : ''\n ]\"\n >{{ formattedBadge() }}</span\n >\n}\n@if (group) {\n <si-icon\n class=\"dropdown-caret me-0 text-body\"\n [icon]=\"group.flyoutMode() ? icons.elementRight2 : icons.elementDown2\"\n />\n}\n", styles: [":host(.navbar-vertical-item){display:flex;align-items:center;position:relative;color:var(--element-text-primary);background:none;border:0;font-size:.875rem;padding-block:8px;padding-inline:0 12px;min-inline-size:0;min-block-size:calc(1lh + 24px);inline-size:100%;border-radius:0}:host(.navbar-vertical-item) .item-title{margin-inline-start:12px}:host(.navbar-vertical-item) .icon-lg{margin-inline-start:12px}:host(.navbar-vertical-item) .icon-lg+.item-title{margin-inline-start:8px}:host(.navbar-vertical-item).show .badge:not(.badge-collapsed){display:none}:host(.navbar-vertical-item):not(.show) .badge+.dropdown-caret{margin-inline:0;padding-inline:0}:host(.navbar-vertical-item).active{color:var(--element-action-primary-hover);background:var(--element-base-1-selected)}:host(.navbar-vertical-item).active:after{content:\"\";position:absolute;inset-block:0;inset-inline-start:0;inline-size:4px;background:var(--element-action-primary-hover)}:host(.navbar-vertical-item):hover{text-decoration:none;background:var(--element-base-1-hover)}:host-context(si-navbar-vertical-next-items > .navbar-vertical-item)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-items > si-navbar-vertical-next-group)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-items > si-navbar-flyout-anchor)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-footer-items > .navbar-vertical-item)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-footer-items > si-navbar-vertical-next-group)+:host(.navbar-vertical-item),:host-context(si-navbar-vertical-next-footer-items > si-navbar-flyout-anchor)+:host(.navbar-vertical-item){margin-block-start:8px}:host-context(.nav-text-only si-navbar-vertical-next-group) .item-title{margin-inline-start:0}:host-context(si-navbar-vertical-next-group) :host(.navbar-vertical-item){padding-inline-start:32px}:host-context(si-navbar-vertical-next-group) :host(.navbar-vertical-item) .item-title{font-weight:400}:host-context(.dropdown-menu) :host(.navbar-vertical-item){padding-inline-start:0}:host-context(.dropdown-menu) :host(.navbar-vertical-item) .item-title{font-weight:400}:host-context(.nav-collapsed) .badge{position:absolute;inset-block-start:4px;inset-inline-end:6px;min-inline-size:.875rem;border-radius:.4375rem;font-size:.75rem;line-height:.875rem;padding-block:0;padding-inline:4px;font-family:var(--element-body-font-family);font-weight:600;text-align:center}:host-context(.nav-collapsed) .badge.badge-text-only{color:transparent;font-size:0}:host-context(.nav-collapsed) :is(.item-title,.dropdown-caret){position:absolute!important;inline-size:1px!important;block-size:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}:host-context(.nav-collapsed).hide-badge-collapsed .badge{display:none}.badge{margin-inline:auto 0}\n"] }]
616
- }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], badge: [{ type: i0.Input, args: [{ isSignal: true, alias: "badge", required: false }] }], badgeColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgeColor", required: false }] }], hideBadgeWhenCollapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideBadgeWhenCollapsed", required: false }] }], activeOverride: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeOverride", required: false }] }] } });
617
-
618
715
  /**
619
716
  * Copyright (c) Siemens 2016 - 2026
620
717
  * SPDX-License-Identifier: MIT