@siemens/element-ng 47.5.0 → 47.7.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 (444) hide show
  1. package/README.md +4 -1
  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 +8 -0
  31. package/breadcrumb-router/package.json +3 -0
  32. package/breadcrumb-router/si-breadcrumb-default-resolver.service.d.ts +23 -0
  33. package/breadcrumb-router/si-breadcrumb-router.component.d.ts +30 -0
  34. package/breadcrumb-router/si-breadcrumb-router.model.d.ts +53 -0
  35. package/breadcrumb-router/si-breadcrumb-router.module.d.ts +7 -0
  36. package/card/index.d.ts +1 -1
  37. package/circle-status/index.d.ts +1 -1
  38. package/color-picker/index.d.ts +1 -1
  39. package/column-selection-dialog/index.d.ts +1 -1
  40. package/column-selection-dialog/si-column-selection-dialog.types.d.ts +1 -1
  41. package/common/decorators/index.d.ts +1 -1
  42. package/common/decorators/webcomponent.decorator.d.ts +1 -1
  43. package/common/helpers/animation.helpers.d.ts +1 -1
  44. package/common/helpers/global-events.helpers.d.ts +1 -1
  45. package/common/helpers/index.d.ts +1 -1
  46. package/common/helpers/overlay-helper.d.ts +1 -1
  47. package/common/helpers/rtl.d.ts +1 -1
  48. package/common/helpers/track-by.helper.d.ts +1 -1
  49. package/common/index.d.ts +1 -1
  50. package/common/models/color-variant.model.d.ts +1 -1
  51. package/common/models/index.d.ts +1 -1
  52. package/common/models/menu.model.d.ts +1 -1
  53. package/common/models/positions.model.d.ts +1 -1
  54. package/common/models/status-type.model.d.ts +1 -1
  55. package/common/services/index.d.ts +1 -1
  56. package/connection-strength/index.d.ts +1 -1
  57. package/content-action-bar/index.d.ts +1 -1
  58. package/content-action-bar/si-content-action-bar.component.d.ts +1 -1
  59. package/content-action-bar/si-content-action-bar.model.d.ts +3 -3
  60. package/copyright-notice/index.d.ts +1 -1
  61. package/copyright-notice/si-copyright-notice.d.ts +1 -1
  62. package/datatable/index.d.ts +1 -1
  63. package/datatable/si-datatable-interaction.directive.d.ts +1 -1
  64. package/date-range-filter/index.d.ts +1 -1
  65. package/date-range-filter/si-date-range-filter.component.d.ts +5 -1
  66. package/date-range-filter/si-date-range-filter.types.d.ts +1 -1
  67. package/date-range-filter/si-relative-date.component.d.ts +1 -1
  68. package/datepicker/components/si-calendar-date-cell.directive.d.ts +1 -1
  69. package/datepicker/components/si-initial-focus.component.d.ts +1 -1
  70. package/datepicker/index.d.ts +1 -1
  71. package/datepicker/si-datepicker.directive.d.ts +1 -1
  72. package/datepicker/si-datepicker.model.d.ts +1 -1
  73. package/datepicker/si-timepicker.component.d.ts +1 -1
  74. package/electron-titlebar/electron.helpers.d.ts +1 -1
  75. package/electron-titlebar/index.d.ts +1 -1
  76. package/empty-state/index.d.ts +1 -1
  77. package/fesm2022/siemens-element-ng-about.mjs +157 -0
  78. package/fesm2022/siemens-element-ng-about.mjs.map +1 -0
  79. package/fesm2022/siemens-element-ng-accordion.mjs +11 -12
  80. package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -1
  81. package/fesm2022/siemens-element-ng-action-modal.mjs +15 -16
  82. package/fesm2022/siemens-element-ng-action-modal.mjs.map +1 -1
  83. package/fesm2022/siemens-element-ng-application-header.mjs +29 -30
  84. package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
  85. package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs +7 -7
  86. package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs.map +1 -1
  87. package/fesm2022/siemens-element-ng-autocomplete.mjs +5 -5
  88. package/fesm2022/siemens-element-ng-autocomplete.mjs.map +1 -1
  89. package/fesm2022/siemens-element-ng-avatar.mjs +4 -4
  90. package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -1
  91. package/fesm2022/siemens-element-ng-badge.mjs +2 -2
  92. package/fesm2022/siemens-element-ng-badge.mjs.map +1 -1
  93. package/fesm2022/siemens-element-ng-breadcrumb-router.mjs +263 -0
  94. package/fesm2022/siemens-element-ng-breadcrumb-router.mjs.map +1 -0
  95. package/fesm2022/siemens-element-ng-breadcrumb.mjs +8 -9
  96. package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
  97. package/fesm2022/siemens-element-ng-card.mjs +7 -8
  98. package/fesm2022/siemens-element-ng-card.mjs.map +1 -1
  99. package/fesm2022/siemens-element-ng-circle-status.mjs +6 -7
  100. package/fesm2022/siemens-element-ng-circle-status.mjs.map +1 -1
  101. package/fesm2022/siemens-element-ng-color-picker.mjs +6 -7
  102. package/fesm2022/siemens-element-ng-color-picker.mjs.map +1 -1
  103. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs +11 -12
  104. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs.map +1 -1
  105. package/fesm2022/siemens-element-ng-common.mjs +14 -14
  106. package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
  107. package/fesm2022/siemens-element-ng-connection-strength.mjs +3 -3
  108. package/fesm2022/siemens-element-ng-connection-strength.mjs.map +1 -1
  109. package/fesm2022/siemens-element-ng-content-action-bar.mjs +9 -10
  110. package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -1
  111. package/fesm2022/siemens-element-ng-copyright-notice.mjs +4 -4
  112. package/fesm2022/siemens-element-ng-copyright-notice.mjs.map +1 -1
  113. package/fesm2022/siemens-element-ng-datatable.mjs +2 -2
  114. package/fesm2022/siemens-element-ng-datatable.mjs.map +1 -1
  115. package/fesm2022/siemens-element-ng-date-range-filter.mjs +33 -14
  116. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
  117. package/fesm2022/siemens-element-ng-datepicker.mjs +48 -54
  118. package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
  119. package/fesm2022/siemens-element-ng-electron-titlebar.mjs +7 -8
  120. package/fesm2022/siemens-element-ng-electron-titlebar.mjs.map +1 -1
  121. package/fesm2022/siemens-element-ng-empty-state.mjs +6 -7
  122. package/fesm2022/siemens-element-ng-empty-state.mjs.map +1 -1
  123. package/fesm2022/siemens-element-ng-file-uploader.mjs +9 -10
  124. package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
  125. package/fesm2022/siemens-element-ng-filter-bar.mjs +10 -11
  126. package/fesm2022/siemens-element-ng-filter-bar.mjs.map +1 -1
  127. package/fesm2022/siemens-element-ng-filtered-search.mjs +19 -20
  128. package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
  129. package/fesm2022/siemens-element-ng-footer.mjs +7 -8
  130. package/fesm2022/siemens-element-ng-footer.mjs.map +1 -1
  131. package/fesm2022/siemens-element-ng-form.mjs +20 -23
  132. package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
  133. package/fesm2022/siemens-element-ng-formly.mjs +48 -55
  134. package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
  135. package/fesm2022/siemens-element-ng-header-dropdown.mjs +8 -9
  136. package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
  137. package/fesm2022/siemens-element-ng-icon-status.mjs +3 -3
  138. package/fesm2022/siemens-element-ng-icon-status.mjs.map +1 -1
  139. package/fesm2022/siemens-element-ng-icon.mjs +22 -37
  140. package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
  141. package/fesm2022/siemens-element-ng-info-page.mjs +5 -6
  142. package/fesm2022/siemens-element-ng-info-page.mjs.map +1 -1
  143. package/fesm2022/siemens-element-ng-inline-notification.mjs +6 -7
  144. package/fesm2022/siemens-element-ng-inline-notification.mjs.map +1 -1
  145. package/fesm2022/siemens-element-ng-ip-input.mjs +4 -4
  146. package/fesm2022/siemens-element-ng-ip-input.mjs.map +1 -1
  147. package/fesm2022/siemens-element-ng-landing-page.mjs +121 -0
  148. package/fesm2022/siemens-element-ng-landing-page.mjs.map +1 -0
  149. package/fesm2022/siemens-element-ng-language-switcher.mjs +9 -10
  150. package/fesm2022/siemens-element-ng-language-switcher.mjs.map +1 -1
  151. package/fesm2022/siemens-element-ng-link.mjs +6 -6
  152. package/fesm2022/siemens-element-ng-link.mjs.map +1 -1
  153. package/fesm2022/siemens-element-ng-list-details.mjs +15 -16
  154. package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -1
  155. package/fesm2022/siemens-element-ng-loading-spinner.mjs +13 -14
  156. package/fesm2022/siemens-element-ng-loading-spinner.mjs.map +1 -1
  157. package/fesm2022/siemens-element-ng-localization.mjs +6 -6
  158. package/fesm2022/siemens-element-ng-localization.mjs.map +1 -1
  159. package/fesm2022/siemens-element-ng-main-detail-container.mjs +268 -0
  160. package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -0
  161. package/fesm2022/siemens-element-ng-menu.mjs +22 -22
  162. package/fesm2022/siemens-element-ng-menu.mjs.map +1 -1
  163. package/fesm2022/siemens-element-ng-modal.mjs +5 -5
  164. package/fesm2022/siemens-element-ng-modal.mjs.map +1 -1
  165. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +801 -0
  166. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -0
  167. package/fesm2022/siemens-element-ng-navbar.mjs +11 -12
  168. package/fesm2022/siemens-element-ng-navbar.mjs.map +1 -1
  169. package/fesm2022/siemens-element-ng-number-input.mjs +7 -8
  170. package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -1
  171. package/fesm2022/siemens-element-ng-pagination.mjs +6 -7
  172. package/fesm2022/siemens-element-ng-pagination.mjs.map +1 -1
  173. package/fesm2022/siemens-element-ng-password-strength.mjs +6 -6
  174. package/fesm2022/siemens-element-ng-password-strength.mjs.map +1 -1
  175. package/fesm2022/siemens-element-ng-password-toggle.mjs +8 -9
  176. package/fesm2022/siemens-element-ng-password-toggle.mjs.map +1 -1
  177. package/fesm2022/siemens-element-ng-phone-number.mjs +16 -17
  178. package/fesm2022/siemens-element-ng-phone-number.mjs.map +1 -1
  179. package/fesm2022/siemens-element-ng-photo-upload.mjs +7 -9
  180. package/fesm2022/siemens-element-ng-photo-upload.mjs.map +1 -1
  181. package/fesm2022/siemens-element-ng-pills-input.mjs +14 -15
  182. package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -1
  183. package/fesm2022/siemens-element-ng-popover-next.mjs +5 -5
  184. package/fesm2022/siemens-element-ng-popover-next.mjs.map +1 -1
  185. package/fesm2022/siemens-element-ng-popover.mjs +3 -3
  186. package/fesm2022/siemens-element-ng-popover.mjs.map +1 -1
  187. package/fesm2022/siemens-element-ng-progressbar.mjs +7 -8
  188. package/fesm2022/siemens-element-ng-progressbar.mjs.map +1 -1
  189. package/fesm2022/siemens-element-ng-resize-observer.mjs +11 -8
  190. package/fesm2022/siemens-element-ng-resize-observer.mjs.map +1 -1
  191. package/fesm2022/siemens-element-ng-result-details-list.mjs +6 -7
  192. package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -1
  193. package/fesm2022/siemens-element-ng-search-bar.mjs +6 -6
  194. package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -1
  195. package/fesm2022/siemens-element-ng-select.mjs +39 -40
  196. package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
  197. package/fesm2022/siemens-element-ng-shadow-root.mjs +2 -2
  198. package/fesm2022/siemens-element-ng-shadow-root.mjs.map +1 -1
  199. package/fesm2022/siemens-element-ng-side-panel.mjs +13 -14
  200. package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
  201. package/fesm2022/siemens-element-ng-skip-links.mjs +7 -8
  202. package/fesm2022/siemens-element-ng-skip-links.mjs.map +1 -1
  203. package/fesm2022/siemens-element-ng-slider.mjs +7 -8
  204. package/fesm2022/siemens-element-ng-slider.mjs.map +1 -1
  205. package/fesm2022/siemens-element-ng-sort-bar.mjs +6 -7
  206. package/fesm2022/siemens-element-ng-sort-bar.mjs.map +1 -1
  207. package/fesm2022/siemens-element-ng-split.mjs +6 -7
  208. package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
  209. package/fesm2022/siemens-element-ng-status-bar.mjs +13 -14
  210. package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
  211. package/fesm2022/siemens-element-ng-status-toggle.mjs +5 -6
  212. package/fesm2022/siemens-element-ng-status-toggle.mjs.map +1 -1
  213. package/fesm2022/siemens-element-ng-summary-chip.mjs +5 -6
  214. package/fesm2022/siemens-element-ng-summary-chip.mjs.map +1 -1
  215. package/fesm2022/siemens-element-ng-summary-widget.mjs +5 -6
  216. package/fesm2022/siemens-element-ng-summary-widget.mjs.map +1 -1
  217. package/fesm2022/siemens-element-ng-system-banner.mjs +5 -6
  218. package/fesm2022/siemens-element-ng-system-banner.mjs.map +1 -1
  219. package/fesm2022/siemens-element-ng-tabs-next.mjs +44 -180
  220. package/fesm2022/siemens-element-ng-tabs-next.mjs.map +1 -1
  221. package/fesm2022/siemens-element-ng-tabs.mjs +9 -16
  222. package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
  223. package/fesm2022/siemens-element-ng-theme.mjs +3 -3
  224. package/fesm2022/siemens-element-ng-theme.mjs.map +1 -1
  225. package/fesm2022/siemens-element-ng-threshold.mjs +318 -0
  226. package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -0
  227. package/fesm2022/siemens-element-ng-toast-notification.mjs +9 -10
  228. package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -1
  229. package/fesm2022/siemens-element-ng-tooltip.mjs +7 -8
  230. package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
  231. package/fesm2022/siemens-element-ng-tour.mjs +383 -0
  232. package/fesm2022/siemens-element-ng-tour.mjs.map +1 -0
  233. package/fesm2022/siemens-element-ng-translate.mjs +1 -1
  234. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  235. package/fesm2022/siemens-element-ng-tree-view.mjs +23 -24
  236. package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
  237. package/fesm2022/siemens-element-ng-typeahead.mjs +12 -13
  238. package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -1
  239. package/fesm2022/siemens-element-ng-unauthorized-page.mjs +6 -7
  240. package/fesm2022/siemens-element-ng-unauthorized-page.mjs.map +1 -1
  241. package/fesm2022/siemens-element-ng-wizard.mjs +8 -9
  242. package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -1
  243. package/fesm2022/siemens-element-ng.mjs +1 -1
  244. package/fesm2022/siemens-element-ng.mjs.map +1 -1
  245. package/file-uploader/index.d.ts +1 -1
  246. package/file-uploader/si-file-uploader.model.d.ts +1 -1
  247. package/filter-bar/filter.d.ts +1 -1
  248. package/filter-bar/index.d.ts +1 -1
  249. package/filtered-search/index.d.ts +1 -1
  250. package/filtered-search/si-filtered-search-value.component.d.ts +1 -1
  251. package/filtered-search/si-filtered-search.component.d.ts +1 -1
  252. package/filtered-search/si-filtered-search.model.d.ts +1 -1
  253. package/filtered-search/values/si-filtered-search-value.base.d.ts +1 -1
  254. package/filtered-search/values/typeahead/si-filtered-search-typeahead.component.d.ts +1 -1
  255. package/footer/index.d.ts +1 -1
  256. package/form/form-fieldset/si-form-fieldset.component.d.ts +1 -1
  257. package/form/index.d.ts +1 -1
  258. package/form/si-form-container/si-form-container.component.d.ts +24 -24
  259. package/form/si-form-item/si-form-field-native.control.d.ts +1 -1
  260. package/form/si-form-item.control.d.ts +1 -1
  261. package/form/si-form-validation-error.model.d.ts +1 -1
  262. package/form/si-form-validation-error.provider.d.ts +1 -1
  263. package/form/si-form-validation-tooltip/si-form-validation-tooltip.component.d.ts +1 -1
  264. package/form/si-form-validation-tooltip/si-form-validation-tooltip.directive.d.ts +1 -1
  265. package/form/si-form.module.d.ts +1 -1
  266. package/formly/fields/datetime/si-formly-datetime.component.d.ts +1 -1
  267. package/formly/fields/textarea/si-formly-textarea.component.d.ts +1 -1
  268. package/formly/fields/time/si-formly-time.component.d.ts +1 -1
  269. package/formly/index.d.ts +1 -1
  270. package/formly/si-formly-translate.extension.d.ts +1 -3
  271. package/formly/si-formly.component.d.ts +1 -1
  272. package/formly/structural/si-formly-accordion/si-formly-accordion.component.d.ts +1 -1
  273. package/formly/structural/si-formly-object-grid/si-formly-object-grid.component.d.ts +1 -1
  274. package/formly/structural/si-formly-object-grid/si-formly-object-grid.model.d.ts +1 -1
  275. package/formly/utils.d.ts +1 -1
  276. package/formly/wrapper/si-formly-form-field-provider.directive.d.ts +1 -1
  277. package/header-dropdown/index.d.ts +1 -1
  278. package/header-dropdown/si-header.model.d.ts +1 -1
  279. package/icon/element-icons.d.ts +1 -1
  280. package/icon/icon-status.d.ts +1 -1
  281. package/icon/index.d.ts +1 -1
  282. package/icon/si-status-icon.component.d.ts +1 -6
  283. package/icon-status/index.d.ts +1 -1
  284. package/info-page/index.d.ts +1 -1
  285. package/inline-notification/index.d.ts +1 -1
  286. package/ip-input/address-utils.d.ts +1 -1
  287. package/ip-input/address-validators.d.ts +1 -1
  288. package/ip-input/index.d.ts +1 -1
  289. package/ip-input/si-ip-input.directive.d.ts +1 -1
  290. package/landing-page/alert-config.model.d.ts +15 -0
  291. package/landing-page/index.d.ts +7 -0
  292. package/landing-page/package.json +3 -0
  293. package/landing-page/si-landing-page.component.d.ts +74 -0
  294. package/landing-page/si-landing-page.module.d.ts +7 -0
  295. package/language-switcher/index.d.ts +1 -1
  296. package/language-switcher/iso-language-value.d.ts +1 -1
  297. package/language-switcher/si-language-switcher.component.d.ts +1 -2
  298. package/link/aria-current.model.d.ts +1 -1
  299. package/link/index.d.ts +1 -1
  300. package/link/link.model.d.ts +1 -1
  301. package/list-details/index.d.ts +1 -1
  302. package/list-details/si-details-pane-header/si-details-pane-header.component.d.ts +1 -1
  303. package/loading-spinner/index.d.ts +1 -1
  304. package/localization/index.d.ts +1 -1
  305. package/localization/si-directionality.d.ts +1 -1
  306. package/localization/si-locale-store.d.ts +1 -1
  307. package/main-detail-container/index.d.ts +6 -0
  308. package/main-detail-container/package.json +3 -0
  309. package/main-detail-container/si-main-detail-container.component.d.ts +151 -0
  310. package/main-detail-container/si-main-detail-container.module.d.ts +7 -0
  311. package/menu/index.d.ts +1 -1
  312. package/menu/si-menu-action.service.d.ts +1 -1
  313. package/menu/si-menu-factory.component.d.ts +1 -1
  314. package/menu/si-menu-item-checkbox.component.d.ts +2 -1
  315. package/menu/si-menu-model.d.ts +1 -1
  316. package/modal/index.d.ts +1 -1
  317. package/modal/modal.helpers.d.ts +1 -1
  318. package/modal/modalref.d.ts +1 -1
  319. package/navbar/account.model.d.ts +1 -1
  320. package/navbar/index.d.ts +1 -1
  321. package/navbar/si-navbar-item/index.d.ts +1 -1
  322. package/navbar/si-navbar-primary/index.d.ts +1 -1
  323. package/navbar/si-navbar-primary/si-navbar-primary.model.d.ts +1 -1
  324. package/navbar-vertical/index.d.ts +7 -0
  325. package/navbar-vertical/package.json +3 -0
  326. package/navbar-vertical/si-navbar-vertical-divider.component.d.ts +5 -0
  327. package/navbar-vertical/si-navbar-vertical-group-trigger.directive.d.ts +38 -0
  328. package/navbar-vertical/si-navbar-vertical-group.component.d.ts +16 -0
  329. package/navbar-vertical/si-navbar-vertical-header.component.d.ts +6 -0
  330. package/navbar-vertical/si-navbar-vertical-item-legacy.component.d.ts +17 -0
  331. package/navbar-vertical/si-navbar-vertical-item.component.d.ts +21 -0
  332. package/navbar-vertical/si-navbar-vertical.component.d.ts +148 -0
  333. package/navbar-vertical/si-navbar-vertical.model.d.ts +77 -0
  334. package/navbar-vertical/si-navbar-vertical.module.d.ts +7 -0
  335. package/navbar-vertical/si-navbar-vertical.provider.d.ts +7 -0
  336. package/number-input/index.d.ts +1 -1
  337. package/number-input/si-number-input.component.d.ts +1 -1
  338. package/package.json +32 -4
  339. package/pagination/index.d.ts +1 -1
  340. package/password-strength/index.d.ts +1 -1
  341. package/password-strength/si-password-strength.component.d.ts +1 -1
  342. package/password-toggle/index.d.ts +1 -1
  343. package/phone-number/index.d.ts +1 -1
  344. package/phone-number/si-phone-number-input.models.d.ts +1 -1
  345. package/photo-upload/index.d.ts +1 -1
  346. package/pills-input/index.d.ts +1 -1
  347. package/pills-input/si-pills-input-pattern-base.d.ts +1 -1
  348. package/pills-input/si-pills-input.component.d.ts +1 -1
  349. package/popover/index.d.ts +1 -1
  350. package/popover/si-popover.component.d.ts +1 -1
  351. package/popover-next/index.d.ts +1 -1
  352. package/progressbar/index.d.ts +1 -1
  353. package/public-api.d.ts +1 -1
  354. package/resize-observer/index.d.ts +1 -1
  355. package/resize-observer/si-resize-observer.directive.d.ts +4 -2
  356. package/resize-observer/si-responsive-container.directive.d.ts +1 -1
  357. package/result-details-list/index.d.ts +1 -1
  358. package/result-details-list/si-result-details-list.datamodel.d.ts +1 -1
  359. package/search-bar/index.d.ts +1 -1
  360. package/search-bar/si-search-bar.component.d.ts +1 -1
  361. package/select/index.d.ts +1 -1
  362. package/select/options/si-select-complex-options.directive.d.ts +1 -1
  363. package/select/options/si-select-lazy-options.directive.d.ts +1 -1
  364. package/select/options/si-select-option.source.d.ts +1 -1
  365. package/select/options/si-select-options-strategy.base.d.ts +1 -1
  366. package/select/options/si-select-options-strategy.d.ts +1 -1
  367. package/select/options/si-select-simple-options.directive.d.ts +1 -1
  368. package/select/select-input/si-select-input.component.d.ts +1 -1
  369. package/select/select-list/si-select-list.base.d.ts +1 -1
  370. package/select/select-list/si-select-list.component.d.ts +1 -1
  371. package/select/select-option/si-select-option-row.component.d.ts +1 -1
  372. package/select/selection/si-select-selection-strategy.d.ts +1 -1
  373. package/select/si-select.types.d.ts +1 -1
  374. package/shadow-root/index.d.ts +1 -1
  375. package/shadow-root/si-shadow-root.directive.d.ts +1 -1
  376. package/side-panel/index.d.ts +1 -1
  377. package/side-panel/si-side-panel.service.d.ts +1 -1
  378. package/side-panel/side-panel.model.d.ts +1 -1
  379. package/skip-links/index.d.ts +1 -1
  380. package/skip-links/si-skip-link-target.directive.d.ts +1 -1
  381. package/slider/index.d.ts +1 -1
  382. package/sort-bar/index.d.ts +1 -1
  383. package/sort-bar/si-sort-bar.component.d.ts +1 -1
  384. package/split/index.d.ts +1 -1
  385. package/split/si-split.interfaces.d.ts +1 -1
  386. package/status-bar/index.d.ts +1 -1
  387. package/status-bar/si-status-bar-item/index.d.ts +1 -1
  388. package/status-bar/si-status-bar-item/si-status-bar-item.model.d.ts +1 -1
  389. package/status-toggle/index.d.ts +1 -1
  390. package/status-toggle/status-toggle.model.d.ts +1 -1
  391. package/summary-chip/index.d.ts +1 -1
  392. package/summary-widget/index.d.ts +1 -1
  393. package/system-banner/index.d.ts +1 -1
  394. package/tabs/index.d.ts +1 -1
  395. package/tabs/si-tab/index.d.ts +1 -1
  396. package/tabs/si-tab/si-tab.component.d.ts +1 -1
  397. package/tabs/si-tabset/index.d.ts +1 -1
  398. package/tabs-next/index.d.ts +1 -1
  399. package/tabs-next/si-tab-next-base.directive.d.ts +3 -6
  400. package/tabs-next/si-tab-next-link.component.d.ts +0 -2
  401. package/tabs-next/si-tabs-tokens.d.ts +1 -1
  402. package/tabs-next/si-tabset-next.component.d.ts +4 -19
  403. package/template-i18n.json +16 -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 +6 -0
  408. package/threshold/package.json +3 -0
  409. package/threshold/si-readonly-threshold-option.component.d.ts +11 -0
  410. package/threshold/si-threshold.component.d.ts +147 -0
  411. package/threshold/si-threshold.module.d.ts +7 -0
  412. package/toast-notification/index.d.ts +1 -1
  413. package/toast-notification/si-toast.model.d.ts +1 -1
  414. package/tooltip/index.d.ts +1 -1
  415. package/tooltip/si-tooltip.component.d.ts +1 -1
  416. package/tooltip/si-tooltip.directive.d.ts +1 -1
  417. package/tooltip/si-tooltip.service.d.ts +1 -1
  418. package/tour/index.d.ts +6 -0
  419. package/tour/package.json +3 -0
  420. package/tour/si-tour-highlight.component.d.ts +15 -0
  421. package/tour/si-tour-token.model.d.ts +27 -0
  422. package/tour/si-tour.component.d.ts +31 -0
  423. package/tour/si-tour.model.d.ts +51 -0
  424. package/tour/si-tour.service.d.ts +62 -0
  425. package/translate/index.d.ts +1 -1
  426. package/translate/si-translatable-keys.interface.d.ts +16 -0
  427. package/translate/si-translatable-overrides.provider.d.ts +1 -1
  428. package/tree-view/drag-drop.util.d.ts +1 -1
  429. package/tree-view/index.d.ts +1 -1
  430. package/tree-view/si-tree-view-item/si-tree-view-item.component.d.ts +1 -1
  431. package/tree-view/si-tree-view-item/si-tree-view-item.directive.d.ts +1 -1
  432. package/tree-view/si-tree-view-item-context.d.ts +1 -1
  433. package/tree-view/si-tree-view-item-height.service.d.ts +1 -1
  434. package/tree-view/si-tree-view-item-template.directive.d.ts +1 -1
  435. package/tree-view/si-tree-view.component.d.ts +1 -1
  436. package/tree-view/si-tree-view.model.d.ts +1 -1
  437. package/tree-view/si-tree-view.service.d.ts +1 -1
  438. package/tree-view/si-tree-view.utils.d.ts +1 -1
  439. package/typeahead/index.d.ts +1 -1
  440. package/typeahead/si-typeahead.directive.d.ts +1 -1
  441. package/typeahead/si-typeahead.model.d.ts +1 -1
  442. package/typeahead/si-typeahead.sorting.d.ts +1 -1
  443. package/unauthorized-page/index.d.ts +1 -1
  444. package/wizard/index.d.ts +1 -1
