@siemens/element-ng 51.3.0 → 51.5.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 (98) hide show
  1. package/fesm2022/siemens-element-ng-about.mjs +2 -2
  2. package/fesm2022/siemens-element-ng-about.mjs.map +1 -1
  3. package/fesm2022/siemens-element-ng-ag-grid.mjs +5 -4
  4. package/fesm2022/siemens-element-ng-ag-grid.mjs.map +1 -1
  5. package/fesm2022/siemens-element-ng-breadcrumb.mjs +20 -71
  6. package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
  7. package/fesm2022/siemens-element-ng-carousel.mjs +6 -4
  8. package/fesm2022/siemens-element-ng-carousel.mjs.map +1 -1
  9. package/fesm2022/siemens-element-ng-chat-messages.mjs +3 -3
  10. package/fesm2022/siemens-element-ng-chat-messages.mjs.map +1 -1
  11. package/fesm2022/siemens-element-ng-common.mjs +16 -1
  12. package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
  13. package/fesm2022/siemens-element-ng-dashboard.mjs +2 -3
  14. package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
  15. package/fesm2022/siemens-element-ng-datatable.mjs +1 -1
  16. package/fesm2022/siemens-element-ng-datatable.mjs.map +1 -1
  17. package/fesm2022/siemens-element-ng-empty-state.mjs +2 -2
  18. package/fesm2022/siemens-element-ng-empty-state.mjs.map +1 -1
  19. package/fesm2022/siemens-element-ng-filtered-search.mjs +255 -160
  20. package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
  21. package/fesm2022/siemens-element-ng-formly.mjs +13 -9
  22. package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
  23. package/fesm2022/siemens-element-ng-header-dropdown.mjs +2 -2
  24. package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
  25. package/fesm2022/siemens-element-ng-list-details.mjs +7 -4
  26. package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -1
  27. package/fesm2022/siemens-element-ng-loading-spinner.mjs +21 -7
  28. package/fesm2022/siemens-element-ng-loading-spinner.mjs.map +1 -1
  29. package/fesm2022/siemens-element-ng-maplibre.mjs +293 -10
  30. package/fesm2022/siemens-element-ng-maplibre.mjs.map +1 -1
  31. package/fesm2022/siemens-element-ng-markdown-extensions-katex.mjs +6 -3
  32. package/fesm2022/siemens-element-ng-markdown-extensions-katex.mjs.map +1 -1
  33. package/fesm2022/siemens-element-ng-markdown-extensions-mermaid.mjs +9 -0
  34. package/fesm2022/siemens-element-ng-markdown-extensions-mermaid.mjs.map +1 -1
  35. package/fesm2022/siemens-element-ng-markdown.mjs +6 -2
  36. package/fesm2022/siemens-element-ng-markdown.mjs.map +1 -1
  37. package/fesm2022/siemens-element-ng-menu.mjs +6 -6
  38. package/fesm2022/siemens-element-ng-menu.mjs.map +1 -1
  39. package/fesm2022/siemens-element-ng-modal.mjs +4 -3
  40. package/fesm2022/siemens-element-ng-modal.mjs.map +1 -1
  41. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +10 -4
  42. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -1
  43. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +12 -6
  44. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
  45. package/fesm2022/siemens-element-ng-pills-input.mjs +5 -4
  46. package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -1
  47. package/fesm2022/siemens-element-ng-popover-legacy.mjs +1 -1
  48. package/fesm2022/siemens-element-ng-popover-legacy.mjs.map +1 -1
  49. package/fesm2022/siemens-element-ng-popover.mjs +36 -7
  50. package/fesm2022/siemens-element-ng-popover.mjs.map +1 -1
  51. package/fesm2022/siemens-element-ng-result-details-list.mjs +1 -1
  52. package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -1
  53. package/fesm2022/siemens-element-ng-select.mjs +3 -3
  54. package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
  55. package/fesm2022/siemens-element-ng-shadow-root.mjs +54 -1
  56. package/fesm2022/siemens-element-ng-shadow-root.mjs.map +1 -1
  57. package/fesm2022/siemens-element-ng-side-panel.mjs +17 -7
  58. package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
  59. package/fesm2022/siemens-element-ng-skip-links.mjs +18 -4
  60. package/fesm2022/siemens-element-ng-skip-links.mjs.map +1 -1
  61. package/fesm2022/siemens-element-ng-source-chip.mjs +1 -1
  62. package/fesm2022/siemens-element-ng-source-chip.mjs.map +1 -1
  63. package/fesm2022/siemens-element-ng-split.mjs +2 -2
  64. package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
  65. package/fesm2022/siemens-element-ng-status-bar.mjs +2 -2
  66. package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
  67. package/fesm2022/siemens-element-ng-theme.mjs +59 -23
  68. package/fesm2022/siemens-element-ng-theme.mjs.map +1 -1
  69. package/fesm2022/siemens-element-ng-tooltip.mjs +83 -11
  70. package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
  71. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  72. package/fesm2022/siemens-element-ng-tree-view.mjs +3 -4
  73. package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
  74. package/fesm2022/siemens-element-ng-typeahead.mjs +2 -2
  75. package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -1
  76. package/maplibre/styles/maplibre-gl.scss +4 -0
  77. package/package.json +7 -7
  78. package/schematics/utils/ts-compiler-host.js +21 -0
  79. package/template-i18n.json +7 -0
  80. package/types/siemens-element-ng-ag-grid.d.ts +1 -0
  81. package/types/siemens-element-ng-breadcrumb.d.ts +3 -6
  82. package/types/siemens-element-ng-common.d.ts +28 -3
  83. package/types/siemens-element-ng-dashboard.d.ts +0 -1
  84. package/types/siemens-element-ng-filtered-search.d.ts +26 -10
  85. package/types/siemens-element-ng-list-details.d.ts +2 -0
  86. package/types/siemens-element-ng-loading-spinner.d.ts +11 -4
  87. package/types/siemens-element-ng-maplibre.d.ts +112 -5
  88. package/types/siemens-element-ng-markdown-extensions-katex.d.ts +4 -1
  89. package/types/siemens-element-ng-markdown-extensions-mermaid.d.ts +9 -0
  90. package/types/siemens-element-ng-navbar-vertical-next.d.ts +2 -1
  91. package/types/siemens-element-ng-navbar-vertical.d.ts +2 -2
  92. package/types/siemens-element-ng-popover.d.ts +19 -1
  93. package/types/siemens-element-ng-shadow-root.d.ts +16 -1
  94. package/types/siemens-element-ng-side-panel.d.ts +7 -2
  95. package/types/siemens-element-ng-skip-links.d.ts +4 -2
  96. package/types/siemens-element-ng-theme.d.ts +35 -7
  97. package/types/siemens-element-ng-tooltip.d.ts +14 -1
  98. package/types/siemens-element-ng-translate.d.ts +7 -0
