@siemens/element-ng 48.0.3 → 48.2.0-rc.1

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 (132) hide show
  1. package/README.md +9 -0
  2. package/accordion/index.d.ts +2 -1
  3. package/avatar/index.d.ts +3 -4
  4. package/card/index.d.ts +68 -29
  5. package/circle-status/index.d.ts +2 -1
  6. package/common/index.d.ts +11 -0
  7. package/dashboard/index.d.ts +6 -1
  8. package/datepicker/index.d.ts +32 -32
  9. package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -1
  10. package/fesm2022/siemens-element-ng-avatar.mjs +32 -36
  11. package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -1
  12. package/fesm2022/siemens-element-ng-breadcrumb.mjs +2 -2
  13. package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
  14. package/fesm2022/siemens-element-ng-card.mjs +103 -37
  15. package/fesm2022/siemens-element-ng-card.mjs.map +1 -1
  16. package/fesm2022/siemens-element-ng-circle-status.mjs.map +1 -1
  17. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs +2 -2
  18. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs.map +1 -1
  19. package/fesm2022/siemens-element-ng-common.mjs +6 -0
  20. package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
  21. package/fesm2022/siemens-element-ng-connection-strength.mjs +2 -2
  22. package/fesm2022/siemens-element-ng-connection-strength.mjs.map +1 -1
  23. package/fesm2022/siemens-element-ng-content-action-bar.mjs +2 -2
  24. package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -1
  25. package/fesm2022/siemens-element-ng-dashboard.mjs +34 -35
  26. package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
  27. package/fesm2022/siemens-element-ng-datatable.mjs +5 -0
  28. package/fesm2022/siemens-element-ng-datatable.mjs.map +1 -1
  29. package/fesm2022/siemens-element-ng-date-range-filter.mjs +1 -1
  30. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
  31. package/fesm2022/siemens-element-ng-datepicker.mjs +176 -142
  32. package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
  33. package/fesm2022/siemens-element-ng-file-uploader.mjs +9 -2
  34. package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
  35. package/fesm2022/siemens-element-ng-filter-bar.mjs +5 -5
  36. package/fesm2022/siemens-element-ng-filter-bar.mjs.map +1 -1
  37. package/fesm2022/siemens-element-ng-filtered-search.mjs +34 -13
  38. package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
  39. package/fesm2022/siemens-element-ng-form.mjs +7 -1
  40. package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
  41. package/fesm2022/siemens-element-ng-formly.mjs +18 -18
  42. package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
  43. package/fesm2022/siemens-element-ng-inline-notification.mjs.map +1 -1
  44. package/fesm2022/siemens-element-ng-ip-input.mjs +38 -0
  45. package/fesm2022/siemens-element-ng-ip-input.mjs.map +1 -1
  46. package/fesm2022/siemens-element-ng-language-switcher.mjs +1 -1
  47. package/fesm2022/siemens-element-ng-language-switcher.mjs.map +1 -1
  48. package/fesm2022/siemens-element-ng-list-details.mjs +9 -4
  49. package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -1
  50. package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -1
  51. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +16 -3
  52. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
  53. package/fesm2022/siemens-element-ng-notification-item.mjs +71 -0
  54. package/fesm2022/siemens-element-ng-notification-item.mjs.map +1 -0
  55. package/fesm2022/siemens-element-ng-pagination.mjs +2 -2
  56. package/fesm2022/siemens-element-ng-pagination.mjs.map +1 -1
  57. package/fesm2022/siemens-element-ng-photo-upload.mjs +1 -1
  58. package/fesm2022/siemens-element-ng-photo-upload.mjs.map +1 -1
  59. package/fesm2022/siemens-element-ng-progressbar.mjs.map +1 -1
  60. package/fesm2022/siemens-element-ng-resize-observer.mjs +0 -1
  61. package/fesm2022/siemens-element-ng-resize-observer.mjs.map +1 -1
  62. package/fesm2022/siemens-element-ng-result-details-list.mjs +5 -0
  63. package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -1
  64. package/fesm2022/siemens-element-ng-search-bar.mjs +14 -4
  65. package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -1
  66. package/fesm2022/siemens-element-ng-side-panel.mjs +2 -2
  67. package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
  68. package/fesm2022/siemens-element-ng-sort-bar.mjs.map +1 -1
  69. package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
  70. package/fesm2022/siemens-element-ng-status-bar.mjs +2 -2
  71. package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
  72. package/fesm2022/siemens-element-ng-tabs-legacy.mjs +2 -2
  73. package/fesm2022/siemens-element-ng-tabs-legacy.mjs.map +1 -1
  74. package/fesm2022/siemens-element-ng-tabs.mjs +45 -12
  75. package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
  76. package/fesm2022/siemens-element-ng-tooltip.mjs +5 -6
  77. package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
  78. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  79. package/fesm2022/siemens-element-ng-tree-view.mjs +4 -4
  80. package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
  81. package/fesm2022/siemens-element-ng-typeahead.mjs +329 -257
  82. package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -1
  83. package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -1
  84. package/file-uploader/index.d.ts +3 -1
  85. package/filter-bar/index.d.ts +13 -5
  86. package/form/index.d.ts +28 -29
  87. package/inline-notification/index.d.ts +3 -2
  88. package/ip-input/index.d.ts +42 -4
  89. package/landing-page/index.d.ts +3 -2
  90. package/language-switcher/index.d.ts +3 -1
  91. package/list-details/index.d.ts +2 -0
  92. package/main-detail-container/index.d.ts +4 -4
  93. package/navbar/index.d.ts +1 -1
  94. package/notification-item/index.d.ts +141 -0
  95. package/notification-item/package.json +3 -0
  96. package/package.json +19 -11
  97. package/progressbar/index.d.ts +3 -3
  98. package/result-details-list/index.d.ts +4 -2
  99. package/schematics/collection.json +28 -0
  100. package/schematics/ng-add/index.js +16 -0
  101. package/schematics/ng-add/schema.json +16 -0
  102. package/schematics/scss-import-to-siemens-migration/index.js +101 -0
  103. package/schematics/scss-import-to-siemens-migration/schema.json +16 -0
  104. package/schematics/scss-import-to-siemens-migration/style-mappings.js +46 -0
  105. package/schematics/simpl-siemens-migration/index.js +17 -0
  106. package/schematics/simpl-siemens-migration/schema.json +16 -0
  107. package/schematics/ts-import-to-siemens-migration/index.js +118 -0
  108. package/schematics/ts-import-to-siemens-migration/mappings/charts-ng-mappings.js +70 -0
  109. package/schematics/ts-import-to-siemens-migration/mappings/dashboards-ng-mappings.js +52 -0
  110. package/schematics/ts-import-to-siemens-migration/mappings/element-ng-mappings.js +651 -0
  111. package/schematics/ts-import-to-siemens-migration/mappings/element-translate-ng-mappings.js +21 -0
  112. package/schematics/ts-import-to-siemens-migration/mappings/index.js +9 -0
  113. package/schematics/ts-import-to-siemens-migration/mappings/maps-ng-mappings.js +46 -0
  114. package/schematics/ts-import-to-siemens-migration/model.js +4 -0
  115. package/schematics/ts-import-to-siemens-migration/schema.json +16 -0
  116. package/schematics/utils/index.js +8 -0
  117. package/schematics/utils/project-utils.js +75 -0
  118. package/schematics/utils/schematics-file-system.js +22 -0
  119. package/schematics/utils/testing.js +41 -0
  120. package/schematics/utils/ts-utils.js +99 -0
  121. package/search-bar/index.d.ts +11 -1
  122. package/select/index.d.ts +7 -5
  123. package/sort-bar/index.d.ts +3 -3
  124. package/split/index.d.ts +3 -2
  125. package/status-bar/index.d.ts +3 -2
  126. package/tabs/index.d.ts +15 -1
  127. package/template-i18n.json +8 -0
  128. package/tooltip/index.d.ts +1 -1
  129. package/translate/index.d.ts +8 -0
  130. package/tree-view/index.d.ts +4 -4
  131. package/typeahead/index.d.ts +85 -4
  132. package/wizard/index.d.ts +2 -1
