@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,12 +3,11 @@ import * as i0 from '@angular/core';
3
3
  import { inject, Injectable, input, booleanAttribute, computed, Component, signal, HostBinding, ChangeDetectionStrategy, InjectionToken, contentChild, ElementRef, isSignal, Input, Injector, HostListener, Directive, NgModule } from '@angular/core';
4
4
  import { FormGroup, FormControl, NgControl, RequiredValidator } from '@angular/forms';
5
5
  import { SiResponsiveContainerDirective } from '@siemens/element-ng/resize-observer';
6
- import * as i1 from '@siemens/element-translate-ng/translate';
7
- import { SiTranslateModule } from '@siemens/element-translate-ng/translate';
6
+ import { SiTranslatePipe } from '@siemens/element-translate-ng/translate';
8
7
  import { SiTooltipService } from '@siemens/element-ng/tooltip';
9
8
 
10
9
  /**
11
- * Copyright Siemens 2016 - 2025.
10
+ * Copyright (c) Siemens 2016 - 2025
12
11
  * SPDX-License-Identifier: MIT
13
12
  */
14
13
  /**
@@ -104,7 +103,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImpor
104
103
  }], ctorParameters: () => [{ type: undefined }] });
105
104
 
106
105
  /**
107
- * Copyright Siemens 2016 - 2025.
106
+ * Copyright (c) Siemens 2016 - 2025
108
107
  * SPDX-License-Identifier: MIT
109
108
  */
110
109
  class SiFormContainerComponent {
@@ -286,17 +285,17 @@ class SiFormContainerComponent {
286
285
  }));
287
286
  }
