@siemens/element-ng 49.6.0 → 49.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/fesm2022/siemens-element-ng-about.mjs +2 -2
  2. package/fesm2022/siemens-element-ng-about.mjs.map +1 -1
  3. package/fesm2022/siemens-element-ng-accordion.mjs +1 -1
  4. package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -1
  5. package/fesm2022/siemens-element-ng-action-modal.mjs +8 -8
  6. package/fesm2022/siemens-element-ng-action-modal.mjs.map +1 -1
  7. package/fesm2022/siemens-element-ng-ag-grid.mjs +3 -3
  8. package/fesm2022/siemens-element-ng-ag-grid.mjs.map +1 -1
  9. package/fesm2022/siemens-element-ng-application-header.mjs +5 -5
  10. package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
  11. package/fesm2022/siemens-element-ng-avatar.mjs +2 -2
  12. package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -1
  13. package/fesm2022/siemens-element-ng-breadcrumb.mjs +2 -2
  14. package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
  15. package/fesm2022/siemens-element-ng-card.mjs +43 -8
  16. package/fesm2022/siemens-element-ng-card.mjs.map +1 -1
  17. package/fesm2022/siemens-element-ng-chat-messages.mjs +8 -8
  18. package/fesm2022/siemens-element-ng-chat-messages.mjs.map +1 -1
  19. package/fesm2022/siemens-element-ng-circle-status.mjs +2 -2
  20. package/fesm2022/siemens-element-ng-circle-status.mjs.map +1 -1
  21. package/fesm2022/siemens-element-ng-color-picker.mjs +2 -2
  22. package/fesm2022/siemens-element-ng-color-picker.mjs.map +1 -1
  23. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs +2 -2
  24. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs.map +1 -1
  25. package/fesm2022/siemens-element-ng-common.mjs +4 -4
  26. package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
  27. package/fesm2022/siemens-element-ng-content-action-bar.mjs +2 -2
  28. package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -1
  29. package/fesm2022/siemens-element-ng-dashboard.mjs +31 -14
  30. package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
  31. package/fesm2022/siemens-element-ng-date-range-filter.mjs +16 -4
  32. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
  33. package/fesm2022/siemens-element-ng-datepicker.mjs +59 -46
  34. package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
  35. package/fesm2022/siemens-element-ng-electron-titlebar.mjs +2 -2
  36. package/fesm2022/siemens-element-ng-electron-titlebar.mjs.map +1 -1
  37. package/fesm2022/siemens-element-ng-file-uploader.mjs +9 -8
  38. package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
  39. package/fesm2022/siemens-element-ng-filter-bar.mjs +4 -4
  40. package/fesm2022/siemens-element-ng-filter-bar.mjs.map +1 -1
  41. package/fesm2022/siemens-element-ng-filtered-search.mjs +12 -12
  42. package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
  43. package/fesm2022/siemens-element-ng-formly.mjs +1 -1
  44. package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
  45. package/fesm2022/siemens-element-ng-header-dropdown.mjs +3 -3
  46. package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
  47. package/fesm2022/siemens-element-ng-loading-spinner.mjs +19 -11
  48. package/fesm2022/siemens-element-ng-loading-spinner.mjs.map +1 -1
  49. package/fesm2022/siemens-element-ng-modal.mjs +25 -26
  50. package/fesm2022/siemens-element-ng-modal.mjs.map +1 -1
  51. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +316 -354
  52. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -1
  53. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +4 -4
  54. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
  55. package/fesm2022/siemens-element-ng-navbar.mjs +4 -4
  56. package/fesm2022/siemens-element-ng-navbar.mjs.map +1 -1
  57. package/fesm2022/siemens-element-ng-notification-item.mjs +2 -2
  58. package/fesm2022/siemens-element-ng-notification-item.mjs.map +1 -1
  59. package/fesm2022/siemens-element-ng-number-input.mjs +2 -2
  60. package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -1
  61. package/fesm2022/siemens-element-ng-pagination.mjs +5 -2
  62. package/fesm2022/siemens-element-ng-pagination.mjs.map +1 -1
  63. package/fesm2022/siemens-element-ng-password-toggle.mjs +2 -2
  64. package/fesm2022/siemens-element-ng-password-toggle.mjs.map +1 -1
  65. package/fesm2022/siemens-element-ng-photo-upload.mjs +2 -2
  66. package/fesm2022/siemens-element-ng-photo-upload.mjs.map +1 -1
  67. package/fesm2022/siemens-element-ng-pills-input.mjs +4 -4
  68. package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -1
  69. package/fesm2022/siemens-element-ng-popover.mjs +10 -3
  70. package/fesm2022/siemens-element-ng-popover.mjs.map +1 -1
  71. package/fesm2022/siemens-element-ng-search-bar.mjs +10 -4
  72. package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -1
  73. package/fesm2022/siemens-element-ng-select.mjs +4 -4
  74. package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
  75. package/fesm2022/siemens-element-ng-side-panel.mjs +8 -5
  76. package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
  77. package/fesm2022/siemens-element-ng-status-bar.mjs +69 -29
  78. package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
  79. package/fesm2022/siemens-element-ng-summary-chip.mjs +2 -2
  80. package/fesm2022/siemens-element-ng-summary-chip.mjs.map +1 -1
  81. package/fesm2022/siemens-element-ng-summary-widget.mjs +2 -2
  82. package/fesm2022/siemens-element-ng-summary-widget.mjs.map +1 -1
  83. package/fesm2022/siemens-element-ng-tabs-legacy.mjs +2 -2
  84. package/fesm2022/siemens-element-ng-tabs-legacy.mjs.map +1 -1
  85. package/fesm2022/siemens-element-ng-tabs.mjs +10 -10
  86. package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
  87. package/fesm2022/siemens-element-ng-threshold.mjs +2 -2
  88. package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -1
  89. package/fesm2022/siemens-element-ng-toast-notification.mjs +2 -2
  90. package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -1
  91. package/fesm2022/siemens-element-ng-tooltip.mjs +10 -8
  92. package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
  93. package/fesm2022/siemens-element-ng-tour.mjs +2 -2
  94. package/fesm2022/siemens-element-ng-tour.mjs.map +1 -1
  95. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  96. package/fesm2022/siemens-element-ng-wizard.mjs +88 -53
  97. package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -1
  98. package/package.json +4 -4
  99. package/schematics/migrations/data/element-migration-data.js +20 -0
  100. package/schematics/migrations/data/index.js +1 -16
  101. package/schematics/migrations/ngx-translate/index.js +1 -137
  102. package/schematics/migrations/ngx-translate/missing-translate-migration.js +141 -0
  103. package/schematics/ng-add/index.js +1 -12
  104. package/schematics/ng-add/ng-add-rule.js +16 -0
  105. package/schematics/ng-update/index.js +1 -17
  106. package/schematics/ng-update/migrate-to-v49.js +21 -0
  107. package/template-i18n.json +3 -1
  108. package/types/siemens-element-ng-card.d.ts +26 -1
  109. package/types/siemens-element-ng-common.d.ts +3 -3
  110. package/types/siemens-element-ng-dashboard.d.ts +4 -1
  111. package/types/siemens-element-ng-date-range-filter.d.ts +10 -1
  112. package/types/siemens-element-ng-file-uploader.d.ts +4 -3
  113. package/types/siemens-element-ng-filtered-search.d.ts +1 -1
  114. package/types/siemens-element-ng-loading-spinner.d.ts +4 -2
  115. package/types/siemens-element-ng-navbar-vertical-next.d.ts +167 -183
  116. package/types/siemens-element-ng-navbar.d.ts +2 -2
  117. package/types/siemens-element-ng-popover.d.ts +9 -2
  118. package/types/siemens-element-ng-search-bar.d.ts +7 -1
  119. package/types/siemens-element-ng-side-panel.d.ts +2 -0
  120. package/types/siemens-element-ng-status-bar.d.ts +19 -10
  121. package/types/siemens-element-ng-tooltip.d.ts +9 -3
  122. package/types/siemens-element-ng-translate.d.ts +2 -0
  123. package/types/siemens-element-ng-wizard.d.ts +23 -5
