@siemens/element-ng 47.6.0 → 47.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 (436) hide show
  1. package/README.md +5 -2
  2. package/about/index.d.ts +7 -0
  3. package/about/package.json +3 -0
  4. package/about/si-about-data.model.d.ts +49 -0
  5. package/about/si-about.component.d.ts +71 -0
  6. package/about/si-about.module.d.ts +7 -0
  7. package/accordion/index.d.ts +1 -1
  8. package/accordion/si-accordion.component.d.ts +1 -1
  9. package/accordion/si-collapsible-panel.component.d.ts +1 -1
  10. package/action-modal/index.d.ts +1 -1
  11. package/action-modal/si-action-dialog.types.d.ts +1 -1
  12. package/application-header/index.d.ts +1 -1
  13. package/application-header/launchpad/si-launchpad.model.d.ts +1 -1
  14. package/application-header/si-header-action-item-icon-base.directive.d.ts +1 -1
  15. package/application-header/si-header-action-item.base.d.ts +1 -1
  16. package/application-header/si-header-logo.directive.d.ts +1 -1
  17. package/assets/images/landing-page-steel.webp +0 -0
  18. package/auto-collapsable-list/index.d.ts +1 -1
  19. package/auto-collapsable-list/si-auto-collapsable-list-item.directive.d.ts +1 -1
  20. package/auto-collapsable-list/si-auto-collapsable-list-measurable.class.d.ts +1 -1
  21. package/auto-collapsable-list/si-auto-collapsable-list.directive.d.ts +1 -1
  22. package/autocomplete/index.d.ts +1 -1
  23. package/autocomplete/si-autocomplete-option.directive.d.ts +1 -1
  24. package/autocomplete/si-autocomplete.model.d.ts +1 -1
  25. package/avatar/index.d.ts +1 -1
  26. package/avatar/si-avatar-background-color.directive.d.ts +1 -1
  27. package/badge/index.d.ts +1 -1
  28. package/breadcrumb/breadcrumb-item.model.d.ts +1 -1
  29. package/breadcrumb/index.d.ts +1 -1
  30. package/breadcrumb-router/index.d.ts +1 -1
  31. package/breadcrumb-router/si-breadcrumb-router.component.d.ts +1 -1
  32. package/breadcrumb-router/si-breadcrumb-router.model.d.ts +1 -1
  33. package/card/index.d.ts +1 -1
  34. package/circle-status/index.d.ts +1 -1
  35. package/color-picker/index.d.ts +1 -1
  36. package/column-selection-dialog/index.d.ts +1 -1
  37. package/column-selection-dialog/si-column-selection-dialog.types.d.ts +1 -1
  38. package/common/decorators/index.d.ts +1 -1
  39. package/common/decorators/webcomponent.decorator.d.ts +1 -1
  40. package/common/helpers/animation.helpers.d.ts +1 -1
  41. package/common/helpers/global-events.helpers.d.ts +1 -1
  42. package/common/helpers/index.d.ts +1 -1
  43. package/common/helpers/overlay-helper.d.ts +1 -1
  44. package/common/helpers/rtl.d.ts +1 -1
  45. package/common/helpers/track-by.helper.d.ts +1 -1
  46. package/common/index.d.ts +1 -1
  47. package/common/models/color-variant.model.d.ts +1 -1
  48. package/common/models/index.d.ts +1 -1
  49. package/common/models/menu.model.d.ts +1 -1
  50. package/common/models/positions.model.d.ts +1 -1
  51. package/common/models/status-type.model.d.ts +1 -1
  52. package/common/services/index.d.ts +1 -1
  53. package/connection-strength/index.d.ts +1 -1
  54. package/content-action-bar/index.d.ts +1 -1
  55. package/content-action-bar/si-content-action-bar.component.d.ts +1 -1
  56. package/content-action-bar/si-content-action-bar.model.d.ts +3 -3
  57. package/copyright-notice/index.d.ts +1 -1
  58. package/copyright-notice/si-copyright-notice.d.ts +1 -1
  59. package/dashboard/index.d.ts +17 -0
  60. package/dashboard/package.json +3 -0
  61. package/dashboard/si-dashboard-card.component.d.ts +82 -0
  62. package/dashboard/si-dashboard.component.d.ts +75 -0
  63. package/dashboard/si-dashboard.module.d.ts +8 -0
  64. package/dashboard/si-dashboard.service.d.ts +21 -0
  65. package/dashboard/widgets/si-link-widget.component.d.ts +25 -0
  66. package/dashboard/widgets/si-list-widget/si-list-widget-body.component.d.ts +98 -0
  67. package/dashboard/widgets/si-list-widget/si-list-widget-item.component.d.ts +39 -0
  68. package/dashboard/widgets/si-list-widget/si-list-widget.component.d.ts +115 -0
  69. package/dashboard/widgets/si-timeline-widget/si-timeline-widget-body.component.d.ts +21 -0
  70. package/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.d.ts +103 -0
  71. package/dashboard/widgets/si-timeline-widget/si-timeline-widget.component.d.ts +52 -0
  72. package/dashboard/widgets/si-value-widget-body.component.d.ts +33 -0
  73. package/dashboard/widgets/si-value-widget.component.d.ts +115 -0
  74. package/dashboard/widgets/si-widget-base.component.d.ts +48 -0
  75. package/datatable/index.d.ts +1 -1
  76. package/datatable/si-datatable-interaction.directive.d.ts +1 -1
  77. package/date-range-filter/index.d.ts +1 -1
  78. package/date-range-filter/si-date-range-filter.types.d.ts +1 -1
  79. package/date-range-filter/si-relative-date.component.d.ts +1 -1
  80. package/datepicker/components/si-calendar-date-cell.directive.d.ts +1 -1
  81. package/datepicker/components/si-initial-focus.component.d.ts +1 -1
  82. package/datepicker/index.d.ts +1 -1
  83. package/datepicker/si-datepicker.directive.d.ts +1 -1
  84. package/datepicker/si-datepicker.model.d.ts +1 -1
  85. package/datepicker/si-timepicker.component.d.ts +1 -1
  86. package/electron-titlebar/electron.helpers.d.ts +1 -1
  87. package/electron-titlebar/index.d.ts +1 -1
  88. package/empty-state/index.d.ts +1 -1
  89. package/fesm2022/siemens-element-ng-about.mjs +157 -0
  90. package/fesm2022/siemens-element-ng-about.mjs.map +1 -0
  91. package/fesm2022/siemens-element-ng-accordion.mjs +16 -17
  92. package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -1
  93. package/fesm2022/siemens-element-ng-action-modal.mjs +15 -16
  94. package/fesm2022/siemens-element-ng-action-modal.mjs.map +1 -1
  95. package/fesm2022/siemens-element-ng-application-header.mjs +37 -38
  96. package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
  97. package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs +11 -11
  98. package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs.map +1 -1
  99. package/fesm2022/siemens-element-ng-autocomplete.mjs +12 -12
  100. package/fesm2022/siemens-element-ng-autocomplete.mjs.map +1 -1
  101. package/fesm2022/siemens-element-ng-avatar.mjs +7 -7
  102. package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -1
  103. package/fesm2022/siemens-element-ng-badge.mjs +2 -2
  104. package/fesm2022/siemens-element-ng-badge.mjs.map +1 -1
  105. package/fesm2022/siemens-element-ng-breadcrumb-router.mjs +5 -5
  106. package/fesm2022/siemens-element-ng-breadcrumb-router.mjs.map +1 -1
  107. package/fesm2022/siemens-element-ng-breadcrumb.mjs +8 -9
  108. package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
  109. package/fesm2022/siemens-element-ng-card.mjs +7 -8
  110. package/fesm2022/siemens-element-ng-card.mjs.map +1 -1
  111. package/fesm2022/siemens-element-ng-circle-status.mjs +6 -7
  112. package/fesm2022/siemens-element-ng-circle-status.mjs.map +1 -1
  113. package/fesm2022/siemens-element-ng-color-picker.mjs +5 -6
  114. package/fesm2022/siemens-element-ng-color-picker.mjs.map +1 -1
  115. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs +11 -12
  116. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs.map +1 -1
  117. package/fesm2022/siemens-element-ng-common.mjs +14 -14
  118. package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
  119. package/fesm2022/siemens-element-ng-connection-strength.mjs +3 -3
  120. package/fesm2022/siemens-element-ng-connection-strength.mjs.map +1 -1
  121. package/fesm2022/siemens-element-ng-content-action-bar.mjs +10 -11
  122. package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -1
  123. package/fesm2022/siemens-element-ng-copyright-notice.mjs +4 -4
  124. package/fesm2022/siemens-element-ng-copyright-notice.mjs.map +1 -1
  125. package/fesm2022/siemens-element-ng-dashboard.mjs +1170 -0
  126. package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -0
  127. package/fesm2022/siemens-element-ng-datatable.mjs +2 -2
  128. package/fesm2022/siemens-element-ng-datatable.mjs.map +1 -1
  129. package/fesm2022/siemens-element-ng-date-range-filter.mjs +13 -15
  130. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
  131. package/fesm2022/siemens-element-ng-datepicker.mjs +60 -66
  132. package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
  133. package/fesm2022/siemens-element-ng-electron-titlebar.mjs +7 -8
  134. package/fesm2022/siemens-element-ng-electron-titlebar.mjs.map +1 -1
  135. package/fesm2022/siemens-element-ng-empty-state.mjs +6 -7
  136. package/fesm2022/siemens-element-ng-empty-state.mjs.map +1 -1
  137. package/fesm2022/siemens-element-ng-file-uploader.mjs +9 -10
  138. package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
  139. package/fesm2022/siemens-element-ng-filter-bar.mjs +11 -12
  140. package/fesm2022/siemens-element-ng-filter-bar.mjs.map +1 -1
  141. package/fesm2022/siemens-element-ng-filtered-search.mjs +19 -20
  142. package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
  143. package/fesm2022/siemens-element-ng-footer.mjs +7 -8
  144. package/fesm2022/siemens-element-ng-footer.mjs.map +1 -1
  145. package/fesm2022/siemens-element-ng-form.mjs +22 -24
  146. package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
  147. package/fesm2022/siemens-element-ng-formly.mjs +48 -55
  148. package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
  149. package/fesm2022/siemens-element-ng-header-dropdown.mjs +14 -15
  150. package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
  151. package/fesm2022/siemens-element-ng-icon-status.mjs +3 -3
  152. package/fesm2022/siemens-element-ng-icon-status.mjs.map +1 -1
  153. package/fesm2022/siemens-element-ng-icon.mjs +22 -19
  154. package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
  155. package/fesm2022/siemens-element-ng-info-page.mjs +5 -6
  156. package/fesm2022/siemens-element-ng-info-page.mjs.map +1 -1
  157. package/fesm2022/siemens-element-ng-inline-notification.mjs +6 -7
  158. package/fesm2022/siemens-element-ng-inline-notification.mjs.map +1 -1
  159. package/fesm2022/siemens-element-ng-ip-input.mjs +8 -8
  160. package/fesm2022/siemens-element-ng-ip-input.mjs.map +1 -1
  161. package/fesm2022/siemens-element-ng-landing-page.mjs +121 -0
  162. package/fesm2022/siemens-element-ng-landing-page.mjs.map +1 -0
  163. package/fesm2022/siemens-element-ng-language-switcher.mjs +9 -10
  164. package/fesm2022/siemens-element-ng-language-switcher.mjs.map +1 -1
  165. package/fesm2022/siemens-element-ng-link.mjs +8 -8
  166. package/fesm2022/siemens-element-ng-link.mjs.map +1 -1
  167. package/fesm2022/siemens-element-ng-list-details.mjs +24 -25
  168. package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -1
  169. package/fesm2022/siemens-element-ng-loading-spinner.mjs +13 -14
  170. package/fesm2022/siemens-element-ng-loading-spinner.mjs.map +1 -1
  171. package/fesm2022/siemens-element-ng-localization.mjs +6 -6
  172. package/fesm2022/siemens-element-ng-localization.mjs.map +1 -1
  173. package/fesm2022/siemens-element-ng-main-detail-container.mjs +6 -7
  174. package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -1
  175. package/fesm2022/siemens-element-ng-menu.mjs +26 -26
  176. package/fesm2022/siemens-element-ng-menu.mjs.map +1 -1
  177. package/fesm2022/siemens-element-ng-modal.mjs +4 -4
  178. package/fesm2022/siemens-element-ng-modal.mjs.map +1 -1
  179. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +34 -35
  180. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
  181. package/fesm2022/siemens-element-ng-navbar.mjs +11 -12
  182. package/fesm2022/siemens-element-ng-navbar.mjs.map +1 -1
  183. package/fesm2022/siemens-element-ng-number-input.mjs +7 -8
  184. package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -1
  185. package/fesm2022/siemens-element-ng-pagination.mjs +6 -7
  186. package/fesm2022/siemens-element-ng-pagination.mjs.map +1 -1
  187. package/fesm2022/siemens-element-ng-password-strength.mjs +6 -6
  188. package/fesm2022/siemens-element-ng-password-strength.mjs.map +1 -1
  189. package/fesm2022/siemens-element-ng-password-toggle.mjs +8 -9
  190. package/fesm2022/siemens-element-ng-password-toggle.mjs.map +1 -1
  191. package/fesm2022/siemens-element-ng-phone-number.mjs +17 -18
  192. package/fesm2022/siemens-element-ng-phone-number.mjs.map +1 -1
  193. package/fesm2022/siemens-element-ng-photo-upload.mjs +8 -10
  194. package/fesm2022/siemens-element-ng-photo-upload.mjs.map +1 -1
  195. package/fesm2022/siemens-element-ng-pills-input.mjs +13 -14
  196. package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -1
  197. package/fesm2022/siemens-element-ng-popover-next.mjs +7 -7
  198. package/fesm2022/siemens-element-ng-popover-next.mjs.map +1 -1
  199. package/fesm2022/siemens-element-ng-popover.mjs +3 -3
  200. package/fesm2022/siemens-element-ng-popover.mjs.map +1 -1
  201. package/fesm2022/siemens-element-ng-progressbar.mjs +7 -8
  202. package/fesm2022/siemens-element-ng-progressbar.mjs.map +1 -1
  203. package/fesm2022/siemens-element-ng-resize-observer.mjs +7 -7
  204. package/fesm2022/siemens-element-ng-resize-observer.mjs.map +1 -1
  205. package/fesm2022/siemens-element-ng-result-details-list.mjs +6 -7
  206. package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -1
  207. package/fesm2022/siemens-element-ng-search-bar.mjs +6 -6
  208. package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -1
  209. package/fesm2022/siemens-element-ng-select.mjs +46 -47
  210. package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
  211. package/fesm2022/siemens-element-ng-shadow-root.mjs +2 -2
  212. package/fesm2022/siemens-element-ng-shadow-root.mjs.map +1 -1
  213. package/fesm2022/siemens-element-ng-side-panel.mjs +12 -13
  214. package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
  215. package/fesm2022/siemens-element-ng-skip-links.mjs +7 -8
  216. package/fesm2022/siemens-element-ng-skip-links.mjs.map +1 -1
  217. package/fesm2022/siemens-element-ng-slider.mjs +7 -8
  218. package/fesm2022/siemens-element-ng-slider.mjs.map +1 -1
  219. package/fesm2022/siemens-element-ng-sort-bar.mjs +6 -7
  220. package/fesm2022/siemens-element-ng-sort-bar.mjs.map +1 -1
  221. package/fesm2022/siemens-element-ng-split.mjs +6 -7
  222. package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
  223. package/fesm2022/siemens-element-ng-status-bar.mjs +13 -14
  224. package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
  225. package/fesm2022/siemens-element-ng-status-toggle.mjs +6 -7
  226. package/fesm2022/siemens-element-ng-status-toggle.mjs.map +1 -1
  227. package/fesm2022/siemens-element-ng-summary-chip.mjs +5 -6
  228. package/fesm2022/siemens-element-ng-summary-chip.mjs.map +1 -1
  229. package/fesm2022/siemens-element-ng-summary-widget.mjs +5 -6
  230. package/fesm2022/siemens-element-ng-summary-widget.mjs.map +1 -1
  231. package/fesm2022/siemens-element-ng-system-banner.mjs +5 -6
  232. package/fesm2022/siemens-element-ng-system-banner.mjs.map +1 -1
  233. package/fesm2022/siemens-element-ng-tabs-next.mjs +16 -17
  234. package/fesm2022/siemens-element-ng-tabs-next.mjs.map +1 -1
  235. package/fesm2022/siemens-element-ng-tabs.mjs +9 -16
  236. package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
  237. package/fesm2022/siemens-element-ng-theme.mjs +3 -3
  238. package/fesm2022/siemens-element-ng-theme.mjs.map +1 -1
  239. package/fesm2022/siemens-element-ng-threshold.mjs +11 -12
  240. package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -1
  241. package/fesm2022/siemens-element-ng-toast-notification.mjs +11 -12
  242. package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -1
  243. package/fesm2022/siemens-element-ng-tooltip.mjs +9 -10
  244. package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
  245. package/fesm2022/siemens-element-ng-tour.mjs +7 -8
  246. package/fesm2022/siemens-element-ng-tour.mjs.map +1 -1
  247. package/fesm2022/siemens-element-ng-translate.mjs +1 -1
  248. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  249. package/fesm2022/siemens-element-ng-tree-view.mjs +53 -68
  250. package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
  251. package/fesm2022/siemens-element-ng-typeahead.mjs +15 -16
  252. package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -1
  253. package/fesm2022/siemens-element-ng-unauthorized-page.mjs +6 -7
  254. package/fesm2022/siemens-element-ng-unauthorized-page.mjs.map +1 -1
  255. package/fesm2022/siemens-element-ng-wizard.mjs +9 -10
  256. package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -1
  257. package/fesm2022/siemens-element-ng.mjs +1 -1
  258. package/fesm2022/siemens-element-ng.mjs.map +1 -1
  259. package/file-uploader/index.d.ts +1 -1
  260. package/file-uploader/si-file-uploader.model.d.ts +1 -1
  261. package/filter-bar/filter.d.ts +1 -1
  262. package/filter-bar/index.d.ts +1 -1
  263. package/filtered-search/index.d.ts +1 -1
  264. package/filtered-search/si-filtered-search-value.component.d.ts +1 -1
  265. package/filtered-search/si-filtered-search.component.d.ts +1 -1
  266. package/filtered-search/si-filtered-search.model.d.ts +1 -1
  267. package/filtered-search/values/si-filtered-search-value.base.d.ts +1 -1
  268. package/filtered-search/values/typeahead/si-filtered-search-typeahead.component.d.ts +1 -1
  269. package/footer/index.d.ts +1 -1
  270. package/form/form-fieldset/si-form-fieldset.component.d.ts +1 -1
  271. package/form/index.d.ts +1 -1
  272. package/form/si-form-container/si-form-container.component.d.ts +24 -24
  273. package/form/si-form-item/si-form-field-native.control.d.ts +1 -1
  274. package/form/si-form-item.control.d.ts +1 -1
  275. package/form/si-form-validation-error.model.d.ts +1 -1
  276. package/form/si-form-validation-error.provider.d.ts +1 -1
  277. package/form/si-form-validation-tooltip/si-form-validation-tooltip.component.d.ts +1 -1
  278. package/form/si-form-validation-tooltip/si-form-validation-tooltip.directive.d.ts +1 -1
  279. package/form/si-form.module.d.ts +1 -1
  280. package/formly/fields/datetime/si-formly-datetime.component.d.ts +1 -1
  281. package/formly/fields/textarea/si-formly-textarea.component.d.ts +1 -1
  282. package/formly/fields/time/si-formly-time.component.d.ts +1 -1
  283. package/formly/index.d.ts +1 -1
  284. package/formly/si-formly-translate.extension.d.ts +1 -3
  285. package/formly/si-formly.component.d.ts +1 -1
  286. package/formly/structural/si-formly-accordion/si-formly-accordion.component.d.ts +1 -1
  287. package/formly/structural/si-formly-object-grid/si-formly-object-grid.component.d.ts +1 -1
  288. package/formly/structural/si-formly-object-grid/si-formly-object-grid.model.d.ts +1 -1
  289. package/formly/utils.d.ts +1 -1
  290. package/formly/wrapper/si-formly-form-field-provider.directive.d.ts +1 -1
  291. package/header-dropdown/index.d.ts +1 -1
  292. package/header-dropdown/si-header.model.d.ts +1 -1
  293. package/icon/element-icons.d.ts +5 -1
  294. package/icon/icon-status.d.ts +1 -1
  295. package/icon/index.d.ts +1 -1
  296. package/icon-status/index.d.ts +1 -1
  297. package/info-page/index.d.ts +1 -1
  298. package/inline-notification/index.d.ts +1 -1
  299. package/ip-input/address-utils.d.ts +1 -1
  300. package/ip-input/address-validators.d.ts +1 -1
  301. package/ip-input/index.d.ts +1 -1
  302. package/ip-input/si-ip-input.directive.d.ts +1 -1
  303. package/landing-page/alert-config.model.d.ts +15 -0
  304. package/landing-page/index.d.ts +7 -0
  305. package/landing-page/package.json +3 -0
  306. package/landing-page/si-landing-page.component.d.ts +74 -0
  307. package/landing-page/si-landing-page.module.d.ts +7 -0
  308. package/language-switcher/index.d.ts +1 -1
  309. package/language-switcher/iso-language-value.d.ts +1 -1
  310. package/language-switcher/si-language-switcher.component.d.ts +1 -2
  311. package/link/aria-current.model.d.ts +1 -1
  312. package/link/index.d.ts +1 -1
  313. package/link/link.model.d.ts +1 -1
  314. package/list-details/index.d.ts +1 -1
  315. package/list-details/si-details-pane-header/si-details-pane-header.component.d.ts +1 -1
  316. package/loading-spinner/index.d.ts +1 -1
  317. package/localization/index.d.ts +1 -1
  318. package/localization/si-directionality.d.ts +1 -1
  319. package/localization/si-locale-store.d.ts +1 -1
  320. package/main-detail-container/index.d.ts +1 -1
  321. package/menu/index.d.ts +1 -1
  322. package/menu/si-menu-action.service.d.ts +1 -1
  323. package/menu/si-menu-factory.component.d.ts +1 -1
  324. package/menu/si-menu-item-checkbox.component.d.ts +2 -1
  325. package/menu/si-menu-model.d.ts +1 -1
  326. package/modal/index.d.ts +1 -1
  327. package/modal/modal.helpers.d.ts +1 -1
  328. package/modal/modalref.d.ts +1 -1
  329. package/navbar/account.model.d.ts +1 -1
  330. package/navbar/index.d.ts +1 -1
  331. package/navbar/si-navbar-item/index.d.ts +1 -1
  332. package/navbar/si-navbar-primary/index.d.ts +1 -1
  333. package/navbar/si-navbar-primary/si-navbar-primary.model.d.ts +1 -1
  334. package/navbar-vertical/index.d.ts +1 -1
  335. package/navbar-vertical/si-navbar-vertical.model.d.ts +1 -1
  336. package/navbar-vertical/si-navbar-vertical.provider.d.ts +1 -1
  337. package/number-input/index.d.ts +1 -1
  338. package/number-input/si-number-input.component.d.ts +1 -1
  339. package/package.json +15 -3
  340. package/pagination/index.d.ts +1 -1
  341. package/password-strength/index.d.ts +1 -1
  342. package/password-strength/si-password-strength.component.d.ts +1 -1
  343. package/password-toggle/index.d.ts +1 -1
  344. package/phone-number/index.d.ts +1 -1
  345. package/phone-number/si-phone-number-input.models.d.ts +1 -1
  346. package/photo-upload/index.d.ts +1 -1
  347. package/pills-input/index.d.ts +1 -1
  348. package/pills-input/si-pills-input-pattern-base.d.ts +1 -1
  349. package/pills-input/si-pills-input.component.d.ts +1 -1
  350. package/popover/index.d.ts +1 -1
  351. package/popover/si-popover.component.d.ts +1 -1
  352. package/popover-next/index.d.ts +1 -1
  353. package/progressbar/index.d.ts +1 -1
  354. package/public-api.d.ts +1 -1
  355. package/resize-observer/index.d.ts +1 -1
  356. package/resize-observer/si-resize-observer.directive.d.ts +1 -1
  357. package/resize-observer/si-responsive-container.directive.d.ts +1 -1
  358. package/result-details-list/index.d.ts +1 -1
  359. package/result-details-list/si-result-details-list.datamodel.d.ts +1 -1
  360. package/search-bar/index.d.ts +1 -1
  361. package/search-bar/si-search-bar.component.d.ts +1 -1
  362. package/select/index.d.ts +1 -1
  363. package/select/options/si-select-complex-options.directive.d.ts +1 -1
  364. package/select/options/si-select-lazy-options.directive.d.ts +1 -1
  365. package/select/options/si-select-option.source.d.ts +1 -1
  366. package/select/options/si-select-options-strategy.base.d.ts +1 -1
  367. package/select/options/si-select-options-strategy.d.ts +1 -1
  368. package/select/options/si-select-simple-options.directive.d.ts +1 -1
  369. package/select/select-input/si-select-input.component.d.ts +1 -1
  370. package/select/select-list/si-select-list.base.d.ts +1 -1
  371. package/select/select-list/si-select-list.component.d.ts +1 -1
  372. package/select/select-option/si-select-option-row.component.d.ts +1 -1
  373. package/select/selection/si-select-selection-strategy.d.ts +1 -1
  374. package/select/si-select.types.d.ts +1 -1
  375. package/shadow-root/index.d.ts +1 -1
  376. package/shadow-root/si-shadow-root.directive.d.ts +1 -1
  377. package/side-panel/index.d.ts +1 -1
  378. package/side-panel/si-side-panel.service.d.ts +1 -1
  379. package/side-panel/side-panel.model.d.ts +1 -1
  380. package/skip-links/index.d.ts +1 -1
  381. package/skip-links/si-skip-link-target.directive.d.ts +1 -1
  382. package/slider/index.d.ts +1 -1
  383. package/sort-bar/index.d.ts +1 -1
  384. package/sort-bar/si-sort-bar.component.d.ts +1 -1
  385. package/split/index.d.ts +1 -1
  386. package/split/si-split.interfaces.d.ts +1 -1
  387. package/status-bar/index.d.ts +1 -1
  388. package/status-bar/si-status-bar-item/index.d.ts +1 -1
  389. package/status-bar/si-status-bar-item/si-status-bar-item.model.d.ts +1 -1
  390. package/status-toggle/index.d.ts +1 -1
  391. package/status-toggle/status-toggle.model.d.ts +1 -1
  392. package/summary-chip/index.d.ts +1 -1
  393. package/summary-widget/index.d.ts +1 -1
  394. package/system-banner/index.d.ts +1 -1
  395. package/tabs/index.d.ts +1 -1
  396. package/tabs/si-tab/index.d.ts +1 -1
  397. package/tabs/si-tab/si-tab.component.d.ts +1 -1
  398. package/tabs/si-tabset/index.d.ts +1 -1
  399. package/tabs-next/index.d.ts +1 -1
  400. package/tabs-next/si-tab-next-base.directive.d.ts +1 -1
  401. package/tabs-next/si-tabs-tokens.d.ts +1 -1
  402. package/tabs-next/si-tabset-next.component.d.ts +1 -1
  403. package/template-i18n.json +5 -0
  404. package/theme/index.d.ts +1 -1
  405. package/theme/si-theme-store.d.ts +1 -1
  406. package/theme/si-theme.model.d.ts +1 -1
  407. package/threshold/index.d.ts +1 -1
  408. package/toast-notification/index.d.ts +1 -1
  409. package/toast-notification/si-toast.model.d.ts +1 -1
  410. package/tooltip/index.d.ts +1 -1
  411. package/tooltip/si-tooltip.component.d.ts +1 -1
  412. package/tooltip/si-tooltip.directive.d.ts +1 -1
  413. package/tooltip/si-tooltip.service.d.ts +1 -1
  414. package/tour/index.d.ts +1 -1
  415. package/tour/si-tour-token.model.d.ts +1 -1
  416. package/tour/si-tour.model.d.ts +1 -1
  417. package/translate/index.d.ts +1 -1
  418. package/translate/si-translatable-keys.interface.d.ts +5 -0
  419. package/translate/si-translatable-overrides.provider.d.ts +1 -1
  420. package/tree-view/drag-drop.util.d.ts +1 -1
  421. package/tree-view/index.d.ts +1 -1
  422. package/tree-view/si-tree-view-item/si-tree-view-item.component.d.ts +4 -5
  423. package/tree-view/si-tree-view-item/si-tree-view-item.directive.d.ts +1 -1
  424. package/tree-view/si-tree-view-item-context.d.ts +1 -1
  425. package/tree-view/si-tree-view-item-height.service.d.ts +1 -1
  426. package/tree-view/si-tree-view-item-template.directive.d.ts +1 -1
  427. package/tree-view/si-tree-view.component.d.ts +9 -8
  428. package/tree-view/si-tree-view.model.d.ts +1 -1
  429. package/tree-view/si-tree-view.service.d.ts +1 -1
  430. package/tree-view/si-tree-view.utils.d.ts +1 -1
  431. package/typeahead/index.d.ts +1 -1
  432. package/typeahead/si-typeahead.directive.d.ts +1 -1
  433. package/typeahead/si-typeahead.model.d.ts +1 -1
  434. package/typeahead/si-typeahead.sorting.d.ts +1 -1
  435. package/unauthorized-page/index.d.ts +1 -1
  436. package/wizard/index.d.ts +1 -1