288
287
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiFormContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
289
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiFormContainerComponent, isStandalone: true, selector: "si-form-container", inputs: { form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, contentContainerBreakpoints: { classPropertyName: "contentContainerBreakpoints", publicName: "contentContainerBreakpoints", isSignal: true, isRequired: false, transformFunction: null }, disableContainerBreakpoints: { classPropertyName: "disableContainerBreakpoints", publicName: "disableContainerBreakpoints", isSignal: true, isRequired: false, transformFunction: null }, errorCodeTranslateKeyMap: { classPropertyName: "errorCodeTranslateKeyMap", publicName: "errorCodeTranslateKeyMap", isSignal: true, isRequired: false, transformFunction: null }, controlNameTranslateKeyMap: { classPropertyName: "controlNameTranslateKeyMap", publicName: "controlNameTranslateKeyMap", isSignal: true, isRequired: false, transformFunction: null }, disableErrorPrinting: { classPropertyName: "disableErrorPrinting", publicName: "disableErrorPrinting", isSignal: true, isRequired: false, transformFunction: null }, labelWidth: { classPropertyName: "labelWidth", publicName: "labelWidth", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--si-form-label-width": "labelWidth()" } }, ngImport: i0, template: "<div class=\"d-flex flex-column align-content-stretch flex-grow-1 flex-shrink-1\">\n @if (disableContainerBreakpoints() || hasParentContainer) {\n <div class=\"flex-grow-1 flex-shrink-1\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\" />\n </div>\n } @else {\n <div\n class=\"flex-grow-1 flex-shrink-1\"\n siResponsiveContainer\n [breakpoints]=\"contentContainerBreakpoints()\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\" />\n </div>\n }\n\n @if (!readonly()) {\n <div class=\"d-flex flex-row flex-nowrap flex-grow-0 flex-shrink-0 py-4\">\n <div\n class=\"d-flex flex-grow-1 flex-shrink-1 justify-content-end text-end overflow-hidden mx-6 my-auto\"\n [class.text-success]=\"validFormContainerMessage\"\n [class.text-danger]=\"invalidFormContainerMessage\"\n >\n <ng-content select=\"[si-form-container-message]\" />\n </div>\n\n <div class=\"m-auto flex-grow-0 flex-shrink-0\">\n <ng-content select=\"[si-form-container-buttons]\" />\n </div>\n </div>\n }\n</div>\n\n<ng-template #contentTemplate>\n <ng-content select=\"[si-form-container-content]\" />\n</ng-template>\n", styles: [":host{display:flex;flex:1 1 auto;flex-direction:column}:host ::slotted([si-form-container-message]),:host ::ng-deep [si-form-container-message]{max-inline-size:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.form-container-edit-help{text-decoration:underline;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: SiResponsiveContainerDirective, selector: "[siResponsiveContainer]", inputs: ["resizeThrottle", "breakpoints"], exportAs: ["siResponsiveContainer"] }, { kind: "ngmodule", type: SiTranslateModule }] });
288
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiFormContainerComponent, isStandalone: true, selector: "si-form-container", inputs: { form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, contentContainerBreakpoints: { classPropertyName: "contentContainerBreakpoints", publicName: "contentContainerBreakpoints", isSignal: true, isRequired: false, transformFunction: null }, disableContainerBreakpoints: { classPropertyName: "disableContainerBreakpoints", publicName: "disableContainerBreakpoints", isSignal: true, isRequired: false, transformFunction: null }, errorCodeTranslateKeyMap: { classPropertyName: "errorCodeTranslateKeyMap", publicName: "errorCodeTranslateKeyMap", isSignal: true, isRequired: false, transformFunction: null }, controlNameTranslateKeyMap: { classPropertyName: "controlNameTranslateKeyMap", publicName: "controlNameTranslateKeyMap", isSignal: true, isRequired: false, transformFunction: null }, disableErrorPrinting: { classPropertyName: "disableErrorPrinting", publicName: "disableErrorPrinting", isSignal: true, isRequired: false, transformFunction: null }, labelWidth: { classPropertyName: "labelWidth", publicName: "labelWidth", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--si-form-label-width": "labelWidth()" } }, ngImport: i0, template: "<div class=\"d-flex flex-column align-content-stretch flex-grow-1 flex-shrink-1\">\n @if (disableContainerBreakpoints() || hasParentContainer) {\n <div class=\"flex-grow-1 flex-shrink-1\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\" />\n </div>\n } @else {\n <div\n class=\"flex-grow-1 flex-shrink-1\"\n siResponsiveContainer\n [breakpoints]=\"contentContainerBreakpoints()\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\" />\n </div>\n }\n\n @if (!readonly()) {\n <div class=\"d-flex flex-row flex-nowrap flex-grow-0 flex-shrink-0 py-4\">\n <div\n class=\"d-flex flex-grow-1 flex-shrink-1 justify-content-end text-end overflow-hidden mx-6 my-auto\"\n [class.text-success]=\"validFormContainerMessage\"\n [class.text-danger]=\"invalidFormContainerMessage\"\n >\n <ng-content select=\"[si-form-container-message]\" />\n </div>\n\n <div class=\"m-auto flex-grow-0 flex-shrink-0\">\n <ng-content select=\"[si-form-container-buttons]\" />\n </div>\n </div>\n }\n</div>\n\n<ng-template #contentTemplate>\n <ng-content select=\"[si-form-container-content]\" />\n</ng-template>\n", styles: [":host{display:flex;flex:1 1 auto;flex-direction:column}:host ::slotted([si-form-container-message]),:host ::ng-deep [si-form-container-message]{max-inline-size:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.form-container-edit-help{text-decoration:underline;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: SiResponsiveContainerDirective, selector: "[siResponsiveContainer]", inputs: ["resizeThrottle", "breakpoints"], exportAs: ["siResponsiveContainer"] }] });
290
289
  }
291
290
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiFormContainerComponent, decorators: [{
292
291
  type: Component,
293
- args: [{ selector: 'si-form-container', imports: [NgTemplateOutlet, SiResponsiveContainerDirective, SiTranslateModule], host: {
292
+ args: [{ selector: 'si-form-container', imports: [NgTemplateOutlet, SiResponsiveContainerDirective], host: {
294
293
  '[style.--si-form-label-width]': 'labelWidth()'
295
294
  }, template: "<div class=\"d-flex flex-column align-content-stretch flex-grow-1 flex-shrink-1\">\n @if (disableContainerBreakpoints() || hasParentContainer) {\n <div class=\"flex-grow-1 flex-shrink-1\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\" />\n </div>\n } @else {\n <div\n class=\"flex-grow-1 flex-shrink-1\"\n siResponsiveContainer\n [breakpoints]=\"contentContainerBreakpoints()\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\" />\n </div>\n }\n\n @if (!readonly()) {\n <div class=\"d-flex flex-row flex-nowrap flex-grow-0 flex-shrink-0 py-4\">\n <div\n class=\"d-flex flex-grow-1 flex-shrink-1 justify-content-end text-end overflow-hidden mx-6 my-auto\"\n [class.text-success]=\"validFormContainerMessage\"\n [class.text-danger]=\"invalidFormContainerMessage\"\n >\n <ng-content select=\"[si-form-container-message]\" />\n </div>\n\n <div class=\"m-auto flex-grow-0 flex-shrink-0\">\n <ng-content select=\"[si-form-container-buttons]\" />\n </div>\n </div>\n }\n</div>\n\n<ng-template #contentTemplate>\n <ng-content select=\"[si-form-container-content]\" />\n</ng-template>\n", styles: [":host{display:flex;flex:1 1 auto;flex-direction:column}:host ::slotted([si-form-container-message]),:host ::ng-deep [si-form-container-message]{max-inline-size:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.form-container-edit-help{text-decoration:underline;cursor:pointer}\n"] }]
296
295
  }] });
297
296
 
298
297
  /**
299
- * Copyright Siemens 2016 - 2025.
298
+ * Copyright (c) Siemens 2016 - 2025
300
299
  * SPDX-License-Identifier: MIT
301
300
  */
302
301
  class SiFormFieldsetComponent {
@@ -347,11 +346,11 @@ class SiFormFieldsetComponent {
347
346
  this.formItems.update(items => items.filter(i => i !== item));
348
347
  }
349
348
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiFormFieldsetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
350
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiFormFieldsetComponent, isStandalone: true, selector: "si-form-fieldset", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, labelWidth: { classPropertyName: "labelWidth", publicName: "labelWidth", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, inline: { classPropertyName: "inline", publicName: "inline", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group" }, properties: { "style.--si-form-label-width": "labelWidth()", "attr.aria-labelledby": "this.labelId" }, classAttribute: "si-form-input" }, ngImport: i0, template: "<div class=\"pt-1 pb-0\">\n <div class=\"form-label\" [class.required]=\"isRequired()\" [id]=\"labelId\">{{\n label() | translate\n }}</div>\n</div>\n<div>\n <ng-content />\n @if (hasOnlyRadios()) {\n <div class=\"invalid-feedback\" [class.d-block]=\"touched()\">\n @for (error of errors(); track error) {\n <div>\n {{ error.message | translate: error.params }}\n </div>\n }\n </div>\n }\n</div>\n", styles: [":host.si-form-input{margin-block-end:12px;display:flex;flex-direction:column}:host.si-form-input .form-item-content{flex:1 1 0;display:flex;align-items:center;flex-wrap:wrap;position:relative}.form-label:empty{display:none}:host-context(si-form-fieldset) :host(.form-check):not(.form-check-inline){display:block}:host(.form-check):has(.form-check){padding-block:0}:host-context(.si-container-sm),:host-context(.si-container-md),:host-context(.si-container-lg),:host-context(.si-container-xl),:host-context(.si-container-xxl){flex-direction:row}:host-context(.si-container-sm) .form-label,:host-context(.si-container-md) .form-label,:host-context(.si-container-lg) .form-label,:host-context(.si-container-xl) .form-label,:host-context(.si-container-xxl) .form-label{padding-block:8px;padding-inline:16px;inline-size:var(--si-form-label-width, 16.6666666667%);line-height:1.143}:host-context(.si-container-sm) .form-label:empty,:host-context(.si-container-md) .form-label:empty,:host-context(.si-container-lg) .form-label:empty,:host-context(.si-container-xl) .form-label:empty,:host-context(.si-container-xxl) .form-label:empty{display:block}:host-context(.si-container-sm) :host-context(si-form-fieldset) .form-label,:host-context(.si-container-md) :host-context(si-form-fieldset) .form-label,:host-context(.si-container-lg) :host-context(si-form-fieldset) .form-label,:host-context(.si-container-xl) :host-context(si-form-fieldset) .form-label,:host-context(.si-container-xxl) :host-context(si-form-fieldset) .form-label{padding-block:0}:host-context(.si-container-sm) :host(.form-check) .form-label,:host-context(.si-container-md) :host(.form-check) .form-label,:host-context(.si-container-lg) :host(.form-check) .form-label,:host-context(.si-container-xl) :host(.form-check) .form-label,:host-context(.si-container-xxl) :host(.form-check) .form-label{padding-block:2px}\n"], dependencies: [{ kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
349
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiFormFieldsetComponent, isStandalone: true, selector: "si-form-fieldset", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, labelWidth: { classPropertyName: "labelWidth", publicName: "labelWidth", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, inline: { classPropertyName: "inline", publicName: "inline", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group" }, properties: { "style.--si-form-label-width": "labelWidth()", "attr.aria-labelledby": "this.labelId" }, classAttribute: "si-form-input" }, ngImport: i0, template: "<div class=\"pt-1 pb-0\">\n <div class=\"form-label\" [class.required]=\"isRequired()\" [id]=\"labelId\">{{\n label() | translate\n }}</div>\n</div>\n<div>\n <ng-content />\n @if (hasOnlyRadios()) {\n <div class=\"invalid-feedback\" [class.d-block]=\"touched()\">\n @for (error of errors(); track error) {\n <div>\n {{ error.message | translate: error.params }}\n </div>\n }\n </div>\n }\n</div>\n", styles: [":host.si-form-input{margin-block-end:12px;display:flex;flex-direction:column}:host.si-form-input .form-item-content{flex:1 1 0;display:flex;align-items:center;flex-wrap:wrap;position:relative}.form-label:empty{display:none}:host-context(si-form-fieldset) :host(.form-check):not(.form-check-inline){display:block}:host(.form-check):has(.form-check){padding-block:0}:host-context(.si-container-sm),:host-context(.si-container-md),:host-context(.si-container-lg),:host-context(.si-container-xl),:host-context(.si-container-xxl){flex-direction:row}:host-context(.si-container-sm) .form-label,:host-context(.si-container-md) .form-label,:host-context(.si-container-lg) .form-label,:host-context(.si-container-xl) .form-label,:host-context(.si-container-xxl) .form-label{padding-block:8px;padding-inline:16px;inline-size:var(--si-form-label-width, 16.6666666667%);line-height:1.143}:host-context(.si-container-sm) .form-label:empty,:host-context(.si-container-md) .form-label:empty,:host-context(.si-container-lg) .form-label:empty,:host-context(.si-container-xl) .form-label:empty,:host-context(.si-container-xxl) .form-label:empty{display:block}:host-context(.si-container-sm) :host-context(si-form-fieldset) .form-label,:host-context(.si-container-md) :host-context(si-form-fieldset) .form-label,:host-context(.si-container-lg) :host-context(si-form-fieldset) .form-label,:host-context(.si-container-xl) :host-context(si-form-fieldset) .form-label,:host-context(.si-container-xxl) :host-context(si-form-fieldset) .form-label{padding-block:0}:host-context(.si-container-sm) :host(.form-check) .form-label,:host-context(.si-container-md) :host(.form-check) .form-label,:host-context(.si-container-lg) :host(.form-check) .form-label,:host-context(.si-container-xl) :host(.form-check) .form-label,:host-context(.si-container-xxl) :host(.form-check) .form-label{padding-block:2px}\n"], dependencies: [{ kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
351
350
  }
352
351
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiFormFieldsetComponent, decorators: [{
353
352
  type: Component,
354
- args: [{ selector: 'si-form-fieldset', imports: [SiTranslateModule], host: {
353
+ args: [{ selector: 'si-form-fieldset', imports: [SiTranslatePipe], host: {
355
354
  role: 'group',
356
355
  class: 'si-form-input',
357
356
  '[style.--si-form-label-width]': 'labelWidth()'
@@ -362,7 +361,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImpor
362
361
  }] } });
363
362
 
364
363
  /**
365
- * Copyright Siemens 2016 - 2025.
364
+ * Copyright (c) Siemens 2016 - 2025
366
365
  * SPDX-License-Identifier: MIT
367
366
  */
368
367
  const SI_FORM_ITEM_CONTROL = new InjectionToken('si.form-item.control');
@@ -410,7 +409,7 @@ class SiFormFieldNativeControl {
410
409
  }
411
410
 
412
411
  /**
413
- * Copyright Siemens 2016 - 2025.
412
+ * Copyright (c) Siemens 2016 - 2025
414
413
  * SPDX-License-Identifier: MIT
415
414
  */
416
415
  class SiFormItemComponent {
@@ -559,11 +558,11 @@ class SiFormItemComponent {
559
558
  }
560
559
  }
561
560
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiFormItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
562
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiFormItemComponent, isStandalone: true, selector: "si-form-item", inputs: { inputId: { classPropertyName: "inputId", publicName: "inputId", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, labelWidth: { classPropertyName: "labelWidth", publicName: "labelWidth", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: false, isRequired: false, transformFunction: booleanAttribute }, disableErrorPrinting: { classPropertyName: "disableErrorPrinting", publicName: "disableErrorPrinting", isSignal: true, isRequired: false, transformFunction: null }, formErrorMapper: { classPropertyName: "formErrorMapper", publicName: "formErrorMapper", isSignal: true, isRequired: false, transformFunction: null }, requiredInput: { classPropertyName: "requiredInput", publicName: "required", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.required": "required()", "style.--si-form-label-width": "labelWidthCssVar()", "class.form-check": "fieldControl()?.isFormCheck", "class.form-check-inline": "fieldset?.inline()", "class.si-form-input": "!fieldset" } }, queries: [{ propertyName: "fieldControlQuery", first: true, predicate: SI_FORM_ITEM_CONTROL, descendants: true, isSignal: true }, { propertyName: "ngControl", first: true, predicate: NgControl, descendants: true, isSignal: true }, { propertyName: "controlElementRef", first: true, predicate: NgControl, descendants: true, read: ElementRef, isSignal: true }, { propertyName: "requiredValidator", first: true, predicate: RequiredValidator, descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "@if (!fieldControl()?.isFormCheck || (isLegacyMode() && label())) {\n @if (label()) {\n @let labeledBy = formItemLabelledBy;\n @if (labeledBy) {\n <span\n class=\"text-break form-label\"\n [id]=\"labeledBy\"\n [class.required]=\"required() && !this.fieldset?.hasOnlyRadios()\"\n >{{ label() | translate }}</span\n >\n } @else {\n <label class=\"text-break form-label\" [for]=\"formItemId\" [class.required]=\"required()\">{{\n label() | translate\n }}</label>\n }\n }\n <div class=\"form-item-content\">\n <ng-container [ngTemplateOutlet]=\"content\" />\n @if (printErrors() && !fieldset?.hasOnlyRadios()) {\n <div class=\"invalid-feedback\" [attr.id]=\"formItemErrormessageId\">\n @for (error of errors(); track error.key) {\n <div>\n {{ error.message | translate: error.params }}\n </div>\n }\n </div>\n }\n </div>\n} @else {\n <!--Block the space if no form-field is provided. Otherwise it looks weird.-->\n @if (!fieldset) {\n <div class=\"form-label\"></div>\n }\n <div class=\"form-item-content\">\n <ng-container [ngTemplateOutlet]=\"checkbox\" />\n @if (label()) {\n @if (fieldControl()?.labelledby) {\n <span\n class=\"text-break form-check-label\"\n [id]=\"fieldControl()!.labelledby\"\n [class.required]=\"required() && !this.fieldset?.hasOnlyRadios()\"\n >{{ label()! | translate }}</span\n >\n } @else {\n <label\n class=\"text-break form-check-label\"\n [for]=\"formItemId\"\n [class.required]=\"required() && !this.fieldset?.hasOnlyRadios()\"\n >{{ label()! | translate }}</label\n >\n }\n }\n <ng-container [ngTemplateOutlet]=\"content\" />\n @if (printErrors() && !fieldset?.hasOnlyRadios()) {\n <div class=\"invalid-feedback\" [attr.id]=\"formItemErrormessageId\">\n @for (error of errors(); track error.key) {\n <div>\n {{ error.message | translate: error.params }}\n </div>\n }\n </div>\n }\n </div>\n}\n\n<ng-template #checkbox>\n <ng-content select=\"input[type='checkbox'], input[type='radio']\" />\n</ng-template>\n<ng-template #content>\n <ng-content />\n</ng-template>\n", styles: [":host.si-form-input{margin-block-end:12px;display:flex;flex-direction:column}:host.si-form-input .form-item-content{flex:1 1 0;display:flex;align-items:center;flex-wrap:wrap;position:relative}.form-label:empty{display:none}:host-context(si-form-fieldset) :host(.form-check):not(.form-check-inline){display:block}:host(.form-check):has(.form-check){padding-block:0}:host-context(.si-container-sm),:host-context(.si-container-md),:host-context(.si-container-lg),:host-context(.si-container-xl),:host-context(.si-container-xxl){flex-direction:row}:host-context(.si-container-sm) .form-label,:host-context(.si-container-md) .form-label,:host-context(.si-container-lg) .form-label,:host-context(.si-container-xl) .form-label,:host-context(.si-container-xxl) .form-label{padding-block:8px;padding-inline:16px;inline-size:var(--si-form-label-width, 16.6666666667%);line-height:1.143}:host-context(.si-container-sm) .form-label:empty,:host-context(.si-container-md) .form-label:empty,:host-context(.si-container-lg) .form-label:empty,:host-context(.si-container-xl) .form-label:empty,:host-context(.si-container-xxl) .form-label:empty{display:block}:host-context(.si-container-sm) :host-context(si-form-fieldset) .form-label,:host-context(.si-container-md) :host-context(si-form-fieldset) .form-label,:host-context(.si-container-lg) :host-context(si-form-fieldset) .form-label,:host-context(.si-container-xl) :host-context(si-form-fieldset) .form-label,:host-context(.si-container-xxl) :host-context(si-form-fieldset) .form-label{padding-block:0}:host-context(.si-container-sm) :host(.form-check) .form-label,:host-context(.si-container-md) :host(.form-check) .form-label,:host-context(.si-container-lg) :host(.form-check) .form-label,:host-context(.si-container-xl) :host(.form-check) .form-label,:host-context(.si-container-xxl) :host(.form-check) .form-label{padding-block:2px}\n"], dependencies: [{ kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
561
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiFormItemComponent, isStandalone: true, selector: "si-form-item", inputs: { inputId: { classPropertyName: "inputId", publicName: "inputId", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, labelWidth: { classPropertyName: "labelWidth", publicName: "labelWidth", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: false, isRequired: false, transformFunction: booleanAttribute }, disableErrorPrinting: { classPropertyName: "disableErrorPrinting", publicName: "disableErrorPrinting", isSignal: true, isRequired: false, transformFunction: null }, formErrorMapper: { classPropertyName: "formErrorMapper", publicName: "formErrorMapper", isSignal: true, isRequired: false, transformFunction: null }, requiredInput: { classPropertyName: "requiredInput", publicName: "required", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.required": "required()", "style.--si-form-label-width": "labelWidthCssVar()", "class.form-check": "fieldControl()?.isFormCheck", "class.form-check-inline": "fieldset?.inline()", "class.si-form-input": "!fieldset" } }, queries: [{ propertyName: "fieldControlQuery", first: true, predicate: SI_FORM_ITEM_CONTROL, descendants: true, isSignal: true }, { propertyName: "ngControl", first: true, predicate: NgControl, descendants: true, isSignal: true }, { propertyName: "controlElementRef", first: true, predicate: NgControl, descendants: true, read: ElementRef, isSignal: true }, { propertyName: "requiredValidator", first: true, predicate: RequiredValidator, descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "@if (!fieldControl()?.isFormCheck || (isLegacyMode() && label())) {\n @if (label()) {\n @let labeledBy = formItemLabelledBy;\n @if (labeledBy) {\n <span\n class=\"text-break form-label\"\n [id]=\"labeledBy\"\n [class.required]=\"required() && !this.fieldset?.hasOnlyRadios()\"\n >{{ label() | translate }}</span\n >\n } @else {\n <label class=\"text-break form-label\" [for]=\"formItemId\" [class.required]=\"required()\">{{\n label() | translate\n }}</label>\n }\n }\n <div class=\"form-item-content\">\n <ng-container [ngTemplateOutlet]=\"content\" />\n @if (printErrors() && !fieldset?.hasOnlyRadios()) {\n <div class=\"invalid-feedback\" [attr.id]=\"formItemErrormessageId\">\n @for (error of errors(); track error.key) {\n <div>\n {{ error.message | translate: error.params }}\n </div>\n }\n </div>\n }\n </div>\n} @else {\n <!--Block the space if no form-field is provided. Otherwise it looks weird.-->\n @if (!fieldset) {\n <div class=\"form-label\"></div>\n }\n <div class=\"form-item-content\">\n <ng-container [ngTemplateOutlet]=\"checkbox\" />\n @if (label()) {\n @if (fieldControl()?.labelledby) {\n <span\n class=\"text-break form-check-label\"\n [id]=\"fieldControl()!.labelledby\"\n [class.required]=\"required() && !this.fieldset?.hasOnlyRadios()\"\n >{{ label()! | translate }}</span\n >\n } @else {\n <label\n class=\"text-break form-check-label\"\n [for]=\"formItemId\"\n [class.required]=\"required() && !this.fieldset?.hasOnlyRadios()\"\n >{{ label()! | translate }}</label\n >\n }\n }\n <ng-container [ngTemplateOutlet]=\"content\" />\n @if (printErrors() && !fieldset?.hasOnlyRadios()) {\n <div class=\"invalid-feedback\" [attr.id]=\"formItemErrormessageId\">\n @for (error of errors(); track error.key) {\n <div>\n {{ error.message | translate: error.params }}\n </div>\n }\n </div>\n }\n </div>\n}\n\n<ng-template #checkbox>\n <ng-content select=\"input[type='checkbox'], input[type='radio']\" />\n</ng-template>\n<ng-template #content>\n <ng-content />\n</ng-template>\n", styles: [":host.si-form-input{margin-block-end:12px;display:flex;flex-direction:column}:host.si-form-input .form-item-content{flex:1 1 0;display:flex;align-items:center;flex-wrap:wrap;position:relative}.form-label:empty{display:none}:host-context(si-form-fieldset) :host(.form-check):not(.form-check-inline){display:block}:host(.form-check):has(.form-check){padding-block:0}:host-context(.si-container-sm),:host-context(.si-container-md),:host-context(.si-container-lg),:host-context(.si-container-xl),:host-context(.si-container-xxl){flex-direction:row}:host-context(.si-container-sm) .form-label,:host-context(.si-container-md) .form-label,:host-context(.si-container-lg) .form-label,:host-context(.si-container-xl) .form-label,:host-context(.si-container-xxl) .form-label{padding-block:8px;padding-inline:16px;inline-size:var(--si-form-label-width, 16.6666666667%);line-height:1.143}:host-context(.si-container-sm) .form-label:empty,:host-context(.si-container-md) .form-label:empty,:host-context(.si-container-lg) .form-label:empty,:host-context(.si-container-xl) .form-label:empty,:host-context(.si-container-xxl) .form-label:empty{display:block}:host-context(.si-container-sm) :host-context(si-form-fieldset) .form-label,:host-context(.si-container-md) :host-context(si-form-fieldset) .form-label,:host-context(.si-container-lg) :host-context(si-form-fieldset) .form-label,:host-context(.si-container-xl) :host-context(si-form-fieldset) .form-label,:host-context(.si-container-xxl) :host-context(si-form-fieldset) .form-label{padding-block:0}:host-context(.si-container-sm) :host(.form-check) .form-label,:host-context(.si-container-md) :host(.form-check) .form-label,:host-context(.si-container-lg) :host(.form-check) .form-label,:host-context(.si-container-xl) :host(.form-check) .form-label,:host-context(.si-container-xxl) :host(.form-check) .form-label{padding-block:2px}\n"], dependencies: [{ kind: "pipe", type: SiTranslatePipe, name: "translate" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
563
562
  }
564
563
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiFormItemComponent, decorators: [{
565
564
  type: Component,
566
- args: [{ selector: 'si-form-item', imports: [SiTranslateModule, NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, host: {
565
+ args: [{ selector: 'si-form-item', imports: [SiTranslatePipe, NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, host: {
567
566
  '[class.required]': 'required()',
568
567
  '[style.--si-form-label-width]': 'labelWidthCssVar()',
569
568
  '[class.form-check]': 'fieldControl()?.isFormCheck',
@@ -578,7 +577,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImpor
578
577
  }] } });
579
578
 
580
579
  /**
581
- * Copyright Siemens 2016 - 2025.
580
+ * Copyright (c) Siemens 2016 - 2025
582
581
  * SPDX-License-Identifier: MIT
583
582
  */
584
583
  const SI_FORM_VALIDATION_TOOLTIP_DATA = new InjectionToken('SiFormValidationTooltipData');
@@ -589,13 +588,13 @@ class SiFormValidationTooltipComponent {
589
588
  @for (error of errors(); track error.key) {
590
589
  <div>{{ error.message | translate: error.params }}</div>
591
590
  }
592
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }] });
591
+ `, isInline: true, dependencies: [{ kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
593
592
  }
594
593
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiFormValidationTooltipComponent, decorators: [{
595
594
  type: Component,
596
595
  args: [{
597
596
  selector: 'si-form-validation-tooltip',
598
- imports: [SiTranslateModule],
597
+ imports: [SiTranslatePipe],
599
598
  template: `
600
599
  @for (error of errors(); track error.key) {
601
600
  <div>{{ error.message | translate: error.params }}</div>
@@ -608,7 +607,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImpor
608
607
  }] });
609
608
 
610
609
  /**
611
- * Copyright Siemens 2016 - 2025.
610
+ * Copyright (c) Siemens 2016 - 2025
612
611
  * SPDX-License-Identifier: MIT
613
612
  */
614
613
  /**
@@ -713,7 +712,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImpor
713
712
  }] } });
714
713
 
715
714
  /**
716
- * Copyright Siemens 2016 - 2025.
715
+ * Copyright (c) Siemens 2016 - 2025
717
716
  * SPDX-License-Identifier: MIT
718
717
  */
719
718
  /** @deprecated This directive is no longer needed. {@link SiFormItemComponent} will detect native controls automatically. */
@@ -767,7 +766,7 @@ const provideFormValidationErrorMapper = (mapper) => ({
767
766
  });
768
767
 
769
768
  /**
770
- * Copyright Siemens 2016 - 2025.
769
+ * Copyright (c) Siemens 2016 - 2025
771
770
  * SPDX-License-Identifier: MIT
772
771
  */
773
772
  class SiFormModule {
@@ -792,9 +791,7 @@ class SiFormModule {
792
791
  SiFormFieldsetComponent,
793
792
  SiFormItemComponent,
794
793
  SiFormItemControlInputDirective] });
795
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiFormModule, imports: [SiFormContainerComponent,
796
- SiFormFieldsetComponent,
797
- SiFormItemComponent] });
794
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiFormModule });
798
795
  }
799
796
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiFormModule, decorators: [{
800
797
  type: NgModule,
@@ -815,7 +812,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImpor
815
812
  }] });
816
813
 
817
814
  /**
818
- * Copyright Siemens 2016 - 2025.
815
+ * Copyright (c) Siemens 2016 - 2025
819
816
  * SPDX-License-Identifier: MIT
820
817
  */
821
818
 
@@ -1 +1 @@
1
- {"version":3,"file":"siemens-element-ng-form.mjs","sources":["../../../../projects/element-ng/form/si-form-validation-error.service.ts","../../../../projects/element-ng/form/si-form-container/si-form-container.component.ts","../../../../projects/element-ng/form/si-form-container/si-form-container.component.html","../../../../projects/element-ng/form/form-fieldset/si-form-fieldset.component.ts","../../../../projects/element-ng/form/form-fieldset/si-form-fieldset.component.html","../../../../projects/element-ng/form/si-form-item.control.ts","../../../../projects/element-ng/form/si-form-item/si-form-field-native.control.ts","../../../../projects/element-ng/form/si-form-item/si-form-item.component.ts","../../../../projects/element-ng/form/si-form-item/si-form-item.component.html","../../../../projects/element-ng/form/si-form-validation-tooltip/si-form-validation-tooltip.component.ts","../../../../projects/element-ng/form/si-form-validation-tooltip/si-form-validation-tooltip.directive.ts","../../../../projects/element-ng/form/si-form-item-control-input.directive.ts","../../../../projects/element-ng/form/si-form-validation-error.provider.ts","../../../../projects/element-ng/form/si-form.module.ts","../../../../projects/element-ng/form/index.ts","../../../../projects/element-ng/form/siemens-element-ng-form.ts"],"sourcesContent":["/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { inject, Injectable } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\n\nimport { SiFormError } from './si-form-item/si-form-item.component';\nimport { SiFormValidationErrorMapper } from './si-form-validation-error.model';\n\n/**\n * Creates the map of default error resolver.\n * This is a function as $localize requires an injection context.\n *\n * @internal\n */\nexport const buildDefaults = (): SiFormValidationErrorMapper => ({\n min: $localize`:@@SI_FORM_CONTAINER.ERROR.MIN:The value is too small`,\n max: $localize`:@@SI_FORM_CONTAINER.ERROR.MAX:The value is too large.`,\n required: $localize`:@@SI_FORM_CONTAINER.ERROR.REQUIRED:A value is required.`,\n requiredTrue: $localize`:@@SI_FORM_CONTAINER.ERROR.REQUIRED_TRUE:The value should be true.`,\n email: $localize`:@@SI_FORM_CONTAINER.ERROR.EMAIL:The email is not valid.`,\n minlength: $localize`:@@SI_FORM_CONTAINER.ERROR.MIN_LENGTH:The minimum number of characters is not met.`,\n maxlength: $localize`:@@SI_FORM_CONTAINER.ERROR.MAX_LENGTH:A maximum number of characters is exceeded.`,\n ipv4Address: $localize`:@@SI_FORM_CONTAINER.ERROR.IPV4:Invalid IPv4 address.`,\n ipv6Address: $localize`:@@SI_FORM_CONTAINER.ERROR.IPV6:Invalid IPv6 address.`,\n pattern: $localize`:@@SI_FORM_CONTAINER.ERROR.PATTERN:The value does not match the predefined pattern.`,\n numberFormat: $localize`:@@SI_FORM_CONTAINER.ERROR.NUMBER_FORMAT:The value is not a valid number.`,\n dateFormat: $localize`:@@SI_FORM_CONTAINER.ERROR.DATE_FORMAT:Invalid date format.`,\n maxDate: $localize`:@@SI_FORM_CONTAINER.ERROR.MAX_DATE:The date is too far in the future.`,\n minDate: $localize`:@@SI_FORM_CONTAINER.ERROR.MIN_DATE:The date is too far in the past.`\n});\n\n/**\n * A service to resolve the validation error of an Angular control to a message or translation key.\n *\n * It can be provided using {@link provideFormValidationErrorMapper}.\n * If not provided, there will be a default instance in the root injector using only the default keys.\n *\n * There can be multiple instances to support providing in a lazy loaded module.\n * If the service cannot find a message, it will try to resolve it using a parent service if available.\n *\n * @internal\n */\n@Injectable({\n providedIn: 'root',\n useFactory: () => new SiFormValidationErrorService(buildDefaults())\n})\nexport class SiFormValidationErrorService {\n private readonly parent = inject(SiFormValidationErrorService, {\n optional: true,\n skipSelf: true\n });\n\n constructor(private errorMapper: SiFormValidationErrorMapper) {}\n\n /**\n * Resolves the provided form errors to a list of {@link SiFormError}.\n * To resolution order is:\n * 1. componentMapper\n * 2. containerMapper using the controlName\n * 3. containerMapper without controlName\n * 4. errorMapper of the service using the controlName\n * 5. errorMapper of the service\n * 6: parent service\n */\n resolveErrors(\n controlName: string | number | null | undefined,\n errors: ValidationErrors | null,\n componentMapper?: SiFormValidationErrorMapper,\n containerMapper?: SiFormValidationErrorMapper\n ): SiFormError[] {\n if (!errors) {\n return [];\n }\n /*\n * Converts the angular error object (like: {required: true, minLength: {actualLength: 1, requiredLength: 3}})\n * to SiFormError[].\n * Therefore, the error key is look up in the error mappers.\n * If it can be resolved, the error will be printed using the resolved text.\n */\n return Object.entries(errors).map(([key, params]) =>\n this.resolveError(key, controlName, params, componentMapper, containerMapper)\n );\n }\n\n private resolveError(\n key: string,\n controlName: string | number | null | undefined,\n params: any,\n componentMapper?: SiFormValidationErrorMapper,\n containerMapper?: SiFormValidationErrorMapper\n ): SiFormError {\n return (\n this.resolveMessage(key, controlName, params, componentMapper) ??\n this.resolveMessage(key, controlName, params, containerMapper) ??\n this.resolveMessage(key, controlName, params, this.errorMapper) ??\n this.parent?.resolveError(key, controlName, params) ?? { key, params }\n );\n }\n\n private resolveMessage(\n key: string,\n controlName: string | number | null | undefined,\n params: any,\n mapper?: SiFormValidationErrorMapper\n ): SiFormError | undefined {\n if (!mapper) {\n return undefined;\n }\n\n const resolver = mapper[`${controlName}.${key}`] ?? mapper[key];\n\n if (resolver) {\n const message = typeof resolver === 'function' ? resolver(params) : resolver;\n return message ? { key, message, params } : undefined;\n }\n return undefined;\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport { booleanAttribute, Component, computed, inject, input } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup } from '@angular/forms';\nimport { Breakpoints, SiResponsiveContainerDirective } from '@siemens/element-ng/resize-observer';\nimport { SiTranslateModule } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormValidationErrorMapper } from '../si-form-validation-error.model';\nimport { SiFormValidationErrorService } from '../si-form-validation-error.service';\n\nexport interface SiFormValidationError {\n controlName?: string;\n controlNameTranslationKey?: string;\n errorCode: string;\n errorCodeTranslationKey?: string;\n errorParams?: any;\n}\n\n@Component({\n selector: 'si-form-container',\n templateUrl: './si-form-container.component.html',\n styleUrl: './si-form-container.component.scss',\n imports: [NgTemplateOutlet, SiResponsiveContainerDirective, SiTranslateModule],\n host: {\n '[style.--si-form-label-width]': 'labelWidth()'\n }\n})\nexport class SiFormContainerComponent<TControl extends { [K in keyof TControl]: AbstractControl }> {\n /**\n * Set the form entity to the container to enable the overall form validation on in\n * the form container edit panel.\n */\n readonly form = input<FormGroup<TControl>>();\n\n /**\n * A form container in readonly mode is only displaying the form content without ability\n * to change it. The edit panel with typically save and cancel buttons is hidden. Set\n * to true to display the edit panel.\n *\n * @defaultValue false\n */\n readonly readonly = input(false, { transform: booleanAttribute });\n\n /**\n * The container hosts the form within a siResizeContainer to configure the breakpoint for\n * different screen sizes. Optionally, change the container breakpoints with the contentContainerBreakpoints\n * input.\n */\n readonly contentContainerBreakpoints = input<Breakpoints>();\n\n /**\n * In some scenarios, one may not want the form container to be responsible for the layout relevant\n * `si-container-[xs|...]` classes, but let this be done by a different, nested component, e.g. by a\n * group box. In these cases, the property should be set to true.\n *\n * @defaultValue false\n */\n readonly disableContainerBreakpoints = input(false, { transform: booleanAttribute });\n\n /**\n * Every validation error has an errorCode. This map holds translate keys for error codes. The keys can\n * be used to display a translated message for each validation error. The defaults old english readable\n * key defaults for the Angular standard validators of the `Validators` class like `min`, `max` or `required`.\n *\n * Use the input to set your own translate keys for the form validators you need.\n */\n readonly errorCodeTranslateKeyMap = input<\n Map<string, string> | SiFormValidationErrorMapper | undefined\n >();\n\n /**\n * A map the maps from control names of the form to their translate keys.\n * The initial map is empty and the user is responsible to add the required\n * translate keys.\n *\n * @defaultValue\n * ```\n * new Map<string, string>()\n * ```\n */\n readonly controlNameTranslateKeyMap = input(new Map<string, string>());\n\n /**\n * Disables the automatic error printing in all nested {@link SiFormItemComponent}. Error printing will be enabled by default in v46.\n *\n * @defaultValue false\n */\n readonly disableErrorPrinting = input(false, { transform: booleanAttribute });\n\n /**\n * A custom width value to be applied to all labels.\n *\n * @example labelWidth=\"100px\".\n */\n readonly labelWidth = input<string>();\n\n protected hasParentContainer = !!inject(SiFormContainerComponent, {\n optional: true,\n skipSelf: true\n });\n private errorResolver = inject(SiFormValidationErrorService);\n\n /** @internal */\n readonly formErrorMapper = computed(() => {\n const map = this.errorCodeTranslateKeyMap();\n\n let customMapper: SiFormValidationErrorMapper | undefined;\n if (map instanceof Map) {\n customMapper = Object.fromEntries(map.entries());\n } else if (map) {\n customMapper = map;\n }\n\n return {\n ...customMapper\n };\n });\n\n /**\n * Indicates whether the user interacted with the form.\n * @returns `true`, if the user selected at least one form element and\n * [blurred]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/blur_event} by losing focus again\n * (e.g. by setting focus on another element), or by editing the content of a form element.\n * Otherwise `false`.\n */\n get userInteractedWithForm(): boolean {\n const form = this.form();\n return !!form && (form.dirty || form.touched);\n }\n\n /**\n * Indicates whether content editor message shall be styled as success.\n * @returns `true`, if {@link SiFormContainerComponent.userInteractedWithForm} is true and\n * the form is valid.\n */\n get validFormContainerMessage(): boolean {\n return this.userInteractedWithForm && this.form()!.status === 'VALID';\n }\n\n /**\n * Indicates whether the content editor message shall be styled as warning.\n * @returns `true`, if {@link SiFormContainerComponent.userInteractedWithForm} is true and\n * the form is invalid.\n */\n get invalidFormContainerMessage(): boolean {\n return this.userInteractedWithForm && this.form()!.status === 'INVALID';\n }\n\n /**\n * Returns the validation errors of the form's control when the control name is provided. Otherwise,\n * returns all validation errors of the form. Returns an empty arry when no form is available or if\n * the name does not match to a control.\n * @param controlName - An optional name of a control that is part of the form.\n *\n * @deprecated The {@link SiFormItemComponent} is able to display validation errors automatically when `siFormInput` directive is used.\n */\n getValidationErrors(controlName?: string): SiFormValidationError[] {\n const form = this.form();\n if (!form) {\n return [];\n } else if (!controlName) {\n return this.getFormValidationErrorsPrivate(form);\n } else {\n const control = form.get(controlName);\n if (control) {\n return this.getFormValidationErrorsPrivate(control, controlName);\n } else {\n return [];\n }\n }\n }\n\n protected getControlNameTranslateKey(controlName: string): string | undefined {\n const controlNameTranslateKeyMap = this.controlNameTranslateKeyMap();\n if (!controlNameTranslateKeyMap) {\n return undefined;\n }\n return controlNameTranslateKeyMap.get(controlName) ?? controlName;\n }\n\n private getFormValidationErrorsPrivate(\n control: AbstractControl,\n controlName?: string\n ): SiFormValidationError[] {\n let errors: SiFormValidationError[] = [];\n\n // a form must either consist of\n // a) a formgroup (with nested form controls or groups) or\n // b) a single form control\n if (control instanceof FormGroup) {\n const formGroupErrors = this.getFormGroupErrors(control);\n errors = errors.concat(formGroupErrors);\n if (control.controls) {\n Object.keys(control.controls).forEach(key => {\n const formGroupControl = control.controls[key];\n const formGroupControlErrors = this.getFormValidationErrorsPrivate(formGroupControl, key);\n errors = errors.concat(formGroupControlErrors);\n });\n }\n } else if (control instanceof FormControl) {\n errors.push(\n ...this.errorResolver\n .resolveErrors(controlName, control.errors, undefined, this.formErrorMapper())\n .map(error => ({\n controlName,\n errorCode: error.key,\n errorParams: error.params,\n errorCodeTranslationKey: error.message,\n controlNameTranslationKey: controlName\n ? this.getControlNameTranslateKey(controlName)\n : undefined\n }))\n );\n }\n\n return errors;\n }\n\n private getFormGroupErrors(formGroup: FormGroup): SiFormValidationError[] {\n return this.errorResolver\n .resolveErrors(null, formGroup.errors, undefined, this.formErrorMapper())\n .map(error => ({\n errorCode: error.key,\n errorParams: error.params,\n errorCodeTranslationKey: error.message\n }));\n }\n}\n","<div class=\"d-flex flex-column align-content-stretch flex-grow-1 flex-shrink-1\">\n @if (disableContainerBreakpoints() || hasParentContainer) {\n <div class=\"flex-grow-1 flex-shrink-1\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\" />\n </div>\n } @else {\n <div\n class=\"flex-grow-1 flex-shrink-1\"\n siResponsiveContainer\n [breakpoints]=\"contentContainerBreakpoints()\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\" />\n </div>\n }\n\n @if (!readonly()) {\n <div class=\"d-flex flex-row flex-nowrap flex-grow-0 flex-shrink-0 py-4\">\n <div\n class=\"d-flex flex-grow-1 flex-shrink-1 justify-content-end text-end overflow-hidden mx-6 my-auto\"\n [class.text-success]=\"validFormContainerMessage\"\n [class.text-danger]=\"invalidFormContainerMessage\"\n >\n <ng-content select=\"[si-form-container-message]\" />\n </div>\n\n <div class=\"m-auto flex-grow-0 flex-shrink-0\">\n <ng-content select=\"[si-form-container-buttons]\" />\n </div>\n </div>\n }\n</div>\n\n<ng-template #contentTemplate>\n <ng-content select=\"[si-form-container-content]\" />\n</ng-template>\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DoCheck,\n HostBinding,\n input,\n signal\n} from '@angular/core';\nimport { SiTranslateModule } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormItemComponent } from '../si-form-item/si-form-item.component';\n\n@Component({\n selector: 'si-form-fieldset',\n imports: [SiTranslateModule],\n templateUrl: './si-form-fieldset.component.html',\n styleUrl: '../si-form.shared.scss',\n host: {\n role: 'group',\n class: 'si-form-input',\n '[style.--si-form-label-width]': 'labelWidth()'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiFormFieldsetComponent implements DoCheck {\n private static labelIdCounter = 0;\n\n /** The label for the entire fieldset. */\n readonly label = input.required<string>();\n\n /** Overrides the parent label width. */\n readonly labelWidth = input<string>();\n\n /**\n * Adds a required marker to the label\n *\n * @defaultValue false\n */\n readonly required = input(false, { transform: booleanAttribute });\n\n /**\n * Switches all child inputs to inline mode\n *\n * @defaultValue false\n */\n readonly inline = input(false, { transform: booleanAttribute });\n\n private readonly formItems = signal<SiFormItemComponent[]>([]);\n\n /** @internal */\n readonly hasOnlyRadios = computed(() => {\n // Check if the fieldset only contains radio buttons.\n // We can safely assume that, if all items have the same control name and if there are at least 2 items.\n const items = this.formItems();\n if (items.length > 1) {\n const first = items[0];\n return items.every(item => item.ngControl()?.name === first.ngControl()?.name);\n }\n\n return false;\n });\n\n protected readonly errors = computed(() =>\n // All errors should be the same for radios, so we just take the first.\n this.hasOnlyRadios() ? this.formItems()[0].errors() : []\n );\n protected readonly touched = signal(false);\n protected readonly isRequired = computed(\n () =>\n this.required() || (this.hasOnlyRadios() && this.formItems().every(item => item.required()))\n );\n\n @HostBinding('attr.aria-labelledby')\n protected labelId = `__si-form-fieldset-label-${SiFormFieldsetComponent.labelIdCounter++}`;\n\n ngDoCheck(): void {\n this.touched.set(this.formItems().some(item => item.ngControl()?.touched));\n }\n\n /** @internal */\n registerFormItem(item: SiFormItemComponent): void {\n this.formItems.update(items => [...items, item]);\n }\n\n /** @internal */\n unregisterFormItem(item: SiFormItemComponent): void {\n this.formItems.update(items => items.filter(i => i !== item));\n }\n}\n","<div class=\"pt-1 pb-0\">\n <div class=\"form-label\" [class.required]=\"isRequired()\" [id]=\"labelId\">{{\n label() | translate\n }}</div>\n</div>\n<div>\n <ng-content />\n @if (hasOnlyRadios()) {\n <div class=\"invalid-feedback\" [class.d-block]=\"touched()\">\n @for (error of errors(); track error) {\n <div>\n {{ error.message | translate: error.params }}\n </div>\n }\n </div>\n }\n</div>\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { InjectionToken, Signal } from '@angular/core';\n\nexport const SI_FORM_ITEM_CONTROL = new InjectionToken<SiFormItemControl>('si.form-item.control');\n\n/**\n * Common interface for form item controls.\n * Controls that should be connected to {@link SiFormItemComponent} must implement this interface\n * and must be provided using the {@link SI_FORM_ITEM_CONTROL} token.\n */\nexport interface SiFormItemControl {\n /** The actual id of the control that should be used in the `for` attribute of a label. */\n readonly id?: string | Signal<string | undefined>;\n\n /**\n * ID that should be assigned to the label element inside the {@link SiFormItemComponent}.\n *\n * If the target control is not of type <i>input</i>, <i>select</i> or <i>button</i>, it cannot be referenced by a label.\n * Instead, aria-labelledby must be used to create a reference to a label.\n * In such a case, an implementation of {@link SiFormItemControl} must provide the id of the label in {@link labelledby}.\n * {@link SiFormItemComponent} will apply the id to the label\n * so that it can be used inside the control to reference it in the aria-labelledby attribute.\n */\n readonly labelledby?: string | Signal<string | undefined> | null;\n\n /**\n * Generated ID that the {@link SiFormItemComponent} will assign to the element containing the error messages.\n * Implementations of {@link SiFormItemControl} must generate this ID\n * and assign it to the `aria-describedby` attribute of their focusable elements.\n *\n * This property will be required with v48.\n */\n readonly errormessageId?: string | Signal<string | undefined>;\n\n /** If the control is meant to be used a checkbox. This affects the label positioning. */\n readonly isFormCheck?: boolean;\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { ElementRef } from '@angular/core';\n\nimport { SiFormItemControl } from '../si-form-item.control';\n\n/**\n * This will be used by the `si-form-item` to create a form item control if none is provided.\n * This is typically the case for native form controls like `input`, `textarea` and `select`.\n * It allows accessing the control's id and type.\n */\nexport class SiFormFieldNativeControl implements SiFormItemControl {\n private static idCounter = 0;\n private static readonly supportedTypes = ['INPUT', 'TEXTAREA', 'SELECT', 'METER', 'PROGRESS'];\n\n static createForElementRef(\n element: ElementRef<HTMLElement> | undefined\n ): SiFormFieldNativeControl | undefined {\n if (!element) {\n return undefined;\n }\n\n if (!SiFormFieldNativeControl.supportedTypes.includes(element.nativeElement.tagName)) {\n return undefined;\n }\n\n return new SiFormFieldNativeControl(element.nativeElement);\n }\n\n private constructor(private readonly element: HTMLElement) {\n if (!element.id) {\n element.id = `__si-form-field-native-control-${SiFormFieldNativeControl.idCounter++}`;\n }\n\n this.errormessageId = `${this.id}-errormessage`;\n if (element instanceof HTMLInputElement) {\n this.isFormCheck = element.type === 'checkbox' || element.type === 'radio';\n } else {\n this.isFormCheck = false;\n }\n\n element.setAttribute('aria-describedby', this.errormessageId);\n }\n\n isFormCheck: boolean;\n\n get id(): string {\n return this.element?.id;\n }\n\n set id(value: string) {\n this.element.id = value;\n }\n\n readonly errormessageId: string;\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentChecked,\n AfterContentInit,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n ElementRef,\n inject,\n input,\n Input,\n isSignal,\n OnChanges,\n OnDestroy,\n OnInit,\n signal,\n SimpleChanges\n} from '@angular/core';\nimport {\n FormControl,\n NgControl,\n RequiredValidator,\n ValidationErrors,\n ValidatorFn\n} from '@angular/forms';\nimport { SiTranslateModule } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormFieldsetComponent } from '../form-fieldset/si-form-fieldset.component';\nimport { SiFormContainerComponent } from '../si-form-container/si-form-container.component';\nimport { SI_FORM_ITEM_CONTROL, SiFormItemControl } from '../si-form-item.control';\nimport { SiFormValidationErrorMapper } from '../si-form-validation-error.model';\nimport { SiFormValidationErrorService } from '../si-form-validation-error.service';\nimport { SiFormFieldNativeControl } from './si-form-field-native.control';\n\n/** @internal */\nexport interface SiFormError {\n key: string;\n message?: string;\n params: any;\n}\n\n@Component({\n selector: 'si-form-item',\n styleUrl: '../si-form.shared.scss',\n templateUrl: './si-form-item.component.html',\n imports: [SiTranslateModule, NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.required]': 'required()',\n '[style.--si-form-label-width]': 'labelWidthCssVar()',\n '[class.form-check]': 'fieldControl()?.isFormCheck',\n '[class.form-check-inline]': 'fieldset?.inline()',\n '[class.si-form-input]': '!fieldset'\n }\n})\nexport class SiFormItemComponent\n implements AfterContentInit, AfterViewInit, AfterContentChecked, OnChanges, OnInit, OnDestroy\n{\n /** @deprecated property has longer an effect. SiFormItem detects IDs automatically */\n @Input() inputId?: string;\n\n /**\n * The label to be displayed in the form item.\n * It will be translated if a translation key is available.\n */\n readonly label = input<string | null>();\n\n /**\n * A custom width value to be applied to the label.\n * A value of 0 is allowed as well to visually hide away the label area.\n *\n * Numbers will be converted to pixels.\n * Using numbers is discouraged and might be dropped.\n *\n * @example labelWidth=\"100px\"\n */\n readonly labelWidth = input<string | number>();\n\n /**\n * @deprecated This input has no effect and can be removed.\n *\n * @defaultValue false\n */\n @Input({ transform: booleanAttribute }) readonly = false;\n\n /**\n * Disables the automatic error printing. Error printing will be enabled by default in v46.\n *\n * @defaultValue false\n */\n readonly disableErrorPrinting = input(false, { transform: booleanAttribute });\n\n readonly formErrorMapper = input<SiFormValidationErrorMapper>();\n\n /**\n * Defines that this form item is required for the overall form to be valid.\n *\n * @defaultValue false\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly requiredInput = input(false, { transform: booleanAttribute, alias: 'required' });\n\n protected readonly fieldControlQuery = contentChild(SI_FORM_ITEM_CONTROL, { descendants: true });\n /** @internal */\n readonly ngControl = contentChild(NgControl, { descendants: true });\n protected readonly controlElementRef = contentChild<NgControl, ElementRef<HTMLElement>>(\n NgControl,\n {\n read: ElementRef,\n descendants: true\n }\n );\n protected readonly requiredValidator = contentChild(RequiredValidator, { descendants: true });\n\n /** @internal */\n readonly errors = signal<SiFormError[]>([]);\n\n /** @deprecated Remove with v48 */\n protected readonly isLegacyMode = signal(false);\n\n protected fieldset = inject(SiFormFieldsetComponent, { optional: true });\n protected container = inject(SiFormContainerComponent, { optional: true });\n\n protected get formItemId(): string | null {\n const fieldControl = this.fieldControl();\n return isSignal(fieldControl?.id) ? (fieldControl.id() ?? null) : (fieldControl?.id ?? null);\n }\n\n protected get formItemLabelledBy(): string | null {\n const fieldControl = this.fieldControl();\n return isSignal(fieldControl?.labelledby)\n ? (fieldControl.labelledby() ?? null)\n : (fieldControl?.labelledby ?? null);\n }\n\n protected get formItemErrormessageId(): string | null {\n const fieldControl = this.fieldControl();\n return isSignal(fieldControl?.errormessageId)\n ? (fieldControl?.errormessageId() ?? null)\n : (fieldControl?.errormessageId ?? null);\n }\n\n protected readonly fieldControl = computed(\n () => this.fieldControlQuery() ?? this.fieldControlNative()\n );\n\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private validationErrorService = inject(SiFormValidationErrorService);\n private requiredTestControl = new FormControl('');\n private validator?: ValidatorFn | null;\n private previousErrors?: ValidationErrors | null;\n private readonly hasRequiredValidator = signal(false);\n private readonly fieldControlNative = signal<SiFormItemControl | undefined>(undefined);\n\n protected readonly labelWidthCssVar = computed(() => {\n const labelWidth = this.labelWidth();\n if (typeof labelWidth === 'number') {\n return `${labelWidth}px`;\n }\n\n return labelWidth;\n });\n\n protected readonly printErrors = computed(() => {\n return !this.disableErrorPrinting() && !(this.container?.disableErrorPrinting() ?? false);\n });\n\n /** @internal */\n readonly required = computed(() => this.requiredInput() || this.hasRequiredValidator());\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.formErrorMapper) {\n this.updateValidationMessages();\n }\n }\n\n ngOnInit(): void {\n this.fieldset?.registerFormItem(this);\n }\n\n ngAfterContentInit(): void {\n if (!this.fieldControlQuery()) {\n this.fieldControlNative.set(\n SiFormFieldNativeControl.createForElementRef(this.controlElementRef())\n );\n }\n }\n\n ngAfterContentChecked(): void {\n this.updateRequiredState();\n this.updateValidationMessages();\n }\n\n ngAfterViewInit(): void {\n this.isLegacyMode.set(!!this.elementRef.nativeElement.querySelector('.form-check'));\n }\n\n ngOnDestroy(): void {\n this.fieldset?.unregisterFormItem(this);\n }\n\n private updateRequiredState(): void {\n const requiredValidator = this.requiredValidator();\n if (requiredValidator) {\n // the easy case: required validator is applied in the template: <input required>\n this.hasRequiredValidator.set(booleanAttribute(requiredValidator.required));\n } else {\n // No required validator is applied via template, it could still be applied in the code.\n // If validators are applied via code, the validator object will change of controls.\n // So we only need to check for required if the validator object was changed.\n const validator = this.ngControl()?.control?.validator;\n\n if (this.validator !== validator) {\n this.validator = validator;\n this.requiredTestControl.setValidators(this.validator ?? null);\n this.requiredTestControl.updateValueAndValidity();\n this.hasRequiredValidator.set(this.requiredTestControl.errors?.required ?? false);\n }\n }\n }\n\n private updateValidationMessages(): void {\n const control = this.ngControl();\n const currentErrors = control?.errors;\n if (this.previousErrors !== currentErrors) {\n if (control && this.printErrors()) {\n this.errors.set(\n this.validationErrorService\n .resolveErrors(\n control.name,\n control.errors,\n this.formErrorMapper(),\n this.container?.formErrorMapper()\n )\n .filter(error => error.message)\n );\n this.previousErrors = currentErrors;\n } else if (this.errors().length) {\n this.errors.set([]);\n }\n }\n }\n}\n","@if (!fieldControl()?.isFormCheck || (isLegacyMode() && label())) {\n @if (label()) {\n @let labeledBy = formItemLabelledBy;\n @if (labeledBy) {\n <span\n class=\"text-break form-label\"\n [id]=\"labeledBy\"\n [class.required]=\"required() && !this.fieldset?.hasOnlyRadios()\"\n >{{ label() | translate }}</span\n >\n } @else {\n <label class=\"text-break form-label\" [for]=\"formItemId\" [class.required]=\"required()\">{{\n label() | translate\n }}</label>\n }\n }\n <div class=\"form-item-content\">\n <ng-container [ngTemplateOutlet]=\"content\" />\n @if (printErrors() && !fieldset?.hasOnlyRadios()) {\n <div class=\"invalid-feedback\" [attr.id]=\"formItemErrormessageId\">\n @for (error of errors(); track error.key) {\n <div>\n {{ error.message | translate: error.params }}\n </div>\n }\n </div>\n }\n </div>\n} @else {\n <!--Block the space if no form-field is provided. Otherwise it looks weird.-->\n @if (!fieldset) {\n <div class=\"form-label\"></div>\n }\n <div class=\"form-item-content\">\n <ng-container [ngTemplateOutlet]=\"checkbox\" />\n @if (label()) {\n @if (fieldControl()?.labelledby) {\n <span\n class=\"text-break form-check-label\"\n [id]=\"fieldControl()!.labelledby\"\n [class.required]=\"required() && !this.fieldset?.hasOnlyRadios()\"\n >{{ label()! | translate }}</span\n >\n } @else {\n <label\n class=\"text-break form-check-label\"\n [for]=\"formItemId\"\n [class.required]=\"required() && !this.fieldset?.hasOnlyRadios()\"\n >{{ label()! | translate }}</label\n >\n }\n }\n <ng-container [ngTemplateOutlet]=\"content\" />\n @if (printErrors() && !fieldset?.hasOnlyRadios()) {\n <div class=\"invalid-feedback\" [attr.id]=\"formItemErrormessageId\">\n @for (error of errors(); track error.key) {\n <div>\n {{ error.message | translate: error.params }}\n </div>\n }\n </div>\n }\n </div>\n}\n\n<ng-template #checkbox>\n <ng-content select=\"input[type='checkbox'], input[type='radio']\" />\n</ng-template>\n<ng-template #content>\n <ng-content />\n</ng-template>\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { Component, inject, InjectionToken, Signal } from '@angular/core';\nimport { SiTranslateModule } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormError } from '../si-form-item/si-form-item.component';\n\nexport const SI_FORM_VALIDATION_TOOLTIP_DATA = new InjectionToken<Signal<SiFormError[]>>(\n 'SiFormValidationTooltipData'\n);\n\n@Component({\n selector: 'si-form-validation-tooltip',\n imports: [SiTranslateModule],\n template: `\n @for (error of errors(); track error.key) {\n <div>{{ error.message | translate: error.params }}</div>\n }\n `,\n host: {\n 'class': 'd-flex flex-column gap-2'\n }\n})\nexport class SiFormValidationTooltipComponent {\n protected errors = inject(SI_FORM_VALIDATION_TOOLTIP_DATA);\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport {\n Directive,\n DoCheck,\n ElementRef,\n HostListener,\n inject,\n Injector,\n input,\n OnDestroy,\n signal\n} from '@angular/core';\nimport { NgControl, ValidationErrors } from '@angular/forms';\nimport { SiTooltipService, TooltipRef } from '@siemens/element-ng/tooltip';\n\nimport { SiFormContainerComponent } from '../si-form-container/si-form-container.component';\nimport { SiFormError } from '../si-form-item/si-form-item.component';\nimport { SiFormValidationErrorMapper } from '../si-form-validation-error.model';\nimport { SiFormValidationErrorService } from '../si-form-validation-error.service';\nimport {\n SI_FORM_VALIDATION_TOOLTIP_DATA,\n SiFormValidationTooltipComponent\n} from './si-form-validation-tooltip.component';\n\n/**\n * Directive to show a tooltip with validation errors of a form control.\n *\n * In general, `si-form-item` should be used.\n * This directive is intended only for cases where the tooltip cannot be shown inline.\n * This is typically the case for tables and lists where the validation message would break the layout.\n *\n * @example\n * ```html\n * <input siFormValidationTooltip [formControl]=\"control\" />\n * ```\n */\n@Directive({\n selector: '[siFormValidationTooltip]',\n providers: [SiTooltipService],\n host: {\n '[attr.aria-describedby]': 'describedBy'\n }\n})\nexport class SiFormValidationTooltipDirective implements OnDestroy, DoCheck {\n private static idCounter = 0;\n\n private tooltipService = inject(SiTooltipService);\n private formValidationService = inject(SiFormValidationErrorService);\n private formContainer = inject(SiFormContainerComponent, { optional: true });\n readonly formErrorMapper = input<SiFormValidationErrorMapper>();\n private ngControl = inject(NgControl);\n private elementRef = inject(ElementRef);\n\n private tooltipRef?: TooltipRef;\n private readonly errors = signal<SiFormError[]>([]);\n private currentErrors: ValidationErrors | null = null;\n private touched: boolean | null = null;\n\n // Use a counter to track how many events are matched that keep the tooltip active.\n // Active means we are listening to error changes.\n private activationCount = 0;\n protected readonly describedBy = `__si-form-validation-tooltip-${SiFormValidationTooltipDirective.idCounter++}`;\n\n ngDoCheck(): void {\n if (\n this.activationCount &&\n (this.currentErrors !== this.ngControl.errors || this.touched !== this.ngControl.touched)\n ) {\n this.currentErrors = this.ngControl.errors;\n this.touched = this.ngControl.touched;\n this.updateErrors();\n }\n }\n\n ngOnDestroy(): void {\n this.destroyTooltip();\n }\n\n @HostListener('focus')\n @HostListener('mouseenter')\n protected increaseActivation(): void {\n this.activationCount++;\n if (this.activationCount === 1) {\n this.updateErrors();\n }\n }\n\n private updateErrors(): void {\n const errors = this.formValidationService\n .resolveErrors(\n this.ngControl.name,\n this.currentErrors,\n this.formErrorMapper(),\n this.formContainer?.formErrorMapper()\n )\n .filter(error => !!error.message);\n\n if (!this.tooltipRef && errors.length && this.ngControl.touched) {\n this.tooltipRef = this.tooltipService.createTooltip({\n placement: 'auto',\n element: this.elementRef,\n describedBy: this.describedBy,\n injector: Injector.create({\n providers: [{ provide: SI_FORM_VALIDATION_TOOLTIP_DATA, useValue: this.errors }]\n })\n });\n this.tooltipRef.show(SiFormValidationTooltipComponent);\n } else if (this.tooltipRef && (!errors.length || this.ngControl.pristine)) {\n this.destroyTooltip();\n }\n\n this.errors.set(errors);\n }\n\n @HostListener('blur')\n @HostListener('mouseleave')\n protected decreaseActivation(): void {\n this.activationCount--;\n if (!this.activationCount) {\n this.destroyTooltip();\n }\n }\n\n private destroyTooltip(): void {\n this.tooltipRef?.destroy();\n this.tooltipRef = undefined;\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { Directive, HostBinding, Input } from '@angular/core';\n\nimport { SI_FORM_ITEM_CONTROL, SiFormItemControl } from './si-form-item.control';\n\n/** @deprecated This directive is no longer needed. {@link SiFormItemComponent} will detect native controls automatically. */\n@Directive({\n selector: '[siFormItemControl]',\n providers: [{ provide: SI_FORM_ITEM_CONTROL, useExisting: SiFormItemControlInputDirective }]\n})\nexport class SiFormItemControlInputDirective implements SiFormItemControl {\n private static idCounter = 0;\n\n @Input()\n @HostBinding('id')\n id = `__si-form-element-control-input-${SiFormItemControlInputDirective.idCounter++}`;\n\n @Input() set type(value: string) {\n this.isFormCheck = value === 'checkbox' || value === 'radio';\n this.formControlClass = this.isFormCheck ? 'form-check-input' : 'form-control';\n }\n\n @HostBinding('class') protected formControlClass = 'form-control';\n\n /**\n * Indicate the form item is a checkbox or radio input.\n * @defaultValue false\n */\n isFormCheck = false;\n\n /** @internal */\n @HostBinding('attr.aria-describedby')\n readonly errormessageId = `${this.id}-errormessage`;\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { Provider } from '@angular/core';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormValidationErrorMapper } from './si-form-validation-error.model';\nimport { buildDefaults, SiFormValidationErrorService } from './si-form-validation-error.service';\n\n/**\n * The error mapper is used to resolve an angular validation error to a {@link TranslatableString}.\n * It will be merged with already existing error mappers.\n */\nexport const provideFormValidationErrorMapper = (\n mapper: SiFormValidationErrorMapper\n): Provider => ({\n provide: SiFormValidationErrorService,\n // defaults must always be provided in case this is called in app.config\n useFactory: () => new SiFormValidationErrorService({ ...buildDefaults(), ...mapper })\n});\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { SiFormFieldsetComponent } from './form-fieldset/si-form-fieldset.component';\nimport { SiFormContainerComponent } from './si-form-container/si-form-container.component';\nimport { SiFormItemControlInputDirective } from './si-form-item-control-input.directive';\nimport { SiFormItemComponent } from './si-form-item/si-form-item.component';\nimport { SiFormValidationErrorMapper } from './si-form-validation-error.model';\nimport { provideFormValidationErrorMapper } from './si-form-validation-error.provider';\n\n@NgModule({\n imports: [\n SiFormContainerComponent,\n SiFormFieldsetComponent,\n SiFormItemComponent,\n SiFormItemControlInputDirective\n ],\n exports: [\n SiFormContainerComponent,\n SiFormFieldsetComponent,\n SiFormItemComponent,\n SiFormItemControlInputDirective\n ]\n})\nexport class SiFormModule {\n /**\n * Overrides the default configuration of the form module.\n *\n * @param errorMapper - The error mappers is used to resolve angular validation errors.\n * It will be merged with already existing error mappers.\n */\n // We have the errorMapper wrapped in an object, to allow the addition of more configuration fields without breaking the API.\n static withConfiguration({\n validationErrorMapper\n }: {\n validationErrorMapper: SiFormValidationErrorMapper;\n }): ModuleWithProviders<SiFormModule> {\n return {\n ngModule: SiFormModule,\n providers: [provideFormValidationErrorMapper(validationErrorMapper)]\n };\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-form-container/si-form-container.component';\nexport * from './si-form-item/si-form-item.component';\nexport * from './si-form-validation-tooltip/si-form-validation-tooltip.directive';\nexport * from './form-fieldset/si-form-fieldset.component';\nexport * from './si-form-item-control-input.directive';\nexport * from './si-form.module';\nexport * from './si-form-item-control-input.directive';\nexport * from './si-form-item.control';\nexport * from './si-form-validation-error.provider';\nexport * from './si-form-validation-error.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"siemens-element-ng-form.mjs","sources":["../../../../projects/element-ng/form/si-form-validation-error.service.ts","../../../../projects/element-ng/form/si-form-container/si-form-container.component.ts","../../../../projects/element-ng/form/si-form-container/si-form-container.component.html","../../../../projects/element-ng/form/form-fieldset/si-form-fieldset.component.ts","../../../../projects/element-ng/form/form-fieldset/si-form-fieldset.component.html","../../../../projects/element-ng/form/si-form-item.control.ts","../../../../projects/element-ng/form/si-form-item/si-form-field-native.control.ts","../../../../projects/element-ng/form/si-form-item/si-form-item.component.ts","../../../../projects/element-ng/form/si-form-item/si-form-item.component.html","../../../../projects/element-ng/form/si-form-validation-tooltip/si-form-validation-tooltip.component.ts","../../../../projects/element-ng/form/si-form-validation-tooltip/si-form-validation-tooltip.directive.ts","../../../../projects/element-ng/form/si-form-item-control-input.directive.ts","../../../../projects/element-ng/form/si-form-validation-error.provider.ts","../../../../projects/element-ng/form/si-form.module.ts","../../../../projects/element-ng/form/index.ts","../../../../projects/element-ng/form/siemens-element-ng-form.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { inject, Injectable } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\n\nimport { SiFormError } from './si-form-item/si-form-item.component';\nimport { SiFormValidationErrorMapper } from './si-form-validation-error.model';\n\n/**\n * Creates the map of default error resolver.\n * This is a function as $localize requires an injection context.\n *\n * @internal\n */\nexport const buildDefaults = (): SiFormValidationErrorMapper => ({\n min: $localize`:@@SI_FORM_CONTAINER.ERROR.MIN:The value is too small`,\n max: $localize`:@@SI_FORM_CONTAINER.ERROR.MAX:The value is too large.`,\n required: $localize`:@@SI_FORM_CONTAINER.ERROR.REQUIRED:A value is required.`,\n requiredTrue: $localize`:@@SI_FORM_CONTAINER.ERROR.REQUIRED_TRUE:The value should be true.`,\n email: $localize`:@@SI_FORM_CONTAINER.ERROR.EMAIL:The email is not valid.`,\n minlength: $localize`:@@SI_FORM_CONTAINER.ERROR.MIN_LENGTH:The minimum number of characters is not met.`,\n maxlength: $localize`:@@SI_FORM_CONTAINER.ERROR.MAX_LENGTH:A maximum number of characters is exceeded.`,\n ipv4Address: $localize`:@@SI_FORM_CONTAINER.ERROR.IPV4:Invalid IPv4 address.`,\n ipv6Address: $localize`:@@SI_FORM_CONTAINER.ERROR.IPV6:Invalid IPv6 address.`,\n pattern: $localize`:@@SI_FORM_CONTAINER.ERROR.PATTERN:The value does not match the predefined pattern.`,\n numberFormat: $localize`:@@SI_FORM_CONTAINER.ERROR.NUMBER_FORMAT:The value is not a valid number.`,\n dateFormat: $localize`:@@SI_FORM_CONTAINER.ERROR.DATE_FORMAT:Invalid date format.`,\n maxDate: $localize`:@@SI_FORM_CONTAINER.ERROR.MAX_DATE:The date is too far in the future.`,\n minDate: $localize`:@@SI_FORM_CONTAINER.ERROR.MIN_DATE:The date is too far in the past.`\n});\n\n/**\n * A service to resolve the validation error of an Angular control to a message or translation key.\n *\n * It can be provided using {@link provideFormValidationErrorMapper}.\n * If not provided, there will be a default instance in the root injector using only the default keys.\n *\n * There can be multiple instances to support providing in a lazy loaded module.\n * If the service cannot find a message, it will try to resolve it using a parent service if available.\n *\n * @internal\n */\n@Injectable({\n providedIn: 'root',\n useFactory: () => new SiFormValidationErrorService(buildDefaults())\n})\nexport class SiFormValidationErrorService {\n private readonly parent = inject(SiFormValidationErrorService, {\n optional: true,\n skipSelf: true\n });\n\n constructor(private errorMapper: SiFormValidationErrorMapper) {}\n\n /**\n * Resolves the provided form errors to a list of {@link SiFormError}.\n * To resolution order is:\n * 1. componentMapper\n * 2. containerMapper using the controlName\n * 3. containerMapper without controlName\n * 4. errorMapper of the service using the controlName\n * 5. errorMapper of the service\n * 6: parent service\n */\n resolveErrors(\n controlName: string | number | null | undefined,\n errors: ValidationErrors | null,\n componentMapper?: SiFormValidationErrorMapper,\n containerMapper?: SiFormValidationErrorMapper\n ): SiFormError[] {\n if (!errors) {\n return [];\n }\n /*\n * Converts the angular error object (like: {required: true, minLength: {actualLength: 1, requiredLength: 3}})\n * to SiFormError[].\n * Therefore, the error key is look up in the error mappers.\n * If it can be resolved, the error will be printed using the resolved text.\n */\n return Object.entries(errors).map(([key, params]) =>\n this.resolveError(key, controlName, params, componentMapper, containerMapper)\n );\n }\n\n private resolveError(\n key: string,\n controlName: string | number | null | undefined,\n params: any,\n componentMapper?: SiFormValidationErrorMapper,\n containerMapper?: SiFormValidationErrorMapper\n ): SiFormError {\n return (\n this.resolveMessage(key, controlName, params, componentMapper) ??\n this.resolveMessage(key, controlName, params, containerMapper) ??\n this.resolveMessage(key, controlName, params, this.errorMapper) ??\n this.parent?.resolveError(key, controlName, params) ?? { key, params }\n );\n }\n\n private resolveMessage(\n key: string,\n controlName: string | number | null | undefined,\n params: any,\n mapper?: SiFormValidationErrorMapper\n ): SiFormError | undefined {\n if (!mapper) {\n return undefined;\n }\n\n const resolver = mapper[`${controlName}.${key}`] ?? mapper[key];\n\n if (resolver) {\n const message = typeof resolver === 'function' ? resolver(params) : resolver;\n return message ? { key, message, params } : undefined;\n }\n return undefined;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport { booleanAttribute, Component, computed, inject, input } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup } from '@angular/forms';\nimport { Breakpoints, SiResponsiveContainerDirective } from '@siemens/element-ng/resize-observer';\n\nimport { SiFormValidationErrorMapper } from '../si-form-validation-error.model';\nimport { SiFormValidationErrorService } from '../si-form-validation-error.service';\n\nexport interface SiFormValidationError {\n controlName?: string;\n controlNameTranslationKey?: string;\n errorCode: string;\n errorCodeTranslationKey?: string;\n errorParams?: any;\n}\n\n@Component({\n selector: 'si-form-container',\n imports: [NgTemplateOutlet, SiResponsiveContainerDirective],\n templateUrl: './si-form-container.component.html',\n styleUrl: './si-form-container.component.scss',\n host: {\n '[style.--si-form-label-width]': 'labelWidth()'\n }\n})\nexport class SiFormContainerComponent<TControl extends { [K in keyof TControl]: AbstractControl }> {\n /**\n * Set the form entity to the container to enable the overall form validation on in\n * the form container edit panel.\n */\n readonly form = input<FormGroup<TControl>>();\n\n /**\n * A form container in readonly mode is only displaying the form content without ability\n * to change it. The edit panel with typically save and cancel buttons is hidden. Set\n * to true to display the edit panel.\n *\n * @defaultValue false\n */\n readonly readonly = input(false, { transform: booleanAttribute });\n\n /**\n * The container hosts the form within a siResizeContainer to configure the breakpoint for\n * different screen sizes. Optionally, change the container breakpoints with the contentContainerBreakpoints\n * input.\n */\n readonly contentContainerBreakpoints = input<Breakpoints>();\n\n /**\n * In some scenarios, one may not want the form container to be responsible for the layout relevant\n * `si-container-[xs|...]` classes, but let this be done by a different, nested component, e.g. by a\n * group box. In these cases, the property should be set to true.\n *\n * @defaultValue false\n */\n readonly disableContainerBreakpoints = input(false, { transform: booleanAttribute });\n\n /**\n * Every validation error has an errorCode. This map holds translate keys for error codes. The keys can\n * be used to display a translated message for each validation error. The defaults old english readable\n * key defaults for the Angular standard validators of the `Validators` class like `min`, `max` or `required`.\n *\n * Use the input to set your own translate keys for the form validators you need.\n */\n readonly errorCodeTranslateKeyMap = input<\n Map<string, string> | SiFormValidationErrorMapper | undefined\n >();\n\n /**\n * A map the maps from control names of the form to their translate keys.\n * The initial map is empty and the user is responsible to add the required\n * translate keys.\n *\n * @defaultValue\n * ```\n * new Map<string, string>()\n * ```\n */\n readonly controlNameTranslateKeyMap = input(new Map<string, string>());\n\n /**\n * Disables the automatic error printing in all nested {@link SiFormItemComponent}. Error printing will be enabled by default in v46.\n *\n * @defaultValue false\n */\n readonly disableErrorPrinting = input(false, { transform: booleanAttribute });\n\n /**\n * A custom width value to be applied to all labels.\n *\n * @example labelWidth=\"100px\".\n */\n readonly labelWidth = input<string>();\n\n protected hasParentContainer = !!inject(SiFormContainerComponent, {\n optional: true,\n skipSelf: true\n });\n private errorResolver = inject(SiFormValidationErrorService);\n\n /** @internal */\n readonly formErrorMapper = computed(() => {\n const map = this.errorCodeTranslateKeyMap();\n\n let customMapper: SiFormValidationErrorMapper | undefined;\n if (map instanceof Map) {\n customMapper = Object.fromEntries(map.entries());\n } else if (map) {\n customMapper = map;\n }\n\n return {\n ...customMapper\n };\n });\n\n /**\n * Indicates whether the user interacted with the form.\n * @returns `true`, if the user selected at least one form element and\n * [blurred]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/blur_event} by losing focus again\n * (e.g. by setting focus on another element), or by editing the content of a form element.\n * Otherwise `false`.\n */\n get userInteractedWithForm(): boolean {\n const form = this.form();\n return !!form && (form.dirty || form.touched);\n }\n\n /**\n * Indicates whether content editor message shall be styled as success.\n * @returns `true`, if {@link SiFormContainerComponent.userInteractedWithForm} is true and\n * the form is valid.\n */\n get validFormContainerMessage(): boolean {\n return this.userInteractedWithForm && this.form()!.status === 'VALID';\n }\n\n /**\n * Indicates whether the content editor message shall be styled as warning.\n * @returns `true`, if {@link SiFormContainerComponent.userInteractedWithForm} is true and\n * the form is invalid.\n */\n get invalidFormContainerMessage(): boolean {\n return this.userInteractedWithForm && this.form()!.status === 'INVALID';\n }\n\n /**\n * Returns the validation errors of the form's control when the control name is provided. Otherwise,\n * returns all validation errors of the form. Returns an empty arry when no form is available or if\n * the name does not match to a control.\n * @param controlName - An optional name of a control that is part of the form.\n *\n * @deprecated The {@link SiFormItemComponent} is able to display validation errors automatically when `siFormInput` directive is used.\n */\n getValidationErrors(controlName?: string): SiFormValidationError[] {\n const form = this.form();\n if (!form) {\n return [];\n } else if (!controlName) {\n return this.getFormValidationErrorsPrivate(form);\n } else {\n const control = form.get(controlName);\n if (control) {\n return this.getFormValidationErrorsPrivate(control, controlName);\n } else {\n return [];\n }\n }\n }\n\n protected getControlNameTranslateKey(controlName: string): string | undefined {\n const controlNameTranslateKeyMap = this.controlNameTranslateKeyMap();\n if (!controlNameTranslateKeyMap) {\n return undefined;\n }\n return controlNameTranslateKeyMap.get(controlName) ?? controlName;\n }\n\n private getFormValidationErrorsPrivate(\n control: AbstractControl,\n controlName?: string\n ): SiFormValidationError[] {\n let errors: SiFormValidationError[] = [];\n\n // a form must either consist of\n // a) a formgroup (with nested form controls or groups) or\n // b) a single form control\n if (control instanceof FormGroup) {\n const formGroupErrors = this.getFormGroupErrors(control);\n errors = errors.concat(formGroupErrors);\n if (control.controls) {\n Object.keys(control.controls).forEach(key => {\n const formGroupControl = control.controls[key];\n const formGroupControlErrors = this.getFormValidationErrorsPrivate(formGroupControl, key);\n errors = errors.concat(formGroupControlErrors);\n });\n }\n } else if (control instanceof FormControl) {\n errors.push(\n ...this.errorResolver\n .resolveErrors(controlName, control.errors, undefined, this.formErrorMapper())\n .map(error => ({\n controlName,\n errorCode: error.key,\n errorParams: error.params,\n errorCodeTranslationKey: error.message,\n controlNameTranslationKey: controlName\n ? this.getControlNameTranslateKey(controlName)\n : undefined\n }))\n );\n }\n\n return errors;\n }\n\n private getFormGroupErrors(formGroup: FormGroup): SiFormValidationError[] {\n return this.errorResolver\n .resolveErrors(null, formGroup.errors, undefined, this.formErrorMapper())\n .map(error => ({\n errorCode: error.key,\n errorParams: error.params,\n errorCodeTranslationKey: error.message\n }));\n }\n}\n","<div class=\"d-flex flex-column align-content-stretch flex-grow-1 flex-shrink-1\">\n @if (disableContainerBreakpoints() || hasParentContainer) {\n <div class=\"flex-grow-1 flex-shrink-1\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\" />\n </div>\n } @else {\n <div\n class=\"flex-grow-1 flex-shrink-1\"\n siResponsiveContainer\n [breakpoints]=\"contentContainerBreakpoints()\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\" />\n </div>\n }\n\n @if (!readonly()) {\n <div class=\"d-flex flex-row flex-nowrap flex-grow-0 flex-shrink-0 py-4\">\n <div\n class=\"d-flex flex-grow-1 flex-shrink-1 justify-content-end text-end overflow-hidden mx-6 my-auto\"\n [class.text-success]=\"validFormContainerMessage\"\n [class.text-danger]=\"invalidFormContainerMessage\"\n >\n <ng-content select=\"[si-form-container-message]\" />\n </div>\n\n <div class=\"m-auto flex-grow-0 flex-shrink-0\">\n <ng-content select=\"[si-form-container-buttons]\" />\n </div>\n </div>\n }\n</div>\n\n<ng-template #contentTemplate>\n <ng-content select=\"[si-form-container-content]\" />\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DoCheck,\n HostBinding,\n input,\n signal\n} from '@angular/core';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormItemComponent } from '../si-form-item/si-form-item.component';\n\n@Component({\n selector: 'si-form-fieldset',\n imports: [SiTranslatePipe],\n templateUrl: './si-form-fieldset.component.html',\n styleUrl: '../si-form.shared.scss',\n host: {\n role: 'group',\n class: 'si-form-input',\n '[style.--si-form-label-width]': 'labelWidth()'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiFormFieldsetComponent implements DoCheck {\n private static labelIdCounter = 0;\n\n /** The label for the entire fieldset. */\n readonly label = input.required<string>();\n\n /** Overrides the parent label width. */\n readonly labelWidth = input<string>();\n\n /**\n * Adds a required marker to the label\n *\n * @defaultValue false\n */\n readonly required = input(false, { transform: booleanAttribute });\n\n /**\n * Switches all child inputs to inline mode\n *\n * @defaultValue false\n */\n readonly inline = input(false, { transform: booleanAttribute });\n\n private readonly formItems = signal<SiFormItemComponent[]>([]);\n\n /** @internal */\n readonly hasOnlyRadios = computed(() => {\n // Check if the fieldset only contains radio buttons.\n // We can safely assume that, if all items have the same control name and if there are at least 2 items.\n const items = this.formItems();\n if (items.length > 1) {\n const first = items[0];\n return items.every(item => item.ngControl()?.name === first.ngControl()?.name);\n }\n\n return false;\n });\n\n protected readonly errors = computed(() =>\n // All errors should be the same for radios, so we just take the first.\n this.hasOnlyRadios() ? this.formItems()[0].errors() : []\n );\n protected readonly touched = signal(false);\n protected readonly isRequired = computed(\n () =>\n this.required() || (this.hasOnlyRadios() && this.formItems().every(item => item.required()))\n );\n\n @HostBinding('attr.aria-labelledby')\n protected labelId = `__si-form-fieldset-label-${SiFormFieldsetComponent.labelIdCounter++}`;\n\n ngDoCheck(): void {\n this.touched.set(this.formItems().some(item => item.ngControl()?.touched));\n }\n\n /** @internal */\n registerFormItem(item: SiFormItemComponent): void {\n this.formItems.update(items => [...items, item]);\n }\n\n /** @internal */\n unregisterFormItem(item: SiFormItemComponent): void {\n this.formItems.update(items => items.filter(i => i !== item));\n }\n}\n","<div class=\"pt-1 pb-0\">\n <div class=\"form-label\" [class.required]=\"isRequired()\" [id]=\"labelId\">{{\n label() | translate\n }}</div>\n</div>\n<div>\n <ng-content />\n @if (hasOnlyRadios()) {\n <div class=\"invalid-feedback\" [class.d-block]=\"touched()\">\n @for (error of errors(); track error) {\n <div>\n {{ error.message | translate: error.params }}\n </div>\n }\n </div>\n }\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { InjectionToken, Signal } from '@angular/core';\n\nexport const SI_FORM_ITEM_CONTROL = new InjectionToken<SiFormItemControl>('si.form-item.control');\n\n/**\n * Common interface for form item controls.\n * Controls that should be connected to {@link SiFormItemComponent} must implement this interface\n * and must be provided using the {@link SI_FORM_ITEM_CONTROL} token.\n */\nexport interface SiFormItemControl {\n /** The actual id of the control that should be used in the `for` attribute of a label. */\n readonly id?: string | Signal<string | undefined>;\n\n /**\n * ID that should be assigned to the label element inside the {@link SiFormItemComponent}.\n *\n * If the target control is not of type <i>input</i>, <i>select</i> or <i>button</i>, it cannot be referenced by a label.\n * Instead, aria-labelledby must be used to create a reference to a label.\n * In such a case, an implementation of {@link SiFormItemControl} must provide the id of the label in {@link labelledby}.\n * {@link SiFormItemComponent} will apply the id to the label\n * so that it can be used inside the control to reference it in the aria-labelledby attribute.\n */\n readonly labelledby?: string | Signal<string | undefined> | null;\n\n /**\n * Generated ID that the {@link SiFormItemComponent} will assign to the element containing the error messages.\n * Implementations of {@link SiFormItemControl} must generate this ID\n * and assign it to the `aria-describedby` attribute of their focusable elements.\n *\n * This property will be required with v48.\n */\n readonly errormessageId?: string | Signal<string | undefined>;\n\n /** If the control is meant to be used a checkbox. This affects the label positioning. */\n readonly isFormCheck?: boolean;\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { ElementRef } from '@angular/core';\n\nimport { SiFormItemControl } from '../si-form-item.control';\n\n/**\n * This will be used by the `si-form-item` to create a form item control if none is provided.\n * This is typically the case for native form controls like `input`, `textarea` and `select`.\n * It allows accessing the control's id and type.\n */\nexport class SiFormFieldNativeControl implements SiFormItemControl {\n private static idCounter = 0;\n private static readonly supportedTypes = ['INPUT', 'TEXTAREA', 'SELECT', 'METER', 'PROGRESS'];\n\n static createForElementRef(\n element: ElementRef<HTMLElement> | undefined\n ): SiFormFieldNativeControl | undefined {\n if (!element) {\n return undefined;\n }\n\n if (!SiFormFieldNativeControl.supportedTypes.includes(element.nativeElement.tagName)) {\n return undefined;\n }\n\n return new SiFormFieldNativeControl(element.nativeElement);\n }\n\n private constructor(private readonly element: HTMLElement) {\n if (!element.id) {\n element.id = `__si-form-field-native-control-${SiFormFieldNativeControl.idCounter++}`;\n }\n\n this.errormessageId = `${this.id}-errormessage`;\n if (element instanceof HTMLInputElement) {\n this.isFormCheck = element.type === 'checkbox' || element.type === 'radio';\n } else {\n this.isFormCheck = false;\n }\n\n element.setAttribute('aria-describedby', this.errormessageId);\n }\n\n isFormCheck: boolean;\n\n get id(): string {\n return this.element?.id;\n }\n\n set id(value: string) {\n this.element.id = value;\n }\n\n readonly errormessageId: string;\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentChecked,\n AfterContentInit,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n ElementRef,\n inject,\n input,\n Input,\n isSignal,\n OnChanges,\n OnDestroy,\n OnInit,\n signal,\n SimpleChanges\n} from '@angular/core';\nimport {\n FormControl,\n NgControl,\n RequiredValidator,\n ValidationErrors,\n ValidatorFn\n} from '@angular/forms';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormFieldsetComponent } from '../form-fieldset/si-form-fieldset.component';\nimport { SiFormContainerComponent } from '../si-form-container/si-form-container.component';\nimport { SI_FORM_ITEM_CONTROL, SiFormItemControl } from '../si-form-item.control';\nimport { SiFormValidationErrorMapper } from '../si-form-validation-error.model';\nimport { SiFormValidationErrorService } from '../si-form-validation-error.service';\nimport { SiFormFieldNativeControl } from './si-form-field-native.control';\n\n/** @internal */\nexport interface SiFormError {\n key: string;\n message?: string;\n params: any;\n}\n\n@Component({\n selector: 'si-form-item',\n imports: [SiTranslatePipe, NgTemplateOutlet],\n templateUrl: './si-form-item.component.html',\n styleUrl: '../si-form.shared.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.required]': 'required()',\n '[style.--si-form-label-width]': 'labelWidthCssVar()',\n '[class.form-check]': 'fieldControl()?.isFormCheck',\n '[class.form-check-inline]': 'fieldset?.inline()',\n '[class.si-form-input]': '!fieldset'\n }\n})\nexport class SiFormItemComponent\n implements AfterContentInit, AfterViewInit, AfterContentChecked, OnChanges, OnInit, OnDestroy\n{\n /** @deprecated property has longer an effect. SiFormItem detects IDs automatically */\n @Input() inputId?: string;\n\n /**\n * The label to be displayed in the form item.\n * It will be translated if a translation key is available.\n */\n readonly label = input<string | null>();\n\n /**\n * A custom width value to be applied to the label.\n * A value of 0 is allowed as well to visually hide away the label area.\n *\n * Numbers will be converted to pixels.\n * Using numbers is discouraged and might be dropped.\n *\n * @example labelWidth=\"100px\"\n */\n readonly labelWidth = input<string | number>();\n\n /**\n * @deprecated This input has no effect and can be removed.\n *\n * @defaultValue false\n */\n @Input({ transform: booleanAttribute }) readonly = false;\n\n /**\n * Disables the automatic error printing. Error printing will be enabled by default in v46.\n *\n * @defaultValue false\n */\n readonly disableErrorPrinting = input(false, { transform: booleanAttribute });\n\n readonly formErrorMapper = input<SiFormValidationErrorMapper>();\n\n /**\n * Defines that this form item is required for the overall form to be valid.\n *\n * @defaultValue false\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly requiredInput = input(false, { transform: booleanAttribute, alias: 'required' });\n\n protected readonly fieldControlQuery = contentChild(SI_FORM_ITEM_CONTROL, { descendants: true });\n /** @internal */\n readonly ngControl = contentChild(NgControl, { descendants: true });\n protected readonly controlElementRef = contentChild<NgControl, ElementRef<HTMLElement>>(\n NgControl,\n {\n read: ElementRef,\n descendants: true\n }\n );\n protected readonly requiredValidator = contentChild(RequiredValidator, { descendants: true });\n\n /** @internal */\n readonly errors = signal<SiFormError[]>([]);\n\n /** @deprecated Remove with v48 */\n protected readonly isLegacyMode = signal(false);\n\n protected fieldset = inject(SiFormFieldsetComponent, { optional: true });\n protected container = inject(SiFormContainerComponent, { optional: true });\n\n protected get formItemId(): string | null {\n const fieldControl = this.fieldControl();\n return isSignal(fieldControl?.id) ? (fieldControl.id() ?? null) : (fieldControl?.id ?? null);\n }\n\n protected get formItemLabelledBy(): string | null {\n const fieldControl = this.fieldControl();\n return isSignal(fieldControl?.labelledby)\n ? (fieldControl.labelledby() ?? null)\n : (fieldControl?.labelledby ?? null);\n }\n\n protected get formItemErrormessageId(): string | null {\n const fieldControl = this.fieldControl();\n return isSignal(fieldControl?.errormessageId)\n ? (fieldControl?.errormessageId() ?? null)\n : (fieldControl?.errormessageId ?? null);\n }\n\n protected readonly fieldControl = computed(\n () => this.fieldControlQuery() ?? this.fieldControlNative()\n );\n\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private validationErrorService = inject(SiFormValidationErrorService);\n private requiredTestControl = new FormControl('');\n private validator?: ValidatorFn | null;\n private previousErrors?: ValidationErrors | null;\n private readonly hasRequiredValidator = signal(false);\n private readonly fieldControlNative = signal<SiFormItemControl | undefined>(undefined);\n\n protected readonly labelWidthCssVar = computed(() => {\n const labelWidth = this.labelWidth();\n if (typeof labelWidth === 'number') {\n return `${labelWidth}px`;\n }\n\n return labelWidth;\n });\n\n protected readonly printErrors = computed(() => {\n return !this.disableErrorPrinting() && !(this.container?.disableErrorPrinting() ?? false);\n });\n\n /** @internal */\n readonly required = computed(() => this.requiredInput() || this.hasRequiredValidator());\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.formErrorMapper) {\n this.updateValidationMessages();\n }\n }\n\n ngOnInit(): void {\n this.fieldset?.registerFormItem(this);\n }\n\n ngAfterContentInit(): void {\n if (!this.fieldControlQuery()) {\n this.fieldControlNative.set(\n SiFormFieldNativeControl.createForElementRef(this.controlElementRef())\n );\n }\n }\n\n ngAfterContentChecked(): void {\n this.updateRequiredState();\n this.updateValidationMessages();\n }\n\n ngAfterViewInit(): void {\n this.isLegacyMode.set(!!this.elementRef.nativeElement.querySelector('.form-check'));\n }\n\n ngOnDestroy(): void {\n this.fieldset?.unregisterFormItem(this);\n }\n\n private updateRequiredState(): void {\n const requiredValidator = this.requiredValidator();\n if (requiredValidator) {\n // the easy case: required validator is applied in the template: <input required>\n this.hasRequiredValidator.set(booleanAttribute(requiredValidator.required));\n } else {\n // No required validator is applied via template, it could still be applied in the code.\n // If validators are applied via code, the validator object will change of controls.\n // So we only need to check for required if the validator object was changed.\n const validator = this.ngControl()?.control?.validator;\n\n if (this.validator !== validator) {\n this.validator = validator;\n this.requiredTestControl.setValidators(this.validator ?? null);\n this.requiredTestControl.updateValueAndValidity();\n this.hasRequiredValidator.set(this.requiredTestControl.errors?.required ?? false);\n }\n }\n }\n\n private updateValidationMessages(): void {\n const control = this.ngControl();\n const currentErrors = control?.errors;\n if (this.previousErrors !== currentErrors) {\n if (control && this.printErrors()) {\n this.errors.set(\n this.validationErrorService\n .resolveErrors(\n control.name,\n control.errors,\n this.formErrorMapper(),\n this.container?.formErrorMapper()\n )\n .filter(error => error.message)\n );\n this.previousErrors = currentErrors;\n } else if (this.errors().length) {\n this.errors.set([]);\n }\n }\n }\n}\n","@if (!fieldControl()?.isFormCheck || (isLegacyMode() && label())) {\n @if (label()) {\n @let labeledBy = formItemLabelledBy;\n @if (labeledBy) {\n <span\n class=\"text-break form-label\"\n [id]=\"labeledBy\"\n [class.required]=\"required() && !this.fieldset?.hasOnlyRadios()\"\n >{{ label() | translate }}</span\n >\n } @else {\n <label class=\"text-break form-label\" [for]=\"formItemId\" [class.required]=\"required()\">{{\n label() | translate\n }}</label>\n }\n }\n <div class=\"form-item-content\">\n <ng-container [ngTemplateOutlet]=\"content\" />\n @if (printErrors() && !fieldset?.hasOnlyRadios()) {\n <div class=\"invalid-feedback\" [attr.id]=\"formItemErrormessageId\">\n @for (error of errors(); track error.key) {\n <div>\n {{ error.message | translate: error.params }}\n </div>\n }\n </div>\n }\n </div>\n} @else {\n <!--Block the space if no form-field is provided. Otherwise it looks weird.-->\n @if (!fieldset) {\n <div class=\"form-label\"></div>\n }\n <div class=\"form-item-content\">\n <ng-container [ngTemplateOutlet]=\"checkbox\" />\n @if (label()) {\n @if (fieldControl()?.labelledby) {\n <span\n class=\"text-break form-check-label\"\n [id]=\"fieldControl()!.labelledby\"\n [class.required]=\"required() && !this.fieldset?.hasOnlyRadios()\"\n >{{ label()! | translate }}</span\n >\n } @else {\n <label\n class=\"text-break form-check-label\"\n [for]=\"formItemId\"\n [class.required]=\"required() && !this.fieldset?.hasOnlyRadios()\"\n >{{ label()! | translate }}</label\n >\n }\n }\n <ng-container [ngTemplateOutlet]=\"content\" />\n @if (printErrors() && !fieldset?.hasOnlyRadios()) {\n <div class=\"invalid-feedback\" [attr.id]=\"formItemErrormessageId\">\n @for (error of errors(); track error.key) {\n <div>\n {{ error.message | translate: error.params }}\n </div>\n }\n </div>\n }\n </div>\n}\n\n<ng-template #checkbox>\n <ng-content select=\"input[type='checkbox'], input[type='radio']\" />\n</ng-template>\n<ng-template #content>\n <ng-content />\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { Component, inject, InjectionToken, Signal } from '@angular/core';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormError } from '../si-form-item/si-form-item.component';\n\nexport const SI_FORM_VALIDATION_TOOLTIP_DATA = new InjectionToken<Signal<SiFormError[]>>(\n 'SiFormValidationTooltipData'\n);\n\n@Component({\n selector: 'si-form-validation-tooltip',\n imports: [SiTranslatePipe],\n template: `\n @for (error of errors(); track error.key) {\n <div>{{ error.message | translate: error.params }}</div>\n }\n `,\n host: {\n 'class': 'd-flex flex-column gap-2'\n }\n})\nexport class SiFormValidationTooltipComponent {\n protected errors = inject(SI_FORM_VALIDATION_TOOLTIP_DATA);\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport {\n Directive,\n DoCheck,\n ElementRef,\n HostListener,\n inject,\n Injector,\n input,\n OnDestroy,\n signal\n} from '@angular/core';\nimport { NgControl, ValidationErrors } from '@angular/forms';\nimport { SiTooltipService, TooltipRef } from '@siemens/element-ng/tooltip';\n\nimport { SiFormContainerComponent } from '../si-form-container/si-form-container.component';\nimport { SiFormError } from '../si-form-item/si-form-item.component';\nimport { SiFormValidationErrorMapper } from '../si-form-validation-error.model';\nimport { SiFormValidationErrorService } from '../si-form-validation-error.service';\nimport {\n SI_FORM_VALIDATION_TOOLTIP_DATA,\n SiFormValidationTooltipComponent\n} from './si-form-validation-tooltip.component';\n\n/**\n * Directive to show a tooltip with validation errors of a form control.\n *\n * In general, `si-form-item` should be used.\n * This directive is intended only for cases where the tooltip cannot be shown inline.\n * This is typically the case for tables and lists where the validation message would break the layout.\n *\n * @example\n * ```html\n * <input siFormValidationTooltip [formControl]=\"control\" />\n * ```\n */\n@Directive({\n selector: '[siFormValidationTooltip]',\n providers: [SiTooltipService],\n host: {\n '[attr.aria-describedby]': 'describedBy'\n }\n})\nexport class SiFormValidationTooltipDirective implements OnDestroy, DoCheck {\n private static idCounter = 0;\n\n private tooltipService = inject(SiTooltipService);\n private formValidationService = inject(SiFormValidationErrorService);\n private formContainer = inject(SiFormContainerComponent, { optional: true });\n readonly formErrorMapper = input<SiFormValidationErrorMapper>();\n private ngControl = inject(NgControl);\n private elementRef = inject(ElementRef);\n\n private tooltipRef?: TooltipRef;\n private readonly errors = signal<SiFormError[]>([]);\n private currentErrors: ValidationErrors | null = null;\n private touched: boolean | null = null;\n\n // Use a counter to track how many events are matched that keep the tooltip active.\n // Active means we are listening to error changes.\n private activationCount = 0;\n protected readonly describedBy = `__si-form-validation-tooltip-${SiFormValidationTooltipDirective.idCounter++}`;\n\n ngDoCheck(): void {\n if (\n this.activationCount &&\n (this.currentErrors !== this.ngControl.errors || this.touched !== this.ngControl.touched)\n ) {\n this.currentErrors = this.ngControl.errors;\n this.touched = this.ngControl.touched;\n this.updateErrors();\n }\n }\n\n ngOnDestroy(): void {\n this.destroyTooltip();\n }\n\n @HostListener('focus')\n @HostListener('mouseenter')\n protected increaseActivation(): void {\n this.activationCount++;\n if (this.activationCount === 1) {\n this.updateErrors();\n }\n }\n\n private updateErrors(): void {\n const errors = this.formValidationService\n .resolveErrors(\n this.ngControl.name,\n this.currentErrors,\n this.formErrorMapper(),\n this.formContainer?.formErrorMapper()\n )\n .filter(error => !!error.message);\n\n if (!this.tooltipRef && errors.length && this.ngControl.touched) {\n this.tooltipRef = this.tooltipService.createTooltip({\n placement: 'auto',\n element: this.elementRef,\n describedBy: this.describedBy,\n injector: Injector.create({\n providers: [{ provide: SI_FORM_VALIDATION_TOOLTIP_DATA, useValue: this.errors }]\n })\n });\n this.tooltipRef.show(SiFormValidationTooltipComponent);\n } else if (this.tooltipRef && (!errors.length || this.ngControl.pristine)) {\n this.destroyTooltip();\n }\n\n this.errors.set(errors);\n }\n\n @HostListener('blur')\n @HostListener('mouseleave')\n protected decreaseActivation(): void {\n this.activationCount--;\n if (!this.activationCount) {\n this.destroyTooltip();\n }\n }\n\n private destroyTooltip(): void {\n this.tooltipRef?.destroy();\n this.tooltipRef = undefined;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { Directive, HostBinding, Input } from '@angular/core';\n\nimport { SI_FORM_ITEM_CONTROL, SiFormItemControl } from './si-form-item.control';\n\n/** @deprecated This directive is no longer needed. {@link SiFormItemComponent} will detect native controls automatically. */\n@Directive({\n selector: '[siFormItemControl]',\n providers: [{ provide: SI_FORM_ITEM_CONTROL, useExisting: SiFormItemControlInputDirective }]\n})\nexport class SiFormItemControlInputDirective implements SiFormItemControl {\n private static idCounter = 0;\n\n @Input()\n @HostBinding('id')\n id = `__si-form-element-control-input-${SiFormItemControlInputDirective.idCounter++}`;\n\n @Input() set type(value: string) {\n this.isFormCheck = value === 'checkbox' || value === 'radio';\n this.formControlClass = this.isFormCheck ? 'form-check-input' : 'form-control';\n }\n\n @HostBinding('class') protected formControlClass = 'form-control';\n\n /**\n * Indicate the form item is a checkbox or radio input.\n * @defaultValue false\n */\n isFormCheck = false;\n\n /** @internal */\n @HostBinding('attr.aria-describedby')\n readonly errormessageId = `${this.id}-errormessage`;\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { Provider } from '@angular/core';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormValidationErrorMapper } from './si-form-validation-error.model';\nimport { buildDefaults, SiFormValidationErrorService } from './si-form-validation-error.service';\n\n/**\n * The error mapper is used to resolve an angular validation error to a {@link TranslatableString}.\n * It will be merged with already existing error mappers.\n */\nexport const provideFormValidationErrorMapper = (\n mapper: SiFormValidationErrorMapper\n): Provider => ({\n provide: SiFormValidationErrorService,\n // defaults must always be provided in case this is called in app.config\n useFactory: () => new SiFormValidationErrorService({ ...buildDefaults(), ...mapper })\n});\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { SiFormFieldsetComponent } from './form-fieldset/si-form-fieldset.component';\nimport { SiFormContainerComponent } from './si-form-container/si-form-container.component';\nimport { SiFormItemControlInputDirective } from './si-form-item-control-input.directive';\nimport { SiFormItemComponent } from './si-form-item/si-form-item.component';\nimport { SiFormValidationErrorMapper } from './si-form-validation-error.model';\nimport { provideFormValidationErrorMapper } from './si-form-validation-error.provider';\n\n@NgModule({\n imports: [\n SiFormContainerComponent,\n SiFormFieldsetComponent,\n SiFormItemComponent,\n SiFormItemControlInputDirective\n ],\n exports: [\n SiFormContainerComponent,\n SiFormFieldsetComponent,\n SiFormItemComponent,\n SiFormItemControlInputDirective\n ]\n})\nexport class SiFormModule {\n /**\n * Overrides the default configuration of the form module.\n *\n * @param errorMapper - The error mappers is used to resolve angular validation errors.\n * It will be merged with already existing error mappers.\n */\n // We have the errorMapper wrapped in an object, to allow the addition of more configuration fields without breaking the API.\n static withConfiguration({\n validationErrorMapper\n }: {\n validationErrorMapper: SiFormValidationErrorMapper;\n }): ModuleWithProviders<SiFormModule> {\n return {\n ngModule: SiFormModule,\n providers: [provideFormValidationErrorMapper(validationErrorMapper)]\n };\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-form-container/si-form-container.component';\nexport * from './si-form-item/si-form-item.component';\nexport * from './si-form-validation-tooltip/si-form-validation-tooltip.directive';\nexport * from './form-fieldset/si-form-fieldset.component';\nexport * from './si-form-item-control-input.directive';\nexport * from './si-form.module';\nexport * from './si-form-item-control-input.directive';\nexport * from './si-form-item.control';\nexport * from './si-form-validation-error.provider';\nexport * from './si-form-validation-error.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}