@siemens/element-ng 49.7.0 → 49.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 (96) hide show
  1. package/fesm2022/siemens-element-ng-accordion.mjs +1 -1
  2. package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -1
  3. package/fesm2022/siemens-element-ng-action-modal.mjs +8 -8
  4. package/fesm2022/siemens-element-ng-action-modal.mjs.map +1 -1
  5. package/fesm2022/siemens-element-ng-ag-grid.mjs +3 -3
  6. package/fesm2022/siemens-element-ng-ag-grid.mjs.map +1 -1
  7. package/fesm2022/siemens-element-ng-application-header.mjs +2 -2
  8. package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
  9. package/fesm2022/siemens-element-ng-card.mjs +43 -8
  10. package/fesm2022/siemens-element-ng-card.mjs.map +1 -1
  11. package/fesm2022/siemens-element-ng-chat-messages.mjs +8 -8
  12. package/fesm2022/siemens-element-ng-chat-messages.mjs.map +1 -1
  13. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs +2 -2
  14. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs.map +1 -1
  15. package/fesm2022/siemens-element-ng-common.mjs +4 -4
  16. package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
  17. package/fesm2022/siemens-element-ng-content-action-bar.mjs +2 -2
  18. package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -1
  19. package/fesm2022/siemens-element-ng-dashboard.mjs +7 -8
  20. package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
  21. package/fesm2022/siemens-element-ng-date-range-filter.mjs +1 -1
  22. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
  23. package/fesm2022/siemens-element-ng-datepicker.mjs +49 -39
  24. package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
  25. package/fesm2022/siemens-element-ng-file-uploader.mjs +9 -8
  26. package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
  27. package/fesm2022/siemens-element-ng-filter-bar.mjs +4 -4
  28. package/fesm2022/siemens-element-ng-filter-bar.mjs.map +1 -1
  29. package/fesm2022/siemens-element-ng-filtered-search.mjs +12 -12
  30. package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
  31. package/fesm2022/siemens-element-ng-formly.mjs +1 -1
  32. package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
  33. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +8 -16
  34. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -1
  35. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +2 -2
  36. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
  37. package/fesm2022/siemens-element-ng-navbar.mjs +4 -4
  38. package/fesm2022/siemens-element-ng-navbar.mjs.map +1 -1
  39. package/fesm2022/siemens-element-ng-notification-item.mjs +2 -2
  40. package/fesm2022/siemens-element-ng-notification-item.mjs.map +1 -1
  41. package/fesm2022/siemens-element-ng-number-input.mjs +2 -2
  42. package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -1
  43. package/fesm2022/siemens-element-ng-password-toggle.mjs +2 -2
  44. package/fesm2022/siemens-element-ng-password-toggle.mjs.map +1 -1
  45. package/fesm2022/siemens-element-ng-photo-upload.mjs +2 -2
  46. package/fesm2022/siemens-element-ng-photo-upload.mjs.map +1 -1
  47. package/fesm2022/siemens-element-ng-pills-input.mjs +4 -4
  48. package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -1
  49. package/fesm2022/siemens-element-ng-popover.mjs +10 -3
  50. package/fesm2022/siemens-element-ng-popover.mjs.map +1 -1
  51. package/fesm2022/siemens-element-ng-search-bar.mjs +10 -4
  52. package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -1
  53. package/fesm2022/siemens-element-ng-select.mjs +4 -4
  54. package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
  55. package/fesm2022/siemens-element-ng-side-panel.mjs +2 -2
  56. package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
  57. package/fesm2022/siemens-element-ng-status-bar.mjs +47 -22
  58. package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
  59. package/fesm2022/siemens-element-ng-summary-chip.mjs +2 -2
  60. package/fesm2022/siemens-element-ng-summary-chip.mjs.map +1 -1
  61. package/fesm2022/siemens-element-ng-summary-widget.mjs +2 -2
  62. package/fesm2022/siemens-element-ng-summary-widget.mjs.map +1 -1
  63. package/fesm2022/siemens-element-ng-tabs-legacy.mjs +2 -2
  64. package/fesm2022/siemens-element-ng-tabs-legacy.mjs.map +1 -1
  65. package/fesm2022/siemens-element-ng-tabs.mjs +4 -4
  66. package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
  67. package/fesm2022/siemens-element-ng-threshold.mjs +2 -2
  68. package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -1
  69. package/fesm2022/siemens-element-ng-toast-notification.mjs +2 -2
  70. package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -1
  71. package/fesm2022/siemens-element-ng-tooltip.mjs +10 -8
  72. package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
  73. package/fesm2022/siemens-element-ng-tour.mjs +2 -2
  74. package/fesm2022/siemens-element-ng-tour.mjs.map +1 -1
  75. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  76. package/package.json +3 -3
  77. package/schematics/migrations/data/element-migration-data.js +20 -0
  78. package/schematics/migrations/data/index.js +1 -16
  79. package/schematics/migrations/ngx-translate/index.js +1 -137
  80. package/schematics/migrations/ngx-translate/missing-translate-migration.js +141 -0
  81. package/schematics/ng-add/index.js +1 -12
  82. package/schematics/ng-add/ng-add-rule.js +16 -0
  83. package/schematics/ng-update/index.js +1 -17
  84. package/schematics/ng-update/migrate-to-v49.js +21 -0
  85. package/template-i18n.json +2 -1
  86. package/types/siemens-element-ng-card.d.ts +26 -1
  87. package/types/siemens-element-ng-common.d.ts +3 -3
  88. package/types/siemens-element-ng-file-uploader.d.ts +4 -3
  89. package/types/siemens-element-ng-filtered-search.d.ts +1 -1
  90. package/types/siemens-element-ng-navbar-vertical-next.d.ts +5 -13
  91. package/types/siemens-element-ng-navbar.d.ts +2 -2
  92. package/types/siemens-element-ng-popover.d.ts +9 -2
  93. package/types/siemens-element-ng-search-bar.d.ts +7 -1
  94. package/types/siemens-element-ng-status-bar.d.ts +11 -5
  95. package/types/siemens-element-ng-tooltip.d.ts +9 -3
  96. package/types/siemens-element-ng-translate.d.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"siemens-element-ng-side-panel.mjs","sources":["../../../../projects/element-ng/side-panel/si-side-panel.service.ts","../../../../projects/element-ng/side-panel/si-side-panel.component.ts","../../../../projects/element-ng/side-panel/si-side-panel.component.html","../../../../projects/element-ng/side-panel/si-side-panel-content.component.ts","../../../../projects/element-ng/side-panel/si-side-panel-content.component.html","../../../../projects/element-ng/side-panel/si-side-panel-action.component.ts","../../../../projects/element-ng/side-panel/si-side-panel-actions.component.ts","../../../../projects/element-ng/side-panel/si-side-panel.module.ts","../../../../projects/element-ng/side-panel/side-panel.model.ts","../../../../projects/element-ng/side-panel/index.ts","../../../../projects/element-ng/side-panel/siemens-element-ng-side-panel.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Portal } from '@angular/cdk/portal';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\nimport { BehaviorSubject, EMPTY, Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiSidePanelService {\n private contentSubject = new BehaviorSubject<Portal<any> | undefined>(undefined);\n /** @internal */\n readonly content$ = this.contentSubject.asObservable();\n\n private openSubject = new BehaviorSubject<boolean>(false);\n /**\n * Emits on side panel is open or close.\n *\n * @defaultValue this.openSubject.asObservable()\n */\n readonly isOpen$ = this.openSubject.asObservable();\n\n private tempContentSubject = new BehaviorSubject<Portal<any> | undefined>(undefined);\n /** @internal */\n readonly tempContent$ = this.tempContentSubject.asObservable();\n\n private tempContentClosed?: Subject<void>;\n /** @internal */\n readonly enableMobile = signal(false);\n\n /** @internal */\n readonly collapsible = signal(false);\n\n private fullscreenSubject = new BehaviorSubject<boolean>(false);\n /**\n * Emits when fullscreen overlay mode is toggled.\n */\n readonly isFullscreen$ = this.fullscreenSubject.asObservable();\n\n // Body scroll management\n private bodyScrollLocks = 0;\n private originalBodyOverflow?: string;\n private readonly document = inject(DOCUMENT);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n /** Set or update displayed content. */\n setSidePanelContent(portal: Portal<any> | undefined): void {\n this.contentSubject.next(portal);\n }\n\n /** Open side panel. */\n open(): void {\n this.hideTemporaryContent();\n this.openSubject.next(true);\n }\n\n /** Close side panel. */\n close(): void {\n if (this.hideTemporaryContent()) {\n return;\n }\n this.openSubject.next(false);\n }\n\n /** Toggle side panel open/close. */\n toggle(): void {\n this.hideTemporaryContent();\n this.openSubject.next(!this.openSubject.value);\n }\n\n /** Indicate is side panel open. */\n isOpen(): boolean {\n return this.openSubject.value;\n }\n\n /** Toggle fullscreen overlay mode. */\n toggleFullscreen(): void {\n this.fullscreenSubject.next(!this.fullscreenSubject.value);\n }\n\n /** Set fullscreen overlay mode. */\n setFullscreen(fullscreen: boolean): void {\n this.fullscreenSubject.next(fullscreen);\n }\n\n /** Indicate if side panel is in fullscreen overlay mode. */\n isFullscreen(): boolean {\n return this.fullscreenSubject.value;\n }\n\n /**\n * Indicate that the side panel is open with temporary content.\n */\n isTemporaryOpen(): boolean {\n return !!this.tempContentSubject.value;\n }\n\n /** Show side panel temporary content, opening the side panel when necessary. */\n showTemporaryContent(portal: Portal<any> | undefined): Observable<void> {\n this.hideTemporaryContent();\n this.tempContentSubject.next(portal);\n\n if (portal) {\n this.tempContentClosed = new Subject();\n return this.tempContentClosed.asObservable();\n }\n return EMPTY;\n }\n\n /** Hide side panel temporary content, reverting to state before showing temporary content. */\n hideTemporaryContent(): boolean {\n if (!this.isTemporaryOpen()) {\n return false;\n }\n if (this.tempContentClosed) {\n const sub = this.tempContentClosed;\n this.tempContentClosed = undefined;\n sub.next();\n sub.complete();\n }\n this.tempContentSubject.next(undefined);\n return true;\n }\n\n /**\n * Request body scroll lock. Uses reference counting to handle multiple panels.\n */\n requestBodyScrollLock(): void {\n if (!this.isBrowser) {\n return;\n }\n\n if (this.bodyScrollLocks === 0) {\n this.originalBodyOverflow = this.document.body.style.overflow;\n this.document.body.style.overflow = 'hidden';\n }\n this.bodyScrollLocks++;\n }\n\n /**\n * Release body scroll lock. Restores scroll when no more locks exist.\n */\n releaseBodyScrollLock(): void {\n if (!this.isBrowser || this.bodyScrollLocks === 0) {\n return;\n }\n\n this.bodyScrollLocks--;\n if (this.bodyScrollLocks === 0 && this.originalBodyOverflow !== undefined) {\n this.document.body.style.overflow = this.originalBodyOverflow;\n this.originalBodyOverflow = undefined;\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { CdkPortalOutlet, Portal, PortalModule } from '@angular/cdk/portal';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n DOCUMENT,\n effect,\n ElementRef,\n inject,\n input,\n model,\n OnChanges,\n OnDestroy,\n OnInit,\n output,\n PLATFORM_ID,\n signal,\n SimpleChanges,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n BOOTSTRAP_BREAKPOINTS,\n Breakpoints,\n ElementDimensions,\n ResizeObserverService\n} from '@siemens/element-ng/resize-observer';\nimport { t } from '@siemens/element-translate-ng/translate';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { SiSidePanelService } from './si-side-panel.service';\nimport { SidePanelMode, SidePanelSize } from './side-panel.model';\n\n@Component({\n selector: 'si-side-panel',\n imports: [PortalModule],\n templateUrl: './si-side-panel.component.html',\n styleUrl: './si-side-panel.component.scss',\n host: {\n class: 'si-layout-inner',\n '[class.enable-mobile]': 'enableMobile()',\n '[class.rpanel-size--regular]': 'this.size() === \"regular\"',\n '[class.rpanel-size--wide]': 'this.size() === \"wide\"',\n '[class.rpanel-size--extended]': 'this.size() === \"extended\"',\n '[class.rpanel-mode--over]': 'isOverMode()',\n '[class.rpanel-mode--scroll]': 'isScrollMode()',\n '[class.rpanel-collapsed]': 'isCollapsed()',\n '[class.ready]': 'ready()',\n '[class.collapsible]': 'collapsible() && !this.showTempContent()',\n '[class.collapsible-temp]': 'collapsible() && this.showTempContent()',\n '[class.rpanel-hidden]': 'isHidden()',\n '[class.rpanel-fullscreen-overlay]': 'isFullscreenOverlay()',\n '[class.rpanel-resize-xs]': 'isXs()',\n '[class.rpanel-resize-sm]': 'isSm()',\n '[class.rpanel-resize-md]': 'isMd()',\n '[class.rpanel-resize-lg]': 'isLg()',\n '[class.rpanel-resize-xl]': 'isXl()',\n '[class.rpanel-resize-xxl]': 'isXxl()',\n '[class.rpanel-resize-xxxl]': 'isXxxl()'\n }\n})\nexport class SiSidePanelComponent implements OnInit, OnDestroy, OnChanges {\n /**\n * Custom breakpoint for ultra-wide screens (≥1920px)\n */\n private static readonly xxxlMinimum = 1920;\n\n /**\n * @defaultValue false\n */\n readonly collapsible = input(false, { transform: booleanAttribute });\n\n /**\n * Default state of navigation\n */\n readonly collapsed = model<boolean>();\n\n /**\n * Mode of side panel\n * (ignored below a certain width)\n *\n * @defaultValue 'over'\n */\n readonly mode = input<SidePanelMode>('over');\n\n /**\n * Size of side-panel\n *\n * @defaultValue 'regular'\n */\n readonly size = input<SidePanelSize>('regular');\n\n /**\n * Toggle icon aria-label, required for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_SIDE_PANEL.TOGGLE:Toggle`)\n * ```\n */\n readonly toggleItemLabel = input(t(() => $localize`:@@SI_SIDE_PANEL.TOGGLE:Toggle`));\n\n /**\n * Specifies custom breakpoints to automatically switch mode.\n * The `smMinimum` specifies the breakpoint for the mobile view.\n * The `lgMinimum` specifies the breakpoint to allow scroll mode\n * (below automatically uses over mode).\n * The `xlMinimum` specifies the breakpoint to allow scroll mode\n * with wide size (below automatically uses over mode).\n */\n readonly breakpoints = input<Breakpoints>();\n\n /**\n * Enable mobile drawer for small screen sizes. Should not be used in conjunction with the vertical navbar.\n *\n * @defaultValue false\n */\n readonly enableMobile = input(false, { transform: booleanAttribute });\n\n /**\n * Whether to disable backdrop when side panel is open in over mode.\n * When false (default), the backdrop prevents interaction with background content while preserving visual context.\n *\n * @defaultValue false\n */\n readonly disableBackdrop = input(false, { transform: booleanAttribute });\n\n /**\n * Emits when the panel is closed\n */\n readonly closed = output();\n\n /**\n * Emits whenever the content is resized due to opening and closing or parent resize.\n */\n readonly contentResize = output<ElementDimensions>();\n\n protected readonly isScrollMode = computed(() => this.mode() === 'scroll');\n protected readonly isOverMode = computed(() => {\n if (this.mode() === 'over') {\n return true;\n }\n\n if (this.mode() === 'scroll') {\n if (this.isXs() || this.isSm() || this.isMd()) {\n return true;\n }\n if (this.isLg() && (this.size() === 'wide' || this.size() === 'extended')) {\n return true;\n }\n }\n\n return false;\n });\n protected readonly showBackdrop = computed(\n () => !this.disableBackdrop() && this.isOverMode() && !this.isCollapsed()\n );\n protected readonly isXs = signal(false);\n protected readonly isSm = signal(false);\n protected readonly isMd = signal(true);\n protected readonly isLg = signal(false);\n protected readonly isXl = signal(false);\n protected readonly isXxl = signal(false);\n protected readonly isXxxl = signal(false);\n protected readonly isCollapsed = signal(false);\n protected readonly ready = signal(false);\n protected readonly isHidden = signal(false);\n protected readonly isFullscreenOverlay = signal(false);\n protected readonly showTempContent = signal(false);\n\n private readonly panelElement = viewChild.required<ElementRef>('sidePanel');\n private readonly contentElement = viewChild.required<ElementRef>('content');\n private readonly portalOutlet = viewChild.required<CdkPortalOutlet, CdkPortalOutlet>(\n 'portalOutlet',\n {\n read: CdkPortalOutlet\n }\n );\n private readonly tmpPortalOutlet = viewChild.required<CdkPortalOutlet, CdkPortalOutlet>(\n 'tmpPortalOutlet',\n {\n read: CdkPortalOutlet\n }\n );\n\n /**\n * The $rpanel-transition-duration in the style is 0.5 seconds.\n * Sending the resize event after resize need to wait until resize is done.\n */\n private readonly resizeEventDelay = 500;\n private resizeEvent = new Subject<void>();\n private openingOrClosing = false;\n private previousContentDimensions: ElementDimensions = { width: 0, height: 0 };\n private isCollapsedInternal = false; // same as the other one, except w/o timeout for animation\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly element = inject(ElementRef);\n private readonly resizeObserver = inject(ResizeObserverService);\n private readonly service = inject(SiSidePanelService);\n private readonly cdRef = inject(ChangeDetectorRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly document = inject(DOCUMENT);\n\n constructor() {\n this.service.isFullscreen$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(fullscreen => {\n this.isFullscreenOverlay.set(fullscreen);\n });\n\n if (this.isBrowser) {\n this.resizeEvent\n .asObservable()\n .pipe(takeUntilDestroyed(), debounceTime(this.resizeEventDelay))\n .subscribe(() => {\n this.openingOrClosing = false;\n this.emitResizeOutputs();\n this.service.setFullscreen(false);\n if (this.isCollapsedInternal && !this.collapsible()) {\n this.isHidden.set(true);\n }\n });\n }\n\n effect(() => {\n if (this.showBackdrop()) {\n this.service.requestBodyScrollLock();\n } else {\n this.service.releaseBodyScrollLock();\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (changes.collapsed) {\n if (this.collapsed()) {\n this.service.close();\n } else {\n this.service.open();\n }\n }\n\n if (changes.enableMobile) {\n this.service.enableMobile.set(this.enableMobile());\n }\n\n if (changes.collapsible) {\n this.service.collapsible.set(this.collapsible());\n }\n }\n\n ngOnInit(): void {\n // handle initial state to avoid flicker\n const collapsed = this.collapsed() ?? !this.service.isOpen();\n this.isCollapsedInternal = collapsed;\n this.isHidden.set(collapsed);\n this.isCollapsed.set(collapsed);\n this.service.collapsible.set(this.collapsible());\n\n this.resizeObserver\n .observe(this.element.nativeElement, 100, true)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(dim => {\n this.setBreakpoints(dim.width, dim.height);\n if (!this.ready()) {\n // delay because the initial sizing needs to settle\n setTimeout(() => {\n this.ready.set(true);\n }, 100);\n }\n if (!this.openingOrClosing) {\n this.emitResizeOutputs();\n }\n });\n\n this.service.content$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(portal => this.attachContent(portal));\n\n this.service.tempContent$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(portal => this.attachTempContent(portal));\n\n this.service.isOpen$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(isOpen => this.openClose(isOpen));\n }\n\n ngOnDestroy(): void {\n this.portalOutlet().detach();\n this.service.releaseBodyScrollLock();\n }\n /**\n * Toggle whether the side panel is expanded or not.\n */\n toggleSidePanel(): void {\n if (this.collapsible()) {\n this.service.toggle();\n } else {\n this.service.close();\n }\n }\n\n private emitResizeOutputs(): void {\n const contentDimensions = this.getContentDimensions();\n if (\n contentDimensions.width !== this.previousContentDimensions.width ||\n contentDimensions.height !== this.previousContentDimensions.height\n ) {\n this.previousContentDimensions = contentDimensions;\n this.contentResize.emit(contentDimensions);\n }\n }\n\n private getContentDimensions(): ElementDimensions {\n if (!this.isCollapsedInternal && this.isXs()) {\n return { width: 0, height: 0 };\n }\n const rect = this.contentElement().nativeElement.getBoundingClientRect();\n return { width: rect.width, height: rect.height };\n }\n\n private setBreakpoints(width: number, height: number): void {\n if (!width && !height) {\n // element is not visible, no point in changing anything\n return;\n }\n const breakpoints = this.breakpoints() ?? BOOTSTRAP_BREAKPOINTS;\n\n this.isXs.set(width < breakpoints.smMinimum);\n this.isSm.set(width >= breakpoints.smMinimum && width < breakpoints.mdMinimum);\n this.isMd.set(width >= breakpoints.mdMinimum && width < breakpoints.lgMinimum);\n this.isLg.set(width >= breakpoints.lgMinimum && width < breakpoints.xlMinimum);\n this.isXl.set(width >= breakpoints.xlMinimum && width < breakpoints.xxlMinimum);\n this.isXxl.set(width >= breakpoints.xxlMinimum && width < SiSidePanelComponent.xxxlMinimum);\n this.isXxxl.set(width >= SiSidePanelComponent.xxxlMinimum);\n }\n\n private sendResize(): void {\n if (this.isScrollMode() || this.element.nativeElement.style.paddingRight !== '0') {\n this.openingOrClosing = true;\n this.resizeEvent.next();\n }\n }\n\n private attachContent(portal?: Portal<any>): void {\n const portalOutlet = this.portalOutlet();\n portalOutlet.detach();\n if (portal) {\n portalOutlet.attach(portal);\n }\n this.cdRef.markForCheck();\n }\n\n private attachTempContent(portal: Portal<any> | undefined): void {\n const tmpPortalOutlet = this.tmpPortalOutlet();\n tmpPortalOutlet.detach();\n if (portal) {\n tmpPortalOutlet.attach(portal);\n this.showTempContent.set(true);\n this.openClose(true, true);\n } else if (this.showTempContent()) {\n this.showTempContent.set(false);\n this.openClose(this.service.isOpen(), true);\n }\n }\n\n private openClose(open: boolean, regainFocus = false): void {\n if (open !== this.isCollapsedInternal) {\n this.moveFocusInside(open && regainFocus);\n return;\n }\n this.isCollapsedInternal = !open;\n if (open) {\n this.isHidden.set(false);\n }\n setTimeout(() => this.doOpenClose(open));\n }\n\n private doOpenClose(open: boolean): void {\n this.moveFocusInside(open);\n this.isCollapsed.set(!open);\n this.collapsed.set(this.isCollapsed());\n if (this.isCollapsedInternal) {\n this.closed.emit();\n }\n this.sendResize();\n }\n\n private moveFocusInside(open: boolean): void {\n if (\n open &&\n !this.document.activeElement?.parentElement?.classList.contains(\n 'side-panel-collapse-toggle'\n ) &&\n !this.document.activeElement?.classList.contains('side-panel-collapse-toggle')\n ) {\n // moves the keyboard focus inside the panel so that the next tab is somewhere useful\n this.panelElement().nativeElement.focus();\n queueMicrotask(() => this.panelElement().nativeElement.blur());\n }\n }\n}\n","@if (showBackdrop()) {\n <div class=\"modal-backdrop\" animate.leave=\"backdrop-leave\" (click)=\"toggleSidePanel()\"></div>\n}\n<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","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport {\n booleanAttribute,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n OnInit,\n output,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport {\n elementCancel,\n elementDoubleLeft,\n elementDoubleRight,\n elementExport,\n elementPinch,\n elementZoom\n} from '@siemens/element-icons';\nimport { SiAccordionHCollapseService } from '@siemens/element-ng/accordion';\nimport { MenuItem as MenuItemLegacy } from '@siemens/element-ng/common';\nimport {\n ContentActionBarMainItem,\n SiContentActionBarComponent\n} from '@siemens/element-ng/content-action-bar';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiLinkDirective } from '@siemens/element-ng/link';\nimport { MenuItem } from '@siemens/element-ng/menu';\nimport { BOOTSTRAP_BREAKPOINTS } from '@siemens/element-ng/resize-observer';\nimport { SiSearchBarComponent } from '@siemens/element-ng/search-bar';\nimport { SiTooltipDirective } from '@siemens/element-ng/tooltip';\nimport { SiTranslatePipe, t, TranslatableString } from '@siemens/element-translate-ng/translate';\nimport { timer } from 'rxjs';\n\nimport { SiSidePanelService } from './si-side-panel.service';\nimport { SidePanelDisplayMode, SidePanelNavigateConfig } from './side-panel.model';\n\n/**\n * An extension of MenuItem to support combined icons.\n *\n * @deprecated Use the {@link SiSidePanelActionsComponent} instead:\n *\n * ```html\n * <si-side-panel-content>\n * <si-side-panel-actions>\n * <button\n * type=\"button\"\n * si-side-panel-action\n * icon=\"element-alarm-background-filled\"\n * iconColor=\"status-danger\"\n * stackedIcon=\"element-alarm-tick\"\n * stackedIconColor=\"text-body\"\n * (click)=\"action()\"\n * >\n * Action\n * </button>\n * </si-side-panel-actions>\n * </si-side-panel-content>\n * ```\n */\nexport interface StatusItem extends MenuItemLegacy {\n overlayIcon?: string;\n}\n\n@Component({\n selector: 'si-side-panel-content',\n imports: [\n SiContentActionBarComponent,\n SiIconComponent,\n RouterLink,\n SiSearchBarComponent,\n SiTranslatePipe,\n SiTooltipDirective,\n SiLinkDirective\n ],\n templateUrl: './si-side-panel-content.component.html',\n styleUrl: './si-side-panel-content.component.scss',\n providers: [SiAccordionHCollapseService],\n host: {\n '[class.collapsed]': 'isCollapsed()',\n '[class.expanded]': 'isExpanded()',\n '[class.enable-mobile]': 'enableMobile()',\n '[class.rpanel-fullscreen-overlay]': 'isFullscreen()',\n '[id]': 'panelContentId'\n }\n})\nexport class SiSidePanelContentComponent implements OnInit {\n private static idCounter = 0;\n protected readonly panelContentId = `__si-side-panel-content-${SiSidePanelContentComponent.idCounter++}`;\n /**\n * @deprecated This input is no longer used. The collapsible state is managed by the SiSidePanelService.\n * This input will be removed in a future major version.\n * @defaultValue undefined\n */\n readonly collapsibleInput = input(undefined, {\n // eslint-disable-next-line @angular-eslint/no-input-rename\n alias: 'collapsible',\n transform: booleanAttribute\n });\n /**\n * Header of side panel\n *\n * @defaultValue ''\n */\n readonly heading = input<TranslatableString>('');\n\n /**\n * Input list of primary action items\n *\n * @defaultValue []\n */\n readonly primaryActions = input<(MenuItemLegacy | ContentActionBarMainItem)[]>([]);\n\n /**\n * Input list of secondary action items.\n *\n * @defaultValue []\n */\n readonly secondaryActions = input<(MenuItemLegacy | MenuItem)[]>([]);\n\n /**\n * Status icons/actions\n *\n * @deprecated Use the {@link SiSidePanelActionsComponent} instead:\n *\n * ```html\n * <si-side-panel-content>\n * <si-side-panel-actions>\n * <button\n * type=\"button\"\n * si-side-panel-action\n * icon=\"element-alarm-background-filled\"\n * iconColor=\"status-danger\"\n * stackedIcon=\"element-alarm-tick\"\n * stackedIconColor=\"text-body\"\n * (click)=\"action()\"\n * >\n * Action\n * </button>\n * </si-side-panel-actions>\n * </si-side-panel-content>\n * ```\n *\n * @defaultValue []\n */\n readonly statusActions = input<StatusItem[]>([]);\n\n /**\n * Toggles search bar\n *\n * @defaultValue false\n */\n readonly searchable = input(false, { transform: booleanAttribute });\n\n /**\n * Placeholder text for search\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_SIDE_PANEL.SEARCH_PLACEHOLDER:Search...`)\n * ```\n */\n readonly searchPlaceholder = input(\n t(() => $localize`:@@SI_SIDE_PANEL.SEARCH_PLACEHOLDER:Search...`)\n );\n\n /**\n * Aria label for close button. Needed for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_SIDE_PANEL.CLOSE:Close`)\n * ```\n */\n readonly closeButtonLabel = input(t(() => $localize`:@@SI_SIDE_PANEL.CLOSE:Close`));\n\n /**\n * Toggle icon aria-label, required for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_SIDE_PANEL.TOGGLE:Toggle`)\n * ```\n */\n readonly toggleItemLabel = input(t(() => $localize`:@@SI_SIDE_PANEL.TOGGLE:Toggle`));\n\n /**\n * Enter fullscreen aria-label, required for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_SIDE_PANEL.ENTER_FULLSCREEN:Enter fullscreen`)\n * ```\n */\n readonly enterFullscreenLabel = input(\n t(() => $localize`:@@SI_SIDE_PANEL.ENTER_FULLSCREEN:Enter fullscreen`)\n );\n\n /**\n * Exit fullscreen aria-label, required for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_SIDE_PANEL.EXIT_FULLSCREEN:Exit fullscreen`)\n * ```\n */\n readonly exitFullscreenLabel = input(\n t(() => $localize`:@@SI_SIDE_PANEL.EXIT_FULLSCREEN:Exit fullscreen`)\n );\n\n /**\n * Show a badge on the mobile drawer indicating a new alert or notification\n *\n * @defaultValue false\n */\n readonly showMobileDrawerBadge = input(false, { transform: booleanAttribute });\n\n /**\n * Display mode for side panel - enables navigate or overlay functionality\n */\n readonly displayMode = input<SidePanelDisplayMode>();\n\n /**\n * Configuration for navigate mode\n */\n readonly navigateConfig = input<SidePanelNavigateConfig>();\n\n /**\n * Output for search bar input\n */\n readonly searchEvent = output<string>();\n\n protected readonly activatedRoute = inject(ActivatedRoute, { optional: true });\n protected readonly service = inject(SiSidePanelService);\n protected readonly isCollapsed = signal(false);\n protected readonly isExpanded = signal(true);\n protected readonly isFullscreen = signal(false);\n protected readonly enableMobile = computed(() => this.service?.enableMobile() ?? false);\n protected readonly collapsible = computed(() => {\n return this.collapsibleInput() ?? this.service?.collapsible() ?? false;\n });\n protected readonly mobileSize = signal(false);\n protected readonly focusable = computed(\n () => !this.mobileSize() || !this.enableMobile() || !this.isCollapsed()\n );\n protected readonly icons = addIcons({\n elementCancel,\n elementDoubleLeft,\n elementDoubleRight,\n elementExport,\n elementPinch,\n elementZoom\n });\n /**\n * The $rpanel-transition-duration in the style is 0.5 seconds.\n * For the animation we need to wait until the resize is done.\n */\n private readonly resizeAnimationDelay = 500;\n private readonly destroyRef = inject(DestroyRef);\n private readonly breakpointObserver = inject(BreakpointObserver);\n\n private expandedTimeout: any;\n\n constructor() {\n const accordionHcollapse = inject(SiAccordionHCollapseService);\n\n this.service.isFullscreen$.pipe(takeUntilDestroyed()).subscribe(fullscreen => {\n this.isFullscreen.set(fullscreen);\n });\n\n this.service.isOpen$.pipe(takeUntilDestroyed()).subscribe(state => {\n this.isCollapsed.set(!state);\n clearTimeout(this.expandedTimeout);\n this.expandedTimeout = undefined;\n if (!state) {\n this.isExpanded.set(false);\n } else {\n this.expandedTimeout = setTimeout(() => {\n this.isExpanded.set(true);\n }, this.resizeAnimationDelay / 2);\n }\n });\n\n effect(() => {\n if (this.collapsible()) {\n accordionHcollapse.hcollapsed.set(this.isCollapsed());\n }\n });\n\n effect(() => {\n if (this.isCollapsed() && !this.service.isTemporaryOpen() && this.isFullscreen()) {\n timer(this.resizeAnimationDelay)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.service.setFullscreen(false);\n });\n }\n });\n\n accordionHcollapse.open$.pipe(takeUntilDestroyed()).subscribe(() => this.service.open());\n }\n\n ngOnInit(): void {\n this.breakpointObserver\n .observe('(max-width: ' + BOOTSTRAP_BREAKPOINTS.smMinimum + 'px)')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(({ matches }) => {\n this.mobileSize.set(matches);\n });\n }\n\n /**\n * Toggle fullscreen overlay mode\n */\n toggleFullscreen(): void {\n if (this.isCollapsed() && !this.service.isTemporaryOpen()) {\n return;\n }\n this.service.toggleFullscreen();\n }\n\n protected toggleSidePanel(event?: MouseEvent): void {\n if (event?.detail !== 0) {\n // Blur except if triggered by keyboard\n (document?.activeElement as HTMLElement)?.blur();\n }\n if (this.service.isTemporaryOpen()) {\n this.service.hideTemporaryContent();\n } else {\n this.service.toggle();\n }\n }\n}\n","<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-icon 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]=\"icons.elementExport\" />\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-icon 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]=\"icons.elementExport\" />\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-icon 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() ? icons.elementPinch : icons.elementZoom\" />\n </button>\n }\n <button\n type=\"button\"\n class=\"close-button btn btn-icon 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-icon btn-ghost mx-4\"\n [attr.aria-label]=\"toggleItemLabel() | translate\"\n [attr.aria-expanded]=\"!isCollapsed() || service.isTemporaryOpen()\"\n [attr.aria-controls]=\"panelContentId\"\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 placement=\"start\"\n [attr.aria-label]=\"!isCollapsed() ? '' : (dp.title | translate)\"\n [siTooltip]=\"(dp.title | translate) || ''\"\n [isDisabled]=\"!isCollapsed()\"\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 si-caption\">{{ 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 <ng-content select=\"si-side-panel-actions\" />\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","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { SiIconComponent } from '@siemens/element-ng/icon';\n\n/**\n * Creates an action for the side-panel.\n * This action will remain visible if the side-panel is collapsed.\n *\n * @example\n * ```html\n * <si-side-panel-content>\n * <si-side-panel-actions>\n * <button\n * type=\"button\"\n * si-side-panel-action\n * icon=\"element-alarm-background-filled\"\n * iconColor=\"status-danger\"\n * stackedIcon=\"element-alarm-tick\"\n * stackedIconColor=\"text-body\"\n * (click)=\"action()\"\n * >\n * Action\n * </button>\n * </si-side-panel-actions>\n * </si-side-panel-content>\n * ```\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[si-side-panel-action], a[si-side-panel-action]',\n imports: [SiIconComponent],\n template: `\n @if (disabled()) {\n <div class=\"icon dot text-muted text-center\">&bull;</div>\n } @else {\n <span class=\"icon icon-stack\">\n <si-icon [class]=\"iconColor()\" [icon]=\"icon()\" />\n @if (stackedIcon(); as stackedIcon) {\n <si-icon [class]=\"stackedIconColor()\" [icon]=\"stackedIcon\" />\n }\n </span>\n <span class=\"ms-2 auto-hide si-caption text-start\">\n <ng-content />\n </span>\n }\n `,\n styleUrl: './si-side-panel-action.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'focus-inside'\n }\n})\nexport class SiSidePanelActionComponent {\n /** Icon name for the main icon. */\n readonly icon = input.required<string>();\n\n /** CSS color class for the main icon (e.g. `'status-warning'`). */\n readonly iconColor = input<string>();\n\n /** Optional stacked icon name displayed on top of the main icon. */\n readonly stackedIcon = input<string>();\n\n /** CSS color class for the stacked icon (e.g. `'text-body'`). */\n readonly stackedIconColor = input<string>();\n\n /**\n * When disabled, renders a dot separator instead of the icon and label.\n *\n * @defaultValue false\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n/**\n * Creates an actions container for the side-panel.\n * This action will remain visible if the side-panel is collapsed.\n *\n * @example\n * ```html\n * <si-side-panel-content>\n * <si-side-panel-actions>\n * <button\n * type=\"button\"\n * si-side-panel-action\n * icon=\"element-alarm-background-filled\"\n * iconColor=\"status-danger\"\n * stackedIcon=\"element-alarm-tick\"\n * stackedIconColor=\"text-body\"\n * (click)=\"action()\"\n * >\n * Action\n * </button>\n * </si-side-panel-actions>\n * </si-side-panel-content>\n * ```\n */\n@Component({\n selector: 'si-side-panel-actions',\n template: '<ng-content />',\n styleUrl: './si-side-panel-actions.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiSidePanelActionsComponent {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiSidePanelActionComponent } from './si-side-panel-action.component';\nimport { SiSidePanelActionsComponent } from './si-side-panel-actions.component';\nimport { SiSidePanelContentComponent } from './si-side-panel-content.component';\nimport { SiSidePanelComponent } from './si-side-panel.component';\n\n@NgModule({\n imports: [\n SiSidePanelComponent,\n SiSidePanelContentComponent,\n SiSidePanelActionsComponent,\n SiSidePanelActionComponent\n ],\n exports: [\n SiSidePanelComponent,\n SiSidePanelContentComponent,\n SiSidePanelActionsComponent,\n SiSidePanelActionComponent\n ]\n})\nexport class SiSidePanelModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\n\nimport { NavigationExtras } from '@angular/router';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\n/**\n * Side panel mode options.\n * - scroll: pushes content when side panel opens/closes,\n * - over: Opens as an overlay on existing content. Just like modal.\n */\nexport type SidePanelMode = 'scroll' | 'over';\n\n/**\n * Side panel size options.\n * - regular: 390px,\n * - wide: 500px,\n * - extended: responsive width that adapts to screen size. Full width on small/medium screens,\n * scales from 480px to 912px (max) on larger screens for optimal content display\n */\nexport type SidePanelSize = 'regular' | 'wide' | 'extended';\n\n/**\n * Side panel display mode options.\n * - navigate: allows navigation to dedicated page\n * - overlay: allows full-screen overlay toggle\n */\nexport type SidePanelDisplayMode = 'navigate' | 'overlay';\n\n/**\n * Interface representing a router link item in the side panel.\n */\nexport interface SidePanelNavigateRouterLink {\n type: 'router-link';\n /** Label that is shown to the user. */\n label: TranslatableString;\n /** Link for the angular router. Accepts the same values as {@link RouterLink}. */\n routerLink: string | any[];\n /** Navigation extras that are passed to the {@link RouterLink}. */\n extras?: NavigationExtras;\n}\n\n/**\n * Interface representing a link item in the side panel.\n */\nexport interface SidePanelNavigateLink {\n type: 'link';\n /** Label that is shown to the user. */\n label: TranslatableString;\n /** The href property of the anchor. */\n href: string;\n /** The target property of the anchor. */\n target?: string;\n}\n\n/**\n * Configuration for side panel navigation.\n */\nexport type SidePanelNavigateConfig = SidePanelNavigateRouterLink | SidePanelNavigateLink;\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-side-panel.service';\nexport * from './si-side-panel.component';\nexport * from './si-side-panel-content.component';\nexport * from './si-side-panel.module';\nexport * from './si-side-panel-actions.component';\nexport * from './si-side-panel-action.component';\nexport * from './side-panel.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DOCUMENT"],"mappings":"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"}
