@siemens/element-ng 49.10.0 → 49.12.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 (108) hide show
  1. package/carousel/package.json +4 -0
  2. package/fesm2022/siemens-element-ng-about.mjs +13 -4
  3. package/fesm2022/siemens-element-ng-about.mjs.map +1 -1
  4. package/fesm2022/siemens-element-ng-ag-grid.mjs +6 -5
  5. package/fesm2022/siemens-element-ng-ag-grid.mjs.map +1 -1
  6. package/fesm2022/siemens-element-ng-application-header.mjs +21 -24
  7. package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
  8. package/fesm2022/siemens-element-ng-breadcrumb-router.mjs +3 -3
  9. package/fesm2022/siemens-element-ng-breadcrumb-router.mjs.map +1 -1
  10. package/fesm2022/siemens-element-ng-breadcrumb.mjs +3 -3
  11. package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
  12. package/fesm2022/siemens-element-ng-card.mjs +2 -2
  13. package/fesm2022/siemens-element-ng-card.mjs.map +1 -1
  14. package/fesm2022/siemens-element-ng-carousel.mjs +541 -0
  15. package/fesm2022/siemens-element-ng-carousel.mjs.map +1 -0
  16. package/fesm2022/siemens-element-ng-chat-messages.mjs +18 -21
  17. package/fesm2022/siemens-element-ng-chat-messages.mjs.map +1 -1
  18. package/fesm2022/siemens-element-ng-content-action-bar.mjs +2 -2
  19. package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -1
  20. package/fesm2022/siemens-element-ng-dashboard.mjs +34 -35
  21. package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
  22. package/fesm2022/siemens-element-ng-date-range-filter.mjs +20 -9
  23. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
  24. package/fesm2022/siemens-element-ng-datepicker.mjs +11 -10
  25. package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
  26. package/fesm2022/siemens-element-ng-electron-titlebar.mjs +3 -3
  27. package/fesm2022/siemens-element-ng-electron-titlebar.mjs.map +1 -1
  28. package/fesm2022/siemens-element-ng-empty-state.mjs +2 -2
  29. package/fesm2022/siemens-element-ng-empty-state.mjs.map +1 -1
  30. package/fesm2022/siemens-element-ng-file-uploader.mjs +49 -47
  31. package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
  32. package/fesm2022/siemens-element-ng-filter-bar.mjs +5 -5
  33. package/fesm2022/siemens-element-ng-filter-bar.mjs.map +1 -1
  34. package/fesm2022/siemens-element-ng-filtered-search.mjs +8 -7
  35. package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
  36. package/fesm2022/siemens-element-ng-footer.mjs +3 -3
  37. package/fesm2022/siemens-element-ng-footer.mjs.map +1 -1
  38. package/fesm2022/siemens-element-ng-form.mjs +11 -10
  39. package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
  40. package/fesm2022/siemens-element-ng-formly.mjs +24 -23
  41. package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
  42. package/fesm2022/siemens-element-ng-header-dropdown.mjs +26 -17
  43. package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
  44. package/fesm2022/siemens-element-ng-help-button.mjs +3 -3
  45. package/fesm2022/siemens-element-ng-help-button.mjs.map +1 -1
  46. package/fesm2022/siemens-element-ng-inline-notification.mjs +3 -3
  47. package/fesm2022/siemens-element-ng-inline-notification.mjs.map +1 -1
  48. package/fesm2022/siemens-element-ng-landing-page.mjs +2 -2
  49. package/fesm2022/siemens-element-ng-landing-page.mjs.map +1 -1
  50. package/fesm2022/siemens-element-ng-language-switcher.mjs +3 -3
  51. package/fesm2022/siemens-element-ng-language-switcher.mjs.map +1 -1
  52. package/fesm2022/siemens-element-ng-markdown-renderer.mjs +4 -3
  53. package/fesm2022/siemens-element-ng-markdown-renderer.mjs.map +1 -1
  54. package/fesm2022/siemens-element-ng-menu.mjs +2 -2
  55. package/fesm2022/siemens-element-ng-menu.mjs.map +1 -1
  56. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +362 -264
  57. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -1
  58. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +30 -13
  59. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
  60. package/fesm2022/siemens-element-ng-navbar.mjs +6 -8
  61. package/fesm2022/siemens-element-ng-navbar.mjs.map +1 -1
  62. package/fesm2022/siemens-element-ng-notification-item.mjs +3 -3
  63. package/fesm2022/siemens-element-ng-notification-item.mjs.map +1 -1
  64. package/fesm2022/siemens-element-ng-pagination.mjs +4 -1
  65. package/fesm2022/siemens-element-ng-pagination.mjs.map +1 -1
  66. package/fesm2022/siemens-element-ng-password-toggle.mjs +3 -3
  67. package/fesm2022/siemens-element-ng-password-toggle.mjs.map +1 -1
  68. package/fesm2022/siemens-element-ng-photo-upload.mjs +2 -2
  69. package/fesm2022/siemens-element-ng-pills-input.mjs +4 -4
  70. package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -1
  71. package/fesm2022/siemens-element-ng-popover-legacy.mjs +3 -3
  72. package/fesm2022/siemens-element-ng-popover-legacy.mjs.map +1 -1
  73. package/fesm2022/siemens-element-ng-popover.mjs +3 -3
  74. package/fesm2022/siemens-element-ng-popover.mjs.map +1 -1
  75. package/fesm2022/siemens-element-ng-result-details-list.mjs +3 -3
  76. package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -1
  77. package/fesm2022/siemens-element-ng-select.mjs +2 -2
  78. package/fesm2022/siemens-element-ng-side-panel.mjs +6 -6
  79. package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
  80. package/fesm2022/siemens-element-ng-sort-bar.mjs +3 -3
  81. package/fesm2022/siemens-element-ng-sort-bar.mjs.map +1 -1
  82. package/fesm2022/siemens-element-ng-split.mjs +3 -3
  83. package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
  84. package/fesm2022/siemens-element-ng-status-bar.mjs +3 -3
  85. package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
  86. package/fesm2022/siemens-element-ng-threshold.mjs +5 -5
  87. package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -1
  88. package/fesm2022/siemens-element-ng-toast-notification.mjs +3 -3
  89. package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -1
  90. package/fesm2022/siemens-element-ng-tooltip.mjs +3 -3
  91. package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
  92. package/fesm2022/siemens-element-ng-tour.mjs +2 -2
  93. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  94. package/fesm2022/siemens-element-ng-tree-view.mjs +6 -6
  95. package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
  96. package/package.json +12 -8
  97. package/template-i18n.json +15 -6
  98. package/types/siemens-element-ng-about.d.ts +11 -1
  99. package/types/siemens-element-ng-application-header.d.ts +3 -4
  100. package/types/siemens-element-ng-carousel.d.ts +209 -0
  101. package/types/siemens-element-ng-chat-messages.d.ts +1 -2
  102. package/types/siemens-element-ng-dashboard.d.ts +4 -4
  103. package/types/siemens-element-ng-date-range-filter.d.ts +11 -2
  104. package/types/siemens-element-ng-file-uploader.d.ts +6 -8
  105. package/types/siemens-element-ng-header-dropdown.d.ts +3 -3
  106. package/types/siemens-element-ng-navbar-vertical-next.d.ts +161 -85
  107. package/types/siemens-element-ng-navbar.d.ts +1 -2
  108. package/types/siemens-element-ng-translate.d.ts +9 -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,325 @@ 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, changeDetection: i0.ChangeDetectionStrategy.OnPush });
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
+ changeDetection: ChangeDetectionStrategy.OnPush,
66
+ host: { '[attr.aria-owns]': 'groupId()' }
67
+ }]
68
+ }], propDecorators: { groupId: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupId", required: false }] }] } });
69
+ /** @experimental */
70
+ class SiNavbarVerticalNextGroupTriggerDirective {
71
+ static idCounter = 0;
72
+ /** @internal */
73
+ groupId = `si-navbar-vertical-next-group-${SiNavbarVerticalNextGroupTriggerDirective.idCounter++}`;
74
+ id = `${this.groupId}-trigger`;
75
+ groupTemplate = input.required({ ...(ngDevMode ? { debugName: "groupTemplate" } : {}), alias: 'siNavbarVerticalNextGroupTriggerFor' });
76
+ stateId = input(...(ngDevMode ? [undefined, { debugName: "stateId" }] : []));
77
+ /** @defaultValue false */
78
+ expanded = linkedSignal({ ...(ngDevMode ? { debugName: "expanded" } : {}), source: () => {
79
+ const stateId = this.stateId();
80
+ return {
81
+ uiState: stateId ? this.navbar.uiStateExpandedItems()[stateId] : undefined,
82
+ alwaysFlyout: this.navbar.alwaysFlyout()
83
+ };
84
+ },
85
+ computation: (source, previous) => {
86
+ // `alwaysFlyout` toggled: reset expansion. When switching back to inline,
87
+ // surface the group that owns the active route.
88
+ if (previous && source.alwaysFlyout !== previous.source.alwaysFlyout) {
89
+ return !source.alwaysFlyout && untracked(() => this.active());
90
+ }
91
+ // First run or UIState (re)loaded: honor the persisted value when present,
92
+ // otherwise keep the user's current expansion.
93
+ if (source.uiState !== undefined) {
94
+ return source.uiState;
95
+ }
96
+ return previous?.value ?? false;
97
+ } });
98
+ /**
99
+ * Whether the group is currently rendered as a transient flyout overlay
100
+ * (true) or inline within the navbar (false). Automatically resets to
101
+ * `false` whenever the rendering mode changes.
102
+ * @internal
103
+ */
104
+ flyout = linkedSignal({ ...(ngDevMode ? { debugName: "flyout" } : {}), source: () => this.flyoutMode(),
105
+ computation: () => false });
106
+ /** `true` when this group contains the active route. Set by the group component.
107
+ * @internal
108
+ */
109
+ active = signal(false, ...(ngDevMode ? [{ debugName: "active" }] : []));
110
+ navbar = inject(SI_NAVBAR_VERTICAL_NEXT);
111
+ /** Signal mirror of the navbar's flyout mode. `true` when groups should render as transient overlays instead of inline.
112
+ * @internal
113
+ */
114
+ flyoutMode = computed(() => this.navbar.flyoutMode(), ...(ngDevMode ? [{ debugName: "flyoutMode" }] : []));
115
+ flyoutOutsideClickSubscription;
116
+ viewContainer = inject(ViewContainerRef);
117
+ overlay = inject(Overlay);
118
+ destroyRef = inject(DestroyRef);
119
+ injector = Injector.create({ parent: inject(Injector), providers: [] });
120
+ overlayRef = this.overlay.create({
121
+ positionStrategy: this.buildPositionStrategy(this.navbar.chipMode())
122
+ });
123
+ groupView;
124
+ flyoutAnchorComponentRef;
125
+ templatePortal = computed(() => new TemplatePortal(this.groupTemplate(), this.viewContainer, undefined, this.injector), ...(ngDevMode ? [{ debugName: "templatePortal" }] : []));
126
+ constructor() {
127
+ // Manage the rendering of the inline projection / flyout overlay in
128
+ // response to mode changes. Only side effects belong here; the related
129
+ // signal state is propagated by `flyout` / `expanded` linked signals.
130
+ effect(() => {
131
+ this.flyoutMode();
132
+ untracked(() => {
133
+ this.detachFlyout();
134
+ this.attachInline();
135
+ });
136
+ });
137
+ this.destroyRef.onDestroy(() => {
138
+ this.overlayRef.detach();
139
+ this.overlayRef.dispose();
140
+ });
141
+ }
142
+ /** @internal */
143
+ buildPositionStrategy(chipMode) {
144
+ const positions = chipMode
145
+ ? [
146
+ { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },
147
+ { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' }
148
+ ]
149
+ : [
150
+ { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top' },
151
+ { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom' }
152
+ ];
153
+ return this.overlay
154
+ .position()
155
+ .flexibleConnectedTo(this.viewContainer.element)
156
+ .withPositions(positions);
157
+ }
158
+ /** @internal */
159
+ hideFlyout() {
160
+ if (!this.flyout())
161
+ return;
162
+ this.flyout.set(false);
163
+ this.detachFlyout();
164
+ this.attachInline();
165
+ }
166
+ triggered() {
167
+ if (this.flyoutMode()) {
168
+ this.toggleFlyout();
169
+ }
170
+ else {
171
+ this.expanded.set(!this.expanded());
172
+ this.navbar.groupStateChanged(this.stateId(), this.expanded());
173
+ }
174
+ }
175
+ toggleFlyout() {
176
+ if (this.flyout()) {
177
+ this.hideFlyout();
178
+ }
179
+ else {
180
+ this.flyout.set(true);
181
+ this.attachFlyout();
182
+ }
183
+ }
184
+ attachInline() {
185
+ this.overlayRef.detach();
186
+ this.groupView?.destroy();
187
+ this.groupView = this.viewContainer.createEmbeddedView(this.groupTemplate(), undefined, {
188
+ injector: this.injector
189
+ });
190
+ }
191
+ attachFlyout() {
192
+ this.overlayRef.updatePositionStrategy(this.buildPositionStrategy(this.navbar.chipMode()));
193
+ this.groupView?.destroy();
194
+ this.groupView = this.overlayRef.attach(this.templatePortal());
195
+ // In chip mode the trigger's DOM is outside <nav> via DomPortal; use the
196
+ // navbar's in-nav anchor host so aria-owns stays within the navigation landmark.
197
+ const anchorHost = this.navbar.flyoutAnchorHost() ?? this.viewContainer;
198
+ this.flyoutAnchorComponentRef = anchorHost.createComponent(SiNavbarFlyoutAnchorComponent);
199
+ this.flyoutAnchorComponentRef.setInput('groupId', this.groupId);
200
+ this.flyoutOutsideClickSubscription = this.overlayRef
201
+ .outsidePointerEvents()
202
+ .subscribe(() => this.hideFlyout());
203
+ }
204
+ detachFlyout() {
205
+ this.flyoutAnchorComponentRef?.destroy();
206
+ this.flyoutAnchorComponentRef = undefined;
207
+ this.flyoutOutsideClickSubscription?.unsubscribe();
208
+ this.flyoutOutsideClickSubscription = undefined;
209
+ }
210
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextGroupTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
211
+ 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 });
212
+ }
213
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextGroupTriggerDirective, decorators: [{
214
+ type: Directive,
215
+ args: [{
216
+ selector: 'button[siNavbarVerticalNextGroupTriggerFor]',
217
+ host: {
218
+ class: 'dropdown-toggle',
219
+ '[id]': 'id',
220
+ '[class.show]': 'expanded()',
221
+ '[attr.aria-controls]': 'groupId',
222
+ '[attr.aria-expanded]': 'flyoutMode() ? flyout() : expanded()',
223
+ '(click)': 'triggered()'
224
+ }
225
+ }]
226
+ }], ctorParameters: () => [], propDecorators: { groupTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "siNavbarVerticalNextGroupTriggerFor", required: true }] }], stateId: [{ type: i0.Input, args: [{ isSignal: true, alias: "stateId", required: false }] }] } });
227
+
228
+ /**
229
+ * Copyright (c) Siemens 2016 - 2026
230
+ * SPDX-License-Identifier: MIT
231
+ */
232
+ /** @experimental */
233
+ class SiNavbarVerticalNextItemComponent {
234
+ icons = addIcons({ elementDown2, elementRight2 });
235
+ /** Optional icon to render before the label. */
236
+ icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : []));
237
+ /** Badge value to display. */
238
+ badge = input(...(ngDevMode ? [undefined, { debugName: "badge" }] : []));
239
+ /** Color of the badge. */
240
+ badgeColor = input(...(ngDevMode ? [undefined, { debugName: "badgeColor" }] : []));
241
+ /**
242
+ * Hide the badge when the navbar is collapsed.
243
+ *
244
+ * @defaultValue false
245
+ */
246
+ hideBadgeWhenCollapsed = input(false, { ...(ngDevMode ? { debugName: "hideBadgeWhenCollapsed" } : {}), transform: booleanAttribute });
247
+ /** Override the active state. Useful for action items. */
248
+ activeOverride = input(...(ngDevMode ? [undefined, { debugName: "activeOverride" }] : []));
249
+ navbar = inject(SI_NAVBAR_VERTICAL_NEXT);
250
+ parent = inject(SiNavbarVerticalNextItemComponent, {
251
+ skipSelf: true,
252
+ optional: true
253
+ });
254
+ group = inject(SiNavbarVerticalNextGroupTriggerDirective, {
255
+ optional: true,
256
+ self: true
257
+ });
258
+ routerLinkActive = inject(RouterLinkActive, { optional: true });
259
+ /** Signal mirror of `RouterLinkActive.isActive`.
260
+ * @internal
261
+ */
262
+ routerActive = toSignal(this.routerLinkActive?.isActiveChange ?? EMPTY, { initialValue: this.routerLinkActive?.isActive ?? false });
263
+ /** @internal */
264
+ elementRef = inject(ElementRef);
265
+ /** DOM portal relocated into the chip slot when collapsed.
266
+ * @internal
267
+ */
268
+ hostPortal = new DomPortal(this.elementRef.nativeElement);
269
+ /** Signal mirror of the navbar's chip mode. `true` when inline-collapse is active and the navbar is collapsed.
270
+ * @internal
271
+ */
272
+ chipMode = computed(() => this.navbar.chipMode(), ...(ngDevMode ? [{ debugName: "chipMode" }] : []));
273
+ /**
274
+ * Determines if the badge contains text-only content (not numeric)
275
+ */
276
+ textOnlyBadge = computed(() => {
277
+ const badge = this.badge();
278
+ return badge != null && badge !== '' ? typeof badge !== 'number' : false;
279
+ }, ...(ngDevMode ? [{ debugName: "textOnlyBadge" }] : []));
280
+ /** `true` when the `active` CSS class should be applied to this item.
281
+ *
282
+ * In chip mode, root-level items use `is-chip` styling instead of `active`, so the
283
+ * class is suppressed unless the item is a sub-item (`parent` is set) or it is a
284
+ * group trigger whose flyout is currently open.
285
+ * Outside chip mode the value equals `active()`.
286
+ * @internal
287
+ */
288
+ showActive = computed(() => {
289
+ if (this.chipMode()) {
290
+ return (!!this.parent || this.group?.flyout()) && this.active();
291
+ }
292
+ return this.active();
293
+ }, ...(ngDevMode ? [{ debugName: "showActive" }] : []));
294
+ /**
295
+ * Formats badge value to limit display to "+99" for numbers greater than 99
296
+ */
297
+ formattedBadge = computed(() => {
298
+ const badge = this.badge();
299
+ if (badge == null || badge === '') {
300
+ return '';
301
+ }
302
+ if (typeof badge === 'number') {
303
+ return badge > 99 ? '+99' : badge.toString();
304
+ }
305
+ return badge.toString();
306
+ }, ...(ngDevMode ? [{ debugName: "formattedBadge" }] : []));
307
+ /** Active via override or router link — excludes group state.
308
+ * @internal
309
+ */
310
+ anyRouteActive = computed(() => !!this.activeOverride() || this.routerActive(), ...(ngDevMode ? [{ debugName: "anyRouteActive" }] : []));
311
+ /** Own route is active, or a descendant route is active — includes group state, not gated on expansion.
312
+ * @internal
313
+ */
314
+ isOnActiveRoute = computed(() => this.anyRouteActive() || !!this.group?.active(), ...(ngDevMode ? [{ debugName: "isOnActiveRoute" }] : []));
315
+ /**
316
+ * `true` when this item should reflect activity.
317
+ *
318
+ * For non-trigger items: equivalent to being on the active route.
319
+ *
320
+ * For group trigger items: also `true` when a descendant route is active and
321
+ * the descendant is not currently visible inline — i.e. the group is collapsed
322
+ * or the navbar is collapsed. This surfaces the active state on the trigger
323
+ * when the active child cannot show it itself.
324
+ */
325
+ active = computed(() => this.anyRouteActive() ||
326
+ ((!this.group?.expanded() || this.navbar.collapsed()) && !!this.group?.active()), ...(ngDevMode ? [{ debugName: "active" }] : []));
327
+ /** `true` when this is a root-level item on the active route (ungated, so the chip survives collapse↔expand).
328
+ * @internal
329
+ */
330
+ isActiveRootItem = computed(() => !this.parent && this.isOnActiveRoute(), ...(ngDevMode ? [{ debugName: "isActiveRootItem" }] : []));
331
+ /** `true` when this item is currently rendered as a chip in the inline-collapse bar.
332
+ * @internal
333
+ */
334
+ isChip = computed(() => this.navbar.chipPortalAttached() && this.isActiveRootItem(), ...(ngDevMode ? [{ debugName: "isChip" }] : []));
335
+ ngOnInit() {
336
+ if (this.group && this.active()) {
337
+ this.group.expanded.set(true);
338
+ }
339
+ }
340
+ triggered() {
341
+ this.parent?.group?.hideFlyout();
342
+ if (!this.group) {
343
+ this.navbar.itemTriggered();
344
+ }
345
+ }
346
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
347
+ 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 });
348
+ }
349
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextItemComponent, decorators: [{
350
+ type: Component,
351
+ args: [{ selector: 'a[si-navbar-vertical-next-item], button[si-navbar-vertical-next-item]', imports: [SiIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: {
352
+ '[class.focus-inside]': '!chipMode() || !!parent',
353
+ '[class.navbar-vertical-item]': '!isChip()',
354
+ '[class.active]': 'showActive()',
355
+ '[class.is-chip]': 'isChip()',
356
+ '[class.btn]': 'isChip()',
357
+ '[class.btn-primary-ghost]': 'isChip()',
358
+ '[class.hide-badge-collapsed]': 'hideBadgeWhenCollapsed()',
359
+ '(click)': 'triggered()'
360
+ }, 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"] }]
361
+ }], 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 }] }] } });
362
+
43
363
  /**
44
364
  * Copyright (c) Siemens 2016 - 2026
45
365
  * SPDX-License-Identifier: MIT
@@ -128,6 +448,22 @@ class SiNavbarVerticalNextComponent {
128
448
  injector = inject(Injector);
129
449
  ready = signal(false, ...(ngDevMode ? [{ debugName: "ready" }] : []));
130
450
  smallScreen = signal(false, ...(ngDevMode ? [{ debugName: "smallScreen" }] : []));
451
+ /** Stable ViewContainerRef inside <nav>, used to host flyout anchors when the chip DomPortal moves a trigger outside the nav.
452
+ * @internal
453
+ */
454
+ flyoutAnchorHost = viewChild('flyoutAnchorHost', { ...(ngDevMode ? { debugName: "flyoutAnchorHost" } : {}), read: ViewContainerRef });
455
+ /** All projected nav items, including descendants inside group templates.
456
+ * @internal
457
+ */
458
+ items = contentChildren(SiNavbarVerticalNextItemComponent, { ...(ngDevMode ? { debugName: "items" } : {}), descendants: true });
459
+ /** The active root-level item; group triggers resolve for nested routes.
460
+ * @internal
461
+ */
462
+ activeItem = computed(() => this.items().find(item => item.isActiveRootItem()), ...(ngDevMode ? [{ debugName: "activeItem" }] : []));
463
+ /** `true` when the active item's portal should occupy the chip slot.
464
+ * @internal
465
+ */
466
+ chipPortalAttached = computed(() => this.inlineCollapse() && this.collapsed() && !!this.activeItem(), ...(ngDevMode ? [{ debugName: "chipPortalAttached" }] : []));
131
467
  /**
132
468
  * @defaultValue
133
469
  * ```
@@ -143,6 +479,14 @@ class SiNavbarVerticalNextComponent {
143
479
  }
144
480
  return this.collapsed() ? this.icons.elementDoubleRight : this.icons.elementDoubleLeft;
145
481
  }, ...(ngDevMode ? [{ debugName: "toggleIcon" }] : []));
482
+ /** `true` when inline-collapse is active and the nav is collapsed.
483
+ * @internal
484
+ */
485
+ chipMode = computed(() => this.inlineCollapse() && this.collapsed(), ...(ngDevMode ? [{ debugName: "chipMode" }] : []));
486
+ /** `true` when groups should render as flyout overlays.
487
+ * @internal
488
+ */
489
+ flyoutMode = computed(() => this.alwaysFlyout() || this.collapsed(), ...(ngDevMode ? [{ debugName: "flyoutMode" }] : []));
146
490
  constructor() {
147
491
  this.breakpointObserver
148
492
  .observe(`(max-width: ${BOOTSTRAP_BREAKPOINTS.lgMinimum}px)`)
@@ -223,19 +567,21 @@ class SiNavbarVerticalNextComponent {
223
567
  }
224
568
  }