@@ -1 +1 @@
1
- {"version":3,"file":"siemens-element-ng-content-action-bar.mjs","sources":["../../../../projects/element-ng/content-action-bar/si-content-action-bar-toggle.component.ts","../../../../projects/element-ng/content-action-bar/si-content-action-bar-toggle.component.html","../../../../projects/element-ng/content-action-bar/si-content-action-bar.component.ts","../../../../projects/element-ng/content-action-bar/si-content-action-bar.component.html","../../../../projects/element-ng/content-action-bar/si-content-action-bar.module.ts","../../../../projects/element-ng/content-action-bar/index.ts","../../../../projects/element-ng/content-action-bar/siemens-element-ng-content-action-bar.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { SiIconComponent } from '@siemens/element-ng/icon';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[si-content-action-bar-toggle]',\n imports: [SiIconComponent],\n templateUrl: './si-content-action-bar-toggle.component.html',\n styleUrl: '../menu/si-menu-item.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dropdown-item flex-grow-0 focus-inside' }\n})\nexport class SiContentActionBarToggleComponent {\n readonly icon = input.required<string>();\n}\n","<si-icon class=\"icon\" [icon]=\"icon()\" />\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { CdkMenuBar, CdkMenuModule } from '@angular/cdk/menu';\nimport {\n AfterViewInit,\n booleanAttribute,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n linkedSignal,\n viewChild\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { elementCancel, elementOptionsVertical } from '@siemens/element-icons';\nimport { SiAutoCollapsableListModule } from '@siemens/element-ng/auto-collapsable-list';\nimport { MenuItem as MenuItemLegacy } from '@siemens/element-ng/common';\nimport { addIcons } from '@siemens/element-ng/icon';\nimport { SiLinkModule } from '@siemens/element-ng/link';\nimport {\n MenuItem,\n MenuItemAction,\n MenuItemCheckbox,\n MenuItemRadio,\n SiMenuActionService,\n SiMenuModule\n} from '@siemens/element-ng/menu';\nimport { SiTooltipDirective } from '@siemens/element-ng/tooltip';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\n\nimport { SiContentActionBarToggleComponent } from './si-content-action-bar-toggle.component';\nimport { ContentActionBarMainItem, ViewType } from './si-content-action-bar.model';\n\n@Component({\n selector: 'si-content-action-bar',\n imports: [\n SiMenuModule,\n CdkMenuModule,\n SiAutoCollapsableListModule,\n SiTranslatePipe,\n SiLinkModule,\n SiContentActionBarToggleComponent,\n SiTooltipDirective,\n RouterLink\n ],\n templateUrl: './si-content-action-bar.component.html',\n styleUrl: './si-content-action-bar.component.scss',\n host: {\n '[class]': 'viewType()'\n }\n})\nexport class SiContentActionBarComponent implements AfterViewInit {\n /**\n * List of primary actions. Supports up to **4** actions and omits additional ones.\n */\n readonly primaryActions = input<readonly (MenuItemLegacy | ContentActionBarMainItem)[]>();\n /**\n * List of secondary actions.\n */\n readonly secondaryActions = input<readonly (MenuItemLegacy | MenuItem)[]>();\n /**\n * A param that will be passed to the `action` in the primary/secondary actions.\n * This allows to re-use the same primary/secondary action arrays across rows\n * in a table.\n */\n readonly actionParam = input<any>();\n /**\n * Selection of view type as 'collapsible', 'expanded' or 'mobile'.\n *\n * @defaultValue 'expanded'\n */\n readonly viewType = input<ViewType>('expanded');\n /**\n * Toggle icon aria-label, required for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CONTENT_ACTION_BAR.TOGGLE:Toggle`)\n * ```\n */\n readonly toggleItemLabel = input(t(() => $localize`:@@SI_CONTENT_ACTION_BAR.TOGGLE:Toggle`));\n /**\n * Option to remove all icons from dropdown menus of the content action bar.\n *\n * Some apps provide only few actions with icons, located in the set of primary actions.\n * The icons are visible in the `collapsible` and `expanded` view type. On reduced space,\n * primary actions are relocated in the same dropdown menu as the secondary actions. The\n * dropdown menu can look unbalanced, if a large number of secondary actions without\n * icons are presented with few actions with icons. This option balances the look and feel\n * by removing all icons from actions in the dropdown menu.\n *\n * @defaultValue false\n */\n readonly preventIconsInDropdownMenus = input(false, { transform: booleanAttribute });\n /**\n * Disables the whole content-action-bar.\n *\n * @defaultValue false\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n private readonly expandElement = viewChild<\n SiContentActionBarToggleComponent,\n ElementRef<HTMLElement>\n >('expandElement', { read: ElementRef });\n private readonly menuBarElement = viewChild<CdkMenuBar, ElementRef<HTMLDivElement>>(CdkMenuBar, {\n read: ElementRef\n });\n\n protected readonly mobileActions = computed(() => {\n const primaryActions = this.primaryActions();\n const secondaryActions = this.secondaryActions();\n const preventIcons = this.preventIconsInDropdownMenus();\n let actions: readonly (MenuItemLegacy | MenuItem)[] = [];\n if (primaryActions?.length && secondaryActions?.length) {\n actions = [...primaryActions, { title: '-' }, ...secondaryActions];\n } else if (primaryActions?.length) {\n actions = primaryActions;\n } else if (secondaryActions?.length) {\n actions = secondaryActions;\n }\n if (preventIcons) {\n actions = actions.map(action => ({\n ...action,\n icon: undefined\n }));\n }\n return actions;\n });\n protected readonly secondaryActionsInternal = computed(() => {\n let secondaryActions = this.secondaryActions();\n if (this.preventIconsInDropdownMenus()) {\n secondaryActions = secondaryActions?.map(action => ({\n ...action,\n icon: undefined\n }));\n }\n return secondaryActions;\n });\n protected readonly icons = addIcons({ elementCancel, elementOptionsVertical });\n protected readonly expanded = linkedSignal(() => this.viewType() === 'expanded');\n protected parentElement?: HTMLElement | null;\n\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private menuActionService = inject(SiMenuActionService, { optional: true });\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n if (this.parentElement !== this.elementRef.nativeElement.parentElement) {\n this.parentElement = this.elementRef.nativeElement.parentElement;\n }\n });\n }\n\n protected expand(): void {\n this.expanded.set(true);\n setTimeout(() => this.menuBarElement()?.nativeElement.focus());\n }\n\n protected collapse(): void {\n this.expanded.set(false);\n setTimeout(() => this.expandElement()?.nativeElement.focus());\n }\n\n protected isNewItemStyle(\n item: MenuItemLegacy | ContentActionBarMainItem\n ): item is ContentActionBarMainItem {\n return 'label' in item;\n }\n\n protected runAction(item: MenuItemAction | MenuItemRadio | MenuItemCheckbox): void {\n if (typeof item.action === 'function') {\n item.action(this.actionParam(), item as any); // typescript cannot level down the item type properly\n }\n\n if (typeof item.action === 'string') {\n this.menuActionService?.actionTriggered(item, this.actionParam());\n }\n }\n}\n","@if (viewType() !== 'mobile' && primaryActions()?.length) {\n <div siAutoCollapsableList class=\"d-flex\" [siAutoCollapsableListContainerElement]=\"parentElement\">\n @if (viewType() === 'collapsible' && !expanded() && collapsibleListItem.canBeVisible()) {\n <button\n #expandElement\n si-content-action-bar-toggle\n type=\"button\"\n [icon]=\"icons.elementOptionsVertical\"\n [attr.aria-label]=\"toggleItemLabel() | translate\"\n (click)=\"expand()\"\n ></button>\n }\n <si-menu-bar\n #collapsibleListItem=\"siAutoCollapsableListItem\"\n siAutoCollapsableListItem\n [forceHide]=\"!expanded()\"\n [disabled]=\"disabled()\"\n >\n <!-- ?? syntax is not working for track -->\n @for (primaryAction of primaryActions(); track primaryAction.id ? primaryAction.id : $index) {\n @if (isNewItemStyle(primaryAction)) {\n @switch (primaryAction.type) {\n @case ('action') {\n <button\n type=\"button\"\n si-menu-item\n [attr.data-id]=\"primaryAction.id\"\n [attr.aria-label]=\"primaryAction.label | translate\"\n [siTooltip]=\"primaryAction.iconOnly ? (primaryAction.label | translate) : ''\"\n [badge]=\"primaryAction.badge\"\n [badgeColor]=\"primaryAction.badgeColor ?? 'secondary'\"\n [disabled]=\"primaryAction.disabled || disabled()\"\n [icon]=\"primaryAction.icon\"\n [iconBadgeDot]=\"primaryAction.iconBadge\"\n (triggered)=\"runAction(primaryAction)\"\n >\n @if (!primaryAction.iconOnly) {\n {{ primaryAction.label | translate }}\n }\n </button>\n }\n @case ('checkbox') {\n <button\n type=\"button\"\n si-menu-item-checkbox\n [attr.data-id]=\"primaryAction.id\"\n [attr.aria-label]=\"primaryAction.label | translate\"\n [siTooltip]=\"primaryAction.iconOnly ? (primaryAction.label | translate) : ''\"\n [checked]=\"primaryAction.checked\"\n [badge]=\"primaryAction.badge\"\n [badgeColor]=\"primaryAction.badgeColor ?? 'secondary'\"\n [class.active]=\"primaryAction.checked\"\n [disabled]=\"primaryAction.disabled || disabled()\"\n [icon]=\"primaryAction.icon\"\n [iconBadgeDot]=\"primaryAction.iconBadge\"\n (triggered)=\"runAction(primaryAction)\"\n >\n @if (!primaryAction.iconOnly) {\n {{ primaryAction.label | translate }}\n }\n </button>\n }\n @case ('group') {\n <button\n type=\"button\"\n si-menu-item\n [attr.data-id]=\"primaryAction.id\"\n [attr.aria-label]=\"primaryAction.label | translate\"\n [siTooltip]=\"primaryAction.iconOnly ? (primaryAction.label | translate) : ''\"\n [badge]=\"primaryAction.badge\"\n [badgeColor]=\"primaryAction.badgeColor ?? 'secondary'\"\n [disabled]=\"primaryAction.disabled || disabled()\"\n [icon]=\"primaryAction.icon\"\n [iconBadgeDot]=\"primaryAction.iconBadge\"\n [cdkMenuTriggerFor]=\"groupSubmenu\"\n >\n @if (!primaryAction.iconOnly) {\n {{ primaryAction.label | translate }}\n }\n </button>\n <!-- Cannot use template context because of https://github.com/angular/components/issues/26256 -->\n <ng-template #groupSubmenu>\n <si-menu-factory [items]=\"primaryAction.children\" />\n </ng-template>\n }\n @case ('router-link') {\n <a\n si-menu-item\n [attr.data-id]=\"primaryAction.id\"\n [attr.aria-label]=\"primaryAction.label | translate\"\n [siTooltip]=\"primaryAction.iconOnly ? (primaryAction.label | translate) : ''\"\n [badge]=\"primaryAction.badge\"\n [badgeColor]=\"primaryAction.badgeColor ?? 'secondary'\"\n [disabled]=\"primaryAction.disabled || disabled()\"\n [icon]=\"primaryAction.icon\"\n [iconBadgeDot]=\"primaryAction.iconBadge\"\n [routerLink]=\"primaryAction.routerLink\"\n [queryParams]=\"primaryAction.extras?.queryParams\"\n [queryParamsHandling]=\"primaryAction.extras?.queryParamsHandling\"\n [fragment]=\"primaryAction.extras?.fragment\"\n [state]=\"primaryAction.extras?.state\"\n [relativeTo]=\"primaryAction.extras?.relativeTo\"\n [preserveFragment]=\"primaryAction.extras?.preserveFragment\"\n [skipLocationChange]=\"primaryAction.extras?.skipLocationChange\"\n [replaceUrl]=\"primaryAction.extras?.replaceUrl\"\n >\n @if (!primaryAction.iconOnly) {\n {{ primaryAction.label | translate }}\n }\n </a>\n }\n @case ('link') {\n <a\n si-menu-item\n [attr.data-id]=\"primaryAction.id\"\n [attr.aria-label]=\"primaryAction.label | translate\"\n [siTooltip]=\"primaryAction.iconOnly ? (primaryAction.label | translate) : ''\"\n [badge]=\"primaryAction.badge\"\n [badgeColor]=\"primaryAction.badgeColor ?? 'secondary'\"\n [disabled]=\"primaryAction.disabled || disabled()\"\n [icon]=\"primaryAction.icon\"\n [iconBadgeDot]=\"primaryAction.iconBadge\"\n [href]=\"primaryAction.href\"\n [target]=\"primaryAction.target\"\n >\n @if (!primaryAction.iconOnly) {\n {{ primaryAction.label | translate }}\n }\n </a>\n }\n }\n } @else {\n @if (primaryAction.items) {\n <a\n si-menu-item\n activeClass=\"active\"\n [attr.data-id]=\"primaryAction.id\"\n [siLink]=\"primaryAction\"\n [icon]=\"primaryAction.icon\"\n [attr.aria-label]=\"primaryAction.title | translate\"\n [badge]=\"primaryAction.badge\"\n [actionParam]=\"actionParam()\"\n [iconBadgeDot]=\"primaryAction.badgeDot\"\n [disabled]=\"primaryAction.disabled || disabled()\"\n [cdkMenuTriggerFor]=\"primaryAction.items ? mainItemSubmenu : null\"\n >\n @if (!primaryAction.iconOnly && primaryAction.title) {\n <span>{{ primaryAction.title | translate }}</span>\n }\n <!-- Cannot use template context because of https://github.com/angular/components/issues/26256 -->\n <ng-template #mainItemSubmenu>\n <si-menu-factory [items]=\"primaryAction.items\" />\n </ng-template>\n </a>\n } @else {\n <a\n si-menu-item\n activeClass=\"active\"\n [attr.data-id]=\"primaryAction.id\"\n [siLink]=\"primaryAction\"\n [icon]=\"primaryAction.icon\"\n [attr.aria-label]=\"primaryAction.title | translate\"\n [badge]=\"primaryAction.badge\"\n [actionParam]=\"actionParam()\"\n [iconBadgeDot]=\"primaryAction.badgeDot\"\n [disabled]=\"primaryAction.disabled || disabled()\"\n >\n @if (!primaryAction.iconOnly && primaryAction.title) {\n <span>{{ primaryAction.title | translate }}</span>\n }\n </a>\n }\n }\n }\n @if (secondaryActions()?.length) {\n <button\n type=\"button\"\n si-content-action-bar-toggle\n cdkMenuItem\n [icon]=\"icons.elementOptionsVertical\"\n [attr.aria-label]=\"toggleItemLabel() | translate\"\n [cdkMenuTriggerFor]=\"secondaryActionsMenu\"\n [disabled]=\"disabled()\"\n ></button>\n }\n @if (viewType() === 'collapsible') {\n <button\n type=\"button\"\n si-content-action-bar-toggle\n cdkMenuItem\n [icon]=\"icons.elementCancel\"\n [attr.aria-label]=\"toggleItemLabel() | translate\"\n [disabled]=\"disabled()\"\n (cdkMenuItemTriggered)=\"collapse()\"\n >\n </button>\n }\n </si-menu-bar>\n <button\n si-content-action-bar-toggle\n siAutoCollapsableListOverflowItem\n type=\"button\"\n [icon]=\"icons.elementOptionsVertical\"\n [cdkMenuTriggerFor]=\"mobile\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"toggleItemLabel() | translate\"\n >\n </button>\n </div>\n}\n\n@if (viewType() === 'mobile' || !primaryActions()?.length) {\n <button\n si-content-action-bar-toggle\n type=\"button\"\n [icon]=\"icons.elementOptionsVertical\"\n [cdkMenuTriggerFor]=\"mobile\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"toggleItemLabel() | translate\"\n >\n </button>\n}\n\n<ng-template #secondaryActionsMenu>\n <si-menu-factory [items]=\"secondaryActionsInternal()\" [actionParam]=\"actionParam()\" />\n</ng-template>\n\n<ng-template #mobile>\n <si-menu-factory [items]=\"mobileActions()\" [actionParam]=\"actionParam()\" />\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiContentActionBarComponent } from './si-content-action-bar.component';\n\n@NgModule({\n imports: [SiContentActionBarComponent],\n exports: [SiContentActionBarComponent]\n})\nexport class SiContentActionBarModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-content-action-bar.component';\nexport * from './si-content-action-bar.module';\nexport * from './si-content-action-bar.model';\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-content-action-bar.mjs","sources":["../../../../projects/element-ng/content-action-bar/si-content-action-bar-toggle.component.ts","../../../../projects/element-ng/content-action-bar/si-content-action-bar-toggle.component.html","../../../../projects/element-ng/content-action-bar/si-content-action-bar.component.ts","../../../../projects/element-ng/content-action-bar/si-content-action-bar.component.html","../../../../projects/element-ng/content-action-bar/si-content-action-bar.module.ts","../../../../projects/element-ng/content-action-bar/index.ts","../../../../projects/element-ng/content-action-bar/siemens-element-ng-content-action-bar.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { SiIconComponent } from '@siemens/element-ng/icon';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[si-content-action-bar-toggle]',\n imports: [SiIconComponent],\n templateUrl: './si-content-action-bar-toggle.component.html',\n styleUrl: '../menu/si-menu-item.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dropdown-item flex-grow-0 focus-inside' }\n})\nexport class SiContentActionBarToggleComponent {\n readonly icon = input.required<string>();\n}\n","<si-icon class=\"icon\" [icon]=\"icon()\" />\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { CdkMenuBar, CdkMenuModule } from '@angular/cdk/menu';\nimport {\n AfterViewInit,\n booleanAttribute,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n linkedSignal,\n viewChild\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { elementCancel, elementOptionsVertical } from '@siemens/element-icons';\nimport { SiAutoCollapsableListModule } from '@siemens/element-ng/auto-collapsable-list';\nimport { MenuItem as MenuItemLegacy } from '@siemens/element-ng/common';\nimport { addIcons } from '@siemens/element-ng/icon';\nimport { SiLinkModule } from '@siemens/element-ng/link';\nimport {\n MenuItem,\n MenuItemAction,\n MenuItemCheckbox,\n MenuItemRadio,\n SiMenuActionService,\n SiMenuModule\n} from '@siemens/element-ng/menu';\nimport { SiTooltipDirective } from '@siemens/element-ng/tooltip';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\n\nimport { SiContentActionBarToggleComponent } from './si-content-action-bar-toggle.component';\nimport { ContentActionBarMainItem, ViewType } from './si-content-action-bar.model';\n\n@Component({\n selector: 'si-content-action-bar',\n imports: [\n SiMenuModule,\n CdkMenuModule,\n SiAutoCollapsableListModule,\n SiTranslatePipe,\n SiLinkModule,\n SiContentActionBarToggleComponent,\n SiTooltipDirective,\n RouterLink\n ],\n templateUrl: './si-content-action-bar.component.html',\n styleUrl: './si-content-action-bar.component.scss',\n host: {\n '[class]': 'viewType()'\n }\n})\nexport class SiContentActionBarComponent implements AfterViewInit {\n /**\n * List of primary actions. Supports up to **4** actions and omits additional ones.\n */\n readonly primaryActions = input<readonly (MenuItemLegacy | ContentActionBarMainItem)[]>();\n /**\n * List of secondary actions.\n */\n readonly secondaryActions = input<readonly (MenuItemLegacy | MenuItem)[]>();\n /**\n * A param that will be passed to the `action` in the primary/secondary actions.\n * This allows to re-use the same primary/secondary action arrays across rows\n * in a table.\n */\n readonly actionParam = input<any>();\n /**\n * Selection of view type as 'collapsible', 'expanded' or 'mobile'.\n *\n * @defaultValue 'expanded'\n */\n readonly viewType = input<ViewType>('expanded');\n /**\n * Toggle icon aria-label, required for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CONTENT_ACTION_BAR.TOGGLE:Toggle`)\n * ```\n */\n readonly toggleItemLabel = input(t(() => $localize`:@@SI_CONTENT_ACTION_BAR.TOGGLE:Toggle`));\n /**\n * Option to remove all icons from dropdown menus of the content action bar.\n *\n * Some apps provide only few actions with icons, located in the set of primary actions.\n * The icons are visible in the `collapsible` and `expanded` view type. On reduced space,\n * primary actions are relocated in the same dropdown menu as the secondary actions. The\n * dropdown menu can look unbalanced, if a large number of secondary actions without\n * icons are presented with few actions with icons. This option balances the look and feel\n * by removing all icons from actions in the dropdown menu.\n *\n * @defaultValue false\n */\n readonly preventIconsInDropdownMenus = input(false, { transform: booleanAttribute });\n /**\n * Disables the whole content-action-bar.\n *\n * @defaultValue false\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n private readonly expandElement = viewChild<\n SiContentActionBarToggleComponent,\n ElementRef<HTMLElement>\n >('expandElement', { read: ElementRef });\n private readonly menuBarElement = viewChild<CdkMenuBar, ElementRef<HTMLDivElement>>(CdkMenuBar, {\n read: ElementRef\n });\n\n protected readonly mobileActions = computed(() => {\n const primaryActions = this.primaryActions();\n const secondaryActions = this.secondaryActions();\n const preventIcons = this.preventIconsInDropdownMenus();\n let actions: readonly (MenuItemLegacy | MenuItem)[] = [];\n if (primaryActions?.length && secondaryActions?.length) {\n actions = [...primaryActions, { title: '-' }, ...secondaryActions];\n } else if (primaryActions?.length) {\n actions = primaryActions;\n } else if (secondaryActions?.length) {\n actions = secondaryActions;\n }\n if (preventIcons) {\n actions = actions.map(action => ({\n ...action,\n icon: undefined\n }));\n }\n return actions;\n });\n protected readonly secondaryActionsInternal = computed(() => {\n let secondaryActions = this.secondaryActions();\n if (this.preventIconsInDropdownMenus()) {\n secondaryActions = secondaryActions?.map(action => ({\n ...action,\n icon: undefined\n }));\n }\n return secondaryActions;\n });\n protected readonly icons = addIcons({ elementCancel, elementOptionsVertical });\n protected readonly expanded = linkedSignal(() => this.viewType() === 'expanded');\n protected parentElement?: HTMLElement | null;\n\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private menuActionService = inject(SiMenuActionService, { optional: true });\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n if (this.parentElement !== this.elementRef.nativeElement.parentElement) {\n this.parentElement = this.elementRef.nativeElement.parentElement;\n }\n });\n }\n\n protected expand(): void {\n this.expanded.set(true);\n setTimeout(() => this.menuBarElement()?.nativeElement.focus());\n }\n\n protected collapse(): void {\n this.expanded.set(false);\n setTimeout(() => this.expandElement()?.nativeElement.focus());\n }\n\n protected isNewItemStyle(\n item: MenuItemLegacy | ContentActionBarMainItem\n ): item is ContentActionBarMainItem {\n return 'label' in item;\n }\n\n protected runAction(item: MenuItemAction | MenuItemRadio | MenuItemCheckbox): void {\n if (typeof item.action === 'function') {\n item.action(this.actionParam(), item as any); // typescript cannot level down the item type properly\n }\n\n if (typeof item.action === 'string') {\n this.menuActionService?.actionTriggered(item, this.actionParam());\n }\n }\n}\n","@if (viewType() !== 'mobile' && primaryActions()?.length) {\n <div siAutoCollapsableList class=\"d-flex\" [siAutoCollapsableListContainerElement]=\"parentElement\">\n @if (viewType() === 'collapsible' && !expanded() && collapsibleListItem.canBeVisible()) {\n <button\n #expandElement\n si-content-action-bar-toggle\n type=\"button\"\n [icon]=\"icons.elementOptionsVertical\"\n [attr.aria-label]=\"toggleItemLabel() | translate\"\n (click)=\"expand()\"\n ></button>\n }\n <si-menu-bar\n #collapsibleListItem=\"siAutoCollapsableListItem\"\n siAutoCollapsableListItem\n [forceHide]=\"!expanded()\"\n [disabled]=\"disabled()\"\n >\n <!-- ?? syntax is not working for track -->\n @for (primaryAction of primaryActions(); track primaryAction.id ? primaryAction.id : $index) {\n @if (isNewItemStyle(primaryAction)) {\n @switch (primaryAction.type) {\n @case ('action') {\n <button\n type=\"button\"\n si-menu-item\n [attr.data-id]=\"primaryAction.id\"\n [attr.aria-label]=\"primaryAction.label | translate\"\n [siTooltip]=\"primaryAction.iconOnly ? (primaryAction.label | translate) : ''\"\n [badge]=\"primaryAction.badge\"\n [badgeColor]=\"primaryAction.badgeColor ?? 'secondary'\"\n [disabled]=\"primaryAction.disabled || disabled()\"\n [icon]=\"primaryAction.icon\"\n [iconBadgeDot]=\"primaryAction.iconBadge\"\n (triggered)=\"runAction(primaryAction)\"\n >\n @if (!primaryAction.iconOnly) {\n {{ primaryAction.label | translate }}\n }\n </button>\n }\n @case ('checkbox') {\n <button\n type=\"button\"\n si-menu-item-checkbox\n [attr.data-id]=\"primaryAction.id\"\n [attr.aria-label]=\"primaryAction.label | translate\"\n [siTooltip]=\"primaryAction.iconOnly ? (primaryAction.label | translate) : ''\"\n [checked]=\"primaryAction.checked\"\n [badge]=\"primaryAction.badge\"\n [badgeColor]=\"primaryAction.badgeColor ?? 'secondary'\"\n [class.active]=\"primaryAction.checked\"\n [disabled]=\"primaryAction.disabled || disabled()\"\n [icon]=\"primaryAction.icon\"\n [iconBadgeDot]=\"primaryAction.iconBadge\"\n (triggered)=\"runAction(primaryAction)\"\n >\n @if (!primaryAction.iconOnly) {\n {{ primaryAction.label | translate }}\n }\n </button>\n }\n @case ('group') {\n <button\n type=\"button\"\n si-menu-item\n [attr.data-id]=\"primaryAction.id\"\n [attr.aria-label]=\"primaryAction.label | translate\"\n [siTooltip]=\"primaryAction.iconOnly ? (primaryAction.label | translate) : ''\"\n [badge]=\"primaryAction.badge\"\n [badgeColor]=\"primaryAction.badgeColor ?? 'secondary'\"\n [disabled]=\"primaryAction.disabled || disabled()\"\n [icon]=\"primaryAction.icon\"\n [iconBadgeDot]=\"primaryAction.iconBadge\"\n [cdkMenuTriggerFor]=\"groupSubmenu\"\n >\n @if (!primaryAction.iconOnly) {\n {{ primaryAction.label | translate }}\n }\n </button>\n <!-- Cannot use template context because of https://github.com/angular/components/issues/26256 -->\n <ng-template #groupSubmenu>\n <si-menu-factory [items]=\"primaryAction.children\" />\n </ng-template>\n }\n @case ('router-link') {\n <a\n si-menu-item\n [attr.data-id]=\"primaryAction.id\"\n [attr.aria-label]=\"primaryAction.label | translate\"\n [siTooltip]=\"primaryAction.iconOnly ? (primaryAction.label | translate) : ''\"\n [badge]=\"primaryAction.badge\"\n [badgeColor]=\"primaryAction.badgeColor ?? 'secondary'\"\n [disabled]=\"primaryAction.disabled || disabled()\"\n [icon]=\"primaryAction.icon\"\n [iconBadgeDot]=\"primaryAction.iconBadge\"\n [routerLink]=\"primaryAction.routerLink\"\n [queryParams]=\"primaryAction.extras?.queryParams\"\n [queryParamsHandling]=\"primaryAction.extras?.queryParamsHandling\"\n [fragment]=\"primaryAction.extras?.fragment\"\n [state]=\"primaryAction.extras?.state\"\n [relativeTo]=\"primaryAction.extras?.relativeTo\"\n [preserveFragment]=\"primaryAction.extras?.preserveFragment\"\n [skipLocationChange]=\"primaryAction.extras?.skipLocationChange\"\n [replaceUrl]=\"primaryAction.extras?.replaceUrl\"\n >\n @if (!primaryAction.iconOnly) {\n {{ primaryAction.label | translate }}\n }\n </a>\n }\n @case ('link') {\n <a\n si-menu-item\n [attr.data-id]=\"primaryAction.id\"\n [attr.aria-label]=\"primaryAction.label | translate\"\n [siTooltip]=\"primaryAction.iconOnly ? (primaryAction.label | translate) : ''\"\n [badge]=\"primaryAction.badge\"\n [badgeColor]=\"primaryAction.badgeColor ?? 'secondary'\"\n [disabled]=\"primaryAction.disabled || disabled()\"\n [icon]=\"primaryAction.icon\"\n [iconBadgeDot]=\"primaryAction.iconBadge\"\n [href]=\"primaryAction.href\"\n [target]=\"primaryAction.target\"\n >\n @if (!primaryAction.iconOnly) {\n {{ primaryAction.label | translate }}\n }\n </a>\n }\n }\n } @else {\n @if (primaryAction.items) {\n <a\n si-menu-item\n activeClass=\"active\"\n [attr.data-id]=\"primaryAction.id\"\n [siLink]=\"primaryAction\"\n [icon]=\"primaryAction.icon\"\n [attr.aria-label]=\"primaryAction.title | translate\"\n [badge]=\"primaryAction.badge\"\n [actionParam]=\"actionParam()\"\n [iconBadgeDot]=\"primaryAction.badgeDot\"\n [disabled]=\"primaryAction.disabled || disabled()\"\n [cdkMenuTriggerFor]=\"primaryAction.items ? mainItemSubmenu : null\"\n >\n @if (!primaryAction.iconOnly && primaryAction.title) {\n <span>{{ primaryAction.title | translate }}</span>\n }\n <!-- Cannot use template context because of https://github.com/angular/components/issues/26256 -->\n <ng-template #mainItemSubmenu>\n <si-menu-factory [items]=\"primaryAction.items\" />\n </ng-template>\n </a>\n } @else {\n <a\n si-menu-item\n activeClass=\"active\"\n [attr.data-id]=\"primaryAction.id\"\n [siLink]=\"primaryAction\"\n [icon]=\"primaryAction.icon\"\n [attr.aria-label]=\"primaryAction.title | translate\"\n [badge]=\"primaryAction.badge\"\n [actionParam]=\"actionParam()\"\n [iconBadgeDot]=\"primaryAction.badgeDot\"\n [disabled]=\"primaryAction.disabled || disabled()\"\n >\n @if (!primaryAction.iconOnly && primaryAction.title) {\n <span>{{ primaryAction.title | translate }}</span>\n }\n </a>\n }\n }\n }\n @if (secondaryActions()?.length) {\n <button\n type=\"button\"\n si-content-action-bar-toggle\n cdkMenuItem\n [icon]=\"icons.elementOptionsVertical\"\n [attr.aria-label]=\"toggleItemLabel() | translate\"\n [cdkMenuTriggerFor]=\"secondaryActionsMenu\"\n [disabled]=\"disabled()\"\n ></button>\n }\n @if (viewType() === 'collapsible') {\n <button\n type=\"button\"\n si-content-action-bar-toggle\n cdkMenuItem\n [icon]=\"icons.elementCancel\"\n [attr.aria-label]=\"toggleItemLabel() | translate\"\n [disabled]=\"disabled()\"\n (cdkMenuItemTriggered)=\"collapse()\"\n >\n </button>\n }\n </si-menu-bar>\n <button\n si-content-action-bar-toggle\n siAutoCollapsableListOverflowItem\n type=\"button\"\n [icon]=\"icons.elementOptionsVertical\"\n [cdkMenuTriggerFor]=\"mobile\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"toggleItemLabel() | translate\"\n >\n </button>\n </div>\n}\n\n@if (viewType() === 'mobile' || !primaryActions()?.length) {\n <button\n si-content-action-bar-toggle\n type=\"button\"\n [icon]=\"icons.elementOptionsVertical\"\n [cdkMenuTriggerFor]=\"mobile\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"toggleItemLabel() | translate\"\n >\n </button>\n}\n\n<ng-template #secondaryActionsMenu>\n <si-menu-factory [items]=\"secondaryActionsInternal()\" [actionParam]=\"actionParam()\" />\n</ng-template>\n\n<ng-template #mobile>\n <si-menu-factory [items]=\"mobileActions()\" [actionParam]=\"actionParam()\" />\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiContentActionBarComponent } from './si-content-action-bar.component';\n\n@NgModule({\n imports: [SiContentActionBarComponent],\n exports: [SiContentActionBarComponent]\n})\nexport class SiContentActionBarModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-content-action-bar.component';\nexport * from './si-content-action-bar.module';\nexport * from './si-content-action-bar.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,15 +1,14 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, input, booleanAttribute, output, signal, computed, inject, ElementRef, Component, DestroyRef, viewChild, ChangeDetectorRef, DOCUMENT, NgModule, Directive, model } from '@angular/core';
3
3
  import { elementZoom, elementPinch, elementRight2, elementSortUp, elementSortDown } from '@siemens/element-icons';
4
- import { SiCardComponent } from '@siemens/element-ng/card';
5
- import { SiContentActionBarComponent } from '@siemens/element-ng/content-action-bar';
4
+ import { SiCardComponent, SiCardHeaderComponent } from '@siemens/element-ng/card';
6
5
  import { addIcons, SiIconComponent, SiStatusIconComponent } from '@siemens/element-ng/icon';
7
- import { t, SiTranslatePipe } from '@siemens/element-translate-ng/translate';
8
- import { BehaviorSubject } from 'rxjs';
6
+ import { t, SiTranslatePipe, injectSiTranslateService } from '@siemens/element-translate-ng/translate';
7
+ import { BehaviorSubject, switchMap, of, map } from 'rxjs';
9
8
  import * as i1 from '@angular/cdk/portal';
10
9
  import { CdkPortalOutlet, DomPortal, PortalModule } from '@angular/cdk/portal';
11
10
  import { ViewportScroller } from '@angular/common';
12
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
11
+ import { takeUntilDestroyed, toSignal, toObservable } from '@angular/core/rxjs-interop';
13
12
  import { ScrollbarHelper } from '@siemens/element-ng/common';
14
13
  import { ResizeObserverService, BOOTSTRAP_BREAKPOINTS } from '@siemens/element-ng/resize-observer';
15
14
  import { SiLinkDirective } from '@siemens/element-ng/link';
@@ -227,15 +226,15 @@ class SiDashboardCardComponent extends SiCardComponent {
227
226
  this.expandChange.emit(expand);
228
227
  }
229
228
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiDashboardCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
230
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiDashboardCardComponent, isStandalone: true, selector: "si-dashboard-card", inputs: { restoreText: { classPropertyName: "restoreText", publicName: "restoreText", isSignal: true, isRequired: false, transformFunction: null }, expandText: { classPropertyName: "expandText", publicName: "expandText", isSignal: true, isRequired: false, transformFunction: null }, enableExpandInteraction: { classPropertyName: "enableExpandInteraction", publicName: "enableExpandInteraction", isSignal: true, isRequired: false, transformFunction: null }, showMenubar: { classPropertyName: "showMenubar", publicName: "showMenubar", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expandChange: "expandChange" }, host: { properties: { "class.elevation-2": "isExpanded()", "class.expanded": "isExpanded()", "class.d-none": "hide" } }, usesInheritance: true, ngImport: i0, template: "@if (imgSrc()) {\n <img\n class=\"card-content-split\"\n [class.card-img-top]=\"imgDir() !== 'horizontal'\"\n [class.card-img-start]=\"imgDir() === 'horizontal'\"\n [attr.src]=\"imgSrc()\"\n [attr.alt]=\"imgAlt() | translate\"\n />\n}\n\n<div class=\"content-container\" [class.card-content-split]=\"imgSrc()\">\n @if (heading() || displayContentActionBar()) {\n <div class=\"card-header d-flex justify-content-between\">\n <ng-content #cardHeaderIcon select=\"[headerIcon]\" />\n @if (heading()) {\n <div class=\"text-truncate\">{{ heading() | translate }}</div>\n }\n\n <div class=\"cab d-flex ms-6 my-n4 me-n5\">\n @if (displayContentActionBar()) {\n <si-content-action-bar\n class=\"ms-auto\"\n [primaryActions]=\"primaryActionsComputed()\"\n [secondaryActions]=\"secondaryActions()\"\n [actionParam]=\"actionParam()\"\n [viewType]=\"actionBarViewTypeComputed()\"\n [attr.title]=\"actionBarTitleComputed() | translate\"\n />\n }\n </div>\n </div>\n }\n <ng-content #cardBody select=\"[body]\" />\n <ng-content #cardFooter select=\"[footer]\" />\n</div>\n", styles: [":host.card-horizontal{flex-direction:row}:host{block-size:100%}:host.expanded{position:absolute;inset:0}.card-header{block-size:40px}.text-truncate{flex:0 1 auto}.cab{flex:1 0 0;min-inline-size:40px}.card-img-top{block-size:50%;inline-size:auto;object-fit:var(--si-card-img-object-fit, scale-down);object-position:var(--si-card-img-object-position, center top)}.card-img-start{block-size:auto;inline-size:50%;object-fit:var(--si-card-img-object-fit, scale-down);object-position:var(--si-card-img-object-position, left center)}.card-content-split{flex:0 0 50%}.content-container{overflow:hidden;position:relative;display:flex;flex-direction:column;flex:1 1 auto;min-inline-size:0;word-wrap:break-word;border-radius:inherit}\n"], dependencies: [{ kind: "component", type: SiContentActionBarComponent, selector: "si-content-action-bar", inputs: ["primaryActions", "secondaryActions", "actionParam", "viewType", "toggleItemLabel", "preventIconsInDropdownMenus", "disabled"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
229
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiDashboardCardComponent, isStandalone: true, selector: "si-dashboard-card", inputs: { restoreText: { classPropertyName: "restoreText", publicName: "restoreText", isSignal: true, isRequired: false, transformFunction: null }, expandText: { classPropertyName: "expandText", publicName: "expandText", isSignal: true, isRequired: false, transformFunction: null }, enableExpandInteraction: { classPropertyName: "enableExpandInteraction", publicName: "enableExpandInteraction", isSignal: true, isRequired: false, transformFunction: null }, showMenubar: { classPropertyName: "showMenubar", publicName: "showMenubar", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expandChange: "expandChange" }, host: { properties: { "class.elevation-2": "isExpanded()", "class.expanded": "isExpanded()", "class.d-none": "hide" } }, usesInheritance: true, ngImport: i0, template: "@if (imgSrc()) {\n <img\n class=\"card-content-split\"\n [class.card-img-top]=\"imgDir() !== 'horizontal'\"\n [class.card-img-start]=\"imgDir() === 'horizontal'\"\n [attr.src]=\"imgSrc()\"\n [attr.alt]=\"imgAlt() | translate\"\n />\n}\n\n<div class=\"content-container\" [class.card-content-split]=\"imgSrc()\">\n @if (heading() || displayContentActionBar()) {\n <si-card-header\n [heading]=\"heading()\"\n [subHeading]=\"subHeading()\"\n [primaryActions]=\"primaryActionsComputed()\"\n [secondaryActions]=\"secondaryActions()\"\n [actionParam]=\"actionParam()\"\n [actionBarViewType]=\"actionBarViewTypeComputed()\"\n [actionBarTitle]=\"actionBarTitleComputed()\"\n >\n <ng-content select=\"[headerIcon]\" ngProjectAs=\"[headerIcon]\" />\n </si-card-header>\n }\n <ng-content #cardBody select=\"[body]\" />\n <ng-content #cardFooter select=\"[footer]\" />\n</div>\n", styles: [":host.card-horizontal{flex-direction:row}:host{block-size:100%}:host.expanded{position:absolute;inset:0}.card-img-top{block-size:50%;inline-size:auto;object-fit:var(--si-card-img-object-fit, scale-down);object-position:var(--si-card-img-object-position, center top)}.card-img-start{block-size:auto;inline-size:50%;object-fit:var(--si-card-img-object-fit, scale-down);object-position:var(--si-card-img-object-position, left center)}.card-content-split{flex:0 0 50%}.content-container{overflow:hidden;position:relative;display:flex;flex-direction:column;flex:1 1 auto;min-inline-size:0;word-wrap:break-word;border-radius:inherit}\n"], dependencies: [{ kind: "component", type: SiCardHeaderComponent, selector: "si-card-header", inputs: ["heading", "subHeading", "headingId", "subHeadingId", "primaryActions", "secondaryActions", "actionParam", "actionBarViewType", "actionBarTitle"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
231
230
  }
232
231
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiDashboardCardComponent, decorators: [{
233
232
  type: Component,
234
- args: [{ selector: 'si-dashboard-card', imports: [SiContentActionBarComponent, SiTranslatePipe], host: {
233
+ args: [{ selector: 'si-dashboard-card', imports: [SiCardHeaderComponent, SiTranslatePipe], host: {
235
234
  '[class.elevation-2]': 'isExpanded()',
236
235
  '[class.expanded]': 'isExpanded()',
237
236
  '[class.d-none]': 'hide'
238
- }, template: "@if (imgSrc()) {\n <img\n class=\"card-content-split\"\n [class.card-img-top]=\"imgDir() !== 'horizontal'\"\n [class.card-img-start]=\"imgDir() === 'horizontal'\"\n [attr.src]=\"imgSrc()\"\n [attr.alt]=\"imgAlt() | translate\"\n />\n}\n\n<div class=\"content-container\" [class.card-content-split]=\"imgSrc()\">\n @if (heading() || displayContentActionBar()) {\n <div class=\"card-header d-flex justify-content-between\">\n <ng-content #cardHeaderIcon select=\"[headerIcon]\" />\n @if (heading()) {\n <div class=\"text-truncate\">{{ heading() | translate }}</div>\n }\n\n <div class=\"cab d-flex ms-6 my-n4 me-n5\">\n @if (displayContentActionBar()) {\n <si-content-action-bar\n class=\"ms-auto\"\n [primaryActions]=\"primaryActionsComputed()\"\n [secondaryActions]=\"secondaryActions()\"\n [actionParam]=\"actionParam()\"\n [viewType]=\"actionBarViewTypeComputed()\"\n [attr.title]=\"actionBarTitleComputed() | translate\"\n />\n }\n </div>\n </div>\n }\n <ng-content #cardBody select=\"[body]\" />\n <ng-content #cardFooter select=\"[footer]\" />\n</div>\n", styles: [":host.card-horizontal{flex-direction:row}:host{block-size:100%}:host.expanded{position:absolute;inset:0}.card-header{block-size:40px}.text-truncate{flex:0 1 auto}.cab{flex:1 0 0;min-inline-size:40px}.card-img-top{block-size:50%;inline-size:auto;object-fit:var(--si-card-img-object-fit, scale-down);object-position:var(--si-card-img-object-position, center top)}.card-img-start{block-size:auto;inline-size:50%;object-fit:var(--si-card-img-object-fit, scale-down);object-position:var(--si-card-img-object-position, left center)}.card-content-split{flex:0 0 50%}.content-container{overflow:hidden;position:relative;display:flex;flex-direction:column;flex:1 1 auto;min-inline-size:0;word-wrap:break-word;border-radius:inherit}\n"] }]
237
+ }, template: "@if (imgSrc()) {\n <img\n class=\"card-content-split\"\n [class.card-img-top]=\"imgDir() !== 'horizontal'\"\n [class.card-img-start]=\"imgDir() === 'horizontal'\"\n [attr.src]=\"imgSrc()\"\n [attr.alt]=\"imgAlt() | translate\"\n />\n}\n\n<div class=\"content-container\" [class.card-content-split]=\"imgSrc()\">\n @if (heading() || displayContentActionBar()) {\n <si-card-header\n [heading]=\"heading()\"\n [subHeading]=\"subHeading()\"\n [primaryActions]=\"primaryActionsComputed()\"\n [secondaryActions]=\"secondaryActions()\"\n [actionParam]=\"actionParam()\"\n [actionBarViewType]=\"actionBarViewTypeComputed()\"\n [actionBarTitle]=\"actionBarTitleComputed()\"\n >\n <ng-content select=\"[headerIcon]\" ngProjectAs=\"[headerIcon]\" />\n </si-card-header>\n }\n <ng-content #cardBody select=\"[body]\" />\n <ng-content #cardFooter select=\"[footer]\" />\n</div>\n", styles: [":host.card-horizontal{flex-direction:row}:host{block-size:100%}:host.expanded{position:absolute;inset:0}.card-img-top{block-size:50%;inline-size:auto;object-fit:var(--si-card-img-object-fit, scale-down);object-position:var(--si-card-img-object-position, center top)}.card-img-start{block-size:auto;inline-size:50%;object-fit:var(--si-card-img-object-fit, scale-down);object-position:var(--si-card-img-object-position, left center)}.card-content-split{flex:0 0 50%}.content-container{overflow:hidden;position:relative;display:flex;flex-direction:column;flex:1 1 auto;min-inline-size:0;word-wrap:break-word;border-radius:inherit}\n"] }]
239
238
  }], ctorParameters: () => [], propDecorators: { restoreText: [{ type: i0.Input, args: [{ isSignal: true, alias: "restoreText", required: false }] }], expandText: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandText", required: false }] }], enableExpandInteraction: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableExpandInteraction", required: false }] }], showMenubar: [{ type: i0.Input, args: [{ isSignal: true, alias: "showMenubar", required: false }] }], expandChange: [{ type: i0.Output, args: ["expandChange"] }] } });
240
239
 
241
240
  /**
@@ -603,6 +602,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
603
602
  * used for composition within other components.
604
603
  */
605
604
  class SiListWidgetBodyComponent extends SiWidgetBaseDirective {
605
+ translateService = injectSiTranslateService();
606
606
  /** Optional footer link for the list widget */
607
607
  link = input(...(ngDevMode ? [undefined, { debugName: "link" }] : []));
608
608
  /**
@@ -686,9 +686,26 @@ class SiListWidgetBodyComponent extends SiWidgetBaseDirective {
686
686
  numberOfLinks = input(6, ...(ngDevMode ? [{ debugName: "numberOfLinks" }] : []));
687
687
  /** Used to display the defined number of ghost items */
688
688
  ghosts = computed(() => new Array(this.numberOfLinks() ?? 6), ...(ngDevMode ? [{ debugName: "ghosts" }] : []));
689
+ /** Replica of value with pre-translated labels, recomputed when value or language changes. */
690
+ translatedItems = toSignal(toObservable(this.value).pipe(switchMap(items => {
691
+ if (!items) {
692
+ return of(undefined);
693
+ }
694
+ const keys = items.map(item => typeof item.label === 'object' ? (item.label.title ?? '') : item.label);
695
+ return this.translateService.translateAsync(keys).pipe(map(translations => items.map(item => {
696
+ const key = typeof item.label === 'object' ? (item.label.title ?? '') : item.label;
697
+ const translatedLabel = (translations[key] ?? key);
698
+ return {
699
+ ...item,
700
+ label: typeof item.label === 'object'
701
+ ? { ...item.label, title: translatedLabel }
702
+ : translatedLabel
703
+ };
704
+ })));
705
+ })));
689
706
  /** Holds the list items that are displayed. May be filtered and sorted. */
690
707
  filteredListWidgetItems = computed(() => {
691
- const value = this.value();
708
+ const value = this.translatedItems();
692
709
  const sort = this.sort();
693
710
  const searchText = this.searchText();
694
711
  let filteredListWidgetItems;
@@ -706,7 +723,7 @@ class SiListWidgetBodyComponent extends SiWidgetBaseDirective {
706
723
  }, ...(ngDevMode ? [{ debugName: "filteredListWidgetItems" }] : []));
707
724
  searchText = model('', ...(ngDevMode ? [{ debugName: "searchText" }] : []));
708
725
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiListWidgetBodyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
709
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiListWidgetBodyComponent, isStandalone: true, selector: "si-list-widget-body", inputs: { link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholderLabel: { classPropertyName: "searchPlaceholderLabel", publicName: "searchPlaceholderLabel", isSignal: true, isRequired: false, transformFunction: null }, sort: { classPropertyName: "sort", publicName: "sort", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null }, compareFn: { classPropertyName: "compareFn", publicName: "compareFn", isSignal: true, isRequired: false, transformFunction: null }, filterFn: { classPropertyName: "filterFn", publicName: "filterFn", isSignal: true, isRequired: false, transformFunction: null }, numberOfLinks: { classPropertyName: "numberOfLinks", publicName: "numberOfLinks", isSignal: true, isRequired: false, transformFunction: null }, searchText: { classPropertyName: "searchText", publicName: "searchText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchText: "searchTextChange" }, usesInheritance: true, ngImport: i0, template: "@if (search()) {\n <si-search-bar\n class=\"px-6 py-4\"\n showIcon\n colorVariant=\"base-0\"\n [debounceTime]=\"400\"\n [placeholder]=\"searchPlaceholderLabel() | translate\"\n [(ngModel)]=\"searchText\"\n />\n}\n@let filteredListWidgetItemsList = filteredListWidgetItems();\n@if (!showLoadingIndicator() && filteredListWidgetItemsList) {\n @if (filteredListWidgetItemsList.length > 0) {\n <div class=\"list-group list-group-lg\" role=\"list\">\n @for (item of filteredListWidgetItemsList; track $index) {\n <si-list-widget-item [value]=\"item\" />\n }\n </div>\n } @else {\n <ng-content select=\"[empty-state]\" />\n }\n} @else {\n <div class=\"list-group list-group-lg\" role=\"list\">\n @for (some of ghosts(); track $index) {\n <si-list-widget-item [value]=\"undefined\" />\n }\n </div>\n}\n", styles: [":host{background-color:var(--element-base-1);border-radius:var(--element-radius-3);display:flex;flex-direction:column;flex:1 1 auto;overflow:hidden}:host:has(si-search-bar){padding-block-start:8px}:host-context(si-card,si-dashboard-card){padding-block-start:unset!important}.list-group{border-radius:inherit;overflow-y:auto;overflow-x:hidden}\n"], dependencies: [{ kind: "component", type: SiListWidgetItemComponent, selector: "si-list-widget-item" }, { kind: "component", type: SiSearchBarComponent, selector: "si-search-bar", inputs: ["debounceTime", "prohibitedCharacters", "placeholder", "showIcon", "tabbable", "value", "readonly", "colorVariant", "disabled", "clearButtonAriaLabel"], outputs: ["searchChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
726
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiListWidgetBodyComponent, isStandalone: true, selector: "si-list-widget-body", inputs: { link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholderLabel: { classPropertyName: "searchPlaceholderLabel", publicName: "searchPlaceholderLabel", isSignal: true, isRequired: false, transformFunction: null }, sort: { classPropertyName: "sort", publicName: "sort", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null }, compareFn: { classPropertyName: "compareFn", publicName: "compareFn", isSignal: true, isRequired: false, transformFunction: null }, filterFn: { classPropertyName: "filterFn", publicName: "filterFn", isSignal: true, isRequired: false, transformFunction: null }, numberOfLinks: { classPropertyName: "numberOfLinks", publicName: "numberOfLinks", isSignal: true, isRequired: false, transformFunction: null }, searchText: { classPropertyName: "searchText", publicName: "searchText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchText: "searchTextChange" }, usesInheritance: true, ngImport: i0, template: "@if (search()) {\n <si-search-bar\n class=\"px-6 py-4\"\n showIcon\n colorVariant=\"base-0\"\n [debounceTime]=\"400\"\n [placeholder]=\"searchPlaceholderLabel() | translate\"\n [(ngModel)]=\"searchText\"\n />\n}\n@let filteredListWidgetItemsList = filteredListWidgetItems();\n@if (!showLoadingIndicator() && filteredListWidgetItemsList) {\n @if (filteredListWidgetItemsList.length > 0) {\n <div class=\"list-group list-group-lg\" role=\"list\">\n @for (item of filteredListWidgetItemsList; track $index) {\n <si-list-widget-item [value]=\"item\" />\n }\n </div>\n } @else {\n <ng-content select=\"[empty-state]\" />\n }\n} @else {\n <div class=\"list-group list-group-lg\" role=\"list\">\n @for (some of ghosts(); track $index) {\n <si-list-widget-item [value]=\"undefined\" />\n }\n </div>\n}\n", styles: [":host{background-color:var(--element-base-1);border-radius:var(--element-radius-3);display:flex;flex-direction:column;flex:1 1 auto;overflow:hidden}:host:has(si-search-bar){padding-block-start:8px}:host-context(si-card,si-dashboard-card){padding-block-start:unset!important}.list-group{border-radius:inherit;overflow-y:auto;overflow-x:hidden}\n"], dependencies: [{ kind: "component", type: SiListWidgetItemComponent, selector: "si-list-widget-item" }, { kind: "component", type: SiSearchBarComponent, selector: "si-search-bar", inputs: ["debounceTime", "prohibitedCharacters", "placeholder", "showIcon", "tabbable", "value", "readonly", "colorVariant", "disabled", "maxlength", "clearButtonAriaLabel"], outputs: ["searchChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
710
727
  }
711
728
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiListWidgetBodyComponent, decorators: [{
712
729
  type: Component,
@@ -890,13 +907,13 @@ class SiTimelineWidgetItemComponent extends SiWidgetBaseDirective {
890
907
  ariaLabelDropdown = t(() => $localize `:@@SI_DASHBOARD.EXPAND_WIDGET_ACTIONS:Expand actions`);
891
908
  activatedRoute = inject(ActivatedRoute, { optional: true });
892
909
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiTimelineWidgetItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
893
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiTimelineWidgetItemComponent, isStandalone: true, selector: "si-timeline-widget-item", inputs: { showDescription: { classPropertyName: "showDescription", publicName: "showDescription", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "listitem" } }, usesInheritance: true, ngImport: i0, template: "@let valueObject = value();\n@if (!showLoadingIndicator() && valueObject) {\n <div class=\"d-flex flex-row gap-4\" [class.pe-4]=\"!valueObject.action\">\n <div class=\"d-flex flex-column align-items-center gap-1 pt-4\">\n <span class=\"icon icon-stack\">\n <si-icon [class]=\"valueObject.iconColor\" [icon]=\"valueObject.icon\" />\n @if (valueObject.stackedIcon) {\n <si-icon [class]=\"valueObject.stackedIconColor\" [icon]=\"valueObject.stackedIcon\" />\n }\n </span>\n @if (valueObject.iconAlt) {\n <span class=\"visually-hidden\">{{ valueObject.iconAlt | translate }}</span>\n }\n <div class=\"si-timeline-widget-item-lower-line\"></div>\n </div>\n <div class=\"d-flex flex-column gap-1 py-4 flex-grow-1\">\n <span class=\"si-caption text-secondary\">{{ valueObject.timeStamp | translate }}</span>\n <span class=\"si-h5\">{{ valueObject.title | translate }}</span>\n @if (valueObject.description) {\n <span class=\"si-body text-secondary\">{{ valueObject.description | translate }}</span>\n }\n </div>\n @if (valueObject.action) {\n @let action = valueObject.action;\n <div class=\"si-timeline-widget-item-action align-self-center\">\n @if (action.type === 'action') {\n <button\n type=\"button\"\n class=\"d-flex btn\"\n [class]=\"action.customClass ?? 'btn-tertiary'\"\n [class.btn-icon]=\"action.iconOnly\"\n (click)=\"action.action(action)\"\n >\n @if (action.icon) {\n <si-icon class=\"icon\" [icon]=\"action.icon\" />\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span>\n </button>\n } @else if (action.type === 'router-link') {\n <a\n class=\"d-flex btn btn-ghost\"\n [routerLink]=\"action.routerLink\"\n [queryParams]=\"action.extras?.queryParams\"\n [queryParamsHandling]=\"action.extras?.queryParamsHandling\"\n [fragment]=\"action.extras?.fragment\"\n [state]=\"action.extras?.state\"\n [relativeTo]=\"action.extras?.relativeTo ?? activatedRoute\"\n [preserveFragment]=\"action.extras?.preserveFragment\"\n [skipLocationChange]=\"action.extras?.skipLocationChange\"\n [replaceUrl]=\"action.extras?.replaceUrl\"\n [attr.aria-label]=\"action.label | translate\"\n [class.btn-icon]=\"action.iconOnly\"\n >\n @if (action.icon) {\n <si-icon class=\"icon\" [icon]=\"action.icon\" />\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span></a\n >\n } @else if (action.type === 'link') {\n <a\n class=\"d-flex btn btn-ghost\"\n [href]=\"action.href\"\n [target]=\"action.target\"\n [attr.aria-label]=\"action.label | translate\"\n [class.btn-icon]=\"action.iconOnly\"\n >\n @if (action.icon) {\n <si-icon class=\"icon\" [icon]=\"action.icon\" />\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span></a\n >\n } @else if (action.type === 'menu') {\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary element-options-vertical\"\n [attr.aria-label]=\"ariaLabelDropdown | translate\"\n [cdkMenuTriggerFor]=\"actionMenu\"\n ></button>\n\n <ng-template #actionMenu>\n <si-menu-factory [items]=\"action.menuItems\" />\n </ng-template>\n }\n </div>\n }\n </div>\n} @else {\n <div class=\"d-flex flex-row\">\n <div class=\"d-flex flex-column align-items-center gap-1 pt-4 pe-4\">\n <div class=\"p-5 si-skeleton\"></div>\n </div>\n <div class=\"d-flex flex-column flex-grow-1 gap-1 py-4\">\n <span class=\"si-link-widget-skeleton\"></span>\n <span class=\"si-link-widget-skeleton\" [class.w-50]=\"!showDescription()\"></span>\n @if (showDescription()) {\n <span class=\"si-link-widget-skeleton w-50\"></span>\n }\n </div>\n </div>\n}\n", dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: SiMenuModule }, { kind: "component", type: i1$2.SiMenuFactoryComponent, selector: "si-menu-factory", inputs: ["items", "actionParam"] }, { kind: "directive", type: CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData", "cdkMenuTriggerTransformOriginOn"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
910
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiTimelineWidgetItemComponent, isStandalone: true, selector: "si-timeline-widget-item", inputs: { showDescription: { classPropertyName: "showDescription", publicName: "showDescription", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "listitem" } }, usesInheritance: true, ngImport: i0, template: "@let valueObject = value();\n@if (!showLoadingIndicator() && valueObject) {\n <div class=\"d-flex flex-row gap-4\" [class.pe-4]=\"!valueObject.action\">\n <div class=\"d-flex flex-column align-items-center gap-1 pt-4\">\n <span class=\"icon icon-stack\">\n <si-icon [class]=\"valueObject.iconColor\" [icon]=\"valueObject.icon\" />\n @if (valueObject.stackedIcon) {\n <si-icon [class]=\"valueObject.stackedIconColor\" [icon]=\"valueObject.stackedIcon\" />\n }\n </span>\n @if (valueObject.iconAlt) {\n <span class=\"visually-hidden\">{{ valueObject.iconAlt | translate }}</span>\n }\n <div class=\"si-timeline-widget-item-lower-line\"></div>\n </div>\n <div class=\"d-flex flex-column gap-1 py-4 flex-grow-1\">\n <span class=\"si-caption text-secondary\">{{ valueObject.timeStamp | translate }}</span>\n <span class=\"si-h5\">{{ valueObject.title | translate }}</span>\n @if (valueObject.description) {\n <span class=\"si-body text-secondary\">{{ valueObject.description | translate }}</span>\n }\n </div>\n @if (valueObject.action) {\n @let action = valueObject.action;\n <div class=\"si-timeline-widget-item-action align-self-center\">\n @if (action.type === 'action') {\n <button\n type=\"button\"\n class=\"d-flex btn\"\n [class]=\"action.customClass ?? 'btn-tertiary'\"\n [class.btn-icon]=\"action.iconOnly\"\n (click)=\"action.action(action)\"\n >\n @if (action.icon) {\n <si-icon class=\"icon\" [icon]=\"action.icon\" />\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span>\n </button>\n } @else if (action.type === 'router-link') {\n <a\n class=\"d-flex btn btn-tertiary-ghost\"\n [routerLink]=\"action.routerLink\"\n [queryParams]=\"action.extras?.queryParams\"\n [queryParamsHandling]=\"action.extras?.queryParamsHandling\"\n [fragment]=\"action.extras?.fragment\"\n [state]=\"action.extras?.state\"\n [relativeTo]=\"action.extras?.relativeTo ?? activatedRoute\"\n [preserveFragment]=\"action.extras?.preserveFragment\"\n [skipLocationChange]=\"action.extras?.skipLocationChange\"\n [replaceUrl]=\"action.extras?.replaceUrl\"\n [attr.aria-label]=\"action.label | translate\"\n [class.btn-icon]=\"action.iconOnly\"\n >\n @if (action.icon) {\n <si-icon class=\"icon\" [icon]=\"action.icon\" />\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span></a\n >\n } @else if (action.type === 'link') {\n <a\n class=\"d-flex btn btn-tertiary-ghost\"\n [href]=\"action.href\"\n [target]=\"action.target\"\n [attr.aria-label]=\"action.label | translate\"\n [class.btn-icon]=\"action.iconOnly\"\n >\n @if (action.icon) {\n <si-icon class=\"icon\" [icon]=\"action.icon\" />\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span></a\n >\n } @else if (action.type === 'menu') {\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary element-options-vertical\"\n [attr.aria-label]=\"ariaLabelDropdown | translate\"\n [cdkMenuTriggerFor]=\"actionMenu\"\n ></button>\n\n <ng-template #actionMenu>\n <si-menu-factory [items]=\"action.menuItems\" />\n </ng-template>\n }\n </div>\n }\n </div>\n} @else {\n <div class=\"d-flex flex-row\">\n <div class=\"d-flex flex-column align-items-center gap-1 pt-4 pe-4\">\n <div class=\"p-5 si-skeleton\"></div>\n </div>\n <div class=\"d-flex flex-column flex-grow-1 gap-1 py-4\">\n <span class=\"si-link-widget-skeleton\"></span>\n <span class=\"si-link-widget-skeleton\" [class.w-50]=\"!showDescription()\"></span>\n @if (showDescription()) {\n <span class=\"si-link-widget-skeleton w-50\"></span>\n }\n </div>\n </div>\n}\n", styles: [":host(:last-child) .si-timeline-widget-item-lower-line{display:none}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: SiMenuModule }, { kind: "component", type: i1$2.SiMenuFactoryComponent, selector: "si-menu-factory", inputs: ["items", "actionParam"] }, { kind: "directive", type: CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData", "cdkMenuTriggerTransformOriginOn"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
894
911
  }
895
912
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiTimelineWidgetItemComponent, decorators: [{
896
913
  type: Component,
897
914
  args: [{ selector: 'si-timeline-widget-item', imports: [SiIconComponent, SiTranslatePipe, A11yModule, RouterLink, SiMenuModule, CdkMenuTrigger], host: {
898
915
  role: 'listitem'
899
- }, template: "@let valueObject = value();\n@if (!showLoadingIndicator() && valueObject) {\n <div class=\"d-flex flex-row gap-4\" [class.pe-4]=\"!valueObject.action\">\n <div class=\"d-flex flex-column align-items-center gap-1 pt-4\">\n <span class=\"icon icon-stack\">\n <si-icon [class]=\"valueObject.iconColor\" [icon]=\"valueObject.icon\" />\n @if (valueObject.stackedIcon) {\n <si-icon [class]=\"valueObject.stackedIconColor\" [icon]=\"valueObject.stackedIcon\" />\n }\n </span>\n @if (valueObject.iconAlt) {\n <span class=\"visually-hidden\">{{ valueObject.iconAlt | translate }}</span>\n }\n <div class=\"si-timeline-widget-item-lower-line\"></div>\n </div>\n <div class=\"d-flex flex-column gap-1 py-4 flex-grow-1\">\n <span class=\"si-caption text-secondary\">{{ valueObject.timeStamp | translate }}</span>\n <span class=\"si-h5\">{{ valueObject.title | translate }}</span>\n @if (valueObject.description) {\n <span class=\"si-body text-secondary\">{{ valueObject.description | translate }}</span>\n }\n </div>\n @if (valueObject.action) {\n @let action = valueObject.action;\n <div class=\"si-timeline-widget-item-action align-self-center\">\n @if (action.type === 'action') {\n <button\n type=\"button\"\n class=\"d-flex btn\"\n [class]=\"action.customClass ?? 'btn-tertiary'\"\n [class.btn-icon]=\"action.iconOnly\"\n (click)=\"action.action(action)\"\n >\n @if (action.icon) {\n <si-icon class=\"icon\" [icon]=\"action.icon\" />\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span>\n </button>\n } @else if (action.type === 'router-link') {\n <a\n class=\"d-flex btn btn-ghost\"\n [routerLink]=\"action.routerLink\"\n [queryParams]=\"action.extras?.queryParams\"\n [queryParamsHandling]=\"action.extras?.queryParamsHandling\"\n [fragment]=\"action.extras?.fragment\"\n [state]=\"action.extras?.state\"\n [relativeTo]=\"action.extras?.relativeTo ?? activatedRoute\"\n [preserveFragment]=\"action.extras?.preserveFragment\"\n [skipLocationChange]=\"action.extras?.skipLocationChange\"\n [replaceUrl]=\"action.extras?.replaceUrl\"\n [attr.aria-label]=\"action.label | translate\"\n [class.btn-icon]=\"action.iconOnly\"\n >\n @if (action.icon) {\n <si-icon class=\"icon\" [icon]=\"action.icon\" />\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span></a\n >\n } @else if (action.type === 'link') {\n <a\n class=\"d-flex btn btn-ghost\"\n [href]=\"action.href\"\n [target]=\"action.target\"\n [attr.aria-label]=\"action.label | translate\"\n [class.btn-icon]=\"action.iconOnly\"\n >\n @if (action.icon) {\n <si-icon class=\"icon\" [icon]=\"action.icon\" />\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span></a\n >\n } @else if (action.type === 'menu') {\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary element-options-vertical\"\n [attr.aria-label]=\"ariaLabelDropdown | translate\"\n [cdkMenuTriggerFor]=\"actionMenu\"\n ></button>\n\n <ng-template #actionMenu>\n <si-menu-factory [items]=\"action.menuItems\" />\n </ng-template>\n }\n </div>\n }\n </div>\n} @else {\n <div class=\"d-flex flex-row\">\n <div class=\"d-flex flex-column align-items-center gap-1 pt-4 pe-4\">\n <div class=\"p-5 si-skeleton\"></div>\n </div>\n <div class=\"d-flex flex-column flex-grow-1 gap-1 py-4\">\n <span class=\"si-link-widget-skeleton\"></span>\n <span class=\"si-link-widget-skeleton\" [class.w-50]=\"!showDescription()\"></span>\n @if (showDescription()) {\n <span class=\"si-link-widget-skeleton w-50\"></span>\n }\n </div>\n </div>\n}\n" }]
916
+ }, template: "@let valueObject = value();\n@if (!showLoadingIndicator() && valueObject) {\n <div class=\"d-flex flex-row gap-4\" [class.pe-4]=\"!valueObject.action\">\n <div class=\"d-flex flex-column align-items-center gap-1 pt-4\">\n <span class=\"icon icon-stack\">\n <si-icon [class]=\"valueObject.iconColor\" [icon]=\"valueObject.icon\" />\n @if (valueObject.stackedIcon) {\n <si-icon [class]=\"valueObject.stackedIconColor\" [icon]=\"valueObject.stackedIcon\" />\n }\n </span>\n @if (valueObject.iconAlt) {\n <span class=\"visually-hidden\">{{ valueObject.iconAlt | translate }}</span>\n }\n <div class=\"si-timeline-widget-item-lower-line\"></div>\n </div>\n <div class=\"d-flex flex-column gap-1 py-4 flex-grow-1\">\n <span class=\"si-caption text-secondary\">{{ valueObject.timeStamp | translate }}</span>\n <span class=\"si-h5\">{{ valueObject.title | translate }}</span>\n @if (valueObject.description) {\n <span class=\"si-body text-secondary\">{{ valueObject.description | translate }}</span>\n }\n </div>\n @if (valueObject.action) {\n @let action = valueObject.action;\n <div class=\"si-timeline-widget-item-action align-self-center\">\n @if (action.type === 'action') {\n <button\n type=\"button\"\n class=\"d-flex btn\"\n [class]=\"action.customClass ?? 'btn-tertiary'\"\n [class.btn-icon]=\"action.iconOnly\"\n (click)=\"action.action(action)\"\n >\n @if (action.icon) {\n <si-icon class=\"icon\" [icon]=\"action.icon\" />\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span>\n </button>\n } @else if (action.type === 'router-link') {\n <a\n class=\"d-flex btn btn-tertiary-ghost\"\n [routerLink]=\"action.routerLink\"\n [queryParams]=\"action.extras?.queryParams\"\n [queryParamsHandling]=\"action.extras?.queryParamsHandling\"\n [fragment]=\"action.extras?.fragment\"\n [state]=\"action.extras?.state\"\n [relativeTo]=\"action.extras?.relativeTo ?? activatedRoute\"\n [preserveFragment]=\"action.extras?.preserveFragment\"\n [skipLocationChange]=\"action.extras?.skipLocationChange\"\n [replaceUrl]=\"action.extras?.replaceUrl\"\n [attr.aria-label]=\"action.label | translate\"\n [class.btn-icon]=\"action.iconOnly\"\n >\n @if (action.icon) {\n <si-icon class=\"icon\" [icon]=\"action.icon\" />\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span></a\n >\n } @else if (action.type === 'link') {\n <a\n class=\"d-flex btn btn-tertiary-ghost\"\n [href]=\"action.href\"\n [target]=\"action.target\"\n [attr.aria-label]=\"action.label | translate\"\n [class.btn-icon]=\"action.iconOnly\"\n >\n @if (action.icon) {\n <si-icon class=\"icon\" [icon]=\"action.icon\" />\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span></a\n >\n } @else if (action.type === 'menu') {\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary element-options-vertical\"\n [attr.aria-label]=\"ariaLabelDropdown | translate\"\n [cdkMenuTriggerFor]=\"actionMenu\"\n ></button>\n\n <ng-template #actionMenu>\n <si-menu-factory [items]=\"action.menuItems\" />\n </ng-template>\n }\n </div>\n }\n </div>\n} @else {\n <div class=\"d-flex flex-row\">\n <div class=\"d-flex flex-column align-items-center gap-1 pt-4 pe-4\">\n <div class=\"p-5 si-skeleton\"></div>\n </div>\n <div class=\"d-flex flex-column flex-grow-1 gap-1 py-4\">\n <span class=\"si-link-widget-skeleton\"></span>\n <span class=\"si-link-widget-skeleton\" [class.w-50]=\"!showDescription()\"></span>\n @if (showDescription()) {\n <span class=\"si-link-widget-skeleton w-50\"></span>\n }\n </div>\n </div>\n}\n", styles: [":host(:last-child) .si-timeline-widget-item-lower-line{display:none}\n"] }]
900
917
  }], propDecorators: { showDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "showDescription", required: false }] }] } });
901
918
 
902
919
  /**
@@ -921,11 +938,11 @@ class SiTimelineWidgetBodyComponent extends SiWidgetBaseDirective {
921
938
  return new Array(this.numberOfItems() ?? 4);
922
939
  }, ...(ngDevMode ? [{ debugName: "ghosts" }] : []));
923
940
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiTimelineWidgetBodyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
924
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiTimelineWidgetBodyComponent, isStandalone: true, selector: "si-timeline-widget-body", inputs: { numberOfItems: { classPropertyName: "numberOfItems", publicName: "numberOfItems", isSignal: true, isRequired: false, transformFunction: null }, showDescription: { classPropertyName: "showDescription", publicName: "showDescription", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "@let valueObject = value();\n<div\n class=\"focus-inside\"\n tabindex=\"0\"\n [attr.role]=\"\n (!showLoadingIndicator() && valueObject && valueObject.length > 0) || showLoadingIndicator()\n ? 'list'\n : null\n \"\n>\n @if (!showLoadingIndicator() && valueObject) {\n @if (valueObject && valueObject.length > 0) {\n @for (item of valueObject; track $index) {\n <si-timeline-widget-item [value]=\"item\" />\n }\n } @else {\n <ng-content select=\"[empty-state]\" />\n }\n } @else {\n @for (some of ghosts(); track $index) {\n <si-timeline-widget-item [value]=\"undefined\" [showDescription]=\"showDescription()\" />\n }\n }\n</div>\n", styles: [":host{background-color:var(--element-base-1);flex:auto;overflow:hidden}:host si-timeline-widget-item:last-child ::ng-deep .si-timeline-widget-item-lower-line{display:none}div{block-size:100%;padding-inline:16px 8px;overflow-y:auto;overflow-x:hidden}\n"], dependencies: [{ kind: "component", type: SiTimelineWidgetItemComponent, selector: "si-timeline-widget-item", inputs: ["showDescription"] }] });
941
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiTimelineWidgetBodyComponent, isStandalone: true, selector: "si-timeline-widget-body", inputs: { numberOfItems: { classPropertyName: "numberOfItems", publicName: "numberOfItems", isSignal: true, isRequired: false, transformFunction: null }, showDescription: { classPropertyName: "showDescription", publicName: "showDescription", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "@let valueObject = value();\n<div\n class=\"focus-inside\"\n tabindex=\"0\"\n [attr.role]=\"\n (!showLoadingIndicator() && valueObject && valueObject.length > 0) || showLoadingIndicator()\n ? 'list'\n : null\n \"\n>\n @if (!showLoadingIndicator() && valueObject) {\n @if (valueObject && valueObject.length > 0) {\n @for (item of valueObject; track $index) {\n <si-timeline-widget-item [value]=\"item\" />\n }\n } @else {\n <ng-content select=\"[empty-state]\" />\n }\n } @else {\n @for (some of ghosts(); track $index) {\n <si-timeline-widget-item [value]=\"undefined\" [showDescription]=\"showDescription()\" />\n }\n }\n</div>\n", styles: [":host{background-color:var(--element-base-1);flex:auto;overflow:hidden}div{block-size:100%;padding-inline:16px 8px;overflow-y:auto;overflow-x:hidden}\n"], dependencies: [{ kind: "component", type: SiTimelineWidgetItemComponent, selector: "si-timeline-widget-item", inputs: ["showDescription"] }] });
925
942
  }
926
943
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiTimelineWidgetBodyComponent, decorators: [{
927
944
  type: Component,
928
- args: [{ selector: 'si-timeline-widget-body', imports: [SiTimelineWidgetItemComponent], template: "@let valueObject = value();\n<div\n class=\"focus-inside\"\n tabindex=\"0\"\n [attr.role]=\"\n (!showLoadingIndicator() && valueObject && valueObject.length > 0) || showLoadingIndicator()\n ? 'list'\n : null\n \"\n>\n @if (!showLoadingIndicator() && valueObject) {\n @if (valueObject && valueObject.length > 0) {\n @for (item of valueObject; track $index) {\n <si-timeline-widget-item [value]=\"item\" />\n }\n } @else {\n <ng-content select=\"[empty-state]\" />\n }\n } @else {\n @for (some of ghosts(); track $index) {\n <si-timeline-widget-item [value]=\"undefined\" [showDescription]=\"showDescription()\" />\n }\n }\n</div>\n", styles: [":host{background-color:var(--element-base-1);flex:auto;overflow:hidden}:host si-timeline-widget-item:last-child ::ng-deep .si-timeline-widget-item-lower-line{display:none}div{block-size:100%;padding-inline:16px 8px;overflow-y:auto;overflow-x:hidden}\n"] }]
945
+ args: [{ selector: 'si-timeline-widget-body', imports: [SiTimelineWidgetItemComponent], template: "@let valueObject = value();\n<div\n class=\"focus-inside\"\n tabindex=\"0\"\n [attr.role]=\"\n (!showLoadingIndicator() && valueObject && valueObject.length > 0) || showLoadingIndicator()\n ? 'list'\n : null\n \"\n>\n @if (!showLoadingIndicator() && valueObject) {\n @if (valueObject && valueObject.length > 0) {\n @for (item of valueObject; track $index) {\n <si-timeline-widget-item [value]=\"item\" />\n }\n } @else {\n <ng-content select=\"[empty-state]\" />\n }\n } @else {\n @for (some of ghosts(); track $index) {\n <si-timeline-widget-item [value]=\"undefined\" [showDescription]=\"showDescription()\" />\n }\n }\n</div>\n", styles: [":host{background-color:var(--element-base-1);flex:auto;overflow:hidden}div{block-size:100%;padding-inline:16px 8px;overflow-y:auto;overflow-x:hidden}\n"] }]
929
946
  }], propDecorators: { numberOfItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "numberOfItems", required: false }] }], showDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "showDescription", required: false }] }] } });
930
947
 
931
948
  /**