@siemens/element-ng 47.2.0 → 47.4.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 (339) hide show
  1. package/README.md +18 -6
  2. package/autocomplete/index.d.ts +8 -0
  3. package/autocomplete/package.json +3 -0
  4. package/autocomplete/si-autocomplete-listbox.directive.d.ts +31 -0
  5. package/autocomplete/si-autocomplete-option.directive.d.ts +31 -0
  6. package/autocomplete/si-autocomplete.directive.d.ts +14 -0
  7. package/autocomplete/si-autocomplete.model.d.ts +7 -0
  8. package/autocomplete/si-autocomplete.module.d.ts +9 -0
  9. package/badge/index.d.ts +5 -0
  10. package/badge/package.json +3 -0
  11. package/badge/si-badge.component.d.ts +17 -0
  12. package/breadcrumb/breadcrumb-item.model.d.ts +36 -0
  13. package/breadcrumb/index.d.ts +7 -0
  14. package/breadcrumb/package.json +3 -0
  15. package/breadcrumb/si-breadcrumb-item-template.directive.d.ts +10 -0
  16. package/breadcrumb/si-breadcrumb.component.d.ts +46 -0
  17. package/breadcrumb/si-breadcrumb.module.d.ts +7 -0
  18. package/card/index.d.ts +6 -0
  19. package/card/package.json +3 -0
  20. package/card/si-card.component.d.ts +79 -0
  21. package/card/si-card.module.d.ts +7 -0
  22. package/circle-status/index.d.ts +6 -0
  23. package/circle-status/package.json +3 -0
  24. package/circle-status/si-circle-status.component.d.ts +66 -0
  25. package/circle-status/si-circle-status.module.d.ts +7 -0
  26. package/column-selection-dialog/column-selection-editor/si-column-selection-editor.component.d.ts +23 -0
  27. package/column-selection-dialog/index.d.ts +6 -0
  28. package/column-selection-dialog/package.json +3 -0
  29. package/column-selection-dialog/si-column-selection-dialog.component.d.ts +114 -0
  30. package/column-selection-dialog/si-column-selection-dialog.service.d.ts +20 -0
  31. package/column-selection-dialog/si-column-selection-dialog.types.d.ts +68 -0
  32. package/common/models/status-type.model.d.ts +2 -2
  33. package/content-action-bar/index.d.ts +7 -0
  34. package/content-action-bar/package.json +3 -0
  35. package/content-action-bar/si-content-action-bar-toggle.component.d.ts +6 -0
  36. package/content-action-bar/si-content-action-bar.component.d.ts +72 -0
  37. package/content-action-bar/si-content-action-bar.model.d.ts +9 -0
  38. package/content-action-bar/si-content-action-bar.module.d.ts +7 -0
  39. package/date-range-filter/index.d.ts +8 -0
  40. package/date-range-filter/package.json +3 -0
  41. package/date-range-filter/si-date-range-calculation.service.d.ts +33 -0
  42. package/date-range-filter/si-date-range-filter.component.d.ts +248 -0
  43. package/date-range-filter/si-date-range-filter.module.d.ts +7 -0
  44. package/date-range-filter/si-date-range-filter.types.d.ts +40 -0
  45. package/date-range-filter/si-relative-date.component.d.ts +31 -0
  46. package/datepicker/components/si-calendar-body.component.d.ts +137 -0
  47. package/datepicker/components/si-calendar-date-cell.directive.d.ts +16 -0
  48. package/datepicker/components/si-calendar-direction-button.component.d.ts +18 -0
  49. package/datepicker/components/si-compare-adapter.d.ts +37 -0
  50. package/datepicker/components/si-day-selection.component.d.ts +76 -0
  51. package/datepicker/components/si-initial-focus.component.d.ts +74 -0
  52. package/datepicker/components/si-month-selection.component.d.ts +62 -0
  53. package/datepicker/components/si-year-selection.component.d.ts +65 -0
  54. package/datepicker/date-time-helper.d.ts +302 -0
  55. package/datepicker/index.d.ts +15 -0
  56. package/datepicker/package.json +3 -0
  57. package/datepicker/si-calendar-button.component.d.ts +49 -0
  58. package/datepicker/si-date-input.directive.d.ts +114 -0
  59. package/datepicker/si-date-range.component.d.ts +150 -0
  60. package/datepicker/si-datepicker-overlay.component.d.ts +82 -0
  61. package/datepicker/si-datepicker-overlay.directive.d.ts +104 -0
  62. package/datepicker/si-datepicker.component.d.ts +228 -0
  63. package/datepicker/si-datepicker.directive.d.ts +62 -0
  64. package/datepicker/si-datepicker.model.d.ts +129 -0
  65. package/datepicker/si-datepicker.module.d.ts +12 -0
  66. package/datepicker/si-timepicker.component.d.ts +214 -0
  67. package/electron-titlebar/electron.helpers.d.ts +5 -0
  68. package/electron-titlebar/index.d.ts +7 -0
  69. package/electron-titlebar/package.json +3 -0
  70. package/electron-titlebar/si-electron-titlebar.component.d.ts +72 -0
  71. package/electron-titlebar/si-electron-titlebar.module.d.ts +7 -0
  72. package/fesm2022/siemens-element-ng-application-header.mjs +2 -2
  73. package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
  74. package/fesm2022/siemens-element-ng-autocomplete.mjs +235 -0
  75. package/fesm2022/siemens-element-ng-autocomplete.mjs.map +1 -0
  76. package/fesm2022/siemens-element-ng-badge.mjs +59 -0
  77. package/fesm2022/siemens-element-ng-badge.mjs.map +1 -0
  78. package/fesm2022/siemens-element-ng-breadcrumb.mjs +302 -0
  79. package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -0
  80. package/fesm2022/siemens-element-ng-card.mjs +122 -0
  81. package/fesm2022/siemens-element-ng-card.mjs.map +1 -0
  82. package/fesm2022/siemens-element-ng-circle-status.mjs +146 -0
  83. package/fesm2022/siemens-element-ng-circle-status.mjs.map +1 -0
  84. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs +369 -0
  85. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs.map +1 -0
  86. package/fesm2022/siemens-element-ng-common.mjs +1 -1
  87. package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
  88. package/fesm2022/siemens-element-ng-content-action-bar.mjs +200 -0
  89. package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -0
  90. package/fesm2022/siemens-element-ng-date-range-filter.mjs +649 -0
  91. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -0
  92. package/fesm2022/siemens-element-ng-datepicker.mjs +4231 -0
  93. package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -0
  94. package/fesm2022/siemens-element-ng-electron-titlebar.mjs +142 -0
  95. package/fesm2022/siemens-element-ng-electron-titlebar.mjs.map +1 -0
  96. package/fesm2022/siemens-element-ng-file-uploader.mjs +751 -0
  97. package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -0
  98. package/fesm2022/siemens-element-ng-filter-bar.mjs +153 -0
  99. package/fesm2022/siemens-element-ng-filter-bar.mjs.map +1 -0
  100. package/fesm2022/siemens-element-ng-form.mjs +827 -0
  101. package/fesm2022/siemens-element-ng-form.mjs.map +1 -0
  102. package/fesm2022/siemens-element-ng-icon-status.mjs +65 -0
  103. package/fesm2022/siemens-element-ng-icon-status.mjs.map +1 -0
  104. package/fesm2022/siemens-element-ng-icon.mjs +22 -2
  105. package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
  106. package/fesm2022/siemens-element-ng-info-page.mjs +63 -0
  107. package/fesm2022/siemens-element-ng-info-page.mjs.map +1 -0
  108. package/fesm2022/siemens-element-ng-inline-notification.mjs +4 -6
  109. package/fesm2022/siemens-element-ng-inline-notification.mjs.map +1 -1
  110. package/fesm2022/siemens-element-ng-ip-input.mjs +451 -0
  111. package/fesm2022/siemens-element-ng-ip-input.mjs.map +1 -0
  112. package/fesm2022/siemens-element-ng-language-switcher.mjs +90 -0
  113. package/fesm2022/siemens-element-ng-language-switcher.mjs.map +1 -0
  114. package/fesm2022/siemens-element-ng-localization.mjs +306 -0
  115. package/fesm2022/siemens-element-ng-localization.mjs.map +1 -0
  116. package/fesm2022/siemens-element-ng-number-input.mjs +267 -0
  117. package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -0
  118. package/fesm2022/siemens-element-ng-password-strength.mjs +177 -0
  119. package/fesm2022/siemens-element-ng-password-strength.mjs.map +1 -0
  120. package/fesm2022/siemens-element-ng-photo-upload.mjs +480 -0
  121. package/fesm2022/siemens-element-ng-photo-upload.mjs.map +1 -0
  122. package/fesm2022/siemens-element-ng-pills-input.mjs +397 -0
  123. package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -0
  124. package/fesm2022/siemens-element-ng-popover-next.mjs +259 -0
  125. package/fesm2022/siemens-element-ng-popover-next.mjs.map +1 -0
  126. package/fesm2022/siemens-element-ng-popover.mjs +256 -0
  127. package/fesm2022/siemens-element-ng-popover.mjs.map +1 -0
  128. package/fesm2022/siemens-element-ng-progressbar.mjs +83 -0
  129. package/fesm2022/siemens-element-ng-progressbar.mjs.map +1 -0
  130. package/fesm2022/siemens-element-ng-search-bar.mjs +193 -0
  131. package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -0
  132. package/fesm2022/siemens-element-ng-select.mjs +1166 -0
  133. package/fesm2022/siemens-element-ng-select.mjs.map +1 -0
  134. package/fesm2022/siemens-element-ng-skip-links.mjs +117 -0
  135. package/fesm2022/siemens-element-ng-skip-links.mjs.map +1 -0
  136. package/fesm2022/siemens-element-ng-slider.mjs +313 -0
  137. package/fesm2022/siemens-element-ng-slider.mjs.map +1 -0
  138. package/fesm2022/siemens-element-ng-sort-bar.mjs +89 -0
  139. package/fesm2022/siemens-element-ng-sort-bar.mjs.map +1 -0
  140. package/fesm2022/siemens-element-ng-split.mjs +575 -0
  141. package/fesm2022/siemens-element-ng-split.mjs.map +1 -0
  142. package/fesm2022/siemens-element-ng-status-toggle.mjs +196 -0
  143. package/fesm2022/siemens-element-ng-status-toggle.mjs.map +1 -0
  144. package/fesm2022/siemens-element-ng-summary-widget.mjs +77 -0
  145. package/fesm2022/siemens-element-ng-summary-widget.mjs.map +1 -0
  146. package/fesm2022/siemens-element-ng-system-banner.mjs +47 -0
  147. package/fesm2022/siemens-element-ng-system-banner.mjs.map +1 -0
  148. package/fesm2022/siemens-element-ng-tabs.mjs +395 -0
  149. package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -0
  150. package/fesm2022/siemens-element-ng-toast-notification.mjs +227 -0
  151. package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -0
  152. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  153. package/fesm2022/siemens-element-ng-typeahead.mjs +746 -0
  154. package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -0
  155. package/fesm2022/siemens-element-ng-unauthorized-page.mjs +76 -0
  156. package/fesm2022/siemens-element-ng-unauthorized-page.mjs.map +1 -0
  157. package/fesm2022/siemens-element-ng-wizard.mjs +465 -0
  158. package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -0
  159. package/file-uploader/index.d.ts +8 -0
  160. package/file-uploader/package.json +3 -0
  161. package/file-uploader/si-file-dropzone.component.d.ts +106 -0
  162. package/file-uploader/si-file-uploader.component.d.ts +296 -0
  163. package/file-uploader/si-file-uploader.model.d.ts +12 -0
  164. package/file-uploader/si-file-uploader.module.d.ts +8 -0
  165. package/filter-bar/filter.d.ts +26 -0
  166. package/filter-bar/index.d.ts +8 -0
  167. package/filter-bar/package.json +3 -0
  168. package/filter-bar/si-filter-bar.component.d.ts +65 -0
  169. package/filter-bar/si-filter-bar.module.d.ts +7 -0
  170. package/filter-bar/si-filter-pill.component.d.ts +20 -0
  171. package/form/form-fieldset/si-form-fieldset.component.d.ts +40 -0
  172. package/form/index.d.ts +14 -0
  173. package/form/package.json +3 -0
  174. package/form/si-form-container/si-form-container.component.d.ts +155 -0
  175. package/form/si-form-item/si-form-field-native.control.d.ts +22 -0
  176. package/form/si-form-item/si-form-item.component.d.ts +90 -0
  177. package/form/si-form-item-control-input.directive.d.ts +18 -0
  178. package/form/si-form-item.control.d.ts +35 -0
  179. package/form/si-form-validation-error.model.d.ts +55 -0
  180. package/form/si-form-validation-error.provider.d.ts +11 -0
  181. package/form/si-form-validation-error.service.d.ts +42 -0
  182. package/form/si-form-validation-tooltip/si-form-validation-tooltip.component.d.ts +13 -0
  183. package/form/si-form-validation-tooltip/si-form-validation-tooltip.directive.d.ts +42 -0
  184. package/form/si-form.module.d.ts +25 -0
  185. package/icon/element-icons.d.ts +20 -0
  186. package/icon-status/index.d.ts +6 -0
  187. package/icon-status/package.json +3 -0
  188. package/icon-status/si-icon-status.component.d.ts +24 -0
  189. package/icon-status/si-icon-status.module.d.ts +7 -0
  190. package/info-page/index.d.ts +5 -0
  191. package/info-page/package.json +3 -0
  192. package/info-page/si-info-page.component.d.ts +38 -0
  193. package/inline-notification/si-inline-notification.component.d.ts +0 -2
  194. package/ip-input/address-utils.d.ts +28 -0
  195. package/ip-input/address-validators.d.ts +21 -0
  196. package/ip-input/index.d.ts +7 -0
  197. package/ip-input/package.json +3 -0
  198. package/ip-input/si-ip-input.directive.d.ts +53 -0
  199. package/ip-input/si-ip4-input.directive.d.ts +9 -0
  200. package/ip-input/si-ip6-input.directive.d.ts +10 -0
  201. package/language-switcher/index.d.ts +7 -0
  202. package/language-switcher/iso-language-value.d.ts +14 -0
  203. package/language-switcher/package.json +3 -0
  204. package/language-switcher/si-language-switcher.component.d.ts +32 -0
  205. package/language-switcher/si-language-switcher.module.d.ts +7 -0
  206. package/localization/index.d.ts +8 -0
  207. package/localization/package.json +3 -0
  208. package/localization/si-directionality.d.ts +41 -0
  209. package/localization/si-locale-id.d.ts +22 -0
  210. package/localization/si-locale-store.d.ts +16 -0
  211. package/localization/si-locale.service.d.ts +73 -0
  212. package/number-input/index.d.ts +6 -0
  213. package/number-input/package.json +3 -0
  214. package/number-input/si-number-input.component.d.ts +106 -0
  215. package/number-input/si-number-input.module.d.ts +7 -0
  216. package/package.json +163 -3
  217. package/password-strength/index.d.ts +7 -0
  218. package/password-strength/package.json +3 -0
  219. package/password-strength/si-password-strength.component.d.ts +25 -0
  220. package/password-strength/si-password-strength.directive.d.ts +54 -0
  221. package/password-strength/si-password-strength.module.d.ts +8 -0
  222. package/photo-upload/index.d.ts +6 -0
  223. package/photo-upload/package.json +3 -0
  224. package/photo-upload/si-image-cropper-style.component.d.ts +5 -0
  225. package/photo-upload/si-photo-upload.component.d.ts +298 -0
  226. package/pills-input/index.d.ts +9 -0
  227. package/pills-input/package.json +3 -0
  228. package/pills-input/si-input-pill.component.d.ts +9 -0
  229. package/pills-input/si-pills-input-csv.directive.d.ts +8 -0
  230. package/pills-input/si-pills-input-email.directive.d.ts +10 -0
  231. package/pills-input/si-pills-input-pattern-base.d.ts +19 -0
  232. package/pills-input/si-pills-input-value-handler.d.ts +12 -0
  233. package/pills-input/si-pills-input.component.d.ts +87 -0
  234. package/pills-input/si-pills-input.module.d.ts +9 -0
  235. package/popover/index.d.ts +6 -0
  236. package/popover/package.json +3 -0
  237. package/popover/si-popover.component.d.ts +26 -0
  238. package/popover/si-popover.directive.d.ts +89 -0
  239. package/popover/si-popover.module.d.ts +7 -0
  240. package/popover-next/index.d.ts +7 -0
  241. package/popover-next/package.json +3 -0
  242. package/popover-next/si-popover-description.directive.d.ts +7 -0
  243. package/popover-next/si-popover-next.directive.d.ts +61 -0
  244. package/popover-next/si-popover-title.directive.d.ts +7 -0
  245. package/popover-next/si-popover.component.d.ts +27 -0
  246. package/progressbar/index.d.ts +6 -0
  247. package/progressbar/package.json +3 -0
  248. package/progressbar/si-progressbar.component.d.ts +43 -0
  249. package/progressbar/si-progressbar.module.d.ts +7 -0
  250. package/search-bar/index.d.ts +6 -0
  251. package/search-bar/package.json +3 -0
  252. package/search-bar/si-search-bar.component.d.ts +87 -0
  253. package/search-bar/si-search-bar.module.d.ts +7 -0
  254. package/select/index.d.ts +18 -0
  255. package/select/options/si-select-complex-options.directive.d.ts +69 -0
  256. package/select/options/si-select-lazy-options.directive.d.ts +38 -0
  257. package/select/options/si-select-option.source.d.ts +49 -0
  258. package/select/options/si-select-options-strategy.base.d.ts +35 -0
  259. package/select/options/si-select-options-strategy.d.ts +37 -0
  260. package/select/options/si-select-simple-options.directive.d.ts +34 -0
  261. package/select/package.json +3 -0
  262. package/select/select-input/si-select-input.component.d.ts +43 -0
  263. package/select/select-list/si-select-list-has-filter.component.d.ts +20 -0
  264. package/select/select-list/si-select-list.base.d.ts +37 -0
  265. package/select/select-list/si-select-list.component.d.ts +15 -0
  266. package/select/select-option/si-select-option-row.component.d.ts +16 -0
  267. package/select/select-option/si-select-option.component.d.ts +9 -0
  268. package/select/selection/si-select-multi-value.directive.d.ts +26 -0
  269. package/select/selection/si-select-selection-strategy.d.ts +58 -0
  270. package/select/selection/si-select-single-value.directive.d.ts +26 -0
  271. package/select/si-select-action.directive.d.ts +12 -0
  272. package/select/si-select-actions.directive.d.ts +5 -0
  273. package/select/si-select-group-template.directive.d.ts +20 -0
  274. package/select/si-select-option-row-template.directive.d.ts +9 -0
  275. package/select/si-select-option-template.directive.d.ts +21 -0
  276. package/select/si-select.component.d.ts +96 -0
  277. package/select/si-select.module.d.ts +15 -0
  278. package/select/si-select.types.d.ts +65 -0
  279. package/skip-links/index.d.ts +5 -0
  280. package/skip-links/package.json +3 -0
  281. package/skip-links/si-skip-link-target.directive.d.ts +27 -0
  282. package/skip-links/si-skip-links.component.d.ts +9 -0
  283. package/skip-links/skip-link.service.d.ts +14 -0
  284. package/slider/index.d.ts +6 -0
  285. package/slider/package.json +3 -0
  286. package/slider/si-slider.component.d.ts +129 -0
  287. package/slider/si-slider.module.d.ts +7 -0
  288. package/sort-bar/index.d.ts +6 -0
  289. package/sort-bar/package.json +3 -0
  290. package/sort-bar/si-sort-bar.component.d.ts +42 -0
  291. package/sort-bar/si-sort-bar.module.d.ts +7 -0
  292. package/split/index.d.ts +8 -0
  293. package/split/package.json +3 -0
  294. package/split/si-split-part.component.d.ts +154 -0
  295. package/split/si-split.component.d.ts +48 -0
  296. package/split/si-split.interfaces.d.ts +17 -0
  297. package/split/si-split.module.d.ts +8 -0
  298. package/status-toggle/index.d.ts +6 -0
  299. package/status-toggle/package.json +3 -0
  300. package/status-toggle/si-status-toggle.component.d.ts +54 -0
  301. package/status-toggle/status-toggle.model.d.ts +26 -0
  302. package/summary-widget/index.d.ts +5 -0
  303. package/summary-widget/package.json +3 -0
  304. package/summary-widget/si-summary-widget.component.d.ts +44 -0
  305. package/system-banner/index.d.ts +5 -0
  306. package/system-banner/package.json +3 -0
  307. package/system-banner/system-banner.component.d.ts +23 -0
  308. package/tabs/index.d.ts +7 -0
  309. package/tabs/package.json +3 -0
  310. package/tabs/si-tab/index.d.ts +5 -0
  311. package/tabs/si-tab/si-tab.component.d.ts +58 -0
  312. package/tabs/si-tabs.module.d.ts +8 -0
  313. package/tabs/si-tabset/index.d.ts +5 -0
  314. package/tabs/si-tabset/si-tabset.component.d.ts +100 -0
  315. package/template-i18n.json +111 -1
  316. package/toast-notification/index.d.ts +6 -0
  317. package/toast-notification/package.json +3 -0
  318. package/toast-notification/si-toast-notification/si-toast-notification.component.d.ts +17 -0
  319. package/toast-notification/si-toast-notification-drawer/si-toast-notification-drawer.component.d.ts +9 -0
  320. package/toast-notification/si-toast-notification.service.d.ts +41 -0
  321. package/toast-notification/si-toast.model.d.ts +25 -0
  322. package/translate/si-translatable-keys.interface.d.ts +110 -0
  323. package/typeahead/index.d.ts +8 -0
  324. package/typeahead/package.json +3 -0
  325. package/typeahead/si-typeahead-item-template.directive.d.ts +7 -0
  326. package/typeahead/si-typeahead.component.d.ts +22 -0
  327. package/typeahead/si-typeahead.directive.d.ts +196 -0
  328. package/typeahead/si-typeahead.model.d.ts +60 -0
  329. package/typeahead/si-typeahead.module.d.ts +8 -0
  330. package/typeahead/si-typeahead.sorting.d.ts +10 -0
  331. package/unauthorized-page/index.d.ts +6 -0
  332. package/unauthorized-page/package.json +3 -0
  333. package/unauthorized-page/si-unauthorized-page.component.d.ts +35 -0
  334. package/unauthorized-page/si-unauthorized-page.module.d.ts +7 -0
  335. package/wizard/index.d.ts +7 -0
  336. package/wizard/package.json +3 -0
  337. package/wizard/si-wizard-step.component.d.ts +21 -0
  338. package/wizard/si-wizard.component.d.ts +196 -0
  339. package/wizard/si-wizard.module.d.ts +8 -0