@@ -1 +1 @@
1
- {"version":3,"file":"siemens-element-ng-split.mjs","sources":["../../../../projects/element-ng/split/si-split-part.component.ts","../../../../projects/element-ng/split/si-split-part.component.html","../../../../projects/element-ng/split/si-split.component.ts","../../../../projects/element-ng/split/si-split.component.html","../../../../projects/element-ng/split/si-split.module.ts","../../../../projects/element-ng/split/index.ts","../../../../projects/element-ng/split/siemens-element-ng-split.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n numberAttribute,\n output,\n signal,\n TemplateRef,\n untracked\n} from '@angular/core';\nimport { elementDoubleRight } from '@siemens/element-icons';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTranslatePipe, t, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { Action, CollapseTo, PartState, SplitOrientation, SplitUnit } from './si-split.interfaces';\n\n@Component({\n selector: 'si-split-part',\n imports: [NgTemplateOutlet, SiIconComponent, SiTranslatePipe],\n templateUrl: './si-split-part.component.html',\n styleUrl: './si-split-part.component.scss',\n host: {\n '[class.is-collapsed]': 'collapsedState()',\n '[class.collapse-start]': 'collapseDirectionState() === \"to-start\"',\n '[style.grid-area]': '\"p-\" + this.index'\n }\n})\nexport class SiSplitPartComponent {\n protected readonly icons = addIcons({ elementDoubleRight });\n /**\n * Action buttons displayed in the split part header.\n *\n * @defaultValue []\n */\n readonly actions = input<Action[]>([]);\n /**\n * Defines whether and in which direction the split part can collapse.\n * When unset, the collapse button is hidden.\n *\n * @defaultValue undefined\n */\n readonly collapsible = input<CollapseTo>();\n\n /**\n * Sets the icon class that is used in the buttons of split parts to\n * collapse and uncollapse the parts.\n */\n readonly collapseIconClass = input<string | undefined>();\n\n /**\n * Collapse only to the given min size.\n *\n * @defaultValue false\n */\n readonly collapseToMinSize = input(false, { transform: booleanAttribute });\n\n /**\n * Custom template for the split part header. The template receives the component instance as implicit context.\n */\n readonly headerTemplate = input<TemplateRef<{ $implicit: SiSplitPartComponent }>>();\n\n /**\n * Sets the title of the split part header.\n */\n readonly heading = input<TranslatableString>();\n\n /**\n * Minimum size in px.\n *\n * @defaultValue 0\n */\n readonly minSize = input(0, { transform: numberAttribute });\n\n /**\n * When a split part is collapsed, the content gets hidden but it will\n * still remain within the DOM. If you want to remove and destroy the component\n * in collapsed mode and recreate it on un-collapse, set this property to\n * true.\n *\n * @defaultValue false\n */\n readonly removeContentOnCollapse = input(false, { transform: booleanAttribute });\n\n /**\n * Defines if the header of the split part is visible. Default is true.\n *\n * @defaultValue true\n */\n readonly showHeader = input(true, { transform: booleanAttribute });\n /**\n * Aria label for collapse button. Needed for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_SPLIT.COLLAPSE_LABEL:Collapse`)\n * ```\n */\n readonly collapseLabel = input<TranslatableString>(\n t(() => $localize`:@@SI_SPLIT.COLLAPSE_LABEL:Collapse`)\n );\n /**\n * An optional stateId to uniquely identify a component instance.\n * Required for persistence of ui state.\n */\n readonly stateId = input<string>();\n\n /**\n * Expanded size.\n */\n readonly size = input.required<number, number | string>({ transform: numberAttribute });\n\n /**\n * Unit for the configured {@link size}.\n */\n readonly unit = input.required<SplitUnit>();\n\n /**\n * This toggles the behavior when collapsing this split part.\n * If enabled, all split parts between this one and the end of the split in the respective direction will be collapsed if this part is collapsed.\n * If disabled, only this split part will be collapsed.\n *\n * @defaultValue false\n */\n readonly collapseOthers = input(false, { transform: booleanAttribute });\n\n /**\n * Sets the initial expanded or collapsed state of the split part.\n *\n * @defaultValue true\n */\n readonly expanded = input(true, { transform: booleanAttribute });\n\n /**\n * Emits when the part is collapsed or expanded.\n */\n readonly collapseChanged = output<boolean>();\n /**\n * Emits the part's expanded state and size after it is toggled.\n */\n readonly stateChange = output<PartState>();\n\n /** @internal */\n index = 0;\n /** @internal */\n readonly before = signal<SiSplitPartComponent | undefined>(undefined);\n /** @internal */\n readonly after = signal<SiSplitPartComponent | undefined>(undefined);\n\n /** @internal */\n readonly fractionalSize = linkedSignal(() => (this.unit() === 'fr' ? this.size() : undefined));\n\n /** @internal */\n readonly collapsedSize = computed(() => (this.collapseToMinSize() ? (this.minSize() ?? 40) : 40));\n\n /**\n * Internal, mutable collapsed state. Initialized from the {@link expanded} input but can be\n * overwritten while toggling, cascading to sibling parts or restoring the persisted ui state.\n * @internal\n */\n readonly collapsedState = linkedSignal(() => !this.expanded());\n\n /**\n * Internal, mutable collapse direction. Initialized from the {@link collapsible}\n * input but can be overwritten while cascading collapse state to sibling parts.\n * @internal\n */\n readonly collapseDirectionState = linkedSignal(() => this.collapsible());\n\n /**\n * Get collapsed state.\n * @returns True if the split part is collapsed, false is expanded.\n */\n get collapsed(): boolean {\n return this.collapsedState();\n }\n\n /** @internal */\n readonly expandedSize = linkedSignal({\n source: () => ({ size: this.size(), unit: this.unit() }),\n computation: source => (source.unit === 'fr' ? undefined : source.size)\n });\n\n /** @internal */\n readonly actualSize = computed(() => {\n if (this.collapsedState()) {\n return this.collapsedSize();\n }\n return this.expandedSize() ?? 0;\n });\n\n /** @internal */\n saveUIState!: () => void;\n\n /** @internal */\n readonly nextExpandedAfter = computed(() => {\n if (!this.collapsedState()) {\n return this as SiSplitPartComponent;\n }\n const after = this.after();\n const nextExpanded: SiSplitPartComponent = after ? after.nextExpandedAfter() : this;\n\n return nextExpanded;\n });\n\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n protected headerContext: { $implicit: SiSplitPartComponent } = {\n $implicit: this\n };\n\n constructor() {\n effect(() => {\n this.expanded();\n untracked(() => {\n if (this.collapseOthers()) {\n this.before()?.refreshCollapseToStart();\n this.after()?.refreshCollapsedToEnd();\n }\n });\n });\n }\n\n /** @internal */\n refreshSizePx(orientation: SplitOrientation): void {\n if (!this.collapsedState()) {\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n if (orientation === 'vertical') {\n this.expandedSize.set(rect.height);\n } else {\n this.expandedSize.set(rect.width);\n }\n }\n }\n\n /**\n * Toggles the collapsed or expanded state.\n */\n toggleCollapse(): void {\n this.collapsedState.update(v => !v);\n if (this.collapseOthers()) {\n this.before()?.refreshCollapseToStart();\n this.after()?.refreshCollapsedToEnd();\n }\n this.collapseChanged.emit(this.collapsedState());\n this.stateChange.emit({ expanded: !this.collapsedState(), size: this.actualSize() });\n this.saveUIState();\n }\n\n private refreshCollapsedToEnd(): void {\n const before = this.before();\n if (before?.collapsedState() && before.collapseDirectionState() === 'to-end') {\n this.collapsedState.set(true);\n this.collapseDirectionState.set('to-end');\n this.after()?.refreshCollapsedToEnd();\n }\n }\n\n private refreshCollapseToStart(): void {\n const after = this.after();\n if (after?.collapsedState() && after.collapseDirectionState() === 'to-start') {\n this.collapsedState.set(true);\n this.collapseDirectionState.set('to-start');\n this.before()?.refreshCollapseToStart();\n }\n }\n}\n","@if (!headerTemplate() && showHeader()) {\n <div class=\"si-split-part-header\" [class.is-collapsed]=\"collapsedState()\">\n <div class=\"si-split-part-title text-truncate\">\n {{ heading() | translate }}\n </div>\n @if (!collapsedState()) {\n <div class=\"si-split-part-actions\">\n @for (action of actions(); track $index) {\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost si-split-button\"\n [title]=\"action.tooltip || ''\"\n [attr.aria-label]=\"action.tooltip\"\n (click)=\"action.click($event)\"\n >\n <si-icon [icon]=\"action.iconClass\" />\n </button>\n }\n </div>\n }\n @if (collapsible()) {\n <div class=\"si-split-part-collapse-button\">\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost si-split-button\"\n [attr.aria-label]=\"collapseLabel() | translate\"\n (click)=\"toggleCollapse()\"\n >\n <si-icon class=\"collapse-icon\" [icon]=\"collapseIconClass() ?? icons.elementDoubleRight\" />\n </button>\n </div>\n }\n </div>\n}\n\n@if (headerTemplate(); as headerTemplate) {\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: headerContext\" />\n}\n\n<div\n class=\"si-split-part-content\"\n [class.d-none]=\"!removeContentOnCollapse() && collapsedState() && !collapseToMinSize()\"\n>\n @if (!removeContentOnCollapse() || !collapsedState()) {\n <ng-content />\n }\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n ChangeDetectorRef,\n Component,\n computed,\n contentChildren,\n ElementRef,\n inject,\n input,\n NgZone,\n signal,\n Signal,\n DOCUMENT,\n DestroyRef,\n output\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport {\n isRTL,\n SI_UI_STATE_SERVICE,\n WebComponentContentChildren\n} from '@siemens/element-ng/common';\nimport { asapScheduler, fromEvent, merge } from 'rxjs';\nimport { observeOn, takeUntil } from 'rxjs/operators';\n\nimport { SiSplitPartComponent } from './si-split-part.component';\nimport { SplitOrientation, SplitUnit } from './si-split.interfaces';\n\ninterface Gutter {\n before: SiSplitPartComponent;\n after: SiSplitPartComponent;\n visible: Signal<boolean>;\n}\n\ninterface SplitPartState {\n size: number;\n initialSize: number;\n initialUnit: SplitUnit;\n expanded: boolean;\n}\n\n@Component({\n selector: 'si-split',\n templateUrl: './si-split.component.html',\n styleUrl: './si-split.component.scss',\n host: {\n '[class]': 'orientation()',\n '[style.grid-template-rows]': 'gridTemplateRows()',\n '[style.grid-template-columns]': 'gridTemplateColumns()',\n '[style.grid-template-areas]': 'gridTemplateAreas()'\n }\n})\nexport class SiSplitComponent {\n /**\n * Size of the gutter (divider) between split parts in pixels.\n *\n * @defaultValue 16\n */\n readonly gutterSize = input(16);\n\n /**\n * Defines the split layout direction.\n *\n * @defaultValue 'horizontal'\n */\n readonly orientation = input<SplitOrientation>('horizontal');\n\n /**\n * An optional stateId to uniquely identify a component instance.\n * Required for persistence of ui state.\n */\n readonly stateId = input<string>();\n\n /**\n * Emits the sizes of all parts as percentages when the user resizes a gutter.\n */\n readonly sizesChange = output<number[]>();\n\n @WebComponentContentChildren(SiSplitPartComponent)\n protected readonly parts = contentChildren(SiSplitPartComponent);\n protected readonly gutters = signal<Gutter[]>([]);\n\n private readonly gridTemplate = computed(() => {\n if (!this.initialized()) {\n return '';\n }\n return this.parts()\n .map(part =>\n part.collapsedState()\n ? part.collapseToMinSize()\n ? `${part.minSize()}px`\n : 'min-content'\n : part.unit() === 'px'\n ? `minmax(${part.minSize()}px, ${part.expandedSize() ?? part.size()}px)`\n : `minmax(${part.minSize()}px, ${\n part.expandedSize() === undefined\n ? part.fractionalSize()! * this.fractionalSizeToExpandedSizeFactor()\n : part.fractionalSize()!\n }fr)`\n )\n .join(' min-content ');\n });\n\n protected readonly gridTemplateRows = computed(() =>\n this.orientation() === 'vertical' ? this.gridTemplate() : '1fr'\n );\n\n protected readonly gridTemplateColumns = computed(() =>\n this.orientation() === 'horizontal' ? this.gridTemplate() : '1fr'\n );\n\n protected readonly gridTemplateAreas = computed(() => {\n if (!this.initialized()) {\n return '';\n }\n const areaNames = this.parts()\n .map((part, index) => [`p-${index}`, part.after() ? `g-${index}` : []])\n .flat(2) as string[];\n\n if (this.orientation() === 'horizontal') {\n return `\"${areaNames.join(' ')}\"`;\n } else {\n return `\"${areaNames.join('\" \"')}\"`;\n }\n });\n\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly ngZone = inject(NgZone);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly document = inject(DOCUMENT);\n private readonly uiStateService = inject(SI_UI_STATE_SERVICE, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n // Existing fr parts are measured in pixels after layout or dragging, so their fr weights become\n // pixel-derived. A newly added fr part has not been measured yet and still has its configured\n // weight. This factor converts that configured weight into the same scale until it is measured.\n // It is the ratio of measured expanded sizes to configured weights of visible measured fr parts.\n private readonly fractionalSizeToExpandedSizeFactor = computed(() => {\n const measuredParts = this.parts().filter(\n part => !part.collapsedState() && part.unit() === 'fr' && part.expandedSize() !== undefined\n );\n const configuredSizeSum = measuredParts.reduce((sum, part) => sum + part.size(), 0);\n const expandedSizeSum = measuredParts.reduce((sum, part) => sum + part.expandedSize()!, 0);\n\n return configuredSizeSum ? expandedSizeSum / configuredSizeSum : 1;\n });\n private readonly initialized = signal(false);\n\n constructor() {\n toObservable(this.parts)\n .pipe(observeOn(asapScheduler), takeUntilDestroyed())\n .subscribe(() => this.setupParts());\n }\n\n private setupParts(): void {\n this.initialized.set(true);\n const gutters: Gutter[] = [];\n\n const parts = this.parts();\n for (let index = 0; index < parts.length; index++) {\n const component = parts[index];\n component.index = index;\n component.after.set(parts[index + 1]);\n component.before.set(parts[index - 1]);\n component.saveUIState = () => this.saveUIState();\n\n if (component.after()) {\n gutters.push({\n before: component,\n after: parts[index + 1]!,\n visible: computed(() => {\n const afterPart = component.after()!.nextExpandedAfter();\n return !afterPart.collapsedState() && !component.collapsedState();\n })\n });\n }\n }\n this.gutters.set(gutters);\n\n this.restoreFromUIState();\n setTimeout(() => this.refreshAllPartSizes());\n }\n\n private refreshAllPartSizes(): void {\n this.parts().forEach(part => {\n part.refreshSizePx(this.orientation());\n if (!part.collapsedState() && part.unit() === 'fr') {\n part.fractionalSize.set(part.expandedSize()!);\n }\n });\n }\n\n protected resizeStart(gutter: Gutter, event: Event): void {\n this.refreshAllPartSizes();\n this.changeDetectorRef.detectChanges();\n const afterPart = gutter.after.nextExpandedAfter();\n let beforeSize = gutter.before.expandedSize()!;\n let afterSize = afterPart.expandedSize()!;\n let appliedDelta = 0;\n const rtl = isRTL();\n const startPosition = this.getPosition(event);\n const minDelta = -1 * (beforeSize - gutter.before.minSize());\n const maxDelta = afterSize - afterPart.minSize();\n event.preventDefault(); // prevents text-selection\n\n this.ngZone.runOutsideAngular(() => {\n merge(fromEvent(this.document, 'mousemove'), fromEvent(this.document, 'touchmove'))\n .pipe(\n takeUntil(\n merge(fromEvent(this.document, 'mouseup'), fromEvent(this.document, 'touchend'))\n ),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe({\n next: move => {\n let delta = this.getPosition(move) - startPosition;\n if (rtl && this.orientation() === 'horizontal') {\n delta *= -1;\n }\n\n delta -= appliedDelta;\n if (maxDelta < appliedDelta + delta) {\n delta = maxDelta - appliedDelta;\n } else if (minDelta > appliedDelta + delta) {\n delta = minDelta - appliedDelta;\n }\n\n if (delta === 0) {\n return;\n }\n\n beforeSize += delta;\n afterSize -= delta;\n appliedDelta += delta;\n gutter.before.expandedSize.set(beforeSize);\n afterPart.expandedSize.set(afterSize);\n if (gutter.before.unit() === 'fr') {\n gutter.before.fractionalSize.set(beforeSize);\n }\n if (afterPart.unit() === 'fr') {\n afterPart.fractionalSize.set(afterSize);\n }\n if (this.orientation() === 'vertical') {\n this.elementRef.nativeElement.style.setProperty(\n 'grid-template-rows',\n this.gridTemplateRows()\n );\n } else {\n this.elementRef.nativeElement.style.setProperty(\n 'grid-template-columns',\n this.gridTemplateColumns()\n );\n }\n this.emitSizesChange();\n },\n complete: () => this.saveUIState()\n });\n });\n }\n\n private emitSizesChange(): void {\n const containerSize = this.measureContainerSize();\n if (containerSize > 0) {\n this.ngZone.run(() =>\n this.sizesChange.emit(this.parts().map(part => (part.actualSize() * 100) / containerSize))\n );\n }\n }\n\n private measureContainerSize(): number {\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n if (this.orientation() === 'vertical') {\n return rect.height;\n } else {\n return rect.width;\n }\n }\n\n private getPosition(event: Event): number {\n const positionObject = (event as TouchEvent).touches?.[0] ?? (event as MouseEvent);\n return this.orientation() === 'horizontal'\n ? (positionObject.clientX ?? 0)\n : (positionObject.clientY ?? 0);\n }\n\n private saveUIState(): void {\n const stateId = this.stateId();\n if (!stateId || !this.uiStateService) {\n return;\n }\n\n const state = this.parts().reduce(\n (partState, part) => {\n const partStateId = part.stateId();\n if (partStateId) {\n const unit = part.unit();\n partState[partStateId] = {\n size: unit === 'px' ? part.expandedSize()! : part.fractionalSize()!,\n initialSize: part.size(),\n initialUnit: unit,\n expanded: !part.collapsedState()\n };\n }\n return partState;\n },\n {} as Record<string, SplitPartState>\n );\n\n this.uiStateService.save(stateId, state);\n }\n\n private restoreFromUIState(): void {\n const stateId = this.stateId();\n if (!stateId || !this.uiStateService) {\n return;\n }\n\n this.uiStateService.load<Record<string, SplitPartState>>(stateId).then(uiState => {\n if (!uiState) {\n return;\n }\n\n let restored = false;\n this.parts()\n .filter(part => part.stateId())\n .map(part => ({ part, state: uiState[part.stateId()!] }))\n .filter(\n (item): item is { part: SiSplitPartComponent; state: SplitPartState } =>\n !!item.state && item.state.initialUnit === item.part.unit()\n )\n .forEach(({ part, state }) => {\n restored = true;\n if (part.unit() === 'px') {\n part.expandedSize.set(state.size);\n } else {\n part.fractionalSize.set(state.size);\n }\n part.collapsedState.set(!state.expanded);\n });\n setTimeout(() => {\n this.refreshAllPartSizes();\n if (restored) {\n this.emitSizesChange();\n }\n });\n });\n }\n}\n","<ng-content />\n\n@for (gutter of gutters(); track $index) {\n @if ($index < parts().length - 1) {\n <div\n class=\"si-split-gutter\"\n [class.d-none]=\"!gutter.visible()\"\n [style.grid-area]=\"'g-' + $index\"\n [style.width.px]=\"orientation() === 'horizontal' ? gutterSize() : null\"\n [style.height.px]=\"orientation() === 'vertical' ? gutterSize() : null\"\n (mousedown)=\"resizeStart(gutter, $event)\"\n (touchstart)=\"resizeStart(gutter, $event)\"\n ></div>\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiSplitPartComponent } from './si-split-part.component';\nimport { SiSplitComponent } from './si-split.component';\n\n@NgModule({\n imports: [SiSplitComponent, SiSplitPartComponent],\n exports: [SiSplitComponent, SiSplitPartComponent]\n})\nexport class SiSplitModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-split.module';\nexport * from './si-split-part.component';\nexport * from './si-split.component';\nexport * from './si-split.interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"siemens-element-ng-split.mjs","sources":["../../../../projects/element-ng/split/si-split-part.component.ts","../../../../projects/element-ng/split/si-split-part.component.html","../../../../projects/element-ng/split/si-split.component.ts","../../../../projects/element-ng/split/si-split.component.html","../../../../projects/element-ng/split/si-split.module.ts","../../../../projects/element-ng/split/index.ts","../../../../projects/element-ng/split/siemens-element-ng-split.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n numberAttribute,\n output,\n signal,\n TemplateRef,\n untracked\n} from '@angular/core';\nimport { elementDoubleRight } from '@siemens/element-icons';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTranslatePipe, t, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { Action, CollapseTo, PartState, SplitOrientation, SplitUnit } from './si-split.interfaces';\n\n@Component({\n selector: 'si-split-part',\n imports: [NgTemplateOutlet, SiIconComponent, SiTranslatePipe],\n templateUrl: './si-split-part.component.html',\n styleUrl: './si-split-part.component.scss',\n host: {\n '[class.is-collapsed]': 'collapsedState()',\n '[class.collapse-start]': 'collapseDirectionState() === \"to-start\"',\n '[style.grid-area]': '\"p-\" + this.index'\n }\n})\nexport class SiSplitPartComponent {\n protected readonly icons = addIcons({ elementDoubleRight });\n /**\n * Action buttons displayed in the split part header.\n *\n * @defaultValue []\n */\n readonly actions = input<Action[]>([]);\n /**\n * Defines whether and in which direction the split part can collapse.\n * When unset, the collapse button is hidden.\n *\n * @defaultValue undefined\n */\n readonly collapsible = input<CollapseTo>();\n\n /**\n * Sets the icon class that is used in the buttons of split parts to\n * collapse and uncollapse the parts.\n */\n readonly collapseIconClass = input<string | undefined>();\n\n /**\n * Collapse only to the given min size.\n *\n * @defaultValue false\n */\n readonly collapseToMinSize = input(false, { transform: booleanAttribute });\n\n /**\n * Custom template for the split part header. The template receives the component instance as implicit context.\n */\n readonly headerTemplate = input<TemplateRef<{ $implicit: SiSplitPartComponent }>>();\n\n /**\n * Sets the title of the split part header.\n */\n readonly heading = input<TranslatableString>();\n\n /**\n * Minimum size in px.\n *\n * @defaultValue 0\n */\n readonly minSize = input(0, { transform: numberAttribute });\n\n /**\n * When a split part is collapsed, the content gets hidden but it will\n * still remain within the DOM. If you want to remove and destroy the component\n * in collapsed mode and recreate it on un-collapse, set this property to\n * true.\n *\n * @defaultValue false\n */\n readonly removeContentOnCollapse = input(false, { transform: booleanAttribute });\n\n /**\n * Defines if the header of the split part is visible. Default is true.\n *\n * @defaultValue true\n */\n readonly showHeader = input(true, { transform: booleanAttribute });\n /**\n * Aria label for collapse button. Needed for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_SPLIT.COLLAPSE_LABEL:Collapse`)\n * ```\n */\n readonly collapseLabel = input<TranslatableString>(\n t(() => $localize`:@@SI_SPLIT.COLLAPSE_LABEL:Collapse`)\n );\n /**\n * An optional stateId to uniquely identify a component instance.\n * Required for persistence of ui state.\n */\n readonly stateId = input<string>();\n\n /**\n * Expanded size.\n */\n readonly size = input.required<number, number | string>({ transform: numberAttribute });\n\n /**\n * Unit for the configured {@link size}.\n */\n readonly unit = input.required<SplitUnit>();\n\n /**\n * This toggles the behavior when collapsing this split part.\n * If enabled, all split parts between this one and the end of the split in the respective direction will be collapsed if this part is collapsed.\n * If disabled, only this split part will be collapsed.\n *\n * @defaultValue false\n */\n readonly collapseOthers = input(false, { transform: booleanAttribute });\n\n /**\n * Sets the initial expanded or collapsed state of the split part.\n *\n * @defaultValue true\n */\n readonly expanded = input(true, { transform: booleanAttribute });\n\n /**\n * Emits when the part is collapsed or expanded.\n */\n readonly collapseChanged = output<boolean>();\n /**\n * Emits the part's expanded state and size after it is toggled.\n */\n readonly stateChange = output<PartState>();\n\n /** @internal */\n index = 0;\n /** @internal */\n readonly before = signal<SiSplitPartComponent | undefined>(undefined);\n /** @internal */\n readonly after = signal<SiSplitPartComponent | undefined>(undefined);\n\n /** @internal */\n readonly fractionalSize = linkedSignal(() => (this.unit() === 'fr' ? this.size() : undefined));\n\n /** @internal */\n readonly collapsedSize = computed(() => (this.collapseToMinSize() ? (this.minSize() ?? 40) : 40));\n\n /**\n * Internal, mutable collapsed state. Initialized from the {@link expanded} input but can be\n * overwritten while toggling, cascading to sibling parts or restoring the persisted ui state.\n * @internal\n */\n readonly collapsedState = linkedSignal(() => !this.expanded());\n\n /**\n * Internal, mutable collapse direction. Initialized from the {@link collapsible}\n * input but can be overwritten while cascading collapse state to sibling parts.\n * @internal\n */\n readonly collapseDirectionState = linkedSignal(() => this.collapsible());\n\n /**\n * Get collapsed state.\n * @returns True if the split part is collapsed, false is expanded.\n */\n get collapsed(): boolean {\n return this.collapsedState();\n }\n\n /** @internal */\n readonly expandedSize = linkedSignal({\n source: () => ({ size: this.size(), unit: this.unit() }),\n computation: source => (source.unit === 'fr' ? undefined : source.size)\n });\n\n /** @internal */\n readonly actualSize = computed(() => {\n if (this.collapsedState()) {\n return this.collapsedSize();\n }\n return this.expandedSize() ?? 0;\n });\n\n /** @internal */\n saveUIState!: () => void;\n\n /** @internal */\n readonly nextExpandedAfter = computed(() => {\n if (!this.collapsedState()) {\n return this as SiSplitPartComponent;\n }\n const after = this.after();\n const nextExpanded: SiSplitPartComponent = after ? after.nextExpandedAfter() : this;\n\n return nextExpanded;\n });\n\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n protected headerContext: { $implicit: SiSplitPartComponent } = {\n $implicit: this\n };\n\n constructor() {\n effect(() => {\n this.expanded();\n untracked(() => {\n if (this.collapseOthers()) {\n this.before()?.refreshCollapseToStart();\n this.after()?.refreshCollapsedToEnd();\n }\n });\n });\n }\n\n /** @internal */\n refreshSizePx(orientation: SplitOrientation): void {\n if (!this.collapsedState()) {\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n if (orientation === 'vertical') {\n this.expandedSize.set(rect.height);\n } else {\n this.expandedSize.set(rect.width);\n }\n }\n }\n\n /**\n * Toggles the collapsed or expanded state.\n */\n toggleCollapse(): void {\n this.collapsedState.update(v => !v);\n if (this.collapseOthers()) {\n this.before()?.refreshCollapseToStart();\n this.after()?.refreshCollapsedToEnd();\n }\n this.collapseChanged.emit(this.collapsedState());\n this.stateChange.emit({ expanded: !this.collapsedState(), size: this.actualSize() });\n this.saveUIState();\n }\n\n private refreshCollapsedToEnd(): void {\n const before = this.before();\n if (before?.collapsedState() && before.collapseDirectionState() === 'to-end') {\n this.collapsedState.set(true);\n this.collapseDirectionState.set('to-end');\n this.after()?.refreshCollapsedToEnd();\n }\n }\n\n private refreshCollapseToStart(): void {\n const after = this.after();\n if (after?.collapsedState() && after.collapseDirectionState() === 'to-start') {\n this.collapsedState.set(true);\n this.collapseDirectionState.set('to-start');\n this.before()?.refreshCollapseToStart();\n }\n }\n}\n","@if (!headerTemplate() && showHeader()) {\n <div\n class=\"si-split-part-header\"\n [class.gap-4]=\"collapsedState()\"\n [class.is-collapsed]=\"collapsedState()\"\n >\n <div class=\"si-split-part-title text-truncate\">\n {{ heading() | translate }}\n </div>\n @if (!collapsedState()) {\n <div class=\"si-split-part-actions\">\n @for (action of actions(); track $index) {\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost si-split-button\"\n [title]=\"action.tooltip || ''\"\n [attr.aria-label]=\"action.tooltip\"\n (click)=\"action.click($event)\"\n >\n <si-icon [icon]=\"action.iconClass\" />\n </button>\n }\n </div>\n }\n @if (collapsible()) {\n <div class=\"si-split-part-collapse-button\">\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost si-split-button\"\n [attr.aria-label]=\"collapseLabel() | translate\"\n (click)=\"toggleCollapse()\"\n >\n <si-icon class=\"collapse-icon\" [icon]=\"collapseIconClass() ?? icons.elementDoubleRight\" />\n </button>\n </div>\n }\n </div>\n}\n\n@if (headerTemplate(); as headerTemplate) {\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: headerContext\" />\n}\n\n<div\n class=\"si-split-part-content\"\n [class.d-none]=\"!removeContentOnCollapse() && collapsedState() && !collapseToMinSize()\"\n>\n @if (!removeContentOnCollapse() || !collapsedState()) {\n <ng-content />\n }\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n ChangeDetectorRef,\n Component,\n computed,\n contentChildren,\n ElementRef,\n inject,\n input,\n NgZone,\n signal,\n Signal,\n DOCUMENT,\n DestroyRef,\n output\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport {\n isRTL,\n SI_UI_STATE_SERVICE,\n WebComponentContentChildren\n} from '@siemens/element-ng/common';\nimport { asapScheduler, fromEvent, merge } from 'rxjs';\nimport { observeOn, takeUntil } from 'rxjs/operators';\n\nimport { SiSplitPartComponent } from './si-split-part.component';\nimport { SplitOrientation, SplitUnit } from './si-split.interfaces';\n\ninterface Gutter {\n before: SiSplitPartComponent;\n after: SiSplitPartComponent;\n visible: Signal<boolean>;\n}\n\ninterface SplitPartState {\n size: number;\n initialSize: number;\n initialUnit: SplitUnit;\n expanded: boolean;\n}\n\n@Component({\n selector: 'si-split',\n templateUrl: './si-split.component.html',\n styleUrl: './si-split.component.scss',\n host: {\n '[class]': 'orientation()',\n '[style.grid-template-rows]': 'gridTemplateRows()',\n '[style.grid-template-columns]': 'gridTemplateColumns()',\n '[style.grid-template-areas]': 'gridTemplateAreas()'\n }\n})\nexport class SiSplitComponent {\n /**\n * Size of the gutter (divider) between split parts in pixels.\n *\n * @defaultValue 16\n */\n readonly gutterSize = input(16);\n\n /**\n * Defines the split layout direction.\n *\n * @defaultValue 'horizontal'\n */\n readonly orientation = input<SplitOrientation>('horizontal');\n\n /**\n * An optional stateId to uniquely identify a component instance.\n * Required for persistence of ui state.\n */\n readonly stateId = input<string>();\n\n /**\n * Emits the sizes of all parts as percentages when the user resizes a gutter.\n */\n readonly sizesChange = output<number[]>();\n\n @WebComponentContentChildren(SiSplitPartComponent)\n protected readonly parts = contentChildren(SiSplitPartComponent);\n protected readonly gutters = signal<Gutter[]>([]);\n\n private readonly gridTemplate = computed(() => {\n if (!this.initialized()) {\n return '';\n }\n return this.parts()\n .map(part =>\n part.collapsedState()\n ? part.collapseToMinSize()\n ? `${part.minSize()}px`\n : 'min-content'\n : part.unit() === 'px'\n ? `minmax(${part.minSize()}px, ${part.expandedSize() ?? part.size()}px)`\n : `minmax(${part.minSize()}px, ${\n part.expandedSize() === undefined\n ? part.fractionalSize()! * this.fractionalSizeToExpandedSizeFactor()\n : part.fractionalSize()!\n }fr)`\n )\n .join(' min-content ');\n });\n\n protected readonly gridTemplateRows = computed(() =>\n this.orientation() === 'vertical' ? this.gridTemplate() : '1fr'\n );\n\n protected readonly gridTemplateColumns = computed(() =>\n this.orientation() === 'horizontal' ? this.gridTemplate() : '1fr'\n );\n\n protected readonly gridTemplateAreas = computed(() => {\n if (!this.initialized()) {\n return '';\n }\n const areaNames = this.parts()\n .map((part, index) => [`p-${index}`, part.after() ? `g-${index}` : []])\n .flat(2) as string[];\n\n if (this.orientation() === 'horizontal') {\n return `\"${areaNames.join(' ')}\"`;\n } else {\n return `\"${areaNames.join('\" \"')}\"`;\n }\n });\n\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly ngZone = inject(NgZone);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly document = inject(DOCUMENT);\n private readonly uiStateService = inject(SI_UI_STATE_SERVICE, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n // Existing fr parts are measured in pixels after layout or dragging, so their fr weights become\n // pixel-derived. A newly added fr part has not been measured yet and still has its configured\n // weight. This factor converts that configured weight into the same scale until it is measured.\n // It is the ratio of measured expanded sizes to configured weights of visible measured fr parts.\n private readonly fractionalSizeToExpandedSizeFactor = computed(() => {\n const measuredParts = this.parts().filter(\n part => !part.collapsedState() && part.unit() === 'fr' && part.expandedSize() !== undefined\n );\n const configuredSizeSum = measuredParts.reduce((sum, part) => sum + part.size(), 0);\n const expandedSizeSum = measuredParts.reduce((sum, part) => sum + part.expandedSize()!, 0);\n\n return configuredSizeSum ? expandedSizeSum / configuredSizeSum : 1;\n });\n private readonly initialized = signal(false);\n\n constructor() {\n toObservable(this.parts)\n .pipe(observeOn(asapScheduler), takeUntilDestroyed())\n .subscribe(() => this.setupParts());\n }\n\n private setupParts(): void {\n this.initialized.set(true);\n const gutters: Gutter[] = [];\n\n const parts = this.parts();\n for (let index = 0; index < parts.length; index++) {\n const component = parts[index];\n component.index = index;\n component.after.set(parts[index + 1]);\n component.before.set(parts[index - 1]);\n component.saveUIState = () => this.saveUIState();\n\n if (component.after()) {\n gutters.push({\n before: component,\n after: parts[index + 1]!,\n visible: computed(() => {\n const afterPart = component.after()!.nextExpandedAfter();\n return !afterPart.collapsedState() && !component.collapsedState();\n })\n });\n }\n }\n this.gutters.set(gutters);\n\n this.restoreFromUIState();\n setTimeout(() => this.refreshAllPartSizes());\n }\n\n private refreshAllPartSizes(): void {\n this.parts().forEach(part => {\n part.refreshSizePx(this.orientation());\n if (!part.collapsedState() && part.unit() === 'fr') {\n part.fractionalSize.set(part.expandedSize()!);\n }\n });\n }\n\n protected resizeStart(gutter: Gutter, event: Event): void {\n this.refreshAllPartSizes();\n this.changeDetectorRef.detectChanges();\n const afterPart = gutter.after.nextExpandedAfter();\n let beforeSize = gutter.before.expandedSize()!;\n let afterSize = afterPart.expandedSize()!;\n let appliedDelta = 0;\n const rtl = isRTL();\n const startPosition = this.getPosition(event);\n const minDelta = -1 * (beforeSize - gutter.before.minSize());\n const maxDelta = afterSize - afterPart.minSize();\n event.preventDefault(); // prevents text-selection\n\n this.ngZone.runOutsideAngular(() => {\n merge(fromEvent(this.document, 'mousemove'), fromEvent(this.document, 'touchmove'))\n .pipe(\n takeUntil(\n merge(fromEvent(this.document, 'mouseup'), fromEvent(this.document, 'touchend'))\n ),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe({\n next: move => {\n let delta = this.getPosition(move) - startPosition;\n if (rtl && this.orientation() === 'horizontal') {\n delta *= -1;\n }\n\n delta -= appliedDelta;\n if (maxDelta < appliedDelta + delta) {\n delta = maxDelta - appliedDelta;\n } else if (minDelta > appliedDelta + delta) {\n delta = minDelta - appliedDelta;\n }\n\n if (delta === 0) {\n return;\n }\n\n beforeSize += delta;\n afterSize -= delta;\n appliedDelta += delta;\n gutter.before.expandedSize.set(beforeSize);\n afterPart.expandedSize.set(afterSize);\n if (gutter.before.unit() === 'fr') {\n gutter.before.fractionalSize.set(beforeSize);\n }\n if (afterPart.unit() === 'fr') {\n afterPart.fractionalSize.set(afterSize);\n }\n if (this.orientation() === 'vertical') {\n this.elementRef.nativeElement.style.setProperty(\n 'grid-template-rows',\n this.gridTemplateRows()\n );\n } else {\n this.elementRef.nativeElement.style.setProperty(\n 'grid-template-columns',\n this.gridTemplateColumns()\n );\n }\n this.emitSizesChange();\n },\n complete: () => this.saveUIState()\n });\n });\n }\n\n private emitSizesChange(): void {\n const containerSize = this.measureContainerSize();\n if (containerSize > 0) {\n this.ngZone.run(() =>\n this.sizesChange.emit(this.parts().map(part => (part.actualSize() * 100) / containerSize))\n );\n }\n }\n\n private measureContainerSize(): number {\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n if (this.orientation() === 'vertical') {\n return rect.height;\n } else {\n return rect.width;\n }\n }\n\n private getPosition(event: Event): number {\n const positionObject = (event as TouchEvent).touches?.[0] ?? (event as MouseEvent);\n return this.orientation() === 'horizontal'\n ? (positionObject.clientX ?? 0)\n : (positionObject.clientY ?? 0);\n }\n\n private saveUIState(): void {\n const stateId = this.stateId();\n if (!stateId || !this.uiStateService) {\n return;\n }\n\n const state = this.parts().reduce(\n (partState, part) => {\n const partStateId = part.stateId();\n if (partStateId) {\n const unit = part.unit();\n partState[partStateId] = {\n size: unit === 'px' ? part.expandedSize()! : part.fractionalSize()!,\n initialSize: part.size(),\n initialUnit: unit,\n expanded: !part.collapsedState()\n };\n }\n return partState;\n },\n {} as Record<string, SplitPartState>\n );\n\n this.uiStateService.save(stateId, state);\n }\n\n private restoreFromUIState(): void {\n const stateId = this.stateId();\n if (!stateId || !this.uiStateService) {\n return;\n }\n\n this.uiStateService.load<Record<string, SplitPartState>>(stateId).then(uiState => {\n if (!uiState) {\n return;\n }\n\n let restored = false;\n this.parts()\n .filter(part => part.stateId())\n .map(part => ({ part, state: uiState[part.stateId()!] }))\n .filter(\n (item): item is { part: SiSplitPartComponent; state: SplitPartState } =>\n !!item.state && item.state.initialUnit === item.part.unit()\n )\n .forEach(({ part, state }) => {\n restored = true;\n if (part.unit() === 'px') {\n part.expandedSize.set(state.size);\n } else {\n part.fractionalSize.set(state.size);\n }\n part.collapsedState.set(!state.expanded);\n });\n setTimeout(() => {\n this.refreshAllPartSizes();\n if (restored) {\n this.emitSizesChange();\n }\n });\n });\n }\n}\n","<ng-content />\n\n@for (gutter of gutters(); track $index) {\n @if ($index < parts().length - 1) {\n <div\n class=\"si-split-gutter\"\n [class.d-none]=\"!gutter.visible()\"\n [style.grid-area]=\"'g-' + $index\"\n [style.width.px]=\"orientation() === 'horizontal' ? gutterSize() : null\"\n [style.height.px]=\"orientation() === 'vertical' ? gutterSize() : null\"\n (mousedown)=\"resizeStart(gutter, $event)\"\n (touchstart)=\"resizeStart(gutter, $event)\"\n ></div>\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiSplitPartComponent } from './si-split-part.component';\nimport { SiSplitComponent } from './si-split.component';\n\n@NgModule({\n imports: [SiSplitComponent, SiSplitPartComponent],\n exports: [SiSplitComponent, SiSplitPartComponent]\n})\nexport class SiSplitModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-split.module';\nexport * from './si-split-part.component';\nexport * from './si-split.component';\nexport * from './si-split.interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -86,13 +86,13 @@ class SiStatusBarItemComponent {
86
86
  return !!rgb && Math.round((rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000) <= 128;
87
87
  }
88
88
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiStatusBarItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
89
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.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-disabled]=\"!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:var(--si-sys-sizing-spacing-y-20)}:host.compact .status-item{padding-block:var(--si-sys-sizing-spacing-y-10)}:host.clickable:hover .status-item{background-color:var(--si-sys-color-background-0)!important}:host.clickable:hover .bg{display:none!important}:host ::ng-deep .indicator-disabled{color:var(--si-sys-color-text-disabled)}.status-item{position:relative;isolation:isolate;padding-block:var(--si-sys-sizing-spacing-y-40);padding-inline:var(--si-sys-sizing-spacing-x-20) var(--si-sys-sizing-spacing-x-40);min-inline-size:var(--__si-status-bar-item-min-width, 7.1429em);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:var(--si-sys-sizing-spacing-x-20);border-radius:calc(var(--si-sys-sizing-spacing-x-20) / 2);background:var(--si-sys-color-border-4)}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Eager });
89
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.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-disabled]=\"!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\"\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-body-sbold 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:var(--si-sys-sizing-spacing-y-20)}:host.compact .status-item{padding-block:var(--si-sys-sizing-spacing-y-10)}:host.clickable:hover .status-item{background-color:var(--si-sys-color-background-0)!important}:host.clickable:hover .bg{display:none!important}:host ::ng-deep .indicator-disabled{color:var(--si-sys-color-text-disabled)}.status-item{position:relative;isolation:isolate;padding-block:var(--si-sys-sizing-spacing-y-40);padding-inline:var(--si-sys-sizing-spacing-x-20) var(--si-sys-sizing-spacing-x-40);min-inline-size:var(--__si-status-bar-item-min-width, 7.1429em);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:var(--si-sys-sizing-spacing-x-20);border-radius:calc(var(--si-sys-sizing-spacing-x-20) / 2);background:var(--si-sys-color-border-4)}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Eager });
90
90
  }