@@ -3,18 +3,17 @@ import { CdkMenu, CdkMenuTrigger } from '@angular/cdk/menu';
3
3
  import { NgClass, NgTemplateOutlet } from '@angular/common';
4
4
  import * as i0 from '@angular/core';
5
5
  import { InjectionToken, input, booleanAttribute, output, computed, inject, ElementRef, viewChild, TemplateRef, Directive, signal, effect, ChangeDetectionStrategy, Component, model, contentChildren, INJECTOR } from '@angular/core';
6
- import * as i1$1 from '@angular/router';
6
+ import * as i1 from '@angular/router';
7
7
  import { Router, RouterLink, RouterLinkActive } from '@angular/router';
8
8
  import { SiMenuDirective, SiMenuItemComponent } from '@siemens/element-ng/menu';
9
- import * as i2 from '@siemens/element-ng/resize-observer';
9
+ import * as i1$1 from '@siemens/element-ng/resize-observer';
10
10
  import { SiResizeObserverModule } from '@siemens/element-ng/resize-observer';
11
- import * as i1 from '@siemens/element-translate-ng/translate';
12
- import { SiTranslateModule } from '@siemens/element-translate-ng/translate';
11
+ import { SiTranslatePipe } from '@siemens/element-translate-ng/translate';
13
12
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
14
13
  import { addIcons, elementCancel, SiIconNextComponent } from '@siemens/element-ng/icon';