225
569
  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 });
570
+ 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
571
  }
228
572
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextComponent, decorators: [{
229
573
  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: {
574
+ args: [{ selector: 'si-navbar-vertical-next', imports: [PortalModule, SiIconComponent, SiSkipLinkTargetDirective, SiTranslatePipe], providers: [{ provide: SI_NAVBAR_VERTICAL_NEXT, useExisting: SiNavbarVerticalNextComponent }], changeDetection: ChangeDetectionStrategy.OnPush, host: {
231
575
  class: 'si-layout-inner ready',
232
576
  '[class.nav-collapsed]': 'collapsed()',
233
577
  '[class.nav-text-only]': 'textOnly()',
234
578
  '[class.nav-inline-collapse]': 'inlineCollapse()',
235
579
  '[class.visible]': 'visible()',
236
580
  '[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 }] }] } });
581
+ }, 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"] }]
582
+ }], 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), { ...{
583
+ descendants: true
584
+ }, isSignal: true }] }] } });
239
585
 
240
586
  /**
241
587
  * Copyright (c) Siemens 2016 - 2026
@@ -247,11 +593,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
247
593
  */
248
594
  class SiNavbarVerticalNextDividerComponent {
249
595
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextDividerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
250
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.8", type: SiNavbarVerticalNextDividerComponent, isStandalone: true, selector: "si-navbar-vertical-next-divider", ngImport: i0, template: '', isInline: true, styles: [":host{display:block;block-size:1px;background-color:var(--element-ui-4);margin-block:6px;margin-inline:12px}\n"] });
596
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.8", type: SiNavbarVerticalNextDividerComponent, isStandalone: true, selector: "si-navbar-vertical-next-divider", ngImport: i0, template: '', isInline: true, styles: [":host{display:block;block-size:1px;background-color:var(--element-ui-4);margin-block:6px;margin-inline:12px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
251
597
  }
252
598
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextDividerComponent, decorators: [{
253
599
  type: Component,
254
- args: [{ selector: 'si-navbar-vertical-next-divider', template: '', styles: [":host{display:block;block-size:1px;background-color:var(--element-ui-4);margin-block:6px;margin-inline:12px}\n"] }]
600
+ args: [{ selector: 'si-navbar-vertical-next-divider', template: '', changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;block-size:1px;background-color:var(--element-ui-4);margin-block:6px;margin-inline:12px}\n"] }]
255
601
  }] });