91
91
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiStatusBarItemComponent, decorators: [{
92
92
  type: Component,
93
93
  args: [{ selector: 'si-status-bar-item', imports: [SiIconComponent, SiTranslatePipe], changeDetection: ChangeDetectionStrategy.Eager, host: {
94
94
  '[class.clickable]': 'clickable()'
95
- }, template: "<div\n class=\"status-item rounded-2 focus-inside d-flex align-items-center\"\n [class.text-disabled]=\"!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:var(--si-sys-sizing-spacing-y-20)}:host.compact .status-item{padding-block:var(--si-sys-sizing-spacing-y-10)}:host.clickable:hover .status-item{background-color:var(--si-sys-color-background-0)!important}:host.clickable:hover .bg{display:none!important}:host ::ng-deep .indicator-disabled{color:var(--si-sys-color-text-disabled)}.status-item{position:relative;isolation:isolate;padding-block:var(--si-sys-sizing-spacing-y-40);padding-inline:var(--si-sys-sizing-spacing-x-20) var(--si-sys-sizing-spacing-x-40);min-inline-size:var(--__si-status-bar-item-min-width, 7.1429em);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:var(--si-sys-sizing-spacing-x-20);border-radius:calc(var(--si-sys-sizing-spacing-x-20) / 2);background:var(--si-sys-color-border-4)}\n"] }]
95
+ }, template: "<div\n class=\"status-item rounded-2 focus-inside d-flex align-items-center\"\n [class.text-disabled]=\"!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\"\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-body-sbold 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:var(--si-sys-sizing-spacing-y-20)}:host.compact .status-item{padding-block:var(--si-sys-sizing-spacing-y-10)}:host.clickable:hover .status-item{background-color:var(--si-sys-color-background-0)!important}:host.clickable:hover .bg{display:none!important}:host ::ng-deep .indicator-disabled{color:var(--si-sys-color-text-disabled)}.status-item{position:relative;isolation:isolate;padding-block:var(--si-sys-sizing-spacing-y-40);padding-inline:var(--si-sys-sizing-spacing-x-20) var(--si-sys-sizing-spacing-x-40);min-inline-size:var(--__si-status-bar-item-min-width, 7.1429em);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:var(--si-sys-sizing-spacing-x-20);border-radius:calc(var(--si-sys-sizing-spacing-x-20) / 2);background:var(--si-sys-color-border-4)}\n"] }]
96
96
  }], 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 }] }] } });