@@ -0,0 +1,575 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, signal, computed, inject, ElementRef, booleanAttribute, numberAttribute, Input, Output, Component, NgZone, ChangeDetectorRef, ContentChildren, ChangeDetectionStrategy, NgModule } from '@angular/core';
3
+ import { NgTemplateOutlet, DOCUMENT } from '@angular/common';
4
+ import { SiIconNextComponent } from '@siemens/element-ng/icon';
5
+ import * as i1 from '@siemens/element-translate-ng/translate';
6
+ import { SiTranslateModule } from '@siemens/element-translate-ng/translate';
7
+ import { __decorate } from 'tslib';
8
+ import { SI_UI_STATE_SERVICE, isRTL, WebComponentContentChildren } from '@siemens/element-ng/common';
9
+ import { asapScheduler, merge, fromEvent } from 'rxjs';
10
+ import { observeOn, takeUntil } from 'rxjs/operators';
11
+
12
+ /**
13
+ * Copyright Siemens 2016 - 2025.
14
+ * SPDX-License-Identifier: MIT
15
+ */
16
+ class SiSplitPartComponent {
17
+ /** @defaultValue [] */
18
+ actions = [];
19
+ /**
20
+ * @defaultValue 'start'
21
+ */
22
+ collapseDirection = 'start';
23
+ /**
24
+ * Sets the icon class that is used in the buttons of split parts to
25
+ * collapse and uncollapse the parts.
26
+ *
27
+ * @defaultValue 'element-double-right'
28
+ */
29
+ collapseIconClass = 'element-double-right';
30
+ /**
31
+ * Collapse only to the given min size.
32
+ *
33
+ * @defaultValue false
34
+ */
35
+ collapseToMinSize = false;
36
+ /**
37
+ * Sets the status color on the split part header, visible as a bottom border and,
38
+ * if a headerStatusIcon is defined, as the icon´s background color.
39
+ *
40
+ * @deprecated Legacy input with no functionality. Will be removed in future major release.
41
+ */
42
+ headerStatusColor;
43
+ /**
44
+ * Sets the icon class that is used as status icon in the split part header.
45
+ *
46
+ * @deprecated Legacy input with no functionality. Will be removed in future major release.
47
+ */
48
+ headerStatusIconClass;
49
+ headerTemplate;
50
+ /**
51
+ * Sets the title of the split part header.
52
+ */
53
+ heading;
54
+ /**
55
+ * Minimum size in px.
56
+ *
57
+ * @defaultValue 0
58
+ */
59
+ minSize = 0;
60
+ /**
61
+ * When a split part is collapsed, the content gets hidden but it will
62
+ * still remain within the DOM. If you want to remove and destroy the component
63
+ * in collapsed mode and recreate it on un-collapse, set this property to
64
+ * true.
65
+ *
66
+ * @defaultValue false
67
+ */
68
+ removeContentOnCollapse = false;
69
+ /**
70
+ * Defines the behavior of the split part during scaling.
71
+ * E.g. when set to `none`, the spit part will keep its current size even when the parent container grows or shrinks.
72
+ *
73
+ * @defaultValue 'auto'
74
+ */
75
+ scale = 'auto';
76
+ /**
77
+ * Defines if the collapse button of a split part is displayed. Default value is true.
78
+ *
79
+ * @defaultValue true
80
+ */
81
+ showCollapseButton = true;
82
+ /**
83
+ * Defines if the header of the split part is visible. Default is true.
84
+ *
85
+ * @defaultValue true
86
+ */
87
+ showHeader = true;
88
+ /**
89
+ * Aria label for collapse button. Needed for a11y
90
+ *
91
+ * @defaultValue 'collapse'
92
+ */
93
+ collapseLabel = 'collapse';
94
+ /**
95
+ * An optional stateId to uniquely identify a component instance.
96
+ * Required for persistence of ui state.
97
+ */
98
+ stateId;
99
+ /**
100
+ * Expanded size in px.
101
+ */
102
+ size;
103
+ /**
104
+ * This toggles the behavior when collapsing this split part.
105
+ * If enabled, all split parts between this one and the end of the split in the respective direction will be collapsed if this part is collapsed.
106
+ * If disabled, only this split part will be collapsed.
107
+ *
108
+ * The default value will change to false in v48.
109
+ *
110
+ * @defaultValue true
111
+ */
112
+ collapseOthers = true;
113
+ collapseChanged = new EventEmitter();
114
+ stateChange = new EventEmitter();
115
+ /** @internal */
116
+ index = 0;
117
+ /** @internal */
118
+ before;
119
+ /** @internal */
120
+ after;
121
+ /** @internal */
122
+ fractionalSize = signal(undefined);
123
+ /** @internal */
124
+ collapsedSize = signal(0);
125
+ /** @internal */
126
+ collapsedState = signal(false);
127
+ /**
128
+ * Get collapsed state.
129
+ * @returns True if the split part is collapsed, false is expanded.
130
+ */
131
+ get collapsed() {
132
+ return this.collapsedState();
133
+ }
134
+ /** @internal */
135
+ expandedSize = signal(undefined);
136
+ /** @internal */
137
+ actualSize = computed(() => {
138
+ if (this.collapsedState()) {
139
+ return this.collapsedSize();
140
+ }
141
+ return this.expandedSize() ?? 0;
142
+ });
143
+ /** @internal */
144
+ saveUIState;
145
+ /** @internal */
146
+ nextExpandedAfter = computed(() => {
147
+ if (!this.collapsedState()) {
148
+ return this;
149
+ }
150
+ const nextExpanded = this.after ? this.after.nextExpandedAfter() : this;
151
+ return nextExpanded;
152
+ });
153
+ elementRef = inject(ElementRef);
154
+ headerContext = {
155
+ $implicit: this
156
+ };
157
+ /** @defaultValue true */
158
+ set expanded(value) {
159
+ this.collapsedState.set(!value);
160
+ if (this.collapseOthers) {
161
+ this.before?.refreshCollapseToStart();
162
+ this.after?.refreshCollapsedToEnd();
163
+ }
164
+ }
165
+ get expanded() {
166
+ return !this.collapsedState();
167
+ }
168
+ ngOnChanges(changes) {
169
+ if (changes.collapseToMinSize && this.collapseToMinSize) {
170
+ this.collapsedSize.set(this.minSize ?? 40);
171
+ }
172
+ else {
173
+ this.collapsedSize.set(40); // 40px is default size of the header
174
+ }
175
+ if (changes.size) {
176
+ this.expandedSize.set(this.size);
177
+ }
178
+ }
179
+ /** @internal */
180
+ refreshSizePx(orientation) {
181
+ if (!this.collapsedState()) {
182
+ const rect = this.elementRef.nativeElement.getBoundingClientRect();
183
+ if (orientation === 'vertical') {
184
+ this.expandedSize.set(rect.height);
185
+ }
186
+ else {
187
+ this.expandedSize.set(rect.width);
188
+ }
189
+ }
190
+ }
191
+ /**
192
+ * Toggles the collapsed or expanded state.
193
+ */
194
+ toggleCollapse() {
195
+ this.collapsedState.update(v => !v);
196
+ if (this.collapseOthers) {
197
+ this.before?.refreshCollapseToStart();
198
+ this.after?.refreshCollapsedToEnd();
199
+ }
200
+ this.collapseChanged.emit(this.collapsedState());
201
+ this.stateChange.emit({ expanded: this.expanded, size: this.actualSize() });
202
+ this.saveUIState();
203
+ }
204
+ refreshCollapsedToEnd() {
205
+ if (this.before?.collapsedState() && this.before.collapseDirection === 'end') {
206
+ this.collapsedState.set(true);
207
+ this.collapseDirection = 'end';
208
+ this.after?.refreshCollapsedToEnd();
209
+ }
210
+ }
211
+ refreshCollapseToStart() {
212
+ if (this.after?.collapsedState() && this.after.collapseDirection === 'start') {
213
+ this.collapsedState.set(true);
214
+ this.collapseDirection = 'start';
215
+ this.before?.refreshCollapseToStart();
216
+ }
217
+ }
218
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiSplitPartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
219
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiSplitPartComponent, isStandalone: true, selector: "si-split-part", inputs: { actions: "actions", collapseDirection: "collapseDirection", collapseIconClass: "collapseIconClass", collapseToMinSize: ["collapseToMinSize", "collapseToMinSize", booleanAttribute], headerStatusColor: "headerStatusColor", headerStatusIconClass: "headerStatusIconClass", headerTemplate: "headerTemplate", heading: "heading", minSize: ["minSize", "minSize", numberAttribute], removeContentOnCollapse: ["removeContentOnCollapse", "removeContentOnCollapse", booleanAttribute], scale: "scale", showCollapseButton: ["showCollapseButton", "showCollapseButton", booleanAttribute], showHeader: ["showHeader", "showHeader", booleanAttribute], collapseLabel: "collapseLabel", stateId: "stateId", size: ["size", "size", numberAttribute], collapseOthers: ["collapseOthers", "collapseOthers", booleanAttribute], expanded: ["expanded", "expanded", booleanAttribute] }, outputs: { collapseChanged: "collapseChanged", stateChange: "stateChange" }, host: { properties: { "class.is-collapsed": "collapsedState()", "class.collapse-start": "collapseDirection === \"start\"", "style.grid-area": "\"p-\" + this.index" } }, usesOnChanges: true, ngImport: i0, template: "@if (!headerTemplate && showHeader) {\n <div class=\"si-split-part-header\" [class.is-collapsed]=\"collapsedState()\">\n <div class=\"si-split-part-title text-truncate\">\n {{ heading | translate }}\n </div>\n @if (!collapsedState()) {\n <div class=\"si-split-part-actions\">\n @for (action of actions; track $index) {\n <button\n type=\"button\"\n class=\"si-split-button\"\n [title]=\"action.tooltip || ''\"\n [attr.aria-label]=\"action.tooltip\"\n (click)=\"action.click($event)\"\n >\n <si-icon-next [icon]=\"action.iconClass\" />\n </button>\n }\n </div>\n }\n @if (showCollapseButton) {\n <div class=\"si-split-part-collapse-button\">\n <button\n type=\"button\"\n class=\"si-split-button\"\n [attr.aria-label]=\"collapseLabel | translate\"\n (click)=\"toggleCollapse()\"\n >\n <si-icon-next class=\"collapse-icon\" [icon]=\"collapseIconClass\" />\n </button>\n </div>\n }\n </div>\n}\n\n@if (headerTemplate) {\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: headerContext\" />\n}\n\n<div\n class=\"si-split-part-content\"\n [class.d-none]=\"!removeContentOnCollapse && collapsedState() && !collapseToMinSize\"\n>\n @if (!removeContentOnCollapse || !collapsedState()) {\n <ng-content />\n }\n</div>\n", styles: [":host{display:flex;flex-direction:column;overflow:hidden}.si-split-part-content{flex:1 1 auto;display:flex;overflow:hidden;flex-direction:column}.si-split-part-header{display:flex;flex-direction:row;flex:none;align-items:center;padding:6px;background:var(--element-base-0);block-size:40px}:host-context(.horizontal)>:host(.is-collapsed) .si-split-part-header{flex:auto;flex-direction:column;max-block-size:100%;padding:6px}:host-context(.horizontal)>:host(.is-collapsed) .si-split-part-header .si-split-part-title{inline-size:100%;writing-mode:vertical-rl;transform:rotate(180deg)}:host-context(.horizontal)>:host(.is-collapsed) .si-split-part-header .si-split-part-collapse-button{order:-1}.si-split-part-title{font-weight:700;flex:1}.si-split-part-actions{padding-inline:8px;flex:0 0 auto}.si-split-button{display:inline-block;padding:4px;color:var(--element-text-primary);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-decoration:none;font-size:20px;line-height:1;vertical-align:middle;-webkit-user-select:none;user-select:none;background:none;border:0;cursor:pointer}.si-split-button:hover{background:var(--element-action-secondary-hover)}:host-context(.vertical)>:host .si-split-button{--orientation-rotate: rotate(90deg)}[dir=rtl] :host-context(.horizontal)>:host .si-split-button{--orientation-rtl: scaleX(-1)}:dir(rtl) :host-context(.horizontal)>:host .si-split-button{--orientation-rtl: scaleX(-1)}:host(.is-collapsed) .si-split-button{--collapse-rotate: rotate(180deg)}:host(.collapse-start) .si-split-button{--collapse-direction: rotate(180deg)}.si-split-button .collapse-icon{transform:var(--orientation-rotate, rotate(0)) var(--collapse-rotate, rotate(0)) var(--collapse-direction, rotate(0)) var(--orientation-rtl, scaleX(1))}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SiIconNextComponent, selector: "si-icon-next", inputs: ["icon"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }] });
220
+ }
221
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiSplitPartComponent, decorators: [{
222
+ type: Component,
223
+ args: [{ selector: 'si-split-part', imports: [NgTemplateOutlet, SiIconNextComponent, SiTranslateModule], host: {
224
+ '[class.is-collapsed]': 'collapsedState()',
225
+ '[class.collapse-start]': 'collapseDirection === "start"',
226
+ '[style.grid-area]': '"p-" + this.index'
227
+ }, template: "@if (!headerTemplate && showHeader) {\n <div class=\"si-split-part-header\" [class.is-collapsed]=\"collapsedState()\">\n <div class=\"si-split-part-title text-truncate\">\n {{ heading | translate }}\n </div>\n @if (!collapsedState()) {\n <div class=\"si-split-part-actions\">\n @for (action of actions; track $index) {\n <button\n type=\"button\"\n class=\"si-split-button\"\n [title]=\"action.tooltip || ''\"\n [attr.aria-label]=\"action.tooltip\"\n (click)=\"action.click($event)\"\n >\n <si-icon-next [icon]=\"action.iconClass\" />\n </button>\n }\n </div>\n }\n @if (showCollapseButton) {\n <div class=\"si-split-part-collapse-button\">\n <button\n type=\"button\"\n class=\"si-split-button\"\n [attr.aria-label]=\"collapseLabel | translate\"\n (click)=\"toggleCollapse()\"\n >\n <si-icon-next class=\"collapse-icon\" [icon]=\"collapseIconClass\" />\n </button>\n </div>\n }\n </div>\n}\n\n@if (headerTemplate) {\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: headerContext\" />\n}\n\n<div\n class=\"si-split-part-content\"\n [class.d-none]=\"!removeContentOnCollapse && collapsedState() && !collapseToMinSize\"\n>\n @if (!removeContentOnCollapse || !collapsedState()) {\n <ng-content />\n }\n</div>\n", styles: [":host{display:flex;flex-direction:column;overflow:hidden}.si-split-part-content{flex:1 1 auto;display:flex;overflow:hidden;flex-direction:column}.si-split-part-header{display:flex;flex-direction:row;flex:none;align-items:center;padding:6px;background:var(--element-base-0);block-size:40px}:host-context(.horizontal)>:host(.is-collapsed) .si-split-part-header{flex:auto;flex-direction:column;max-block-size:100%;padding:6px}:host-context(.horizontal)>:host(.is-collapsed) .si-split-part-header .si-split-part-title{inline-size:100%;writing-mode:vertical-rl;transform:rotate(180deg)}:host-context(.horizontal)>:host(.is-collapsed) .si-split-part-header .si-split-part-collapse-button{order:-1}.si-split-part-title{font-weight:700;flex:1}.si-split-part-actions{padding-inline:8px;flex:0 0 auto}.si-split-button{display:inline-block;padding:4px;color:var(--element-text-primary);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-decoration:none;font-size:20px;line-height:1;vertical-align:middle;-webkit-user-select:none;user-select:none;background:none;border:0;cursor:pointer}.si-split-button:hover{background:var(--element-action-secondary-hover)}:host-context(.vertical)>:host .si-split-button{--orientation-rotate: rotate(90deg)}[dir=rtl] :host-context(.horizontal)>:host .si-split-button{--orientation-rtl: scaleX(-1)}:dir(rtl) :host-context(.horizontal)>:host .si-split-button{--orientation-rtl: scaleX(-1)}:host(.is-collapsed) .si-split-button{--collapse-rotate: rotate(180deg)}:host(.collapse-start) .si-split-button{--collapse-direction: rotate(180deg)}.si-split-button .collapse-icon{transform:var(--orientation-rotate, rotate(0)) var(--collapse-rotate, rotate(0)) var(--collapse-direction, rotate(0)) var(--orientation-rtl, scaleX(1))}\n"] }]
228
+ }], propDecorators: { actions: [{
229
+ type: Input
230
+ }], collapseDirection: [{
231
+ type: Input
232
+ }], collapseIconClass: [{
233
+ type: Input
234
+ }], collapseToMinSize: [{
235
+ type: Input,
236
+ args: [{ transform: booleanAttribute }]
237
+ }], headerStatusColor: [{
238
+ type: Input
239
+ }], headerStatusIconClass: [{
240
+ type: Input
241
+ }], headerTemplate: [{
242
+ type: Input
243
+ }], heading: [{
244
+ type: Input
245
+ }], minSize: [{
246
+ type: Input,
247
+ args: [{ transform: numberAttribute }]
248
+ }], removeContentOnCollapse: [{
249
+ type: Input,
250
+ args: [{ transform: booleanAttribute }]
251
+ }], scale: [{
252
+ type: Input
253
+ }], showCollapseButton: [{
254
+ type: Input,
255
+ args: [{ transform: booleanAttribute }]
256
+ }], showHeader: [{
257
+ type: Input,
258
+ args: [{ transform: booleanAttribute }]
259
+ }], collapseLabel: [{
260
+ type: Input
261
+ }], stateId: [{
262
+ type: Input
263
+ }], size: [{
264
+ type: Input,
265
+ args: [{ transform: numberAttribute }]
266
+ }], collapseOthers: [{
267
+ type: Input,
268
+ args: [{ transform: booleanAttribute }]
269
+ }], collapseChanged: [{
270
+ type: Output
271
+ }], stateChange: [{
272
+ type: Output
273
+ }], expanded: [{
274
+ type: Input,
275
+ args: [{ transform: booleanAttribute }]
276
+ }] } });
277
+
278
+ class SiSplitComponent {
279
+ /** @defaultValue 16 */
280
+ gutterSize = 16;
281
+ // eslint-disable-next-line @typescript-eslint/naming-convention
282
+ _orientation = signal('horizontal');
283
+ get orientation() {
284
+ return this._orientation();
285
+ }
286
+ set orientation(value) {
287
+ this._orientation.set(value);
288
+ }
289
+ /** @defaultValue [] */
290
+ sizes = [];
291
+ /**
292
+ * An optional stateId to uniquely identify a component instance.
293
+ * Required for persistence of ui state.
294
+ */
295
+ stateId;
296
+ sizesChange = new EventEmitter();
297
+ parts;
298
+ gutters = [];
299
+ // eslint-disable-next-line
300
+ gridTemplateRows = signal('');
301
+ // eslint-disable-next-line
302
+ gridTemplateColumns = signal('');
303
+ // eslint-disable-next-line
304
+ gridTemplateAreas = signal('');
305
+ elementRef = inject((ElementRef));
306
+ ngZone = inject(NgZone);
307
+ changeDetectorRef = inject(ChangeDetectorRef);
308
+ document = inject(DOCUMENT);
309
+ uiStateService = inject(SI_UI_STATE_SERVICE, { optional: true });
310
+ // New parts won't be measured, so we need this to scale up their fractional size to the expanded size.
311
+ // Using 10, as the sum of all fractional sizes is 1, so we need to scale them up as fr-values should be >= 1.
312
+ fractionalSizeToExpandedSizeFactor = 10;
313
+ ngOnChanges(changes) {
314
+ if (changes.sizes && !changes.sizes.firstChange) {
315
+ this.sizes.forEach((size, index) => {
316
+ const part = this.parts.get(index);
317
+ if (part) {
318
+ part.fractionalSize.set(size);
319
+ part.expandedSize.set(undefined);
320
+ }
321
+ });
322
+ this.alignRelativeSizes();
323
+ }
324
+ }
325
+ ngAfterContentInit() {
326
+ this.parts.changes.pipe(observeOn(asapScheduler)).subscribe(() => {
327
+ this.changeDetectorRef.markForCheck();
328
+ this.gutters = [];
329
+ for (let index = 0; index < this.parts.length; index++) {
330
+ const component = this.parts.get(index);
331
+ component.index = index;
332
+ component.after = this.parts.get(index + 1);
333
+ component.before = this.parts.get(index - 1);
334
+ component.fractionalSize.set(this.sizes[index]);
335
+ component.saveUIState = () => this.saveUIState();
336
+ if (component.after) {
337
+ this.gutters.push({
338
+ before: component,
339
+ after: this.parts.get(index + 1),
340
+ visible: computed(() => {
341
+ const afterPart = component.after.nextExpandedAfter();
342
+ return !afterPart.collapsedState() && !component.collapsedState();
343
+ })
344
+ });
345
+ }
346
+ }
347
+ this.alignRelativeSizes();
348
+ this.updateFractionalSizeToExpandSizeFactor();
349
+ this.restoreFormUIState();
350
+ const gridTemplate = computed(() => this.parts
351
+ .map(part => part.collapsedState()
352
+ ? part.collapseToMinSize
353
+ ? `${part.minSize}px`
354
+ : 'min-content'
355
+ : part.actualSize()
356
+ ? part.scale === 'auto'
357
+ ? `minmax(${part.minSize}px, ${part.actualSize()}fr)`
358
+ : `minmax(${part.minSize}px, ${part.actualSize()}px)`
359
+ : `minmax(${part.minSize}px, ${part.fractionalSize() * this.fractionalSizeToExpandedSizeFactor}fr)`)
360
+ .join(' min-content '));
361
+ this.gridTemplateRows = computed(() => this._orientation() === 'vertical' ? gridTemplate() : '1fr');
362
+ this.gridTemplateColumns = computed(() => this._orientation() === 'horizontal' ? gridTemplate() : '1fr');
363
+ this.gridTemplateAreas = computed(() => {
364
+ const areaNames = this.parts
365
+ .map((part, index) => [`p-${index}`, part.after ? `g-${index}` : []])
366
+ .flat(2);
367
+ if (this._orientation() === 'horizontal') {
368
+ return `"${areaNames.join(' ')}"`;
369
+ }
370
+ else {
371
+ return `"${areaNames.join('" "')}"`;
372
+ }
373
+ });
374
+ setTimeout(() => this.refreshAllPartSizes());
375
+ });
376
+ this.parts.notifyOnChanges();
377
+ }
378
+ alignRelativeSizes() {
379
+ const requestedNoSize = this.parts.filter(part => !part.size && !part.fractionalSize());
380
+ const requestedRelSize = this.parts.filter(part => part.fractionalSize() && !part.size);
381
+ if (requestedRelSize.length) {
382
+ const totalRequestedRelSize = requestedRelSize.reduce((a, b) => a + b.fractionalSize(), 0);
383
+ const averageRelSize = totalRequestedRelSize / requestedRelSize.length;
384
+ const totalAssignedRelSize = totalRequestedRelSize + requestedNoSize.length * averageRelSize;
385
+ requestedNoSize.forEach(part => part.fractionalSize.set(averageRelSize / totalAssignedRelSize));
386
+ requestedRelSize.forEach(part => part.fractionalSize.set(part.fractionalSize() / totalAssignedRelSize));
387
+ }
388
+ else {
389
+ requestedNoSize.forEach(part => part.fractionalSize.set(1 / requestedNoSize.length));
390
+ }
391
+ }
392
+ updateFractionalSizeToExpandSizeFactor() {
393
+ let previousScalableFractionalSum = 0;
394
+ let previousScalableExpandedSizeSum = 0;
395
+ for (let index = 0; index < this.parts.length; index++) {
396
+ const component = this.parts.get(index);
397
+ if (component.scale === 'auto' && component.expandedSize() !== undefined) {
398
+ previousScalableExpandedSizeSum += component.expandedSize();
399
+ previousScalableFractionalSum += component.fractionalSize();
400
+ }
401
+ }
402
+ this.fractionalSizeToExpandedSizeFactor = previousScalableFractionalSum
403
+ ? previousScalableExpandedSizeSum / previousScalableFractionalSum
404
+ : 10;
405
+ }
406
+ refreshAllPartSizes() {
407
+ const refParts = this.parts.filter(part => !part.collapsedState() &&
408
+ part.scale === 'auto' &&
409
+ (part.expandedSize() || part.fractionalSize()));
410
+ const beforeFrSum = refParts.reduce((a, b) => a + (b.expandedSize() ?? b.fractionalSize()), 0);
411
+ this.parts.forEach(part => part.refreshSizePx(this.orientation));
412
+ const afterFrSum = refParts.reduce((a, b) => a + b.expandedSize(), 0);
413
+ const beforeToAfterFactor = afterFrSum / beforeFrSum;
414
+ this.parts
415
+ .filter(part => part.collapsedState() && (part.scale === 'auto' || part.expandedSize() === undefined))
416
+ .forEach(part => part.expandedSize.update(prev => (prev ?? part.fractionalSize()) * beforeToAfterFactor));
417
+ }
418
+ resizeStart(gutter, event) {
419
+ this.refreshAllPartSizes();
420
+ this.changeDetectorRef.detectChanges();
421
+ const afterPart = gutter.after.nextExpandedAfter();
422
+ let beforeSize = gutter.before.expandedSize();
423
+ let afterSize = afterPart.expandedSize();
424
+ let appliedDelta = 0;
425
+ const rtl = isRTL();
426
+ const startPosition = this.getPosition(event);
427
+ const minDelta = -1 * (beforeSize - gutter.before.minSize);
428
+ const maxDelta = afterSize - afterPart.minSize;
429
+ const containerSize = this.measureContainerSize();
430
+ event.preventDefault(); // prevents text-selection
431
+ this.ngZone.runOutsideAngular(() => {
432
+ merge(fromEvent(this.document, 'mousemove'), fromEvent(this.document, 'touchmove'))
433
+ .pipe(takeUntil(merge(fromEvent(this.document, 'mouseup'), fromEvent(this.document, 'touchend'))))
434
+ .subscribe({
435
+ next: move => {
436
+ let delta = this.getPosition(move) - startPosition;
437
+ if (rtl && this.orientation === 'horizontal') {
438
+ delta *= -1;
439
+ }
440
+ delta -= appliedDelta;
441
+ if (maxDelta < appliedDelta + delta) {
442
+ delta = maxDelta - appliedDelta;
443
+ }
444
+ else if (minDelta > appliedDelta + delta) {
445
+ delta = minDelta - appliedDelta;
446
+ }
447
+ if (delta === 0) {
448
+ return;
449
+ }
450
+ beforeSize += delta;
451
+ afterSize -= delta;
452
+ appliedDelta += delta;
453
+ gutter.before.expandedSize.set(beforeSize);
454
+ afterPart.expandedSize.set(afterSize);
455
+ if (this.orientation === 'vertical') {
456
+ this.elementRef.nativeElement.style.setProperty('grid-template-rows', this.gridTemplateRows());
457
+ }
458
+ else {
459
+ this.elementRef.nativeElement.style.setProperty('grid-template-columns', this.gridTemplateColumns());
460
+ }
461
+ this.ngZone.run(() => this.sizesChange.emit(this.parts.map(part => (part.actualSize() * 100) / containerSize)));
462
+ },
463
+ complete: () => this.saveUIState()
464
+ });
465
+ });
466
+ }
467
+ measureContainerSize() {
468
+ const rect = this.elementRef.nativeElement.getBoundingClientRect();
469
+ if (this._orientation() === 'vertical') {
470
+ return rect.height;
471
+ }
472
+ else {
473
+ return rect.width;
474
+ }
475
+ }
476
+ getPosition(event) {
477
+ const positionObject = event.touches?.[0] ?? event;
478
+ return this.orientation === 'horizontal'
479
+ ? (positionObject.clientX ?? 0)
480
+ : (positionObject.clientY ?? 0);
481
+ }
482
+ saveUIState() {
483
+ if (!this.stateId || !this.uiStateService) {
484
+ return;
485
+ }
486
+ const containerSize = this.measureContainerSize();
487
+ const state = this.parts.reduce((partState, part) => {
488
+ if (part.stateId) {
489
+ partState[part.stateId] = {
490
+ size: ((part.expandedSize() ?? 0) * 100) / containerSize,
491
+ initialSize: this.sizes[part.index],
492
+ expanded: part.expanded
493
+ };
494
+ }
495
+ return partState;
496
+ }, {});
497
+ this.uiStateService.save(this.stateId, state);
498
+ }
499
+ restoreFormUIState() {
500
+ if (!this.stateId || !this.uiStateService) {
501
+ return;
502
+ }
503
+ this.uiStateService.load(this.stateId).then(uiState => {
504
+ if (!uiState) {
505
+ return;
506
+ }
507
+ this.parts
508
+ .filter(part => part.stateId)
509
+ .map(part => ({ part, state: uiState[part.stateId] }))
510
+ .filter(({ part, state }) => this.sizes[part.index] === state?.initialSize)
511
+ .forEach(({ part, state }) => {
512
+ part.expandedSize.set(undefined);
513
+ part.fractionalSize.set(state?.size);
514
+ part.collapsedState.set(!(state?.expanded ?? true));
515
+ });
516
+ setTimeout(() => this.refreshAllPartSizes());
517
+ });
518
+ }
519
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiSplitComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
520
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiSplitComponent, isStandalone: true, selector: "si-split", inputs: { gutterSize: "gutterSize", orientation: "orientation", sizes: "sizes", stateId: "stateId" }, outputs: { sizesChange: "sizesChange" }, host: { properties: { "class": "_orientation()", "style.grid-template-rows": "gridTemplateRows()", "style.grid-template-columns": "gridTemplateColumns()", "style.grid-template-areas": "gridTemplateAreas()" } }, queries: [{ propertyName: "parts", predicate: SiSplitPartComponent }], usesOnChanges: true, ngImport: i0, template: "<ng-content />\n\n@for (gutter of gutters; track $index) {\n @if ($index < parts.length - 1) {\n <div\n class=\"si-split-gutter\"\n [class.d-none]=\"!gutter.visible()\"\n [style.grid-area]=\"'g-' + $index\"\n [style.width.px]=\"orientation === 'horizontal' ? gutterSize : null\"\n [style.height.px]=\"orientation === 'vertical' ? gutterSize : null\"\n (mousedown)=\"resizeStart(gutter, $event)\"\n (touchstart)=\"resizeStart(gutter, $event)\"\n ></div>\n }\n}\n", styles: [":host{display:grid;inline-size:100%;block-size:100%}.si-split-gutter{flex:0 0 auto;background:var(--element-base-0);cursor:ew-resize}.si-split-gutter:before{display:block;content:\"\";position:relative;inset-block-start:50%;margin-block-start:-20px;inset-inline-start:50%;margin-inline-start:-3px;inline-size:6px;block-size:40px;background:var(--element-ui-2);border-radius:3px}:host(.vertical)>.si-split-gutter{inline-size:auto;cursor:ns-resize}:host(.vertical)>.si-split-gutter:before{transform:rotate(90deg)}.si-split-gutter:hover:before{background:var(--element-ui-0-hover)}.si-split-gutter:active:before{background:var(--element-ui-0)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
521
+ }
522
+ __decorate([
523
+ WebComponentContentChildren(SiSplitPartComponent)
524
+ ], SiSplitComponent.prototype, "parts", void 0);
525
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiSplitComponent, decorators: [{
526
+ type: Component,
527
+ args: [{ selector: 'si-split', changeDetection: ChangeDetectionStrategy.OnPush, host: {
528
+ '[class]': '_orientation()',
529
+ '[style.grid-template-rows]': 'gridTemplateRows()',
530
+ '[style.grid-template-columns]': 'gridTemplateColumns()',
531
+ '[style.grid-template-areas]': 'gridTemplateAreas()'
532
+ }, template: "<ng-content />\n\n@for (gutter of gutters; track $index) {\n @if ($index < parts.length - 1) {\n <div\n class=\"si-split-gutter\"\n [class.d-none]=\"!gutter.visible()\"\n [style.grid-area]=\"'g-' + $index\"\n [style.width.px]=\"orientation === 'horizontal' ? gutterSize : null\"\n [style.height.px]=\"orientation === 'vertical' ? gutterSize : null\"\n (mousedown)=\"resizeStart(gutter, $event)\"\n (touchstart)=\"resizeStart(gutter, $event)\"\n ></div>\n }\n}\n", styles: [":host{display:grid;inline-size:100%;block-size:100%}.si-split-gutter{flex:0 0 auto;background:var(--element-base-0);cursor:ew-resize}.si-split-gutter:before{display:block;content:\"\";position:relative;inset-block-start:50%;margin-block-start:-20px;inset-inline-start:50%;margin-inline-start:-3px;inline-size:6px;block-size:40px;background:var(--element-ui-2);border-radius:3px}:host(.vertical)>.si-split-gutter{inline-size:auto;cursor:ns-resize}:host(.vertical)>.si-split-gutter:before{transform:rotate(90deg)}.si-split-gutter:hover:before{background:var(--element-ui-0-hover)}.si-split-gutter:active:before{background:var(--element-ui-0)}\n"] }]
533
+ }], propDecorators: { gutterSize: [{
534
+ type: Input
535
+ }], orientation: [{
536
+ type: Input
537
+ }], sizes: [{
538
+ type: Input
539
+ }], stateId: [{
540
+ type: Input
541
+ }], sizesChange: [{
542
+ type: Output
543
+ }], parts: [{
544
+ type: ContentChildren,
545
+ args: [SiSplitPartComponent]
546
+ }] } });
547
+
548
+ /**
549
+ * Copyright Siemens 2016 - 2025.
550
+ * SPDX-License-Identifier: MIT
551
+ */
552
+ class SiSplitModule {
553
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiSplitModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
554
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.6", ngImport: i0, type: SiSplitModule, imports: [SiSplitComponent, SiSplitPartComponent], exports: [SiSplitComponent, SiSplitPartComponent] });
555
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiSplitModule, imports: [SiSplitPartComponent] });
556
+ }
557
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiSplitModule, decorators: [{
558
+ type: NgModule,
559
+ args: [{
560
+ imports: [SiSplitComponent, SiSplitPartComponent],
561
+ exports: [SiSplitComponent, SiSplitPartComponent]
562
+ }]
563
+ }] });
564
+
565
+ /**
566
+ * Copyright Siemens 2016 - 2025.
567
+ * SPDX-License-Identifier: MIT
568
+ */
569
+
570
+ /**
571
+ * Generated bundle index. Do not edit.
572
+ */
573
+
574
+ export { SiSplitComponent, SiSplitModule, SiSplitPartComponent };
575
+ //# sourceMappingURL=siemens-element-ng-split.mjs.map