@siemens/element-ng 48.7.0 → 48.8.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 (49) hide show
  1. package/date-range-filter/index.d.ts +2 -2
  2. package/fesm2022/siemens-element-ng-avatar.mjs +2 -2
  3. package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -1
  4. package/fesm2022/siemens-element-ng-common.mjs +2 -2
  5. package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
  6. package/fesm2022/siemens-element-ng-date-range-filter.mjs +13 -9
  7. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
  8. package/fesm2022/siemens-element-ng-datepicker.mjs +3 -0
  9. package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
  10. package/fesm2022/siemens-element-ng-formly.mjs +4 -2
  11. package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
  12. package/fesm2022/siemens-element-ng-header-dropdown.mjs +4 -3
  13. package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
  14. package/fesm2022/siemens-element-ng-icon.mjs +19 -5
  15. package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
  16. package/fesm2022/siemens-element-ng-list-details.mjs +5 -3
  17. package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -1
  18. package/fesm2022/siemens-element-ng-main-detail-container.mjs +11 -2
  19. package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -1
  20. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +2 -2
  21. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
  22. package/fesm2022/siemens-element-ng-navbar.mjs +6 -3
  23. package/fesm2022/siemens-element-ng-navbar.mjs.map +1 -1
  24. package/fesm2022/siemens-element-ng-notification-item.mjs +11 -2
  25. package/fesm2022/siemens-element-ng-notification-item.mjs.map +1 -1
  26. package/fesm2022/siemens-element-ng-password-toggle.mjs +2 -2
  27. package/fesm2022/siemens-element-ng-password-toggle.mjs.map +1 -1
  28. package/fesm2022/siemens-element-ng-side-panel.mjs +121 -16
  29. package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
  30. package/fesm2022/siemens-element-ng-status-toggle.mjs +1 -1
  31. package/fesm2022/siemens-element-ng-status-toggle.mjs.map +1 -1
  32. package/fesm2022/siemens-element-ng-tabs.mjs +6 -4
  33. package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
  34. package/fesm2022/siemens-element-ng-threshold.mjs +4 -4
  35. package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -1
  36. package/fesm2022/siemens-element-ng-tour.mjs.map +1 -1
  37. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  38. package/header-dropdown/index.d.ts +1 -0
  39. package/icon/index.d.ts +11 -1
  40. package/list-details/index.d.ts +1 -0
  41. package/main-detail-container/index.d.ts +1 -0
  42. package/navbar/index.d.ts +1 -0
  43. package/notification-item/index.d.ts +1 -0
  44. package/package.json +15 -15
  45. package/side-panel/index.d.ts +102 -9
  46. package/tabs/index.d.ts +1 -0
  47. package/template-i18n.json +2 -0
  48. package/threshold/index.d.ts +1 -1
  49. package/translate/index.d.ts +2 -0
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
- import { signal, Injectable, input, booleanAttribute, model, output, computed, viewChild, inject, PLATFORM_ID, ElementRef, ChangeDetectorRef, DestroyRef, DOCUMENT, Component, NgModule } from '@angular/core';
3
- import { BehaviorSubject, Subject, EMPTY } from 'rxjs';
2
+ import { signal, Injectable, input, booleanAttribute, model, output, computed, viewChild, inject, PLATFORM_ID, ElementRef, ChangeDetectorRef, DestroyRef, DOCUMENT, Component, effect, NgModule } from '@angular/core';
3
+ import { BehaviorSubject, Subject, EMPTY, timer } from 'rxjs';
4
4
  import * as i1 from '@angular/cdk/portal';
5
5
  import { CdkPortalOutlet, PortalModule } from '@angular/cdk/portal';
6
6
  import { isPlatformBrowser } from '@angular/common';
@@ -9,9 +9,10 @@ import { ResizeObserverService, BOOTSTRAP_BREAKPOINTS } from '@siemens/element-n
9
9
  import { t, SiTranslatePipe } from '@siemens/element-translate-ng/translate';
10
10
  import { debounceTime } from 'rxjs/operators';
11
11
  import { BreakpointObserver } from '@angular/cdk/layout';
12
+ import { ActivatedRoute, RouterLink } from '@angular/router';
12
13
  import { SiAccordionHCollapseService } from '@siemens/element-ng/accordion';
13
14
  import { SiContentActionBarComponent } from '@siemens/element-ng/content-action-bar';
14
- import { addIcons, elementDoubleRight, elementDoubleLeft, SiIconComponent } from '@siemens/element-ng/icon';
15
+ import { addIcons, elementDoubleRight, elementDoubleLeft, elementCancel, SiIconComponent } from '@siemens/element-ng/icon';
15
16
  import { SiLinkDirective } from '@siemens/element-ng/link';
16
17
  import { SiSearchBarComponent } from '@siemens/element-ng/search-bar';
17
18
 