97
97
 
98
98
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"siemens-element-ng-status-bar.mjs","sources":["../../../../projects/element-ng/status-bar/si-status-bar-item/si-status-bar-item.component.ts","../../../../projects/element-ng/status-bar/si-status-bar-item/si-status-bar-item.component.html","../../../../projects/element-ng/status-bar/si-status-bar.component.ts","../../../../projects/element-ng/status-bar/si-status-bar.component.html","../../../../projects/element-ng/status-bar/si-status-bar.module.ts","../../../../projects/element-ng/status-bar/si-status-bar-item/index.ts","../../../../projects/element-ng/status-bar/index.ts","../../../../projects/element-ng/status-bar/siemens-element-ng-status-bar.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n OnChanges,\n output,\n SimpleChanges,\n viewChild\n} from '@angular/core';\nimport { ExtendedStatusType } from '@siemens/element-ng/common';\nimport { SiIconComponent, STATUS_ICON_CONFIG } from '@siemens/element-ng/icon';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\n\n@Component({\n selector: 'si-status-bar-item',\n imports: [SiIconComponent, SiTranslatePipe],\n templateUrl: './si-status-bar-item.component.html',\n styleUrl: './si-status-bar-item.component.scss',\n changeDetection: ChangeDetectionStrategy.Eager,\n host: {\n '[class.clickable]': 'clickable()'\n }\n})\nexport class SiStatusBarItemComponent implements OnChanges {\n private readonly statusIcons = inject(STATUS_ICON_CONFIG);\n /**\n * Status that determines the displayed icon and color.\n */\n readonly status = input<ExtendedStatusType>();\n /**\n * Value displayed by the status bar item.\n */\n readonly value = input.required<TranslatableString | number>();\n /**\n * Heading displayed for the status bar item.\n */\n readonly heading = input.required<TranslatableString>();\n /**\n * Custom background color for the item.\n */\n readonly color = input<string>();\n /**\n * Whether the item blinks to highlight its status.\n *\n * @defaultValue false\n */\n readonly blink = input(false, { transform: booleanAttribute });\n /**\n * Whether only the value is displayed.\n *\n * @defaultValue false\n */\n readonly valueOnly = input<boolean | undefined, unknown>(false, { transform: booleanAttribute });\n /**\n * Whether the item has an interactive appearance.\n *\n * @defaultValue false\n */\n readonly clickable = input(false, { transform: booleanAttribute });\n\n /**\n * Emits when the value changes between an empty and non-empty state.\n */\n readonly significanceChange = output<void>();\n\n private readonly bg = viewChild.required<ElementRef>('bg');\n\n protected readonly contrastFix = computed(() => {\n return !!this.color() && this.blink() && this.calculateContrastFix();\n });\n protected readonly statusIcon = computed(() => {\n const status = this.status();\n return status ? this.statusIcons[status] : undefined;\n });\n protected readonly background = computed(() =>\n this.blink() && this.status() !== 'success' ? (this.statusIcon()?.background ?? '') : ''\n );\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (changes.value) {\n if (\n (changes.value.previousValue && !changes.value.currentValue) ||\n (!changes.value.previousValue && changes.value.currentValue)\n ) {\n this.significanceChange.emit();\n }\n }\n }\n\n private calculateContrastFix(): boolean {\n // see https://www.w3.org/TR/AERT/#color-contrast\n const rgb = getComputedStyle(this.bg().nativeElement)\n .backgroundColor?.match(/\\d+/g)\n ?.map(v => +v);\n return !!rgb && Math.round((rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000) <= 128;\n }\n}\n","<div\n class=\"status-item rounded-2 focus-inside d-flex align-items-center\"\n [class.text-disabled]=\"!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","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n Component,\n ElementRef,\n inject,\n input,\n OnChanges,\n OnDestroy,\n output,\n signal,\n SimpleChanges,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { elementDown2, elementSoundMute, elementSoundOn } from '@siemens/element-icons';\nimport { BlinkService, STATUS_ICON, TextMeasureService } from '@siemens/element-ng/common';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport {\n ResizeObserverService,\n SiResizeObserverDirective\n} from '@siemens/element-ng/resize-observer';\nimport {\n injectSiTranslateService,\n SiTranslatePipe,\n t\n} from '@siemens/element-translate-ng/translate';\nimport { Observable, Subscription } from 'rxjs';\nimport { first } from 'rxjs/operators';\n\nimport { SiStatusBarItemComponent } from './si-status-bar-item/si-status-bar-item.component';\nimport { StatusBarItem } from './si-status-bar-item/si-status-bar-item.model';\n\ninterface ExtendedStatusBarItem extends StatusBarItem {\n isSpecial?: boolean;\n mutePadding?: boolean;\n}\n\n// this is a function because Angular compiler exports arrows for no good reason\n// eslint-disable-next-line prefer-arrow/prefer-arrow-functions\nfunction itemSortFunction(a: StatusBarItem, b: StatusBarItem): number {\n return a.status && b.status ? STATUS_ICON[a.status].severity - STATUS_ICON[b.status].severity : 0;\n}\n\nlet idCounter = 1;\n\n/**\n * The status bar is the main component within an application to inform users at all times\n * about important status information.\n */\n@Component({\n selector: 'si-status-bar',\n imports: [\n NgTemplateOutlet,\n SiIconComponent,\n SiStatusBarItemComponent,\n SiResizeObserverDirective,\n SiTranslatePipe\n ],\n templateUrl: './si-status-bar.component.html',\n styleUrl: './si-status-bar.component.scss'\n})\nexport class SiStatusBarComponent implements OnDestroy, OnChanges {\n private static readonly minNumberOfItems = 2;\n private static readonly itemMinWidthEm = 7.1429;\n private static readonly itemMaxWidthEm = 10.8;\n private static readonly itemSpacing = 4;\n private static readonly itemPadding = 12; // ps-2 + pe-4\n private static readonly itemColorBarWidth = 4;\n private static readonly itemColorBarMargin = 6;\n private static readonly itemIconWidthEm = 20 / 14;\n private static readonly itemIconMargin = 8;\n private static readonly mainPadding = 12; // ps-4 + pe-2\n\n /**\n * Array of status bar items.\n */\n readonly items = input.required<StatusBarItem[]>();\n /**\n * When true, items with a value have a blinking background\n *\n * @defaultValue false\n */\n readonly blink = input(false, { transform: booleanAttribute });\n /**\n * State of the mute button. Set to `undefined` for no button.\n */\n readonly muteButton = input<boolean>();\n /**\n * Text/translation key on mute button for screen reader\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_STATUS_BAR.MUTE:Mute/unmute`)\n * ```\n */\n readonly muteButtonText = input(t(() => $localize`:@@SI_STATUS_BAR.MUTE:Mute/unmute`));\n /**\n * Text/translation key for \"All OK\" status in mobile\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_STATUS_BAR.ALL_OK:All OK`)\n * ```\n */\n readonly allOkText = input(t(() => $localize`:@@SI_STATUS_BAR.ALL_OK:All OK`));\n /**\n * compact mode\n *\n * @defaultValue false\n */\n readonly compact = input(false, { transform: booleanAttribute });\n /**\n * blink pulse generator for synchronized blinking with other components\n */\n readonly blinkPulse = input<Observable<boolean>>();\n /**\n * Text for the toggle button that expands/collapses the status bar. Required for a11y.\n * The expanded/collapsed state is communicated separately via `aria-expanded`.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_STATUS_BAR.TOGGLE:Toggle`)\n * ```\n */\n readonly toggleButtonText = input(t(() => $localize`:@@SI_STATUS_BAR.TOGGLE:Toggle`));\n\n /**\n * Emitted when the mute toggle button is clicked\n */\n readonly muteToggle = output();\n\n private readonly theBar = viewChild.required<ElementRef>('thebar');\n private readonly content = viewChild.required<ElementRef>('content');\n private readonly custom = viewChild.required<ElementRef>('custom');\n\n protected readonly responsiveItems = signal<ExtendedStatusBarItem[]>([]);\n protected responsiveMode = 0;\n protected readonly expanded = signal(0);\n protected readonly placeholderHeight = signal(0);\n protected readonly contentHeight = signal<number | undefined>(undefined);\n protected readonly blinkOnOff = signal<boolean | undefined>(undefined);\n protected readonly icons = addIcons({ elementDown2, elementSoundMute, elementSoundOn });\n protected statusId = `__si-status-bar-${idCounter++}`;\n\n private timer: any;\n private significanceUpdateTimer: any = 0;\n\n private blinkSubs?: Subscription;\n\n private readonly element = inject(ElementRef);\n private readonly blinkService = inject(BlinkService);\n private readonly translateService = injectSiTranslateService();\n private readonly resizeObserver = inject(ResizeObserverService);\n private readonly measureService = inject(TextMeasureService);\n\n constructor() {\n this.resizeObserver\n .observe(this.element.nativeElement, 100, true)\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.resizeHandler());\n this.translateService.translationChange\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.resizeHandler());\n }\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (this.blinkService && changes.blink) {\n this.blinkSubs?.unsubscribe();\n if (this.blink()) {\n const pulse = this.blinkPulse() ?? this.blinkService.pulse$;\n this.blinkSubs = pulse.subscribe(onOff => {\n this.blinkOnOff.set(onOff);\n });\n }\n }\n this.resizeHandler();\n }\n\n ngOnDestroy(): void {\n this.blinkSubs?.unsubscribe();\n clearTimeout(this.significanceUpdateTimer);\n }\n\n protected significanceChanged(): void {\n if (this.responsiveMode && !this.significanceUpdateTimer) {\n this.significanceUpdateTimer = setTimeout(() => {\n this.significanceUpdateTimer = 0;\n this.calcResponsiveItems();\n });\n }\n }\n\n protected onItemClicked(item: StatusBarItem): void {\n if (item.action) {\n item.action(item);\n }\n }\n\n protected toggleExpand(): void {\n clearTimeout(this.timer);\n if (!this.expanded()) {\n this.expanded.set(2);\n this.placeholderHeight.set(this.theBar().nativeElement.offsetHeight);\n this.contentHeight.set(0);\n\n this.timer = window.setTimeout(() => {\n this.contentHeight.set(this.content().nativeElement.scrollHeight);\n window.setTimeout(() => {\n this.contentHeight.set(undefined);\n }, 500);\n }, 10);\n } else {\n this.contentHeight.set(this.content().nativeElement.scrollHeight);\n this.expanded.set(1);\n\n window.setTimeout(() => {\n this.contentHeight.set(0);\n window.setTimeout(() => {\n this.placeholderHeight.set(0);\n this.expanded.set(0);\n }, 500);\n }, 10);\n }\n }\n\n protected resizeHandler(): void {\n const style = getComputedStyle(this.element.nativeElement);\n const fontSize = parseFloat(style.fontSize);\n const lineHeight = parseFloat(style.lineHeight);\n const size = this.element.nativeElement.clientWidth;\n const muteWidth = this.getMuteButtonWidth(lineHeight);\n const customWidth = this.custom().nativeElement.scrollWidth ?? 0;\n const minWidth =\n this.items().length *\n (SiStatusBarComponent.itemMinWidthEm * fontSize + SiStatusBarComponent.itemSpacing) +\n SiStatusBarComponent.itemSpacing +\n muteWidth +\n customWidth;\n if (size < minWidth) {\n this.setResponsiveMode(fontSize, true);\n } else if (this.items().length) {\n this.calculateRequiredWidth(fontSize, muteWidth, customWidth);\n }\n }\n\n private getMuteButtonWidth(lineHeight: number): number {\n if (this.muteButton() === undefined) {\n return 0;\n }\n // button size is line-height + px-4 + ms-5 + me-2\n return lineHeight + 32;\n }\n\n private setResponsiveMode(fontSize: number, responsive: boolean): void {\n if (responsive) {\n const size = this.element.nativeElement.clientWidth;\n const minSize =\n SiStatusBarComponent.itemMinWidthEm * fontSize * SiStatusBarComponent.minNumberOfItems;\n this.responsiveMode =\n size < minSize\n ? 1\n : Math.max(\n Math.floor(size / (SiStatusBarComponent.itemMaxWidthEm * fontSize)) - 1,\n SiStatusBarComponent.minNumberOfItems\n );\n } else {\n this.responsiveMode = 0;\n }\n\n if (this.responsiveMode) {\n this.contentHeight.set(this.expanded() ? this.content().nativeElement.scrollHeight : 0);\n this.significanceChanged();\n } else {\n this.expanded.set(0);\n this.placeholderHeight.set(0);\n this.contentHeight.set(undefined);\n }\n }\n\n private calcResponsiveItems(): void {\n const activeItems: ExtendedStatusBarItem[] = this.items()\n .filter(item => item.value)\n .sort(itemSortFunction);\n\n if (activeItems.length > this.responsiveMode) {\n activeItems[this.responsiveMode - 1] = {\n status: activeItems[this.responsiveMode - 1].status,\n color: activeItems[this.responsiveMode - 1].color,\n value: activeItems.length - this.responsiveMode + 1 + '+',\n title: '',\n action: () => this.toggleExpand(),\n isSpecial: true\n };\n activeItems.length = this.responsiveMode;\n } else if (!activeItems.length) {\n activeItems.push({\n status: 'success',\n title: '',\n value: this.allOkText(),\n isSpecial: true\n });\n }\n if (activeItems.length === this.responsiveMode) {\n activeItems[activeItems.length - 1].mutePadding = true;\n }\n this.responsiveItems.set(activeItems);\n }\n\n private calculateRequiredWidth(fontSize: number, muteWidth: number, customWidth: number): void {\n const keys: string[] = [];\n for (const item of this.items()) {\n keys.push(item.title, item.value.toString());\n }\n this.translateService\n .translateAsync(keys)\n .pipe(first())\n .subscribe(translations => {\n const size = this.element.nativeElement.clientWidth;\n\n const requiredWidth = this.items().reduce(\n (acc, item) => {\n const titleWidth = this.measureService.measureText(translations[item.title]);\n const valueWidth = this.measureService.measureText(\n translations[item.value],\n undefined,\n { fontWeight: 'bold' }\n );\n const textWidth = Math.max(titleWidth, valueWidth);\n const itemWidth =\n Math.max(\n SiStatusBarComponent.itemMinWidthEm * fontSize,\n this.getItemWidth(fontSize, textWidth, item)\n ) + SiStatusBarComponent.itemSpacing;\n return acc + itemWidth;\n },\n muteWidth +\n customWidth +\n SiStatusBarComponent.itemSpacing +\n SiStatusBarComponent.mainPadding\n );\n\n this.setResponsiveMode(fontSize, size < requiredWidth);\n });\n }\n\n private getItemWidth(fontSize: number, textWidth: number, item: StatusBarItem): number {\n const indicatorWidth = item.color\n ? SiStatusBarComponent.itemColorBarWidth + SiStatusBarComponent.itemColorBarMargin\n : SiStatusBarComponent.itemIconWidthEm * fontSize + SiStatusBarComponent.itemIconMargin;\n return textWidth + SiStatusBarComponent.itemPadding + indicatorWidth;\n }\n}\n","<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.shadow-3]=\"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]=\"toggleButtonText() | 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","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiStatusBarComponent } from './si-status-bar.component';\n\n@NgModule({\n imports: [SiStatusBarComponent],\n exports: [SiStatusBarComponent]\n})\nexport class SiStatusBarModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-status-bar-item.component';\nexport * from './si-status-bar-item.model';\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-status-bar.component';\nexport * from './si-status-bar.module';\nexport * from './si-status-bar-item/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"siemens-element-ng-status-bar.mjs","sources":["../../../../projects/element-ng/status-bar/si-status-bar-item/si-status-bar-item.component.ts","../../../../projects/element-ng/status-bar/si-status-bar-item/si-status-bar-item.component.html","../../../../projects/element-ng/status-bar/si-status-bar.component.ts","../../../../projects/element-ng/status-bar/si-status-bar.component.html","../../../../projects/element-ng/status-bar/si-status-bar.module.ts","../../../../projects/element-ng/status-bar/si-status-bar-item/index.ts","../../../../projects/element-ng/status-bar/index.ts","../../../../projects/element-ng/status-bar/siemens-element-ng-status-bar.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n OnChanges,\n output,\n SimpleChanges,\n viewChild\n} from '@angular/core';\nimport { ExtendedStatusType } from '@siemens/element-ng/common';\nimport { SiIconComponent, STATUS_ICON_CONFIG } from '@siemens/element-ng/icon';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\n\n@Component({\n selector: 'si-status-bar-item',\n imports: [SiIconComponent, SiTranslatePipe],\n templateUrl: './si-status-bar-item.component.html',\n styleUrl: './si-status-bar-item.component.scss',\n changeDetection: ChangeDetectionStrategy.Eager,\n host: {\n '[class.clickable]': 'clickable()'\n }\n})\nexport class SiStatusBarItemComponent implements OnChanges {\n private readonly statusIcons = inject(STATUS_ICON_CONFIG);\n /**\n * Status that determines the displayed icon and color.\n */\n readonly status = input<ExtendedStatusType>();\n /**\n * Value displayed by the status bar item.\n */\n readonly value = input.required<TranslatableString | number>();\n /**\n * Heading displayed for the status bar item.\n */\n readonly heading = input.required<TranslatableString>();\n /**\n * Custom background color for the item.\n */\n readonly color = input<string>();\n /**\n * Whether the item blinks to highlight its status.\n *\n * @defaultValue false\n */\n readonly blink = input(false, { transform: booleanAttribute });\n /**\n * Whether only the value is displayed.\n *\n * @defaultValue false\n */\n readonly valueOnly = input<boolean | undefined, unknown>(false, { transform: booleanAttribute });\n /**\n * Whether the item has an interactive appearance.\n *\n * @defaultValue false\n */\n readonly clickable = input(false, { transform: booleanAttribute });\n\n /**\n * Emits when the value changes between an empty and non-empty state.\n */\n readonly significanceChange = output<void>();\n\n private readonly bg = viewChild.required<ElementRef>('bg');\n\n protected readonly contrastFix = computed(() => {\n return !!this.color() && this.blink() && this.calculateContrastFix();\n });\n protected readonly statusIcon = computed(() => {\n const status = this.status();\n return status ? this.statusIcons[status] : undefined;\n });\n protected readonly background = computed(() =>\n this.blink() && this.status() !== 'success' ? (this.statusIcon()?.background ?? '') : ''\n );\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (changes.value) {\n if (\n (changes.value.previousValue && !changes.value.currentValue) ||\n (!changes.value.previousValue && changes.value.currentValue)\n ) {\n this.significanceChange.emit();\n }\n }\n }\n\n private calculateContrastFix(): boolean {\n // see https://www.w3.org/TR/AERT/#color-contrast\n const rgb = getComputedStyle(this.bg().nativeElement)\n .backgroundColor?.match(/\\d+/g)\n ?.map(v => +v);\n return !!rgb && Math.round((rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000) <= 128;\n }\n}\n","<div\n class=\"status-item rounded-2 focus-inside d-flex align-items-center\"\n [class.text-disabled]=\"!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\"\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-body-sbold 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","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n Component,\n ElementRef,\n inject,\n input,\n OnChanges,\n OnDestroy,\n output,\n signal,\n SimpleChanges,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { elementDown2, elementSoundMute, elementSoundOn } from '@siemens/element-icons';\nimport { BlinkService, STATUS_ICON, TextMeasureService } from '@siemens/element-ng/common';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport {\n ResizeObserverService,\n SiResizeObserverDirective\n} from '@siemens/element-ng/resize-observer';\nimport {\n injectSiTranslateService,\n SiTranslatePipe,\n t\n} from '@siemens/element-translate-ng/translate';\nimport { Observable, Subscription } from 'rxjs';\nimport { first } from 'rxjs/operators';\n\nimport { SiStatusBarItemComponent } from './si-status-bar-item/si-status-bar-item.component';\nimport { StatusBarItem } from './si-status-bar-item/si-status-bar-item.model';\n\ninterface ExtendedStatusBarItem extends StatusBarItem {\n isSpecial?: boolean;\n mutePadding?: boolean;\n}\n\n// this is a function because Angular compiler exports arrows for no good reason\n// eslint-disable-next-line prefer-arrow/prefer-arrow-functions\nfunction itemSortFunction(a: StatusBarItem, b: StatusBarItem): number {\n return a.status && b.status ? STATUS_ICON[a.status].severity - STATUS_ICON[b.status].severity : 0;\n}\n\nlet idCounter = 1;\n\n/**\n * The status bar is the main component within an application to inform users at all times\n * about important status information.\n */\n@Component({\n selector: 'si-status-bar',\n imports: [\n NgTemplateOutlet,\n SiIconComponent,\n SiStatusBarItemComponent,\n SiResizeObserverDirective,\n SiTranslatePipe\n ],\n templateUrl: './si-status-bar.component.html',\n styleUrl: './si-status-bar.component.scss'\n})\nexport class SiStatusBarComponent implements OnDestroy, OnChanges {\n private static readonly minNumberOfItems = 2;\n private static readonly itemMinWidthEm = 7.1429;\n private static readonly itemMaxWidthEm = 10.8;\n private static readonly itemSpacing = 4;\n private static readonly itemPadding = 12; // ps-2 + pe-4\n private static readonly itemColorBarWidth = 4;\n private static readonly itemColorBarMargin = 6;\n private static readonly itemIconWidthEm = 20 / 14;\n private static readonly itemIconMargin = 8;\n private static readonly mainPadding = 12; // ps-4 + pe-2\n\n /**\n * Array of status bar items.\n */\n readonly items = input.required<StatusBarItem[]>();\n /**\n * When true, items with a value have a blinking background\n *\n * @defaultValue false\n */\n readonly blink = input(false, { transform: booleanAttribute });\n /**\n * State of the mute button. Set to `undefined` for no button.\n */\n readonly muteButton = input<boolean>();\n /**\n * Text/translation key on mute button for screen reader\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_STATUS_BAR.MUTE:Mute/unmute`)\n * ```\n */\n readonly muteButtonText = input(t(() => $localize`:@@SI_STATUS_BAR.MUTE:Mute/unmute`));\n /**\n * Text/translation key for \"All OK\" status in mobile\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_STATUS_BAR.ALL_OK:All OK`)\n * ```\n */\n readonly allOkText = input(t(() => $localize`:@@SI_STATUS_BAR.ALL_OK:All OK`));\n /**\n * compact mode\n *\n * @defaultValue false\n */\n readonly compact = input(false, { transform: booleanAttribute });\n /**\n * blink pulse generator for synchronized blinking with other components\n */\n readonly blinkPulse = input<Observable<boolean>>();\n /**\n * Text for the toggle button that expands/collapses the status bar. Required for a11y.\n * The expanded/collapsed state is communicated separately via `aria-expanded`.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_STATUS_BAR.TOGGLE:Toggle`)\n * ```\n */\n readonly toggleButtonText = input(t(() => $localize`:@@SI_STATUS_BAR.TOGGLE:Toggle`));\n\n /**\n * Emitted when the mute toggle button is clicked\n */\n readonly muteToggle = output();\n\n private readonly theBar = viewChild.required<ElementRef>('thebar');\n private readonly content = viewChild.required<ElementRef>('content');\n private readonly custom = viewChild.required<ElementRef>('custom');\n\n protected readonly responsiveItems = signal<ExtendedStatusBarItem[]>([]);\n protected responsiveMode = 0;\n protected readonly expanded = signal(0);\n protected readonly placeholderHeight = signal(0);\n protected readonly contentHeight = signal<number | undefined>(undefined);\n protected readonly blinkOnOff = signal<boolean | undefined>(undefined);\n protected readonly icons = addIcons({ elementDown2, elementSoundMute, elementSoundOn });\n protected statusId = `__si-status-bar-${idCounter++}`;\n\n private timer: any;\n private significanceUpdateTimer: any = 0;\n\n private blinkSubs?: Subscription;\n\n private readonly element = inject(ElementRef);\n private readonly blinkService = inject(BlinkService);\n private readonly translateService = injectSiTranslateService();\n private readonly resizeObserver = inject(ResizeObserverService);\n private readonly measureService = inject(TextMeasureService);\n\n constructor() {\n this.resizeObserver\n .observe(this.element.nativeElement, 100, true)\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.resizeHandler());\n this.translateService.translationChange\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.resizeHandler());\n }\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (this.blinkService && changes.blink) {\n this.blinkSubs?.unsubscribe();\n if (this.blink()) {\n const pulse = this.blinkPulse() ?? this.blinkService.pulse$;\n this.blinkSubs = pulse.subscribe(onOff => {\n this.blinkOnOff.set(onOff);\n });\n }\n }\n this.resizeHandler();\n }\n\n ngOnDestroy(): void {\n this.blinkSubs?.unsubscribe();\n clearTimeout(this.significanceUpdateTimer);\n }\n\n protected significanceChanged(): void {\n if (this.responsiveMode && !this.significanceUpdateTimer) {\n this.significanceUpdateTimer = setTimeout(() => {\n this.significanceUpdateTimer = 0;\n this.calcResponsiveItems();\n });\n }\n }\n\n protected onItemClicked(item: StatusBarItem): void {\n if (item.action) {\n item.action(item);\n }\n }\n\n protected toggleExpand(): void {\n clearTimeout(this.timer);\n if (!this.expanded()) {\n this.expanded.set(2);\n this.placeholderHeight.set(this.theBar().nativeElement.offsetHeight);\n this.contentHeight.set(0);\n\n this.timer = window.setTimeout(() => {\n this.contentHeight.set(this.content().nativeElement.scrollHeight);\n window.setTimeout(() => {\n this.contentHeight.set(undefined);\n }, 500);\n }, 10);\n } else {\n this.contentHeight.set(this.content().nativeElement.scrollHeight);\n this.expanded.set(1);\n\n window.setTimeout(() => {\n this.contentHeight.set(0);\n window.setTimeout(() => {\n this.placeholderHeight.set(0);\n this.expanded.set(0);\n }, 500);\n }, 10);\n }\n }\n\n protected resizeHandler(): void {\n const style = getComputedStyle(this.element.nativeElement);\n const fontSize = parseFloat(style.fontSize);\n const lineHeight = parseFloat(style.lineHeight);\n const size = this.element.nativeElement.clientWidth;\n const muteWidth = this.getMuteButtonWidth(lineHeight);\n const customWidth = this.custom().nativeElement.scrollWidth ?? 0;\n const minWidth =\n this.items().length *\n (SiStatusBarComponent.itemMinWidthEm * fontSize + SiStatusBarComponent.itemSpacing) +\n SiStatusBarComponent.itemSpacing +\n muteWidth +\n customWidth;\n if (size < minWidth) {\n this.setResponsiveMode(fontSize, true);\n } else if (this.items().length) {\n this.calculateRequiredWidth(fontSize, muteWidth, customWidth);\n }\n }\n\n private getMuteButtonWidth(lineHeight: number): number {\n if (this.muteButton() === undefined) {\n return 0;\n }\n // button size is line-height + px-4 + ms-5 + me-2\n return lineHeight + 32;\n }\n\n private setResponsiveMode(fontSize: number, responsive: boolean): void {\n if (responsive) {\n const size = this.element.nativeElement.clientWidth;\n const minSize =\n SiStatusBarComponent.itemMinWidthEm * fontSize * SiStatusBarComponent.minNumberOfItems;\n this.responsiveMode =\n size < minSize\n ? 1\n : Math.max(\n Math.floor(size / (SiStatusBarComponent.itemMaxWidthEm * fontSize)) - 1,\n SiStatusBarComponent.minNumberOfItems\n );\n } else {\n this.responsiveMode = 0;\n }\n\n if (this.responsiveMode) {\n this.contentHeight.set(this.expanded() ? this.content().nativeElement.scrollHeight : 0);\n this.significanceChanged();\n } else {\n this.expanded.set(0);\n this.placeholderHeight.set(0);\n this.contentHeight.set(undefined);\n }\n }\n\n private calcResponsiveItems(): void {\n const activeItems: ExtendedStatusBarItem[] = this.items()\n .filter(item => item.value)\n .sort(itemSortFunction);\n\n if (activeItems.length > this.responsiveMode) {\n activeItems[this.responsiveMode - 1] = {\n status: activeItems[this.responsiveMode - 1].status,\n color: activeItems[this.responsiveMode - 1].color,\n value: activeItems.length - this.responsiveMode + 1 + '+',\n title: '',\n action: () => this.toggleExpand(),\n isSpecial: true\n };\n activeItems.length = this.responsiveMode;\n } else if (!activeItems.length) {\n activeItems.push({\n status: 'success',\n title: '',\n value: this.allOkText(),\n isSpecial: true\n });\n }\n if (activeItems.length === this.responsiveMode) {\n activeItems[activeItems.length - 1].mutePadding = true;\n }\n this.responsiveItems.set(activeItems);\n }\n\n private calculateRequiredWidth(fontSize: number, muteWidth: number, customWidth: number): void {\n const keys: string[] = [];\n for (const item of this.items()) {\n keys.push(item.title, item.value.toString());\n }\n this.translateService\n .translateAsync(keys)\n .pipe(first())\n .subscribe(translations => {\n const size = this.element.nativeElement.clientWidth;\n\n const requiredWidth = this.items().reduce(\n (acc, item) => {\n const titleWidth = this.measureService.measureText(translations[item.title]);\n const valueWidth = this.measureService.measureText(\n translations[item.value],\n undefined,\n { fontWeight: 'bold' }\n );\n const textWidth = Math.max(titleWidth, valueWidth);\n const itemWidth =\n Math.max(\n SiStatusBarComponent.itemMinWidthEm * fontSize,\n this.getItemWidth(fontSize, textWidth, item)\n ) + SiStatusBarComponent.itemSpacing;\n return acc + itemWidth;\n },\n muteWidth +\n customWidth +\n SiStatusBarComponent.itemSpacing +\n SiStatusBarComponent.mainPadding\n );\n\n this.setResponsiveMode(fontSize, size < requiredWidth);\n });\n }\n\n private getItemWidth(fontSize: number, textWidth: number, item: StatusBarItem): number {\n const indicatorWidth = item.color\n ? SiStatusBarComponent.itemColorBarWidth + SiStatusBarComponent.itemColorBarMargin\n : SiStatusBarComponent.itemIconWidthEm * fontSize + SiStatusBarComponent.itemIconMargin;\n return textWidth + SiStatusBarComponent.itemPadding + indicatorWidth;\n }\n}\n","<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.shadow-3]=\"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]=\"toggleButtonText() | 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","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiStatusBarComponent } from './si-status-bar.component';\n\n@NgModule({\n imports: [SiStatusBarComponent],\n exports: [SiStatusBarComponent]\n})\nexport class SiStatusBarModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-status-bar-item.component';\nexport * from './si-status-bar-item.model';\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-status-bar.component';\nexport * from './si-status-bar.module';\nexport * from './si-status-bar-item/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { of, ReplaySubject, throwError, fromEvent, map as map$1 } from 'rxjs';
2
- import { isPlatformBrowser } from '@angular/common';
3
2
  import * as i0 from '@angular/core';
4
- import { EventEmitter, signal, inject, PLATFORM_ID, DOCUMENT, Injectable } from '@angular/core';
3
+ import { InjectionToken, inject, DOCUMENT, EventEmitter, signal, PLATFORM_ID, Injectable } from '@angular/core';
5
4
  import { Meta } from '@angular/platform-browser';
5
+ import { isPlatformBrowser } from '@angular/common';
6
6
  import { take, tap, map, switchMap } from 'rxjs/operators';
7
7
  import { toSignal } from '@angular/core/rxjs-interop';
8
8
 
@@ -109,6 +109,30 @@ class SiDefaultThemeStore extends SiThemeStore {
109
109
  }
110
110
  }