15
14
 
16
15
  /**
17
- * Copyright Siemens 2016 - 2025.
16
+ * Copyright (c) Siemens 2016 - 2025
18
17
  * SPDX-License-Identifier: MIT
19
18
  */
20
19
  const SI_TABSET_NEXT = new InjectionToken('SiTabsetNextComponent');
@@ -66,7 +65,6 @@ class SiTabNextBaseDirective {
66
65
  tabButton = inject(ElementRef);
67
66
  tabContent = viewChild('tabContent', { read: TemplateRef });
68
67
  static tabCounter = 0;
69
- retainFocus = false;
70
68
  indexBeforeClose = -1;
71
69
  /** @internal */
72
70
  tabId = `${SiTabNextBaseDirective.tabCounter++}`;
@@ -74,37 +72,19 @@ class SiTabNextBaseDirective {
74
72
  tabset = inject(SI_TABSET_NEXT);
75
73
  /** @internal */
76
74
  index = computed(() => this.tabset.tabPanels().findIndex(tab => tab.tabId === this.tabId));
77
- /** @internal */
78
- isTabButtonFullyVisible() {
79
- const tabButton = this.tabButton.nativeElement;
80
- const tabsetElement = this.tabset.tabScrollContainer().nativeElement;
81
- const tabButtonRect = tabButton.getBoundingClientRect();
82
- const tabsetRect = tabsetElement.getBoundingClientRect();
83
- return (Math.round(tabButtonRect.left) >= Math.round(tabsetRect.left) &&
84
- Math.round(tabButtonRect.right) <= Math.round(tabsetRect.right));
85
- }
86
75
  ngOnDestroy() {
87
76
  // adjust the focus index and selected tab index if component is destroyed
88
77
  // as a side effect to close tab event
89
78
  if (this.indexBeforeClose >= 0) {
90
79
  const indexToFocus = this.tabset.getNextIndexToFocus(this.indexBeforeClose);
91
- if (this.retainFocus) {
92
- // wait for a cycle to render the tab if not visible
93
- setTimeout(() => {
94
- this.tabset.focusKeyManager?.setActiveItem(indexToFocus);
95
- });
96
- }
97
- else if (this.indexBeforeClose >= 0 && this.active()) {
80
+ if (this.active()) {
98
81
  this.tabset.focusKeyManager?.updateActiveItem(indexToFocus);
99
82
  this.tabset.tabPanels()[indexToFocus].tabButton.nativeElement.focus();
100
83
  }
101
84
  else {
102
- let selectedItemIndex = this.tabset.activeTabIndex() ?? 0;
103
- if (selectedItemIndex > this.indexBeforeClose) {
104
- selectedItemIndex--;
105
- }
85
+ const selectedItemIndex = this.tabset.activeTabIndex() ?? 0;
106
86
  this.tabset.focusKeyManager?.updateActiveItem(selectedItemIndex);
107
- this.tabset.tabPanels()[selectedItemIndex].tabButton.nativeElement.focus();
87
+ this.tabset.tabPanels()[selectedItemIndex].focus();
108
88
  }
109
89
  // if this tab was the active one we need to select next tab as active
110
90
  if (this.active()) {
@@ -113,26 +93,37 @@ class SiTabNextBaseDirective {
113
93
  targetActiveTab.active.set(true);
114
94
  }
115
95
  }
116
- this.tabset.updateVisibleTabIndexes(indexToFocus, 'next', true);
117
96
  }
118
97
  }
119
- closeTab(event, retainFocus = false) {
98
+ closeTab(event) {
120
99
  if (this.closable() && !this.disabledTab()) {
121
100
  event.stopPropagation();
122
101
  const index = this.index();
123
102
  this.closeTriggered.emit();
124
- this.retainFocus = retainFocus;
125
103
  this.indexBeforeClose = index;
126
104
  }
127
105
  }
128
106
  focus(origin) {
129
- this.tabButton.nativeElement.focus();
107
+ this.tabButton.nativeElement.focus({ preventScroll: true });
108
+ // The element is not fully scrolled into view when focused. So we prevent and scroll it manually.
109
+ this.tabButton.nativeElement.scrollIntoView({
110
+ inline: 'nearest',
111
+ block: 'nearest',
112
+ behavior: 'instant'
113
+ });
130
114
  }
131
115
  get disabled() {
132
116
  return this.disabledTab();
133
117
  }
118
+ selectTab(retainFocus) {
119
+ this.tabset.focusKeyManager?.updateActiveItem(this.index());
120
+ if (retainFocus) {
121
+ // We need the timeout to wait for cdkMenu to restore the focus before we move it again.
122
+ setTimeout(() => this.focus());
123
+ }
124
+ }
134
125
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTabNextBaseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
135
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "19.0.6", type: SiTabNextBaseDirective, isStandalone: true, selector: "[siTabNextBase]", inputs: { heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, badgeContent: { classPropertyName: "badgeContent", publicName: "badgeContent", isSignal: true, isRequired: false, transformFunction: null }, badgeColor: { classPropertyName: "badgeColor", publicName: "badgeColor", isSignal: true, isRequired: false, transformFunction: null }, disabledTab: { classPropertyName: "disabledTab", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closeTriggered: "closeTriggered" }, host: { attributes: { "role": "tab" }, listeners: { "keydown.arrowLeft": "tabset.focusPrevious($event)", "keydown.arrowRight": "tabset.focusNext($event)", "keydown.delete": "closeTab($event, true)" }, properties: { "class.disabled": "disabledTab()", "attr.id": "'tab-' + tabId", "attr.aria-disabled": "disabledTab()", "attr.tabindex": "tabset.focusKeyManager?.activeItem === this && !disabledTab() ? 0 : -1", "attr.aria-controls": "'content-' + tabId" }, classAttribute: "nav-link focus-inside px-5 si-title-1" }, viewQueries: [{ propertyName: "tabContent", first: true, predicate: ["tabContent"], descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0 });
126
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "19.0.6", type: SiTabNextBaseDirective, isStandalone: true, selector: "[siTabNextBase]", inputs: { heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, badgeContent: { classPropertyName: "badgeContent", publicName: "badgeContent", isSignal: true, isRequired: false, transformFunction: null }, badgeColor: { classPropertyName: "badgeColor", publicName: "badgeColor", isSignal: true, isRequired: false, transformFunction: null }, disabledTab: { classPropertyName: "disabledTab", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closeTriggered: "closeTriggered" }, host: { attributes: { "role": "tab" }, listeners: { "keydown.arrowLeft": "tabset.focusPrevious($event)", "keydown.arrowRight": "tabset.focusNext($event)", "keydown.delete": "closeTab($event)" }, properties: { "class.disabled": "disabledTab()", "attr.id": "'tab-' + tabId", "attr.aria-disabled": "disabledTab()", "attr.tabindex": "tabset.focusKeyManager?.activeItem === this && !disabledTab() ? 0 : -1", "attr.aria-controls": "'content-' + tabId" }, classAttribute: "nav-link focus-inside px-5 si-title-1" }, viewQueries: [{ propertyName: "tabContent", first: true, predicate: ["tabContent"], descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0 });
136
127
  }
137
128
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTabNextBaseDirective, decorators: [{
138
129
  type: Directive,
@@ -148,13 +139,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImpor
148
139
  '[attr.aria-controls]': "'content-' + tabId",
149
140
  '(keydown.arrowLeft)': 'tabset.focusPrevious($event)',
150
141
  '(keydown.arrowRight)': 'tabset.focusNext($event)',
151
- '(keydown.delete)': 'closeTab($event, true)'
142
+ '(keydown.delete)': 'closeTab($event)'
152
143
  }
153
144
  }]
154
145
  }] });