@@ -0,0 +1,1170 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, input, booleanAttribute, output, signal, computed, inject, ElementRef, Component, viewChild, ChangeDetectorRef, NgModule, model } from '@angular/core';
3
+ import { SiCardComponent } from '@siemens/element-ng/card';
4
+ import { SiContentActionBarComponent } from '@siemens/element-ng/content-action-bar';
5
+ import * as i1 from '@siemens/element-translate-ng/translate';
6
+ import { SiTranslateModule } from '@siemens/element-translate-ng/translate';
7
+ import { BehaviorSubject, Subject } from 'rxjs';
8
+ import * as i1$1 from '@angular/cdk/portal';
9
+ import { CdkPortalOutlet, DomPortal, PortalModule } from '@angular/cdk/portal';
10
+ import { ViewportScroller, DOCUMENT, NgClass } from '@angular/common';
11
+ import { ScrollbarHelper } from '@siemens/element-ng/common';
12
+ import { ResizeObserverService, BOOTSTRAP_BREAKPOINTS } from '@siemens/element-ng/resize-observer';
13
+ import { takeUntil } from 'rxjs/operators';
14
+ import { addIcons, elementRight2, SiIconNextComponent, elementSortUp, elementSortDown, SiIconComponent, SiStatusIconComponent } from '@siemens/element-ng/icon';
15
+ import { SiLinkDirective } from '@siemens/element-ng/link';
16
+ import * as i2 from '@angular/forms';
17
+ import { FormsModule } from '@angular/forms';
18
+ import { SiSearchBarComponent } from '@siemens/element-ng/search-bar';
19
+ import { A11yModule } from '@angular/cdk/a11y';
20
+ import { CdkMenuTrigger } from '@angular/cdk/menu';
21
+ import { ActivatedRoute, RouterLink } from '@angular/router';
22
+ import * as i2$1 from '@siemens/element-ng/menu';
23
+ import { SiMenuModule } from '@siemens/element-ng/menu';
24
+
25
+ /**
26
+ * Copyright (c) Siemens 2016 - 2025
27
+ * SPDX-License-Identifier: MIT
28
+ */
29
+ class SiDashboardService {
30
+ cards = new BehaviorSubject([]);
31
+ /**
32
+ * Subject containing the current dashboard cards as a list.
33
+ *
34
+ * @defaultValue this.cards.asObservable()
35
+ */
36
+ cards$ = this.cards.asObservable();
37
+ /**
38
+ * Registers a new dashboard card.
39
+ */
40
+ register(card) {
41
+ const nextCards = this.cards.value;
42
+ nextCards.push(card);
43
+ this.cards.next(nextCards);
44
+ }
45
+ /**
46
+ * Removes a registered dashboard card.
47
+ */
48
+ unregister(card) {
49
+ const nextCards = this.cards.value;
50
+ const index = nextCards.indexOf(card);
51
+ if (index > -1) {
52
+ nextCards.splice(index, 1);
53
+ this.cards.next(nextCards);
54
+ }
55
+ }
56
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
57
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardService });
58
+ }
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardService, decorators: [{
60
+ type: Injectable
61
+ }] });
62
+
63
+ /**
64
+ * Copyright (c) Siemens 2016 - 2025
65
+ * SPDX-License-Identifier: MIT
66
+ */
67
+ class SiDashboardCardComponent extends SiCardComponent {
68
+ /**
69
+ * Description of cancel button & action.
70
+ *
71
+ * @defaultValue
72
+ * ```
73
+ * $localize`:@@SI_DASHBOARD.RESTORE:Restore`
74
+ * ```
75
+ */
76
+ restoreText = input($localize `:@@SI_DASHBOARD.RESTORE:Restore`);
77
+ /**
78
+ * Description of expand button & action.
79
+ *
80
+ * @defaultValue
81
+ * ```
82
+ * $localize`:@@SI_DASHBOARD.EXPAND:Expand`
83
+ * ```
84
+ */
85
+ expandText = input($localize `:@@SI_DASHBOARD.EXPAND:Expand`);
86
+ /**
87
+ * Option to enable and show the UI controls for card expand functionality.
88
+ * `Expand` and `restore` action items will be added to the content action bar.
89
+ * The expand resizing has to be implemented by the container of the card.
90
+ *
91
+ * @defaultValue false
92
+ */
93
+ enableExpandInteraction = input(false, { transform: booleanAttribute });
94
+ /**
95
+ * Used in combination with si-dashboard to show filters when a card is expanded or not.
96
+ *
97
+ * @defaultValue true
98
+ */
99
+ showMenubar = input(true, { transform: booleanAttribute });
100
+ /**
101
+ * Emitter for size state change
102
+ */
103
+ expandChange = output();
104
+ /**
105
+ * Whether the card is currently expanded.
106
+ *
107
+ * @defaultValue false
108
+ */
109
+ isExpanded = signal(false);
110
+ /** @internal */
111
+ hide = false;
112
+ /** @internal */
113
+ enableExpandInteractionInternal = signal(false);
114
+ enableExpandInteractionComputed = computed(() => this.enableExpandInteraction() || this.enableExpandInteractionInternal());
115
+ /** @internal */
116
+ element = inject(ElementRef);
117
+ displayContentActionBar = computed(() => this.primaryActionsComputed()?.length > 0 || this.secondaryActions()?.length > 0);
118
+ actionBarViewTypeComputed = computed(() => {
119
+ if (!this.hasContentBarActions()) {
120
+ if (this.enableExpandInteractionComputed()) {
121
+ return 'expanded';
122
+ }
123
+ else {
124
+ return this.actionBarViewType();
125
+ }
126
+ }
127
+ else {
128
+ return this.actionBarViewType();
129
+ }
130
+ });
131
+ actionBarTitleComputed = computed(() => {
132
+ if (!this.hasContentBarActions()) {
133
+ if (this.enableExpandInteractionComputed()) {
134
+ return this.expandRestoreIconTooltip();
135
+ }
136
+ else {
137
+ return this.actionBarTitle();
138
+ }
139
+ }
140
+ else {
141
+ return this.actionBarTitle();
142
+ }
143
+ });
144
+ primaryActionsComputed = computed(() => {
145
+ const expandRestoreButtonActions = [
146
+ {
147
+ type: 'action',
148
+ label: this.isExpanded() ? this.restoreText() : this.expandText(),
149
+ icon: this.isExpanded() ? 'element-pinch' : 'element-zoom',
150
+ iconOnly: true,
151
+ action: () => this.expandCard(!this.isExpanded())
152
+ }
153
+ ];
154
+ if (!this.hasContentBarActions()) {
155
+ if (this.enableExpandInteractionComputed()) {
156
+ return expandRestoreButtonActions;
157
+ }
158
+ else {
159
+ return [];
160
+ }
161
+ }
162
+ else {
163
+ if (!this.enableExpandInteractionComputed()) {
164
+ return this.primaryActions();
165
+ }
166
+ else {
167
+ const action = this.isExpanded() ? this.restoreActionItem() : this.expandActionItem();
168
+ if (this.primaryActions() && this.primaryActions().length > 0) {
169
+ return [...this.primaryActions(), action];
170
+ }
171
+ else {
172
+ return [action];
173
+ }
174
+ }
175
+ }
176
+ });
177
+ expandRestoreIconTooltip = computed(() => {
178
+ return this.isExpanded() ? this.restoreText() : this.expandText();
179
+ });
180
+ expandActionItem = computed(() => {
181
+ return {
182
+ type: 'action',
183
+ label: this.expandText(),
184
+ icon: 'element-zoom',
185
+ iconOnly: true,
186
+ action: () => this.expandCard(true)
187
+ };
188
+ });
189
+ restoreActionItem = computed(() => {
190
+ return {
191
+ type: 'action',
192
+ label: this.restoreText(),
193
+ icon: 'element-pinch',
194
+ iconOnly: true,
195
+ action: () => this.expandCard(false)
196
+ };
197
+ });
198
+ hasContentBarActions = computed(() => {
199
+ return this.primaryActions()?.length > 0 || this.secondaryActions()?.length > 0;
200
+ });
201
+ dashboardService = inject(SiDashboardService, { optional: true });
202
+ constructor() {
203
+ super();
204
+ this.dashboardService?.register(this);
205
+ }
206
+ ngOnDestroy() {
207
+ this.dashboardService?.unregister(this);
208
+ }
209
+ /**
210
+ * Expand the dashboard card.
211
+ */
212
+ expand() {
213
+ this.expandCard(true);
214
+ }
215
+ /**
216
+ * Restore the dashboard card to the original, non-expanded state.
217
+ */
218
+ restore() {
219
+ this.expandCard(false);
220
+ }
221
+ expandCard(expand) {
222
+ this.isExpanded.set(expand);
223
+ this.expandChange.emit(expand);
224
+ }
225
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
226
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", 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{block-size:100%}:host.card-horizontal{flex-direction:row}: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: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }] });
227
+ }
228
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardCardComponent, decorators: [{
229
+ type: Component,
230
+ args: [{ selector: 'si-dashboard-card', imports: [SiContentActionBarComponent, SiTranslateModule], host: {
231
+ '[class.elevation-2]': 'isExpanded()',
232
+ '[class.expanded]': 'isExpanded()',
233
+ '[class.d-none]': 'hide'
234
+ }, 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{block-size:100%}:host.card-horizontal{flex-direction:row}: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"] }]
235
+ }], ctorParameters: () => [] });
236
+
237
+ /**
238
+ * Copyright (c) Siemens 2016 - 2025
239
+ * SPDX-License-Identifier: MIT
240
+ */
241
+ const FIX_SCROLL_PADDING_RESIZE_OBSERVER_THROTTLE = 10;
242
+ class SiDashboardComponent {
243
+ /**
244
+ * Heading for the dashboard page.
245
+ */
246
+ heading = input();
247
+ /**
248
+ * Opt-in to enable expand interaction for all cards.
249
+ *
250
+ * @defaultValue false
251
+ */
252
+ enableExpandInteractions = input(false, { transform: booleanAttribute });
253
+ /**
254
+ * Option to turn off the sticky behavior of the heading and menu bar.
255
+ *
256
+ * @defaultValue true
257
+ */
258
+ sticky = input(true, { transform: booleanAttribute });
259
+ /**
260
+ * Option to hide the menu bar.
261
+ *
262
+ * @defaultValue false
263
+ */
264
+ hideMenubar = input(false, { transform: booleanAttribute });
265
+ /**
266
+ * Is `true` if a card is expanded.
267
+ * @defaultref {@link _isExpanded}
268
+ */
269
+ get isExpanded() {
270
+ return this._isExpanded;
271
+ }
272
+ dashboardFrameEndPadding = null;
273
+ hideMenubarComputed = computed(() => this.hideMenubar() || this.hideMenubarInternal());
274
+ _isExpanded = false;
275
+ unsubscribe = new Subject();
276
+ scrollPosition = [0, 0];
277
+ cards = [];
278
+ expandedPortalOutlet = viewChild.required('expandedPortalOutlet', {
279
+ read: CdkPortalOutlet
280
+ });
281
+ dashboardFrame = viewChild.required('dashboardFrame');
282
+ dashboard = viewChild.required('dashboard');
283
+ dashboardFrameDimensions;
284
+ dashboardDimensions;
285
+ scroller = inject(ViewportScroller);
286
+ dashboardService = inject(SiDashboardService);
287
+ resizeObserver = inject(ResizeObserverService);
288
+ scrollbarHelper = inject(ScrollbarHelper);
289
+ cdRef = inject(ChangeDetectorRef);
290
+ document = inject(DOCUMENT);
291
+ hideMenubarInternal = signal(false);
292
+ constructor() {
293
+ this.dashboardService.cards$
294
+ .pipe(takeUntil(this.unsubscribe))
295
+ .subscribe(cards => this.subscribeToCards(cards));
296
+ }
297
+ ngOnChanges(changes) {
298
+ if (changes.enableExpandInteractions) {
299
+ this.initCards();
300
+ }
301
+ }
302
+ ngAfterViewInit() {
303
+ this.resizeObserver
304
+ .observe(this.dashboard().nativeElement, FIX_SCROLL_PADDING_RESIZE_OBSERVER_THROTTLE)
305
+ .pipe(takeUntil(this.unsubscribe))
306
+ .subscribe(x => this.setDashboardFrameEndPadding(this.dashboardFrameDimensions, x));
307
+ this.resizeObserver
308
+ .observe(this.dashboardFrame().nativeElement, FIX_SCROLL_PADDING_RESIZE_OBSERVER_THROTTLE)
309
+ .pipe(takeUntil(this.unsubscribe))
310
+ .subscribe(dims => this.setDashboardFrameEndPadding(dims, this.dashboardDimensions));
311
+ }
312
+ ngOnDestroy() {
313
+ this.unsubscribe.next();
314
+ this.unsubscribe.complete();
315
+ }
316
+ subscribeToCards(cards) {
317
+ this.cards = cards;
318
+ this.initCards();
319
+ }
320
+ initCards() {
321
+ for (const card of this.cards) {
322
+ // We only enforce expand if the dashboard value is true, otherwise we would remove the individual
323
+ // card settings.
324
+ const enableExpandInteractions = this.enableExpandInteractions();
325
+ if (enableExpandInteractions) {
326
+ card.enableExpandInteractionInternal.set(enableExpandInteractions);
327
+ }
328
+ card.expandChange.subscribe((expand) => {
329
+ if (expand) {
330
+ this.expand(card);
331
+ }
332
+ else {
333
+ this.restoreDashboard();
334
+ }
335
+ this.cdRef.markForCheck();
336
+ });
337
+ }
338
+ }
339
+ /**
340
+ * Expands the provided card to full size in the dashboard.
341
+ * @param card - The card to be expanded.
342
+ */
343
+ expand(card) {
344
+ if (this.isExpanded) {
345
+ this.restoreDashboard();
346
+ }
347
+ if (this.sticky()) {
348
+ this.scrollPosition = [
349
+ this.dashboardFrame().nativeElement.scrollLeft,
350
+ this.dashboardFrame().nativeElement.scrollTop
351
+ ];
352
+ }
353
+ else {
354
+ this.scrollPosition = this.scroller.getScrollPosition();
355
+ }
356
+ // Make sure card.expand() is called first and prevent recursions.
357
+ if (!card.isExpanded()) {
358
+ card.expand();
359
+ }
360
+ else {
361
+ if (!card.showMenubar()) {
362
+ this.hideMenubarInternal.set(true);
363
+ }
364
+ this._isExpanded = true;
365
+ this.expandedPortalOutlet().detach();
366
+ this.expandedPortalOutlet().attach(new DomPortal(card.element.nativeElement));
367
+ }
368
+ }
369
+ /**
370
+ * Restores the expanded card to it's previous position.
371
+ */
372
+ restore() {
373
+ // Restore all cards
374
+ for (const card of this.cards) {
375
+ if (card.isExpanded()) {
376
+ card.restore();
377
+ }
378
+ }
379
+ // Restore the dashboard and scroll to previous position
380
+ this.restoreDashboard();
381
+ // Subscribe to cards events again
382
+ this.initCards();
383
+ this.cdRef.markForCheck();
384
+ }
385
+ /**
386
+ * Restored the UI state of the dashboard. This method is only part
387
+ * of restoring a card and needs to be invoked after the card.restore()
388
+ * method. In general this is achieved by listening to card events.
389
+ */
390
+ restoreDashboard() {
391
+ this.expandedPortalOutlet().detach();
392
+ this.hideMenubarInternal.set(false);
393
+ this.toggleCardsHide(false);
394
+ const scrollBehavior = this.document.documentElement.style.scrollBehavior;
395
+ this.document.documentElement.style.scrollBehavior = 'auto';
396
+ setTimeout(() => {
397
+ if (this.sticky()) {
398
+ this.dashboardFrame().nativeElement.scrollTo({
399
+ left: this.scrollPosition[0],
400
+ top: this.scrollPosition[1],
401
+ behavior: 'auto'
402
+ });
403
+ }
404
+ else {
405
+ this.scroller.scrollToPosition(this.scrollPosition);
406
+ this.document.documentElement.style.scrollBehavior = scrollBehavior;
407
+ }
408
+ this.cdRef.markForCheck();
409
+ });
410
+ this._isExpanded = false;
411
+ }
412
+ toggleCardsHide(expand) {
413
+ for (const card of this.cards) {
414
+ card.hide = !card.isExpanded() && expand;
415
+ }
416
+ }
417
+ setDashboardFrameEndPadding(dashboardFrameDimensions, dashboardDimensions) {
418
+ if (!this.sticky()) {
419
+ return;
420
+ }
421
+ if (this.dashboardDimensions === dashboardDimensions &&
422
+ this.dashboardFrameDimensions === dashboardFrameDimensions) {
423
+ return;
424
+ }
425
+ this.dashboardDimensions = dashboardDimensions;
426
+ this.dashboardFrameDimensions = dashboardFrameDimensions;
427
+ let padding = this.document.body.offsetWidth >= BOOTSTRAP_BREAKPOINTS.mdMinimum ? 32 : 16;
428
+ if (dashboardDimensions &&
429
+ dashboardFrameDimensions &&
430
+ dashboardDimensions.height > dashboardFrameDimensions.height) {
431
+ padding = padding - this.scrollbarHelper.width;
432
+ }
433
+ this.dashboardFrameEndPadding = padding;
434
+ this.cdRef.markForCheck();
435
+ }
436
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
437
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiDashboardComponent, isStandalone: true, selector: "si-dashboard", inputs: { heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: false, transformFunction: null }, enableExpandInteractions: { classPropertyName: "enableExpandInteractions", publicName: "enableExpandInteractions", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null }, hideMenubar: { classPropertyName: "hideMenubar", publicName: "hideMenubar", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "si-layout-fixed-height" }, providers: [SiDashboardService], viewQueries: [{ propertyName: "expandedPortalOutlet", first: true, predicate: ["expandedPortalOutlet"], descendants: true, read: CdkPortalOutlet, isSignal: true }, { propertyName: "dashboardFrame", first: true, predicate: ["dashboardFrame"], descendants: true, isSignal: true }, { propertyName: "dashboard", first: true, predicate: ["dashboard"], descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"si-layout-fixed-height si-dashboard si-layout-main-padding py-6\"\n [class.sticky]=\"sticky()\"\n>\n <div class=\"si-dashboard-header\" [class.sticky]=\"sticky()\">\n @if (heading()) {\n <div class=\"si-layout-header\">\n <h2 class=\"si-layout-title si-layout-top-element\">{{ heading() | translate }}</h2>\n </div>\n }\n @if (!hideMenubarComputed()) {\n <div class=\"mb-6\" [class.si-layout-top-element]=\"!heading()\">\n <ng-content select=\"[menubar]\" />\n </div>\n }\n </div>\n <div\n #dashboardFrame\n class=\"si-layout-fixed-height si-dashboard-content ps-2 pt-2 ms-n2 mt-n2\"\n [class.sticky]=\"sticky()\"\n [style.padding-inline-end.px]=\"dashboardFrameEndPadding\"\n >\n <div class=\"si-layout-fixed-height\" [class.d-none]=\"isExpanded\">\n <div #dashboard class=\"si-layout-fixed-height fix-si-layout-fixed-height\">\n <ng-content select=\"[dashboard]\" />\n </div>\n </div>\n <div class=\"position-relative flex-grow-1 flex-shrink-1 mb-6\" [class.d-none]=\"!isExpanded\">\n <ng-container #expandedPortalOutlet cdkPortalOutlet />\n </div>\n </div>\n</div>\n", styles: [".si-dashboard.sticky{padding-inline-end:0;overflow-x:hidden}.si-dashboard .si-dashboard-header.sticky{padding-inline-end:16px}@media (min-width: 768px){.si-dashboard .si-dashboard-header.sticky{padding-inline-end:32px}}.si-dashboard .si-dashboard-content.sticky{overflow-y:auto;overflow-x:hidden}.si-dashboard .fix-si-layout-fixed-height{min-block-size:auto}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1$1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }] });
438
+ }
439
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardComponent, decorators: [{
440
+ type: Component,
441
+ args: [{ selector: 'si-dashboard', imports: [PortalModule, SiTranslateModule], providers: [SiDashboardService], host: { class: 'si-layout-fixed-height' }, template: "<div\n class=\"si-layout-fixed-height si-dashboard si-layout-main-padding py-6\"\n [class.sticky]=\"sticky()\"\n>\n <div class=\"si-dashboard-header\" [class.sticky]=\"sticky()\">\n @if (heading()) {\n <div class=\"si-layout-header\">\n <h2 class=\"si-layout-title si-layout-top-element\">{{ heading() | translate }}</h2>\n </div>\n }\n @if (!hideMenubarComputed()) {\n <div class=\"mb-6\" [class.si-layout-top-element]=\"!heading()\">\n <ng-content select=\"[menubar]\" />\n </div>\n }\n </div>\n <div\n #dashboardFrame\n class=\"si-layout-fixed-height si-dashboard-content ps-2 pt-2 ms-n2 mt-n2\"\n [class.sticky]=\"sticky()\"\n [style.padding-inline-end.px]=\"dashboardFrameEndPadding\"\n >\n <div class=\"si-layout-fixed-height\" [class.d-none]=\"isExpanded\">\n <div #dashboard class=\"si-layout-fixed-height fix-si-layout-fixed-height\">\n <ng-content select=\"[dashboard]\" />\n </div>\n </div>\n <div class=\"position-relative flex-grow-1 flex-shrink-1 mb-6\" [class.d-none]=\"!isExpanded\">\n <ng-container #expandedPortalOutlet cdkPortalOutlet />\n </div>\n </div>\n</div>\n", styles: [".si-dashboard.sticky{padding-inline-end:0;overflow-x:hidden}.si-dashboard .si-dashboard-header.sticky{padding-inline-end:16px}@media (min-width: 768px){.si-dashboard .si-dashboard-header.sticky{padding-inline-end:32px}}.si-dashboard .si-dashboard-content.sticky{overflow-y:auto;overflow-x:hidden}.si-dashboard .fix-si-layout-fixed-height{min-block-size:auto}\n"] }]
442
+ }], ctorParameters: () => [] });
443
+
444
+ /**
445
+ * Copyright (c) Siemens 2016 - 2025
446
+ * SPDX-License-Identifier: MIT
447
+ */
448
+ class SiDashboardModule {
449
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
450
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardModule, imports: [SiDashboardCardComponent, SiDashboardComponent], exports: [SiDashboardCardComponent, SiDashboardComponent] });
451
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardModule, imports: [SiDashboardCardComponent, SiDashboardComponent] });
452
+ }
453
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardModule, decorators: [{
454
+ type: NgModule,
455
+ args: [{
456
+ imports: [SiDashboardCardComponent, SiDashboardComponent],
457
+ exports: [SiDashboardCardComponent, SiDashboardComponent]
458
+ }]
459
+ }] });
460
+
461
+ /**
462
+ * Copyright (c) Siemens 2016 - 2025
463
+ * SPDX-License-Identifier: MIT
464
+ */
465
+ /**
466
+ * The SiWidgetBaseComponent<T> implements the timing for the skeleton loading
467
+ * indicator of widgets. It supports a generic value input property that represents
468
+ * the main value to be displayed by a widget. When the value is not set, the `showLoadingIndicator`
469
+ * changes after the `initialLoadingIndicatorDebounceTime` delay to `true` and subclasses
470
+ * should show the skeleton loading indicator.
471
+ */
472
+ class SiWidgetBaseComponent {
473
+ /**
474
+ * The main value to be displayed. If no value is set,
475
+ * the skeleton indicates the loading of the value. Disable
476
+ * the automatic loading mechanism by setting `SiWidgetBodyBaseComponent.disableAutoLoadingIndicator`.
477
+ */
478
+ value = input.required();
479
+ /**
480
+ * Option to disable automatic start of skeleton loading indication.
481
+ *
482
+ * @defaultValue false
483
+ */
484
+ disableAutoLoadingIndicator = input(false, { transform: booleanAttribute });
485
+ /**
486
+ * Input to start and stop the skeleton loading indication.
487
+ *
488
+ * @defaultValue false
489
+ */
490
+ showLoadingIndicatorInput = input(false, {
491
+ // eslint-disable-next-line @angular-eslint/no-input-rename
492
+ alias: 'showLoadingIndicator',
493
+ transform: booleanAttribute
494
+ });
495
+ showLoadingIndicatorInternal = signal(false);
496
+ showLoadingIndicator = computed(() => {
497
+ return this.showLoadingIndicatorInternal() ?? this.showLoadingIndicatorInput();
498
+ });
499
+ /**
500
+ * Initial delay time in milliseconds before enabling loading indicator.
501
+ * Only used once initially during construction.
502
+ *
503
+ * @defaultValue 300
504
+ */
505
+ initialLoadingIndicatorDebounceTime = input(300);
506
+ cdRef = inject(ChangeDetectorRef);
507
+ loadingTimer;
508
+ ngOnChanges(changes) {
509
+ if (!this.disableAutoLoadingIndicator() &&
510
+ !changes.value?.firstChange &&
511
+ changes.value?.currentValue) {
512
+ if (this.loadingTimer) {
513
+ clearTimeout(this.loadingTimer);
514
+ this.loadingTimer = undefined;
515
+ }
516
+ this.showLoadingIndicatorInternal.set(false);
517
+ }
518
+ }
519
+ ngOnInit() {
520
+ if (!this.disableAutoLoadingIndicator() && !this.value()) {
521
+ this.loadingTimer = setTimeout(() => {
522
+ this.showLoadingIndicatorInternal.set(!this.value());
523
+ }, this.initialLoadingIndicatorDebounceTime());
524
+ }
525
+ }
526
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiWidgetBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
527
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.6", type: SiWidgetBaseComponent, isStandalone: true, selector: "ng-component", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, disableAutoLoadingIndicator: { classPropertyName: "disableAutoLoadingIndicator", publicName: "disableAutoLoadingIndicator", isSignal: true, isRequired: false, transformFunction: null }, showLoadingIndicatorInput: { classPropertyName: "showLoadingIndicatorInput", publicName: "showLoadingIndicator", isSignal: true, isRequired: false, transformFunction: null }, initialLoadingIndicatorDebounceTime: { classPropertyName: "initialLoadingIndicatorDebounceTime", publicName: "initialLoadingIndicatorDebounceTime", isSignal: true, isRequired: false, transformFunction: null } }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
528
+ }
529
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiWidgetBaseComponent, decorators: [{
530
+ type: Component,
531
+ args: [{
532
+ template: ''
533
+ }]
534
+ }] });
535
+
536
+ /**
537
+ * Copyright (c) Siemens 2016 - 2025
538
+ * SPDX-License-Identifier: MIT
539
+ */
540
+ /**
541
+ * The `<si-link-widget>` supports an easy composition of links and actions
542
+ * with support for skeleton loading indicator.
543
+ */
544
+ class SiLinkWidgetComponent extends SiWidgetBaseComponent {
545
+ /**
546
+ * Option to enable trailing link arrow icons for each link.
547
+ *
548
+ * @defaultValue false
549
+ */
550
+ showLinkIcons = input(false, { transform: booleanAttribute });
551
+ /**
552
+ * The number of skeleton progress indication rows.
553
+ *
554
+ * @defaultValue 3
555
+ */
556
+ numberOfLinks = input(3);
557
+ ghosts = computed(() => new Array(this.numberOfLinks() ?? 3));
558
+ icons = addIcons({ elementRight2 });
559
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiLinkWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
560
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiLinkWidgetComponent, isStandalone: true, selector: "si-link-widget", inputs: { showLinkIcons: { classPropertyName: "showLinkIcons", publicName: "showLinkIcons", isSignal: true, isRequired: false, transformFunction: null }, numberOfLinks: { classPropertyName: "numberOfLinks", publicName: "numberOfLinks", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "si-link-widget" }, usesInheritance: true, ngImport: i0, template: "@if (!showLoadingIndicator() && value()) {\n @for (link of value(); track link) {\n @if (link.action) {\n <button type=\"button\" class=\"btn btn-link\" [siLink]=\"link\">{{\n link.title | translate\n }}</button>\n } @else {\n <a [siLink]=\"link\">\n {{ link.title | translate }}\n @if (showLinkIcons()) {\n <si-icon-next class=\"link-icon link-end flip-rtl\" [icon]=\"icons.elementRight2\" />\n }\n </a>\n }\n }\n} @else {\n @for (some of ghosts(); track $index) {\n <div class=\"si-link-widget-skeleton\"></div>\n }\n}\n", dependencies: [{ kind: "component", type: SiIconNextComponent, selector: "si-icon-next", inputs: ["icon"] }, { kind: "directive", type: SiLinkDirective, selector: "[siLink]", inputs: ["siLink", "siLinkDefaultTarget", "actionParam", "activeClass", "exactMatch", "ariaCurrent"], outputs: ["activeChange"], exportAs: ["siLink"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }] });
561
+ }
562
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiLinkWidgetComponent, decorators: [{
563
+ type: Component,
564
+ args: [{ selector: 'si-link-widget', imports: [SiIconNextComponent, SiLinkDirective, SiTranslateModule], host: { class: 'si-link-widget' }, template: "@if (!showLoadingIndicator() && value()) {\n @for (link of value(); track link) {\n @if (link.action) {\n <button type=\"button\" class=\"btn btn-link\" [siLink]=\"link\">{{\n link.title | translate\n }}</button>\n } @else {\n <a [siLink]=\"link\">\n {{ link.title | translate }}\n @if (showLinkIcons()) {\n <si-icon-next class=\"link-icon link-end flip-rtl\" [icon]=\"icons.elementRight2\" />\n }\n </a>\n }\n }\n} @else {\n @for (some of ghosts(); track $index) {\n <div class=\"si-link-widget-skeleton\"></div>\n }\n}\n" }]
565
+ }] });
566
+
567
+ /**
568
+ * Copyright (c) Siemens 2016 - 2025
569
+ * SPDX-License-Identifier: MIT
570
+ */
571
+ /**
572
+ * The `<si-link-widget>` supports an easy composition of links and actions
573
+ * with support for skeleton loading indicator.
574
+ */
575
+ class SiListWidgetItemComponent extends SiWidgetBaseComponent {
576
+ isLink = computed(() => {
577
+ return typeof this.value()?.label === 'object';
578
+ });
579
+ badgeColor = computed(() => {
580
+ return this.value()?.badgeColor ? 'bg-' + this.value()?.badgeColor : 'bg-default';
581
+ });
582
+ link = computed(() => {
583
+ return this.value()?.label;
584
+ });
585
+ label = computed(() => {
586
+ return this.value()?.label;
587
+ });
588
+ icons = addIcons({ elementRight2 });
589
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiListWidgetItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
590
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiListWidgetItemComponent, isStandalone: true, selector: "si-list-widget-item", host: { attributes: { "role": "listitem" }, classAttribute: "list-group-item d-flex align-items-center" }, usesInheritance: true, ngImport: i0, template: "@let valueObject = value();\n@if (!showLoadingIndicator() && valueObject) {\n @if (valueObject.badge) {\n <span class=\"mx-0 badge me-4\" [ngClass]=\"badgeColor()\">{{\n valueObject.badge | translate\n }}</span>\n }\n <span class=\"me-auto\">\n @if (!isLink()) {\n <span class=\"si-title-2\">{{ label() | translate }}</span>\n } @else {\n <a class=\"\" [siLink]=\"link()\"\n >{{ link().title | translate\n }}<si-icon-next class=\"link-icon link-start flip-rtl\" [icon]=\"icons.elementRight2\" />\n </a>\n }\n @if (valueObject.description) {\n <div class=\"mt-1 si-body-2 text-secondary\">{{ valueObject.description | translate }}</div>\n }\n </span>\n <span>{{ valueObject.text | translate }}</span>\n @if (valueObject.action) {\n @if (valueObject.action.action) {\n <button\n type=\"button\"\n class=\"btn btn-circle btn-sm btn-tertiary ms-4 p-2\"\n [attr.aria-label]=\"valueObject.action.title | translate\"\n [siLink]=\"valueObject.action\"\n >\n @if (valueObject.actionIcon) {\n <si-icon-next class=\"icon\" [icon]=\"valueObject.actionIcon\" />\n }\n </button>\n } @else {\n <a\n class=\"ms-4 p-2\"\n [siLink]=\"valueObject.action\"\n [attr.aria-label]=\"valueObject.action.title | translate\"\n >\n @if (valueObject.actionIcon) {\n <si-icon-next class=\"icon\" [icon]=\"valueObject.actionIcon\" />\n }\n </a>\n }\n }\n} @else {\n <div class=\"si-link-widget-skeleton my-4\"></div>\n}\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SiIconNextComponent, selector: "si-icon-next", inputs: ["icon"] }, { kind: "directive", type: SiLinkDirective, selector: "[siLink]", inputs: ["siLink", "siLinkDefaultTarget", "actionParam", "activeClass", "exactMatch", "ariaCurrent"], outputs: ["activeChange"], exportAs: ["siLink"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }] });
591
+ }
592
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiListWidgetItemComponent, decorators: [{
593
+ type: Component,
594
+ args: [{ selector: 'si-list-widget-item', imports: [NgClass, SiIconNextComponent, SiLinkDirective, SiTranslateModule], host: {
595
+ class: 'list-group-item d-flex align-items-center',
596
+ role: 'listitem'
597
+ }, template: "@let valueObject = value();\n@if (!showLoadingIndicator() && valueObject) {\n @if (valueObject.badge) {\n <span class=\"mx-0 badge me-4\" [ngClass]=\"badgeColor()\">{{\n valueObject.badge | translate\n }}</span>\n }\n <span class=\"me-auto\">\n @if (!isLink()) {\n <span class=\"si-title-2\">{{ label() | translate }}</span>\n } @else {\n <a class=\"\" [siLink]=\"link()\"\n >{{ link().title | translate\n }}<si-icon-next class=\"link-icon link-start flip-rtl\" [icon]=\"icons.elementRight2\" />\n </a>\n }\n @if (valueObject.description) {\n <div class=\"mt-1 si-body-2 text-secondary\">{{ valueObject.description | translate }}</div>\n }\n </span>\n <span>{{ valueObject.text | translate }}</span>\n @if (valueObject.action) {\n @if (valueObject.action.action) {\n <button\n type=\"button\"\n class=\"btn btn-circle btn-sm btn-tertiary ms-4 p-2\"\n [attr.aria-label]=\"valueObject.action.title | translate\"\n [siLink]=\"valueObject.action\"\n >\n @if (valueObject.actionIcon) {\n <si-icon-next class=\"icon\" [icon]=\"valueObject.actionIcon\" />\n }\n </button>\n } @else {\n <a\n class=\"ms-4 p-2\"\n [siLink]=\"valueObject.action\"\n [attr.aria-label]=\"valueObject.action.title | translate\"\n >\n @if (valueObject.actionIcon) {\n <si-icon-next class=\"icon\" [icon]=\"valueObject.actionIcon\" />\n }\n </a>\n }\n }\n} @else {\n <div class=\"si-link-widget-skeleton my-4\"></div>\n}\n" }]
598
+ }] });
599
+
600
+ /**
601
+ * Copyright (c) Siemens 2016 - 2025
602
+ * SPDX-License-Identifier: MIT
603
+ */
604
+ /**
605
+ * The `<si-list-widget-body>` implements the body of the <si-list-widget> that can be
606
+ * used for composition within other components.
607
+ */
608
+ class SiListWidgetBodyComponent extends SiWidgetBaseComponent {
609
+ /** Optional footer link for the list widget */
610
+ link = input();
611
+ /**
612
+ * label for the "search placeholder" name
613
+ *
614
+ * @defaultValue
615
+ * ```
616
+ * $localize`:@@SI_LIST_WIDGET.SEARCH_PLACEHOLDER:Search...`
617
+ * ```
618
+ */
619
+ searchPlaceholderLabel = input($localize `:@@SI_LIST_WIDGET.SEARCH_PLACEHOLDER:Search...`);
620
+ /**
621
+ * Enable ascending and descending SiListWidgetItem sorting. If enabled,
622
+ * items are initially ascending sorted.
623
+ */
624
+ sort = input();
625
+ /**
626
+ * Enables the search functionality.
627
+ *
628
+ * @defaultValue false
629
+ */
630
+ search = input(false, { transform: booleanAttribute });
631
+ /**
632
+ * Compare function of for two `SiListWidgetItem`s that is used to sort
633
+ * the array of items. The default compares the item labels by using the
634
+ * string `localeCompare()` function.
635
+ *
636
+ * @param a - first `SiListWidgetItem` of the comparison.
637
+ *
638
+ * @param b - second `SiListWidgetItem` of the comparison.
639
+ *
640
+ * @returns A value `< 0` if `a` is smaller, `> 0` if `b` is smaller, otherwise `0`.
641
+ *
642
+ * @defaultValue
643
+ * ```
644
+ * (
645
+ * a: SiListWidgetItem,
646
+ * b: SiListWidgetItem
647
+ * ) => {
648
+ * const aLabel = typeof a.label === 'object' ? a.label.title! : a.label;
649
+ * const bLabel = typeof b.label === 'object' ? b.label.title! : b.label;
650
+ * return aLabel.localeCompare(bLabel);
651
+ * }
652
+ * ```
653
+ */
654
+ compareFn = input((a, b) => {
655
+ const aLabel = typeof a.label === 'object' ? a.label.title : a.label;
656
+ const bLabel = typeof b.label === 'object' ? b.label.title : b.label;
657
+ return aLabel.localeCompare(bLabel);
658
+ });
659
+ /**
660
+ * Filter function that is used to filter down the list items when the user enters
661
+ * a term in the search bar. Default function.
662
+ *
663
+ * @param item - The item be checked if it matches the searchTerm.
664
+ *
665
+ * @param searchTerm - The string the user typed in the search bar.
666
+ *
667
+ * @returns `true` if the `searchTerm` matches the `item` and the `item` shall be kept in the list.
668
+ *
669
+ * @defaultValue
670
+ * ```
671
+ * (
672
+ * item: SiListWidgetItem,
673
+ * searchTerm: string
674
+ * ) => {
675
+ * const aLabel = typeof item.label === 'object' ? item.label.title! : item.label;
676
+ * return aLabel.toLowerCase().includes(searchTerm.toLowerCase());
677
+ * }
678
+ * ```
679
+ */
680
+ filterFn = input((item, searchTerm) => {
681
+ const aLabel = typeof item.label === 'object' ? item.label.title : item.label;
682
+ return aLabel.toLowerCase().includes(searchTerm.toLowerCase());
683
+ });
684
+ /**
685
+ * The number of skeleton progress indication rows.
686
+ *
687
+ * @defaultValue 6
688
+ */
689
+ numberOfLinks = input(6);
690
+ /** Used to display the defined number of ghost items */
691
+ ghosts = computed(() => new Array(this.numberOfLinks() ?? 6));
692
+ /** Holds the list items that are displayed. May be filtered and sorted. */
693
+ filteredListWidgetItems = computed(() => {
694
+ const value = this.value();
695
+ const sort = this.sort();
696
+ const searchText = this.searchText();
697
+ let filteredListWidgetItems = value;
698
+ if (searchText.length > 0) {
699
+ filteredListWidgetItems = value?.filter((item) => this.filterFn()(item, searchText));
700
+ }
701
+ else {
702
+ filteredListWidgetItems = value ? [...value] : undefined;
703
+ }
704
+ if (sort) {
705
+ const factor = sort === 'ASC' ? 1 : -1;
706
+ filteredListWidgetItems = filteredListWidgetItems?.sort((a, b) => (this.compareFn()(a, b) ?? 0) * factor);
707
+ }
708
+ return filteredListWidgetItems;
709
+ });
710
+ searchText = model('');
711
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiListWidgetBodyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
712
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", 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"], outputs: ["searchChange"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
713
+ }
714
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiListWidgetBodyComponent, decorators: [{
715
+ type: Component,
716
+ args: [{ selector: 'si-list-widget-body', imports: [SiListWidgetItemComponent, SiSearchBarComponent, SiTranslateModule, FormsModule], host: { class: '' }, 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"] }]
717
+ }] });
718
+
719
+ /**
720
+ * Copyright (c) Siemens 2016 - 2025
721
+ * SPDX-License-Identifier: MIT
722
+ */
723
+ /**
724
+ * The `<si-list-widget>` supports an easy composition of links and actions
725
+ * with support for skeleton loading indicator, wrapped in a card.
726
+ */
727
+ class SiListWidgetComponent extends SiWidgetBaseComponent {
728
+ icons = addIcons({ elementRight2, elementSortDown, elementSortUp });
729
+ /** List widget heading. */
730
+ heading = input();
731
+ /** Optional footer link for the list widget */
732
+ link = input();
733
+ /**
734
+ * label for the "search placeholder" name
735
+ *
736
+ * @defaultValue
737
+ * ```
738
+ * $localize`:@@SI_LIST_WIDGET.SEARCH_PLACEHOLDER:Search...`
739
+ * ```
740
+ */
741
+ searchPlaceholderLabel = input($localize `:@@SI_LIST_WIDGET.SEARCH_PLACEHOLDER:Search...`);
742
+ /**
743
+ * @defaultValue
744
+ * ```
745
+ * $localize`:@@SI_LIST_WIDGET.SORT_ASCENDING:Sort ascending`
746
+ * ```
747
+ */
748
+ sortAscendingLabel = input($localize `:@@SI_LIST_WIDGET.SORT_ASCENDING:Sort ascending`);
749
+ /**
750
+ * @defaultValue
751
+ * ```
752
+ * $localize`:@@SI_LIST_WIDGET.SORT_DESCENDING:Sort descending`
753
+ * ```
754
+ */
755
+ sortDescendingLabel = input($localize `:@@SI_LIST_WIDGET.SORT_DESCENDING:Sort descending`);
756
+ /**
757
+ * Set `ASC` of ascending sorting, `DSC` for descending sorting and `undefined` for no sorting.
758
+ */
759
+ sort = model();
760
+ /**
761
+ * Enables the search functionality.
762
+ *
763
+ * @defaultValue false
764
+ */
765
+ search = input(false, { transform: booleanAttribute });
766
+ /**
767
+ * Compare function of for two `SiListWidgetItem`s that is used to sort
768
+ * the array of items. The default compares the item labels by using the
769
+ * string `localeCompare()` function.
770
+ *
771
+ * @param a - first `SiListWidgetItem` of the comparison.
772
+ *
773
+ * @param b - second `SiListWidgetItem` of the comparison.
774
+ *
775
+ * @returns A value `< 0` if `a` is smaller, `> 0` if `b` is smaller, otherwise `0`.
776
+ *
777
+ * @defaultValue
778
+ * ```
779
+ * (
780
+ * a: SiListWidgetItem,
781
+ * b: SiListWidgetItem
782
+ * ) => {
783
+ * const aLabel = typeof a.label === 'object' ? a.label.title! : a.label;
784
+ * const bLabel = typeof b.label === 'object' ? b.label.title! : b.label;
785
+ * return aLabel.localeCompare(bLabel);
786
+ * }
787
+ * ```
788
+ */
789
+ compareFn = input((a, b) => {
790
+ const aLabel = typeof a.label === 'object' ? a.label.title : a.label;
791
+ const bLabel = typeof b.label === 'object' ? b.label.title : b.label;
792
+ return aLabel.localeCompare(bLabel);
793
+ });
794
+ /**
795
+ * Filter function that is used to filter down the list items when the user enters
796
+ * a term in the search bar. Default function.
797
+ *
798
+ * @param item - The item be checked if it matches the searchTerm.
799
+ *
800
+ * @param searchTerm - The string the user typed in the search bar.
801
+ *
802
+ * @returns `true` if the `searchTerm` matches the `item` and the `item` shall be kept in the list.
803
+ *
804
+ * @defaultValue
805
+ * ```
806
+ * (
807
+ * item: SiListWidgetItem,
808
+ * searchTerm: string
809
+ * ) => {
810
+ * const aLabel = typeof item.label === 'object' ? item.label.title! : item.label;
811
+ * return aLabel.toLowerCase().includes(searchTerm.toLowerCase());
812
+ * }
813
+ * ```
814
+ */
815
+ filterFn = input((item, searchTerm) => {
816
+ const aLabel = typeof item.label === 'object' ? item.label.title : item.label;
817
+ return aLabel.toLowerCase().includes(searchTerm.toLowerCase());
818
+ });
819
+ /**
820
+ * The number of skeleton progress indication rows.
821
+ *
822
+ * @defaultValue 6
823
+ */
824
+ numberOfLinks = input(6);
825
+ /**
826
+ * Optional accent line
827
+ */
828
+ accentLine = input();
829
+ accentClass = computed(() => {
830
+ const accentLine = this.accentLine();
831
+ return accentLine ? 'accent-' + accentLine : '';
832
+ });
833
+ /** The menu item array used to display the sort button. */
834
+ sortAction = computed(() => {
835
+ const sortAction = [
836
+ {
837
+ label: this.sortDescendingLabel(),
838
+ type: 'action',
839
+ icon: this.icons.elementSortUp,
840
+ iconOnly: true,
841
+ action: () => this.doSort()
842
+ }
843
+ ];
844
+ if (this.sort() === 'ASC') {
845
+ sortAction[0].label = this.sortDescendingLabel();
846
+ sortAction[0].icon = this.icons.elementSortUp;
847
+ }
848
+ else {
849
+ sortAction[0].label = this.sortAscendingLabel();
850
+ sortAction[0].icon = this.icons.elementSortDown;
851
+ }
852
+ return sortAction;
853
+ });
854
+ doSort() {
855
+ if (this.sort() === 'ASC') {
856
+ this.sort.set('DSC');
857
+ }
858
+ else {
859
+ this.sort.set('ASC');
860
+ }
861
+ }
862
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiListWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
863
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiListWidgetComponent, isStandalone: true, selector: "si-list-widget", inputs: { heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholderLabel: { classPropertyName: "searchPlaceholderLabel", publicName: "searchPlaceholderLabel", isSignal: true, isRequired: false, transformFunction: null }, sortAscendingLabel: { classPropertyName: "sortAscendingLabel", publicName: "sortAscendingLabel", isSignal: true, isRequired: false, transformFunction: null }, sortDescendingLabel: { classPropertyName: "sortDescendingLabel", publicName: "sortDescendingLabel", 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 }, accentLine: { classPropertyName: "accentLine", publicName: "accentLine", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sort: "sortChange" }, host: { classAttribute: "si-list-widget" }, usesInheritance: true, ngImport: i0, template: "<si-card\n class=\"h-100\"\n actionBarViewType=\"expanded\"\n [ngClass]=\"accentClass()\"\n [heading]=\"heading()\"\n [primaryActions]=\"sort() ? sortAction() : []\"\n>\n <si-list-widget-body\n body\n [compareFn]=\"compareFn()\"\n [filterFn]=\"filterFn()\"\n [numberOfLinks]=\"numberOfLinks()\"\n [searchPlaceholderLabel]=\"searchPlaceholderLabel()\"\n [search]=\"search()\"\n [sort]=\"sort()\"\n [value]=\"value()\"\n [showLoadingIndicator]=\"showLoadingIndicator()\"\n >\n <ng-content select=\"[empty-state]\" empty-state />\n </si-list-widget-body>\n\n @let linkValue = link();\n @if (linkValue) {\n <div class=\"card-footer\" footer>\n @if (!linkValue.action) {\n <a [siLink]=\"linkValue\">\n {{ linkValue.title }}\n <si-icon-next class=\"link-icon link-end flip-rtl\" [icon]=\"icons.elementRight2\" />\n </a>\n } @else {\n <button type=\"button\" class=\"btn btn-link\" [siLink]=\"linkValue\"\n >{{ linkValue.title }}\n </button>\n }\n </div>\n }\n</si-card>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SiCardComponent, selector: "si-card", inputs: ["heading", "primaryActions", "secondaryActions", "actionParam", "actionBarViewType", "actionBarTitle", "imgSrc", "imgAlt", "imgDir", "imgObjectFit", "imgObjectPosition"] }, { kind: "component", type: SiIconNextComponent, selector: "si-icon-next", inputs: ["icon"] }, { kind: "directive", type: SiLinkDirective, selector: "[siLink]", inputs: ["siLink", "siLinkDefaultTarget", "actionParam", "activeClass", "exactMatch", "ariaCurrent"], outputs: ["activeChange"], exportAs: ["siLink"] }, { kind: "component", type: SiListWidgetBodyComponent, selector: "si-list-widget-body", inputs: ["link", "searchPlaceholderLabel", "sort", "search", "compareFn", "filterFn", "numberOfLinks", "searchText"], outputs: ["searchTextChange"] }, { kind: "ngmodule", type: SiTranslateModule }] });
864
+ }
865
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiListWidgetComponent, decorators: [{
866
+ type: Component,
867
+ args: [{ selector: 'si-list-widget', imports: [
868
+ NgClass,
869
+ SiCardComponent,
870
+ SiIconNextComponent,
871
+ SiLinkDirective,
872
+ SiListWidgetBodyComponent,
873
+ SiTranslateModule
874
+ ], host: { class: 'si-list-widget' }, template: "<si-card\n class=\"h-100\"\n actionBarViewType=\"expanded\"\n [ngClass]=\"accentClass()\"\n [heading]=\"heading()\"\n [primaryActions]=\"sort() ? sortAction() : []\"\n>\n <si-list-widget-body\n body\n [compareFn]=\"compareFn()\"\n [filterFn]=\"filterFn()\"\n [numberOfLinks]=\"numberOfLinks()\"\n [searchPlaceholderLabel]=\"searchPlaceholderLabel()\"\n [search]=\"search()\"\n [sort]=\"sort()\"\n [value]=\"value()\"\n [showLoadingIndicator]=\"showLoadingIndicator()\"\n >\n <ng-content select=\"[empty-state]\" empty-state />\n </si-list-widget-body>\n\n @let linkValue = link();\n @if (linkValue) {\n <div class=\"card-footer\" footer>\n @if (!linkValue.action) {\n <a [siLink]=\"linkValue\">\n {{ linkValue.title }}\n <si-icon-next class=\"link-icon link-end flip-rtl\" [icon]=\"icons.elementRight2\" />\n </a>\n } @else {\n <button type=\"button\" class=\"btn btn-link\" [siLink]=\"linkValue\"\n >{{ linkValue.title }}\n </button>\n }\n </div>\n }\n</si-card>\n" }]
875
+ }] });
876
+
877
+ /**
878
+ * Copyright (c) Siemens 2016 - 2025
879
+ * SPDX-License-Identifier: MIT
880
+ */
881
+ /**
882
+ * The items of the `<si-timeline-widget>`.
883
+ */
884
+ class SiTimelineWidgetItemComponent extends SiWidgetBaseComponent {
885
+ /**
886
+ * Whether to show or hide the description row during skeleton progress indication.
887
+ *
888
+ * @defaultValue `true`
889
+ */
890
+ showDescription = input(true);
891
+ activatedRoute = inject(ActivatedRoute, { optional: true });
892
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTimelineWidgetItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
893
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", 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 <si-icon\n [icon]=\"valueObject.icon\"\n [color]=\"valueObject.iconColor\"\n [stackedIcon]=\"valueObject.stackedIcon\"\n [stackedColor]=\"valueObject.stackedIconColor\"\n [alt]=\"valueObject.iconAlt\"\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-title-2\">{{ valueObject.title | translate }}</span>\n @if (valueObject.description) {\n <span class=\"si-body-2 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 [ngClass]=\"action.customClass ?? 'btn-tertiary'\"\n [class.btn-circle]=\"action.iconOnly\"\n [class.btn-sm]=\"action.iconOnly\"\n (click)=\"action.action(action)\"\n >\n @if (action.icon) {\n <i class=\"icon\" [ngClass]=\"action.icon\"></i>\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\"\n [class.btn-circle]=\"action.iconOnly\"\n [class.btn-sm]=\"action.iconOnly\"\n >\n @if (action.icon) {\n <i class=\"icon\" [ngClass]=\"action.icon\"></i>\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\"\n [class.btn-circle]=\"action.iconOnly\"\n [class.btn-sm]=\"action.iconOnly\"\n >\n @if (action.icon) {\n <i class=\"icon\" [ngClass]=\"action.icon\"></i>\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-circle btn-sm btn-tertiary element-options-vertical\"\n [attr.aria-label]=\"valueObject.title + ' dropdown'\"\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", "color", "stackedIcon", "stackedColor", "alt", "size"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: i2$1.SiMenuFactoryComponent, selector: "si-menu-factory", inputs: ["items", "actionParam"] }, { kind: "directive", type: CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }] });
894
+ }
895
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTimelineWidgetItemComponent, decorators: [{
896
+ type: Component,
897
+ args: [{ selector: 'si-timeline-widget-item', imports: [
898
+ SiIconComponent,
899
+ SiTranslateModule,
900
+ NgClass,
901
+ A11yModule,
902
+ RouterLink,
903
+ SiMenuModule,
904
+ CdkMenuTrigger
905
+ ], host: {
906
+ role: 'listitem'
907
+ }, 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 <si-icon\n [icon]=\"valueObject.icon\"\n [color]=\"valueObject.iconColor\"\n [stackedIcon]=\"valueObject.stackedIcon\"\n [stackedColor]=\"valueObject.stackedIconColor\"\n [alt]=\"valueObject.iconAlt\"\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-title-2\">{{ valueObject.title | translate }}</span>\n @if (valueObject.description) {\n <span class=\"si-body-2 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 [ngClass]=\"action.customClass ?? 'btn-tertiary'\"\n [class.btn-circle]=\"action.iconOnly\"\n [class.btn-sm]=\"action.iconOnly\"\n (click)=\"action.action(action)\"\n >\n @if (action.icon) {\n <i class=\"icon\" [ngClass]=\"action.icon\"></i>\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\"\n [class.btn-circle]=\"action.iconOnly\"\n [class.btn-sm]=\"action.iconOnly\"\n >\n @if (action.icon) {\n <i class=\"icon\" [ngClass]=\"action.icon\"></i>\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\"\n [class.btn-circle]=\"action.iconOnly\"\n [class.btn-sm]=\"action.iconOnly\"\n >\n @if (action.icon) {\n <i class=\"icon\" [ngClass]=\"action.icon\"></i>\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-circle btn-sm btn-tertiary element-options-vertical\"\n [attr.aria-label]=\"valueObject.title + ' dropdown'\"\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" }]
908
+ }] });
909
+
910
+ /**
911
+ * Copyright (c) Siemens 2016 - 2025
912
+ * SPDX-License-Identifier: MIT
913
+ */
914
+ class SiTimelineWidgetBodyComponent extends SiWidgetBaseComponent {
915
+ /**
916
+ * Number of skeleton progress indication items.
917
+ *
918
+ * @defaultValue 4
919
+ */
920
+ numberOfItems = input(4);
921
+ /**
922
+ * Whether to show or hide the description row during skeleton progress indication.
923
+ *
924
+ * @defaultValue `true`
925
+ */
926
+ showDescription = input(true);
927
+ /** Used to display the defined number of ghost items */
928
+ ghosts = computed(() => {
929
+ return new Array(this.numberOfItems() ?? 4);
930
+ });
931
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTimelineWidgetBodyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
932
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", 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"] }] });
933
+ }
934
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTimelineWidgetBodyComponent, decorators: [{
935
+ type: Component,
936
+ 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"] }]
937
+ }] });
938
+
939
+ /**
940
+ * Copyright (c) Siemens 2016 - 2025
941
+ * SPDX-License-Identifier: MIT
942
+ */
943
+ class SiTimelineWidgetComponent extends SiWidgetBaseComponent {
944
+ /**
945
+ * Timeline widget header text.
946
+ */
947
+ heading = input();
948
+ /**
949
+ * Input list of primary action items. Supports up to **4** actions and omits additional ones.
950
+ *
951
+ * @defaultValue []
952
+ */
953
+ primaryActions = input([]);
954
+ /**
955
+ * Input list of secondary action items.
956
+ *
957
+ * @defaultValue []
958
+ */
959
+ secondaryActions = input([]);
960
+ /**
961
+ * Link that leads the user to more information
962
+ * or triggers and action. The `link.title` is displayed.
963
+ * The title will be translated.
964
+ */
965
+ link = input();
966
+ /**
967
+ * Number of skeleton progress indication items.
968
+ *
969
+ * @defaultValue 4
970
+ */
971
+ numberOfItems = input(4);
972
+ /**
973
+ * Whether to show or hide the description row during skeleton progress indication.
974
+ *
975
+ * @defaultValue `true`
976
+ */
977
+ showDescription = input(true);
978
+ /**
979
+ * Optional accent line
980
+ */
981
+ accentLine = input();
982
+ accentClass = computed(() => {
983
+ const accentLine = this.accentLine();
984
+ return accentLine ? 'accent-' + accentLine : '';
985
+ });
986
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTimelineWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
987
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiTimelineWidgetComponent, isStandalone: true, selector: "si-timeline-widget", inputs: { heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: false, transformFunction: null }, primaryActions: { classPropertyName: "primaryActions", publicName: "primaryActions", isSignal: true, isRequired: false, transformFunction: null }, secondaryActions: { classPropertyName: "secondaryActions", publicName: "secondaryActions", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, numberOfItems: { classPropertyName: "numberOfItems", publicName: "numberOfItems", isSignal: true, isRequired: false, transformFunction: null }, showDescription: { classPropertyName: "showDescription", publicName: "showDescription", isSignal: true, isRequired: false, transformFunction: null }, accentLine: { classPropertyName: "accentLine", publicName: "accentLine", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<si-card\n class=\"h-100\"\n [ngClass]=\"accentClass()\"\n [heading]=\"heading()\"\n [primaryActions]=\"primaryActions()\"\n [secondaryActions]=\"secondaryActions()\"\n>\n <si-timeline-widget-body\n body\n [value]=\"value()\"\n [showDescription]=\"showDescription()\"\n [numberOfItems]=\"numberOfItems()\"\n [class.pb-6]=\"!link()\"\n [showLoadingIndicator]=\"showLoadingIndicator()\"\n >\n <ng-content select=\"[empty-state]\" empty-state />\n </si-timeline-widget-body>\n @let linkValue = link();\n @if (linkValue) {\n <div class=\"card-footer\" footer>\n @if (!linkValue.action) {\n <a [siLink]=\"linkValue\">\n {{ linkValue.title }}\n <i class=\"link-icon link-end element-right-2 flip-rtl\"></i>\n </a>\n } @else {\n <button type=\"button\" class=\"btn btn-link\" [siLink]=\"linkValue\">{{\n linkValue.title\n }}</button>\n }\n </div>\n }\n</si-card>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: SiLinkDirective, selector: "[siLink]", inputs: ["siLink", "siLinkDefaultTarget", "actionParam", "activeClass", "exactMatch", "ariaCurrent"], outputs: ["activeChange"], exportAs: ["siLink"] }, { kind: "component", type: SiCardComponent, selector: "si-card", inputs: ["heading", "primaryActions", "secondaryActions", "actionParam", "actionBarViewType", "actionBarTitle", "imgSrc", "imgAlt", "imgDir", "imgObjectFit", "imgObjectPosition"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "component", type: SiTimelineWidgetBodyComponent, selector: "si-timeline-widget-body", inputs: ["numberOfItems", "showDescription"] }] });
988
+ }
989
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTimelineWidgetComponent, decorators: [{
990
+ type: Component,
991
+ args: [{ selector: 'si-timeline-widget', imports: [
992
+ NgClass,
993
+ SiLinkDirective,
994
+ SiCardComponent,
995
+ SiTranslateModule,
996
+ SiTimelineWidgetBodyComponent
997
+ ], template: "<si-card\n class=\"h-100\"\n [ngClass]=\"accentClass()\"\n [heading]=\"heading()\"\n [primaryActions]=\"primaryActions()\"\n [secondaryActions]=\"secondaryActions()\"\n>\n <si-timeline-widget-body\n body\n [value]=\"value()\"\n [showDescription]=\"showDescription()\"\n [numberOfItems]=\"numberOfItems()\"\n [class.pb-6]=\"!link()\"\n [showLoadingIndicator]=\"showLoadingIndicator()\"\n >\n <ng-content select=\"[empty-state]\" empty-state />\n </si-timeline-widget-body>\n @let linkValue = link();\n @if (linkValue) {\n <div class=\"card-footer\" footer>\n @if (!linkValue.action) {\n <a [siLink]=\"linkValue\">\n {{ linkValue.title }}\n <i class=\"link-icon link-end element-right-2 flip-rtl\"></i>\n </a>\n } @else {\n <button type=\"button\" class=\"btn btn-link\" [siLink]=\"linkValue\">{{\n linkValue.title\n }}</button>\n }\n </div>\n }\n</si-card>\n" }]
998
+ }] });
999
+
1000
+ /**
1001
+ * Copyright (c) Siemens 2016 - 2025
1002
+ * SPDX-License-Identifier: MIT
1003
+ */
1004
+ /**
1005
+ * The body of the `<si-value-widget>`. Useful for compositions.
1006
+ */
1007
+ class SiValueWidgetBodyComponent extends SiWidgetBaseComponent {
1008
+ /**
1009
+ * The unit of the value (e.g. kWh or users). Only visible if `value` is available.
1010
+ */
1011
+ unit = input();
1012
+ /**
1013
+ * The element icon name. Only visible if `value` is available.
1014
+ */
1015
+ icon = input();
1016
+ /**
1017
+ * Show a status icon instead of the {@link icon}.
1018
+ */
1019
+ status = input();
1020
+ /**
1021
+ * Short description of the value. A description is mandatory
1022
+ * to show an icon. Only visible if `value` is available.
1023
+ */
1024
+ description = input();
1025
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiValueWidgetBodyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1026
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiValueWidgetBodyComponent, isStandalone: true, selector: "si-value-widget-body", inputs: { unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "@if (!showLoadingIndicator()) {\n @if (value()) {\n <span class=\"si-value-widget-value\">{{ value() | translate }}</span>\n <span class=\"si-value-widget-unit\">{{ unit() | translate }}</span>\n @if (description()) {\n <div class=\"si-value-widget-description\">\n @let statusValue = status();\n @let iconValue = icon();\n @if (statusValue) {\n <si-status-icon class=\"icon\" [status]=\"statusValue\" />\n } @else if (iconValue) {\n <si-icon-next class=\"icon\" [icon]=\"iconValue\" />\n }\n <span>{{ description() | translate }}</span>\n </div>\n }\n }\n} @else {\n <span class=\"si-value-widget-value w-100\">\n <div class=\"si-value-widget-value-skeleton\"></div>\n </span>\n <div class=\"si-value-widget-description si-skeleton w-100\"></div>\n}\n", dependencies: [{ kind: "component", type: SiIconNextComponent, selector: "si-icon-next", inputs: ["icon"] }, { kind: "component", type: SiStatusIconComponent, selector: "si-status-icon", inputs: ["status"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }] });
1027
+ }
1028
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiValueWidgetBodyComponent, decorators: [{
1029
+ type: Component,
1030
+ args: [{ selector: 'si-value-widget-body', imports: [SiIconNextComponent, SiStatusIconComponent, SiTranslateModule], template: "@if (!showLoadingIndicator()) {\n @if (value()) {\n <span class=\"si-value-widget-value\">{{ value() | translate }}</span>\n <span class=\"si-value-widget-unit\">{{ unit() | translate }}</span>\n @if (description()) {\n <div class=\"si-value-widget-description\">\n @let statusValue = status();\n @let iconValue = icon();\n @if (statusValue) {\n <si-status-icon class=\"icon\" [status]=\"statusValue\" />\n } @else if (iconValue) {\n <si-icon-next class=\"icon\" [icon]=\"iconValue\" />\n }\n <span>{{ description() | translate }}</span>\n </div>\n }\n }\n} @else {\n <span class=\"si-value-widget-value w-100\">\n <div class=\"si-value-widget-value-skeleton\"></div>\n </span>\n <div class=\"si-value-widget-description si-skeleton w-100\"></div>\n}\n" }]
1031
+ }] });
1032
+
1033
+ /**
1034
+ * Copyright (c) Siemens 2016 - 2025
1035
+ * SPDX-License-Identifier: MIT
1036
+ */
1037
+ /**
1038
+ * Is a dynamic UI component that not only displays information, but also includes
1039
+ * embedded actions which the user can interact with to perform tasks directly
1040
+ * related to the card's content. Actions might include editing settings,
1041
+ * initiating processes, or deleting resources.
1042
+ *
1043
+ * The actionable widget turns data representation into an interactive hub,
1044
+ * streamlining the user's tasks and decisions associated with the card's content.
1045
+ *
1046
+ * This component is a wrapper using the `.si-value-widget` CSS classes and the
1047
+ * `<si-card>` component. For more configuration options, use the CSS classes directly.
1048
+ */
1049
+ class SiValueWidgetComponent {
1050
+ /**
1051
+ * Value widget header text.
1052
+ */
1053
+ heading = input();
1054
+ /**
1055
+ * Input list of primary action items. Supports up to **4** actions and omits additional ones.
1056
+ *
1057
+ * @defaultValue []
1058
+ */
1059
+ primaryActions = input([]);
1060
+ /**
1061
+ * Input list of secondary action items.
1062
+ *
1063
+ * @defaultValue []
1064
+ */
1065
+ secondaryActions = input([]);
1066
+ /**
1067
+ * The main value to be displayed. If no value is set,
1068
+ * the skeleton indicates the loading of the value. Disable
1069
+ * the automatic loading mechanism by setting `SiValueWidgetComponent.disableAutoLoadingIndicator`.
1070
+ */
1071
+ value = input();
1072
+ /**
1073
+ * The unit of the value (e.g. kWh or users). Only visible if `value` is available.
1074
+ */
1075
+ unit = input();
1076
+ /**
1077
+ * The element icon name. Only visible if `value` is available.
1078
+ */
1079
+ icon = input();
1080
+ /**
1081
+ * Show a status icon instead of the {@link icon}.
1082
+ */
1083
+ status = input();
1084
+ /**
1085
+ * Short description of the value. A description is mandatory
1086
+ * to show an icon. Only visible if `value` is available.
1087
+ */
1088
+ description = input();
1089
+ /**
1090
+ * Link that leads the user to more information
1091
+ * or triggers and action. The `link.title` is displayed.
1092
+ * The title will be translated.
1093
+ */
1094
+ link = input();
1095
+ /**
1096
+ * Option to disable automatic start of skeleton loading indication.
1097
+ *
1098
+ * @defaultValue false
1099
+ */
1100
+ disableAutoLoadingIndicator = input(false, { transform: booleanAttribute });
1101
+ /**
1102
+ * Input to start and stop the skeleton loading indication.
1103
+ *
1104
+ * @defaultValue false
1105
+ */
1106
+ showLoadingIndicator = input(false, { transform: booleanAttribute });
1107
+ /**
1108
+ * Initial delay time in milliseconds before enabling loading indicator.
1109
+ * Only used once initially during construction.
1110
+ *
1111
+ * @defaultValue 300
1112
+ */
1113
+ initialLoadingIndicatorDebounceTime = input(300);
1114
+ /**
1115
+ * Image source for the card.
1116
+ */
1117
+ imgSrc = input();
1118
+ /**
1119
+ * Alt text for a provided image.
1120
+ */
1121
+ imgAlt = input();
1122
+ /**
1123
+ * Defines if an image is placed on top or start (left) of the card.
1124
+ *
1125
+ * @defaultValue 'vertical'
1126
+ */
1127
+ imgDir = input('vertical');
1128
+ /**
1129
+ * Sets the image [object-fit](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) CSS property.
1130
+ *
1131
+ * @defaultValue 'scale-down'
1132
+ */
1133
+ imgObjectFit = input('scale-down');
1134
+ /**
1135
+ * Sets the image [object-position](https://developer.mozilla.org/en-US/docs/Web/CSS/object-position) CSS property.
1136
+ */
1137
+ imgObjectPosition = input();
1138
+ /**
1139
+ * Optional accent line
1140
+ */
1141
+ accentLine = input();
1142
+ accentClass = computed(() => {
1143
+ const accentLine = this.accentLine();
1144
+ return accentLine ? 'accent-' + accentLine : '';
1145
+ });
1146
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiValueWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1147
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiValueWidgetComponent, isStandalone: true, selector: "si-value-widget", inputs: { heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: false, transformFunction: null }, primaryActions: { classPropertyName: "primaryActions", publicName: "primaryActions", isSignal: true, isRequired: false, transformFunction: null }, secondaryActions: { classPropertyName: "secondaryActions", publicName: "secondaryActions", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, disableAutoLoadingIndicator: { classPropertyName: "disableAutoLoadingIndicator", publicName: "disableAutoLoadingIndicator", isSignal: true, isRequired: false, transformFunction: null }, showLoadingIndicator: { classPropertyName: "showLoadingIndicator", publicName: "showLoadingIndicator", isSignal: true, isRequired: false, transformFunction: null }, initialLoadingIndicatorDebounceTime: { classPropertyName: "initialLoadingIndicatorDebounceTime", publicName: "initialLoadingIndicatorDebounceTime", isSignal: true, isRequired: false, transformFunction: null }, imgSrc: { classPropertyName: "imgSrc", publicName: "imgSrc", isSignal: true, isRequired: false, transformFunction: null }, imgAlt: { classPropertyName: "imgAlt", publicName: "imgAlt", isSignal: true, isRequired: false, transformFunction: null }, imgDir: { classPropertyName: "imgDir", publicName: "imgDir", isSignal: true, isRequired: false, transformFunction: null }, imgObjectFit: { classPropertyName: "imgObjectFit", publicName: "imgObjectFit", isSignal: true, isRequired: false, transformFunction: null }, imgObjectPosition: { classPropertyName: "imgObjectPosition", publicName: "imgObjectPosition", isSignal: true, isRequired: false, transformFunction: null }, accentLine: { classPropertyName: "accentLine", publicName: "accentLine", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<si-card\n class=\"h-100\"\n [ngClass]=\"accentClass()\"\n [heading]=\"heading()\"\n [primaryActions]=\"primaryActions()\"\n [secondaryActions]=\"secondaryActions()\"\n [imgSrc]=\"imgSrc()\"\n [imgDir]=\"imgDir()\"\n [imgAlt]=\"imgAlt()\"\n [imgObjectFit]=\"imgObjectFit()\"\n [imgObjectPosition]=\"imgObjectPosition()\"\n>\n <div class=\"card-body\" body>\n <si-value-widget-body\n [value]=\"value()\"\n [unit]=\"unit()\"\n [icon]=\"icon()\"\n [status]=\"status()\"\n [description]=\"description()\"\n [disableAutoLoadingIndicator]=\"disableAutoLoadingIndicator()\"\n [showLoadingIndicator]=\"showLoadingIndicator()\"\n [initialLoadingIndicatorDebounceTime]=\"initialLoadingIndicatorDebounceTime()\"\n />\n </div>\n @let linkObject = link();\n @if (linkObject) {\n <div class=\"card-footer\" footer>\n <a [siLink]=\"linkObject\">{{ linkObject.title | translate }}</a>\n </div>\n }\n</si-card>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SiCardComponent, selector: "si-card", inputs: ["heading", "primaryActions", "secondaryActions", "actionParam", "actionBarViewType", "actionBarTitle", "imgSrc", "imgAlt", "imgDir", "imgObjectFit", "imgObjectPosition"] }, { kind: "directive", type: SiLinkDirective, selector: "[siLink]", inputs: ["siLink", "siLinkDefaultTarget", "actionParam", "activeClass", "exactMatch", "ariaCurrent"], outputs: ["activeChange"], exportAs: ["siLink"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }, { kind: "component", type: SiValueWidgetBodyComponent, selector: "si-value-widget-body", inputs: ["unit", "icon", "status", "description"] }] });
1148
+ }
1149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiValueWidgetComponent, decorators: [{
1150
+ type: Component,
1151
+ args: [{ selector: 'si-value-widget', imports: [
1152
+ NgClass,
1153
+ SiCardComponent,
1154
+ SiLinkDirective,
1155
+ SiTranslateModule,
1156
+ SiValueWidgetBodyComponent
1157
+ ], template: "<si-card\n class=\"h-100\"\n [ngClass]=\"accentClass()\"\n [heading]=\"heading()\"\n [primaryActions]=\"primaryActions()\"\n [secondaryActions]=\"secondaryActions()\"\n [imgSrc]=\"imgSrc()\"\n [imgDir]=\"imgDir()\"\n [imgAlt]=\"imgAlt()\"\n [imgObjectFit]=\"imgObjectFit()\"\n [imgObjectPosition]=\"imgObjectPosition()\"\n>\n <div class=\"card-body\" body>\n <si-value-widget-body\n [value]=\"value()\"\n [unit]=\"unit()\"\n [icon]=\"icon()\"\n [status]=\"status()\"\n [description]=\"description()\"\n [disableAutoLoadingIndicator]=\"disableAutoLoadingIndicator()\"\n [showLoadingIndicator]=\"showLoadingIndicator()\"\n [initialLoadingIndicatorDebounceTime]=\"initialLoadingIndicatorDebounceTime()\"\n />\n </div>\n @let linkObject = link();\n @if (linkObject) {\n <div class=\"card-footer\" footer>\n <a [siLink]=\"linkObject\">{{ linkObject.title | translate }}</a>\n </div>\n }\n</si-card>\n" }]
1158
+ }] });
1159
+
1160
+ /**
1161
+ * Copyright (c) Siemens 2016 - 2025
1162
+ * SPDX-License-Identifier: MIT
1163
+ */
1164
+
1165
+ /**
1166
+ * Generated bundle index. Do not edit.
1167
+ */
1168
+
1169
+ export { SiDashboardCardComponent, SiDashboardComponent, SiDashboardModule, SiDashboardService, SiLinkWidgetComponent, SiListWidgetBodyComponent, SiListWidgetComponent, SiListWidgetItemComponent, SiTimelineWidgetBodyComponent, SiTimelineWidgetComponent, SiTimelineWidgetItemComponent, SiValueWidgetBodyComponent, SiValueWidgetComponent };
1170
+ //# sourceMappingURL=siemens-element-ng-dashboard.mjs.map