256
602
 
257
603
  /**
@@ -273,171 +619,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
273
619
  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
620
  }] });
275
621
 
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
622
  /**
442
623
  * Copyright (c) Siemens 2016 - 2026
443
624
  * SPDX-License-Identifier: MIT
@@ -472,7 +653,7 @@ class SiNavbarVerticalNextGroupComponent {
472
653
  <ng-content />
473
654
  </div>
474
655
  </div>
475
- }`, isInline: true, styles: [":host.component-enter .inline-group{transition:none}.inline-group{display:grid;transition-property:grid-template-rows,opacity;transition-duration:calc(.5s * var(--element-animations-enabled, 1));transition-timing-function:ease;opacity:1;grid-template-rows:1fr;overflow:hidden}@starting-style{.inline-group{grid-template-rows:0fr;opacity:0}}.inline-group.group-leave{grid-template-rows:0fr;opacity:0}.dropdown-menu{display:block;position:static}\n"], dependencies: [{ kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }] });
656
+ }`, isInline: true, styles: [":host.component-enter .inline-group{transition:none}.inline-group{display:grid;transition-property:grid-template-rows,opacity;transition-duration:calc(.5s * var(--element-animations-enabled, 1));transition-timing-function:ease;opacity:1;grid-template-rows:1fr;overflow:hidden}@starting-style{.inline-group{grid-template-rows:0fr;opacity:0}}.inline-group.group-leave{grid-template-rows:0fr;opacity:0}.dropdown-menu{display:block;position:static}\n"], dependencies: [{ kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
476
657
  }
477
658
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextGroupComponent, decorators: [{
478
659
  type: Component,
@@ -489,7 +670,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
489
670
  <ng-content />
490
671
  </div>
491
672
  </div>
492
- }`, host: {
673
+ }`, changeDetection: ChangeDetectionStrategy.OnPush, host: {
493
674
  role: 'group',
494
675
  '[id]': 'groupTrigger.groupId',
495
676
  '[attr.aria-labelledby]': 'groupTrigger.id',
@@ -514,7 +695,7 @@ class SiNavbarVerticalNextHeaderComponent {
514
695
  } @else {
515
696
  <si-navbar-vertical-next-divider class="divider" animate.leave="divider-leave" />
516
697
  }
517
- `, isInline: true, 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"], dependencies: [{ kind: "component", type: SiNavbarVerticalNextDividerComponent, selector: "si-navbar-vertical-next-divider" }] });
698
+ `, isInline: true, 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"], dependencies: [{ kind: "component", type: SiNavbarVerticalNextDividerComponent, selector: "si-navbar-vertical-next-divider" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
518
699
  }
519
700
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiNavbarVerticalNextHeaderComponent, decorators: [{
520
701
  type: Component,
@@ -526,95 +707,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
526
707
  } @else {
527
708
  <si-navbar-vertical-next-divider class="divider" animate.leave="divider-leave" />
528
709
  }
529
- `, host: {
710
+ `, changeDetection: ChangeDetectionStrategy.OnPush, host: {
530
711
  '[class.collapsed]': 'navbar.collapsed()',
531
712
  'animate.enter': 'component-enter'
532
713
  }, 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
714
  }] });
534
715
 
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
716
  /**
619
717
  * Copyright (c) Siemens 2016 - 2026
620
718
  * SPDX-License-Identifier: MIT