155
146
 
156
147
  /**
157
- * Copyright Siemens 2016 - 2025.
148
+ * Copyright (c) Siemens 2016 - 2025
158
149
  * SPDX-License-Identifier: MIT
159
150
  */
160
151
  /** @experimental */
@@ -178,24 +169,12 @@ class SiTabNextLinkComponent extends SiTabNextBaseDirective {
178
169
  }
179
170
  });
180
171
  }
181
- /** @internal */
182
- selectTab(retainFocus) {
183
- if (!this.isTabButtonFullyVisible()) {
184
- this.tabset.updateVisibleTabIndexes(this.index(), 'next');
185
- this.tabset.focusKeyManager?.updateActiveItem(this.index());
186
- }
187
- if (retainFocus) {
188
- setTimeout(() => {
189
- this.tabset.focusKeyManager?.setActiveItem(this);
190
- });
191
- }
192
- }
193
172
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTabNextLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
194
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiTabNextLinkComponent, isStandalone: true, selector: "a[si-tab-next][routerLink]", host: { properties: { "class.active": "routerLinkActive.isActive", "attr.aria-selected": "routerLinkActive.isActive" } }, usesInheritance: true, hostDirectives: [{ directive: i1$1.RouterLinkActive }], ngImport: i0, template: "@let icon = this.icon();\n@if (icon) {\n <si-icon-next class=\"tab-icon\" [icon]=\"icon\" [attr.title]=\"heading() | translate\" />\n} @else {\n <span class=\"text-truncate\">{{ heading() | translate }}</span>\n}\n@if (badgeContent() === true) {\n <span class=\"badge-dot\"></span>\n} @else if (badgeContent() && badgeColor()) {\n <span class=\"badge\" [ngClass]=\"'bg-' + badgeColor()\">\n <!-- eslint-disable-next-line @angular-eslint/template/no-any -->\n {{ $any(badgeContent() ?? '') | translate }}\n </span>\n} @else if (badgeContent() && !badgeColor()) {\n <!-- eslint-disable-next-line @angular-eslint/template/no-any -->\n <span class=\"badge-text\"> {{ $any(badgeContent() ?? '') | translate }}</span>\n}\n@if (closable() && !disabledTab()) {\n <si-icon-next\n class=\"ms-4 me-n4 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0);color:var(--element-text-primary)}:host.nav-link span.badge-dot{inset-block-end:100%;inset-inline-start:12px;margin-inline-end:12px}:host.nav-link span.badge-text{inset-block-end:calc(100% - 7px);inset-inline-start:2px}.tab-icon{font-size:24px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SiIconNextComponent, selector: "si-icon-next", inputs: ["icon"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
173
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiTabNextLinkComponent, isStandalone: true, selector: "a[si-tab-next][routerLink]", host: { properties: { "class.active": "routerLinkActive.isActive", "attr.aria-selected": "routerLinkActive.isActive" } }, usesInheritance: true, hostDirectives: [{ directive: i1.RouterLinkActive }], ngImport: i0, template: "@let icon = this.icon();\n@if (icon) {\n <si-icon-next class=\"tab-icon\" [icon]=\"icon\" [attr.title]=\"heading() | translate\" />\n} @else {\n <span class=\"text-truncate\">{{ heading() | translate }}</span>\n}\n@if (badgeContent() === true) {\n <span class=\"badge-dot\"></span>\n} @else if (badgeContent() && badgeColor()) {\n <span class=\"badge\" [ngClass]=\"'bg-' + badgeColor()\">\n <!-- eslint-disable-next-line @angular-eslint/template/no-any -->\n {{ $any(badgeContent() ?? '') | translate }}\n </span>\n} @else if (badgeContent() && !badgeColor()) {\n <!-- eslint-disable-next-line @angular-eslint/template/no-any -->\n <span class=\"badge-text\"> {{ $any(badgeContent() ?? '') | translate }}</span>\n}\n@if (closable() && !disabledTab()) {\n <si-icon-next\n class=\"ms-4 me-n4 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0);color:var(--element-text-primary)}:host.nav-link span.badge-dot{inset-block-end:100%;inset-inline-start:12px;margin-inline-end:12px}:host.nav-link span.badge-text{inset-block-end:calc(100% - 7px);inset-inline-start:2px}.tab-icon{font-size:24px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SiIconNextComponent, selector: "si-icon-next", inputs: ["icon"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
195
174
  }