@@ -32,6 +33,13 @@ class SiSidePanelService {
32
33
  tempContentClosed;
33
34
  /** @internal */
34
35
  enableMobile = signal(false);
36
+ /** @internal */
37
+ collapsible = signal(false);
38
+ fullscreenSubject = new BehaviorSubject(false);
39
+ /**
40
+ * Emits when fullscreen overlay mode is toggled.
41
+ */
42
+ isFullscreen$ = this.fullscreenSubject.asObservable();
35
43
  /** Set or update displayed content. */
36
44
  setSidePanelContent(portal) {
37
45
  this.contentSubject.next(portal);
@@ -57,6 +65,18 @@ class SiSidePanelService {
57
65
  isOpen() {
58
66
  return this.openSubject.value;
59
67
  }
68
+ /** Toggle fullscreen overlay mode. */
69
+ toggleFullscreen() {
70
+ this.fullscreenSubject.next(!this.fullscreenSubject.value);
71
+ }
72
+ /** Set fullscreen overlay mode. */
73
+ setFullscreen(fullscreen) {
74
+ this.fullscreenSubject.next(fullscreen);
75
+ }
76
+ /** Indicate if side panel is in fullscreen overlay mode. */
77
+ isFullscreen() {
78
+ return this.fullscreenSubject.value;
79
+ }
60
80
  /**
61
81
  * Indicate that the side panel is open with temporary content.
62
82
  */
@@ -102,6 +122,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
102
122
  * SPDX-License-Identifier: MIT
103
123
  */
104
124
  class SiSidePanelComponent {
125
+ /**
126
+ * Custom breakpoint for ultra-wide screens (≥1920px)
127
+ */
128
+ static xxxlMinimum = 1920;
105
129
  /**
106
130
  * @defaultValue false
107
131
  */
@@ -161,9 +185,12 @@ class SiSidePanelComponent {
161
185
  isMd = signal(true);
162
186
  isLg = signal(false);
163
187
  isXl = signal(false);
188
+ isXxl = signal(false);
189
+ isXxxl = signal(false);
164
190
  isCollapsed = signal(false);
165
191
  ready = signal(false);
166
192
  isHidden = signal(false);
193
+ isFullscreenOverlay = signal(false);
167
194
  showTempContent = signal(false);
168
195
  panelElement = viewChild.required('sidePanel');
169
196
  contentElement = viewChild.required('content');
@@ -190,6 +217,9 @@ class SiSidePanelComponent {
190
217
  destroyRef = inject(DestroyRef);
191
218
  document = inject(DOCUMENT);
192
219
  constructor() {
220
+ this.service.isFullscreen$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(fullscreen => {
221
+ this.isFullscreenOverlay.set(fullscreen);
222
+ });
193
223
  if (this.isBrowser) {
194
224
  this.resizeEvent
195
225
  .asObservable()
@@ -197,6 +227,7 @@ class SiSidePanelComponent {
197
227
  .subscribe(() => {
198
228
  this.openingOrClosing = false;
199
229
  this.emitResizeOutputs();
230
+ this.service.setFullscreen(false);
200
231
  if (this.isCollapsedInternal && !this.collapsible()) {
201
232
  this.isHidden.set(true);
202
233
  }
@@ -212,9 +243,12 @@ class SiSidePanelComponent {
212
243
  this.service.open();
213
244
  }
214
245
  }
215
- else if (changes.enableMobile) {
246
+ if (changes.enableMobile) {
216
247
  this.service.enableMobile.set(this.enableMobile());
217
248
  }
249
+ if (changes.collapsible) {
250
+ this.service.collapsible.set(this.collapsible());
251
+ }
218
252
  }
219
253
  ngOnInit() {
220
254
  // handle initial state to avoid flicker
@@ -222,6 +256,7 @@ class SiSidePanelComponent {
222
256
  this.isCollapsedInternal = collapsed;
223
257
  this.isHidden.set(collapsed);
224
258
  this.isCollapsed.set(collapsed);
259
+ this.service.collapsible.set(this.collapsible());
225
260
  this.resizeObserver
226
261
  .observe(this.element.nativeElement, 100, true)
227
262
  .pipe(takeUntilDestroyed(this.destroyRef))
@@ -286,7 +321,9 @@ class SiSidePanelComponent {
286
321
  this.isSm.set(width >= breakpoints.smMinimum && width < breakpoints.mdMinimum);
287
322
  this.isMd.set(width >= breakpoints.mdMinimum && width < breakpoints.lgMinimum);
288
323
  this.isLg.set(width >= breakpoints.lgMinimum && width < breakpoints.xlMinimum);
289
- this.isXl.set(width >= breakpoints.xlMinimum);
324
+ this.isXl.set(width >= breakpoints.xlMinimum && width < breakpoints.xxlMinimum);
325
+ this.isXxl.set(width >= breakpoints.xxlMinimum && width < SiSidePanelComponent.xxxlMinimum);
326
+ this.isXxxl.set(width >= SiSidePanelComponent.xxxlMinimum);
290
327
  }
291
328
  sendResize() {
292
329
  if (this.isScrollMode() || this.element.nativeElement.style.paddingRight !== '0') {
@@ -345,7 +382,7 @@ class SiSidePanelComponent {
345
382
  }
346
383
  }
347
384
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SiSidePanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
348
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.6", type: SiSidePanelComponent, isStandalone: true, selector: "si-side-panel", inputs: { collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, toggleItemLabel: { classPropertyName: "toggleItemLabel", publicName: "toggleItemLabel", isSignal: true, isRequired: false, transformFunction: null }, breakpoints: { classPropertyName: "breakpoints", publicName: "breakpoints", isSignal: true, isRequired: false, transformFunction: null }, enableMobile: { classPropertyName: "enableMobile", publicName: "enableMobile", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsed: "collapsedChange", closed: "closed", contentResize: "contentResize" }, host: { properties: { "class.enable-mobile": "enableMobile()", "class.rpanel-size--regular": "this.size() === \"regular\"", "class.rpanel-size--wide": "this.size() === \"wide\"", "class.rpanel-mode--over": "this.mode() === \"over\"", "class.rpanel-mode--scroll": "isScrollMode()", "class.rpanel-collapsed": "isCollapsed()", "class.ready": "ready()", "class.collapsible": "collapsible() && !this.showTempContent()", "class.collapsible-temp": "collapsible() && this.showTempContent()", "class.rpanel-hidden": "isHidden()", "class.rpanel-resize-xs": "isXs()", "class.rpanel-resize-sm": "isSm()", "class.rpanel-resize-md": "isMd()", "class.rpanel-resize-lg": "isLg()", "class.rpanel-resize-xl": "isXl()" }, classAttribute: "si-layout-inner" }, viewQueries: [{ propertyName: "panelElement", first: true, predicate: ["sidePanel"], descendants: true, isSignal: true }, { propertyName: "contentElement", first: true, predicate: ["content"], descendants: true, isSignal: true }, { propertyName: "portalOutlet", first: true, predicate: ["portalOutlet"], descendants: true, read: CdkPortalOutlet, isSignal: true }, { propertyName: "tmpPortalOutlet", first: true, predicate: ["tmpPortalOutlet"], descendants: true, read: CdkPortalOutlet, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<div #sidePanel class=\"side-panel focus-none\" tabindex=\"-1\">\n <div class=\"inner\" [class.d-none]=\"showTempContent()\">\n <ng-content select=\"si-side-panel-content, element-side-panel-content\" />\n <ng-container #portalOutlet cdkPortalOutlet />\n </div>\n <div class=\"inner\" [class.d-none]=\"!showTempContent()\">\n <ng-container #tmpPortalOutlet cdkPortalOutlet />\n </div>\n</div>\n<div #content class=\"main-content si-layout-inner\">\n <ng-content />\n</div>\n", styles: [":host{--rpanel-collapsed-padding: 0;--rpanel-size: 390px;display:block;padding-inline-end:var(--rpanel-size)}:host.ready{transition:padding-inline-end calc(.5s * var(--element-animations-enabled, 1))}:host.ready .side-panel{transition:inline-size calc(.5s * var(--element-animations-enabled, 1))}:host .side-panel,:host .side-panel>.inner{inline-size:var(--rpanel-size)}:host.collapsible,:host.collapsible-temp{--rpanel-collapsed-width: 48px}:host.rpanel-size--wide{--rpanel-size: 500px}:host.rpanel-resize-sm.rpanel-mode--over,:host.rpanel-resize-md.rpanel-mode--over,:host.rpanel-resize-lg.rpanel-mode--over,:host.rpanel-resize-xl.rpanel-mode--over{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-sm.rpanel-mode--over:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-md.rpanel-mode--over:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-lg.rpanel-mode--over:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-xl.rpanel-mode--over:not(.rpanel-collapsed) .side-panel{box-shadow:0 0 8px var(--element-box-shadow-color-1),0 8px 8px var(--element-box-shadow-color-2)}:host.rpanel-resize-lg.rpanel-mode--scroll.rpanel-size--wide{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-sm.rpanel-mode--scroll,:host.rpanel-resize-md.rpanel-mode--scroll{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-sm.rpanel-mode--scroll:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-md.rpanel-mode--scroll:not(.rpanel-collapsed) .side-panel{box-shadow:0 0 8px var(--element-box-shadow-color-1),0 8px 8px var(--element-box-shadow-color-2)}:host.rpanel-resize-xs.rpanel-mode--over,:host.rpanel-resize-xs.rpanel-mode--scroll{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-xs .side-panel{z-index:1031}:host.rpanel-resize-xs:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-xs:not(.rpanel-collapsed) .side-panel>.inner{inline-size:100%}:host.rpanel-hidden:not(.collapsible) .side-panel{display:none}:host.rpanel-collapsed{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-collapsed:not(.collapsible) .side-panel{inline-size:0;overflow:hidden}:host.rpanel-collapsed.collapsible .side-panel{inline-size:var(--rpanel-collapsed-width);overflow:hidden}.side-panel{position:fixed;z-index:1029;inset-block-start:calc(48px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px));inset-block-end:0;inset-inline-end:0;overflow-x:hidden;background:var(--element-base-1)}.side-panel>.inner{display:flex;flex-direction:column;position:absolute;inset-block:0;inset-inline-start:0}@media (max-width: 575.98px){:host.enable-mobile{padding-inline-end:0!important;--si-layout-header-first-element-offset-end: 40px}:host.enable-mobile.rpanel-collapsed .side-panel{inline-size:0!important}}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] });
385
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.6", type: SiSidePanelComponent, isStandalone: true, selector: "si-side-panel", inputs: { collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, toggleItemLabel: { classPropertyName: "toggleItemLabel", publicName: "toggleItemLabel", isSignal: true, isRequired: false, transformFunction: null }, breakpoints: { classPropertyName: "breakpoints", publicName: "breakpoints", isSignal: true, isRequired: false, transformFunction: null }, enableMobile: { classPropertyName: "enableMobile", publicName: "enableMobile", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsed: "collapsedChange", closed: "closed", contentResize: "contentResize" }, host: { properties: { "class.enable-mobile": "enableMobile()", "class.rpanel-size--regular": "this.size() === \"regular\"", "class.rpanel-size--wide": "this.size() === \"wide\"", "class.rpanel-size--extended": "this.size() === \"extended\"", "class.rpanel-mode--over": "this.mode() === \"over\"", "class.rpanel-mode--scroll": "isScrollMode()", "class.rpanel-collapsed": "isCollapsed()", "class.ready": "ready()", "class.collapsible": "collapsible() && !this.showTempContent()", "class.collapsible-temp": "collapsible() && this.showTempContent()", "class.rpanel-hidden": "isHidden()", "class.rpanel-fullscreen-overlay": "isFullscreenOverlay()", "class.rpanel-resize-xs": "isXs()", "class.rpanel-resize-sm": "isSm()", "class.rpanel-resize-md": "isMd()", "class.rpanel-resize-lg": "isLg()", "class.rpanel-resize-xl": "isXl()", "class.rpanel-resize-xxl": "isXxl()", "class.rpanel-resize-xxxl": "isXxxl()" }, classAttribute: "si-layout-inner" }, viewQueries: [{ propertyName: "panelElement", first: true, predicate: ["sidePanel"], descendants: true, isSignal: true }, { propertyName: "contentElement", first: true, predicate: ["content"], descendants: true, isSignal: true }, { propertyName: "portalOutlet", first: true, predicate: ["portalOutlet"], descendants: true, read: CdkPortalOutlet, isSignal: true }, { propertyName: "tmpPortalOutlet", first: true, predicate: ["tmpPortalOutlet"], descendants: true, read: CdkPortalOutlet, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<div #sidePanel class=\"side-panel focus-none\" tabindex=\"-1\">\n <div class=\"inner\" [class.d-none]=\"showTempContent()\">\n <ng-content select=\"si-side-panel-content, element-side-panel-content\" />\n <ng-container #portalOutlet cdkPortalOutlet />\n </div>\n <div class=\"inner\" [class.d-none]=\"!showTempContent()\">\n <ng-container #tmpPortalOutlet cdkPortalOutlet />\n </div>\n</div>\n<div #content class=\"main-content si-layout-inner\">\n <ng-content />\n</div>\n", styles: [":host{--rpanel-collapsed-padding: 0;--rpanel-size: 390px;display:block;padding-inline-end:var(--rpanel-size)}:host.ready{transition:padding-inline-end calc(.5s * var(--element-animations-enabled, 1))}:host.ready .side-panel,:host.ready .side-panel>.inner{transition:inline-size calc(.5s * var(--element-animations-enabled, 1)),box-shadow calc(.5s * var(--element-animations-enabled, 1))}:host .side-panel,:host .side-panel>.inner{inline-size:var(--rpanel-width-fullscreen, var(--rpanel-size))}:host.collapsible,:host.collapsible-temp{--rpanel-collapsed-width: 48px}:host.rpanel-size--wide{--rpanel-size: 500px}:host.rpanel-size--extended{--rpanel-size: 100%}:host.rpanel-fullscreen-overlay{--rpanel-width-fullscreen: 100vw}:host.rpanel-resize-sm.rpanel-mode--over,:host.rpanel-resize-md.rpanel-mode--over,:host.rpanel-resize-lg.rpanel-mode--over,:host.rpanel-resize-xl.rpanel-mode--over,:host.rpanel-resize-xxl.rpanel-mode--over,:host.rpanel-resize-xxxl.rpanel-mode--over{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-sm.rpanel-mode--over:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-md.rpanel-mode--over:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-lg.rpanel-mode--over:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-xl.rpanel-mode--over:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-xxl.rpanel-mode--over:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-xxxl.rpanel-mode--over:not(.rpanel-collapsed) .side-panel{box-shadow:0 0 8px var(--element-box-shadow-color-1),0 8px 8px var(--element-box-shadow-color-2)}:host.rpanel-resize-md.rpanel-mode--scroll.rpanel-size--extended{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-md.rpanel-mode--scroll.rpanel-size--extended:not(.rpanel-collapsed) .side-panel{box-shadow:0 0 8px var(--element-box-shadow-color-1),0 8px 8px var(--element-box-shadow-color-2)}:host.rpanel-resize-md.rpanel-size--extended{--rpanel-size: 480px}:host.rpanel-resize-lg.rpanel-mode--scroll.rpanel-size--wide{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-lg.rpanel-mode--scroll.rpanel-size--wide:not(.rpanel-collapsed) .side-panel{box-shadow:0 0 8px var(--element-box-shadow-color-1),0 8px 8px var(--element-box-shadow-color-2)}:host.rpanel-resize-lg.rpanel-mode--scroll.rpanel-size--extended{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-lg.rpanel-mode--scroll.rpanel-size--extended:not(.rpanel-collapsed) .side-panel{box-shadow:0 0 8px var(--element-box-shadow-color-1),0 8px 8px var(--element-box-shadow-color-2)}:host.rpanel-resize-lg.rpanel-size--extended{--rpanel-size: 480px}:host.rpanel-resize-xl.rpanel-size--extended{--rpanel-size: 640px}:host.rpanel-resize-xxl.rpanel-size--extended{--rpanel-size: 720px}:host.rpanel-resize-xxxl.rpanel-size--extended{--rpanel-size: 912px}:host.rpanel-resize-sm.rpanel-mode--scroll,:host.rpanel-resize-md.rpanel-mode--scroll{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-sm.rpanel-mode--scroll:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-md.rpanel-mode--scroll:not(.rpanel-collapsed) .side-panel{box-shadow:0 0 8px var(--element-box-shadow-color-1),0 8px 8px var(--element-box-shadow-color-2)}:host.rpanel-resize-sm.rpanel-size--extended{--fullscreen-button-display: none}:host.rpanel-resize-xs{--fullscreen-button-display: none}:host.rpanel-resize-xs.rpanel-mode--over,:host.rpanel-resize-xs.rpanel-mode--scroll{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-xs .side-panel{z-index:1031}:host.rpanel-resize-xs:not(.rpanel-collapsed) .side-panel{box-shadow:0 0 8px var(--element-box-shadow-color-1),0 8px 8px var(--element-box-shadow-color-2)}:host.rpanel-resize-xs:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-xs:not(.rpanel-collapsed) .side-panel>.inner{inline-size:100%}:host.rpanel-hidden:not(.collapsible) .side-panel{display:none}:host.rpanel-collapsed{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-collapsed:not(.collapsible) .side-panel{inline-size:0;overflow:hidden}:host.rpanel-collapsed.collapsible .side-panel{inline-size:var(--rpanel-collapsed-width);overflow:hidden}.side-panel{position:fixed;z-index:1029;inset-block-start:calc(48px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px));inset-block-end:0;inset-inline-end:0;overflow-x:hidden;background:var(--element-base-1)}.side-panel>.inner{display:flex;flex-direction:column;position:absolute;inset-block:0;inset-inline-start:0}@media (max-width: 575.98px){:host.enable-mobile{padding-inline-end:0!important;--si-layout-header-first-element-offset-end: 40px}:host.enable-mobile.rpanel-collapsed .side-panel{inline-size:0!important}}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] });
349
386
  }
350
387
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SiSidePanelComponent, decorators: [{
351
388
  type: Component,
@@ -354,6 +391,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
354
391
  '[class.enable-mobile]': 'enableMobile()',
355
392
  '[class.rpanel-size--regular]': 'this.size() === "regular"',
356
393
  '[class.rpanel-size--wide]': 'this.size() === "wide"',
394
+ '[class.rpanel-size--extended]': 'this.size() === "extended"',
357
395
  '[class.rpanel-mode--over]': 'this.mode() === "over"',
358
396
  '[class.rpanel-mode--scroll]': 'isScrollMode()',
359
397
  '[class.rpanel-collapsed]': 'isCollapsed()',
@@ -361,12 +399,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
361
399
  '[class.collapsible]': 'collapsible() && !this.showTempContent()',
362
400
  '[class.collapsible-temp]': 'collapsible() && this.showTempContent()',
363
401
  '[class.rpanel-hidden]': 'isHidden()',
402
+ '[class.rpanel-fullscreen-overlay]': 'isFullscreenOverlay()',
364
403
  '[class.rpanel-resize-xs]': 'isXs()',
365
404
  '[class.rpanel-resize-sm]': 'isSm()',
366
405
  '[class.rpanel-resize-md]': 'isMd()',
367
406
  '[class.rpanel-resize-lg]': 'isLg()',
368
- '[class.rpanel-resize-xl]': 'isXl()'
369
- }, template: "<div #sidePanel class=\"side-panel focus-none\" tabindex=\"-1\">\n <div class=\"inner\" [class.d-none]=\"showTempContent()\">\n <ng-content select=\"si-side-panel-content, element-side-panel-content\" />\n <ng-container #portalOutlet cdkPortalOutlet />\n </div>\n <div class=\"inner\" [class.d-none]=\"!showTempContent()\">\n <ng-container #tmpPortalOutlet cdkPortalOutlet />\n </div>\n</div>\n<div #content class=\"main-content si-layout-inner\">\n <ng-content />\n</div>\n", styles: [":host{--rpanel-collapsed-padding: 0;--rpanel-size: 390px;display:block;padding-inline-end:var(--rpanel-size)}:host.ready{transition:padding-inline-end calc(.5s * var(--element-animations-enabled, 1))}:host.ready .side-panel{transition:inline-size calc(.5s * var(--element-animations-enabled, 1))}:host .side-panel,:host .side-panel>.inner{inline-size:var(--rpanel-size)}:host.collapsible,:host.collapsible-temp{--rpanel-collapsed-width: 48px}:host.rpanel-size--wide{--rpanel-size: 500px}:host.rpanel-resize-sm.rpanel-mode--over,:host.rpanel-resize-md.rpanel-mode--over,:host.rpanel-resize-lg.rpanel-mode--over,:host.rpanel-resize-xl.rpanel-mode--over{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-sm.rpanel-mode--over:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-md.rpanel-mode--over:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-lg.rpanel-mode--over:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-xl.rpanel-mode--over:not(.rpanel-collapsed) .side-panel{box-shadow:0 0 8px var(--element-box-shadow-color-1),0 8px 8px var(--element-box-shadow-color-2)}:host.rpanel-resize-lg.rpanel-mode--scroll.rpanel-size--wide{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-sm.rpanel-mode--scroll,:host.rpanel-resize-md.rpanel-mode--scroll{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-sm.rpanel-mode--scroll:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-md.rpanel-mode--scroll:not(.rpanel-collapsed) .side-panel{box-shadow:0 0 8px var(--element-box-shadow-color-1),0 8px 8px var(--element-box-shadow-color-2)}:host.rpanel-resize-xs.rpanel-mode--over,:host.rpanel-resize-xs.rpanel-mode--scroll{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-xs .side-panel{z-index:1031}:host.rpanel-resize-xs:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-xs:not(.rpanel-collapsed) .side-panel>.inner{inline-size:100%}:host.rpanel-hidden:not(.collapsible) .side-panel{display:none}:host.rpanel-collapsed{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-collapsed:not(.collapsible) .side-panel{inline-size:0;overflow:hidden}:host.rpanel-collapsed.collapsible .side-panel{inline-size:var(--rpanel-collapsed-width);overflow:hidden}.side-panel{position:fixed;z-index:1029;inset-block-start:calc(48px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px));inset-block-end:0;inset-inline-end:0;overflow-x:hidden;background:var(--element-base-1)}.side-panel>.inner{display:flex;flex-direction:column;position:absolute;inset-block:0;inset-inline-start:0}@media (max-width: 575.98px){:host.enable-mobile{padding-inline-end:0!important;--si-layout-header-first-element-offset-end: 40px}:host.enable-mobile.rpanel-collapsed .side-panel{inline-size:0!important}}\n"] }]
407
+ '[class.rpanel-resize-xl]': 'isXl()',
408
+ '[class.rpanel-resize-xxl]': 'isXxl()',
409
+ '[class.rpanel-resize-xxxl]': 'isXxxl()'
410
+ }, template: "<div #sidePanel class=\"side-panel focus-none\" tabindex=\"-1\">\n <div class=\"inner\" [class.d-none]=\"showTempContent()\">\n <ng-content select=\"si-side-panel-content, element-side-panel-content\" />\n <ng-container #portalOutlet cdkPortalOutlet />\n </div>\n <div class=\"inner\" [class.d-none]=\"!showTempContent()\">\n <ng-container #tmpPortalOutlet cdkPortalOutlet />\n </div>\n</div>\n<div #content class=\"main-content si-layout-inner\">\n <ng-content />\n</div>\n", styles: [":host{--rpanel-collapsed-padding: 0;--rpanel-size: 390px;display:block;padding-inline-end:var(--rpanel-size)}:host.ready{transition:padding-inline-end calc(.5s * var(--element-animations-enabled, 1))}:host.ready .side-panel,:host.ready .side-panel>.inner{transition:inline-size calc(.5s * var(--element-animations-enabled, 1)),box-shadow calc(.5s * var(--element-animations-enabled, 1))}:host .side-panel,:host .side-panel>.inner{inline-size:var(--rpanel-width-fullscreen, var(--rpanel-size))}:host.collapsible,:host.collapsible-temp{--rpanel-collapsed-width: 48px}:host.rpanel-size--wide{--rpanel-size: 500px}:host.rpanel-size--extended{--rpanel-size: 100%}:host.rpanel-fullscreen-overlay{--rpanel-width-fullscreen: 100vw}:host.rpanel-resize-sm.rpanel-mode--over,:host.rpanel-resize-md.rpanel-mode--over,:host.rpanel-resize-lg.rpanel-mode--over,:host.rpanel-resize-xl.rpanel-mode--over,:host.rpanel-resize-xxl.rpanel-mode--over,:host.rpanel-resize-xxxl.rpanel-mode--over{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-sm.rpanel-mode--over:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-md.rpanel-mode--over:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-lg.rpanel-mode--over:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-xl.rpanel-mode--over:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-xxl.rpanel-mode--over:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-xxxl.rpanel-mode--over:not(.rpanel-collapsed) .side-panel{box-shadow:0 0 8px var(--element-box-shadow-color-1),0 8px 8px var(--element-box-shadow-color-2)}:host.rpanel-resize-md.rpanel-mode--scroll.rpanel-size--extended{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-md.rpanel-mode--scroll.rpanel-size--extended:not(.rpanel-collapsed) .side-panel{box-shadow:0 0 8px var(--element-box-shadow-color-1),0 8px 8px var(--element-box-shadow-color-2)}:host.rpanel-resize-md.rpanel-size--extended{--rpanel-size: 480px}:host.rpanel-resize-lg.rpanel-mode--scroll.rpanel-size--wide{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-lg.rpanel-mode--scroll.rpanel-size--wide:not(.rpanel-collapsed) .side-panel{box-shadow:0 0 8px var(--element-box-shadow-color-1),0 8px 8px var(--element-box-shadow-color-2)}:host.rpanel-resize-lg.rpanel-mode--scroll.rpanel-size--extended{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-lg.rpanel-mode--scroll.rpanel-size--extended:not(.rpanel-collapsed) .side-panel{box-shadow:0 0 8px var(--element-box-shadow-color-1),0 8px 8px var(--element-box-shadow-color-2)}:host.rpanel-resize-lg.rpanel-size--extended{--rpanel-size: 480px}:host.rpanel-resize-xl.rpanel-size--extended{--rpanel-size: 640px}:host.rpanel-resize-xxl.rpanel-size--extended{--rpanel-size: 720px}:host.rpanel-resize-xxxl.rpanel-size--extended{--rpanel-size: 912px}:host.rpanel-resize-sm.rpanel-mode--scroll,:host.rpanel-resize-md.rpanel-mode--scroll{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-sm.rpanel-mode--scroll:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-md.rpanel-mode--scroll:not(.rpanel-collapsed) .side-panel{box-shadow:0 0 8px var(--element-box-shadow-color-1),0 8px 8px var(--element-box-shadow-color-2)}:host.rpanel-resize-sm.rpanel-size--extended{--fullscreen-button-display: none}:host.rpanel-resize-xs{--fullscreen-button-display: none}:host.rpanel-resize-xs.rpanel-mode--over,:host.rpanel-resize-xs.rpanel-mode--scroll{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-resize-xs .side-panel{z-index:1031}:host.rpanel-resize-xs:not(.rpanel-collapsed) .side-panel{box-shadow:0 0 8px var(--element-box-shadow-color-1),0 8px 8px var(--element-box-shadow-color-2)}:host.rpanel-resize-xs:not(.rpanel-collapsed) .side-panel,:host.rpanel-resize-xs:not(.rpanel-collapsed) .side-panel>.inner{inline-size:100%}:host.rpanel-hidden:not(.collapsible) .side-panel{display:none}:host.rpanel-collapsed{padding-inline-end:var(--rpanel-collapsed-width)}:host.rpanel-collapsed:not(.collapsible) .side-panel{inline-size:0;overflow:hidden}:host.rpanel-collapsed.collapsible .side-panel{inline-size:var(--rpanel-collapsed-width);overflow:hidden}.side-panel{position:fixed;z-index:1029;inset-block-start:calc(48px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px));inset-block-end:0;inset-inline-end:0;overflow-x:hidden;background:var(--element-base-1)}.side-panel>.inner{display:flex;flex-direction:column;position:absolute;inset-block:0;inset-inline-start:0}@media (max-width: 575.98px){:host.enable-mobile{padding-inline-end:0!important;--si-layout-header-first-element-offset-end: 40px}:host.enable-mobile.rpanel-collapsed .side-panel{inline-size:0!important}}\n"] }]
370
411
  }], ctorParameters: () => [] });
371
412
 
372
413
  /**
@@ -375,9 +416,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
375
416
  */
376
417
  class SiSidePanelContentComponent {
377
418
  /**
378
- * @defaultValue false
419
+ * @deprecated This input is no longer used. The collapsible state is managed by the SiSidePanelService.
420
+ * This input will be removed in a future major version.
421
+ * @defaultValue undefined
379
422
  */
380
- collapsible = input(false, { transform: booleanAttribute });
423
+ collapsibleInput = input(undefined, {
424
+ // eslint-disable-next-line @angular-eslint/no-input-rename
425
+ alias: 'collapsible',
426
+ transform: booleanAttribute
427
+ });
381
428
  /**
382
429
  * Header of side panel
383
430
  *
@@ -435,33 +482,67 @@ class SiSidePanelContentComponent {
435
482
  * ```
436
483
  */
437
484
  toggleItemLabel = input(t(() => $localize `:@@SI_SIDE_PANEL.TOGGLE:Toggle`));
485
+ /**
486
+ * Enter fullscreen aria-label, required for a11y
487
+ *
488
+ * @defaultValue
489
+ * ```
490
+ * t(() => $localize`:@@SI_SIDE_PANEL.ENTER_FULLSCREEN:Enter fullscreen`)
491
+ * ```
492
+ */
493
+ enterFullscreenLabel = input(t(() => $localize `:@@SI_SIDE_PANEL.ENTER_FULLSCREEN:Enter fullscreen`));
494
+ /**
495
+ * Exit fullscreen aria-label, required for a11y
496
+ *
497
+ * @defaultValue
498
+ * ```
499
+ * t(() => $localize`:@@SI_SIDE_PANEL.EXIT_FULLSCREEN:Exit fullscreen`)
500
+ * ```
501
+ */
502
+ exitFullscreenLabel = input(t(() => $localize `:@@SI_SIDE_PANEL.EXIT_FULLSCREEN:Exit fullscreen`));
438
503
  /**
439
504
  * Show a badge on the mobile drawer indicating a new alert or notification
440
505
  *
441
506
  * @defaultValue false
442
507
  */
443
508
  showMobileDrawerBadge = input(false, { transform: booleanAttribute });
509
+ /**
510
+ * Display mode for side panel - enables navigate or overlay functionality
511
+ */
512
+ displayMode = input();
513
+ /**
514
+ * Configuration for navigate mode
515
+ */
516
+ navigateConfig = input();
444
517
  /**
445
518
  * Output for search bar input
446
519
  */
447
520
  searchEvent = output();
521
+ activatedRoute = inject(ActivatedRoute, { optional: true });
522
+ service = inject(SiSidePanelService);
448
523
  isCollapsed = signal(false);
449
524
  isExpanded = signal(true);
525
+ isFullscreen = signal(false);
450
526
  enableMobile = computed(() => this.service?.enableMobile() ?? false);
527
+ collapsible = computed(() => {
528
+ return this.collapsibleInput() ?? this.service?.collapsible() ?? false;
529
+ });
451
530
  mobileSize = signal(false);
452
531
  focusable = computed(() => !this.mobileSize() || !this.enableMobile() || !this.isCollapsed());
453
- icons = addIcons({ elementDoubleLeft, elementDoubleRight });
532
+ icons = addIcons({ elementCancel, elementDoubleLeft, elementDoubleRight });
454
533
  /**
455
534
  * The $rpanel-transition-duration in the style is 0.5 seconds.
456
535
  * For the animation we need to wait until the resize is done.
457
536
  */
458
537
  resizeAnimationDelay = 500;
459
538
  destroyRef = inject(DestroyRef);
460
- service = inject(SiSidePanelService);
461
539
  breakpointObserver = inject(BreakpointObserver);
462
540
  expandedTimeout;
463
541
  constructor() {
464
542
  const accordionHcollapse = inject(SiAccordionHCollapseService);
543
+ this.service.isFullscreen$.pipe(takeUntilDestroyed()).subscribe(fullscreen => {
544
+ this.isFullscreen.set(fullscreen);
545
+ });
465
546
  this.service.isOpen$.pipe(takeUntilDestroyed()).subscribe(state => {
466
547
  this.isCollapsed.set(!state);
467
548
  clearTimeout(this.expandedTimeout);
@@ -474,7 +555,20 @@ class SiSidePanelContentComponent {
474
555
  this.isExpanded.set(true);
475
556
  }, this.resizeAnimationDelay / 2);
476
557
  }
477
- accordionHcollapse.hcollapsed.set(!state);
558
+ });
559
+ effect(() => {
560
+ if (this.collapsible()) {
561
+ accordionHcollapse.hcollapsed.set(this.isCollapsed());
562
+ }
563
+ });
564
+ effect(() => {
565
+ if (this.isCollapsed() && !this.service.isTemporaryOpen() && this.isFullscreen()) {
566
+ timer(this.resizeAnimationDelay)
567
+ .pipe(takeUntilDestroyed(this.destroyRef))
568
+ .subscribe(() => {
569
+ this.service.setFullscreen(false);
570
+ });
571
+ }
478
572
  });
479
573
  accordionHcollapse.open$.pipe(takeUntilDestroyed()).subscribe(() => this.service.open());
480
574
  }
@@ -486,6 +580,15 @@ class SiSidePanelContentComponent {
486
580
  this.mobileSize.set(matches);
487
581
  });
488
582
  }
583
+ /**
584
+ * Toggle fullscreen overlay mode
585
+ */
586
+ toggleFullscreen() {
587
+ if (this.isCollapsed() && !this.service.isTemporaryOpen()) {
588
+ return;
589
+ }
590
+ this.service.toggleFullscreen();
591
+ }
489
592
  toggleSidePanel(event) {
490
593
  if (event?.detail !== 0) {
491
594
  // Blur except if triggered by keyboard
@@ -499,7 +602,7 @@ class SiSidePanelContentComponent {
499
602
  }
500
603
  }
501
604
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SiSidePanelContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
502
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: SiSidePanelContentComponent, isStandalone: true, selector: "si-side-panel-content", inputs: { collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: false, transformFunction: null }, primaryActions: { classPropertyName: "primaryActions", publicName: "primaryActions", isSignal: true, isRequired: false, transformFunction: null }, secondaryActions: { classPropertyName: "secondaryActions", publicName: "secondaryActions", isSignal: true, isRequired: false, transformFunction: null }, statusActions: { classPropertyName: "statusActions", publicName: "statusActions", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, closeButtonLabel: { classPropertyName: "closeButtonLabel", publicName: "closeButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, toggleItemLabel: { classPropertyName: "toggleItemLabel", publicName: "toggleItemLabel", isSignal: true, isRequired: false, transformFunction: null }, showMobileDrawerBadge: { classPropertyName: "showMobileDrawerBadge", publicName: "showMobileDrawerBadge", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchEvent: "searchEvent" }, host: { properties: { "class.collapsed": "isCollapsed()", "class.expanded": "isExpanded()", "class.enable-mobile": "enableMobile()" } }, providers: [SiAccordionHCollapseService], ngImport: i0, template: "<div class=\"rpanel-header pt-5\">\n <p class=\"si-h5 my-0 ms-6 auto-hide text-truncate\">{{ heading() | translate }}</p>\n @if ((primaryActions().length || secondaryActions().length) && focusable()) {\n <si-content-action-bar\n class=\"auto-hide ms-auto\"\n viewType=\"expanded\"\n [primaryActions]=\"primaryActions()\"\n [secondaryActions]=\"secondaryActions()\"\n [toggleItemLabel]=\"toggleItemLabel()\"\n />\n }\n <button\n type=\"button\"\n class=\"close-button btn btn-circle btn-sm btn-ghost element-cancel me-4\"\n [attr.aria-label]=\"closeButtonLabel() | translate\"\n [tabindex]=\"focusable() ? '0' : '-1'\"\n (click)=\"toggleSidePanel($event)\"\n ></button>\n <div class=\"collapse-toggle\">\n <button\n type=\"button\"\n class=\"side-panel-collapse-toggle btn btn-circle btn-sm btn-ghost mx-4\"\n [attr.aria-label]=\"toggleItemLabel() | translate\"\n (click)=\"toggleSidePanel($event)\"\n >\n <si-icon\n class=\"flip-rtl\"\n [class.badge-dot]=\"showMobileDrawerBadge()\"\n [icon]=\"isCollapsed() ? icons.elementDoubleLeft : icons.elementDoubleRight\"\n />\n </button>\n </div>\n</div>\n<div class=\"rpanel-wrapper d-flex flex-column\">\n @if (statusActions().length && focusable()) {\n <div class=\"rpanel-header rpanel-statusactions px-6\">\n @for (dp of statusActions(); track $index) {\n @if (!dp.disabled) {\n <a\n class=\"rpanel-statusaction position-relative focus-inside\"\n [attr.aria-label]=\"!isCollapsed ? '' : (dp.title | translate)\"\n [siLink]=\"dp\"\n >\n <si-icon class=\"icon\" [icon]=\"dp.icon!\" />\n @if (dp.overlayIcon) {\n <si-icon class=\"icon position-absolute\" [icon]=\"dp.overlayIcon\" />\n }\n <span class=\"ms-2 auto-hide\">{{ dp.title | translate }}</span>\n </a>\n } @else {\n <div class=\"rpanel-statusaction dot-outer\" aria-hidden=\"true\">\n <div class=\"dot text-muted text-center\">&bull;</div>\n </div>\n }\n }\n </div>\n }\n @if (searchable() && focusable()) {\n <div class=\"nav-search px-6 auto-hide\">\n <si-search-bar\n #searchBar\n class=\"m-0\"\n colorVariant=\"base-0\"\n prohibitedCharacters=\"*?\"\n [placeholder]=\"searchPlaceholder() | translate\"\n [debounceTime]=\"400\"\n [showIcon]=\"true\"\n (searchChange)=\"searchEvent.emit($event)\"\n />\n </div>\n }\n @if (focusable()) {\n <div class=\"rpanel-content\">\n <ng-content />\n </div>\n }\n</div>\n", styles: [":host{--si-accordion-radius: 0;display:flex;flex-direction:column;flex:1;gap:12px}:host-context(.collapsible) .close-button{display:none}:host-context(.collapsible) .collapse-toggle{display:block}:host-context(.collapsible) .rpanel-wrapper{gap:12px}:host-context(.collapsible) :host.collapsed{gap:0}:host-context(.collapsible) :host.collapsed .auto-hide{display:none}:host-context(.collapsible) :host.collapsed .rpanel-wrapper{gap:0;inline-size:var(--rpanel-collapsed-width)}:host-context(.collapsible) :host.collapsed .rpanel-content{flex:0 0 auto;margin-block-start:8px}:host-context(.collapsible) :host.collapsed .rpanel-statusactions{order:3;flex-direction:column;align-items:flex-start;padding:0!important}:host-context(.collapsible) :host.collapsed .rpanel-statusaction{padding-block:8px;padding-inline:12px}:host-context(.collapsible) :host.collapsed .rpanel-statusaction:not(.dot-outer):hover{background:var(--element-base-1-hover)}.collapse-toggle{display:none}.collapse-toggle i{vertical-align:bottom}.rpanel-header,.rpanel-statusaction{display:flex;align-items:center}.rpanel-header{justify-content:space-between}.rpanel-wrapper,.rpanel-content{min-block-size:0;flex:1 0 0;overflow-x:hidden;overflow-y:auto}.rpanel-statusaction{text-decoration:none}.rpanel-statusaction .dot{inline-size:24px;line-height:24px}.rpanel-statusaction span{font-size:12px;white-space:pre-wrap;color:var(--element-text-primary)}.rpanel-statusaction:hover span{color:var(--element-text-active)}@media (max-width: 575.98px){:host.enable-mobile:not(.collapsed):not(.expanded) si-content-action-bar{margin-inline-end:48px}:host.enable-mobile:not(.expanded) .collapse-toggle{position:fixed;border:0;text-align:end;padding-block:4px!important;margin-block-start:8px!important;inset-inline-end:0;inset-block-start:calc(48px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px));border-start-start-radius:var(--element-radius-2);border-end-start-radius:var(--element-radius-2);border-start-end-radius:0!important;border-end-end-radius:0!important;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);z-index:2}}\n"], dependencies: [{ kind: "component", type: SiContentActionBarComponent, selector: "si-content-action-bar", inputs: ["primaryActions", "secondaryActions", "actionParam", "viewType", "toggleItemLabel", "preventIconsInDropdownMenus", "disabled"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "directive", type: SiLinkDirective, selector: "[siLink]", inputs: ["siLink", "siLinkDefaultTarget", "actionParam", "activeClass", "exactMatch", "ariaCurrent"], outputs: ["activeChange"], exportAs: ["siLink"] }, { kind: "component", type: SiSearchBarComponent, selector: "si-search-bar", inputs: ["debounceTime", "prohibitedCharacters", "placeholder", "showIcon", "tabbable", "value", "readonly", "colorVariant", "disabled", "clearButtonAriaLabel"], outputs: ["searchChange"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
605
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: SiSidePanelContentComponent, isStandalone: true, selector: "si-side-panel-content", inputs: { collapsibleInput: { classPropertyName: "collapsibleInput", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: false, transformFunction: null }, primaryActions: { classPropertyName: "primaryActions", publicName: "primaryActions", isSignal: true, isRequired: false, transformFunction: null }, secondaryActions: { classPropertyName: "secondaryActions", publicName: "secondaryActions", isSignal: true, isRequired: false, transformFunction: null }, statusActions: { classPropertyName: "statusActions", publicName: "statusActions", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, closeButtonLabel: { classPropertyName: "closeButtonLabel", publicName: "closeButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, toggleItemLabel: { classPropertyName: "toggleItemLabel", publicName: "toggleItemLabel", isSignal: true, isRequired: false, transformFunction: null }, enterFullscreenLabel: { classPropertyName: "enterFullscreenLabel", publicName: "enterFullscreenLabel", isSignal: true, isRequired: false, transformFunction: null }, exitFullscreenLabel: { classPropertyName: "exitFullscreenLabel", publicName: "exitFullscreenLabel", isSignal: true, isRequired: false, transformFunction: null }, showMobileDrawerBadge: { classPropertyName: "showMobileDrawerBadge", publicName: "showMobileDrawerBadge", isSignal: true, isRequired: false, transformFunction: null }, displayMode: { classPropertyName: "displayMode", publicName: "displayMode", isSignal: true, isRequired: false, transformFunction: null }, navigateConfig: { classPropertyName: "navigateConfig", publicName: "navigateConfig", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchEvent: "searchEvent" }, host: { properties: { "class.collapsed": "isCollapsed()", "class.expanded": "isExpanded()", "class.enable-mobile": "enableMobile()", "class.rpanel-fullscreen-overlay": "isFullscreen()" } }, providers: [SiAccordionHCollapseService], ngImport: i0, template: "<div class=\"rpanel-header pt-5\">\n <p class=\"si-h5 my-0 ms-6 auto-hide text-truncate\">{{ heading() | translate }}</p>\n @if ((primaryActions().length || secondaryActions().length) && focusable()) {\n <si-content-action-bar\n class=\"auto-hide ms-auto\"\n viewType=\"expanded\"\n [primaryActions]=\"primaryActions()\"\n [secondaryActions]=\"secondaryActions()\"\n [toggleItemLabel]=\"toggleItemLabel()\"\n />\n }\n <div class=\"d-flex\">\n @let navigateConfig = this.navigateConfig();\n @if (displayMode() === 'navigate' && navigateConfig) {\n @if (navigateConfig.type === 'router-link') {\n <a\n class=\"btn btn-circle btn-sm btn-ghost auto-hide\"\n [class.ms-4]=\"collapsible()\"\n [class.mx-4]=\"!collapsible() || service.isTemporaryOpen()\"\n [routerLink]=\"navigateConfig.routerLink\"\n [queryParams]=\"navigateConfig.extras?.queryParams\"\n [queryParamsHandling]=\"navigateConfig.extras?.queryParamsHandling\"\n [fragment]=\"navigateConfig.extras?.fragment\"\n [state]=\"navigateConfig.extras?.state\"\n [relativeTo]=\"navigateConfig.extras?.relativeTo ?? activatedRoute\"\n [preserveFragment]=\"navigateConfig.extras?.preserveFragment\"\n [skipLocationChange]=\"navigateConfig.extras?.skipLocationChange\"\n [replaceUrl]=\"navigateConfig.extras?.replaceUrl\"\n [attr.aria-label]=\"navigateConfig.label | translate\"\n >\n <si-icon class=\"icon\" icon=\"element-export\" />\n <span class=\"visually-hidden\">\n {{ navigateConfig.label | translate }}\n </span></a\n >\n } @else if (navigateConfig.type === 'link') {\n <a\n class=\"btn btn-circle btn-sm btn-ghost auto-hide\"\n [class.ms-4]=\"collapsible()\"\n [class.mx-4]=\"!collapsible()\"\n [href]=\"navigateConfig.href\"\n [target]=\"navigateConfig.target\"\n [attr.rel]=\"navigateConfig.target === '_blank' ? 'noopener noreferrer' : null\"\n [attr.aria-label]=\"navigateConfig.label | translate\"\n >\n <si-icon class=\"icon\" icon=\"element-export\" />\n <span class=\"visually-hidden\">\n {{ navigateConfig.label | translate }}\n </span></a\n >\n }\n }\n @if (displayMode() === 'overlay') {\n <button\n type=\"button\"\n class=\"fullscreen-button btn btn-circle btn-sm btn-ghost auto-hide\"\n [class.ms-4]=\"collapsible()\"\n [class.mx-4]=\"!collapsible() || service.isTemporaryOpen()\"\n [attr.aria-label]=\"\n (isFullscreen() ? exitFullscreenLabel() : enterFullscreenLabel()) | translate\n \"\n [tabindex]=\"focusable() ? '0' : '-1'\"\n (click)=\"toggleFullscreen()\"\n >\n <si-icon [icon]=\"isFullscreen() ? 'element-pinch' : 'element-zoom'\" />\n </button>\n }\n <button\n type=\"button\"\n class=\"close-button btn btn-circle btn-sm btn-ghost me-4\"\n [attr.aria-label]=\"closeButtonLabel() | translate\"\n [tabindex]=\"focusable() ? '0' : '-1'\"\n (click)=\"toggleSidePanel($event)\"\n >\n <si-icon [icon]=\"icons.elementCancel\" />\n </button>\n <div class=\"collapse-toggle\">\n <button\n type=\"button\"\n class=\"side-panel-collapse-toggle btn btn-circle btn-sm btn-ghost mx-4\"\n [attr.aria-label]=\"toggleItemLabel() | translate\"\n (click)=\"toggleSidePanel($event)\"\n >\n <si-icon\n class=\"flip-rtl\"\n [class.badge-dot]=\"showMobileDrawerBadge()\"\n [icon]=\"isCollapsed() ? icons.elementDoubleLeft : icons.elementDoubleRight\"\n />\n </button>\n </div>\n </div>\n</div>\n<div class=\"rpanel-wrapper d-flex flex-column\">\n @if (statusActions().length && focusable()) {\n <div class=\"rpanel-header rpanel-statusactions px-6\">\n @for (dp of statusActions(); track $index) {\n @if (!dp.disabled) {\n <a\n class=\"rpanel-statusaction position-relative focus-inside\"\n [attr.aria-label]=\"!isCollapsed ? '' : (dp.title | translate)\"\n [siLink]=\"dp\"\n >\n <si-icon class=\"icon\" [icon]=\"dp.icon!\" />\n @if (dp.overlayIcon) {\n <si-icon class=\"icon position-absolute\" [icon]=\"dp.overlayIcon\" />\n }\n <span class=\"ms-2 auto-hide\">{{ dp.title | translate }}</span>\n </a>\n } @else {\n <div class=\"rpanel-statusaction dot-outer\" aria-hidden=\"true\">\n <div class=\"dot text-muted text-center\">&bull;</div>\n </div>\n }\n }\n </div>\n }\n @if (searchable() && focusable()) {\n <div class=\"nav-search px-6 auto-hide\">\n <si-search-bar\n #searchBar\n class=\"m-0\"\n colorVariant=\"base-0\"\n prohibitedCharacters=\"*?\"\n [placeholder]=\"searchPlaceholder() | translate\"\n [debounceTime]=\"400\"\n [showIcon]=\"true\"\n (searchChange)=\"searchEvent.emit($event)\"\n />\n </div>\n }\n @if (focusable()) {\n <div class=\"rpanel-content\">\n <ng-content />\n </div>\n }\n</div>\n", styles: [":host{--si-accordion-radius: 0;display:flex;flex-direction:column;flex:1;gap:12px}:host-context(.collapsible) .close-button{display:none}:host-context(.collapsible) .collapse-toggle{display:block}:host-context(.collapsible) .rpanel-wrapper{gap:12px}:host-context(.collapsible) :host.collapsed{gap:0}:host-context(.collapsible) :host.collapsed .auto-hide{display:none}:host-context(.collapsible) :host.collapsed .rpanel-wrapper{gap:0;inline-size:var(--rpanel-collapsed-width)}:host-context(.collapsible) :host.collapsed .rpanel-content{flex:0 0 auto;margin-block-start:8px}:host-context(.collapsible) :host.collapsed .rpanel-statusactions{order:3;flex-direction:column;align-items:flex-start;padding:0!important}:host-context(.collapsible) :host.collapsed .rpanel-statusaction{padding-block:8px;padding-inline:12px}:host-context(.collapsible) :host.collapsed .rpanel-statusaction:not(.dot-outer):hover{background:var(--element-base-1-hover)}.fullscreen-button{display:var(--fullscreen-button-display)}.collapse-toggle{display:none}.collapse-toggle i{vertical-align:bottom}.rpanel-header,.rpanel-statusaction{display:flex;align-items:center}.rpanel-header{justify-content:space-between}.rpanel-wrapper,.rpanel-content{min-block-size:0;flex:1 0 0;overflow-x:hidden;overflow-y:auto}.rpanel-statusaction{text-decoration:none}.rpanel-statusaction .dot{inline-size:24px;line-height:24px}.rpanel-statusaction span{font-size:12px;white-space:pre-wrap;color:var(--element-text-primary)}.rpanel-statusaction:hover span{color:var(--element-text-active)}@media (max-width: 575.98px){:host.enable-mobile:not(.collapsed):not(.expanded) si-content-action-bar{margin-inline-end:48px}:host.enable-mobile:not(.expanded) .collapse-toggle{position:fixed;border:0;text-align:end;padding-block:4px!important;margin-block-start:8px!important;inset-inline-end:0;inset-block-start:calc(48px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px));border-start-start-radius:var(--element-radius-2);border-end-start-radius:var(--element-radius-2);border-start-end-radius:0!important;border-end-end-radius:0!important;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);z-index:2}}\n"], dependencies: [{ kind: "component", type: SiContentActionBarComponent, selector: "si-content-action-bar", inputs: ["primaryActions", "secondaryActions", "actionParam", "viewType", "toggleItemLabel", "preventIconsInDropdownMenus", "disabled"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "directive", type: SiLinkDirective, selector: "[siLink]", inputs: ["siLink", "siLinkDefaultTarget", "actionParam", "activeClass", "exactMatch", "ariaCurrent"], outputs: ["activeChange"], exportAs: ["siLink"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: SiSearchBarComponent, selector: "si-search-bar", inputs: ["debounceTime", "prohibitedCharacters", "placeholder", "showIcon", "tabbable", "value", "readonly", "colorVariant", "disabled", "clearButtonAriaLabel"], outputs: ["searchChange"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
503
606
  }
504
607
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SiSidePanelContentComponent, decorators: [{
505
608
  type: Component,
@@ -507,13 +610,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
507
610
  SiContentActionBarComponent,
508
611
  SiIconComponent,
509
612
  SiLinkDirective,
613
+ RouterLink,
510
614
  SiSearchBarComponent,
511
615
  SiTranslatePipe
512
616
  ], providers: [SiAccordionHCollapseService], host: {
513
617
  '[class.collapsed]': 'isCollapsed()',
514
618
  '[class.expanded]': 'isExpanded()',
515
- '[class.enable-mobile]': 'enableMobile()'
516
- }, template: "<div class=\"rpanel-header pt-5\">\n <p class=\"si-h5 my-0 ms-6 auto-hide text-truncate\">{{ heading() | translate }}</p>\n @if ((primaryActions().length || secondaryActions().length) && focusable()) {\n <si-content-action-bar\n class=\"auto-hide ms-auto\"\n viewType=\"expanded\"\n [primaryActions]=\"primaryActions()\"\n [secondaryActions]=\"secondaryActions()\"\n [toggleItemLabel]=\"toggleItemLabel()\"\n />\n }\n <button\n type=\"button\"\n class=\"close-button btn btn-circle btn-sm btn-ghost element-cancel me-4\"\n [attr.aria-label]=\"closeButtonLabel() | translate\"\n [tabindex]=\"focusable() ? '0' : '-1'\"\n (click)=\"toggleSidePanel($event)\"\n ></button>\n <div class=\"collapse-toggle\">\n <button\n type=\"button\"\n class=\"side-panel-collapse-toggle btn btn-circle btn-sm btn-ghost mx-4\"\n [attr.aria-label]=\"toggleItemLabel() | translate\"\n (click)=\"toggleSidePanel($event)\"\n >\n <si-icon\n class=\"flip-rtl\"\n [class.badge-dot]=\"showMobileDrawerBadge()\"\n [icon]=\"isCollapsed() ? icons.elementDoubleLeft : icons.elementDoubleRight\"\n />\n </button>\n </div>\n</div>\n<div class=\"rpanel-wrapper d-flex flex-column\">\n @if (statusActions().length && focusable()) {\n <div class=\"rpanel-header rpanel-statusactions px-6\">\n @for (dp of statusActions(); track $index) {\n @if (!dp.disabled) {\n <a\n class=\"rpanel-statusaction position-relative focus-inside\"\n [attr.aria-label]=\"!isCollapsed ? '' : (dp.title | translate)\"\n [siLink]=\"dp\"\n >\n <si-icon class=\"icon\" [icon]=\"dp.icon!\" />\n @if (dp.overlayIcon) {\n <si-icon class=\"icon position-absolute\" [icon]=\"dp.overlayIcon\" />\n }\n <span class=\"ms-2 auto-hide\">{{ dp.title | translate }}</span>\n </a>\n } @else {\n <div class=\"rpanel-statusaction dot-outer\" aria-hidden=\"true\">\n <div class=\"dot text-muted text-center\">&bull;</div>\n </div>\n }\n }\n </div>\n }\n @if (searchable() && focusable()) {\n <div class=\"nav-search px-6 auto-hide\">\n <si-search-bar\n #searchBar\n class=\"m-0\"\n colorVariant=\"base-0\"\n prohibitedCharacters=\"*?\"\n [placeholder]=\"searchPlaceholder() | translate\"\n [debounceTime]=\"400\"\n [showIcon]=\"true\"\n (searchChange)=\"searchEvent.emit($event)\"\n />\n </div>\n }\n @if (focusable()) {\n <div class=\"rpanel-content\">\n <ng-content />\n </div>\n }\n</div>\n", styles: [":host{--si-accordion-radius: 0;display:flex;flex-direction:column;flex:1;gap:12px}:host-context(.collapsible) .close-button{display:none}:host-context(.collapsible) .collapse-toggle{display:block}:host-context(.collapsible) .rpanel-wrapper{gap:12px}:host-context(.collapsible) :host.collapsed{gap:0}:host-context(.collapsible) :host.collapsed .auto-hide{display:none}:host-context(.collapsible) :host.collapsed .rpanel-wrapper{gap:0;inline-size:var(--rpanel-collapsed-width)}:host-context(.collapsible) :host.collapsed .rpanel-content{flex:0 0 auto;margin-block-start:8px}:host-context(.collapsible) :host.collapsed .rpanel-statusactions{order:3;flex-direction:column;align-items:flex-start;padding:0!important}:host-context(.collapsible) :host.collapsed .rpanel-statusaction{padding-block:8px;padding-inline:12px}:host-context(.collapsible) :host.collapsed .rpanel-statusaction:not(.dot-outer):hover{background:var(--element-base-1-hover)}.collapse-toggle{display:none}.collapse-toggle i{vertical-align:bottom}.rpanel-header,.rpanel-statusaction{display:flex;align-items:center}.rpanel-header{justify-content:space-between}.rpanel-wrapper,.rpanel-content{min-block-size:0;flex:1 0 0;overflow-x:hidden;overflow-y:auto}.rpanel-statusaction{text-decoration:none}.rpanel-statusaction .dot{inline-size:24px;line-height:24px}.rpanel-statusaction span{font-size:12px;white-space:pre-wrap;color:var(--element-text-primary)}.rpanel-statusaction:hover span{color:var(--element-text-active)}@media (max-width: 575.98px){:host.enable-mobile:not(.collapsed):not(.expanded) si-content-action-bar{margin-inline-end:48px}:host.enable-mobile:not(.expanded) .collapse-toggle{position:fixed;border:0;text-align:end;padding-block:4px!important;margin-block-start:8px!important;inset-inline-end:0;inset-block-start:calc(48px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px));border-start-start-radius:var(--element-radius-2);border-end-start-radius:var(--element-radius-2);border-start-end-radius:0!important;border-end-end-radius:0!important;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);z-index:2}}\n"] }]
619
+ '[class.enable-mobile]': 'enableMobile()',
620
+ '[class.rpanel-fullscreen-overlay]': 'isFullscreen()'
621
+ }, template: "<div class=\"rpanel-header pt-5\">\n <p class=\"si-h5 my-0 ms-6 auto-hide text-truncate\">{{ heading() | translate }}</p>\n @if ((primaryActions().length || secondaryActions().length) && focusable()) {\n <si-content-action-bar\n class=\"auto-hide ms-auto\"\n viewType=\"expanded\"\n [primaryActions]=\"primaryActions()\"\n [secondaryActions]=\"secondaryActions()\"\n [toggleItemLabel]=\"toggleItemLabel()\"\n />\n }\n <div class=\"d-flex\">\n @let navigateConfig = this.navigateConfig();\n @if (displayMode() === 'navigate' && navigateConfig) {\n @if (navigateConfig.type === 'router-link') {\n <a\n class=\"btn btn-circle btn-sm btn-ghost auto-hide\"\n [class.ms-4]=\"collapsible()\"\n [class.mx-4]=\"!collapsible() || service.isTemporaryOpen()\"\n [routerLink]=\"navigateConfig.routerLink\"\n [queryParams]=\"navigateConfig.extras?.queryParams\"\n [queryParamsHandling]=\"navigateConfig.extras?.queryParamsHandling\"\n [fragment]=\"navigateConfig.extras?.fragment\"\n [state]=\"navigateConfig.extras?.state\"\n [relativeTo]=\"navigateConfig.extras?.relativeTo ?? activatedRoute\"\n [preserveFragment]=\"navigateConfig.extras?.preserveFragment\"\n [skipLocationChange]=\"navigateConfig.extras?.skipLocationChange\"\n [replaceUrl]=\"navigateConfig.extras?.replaceUrl\"\n [attr.aria-label]=\"navigateConfig.label | translate\"\n >\n <si-icon class=\"icon\" icon=\"element-export\" />\n <span class=\"visually-hidden\">\n {{ navigateConfig.label | translate }}\n </span></a\n >\n } @else if (navigateConfig.type === 'link') {\n <a\n class=\"btn btn-circle btn-sm btn-ghost auto-hide\"\n [class.ms-4]=\"collapsible()\"\n [class.mx-4]=\"!collapsible()\"\n [href]=\"navigateConfig.href\"\n [target]=\"navigateConfig.target\"\n [attr.rel]=\"navigateConfig.target === '_blank' ? 'noopener noreferrer' : null\"\n [attr.aria-label]=\"navigateConfig.label | translate\"\n >\n <si-icon class=\"icon\" icon=\"element-export\" />\n <span class=\"visually-hidden\">\n {{ navigateConfig.label | translate }}\n </span></a\n >\n }\n }\n @if (displayMode() === 'overlay') {\n <button\n type=\"button\"\n class=\"fullscreen-button btn btn-circle btn-sm btn-ghost auto-hide\"\n [class.ms-4]=\"collapsible()\"\n [class.mx-4]=\"!collapsible() || service.isTemporaryOpen()\"\n [attr.aria-label]=\"\n (isFullscreen() ? exitFullscreenLabel() : enterFullscreenLabel()) | translate\n \"\n [tabindex]=\"focusable() ? '0' : '-1'\"\n (click)=\"toggleFullscreen()\"\n >\n <si-icon [icon]=\"isFullscreen() ? 'element-pinch' : 'element-zoom'\" />\n </button>\n }\n <button\n type=\"button\"\n class=\"close-button btn btn-circle btn-sm btn-ghost me-4\"\n [attr.aria-label]=\"closeButtonLabel() | translate\"\n [tabindex]=\"focusable() ? '0' : '-1'\"\n (click)=\"toggleSidePanel($event)\"\n >\n <si-icon [icon]=\"icons.elementCancel\" />\n </button>\n <div class=\"collapse-toggle\">\n <button\n type=\"button\"\n class=\"side-panel-collapse-toggle btn btn-circle btn-sm btn-ghost mx-4\"\n [attr.aria-label]=\"toggleItemLabel() | translate\"\n (click)=\"toggleSidePanel($event)\"\n >\n <si-icon\n class=\"flip-rtl\"\n [class.badge-dot]=\"showMobileDrawerBadge()\"\n [icon]=\"isCollapsed() ? icons.elementDoubleLeft : icons.elementDoubleRight\"\n />\n </button>\n </div>\n </div>\n</div>\n<div class=\"rpanel-wrapper d-flex flex-column\">\n @if (statusActions().length && focusable()) {\n <div class=\"rpanel-header rpanel-statusactions px-6\">\n @for (dp of statusActions(); track $index) {\n @if (!dp.disabled) {\n <a\n class=\"rpanel-statusaction position-relative focus-inside\"\n [attr.aria-label]=\"!isCollapsed ? '' : (dp.title | translate)\"\n [siLink]=\"dp\"\n >\n <si-icon class=\"icon\" [icon]=\"dp.icon!\" />\n @if (dp.overlayIcon) {\n <si-icon class=\"icon position-absolute\" [icon]=\"dp.overlayIcon\" />\n }\n <span class=\"ms-2 auto-hide\">{{ dp.title | translate }}</span>\n </a>\n } @else {\n <div class=\"rpanel-statusaction dot-outer\" aria-hidden=\"true\">\n <div class=\"dot text-muted text-center\">&bull;</div>\n </div>\n }\n }\n </div>\n }\n @if (searchable() && focusable()) {\n <div class=\"nav-search px-6 auto-hide\">\n <si-search-bar\n #searchBar\n class=\"m-0\"\n colorVariant=\"base-0\"\n prohibitedCharacters=\"*?\"\n [placeholder]=\"searchPlaceholder() | translate\"\n [debounceTime]=\"400\"\n [showIcon]=\"true\"\n (searchChange)=\"searchEvent.emit($event)\"\n />\n </div>\n }\n @if (focusable()) {\n <div class=\"rpanel-content\">\n <ng-content />\n </div>\n }\n</div>\n", styles: [":host{--si-accordion-radius: 0;display:flex;flex-direction:column;flex:1;gap:12px}:host-context(.collapsible) .close-button{display:none}:host-context(.collapsible) .collapse-toggle{display:block}:host-context(.collapsible) .rpanel-wrapper{gap:12px}:host-context(.collapsible) :host.collapsed{gap:0}:host-context(.collapsible) :host.collapsed .auto-hide{display:none}:host-context(.collapsible) :host.collapsed .rpanel-wrapper{gap:0;inline-size:var(--rpanel-collapsed-width)}:host-context(.collapsible) :host.collapsed .rpanel-content{flex:0 0 auto;margin-block-start:8px}:host-context(.collapsible) :host.collapsed .rpanel-statusactions{order:3;flex-direction:column;align-items:flex-start;padding:0!important}:host-context(.collapsible) :host.collapsed .rpanel-statusaction{padding-block:8px;padding-inline:12px}:host-context(.collapsible) :host.collapsed .rpanel-statusaction:not(.dot-outer):hover{background:var(--element-base-1-hover)}.fullscreen-button{display:var(--fullscreen-button-display)}.collapse-toggle{display:none}.collapse-toggle i{vertical-align:bottom}.rpanel-header,.rpanel-statusaction{display:flex;align-items:center}.rpanel-header{justify-content:space-between}.rpanel-wrapper,.rpanel-content{min-block-size:0;flex:1 0 0;overflow-x:hidden;overflow-y:auto}.rpanel-statusaction{text-decoration:none}.rpanel-statusaction .dot{inline-size:24px;line-height:24px}.rpanel-statusaction span{font-size:12px;white-space:pre-wrap;color:var(--element-text-primary)}.rpanel-statusaction:hover span{color:var(--element-text-active)}@media (max-width: 575.98px){:host.enable-mobile:not(.collapsed):not(.expanded) si-content-action-bar{margin-inline-end:48px}:host.enable-mobile:not(.expanded) .collapse-toggle{position:fixed;border:0;text-align:end;padding-block:4px!important;margin-block-start:8px!important;inset-inline-end:0;inset-block-start:calc(48px + var(--element-titlebar-spacing, 0px) + var(--element-system-banner-spacing, 0px));border-start-start-radius:var(--element-radius-2);border-end-start-radius:var(--element-radius-2);border-start-end-radius:0!important;border-end-end-radius:0!important;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);z-index:2}}\n"] }]
517
622
  }], ctorParameters: () => [] });
518
623
 
519
624
  /**