1
+ {"version":3,"file":"siemens-element-ng-side-panel.mjs","sources":["../../../../projects/element-ng/side-panel/si-side-panel.service.ts","../../../../projects/element-ng/side-panel/si-side-panel.component.ts","../../../../projects/element-ng/side-panel/si-side-panel.component.html","../../../../projects/element-ng/side-panel/si-side-panel-content.component.ts","../../../../projects/element-ng/side-panel/si-side-panel-content.component.html","../../../../projects/element-ng/side-panel/si-side-panel-action.component.ts","../../../../projects/element-ng/side-panel/si-side-panel-actions.component.ts","../../../../projects/element-ng/side-panel/si-side-panel.module.ts","../../../../projects/element-ng/side-panel/side-panel.model.ts","../../../../projects/element-ng/side-panel/index.ts","../../../../projects/element-ng/side-panel/siemens-element-ng-side-panel.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Portal } from '@angular/cdk/portal';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\nimport { BehaviorSubject, EMPTY, Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiSidePanelService {\n private contentSubject = new BehaviorSubject<Portal<any> | undefined>(undefined);\n /** @internal */\n readonly content$ = this.contentSubject.asObservable();\n\n private openSubject = new BehaviorSubject<boolean>(false);\n /**\n * Emits on side panel is open or close.\n *\n * @defaultValue this.openSubject.asObservable()\n */\n readonly isOpen$ = this.openSubject.asObservable();\n\n private tempContentSubject = new BehaviorSubject<Portal<any> | undefined>(undefined);\n /** @internal */\n readonly tempContent$ = this.tempContentSubject.asObservable();\n\n private tempContentClosed?: Subject<void>;\n /** @internal */\n readonly enableMobile = signal(false);\n\n /** @internal */\n readonly collapsible = signal(false);\n\n private fullscreenSubject = new BehaviorSubject<boolean>(false);\n /**\n * Emits when fullscreen overlay mode is toggled.\n */\n readonly isFullscreen$ = this.fullscreenSubject.asObservable();\n\n // Body scroll management\n private bodyScrollLocks = 0;\n private originalBodyOverflow?: string;\n private readonly document = inject(DOCUMENT);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n /** Set or update displayed content. */\n setSidePanelContent(portal: Portal<any> | undefined): void {\n this.contentSubject.next(portal);\n }\n\n /** Open side panel. */\n open(): void {\n this.hideTemporaryContent();\n this.openSubject.next(true);\n }\n\n /** Close side panel. */\n close(): void {\n if (this.hideTemporaryContent()) {\n return;\n }\n this.openSubject.next(false);\n }\n\n /** Toggle side panel open/close. */\n toggle(): void {\n this.hideTemporaryContent();\n this.openSubject.next(!this.openSubject.value);\n }\n\n /** Indicate is side panel open. */\n isOpen(): boolean {\n return this.openSubject.value;\n }\n\n /** Toggle fullscreen overlay mode. */\n toggleFullscreen(): void {\n this.fullscreenSubject.next(!this.fullscreenSubject.value);\n }\n\n /** Set fullscreen overlay mode. */\n setFullscreen(fullscreen: boolean): void {\n this.fullscreenSubject.next(fullscreen);\n }\n\n /** Indicate if side panel is in fullscreen overlay mode. */\n isFullscreen(): boolean {\n return this.fullscreenSubject.value;\n }\n\n /**\n * Indicate that the side panel is open with temporary content.\n */\n isTemporaryOpen(): boolean {\n return !!this.tempContentSubject.value;\n }\n\n /** Show side panel temporary content, opening the side panel when necessary. */\n showTemporaryContent(portal: Portal<any> | undefined): Observable<void> {\n this.hideTemporaryContent();\n this.tempContentSubject.next(portal);\n\n if (portal) {\n this.tempContentClosed = new Subject();\n return this.tempContentClosed.asObservable();\n }\n return EMPTY;\n }\n\n /** Hide side panel temporary content, reverting to state before showing temporary content. */\n hideTemporaryContent(): boolean {\n if (!this.isTemporaryOpen()) {\n return false;\n }\n if (this.tempContentClosed) {\n const sub = this.tempContentClosed;\n this.tempContentClosed = undefined;\n sub.next();\n sub.complete();\n }\n this.tempContentSubject.next(undefined);\n return true;\n }\n\n /**\n * Request body scroll lock. Uses reference counting to handle multiple panels.\n */\n requestBodyScrollLock(): void {\n if (!this.isBrowser) {\n return;\n }\n\n if (this.bodyScrollLocks === 0) {\n this.originalBodyOverflow = this.document.body.style.overflow;\n this.document.body.style.overflow = 'hidden';\n }\n this.bodyScrollLocks++;\n }\n\n /**\n * Release body scroll lock. Restores scroll when no more locks exist.\n */\n releaseBodyScrollLock(): void {\n if (!this.isBrowser || this.bodyScrollLocks === 0) {\n return;\n }\n\n this.bodyScrollLocks--;\n if (this.bodyScrollLocks === 0 && this.originalBodyOverflow !== undefined) {\n this.document.body.style.overflow = this.originalBodyOverflow;\n this.originalBodyOverflow = undefined;\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { CdkPortalOutlet, Portal, PortalModule } from '@angular/cdk/portal';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n DOCUMENT,\n effect,\n ElementRef,\n inject,\n input,\n model,\n OnChanges,\n OnDestroy,\n OnInit,\n output,\n PLATFORM_ID,\n signal,\n SimpleChanges,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n BOOTSTRAP_BREAKPOINTS,\n Breakpoints,\n ElementDimensions,\n ResizeObserverService\n} from '@siemens/element-ng/resize-observer';\nimport { t } from '@siemens/element-translate-ng/translate';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { SiSidePanelService } from './si-side-panel.service';\nimport { SidePanelMode, SidePanelSize } from './side-panel.model';\n\n@Component({\n selector: 'si-side-panel',\n imports: [PortalModule],\n templateUrl: './si-side-panel.component.html',\n styleUrl: './si-side-panel.component.scss',\n host: {\n class: 'si-layout-inner',\n '[class.enable-mobile]': 'enableMobile()',\n '[class.rpanel-size--regular]': 'this.size() === \"regular\"',\n '[class.rpanel-size--wide]': 'this.size() === \"wide\"',\n '[class.rpanel-size--extended]': 'this.size() === \"extended\"',\n '[class.rpanel-mode--over]': 'isOverMode()',\n '[class.rpanel-mode--scroll]': 'isScrollMode()',\n '[class.rpanel-collapsed]': 'isCollapsed()',\n '[class.ready]': 'ready()',\n '[class.collapsible]': 'collapsible() && !this.showTempContent()',\n '[class.collapsible-temp]': 'collapsible() && this.showTempContent()',\n '[class.rpanel-hidden]': 'isHidden()',\n '[class.rpanel-fullscreen-overlay]': 'isFullscreenOverlay()',\n '[class.rpanel-resize-xs]': 'isXs()',\n '[class.rpanel-resize-sm]': 'isSm()',\n '[class.rpanel-resize-md]': 'isMd()',\n '[class.rpanel-resize-lg]': 'isLg()',\n '[class.rpanel-resize-xl]': 'isXl()',\n '[class.rpanel-resize-xxl]': 'isXxl()',\n '[class.rpanel-resize-xxxl]': 'isXxxl()'\n }\n})\nexport class SiSidePanelComponent implements OnInit, OnDestroy, OnChanges {\n /**\n * Custom breakpoint for ultra-wide screens (≥1920px)\n */\n private static readonly xxxlMinimum = 1920;\n\n /**\n * @defaultValue false\n */\n readonly collapsible = input(false, { transform: booleanAttribute });\n\n /**\n * Default state of navigation\n */\n readonly collapsed = model<boolean>();\n\n /**\n * Mode of side panel\n * (ignored below a certain width)\n *\n * @defaultValue 'over'\n */\n readonly mode = input<SidePanelMode>('over');\n\n /**\n * Size of side-panel\n *\n * @defaultValue 'regular'\n */\n readonly size = input<SidePanelSize>('regular');\n\n /**\n * Toggle icon aria-label, required for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_SIDE_PANEL.TOGGLE:Toggle`)\n * ```\n */\n readonly toggleItemLabel = input(t(() => $localize`:@@SI_SIDE_PANEL.TOGGLE:Toggle`));\n\n /**\n * Specifies custom breakpoints to automatically switch mode.\n * The `smMinimum` specifies the breakpoint for the mobile view.\n * The `lgMinimum` specifies the breakpoint to allow scroll mode\n * (below automatically uses over mode).\n * The `xlMinimum` specifies the breakpoint to allow scroll mode\n * with wide size (below automatically uses over mode).\n */\n readonly breakpoints = input<Breakpoints>();\n\n /**\n * Enable mobile drawer for small screen sizes. Should not be used in conjunction with the vertical navbar.\n *\n * @defaultValue false\n */\n readonly enableMobile = input(false, { transform: booleanAttribute });\n\n /**\n * Whether to disable backdrop when side panel is open in over mode.\n * When false (default), the backdrop prevents interaction with background content while preserving visual context.\n *\n * @defaultValue false\n */\n readonly disableBackdrop = input(false, { transform: booleanAttribute });\n\n /**\n * Emits when the panel is closed\n */\n readonly closed = output();\n\n /**\n * Emits whenever the content is resized due to opening and closing or parent resize.\n */\n readonly contentResize = output<ElementDimensions>();\n\n protected readonly isScrollMode = computed(() => this.mode() === 'scroll');\n protected readonly isOverMode = computed(() => {\n if (this.mode() === 'over') {\n return true;\n }\n\n if (this.mode() === 'scroll') {\n if (this.isXs() || this.isSm() || this.isMd()) {\n return true;\n }\n if (this.isLg() && (this.size() === 'wide' || this.size() === 'extended')) {\n return true;\n }\n }\n\n return false;\n });\n protected readonly showBackdrop = computed(\n () => !this.disableBackdrop() && this.isOverMode() && !this.isCollapsed()\n );\n protected readonly isXs = signal(false);\n protected readonly isSm = signal(false);\n protected readonly isMd = signal(true);\n protected readonly isLg = signal(false);\n protected readonly isXl = signal(false);\n protected readonly isXxl = signal(false);\n protected readonly isXxxl = signal(false);\n protected readonly isCollapsed = signal(false);\n protected readonly ready = signal(false);\n protected readonly isHidden = signal(false);\n protected readonly isFullscreenOverlay = signal(false);\n protected readonly showTempContent = signal(false);\n\n private readonly panelElement = viewChild.required<ElementRef>('sidePanel');\n private readonly contentElement = viewChild.required<ElementRef>('content');\n private readonly portalOutlet = viewChild.required<CdkPortalOutlet, CdkPortalOutlet>(\n 'portalOutlet',\n {\n read: CdkPortalOutlet\n }\n );\n private readonly tmpPortalOutlet = viewChild.required<CdkPortalOutlet, CdkPortalOutlet>(\n 'tmpPortalOutlet',\n {\n read: CdkPortalOutlet\n }\n );\n\n /**\n * The $rpanel-transition-duration in the style is 0.5 seconds.\n * Sending the resize event after resize need to wait until resize is done.\n */\n private readonly resizeEventDelay = 500;\n private resizeEvent = new Subject<void>();\n private openingOrClosing = false;\n private previousContentDimensions: ElementDimensions = { width: 0, height: 0 };\n private isCollapsedInternal = false; // same as the other one, except w/o timeout for animation\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly element = inject(ElementRef);\n private readonly resizeObserver = inject(ResizeObserverService);\n private readonly service = inject(SiSidePanelService);\n private readonly cdRef = inject(ChangeDetectorRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly document = inject(DOCUMENT);\n\n constructor() {\n this.service.isFullscreen$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(fullscreen => {\n this.isFullscreenOverlay.set(fullscreen);\n });\n\n if (this.isBrowser) {\n this.resizeEvent\n .asObservable()\n .pipe(takeUntilDestroyed(), debounceTime(this.resizeEventDelay))\n .subscribe(() => {\n this.openingOrClosing = false;\n this.emitResizeOutputs();\n this.service.setFullscreen(false);\n if (this.isCollapsedInternal && !this.collapsible()) {\n this.isHidden.set(true);\n }\n });\n }\n\n effect(() => {\n if (this.showBackdrop()) {\n this.service.requestBodyScrollLock();\n } else {\n this.service.releaseBodyScrollLock();\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (changes.collapsed) {\n if (this.collapsed()) {\n this.service.close();\n } else {\n this.service.open();\n }\n }\n\n if (changes.enableMobile) {\n this.service.enableMobile.set(this.enableMobile());\n }\n\n if (changes.collapsible) {\n this.service.collapsible.set(this.collapsible());\n }\n }\n\n ngOnInit(): void {\n // handle initial state to avoid flicker\n const collapsed = this.collapsed() ?? !this.service.isOpen();\n this.isCollapsedInternal = collapsed;\n this.isHidden.set(collapsed);\n this.isCollapsed.set(collapsed);\n this.service.collapsible.set(this.collapsible());\n\n this.resizeObserver\n .observe(this.element.nativeElement, 100, true)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(dim => {\n this.setBreakpoints(dim.width, dim.height);\n if (!this.ready()) {\n // delay because the initial sizing needs to settle\n setTimeout(() => {\n this.ready.set(true);\n }, 100);\n }\n if (!this.openingOrClosing) {\n this.emitResizeOutputs();\n }\n });\n\n this.service.content$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(portal => this.attachContent(portal));\n\n this.service.tempContent$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(portal => this.attachTempContent(portal));\n\n this.service.isOpen$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(isOpen => this.openClose(isOpen));\n }\n\n ngOnDestroy(): void {\n this.portalOutlet().detach();\n this.service.releaseBodyScrollLock();\n }\n /**\n * Toggle whether the side panel is expanded or not.\n */\n toggleSidePanel(): void {\n if (this.collapsible()) {\n this.service.toggle();\n } else {\n this.service.close();\n }\n }\n\n private emitResizeOutputs(): void {\n const contentDimensions = this.getContentDimensions();\n if (\n contentDimensions.width !== this.previousContentDimensions.width ||\n contentDimensions.height !== this.previousContentDimensions.height\n ) {\n this.previousContentDimensions = contentDimensions;\n this.contentResize.emit(contentDimensions);\n }\n }\n\n private getContentDimensions(): ElementDimensions {\n if (!this.isCollapsedInternal && this.isXs()) {\n return { width: 0, height: 0 };\n }\n const rect = this.contentElement().nativeElement.getBoundingClientRect();\n return { width: rect.width, height: rect.height };\n }\n\n private setBreakpoints(width: number, height: number): void {\n if (!width && !height) {\n // element is not visible, no point in changing anything\n return;\n }\n const breakpoints = this.breakpoints() ?? BOOTSTRAP_BREAKPOINTS;\n\n this.isXs.set(width < breakpoints.smMinimum);\n this.isSm.set(width >= breakpoints.smMinimum && width < breakpoints.mdMinimum);\n this.isMd.set(width >= breakpoints.mdMinimum && width < breakpoints.lgMinimum);\n this.isLg.set(width >= breakpoints.lgMinimum && width < breakpoints.xlMinimum);\n this.isXl.set(width >= breakpoints.xlMinimum && width < breakpoints.xxlMinimum);\n this.isXxl.set(width >= breakpoints.xxlMinimum && width < SiSidePanelComponent.xxxlMinimum);\n this.isXxxl.set(width >= SiSidePanelComponent.xxxlMinimum);\n }\n\n private sendResize(): void {\n if (this.isScrollMode() || this.element.nativeElement.style.paddingRight !== '0') {\n this.openingOrClosing = true;\n this.resizeEvent.next();\n }\n }\n\n private attachContent(portal?: Portal<any>): void {\n const portalOutlet = this.portalOutlet();\n portalOutlet.detach();\n if (portal) {\n portalOutlet.attach(portal);\n }\n this.cdRef.markForCheck();\n }\n\n private attachTempContent(portal: Portal<any> | undefined): void {\n const tmpPortalOutlet = this.tmpPortalOutlet();\n tmpPortalOutlet.detach();\n if (portal) {\n tmpPortalOutlet.attach(portal);\n this.showTempContent.set(true);\n this.openClose(true, true);\n } else if (this.showTempContent()) {\n this.showTempContent.set(false);\n this.openClose(this.service.isOpen(), true);\n }\n }\n\n private openClose(open: boolean, regainFocus = false): void {\n if (open !== this.isCollapsedInternal) {\n this.moveFocusInside(open && regainFocus);\n return;\n }\n this.isCollapsedInternal = !open;\n if (open) {\n this.isHidden.set(false);\n }\n setTimeout(() => this.doOpenClose(open));\n }\n\n private doOpenClose(open: boolean): void {\n this.moveFocusInside(open);\n this.isCollapsed.set(!open);\n this.collapsed.set(this.isCollapsed());\n if (this.isCollapsedInternal) {\n this.closed.emit();\n }\n this.sendResize();\n }\n\n private moveFocusInside(open: boolean): void {\n if (\n open &&\n !this.document.activeElement?.parentElement?.classList.contains(\n 'side-panel-collapse-toggle'\n ) &&\n !this.document.activeElement?.classList.contains('side-panel-collapse-toggle')\n ) {\n // moves the keyboard focus inside the panel so that the next tab is somewhere useful\n this.panelElement().nativeElement.focus();\n queueMicrotask(() => this.panelElement().nativeElement.blur());\n }\n }\n}\n","@if (showBackdrop()) {\n <div class=\"modal-backdrop\" animate.leave=\"backdrop-leave\" (click)=\"toggleSidePanel()\"></div>\n}\n<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","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport {\n booleanAttribute,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n OnInit,\n output,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport {\n elementCancel,\n elementDoubleLeft,\n elementDoubleRight,\n elementExport,\n elementPinch,\n elementZoom\n} from '@siemens/element-icons';\nimport { SiAccordionHCollapseService } from '@siemens/element-ng/accordion';\nimport { MenuItem as MenuItemLegacy } from '@siemens/element-ng/common';\nimport {\n ContentActionBarMainItem,\n SiContentActionBarComponent\n} from '@siemens/element-ng/content-action-bar';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiLinkDirective } from '@siemens/element-ng/link';\nimport { MenuItem } from '@siemens/element-ng/menu';\nimport { BOOTSTRAP_BREAKPOINTS } from '@siemens/element-ng/resize-observer';\nimport { SiSearchBarComponent } from '@siemens/element-ng/search-bar';\nimport { SiTooltipDirective } from '@siemens/element-ng/tooltip';\nimport { SiTranslatePipe, t, TranslatableString } from '@siemens/element-translate-ng/translate';\nimport { timer } from 'rxjs';\n\nimport { SiSidePanelService } from './si-side-panel.service';\nimport { SidePanelDisplayMode, SidePanelNavigateConfig } from './side-panel.model';\n\n/**\n * An extension of MenuItem to support combined icons.\n *\n * @deprecated Use the {@link SiSidePanelActionsComponent} instead:\n *\n * ```html\n * <si-side-panel-content>\n * <si-side-panel-actions>\n * <button\n * type=\"button\"\n * si-side-panel-action\n * icon=\"element-alarm-background-filled\"\n * iconColor=\"status-danger\"\n * stackedIcon=\"element-alarm-tick\"\n * stackedIconColor=\"text-body\"\n * (click)=\"action()\"\n * >\n * Action\n * </button>\n * </si-side-panel-actions>\n * </si-side-panel-content>\n * ```\n */\nexport interface StatusItem extends MenuItemLegacy {\n overlayIcon?: string;\n}\n\n@Component({\n selector: 'si-side-panel-content',\n imports: [\n SiContentActionBarComponent,\n SiIconComponent,\n RouterLink,\n SiSearchBarComponent,\n SiTranslatePipe,\n SiTooltipDirective,\n SiLinkDirective\n ],\n templateUrl: './si-side-panel-content.component.html',\n styleUrl: './si-side-panel-content.component.scss',\n providers: [SiAccordionHCollapseService],\n host: {\n '[class.collapsed]': 'isCollapsed()',\n '[class.expanded]': 'isExpanded()',\n '[class.enable-mobile]': 'enableMobile()',\n '[class.rpanel-fullscreen-overlay]': 'isFullscreen()',\n '[id]': 'panelContentId'\n }\n})\nexport class SiSidePanelContentComponent implements OnInit {\n private static idCounter = 0;\n protected readonly panelContentId = `__si-side-panel-content-${SiSidePanelContentComponent.idCounter++}`;\n /**\n * @deprecated This input is no longer used. The collapsible state is managed by the SiSidePanelService.\n * This input will be removed in a future major version.\n * @defaultValue undefined\n */\n readonly collapsibleInput = input(undefined, {\n // eslint-disable-next-line @angular-eslint/no-input-rename\n alias: 'collapsible',\n transform: booleanAttribute\n });\n /**\n * Header of side panel\n *\n * @defaultValue ''\n */\n readonly heading = input<TranslatableString>('');\n\n /**\n * Input list of primary action items\n *\n * @defaultValue []\n */\n readonly primaryActions = input<(MenuItemLegacy | ContentActionBarMainItem)[]>([]);\n\n /**\n * Input list of secondary action items.\n *\n * @defaultValue []\n */\n readonly secondaryActions = input<(MenuItemLegacy | MenuItem)[]>([]);\n\n /**\n * Status icons/actions\n *\n * @deprecated Use the {@link SiSidePanelActionsComponent} instead:\n *\n * ```html\n * <si-side-panel-content>\n * <si-side-panel-actions>\n * <button\n * type=\"button\"\n * si-side-panel-action\n * icon=\"element-alarm-background-filled\"\n * iconColor=\"status-danger\"\n * stackedIcon=\"element-alarm-tick\"\n * stackedIconColor=\"text-body\"\n * (click)=\"action()\"\n * >\n * Action\n * </button>\n * </si-side-panel-actions>\n * </si-side-panel-content>\n * ```\n *\n * @defaultValue []\n */\n readonly statusActions = input<StatusItem[]>([]);\n\n /**\n * Toggles search bar\n *\n * @defaultValue false\n */\n readonly searchable = input(false, { transform: booleanAttribute });\n\n /**\n * Placeholder text for search\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_SIDE_PANEL.SEARCH_PLACEHOLDER:Search...`)\n * ```\n */\n readonly searchPlaceholder = input(\n t(() => $localize`:@@SI_SIDE_PANEL.SEARCH_PLACEHOLDER:Search...`)\n );\n\n /**\n * Aria label for close button. Needed for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_SIDE_PANEL.CLOSE:Close`)\n * ```\n */\n readonly closeButtonLabel = input(t(() => $localize`:@@SI_SIDE_PANEL.CLOSE:Close`));\n\n /**\n * Toggle icon aria-label, required for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_SIDE_PANEL.TOGGLE:Toggle`)\n * ```\n */\n readonly toggleItemLabel = input(t(() => $localize`:@@SI_SIDE_PANEL.TOGGLE:Toggle`));\n\n /**\n * Enter fullscreen aria-label, required for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_SIDE_PANEL.ENTER_FULLSCREEN:Enter fullscreen`)\n * ```\n */\n readonly enterFullscreenLabel = input(\n t(() => $localize`:@@SI_SIDE_PANEL.ENTER_FULLSCREEN:Enter fullscreen`)\n );\n\n /**\n * Exit fullscreen aria-label, required for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_SIDE_PANEL.EXIT_FULLSCREEN:Exit fullscreen`)\n * ```\n */\n readonly exitFullscreenLabel = input(\n t(() => $localize`:@@SI_SIDE_PANEL.EXIT_FULLSCREEN:Exit fullscreen`)\n );\n\n /**\n * Show a badge on the mobile drawer indicating a new alert or notification\n *\n * @defaultValue false\n */\n readonly showMobileDrawerBadge = input(false, { transform: booleanAttribute });\n\n /**\n * Display mode for side panel - enables navigate or overlay functionality\n */\n readonly displayMode = input<SidePanelDisplayMode>();\n\n /**\n * Configuration for navigate mode\n */\n readonly navigateConfig = input<SidePanelNavigateConfig>();\n\n /**\n * Output for search bar input\n */\n readonly searchEvent = output<string>();\n\n protected readonly activatedRoute = inject(ActivatedRoute, { optional: true });\n protected readonly service = inject(SiSidePanelService);\n protected readonly isCollapsed = signal(false);\n protected readonly isExpanded = signal(true);\n protected readonly isFullscreen = signal(false);\n protected readonly enableMobile = computed(() => this.service?.enableMobile() ?? false);\n protected readonly collapsible = computed(() => {\n return this.collapsibleInput() ?? this.service?.collapsible() ?? false;\n });\n protected readonly mobileSize = signal(false);\n protected readonly focusable = computed(\n () => !this.mobileSize() || !this.enableMobile() || !this.isCollapsed()\n );\n protected readonly icons = addIcons({\n elementCancel,\n elementDoubleLeft,\n elementDoubleRight,\n elementExport,\n elementPinch,\n elementZoom\n });\n /**\n * The $rpanel-transition-duration in the style is 0.5 seconds.\n * For the animation we need to wait until the resize is done.\n */\n private readonly resizeAnimationDelay = 500;\n private readonly destroyRef = inject(DestroyRef);\n private readonly breakpointObserver = inject(BreakpointObserver);\n\n private expandedTimeout: any;\n\n constructor() {\n const accordionHcollapse = inject(SiAccordionHCollapseService);\n\n this.service.isFullscreen$.pipe(takeUntilDestroyed()).subscribe(fullscreen => {\n this.isFullscreen.set(fullscreen);\n });\n\n this.service.isOpen$.pipe(takeUntilDestroyed()).subscribe(state => {\n this.isCollapsed.set(!state);\n clearTimeout(this.expandedTimeout);\n this.expandedTimeout = undefined;\n if (!state) {\n this.isExpanded.set(false);\n } else {\n this.expandedTimeout = setTimeout(() => {\n this.isExpanded.set(true);\n }, this.resizeAnimationDelay / 2);\n }\n });\n\n effect(() => {\n if (this.collapsible()) {\n accordionHcollapse.hcollapsed.set(this.isCollapsed());\n }\n });\n\n effect(() => {\n if (this.isCollapsed() && !this.service.isTemporaryOpen() && this.isFullscreen()) {\n timer(this.resizeAnimationDelay)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.service.setFullscreen(false);\n });\n }\n });\n\n accordionHcollapse.open$.pipe(takeUntilDestroyed()).subscribe(() => this.service.open());\n }\n\n ngOnInit(): void {\n this.breakpointObserver\n .observe('(max-width: ' + BOOTSTRAP_BREAKPOINTS.smMinimum + 'px)')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(({ matches }) => {\n this.mobileSize.set(matches);\n });\n }\n\n /**\n * Toggle fullscreen overlay mode\n */\n toggleFullscreen(): void {\n if (this.isCollapsed() && !this.service.isTemporaryOpen()) {\n return;\n }\n this.service.toggleFullscreen();\n }\n\n protected toggleSidePanel(event?: MouseEvent): void {\n if (event?.detail !== 0) {\n // Blur except if triggered by keyboard\n (document?.activeElement as HTMLElement)?.blur();\n }\n if (this.service.isTemporaryOpen()) {\n this.service.hideTemporaryContent();\n } else {\n this.service.toggle();\n }\n }\n}\n","<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-icon btn-tertiary-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]=\"icons.elementExport\" />\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-icon btn-tertiary-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]=\"icons.elementExport\" />\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-icon btn-tertiary-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() ? icons.elementPinch : icons.elementZoom\" />\n </button>\n }\n <button\n type=\"button\"\n class=\"close-button btn btn-icon btn-tertiary-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-icon btn-tertiary-ghost mx-4\"\n [attr.aria-label]=\"toggleItemLabel() | translate\"\n [attr.aria-expanded]=\"!isCollapsed() || service.isTemporaryOpen()\"\n [attr.aria-controls]=\"panelContentId\"\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 placement=\"start\"\n [attr.aria-label]=\"!isCollapsed() ? '' : (dp.title | translate)\"\n [siTooltip]=\"(dp.title | translate) || ''\"\n [isDisabled]=\"!isCollapsed()\"\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 si-caption\">{{ 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 <ng-content select=\"si-side-panel-actions\" />\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","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { SiIconComponent } from '@siemens/element-ng/icon';\n\n/**\n * Creates an action for the side-panel.\n * This action will remain visible if the side-panel is collapsed.\n *\n * @example\n * ```html\n * <si-side-panel-content>\n * <si-side-panel-actions>\n * <button\n * type=\"button\"\n * si-side-panel-action\n * icon=\"element-alarm-background-filled\"\n * iconColor=\"status-danger\"\n * stackedIcon=\"element-alarm-tick\"\n * stackedIconColor=\"text-body\"\n * (click)=\"action()\"\n * >\n * Action\n * </button>\n * </si-side-panel-actions>\n * </si-side-panel-content>\n * ```\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[si-side-panel-action], a[si-side-panel-action]',\n imports: [SiIconComponent],\n template: `\n @if (disabled()) {\n <div class=\"icon dot text-muted text-center\">&bull;</div>\n } @else {\n <span class=\"icon icon-stack\">\n <si-icon [class]=\"iconColor()\" [icon]=\"icon()\" />\n @if (stackedIcon(); as stackedIcon) {\n <si-icon [class]=\"stackedIconColor()\" [icon]=\"stackedIcon\" />\n }\n </span>\n <span class=\"ms-2 auto-hide si-caption text-start\">\n <ng-content />\n </span>\n }\n `,\n styleUrl: './si-side-panel-action.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'focus-inside'\n }\n})\nexport class SiSidePanelActionComponent {\n /** Icon name for the main icon. */\n readonly icon = input.required<string>();\n\n /** CSS color class for the main icon (e.g. `'status-warning'`). */\n readonly iconColor = input<string>();\n\n /** Optional stacked icon name displayed on top of the main icon. */\n readonly stackedIcon = input<string>();\n\n /** CSS color class for the stacked icon (e.g. `'text-body'`). */\n readonly stackedIconColor = input<string>();\n\n /**\n * When disabled, renders a dot separator instead of the icon and label.\n *\n * @defaultValue false\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n/**\n * Creates an actions container for the side-panel.\n * This action will remain visible if the side-panel is collapsed.\n *\n * @example\n * ```html\n * <si-side-panel-content>\n * <si-side-panel-actions>\n * <button\n * type=\"button\"\n * si-side-panel-action\n * icon=\"element-alarm-background-filled\"\n * iconColor=\"status-danger\"\n * stackedIcon=\"element-alarm-tick\"\n * stackedIconColor=\"text-body\"\n * (click)=\"action()\"\n * >\n * Action\n * </button>\n * </si-side-panel-actions>\n * </si-side-panel-content>\n * ```\n */\n@Component({\n selector: 'si-side-panel-actions',\n template: '<ng-content />',\n styleUrl: './si-side-panel-actions.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiSidePanelActionsComponent {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiSidePanelActionComponent } from './si-side-panel-action.component';\nimport { SiSidePanelActionsComponent } from './si-side-panel-actions.component';\nimport { SiSidePanelContentComponent } from './si-side-panel-content.component';\nimport { SiSidePanelComponent } from './si-side-panel.component';\n\n@NgModule({\n imports: [\n SiSidePanelComponent,\n SiSidePanelContentComponent,\n SiSidePanelActionsComponent,\n SiSidePanelActionComponent\n ],\n exports: [\n SiSidePanelComponent,\n SiSidePanelContentComponent,\n SiSidePanelActionsComponent,\n SiSidePanelActionComponent\n ]\n})\nexport class SiSidePanelModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\n\nimport { NavigationExtras } from '@angular/router';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\n/**\n * Side panel mode options.\n * - scroll: pushes content when side panel opens/closes,\n * - over: Opens as an overlay on existing content. Just like modal.\n */\nexport type SidePanelMode = 'scroll' | 'over';\n\n/**\n * Side panel size options.\n * - regular: 390px,\n * - wide: 500px,\n * - extended: responsive width that adapts to screen size. Full width on small/medium screens,\n * scales from 480px to 912px (max) on larger screens for optimal content display\n */\nexport type SidePanelSize = 'regular' | 'wide' | 'extended';\n\n/**\n * Side panel display mode options.\n * - navigate: allows navigation to dedicated page\n * - overlay: allows full-screen overlay toggle\n */\nexport type SidePanelDisplayMode = 'navigate' | 'overlay';\n\n/**\n * Interface representing a router link item in the side panel.\n */\nexport interface SidePanelNavigateRouterLink {\n type: 'router-link';\n /** Label that is shown to the user. */\n label: TranslatableString;\n /** Link for the angular router. Accepts the same values as {@link RouterLink}. */\n routerLink: string | any[];\n /** Navigation extras that are passed to the {@link RouterLink}. */\n extras?: NavigationExtras;\n}\n\n/**\n * Interface representing a link item in the side panel.\n */\nexport interface SidePanelNavigateLink {\n type: 'link';\n /** Label that is shown to the user. */\n label: TranslatableString;\n /** The href property of the anchor. */\n href: string;\n /** The target property of the anchor. */\n target?: string;\n}\n\n/**\n * Configuration for side panel navigation.\n */\nexport type SidePanelNavigateConfig = SidePanelNavigateRouterLink | SidePanelNavigateLink;\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-side-panel.service';\nexport * from './si-side-panel.component';\nexport * from './si-side-panel-content.component';\nexport * from './si-side-panel.module';\nexport * from './si-side-panel-actions.component';\nexport * from './si-side-panel-action.component';\nexport * from './side-panel.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DOCUMENT"],"mappings":";;;;;;;;;;;;;;;;;;;;MAYa,kBAAkB,CAAA;AACrB,IAAA,cAAc,GAAG,IAAI,eAAe,CAA0B,SAAS,CAAC;;AAEvE,IAAA,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAE9C,IAAA,WAAW,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AACzD;;;;AAIG;AACM,IAAA,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;AAE1C,IAAA,kBAAkB,GAAG,IAAI,eAAe,CAA0B,SAAS,CAAC;;AAE3E,IAAA,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AAEtD,IAAA,iBAAiB;;AAEhB,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;;AAG5B,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,uDAAC;AAE5B,IAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC/D;;AAEG;AACM,IAAA,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;;IAGtD,eAAe,GAAG,CAAC;AACnB,IAAA,oBAAoB;AACX,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3B,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;;AAGnE,IAAA,mBAAmB,CAAC,MAA+B,EAAA;AACjD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;IAClC;;IAGA,IAAI,GAAA;QACF,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAC/B;QACF;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;;IAGA,MAAM,GAAA;QACJ,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IAChD;;IAGA,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK;IAC/B;;IAGA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;IAC5D;;AAGA,IAAA,aAAa,CAAC,UAAmB,EAAA;AAC/B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;IACzC;;IAGA,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK;IACrC;AAEA;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK;IACxC;;AAGA,IAAA,oBAAoB,CAAC,MAA+B,EAAA;QAClD,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;QAEpC,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,OAAO,EAAE;AACtC,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;QAC9C;AACA,QAAA,OAAO,KAAK;IACd;;IAGA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;AAC3B,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB;AAClC,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;YAClC,GAAG,CAAC,IAAI,EAAE;YACV,GAAG,CAAC,QAAQ,EAAE;QAChB;AACA,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;IACH,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ;YAC7D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;QAC9C;QACA,IAAI,CAAC,eAAe,EAAE;IACxB;AAEA;;AAEG;IACH,qBAAqB,GAAA;QACnB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,KAAK,CAAC,EAAE;YACjD;QACF;QAEA,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,CAAC,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;AACzE,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,oBAAoB;AAC7D,YAAA,IAAI,CAAC,oBAAoB,GAAG,SAAS;QACvC;IACF;uGA/IW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA;;2FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACXD;;;AAGG;MAkEU,oBAAoB,CAAA;AAC/B;;AAEG;AACK,IAAA,OAAgB,WAAW,GAAG,IAAI;AAE1C;;AAEG;IACM,WAAW,GAAG,KAAK,CAAC,KAAK,wDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEpE;;AAEG;IACM,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAW;AAErC;;;;;AAKG;AACM,IAAA,IAAI,GAAG,KAAK,CAAgB,MAAM,gDAAC;AAE5C;;;;AAIG;AACM,IAAA,IAAI,GAAG,KAAK,CAAgB,SAAS,gDAAC;AAE/C;;;;;;;AAOG;AACM,IAAA,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,8BAAA,CAAgC,CAAC,2DAAC;AAEpF;;;;;;;AAOG;IACM,WAAW,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAe;AAE3C;;;;AAIG;IACM,YAAY,GAAG,KAAK,CAAC,KAAK,yDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAErE;;;;;AAKG;IACM,eAAe,GAAG,KAAK,CAAC,KAAK,4DAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExE;;AAEG;IACM,MAAM,GAAG,MAAM,EAAE;AAE1B;;AAEG;IACM,aAAa,GAAG,MAAM,EAAqB;AAEjC,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,wDAAC;AACvD,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC5C,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE;AAC1B,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,EAAE;AAC5B,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AAC7C,gBAAA,OAAO,IAAI;YACb;YACA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,UAAU,CAAC,EAAE;AACzE,gBAAA,OAAO,IAAI;YACb;QACF;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,sDAAC;IACiB,YAAY,GAAG,QAAQ,CACxC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAC1E;AACkB,IAAA,IAAI,GAAG,MAAM,CAAC,KAAK,gDAAC;AACpB,IAAA,IAAI,GAAG,MAAM,CAAC,KAAK,gDAAC;AACpB,IAAA,IAAI,GAAG,MAAM,CAAC,IAAI,gDAAC;AACnB,IAAA,IAAI,GAAG,MAAM,CAAC,KAAK,gDAAC;AACpB,IAAA,IAAI,GAAG,MAAM,CAAC,KAAK,gDAAC;AACpB,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,iDAAC;AACrB,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,kDAAC;AACtB,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,uDAAC;AAC3B,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,iDAAC;AACrB,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,oDAAC;AACxB,IAAA,mBAAmB,GAAG,MAAM,CAAC,KAAK,+DAAC;AACnC,IAAA,eAAe,GAAG,MAAM,CAAC,KAAK,2DAAC;AAEjC,IAAA,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAa,WAAW,CAAC;AAC1D,IAAA,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAa,SAAS,CAAC;AAC1D,IAAA,YAAY,GAAG,SAAS,CAAC,QAAQ,CAChD,cAAc,EACd;AACE,QAAA,IAAI,EAAE;AACP,KAAA,CACF;AACgB,IAAA,eAAe,GAAG,SAAS,CAAC,QAAQ,CACnD,iBAAiB,EACjB;AACE,QAAA,IAAI,EAAE;AACP,KAAA,CACF;AAED;;;AAGG;IACc,gBAAgB,GAAG,GAAG;AAC/B,IAAA,WAAW,GAAG,IAAI,OAAO,EAAQ;IACjC,gBAAgB,GAAG,KAAK;IACxB,yBAAyB,GAAsB,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;AACtE,IAAA,mBAAmB,GAAG,KAAK,CAAC;IACnB,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAClD,IAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5B,IAAA,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC9C,IAAA,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACpC,IAAA,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACjC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAACA,UAAQ,CAAC;AAE5C,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,IAAG;AAC1F,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC;AAC1C,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC;AACF,iBAAA,YAAY;iBACZ,IAAI,CAAC,kBAAkB,EAAE,EAAE,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;iBAC9D,SAAS,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;gBAC7B,IAAI,CAAC,iBAAiB,EAAE;AACxB,gBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC;gBACjC,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACnD,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBACzB;AACF,YAAA,CAAC,CAAC;QACN;QAEA,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,gBAAA,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE;YACtC;iBAAO;AACL,gBAAA,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE;YACtC;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,OAA4B,EAAA;AACtC,QAAA,IAAI,OAAO,CAAC,SAAS,EAAE;AACrB,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACtB;iBAAO;AACL,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YACrB;QACF;AAEA,QAAA,IAAI,OAAO,CAAC,YAAY,EAAE;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACpD;AAEA,QAAA,IAAI,OAAO,CAAC,WAAW,EAAE;AACvB,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAClD;IACF;IAEA,QAAQ,GAAA;;AAEN,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AAC5D,QAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;AACpC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAEhD,QAAA,IAAI,CAAC;aACF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI;AAC7C,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,GAAG,IAAG;YACf,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC;AAC1C,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;;gBAEjB,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBACtB,CAAC,EAAE,GAAG,CAAC;YACT;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC1B,IAAI,CAAC,iBAAiB,EAAE;YAC1B;AACF,QAAA,CAAC,CAAC;QAEJ,IAAI,CAAC,OAAO,CAAC;AACV,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAElD,IAAI,CAAC,OAAO,CAAC;AACV,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAEtD,IAAI,CAAC,OAAO,CAAC;AACV,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChD;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE;IACtC;AACA;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACtB,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACvB;aAAO;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;QACtB;IACF;IAEQ,iBAAiB,GAAA;AACvB,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE;QACrD,IACE,iBAAiB,CAAC,KAAK,KAAK,IAAI,CAAC,yBAAyB,CAAC,KAAK;YAChE,iBAAiB,CAAC,MAAM,KAAK,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAClE;AACA,YAAA,IAAI,CAAC,yBAAyB,GAAG,iBAAiB;AAClD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAC5C;IACF;IAEQ,oBAAoB,GAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;YAC5C,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;QAChC;QACA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE;AACxE,QAAA,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;IACnD;IAEQ,cAAc,CAAC,KAAa,EAAE,MAAc,EAAA;AAClD,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;;YAErB;QACF;QACA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,qBAAqB;QAE/D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC;AAC5C,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC,SAAS,IAAI,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC;AAC9E,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC,SAAS,IAAI,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC;AAC9E,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC,SAAS,IAAI,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC;AAC9E,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC,SAAS,IAAI,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC;AAC/E,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC,UAAU,IAAI,KAAK,GAAG,oBAAoB,CAAC,WAAW,CAAC;QAC3F,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,oBAAoB,CAAC,WAAW,CAAC;IAC5D;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,KAAK,GAAG,EAAE;AAChF,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QACzB;IACF;AAEQ,IAAA,aAAa,CAAC,MAAoB,EAAA;AACxC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;QACxC,YAAY,CAAC,MAAM,EAAE;QACrB,IAAI,MAAM,EAAE;AACV,YAAA,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;IAC3B;AAEQ,IAAA,iBAAiB,CAAC,MAA+B,EAAA;AACvD,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;QAC9C,eAAe,CAAC,MAAM,EAAE;QACxB,IAAI,MAAM,EAAE;AACV,YAAA,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9B,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;QAC5B;AAAO,aAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AACjC,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC;QAC7C;IACF;AAEQ,IAAA,SAAS,CAAC,IAAa,EAAE,WAAW,GAAG,KAAK,EAAA;AAClD,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,mBAAmB,EAAE;AACrC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,WAAW,CAAC;YACzC;QACF;AACA,QAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI;QAChC,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QAC1B;QACA,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC1C;AAEQ,IAAA,WAAW,CAAC,IAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACtC,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;QACpB;QACA,IAAI,CAAC,UAAU,EAAE;IACnB;AAEQ,IAAA,eAAe,CAAC,IAAa,EAAA;AACnC,QAAA,IACE,IAAI;AACJ,YAAA,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,CAAC,QAAQ,CAC7D,4BAA4B,CAC7B;AACD,YAAA,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,QAAQ,CAAC,4BAA4B,CAAC,EAC9E;;YAEA,IAAI,CAAC,YAAY,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE;AACzC,YAAA,cAAc,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAChE;IACF;uGAjVW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,+7EAkHrB,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAMf,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7L3B,4mBAeA,85FD4BY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FA0BX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA5BhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,OAAA,EAChB,CAAC,YAAY,CAAC,EAAA,IAAA,EAGjB;AACJ,wBAAA,KAAK,EAAE,iBAAiB;AACxB,wBAAA,uBAAuB,EAAE,gBAAgB;AACzC,wBAAA,8BAA8B,EAAE,2BAA2B;AAC3D,wBAAA,2BAA2B,EAAE,wBAAwB;AACrD,wBAAA,+BAA+B,EAAE,4BAA4B;AAC7D,wBAAA,2BAA2B,EAAE,cAAc;AAC3C,wBAAA,6BAA6B,EAAE,gBAAgB;AAC/C,wBAAA,0BAA0B,EAAE,eAAe;AAC3C,wBAAA,eAAe,EAAE,SAAS;AAC1B,wBAAA,qBAAqB,EAAE,0CAA0C;AACjE,wBAAA,0BAA0B,EAAE,yCAAyC;AACrE,wBAAA,uBAAuB,EAAE,YAAY;AACrC,wBAAA,mCAAmC,EAAE,uBAAuB;AAC5D,wBAAA,0BAA0B,EAAE,QAAQ;AACpC,wBAAA,0BAA0B,EAAE,QAAQ;AACpC,wBAAA,0BAA0B,EAAE,QAAQ;AACpC,wBAAA,0BAA0B,EAAE,QAAQ;AACpC,wBAAA,0BAA0B,EAAE,QAAQ;AACpC,wBAAA,2BAA2B,EAAE,SAAS;AACtC,wBAAA,4BAA4B,EAAE;AAC/B,qBAAA,EAAA,QAAA,EAAA,4mBAAA,EAAA,MAAA,EAAA,CAAA,u2FAAA,CAAA,EAAA;AA+G8D,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACT,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAExE,cAAc,EAAA,EAAA,GACd;AACE,4BAAA,IAAI,EAAE;AACP,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAGD,iBAAiB,EAAA,EAAA,GACjB;AACE,4BAAA,IAAI,EAAE;AACP,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE9LL;;;AAGG;MA2FU,2BAA2B,CAAA;AAC9B,IAAA,OAAO,SAAS,GAAG,CAAC;AACT,IAAA,cAAc,GAAG,CAAA,wBAAA,EAA2B,2BAA2B,CAAC,SAAS,EAAE,EAAE;AACxG;;;;AAIG;IACM,gBAAgB,GAAG,KAAK,CAAC,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,GAAA,EAAA,CAAA;;AAEzC,QAAA,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AACF;;;;AAIG;AACM,IAAA,OAAO,GAAG,KAAK,CAAqB,EAAE,mDAAC;AAEhD;;;;AAIG;AACM,IAAA,cAAc,GAAG,KAAK,CAAgD,EAAE,0DAAC;AAElF;;;;AAIG;AACM,IAAA,gBAAgB,GAAG,KAAK,CAAgC,EAAE,4DAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACM,IAAA,aAAa,GAAG,KAAK,CAAe,EAAE,yDAAC;AAEhD;;;;AAIG;IACM,UAAU,GAAG,KAAK,CAAC,KAAK,uDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEnE;;;;;;;AAOG;AACM,IAAA,iBAAiB,GAAG,KAAK,CAChC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,6CAAA,CAA+C,CAAC,6DAClE;AAED;;;;;;;AAOG;AACM,IAAA,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,4BAAA,CAA8B,CAAC,4DAAC;AAEnF;;;;;;;AAOG;AACM,IAAA,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,8BAAA,CAAgC,CAAC,2DAAC;AAEpF;;;;;;;AAOG;AACM,IAAA,oBAAoB,GAAG,KAAK,CACnC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,kDAAA,CAAoD,CAAC,gEACvE;AAED;;;;;;;AAOG;AACM,IAAA,mBAAmB,GAAG,KAAK,CAClC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,gDAAA,CAAkD,CAAC,+DACrE;AAED;;;;AAIG;IACM,qBAAqB,GAAG,KAAK,CAAC,KAAK,kEAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE9E;;AAEG;IACM,WAAW,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAwB;AAEpD;;AAEG;IACM,cAAc,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA2B;AAE1D;;AAEG;IACM,WAAW,GAAG,MAAM,EAAU;IAEpB,cAAc,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC3D,IAAA,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACpC,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,uDAAC;AAC3B,IAAA,UAAU,GAAG,MAAM,CAAC,IAAI,sDAAC;AACzB,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;AAC5B,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,KAAK,wDAAC;AACpE,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,KAAK;AACxE,IAAA,CAAC,uDAAC;AACiB,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;IAC1B,SAAS,GAAG,QAAQ,CACrC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACxE;IACkB,KAAK,GAAG,QAAQ,CAAC;QAClC,aAAa;QACb,iBAAiB;QACjB,kBAAkB;QAClB,aAAa;QACb,YAAY;QACZ;AACD,KAAA,CAAC;AACF;;;AAGG;IACc,oBAAoB,GAAG,GAAG;AAC1B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAExD,IAAA,eAAe;AAEvB,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,2BAA2B,CAAC;AAE9D,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU,IAAG;AAC3E,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;AACnC,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;YAChE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AAC5B,YAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AAClC,YAAA,IAAI,CAAC,eAAe,GAAG,SAAS;YAChC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5B;iBAAO;AACL,gBAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,MAAK;AACrC,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,gBAAA,CAAC,EAAE,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;YACnC;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;gBACtB,kBAAkB,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACvD;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AAChF,gBAAA,KAAK,CAAC,IAAI,CAAC,oBAAoB;AAC5B,qBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;qBACxC,SAAS,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC;AACnC,gBAAA,CAAC,CAAC;YACN;AACF,QAAA,CAAC,CAAC;QAEF,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC1F;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC;aACF,OAAO,CAAC,cAAc,GAAG,qBAAqB,CAAC,SAAS,GAAG,KAAK;AAChE,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,KAAI;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;AAC9B,QAAA,CAAC,CAAC;IACN;AAEA;;AAEG;IACH,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE;YACzD;QACF;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;IACjC;AAEU,IAAA,eAAe,CAAC,KAAkB,EAAA;AAC1C,QAAA,IAAI,KAAK,EAAE,MAAM,KAAK,CAAC,EAAE;;AAEtB,YAAA,QAAQ,EAAE,aAA6B,EAAE,IAAI,EAAE;QAClD;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE;AAClC,YAAA,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE;QACrC;aAAO;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACvB;IACF;uGArPW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,23EAT3B,CAAC,2BAA2B,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrF1C,wiLA8IA,24EDnEI,2BAA2B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,6BAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,UAAU,oOACV,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEpB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,eAAe,uMAFf,eAAe,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAeN,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAtBvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,OAAA,EACxB;wBACP,2BAA2B;wBAC3B,eAAe;wBACf,UAAU;wBACV,oBAAoB;wBACpB,eAAe;wBACf,kBAAkB;wBAClB;qBACD,EAAA,SAAA,EAGU,CAAC,2BAA2B,CAAC,EAAA,IAAA,EAClC;AACJ,wBAAA,mBAAmB,EAAE,eAAe;AACpC,wBAAA,kBAAkB,EAAE,cAAc;AAClC,wBAAA,uBAAuB,EAAE,gBAAgB;AACzC,wBAAA,mCAAmC,EAAE,gBAAgB;AACrD,wBAAA,MAAM,EAAE;AACT,qBAAA,EAAA,QAAA,EAAA,wiLAAA,EAAA,MAAA,EAAA,CAAA,m1EAAA,CAAA,EAAA;;;AE5FH;;;AAGG;AAIH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MA0BU,0BAA0B,CAAA;;AAE5B,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAU;;IAG/B,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;;IAG3B,WAAW,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;;IAG7B,gBAAgB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAE3C;;;;AAIG;IACM,QAAQ,GAAG,KAAK,CAAC,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;uGAlBtD,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uDAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArB3B;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yyBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAfS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAsBd,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAzBtC,SAAS;AAEE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uDAAuD,EAAA,OAAA,EACxD,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;GAcT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE;AACR,qBAAA,EAAA,MAAA,EAAA,CAAA,yyBAAA,CAAA,EAAA;;;ACrDH;;;AAGG;AAGH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAOU,2BAA2B,CAAA;uGAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,iFAJ5B,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kMAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIf,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBANvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,QAAA,EACvB,gBAAgB,EAAA,eAAA,EAET,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,kMAAA,CAAA,EAAA;;;ACjCjD;;;AAGG;MAsBU,iBAAiB,CAAA;uGAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAZ1B,oBAAoB;YACpB,2BAA2B;YAC3B,2BAA2B;AAC3B,YAAA,0BAA0B,aAG1B,oBAAoB;YACpB,2BAA2B;YAC3B,2BAA2B;YAC3B,0BAA0B,CAAA,EAAA,CAAA;AAGjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAZ1B,oBAAoB;YACpB,2BAA2B;YAE3B,0BAA0B,CAAA,EAAA,CAAA;;2FASjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAd7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,oBAAoB;wBACpB,2BAA2B;wBAC3B,2BAA2B;wBAC3B;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,oBAAoB;wBACpB,2BAA2B;wBAC3B,2BAA2B;wBAC3B;AACD;AACF,iBAAA;;;ACxBD;;;AAGG;;ACHH;;;AAGG;;ACHH;;AAEG;;;;"}
@@ -51,13 +51,13 @@ class SiStatusBarItemComponent {
51
51
  return !!rgb && Math.round((rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000) <= 128;
52
52
  }
53
53
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiStatusBarItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
54
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiStatusBarItemComponent, isStandalone: true, selector: "si-status-bar-item", inputs: { status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: true, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, blink: { classPropertyName: "blink", publicName: "blink", isSignal: true, isRequired: false, transformFunction: null }, valueOnly: { classPropertyName: "valueOnly", publicName: "valueOnly", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { significanceChange: "significanceChange" }, host: { properties: { "class.clickable": "clickable()" } }, viewQueries: [{ propertyName: "bg", first: true, predicate: ["bg"], descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"status-item rounded-2 focus-inside d-flex align-items-center\"\n [class.text-muted]=\"!value()\"\n [class.blink]=\"blink() && value()\"\n [attr.tabindex]=\"clickable() ? '0' : ''\"\n [attr.aria-disabled]=\"!value()\"\n>\n <div\n #bg\n role=\"none\"\n class=\"bg focus-sub-inside\"\n [class]=\"background()\"\n [class.custom-color]=\"color()\"\n [class.contrast-fix]=\"contrastFix()\"\n [class.d-none]=\"!value()\"\n [style.background-color]=\"blink() && color() ? color() : null\"\n ></div>\n @let icon = statusIcon();\n @if (!icon) {\n <div\n class=\"color-bar me-3 mt-1 mb-1\"\n [style.background-color]=\"value() && color() ? color() : null\"\n ></div>\n } @else {\n <span class=\"indicator icon me-4 icon-stack\">\n <si-icon [class]=\"value() ? icon.color : 'indicator-disabled'\" [icon]=\"icon.icon\" />\n <si-icon [class]=\"value() ? icon.stackedColor : 'text-inverse'\" [icon]=\"icon.stacked\" />\n </span>\n }\n <div class=\"overflow-hidden\">\n @if (value() !== undefined) {\n <div class=\"item-value si-h5 text-truncate\">{{ value().toString() | translate }}</div>\n }\n @if (!valueOnly()) {\n <div class=\"item-title text-truncate\">{{ heading() | translate }}</div>\n }\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";:host{position:relative;padding-inline-end:4px;block-size:48px}:host.compact{block-size:36px}:host.compact .status-item{padding-block:4px}:host.compact .item-title{margin-block-start:-2px}:host.clickable:hover .status-item{background-color:var(--element-base-0)!important}:host.clickable:hover .bg{display:none!important}:host ::ng-deep .indicator-disabled{color:var(--element-ui-3)}.status-item{position:relative;isolation:isolate;padding-block:8px;padding-inline:4px 8px;min-inline-size:100px;color:var(--element-text-primary);white-space:nowrap}.status-item>*{pointer-events:none}.bg{position:absolute;inset:0;z-index:-1;border-radius:var(--element-radius-2);pointer-events:none}.bg.custom-color{opacity:.5}.bg.custom-color.contrast-fix{opacity:.25}.item-title,.item-value{position:relative}.item-title:before,.item-value:before{content:\"\\200b\"}.color-bar{align-self:stretch;min-inline-size:4px;border-radius:2px;background:var(--element-ui-4)}.item-title{margin-block-start:2px;line-height:1rem}.item-value{line-height:1}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
54
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiStatusBarItemComponent, isStandalone: true, selector: "si-status-bar-item", inputs: { status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: true, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, blink: { classPropertyName: "blink", publicName: "blink", isSignal: true, isRequired: false, transformFunction: null }, valueOnly: { classPropertyName: "valueOnly", publicName: "valueOnly", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { significanceChange: "significanceChange" }, host: { properties: { "class.clickable": "clickable()" } }, viewQueries: [{ propertyName: "bg", first: true, predicate: ["bg"], descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"status-item rounded-2 focus-inside d-flex align-items-center\"\n [class.text-muted]=\"!value()\"\n [class.blink]=\"blink() && value()\"\n [attr.tabindex]=\"clickable() ? '0' : ''\"\n [attr.aria-disabled]=\"!value()\"\n>\n <div\n #bg\n role=\"none\"\n class=\"bg focus-sub-inside\"\n [class]=\"background()\"\n [class.custom-color]=\"color()\"\n [class.contrast-fix]=\"contrastFix()\"\n [class.d-none]=\"!value()\"\n [style.background-color]=\"blink() && color() ? color() : null\"\n ></div>\n @let icon = statusIcon();\n @if (!icon) {\n <div\n class=\"color-bar me-3 mt-1 mb-1\"\n [style.background-color]=\"value() && color() ? color() : null\"\n ></div>\n } @else {\n <span class=\"indicator icon me-4 icon-stack\">\n <si-icon [class]=\"value() ? icon.color : 'indicator-disabled'\" [icon]=\"icon.icon\" />\n <si-icon [class]=\"value() ? icon.stackedColor : 'text-inverse'\" [icon]=\"icon.stacked\" />\n </span>\n }\n <div class=\"overflow-hidden status-item-content\">\n @if (value() !== undefined) {\n <div class=\"item-value si-h5 text-truncate\">{{ value().toString() | translate }}</div>\n }\n @if (!valueOnly()) {\n <div class=\"item-title text-truncate\">{{ heading() | translate }}</div>\n }\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";:host{position:relative;padding-inline-end:4px}:host.compact .status-item{padding-block:2px}:host.clickable:hover .status-item{background-color:var(--element-base-0)!important}:host.clickable:hover .bg{display:none!important}:host ::ng-deep .indicator-disabled{color:var(--element-ui-3)}.status-item{position:relative;isolation:isolate;padding-block:8px;padding-inline:4px 8px;min-inline-size:var(--__si-status-bar-item-min-width, 7.1429em);color:var(--element-text-primary);white-space:nowrap}.status-item>*{pointer-events:none}.status-item-content{display:flex;flex-direction:column;justify-content:center;block-size:2lh}.bg{position:absolute;inset:0;z-index:-1;border-radius:var(--element-radius-2);pointer-events:none}.bg.custom-color{opacity:.5}.bg.custom-color.contrast-fix{opacity:.25}.item-title,.item-value{position:relative}.item-title:before,.item-value:before{content:\"\\200b\"}.color-bar{align-self:stretch;min-inline-size:4px;border-radius:2px;background:var(--element-ui-4)}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
55
55
  }
56
56
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiStatusBarItemComponent, decorators: [{
57
57
  type: Component,
58
58
  args: [{ selector: 'si-status-bar-item', imports: [SiIconComponent, SiTranslatePipe], host: {
59
59
  '[class.clickable]': 'clickable()'
60
- }, template: "<div\n class=\"status-item rounded-2 focus-inside d-flex align-items-center\"\n [class.text-muted]=\"!value()\"\n [class.blink]=\"blink() && value()\"\n [attr.tabindex]=\"clickable() ? '0' : ''\"\n [attr.aria-disabled]=\"!value()\"\n>\n <div\n #bg\n role=\"none\"\n class=\"bg focus-sub-inside\"\n [class]=\"background()\"\n [class.custom-color]=\"color()\"\n [class.contrast-fix]=\"contrastFix()\"\n [class.d-none]=\"!value()\"\n [style.background-color]=\"blink() && color() ? color() : null\"\n ></div>\n @let icon = statusIcon();\n @if (!icon) {\n <div\n class=\"color-bar me-3 mt-1 mb-1\"\n [style.background-color]=\"value() && color() ? color() : null\"\n ></div>\n } @else {\n <span class=\"indicator icon me-4 icon-stack\">\n <si-icon [class]=\"value() ? icon.color : 'indicator-disabled'\" [icon]=\"icon.icon\" />\n <si-icon [class]=\"value() ? icon.stackedColor : 'text-inverse'\" [icon]=\"icon.stacked\" />\n </span>\n }\n <div class=\"overflow-hidden\">\n @if (value() !== undefined) {\n <div class=\"item-value si-h5 text-truncate\">{{ value().toString() | translate }}</div>\n }\n @if (!valueOnly()) {\n <div class=\"item-title text-truncate\">{{ heading() | translate }}</div>\n }\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";:host{position:relative;padding-inline-end:4px;block-size:48px}:host.compact{block-size:36px}:host.compact .status-item{padding-block:4px}:host.compact .item-title{margin-block-start:-2px}:host.clickable:hover .status-item{background-color:var(--element-base-0)!important}:host.clickable:hover .bg{display:none!important}:host ::ng-deep .indicator-disabled{color:var(--element-ui-3)}.status-item{position:relative;isolation:isolate;padding-block:8px;padding-inline:4px 8px;min-inline-size:100px;color:var(--element-text-primary);white-space:nowrap}.status-item>*{pointer-events:none}.bg{position:absolute;inset:0;z-index:-1;border-radius:var(--element-radius-2);pointer-events:none}.bg.custom-color{opacity:.5}.bg.custom-color.contrast-fix{opacity:.25}.item-title,.item-value{position:relative}.item-title:before,.item-value:before{content:\"\\200b\"}.color-bar{align-self:stretch;min-inline-size:4px;border-radius:2px;background:var(--element-ui-4)}.item-title{margin-block-start:2px;line-height:1rem}.item-value{line-height:1}\n"] }]
60
+ }, template: "<div\n class=\"status-item rounded-2 focus-inside d-flex align-items-center\"\n [class.text-muted]=\"!value()\"\n [class.blink]=\"blink() && value()\"\n [attr.tabindex]=\"clickable() ? '0' : ''\"\n [attr.aria-disabled]=\"!value()\"\n>\n <div\n #bg\n role=\"none\"\n class=\"bg focus-sub-inside\"\n [class]=\"background()\"\n [class.custom-color]=\"color()\"\n [class.contrast-fix]=\"contrastFix()\"\n [class.d-none]=\"!value()\"\n [style.background-color]=\"blink() && color() ? color() : null\"\n ></div>\n @let icon = statusIcon();\n @if (!icon) {\n <div\n class=\"color-bar me-3 mt-1 mb-1\"\n [style.background-color]=\"value() && color() ? color() : null\"\n ></div>\n } @else {\n <span class=\"indicator icon me-4 icon-stack\">\n <si-icon [class]=\"value() ? icon.color : 'indicator-disabled'\" [icon]=\"icon.icon\" />\n <si-icon [class]=\"value() ? icon.stackedColor : 'text-inverse'\" [icon]=\"icon.stacked\" />\n </span>\n }\n <div class=\"overflow-hidden status-item-content\">\n @if (value() !== undefined) {\n <div class=\"item-value si-h5 text-truncate\">{{ value().toString() | translate }}</div>\n }\n @if (!valueOnly()) {\n <div class=\"item-title text-truncate\">{{ heading() | translate }}</div>\n }\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";:host{position:relative;padding-inline-end:4px}:host.compact .status-item{padding-block:2px}:host.clickable:hover .status-item{background-color:var(--element-base-0)!important}:host.clickable:hover .bg{display:none!important}:host ::ng-deep .indicator-disabled{color:var(--element-ui-3)}.status-item{position:relative;isolation:isolate;padding-block:8px;padding-inline:4px 8px;min-inline-size:var(--__si-status-bar-item-min-width, 7.1429em);color:var(--element-text-primary);white-space:nowrap}.status-item>*{pointer-events:none}.status-item-content{display:flex;flex-direction:column;justify-content:center;block-size:2lh}.bg{position:absolute;inset:0;z-index:-1;border-radius:var(--element-radius-2);pointer-events:none}.bg.custom-color{opacity:.5}.bg.custom-color.contrast-fix{opacity:.25}.item-title,.item-value{position:relative}.item-title:before,.item-value:before{content:\"\\200b\"}.color-bar{align-self:stretch;min-inline-size:4px;border-radius:2px;background:var(--element-ui-4)}\n"] }]
61
61
  }], propDecorators: { status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], heading: [{ type: i0.Input, args: [{ isSignal: true, alias: "heading", required: true }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], blink: [{ type: i0.Input, args: [{ isSignal: true, alias: "blink", required: false }] }], valueOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueOnly", required: false }] }], clickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickable", required: false }] }], significanceChange: [{ type: i0.Output, args: ["significanceChange"] }], bg: [{ type: i0.ViewChild, args: ['bg', { isSignal: true }] }] } });
62
62
 
63
63
  /**
@@ -75,12 +75,16 @@ let idCounter = 1;
75
75
  * about important status information.
76
76
  */
77
77
  class SiStatusBarComponent {
78
- static itemMinWidth = 100;
79
- static itemMaxWidth = 152;
78
+ static minNumberOfItems = 2;
79
+ static itemMinWidthEm = 7.1429;
80
+ static itemMaxWidthEm = 10.8;
80
81
  static itemSpacing = 4;
81
- static itemPaddingX = 44; // padding + icon size + icon margin
82
- static itemPaddingXdeprecated = 20; // padding + color bar
83
- static muteButtonWidth = 48;
82
+ static itemPadding = 12; // ps-2 + pe-4
83
+ static itemColorBarWidth = 4;
84
+ static itemColorBarMargin = 6;
85
+ static itemIconWidthEm = 20 / 14;
86
+ static itemIconMargin = 8;
87
+ static mainPadding = 12; // ps-4 + pe-2
84
88
  /**
85
89
  * Array of status bar items.
86
90
  */
@@ -228,24 +232,39 @@ class SiStatusBarComponent {
228
232
  }
229
233
  }
230
234
  resizeHandler() {
235
+ const style = getComputedStyle(this.element.nativeElement);
236
+ const fontSize = parseFloat(style.fontSize);
237
+ const lineHeight = parseFloat(style.lineHeight);
231
238
  const size = this.element.nativeElement.clientWidth;
232
- const muteWidth = this.muteButton() !== undefined ? SiStatusBarComponent.muteButtonWidth : 0;
239
+ const muteWidth = this.getMuteButtonWidth(lineHeight);
233
240
  const customWidth = this.custom().nativeElement.scrollWidth ?? 0;
234
- const minWidth = this.items().length * (SiStatusBarComponent.itemMinWidth + SiStatusBarComponent.itemSpacing) +
241
+ const minWidth = this.items().length *
242
+ (SiStatusBarComponent.itemMinWidthEm * fontSize + SiStatusBarComponent.itemSpacing) +
235
243
  SiStatusBarComponent.itemSpacing +
236
244
  muteWidth +
237
245
  customWidth;
238
246
  if (size < minWidth) {
239
- this.setResponsiveMode(true);
247
+ this.setResponsiveMode(fontSize, true);
240
248
  }
241
249
  else if (this.items().length) {
242
- this.calculateRequiredWidth(muteWidth, customWidth);
250
+ this.calculateRequiredWidth(fontSize, muteWidth, customWidth);
243
251
  }
244
252
  }
245
- setResponsiveMode(responsive) {
253
+ getMuteButtonWidth(lineHeight) {
254
+ if (this.muteButton() === undefined) {
255
+ return 0;
256
+ }
257
+ // button size is line-height + px-4 + ms-5 + me-2
258
+ return lineHeight + 32;
259
+ }
260
+ setResponsiveMode(fontSize, responsive) {
246
261
  if (responsive) {
247
262
  const size = this.element.nativeElement.clientWidth;
248
- this.responsiveMode = Math.max(Math.floor(size / SiStatusBarComponent.itemMaxWidth) - 1, 2);
263
+ const minSize = SiStatusBarComponent.itemMinWidthEm * fontSize * SiStatusBarComponent.minNumberOfItems;
264
+ this.responsiveMode =
265
+ size < minSize
266
+ ? 1
267
+ : Math.max(Math.floor(size / (SiStatusBarComponent.itemMaxWidthEm * fontSize)) - 1, SiStatusBarComponent.minNumberOfItems);
249
268
  }
250
269
  else {
251
270
  this.responsiveMode = 0;
@@ -288,7 +307,7 @@ class SiStatusBarComponent {
288
307
  }
289
308
  this.responsiveItems.set(activeItems);
290
309
  }
291
- calculateRequiredWidth(muteWidth, customWidth) {
310
+ calculateRequiredWidth(fontSize, muteWidth, customWidth) {
292
311
  const keys = [];
293
312
  for (const item of this.items()) {
294
313
  keys.push(item.title, item.value.toString());
@@ -302,17 +321,23 @@ class SiStatusBarComponent {
302
321
  const titleWidth = this.measureService.measureText(translations[item.title]);
303
322
  const valueWidth = this.measureService.measureText(translations[item.value], undefined, { fontWeight: 'bold' });
304
323
  const textWidth = Math.max(titleWidth, valueWidth);
305
- const itemWidth = Math.max(SiStatusBarComponent.itemMinWidth, textWidth +
306
- (item.color
307
- ? SiStatusBarComponent.itemPaddingXdeprecated
308
- : SiStatusBarComponent.itemPaddingX)) + SiStatusBarComponent.itemSpacing;
324
+ const itemWidth = Math.max(SiStatusBarComponent.itemMinWidthEm * fontSize, this.getItemWidth(fontSize, textWidth, item)) + SiStatusBarComponent.itemSpacing;
309
325
  return acc + itemWidth;
310
- }, muteWidth + customWidth + SiStatusBarComponent.itemSpacing);
311
- this.setResponsiveMode(size < requiredWidth);
326
+ }, muteWidth +
327
+ customWidth +
328
+ SiStatusBarComponent.itemSpacing +
329
+ SiStatusBarComponent.mainPadding);
330
+ this.setResponsiveMode(fontSize, size < requiredWidth);
312
331
  });
313
332
  }
333
+ getItemWidth(fontSize, textWidth, item) {
334
+ const indicatorWidth = item.color
335
+ ? SiStatusBarComponent.itemColorBarWidth + SiStatusBarComponent.itemColorBarMargin
336
+ : SiStatusBarComponent.itemIconWidthEm * fontSize + SiStatusBarComponent.itemIconMargin;
337
+ return textWidth + SiStatusBarComponent.itemPadding + indicatorWidth;
338
+ }
314
339
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiStatusBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
315
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiStatusBarComponent, isStandalone: true, selector: "si-status-bar", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, blink: { classPropertyName: "blink", publicName: "blink", isSignal: true, isRequired: false, transformFunction: null }, muteButton: { classPropertyName: "muteButton", publicName: "muteButton", isSignal: true, isRequired: false, transformFunction: null }, muteButtonText: { classPropertyName: "muteButtonText", publicName: "muteButtonText", isSignal: true, isRequired: false, transformFunction: null }, allOkText: { classPropertyName: "allOkText", publicName: "allOkText", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, blinkPulse: { classPropertyName: "blinkPulse", publicName: "blinkPulse", isSignal: true, isRequired: false, transformFunction: null }, expandButtonText: { classPropertyName: "expandButtonText", publicName: "expandButtonText", isSignal: true, isRequired: false, transformFunction: null }, collapseButtonText: { classPropertyName: "collapseButtonText", publicName: "collapseButtonText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { muteToggle: "muteToggle" }, viewQueries: [{ propertyName: "theBar", first: true, predicate: ["thebar"], descendants: true, isSignal: true }, { propertyName: "content", first: true, predicate: ["content"], descendants: true, isSignal: true }, { propertyName: "custom", first: true, predicate: ["custom"], descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"expand-placeholder\"\n [class.expanded]=\"expanded()\"\n [style.height.px]=\"placeholderHeight()\"\n></div>\n<div\n #thebar\n aria-busy=\"true\"\n [class]=\"responsiveMode ? `responsive-${responsiveMode}` : ''\"\n [class.responsive]=\"responsiveMode\"\n [class.expanded]=\"expanded()\"\n [class.compact]=\"responsiveMode || compact()\"\n [class.pulse-off]=\"blinkOnOff() === false\"\n [class.pulse-on]=\"blinkOnOff()\"\n>\n <div\n class=\"status-bar-wrapper rounded-2\"\n [class.elevation-2]=\"expanded()\"\n [class.pe-2]=\"muteButton() !== undefined\"\n >\n @if (responsiveMode) {\n <div class=\"align-items-center overflow-hidden\">\n <div class=\"d-flex flex-fill position-relative\">\n @for (item of responsiveItems(); track $index) {\n <si-status-bar-item\n class=\"bar-item compact\"\n [value]=\"item.value\"\n [heading]=\"item.title\"\n [status]=\"item.status\"\n [color]=\"item.color\"\n [blink]=\"item.blink !== false && blink() && !expanded()\"\n [clickable]=\"!!item.action\"\n [class.mute-padding]=\"item.mutePadding && muteButton() !== undefined\"\n [style.flex-basis.%]=\"responsiveMode ? 100 / responsiveMode : null\"\n [valueOnly]=\"item.isSpecial\"\n (click)=\"onItemClicked(item)\"\n (keydown.enter)=\"onItemClicked(item)\"\n />\n }\n </div>\n @if (muteButton() !== undefined) {\n <div class=\"mobile-mute\">\n <ng-container *ngTemplateOutlet=\"muteButtonTemplate\" />\n </div>\n }\n </div>\n }\n <div\n #content\n class=\"main-content align-items-center overflow-hidden\"\n [style.max-height.px]=\"contentHeight()\"\n >\n @if (responsiveMode) {\n <div class=\"mobile-spacer\"></div>\n }\n <div\n class=\"d-flex flex-fill position-relative\"\n [id]=\"statusId\"\n [class.d-none]=\"responsiveMode && !expanded()\"\n [class.flex-wrap]=\"responsiveMode\"\n >\n @for (item of items(); track $index) {\n <si-status-bar-item\n class=\"bar-item\"\n [class.compact]=\"responsiveMode || compact()\"\n [value]=\"item.value\"\n [heading]=\"item.title\"\n [status]=\"item.status\"\n [color]=\"item.color\"\n [blink]=\"item.blink !== false && blink()\"\n [clickable]=\"!!item.action\"\n [style.flex-basis.%]=\"responsiveMode ? 100 / responsiveMode : null\"\n (significanceChange)=\"significanceChanged()\"\n (click)=\"onItemClicked(item)\"\n (keydown.enter)=\"onItemClicked(item)\"\n />\n }\n </div>\n <div class=\"custom-content bar-item d-flex\">\n <div #custom [class.pb-2]=\"responsiveMode && expanded\" (siResizeObserver)=\"resizeHandler()\">\n <ng-content />\n </div>\n </div>\n @if (muteButton() !== undefined && !responsiveMode) {\n <ng-container *ngTemplateOutlet=\"muteButtonTemplate\" />\n }\n </div>\n </div>\n @if (responsiveMode) {\n <div class=\"d-flex align-items-center justify-content-center\">\n <a\n class=\"collapse-expand text-center p-0 focus-force\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"(expanded() ? collapseButtonText() : expandButtonText()) | translate\"\n [attr.aria-expanded]=\"!!expanded()\"\n [attr.aria-controls]=\"statusId\"\n [class.expanded]=\"expanded() === 2\"\n (keydown.enter)=\"toggleExpand()\"\n (click)=\"toggleExpand()\"\n >\n <si-icon class=\"icon\" [icon]=\"icons.elementDown2\" />\n </a>\n </div>\n }\n</div>\n\n<ng-template #muteButtonTemplate>\n <button\n type=\"button\"\n class=\"bar-item mute-button btn btn-circle btn-tertiary ms-5\"\n [attr.aria-label]=\"muteButtonText() | translate\"\n (click)=\"muteToggle.emit()\"\n >\n <si-icon class=\"icon\" [icon]=\"muteButton() ? icons.elementSoundOn : icons.elementSoundMute\" />\n </button>\n</ng-template>\n", styles: [":host{display:block;position:relative}:host ::ng-deep .blink{transition:color calc(.5s * var(--element-animations-enabled, 1))}:host ::ng-deep .bg{transition:opacity calc(.5s * var(--element-animations-enabled, 1))}.pulse-off ::ng-deep .bg{opacity:.1!important}.status-bar-wrapper{padding-inline:8px;background-color:var(--element-base-1)}.status-bar-wrapper>*{display:flex}.mobile-spacer{margin-block:4px;margin-inline:0;background:var(--element-base-0);block-size:1px}.bar-item{margin-block:8px}.custom-content{margin-inline-start:auto}.clickable{cursor:pointer}.mute-padding{padding-inline-end:44px}.mobile-mute{position:absolute;inset-inline-end:8px}.main-content .mute-button{margin-inline-end:4px}.collapse-expand{background-color:var(--element-base-1);border-radius:0 0 20px 20px;inline-size:40px;cursor:pointer}.collapse-expand.expanded{box-shadow:0 8px 8px var(--element-box-shadow-color-2)}.collapse-expand.expanded si-icon{transform:rotate(180deg)}.collapse-expand si-icon{margin-block-start:0;transition:transform calc(.4s * var(--element-animations-enabled, 1))}.compact .bar-item{margin-block:2px}.responsive si-status-bar-item ::ng-deep .status-item{max-inline-size:unset;position:absolute;inset-block:0;inset-inline:0 4px}.responsive si-status-bar-item.mute-padding ::ng-deep .status-item{inset-inline-end:44px}.responsive.expanded{position:absolute;inset-block-start:0;inset-inline:0;z-index:1028}.responsive .status-bar-wrapper>.main-content{display:block;transition:max-block-size calc(.5s * var(--element-animations-enabled, 1))}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "component", type: SiStatusBarItemComponent, selector: "si-status-bar-item", inputs: ["status", "value", "heading", "color", "blink", "valueOnly", "clickable"], outputs: ["significanceChange"] }, { kind: "directive", type: SiResizeObserverDirective, selector: "[siResizeObserver]", inputs: ["resizeThrottle", "emitInitial"], outputs: ["siResizeObserver"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
340
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiStatusBarComponent, isStandalone: true, selector: "si-status-bar", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, blink: { classPropertyName: "blink", publicName: "blink", isSignal: true, isRequired: false, transformFunction: null }, muteButton: { classPropertyName: "muteButton", publicName: "muteButton", isSignal: true, isRequired: false, transformFunction: null }, muteButtonText: { classPropertyName: "muteButtonText", publicName: "muteButtonText", isSignal: true, isRequired: false, transformFunction: null }, allOkText: { classPropertyName: "allOkText", publicName: "allOkText", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, blinkPulse: { classPropertyName: "blinkPulse", publicName: "blinkPulse", isSignal: true, isRequired: false, transformFunction: null }, expandButtonText: { classPropertyName: "expandButtonText", publicName: "expandButtonText", isSignal: true, isRequired: false, transformFunction: null }, collapseButtonText: { classPropertyName: "collapseButtonText", publicName: "collapseButtonText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { muteToggle: "muteToggle" }, viewQueries: [{ propertyName: "theBar", first: true, predicate: ["thebar"], descendants: true, isSignal: true }, { propertyName: "content", first: true, predicate: ["content"], descendants: true, isSignal: true }, { propertyName: "custom", first: true, predicate: ["custom"], descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"expand-placeholder\"\n [class.expanded]=\"expanded()\"\n [style.height.px]=\"placeholderHeight()\"\n></div>\n<div\n #thebar\n aria-busy=\"true\"\n [class]=\"responsiveMode ? `responsive-${responsiveMode}` : ''\"\n [class.responsive]=\"responsiveMode\"\n [class.expanded]=\"expanded()\"\n [class.compact]=\"responsiveMode || compact()\"\n [class.pulse-off]=\"blinkOnOff() === false\"\n [class.pulse-on]=\"blinkOnOff()\"\n>\n <div\n class=\"status-bar-wrapper rounded-2\"\n [class.elevation-2]=\"expanded()\"\n [class.pe-2]=\"muteButton() !== undefined\"\n >\n @if (responsiveMode) {\n <div class=\"align-items-center overflow-hidden\">\n <div class=\"d-flex flex-fill position-relative\">\n @let items = responsiveItems();\n @let responsiveCols = items.length < responsiveMode ? items.length : responsiveMode;\n @for (item of responsiveItems(); track $index) {\n <si-status-bar-item\n class=\"bar-item compact\"\n [value]=\"item.value\"\n [heading]=\"item.title\"\n [status]=\"item.status\"\n [color]=\"item.color\"\n [blink]=\"item.blink !== false && blink() && !expanded()\"\n [clickable]=\"!!item.action\"\n [class.mute-padding]=\"item.mutePadding && muteButton() !== undefined\"\n [style.flex-basis.%]=\"100 / responsiveCols\"\n [valueOnly]=\"item.isSpecial\"\n (click)=\"onItemClicked(item)\"\n (keydown.enter)=\"onItemClicked(item)\"\n />\n }\n </div>\n @if (muteButton() !== undefined) {\n <div class=\"mobile-mute\">\n <ng-container *ngTemplateOutlet=\"muteButtonTemplate\" />\n </div>\n }\n </div>\n }\n <div\n #content\n class=\"main-content align-items-center overflow-hidden\"\n [style.max-height.px]=\"contentHeight()\"\n >\n @if (responsiveMode) {\n <div class=\"mobile-spacer\"></div>\n }\n <div\n class=\"d-flex flex-fill position-relative\"\n [id]=\"statusId\"\n [class.d-none]=\"responsiveMode && !expanded()\"\n [class.flex-wrap]=\"responsiveMode\"\n >\n @for (item of items(); track $index) {\n <si-status-bar-item\n class=\"bar-item\"\n [class.compact]=\"responsiveMode || compact()\"\n [value]=\"item.value\"\n [heading]=\"item.title\"\n [status]=\"item.status\"\n [color]=\"item.color\"\n [blink]=\"item.blink !== false && blink()\"\n [clickable]=\"!!item.action\"\n [style.flex-basis.%]=\"responsiveMode ? 100 / responsiveMode : null\"\n (significanceChange)=\"significanceChanged()\"\n (click)=\"onItemClicked(item)\"\n (keydown.enter)=\"onItemClicked(item)\"\n />\n }\n </div>\n <div class=\"custom-content bar-item d-flex\">\n <div #custom [class.pb-2]=\"responsiveMode && expanded\" (siResizeObserver)=\"resizeHandler()\">\n <ng-content />\n </div>\n </div>\n @if (muteButton() !== undefined && !responsiveMode) {\n <ng-container *ngTemplateOutlet=\"muteButtonTemplate\" />\n }\n </div>\n </div>\n @if (responsiveMode) {\n <div class=\"d-flex align-items-center justify-content-center\">\n <button\n type=\"button\"\n class=\"collapse-expand text-center p-0 focus-force\"\n [attr.aria-label]=\"(expanded() ? collapseButtonText() : expandButtonText()) | translate\"\n [attr.aria-expanded]=\"!!expanded()\"\n [attr.aria-controls]=\"statusId\"\n [class.expanded]=\"expanded() === 2\"\n (click)=\"toggleExpand()\"\n >\n <si-icon class=\"icon\" [icon]=\"icons.elementDown2\" />\n </button>\n </div>\n }\n</div>\n\n<ng-template #muteButtonTemplate>\n <button\n type=\"button\"\n class=\"bar-item mute-button btn btn-icon btn-tertiary ms-5\"\n [attr.aria-label]=\"muteButtonText() | translate\"\n (click)=\"muteToggle.emit()\"\n >\n <si-icon class=\"icon\" [icon]=\"muteButton() ? icons.elementSoundOn : icons.elementSoundMute\" />\n </button>\n</ng-template>\n", styles: [":host{display:block;position:relative}:host ::ng-deep .blink{transition:color calc(.5s * var(--element-animations-enabled, 1))}:host ::ng-deep .bg{transition:opacity calc(.5s * var(--element-animations-enabled, 1))}.pulse-off ::ng-deep .bg{opacity:.1!important}.status-bar-wrapper{padding-inline:8px;background-color:var(--element-base-1)}.status-bar-wrapper>*{display:flex}.mobile-spacer{margin-block:4px;margin-inline:0;background:var(--element-base-0);block-size:1px}.bar-item{margin-block:8px}.custom-content{margin-inline-start:auto}.clickable{cursor:pointer}.mute-padding{padding-inline-end:calc(1lh + 30px)}.mobile-mute{position:absolute;inset-inline-end:8px}.main-content .mute-button{margin-inline-end:4px}.collapse-expand{background-color:var(--element-base-1);border:0;border-end-start-radius:2rem;border-end-end-radius:2rem;inline-size:calc(1.5rem + 16px);color:var(--element-ui-0);cursor:pointer}.collapse-expand.expanded{box-shadow:0 8px 8px var(--element-box-shadow-color-2)}.collapse-expand.expanded si-icon{transform:rotate(180deg)}.collapse-expand si-icon{margin-block-start:0;transition:transform calc(.4s * var(--element-animations-enabled, 1))}.compact .bar-item{margin-block:2px}.responsive si-status-bar-item{--__si-status-bar-item-min-width: 0;overflow:hidden;flex-shrink:1}.responsive.expanded{position:absolute;inset-block-start:0;inset-inline:0;z-index:1028}.responsive .status-bar-wrapper>.main-content{display:block;transition:max-block-size calc(.5s * var(--element-animations-enabled, 1))}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "component", type: SiStatusBarItemComponent, selector: "si-status-bar-item", inputs: ["status", "value", "heading", "color", "blink", "valueOnly", "clickable"], outputs: ["significanceChange"] }, { kind: "directive", type: SiResizeObserverDirective, selector: "[siResizeObserver]", inputs: ["resizeThrottle", "emitInitial"], outputs: ["siResizeObserver"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
316
341
  }
317
342
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiStatusBarComponent, decorators: [{
318
343
  type: Component,
@@ -322,7 +347,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
322
347
  SiStatusBarItemComponent,
323
348
  SiResizeObserverDirective,
324
349
  SiTranslatePipe
325
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"expand-placeholder\"\n [class.expanded]=\"expanded()\"\n [style.height.px]=\"placeholderHeight()\"\n></div>\n<div\n #thebar\n aria-busy=\"true\"\n [class]=\"responsiveMode ? `responsive-${responsiveMode}` : ''\"\n [class.responsive]=\"responsiveMode\"\n [class.expanded]=\"expanded()\"\n [class.compact]=\"responsiveMode || compact()\"\n [class.pulse-off]=\"blinkOnOff() === false\"\n [class.pulse-on]=\"blinkOnOff()\"\n>\n <div\n class=\"status-bar-wrapper rounded-2\"\n [class.elevation-2]=\"expanded()\"\n [class.pe-2]=\"muteButton() !== undefined\"\n >\n @if (responsiveMode) {\n <div class=\"align-items-center overflow-hidden\">\n <div class=\"d-flex flex-fill position-relative\">\n @for (item of responsiveItems(); track $index) {\n <si-status-bar-item\n class=\"bar-item compact\"\n [value]=\"item.value\"\n [heading]=\"item.title\"\n [status]=\"item.status\"\n [color]=\"item.color\"\n [blink]=\"item.blink !== false && blink() && !expanded()\"\n [clickable]=\"!!item.action\"\n [class.mute-padding]=\"item.mutePadding && muteButton() !== undefined\"\n [style.flex-basis.%]=\"responsiveMode ? 100 / responsiveMode : null\"\n [valueOnly]=\"item.isSpecial\"\n (click)=\"onItemClicked(item)\"\n (keydown.enter)=\"onItemClicked(item)\"\n />\n }\n </div>\n @if (muteButton() !== undefined) {\n <div class=\"mobile-mute\">\n <ng-container *ngTemplateOutlet=\"muteButtonTemplate\" />\n </div>\n }\n </div>\n }\n <div\n #content\n class=\"main-content align-items-center overflow-hidden\"\n [style.max-height.px]=\"contentHeight()\"\n >\n @if (responsiveMode) {\n <div class=\"mobile-spacer\"></div>\n }\n <div\n class=\"d-flex flex-fill position-relative\"\n [id]=\"statusId\"\n [class.d-none]=\"responsiveMode && !expanded()\"\n [class.flex-wrap]=\"responsiveMode\"\n >\n @for (item of items(); track $index) {\n <si-status-bar-item\n class=\"bar-item\"\n [class.compact]=\"responsiveMode || compact()\"\n [value]=\"item.value\"\n [heading]=\"item.title\"\n [status]=\"item.status\"\n [color]=\"item.color\"\n [blink]=\"item.blink !== false && blink()\"\n [clickable]=\"!!item.action\"\n [style.flex-basis.%]=\"responsiveMode ? 100 / responsiveMode : null\"\n (significanceChange)=\"significanceChanged()\"\n (click)=\"onItemClicked(item)\"\n (keydown.enter)=\"onItemClicked(item)\"\n />\n }\n </div>\n <div class=\"custom-content bar-item d-flex\">\n <div #custom [class.pb-2]=\"responsiveMode && expanded\" (siResizeObserver)=\"resizeHandler()\">\n <ng-content />\n </div>\n </div>\n @if (muteButton() !== undefined && !responsiveMode) {\n <ng-container *ngTemplateOutlet=\"muteButtonTemplate\" />\n }\n </div>\n </div>\n @if (responsiveMode) {\n <div class=\"d-flex align-items-center justify-content-center\">\n <a\n class=\"collapse-expand text-center p-0 focus-force\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"(expanded() ? collapseButtonText() : expandButtonText()) | translate\"\n [attr.aria-expanded]=\"!!expanded()\"\n [attr.aria-controls]=\"statusId\"\n [class.expanded]=\"expanded() === 2\"\n (keydown.enter)=\"toggleExpand()\"\n (click)=\"toggleExpand()\"\n >\n <si-icon class=\"icon\" [icon]=\"icons.elementDown2\" />\n </a>\n </div>\n }\n</div>\n\n<ng-template #muteButtonTemplate>\n <button\n type=\"button\"\n class=\"bar-item mute-button btn btn-circle btn-tertiary ms-5\"\n [attr.aria-label]=\"muteButtonText() | translate\"\n (click)=\"muteToggle.emit()\"\n >\n <si-icon class=\"icon\" [icon]=\"muteButton() ? icons.elementSoundOn : icons.elementSoundMute\" />\n </button>\n</ng-template>\n", styles: [":host{display:block;position:relative}:host ::ng-deep .blink{transition:color calc(.5s * var(--element-animations-enabled, 1))}:host ::ng-deep .bg{transition:opacity calc(.5s * var(--element-animations-enabled, 1))}.pulse-off ::ng-deep .bg{opacity:.1!important}.status-bar-wrapper{padding-inline:8px;background-color:var(--element-base-1)}.status-bar-wrapper>*{display:flex}.mobile-spacer{margin-block:4px;margin-inline:0;background:var(--element-base-0);block-size:1px}.bar-item{margin-block:8px}.custom-content{margin-inline-start:auto}.clickable{cursor:pointer}.mute-padding{padding-inline-end:44px}.mobile-mute{position:absolute;inset-inline-end:8px}.main-content .mute-button{margin-inline-end:4px}.collapse-expand{background-color:var(--element-base-1);border-radius:0 0 20px 20px;inline-size:40px;cursor:pointer}.collapse-expand.expanded{box-shadow:0 8px 8px var(--element-box-shadow-color-2)}.collapse-expand.expanded si-icon{transform:rotate(180deg)}.collapse-expand si-icon{margin-block-start:0;transition:transform calc(.4s * var(--element-animations-enabled, 1))}.compact .bar-item{margin-block:2px}.responsive si-status-bar-item ::ng-deep .status-item{max-inline-size:unset;position:absolute;inset-block:0;inset-inline:0 4px}.responsive si-status-bar-item.mute-padding ::ng-deep .status-item{inset-inline-end:44px}.responsive.expanded{position:absolute;inset-block-start:0;inset-inline:0;z-index:1028}.responsive .status-bar-wrapper>.main-content{display:block;transition:max-block-size calc(.5s * var(--element-animations-enabled, 1))}\n"] }]
350
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"expand-placeholder\"\n [class.expanded]=\"expanded()\"\n [style.height.px]=\"placeholderHeight()\"\n></div>\n<div\n #thebar\n aria-busy=\"true\"\n [class]=\"responsiveMode ? `responsive-${responsiveMode}` : ''\"\n [class.responsive]=\"responsiveMode\"\n [class.expanded]=\"expanded()\"\n [class.compact]=\"responsiveMode || compact()\"\n [class.pulse-off]=\"blinkOnOff() === false\"\n [class.pulse-on]=\"blinkOnOff()\"\n>\n <div\n class=\"status-bar-wrapper rounded-2\"\n [class.elevation-2]=\"expanded()\"\n [class.pe-2]=\"muteButton() !== undefined\"\n >\n @if (responsiveMode) {\n <div class=\"align-items-center overflow-hidden\">\n <div class=\"d-flex flex-fill position-relative\">\n @let items = responsiveItems();\n @let responsiveCols = items.length < responsiveMode ? items.length : responsiveMode;\n @for (item of responsiveItems(); track $index) {\n <si-status-bar-item\n class=\"bar-item compact\"\n [value]=\"item.value\"\n [heading]=\"item.title\"\n [status]=\"item.status\"\n [color]=\"item.color\"\n [blink]=\"item.blink !== false && blink() && !expanded()\"\n [clickable]=\"!!item.action\"\n [class.mute-padding]=\"item.mutePadding && muteButton() !== undefined\"\n [style.flex-basis.%]=\"100 / responsiveCols\"\n [valueOnly]=\"item.isSpecial\"\n (click)=\"onItemClicked(item)\"\n (keydown.enter)=\"onItemClicked(item)\"\n />\n }\n </div>\n @if (muteButton() !== undefined) {\n <div class=\"mobile-mute\">\n <ng-container *ngTemplateOutlet=\"muteButtonTemplate\" />\n </div>\n }\n </div>\n }\n <div\n #content\n class=\"main-content align-items-center overflow-hidden\"\n [style.max-height.px]=\"contentHeight()\"\n >\n @if (responsiveMode) {\n <div class=\"mobile-spacer\"></div>\n }\n <div\n class=\"d-flex flex-fill position-relative\"\n [id]=\"statusId\"\n [class.d-none]=\"responsiveMode && !expanded()\"\n [class.flex-wrap]=\"responsiveMode\"\n >\n @for (item of items(); track $index) {\n <si-status-bar-item\n class=\"bar-item\"\n [class.compact]=\"responsiveMode || compact()\"\n [value]=\"item.value\"\n [heading]=\"item.title\"\n [status]=\"item.status\"\n [color]=\"item.color\"\n [blink]=\"item.blink !== false && blink()\"\n [clickable]=\"!!item.action\"\n [style.flex-basis.%]=\"responsiveMode ? 100 / responsiveMode : null\"\n (significanceChange)=\"significanceChanged()\"\n (click)=\"onItemClicked(item)\"\n (keydown.enter)=\"onItemClicked(item)\"\n />\n }\n </div>\n <div class=\"custom-content bar-item d-flex\">\n <div #custom [class.pb-2]=\"responsiveMode && expanded\" (siResizeObserver)=\"resizeHandler()\">\n <ng-content />\n </div>\n </div>\n @if (muteButton() !== undefined && !responsiveMode) {\n <ng-container *ngTemplateOutlet=\"muteButtonTemplate\" />\n }\n </div>\n </div>\n @if (responsiveMode) {\n <div class=\"d-flex align-items-center justify-content-center\">\n <button\n type=\"button\"\n class=\"collapse-expand text-center p-0 focus-force\"\n [attr.aria-label]=\"(expanded() ? collapseButtonText() : expandButtonText()) | translate\"\n [attr.aria-expanded]=\"!!expanded()\"\n [attr.aria-controls]=\"statusId\"\n [class.expanded]=\"expanded() === 2\"\n (click)=\"toggleExpand()\"\n >\n <si-icon class=\"icon\" [icon]=\"icons.elementDown2\" />\n </button>\n </div>\n }\n</div>\n\n<ng-template #muteButtonTemplate>\n <button\n type=\"button\"\n class=\"bar-item mute-button btn btn-icon btn-tertiary ms-5\"\n [attr.aria-label]=\"muteButtonText() | translate\"\n (click)=\"muteToggle.emit()\"\n >\n <si-icon class=\"icon\" [icon]=\"muteButton() ? icons.elementSoundOn : icons.elementSoundMute\" />\n </button>\n</ng-template>\n", styles: [":host{display:block;position:relative}:host ::ng-deep .blink{transition:color calc(.5s * var(--element-animations-enabled, 1))}:host ::ng-deep .bg{transition:opacity calc(.5s * var(--element-animations-enabled, 1))}.pulse-off ::ng-deep .bg{opacity:.1!important}.status-bar-wrapper{padding-inline:8px;background-color:var(--element-base-1)}.status-bar-wrapper>*{display:flex}.mobile-spacer{margin-block:4px;margin-inline:0;background:var(--element-base-0);block-size:1px}.bar-item{margin-block:8px}.custom-content{margin-inline-start:auto}.clickable{cursor:pointer}.mute-padding{padding-inline-end:calc(1lh + 30px)}.mobile-mute{position:absolute;inset-inline-end:8px}.main-content .mute-button{margin-inline-end:4px}.collapse-expand{background-color:var(--element-base-1);border:0;border-end-start-radius:2rem;border-end-end-radius:2rem;inline-size:calc(1.5rem + 16px);color:var(--element-ui-0);cursor:pointer}.collapse-expand.expanded{box-shadow:0 8px 8px var(--element-box-shadow-color-2)}.collapse-expand.expanded si-icon{transform:rotate(180deg)}.collapse-expand si-icon{margin-block-start:0;transition:transform calc(.4s * var(--element-animations-enabled, 1))}.compact .bar-item{margin-block:2px}.responsive si-status-bar-item{--__si-status-bar-item-min-width: 0;overflow:hidden;flex-shrink:1}.responsive.expanded{position:absolute;inset-block-start:0;inset-inline:0;z-index:1028}.responsive .status-bar-wrapper>.main-content{display:block;transition:max-block-size calc(.5s * var(--element-animations-enabled, 1))}\n"] }]
326
351
  }], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }], blink: [{ type: i0.Input, args: [{ isSignal: true, alias: "blink", required: false }] }], muteButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "muteButton", required: false }] }], muteButtonText: [{ type: i0.Input, args: [{ isSignal: true, alias: "muteButtonText", required: false }] }], allOkText: [{ type: i0.Input, args: [{ isSignal: true, alias: "allOkText", required: false }] }], compact: [{ type: i0.Input, args: [{ isSignal: true, alias: "compact", required: false }] }], blinkPulse: [{ type: i0.Input, args: [{ isSignal: true, alias: "blinkPulse", required: false }] }], expandButtonText: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandButtonText", required: false }] }], collapseButtonText: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapseButtonText", required: false }] }], muteToggle: [{ type: i0.Output, args: ["muteToggle"] }], theBar: [{ type: i0.ViewChild, args: ['thebar', { isSignal: true }] }], content: [{ type: i0.ViewChild, args: ['content', { isSignal: true }] }], custom: [{ type: i0.ViewChild, args: ['custom', { isSignal: true }] }] } });
327
352
 
328
353
  /**