111
111
 
112
+ /**
113
+ * Copyright (c) Siemens 2016 - 2026
114
+ * SPDX-License-Identifier: MIT
115
+ */
116
+ /**
117
+ * Theme DOM target. The default implementation targets the current document.
118
+ */
119
+ const SI_THEME_DOM_TARGET = new InjectionToken('SI_THEME_DOM_TARGET', {
120
+ providedIn: 'root',
121
+ factory: () => {
122
+ const document = inject(DOCUMENT);
123
+ const meta = inject(Meta);
124
+ return {
125
+ element: document.documentElement,
126
+ rootSelector: ':root',
127
+ eventTarget: document.defaultView ?? undefined,
128
+ forEachElement: callback => callback(document.documentElement),
129
+ getStyleElement: id => document.getElementById(id),
130
+ appendStyleElement: style => document.body.append(style),
131
+ updateColorScheme: colorScheme => meta.updateTag({ name: 'color-scheme', content: colorScheme })
132
+ };
133
+ }
134
+ });
135
+
112
136
  const ELEMENT_THEME_NAME = 'element';
113
137
  const elementTheme = {
114
138
  name: 'element',
@@ -409,9 +433,12 @@ class SiThemeService {
409
433
  isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
410
434
  previewTheme;
411
435
  themeStore = inject(SiThemeStore, { optional: true }) ?? new SiDefaultThemeStore(this.isBrowser);
412
- meta = inject(Meta);
413
436
  document = inject(DOCUMENT);
437
+ themeTarget = inject(SI_THEME_DOM_TARGET);
414
438
  constructor() {
439
+ this._resolvedColorScheme = this.themeTarget.element.classList.contains('app--dark')
440
+ ? 'dark'
441
+ : 'light';
415
442
  this.resolvedColorScheme$.subscribe(scheme => (this._resolvedColorScheme = scheme));
416
443
  this.themeNames$.subscribe(names => (this._themeNames = names));
417
444
  if (this.isBrowser) {
@@ -585,7 +612,7 @@ class SiThemeService {
585
612
  return result;
586
613
  }
587
614
  /**
588
- * Apply `light` or `dark` theme to the document.
615
+ * Apply `light` or `dark` theme to the configured theme target.
589
616
  */
590
617
  applyThemeType(type) {
591
618
  if (type === this._resolvedColorScheme || !this.darkMediaQuery || !this.mediaQueryListener) {
@@ -604,7 +631,7 @@ class SiThemeService {
604
631
  }
605
632
  }
606
633
  /**
607
- * Applies the given theme to the document. If no theme is given, the active theme is applied.
634
+ * Applies the given theme to the configured theme target. If no theme is given, the active theme is applied.
608
635
  */
609
636
  applyTheme(theme, type, overwrite) {
610
637
  if (theme) {
@@ -628,7 +655,7 @@ class SiThemeService {
628
655
  }
629
656
  this.previewTheme.schemes[type][name] = value;
630
657
  this.createThemeCSS(this.previewTheme);
631
- this.document.documentElement.classList.add('theme-__preview');
658
+ this.themeTarget.forEachElement(element => element.classList.add('theme-__preview'));
632
659
  this.dispatchThemeSwitchEvent();
633
660
  }
634
661
  /**
@@ -667,34 +694,42 @@ class SiThemeService {
667
694
  this.themeChange.emit(theme);
668
695
  }
669
696
  activateTheme(theme) {
670
- const classList = this.document.documentElement.classList;
671
- classList.forEach(c => {
672
- if (c.startsWith('theme-')) {
673
- classList.remove(c);
697
+ this.themeTarget.forEachElement(element => {
698
+ const classList = element.classList;
699
+ classList.forEach(className => {
700
+ if (className.startsWith('theme-')) {
701
+ classList.remove(className);
702
+ }
703
+ });
704
+ if (theme) {
705
+ classList.add(`theme-${theme.name}`);
674
706
  }
675
707
  });
676
- if (theme) {
677
- classList.add(`theme-${theme.name}`);
678
- }
679
708
  }
680
709
  hasThemeCSS(theme) {
681
710
  const id = `__theme-${theme.name}`;
682
- return !!this.document.getElementById(id);
711
+ return !!this.themeTarget.getStyleElement(id);
683
712
  }
684
713
  createThemeCSS(theme) {
685
714
  let css = '';
686
- const themeSelector = `:root.theme-${theme.name}`;
715
+ const themeSelector = this.createThemeSelector(theme.name);
687
716
  if (theme.schemes.light) {
688
717
  css = this.createThemeVariantCSS(css, themeSelector, theme.schemes.light);
689
718
  }
690
719
  if (theme.schemes.dark) {
691
- css = this.createThemeVariantCSS(css, themeSelector + '.app--dark', theme.schemes.dark);
720
+ css = this.createThemeVariantCSS(css, this.createThemeSelector(theme.name, true), theme.schemes.dark);
692
721
  }
693
722
  this.removeThemeCSS(theme.name);
694
723
  const cssElement = this.document.createElement('style');
695
724
  cssElement.id = `__theme-${theme.name}`;
696
725
  cssElement.textContent = css;
697
- this.document.body.appendChild(cssElement);
726
+ this.themeTarget.appendStyleElement(cssElement);
727
+ }
728
+ createThemeSelector(name, dark = false) {
729
+ const classes = `.theme-${name}${dark ? '.app--dark' : ''}`;
730
+ return this.themeTarget.rootSelector === ':host'
731
+ ? `:host(${classes})`
732
+ : `${this.themeTarget.rootSelector}${classes}`;
698
733
  }
699
734
  createThemeVariantCSS(css, selector, scheme) {
700
735
  css += `${selector} {\n`;
@@ -706,16 +741,16 @@ class SiThemeService {
706
741
  }
707
742
  removeThemeCSS(name) {
708
743
  const id = `__theme-${name}`;
709
- this.document.getElementById(id)?.remove();
710
- this.document.documentElement.classList.remove(`theme-${name}`);
744
+ this.themeTarget.getStyleElement(id)?.remove();
745
+ this.themeTarget.forEachElement(element => element.classList.remove(`theme-${name}`));
711
746
  }
712
747
  toggleDark(dark) {
713
748
  if (!this.isBrowser) {
714
749
  return;
715
750
  }
716
- this.document.documentElement.classList.toggle('app--dark', dark);
751
+ this.themeTarget.forEachElement(element => element.classList.toggle('app--dark', dark));
717
752
  const colorScheme = dark ? 'dark' : 'light';
718
- this.meta.updateTag({ name: 'color-scheme', content: colorScheme });
753
+ this.themeTarget.updateColorScheme(colorScheme);
719
754
  this.resolvedColorSchemeSub.next(colorScheme);
720
755
  this.dispatchThemeSwitchEvent();
721
756
  }
@@ -761,8 +796,9 @@ const injectIsDarkTheme = () => {
761
796
  if (!isPlatformBrowser(inject(PLATFORM_ID))) {
762
797
  return signal(false);
763
798
  }
799
+ const targetDom = inject(SI_THEME_DOM_TARGET);
764
800
  return toSignal(fromEvent(window, 'theme-switch').pipe(map$1(e => e.detail.dark)), {
765
- initialValue: document.documentElement.classList.contains('app--dark')
801
+ initialValue: targetDom.element.classList.contains('app--dark')
766
802
  });
767
803
  };
768
804
 
@@ -775,5 +811,5 @@ const injectIsDarkTheme = () => {
775
811
  * Generated bundle index. Do not edit.
776
812
  */
777
813
 
778
- export { ELEMENT_THEME_NAME, SI_THEME_LOCAL_STORAGE_KEY, SiDefaultThemeStore, SiThemeService, SiThemeStore, elementTheme, injectIsDarkTheme };
814
+ export { ELEMENT_THEME_NAME, SI_THEME_DOM_TARGET, SI_THEME_LOCAL_STORAGE_KEY, SiDefaultThemeStore, SiThemeService, SiThemeStore, elementTheme, injectIsDarkTheme };
779
815
  //# sourceMappingURL=siemens-element-ng-theme.mjs.map