@@ -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 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { NgClass } from '@angular/common';\nimport {\n booleanAttribute,\n Component,\n computed,\n ElementRef,\n inject,\n input,\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 } from '@siemens/element-translate-ng/translate';\n\n@Component({\n selector: 'si-status-bar-item',\n imports: [NgClass, SiIconComponent, SiTranslatePipe],\n templateUrl: './si-status-bar-item.component.html',\n styleUrl: './si-status-bar-item.component.scss',\n host: {\n '[class.clickable]': 'clickable()'\n }\n})\nexport class SiStatusBarItemComponent {\n private readonly statusIcons = inject(STATUS_ICON_CONFIG);\n readonly status = input<ExtendedStatusType>();\n readonly value = input.required<string | number>();\n readonly heading = input.required<string>();\n readonly color = input<string>();\n /** @defaultValue false */\n readonly blink = input(false, { transform: booleanAttribute });\n /** @defaultValue false */\n readonly valueOnly = input<boolean | undefined, unknown>(false, { transform: booleanAttribute });\n /** @defaultValue false */\n readonly clickable = input(false, { transform: booleanAttribute });\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 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-muted]=\"!value()\"\n [class.blink]=\"blink() && value()\"\n [attr.tabindex]=\"clickable() ? '0' : ''\"\n [attr.aria-disabled]=\"!value()\"\n>\n <div\n #bg\n role=\"none\"\n class=\"bg focus-sub-inside\"\n [class.custom-color]=\"color()\"\n [class.contrast-fix]=\"contrastFix()\"\n [ngClass]=\"background()\"\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 }\n @if (icon) {\n <span class=\"indicator icon me-4 icon-stack\">\n <si-icon [ngClass]=\"value() ? icon.color : 'indicator-disabled'\" [icon]=\"icon.icon\" />\n <si-icon [ngClass]=\"value() ? icon.stackedColor : 'text-inverse'\" [icon]=\"icon.stacked\" />\n </span>\n }\n <div class=\"overflow-hidden\">\n @if (value() !== undefined) {\n <div class=\"item-value si-h5 text-truncate\">{{ value().toString() | translate }}</div>\n }\n @if (!valueOnly()) {\n <div class=\"item-title text-truncate\">{{ heading() | translate }}</div>\n }\n </div>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\n/* eslint-disable @angular-eslint/no-conflicting-lifecycle */\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n DoCheck,\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 { BlinkService, STATUS_ICON, TextMeasureService } from '@siemens/element-ng/common';\nimport {\n addIcons,\n elementDown2,\n elementSoundMute,\n elementSoundOn,\n SiIconComponent\n} 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 NgClass,\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 changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiStatusBarComponent implements DoCheck, OnDestroy, OnChanges {\n private static readonly itemMinWidth = 100;\n private static readonly itemMaxWidth = 152;\n private static readonly itemSpacing = 4;\n private static readonly itemPaddingX = 44; // padding + icon size + icon margin\n private static readonly itemPaddingXdeprecated = 20; // padding + color bar\n private static readonly muteButtonWidth = 48;\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 navbar expand button. Required for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_STATUS_BAR.EXPAND:Expand`)\n * ```\n */\n readonly expandButtonText = input(t(() => $localize`:@@SI_STATUS_BAR.EXPAND:Expand`));\n /**\n * Text for the navbar collapse button. Required for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_STATUS_BAR.COLLAPSE:Collapse`)\n * ```\n */\n readonly collapseButtonText = input(t(() => $localize`:@@SI_STATUS_BAR.COLLAPSE:Collapse`));\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\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 private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n this.resizeObserver\n .observe(this.element.nativeElement, 100, true)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.resizeHandler());\n this.translateService.translationChange\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.resizeHandler());\n }\n\n ngOnChanges(changes: SimpleChanges): 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 ngDoCheck(): void {\n if (this.responsiveMode) {\n this.calcResponsiveItems();\n }\n }\n\n ngOnDestroy(): void {\n this.blinkSubs?.unsubscribe();\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 size = this.element.nativeElement.clientWidth;\n const muteWidth = this.muteButton() !== undefined ? SiStatusBarComponent.muteButtonWidth : 0;\n const customWidth = this.custom().nativeElement.scrollWidth ?? 0;\n const minWidth =\n this.items().length * (SiStatusBarComponent.itemMinWidth + SiStatusBarComponent.itemSpacing) +\n SiStatusBarComponent.itemSpacing +\n muteWidth +\n customWidth;\n if (size < minWidth) {\n this.setResponsiveMode(true);\n } else if (this.items().length) {\n this.calculateRequiredWidth(muteWidth, customWidth);\n }\n }\n\n private setResponsiveMode(responsive: boolean): void {\n if (responsive) {\n const size = this.element.nativeElement.clientWidth;\n this.responsiveMode = Math.max(Math.floor(size / SiStatusBarComponent.itemMaxWidth) - 1, 2);\n } else {\n this.responsiveMode = 0;\n }\n\n if (this.responsiveMode) {\n this.contentHeight.set(this.expanded() ? this.content().nativeElement.scrollHeight : 0);\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(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.itemMinWidth,\n textWidth +\n (item.color\n ? SiStatusBarComponent.itemPaddingXdeprecated\n : SiStatusBarComponent.itemPaddingX)\n ) + SiStatusBarComponent.itemSpacing;\n return acc + itemWidth;\n },\n muteWidth + customWidth + SiStatusBarComponent.itemSpacing\n );\n\n this.setResponsiveMode(size < requiredWidth);\n });\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.responsive]=\"responsiveMode\"\n [class.expanded]=\"expanded()\"\n [class.compact]=\"responsiveMode || compact()\"\n [class.pulse-off]=\"blinkOnOff() === false\"\n [class.pulse-on]=\"blinkOnOff()\"\n [ngClass]=\"responsiveMode ? 'responsive-' + responsiveMode : ''\"\n>\n <div\n class=\"status-bar-wrapper rounded-2\"\n [class.elevation-2]=\"expanded()\"\n [class.pe-2]=\"muteButton() !== undefined\"\n >\n @if (responsiveMode) {\n <div class=\"align-items-center overflow-hidden\">\n <div class=\"d-flex flex-fill position-relative\">\n @for (item of responsiveItems(); track $index) {\n <si-status-bar-item\n class=\"bar-item compact\"\n [value]=\"item.value\"\n [heading]=\"item.title\"\n [status]=\"item.status\"\n [color]=\"item.color\"\n [blink]=\"item.blink !== false && blink() && !expanded()\"\n [clickable]=\"!!item.action\"\n [class.mute-padding]=\"item.mutePadding && muteButton() !== undefined\"\n [style.flex-basis.%]=\"responsiveMode ? 100 / responsiveMode : null\"\n [valueOnly]=\"item.isSpecial\"\n (click)=\"onItemClicked(item)\"\n (keydown.enter)=\"onItemClicked(item)\"\n />\n }\n </div>\n @if (muteButton() !== undefined) {\n <div class=\"mobile-mute\">\n <ng-container *ngTemplateOutlet=\"muteButtonTemplate\" />\n </div>\n }\n </div>\n }\n <div\n #content\n class=\"main-content align-items-center overflow-hidden\"\n [style.max-height.px]=\"contentHeight()\"\n >\n @if (responsiveMode) {\n <div class=\"mobile-spacer\"></div>\n }\n <div\n class=\"d-flex flex-fill position-relative\"\n [id]=\"statusId\"\n [class.d-none]=\"responsiveMode && !expanded()\"\n [class.flex-wrap]=\"responsiveMode\"\n >\n @for (item of items(); track $index) {\n <si-status-bar-item\n class=\"bar-item\"\n [class.compact]=\"responsiveMode || compact()\"\n [value]=\"item.value\"\n [heading]=\"item.title\"\n [status]=\"item.status\"\n [color]=\"item.color\"\n [blink]=\"item.blink !== false && blink()\"\n [clickable]=\"!!item.action\"\n [style.flex-basis.%]=\"responsiveMode ? 100 / responsiveMode : null\"\n (click)=\"onItemClicked(item)\"\n (keydown.enter)=\"onItemClicked(item)\"\n />\n }\n </div>\n <div class=\"custom-content bar-item d-flex\">\n <div #custom [class.pb-2]=\"responsiveMode && expanded\" (siResizeObserver)=\"resizeHandler()\">\n <ng-content />\n </div>\n </div>\n @if (muteButton() !== undefined && !responsiveMode) {\n <ng-container *ngTemplateOutlet=\"muteButtonTemplate\" />\n }\n </div>\n </div>\n @if (responsiveMode) {\n <div class=\"d-flex align-items-center justify-content-center\">\n <a\n class=\"collapse-expand text-center p-0 focus-force\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"(expanded() ? collapseButtonText() : expandButtonText()) | translate\"\n [attr.aria-expanded]=\"!!expanded()\"\n [attr.aria-controls]=\"statusId\"\n [class.expanded]=\"expanded() === 2\"\n (keydown.enter)=\"toggleExpand()\"\n (click)=\"toggleExpand()\"\n >\n <si-icon class=\"icon\" [icon]=\"icons.elementDown2\" />\n </a>\n </div>\n }\n</div>\n\n<ng-template #muteButtonTemplate>\n <button\n type=\"button\"\n class=\"bar-item mute-button btn btn-circle btn-sm 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 - 2025\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 - 2025\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 - 2025\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":";;;;;;;;;;AAAA;;;AAGG;MAwBU,wBAAwB,CAAA;AAClB,IAAA,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC;IAChD,MAAM,GAAG,KAAK,EAAsB;AACpC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAmB;AACzC,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAU;IAClC,KAAK,GAAG,KAAK,EAAU;;IAEvB,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;;IAErD,SAAS,GAAG,KAAK,CAA+B,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;;IAEvF,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AAEjD,IAAA,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAa,IAAI,CAAC;AAEvC,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,oBAAoB,EAAE;AACtE,KAAC,CAAC;AACiB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC5C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,OAAO,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS;AACtD,KAAC,CAAC;AACiB,IAAA,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,UAAU,IAAI,EAAE,IAAI,EAAE,CACzF;IAEO,oBAAoB,GAAA;;QAE1B,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,aAAa;AACjD,aAAA,eAAe,EAAE,KAAK,CAAC,MAAM;cAC5B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAChB,QAAA,OAAO,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG;;uGA/B7E,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,umCC3BrC,0yCAuCA,EAAA,MAAA,EAAA,CAAA,8/BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnBY,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,iEAAE,eAAe,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAOxC,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBATpC,SAAS;+BACE,oBAAoB,EAAA,OAAA,EACrB,CAAC,OAAO,EAAE,eAAe,EAAE,eAAe,CAAC,EAAA,IAAA,EAG9C;AACJ,wBAAA,mBAAmB,EAAE;AACtB,qBAAA,EAAA,QAAA,EAAA,0yCAAA,EAAA,MAAA,EAAA,CAAA,8/BAAA,CAAA,EAAA;;;AEzBH;;;AAGG;AACH;AA+CA;AACA;AACA,SAAS,gBAAgB,CAAC,CAAgB,EAAE,CAAgB,EAAA;AAC1D,IAAA,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,GAAG,CAAC;AACnG;AAEA,IAAI,SAAS,GAAG,CAAC;AAEjB;;;AAGG;MAeU,oBAAoB,CAAA;AACvB,IAAA,OAAgB,YAAY,GAAG,GAAG;AAClC,IAAA,OAAgB,YAAY,GAAG,GAAG;AAClC,IAAA,OAAgB,WAAW,GAAG,CAAC;AAC/B,IAAA,OAAgB,YAAY,GAAG,EAAE,CAAC;AAClC,IAAA,OAAgB,sBAAsB,GAAG,EAAE,CAAC;AAC5C,IAAA,OAAgB,eAAe,GAAG,EAAE;AAE5C;;AAEG;AACM,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAmB;AAClD;;;;AAIG;IACM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AAC9D;;AAEG;IACM,UAAU,GAAG,KAAK,EAAW;AACtC;;;;;;;AAOG;AACM,IAAA,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,iCAAA,CAAmC,CAAC,CAAC;AACtF;;;;;;;AAOG;AACM,IAAA,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,8BAAA,CAAgC,CAAC,CAAC;AAC9E;;;;AAIG;IACM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AAChE;;AAEG;IACM,UAAU,GAAG,KAAK,EAAuB;AAClD;;;;;;;AAOG;AACM,IAAA,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,8BAAA,CAAgC,CAAC,CAAC;AACrF;;;;;;;AAOG;AACM,IAAA,kBAAkB,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,kCAAA,CAAoC,CAAC,CAAC;AAE3F;;AAEG;IACM,UAAU,GAAG,MAAM,EAAE;AAEb,IAAA,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAa,QAAQ,CAAC;AACjD,IAAA,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAa,SAAS,CAAC;AACnD,IAAA,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAa,QAAQ,CAAC;AAE/C,IAAA,eAAe,GAAG,MAAM,CAA0B,EAAE,CAAC;IAC9D,cAAc,GAAG,CAAC;AACT,IAAA,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC;AACpB,IAAA,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC;AAC7B,IAAA,aAAa,GAAG,MAAM,CAAqB,SAAS,CAAC;AACrD,IAAA,UAAU,GAAG,MAAM,CAAsB,SAAS,CAAC;IACnD,KAAK,GAAG,QAAQ,CAAC,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC;AAC7E,IAAA,QAAQ,GAAG,CAAA,gBAAA,EAAmB,SAAS,EAAE,EAAE;AAE7C,IAAA,KAAK;AAEL,IAAA,SAAS;AAEA,IAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5B,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IACnC,gBAAgB,GAAG,wBAAwB,EAAE;AAC7C,IAAA,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC9C,IAAA,cAAc,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC3C,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC;aACF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI;AAC7C,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,IAAI,CAAC,gBAAgB,CAAC;AACnB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;;AAG1C,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,KAAK,EAAE;AACtC,YAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;AAChB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM;gBAC3D,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,IAAG;AACvC,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,iBAAC,CAAC;;;QAGN,IAAI,CAAC,aAAa,EAAE;;IAGtB,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,mBAAmB,EAAE;;;IAI9B,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE;;AAGrB,IAAA,aAAa,CAAC,IAAmB,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;;;IAIX,YAAY,GAAA;AACpB,QAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACpB,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC;AACpE,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;YAEzB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAK;AAClC,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC;AACjE,gBAAA,MAAM,CAAC,UAAU,CAAC,MAAK;AACrB,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;iBAClC,EAAE,GAAG,CAAC;aACR,EAAE,EAAE,CAAC;;aACD;AACL,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC;AACjE,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAEpB,YAAA,MAAM,CAAC,UAAU,CAAC,MAAK;AACrB,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,gBAAA,MAAM,CAAC,UAAU,CAAC,MAAK;AACrB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;iBACrB,EAAE,GAAG,CAAC;aACR,EAAE,EAAE,CAAC;;;IAIA,aAAa,GAAA;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW;AACnD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,SAAS,GAAG,oBAAoB,CAAC,eAAe,GAAG,CAAC;AAC5F,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,WAAW,IAAI,CAAC;AAChE,QAAA,MAAM,QAAQ,GACZ,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,IAAI,oBAAoB,CAAC,YAAY,GAAG,oBAAoB,CAAC,WAAW,CAAC;AAC5F,YAAA,oBAAoB,CAAC,WAAW;YAChC,SAAS;AACT,YAAA,WAAW;AACb,QAAA,IAAI,IAAI,GAAG,QAAQ,EAAE;AACnB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;;AACvB,aAAA,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;AAC9B,YAAA,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,WAAW,CAAC;;;AAI/C,IAAA,iBAAiB,CAAC,UAAmB,EAAA;QAC3C,IAAI,UAAU,EAAE;YACd,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW;YACnD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,oBAAoB,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;aACtF;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,CAAC;;AAGzB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,YAAY,GAAG,CAAC,CAAC;;aAClF;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACpB,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;;;IAI7B,mBAAmB,GAAA;AACzB,QAAA,MAAM,WAAW,GAA4B,IAAI,CAAC,KAAK;aACpD,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK;aACzB,IAAI,CAAC,gBAAgB,CAAC;QAEzB,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;AAC5C,YAAA,WAAW,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG;gBACrC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,MAAM;gBACnD,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,KAAK;gBACjD,KAAK,EAAE,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,GAAG;AACzD,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,MAAM,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE;AACjC,gBAAA,SAAS,EAAE;aACZ;AACD,YAAA,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc;;AACnC,aAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YAC9B,WAAW,CAAC,IAAI,CAAC;AACf,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE;AACvB,gBAAA,SAAS,EAAE;AACZ,aAAA,CAAC;;QAEJ,IAAI,WAAW,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,EAAE;YAC9C,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI;;AAExD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC;;IAG/B,sBAAsB,CAAC,SAAiB,EAAE,WAAmB,EAAA;QACnE,MAAM,IAAI,GAAa,EAAE;QACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;;AAE9C,QAAA,IAAI,CAAC;aACF,cAAc,CAAC,IAAI;aACnB,IAAI,CAAC,KAAK,EAAE;aACZ,SAAS,CAAC,YAAY,IAAG;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW;AAEnD,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CACvC,CAAC,GAAG,EAAE,IAAI,KAAI;AACZ,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAChD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EACxB,SAAS,EACT,EAAE,UAAU,EAAE,MAAM,EAAE,CACvB;gBACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC;gBAClD,MAAM,SAAS,GACb,IAAI,CAAC,GAAG,CACN,oBAAoB,CAAC,YAAY,EACjC,SAAS;qBACN,IAAI,CAAC;0BACF,oBAAoB,CAAC;0BACrB,oBAAoB,CAAC,YAAY,CAAC,CACzC,GAAG,oBAAoB,CAAC,WAAW;gBACtC,OAAO,GAAG,GAAG,SAAS;aACvB,EACD,SAAS,GAAG,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAC3D;AAED,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,aAAa,CAAC;AAC9C,SAAC,CAAC;;uGApQK,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7EjC,qmIAoHA,EAAA,MAAA,EAAA,CAAA,ohDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDlDI,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,wBAAwB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,yBAAyB,oIACzB,eAAe,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAMN,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAdhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,OAAA,EAChB;wBACP,OAAO;wBACP,gBAAgB;wBAChB,eAAe;wBACf,wBAAwB;wBACxB,yBAAyB;wBACzB;qBACD,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qmIAAA,EAAA,MAAA,EAAA,CAAA,ohDAAA,CAAA,EAAA;;;AE3EjD;;;AAGG;MASU,iBAAiB,CAAA;uGAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAjB,iBAAiB,EAAA,OAAA,EAAA,CAHlB,oBAAoB,CAAA,EAAA,OAAA,EAAA,CACpB,oBAAoB,CAAA,EAAA,CAAA;AAEnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAHlB,oBAAoB,CAAA,EAAA,CAAA;;2FAGnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,oBAAoB,CAAC;oBAC/B,OAAO,EAAE,CAAC,oBAAoB;AAC/B,iBAAA;;;ACXD;;;AAGG;;ACHH;;;AAGG;;ACHH;;AAEG;;;;"}
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 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { NgClass } from '@angular/common';\nimport {\n booleanAttribute,\n Component,\n computed,\n ElementRef,\n inject,\n input,\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: [NgClass, SiIconComponent, SiTranslatePipe],\n templateUrl: './si-status-bar-item.component.html',\n styleUrl: './si-status-bar-item.component.scss',\n host: {\n '[class.clickable]': 'clickable()'\n }\n})\nexport class SiStatusBarItemComponent {\n private readonly statusIcons = inject(STATUS_ICON_CONFIG);\n readonly status = input<ExtendedStatusType>();\n readonly value = input.required<TranslatableString | number>();\n readonly heading = input.required<TranslatableString>();\n readonly color = input<string>();\n /** @defaultValue false */\n readonly blink = input(false, { transform: booleanAttribute });\n /** @defaultValue false */\n readonly valueOnly = input<boolean | undefined, unknown>(false, { transform: booleanAttribute });\n /** @defaultValue false */\n readonly clickable = input(false, { transform: booleanAttribute });\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 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-muted]=\"!value()\"\n [class.blink]=\"blink() && value()\"\n [attr.tabindex]=\"clickable() ? '0' : ''\"\n [attr.aria-disabled]=\"!value()\"\n>\n <div\n #bg\n role=\"none\"\n class=\"bg focus-sub-inside\"\n [class.custom-color]=\"color()\"\n [class.contrast-fix]=\"contrastFix()\"\n [ngClass]=\"background()\"\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 [ngClass]=\"value() ? icon.color : 'indicator-disabled'\" [icon]=\"icon.icon\" />\n <si-icon [ngClass]=\"value() ? icon.stackedColor : 'text-inverse'\" [icon]=\"icon.stacked\" />\n </span>\n }\n <div class=\"overflow-hidden\">\n @if (value() !== undefined) {\n <div class=\"item-value si-h5 text-truncate\">{{ value().toString() | translate }}</div>\n }\n @if (!valueOnly()) {\n <div class=\"item-title text-truncate\">{{ heading() | translate }}</div>\n }\n </div>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\n/* eslint-disable @angular-eslint/no-conflicting-lifecycle */\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n DoCheck,\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 { BlinkService, STATUS_ICON, TextMeasureService } from '@siemens/element-ng/common';\nimport {\n addIcons,\n elementDown2,\n elementSoundMute,\n elementSoundOn,\n SiIconComponent\n} 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 NgClass,\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 changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiStatusBarComponent implements DoCheck, OnDestroy, OnChanges {\n private static readonly itemMinWidth = 100;\n private static readonly itemMaxWidth = 152;\n private static readonly itemSpacing = 4;\n private static readonly itemPaddingX = 44; // padding + icon size + icon margin\n private static readonly itemPaddingXdeprecated = 20; // padding + color bar\n private static readonly muteButtonWidth = 48;\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 navbar expand button. Required for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_STATUS_BAR.EXPAND:Expand`)\n * ```\n */\n readonly expandButtonText = input(t(() => $localize`:@@SI_STATUS_BAR.EXPAND:Expand`));\n /**\n * Text for the navbar collapse button. Required for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_STATUS_BAR.COLLAPSE:Collapse`)\n * ```\n */\n readonly collapseButtonText = input(t(() => $localize`:@@SI_STATUS_BAR.COLLAPSE:Collapse`));\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\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 private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n this.resizeObserver\n .observe(this.element.nativeElement, 100, true)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.resizeHandler());\n this.translateService.translationChange\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.resizeHandler());\n }\n\n ngOnChanges(changes: SimpleChanges): 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 ngDoCheck(): void {\n if (this.responsiveMode) {\n this.calcResponsiveItems();\n }\n }\n\n ngOnDestroy(): void {\n this.blinkSubs?.unsubscribe();\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 size = this.element.nativeElement.clientWidth;\n const muteWidth = this.muteButton() !== undefined ? SiStatusBarComponent.muteButtonWidth : 0;\n const customWidth = this.custom().nativeElement.scrollWidth ?? 0;\n const minWidth =\n this.items().length * (SiStatusBarComponent.itemMinWidth + SiStatusBarComponent.itemSpacing) +\n SiStatusBarComponent.itemSpacing +\n muteWidth +\n customWidth;\n if (size < minWidth) {\n this.setResponsiveMode(true);\n } else if (this.items().length) {\n this.calculateRequiredWidth(muteWidth, customWidth);\n }\n }\n\n private setResponsiveMode(responsive: boolean): void {\n if (responsive) {\n const size = this.element.nativeElement.clientWidth;\n this.responsiveMode = Math.max(Math.floor(size / SiStatusBarComponent.itemMaxWidth) - 1, 2);\n } else {\n this.responsiveMode = 0;\n }\n\n if (this.responsiveMode) {\n this.contentHeight.set(this.expanded() ? this.content().nativeElement.scrollHeight : 0);\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(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.itemMinWidth,\n textWidth +\n (item.color\n ? SiStatusBarComponent.itemPaddingXdeprecated\n : SiStatusBarComponent.itemPaddingX)\n ) + SiStatusBarComponent.itemSpacing;\n return acc + itemWidth;\n },\n muteWidth + customWidth + SiStatusBarComponent.itemSpacing\n );\n\n this.setResponsiveMode(size < requiredWidth);\n });\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.responsive]=\"responsiveMode\"\n [class.expanded]=\"expanded()\"\n [class.compact]=\"responsiveMode || compact()\"\n [class.pulse-off]=\"blinkOnOff() === false\"\n [class.pulse-on]=\"blinkOnOff()\"\n [ngClass]=\"responsiveMode ? 'responsive-' + responsiveMode : ''\"\n>\n <div\n class=\"status-bar-wrapper rounded-2\"\n [class.elevation-2]=\"expanded()\"\n [class.pe-2]=\"muteButton() !== undefined\"\n >\n @if (responsiveMode) {\n <div class=\"align-items-center overflow-hidden\">\n <div class=\"d-flex flex-fill position-relative\">\n @for (item of responsiveItems(); track $index) {\n <si-status-bar-item\n class=\"bar-item compact\"\n [value]=\"item.value\"\n [heading]=\"item.title\"\n [status]=\"item.status\"\n [color]=\"item.color\"\n [blink]=\"item.blink !== false && blink() && !expanded()\"\n [clickable]=\"!!item.action\"\n [class.mute-padding]=\"item.mutePadding && muteButton() !== undefined\"\n [style.flex-basis.%]=\"responsiveMode ? 100 / responsiveMode : null\"\n [valueOnly]=\"item.isSpecial\"\n (click)=\"onItemClicked(item)\"\n (keydown.enter)=\"onItemClicked(item)\"\n />\n }\n </div>\n @if (muteButton() !== undefined) {\n <div class=\"mobile-mute\">\n <ng-container *ngTemplateOutlet=\"muteButtonTemplate\" />\n </div>\n }\n </div>\n }\n <div\n #content\n class=\"main-content align-items-center overflow-hidden\"\n [style.max-height.px]=\"contentHeight()\"\n >\n @if (responsiveMode) {\n <div class=\"mobile-spacer\"></div>\n }\n <div\n class=\"d-flex flex-fill position-relative\"\n [id]=\"statusId\"\n [class.d-none]=\"responsiveMode && !expanded()\"\n [class.flex-wrap]=\"responsiveMode\"\n >\n @for (item of items(); track $index) {\n <si-status-bar-item\n class=\"bar-item\"\n [class.compact]=\"responsiveMode || compact()\"\n [value]=\"item.value\"\n [heading]=\"item.title\"\n [status]=\"item.status\"\n [color]=\"item.color\"\n [blink]=\"item.blink !== false && blink()\"\n [clickable]=\"!!item.action\"\n [style.flex-basis.%]=\"responsiveMode ? 100 / responsiveMode : null\"\n (click)=\"onItemClicked(item)\"\n (keydown.enter)=\"onItemClicked(item)\"\n />\n }\n </div>\n <div class=\"custom-content bar-item d-flex\">\n <div #custom [class.pb-2]=\"responsiveMode && expanded\" (siResizeObserver)=\"resizeHandler()\">\n <ng-content />\n </div>\n </div>\n @if (muteButton() !== undefined && !responsiveMode) {\n <ng-container *ngTemplateOutlet=\"muteButtonTemplate\" />\n }\n </div>\n </div>\n @if (responsiveMode) {\n <div class=\"d-flex align-items-center justify-content-center\">\n <a\n class=\"collapse-expand text-center p-0 focus-force\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"(expanded() ? collapseButtonText() : expandButtonText()) | translate\"\n [attr.aria-expanded]=\"!!expanded()\"\n [attr.aria-controls]=\"statusId\"\n [class.expanded]=\"expanded() === 2\"\n (keydown.enter)=\"toggleExpand()\"\n (click)=\"toggleExpand()\"\n >\n <si-icon class=\"icon\" [icon]=\"icons.elementDown2\" />\n </a>\n </div>\n }\n</div>\n\n<ng-template #muteButtonTemplate>\n <button\n type=\"button\"\n class=\"bar-item mute-button btn btn-circle btn-sm 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 - 2025\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 - 2025\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 - 2025\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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"}
@@ -334,14 +334,14 @@ class SiTabsetLegacyComponent {
334
334
  this.focusedTabIndex = undefined;
335
335
  }