196
175
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTabNextLinkComponent, decorators: [{
197
176
  type: Component,
198
- args: [{ selector: 'a[si-tab-next][routerLink]', imports: [NgClass, SiIconNextComponent, SiTranslateModule], changeDetection: ChangeDetectionStrategy.OnPush, host: {
177
+ args: [{ selector: 'a[si-tab-next][routerLink]', imports: [NgClass, SiIconNextComponent, SiTranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, host: {
199
178
  '[class.active]': 'routerLinkActive.isActive',
200
179
  '[attr.aria-selected]': 'routerLinkActive.isActive'
201
180
  }, hostDirectives: [
@@ -206,7 +185,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImpor
206
185
  }], ctorParameters: () => [] });
207
186
 
208
187
  /**
209
- * Copyright Siemens 2016 - 2025.
188
+ * Copyright (c) Siemens 2016 - 2025
210
189
  * SPDX-License-Identifier: MIT
211
190
  */
212
191
  /** @experimental */
@@ -238,24 +217,15 @@ class SiTabNextComponent extends SiTabNextBaseDirective {
238
217
  }
239
218
  if (continueWithSelection) {
240
219
  this.active.set(true);
241
- this.tabset.focusKeyManager?.updateActiveItem(newTabIndex);
242
- }
243
- if (!this.isTabButtonFullyVisible()) {
244
- this.tabset.updateVisibleTabIndexes(newTabIndex, 'next');
245
- this.tabset.focusKeyManager?.updateActiveItem(newTabIndex);
246
- }
247
- if (retainFocus) {
248
- setTimeout(() => {
249
- this.tabset.focusKeyManager?.activeItem?.focus();
250
- });
220
+ super.selectTab(retainFocus);
251
221
  }
252
222
  }
253
223
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTabNextComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
254
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiTabNextComponent, isStandalone: true, selector: "si-tab-next", inputs: { active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { active: "activeChange" }, host: { listeners: { "click": "selectTab()", "keydown.enter": "selectTab()" }, properties: { "class.active": "active()", "attr.aria-selected": "active()" } }, usesInheritance: true, ngImport: i0, template: "@let icon = this.icon();\n@if (icon) {\n <si-icon-next class=\"tab-icon\" [icon]=\"icon\" [attr.title]=\"heading() | translate\" />\n} @else {\n <span class=\"text-truncate\">{{ heading() | translate }}</span>\n}\n@if (badgeContent() === true) {\n <span class=\"badge-dot\"></span>\n} @else if (badgeContent() && badgeColor()) {\n <span class=\"badge\" [ngClass]=\"'bg-' + badgeColor()\">\n <!-- eslint-disable-next-line @angular-eslint/template/no-any -->\n {{ $any(badgeContent() ?? '') | translate }}\n </span>\n} @else if (badgeContent() && !badgeColor()) {\n <!-- eslint-disable-next-line @angular-eslint/template/no-any -->\n <span class=\"badge-text\"> {{ $any(badgeContent() ?? '') | translate }}</span>\n}\n@if (closable() && !disabledTab()) {\n <si-icon-next\n class=\"ms-4 me-n4 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0);color:var(--element-text-primary)}:host.nav-link span.badge-dot{inset-block-end:100%;inset-inline-start:12px;margin-inline-end:12px}:host.nav-link span.badge-text{inset-block-end:calc(100% - 7px);inset-inline-start:2px}.tab-icon{font-size:24px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SiIconNextComponent, selector: "si-icon-next", inputs: ["icon"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
224
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiTabNextComponent, isStandalone: true, selector: "si-tab-next", inputs: { active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { active: "activeChange" }, host: { listeners: { "click": "selectTab()", "keydown.enter": "selectTab()" }, properties: { "class.active": "active()", "attr.aria-selected": "active()" } }, usesInheritance: true, ngImport: i0, template: "@let icon = this.icon();\n@if (icon) {\n <si-icon-next class=\"tab-icon\" [icon]=\"icon\" [attr.title]=\"heading() | translate\" />\n} @else {\n <span class=\"text-truncate\">{{ heading() | translate }}</span>\n}\n@if (badgeContent() === true) {\n <span class=\"badge-dot\"></span>\n} @else if (badgeContent() && badgeColor()) {\n <span class=\"badge\" [ngClass]=\"'bg-' + badgeColor()\">\n <!-- eslint-disable-next-line @angular-eslint/template/no-any -->\n {{ $any(badgeContent() ?? '') | translate }}\n </span>\n} @else if (badgeContent() && !badgeColor()) {\n <!-- eslint-disable-next-line @angular-eslint/template/no-any -->\n <span class=\"badge-text\"> {{ $any(badgeContent() ?? '') | translate }}</span>\n}\n@if (closable() && !disabledTab()) {\n <si-icon-next\n class=\"ms-4 me-n4 btn btn-circle btn-xs btn-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0);color:var(--element-text-primary)}:host.nav-link span.badge-dot{inset-block-end:100%;inset-inline-start:12px;margin-inline-end:12px}:host.nav-link span.badge-text{inset-block-end:calc(100% - 7px);inset-inline-start:2px}.tab-icon{font-size:24px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SiIconNextComponent, selector: "si-icon-next", inputs: ["icon"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
255
225
  }
256
226
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTabNextComponent, decorators: [{
257
227
  type: Component,
258
- args: [{ selector: 'si-tab-next', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgClass, SiIconNextComponent, SiTranslateModule], host: {
228
+ args: [{ selector: 'si-tab-next', imports: [NgClass, SiIconNextComponent, SiTranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, host: {
259
229
  '[class.active]': 'active()',
260
230
  '[attr.aria-selected]': 'active()',
261
231
  '(click)': 'selectTab()',
@@ -264,7 +234,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImpor
264
234
  }] });
265
235
 
266
236
  /**
267
- * Copyright Siemens 2016 - 2025.
237
+ * Copyright (c) Siemens 2016 - 2025
268
238
  * SPDX-License-Identifier: MIT
269
239
  */
270
240
  /** @experimental */
@@ -274,8 +244,6 @@ class SiTabsetNextComponent {
274
244
  */
275
245
  deselect = output();
276
246
  /** @internal */
277
- visibleTabIndexes = signal([]);
278
- /** @internal */
279
247
  activeTab = computed(() => {
280
248
  return this.tabPanels().find(tab => tab.active());
281
249
  });
@@ -293,25 +261,8 @@ class SiTabsetNextComponent {
293
261
  ];
294
262
  return allTabs;
295
263
  });
296
- /** @internal */
297
- tabContainer = viewChild.required('tabContainer');
298
- tabScrollContainer = viewChild.required('tabScrollContainer');
299
- maxWrapperWidth = computed(() => {
300
- const visibleIndexes = this.visibleTabIndexes();
301
- return visibleIndexes.length
302
- ? this.tabButtons()
303
- .filter((_, index) => visibleIndexes.includes(index))
304
- .reduce((total, current) => {
305
- return total + current.nativeElement.clientWidth;
306
- }, 0)
307
- : undefined;
308
- });
309
264
  menu = viewChild('menu', { read: CdkMenu });
310
- tabButtons = computed(() => {
311
- return this.tabPanels().map(tab => tab.tabButton);
312
- });
313
- menuButton = viewChild('menuButton');
314
- previousWidth = 0;
265
+ showMenuButton = signal(false);
315
266
  injector = inject(INJECTOR);
316
267
  ngAfterViewInit() {
317
268
  this.focusKeyManager = new FocusKeyManager(this.tabPanels, this.injector);
@@ -320,15 +271,6 @@ class SiTabsetNextComponent {
320
271
  this.focusKeyManager?.updateActiveItem(this.tabPanels().findIndex(tab => !tab.disabledTab()));
321
272
  });
322
273
  }
323
- resize(e) {
324
- if (this.previousWidth && this.previousWidth === e.width) {
325
- return;
326
- }
327
- else {
328
- this.previousWidth = e.width;
329
- }
330
- this.updateVisibleTabIndexes(this.activeTabIndex(), 'next', true);
331
- }
332
274
  menuOpened() {
333
275
  // wait for menu items to be rendered
334
276
  setTimeout(() => {
@@ -352,67 +294,12 @@ class SiTabsetNextComponent {
352
294
  /** @internal */
353
295
  focusPrevious(e) {
354
296
  e.preventDefault();
355
- const activeItemIndex = this.focusKeyManager?.activeItemIndex;
356
- if (activeItemIndex > 0) {
357
- this.focusKeyManager?.setPreviousItemActive();
358
- this.updateVisibleTabIndexes(this.focusKeyManager.activeItemIndex, 'previous');
359
- setTimeout(() => {
360
- this.focusKeyManager?.setActiveItem(this.focusKeyManager.activeItemIndex);
361
- });
362
- }
297
+ this.focusKeyManager?.setPreviousItemActive();
363
298
  }
364
299
  /** @internal */
365
300
  focusNext(e) {
366
301
  e.preventDefault();
367
- const activeItemIndex = this.focusKeyManager?.activeItemIndex;
368
- if (activeItemIndex < this.tabButtons().length) {
369
- this.focusKeyManager?.setNextItemActive();
370
- this.updateVisibleTabIndexes(this.focusKeyManager.activeItemIndex, 'next');
371
- setTimeout(() => {
372
- this.focusKeyManager?.setActiveItem(this.focusKeyManager.activeItemIndex);
373
- });
374
- }
375
- }
376
- /** @internal */
377
- updateVisibleTabIndexes(startIndex, type, forceUpdate) {
378
- if (startIndex < this.tabButtons().length) {
379
- if (!this.visibleTabIndexes().includes(startIndex) || forceUpdate) {
380
- let availableWidth = this.tabContainer().nativeElement.clientWidth;
381
- if (this.menuButton()) {
382
- availableWidth = availableWidth - this.menuButton().nativeElement.clientWidth;
383
- }
384
- let consumedWidth = 0;
385
- const visibleTabIndexes = [];
386
- const calculateConsumedWidth = (i) => {
387
- consumedWidth += this.tabButtons()[i].nativeElement.clientWidth;
388
- if (visibleTabIndexes.includes(0) &&
389
- i === this.tabButtons().length - 1 &&
390
- this.menuButton()) {
391
- availableWidth = availableWidth + this.menuButton().nativeElement.clientWidth;
392
- }
393
- if (consumedWidth <= availableWidth) {
394
- visibleTabIndexes.push(i);
395
- return false;
396
- }
397
- else {
398
- consumedWidth -= this.tabButtons()[i].nativeElement.clientWidth;
399
- return true;
400
- }
401
- };
402
- const isNextDirection = type === 'next';
403
- // First pass: Calculate in primary direction
404
- const primaryRange = this.getPrimaryRange(isNextDirection, startIndex, this.tabButtons().length);
405
- this.traverseRange(primaryRange, calculateConsumedWidth);
406
- // Second pass: Calculate in opposite direction if space available
407
- if (consumedWidth < availableWidth) {
408
- const secondaryRange = this.getSecondaryRange(isNextDirection, startIndex, this.tabButtons().length);
409
- this.traverseRange(secondaryRange, calculateConsumedWidth);
410
- }
411
- visibleTabIndexes.sort((a, b) => a - b);
412
- this.visibleTabIndexes.set(visibleTabIndexes);
413
- this.scrollFirstVisibleTabIntoView();
414
- }
415
- }
302
+ this.focusKeyManager?.setNextItemActive();
416
303
  }
417
304
  /** @internal */
418
305
  getNextIndexToFocus(currentIndex) {
@@ -425,32 +312,9 @@ class SiTabsetNextComponent {
425
312
  }
426
313
  return -1;
427
314
  }
428
- getPrimaryRange(isNextDirection, startIndex, length) {
429
- return isNextDirection
430
- ? { start: startIndex, end: 0, step: -1 }
431
- : { start: startIndex, end: length - 1, step: 1 };
432
- }
433
- getSecondaryRange(isNextDirection, startIndex, length) {
434
- return isNextDirection
435
- ? { start: startIndex + 1, end: length - 1, step: 1 }
436
- : { start: startIndex - 1, end: 0, step: -1 };
437
- }
438
- traverseRange(range, callback) {
439
- const condition = (i) => (range.step > 0 ? i <= range.end : i >= range.end);
440
- for (let i = range.start; condition(i); i += range.step) {
441
- if (callback(i)) {
442
- break;
443
- }
444
- }
445
- }
446
- scrollFirstVisibleTabIntoView() {
447
- setTimeout(() => {
448
- this.tabButtons().at(this.visibleTabIndexes()[0])?.nativeElement.scrollIntoView({
449
- behavior: 'instant',
450
- inline: 'start',
451
- block: 'nearest'
452
- });
453
- });
315
+ resizeContainer(width, scrollWidth) {
316
+ // 48px is the width of the menu button.
317
+ this.showMenuButton.set(scrollWidth > width + (this.showMenuButton() ? 48 : 0));
454
318
  }
455
319
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTabsetNextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
456
320
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiTabsetNextComponent, isStandalone: true, selector: "si-tabset-next", outputs: { deselect: "deselect" }, providers: [
@@ -458,28 +322,28 @@ class SiTabsetNextComponent {
458
322
  provide: SI_TABSET_NEXT,
459
323
  useExisting: SiTabsetNextComponent
460
324
  }
461
- ], queries: [{ propertyName: "tabPanelsLinks", predicate: SiTabNextLinkComponent, isSignal: true }, { propertyName: "tabPanelsComponents", predicate: SiTabNextComponent, isSignal: true }], viewQueries: [{ propertyName: "tabContainer", first: true, predicate: ["tabContainer"], descendants: true, isSignal: true }, { propertyName: "tabScrollContainer", first: true, predicate: ["tabScrollContainer"], descendants: true, isSignal: true }, { propertyName: "menu", first: true, predicate: ["menu"], descendants: true, read: CdkMenu, isSignal: true }, { propertyName: "menuButton", first: true, predicate: ["menuButton"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"tabs-container\">\n <div\n #tabContainer\n class=\"tab-container-buttonbar-list nav nav-tabs\"\n (siResizeObserver)=\"resize($event)\"\n >\n <div\n #tabScrollContainer\n role=\"tablist\"\n tabindex=\"-1\"\n class=\"d-flex tabs-wrapper\"\n [style.max-width.px]=\"maxWrapperWidth()\"\n >\n <ng-content />\n </div>\n\n @if (visibleTabIndexes().length < tabPanels().length) {\n <button\n #menuButton\n type=\"button\"\n class=\"dropdown btn btn-tertiary focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"tabsMenu\"\n (cdkMenuOpened)=\"menuOpened()\"\n >\n <i class=\"icon element-options m-0\"></i>\n </button>\n }\n </div>\n @let tabContent = this.activeTab()?.tabContent();\n @let activeTab = this.activeTab();\n\n @if (activeTab) {\n <div\n class=\"tab-content\"\n role=\"tabpanel\"\n [id]=\"'content-' + activeTab.tabId\"\n [attr.aria-labelledby]=\"'tab-' + activeTab.tabId\"\n >\n @if (tabContent) {\n <ng-container [ngTemplateOutlet]=\"tabContent\" />\n }\n\n <ng-content select=\"router-outlet\" />\n </div>\n }\n</div>\n\n<ng-template #tabsMenu>\n <si-menu #menu>\n @for (tab of tabPanels(); track tab) {\n @let badgeColor = tab.badgeColor();\n @let badgeIsNumber = tab.badgeIsNumber();\n\n @if (badgeColor && badgeIsNumber) {\n <!-- eslint-disable @angular-eslint/template/no-any -->\n <a\n #menuItem\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [badgeColor]=\"badgeColor\"\n [badge]=\"$any(tab.badgeContent())\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tabIsLink(tab) ? tab.routerLink?.urlTree : undefined\"\n (keydown.enter)=\"tab.selectTab(true)\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else if (badgeIsNumber && badgeColor) {\n <a\n #menuItem\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [badgeColor]=\"badgeColor\"\n [badge]=\"$any(tab.badgeContent())\"\n [routerLink]=\"tabIsLink(tab) ? tab.routerLink?.urlTree : undefined\"\n (keydown.enter)=\"tab.selectTab(true)\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <!-- eslint-enable -->\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else {\n <a\n #menuItem\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tabIsLink(tab) ? tab.routerLink?.urlTree : undefined\"\n (keydown.enter)=\"tab.selectTab(true)\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n }\n }\n </si-menu>\n</ng-template>\n\n<ng-template #badgeTemplate let-tab=\"tab\">\n <div class=\"d-flex align-items-center space-between flex-no-wrap justify-content-between\">\n {{ tab.heading() }}\n @if (tab.badgeContent() === true) {\n <span class=\"badge-dot\"></span>\n } @else if (tab.badgeContent() && !tab.badgeColor()) {\n <!-- eslint-disable-next-line @angular-eslint/template/no-any -->\n <span class=\"badge-text\"> {{ $any(tab.badgeContent() ?? '') | translate }}</span>\n }\n </div>\n</ng-template>\n", styles: [":host{display:block;flex-direction:column}.tabs-container{display:flex;flex-wrap:wrap;overflow:hidden;block-size:100%;min-block-size:40px}.tabs-container:before{inset-block-start:38px;inset-block-end:auto}.tab-container-buttonbar-list{display:flex;min-block-size:40px;overflow:hidden;flex:1;order:1;min-inline-size:100px}.btn.dropdown{color:var(--element-text-primary);min-inline-size:0;border-block-end:2px solid var(--element-ui-4);order:2;block-size:40px;padding-inline:12px}.btn.dropdown:hover{border-color:var(--element-ui-4);color:var(--element-action-secondary-text-hover)}a[si-menu-item] .badge-dot{inset-block-end:4px;min-inline-size:12px;margin-inline-start:4px}.tab-content{inline-size:100%;block-size:calc(100% - 40px);order:3}.tabs-wrapper{overflow-y:hidden;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none}\n"], dependencies: [{ kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }, { kind: "directive", type: SiMenuDirective, selector: "si-menu" }, { kind: "component", type: SiMenuItemComponent, selector: "si-menu-item, a[si-menu-item], button[si-menu-item]" }, { kind: "directive", type: CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: SiResizeObserverModule }, { kind: "directive", type: i2.SiResizeObserverDirective, selector: "[siResizeObserver]", inputs: ["resizeThrottle"], outputs: ["siResizeObserver"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
325
+ ], queries: [{ propertyName: "tabPanelsLinks", predicate: SiTabNextLinkComponent, isSignal: true }, { propertyName: "tabPanelsComponents", predicate: SiTabNextComponent, isSignal: true }], viewQueries: [{ propertyName: "menu", first: true, predicate: ["menu"], descendants: true, read: CdkMenu, isSignal: true }], ngImport: i0, template: "<div class=\"tabs-container\">\n <div class=\"tab-container-buttonbar-list nav nav-tabs\">\n <div\n #tabScrollContainer\n role=\"tablist\"\n tabindex=\"-1\"\n class=\"d-flex tabs-wrapper\"\n (siResizeObserver)=\"\n resizeContainer(tabScrollContainer.clientWidth, tabScrollContainer.scrollWidth)\n \"\n >\n <ng-content />\n </div>\n\n @if (showMenuButton()) {\n <button\n type=\"button\"\n class=\"dropdown btn btn-tertiary focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"tabsMenu\"\n (cdkMenuOpened)=\"menuOpened()\"\n >\n <i class=\"icon element-options m-0\"></i>\n </button>\n }\n </div>\n @let tabContent = this.activeTab()?.tabContent();\n @let activeTab = this.activeTab();\n\n @if (activeTab) {\n <div\n class=\"tab-content\"\n role=\"tabpanel\"\n [id]=\"'content-' + activeTab.tabId\"\n [attr.aria-labelledby]=\"'tab-' + activeTab.tabId\"\n >\n @if (tabContent) {\n <ng-container [ngTemplateOutlet]=\"tabContent\" />\n }\n\n <ng-content select=\"router-outlet\" />\n </div>\n }\n</div>\n\n<ng-template #tabsMenu>\n <si-menu #menu>\n @for (tab of tabPanels(); track tab) {\n @let badgeColor = tab.badgeColor();\n @let badgeIsNumber = tab.badgeIsNumber();\n\n @if (badgeColor && badgeIsNumber) {\n <!-- eslint-disable @angular-eslint/template/no-any -->\n <a\n #menuItem\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [badgeColor]=\"badgeColor\"\n [badge]=\"$any(tab.badgeContent())\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tabIsLink(tab) ? tab.routerLink?.urlTree : undefined\"\n (keydown.enter)=\"tab.selectTab(true)\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else if (badgeIsNumber && badgeColor) {\n <a\n #menuItem\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [badgeColor]=\"badgeColor\"\n [badge]=\"$any(tab.badgeContent())\"\n [routerLink]=\"tabIsLink(tab) ? tab.routerLink?.urlTree : undefined\"\n (keydown.enter)=\"tab.selectTab(true)\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <!-- eslint-enable -->\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else {\n <a\n #menuItem\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tabIsLink(tab) ? tab.routerLink?.urlTree : undefined\"\n (keydown.enter)=\"tab.selectTab(true)\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n }\n }\n </si-menu>\n</ng-template>\n\n<ng-template #badgeTemplate let-tab=\"tab\">\n <div class=\"d-flex align-items-center space-between flex-no-wrap justify-content-between\">\n {{ tab.heading() }}\n @if (tab.badgeContent() === true) {\n <span class=\"badge-dot\"></span>\n } @else if (tab.badgeContent() && !tab.badgeColor()) {\n <!-- eslint-disable-next-line @angular-eslint/template/no-any -->\n <span class=\"badge-text\"> {{ $any(tab.badgeContent() ?? '') | translate }}</span>\n }\n </div>\n</ng-template>\n", styles: [":host{display:block;flex-direction:column}.tabs-container{display:flex;flex-wrap:wrap;overflow:hidden;block-size:100%;min-block-size:40px}.tabs-container:before{inset-block-start:38px;inset-block-end:auto}.tab-container-buttonbar-list{display:flex;min-block-size:40px;overflow:hidden;flex:1;order:1;min-inline-size:100px}.btn.dropdown{color:var(--element-text-primary);min-inline-size:0;border-block-end:2px solid var(--element-ui-4);order:2;block-size:40px;padding-inline:12px;flex-shrink:0}.btn.dropdown:hover{border-color:var(--element-ui-4);color:var(--element-action-secondary-text-hover)}a[si-menu-item] .badge-dot{inset-block-end:4px;min-inline-size:12px;margin-inline-start:4px}.tab-content{inline-size:100%;block-size:calc(100% - 40px);order:3}.tabs-wrapper{overflow-y:hidden;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none}\n"], dependencies: [{ kind: "pipe", type: SiTranslatePipe, name: "translate" }, { kind: "directive", type: SiMenuDirective, selector: "si-menu" }, { kind: "component", type: SiMenuItemComponent, selector: "si-menu-item, a[si-menu-item], button[si-menu-item]" }, { kind: "directive", type: CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: SiResizeObserverModule }, { kind: "directive", type: i1$1.SiResizeObserverDirective, selector: "[siResizeObserver]", inputs: ["resizeThrottle", "emitInitial"], outputs: ["siResizeObserver"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
462
326
  }
463
327
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTabsetNextComponent, decorators: [{
464
328
  type: Component,
465
- args: [{ selector: 'si-tabset-next', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
466
- SiTranslateModule,
329
+ args: [{ selector: 'si-tabset-next', imports: [
330
+ SiTranslatePipe,
467
331
  SiMenuDirective,
468
332
  SiMenuItemComponent,
469
333
  CdkMenuTrigger,
470
334
  NgTemplateOutlet,
471
335
  SiResizeObserverModule,
472
336
  RouterLink
473
- ], providers: [
337
+ ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
474
338
  {
475
339
  provide: SI_TABSET_NEXT,
476
340
  useExisting: SiTabsetNextComponent
477
341
  }
478
- ], template: "<div class=\"tabs-container\">\n <div\n #tabContainer\n class=\"tab-container-buttonbar-list nav nav-tabs\"\n (siResizeObserver)=\"resize($event)\"\n >\n <div\n #tabScrollContainer\n role=\"tablist\"\n tabindex=\"-1\"\n class=\"d-flex tabs-wrapper\"\n [style.max-width.px]=\"maxWrapperWidth()\"\n >\n <ng-content />\n </div>\n\n @if (visibleTabIndexes().length < tabPanels().length) {\n <button\n #menuButton\n type=\"button\"\n class=\"dropdown btn btn-tertiary focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"tabsMenu\"\n (cdkMenuOpened)=\"menuOpened()\"\n >\n <i class=\"icon element-options m-0\"></i>\n </button>\n }\n </div>\n @let tabContent = this.activeTab()?.tabContent();\n @let activeTab = this.activeTab();\n\n @if (activeTab) {\n <div\n class=\"tab-content\"\n role=\"tabpanel\"\n [id]=\"'content-' + activeTab.tabId\"\n [attr.aria-labelledby]=\"'tab-' + activeTab.tabId\"\n >\n @if (tabContent) {\n <ng-container [ngTemplateOutlet]=\"tabContent\" />\n }\n\n <ng-content select=\"router-outlet\" />\n </div>\n }\n</div>\n\n<ng-template #tabsMenu>\n <si-menu #menu>\n @for (tab of tabPanels(); track tab) {\n @let badgeColor = tab.badgeColor();\n @let badgeIsNumber = tab.badgeIsNumber();\n\n @if (badgeColor && badgeIsNumber) {\n <!-- eslint-disable @angular-eslint/template/no-any -->\n <a\n #menuItem\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [badgeColor]=\"badgeColor\"\n [badge]=\"$any(tab.badgeContent())\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tabIsLink(tab) ? tab.routerLink?.urlTree : undefined\"\n (keydown.enter)=\"tab.selectTab(true)\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else if (badgeIsNumber && badgeColor) {\n <a\n #menuItem\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [badgeColor]=\"badgeColor\"\n [badge]=\"$any(tab.badgeContent())\"\n [routerLink]=\"tabIsLink(tab) ? tab.routerLink?.urlTree : undefined\"\n (keydown.enter)=\"tab.selectTab(true)\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <!-- eslint-enable -->\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else {\n <a\n #menuItem\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tabIsLink(tab) ? tab.routerLink?.urlTree : undefined\"\n (keydown.enter)=\"tab.selectTab(true)\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n }\n }\n </si-menu>\n</ng-template>\n\n<ng-template #badgeTemplate let-tab=\"tab\">\n <div class=\"d-flex align-items-center space-between flex-no-wrap justify-content-between\">\n {{ tab.heading() }}\n @if (tab.badgeContent() === true) {\n <span class=\"badge-dot\"></span>\n } @else if (tab.badgeContent() && !tab.badgeColor()) {\n <!-- eslint-disable-next-line @angular-eslint/template/no-any -->\n <span class=\"badge-text\"> {{ $any(tab.badgeContent() ?? '') | translate }}</span>\n }\n </div>\n</ng-template>\n", styles: [":host{display:block;flex-direction:column}.tabs-container{display:flex;flex-wrap:wrap;overflow:hidden;block-size:100%;min-block-size:40px}.tabs-container:before{inset-block-start:38px;inset-block-end:auto}.tab-container-buttonbar-list{display:flex;min-block-size:40px;overflow:hidden;flex:1;order:1;min-inline-size:100px}.btn.dropdown{color:var(--element-text-primary);min-inline-size:0;border-block-end:2px solid var(--element-ui-4);order:2;block-size:40px;padding-inline:12px}.btn.dropdown:hover{border-color:var(--element-ui-4);color:var(--element-action-secondary-text-hover)}a[si-menu-item] .badge-dot{inset-block-end:4px;min-inline-size:12px;margin-inline-start:4px}.tab-content{inline-size:100%;block-size:calc(100% - 40px);order:3}.tabs-wrapper{overflow-y:hidden;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none}\n"] }]
342
+ ], template: "<div class=\"tabs-container\">\n <div class=\"tab-container-buttonbar-list nav nav-tabs\">\n <div\n #tabScrollContainer\n role=\"tablist\"\n tabindex=\"-1\"\n class=\"d-flex tabs-wrapper\"\n (siResizeObserver)=\"\n resizeContainer(tabScrollContainer.clientWidth, tabScrollContainer.scrollWidth)\n \"\n >\n <ng-content />\n </div>\n\n @if (showMenuButton()) {\n <button\n type=\"button\"\n class=\"dropdown btn btn-tertiary focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"tabsMenu\"\n (cdkMenuOpened)=\"menuOpened()\"\n >\n <i class=\"icon element-options m-0\"></i>\n </button>\n }\n </div>\n @let tabContent = this.activeTab()?.tabContent();\n @let activeTab = this.activeTab();\n\n @if (activeTab) {\n <div\n class=\"tab-content\"\n role=\"tabpanel\"\n [id]=\"'content-' + activeTab.tabId\"\n [attr.aria-labelledby]=\"'tab-' + activeTab.tabId\"\n >\n @if (tabContent) {\n <ng-container [ngTemplateOutlet]=\"tabContent\" />\n }\n\n <ng-content select=\"router-outlet\" />\n </div>\n }\n</div>\n\n<ng-template #tabsMenu>\n <si-menu #menu>\n @for (tab of tabPanels(); track tab) {\n @let badgeColor = tab.badgeColor();\n @let badgeIsNumber = tab.badgeIsNumber();\n\n @if (badgeColor && badgeIsNumber) {\n <!-- eslint-disable @angular-eslint/template/no-any -->\n <a\n #menuItem\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [badgeColor]=\"badgeColor\"\n [badge]=\"$any(tab.badgeContent())\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tabIsLink(tab) ? tab.routerLink?.urlTree : undefined\"\n (keydown.enter)=\"tab.selectTab(true)\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else if (badgeIsNumber && badgeColor) {\n <a\n #menuItem\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [badgeColor]=\"badgeColor\"\n [badge]=\"$any(tab.badgeContent())\"\n [routerLink]=\"tabIsLink(tab) ? tab.routerLink?.urlTree : undefined\"\n (keydown.enter)=\"tab.selectTab(true)\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <!-- eslint-enable -->\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else {\n <a\n #menuItem\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tabIsLink(tab) ? tab.routerLink?.urlTree : undefined\"\n (keydown.enter)=\"tab.selectTab(true)\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n }\n }\n </si-menu>\n</ng-template>\n\n<ng-template #badgeTemplate let-tab=\"tab\">\n <div class=\"d-flex align-items-center space-between flex-no-wrap justify-content-between\">\n {{ tab.heading() }}\n @if (tab.badgeContent() === true) {\n <span class=\"badge-dot\"></span>\n } @else if (tab.badgeContent() && !tab.badgeColor()) {\n <!-- eslint-disable-next-line @angular-eslint/template/no-any -->\n <span class=\"badge-text\"> {{ $any(tab.badgeContent() ?? '') | translate }}</span>\n }\n </div>\n</ng-template>\n", styles: [":host{display:block;flex-direction:column}.tabs-container{display:flex;flex-wrap:wrap;overflow:hidden;block-size:100%;min-block-size:40px}.tabs-container:before{inset-block-start:38px;inset-block-end:auto}.tab-container-buttonbar-list{display:flex;min-block-size:40px;overflow:hidden;flex:1;order:1;min-inline-size:100px}.btn.dropdown{color:var(--element-text-primary);min-inline-size:0;border-block-end:2px solid var(--element-ui-4);order:2;block-size:40px;padding-inline:12px;flex-shrink:0}.btn.dropdown:hover{border-color:var(--element-ui-4);color:var(--element-action-secondary-text-hover)}a[si-menu-item] .badge-dot{inset-block-end:4px;min-inline-size:12px;margin-inline-start:4px}.tab-content{inline-size:100%;block-size:calc(100% - 40px);order:3}.tabs-wrapper{overflow-y:hidden;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none}\n"] }]
479
343
  }] });
480
344
 
481
345
  /**
482
- * Copyright Siemens 2016 - 2025.
346
+ * Copyright (c) Siemens 2016 - 2025
483
347
  * SPDX-License-Identifier: MIT
484
348
  */
485
349