336
336
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SiTabsetLegacyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
337
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: SiTabsetLegacyComponent, isStandalone: true, selector: "si-tabset-legacy", inputs: { selectDefaultTab: ["selectDefaultTab", "selectDefaultTab", booleanAttribute], selectedTabIndex: "selectedTabIndex", tabButtonMaxWidth: "tabButtonMaxWidth" }, outputs: { selectedTabIndexChange: "selectedTabIndexChange", deselect: "deselect" }, queries: [{ propertyName: "tabPanels", predicate: SiTabLegacyComponent }], viewQueries: [{ propertyName: "tabContainer", first: true, predicate: ["tabContainer"], descendants: true, isSignal: true }, { propertyName: "innerTabContainer", first: true, predicate: ["innerTabContainer"], descendants: true, isSignal: true }, { propertyName: "tabs", predicate: ["tabElement"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"nav nav-tabs tab-container-header focus-inside\"\n role=\"tablist\"\n [class.is-scrollable]=\"scrollable\"\n (siResizeObserver)=\"resize()\"\n>\n @if (scrollable) {\n <button\n type=\"button\"\n class=\"tab-container-control focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [hidden]=\"!xPos\"\n (keydown.enter)=\"scrollStart()\"\n (mousedown)=\"scrollStart()\"\n >\n <si-icon class=\"icon flip-rtl\" [icon]=\"icons.elementLeft3\" />\n </button>\n }\n\n <div #tabContainer class=\"tab-container-buttonbar\" (wheel)=\"mouseScroll($event)\">\n <div #innerTabContainer class=\"tab-container-buttonbar-list focus-inside\">\n @for (tab of tabPanels; track $index) {\n <button\n #tabElement\n type=\"button\"\n role=\"tab\"\n class=\"nav-link focus-inside px-5\"\n [class.pe-3]=\"tab.closable\"\n [attr.aria-controls]=\"tab.id\"\n [id]=\"tab.tabId\"\n [style.max-width.px]=\"tabButtonMaxWidth\"\n [tabindex]=\"!tab.disabled && tab.active() && focusedTabIndex === undefined ? 0 : -1\"\n [class.active]=\"tab.active()\"\n [attr.aria-selected]=\"tab.active()\"\n [class.disabled]=\"tab.disabled\"\n (click)=\"selectTab(tab)\"\n (keydown.arrowLeft)=\"focusPrevious()\"\n (keydown.arrowRight)=\"focusNext()\"\n (keydown.delete)=\"tab.closeTriggered.emit(tab)\"\n (blur)=\"blur()\"\n (focus)=\"focus($index)\"\n >\n <span class=\"text-truncate\">{{ tab.heading | translate }}</span>\n @if (tab.icon) {\n <si-icon\n class=\"icon\"\n [attr.role]=\"tab.iconAltText ? 'img' : 'presentation'\"\n [icon]=\"tab.icon\"\n [attr.aria-label]=\"(tab.iconAltText | translate) ?? undefined\"\n />\n }\n @if (tab.badgeContent === true) {\n <span class=\"badge-dot\"></span>\n } @else if (tab.badgeContent && tab.badgeColor) {\n <span class=\"badge\" [ngClass]=\"'bg-' + tab.badgeColor\">\n {{ tab.badgeContent | translate }}\n </span>\n } @else if (tab.badgeContent && !tab.badgeColor) {\n <span class=\"badge-text\"> {{ tab.badgeContent | translate }}</span>\n }\n @if (tab.closable && !tab.disabled) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event, tab)\"\n />\n }\n </button>\n }\n </div>\n </div>\n @if (scrollable) {\n <button\n type=\"button\"\n class=\"tab-container-control is-end focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [hidden]=\"endArrowDisabled\"\n (keydown.enter)=\"scrollEnd()\"\n (mousedown)=\"scrollEnd()\"\n >\n <si-icon class=\"icon flip-rtl\" [icon]=\"icons.elementRight3\" />\n </button>\n }\n</div>\n\n<ng-content />\n", styles: [":host{display:block;flex-direction:column}.tab-container-header{overflow:hidden;display:flex}.tab-container-buttonbar{flex:1;overflow:hidden}.tab-container-buttonbar-list{display:flex;margin:0;padding:0;list-style-type:none;transition:calc(.25s * var(--element-animations-enabled, 1))}.tab-container-buttonbar-list-item{flex:none}.tab-container-control{background:transparent;border:0;-webkit-user-select:none;user-select:none;padding-inline:0 7px;padding-block:6px 10px}.tab-container-control .is-end{padding-inline:7px 0}.tab-container-control:hover{color:var(--element-text-active)}.tab-container-control:disabled{color:var(--element-text-disabled);cursor:default}.nav-link{flex-shrink:0}.nav-link span.badge-dot{inset-block-end:100%;inset-inline-start:12px;margin-inline-end:12px}.nav-link span.badge-text{inset-block-end:calc(100% - 7px);inset-inline-start:2px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "directive", type: SiResizeObserverDirective, selector: "[siResizeObserver]", inputs: ["resizeThrottle", "emitInitial"], outputs: ["siResizeObserver"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
337
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: SiTabsetLegacyComponent, isStandalone: true, selector: "si-tabset-legacy", inputs: { selectDefaultTab: ["selectDefaultTab", "selectDefaultTab", booleanAttribute], selectedTabIndex: "selectedTabIndex", tabButtonMaxWidth: "tabButtonMaxWidth" }, outputs: { selectedTabIndexChange: "selectedTabIndexChange", deselect: "deselect" }, queries: [{ propertyName: "tabPanels", predicate: SiTabLegacyComponent }], viewQueries: [{ propertyName: "tabContainer", first: true, predicate: ["tabContainer"], descendants: true, isSignal: true }, { propertyName: "innerTabContainer", first: true, predicate: ["innerTabContainer"], descendants: true, isSignal: true }, { propertyName: "tabs", predicate: ["tabElement"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"nav nav-tabs tab-container-header focus-inside\"\n role=\"tablist\"\n [class.is-scrollable]=\"scrollable\"\n (siResizeObserver)=\"resize()\"\n>\n @if (scrollable) {\n <button\n type=\"button\"\n class=\"tab-container-control focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [hidden]=\"!xPos\"\n (keydown.enter)=\"scrollStart()\"\n (mousedown)=\"scrollStart()\"\n >\n <si-icon class=\"icon flip-rtl\" [icon]=\"icons.elementLeft3\" />\n </button>\n }\n\n <div #tabContainer class=\"tab-container-buttonbar\" (wheel)=\"mouseScroll($event)\">\n <div #innerTabContainer class=\"tab-container-buttonbar-list focus-inside\">\n @for (tab of tabPanels; track $index) {\n <button\n #tabElement\n type=\"button\"\n role=\"tab\"\n class=\"nav-link focus-inside px-5\"\n [class.pe-3]=\"tab.closable\"\n [attr.aria-controls]=\"tab.id\"\n [id]=\"tab.tabId\"\n [style.max-width.px]=\"tabButtonMaxWidth\"\n [tabindex]=\"!tab.disabled && tab.active() && focusedTabIndex === undefined ? 0 : -1\"\n [class.active]=\"tab.active()\"\n [attr.aria-selected]=\"tab.active()\"\n [class.disabled]=\"tab.disabled\"\n (click)=\"selectTab(tab)\"\n (keydown.arrowLeft)=\"focusPrevious()\"\n (keydown.arrowRight)=\"focusNext()\"\n (keydown.delete)=\"tab.closeTriggered.emit(tab)\"\n (blur)=\"blur()\"\n (focus)=\"focus($index)\"\n >\n <span class=\"text-truncate\">{{ tab.heading | translate }}</span>\n @if (tab.icon) {\n <si-icon\n class=\"icon\"\n [attr.role]=\"tab.iconAltText ? 'img' : 'presentation'\"\n [icon]=\"tab.icon\"\n [attr.aria-label]=\"(tab.iconAltText | translate) ?? undefined\"\n />\n }\n @if (tab.badgeContent === true) {\n <span class=\"badge-dot\"></span>\n } @else if (tab.badgeContent && tab.badgeColor) {\n <span class=\"badge\" [ngClass]=\"'bg-' + tab.badgeColor\">\n {{ tab.badgeContent | translate }}\n </span>\n } @else if (tab.badgeContent && !tab.badgeColor) {\n <span class=\"badge-text\"> {{ tab.badgeContent | translate }}</span>\n }\n @if (tab.closable && !tab.disabled) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event, tab)\"\n />\n }\n </button>\n }\n </div>\n </div>\n @if (scrollable) {\n <button\n type=\"button\"\n class=\"tab-container-control is-end focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [hidden]=\"endArrowDisabled\"\n (keydown.enter)=\"scrollEnd()\"\n (mousedown)=\"scrollEnd()\"\n >\n <si-icon class=\"icon flip-rtl\" [icon]=\"icons.elementRight3\" />\n </button>\n }\n</div>\n\n<ng-content />\n", styles: [":host{display:block;flex-direction:column}.tab-container-header{overflow:hidden;display:flex}.tab-container-buttonbar{flex:1;overflow:hidden}.tab-container-buttonbar-list{display:flex;margin:0;padding:0;list-style-type:none;transition:calc(.25s * var(--element-animations-enabled, 1))}.tab-container-buttonbar-list-item{flex:none}.tab-container-control{background:transparent;border:0;-webkit-user-select:none;user-select:none;padding-inline:0 7px;padding-block:6px 10px}.tab-container-control .is-end{padding-inline:7px 0}.tab-container-control:hover{color:var(--element-text-active)}.tab-container-control:disabled{color:var(--element-text-disabled);cursor:default}.nav-link{flex-shrink:0;color:var(--element-text-secondary)}.nav-link span.badge-dot{inset-block-end:100%;inset-inline-start:12px;margin-inline-end:12px}.nav-link span.badge-text{inset-block-end:calc(100% - 7px);inset-inline-start:2px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "directive", type: SiResizeObserverDirective, selector: "[siResizeObserver]", inputs: ["resizeThrottle", "emitInitial"], outputs: ["siResizeObserver"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
338
338
  }
339
339
  __decorate([
340
340
  WebComponentContentChildren(SiTabLegacyComponent)
341
341
  ], SiTabsetLegacyComponent.prototype, "tabPanels", void 0);
342
342
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SiTabsetLegacyComponent, decorators: [{
343
343
  type: Component,
344
- args: [{ selector: 'si-tabset-legacy', imports: [NgClass, SiIconComponent, SiResizeObserverDirective, SiTranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"nav nav-tabs tab-container-header focus-inside\"\n role=\"tablist\"\n [class.is-scrollable]=\"scrollable\"\n (siResizeObserver)=\"resize()\"\n>\n @if (scrollable) {\n <button\n type=\"button\"\n class=\"tab-container-control focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [hidden]=\"!xPos\"\n (keydown.enter)=\"scrollStart()\"\n (mousedown)=\"scrollStart()\"\n >\n <si-icon class=\"icon flip-rtl\" [icon]=\"icons.elementLeft3\" />\n </button>\n }\n\n <div #tabContainer class=\"tab-container-buttonbar\" (wheel)=\"mouseScroll($event)\">\n <div #innerTabContainer class=\"tab-container-buttonbar-list focus-inside\">\n @for (tab of tabPanels; track $index) {\n <button\n #tabElement\n type=\"button\"\n role=\"tab\"\n class=\"nav-link focus-inside px-5\"\n [class.pe-3]=\"tab.closable\"\n [attr.aria-controls]=\"tab.id\"\n [id]=\"tab.tabId\"\n [style.max-width.px]=\"tabButtonMaxWidth\"\n [tabindex]=\"!tab.disabled && tab.active() && focusedTabIndex === undefined ? 0 : -1\"\n [class.active]=\"tab.active()\"\n [attr.aria-selected]=\"tab.active()\"\n [class.disabled]=\"tab.disabled\"\n (click)=\"selectTab(tab)\"\n (keydown.arrowLeft)=\"focusPrevious()\"\n (keydown.arrowRight)=\"focusNext()\"\n (keydown.delete)=\"tab.closeTriggered.emit(tab)\"\n (blur)=\"blur()\"\n (focus)=\"focus($index)\"\n >\n <span class=\"text-truncate\">{{ tab.heading | translate }}</span>\n @if (tab.icon) {\n <si-icon\n class=\"icon\"\n [attr.role]=\"tab.iconAltText ? 'img' : 'presentation'\"\n [icon]=\"tab.icon\"\n [attr.aria-label]=\"(tab.iconAltText | translate) ?? undefined\"\n />\n }\n @if (tab.badgeContent === true) {\n <span class=\"badge-dot\"></span>\n } @else if (tab.badgeContent && tab.badgeColor) {\n <span class=\"badge\" [ngClass]=\"'bg-' + tab.badgeColor\">\n {{ tab.badgeContent | translate }}\n </span>\n } @else if (tab.badgeContent && !tab.badgeColor) {\n <span class=\"badge-text\"> {{ tab.badgeContent | translate }}</span>\n }\n @if (tab.closable && !tab.disabled) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event, tab)\"\n />\n }\n </button>\n }\n </div>\n </div>\n @if (scrollable) {\n <button\n type=\"button\"\n class=\"tab-container-control is-end focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [hidden]=\"endArrowDisabled\"\n (keydown.enter)=\"scrollEnd()\"\n (mousedown)=\"scrollEnd()\"\n >\n <si-icon class=\"icon flip-rtl\" [icon]=\"icons.elementRight3\" />\n </button>\n }\n</div>\n\n<ng-content />\n", styles: [":host{display:block;flex-direction:column}.tab-container-header{overflow:hidden;display:flex}.tab-container-buttonbar{flex:1;overflow:hidden}.tab-container-buttonbar-list{display:flex;margin:0;padding:0;list-style-type:none;transition:calc(.25s * var(--element-animations-enabled, 1))}.tab-container-buttonbar-list-item{flex:none}.tab-container-control{background:transparent;border:0;-webkit-user-select:none;user-select:none;padding-inline:0 7px;padding-block:6px 10px}.tab-container-control .is-end{padding-inline:7px 0}.tab-container-control:hover{color:var(--element-text-active)}.tab-container-control:disabled{color:var(--element-text-disabled);cursor:default}.nav-link{flex-shrink:0}.nav-link span.badge-dot{inset-block-end:100%;inset-inline-start:12px;margin-inline-end:12px}.nav-link span.badge-text{inset-block-end:calc(100% - 7px);inset-inline-start:2px}\n"] }]
344
+ args: [{ selector: 'si-tabset-legacy', imports: [NgClass, SiIconComponent, SiResizeObserverDirective, SiTranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"nav nav-tabs tab-container-header focus-inside\"\n role=\"tablist\"\n [class.is-scrollable]=\"scrollable\"\n (siResizeObserver)=\"resize()\"\n>\n @if (scrollable) {\n <button\n type=\"button\"\n class=\"tab-container-control focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [hidden]=\"!xPos\"\n (keydown.enter)=\"scrollStart()\"\n (mousedown)=\"scrollStart()\"\n >\n <si-icon class=\"icon flip-rtl\" [icon]=\"icons.elementLeft3\" />\n </button>\n }\n\n <div #tabContainer class=\"tab-container-buttonbar\" (wheel)=\"mouseScroll($event)\">\n <div #innerTabContainer class=\"tab-container-buttonbar-list focus-inside\">\n @for (tab of tabPanels; track $index) {\n <button\n #tabElement\n type=\"button\"\n role=\"tab\"\n class=\"nav-link focus-inside px-5\"\n [class.pe-3]=\"tab.closable\"\n [attr.aria-controls]=\"tab.id\"\n [id]=\"tab.tabId\"\n [style.max-width.px]=\"tabButtonMaxWidth\"\n [tabindex]=\"!tab.disabled && tab.active() && focusedTabIndex === undefined ? 0 : -1\"\n [class.active]=\"tab.active()\"\n [attr.aria-selected]=\"tab.active()\"\n [class.disabled]=\"tab.disabled\"\n (click)=\"selectTab(tab)\"\n (keydown.arrowLeft)=\"focusPrevious()\"\n (keydown.arrowRight)=\"focusNext()\"\n (keydown.delete)=\"tab.closeTriggered.emit(tab)\"\n (blur)=\"blur()\"\n (focus)=\"focus($index)\"\n >\n <span class=\"text-truncate\">{{ tab.heading | translate }}</span>\n @if (tab.icon) {\n <si-icon\n class=\"icon\"\n [attr.role]=\"tab.iconAltText ? 'img' : 'presentation'\"\n [icon]=\"tab.icon\"\n [attr.aria-label]=\"(tab.iconAltText | translate) ?? undefined\"\n />\n }\n @if (tab.badgeContent === true) {\n <span class=\"badge-dot\"></span>\n } @else if (tab.badgeContent && tab.badgeColor) {\n <span class=\"badge\" [ngClass]=\"'bg-' + tab.badgeColor\">\n {{ tab.badgeContent | translate }}\n </span>\n } @else if (tab.badgeContent && !tab.badgeColor) {\n <span class=\"badge-text\"> {{ tab.badgeContent | translate }}</span>\n }\n @if (tab.closable && !tab.disabled) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event, tab)\"\n />\n }\n </button>\n }\n </div>\n </div>\n @if (scrollable) {\n <button\n type=\"button\"\n class=\"tab-container-control is-end focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [hidden]=\"endArrowDisabled\"\n (keydown.enter)=\"scrollEnd()\"\n (mousedown)=\"scrollEnd()\"\n >\n <si-icon class=\"icon flip-rtl\" [icon]=\"icons.elementRight3\" />\n </button>\n }\n</div>\n\n<ng-content />\n", styles: [":host{display:block;flex-direction:column}.tab-container-header{overflow:hidden;display:flex}.tab-container-buttonbar{flex:1;overflow:hidden}.tab-container-buttonbar-list{display:flex;margin:0;padding:0;list-style-type:none;transition:calc(.25s * var(--element-animations-enabled, 1))}.tab-container-buttonbar-list-item{flex:none}.tab-container-control{background:transparent;border:0;-webkit-user-select:none;user-select:none;padding-inline:0 7px;padding-block:6px 10px}.tab-container-control .is-end{padding-inline:7px 0}.tab-container-control:hover{color:var(--element-text-active)}.tab-container-control:disabled{color:var(--element-text-disabled);cursor:default}.nav-link{flex-shrink:0;color:var(--element-text-secondary)}.nav-link span.badge-dot{inset-block-end:100%;inset-inline-start:12px;margin-inline-end:12px}.nav-link span.badge-text{inset-block-end:calc(100% - 7px);inset-inline-start:2px}\n"] }]
345
345
  }], propDecorators: { tabPanels: [{
346
346
  type: ContentChildren,
347
347
  args: [SiTabLegacyComponent]
@@ -1 +1 @@
1
- {"version":3,"file":"siemens-element-ng-tabs-legacy.mjs","sources":["../../../../projects/element-ng/tabs-legacy/si-tab/si-tab-legacy.component.ts","../../../../projects/element-ng/tabs-legacy/si-tabset/si-tabset-legacy.component.ts","../../../../projects/element-ng/tabs-legacy/si-tabset/si-tabset-legacy.component.html","../../../../projects/element-ng/tabs-legacy/si-tabset/index.ts","../../../../projects/element-ng/tabs-legacy/si-tab/index.ts","../../../../projects/element-ng/tabs-legacy/si-tabs-legacy.module.ts","../../../../projects/element-ng/tabs-legacy/index.ts","../../../../projects/element-ng/tabs-legacy/siemens-element-ng-tabs-legacy.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\n/* eslint-disable @angular-eslint/prefer-output-emitter-ref */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n Output,\n signal\n} from '@angular/core';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiTabsetLegacyComponent } from '../si-tabset/index';\n\n/**\n * @deprecated Use the new components from `@siemens/element-ng/tabs` instead.\n * See {@link https://element.siemens.io/components/layout-navigation/tabs/#code}\n * for usage instructions.\n */\n@Component({\n selector: 'si-tab-legacy',\n template: '<ng-content />',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'tabpanel'\n }\n})\nexport class SiTabLegacyComponent implements OnChanges {\n private static idCounter = 0;\n /** Title of the tab item. */\n @Input() heading?: TranslatableString;\n /** Icon of the tab item. */\n @Input() icon?: string;\n /** Alternative name or translation key for icon. Used for A11y. */\n @Input() iconAltText?: TranslatableString;\n /**\n * Additional badge content. A value of\n * - `true` will render a red dot\n * - any string without a `badgeColor` will render a red dot with text\n * - any string with a `badgeColor` will render a normal badge\n */\n @Input() badgeContent?: TranslatableString | boolean;\n /**\n * Background color of the badge.\n * If no color is provided a red dot badge will be rendered.\n */\n @Input() badgeColor?: string;\n /**\n * Disables the tab.\n *\n * @defaultValue false\n */\n @Input({ transform: booleanAttribute }) disabled = false;\n /**\n * Close the current tab.\n *\n * @defaultValue false\n */\n @Input({ transform: booleanAttribute }) closable? = false;\n /** Event emitter to notify when a tab is closed. */\n @Output() readonly closeTriggered = new EventEmitter<SiTabLegacyComponent>();\n\n /** @internal */\n @HostBinding('id') id = `__si-tab-panel-${SiTabLegacyComponent.idCounter++}`;\n /** @internal */\n @HostBinding('attr.aria-labelledby') tabId = `__si-tab-${SiTabLegacyComponent.idCounter}`;\n\n @HostBinding('attr.hidden')\n protected get isHidden(): boolean | null {\n return !this.active() ? true : null;\n }\n\n private parent?: SiTabsetLegacyComponent;\n\n /** @internal */\n readonly active = signal(false);\n\n /** @internal */\n registerParent(parent: SiTabsetLegacyComponent): void {\n this.parent = parent;\n }\n\n ngOnChanges(): void {\n this.parent?.notifyChildrenChanged();\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\n/* eslint-disable @angular-eslint/prefer-output-emitter-ref */\nimport { NgClass } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n Output,\n QueryList,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport { isRTL, WebComponentContentChildren } from '@siemens/element-ng/common';\nimport {\n addIcons,\n elementCancel,\n elementLeft3,\n elementRight3,\n SiIconComponent\n} from '@siemens/element-ng/icon';\nimport { SiResizeObserverDirective } from '@siemens/element-ng/resize-observer';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\nimport { asyncScheduler, Subscription } from 'rxjs';\nimport { first, observeOn } from 'rxjs/operators';\n\nimport { SiTabLegacyComponent } from '../si-tab/si-tab-legacy.component';\n\nexport interface SiTabDeselectionEvent {\n /**\n * The target tab\n */\n target: SiTabLegacyComponent;\n /**\n * The index of target tab\n */\n tabIndex: number;\n /**\n * To be called to prevent switching the tab\n */\n cancel: () => void;\n}\n\nconst SCROLL_INCREMENT = 55;\n\n/**\n * @deprecated Use the new components from `@siemens/element-ng/tabs` instead.\n * See {@link https://element.siemens.io/components/layout-navigation/tabs/#code}\n * for usage instructions.\n */\n@Component({\n selector: 'si-tabset-legacy',\n imports: [NgClass, SiIconComponent, SiResizeObserverDirective, SiTranslatePipe],\n templateUrl: './si-tabset-legacy.component.html',\n styleUrl: './si-tabset-legacy.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiTabsetLegacyComponent implements AfterViewInit, OnDestroy {\n /**\n * Contains the current tab components.\n */\n @WebComponentContentChildren(SiTabLegacyComponent)\n @ContentChildren(SiTabLegacyComponent)\n protected tabPanels!: QueryList<SiTabLegacyComponent>;\n\n /**\n * Component variable to indicate if scrolling is necessary or the container is big enough to display all tabs.\n */\n protected scrollable = false;\n\n protected xPos = 0;\n protected endArrowDisabled = false;\n protected focusedTabIndex?: number;\n protected readonly icons = addIcons({ elementCancel, elementLeft3, elementRight3 });\n\n /**\n * If selectDefaultTab is passed as 'false', this implies no default tab selection\n * i.e. on initial load of tabset component no tab gets selected.\n *\n * @defaultValue true\n */\n @Input({ transform: booleanAttribute }) selectDefaultTab = true;\n\n /**\n * Sets a selected tab index. This will activate the tab of the provided\n * index, activates the tab and fires a notification about the change.\n * If index is passed as -1 i.e. `selectedTabIndex = -1`, this implies to clear all tab selection.\n * @defaultref {@link _selectedTabIndex}\n */\n @Input()\n set selectedTabIndex(tabIndex: number) {\n if (this.initialized && this.tabPanels.get(tabIndex)) {\n this.selectTab(this.tabPanels.get(tabIndex)!);\n } else {\n this.initTabIndex = tabIndex;\n }\n }\n\n /**\n * Returns the currently selected tab index.\n */\n get selectedTabIndex(): number {\n return this.tabPanels?.toArray().findIndex(tab => tab.active());\n }\n\n /** Define an optional max-width in px for the tab buttons. The minimum value is `100`. */\n @Input() tabButtonMaxWidth?: number;\n\n /**\n * Event emitter to notify about selected tab index changes. You can either\n * use bi-directional binding with [(selectedTabIndex)] or separate both with\n * [selectedTabIndex]=... and (selectedTabIndexChange)=...\n */\n @Output() readonly selectedTabIndexChange = new EventEmitter<number>();\n\n /**\n * Event emitter to notify when a tab became inactive.\n */\n @Output() readonly deselect = new EventEmitter<SiTabDeselectionEvent>();\n\n private initTabIndex = 0;\n private initialized = false;\n private subscription?: Subscription;\n private readonly tabContainer = viewChild.required<ElementRef>('tabContainer');\n private readonly innerTabContainer =\n viewChild.required<ElementRef<HTMLDivElement>>('innerTabContainer');\n private readonly tabs = viewChildren<ElementRef<HTMLButtonElement>>('tabElement');\n private changeDetectorRef = inject(ChangeDetectorRef);\n\n ngAfterViewInit(): void {\n this.initialized = true;\n this.subscription = this.tabPanels.changes.subscribe(() => {\n this.tabPanels.forEach(tab => tab.registerParent(this));\n this.changeDetectorRef.markForCheck();\n });\n this.tabPanels.notifyOnChanges();\n\n if (this.selectDefaultTab) {\n if (this.tabPanels.length) {\n queueMicrotask(() => this.selectTab(this.tabPanels.get(this.initTabIndex)!));\n } else {\n // no tabs are there yet. But maybe there will be some soon, so let's wait for it\n this.subscription.add(\n this.tabPanels.changes\n .pipe(\n first(() => !!this.tabPanels.length),\n observeOn(asyncScheduler)\n )\n .subscribe(() => {\n this.selectTab(this.tabPanels.get(this.initTabIndex)!);\n this.changeDetectorRef.markForCheck();\n })\n );\n }\n }\n\n setTimeout(() => {\n this.resize();\n });\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n this.subscription = undefined as any;\n }\n\n /** @internal */\n notifyChildrenChanged(): void {\n this.changeDetectorRef.markForCheck();\n }\n\n protected isTabFocusable(index: number): boolean {\n const tab = this.tabPanels.get(index)!;\n return !tab.disabled;\n }\n\n protected focusNext(): void {\n do {\n this.focusedTabIndex = (this.focusedTabIndex ?? 0) + 1;\n if (this.focusedTabIndex >= this.tabs().length) {\n this.focusedTabIndex = 0;\n }\n } while (!this.isTabFocusable(this.focusedTabIndex));\n this.tabs().at(this.focusedTabIndex!)!.nativeElement.focus();\n }\n\n protected focusPrevious(): void {\n do {\n this.focusedTabIndex = (this.focusedTabIndex ?? 0) - 1;\n if (this.focusedTabIndex < 0) {\n this.focusedTabIndex += this.tabs().length;\n }\n } while (!this.isTabFocusable(this.focusedTabIndex));\n this.tabs().at(this.focusedTabIndex!)!.nativeElement.focus();\n }\n\n protected resize(): void {\n this.scrollable =\n Math.round(this.tabContainer().nativeElement.offsetWidth) <\n this.innerTabContainer().nativeElement.scrollWidth;\n this.scroll(0);\n }\n\n /**\n * Finds the index of the provided tab and sets the index as new selected tab index\n *\n * @param selectedTab - The tab to be selected. This must already be part of the container.\n */\n protected selectTab(selectedTab: SiTabLegacyComponent): void {\n if (selectedTab?.disabled) {\n return;\n }\n const tabs = this.tabPanels.toArray();\n const newTabIndex = tabs.indexOf(selectedTab);\n const currentTabIndex = tabs.findIndex(tab => tab.active());\n let continueWithSelection = newTabIndex !== currentTabIndex;\n\n if (continueWithSelection && currentTabIndex !== -1) {\n const currentTab = tabs[currentTabIndex];\n const deselectEvent: SiTabDeselectionEvent = {\n target: currentTab,\n tabIndex: currentTabIndex,\n cancel: () => {\n continueWithSelection = false;\n currentTab.active.set(true);\n }\n };\n\n currentTab.active.set(false);\n this.deselect.emit(deselectEvent);\n }\n\n if (continueWithSelection) {\n selectedTab.active.set(true);\n this.changeDetectorRef.markForCheck();\n this.selectedTabIndexChange.emit(newTabIndex);\n }\n }\n\n /**\n * Scrolls the tab headers to the end (right in LTR).\n */\n protected scrollEnd(): void {\n this.scroll(SCROLL_INCREMENT);\n }\n\n /**\n * Scrolls the tab headers to the start (left in LTR).\n */\n protected scrollStart(): void {\n this.scroll(-SCROLL_INCREMENT);\n }\n\n private scroll(inc: number): void {\n this.xPos += inc;\n this.xPos = Math.max(\n 0,\n Math.min(\n this.innerTabContainer().nativeElement.scrollWidth -\n this.innerTabContainer().nativeElement.offsetWidth,\n this.xPos\n )\n );\n\n this.endArrowDisabled =\n this.xPos + this.tabContainer().nativeElement.offsetWidth >=\n this.innerTabContainer().nativeElement.scrollWidth;\n\n this.innerTabContainer().nativeElement.style.transform = `translateX(${\n this.xPos * (isRTL() ? 1 : -1)\n }px)`;\n }\n\n protected mouseScroll(event: WheelEvent): void {\n if (event.deltaY < 0) {\n this.scroll(-SCROLL_INCREMENT);\n } else {\n this.scroll(SCROLL_INCREMENT);\n }\n\n if (this.xPos || !this.endArrowDisabled) {\n event.preventDefault();\n }\n }\n\n /** @internal */\n focus(index: number): void {\n this.focusedTabIndex = index;\n }\n\n /** @internal */\n blur(): void {\n this.focusedTabIndex = undefined;\n }\n\n protected closeTab(event: MouseEvent, tab: SiTabLegacyComponent): void {\n event.stopPropagation();\n let targetActiveTab: SiTabLegacyComponent | undefined;\n if (tab.active()) {\n const index = this.tabPanels.toArray().indexOf(tab);\n targetActiveTab = this.tabPanels.toArray()[index + 1] ?? this.tabPanels.toArray()[index - 1];\n if (targetActiveTab) {\n this.selectTab(targetActiveTab);\n }\n } else {\n targetActiveTab = this.tabPanels.find(otherTabs => otherTabs.active());\n }\n\n if (targetActiveTab) {\n // The focus will always get the next element due browser behavior.\n // Setting it to the active element solves this.\n setTimeout(() => {\n this.tabs().at(this.tabPanels.toArray().indexOf(targetActiveTab))!.nativeElement.focus();\n });\n }\n tab.closeTriggered.emit(tab);\n this.focusedTabIndex = undefined;\n }\n}\n","<div\n class=\"nav nav-tabs tab-container-header focus-inside\"\n role=\"tablist\"\n [class.is-scrollable]=\"scrollable\"\n (siResizeObserver)=\"resize()\"\n>\n @if (scrollable) {\n <button\n type=\"button\"\n class=\"tab-container-control focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [hidden]=\"!xPos\"\n (keydown.enter)=\"scrollStart()\"\n (mousedown)=\"scrollStart()\"\n >\n <si-icon class=\"icon flip-rtl\" [icon]=\"icons.elementLeft3\" />\n </button>\n }\n\n <div #tabContainer class=\"tab-container-buttonbar\" (wheel)=\"mouseScroll($event)\">\n <div #innerTabContainer class=\"tab-container-buttonbar-list focus-inside\">\n @for (tab of tabPanels; track $index) {\n <button\n #tabElement\n type=\"button\"\n role=\"tab\"\n class=\"nav-link focus-inside px-5\"\n [class.pe-3]=\"tab.closable\"\n [attr.aria-controls]=\"tab.id\"\n [id]=\"tab.tabId\"\n [style.max-width.px]=\"tabButtonMaxWidth\"\n [tabindex]=\"!tab.disabled && tab.active() && focusedTabIndex === undefined ? 0 : -1\"\n [class.active]=\"tab.active()\"\n [attr.aria-selected]=\"tab.active()\"\n [class.disabled]=\"tab.disabled\"\n (click)=\"selectTab(tab)\"\n (keydown.arrowLeft)=\"focusPrevious()\"\n (keydown.arrowRight)=\"focusNext()\"\n (keydown.delete)=\"tab.closeTriggered.emit(tab)\"\n (blur)=\"blur()\"\n (focus)=\"focus($index)\"\n >\n <span class=\"text-truncate\">{{ tab.heading | translate }}</span>\n @if (tab.icon) {\n <si-icon\n class=\"icon\"\n [attr.role]=\"tab.iconAltText ? 'img' : 'presentation'\"\n [icon]=\"tab.icon\"\n [attr.aria-label]=\"(tab.iconAltText | translate) ?? undefined\"\n />\n }\n @if (tab.badgeContent === true) {\n <span class=\"badge-dot\"></span>\n } @else if (tab.badgeContent && tab.badgeColor) {\n <span class=\"badge\" [ngClass]=\"'bg-' + tab.badgeColor\">\n {{ tab.badgeContent | translate }}\n </span>\n } @else if (tab.badgeContent && !tab.badgeColor) {\n <span class=\"badge-text\"> {{ tab.badgeContent | translate }}</span>\n }\n @if (tab.closable && !tab.disabled) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event, tab)\"\n />\n }\n </button>\n }\n </div>\n </div>\n @if (scrollable) {\n <button\n type=\"button\"\n class=\"tab-container-control is-end focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [hidden]=\"endArrowDisabled\"\n (keydown.enter)=\"scrollEnd()\"\n (mousedown)=\"scrollEnd()\"\n >\n <si-icon class=\"icon flip-rtl\" [icon]=\"icons.elementRight3\" />\n </button>\n }\n</div>\n\n<ng-content />\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-tabset-legacy.component';\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-tab-legacy.component';\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiTabLegacyComponent } from './si-tab/si-tab-legacy.component';\nimport { SiTabsetLegacyComponent } from './si-tabset/si-tabset-legacy.component';\n\nconst components = [SiTabsetLegacyComponent, SiTabLegacyComponent];\n\n/**\n * @deprecated Use the new components from `@siemens/element-ng/tabs` instead.\n * See {@link https://element.siemens.io/components/layout-navigation/tabs/#code}\n * for usage instructions.\n */\n@NgModule({\n imports: components,\n exports: components\n})\nexport class SiTabsLegacyModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-tabset/index';\nexport * from './si-tab/index';\nexport * from './si-tabs-legacy.module';\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-tabs-legacy.mjs","sources":["../../../../projects/element-ng/tabs-legacy/si-tab/si-tab-legacy.component.ts","../../../../projects/element-ng/tabs-legacy/si-tabset/si-tabset-legacy.component.ts","../../../../projects/element-ng/tabs-legacy/si-tabset/si-tabset-legacy.component.html","../../../../projects/element-ng/tabs-legacy/si-tabset/index.ts","../../../../projects/element-ng/tabs-legacy/si-tab/index.ts","../../../../projects/element-ng/tabs-legacy/si-tabs-legacy.module.ts","../../../../projects/element-ng/tabs-legacy/index.ts","../../../../projects/element-ng/tabs-legacy/siemens-element-ng-tabs-legacy.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\n/* eslint-disable @angular-eslint/prefer-output-emitter-ref */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n Output,\n signal\n} from '@angular/core';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiTabsetLegacyComponent } from '../si-tabset/index';\n\n/**\n * @deprecated Use the new components from `@siemens/element-ng/tabs` instead.\n * See {@link https://element.siemens.io/components/layout-navigation/tabs/#code}\n * for usage instructions.\n */\n@Component({\n selector: 'si-tab-legacy',\n template: '<ng-content />',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'tabpanel'\n }\n})\nexport class SiTabLegacyComponent implements OnChanges {\n private static idCounter = 0;\n /** Title of the tab item. */\n @Input() heading?: TranslatableString;\n /** Icon of the tab item. */\n @Input() icon?: string;\n /** Alternative name or translation key for icon. Used for A11y. */\n @Input() iconAltText?: TranslatableString;\n /**\n * Additional badge content. A value of\n * - `true` will render a red dot\n * - any string without a `badgeColor` will render a red dot with text\n * - any string with a `badgeColor` will render a normal badge\n */\n @Input() badgeContent?: TranslatableString | boolean;\n /**\n * Background color of the badge.\n * If no color is provided a red dot badge will be rendered.\n */\n @Input() badgeColor?: string;\n /**\n * Disables the tab.\n *\n * @defaultValue false\n */\n @Input({ transform: booleanAttribute }) disabled = false;\n /**\n * Close the current tab.\n *\n * @defaultValue false\n */\n @Input({ transform: booleanAttribute }) closable? = false;\n /** Event emitter to notify when a tab is closed. */\n @Output() readonly closeTriggered = new EventEmitter<SiTabLegacyComponent>();\n\n /** @internal */\n @HostBinding('id') id = `__si-tab-panel-${SiTabLegacyComponent.idCounter++}`;\n /** @internal */\n @HostBinding('attr.aria-labelledby') tabId = `__si-tab-${SiTabLegacyComponent.idCounter}`;\n\n @HostBinding('attr.hidden')\n protected get isHidden(): boolean | null {\n return !this.active() ? true : null;\n }\n\n private parent?: SiTabsetLegacyComponent;\n\n /** @internal */\n readonly active = signal(false);\n\n /** @internal */\n registerParent(parent: SiTabsetLegacyComponent): void {\n this.parent = parent;\n }\n\n ngOnChanges(): void {\n this.parent?.notifyChildrenChanged();\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\n/* eslint-disable @angular-eslint/prefer-output-emitter-ref */\nimport { NgClass } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n Output,\n QueryList,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport { isRTL, WebComponentContentChildren } from '@siemens/element-ng/common';\nimport {\n addIcons,\n elementCancel,\n elementLeft3,\n elementRight3,\n SiIconComponent\n} from '@siemens/element-ng/icon';\nimport { SiResizeObserverDirective } from '@siemens/element-ng/resize-observer';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\nimport { asyncScheduler, Subscription } from 'rxjs';\nimport { first, observeOn } from 'rxjs/operators';\n\nimport { SiTabLegacyComponent } from '../si-tab/si-tab-legacy.component';\n\nexport interface SiTabDeselectionEvent {\n /**\n * The target tab\n */\n target: SiTabLegacyComponent;\n /**\n * The index of target tab\n */\n tabIndex: number;\n /**\n * To be called to prevent switching the tab\n */\n cancel: () => void;\n}\n\nconst SCROLL_INCREMENT = 55;\n\n/**\n * @deprecated Use the new components from `@siemens/element-ng/tabs` instead.\n * See {@link https://element.siemens.io/components/layout-navigation/tabs/#code}\n * for usage instructions.\n */\n@Component({\n selector: 'si-tabset-legacy',\n imports: [NgClass, SiIconComponent, SiResizeObserverDirective, SiTranslatePipe],\n templateUrl: './si-tabset-legacy.component.html',\n styleUrl: './si-tabset-legacy.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiTabsetLegacyComponent implements AfterViewInit, OnDestroy {\n /**\n * Contains the current tab components.\n */\n @WebComponentContentChildren(SiTabLegacyComponent)\n @ContentChildren(SiTabLegacyComponent)\n protected tabPanels!: QueryList<SiTabLegacyComponent>;\n\n /**\n * Component variable to indicate if scrolling is necessary or the container is big enough to display all tabs.\n */\n protected scrollable = false;\n\n protected xPos = 0;\n protected endArrowDisabled = false;\n protected focusedTabIndex?: number;\n protected readonly icons = addIcons({ elementCancel, elementLeft3, elementRight3 });\n\n /**\n * If selectDefaultTab is passed as 'false', this implies no default tab selection\n * i.e. on initial load of tabset component no tab gets selected.\n *\n * @defaultValue true\n */\n @Input({ transform: booleanAttribute }) selectDefaultTab = true;\n\n /**\n * Sets a selected tab index. This will activate the tab of the provided\n * index, activates the tab and fires a notification about the change.\n * If index is passed as -1 i.e. `selectedTabIndex = -1`, this implies to clear all tab selection.\n * @defaultref {@link _selectedTabIndex}\n */\n @Input()\n set selectedTabIndex(tabIndex: number) {\n if (this.initialized && this.tabPanels.get(tabIndex)) {\n this.selectTab(this.tabPanels.get(tabIndex)!);\n } else {\n this.initTabIndex = tabIndex;\n }\n }\n\n /**\n * Returns the currently selected tab index.\n */\n get selectedTabIndex(): number {\n return this.tabPanels?.toArray().findIndex(tab => tab.active());\n }\n\n /** Define an optional max-width in px for the tab buttons. The minimum value is `100`. */\n @Input() tabButtonMaxWidth?: number;\n\n /**\n * Event emitter to notify about selected tab index changes. You can either\n * use bi-directional binding with [(selectedTabIndex)] or separate both with\n * [selectedTabIndex]=... and (selectedTabIndexChange)=...\n */\n @Output() readonly selectedTabIndexChange = new EventEmitter<number>();\n\n /**\n * Event emitter to notify when a tab became inactive.\n */\n @Output() readonly deselect = new EventEmitter<SiTabDeselectionEvent>();\n\n private initTabIndex = 0;\n private initialized = false;\n private subscription?: Subscription;\n private readonly tabContainer = viewChild.required<ElementRef>('tabContainer');\n private readonly innerTabContainer =\n viewChild.required<ElementRef<HTMLDivElement>>('innerTabContainer');\n private readonly tabs = viewChildren<ElementRef<HTMLButtonElement>>('tabElement');\n private changeDetectorRef = inject(ChangeDetectorRef);\n\n ngAfterViewInit(): void {\n this.initialized = true;\n this.subscription = this.tabPanels.changes.subscribe(() => {\n this.tabPanels.forEach(tab => tab.registerParent(this));\n this.changeDetectorRef.markForCheck();\n });\n this.tabPanels.notifyOnChanges();\n\n if (this.selectDefaultTab) {\n if (this.tabPanels.length) {\n queueMicrotask(() => this.selectTab(this.tabPanels.get(this.initTabIndex)!));\n } else {\n // no tabs are there yet. But maybe there will be some soon, so let's wait for it\n this.subscription.add(\n this.tabPanels.changes\n .pipe(\n first(() => !!this.tabPanels.length),\n observeOn(asyncScheduler)\n )\n .subscribe(() => {\n this.selectTab(this.tabPanels.get(this.initTabIndex)!);\n this.changeDetectorRef.markForCheck();\n })\n );\n }\n }\n\n setTimeout(() => {\n this.resize();\n });\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n this.subscription = undefined as any;\n }\n\n /** @internal */\n notifyChildrenChanged(): void {\n this.changeDetectorRef.markForCheck();\n }\n\n protected isTabFocusable(index: number): boolean {\n const tab = this.tabPanels.get(index)!;\n return !tab.disabled;\n }\n\n protected focusNext(): void {\n do {\n this.focusedTabIndex = (this.focusedTabIndex ?? 0) + 1;\n if (this.focusedTabIndex >= this.tabs().length) {\n this.focusedTabIndex = 0;\n }\n } while (!this.isTabFocusable(this.focusedTabIndex));\n this.tabs().at(this.focusedTabIndex!)!.nativeElement.focus();\n }\n\n protected focusPrevious(): void {\n do {\n this.focusedTabIndex = (this.focusedTabIndex ?? 0) - 1;\n if (this.focusedTabIndex < 0) {\n this.focusedTabIndex += this.tabs().length;\n }\n } while (!this.isTabFocusable(this.focusedTabIndex));\n this.tabs().at(this.focusedTabIndex!)!.nativeElement.focus();\n }\n\n protected resize(): void {\n this.scrollable =\n Math.round(this.tabContainer().nativeElement.offsetWidth) <\n this.innerTabContainer().nativeElement.scrollWidth;\n this.scroll(0);\n }\n\n /**\n * Finds the index of the provided tab and sets the index as new selected tab index\n *\n * @param selectedTab - The tab to be selected. This must already be part of the container.\n */\n protected selectTab(selectedTab: SiTabLegacyComponent): void {\n if (selectedTab?.disabled) {\n return;\n }\n const tabs = this.tabPanels.toArray();\n const newTabIndex = tabs.indexOf(selectedTab);\n const currentTabIndex = tabs.findIndex(tab => tab.active());\n let continueWithSelection = newTabIndex !== currentTabIndex;\n\n if (continueWithSelection && currentTabIndex !== -1) {\n const currentTab = tabs[currentTabIndex];\n const deselectEvent: SiTabDeselectionEvent = {\n target: currentTab,\n tabIndex: currentTabIndex,\n cancel: () => {\n continueWithSelection = false;\n currentTab.active.set(true);\n }\n };\n\n currentTab.active.set(false);\n this.deselect.emit(deselectEvent);\n }\n\n if (continueWithSelection) {\n selectedTab.active.set(true);\n this.changeDetectorRef.markForCheck();\n this.selectedTabIndexChange.emit(newTabIndex);\n }\n }\n\n /**\n * Scrolls the tab headers to the end (right in LTR).\n */\n protected scrollEnd(): void {\n this.scroll(SCROLL_INCREMENT);\n }\n\n /**\n * Scrolls the tab headers to the start (left in LTR).\n */\n protected scrollStart(): void {\n this.scroll(-SCROLL_INCREMENT);\n }\n\n private scroll(inc: number): void {\n this.xPos += inc;\n this.xPos = Math.max(\n 0,\n Math.min(\n this.innerTabContainer().nativeElement.scrollWidth -\n this.innerTabContainer().nativeElement.offsetWidth,\n this.xPos\n )\n );\n\n this.endArrowDisabled =\n this.xPos + this.tabContainer().nativeElement.offsetWidth >=\n this.innerTabContainer().nativeElement.scrollWidth;\n\n this.innerTabContainer().nativeElement.style.transform = `translateX(${\n this.xPos * (isRTL() ? 1 : -1)\n }px)`;\n }\n\n protected mouseScroll(event: WheelEvent): void {\n if (event.deltaY < 0) {\n this.scroll(-SCROLL_INCREMENT);\n } else {\n this.scroll(SCROLL_INCREMENT);\n }\n\n if (this.xPos || !this.endArrowDisabled) {\n event.preventDefault();\n }\n }\n\n /** @internal */\n focus(index: number): void {\n this.focusedTabIndex = index;\n }\n\n /** @internal */\n blur(): void {\n this.focusedTabIndex = undefined;\n }\n\n protected closeTab(event: MouseEvent, tab: SiTabLegacyComponent): void {\n event.stopPropagation();\n let targetActiveTab: SiTabLegacyComponent | undefined;\n if (tab.active()) {\n const index = this.tabPanels.toArray().indexOf(tab);\n targetActiveTab = this.tabPanels.toArray()[index + 1] ?? this.tabPanels.toArray()[index - 1];\n if (targetActiveTab) {\n this.selectTab(targetActiveTab);\n }\n } else {\n targetActiveTab = this.tabPanels.find(otherTabs => otherTabs.active());\n }\n\n if (targetActiveTab) {\n // The focus will always get the next element due browser behavior.\n // Setting it to the active element solves this.\n setTimeout(() => {\n this.tabs().at(this.tabPanels.toArray().indexOf(targetActiveTab))!.nativeElement.focus();\n });\n }\n tab.closeTriggered.emit(tab);\n this.focusedTabIndex = undefined;\n }\n}\n","<div\n class=\"nav nav-tabs tab-container-header focus-inside\"\n role=\"tablist\"\n [class.is-scrollable]=\"scrollable\"\n (siResizeObserver)=\"resize()\"\n>\n @if (scrollable) {\n <button\n type=\"button\"\n class=\"tab-container-control focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [hidden]=\"!xPos\"\n (keydown.enter)=\"scrollStart()\"\n (mousedown)=\"scrollStart()\"\n >\n <si-icon class=\"icon flip-rtl\" [icon]=\"icons.elementLeft3\" />\n </button>\n }\n\n <div #tabContainer class=\"tab-container-buttonbar\" (wheel)=\"mouseScroll($event)\">\n <div #innerTabContainer class=\"tab-container-buttonbar-list focus-inside\">\n @for (tab of tabPanels; track $index) {\n <button\n #tabElement\n type=\"button\"\n role=\"tab\"\n class=\"nav-link focus-inside px-5\"\n [class.pe-3]=\"tab.closable\"\n [attr.aria-controls]=\"tab.id\"\n [id]=\"tab.tabId\"\n [style.max-width.px]=\"tabButtonMaxWidth\"\n [tabindex]=\"!tab.disabled && tab.active() && focusedTabIndex === undefined ? 0 : -1\"\n [class.active]=\"tab.active()\"\n [attr.aria-selected]=\"tab.active()\"\n [class.disabled]=\"tab.disabled\"\n (click)=\"selectTab(tab)\"\n (keydown.arrowLeft)=\"focusPrevious()\"\n (keydown.arrowRight)=\"focusNext()\"\n (keydown.delete)=\"tab.closeTriggered.emit(tab)\"\n (blur)=\"blur()\"\n (focus)=\"focus($index)\"\n >\n <span class=\"text-truncate\">{{ tab.heading | translate }}</span>\n @if (tab.icon) {\n <si-icon\n class=\"icon\"\n [attr.role]=\"tab.iconAltText ? 'img' : 'presentation'\"\n [icon]=\"tab.icon\"\n [attr.aria-label]=\"(tab.iconAltText | translate) ?? undefined\"\n />\n }\n @if (tab.badgeContent === true) {\n <span class=\"badge-dot\"></span>\n } @else if (tab.badgeContent && tab.badgeColor) {\n <span class=\"badge\" [ngClass]=\"'bg-' + tab.badgeColor\">\n {{ tab.badgeContent | translate }}\n </span>\n } @else if (tab.badgeContent && !tab.badgeColor) {\n <span class=\"badge-text\"> {{ tab.badgeContent | translate }}</span>\n }\n @if (tab.closable && !tab.disabled) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event, tab)\"\n />\n }\n </button>\n }\n </div>\n </div>\n @if (scrollable) {\n <button\n type=\"button\"\n class=\"tab-container-control is-end focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [hidden]=\"endArrowDisabled\"\n (keydown.enter)=\"scrollEnd()\"\n (mousedown)=\"scrollEnd()\"\n >\n <si-icon class=\"icon flip-rtl\" [icon]=\"icons.elementRight3\" />\n </button>\n }\n</div>\n\n<ng-content />\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-tabset-legacy.component';\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-tab-legacy.component';\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiTabLegacyComponent } from './si-tab/si-tab-legacy.component';\nimport { SiTabsetLegacyComponent } from './si-tabset/si-tabset-legacy.component';\n\nconst components = [SiTabsetLegacyComponent, SiTabLegacyComponent];\n\n/**\n * @deprecated Use the new components from `@siemens/element-ng/tabs` instead.\n * See {@link https://element.siemens.io/components/layout-navigation/tabs/#code}\n * for usage instructions.\n */\n@NgModule({\n imports: components,\n exports: components\n})\nexport class SiTabsLegacyModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-tabset/index';\nexport * from './si-tab/index';\nexport * from './si-tabs-legacy.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -35,7 +35,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
35
35
  * Copyright (c) Siemens 2016 - 2025
36
36
  * SPDX-License-Identifier: MIT
37
37
  */
38
- const SI_TABSET = new InjectionToken('SiTabsetNextComponent');
38
+ const SI_TABSET = new InjectionToken('SiTabsetComponent');
39
39
 
40
40
  class SiTabBaseDirective {
41
41
  /** Title of the tab item. */
@@ -77,6 +77,7 @@ class SiTabBaseDirective {
77
77
  });
78
78
  /** Event emitter to notify when a tab is closed. */
79
79
  closeTriggered = output();
80
+ /** @internal */
80
81
  tabButton = inject(ElementRef);
81
82
  /** @internal */
82
83
  tabContent = viewChild('tabContent', { read: TemplateRef });
@@ -117,11 +118,7 @@ class SiTabBaseDirective {
117
118
  focus() {
118
119
  this.tabButton.nativeElement.focus({ preventScroll: true });
119
120
  // The element is not fully scrolled into view when focused. So we prevent and scroll it manually.
120
- this.tabButton.nativeElement.scrollIntoView({
121
- inline: 'nearest',
122
- block: 'nearest',
123
- behavior: 'instant'
124
- });
121
+ this.scrollTabIntoView();
125
122
  }
126
123
  /** @internal */
127
124
  get disabled() {
@@ -141,6 +138,14 @@ class SiTabBaseDirective {
141
138
  deSelectTab() {
142
139
  // Empty be default, can be overridden in derived classes.
143
140
  }
141
+ /** @internal */
142
+ scrollTabIntoView() {
143
+ this.tabButton.nativeElement.scrollIntoView({
144
+ inline: 'nearest',
145
+ block: 'nearest',
146
+ behavior: 'instant'
147
+ });
148
+ }
144
149
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SiTabBaseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
145
150
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.0.6", type: SiTabBaseDirective, isStandalone: true, selector: "[siTabNextBase]", inputs: { heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, badgeContent: { classPropertyName: "badgeContent", publicName: "badgeContent", isSignal: true, isRequired: false, transformFunction: null }, badgeColor: { classPropertyName: "badgeColor", publicName: "badgeColor", isSignal: true, isRequired: false, transformFunction: null }, disabledTab: { classPropertyName: "disabledTab", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closeTriggered: "closeTriggered" }, host: { attributes: { "role": "tab" }, listeners: { "keydown.delete": "closeTab($event)" }, properties: { "class.disabled": "disabledTab()", "class.icon-only": "!!icon()", "class.pe-3": "closable()", "class.active": "active()", "attr.id": "'tab-' + tabId", "attr.aria-selected": "active()", "attr.aria-disabled": "disabledTab()", "attr.tabindex": "tabset.focusKeyManager.activeItem === this && !disabledTab() ? 0 : -1", "attr.aria-controls": "'content-' + tabId" }, classAttribute: "nav-link focus-inside px-5 si-h4" }, viewQueries: [{ propertyName: "tabContent", first: true, predicate: ["tabContent"], descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0 });
146
151
  }
@@ -201,7 +206,7 @@ class SiTabLinkComponent extends SiTabBaseDirective {
201
206
  super.selectTab(retainFocus);
202
207
  }
203
208
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SiTabLinkComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
204
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: SiTabLinkComponent, isStandalone: true, selector: "a[si-tab][routerLink]", providers: [{ provide: SiTabBaseDirective, useExisting: SiTabLinkComponent }], usesInheritance: true, hostDirectives: [{ directive: i1.RouterLinkActive }], ngImport: i0, template: "@let icon = this.icon();\n@if (icon) {\n <si-icon class=\"tab-icon\" [icon]=\"icon\" [attr.title]=\"heading() | translate\" />\n} @else {\n <span class=\"text-truncate\">{{ heading() | translate }}</span>\n}\n<si-tab-badge [badgeColor]=\"badgeColor()\" [badgeContent]=\"badgeContent()\" />\n@if (closable() && !disabledTab()) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0);color:var(--element-text-primary)}:host.nav-link.icon-only{min-inline-size:auto}.tab-icon{font-size:24px}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }, { kind: "component", type: SiTabBadgeComponent, selector: "si-tab-badge", inputs: ["badgeContent", "badgeColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
209
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: SiTabLinkComponent, isStandalone: true, selector: "a[si-tab][routerLink]", providers: [{ provide: SiTabBaseDirective, useExisting: SiTabLinkComponent }], usesInheritance: true, hostDirectives: [{ directive: i1.RouterLinkActive }], ngImport: i0, template: "@let icon = this.icon();\n@if (icon) {\n <si-icon class=\"tab-icon\" [icon]=\"icon\" [attr.title]=\"heading() | translate\" />\n} @else {\n <span class=\"text-truncate\">{{ heading() | translate }}</span>\n}\n<si-tab-badge [badgeColor]=\"badgeColor()\" [badgeContent]=\"badgeContent()\" />\n@if (closable() && !disabledTab()) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0)}:host.nav-link.icon-only{min-inline-size:auto}.tab-icon{font-size:24px}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }, { kind: "component", type: SiTabBadgeComponent, selector: "si-tab-badge", inputs: ["badgeContent", "badgeColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
205
210
  }
206
211
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SiTabLinkComponent, decorators: [{
207
212
  type: Component,
@@ -209,7 +214,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
209
214
  {
210
215
  directive: RouterLinkActive
211
216
  }
212
- ], template: "@let icon = this.icon();\n@if (icon) {\n <si-icon class=\"tab-icon\" [icon]=\"icon\" [attr.title]=\"heading() | translate\" />\n} @else {\n <span class=\"text-truncate\">{{ heading() | translate }}</span>\n}\n<si-tab-badge [badgeColor]=\"badgeColor()\" [badgeContent]=\"badgeContent()\" />\n@if (closable() && !disabledTab()) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0);color:var(--element-text-primary)}:host.nav-link.icon-only{min-inline-size:auto}.tab-icon{font-size:24px}\n"] }]
217
+ ], template: "@let icon = this.icon();\n@if (icon) {\n <si-icon class=\"tab-icon\" [icon]=\"icon\" [attr.title]=\"heading() | translate\" />\n} @else {\n <span class=\"text-truncate\">{{ heading() | translate }}</span>\n}\n<si-tab-badge [badgeColor]=\"badgeColor()\" [badgeContent]=\"badgeContent()\" />\n@if (closable() && !disabledTab()) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0)}:host.nav-link.icon-only{min-inline-size:auto}.tab-icon{font-size:24px}\n"] }]
213
218
  }] });
214
219
 
215
220
  /**
@@ -234,6 +239,16 @@ class SiTabsetComponent {
234
239
  tabIsLink(tab) {
235
240
  return tab instanceof SiTabLinkComponent;
236
241
  }
242
+ constructor() {
243
+ effect(() => {
244
+ if (this.showMenuButton() && this.activeTab()) {
245
+ // wait for menu button to render on DOM
246
+ setTimeout(() => {
247
+ this.activeTab()?.scrollTabIntoView();
248
+ });
249
+ }
250
+ });
251
+ }
237
252
  /** @internal */
238
253
  removedTabByUser(index, active) {
239
254
  // The tab was already removed from the tabPanels list when this function is called.
@@ -287,7 +302,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
287
302
  useExisting: SiTabsetComponent
288
303
  }
289
304
  ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"tabs-container\">\n <div class=\"tab-container-buttonbar-list nav nav-tabs\">\n <div\n #tabScrollContainer\n role=\"tablist\"\n tabindex=\"-1\"\n class=\"d-flex tabs-wrapper\"\n (siResizeObserver)=\"\n resizeContainer(tabScrollContainer.clientWidth, tabScrollContainer.scrollWidth)\n \"\n (keydown)=\"keydown($event)\"\n >\n <ng-content />\n </div>\n\n @if (showMenuButton()) {\n <button\n type=\"button\"\n class=\"dropdown btn btn-tertiary focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"tabsMenu\"\n >\n <i class=\"icon element-options m-0\"></i>\n </button>\n }\n </div>\n @let tabContent = this.activeTab()?.tabContent();\n @let activeTab = this.activeTab();\n\n @if (activeTab) {\n <div\n class=\"tab-content\"\n role=\"tabpanel\"\n [id]=\"'content-' + activeTab.tabId\"\n [attr.aria-labelledby]=\"'tab-' + activeTab.tabId\"\n >\n @if (tabContent) {\n <ng-container [ngTemplateOutlet]=\"tabContent\" />\n }\n\n <ng-content select=\"router-outlet\" />\n </div>\n }\n</div>\n\n<ng-template #tabsMenu>\n <si-menu>\n @for (tab of tabPanels(); track tab) {\n @if (tabIsLink(tab)) {\n <a\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tab.routerLink?.urlTree\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </button>\n }\n }\n </si-menu>\n</ng-template>\n\n<ng-template #badgeTemplate let-tab=\"tab\">\n <div class=\"d-flex align-items-center space-between flex-no-wrap justify-content-between\">\n {{ tab.heading() }}\n <si-tab-badge [badgeContent]=\"tab.badgeContent()\" [badgeColor]=\"tab.badgeColor()\" />\n </div>\n</ng-template>\n", styles: [":host{display:block;flex-direction:column}.tabs-container{display:flex;flex-wrap:wrap;overflow:hidden;block-size:100%;min-block-size:40px}.tabs-container:before{inset-block-start:38px;inset-block-end:auto}.tab-container-buttonbar-list{display:flex;min-block-size:40px;overflow:hidden;flex:1;order:1;min-inline-size:100px}.btn.dropdown{color:var(--element-text-primary);min-inline-size:0;border-block-end:2px solid var(--element-ui-4);order:2;block-size:40px;padding-inline:12px;flex-shrink:0}.btn.dropdown:hover{border-color:var(--element-ui-4);color:var(--element-action-secondary-text-hover)}.tab-content{inline-size:100%;block-size:calc(100% - 40px);order:3}.tabs-wrapper{overflow-y:hidden;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none}\n"] }]
290
- }] });
305
+ }], ctorParameters: () => [] });
291
306
 
292
307
  /**
293
308
  * Copyright (c) Siemens 2016 - 2025
@@ -312,13 +327,31 @@ class SiTabComponent extends SiTabBaseDirective {
312
327
  * @defaultValue false
313
328
  * */
314
329
  active = model(false);
330
+ /**
331
+ * Guard to check if the tab can be activated.
332
+ * If not provided, the tab can always be activated.
333
+ */
334
+ canActivate = input();
335
+ /**
336
+ * Guard to check if the tab can be deactivated.
337
+ * If not provided, the tab can always be deactivated.
338
+ */
339
+ canDeactivate = input();
315
340
  selectTabByUser() {
316
- if (!this.active()) {
341
+ const canActivate = this.canActivate();
342
+ if (!this.active() && (canActivate ? canActivate() : true)) {
317
343
  this.selectTab();
318
344
  }
319
345
  }
320
346
  /** {@inheritDoc} */
321
347
  selectTab(retainFocus) {
348
+ const activeTab = this.tabset.activeTab();
349
+ if (activeTab instanceof SiTabComponent) {
350
+ const canDeactivate = activeTab?.canDeactivate();
351
+ if (canDeactivate ? !canDeactivate() : false) {
352
+ return;
353
+ }
354
+ }
322
355
  this.tabset.activeTab()?.deSelectTab();
323
356
  this.active.set(true);
324
357
  super.selectTab(retainFocus);
@@ -328,14 +361,14 @@ class SiTabComponent extends SiTabBaseDirective {
328
361
  this.active.set(false);
329
362
  }
330
363
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SiTabComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
331
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: SiTabComponent, isStandalone: true, selector: "si-tab", inputs: { active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { active: "activeChange" }, host: { listeners: { "click": "selectTabByUser()", "keydown.enter": "selectTabByUser()" } }, providers: [{ provide: SiTabBaseDirective, useExisting: SiTabComponent }], usesInheritance: true, ngImport: i0, template: "@let icon = this.icon();\n@if (icon) {\n <si-icon class=\"tab-icon\" [icon]=\"icon\" [attr.title]=\"heading() | translate\" />\n} @else {\n <span class=\"text-truncate\">{{ heading() | translate }}</span>\n}\n<si-tab-badge [badgeColor]=\"badgeColor()\" [badgeContent]=\"badgeContent()\" />\n@if (closable() && !disabledTab()) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0);color:var(--element-text-primary)}:host.nav-link.icon-only{min-inline-size:auto}.tab-icon{font-size:24px}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }, { kind: "component", type: SiTabBadgeComponent, selector: "si-tab-badge", inputs: ["badgeContent", "badgeColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
364
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: SiTabComponent, isStandalone: true, selector: "si-tab", inputs: { active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, canActivate: { classPropertyName: "canActivate", publicName: "canActivate", isSignal: true, isRequired: false, transformFunction: null }, canDeactivate: { classPropertyName: "canDeactivate", publicName: "canDeactivate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { active: "activeChange" }, host: { listeners: { "click": "selectTabByUser()", "keydown.enter": "selectTabByUser()" } }, providers: [{ provide: SiTabBaseDirective, useExisting: SiTabComponent }], usesInheritance: true, ngImport: i0, template: "@let icon = this.icon();\n@if (icon) {\n <si-icon class=\"tab-icon\" [icon]=\"icon\" [attr.title]=\"heading() | translate\" />\n} @else {\n <span class=\"text-truncate\">{{ heading() | translate }}</span>\n}\n<si-tab-badge [badgeColor]=\"badgeColor()\" [badgeContent]=\"badgeContent()\" />\n@if (closable() && !disabledTab()) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0)}:host.nav-link.icon-only{min-inline-size:auto}.tab-icon{font-size:24px}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }, { kind: "component", type: SiTabBadgeComponent, selector: "si-tab-badge", inputs: ["badgeContent", "badgeColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
332
365
  }
333
366
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SiTabComponent, decorators: [{
334
367
  type: Component,
335
368
  args: [{ selector: 'si-tab', imports: [SiIconComponent, SiTranslatePipe, SiTabBadgeComponent], providers: [{ provide: SiTabBaseDirective, useExisting: SiTabComponent }], changeDetection: ChangeDetectionStrategy.OnPush, host: {
336
369
  '(click)': 'selectTabByUser()',
337
370
  '(keydown.enter)': 'selectTabByUser()'
338
- }, template: "@let icon = this.icon();\n@if (icon) {\n <si-icon class=\"tab-icon\" [icon]=\"icon\" [attr.title]=\"heading() | translate\" />\n} @else {\n <span class=\"text-truncate\">{{ heading() | translate }}</span>\n}\n<si-tab-badge [badgeColor]=\"badgeColor()\" [badgeContent]=\"badgeContent()\" />\n@if (closable() && !disabledTab()) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0);color:var(--element-text-primary)}:host.nav-link.icon-only{min-inline-size:auto}.tab-icon{font-size:24px}\n"] }]
371
+ }, template: "@let icon = this.icon();\n@if (icon) {\n <si-icon class=\"tab-icon\" [icon]=\"icon\" [attr.title]=\"heading() | translate\" />\n} @else {\n <span class=\"text-truncate\">{{ heading() | translate }}</span>\n}\n<si-tab-badge [badgeColor]=\"badgeColor()\" [badgeContent]=\"badgeContent()\" />\n@if (closable() && !disabledTab()) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0)}:host.nav-link.icon-only{min-inline-size:auto}.tab-icon{font-size:24px}\n"] }]
339
372
  }] });
340
373
 
341
374
  /**