@hermes-ui/angular 0.1.4

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 (539) hide show
  1. package/README.md +52 -0
  2. package/accordion/_accordion.clarity.scss +81 -0
  3. package/accordion/_properties.accordion.scss +45 -0
  4. package/accordion/_variables.accordion.scss +91 -0
  5. package/addons/a11y/README.md +157 -0
  6. package/addons/a11y/forms/required-field-legend.component.scss +17 -0
  7. package/addons/card-container/card/appfx-card.component.scss +137 -0
  8. package/addons/card-container/container/appfx-card-container.component.scss +17 -0
  9. package/addons/card-container/settings/appfx-card-container-settings.component.scss +62 -0
  10. package/addons/certificate-viewer/certificate-viewer/certificate-viewer.component.scss +69 -0
  11. package/addons/certificate-viewer/certificate-viewer-details/certificate-viewer-details.component.scss +49 -0
  12. package/addons/certificate-viewer/certificate-viewer-general/certificate-viewer-general.component.scss +38 -0
  13. package/addons/datagrid/README.md +289 -0
  14. package/addons/datagrid/addons/action-bar/datagrid-action-bar.component.scss +81 -0
  15. package/addons/datagrid/addons/column-toggle/datagrid-column-toggle.component.scss +99 -0
  16. package/addons/datagrid/addons/export/export-datagrid.component.scss +9 -0
  17. package/addons/datagrid/datagrid.component.scss +339 -0
  18. package/addons/datagrid-filters/README.md +223 -0
  19. package/addons/datagrid-filters/advanced-filters/date-time-filter.component.scss +10 -0
  20. package/addons/datagrid-filters/advanced-filters/enum-filter.component.scss +40 -0
  21. package/addons/datagrid-filters/advanced-filters/users-filter.component.scss +11 -0
  22. package/addons/datagrid-filters/common-styles.scss +98 -0
  23. package/addons/datagrid-filters/composite-filters.component.scss +26 -0
  24. package/addons/datagrid-filters/datagrid-filters.component.scss +22 -0
  25. package/addons/datagrid-filters/manage-filters/manage-filter.component.scss +42 -0
  26. package/addons/dialog/README.md +112 -0
  27. package/addons/dialog/multi-page-dialog.a11y.scss +203 -0
  28. package/addons/dialog/multi-page-dialog.component.scss +102 -0
  29. package/addons/dialog/toggle-component/toggle.component.scss +15 -0
  30. package/addons/drag-and-drop/README.md +48 -0
  31. package/addons/menu/menu.component.scss +120 -0
  32. package/addons/property-view/components/property-view-category.component.scss +38 -0
  33. package/addons/property-view/components/property-view-message.component.scss +48 -0
  34. package/addons/property-view/components/property-view-property.component.scss +122 -0
  35. package/addons/property-view/components/property-view-section.component.scss +59 -0
  36. package/addons/property-view/components/property-view.component.scss +23 -0
  37. package/addons/stepper/stepper.component.scss +53 -0
  38. package/addons/tabs/tab-links/tab-links.component.scss +61 -0
  39. package/addons/tabs/tabs.a11y.scss +26 -0
  40. package/addons/tabs/tabs.component.scss +95 -0
  41. package/addons/theme-builder/README.md +70 -0
  42. package/addons/theme-builder/theme-builder.component.scss +194 -0
  43. package/addons/translate/README.md +124 -0
  44. package/addons/var/debug/workflow-model-monitor.component.scss +50 -0
  45. package/addons/var/error/error.component.scss +38 -0
  46. package/addons/var/spinner/spinner.component.scss +33 -0
  47. package/addons/wizard/summary/summary.component.scss +22 -0
  48. package/addons/wizard/wizard.component.scss +251 -0
  49. package/button/_buttons.clarity.scss +388 -0
  50. package/button/_mixins.buttons.scss +241 -0
  51. package/button/_properties.buttons.scss +387 -0
  52. package/button/_properties.toggles.scss +35 -0
  53. package/button/_variables.buttons.scss +905 -0
  54. package/button/_variables.toggles.scss +41 -0
  55. package/button/button-group/_button-group.clarity.scss +202 -0
  56. package/collapsible-panel/_mixins.collapsible-panel.scss +189 -0
  57. package/collapsible-panel/_properties.collapsible-panel.scss +42 -0
  58. package/collapsible-panel/_variables.collapsible-panel.scss +40 -0
  59. package/data/_mixins.tables.scss +114 -0
  60. package/data/_properties.tables.scss +77 -0
  61. package/data/_tables.clarity.scss +120 -0
  62. package/data/_variables.tables.scss +42 -0
  63. package/data/datagrid/_datagrid.clarity.scss +1871 -0
  64. package/data/datagrid/_mixins.datagrid.scss +102 -0
  65. package/data/datagrid/_properties.datagrid.scss +98 -0
  66. package/data/datagrid/_variables.datagrid.scss +98 -0
  67. package/data/stack-view/_properties.stack-view.scss +50 -0
  68. package/data/stack-view/_stack-view.clarity.scss +267 -0
  69. package/data/stack-view/_variables.stack-view.scss +32 -0
  70. package/data/tree-view/_properties.tree-view.scss +41 -0
  71. package/data/tree-view/_tree-view.clarity.scss +281 -0
  72. package/data/tree-view/_variables.tree-view.scss +51 -0
  73. package/emphasis/alert/_alert.clarity.scss +467 -0
  74. package/emphasis/alert/_mixins.alert.scss +96 -0
  75. package/emphasis/alert/_properties.alert.scss +183 -0
  76. package/emphasis/alert/_variables.alert.scss +502 -0
  77. package/emphasis/badge/_badges.clarity.scss +61 -0
  78. package/emphasis/badge/_mixins.bades.scss +34 -0
  79. package/emphasis/badge/_properties.badges.scss +82 -0
  80. package/emphasis/badge/_variables.badges.scss +160 -0
  81. package/emphasis/label/_labels.clarity.scss +179 -0
  82. package/emphasis/label/_mixins.label.scss +77 -0
  83. package/emphasis/label/_properties.label.scss +105 -0
  84. package/emphasis/label/_variables.label.scss +181 -0
  85. package/fesm2022/hermes-ui-angular-accordion.mjs +355 -0
  86. package/fesm2022/hermes-ui-angular-accordion.mjs.map +1 -0
  87. package/fesm2022/hermes-ui-angular-addons-a11y.mjs +544 -0
  88. package/fesm2022/hermes-ui-angular-addons-a11y.mjs.map +1 -0
  89. package/fesm2022/hermes-ui-angular-addons-card-container.mjs +1082 -0
  90. package/fesm2022/hermes-ui-angular-addons-card-container.mjs.map +1 -0
  91. package/fesm2022/hermes-ui-angular-addons-certificate-viewer.mjs +2520 -0
  92. package/fesm2022/hermes-ui-angular-addons-certificate-viewer.mjs.map +1 -0
  93. package/fesm2022/hermes-ui-angular-addons-datagrid-filters.mjs +2818 -0
  94. package/fesm2022/hermes-ui-angular-addons-datagrid-filters.mjs.map +1 -0
  95. package/fesm2022/hermes-ui-angular-addons-datagrid.mjs +3131 -0
  96. package/fesm2022/hermes-ui-angular-addons-datagrid.mjs.map +1 -0
  97. package/fesm2022/hermes-ui-angular-addons-dialog.mjs +386 -0
  98. package/fesm2022/hermes-ui-angular-addons-dialog.mjs.map +1 -0
  99. package/fesm2022/hermes-ui-angular-addons-drag-and-drop.mjs +78 -0
  100. package/fesm2022/hermes-ui-angular-addons-drag-and-drop.mjs.map +1 -0
  101. package/fesm2022/hermes-ui-angular-addons-menu.mjs +559 -0
  102. package/fesm2022/hermes-ui-angular-addons-menu.mjs.map +1 -0
  103. package/fesm2022/hermes-ui-angular-addons-property-view.mjs +1142 -0
  104. package/fesm2022/hermes-ui-angular-addons-property-view.mjs.map +1 -0
  105. package/fesm2022/hermes-ui-angular-addons-stepper.mjs +716 -0
  106. package/fesm2022/hermes-ui-angular-addons-stepper.mjs.map +1 -0
  107. package/fesm2022/hermes-ui-angular-addons-tabs.mjs +539 -0
  108. package/fesm2022/hermes-ui-angular-addons-tabs.mjs.map +1 -0
  109. package/fesm2022/hermes-ui-angular-addons-testing.mjs +2010 -0
  110. package/fesm2022/hermes-ui-angular-addons-testing.mjs.map +1 -0
  111. package/fesm2022/hermes-ui-angular-addons-theme-builder.mjs +922 -0
  112. package/fesm2022/hermes-ui-angular-addons-theme-builder.mjs.map +1 -0
  113. package/fesm2022/hermes-ui-angular-addons-translate.mjs +295 -0
  114. package/fesm2022/hermes-ui-angular-addons-translate.mjs.map +1 -0
  115. package/fesm2022/hermes-ui-angular-addons-var.mjs +2028 -0
  116. package/fesm2022/hermes-ui-angular-addons-var.mjs.map +1 -0
  117. package/fesm2022/hermes-ui-angular-addons-wizard.mjs +610 -0
  118. package/fesm2022/hermes-ui-angular-addons-wizard.mjs.map +1 -0
  119. package/fesm2022/hermes-ui-angular-addons-workflow-strings.mjs +121 -0
  120. package/fesm2022/hermes-ui-angular-addons-workflow-strings.mjs.map +1 -0
  121. package/fesm2022/hermes-ui-angular-addons-workflow.mjs +88 -0
  122. package/fesm2022/hermes-ui-angular-addons-workflow.mjs.map +1 -0
  123. package/fesm2022/hermes-ui-angular-button.mjs +719 -0
  124. package/fesm2022/hermes-ui-angular-button.mjs.map +1 -0
  125. package/fesm2022/hermes-ui-angular-collapsible-panel.mjs +201 -0
  126. package/fesm2022/hermes-ui-angular-collapsible-panel.mjs.map +1 -0
  127. package/fesm2022/hermes-ui-angular-data-datagrid.mjs +8045 -0
  128. package/fesm2022/hermes-ui-angular-data-datagrid.mjs.map +1 -0
  129. package/fesm2022/hermes-ui-angular-data-stack-view.mjs +442 -0
  130. package/fesm2022/hermes-ui-angular-data-stack-view.mjs.map +1 -0
  131. package/fesm2022/hermes-ui-angular-data-tree-view.mjs +1106 -0
  132. package/fesm2022/hermes-ui-angular-data-tree-view.mjs.map +1 -0
  133. package/fesm2022/hermes-ui-angular-data.mjs +40 -0
  134. package/fesm2022/hermes-ui-angular-data.mjs.map +1 -0
  135. package/fesm2022/hermes-ui-angular-emphasis-alert.mjs +624 -0
  136. package/fesm2022/hermes-ui-angular-emphasis-alert.mjs.map +1 -0
  137. package/fesm2022/hermes-ui-angular-emphasis-badge.mjs +69 -0
  138. package/fesm2022/hermes-ui-angular-emphasis-badge.mjs.map +1 -0
  139. package/fesm2022/hermes-ui-angular-emphasis-common.mjs +25 -0
  140. package/fesm2022/hermes-ui-angular-emphasis-common.mjs.map +1 -0
  141. package/fesm2022/hermes-ui-angular-emphasis-label.mjs +105 -0
  142. package/fesm2022/hermes-ui-angular-emphasis-label.mjs.map +1 -0
  143. package/fesm2022/hermes-ui-angular-emphasis.mjs +41 -0
  144. package/fesm2022/hermes-ui-angular-emphasis.mjs.map +1 -0
  145. package/fesm2022/hermes-ui-angular-forms-checkbox.mjs +279 -0
  146. package/fesm2022/hermes-ui-angular-forms-checkbox.mjs.map +1 -0
  147. package/fesm2022/hermes-ui-angular-forms-combobox.mjs +1775 -0
  148. package/fesm2022/hermes-ui-angular-forms-combobox.mjs.map +1 -0
  149. package/fesm2022/hermes-ui-angular-forms-common.mjs +1251 -0
  150. package/fesm2022/hermes-ui-angular-forms-common.mjs.map +1 -0
  151. package/fesm2022/hermes-ui-angular-forms-datalist.mjs +263 -0
  152. package/fesm2022/hermes-ui-angular-forms-datalist.mjs.map +1 -0
  153. package/fesm2022/hermes-ui-angular-forms-datepicker.mjs +3274 -0
  154. package/fesm2022/hermes-ui-angular-forms-datepicker.mjs.map +1 -0
  155. package/fesm2022/hermes-ui-angular-forms-file-input.mjs +826 -0
  156. package/fesm2022/hermes-ui-angular-forms-file-input.mjs.map +1 -0
  157. package/fesm2022/hermes-ui-angular-forms-input.mjs +153 -0
  158. package/fesm2022/hermes-ui-angular-forms-input.mjs.map +1 -0
  159. package/fesm2022/hermes-ui-angular-forms-native-select.mjs +153 -0
  160. package/fesm2022/hermes-ui-angular-forms-native-select.mjs.map +1 -0
  161. package/fesm2022/hermes-ui-angular-forms-number-input.mjs +236 -0
  162. package/fesm2022/hermes-ui-angular-forms-number-input.mjs.map +1 -0
  163. package/fesm2022/hermes-ui-angular-forms-password.mjs +233 -0
  164. package/fesm2022/hermes-ui-angular-forms-password.mjs.map +1 -0
  165. package/fesm2022/hermes-ui-angular-forms-radio.mjs +224 -0
  166. package/fesm2022/hermes-ui-angular-forms-radio.mjs.map +1 -0
  167. package/fesm2022/hermes-ui-angular-forms-range.mjs +186 -0
  168. package/fesm2022/hermes-ui-angular-forms-range.mjs.map +1 -0
  169. package/fesm2022/hermes-ui-angular-forms-select.mjs +606 -0
  170. package/fesm2022/hermes-ui-angular-forms-select.mjs.map +1 -0
  171. package/fesm2022/hermes-ui-angular-forms-textarea.mjs +136 -0
  172. package/fesm2022/hermes-ui-angular-forms-textarea.mjs.map +1 -0
  173. package/fesm2022/hermes-ui-angular-forms.mjs +105 -0
  174. package/fesm2022/hermes-ui-angular-forms.mjs.map +1 -0
  175. package/fesm2022/hermes-ui-angular-icon.mjs +7413 -0
  176. package/fesm2022/hermes-ui-angular-icon.mjs.map +1 -0
  177. package/fesm2022/hermes-ui-angular-layout-breadcrumbs.mjs +120 -0
  178. package/fesm2022/hermes-ui-angular-layout-breadcrumbs.mjs.map +1 -0
  179. package/fesm2022/hermes-ui-angular-layout-main-container.mjs +100 -0
  180. package/fesm2022/hermes-ui-angular-layout-main-container.mjs.map +1 -0
  181. package/fesm2022/hermes-ui-angular-layout-nav.mjs +582 -0
  182. package/fesm2022/hermes-ui-angular-layout-nav.mjs.map +1 -0
  183. package/fesm2022/hermes-ui-angular-layout-tabs.mjs +807 -0
  184. package/fesm2022/hermes-ui-angular-layout-tabs.mjs.map +1 -0
  185. package/fesm2022/hermes-ui-angular-layout-vertical-nav.mjs +507 -0
  186. package/fesm2022/hermes-ui-angular-layout-vertical-nav.mjs.map +1 -0
  187. package/fesm2022/hermes-ui-angular-layout.mjs +44 -0
  188. package/fesm2022/hermes-ui-angular-layout.mjs.map +1 -0
  189. package/fesm2022/hermes-ui-angular-modal.mjs +619 -0
  190. package/fesm2022/hermes-ui-angular-modal.mjs.map +1 -0
  191. package/fesm2022/hermes-ui-angular-popover-common.mjs +1371 -0
  192. package/fesm2022/hermes-ui-angular-popover-common.mjs.map +1 -0
  193. package/fesm2022/hermes-ui-angular-popover-dropdown.mjs +492 -0
  194. package/fesm2022/hermes-ui-angular-popover-dropdown.mjs.map +1 -0
  195. package/fesm2022/hermes-ui-angular-popover-signpost.mjs +494 -0
  196. package/fesm2022/hermes-ui-angular-popover-signpost.mjs.map +1 -0
  197. package/fesm2022/hermes-ui-angular-popover-tooltip.mjs +293 -0
  198. package/fesm2022/hermes-ui-angular-popover-tooltip.mjs.map +1 -0
  199. package/fesm2022/hermes-ui-angular-popover.mjs +41 -0
  200. package/fesm2022/hermes-ui-angular-popover.mjs.map +1 -0
  201. package/fesm2022/hermes-ui-angular-progress-progress-bars.mjs +217 -0
  202. package/fesm2022/hermes-ui-angular-progress-progress-bars.mjs.map +1 -0
  203. package/fesm2022/hermes-ui-angular-progress-spinner.mjs +132 -0
  204. package/fesm2022/hermes-ui-angular-progress-spinner.mjs.map +1 -0
  205. package/fesm2022/hermes-ui-angular-stepper.mjs +694 -0
  206. package/fesm2022/hermes-ui-angular-stepper.mjs.map +1 -0
  207. package/fesm2022/hermes-ui-angular-timeline.mjs +316 -0
  208. package/fesm2022/hermes-ui-angular-timeline.mjs.map +1 -0
  209. package/fesm2022/hermes-ui-angular-toast.mjs +373 -0
  210. package/fesm2022/hermes-ui-angular-toast.mjs.map +1 -0
  211. package/fesm2022/hermes-ui-angular-utils-conditional.mjs +351 -0
  212. package/fesm2022/hermes-ui-angular-utils-conditional.mjs.map +1 -0
  213. package/fesm2022/hermes-ui-angular-utils-loading.mjs +107 -0
  214. package/fesm2022/hermes-ui-angular-utils-loading.mjs.map +1 -0
  215. package/fesm2022/hermes-ui-angular-utils.mjs +2086 -0
  216. package/fesm2022/hermes-ui-angular-utils.mjs.map +1 -0
  217. package/fesm2022/hermes-ui-angular-wizard.mjs +3074 -0
  218. package/fesm2022/hermes-ui-angular-wizard.mjs.map +1 -0
  219. package/fesm2022/hermes-ui-angular.mjs +130 -0
  220. package/fesm2022/hermes-ui-angular.mjs.map +1 -0
  221. package/forms/combobox/_combobox.clarity.scss +330 -0
  222. package/forms/combobox/_properties.combobox.scss +46 -0
  223. package/forms/combobox/_variables.combobox.scss +32 -0
  224. package/forms/datepicker/_datepicker.clarity.scss +259 -0
  225. package/forms/datepicker/_mixins.datepicker.scss +89 -0
  226. package/forms/datepicker/_properties.datepicker.scss +46 -0
  227. package/forms/datepicker/_variables.datepicker.scss +74 -0
  228. package/forms/styles/_checkbox.clarity.scss +193 -0
  229. package/forms/styles/_containers.clarity.scss +230 -0
  230. package/forms/styles/_datalist.clarity.scss +47 -0
  231. package/forms/styles/_file-input.clarity.scss +134 -0
  232. package/forms/styles/_file.clarity.scss +52 -0
  233. package/forms/styles/_form.clarity.scss +87 -0
  234. package/forms/styles/_input-group.clarity.scss +126 -0
  235. package/forms/styles/_input.clarity.scss +83 -0
  236. package/forms/styles/_mixins.forms.scss +193 -0
  237. package/forms/styles/_native-select.clarity.scss +178 -0
  238. package/forms/styles/_number-input.clarity.scss +58 -0
  239. package/forms/styles/_password.clarity.scss +26 -0
  240. package/forms/styles/_properties.forms.scss +180 -0
  241. package/forms/styles/_radio.clarity.scss +120 -0
  242. package/forms/styles/_range.clarity.scss +124 -0
  243. package/forms/styles/_select.clarity.scss +158 -0
  244. package/forms/styles/_textarea.clarity.scss +71 -0
  245. package/forms/styles/_toggles.clarity.scss +209 -0
  246. package/forms/styles/_variables.forms.scss +156 -0
  247. package/hermes-ui.scss +7 -0
  248. package/icon/icon.component.scss +247 -0
  249. package/image/_icons.clarity.scss +101 -0
  250. package/image/_images.clarity.scss +42 -0
  251. package/image/_mixins.images.scss +11 -0
  252. package/layout/_card.clarity.scss +318 -0
  253. package/layout/_login.clarity.scss +240 -0
  254. package/layout/_properties.card.scss +39 -0
  255. package/layout/_properties.login.scss +32 -0
  256. package/layout/_variables.card.scss +24 -0
  257. package/layout/_variables.login.scss +22 -0
  258. package/layout/breadcrumbs/_breadcrumbs.clarity.scss +60 -0
  259. package/layout/breadcrumbs/_properties.breadcrumbs.scss +18 -0
  260. package/layout/breadcrumbs/_variables.breadcrumbs.scss +11 -0
  261. package/layout/grid/_grid.scss +23 -0
  262. package/layout/grid/grid/_grid.scss +39 -0
  263. package/layout/grid/mixins/_breakpoint.scss +83 -0
  264. package/layout/grid/mixins/_clearfix.scss +13 -0
  265. package/layout/grid/mixins/_grid-framework.scss +91 -0
  266. package/layout/grid/mixins/_grid.scss +39 -0
  267. package/layout/grid/utilities/_align.scss +30 -0
  268. package/layout/grid/utilities/_clearfix.scss +12 -0
  269. package/layout/grid/utilities/_display.scss +18 -0
  270. package/layout/grid/utilities/_flex.scss +222 -0
  271. package/layout/grid/utilities/_float.scss +26 -0
  272. package/layout/grid/utilities/_visibility.scss +60 -0
  273. package/layout/main-container/_layout.clarity.scss +87 -0
  274. package/layout/main-container/_properties.header.scss +55 -0
  275. package/layout/main-container/_variables.header.scss +32 -0
  276. package/layout/nav/_header.clarity.scss +40 -0
  277. package/layout/nav/_links.clarity.scss +84 -0
  278. package/layout/nav/_mixins.header.scss +332 -0
  279. package/layout/nav/_mixins.responsive-nav.scss +75 -0
  280. package/layout/nav/_nav.clarity.scss +100 -0
  281. package/layout/nav/_properties.nav.scss +27 -0
  282. package/layout/nav/_properties.responsive-nav.scss +23 -0
  283. package/layout/nav/_properties.subnav.scss +19 -0
  284. package/layout/nav/_responsive-nav.clarity.scss +490 -0
  285. package/layout/nav/_subnav.clarity.scss +48 -0
  286. package/layout/nav/_variables.nav.scss +13 -0
  287. package/layout/nav/_variables.responsive-nav.scss +28 -0
  288. package/layout/nav/_variables.subnav.scss +21 -0
  289. package/layout/tabs/_mixins.tabs.scss +41 -0
  290. package/layout/tabs/_properties.tabs.scss +25 -0
  291. package/layout/tabs/_tabs.clarity.scss +110 -0
  292. package/layout/tabs/_variables.tabs.scss +17 -0
  293. package/layout/vertical-nav/_mixins.vertical-nav.scss +52 -0
  294. package/layout/vertical-nav/_properties.vertical-nav.scss +73 -0
  295. package/layout/vertical-nav/_variables.vertical-nav.scss +52 -0
  296. package/layout/vertical-nav/_vertical-nav.clarity.scss +469 -0
  297. package/main.scss +14 -0
  298. package/modal/_modal.clarity.scss +379 -0
  299. package/modal/_properties.modal.scss +57 -0
  300. package/modal/_variables.modal.scss +41 -0
  301. package/package.json +325 -0
  302. package/popover/common/README.md +112 -0
  303. package/popover/common/_popover.clarity.scss +28 -0
  304. package/popover/dropdown/_dropdown.clarity.scss +326 -0
  305. package/popover/dropdown/_menu-mixins.clarity.scss +132 -0
  306. package/popover/dropdown/_properties.dropdown.scss +50 -0
  307. package/popover/dropdown/_variables.dropdown.scss +36 -0
  308. package/popover/signpost/_properties.signpost.scss +34 -0
  309. package/popover/signpost/_signposts.clarity.scss +414 -0
  310. package/popover/signpost/_variables.signpost.scss +21 -0
  311. package/popover/tooltip/_mixins.tooltip.scss +186 -0
  312. package/popover/tooltip/_properties.tooltip.scss +28 -0
  313. package/popover/tooltip/_tooltips.clarity.scss +122 -0
  314. package/popover/tooltip/_variables.tooltip.scss +20 -0
  315. package/progress/progress-bars/_progress-bars.clarity.scss +616 -0
  316. package/progress/progress-bars/_properties.progress-bars.scss +24 -0
  317. package/progress/progress-bars/_variables.progress-bars.scss +15 -0
  318. package/progress/progress-bars/utils/_mixins.clarity.scss +18 -0
  319. package/progress/spinner/_mixins.spinner.scss +30 -0
  320. package/progress/spinner/_properties.spinner.scss +37 -0
  321. package/progress/spinner/_spinner.clarity.scss +148 -0
  322. package/progress/spinner/_variables.spinner.scss +25 -0
  323. package/schematics/collection.json +14 -0
  324. package/stepper/_properties.stepper.scss +29 -0
  325. package/stepper/_stepper.clarity.scss +184 -0
  326. package/stepper/_variables.stepper.scss +13 -0
  327. package/styles/_a11y.scss +14 -0
  328. package/styles/_close.clarity.scss +60 -0
  329. package/styles/_components.clarity.scss +189 -0
  330. package/styles/_mixins.scss +460 -0
  331. package/styles/_normalize.scss +292 -0
  332. package/styles/_reboot.clarity.scss +374 -0
  333. package/styles/_variables.clarity.scss +139 -0
  334. package/styles/core/base/base.element.scss +97 -0
  335. package/styles/core/global.scss +12 -0
  336. package/styles/core/layout/_alignments.scss +18 -0
  337. package/styles/core/layout/_container.scss +29 -0
  338. package/styles/core/layout/_display.scss +58 -0
  339. package/styles/core/layout/_optimize.scss +60 -0
  340. package/styles/core/layout/_shadow-dom.scss +47 -0
  341. package/styles/core/layout/_spacing.scss +31 -0
  342. package/styles/core/layout/_type-grid.scss +66 -0
  343. package/styles/core/layout/_type-horizontal.scss +33 -0
  344. package/styles/core/layout/_type-vertical.scss +26 -0
  345. package/styles/core/layout/mixins/_mixins.alignment.scss +35 -0
  346. package/styles/core/layout/mixins/_mixins.display.scss +23 -0
  347. package/styles/core/layout/mixins/_mixins.grid.scss +105 -0
  348. package/styles/core/layout/mixins/_mixins.scss +106 -0
  349. package/styles/core/layout/mixins/_mixins.shadow-dom.scss +106 -0
  350. package/styles/core/layout/mixins/_mixins.type-horizontal.scss +113 -0
  351. package/styles/core/layout/mixins/_mixins.type-vertical.scss +108 -0
  352. package/styles/core/module.layout.scss +22 -0
  353. package/styles/core/module.reset.scss +48 -0
  354. package/styles/core/module.typography.scss +9 -0
  355. package/styles/core/theme.dark.scss +298 -0
  356. package/styles/core/theme.high-contrast.scss +42 -0
  357. package/styles/core/theme.low-motion.scss +20 -0
  358. package/styles/core/tokens/_alias-interaction.scss +74 -0
  359. package/styles/core/tokens/_alias-object-background.scss +29 -0
  360. package/styles/core/tokens/_alias-object-border.scss +21 -0
  361. package/styles/core/tokens/_alias-object-container.scss +20 -0
  362. package/styles/core/tokens/_alias-object-opacity.scss +15 -0
  363. package/styles/core/tokens/_alias-object-shadow.scss +17 -0
  364. package/styles/core/tokens/_alias-primary.scss +21 -0
  365. package/styles/core/tokens/_alias-status.scss +40 -0
  366. package/styles/core/tokens/_alias-typography.scss +107 -0
  367. package/styles/core/tokens/_alias-utility.scss +42 -0
  368. package/styles/core/tokens/_alias-viz-colors.scss +170 -0
  369. package/styles/core/tokens/_global-animation.scss +32 -0
  370. package/styles/core/tokens/_global-colors.scss +249 -0
  371. package/styles/core/tokens/_global-space.scss +52 -0
  372. package/styles/core/tokens/_internal-scale.scss +14 -0
  373. package/styles/core/tokens/_properties.tokens.scss +22 -0
  374. package/styles/core/tokens/_variables.tokens.scss +787 -0
  375. package/styles/core/typography/_legacy-typography.scss +328 -0
  376. package/styles/core/typography/_mixins.typography.scss +18 -0
  377. package/styles/core/typography/_typography.scss +328 -0
  378. package/styles/variables/_properties.density.scss +225 -0
  379. package/styles/variables/_properties.global.scss +51 -0
  380. package/styles/variables/_properties.layout.scss +21 -0
  381. package/styles/variables/_properties.scss +11 -0
  382. package/styles/variables/_properties.typography.scss +164 -0
  383. package/styles/variables/_variables.density.scss +116 -0
  384. package/styles/variables/_variables.global.scss +87 -0
  385. package/styles/variables/_variables.layout.scss +37 -0
  386. package/styles/variables/_variables.scss +11 -0
  387. package/styles/variables/_variables.typography.scss +156 -0
  388. package/timeline/_properties.timeline.scss +38 -0
  389. package/timeline/_timeline.clarity.scss +172 -0
  390. package/timeline/_variables.timeline.scss +29 -0
  391. package/toast/README.md +65 -0
  392. package/toast/_properties.toast.scss +56 -0
  393. package/toast/_toast.clarity.scss +190 -0
  394. package/toast/_variables.toast.scss +33 -0
  395. package/types/hermes-ui-angular-accordion.d.ts +101 -0
  396. package/types/hermes-ui-angular-accordion.d.ts.map +1 -0
  397. package/types/hermes-ui-angular-addons-a11y.d.ts +187 -0
  398. package/types/hermes-ui-angular-addons-a11y.d.ts.map +1 -0
  399. package/types/hermes-ui-angular-addons-card-container.d.ts +482 -0
  400. package/types/hermes-ui-angular-addons-card-container.d.ts.map +1 -0
  401. package/types/hermes-ui-angular-addons-certificate-viewer.d.ts +404 -0
  402. package/types/hermes-ui-angular-addons-certificate-viewer.d.ts.map +1 -0
  403. package/types/hermes-ui-angular-addons-datagrid-filters.d.ts +911 -0
  404. package/types/hermes-ui-angular-addons-datagrid-filters.d.ts.map +1 -0
  405. package/types/hermes-ui-angular-addons-datagrid.d.ts +1529 -0
  406. package/types/hermes-ui-angular-addons-datagrid.d.ts.map +1 -0
  407. package/types/hermes-ui-angular-addons-dialog.d.ts +233 -0
  408. package/types/hermes-ui-angular-addons-dialog.d.ts.map +1 -0
  409. package/types/hermes-ui-angular-addons-drag-and-drop.d.ts +35 -0
  410. package/types/hermes-ui-angular-addons-drag-and-drop.d.ts.map +1 -0
  411. package/types/hermes-ui-angular-addons-menu.d.ts +197 -0
  412. package/types/hermes-ui-angular-addons-menu.d.ts.map +1 -0
  413. package/types/hermes-ui-angular-addons-property-view.d.ts +387 -0
  414. package/types/hermes-ui-angular-addons-property-view.d.ts.map +1 -0
  415. package/types/hermes-ui-angular-addons-stepper.d.ts +298 -0
  416. package/types/hermes-ui-angular-addons-stepper.d.ts.map +1 -0
  417. package/types/hermes-ui-angular-addons-tabs.d.ts +173 -0
  418. package/types/hermes-ui-angular-addons-tabs.d.ts.map +1 -0
  419. package/types/hermes-ui-angular-addons-testing.d.ts +592 -0
  420. package/types/hermes-ui-angular-addons-testing.d.ts.map +1 -0
  421. package/types/hermes-ui-angular-addons-theme-builder.d.ts +200 -0
  422. package/types/hermes-ui-angular-addons-theme-builder.d.ts.map +1 -0
  423. package/types/hermes-ui-angular-addons-translate.d.ts +149 -0
  424. package/types/hermes-ui-angular-addons-translate.d.ts.map +1 -0
  425. package/types/hermes-ui-angular-addons-var.d.ts +923 -0
  426. package/types/hermes-ui-angular-addons-var.d.ts.map +1 -0
  427. package/types/hermes-ui-angular-addons-wizard.d.ts +241 -0
  428. package/types/hermes-ui-angular-addons-wizard.d.ts.map +1 -0
  429. package/types/hermes-ui-angular-addons-workflow-strings.d.ts +124 -0
  430. package/types/hermes-ui-angular-addons-workflow-strings.d.ts.map +1 -0
  431. package/types/hermes-ui-angular-addons-workflow.d.ts +15 -0
  432. package/types/hermes-ui-angular-addons-workflow.d.ts.map +1 -0
  433. package/types/hermes-ui-angular-button.d.ts +170 -0
  434. package/types/hermes-ui-angular-button.d.ts.map +1 -0
  435. package/types/hermes-ui-angular-collapsible-panel.d.ts +74 -0
  436. package/types/hermes-ui-angular-collapsible-panel.d.ts.map +1 -0
  437. package/types/hermes-ui-angular-data-datagrid.d.ts +1938 -0
  438. package/types/hermes-ui-angular-data-datagrid.d.ts.map +1 -0
  439. package/types/hermes-ui-angular-data-stack-view.d.ts +88 -0
  440. package/types/hermes-ui-angular-data-stack-view.d.ts.map +1 -0
  441. package/types/hermes-ui-angular-data-tree-view.d.ts +230 -0
  442. package/types/hermes-ui-angular-data-tree-view.d.ts.map +1 -0
  443. package/types/hermes-ui-angular-data.d.ts +16 -0
  444. package/types/hermes-ui-angular-data.d.ts.map +1 -0
  445. package/types/hermes-ui-angular-emphasis-alert.d.ts +176 -0
  446. package/types/hermes-ui-angular-emphasis-alert.d.ts.map +1 -0
  447. package/types/hermes-ui-angular-emphasis-badge.d.ts +26 -0
  448. package/types/hermes-ui-angular-emphasis-badge.d.ts.map +1 -0
  449. package/types/hermes-ui-angular-emphasis-common.d.ts +7 -0
  450. package/types/hermes-ui-angular-emphasis-common.d.ts.map +1 -0
  451. package/types/hermes-ui-angular-emphasis-label.d.ts +30 -0
  452. package/types/hermes-ui-angular-emphasis-label.d.ts.map +1 -0
  453. package/types/hermes-ui-angular-emphasis.d.ts +16 -0
  454. package/types/hermes-ui-angular-emphasis.d.ts.map +1 -0
  455. package/types/hermes-ui-angular-forms-checkbox.d.ts +73 -0
  456. package/types/hermes-ui-angular-forms-checkbox.d.ts.map +1 -0
  457. package/types/hermes-ui-angular-forms-combobox.d.ts +354 -0
  458. package/types/hermes-ui-angular-forms-combobox.d.ts.map +1 -0
  459. package/types/hermes-ui-angular-forms-common.d.ts +340 -0
  460. package/types/hermes-ui-angular-forms-common.d.ts.map +1 -0
  461. package/types/hermes-ui-angular-forms-datalist.d.ts +60 -0
  462. package/types/hermes-ui-angular-forms-datalist.d.ts.map +1 -0
  463. package/types/hermes-ui-angular-forms-datepicker.d.ts +987 -0
  464. package/types/hermes-ui-angular-forms-datepicker.d.ts.map +1 -0
  465. package/types/hermes-ui-angular-forms-file-input.d.ts +194 -0
  466. package/types/hermes-ui-angular-forms-file-input.d.ts.map +1 -0
  467. package/types/hermes-ui-angular-forms-input.d.ts +30 -0
  468. package/types/hermes-ui-angular-forms-input.d.ts.map +1 -0
  469. package/types/hermes-ui-angular-forms-native-select.d.ts +37 -0
  470. package/types/hermes-ui-angular-forms-native-select.d.ts.map +1 -0
  471. package/types/hermes-ui-angular-forms-number-input.d.ts +44 -0
  472. package/types/hermes-ui-angular-forms-number-input.d.ts.map +1 -0
  473. package/types/hermes-ui-angular-forms-password.d.ts +53 -0
  474. package/types/hermes-ui-angular-forms-password.d.ts.map +1 -0
  475. package/types/hermes-ui-angular-forms-radio.d.ts +50 -0
  476. package/types/hermes-ui-angular-forms-radio.d.ts.map +1 -0
  477. package/types/hermes-ui-angular-forms-range.d.ts +38 -0
  478. package/types/hermes-ui-angular-forms-range.d.ts.map +1 -0
  479. package/types/hermes-ui-angular-forms-select.d.ts +211 -0
  480. package/types/hermes-ui-angular-forms-select.d.ts.map +1 -0
  481. package/types/hermes-ui-angular-forms-textarea.d.ts +30 -0
  482. package/types/hermes-ui-angular-forms-textarea.d.ts.map +1 -0
  483. package/types/hermes-ui-angular-forms.d.ts +39 -0
  484. package/types/hermes-ui-angular-forms.d.ts.map +1 -0
  485. package/types/hermes-ui-angular-icon.d.ts +1504 -0
  486. package/types/hermes-ui-angular-icon.d.ts.map +1 -0
  487. package/types/hermes-ui-angular-layout-breadcrumbs.d.ts +46 -0
  488. package/types/hermes-ui-angular-layout-breadcrumbs.d.ts.map +1 -0
  489. package/types/hermes-ui-angular-layout-main-container.d.ts +29 -0
  490. package/types/hermes-ui-angular-layout-main-container.d.ts.map +1 -0
  491. package/types/hermes-ui-angular-layout-nav.d.ts +143 -0
  492. package/types/hermes-ui-angular-layout-nav.d.ts.map +1 -0
  493. package/types/hermes-ui-angular-layout-tabs.d.ts +159 -0
  494. package/types/hermes-ui-angular-layout-tabs.d.ts.map +1 -0
  495. package/types/hermes-ui-angular-layout-vertical-nav.d.ts +129 -0
  496. package/types/hermes-ui-angular-layout-vertical-nav.d.ts.map +1 -0
  497. package/types/hermes-ui-angular-layout.d.ts +20 -0
  498. package/types/hermes-ui-angular-layout.d.ts.map +1 -0
  499. package/types/hermes-ui-angular-modal.d.ts +161 -0
  500. package/types/hermes-ui-angular-modal.d.ts.map +1 -0
  501. package/types/hermes-ui-angular-popover-common.d.ts +317 -0
  502. package/types/hermes-ui-angular-popover-common.d.ts.map +1 -0
  503. package/types/hermes-ui-angular-popover-dropdown.d.ts +124 -0
  504. package/types/hermes-ui-angular-popover-dropdown.d.ts.map +1 -0
  505. package/types/hermes-ui-angular-popover-signpost.d.ts +158 -0
  506. package/types/hermes-ui-angular-popover-signpost.d.ts.map +1 -0
  507. package/types/hermes-ui-angular-popover-tooltip.d.ts +84 -0
  508. package/types/hermes-ui-angular-popover-tooltip.d.ts.map +1 -0
  509. package/types/hermes-ui-angular-popover.d.ts +17 -0
  510. package/types/hermes-ui-angular-popover.d.ts.map +1 -0
  511. package/types/hermes-ui-angular-progress-progress-bars.d.ts +58 -0
  512. package/types/hermes-ui-angular-progress-progress-bars.d.ts.map +1 -0
  513. package/types/hermes-ui-angular-progress-spinner.d.ts +45 -0
  514. package/types/hermes-ui-angular-progress-spinner.d.ts.map +1 -0
  515. package/types/hermes-ui-angular-stepper.d.ts +180 -0
  516. package/types/hermes-ui-angular-stepper.d.ts.map +1 -0
  517. package/types/hermes-ui-angular-timeline.d.ts +87 -0
  518. package/types/hermes-ui-angular-timeline.d.ts.map +1 -0
  519. package/types/hermes-ui-angular-toast.d.ts +131 -0
  520. package/types/hermes-ui-angular-toast.d.ts.map +1 -0
  521. package/types/hermes-ui-angular-utils-conditional.d.ts +133 -0
  522. package/types/hermes-ui-angular-utils-conditional.d.ts.map +1 -0
  523. package/types/hermes-ui-angular-utils-loading.d.ts +39 -0
  524. package/types/hermes-ui-angular-utils-loading.d.ts.map +1 -0
  525. package/types/hermes-ui-angular-utils.d.ts +914 -0
  526. package/types/hermes-ui-angular-utils.d.ts.map +1 -0
  527. package/types/hermes-ui-angular-wizard.d.ts +1509 -0
  528. package/types/hermes-ui-angular-wizard.d.ts.map +1 -0
  529. package/types/hermes-ui-angular.d.ts +44 -0
  530. package/types/hermes-ui-angular.d.ts.map +1 -0
  531. package/typography/_code.scss +36 -0
  532. package/typography/_font-metropolis.scss +45 -0
  533. package/typography/_lists.scss +81 -0
  534. package/typography/_typography.scss +322 -0
  535. package/utils/animations/_animations.clarity.scss +44 -0
  536. package/utils/animations/_mixins.animations.scss +33 -0
  537. package/wizard/_properties.wizard.scss +54 -0
  538. package/wizard/_variables.wizard.scss +59 -0
  539. package/wizard/_wizard.clarity.scss +692 -0
@@ -0,0 +1,2028 @@
1
+ import * as i2$1 from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { Injectable, ViewChild, Input, Component, EventEmitter, Output, ViewContainerRef, InjectionToken, Optional, SkipSelf, NgModule } from '@angular/core';
5
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
6
+ import { A11yModule } from '@hermes-ui/angular/addons/a11y';
7
+ import { PropertyViewModule } from '@hermes-ui/angular/addons/property-view';
8
+ import * as i1$1 from '@hermes-ui/angular/addons/workflow/strings';
9
+ import { WorkflowStrings } from '@hermes-ui/angular/addons/workflow/strings';
10
+ import * as i3 from '@hermes-ui/angular/data/stack-view';
11
+ import { HermesStackViewModule } from '@hermes-ui/angular/data/stack-view';
12
+ import * as i1$3 from '@hermes-ui/angular/emphasis/alert';
13
+ import { HermesAlertModule } from '@hermes-ui/angular/emphasis/alert';
14
+ import * as i2$2 from '@hermes-ui/angular/icon';
15
+ import { HermesIcon, ClarityIcons, angleIcon, barsIcon, exclamationCircleIcon, pencilIcon, refreshIcon, successStandardIcon } from '@hermes-ui/angular/icon';
16
+ import * as i1 from '@hermes-ui/angular/popover/signpost';
17
+ import { HermesSignpostModule } from '@hermes-ui/angular/popover/signpost';
18
+ import * as i1$2 from '@hermes-ui/angular/progress/spinner';
19
+ import { HermesSpinnerModule } from '@hermes-ui/angular/progress/spinner';
20
+ import * as i2 from '@hermes-ui/angular/popover/common';
21
+ import { HermesPopoverContent } from '@hermes-ui/angular/popover/common';
22
+ import { ReplaySubject, of, Subject, combineLatest, throwError, Subscription, Observable, BehaviorSubject } from 'rxjs';
23
+ import { tap, shareReplay, switchMap, catchError, bufferTime, map, take, startWith, pairwise } from 'rxjs/operators';
24
+ import 'reflect-metadata';
25
+
26
+ /*
27
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
28
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
29
+ * This software is released under MIT license.
30
+ * The full license information can be found in LICENSE in the root directory of this project.
31
+ */
32
+ class WorkflowConfigurationService {
33
+ constructor() {
34
+ this.debugLocalStorageKey = 'hermes-addons-var.debug';
35
+ this.localStorage = this.getLocalStorage(window);
36
+ this.debugValue = this.getData(this.debugLocalStorageKey, false);
37
+ }
38
+ get debug() {
39
+ return this.debugValue;
40
+ }
41
+ set debug(newValue) {
42
+ this.debugValue = newValue;
43
+ }
44
+ getData(key, defaultValue) {
45
+ if (this.localStorage) {
46
+ let data = this.localStorage.getItem(key);
47
+ if (data) {
48
+ data = JSON.parse(data);
49
+ return data;
50
+ }
51
+ }
52
+ return defaultValue;
53
+ }
54
+ getLocalStorage(window) {
55
+ try {
56
+ if (window.localStorage) {
57
+ return window.localStorage;
58
+ }
59
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
60
+ }
61
+ catch (_ignored) {
62
+ // swallow exception
63
+ }
64
+ return undefined;
65
+ }
66
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: WorkflowConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
67
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: WorkflowConfigurationService }); }
68
+ }
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: WorkflowConfigurationService, decorators: [{
70
+ type: Injectable
71
+ }], ctorParameters: () => [] });
72
+
73
+ /*
74
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
75
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
76
+ * This software is released under MIT license.
77
+ * The full license information can be found in LICENSE in the root directory of this project.
78
+ */
79
+ /**
80
+ * Custom {@link shareReplay} operator that allows the internal {@link ReplaySubject} to be reset.
81
+ * The {@link shareReplay} operator works the following way:
82
+ *
83
+ * Source Observable <-- ReplaySubject <-- Observer(s)
84
+ *
85
+ * The operator subscribes to the source observable and forwards its next/complete/error to a
86
+ * ReplaySubject. All observers subscribe to the ReplaySubject. This way there is only
87
+ * subscription to the source and all observers receive the emitted values.
88
+ * If refCount = true, when all observers unsubscribe from the ReplaySubject, the operator
89
+ * unsubscribes from the source observable.
90
+ *
91
+ * This operator is enhanced version of the {@link shareReplay} operator. It adds capability
92
+ * to "reset" the internal ReplaySubject. As a result of this any new subscribers will not
93
+ * get the cached values from the internal ReplaySubject, but will wait for the source to emit.
94
+ * There is no effect on the existing subscribers. Once the source emits, all observers will
95
+ * get the new values.
96
+ *
97
+ * <b>Usage:</b>
98
+ * @example
99
+ *
100
+ * const source$ = new Subject<number>();
101
+ * const reset$ = new Subject<void>();
102
+ *
103
+ * const value$ = source$.pipe(
104
+ * resettableShareReplay({
105
+ * bufferSize: 1,
106
+ * refCount: true,
107
+ * reset: reset$
108
+ * })
109
+ * );
110
+ *
111
+ * // First subscription will wait for the source to emit.
112
+ * const sub1 = value$.subscribe(value => console.log("sub1: " + value));
113
+ *
114
+ * // Source emits
115
+ * source$.next(1);
116
+ *
117
+ * // Console: sub1: 1
118
+ *
119
+ * // The new subscription will get the cached value
120
+ * const sub2 = value$.subscribe(value => console.log("sub2: " + value));
121
+ * // Console: sub2: 1
122
+ *
123
+ * // Clear the cache
124
+ * reset$.next();
125
+ *
126
+ * // The new subscription will NOT receive cached value
127
+ * const sub3 = value$.subscribe(value => console.log("sub3: " + value));
128
+ *
129
+ * // Source emits again. All the 3 subscriptions will receive the emitted value.
130
+ * source$.next(2);
131
+ *
132
+ * // Console:
133
+ * // sub1: 2
134
+ * // sub2: 2
135
+ * // sub3: 2
136
+ */
137
+ function resettableShareReplay(config) {
138
+ return (source) => source.lift(shareReplayOperator(config));
139
+ }
140
+ function shareReplayOperator({ bufferSize = Infinity, windowTime = Infinity, refCount: useRefCount, scheduler, reset: onReset, }) {
141
+ let subject;
142
+ let refCount = 0;
143
+ let subscription;
144
+ let resetSubscription;
145
+ let hasError = false;
146
+ return function shareReplayOperation(source) {
147
+ refCount++;
148
+ if (!subject || hasError) {
149
+ resetSubscription = onReset.subscribe(() => {
150
+ if (subject) {
151
+ // Remove existing observers, if any.
152
+ subject.unsubscribe();
153
+ }
154
+ subject = new ReplaySubject(bufferSize, windowTime, scheduler);
155
+ });
156
+ hasError = false;
157
+ subject = new ReplaySubject(bufferSize, windowTime, scheduler);
158
+ subscription = source.subscribe({
159
+ next(value) {
160
+ subject?.next(value);
161
+ },
162
+ error(err) {
163
+ hasError = true;
164
+ subject?.error(err);
165
+ },
166
+ complete() {
167
+ subscription = undefined;
168
+ subject?.complete();
169
+ },
170
+ });
171
+ }
172
+ let innerSub = subject.subscribe(this);
173
+ const resetSub = onReset.subscribe(() => {
174
+ // Subscribe to the new 'subject'. 'subject' is always defined at this point
175
+ innerSub = subject?.subscribe(this);
176
+ });
177
+ this.add(() => {
178
+ refCount--;
179
+ innerSub?.unsubscribe();
180
+ resetSub.unsubscribe();
181
+ if (subscription && useRefCount && refCount === 0) {
182
+ subscription.unsubscribe();
183
+ subscription = undefined;
184
+ subject = undefined;
185
+ resetSubscription?.unsubscribe();
186
+ resetSubscription = undefined;
187
+ }
188
+ });
189
+ };
190
+ }
191
+
192
+ /*
193
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
194
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
195
+ * This software is released under MIT license.
196
+ * The full license information can be found in LICENSE in the root directory of this project.
197
+ */
198
+ const stringify = (value, propertyName = '') => {
199
+ try {
200
+ return JSON.stringify(value);
201
+ }
202
+ catch (e) {
203
+ console.warn(`Cannot stringify property: ${propertyName}`, value, e);
204
+ }
205
+ return undefined;
206
+ };
207
+ const parse = (value, propertyName = '') => {
208
+ if (value) {
209
+ try {
210
+ return JSON.parse(value);
211
+ }
212
+ catch (e) {
213
+ console.warn(`Cannot parse property: ${propertyName}`, value, e);
214
+ }
215
+ }
216
+ return undefined;
217
+ };
218
+ const formatError = (error) => {
219
+ if (typeof error === 'object') {
220
+ // if error is from http call, this is mostly the case
221
+ if (error.data?.message) {
222
+ return error;
223
+ }
224
+ // if error is a backend response of vapi type
225
+ if (error.messages?.length) {
226
+ return handleVapiErrorMessages(error.messages);
227
+ }
228
+ if (error.info?.messages?.length) {
229
+ return handleVapiErrorMessages(error.info.messages);
230
+ }
231
+ // if error is thrown like throwError(new Error("error message"))
232
+ if (error.message) {
233
+ return {
234
+ data: {
235
+ message: error.message,
236
+ stackTrace: error.stack,
237
+ },
238
+ };
239
+ }
240
+ }
241
+ // if error is thrown like throwError("error message")
242
+ if (typeof error === 'string') {
243
+ return {
244
+ data: {
245
+ message: error,
246
+ },
247
+ };
248
+ }
249
+ // Stringify the object. That is the default formatting when all other options are exhausted.
250
+ return {
251
+ data: {
252
+ message: stringify(error),
253
+ },
254
+ };
255
+ };
256
+ const handleVapiErrorMessages = (messages) => {
257
+ return {
258
+ data: {
259
+ message: messages.map((message) => message?.localized || message.defaultMessage).join('\n'),
260
+ },
261
+ };
262
+ };
263
+
264
+ /*
265
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
266
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
267
+ * This software is released under MIT license.
268
+ * The full license information can be found in LICENSE in the root directory of this project.
269
+ */
270
+ /**
271
+ * Workflow variable used to define properties in the workflow model.
272
+ *
273
+ * <h2>Use Cases</h2>
274
+ * This class is designed for the following use cases:
275
+ * <ol>
276
+ * <li>Create variable, that wraps generic data type. Use cases:
277
+ * <ul>
278
+ * <li>Pass a value as dependency to other workflow variables. When a new value is
279
+ * set, the dependent variable will be reevaluated.
280
+ * <li>[Future] Define mapping between workflow and step model variables.
281
+ * <li>[Future] Output step model values in a reactive manner.
282
+ * </ul>
283
+ * @see {@link Var.of}
284
+ *
285
+ * <li>Create variable, that can depend on other {@link Var}s. Use cases:
286
+ * <ul>
287
+ * <li>Invoke async function to retrieve data.
288
+ * <li>Transform the result of another {@link Var}.
289
+ * <li>Extract a property of another {@link Var}.
290
+ * <li>[Future] Use the result of one {@link Var} as initial value of another.
291
+ * </ul>
292
+ * @see {@link Var.from}
293
+ * </ol>
294
+ *
295
+ * <h2>Using Var for Data Retrieval</h2>
296
+ *
297
+ * The main use case of this class is to move the data request outside of the step component.
298
+ * This gives the following benefits:
299
+ * - Component will not deal with asynchronous data; it will be pre-computed and injected
300
+ * - Increased re-usability of steps
301
+ * - Loading indicator comes for free.
302
+ * - Default error handling
303
+ * - Caching of calculated values and re-calculating when necessary
304
+ *
305
+ * <h2>Step Model Mapping</h2>
306
+ *
307
+ * <b>Step model property</b> can reference workflow {@link Var} property using
308
+ * <code>@InputMapping</code> and <code>@OutputMapping</code> decorators.
309
+ * Mapped step model property should be of type "T".
310
+ *
311
+ * <h2>Examples:</h2>
312
+ *
313
+ * @example Create new variable without initial value
314
+ * const v1: Var<string> = Var.of();
315
+ *
316
+ *
317
+ * @example Create new variable with initial value
318
+ * const v2: Var<string> = Var.of("hello");
319
+ *
320
+ *
321
+ * @example Data Retrieval
322
+ * // "portGroupInfo" depends on "hostId"
323
+ * this.model.portGroupInfo = Var.from(this.model.hostId).by(
324
+ * (hostId: string) => {
325
+ * // Note that "hostId" is "this.model.hostId.value", pre-calculated if it is ComputedVar.
326
+ * return <Observable<HostStandardSwitchData>>this.dataService.getData$(hostId, PG_INFO_PROP);
327
+ * }
328
+ * );
329
+ *
330
+ *
331
+ * @example Created computed property without any dependencies
332
+ * const c1: Var<number> = Var.from().by(() => of(42));
333
+ *
334
+ *
335
+ * @example Create computed property with dependencies
336
+ * const c2: Var<string> = Var.from(c1, v2).by(
337
+ * (c1Val, c2Val) => of(`Result: ${c1Val} ${c2Val}`));
338
+ *
339
+ *
340
+ * @example Transform another Var value
341
+ * // Invoke transformation function on "c2" result.
342
+ * const c3: Var<number> = Var.from(c2).by((c2Val: string) => of(c2Val.length + 3));
343
+ *
344
+ *
345
+ * @example Extract single property from another var
346
+ * const v3 = Var.of({ name: "dummy", value: true });
347
+ *
348
+ * const p1: Var<string> = Var.from(v3).pluck("name");
349
+ * const p2: Var<boolean> = Var.from(v3).pluck("value");
350
+ *
351
+ * // There is a compile-time check for the specified property name.
352
+ * Var.from(v3).pluck("non_existing_property_name"); // compile time error
353
+ *
354
+ *
355
+ * @example Mapping step model property to workflow model Var
356
+ * class MyWizardModel {
357
+ * readonly vlanIds: Var<number[]> = Var.of();
358
+ * }
359
+ *
360
+ * // First step outputs selected vLANs
361
+ * class Step1Model {
362
+ * @OutputMapping({propertyName="vlanIds"})
363
+ * vlanIds: number[];
364
+ * }
365
+ *
366
+ * // Second step uses the selected vLANs form the first step
367
+ * class Step2Model {
368
+ * @InputMapping({propertyName="vlanIds"})
369
+ * vlanIds: number[];
370
+ * }
371
+ */
372
+ class Var {
373
+ #value;
374
+ constructor() {
375
+ // no action
376
+ }
377
+ /**
378
+ * Value of the variable. It can be undefined
379
+ */
380
+ get value() {
381
+ return this.#value;
382
+ }
383
+ set value(newValue) {
384
+ this.#value = newValue;
385
+ this.onSetValue(newValue);
386
+ }
387
+ /**
388
+ * Create a variable, that wraps generic data type.
389
+ * @param initialValue Initial value of the {@link value} property.
390
+ */
391
+ static of(initialValue) {
392
+ const result = new SimpleVar();
393
+ if (initialValue !== undefined) {
394
+ result.value = initialValue;
395
+ }
396
+ return result;
397
+ }
398
+ static from(...deps) {
399
+ function fromApi(strategy) {
400
+ return {
401
+ by(fn) {
402
+ return new ComputedVar({
403
+ dependsOn: deps,
404
+ computeFn: fn,
405
+ strategy: strategy,
406
+ });
407
+ },
408
+ pluck(propName) {
409
+ return new ComputedVar({
410
+ dependsOn: deps,
411
+ computeFn: (depValue) => of(depValue[propName]),
412
+ strategy: strategy,
413
+ });
414
+ },
415
+ };
416
+ }
417
+ return {
418
+ ...fromApi(ComputeStrategy.lazy),
419
+ withEagerEval: () => fromApi(ComputeStrategy.eager),
420
+ withLazyEval: () => fromApi(ComputeStrategy.lazy),
421
+ };
422
+ }
423
+ }
424
+ class SimpleVar extends Var {
425
+ static { this.count = 0; }
426
+ #value$ = new ReplaySubject(1);
427
+ #isSet = false;
428
+ constructor() {
429
+ super();
430
+ this.name = 'simpleVar' + SimpleVar.count++;
431
+ }
432
+ /**
433
+ * Observable that emits every time when {@link value} property is set.
434
+ */
435
+ get value$() {
436
+ return this.#value$;
437
+ }
438
+ /**
439
+ * Whether the value is set.
440
+ * If initial value is undefined (e.g. Var.of(undefined)), this will return false.
441
+ * Undefined can be set only through the {@link value} setter.
442
+ */
443
+ get isSet() {
444
+ return this.#isSet;
445
+ }
446
+ /**
447
+ * When {@link value} is updated without calling setter i.e., nested object of value is updated
448
+ * {@link value$} does not emit updated value, call this method to emit {@link value$} with updated {@link value}
449
+ */
450
+ updateValueIfDirty() {
451
+ if (this.lastValueStr !== stringify(this.value)) {
452
+ this.onSetValue(this.value);
453
+ }
454
+ }
455
+ onSetValue(newValue) {
456
+ this.#isSet = true;
457
+ this.lastValueStr = stringify(newValue);
458
+ this.#value$.next(newValue);
459
+ }
460
+ }
461
+ /**
462
+ * Types of strategies that are available for a {@link ComputedVar}.
463
+ * Implementation of the strategies is in the WorkflowModelManager class.
464
+ */
465
+ var ComputeStrategy;
466
+ (function (ComputeStrategy) {
467
+ /**
468
+ * Invoke the {@link ComputedVarSchema.computeFn} as soon as its dependencies are populated.
469
+ */
470
+ ComputeStrategy["eager"] = "eager";
471
+ /**
472
+ * Invoke the {@link ComputedVarSchema.computeFn} on navigation to a step that has an
473
+ * <code>@InputMapping</code> to the workflow Var.
474
+ */
475
+ ComputeStrategy["lazy"] = "lazy";
476
+ })(ComputeStrategy || (ComputeStrategy = {}));
477
+ /**
478
+ * Workflow variable that is calculated using user-defined function.
479
+ * Optionally the property can depend on other properties of type {@link SimpleVar}
480
+ * or {@link ComputedVar}. Dependency values (i.e. {@link Var#value})
481
+ * are passed to "computeFn" as input parameters. "computeFn" must use only these input
482
+ * parameters to do its business and must not access directly other model variables
483
+ * (using closure).
484
+ *
485
+ * Computed property is executed once on {@link ComputedVar.value$} subscription and its
486
+ * result is cached. It will be re-calculated if its dependencies are changed.
487
+ */
488
+ class ComputedVar extends Var {
489
+ static { this.count = 0; }
490
+ #value$;
491
+ constructor(config) {
492
+ super();
493
+ this.config = config;
494
+ this.isLastComputationSuccessful = false;
495
+ this.name = 'computedVar' + ComputedVar.count++;
496
+ this.validateArguments(config);
497
+ this.setDefaults(config);
498
+ this.initValue();
499
+ }
500
+ /**
501
+ * Subscription to this observable triggers the calculation of compute function.
502
+ */
503
+ get value$() {
504
+ return this.#value$;
505
+ }
506
+ /**
507
+ * Return the {@link ComputeStrategy|strategy} that will be used to evaluate the
508
+ * compute function.
509
+ */
510
+ get strategy() {
511
+ return this.config.strategy;
512
+ }
513
+ /**
514
+ * Return boolean whether the dependencies are satisfied for the compute function
515
+ */
516
+ get areDependenciesSatisfied() {
517
+ const computedVarDependencySatisfied = this.config.dependsOn
518
+ .filter((flowVar) => {
519
+ return flowVar instanceof ComputedVar;
520
+ })
521
+ .every(curr => curr.areDependenciesSatisfied);
522
+ const simpleVarDependencySatisfied = this.config.dependsOn
523
+ .filter((flowVar) => {
524
+ return flowVar instanceof SimpleVar;
525
+ })
526
+ .every(curr => curr.isSet);
527
+ return computedVarDependencySatisfied && simpleVarDependencySatisfied;
528
+ }
529
+ /**
530
+ * Returns the list of property names that have unsatisfied dependencies
531
+ */
532
+ get unsatisfiedDependencies() {
533
+ const unsatisfiedDependencies = [];
534
+ this.config.dependsOn.forEach(flowVar => {
535
+ if (flowVar instanceof SimpleVar && !flowVar.isSet) {
536
+ unsatisfiedDependencies.push(flowVar.name);
537
+ }
538
+ else if (flowVar instanceof ComputedVar && !flowVar.areDependenciesSatisfied) {
539
+ unsatisfiedDependencies.push(flowVar.name);
540
+ }
541
+ else {
542
+ // no action
543
+ }
544
+ });
545
+ return unsatisfiedDependencies;
546
+ }
547
+ onSetValue() { }
548
+ validateArguments(arg) {
549
+ arg.dependsOn.forEach((dependency, index) => {
550
+ if (!dependency) {
551
+ throw new Error(`${name}: Dependency is null or undefined at dependsOn[${index}]`);
552
+ }
553
+ });
554
+ }
555
+ setDefaults(config) {
556
+ config.strategy = config.strategy || ComputeStrategy.lazy;
557
+ }
558
+ /**
559
+ * Initialize {@link _value} field.
560
+ */
561
+ initValue() {
562
+ const depValues$ = this.extractDependencyValues$();
563
+ this.#value$ = depValues$.length
564
+ ? this.initValueFromDependencies(depValues$)
565
+ : this.config.computeFn().pipe(tap((fnResult) => {
566
+ this.value = fnResult;
567
+ }),
568
+ // Execute "computeFn" only on first subscription. Subsequent subscriptions
569
+ // will get the cached value.
570
+ shareReplay(1));
571
+ }
572
+ initValueFromDependencies(depValues$) {
573
+ const reset$ = new Subject();
574
+ return combineLatest(depValues$).pipe(switchMap((depValues) => {
575
+ let depValuesChanged = true;
576
+ const depValuesStr = stringify(depValues);
577
+ if (depValuesStr !== undefined) {
578
+ if (depValues?.length && this.lastDependencyValues === depValuesStr) {
579
+ depValuesChanged = false;
580
+ }
581
+ }
582
+ else {
583
+ console.warn('Can not detect if dependencies have changed for Var ' + this.name + '. Assume they have changed!');
584
+ }
585
+ if (!this.isLastComputationSuccessful || depValuesChanged) {
586
+ // Do not reset if there is no computed value yet.
587
+ if (this.lastDependencyValues) {
588
+ // Reset the ReplaySubject in 'resettableShareReplay'. Subscribers
589
+ // will no longer get the cached value. They will be subscribed to the
590
+ // new ReplaySubject, that will emit once the 'computeFn' finishes.
591
+ reset$.next();
592
+ }
593
+ return this.config.computeFn(...depValues).pipe(tap((fnResult) => {
594
+ this.lastDependencyValues = depValuesStr;
595
+ this.isLastComputationSuccessful = true;
596
+ this.value = fnResult;
597
+ }), catchError((e) => {
598
+ this.isLastComputationSuccessful = false;
599
+ return throwError(() => e);
600
+ }));
601
+ }
602
+ return of(this.value);
603
+ }), resettableShareReplay({
604
+ bufferSize: 1,
605
+ // When subscriptions count reaches zero, unsubscribe from source.
606
+ // The next subscription will subscribe again and will NOT reply the last value.
607
+ refCount: true,
608
+ reset: reset$,
609
+ }));
610
+ }
611
+ extractDependencyValues$() {
612
+ return this.config.dependsOn.map((flowVar) => {
613
+ if (flowVar instanceof ComputedVar) {
614
+ return flowVar.value$;
615
+ }
616
+ else if (flowVar instanceof SimpleVar) {
617
+ return flowVar.value$;
618
+ }
619
+ else {
620
+ // Developer error.
621
+ throw new Error('Unsupported Var descendant');
622
+ }
623
+ });
624
+ }
625
+ }
626
+
627
+ /*
628
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
629
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
630
+ * This software is released under MIT license.
631
+ * The full license information can be found in LICENSE in the root directory of this project.
632
+ */
633
+ /**
634
+ * Render given workflow model in a Clarity signpost.
635
+ * Values, changed in the current step are marked in different color.
636
+ * On next step, changed properties are reset.
637
+ */
638
+ class WorkflowModelMonitorComponent {
639
+ constructor() {
640
+ this.isOpen = false;
641
+ this.debugModel = [];
642
+ this.subscriptions = new Subscription();
643
+ }
644
+ set popoverContent(popoverContent) {
645
+ if (popoverContent) {
646
+ popoverContent.outsideClickClose = false;
647
+ }
648
+ }
649
+ ngOnInit() {
650
+ this.bindModelChangeListeners();
651
+ this.bindStepChangeListeners();
652
+ this.initDebugModel();
653
+ }
654
+ ngOnDestroy() {
655
+ this.subscriptions.unsubscribe();
656
+ }
657
+ bindModelChangeListeners() {
658
+ this.subscriptions.add(
659
+ // There could be a burst of onModelChange$ events on the same property
660
+ // which can cause ExpressionChangedAfterItHasBeenCheckedError
661
+ // use buffer time of 100ms
662
+ this.modelMgr.onModelChange$
663
+ .pipe(bufferTime(100), map(changes => [].concat(...changes)) // flatten the array
664
+ )
665
+ .subscribe(changes => this.updateDebugModel(changes)));
666
+ }
667
+ bindStepChangeListeners() {
668
+ this.subscriptions.add(this.modelMgr.onStepChange$.subscribe((value) => {
669
+ this.resetDebugModel();
670
+ this.updateDebugModel(value.changes);
671
+ }));
672
+ }
673
+ updateDebugModel(changes) {
674
+ if (!this.modelMgr.model) {
675
+ return;
676
+ }
677
+ for (const change of changes) {
678
+ const propertyModelValue = this.modelMgr.model[change.propertyName];
679
+ const nameValue = this.getPropertyNameValue(change.propertyName, propertyModelValue);
680
+ const existing = this.debugModel.find(value => value.name === change.propertyName);
681
+ if (!nameValue) {
682
+ // The property is a function. Ignore it.
683
+ continue;
684
+ }
685
+ if (existing) {
686
+ existing.value = nameValue.value;
687
+ existing.changed = true;
688
+ }
689
+ else {
690
+ nameValue.changed = true;
691
+ this.debugModel.push(nameValue);
692
+ // Sort model properties alphabetically.
693
+ this.debugModel.sort((a, b) => a.name.localeCompare(b.name));
694
+ }
695
+ }
696
+ }
697
+ initDebugModel() {
698
+ this.debugModel = [];
699
+ if (!this.modelMgr.model) {
700
+ return;
701
+ }
702
+ for (const [name, value] of Object.entries(this.modelMgr.model)) {
703
+ const nameValue = this.getPropertyNameValue(name, value);
704
+ if (nameValue) {
705
+ this.debugModel.push(nameValue);
706
+ }
707
+ }
708
+ // Sort model properties alphabetically.
709
+ this.debugModel.sort((a, b) => a.name.localeCompare(b.name));
710
+ }
711
+ resetDebugModel() {
712
+ for (const entry of this.debugModel) {
713
+ entry.changed = false;
714
+ }
715
+ }
716
+ getPropertyNameValue(name, value) {
717
+ let propValue = value;
718
+ let strValue = '';
719
+ let isComputedVar = false;
720
+ let isSimpleVar = false;
721
+ if (value instanceof ComputedVar) {
722
+ const varValue = value;
723
+ propValue = varValue.value;
724
+ isComputedVar = true;
725
+ }
726
+ else if (value instanceof SimpleVar) {
727
+ const varValue = value;
728
+ propValue = varValue.value;
729
+ isSimpleVar = true;
730
+ }
731
+ else {
732
+ throw new Error('Unsupported step type: ' + value);
733
+ }
734
+ if (typeof propValue === 'object') {
735
+ try {
736
+ strValue = JSON.stringify(propValue);
737
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
738
+ }
739
+ catch (_ignored) {
740
+ console.warn(`Cannot stringify workflow property ${name}`);
741
+ strValue = '{object}';
742
+ }
743
+ }
744
+ else if (typeof propValue === 'function') {
745
+ return null;
746
+ }
747
+ else {
748
+ strValue = propValue + '';
749
+ }
750
+ return {
751
+ name: name,
752
+ value: strValue,
753
+ computedVar: isComputedVar,
754
+ simpleVar: isSimpleVar,
755
+ changed: false,
756
+ };
757
+ }
758
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: WorkflowModelMonitorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
759
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.22", type: WorkflowModelMonitorComponent, isStandalone: false, selector: "appfx-model-popup", inputs: { modelMgr: "modelMgr" }, viewQueries: [{ propertyName: "popoverContent", first: true, predicate: HermesPopoverContent, descendants: true }], ngImport: i0, template: "<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n\r\n<hermes-signpost>\r\n <ng-template [(hermesIfOpen)]=\"isOpen\">\r\n <hermes-signpost-content #signpostContent hermesPosition=\"left-bottom\">\r\n <h4 class=\"title\">Workflow Model</h4>\r\n\r\n <div *ngFor=\"let prop of debugModel\" class=\"hermes-row hermes-flex-nowrap\">\r\n <div class=\"hermes-col-7\">\r\n <h6\r\n class=\"prop-name text-truncate\"\r\n title=\"{{ prop.name }}\"\r\n [class.simple-var]=\"prop.simpleVar\"\r\n [class.computed-var]=\"prop.computedVar\"\r\n >\r\n {{ prop.name }}\r\n </h6>\r\n </div>\r\n <div class=\"hermes-col-5\">\r\n <h6 class=\"prop-value text-truncate\" title=\"{{ prop.value }}\" [class.prop-changed]=\"prop.changed\">\r\n {{ prop.value }}\r\n </h6>\r\n </div>\r\n </div>\r\n </hermes-signpost-content>\r\n </ng-template>\r\n</hermes-signpost>\r\n", styles: [".title{margin-bottom:.36rem}.prop-name{margin-top:.12rem}.prop-value{white-space:nowrap;margin-top:.12rem}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.simple-var{color:#2283bc}.computed-var{color:#9c46bf}.prop-changed{color:#3fa740}:host ::ng-deep .signpost-content-body{max-height:650px}:host ::ng-deep .signpost-trigger{height:1.2rem;line-height:normal}\n"], dependencies: [{ kind: "component", type: i1.HermesSignpost, selector: "hermes-signpost", inputs: ["hermesSignpostTriggerAriaLabel", "hermesSignpostHideTrigger"] }, { kind: "component", type: i1.HermesSignpostContent, selector: "hermes-signpost-content", inputs: ["hermesSignpostCloseAriaLabel", "hermesPosition"] }, { kind: "directive", type: i2.HermesIfOpen, selector: "[hermesIfOpen]", inputs: ["hermesIfOpen"], outputs: ["hermesIfOpenChange"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); }
760
+ }
761
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: WorkflowModelMonitorComponent, decorators: [{
762
+ type: Component,
763
+ args: [{ selector: 'appfx-model-popup', standalone: false, template: "<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n\r\n<hermes-signpost>\r\n <ng-template [(hermesIfOpen)]=\"isOpen\">\r\n <hermes-signpost-content #signpostContent hermesPosition=\"left-bottom\">\r\n <h4 class=\"title\">Workflow Model</h4>\r\n\r\n <div *ngFor=\"let prop of debugModel\" class=\"hermes-row hermes-flex-nowrap\">\r\n <div class=\"hermes-col-7\">\r\n <h6\r\n class=\"prop-name text-truncate\"\r\n title=\"{{ prop.name }}\"\r\n [class.simple-var]=\"prop.simpleVar\"\r\n [class.computed-var]=\"prop.computedVar\"\r\n >\r\n {{ prop.name }}\r\n </h6>\r\n </div>\r\n <div class=\"hermes-col-5\">\r\n <h6 class=\"prop-value text-truncate\" title=\"{{ prop.value }}\" [class.prop-changed]=\"prop.changed\">\r\n {{ prop.value }}\r\n </h6>\r\n </div>\r\n </div>\r\n </hermes-signpost-content>\r\n </ng-template>\r\n</hermes-signpost>\r\n", styles: [".title{margin-bottom:.36rem}.prop-name{margin-top:.12rem}.prop-value{white-space:nowrap;margin-top:.12rem}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.simple-var{color:#2283bc}.computed-var{color:#9c46bf}.prop-changed{color:#3fa740}:host ::ng-deep .signpost-content-body{max-height:650px}:host ::ng-deep .signpost-trigger{height:1.2rem;line-height:normal}\n"] }]
764
+ }], propDecorators: { modelMgr: [{
765
+ type: Input
766
+ }], popoverContent: [{
767
+ type: ViewChild,
768
+ args: [HermesPopoverContent]
769
+ }] } });
770
+
771
+ /*
772
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
773
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
774
+ * This software is released under MIT license.
775
+ * The full license information can be found in LICENSE in the root directory of this project.
776
+ */
777
+ class ErrorComponent {
778
+ constructor(workflowStrings) {
779
+ this.workflowStrings = workflowStrings;
780
+ this.onRetry = new EventEmitter();
781
+ }
782
+ retry() {
783
+ this.onRetry.emit();
784
+ }
785
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ErrorComponent, deps: [{ token: i1$1.WorkflowStrings }], target: i0.ɵɵFactoryTarget.Component }); }
786
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.22", type: ErrorComponent, isStandalone: false, selector: "appfx-error", inputs: { error: "error" }, outputs: { onRetry: "onRetry" }, ngImport: i0, template: "<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<div class=\"hermes-row\">\r\n <div class=\"hermes-col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <hermes-icon shape=\"exclamation-circle\" solid status=\"danger\" size=\"36\"></hermes-icon>\r\n <span>{{ workflowStrings.error.title }}</span>\r\n </div>\r\n <div class=\"card-block\">\r\n <div>{{ workflowStrings.error.description }}</div>\r\n <hermes-stack-view class=\"hermes-component mt-1\">\r\n <hermes-stack-block [hermesStackViewLevel]=\"1\">\r\n <hermes-stack-label>{{ workflowStrings.error.details }}</hermes-stack-label>\r\n <hermes-stack-block [hermesStackViewLevel]=\"2\" class=\"error-details-block\">\r\n <hermes-stack-content>\r\n <span>{{ error?.data?.message }}</span>\r\n <div *ngIf=\"error?.data?.stackTrace\" class=\"stack-trace mt-1\">\r\n {{ error?.data?.stackTrace }}\r\n </div>\r\n </hermes-stack-content>\r\n </hermes-stack-block>\r\n </hermes-stack-block>\r\n </hermes-stack-view>\r\n </div>\r\n <div class=\"card-footer text-right\">\r\n <button class=\"btn btn-primary\" (click)=\"retry()\">\r\n <hermes-icon shape=\"refresh\"></hermes-icon>{{ workflowStrings.error.retry }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["hermes-stack-view ::ng-deep .stack-view{height:unset}.error-details-block{font-family:monospace}.error-details-block ::ng-deep div.stack-view-key{display:none}.error-details-block ::ng-deep div.stack-block-label{padding-left:0;width:100%}.stack-trace{white-space:pre;overflow-x:auto}.btn-primary hermes-icon{margin-right:5px}\n"], dependencies: [{ kind: "component", type: i2$2.HermesIcon, selector: "hermes-icon, hermes-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }, { kind: "component", type: i3.HermesStackView, selector: "hermes-stack-view" }, { kind: "component", type: i3.HermesStackBlock, selector: "hermes-stack-block", inputs: ["hermesSbExpanded", "hermesSbExpandable", "hermesStackViewLevel", "hermesSbNotifyChange"], outputs: ["hermesSbExpandedChange"] }, { kind: "component", type: i3.HermesStackViewLabel, selector: "hermes-stack-label", inputs: ["id"] }, { kind: "directive", type: i3.HermesStackViewCustomTags, selector: "hermes-stack-content" }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
787
+ }
788
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ErrorComponent, decorators: [{
789
+ type: Component,
790
+ args: [{ selector: 'appfx-error', standalone: false, template: "<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<div class=\"hermes-row\">\r\n <div class=\"hermes-col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <hermes-icon shape=\"exclamation-circle\" solid status=\"danger\" size=\"36\"></hermes-icon>\r\n <span>{{ workflowStrings.error.title }}</span>\r\n </div>\r\n <div class=\"card-block\">\r\n <div>{{ workflowStrings.error.description }}</div>\r\n <hermes-stack-view class=\"hermes-component mt-1\">\r\n <hermes-stack-block [hermesStackViewLevel]=\"1\">\r\n <hermes-stack-label>{{ workflowStrings.error.details }}</hermes-stack-label>\r\n <hermes-stack-block [hermesStackViewLevel]=\"2\" class=\"error-details-block\">\r\n <hermes-stack-content>\r\n <span>{{ error?.data?.message }}</span>\r\n <div *ngIf=\"error?.data?.stackTrace\" class=\"stack-trace mt-1\">\r\n {{ error?.data?.stackTrace }}\r\n </div>\r\n </hermes-stack-content>\r\n </hermes-stack-block>\r\n </hermes-stack-block>\r\n </hermes-stack-view>\r\n </div>\r\n <div class=\"card-footer text-right\">\r\n <button class=\"btn btn-primary\" (click)=\"retry()\">\r\n <hermes-icon shape=\"refresh\"></hermes-icon>{{ workflowStrings.error.retry }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["hermes-stack-view ::ng-deep .stack-view{height:unset}.error-details-block{font-family:monospace}.error-details-block ::ng-deep div.stack-view-key{display:none}.error-details-block ::ng-deep div.stack-block-label{padding-left:0;width:100%}.stack-trace{white-space:pre;overflow-x:auto}.btn-primary hermes-icon{margin-right:5px}\n"] }]
791
+ }], ctorParameters: () => [{ type: i1$1.WorkflowStrings }], propDecorators: { error: [{
792
+ type: Input
793
+ }], onRetry: [{
794
+ type: Output
795
+ }] } });
796
+
797
+ /*
798
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
799
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
800
+ * This software is released under MIT license.
801
+ * The full license information can be found in LICENSE in the root directory of this project.
802
+ */
803
+ class SpinnerComponent {
804
+ constructor() {
805
+ /**
806
+ * Politeness when announcing, This could be 'polite', 'assertive' or 'off'
807
+ * @default 'assertive'
808
+ */
809
+ this.politeness = 'assertive';
810
+ /**
811
+ * Modal content has its own container (the modal), so that overlay spinner is already within its scope.
812
+ * Specify "false" for non-modal cases to contain the overlay spinner within desired scope and not whole page.
813
+ * @default 'true'
814
+ */
815
+ this.isModal = true;
816
+ /**
817
+ * Emits when the action button is clicked.
818
+ */
819
+ this.actionClick = new EventEmitter();
820
+ }
821
+ invokeAction() {
822
+ this.actionClick.next();
823
+ }
824
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: SpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
825
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.22", type: SpinnerComponent, isStandalone: false, selector: "appfx-spinner", inputs: { message: "message", politeness: "politeness", isModal: "isModal", progressDetails: "progressDetails", showActionButton: "showActionButton", actionButtonLabel: "actionButtonLabel" }, outputs: { actionClick: "actionClick" }, ngImport: i0, template: "<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<section class=\"overlay-spinner\" *ngIf=\"!isModal; else spinner\">\r\n <ng-template [ngTemplateOutlet]=\"spinner\"></ng-template>\r\n</section>\r\n\r\n<ng-template #spinner>\r\n <hermes-spinner>\r\n {{ message }}\r\n </hermes-spinner>\r\n <span [attr.aria-live]=\"politeness\" class=\"hermes-sr-only\">\r\n {{ message }}\r\n </span>\r\n\r\n <span *ngIf=\"progressDetails\" class=\"progress-item\" aria-live=\"polite\">\r\n {{ progressDetails }}\r\n </span>\r\n\r\n <button *ngIf=\"showActionButton\" class=\"btn btn-link btn-sm\" (click)=\"invokeAction()\">\r\n {{ actionButtonLabel }}\r\n </button>\r\n</ng-template>\r\n", styles: [":host{position:absolute;top:50%;left:0;z-index:999;width:100%;display:flex;flex-direction:column;align-items:center}:host .progress-item{padding-top:.5rem}:host .overlay-spinner{position:absolute;display:flex;align-items:center;flex-direction:column;justify-content:center;width:100%;min-height:inherit;inset:0;z-index:1200}\n"], dependencies: [{ kind: "component", type: i1$2.HermesSpinner, selector: "hermes-spinner", inputs: ["hermesInline", "hermesInverse", "hermesSmall", "hermesMedium"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
826
+ }
827
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: SpinnerComponent, decorators: [{
828
+ type: Component,
829
+ args: [{ selector: 'appfx-spinner', standalone: false, template: "<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<section class=\"overlay-spinner\" *ngIf=\"!isModal; else spinner\">\r\n <ng-template [ngTemplateOutlet]=\"spinner\"></ng-template>\r\n</section>\r\n\r\n<ng-template #spinner>\r\n <hermes-spinner>\r\n {{ message }}\r\n </hermes-spinner>\r\n <span [attr.aria-live]=\"politeness\" class=\"hermes-sr-only\">\r\n {{ message }}\r\n </span>\r\n\r\n <span *ngIf=\"progressDetails\" class=\"progress-item\" aria-live=\"polite\">\r\n {{ progressDetails }}\r\n </span>\r\n\r\n <button *ngIf=\"showActionButton\" class=\"btn btn-link btn-sm\" (click)=\"invokeAction()\">\r\n {{ actionButtonLabel }}\r\n </button>\r\n</ng-template>\r\n", styles: [":host{position:absolute;top:50%;left:0;z-index:999;width:100%;display:flex;flex-direction:column;align-items:center}:host .progress-item{padding-top:.5rem}:host .overlay-spinner{position:absolute;display:flex;align-items:center;flex-direction:column;justify-content:center;width:100%;min-height:inherit;inset:0;z-index:1200}\n"] }]
830
+ }], propDecorators: { message: [{
831
+ type: Input
832
+ }], politeness: [{
833
+ type: Input
834
+ }], isModal: [{
835
+ type: Input
836
+ }], progressDetails: [{
837
+ type: Input
838
+ }], showActionButton: [{
839
+ type: Input
840
+ }], actionButtonLabel: [{
841
+ type: Input
842
+ }], actionClick: [{
843
+ type: Output
844
+ }] } });
845
+
846
+ /*
847
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
848
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
849
+ * This software is released under MIT license.
850
+ * The full license information can be found in LICENSE in the root directory of this project.
851
+ */
852
+ class ValidationBannerInternalComponent {
853
+ constructor() {
854
+ this.closable = true;
855
+ this.closed = false;
856
+ this.#items = [];
857
+ }
858
+ #items;
859
+ get items() {
860
+ return this.#items;
861
+ }
862
+ set items(value) {
863
+ this.#items = value;
864
+ // every time we get new items - were remove closed state and become visible again
865
+ this.closed = false;
866
+ }
867
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ValidationBannerInternalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
868
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.22", type: ValidationBannerInternalComponent, isStandalone: false, selector: "appfx-validation-banner-internal", inputs: { type: "type", closable: "closable", closed: "closed", items: "items" }, ngImport: i0, template: ` <hermes-alert
869
+ role="alert"
870
+ aria-live="polite"
871
+ [hermesAlertType]="type"
872
+ *ngIf="items?.length"
873
+ [hermesAlertClosable]="closable"
874
+ [(hermesAlertClosed)]="closed"
875
+ >
876
+ <hermes-alert-item *ngFor="let item of items">
877
+ <span class="alert-text" [textContent]="item"></span>
878
+ </hermes-alert-item>
879
+ </hermes-alert>`, isInline: true, dependencies: [{ kind: "component", type: i1$3.HermesAlert, selector: "hermes-alert", inputs: ["hermesAlertSizeSmall", "hermesAlertClosable", "hermesAlertAppLevel", "hermesCloseButtonAriaLabel", "hermesAlertLightweight", "hermesAlertType", "hermesAlertIcon", "hermesAlertClosed"], outputs: ["hermesAlertClosedChange"] }, { kind: "component", type: i1$3.HermesAlertItem, selector: "hermes-alert-item" }, { kind: "directive", type: i1$3.HermesAlertText, selector: ".alert-text" }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
880
+ }
881
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ValidationBannerInternalComponent, decorators: [{
882
+ type: Component,
883
+ args: [{
884
+ selector: 'appfx-validation-banner-internal',
885
+ standalone: false,
886
+ template: ` <hermes-alert
887
+ role="alert"
888
+ aria-live="polite"
889
+ [hermesAlertType]="type"
890
+ *ngIf="items?.length"
891
+ [hermesAlertClosable]="closable"
892
+ [(hermesAlertClosed)]="closed"
893
+ >
894
+ <hermes-alert-item *ngFor="let item of items">
895
+ <span class="alert-text" [textContent]="item"></span>
896
+ </hermes-alert-item>
897
+ </hermes-alert>`,
898
+ }]
899
+ }], propDecorators: { type: [{
900
+ type: Input
901
+ }], closable: [{
902
+ type: Input
903
+ }], closed: [{
904
+ type: Input
905
+ }], items: [{
906
+ type: Input
907
+ }] } });
908
+ class ValidationBannerComponent {
909
+ constructor() {
910
+ this.closable = true;
911
+ }
912
+ get closed() {
913
+ return !this.state || this.state.isEmpty();
914
+ }
915
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ValidationBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
916
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.22", type: ValidationBannerComponent, isStandalone: false, selector: "appfx-validation-banner", inputs: { state: "state", closable: "closable" }, ngImport: i0, template: `
917
+ <appfx-validation-banner-internal
918
+ *ngIf="state && state.errors?.length"
919
+ [items]="state.errors"
920
+ [type]="'danger'"
921
+ [closable]="closable"
922
+ [closed]="closed"
923
+ ></appfx-validation-banner-internal>
924
+ <appfx-validation-banner-internal
925
+ *ngIf="state && state.warnings?.length"
926
+ [items]="state.warnings"
927
+ [type]="'warning'"
928
+ [closable]="closable"
929
+ [closed]="closed"
930
+ ></appfx-validation-banner-internal>
931
+ <appfx-validation-banner-internal
932
+ *ngIf="state && state.infos?.length"
933
+ [items]="state.infos"
934
+ [type]="'info'"
935
+ [closable]="closable"
936
+ [closed]="closed"
937
+ ></appfx-validation-banner-internal>
938
+ `, isInline: true, styles: [":host{display:block;margin-bottom:var(--hermes-global-space-4)}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ValidationBannerInternalComponent, selector: "appfx-validation-banner-internal", inputs: ["type", "closable", "closed", "items"] }] }); }
939
+ }
940
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ValidationBannerComponent, decorators: [{
941
+ type: Component,
942
+ args: [{ selector: 'appfx-validation-banner', standalone: false, template: `
943
+ <appfx-validation-banner-internal
944
+ *ngIf="state && state.errors?.length"
945
+ [items]="state.errors"
946
+ [type]="'danger'"
947
+ [closable]="closable"
948
+ [closed]="closed"
949
+ ></appfx-validation-banner-internal>
950
+ <appfx-validation-banner-internal
951
+ *ngIf="state && state.warnings?.length"
952
+ [items]="state.warnings"
953
+ [type]="'warning'"
954
+ [closable]="closable"
955
+ [closed]="closed"
956
+ ></appfx-validation-banner-internal>
957
+ <appfx-validation-banner-internal
958
+ *ngIf="state && state.infos?.length"
959
+ [items]="state.infos"
960
+ [type]="'info'"
961
+ [closable]="closable"
962
+ [closed]="closed"
963
+ ></appfx-validation-banner-internal>
964
+ `, styles: [":host{display:block;margin-bottom:var(--hermes-global-space-4)}\n"] }]
965
+ }], propDecorators: { state: [{
966
+ type: Input
967
+ }], closable: [{
968
+ type: Input
969
+ }] } });
970
+
971
+ /*
972
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
973
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
974
+ * This software is released under MIT license.
975
+ * The full license information can be found in LICENSE in the root directory of this project.
976
+ */
977
+ /**
978
+ * Dynamically renders a step component specified by the step descriptor.
979
+ */
980
+ class StepContainerComponent {
981
+ constructor() {
982
+ this.onRetry = new EventEmitter();
983
+ }
984
+ get readyToComplete() {
985
+ if (this.pageComponent?.model) {
986
+ const stepModel = this.pageComponent.model;
987
+ return stepModel.readyToComplete === undefined ? true : stepModel.readyToComplete;
988
+ }
989
+ return true;
990
+ }
991
+ get isValid() {
992
+ return this.readyToComplete && this.isPageStateValid;
993
+ }
994
+ get isPageStateValid() {
995
+ if (this.pageComponent?.model?.validationState) {
996
+ return this.pageComponent.model.validationState.isValid();
997
+ }
998
+ return true;
999
+ }
1000
+ ngOnInit() {
1001
+ if (!this.step.instantiateLazy) {
1002
+ this.loadComponent();
1003
+ }
1004
+ }
1005
+ ngOnDestroy() {
1006
+ this.unsubscribeRetry();
1007
+ }
1008
+ onActivate(error, stepModelChanges, recreateComponent, resetValidationState = true) {
1009
+ this.unsubscribeRetry();
1010
+ if (error) {
1011
+ this.loadErrorComponent(error);
1012
+ return;
1013
+ }
1014
+ if (recreateComponent || (!this.pageComponent && !!this.step.instantiateLazy)) {
1015
+ this.loadComponent();
1016
+ }
1017
+ if (!this.pageComponent) {
1018
+ return;
1019
+ }
1020
+ if (resetValidationState) {
1021
+ this.resetValidationState();
1022
+ }
1023
+ if (typeof this.pageComponent.activate === 'function') {
1024
+ this.pageComponent.activate(stepModelChanges);
1025
+ }
1026
+ }
1027
+ onCommit() {
1028
+ if (!this.pageComponent) {
1029
+ return of(true);
1030
+ }
1031
+ if (typeof this.pageComponent.validate === 'function') {
1032
+ const result = this.pageComponent.validate();
1033
+ if (!(result instanceof Observable)) {
1034
+ throw new Error("'validate' function must return Observable<boolean>");
1035
+ }
1036
+ return result.pipe(map((isValid) => isValid && this.isValid));
1037
+ }
1038
+ return of(this.isValid);
1039
+ }
1040
+ loadComponent() {
1041
+ if (!this.step.componentClass) {
1042
+ return;
1043
+ }
1044
+ this.componentContainer.clear();
1045
+ const cr = this.componentContainer.createComponent(this.step.componentClass);
1046
+ this.pageComponent = cr.instance;
1047
+ this.pageComponent.model = this.step.modelInstance;
1048
+ }
1049
+ loadErrorComponent(error) {
1050
+ this.componentContainer.clear();
1051
+ const cr = this.componentContainer.createComponent(ErrorComponent);
1052
+ this.pageComponent = cr.instance;
1053
+ this.pageComponent.error = error;
1054
+ this.retrySubscription = this.pageComponent.onRetry
1055
+ .pipe(take(1))
1056
+ .subscribe(() => this.onRetry.emit(this.step));
1057
+ }
1058
+ unsubscribeRetry() {
1059
+ if (this.retrySubscription && !this.retrySubscription.closed) {
1060
+ this.retrySubscription.unsubscribe();
1061
+ }
1062
+ }
1063
+ resetValidationState() {
1064
+ if (this.pageComponent?.model) {
1065
+ this.pageComponent.model.readyToComplete = true;
1066
+ if (this.pageComponent.model.validationState) {
1067
+ this.pageComponent.model.validationState.errors = [];
1068
+ this.pageComponent.model.validationState.warnings = [];
1069
+ this.pageComponent.model.validationState.infos = [];
1070
+ }
1071
+ }
1072
+ }
1073
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: StepContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1074
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.22", type: StepContainerComponent, isStandalone: false, selector: "appfx-step-container", inputs: { step: "step", description: "description" }, outputs: { onRetry: "onRetry" }, viewQueries: [{ propertyName: "componentContainer", first: true, predicate: ["componentContainer"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<div class=\"pr-1 hermes-flex-grow-0 hermes-flex-shrink-0\">\r\n <span *ngIf=\"description\">{{ description }}</span>\r\n <appfx-validation-banner\r\n *ngIf=\"step.modelInstance?.validationState?.isEmpty() === false\"\r\n [state]=\"step.modelInstance?.validationState\"\r\n >\r\n </appfx-validation-banner>\r\n</div>\r\n<div class=\"content-container hermes-flex-column hermes-flex-grow-1 hermes-flex-shrink-1\">\r\n <ng-template #componentContainer> </ng-template>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ValidationBannerComponent, selector: "appfx-validation-banner", inputs: ["state", "closable"] }] }); }
1075
+ }
1076
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: StepContainerComponent, decorators: [{
1077
+ type: Component,
1078
+ args: [{ selector: 'appfx-step-container', standalone: false, template: "<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<div class=\"pr-1 hermes-flex-grow-0 hermes-flex-shrink-0\">\r\n <span *ngIf=\"description\">{{ description }}</span>\r\n <appfx-validation-banner\r\n *ngIf=\"step.modelInstance?.validationState?.isEmpty() === false\"\r\n [state]=\"step.modelInstance?.validationState\"\r\n >\r\n </appfx-validation-banner>\r\n</div>\r\n<div class=\"content-container hermes-flex-column hermes-flex-grow-1 hermes-flex-shrink-1\">\r\n <ng-template #componentContainer> </ng-template>\r\n</div>\r\n" }]
1079
+ }], propDecorators: { step: [{
1080
+ type: Input
1081
+ }], description: [{
1082
+ type: Input
1083
+ }], onRetry: [{
1084
+ type: Output
1085
+ }], componentContainer: [{
1086
+ type: ViewChild,
1087
+ args: ['componentContainer', { read: ViewContainerRef, static: true }]
1088
+ }] } });
1089
+
1090
+ /*
1091
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
1092
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
1093
+ * This software is released under MIT license.
1094
+ * The full license information can be found in LICENSE in the root directory of this project.
1095
+ */
1096
+ /**
1097
+ * This token is used to determine if the Wizard/Dialog is opened through ModalService.
1098
+ * If it is not injected (value is null), this means the the component is used directly,
1099
+ * without ModalService.
1100
+ * If the value is true, this means that the component is opened using
1101
+ * ModalService.openModalComponent API.
1102
+ * If the value is false, this means that the component is opened using
1103
+ * ModalService.openModal API (which is not correct).
1104
+ */
1105
+ const modalServiceToken = new InjectionToken('ModalService#openModalComponent');
1106
+ function workflowConfigurationServiceFactory(existing) {
1107
+ return existing || new WorkflowConfigurationService();
1108
+ }
1109
+ function workflowStringsServiceFactory(existing) {
1110
+ return existing || new WorkflowStrings();
1111
+ }
1112
+ const components = [
1113
+ ValidationBannerComponent,
1114
+ ValidationBannerInternalComponent,
1115
+ StepContainerComponent,
1116
+ WorkflowModelMonitorComponent,
1117
+ ErrorComponent,
1118
+ SpinnerComponent,
1119
+ ];
1120
+ const clarityDependencies = [HermesAlertModule, HermesIcon, HermesSpinnerModule, HermesStackViewModule, HermesSignpostModule];
1121
+ const addonsDependencies = [PropertyViewModule, A11yModule];
1122
+ class AppfxWorkflowCoreModule {
1123
+ constructor() {
1124
+ ClarityIcons.addIcons(angleIcon, barsIcon, exclamationCircleIcon, pencilIcon, refreshIcon, successStandardIcon);
1125
+ }
1126
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: AppfxWorkflowCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1127
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.22", ngImport: i0, type: AppfxWorkflowCoreModule, declarations: [ValidationBannerComponent,
1128
+ ValidationBannerInternalComponent,
1129
+ StepContainerComponent,
1130
+ WorkflowModelMonitorComponent,
1131
+ ErrorComponent,
1132
+ SpinnerComponent], imports: [PropertyViewModule, A11yModule, HermesAlertModule, HermesIcon, HermesSpinnerModule, HermesStackViewModule, HermesSignpostModule, CommonModule, FormsModule, ReactiveFormsModule], exports: [ValidationBannerComponent,
1133
+ ValidationBannerInternalComponent,
1134
+ StepContainerComponent,
1135
+ WorkflowModelMonitorComponent,
1136
+ ErrorComponent,
1137
+ SpinnerComponent] }); }
1138
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: AppfxWorkflowCoreModule, providers: [
1139
+ {
1140
+ // This pattern allows the importer of this module to specify its own WorkflowConfigurationService.
1141
+ provide: WorkflowConfigurationService,
1142
+ useFactory: workflowConfigurationServiceFactory,
1143
+ deps: [[new Optional(), new SkipSelf(), WorkflowConfigurationService]],
1144
+ },
1145
+ {
1146
+ // This pattern allows the importer of this module to specify its own WorkflowStrings.
1147
+ provide: WorkflowStrings,
1148
+ useFactory: workflowStringsServiceFactory,
1149
+ deps: [[new Optional(), new SkipSelf(), WorkflowStrings]],
1150
+ },
1151
+ ], imports: [addonsDependencies, clarityDependencies, CommonModule, FormsModule, ReactiveFormsModule] }); }
1152
+ }
1153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: AppfxWorkflowCoreModule, decorators: [{
1154
+ type: NgModule,
1155
+ args: [{
1156
+ imports: [...addonsDependencies, ...clarityDependencies, CommonModule, FormsModule, ReactiveFormsModule],
1157
+ declarations: [...components],
1158
+ providers: [
1159
+ {
1160
+ // This pattern allows the importer of this module to specify its own WorkflowConfigurationService.
1161
+ provide: WorkflowConfigurationService,
1162
+ useFactory: workflowConfigurationServiceFactory,
1163
+ deps: [[new Optional(), new SkipSelf(), WorkflowConfigurationService]],
1164
+ },
1165
+ {
1166
+ // This pattern allows the importer of this module to specify its own WorkflowStrings.
1167
+ provide: WorkflowStrings,
1168
+ useFactory: workflowStringsServiceFactory,
1169
+ deps: [[new Optional(), new SkipSelf(), WorkflowStrings]],
1170
+ },
1171
+ ],
1172
+ exports: [...components],
1173
+ }]
1174
+ }], ctorParameters: () => [] });
1175
+
1176
+ /*
1177
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
1178
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
1179
+ * This software is released under MIT license.
1180
+ * The full license information can be found in LICENSE in the root directory of this project.
1181
+ */
1182
+ const inputMappingMetadataKey = 'InputMapping';
1183
+ /**
1184
+ * Decorates property with input mapping information
1185
+ * which is used for injecting property value from another object.
1186
+ */
1187
+ // TODO: see how decorators can be called out to apply class-like conventions.
1188
+ function In(inputMapping) {
1189
+ return function (prototype, srcPropName) {
1190
+ const mapping = {
1191
+ propertyName: srcPropName,
1192
+ optional: inputMapping && inputMapping.optional,
1193
+ };
1194
+ let mappings = Reflect.getMetadata(inputMappingMetadataKey, prototype);
1195
+ if (!mappings) {
1196
+ mappings = {};
1197
+ Reflect.defineMetadata(inputMappingMetadataKey, mappings, prototype);
1198
+ }
1199
+ mappings[srcPropName] = mapping;
1200
+ };
1201
+ }
1202
+ /**
1203
+ * Gets all input property mappings for the given object.
1204
+ */
1205
+ function getInputMappings(target) {
1206
+ const mappings = Reflect.getMetadata(inputMappingMetadataKey, target.constructor.prototype);
1207
+ if (mappings) {
1208
+ // Return deep clone of the mappings to protect them from accidental alternation.
1209
+ return JSON.parse(JSON.stringify(mappings));
1210
+ }
1211
+ return mappings;
1212
+ }
1213
+
1214
+ /*
1215
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
1216
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
1217
+ * This software is released under MIT license.
1218
+ * The full license information can be found in LICENSE in the root directory of this project.
1219
+ */
1220
+ const outputMappingMetadataKey = 'OutputMapping';
1221
+ /**
1222
+ * Decorates property with output mapping information
1223
+ * which is used for ejecting/outputting property value into another object.
1224
+ */
1225
+ // TODO: see how decorators can be called out to apply class-like conventions.
1226
+ function Out() {
1227
+ return function (prototype, srcPropName) {
1228
+ const mapping = {
1229
+ propertyName: srcPropName,
1230
+ };
1231
+ let mappings = Reflect.getMetadata(outputMappingMetadataKey, prototype);
1232
+ if (!mappings) {
1233
+ mappings = {};
1234
+ Reflect.defineMetadata(outputMappingMetadataKey, mappings, prototype);
1235
+ }
1236
+ mappings[srcPropName] = mapping;
1237
+ };
1238
+ }
1239
+ /**
1240
+ * Gets all output property mappings for the given object.
1241
+ */
1242
+ function getOutputMappings(target) {
1243
+ const mappings = Reflect.getMetadata(outputMappingMetadataKey, target.constructor.prototype);
1244
+ if (mappings) {
1245
+ // Return deep clone of the mappings to protect them from accidental alternation.
1246
+ return JSON.parse(JSON.stringify(mappings));
1247
+ }
1248
+ return mappings;
1249
+ }
1250
+
1251
+ /*
1252
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
1253
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
1254
+ * This software is released under MIT license.
1255
+ * The full license information can be found in LICENSE in the root directory of this project.
1256
+ */
1257
+ /**
1258
+ * Class to define property mappings between step model and wizard model.
1259
+ *
1260
+ * Note: If property name of both Step model and Wizard model is the same, no need to define this external mappings.
1261
+ * @template S any object that has @In/@Out decorators
1262
+ * @template W Wizard Model
1263
+ */
1264
+ class Mappings {
1265
+ constructor() {
1266
+ this.mappings = {};
1267
+ }
1268
+ /**
1269
+ * step model property name to which wizard model {@link wizardModelPropertyName} to be mapped
1270
+ * @param stepModelPropertyName Step model property name to map
1271
+ */
1272
+ mapStepProp(stepModelPropertyName) {
1273
+ // TODO: fix the above exclusion
1274
+ const self = this;
1275
+ return {
1276
+ /**
1277
+ * wizard model property name to which step model {@link stepModelPropertyName} to be mapped
1278
+ * @param wizardModelPropertyName Wizard model property name to map
1279
+ */
1280
+ to(wizardModelPropertyName) {
1281
+ if (self.mappings[stepModelPropertyName]) {
1282
+ throw new Error(`A mapping for property ${String(stepModelPropertyName)} is defined more than once.`);
1283
+ }
1284
+ else if (Object.values(self.mappings).indexOf(wizardModelPropertyName) >= 0) {
1285
+ throw new Error(`A mapping for property ${String(wizardModelPropertyName)} is defined more than once.`);
1286
+ }
1287
+ else {
1288
+ // no action
1289
+ }
1290
+ self.mappings[stepModelPropertyName] = wizardModelPropertyName;
1291
+ return self;
1292
+ },
1293
+ };
1294
+ }
1295
+ /**
1296
+ * Validates input and output mappings property names with the mappings defined by {@link mapStepProp} method.
1297
+ * @param model Step model
1298
+ */
1299
+ validate(model) {
1300
+ if (model) {
1301
+ const inputMappings = getInputMappings(model);
1302
+ const outputMappings = getOutputMappings(model);
1303
+ const missingMappings = this.validateMappings(inputMappings, outputMappings);
1304
+ if (missingMappings.length) {
1305
+ throw new Error(`No @In or @Out decorator found for property names ` + JSON.stringify(missingMappings));
1306
+ }
1307
+ }
1308
+ }
1309
+ /**
1310
+ * Returns property mappings defined.
1311
+ */
1312
+ getPropertyMappings() {
1313
+ return { ...this.mappings };
1314
+ }
1315
+ validateMappings(inputMappings, outputMappings) {
1316
+ const defaultMappings = {
1317
+ ...inputMappings,
1318
+ ...outputMappings,
1319
+ };
1320
+ return Object.keys(this.mappings).filter(key => !defaultMappings[key]);
1321
+ }
1322
+ }
1323
+
1324
+ /*
1325
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
1326
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
1327
+ * This software is released under MIT license.
1328
+ * The full license information can be found in LICENSE in the root directory of this project.
1329
+ */
1330
+ class RelevanceService {
1331
+ constructor() {
1332
+ this.loading = false;
1333
+ this.isRelevantSubs = [];
1334
+ this.stepRelevanceChange$ = new Subject();
1335
+ this.#steps = [];
1336
+ }
1337
+ #steps;
1338
+ /**
1339
+ * Workflow steps.
1340
+ */
1341
+ set steps(steps) {
1342
+ this.#steps = steps || [];
1343
+ this.unbindIsRelevantListeners();
1344
+ this.bindIsRelevantListeners();
1345
+ }
1346
+ /**
1347
+ * Checks for relevance check to complete.
1348
+ */
1349
+ checkComplete$() {
1350
+ const relevantVarValues = this.#steps
1351
+ .filter(step => step.isRelevant instanceof ComputedVar && step.isRelevant.areDependenciesSatisfied)
1352
+ .map(step => step.isRelevant.value$);
1353
+ let stepsObservable;
1354
+ if (relevantVarValues.length) {
1355
+ this.loading = true;
1356
+ stepsObservable = combineLatest(relevantVarValues).pipe(map(() => {
1357
+ this.loading = false;
1358
+ return this.#steps;
1359
+ }));
1360
+ }
1361
+ else {
1362
+ stepsObservable = of(this.#steps);
1363
+ }
1364
+ return stepsObservable;
1365
+ }
1366
+ destroy() {
1367
+ this.#steps = [];
1368
+ this.unbindIsRelevantListeners();
1369
+ }
1370
+ /**
1371
+ * Emits step which relevance has been changed
1372
+ */
1373
+ onStepRelevanceChange$() {
1374
+ return this.stepRelevanceChange$.asObservable();
1375
+ }
1376
+ bindIsRelevantListeners() {
1377
+ return this.#steps
1378
+ .filter(step => step.isRelevant)
1379
+ .forEach((step) => {
1380
+ if (step.isRelevant instanceof ComputedVar || step.isRelevant instanceof SimpleVar) {
1381
+ this.isRelevantSubs.push(step.isRelevant.value$
1382
+ .pipe(startWith(false) // Assume isRelevant is false by default.
1383
+ )
1384
+ .subscribe(isRelevant => {
1385
+ const oldValue = step.isSkipped;
1386
+ step.isSkipped = !isRelevant;
1387
+ if (oldValue !== step.isSkipped) {
1388
+ this.stepRelevanceChange$.next(step);
1389
+ }
1390
+ }));
1391
+ }
1392
+ });
1393
+ }
1394
+ unbindIsRelevantListeners() {
1395
+ this.isRelevantSubs.forEach(s => s.unsubscribe());
1396
+ this.isRelevantSubs = [];
1397
+ }
1398
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: RelevanceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1399
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: RelevanceService }); }
1400
+ }
1401
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: RelevanceService, decorators: [{
1402
+ type: Injectable
1403
+ }] });
1404
+
1405
+ /*
1406
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
1407
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
1408
+ * This software is released under MIT license.
1409
+ * The full license information can be found in LICENSE in the root directory of this project.
1410
+ */
1411
+ class StepValidationState {
1412
+ #errors;
1413
+ #warnings;
1414
+ #infos;
1415
+ constructor(errors = [], warnings = [], infos = []) {
1416
+ this.#errors = errors;
1417
+ this.#warnings = warnings;
1418
+ this.#infos = infos;
1419
+ }
1420
+ get errors() {
1421
+ return this.#errors || [];
1422
+ }
1423
+ set errors(messages) {
1424
+ this.#errors = messages;
1425
+ }
1426
+ get warnings() {
1427
+ return this.#warnings || [];
1428
+ }
1429
+ set warnings(messages) {
1430
+ this.#warnings = messages;
1431
+ }
1432
+ get infos() {
1433
+ return this.#infos || [];
1434
+ }
1435
+ set infos(messages) {
1436
+ this.#infos = messages;
1437
+ }
1438
+ isEmpty() {
1439
+ return this.errors.length === 0 && this.warnings.length === 0 && this.infos.length === 0;
1440
+ }
1441
+ isValid() {
1442
+ return !this.#errors || this.#errors.length === 0;
1443
+ }
1444
+ }
1445
+
1446
+ /*
1447
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
1448
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
1449
+ * This software is released under MIT license.
1450
+ * The full license information can be found in LICENSE in the root directory of this project.
1451
+ */
1452
+ /**
1453
+ * Options:
1454
+ * - `horizontal`: Default layout with horizontal alignment.
1455
+ * - `vertical`: Tabs aligned vertically, typically for sidebar navigation.
1456
+ * - `secondary`: Tabs styled horizontally as Clarity buttons for a secondary level of navigation.
1457
+ */
1458
+ var TabLayout;
1459
+ (function (TabLayout) {
1460
+ TabLayout["horizontal"] = "horizontal";
1461
+ TabLayout["vertical"] = "vertical";
1462
+ TabLayout["secondary"] = "horizontal-secondary";
1463
+ })(TabLayout || (TabLayout = {}));
1464
+
1465
+ /*
1466
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
1467
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
1468
+ * This software is released under MIT license.
1469
+ * The full license information can be found in LICENSE in the root directory of this project.
1470
+ */
1471
+ class ModelChange {
1472
+ constructor(propertyName, oldValue, newValue) {
1473
+ this.propertyName = propertyName;
1474
+ this.oldValue = oldValue;
1475
+ this.newValue = newValue;
1476
+ }
1477
+ }
1478
+ class WorkflowModelManager {
1479
+ constructor() {
1480
+ /**
1481
+ * Emit when {@link injectPropertiesToPendingStep} method completes.
1482
+ * Emitted value contains the pending step and calculated properties for it.
1483
+ */
1484
+ this.onStepChange$ = new Subject();
1485
+ /**
1486
+ * Emit when one or more workflow properties are changed.
1487
+ */
1488
+ this.onModelChange$ = new Subject();
1489
+ /**
1490
+ * Emit "true" before start of computed properties evaluation.
1491
+ * Emit "false" when computed properties are evaluated.
1492
+ */
1493
+ this.loading$ = new BehaviorSubject(false);
1494
+ this.stepModelBindings = new Map();
1495
+ this.workflowModelSubs = [];
1496
+ // Contains stringified values of the 'wizardModel' properties.
1497
+ this.wizardModelOldValues = {};
1498
+ // Contains stringified values of the input step model properties.
1499
+ this.stepModelLastValuesIn = new Map();
1500
+ }
1501
+ #steps;
1502
+ /**
1503
+ * Workflow steps.
1504
+ */
1505
+ set steps(value) {
1506
+ this.#steps = value;
1507
+ this.initStepModels();
1508
+ this.onStepsOrModelChange();
1509
+ }
1510
+ /**
1511
+ * Workflow model.
1512
+ */
1513
+ get model() {
1514
+ return this.wizardModel;
1515
+ }
1516
+ set model(value) {
1517
+ if (typeof value === 'function' || Array.isArray(value)) {
1518
+ throw new Error('Workflow model cannot be a function or array.');
1519
+ }
1520
+ if (!value) {
1521
+ console.warn('Workflow model not initialized.!');
1522
+ }
1523
+ this.wizardModel = value;
1524
+ this.wizardModelOldValues = {};
1525
+ this.onStepsOrModelChange();
1526
+ }
1527
+ destroy() {
1528
+ this.unbindStepModelListeners();
1529
+ this.unbindWorkflowModelListeners();
1530
+ }
1531
+ /**
1532
+ * Ejects properties from provided step model to wizard model.
1533
+ */
1534
+ ejectPropertiesFromCurrentStep(currentStep) {
1535
+ if (!this.wizardModel) {
1536
+ return;
1537
+ }
1538
+ if (!currentStep?.modelInstance) {
1539
+ return;
1540
+ }
1541
+ const outputMappings = this.getOutputMappings(currentStep.modelInstance, currentStep.mappings);
1542
+ if (!outputMappings) {
1543
+ return;
1544
+ }
1545
+ const changes = [];
1546
+ for (const [key, outputMapping] of Object.entries(outputMappings)) {
1547
+ const stepModelValue = currentStep.modelInstance[key];
1548
+ const change = this.updateWizardModel(stepModelValue, outputMapping);
1549
+ changes.push(change);
1550
+ }
1551
+ this.emitModelChange(changes);
1552
+ }
1553
+ /**
1554
+ * Calculate the {@link ComputedVar} properties, if any.
1555
+ * Then inject properties to the provided step model.
1556
+ */
1557
+ injectPropertiesToPendingStep(pendingStep) {
1558
+ if (!this.wizardModel) {
1559
+ return of({
1560
+ pendingStep: pendingStep,
1561
+ });
1562
+ }
1563
+ return this.injectPropertiesToPendingStepInternal(pendingStep).pipe(tap((result) => {
1564
+ this.emitModelChange(result.wizardModelChanges);
1565
+ this.onStepChange$.next({
1566
+ step: pendingStep,
1567
+ changes: result.wizardModelChanges,
1568
+ });
1569
+ }), map((result) => {
1570
+ return {
1571
+ pendingStep: pendingStep,
1572
+ stepModelChanges: result.stepModelChanges,
1573
+ recreateComponent: result.recreateComponent,
1574
+ };
1575
+ }), catchError((error) => {
1576
+ console.error(error);
1577
+ return of({
1578
+ pendingStep: pendingStep,
1579
+ error: formatError(error),
1580
+ });
1581
+ }));
1582
+ }
1583
+ onStepsOrModelChange() {
1584
+ // Clear bindings to old steps/model.
1585
+ this.unbindStepModelListeners();
1586
+ this.unbindWorkflowModelListeners();
1587
+ this.stepModelLastValuesIn.clear();
1588
+ if (!this.#steps || !this.wizardModel) {
1589
+ return;
1590
+ }
1591
+ // Both steps and model is set.
1592
+ this.bindStepModelListeners();
1593
+ this.processWorkflowModel();
1594
+ }
1595
+ initStepModels() {
1596
+ (this.#steps || [])
1597
+ .filter(step => !step.instantiateLazy) // if instantiateLazy, init later when required ( in injectPropertiesToPendingStepInternal )
1598
+ .forEach(step => {
1599
+ this.initStepModel(step);
1600
+ });
1601
+ }
1602
+ initStepModel(step) {
1603
+ if (typeof step.model === 'function') {
1604
+ step.modelInstance = step.model();
1605
+ }
1606
+ else {
1607
+ if (step.recreateComponent) {
1608
+ throw new Error('When recreateComponent is defined, model should be a factory function');
1609
+ }
1610
+ step.modelInstance = step.model;
1611
+ }
1612
+ if (step.mappings) {
1613
+ step.mappings.validate(step.modelInstance);
1614
+ }
1615
+ return step.modelInstance;
1616
+ }
1617
+ bindStepModelListeners() {
1618
+ for (const page of this.#steps) {
1619
+ this.bindStepModelListener(page);
1620
+ }
1621
+ }
1622
+ bindStepModelListener(page) {
1623
+ if (!page.modelInstance) {
1624
+ return;
1625
+ }
1626
+ const mappings = this.getOutputMappings(page.modelInstance, page.mappings);
1627
+ if (!mappings) {
1628
+ return;
1629
+ }
1630
+ const subscription = new Subscription();
1631
+ for (const [propertyName, outputMapping] of Object.entries(mappings)) {
1632
+ const propertyValue = page.modelInstance[propertyName];
1633
+ if (propertyValue instanceof Observable) {
1634
+ // TODO: Deprecated; to be removed!
1635
+ console.warn(`Step ${page.title} has property ${propertyName}: Observable.` +
1636
+ 'Using Observable in Step models is deprecated and will be removed soon. ' +
1637
+ 'Use Var.from() instead');
1638
+ subscription.add(propertyValue.subscribe(value => {
1639
+ if (this.wizardModel) {
1640
+ const change = this.updateWizardModel(value, outputMapping);
1641
+ this.emitModelChange([change]);
1642
+ }
1643
+ }));
1644
+ }
1645
+ else if (propertyValue instanceof SimpleVar) {
1646
+ subscription.add(propertyValue.value$.subscribe(value => {
1647
+ if (this.wizardModel) {
1648
+ const change = this.updateWizardModel(value, outputMapping);
1649
+ this.emitModelChange([change]);
1650
+ }
1651
+ }));
1652
+ }
1653
+ else {
1654
+ // no action
1655
+ }
1656
+ }
1657
+ this.stepModelBindings.set(page.modelInstance, subscription);
1658
+ }
1659
+ unbindStepModelListeners() {
1660
+ this.stepModelBindings.forEach(s => s.unsubscribe());
1661
+ this.stepModelBindings.clear();
1662
+ }
1663
+ unbindStepModelListener(page) {
1664
+ if (!page.modelInstance) {
1665
+ return;
1666
+ }
1667
+ const stepModelBinding = this.stepModelBindings.get(page.modelInstance);
1668
+ if (stepModelBinding) {
1669
+ stepModelBinding.unsubscribe();
1670
+ this.stepModelBindings.delete(page.modelInstance);
1671
+ }
1672
+ }
1673
+ processWorkflowModel() {
1674
+ for (const [propName, propValue] of Object.entries(this.wizardModel)) {
1675
+ if (propValue instanceof SimpleVar) {
1676
+ propValue.name = propName;
1677
+ }
1678
+ else if (propValue instanceof ComputedVar) {
1679
+ propValue.name = propName;
1680
+ if (propValue.strategy === ComputeStrategy.eager) {
1681
+ this.workflowModelSubs.push(propValue.value$.pipe(startWith(undefined), pairwise()).subscribe(([prevValue, newValue]) => {
1682
+ const change = new ModelChange(propName, prevValue, newValue);
1683
+ this.emitModelChange([change]);
1684
+ }));
1685
+ }
1686
+ }
1687
+ else {
1688
+ // no action
1689
+ }
1690
+ }
1691
+ }
1692
+ unbindWorkflowModelListeners() {
1693
+ this.workflowModelSubs.forEach(s => s.unsubscribe());
1694
+ this.workflowModelSubs = [];
1695
+ }
1696
+ updateWizardModel(newValue, outputMapping) {
1697
+ if (newValue instanceof Observable) {
1698
+ // TODO: This case is deprecated and will be removed soon.
1699
+ return null;
1700
+ }
1701
+ if (newValue instanceof SimpleVar) {
1702
+ // Wizard model is updated through bindings.
1703
+ // Make sure that the SimpleVar is not dirty, i.e. value is not changed without calling the "value" setter.
1704
+ newValue.updateValueIfDirty();
1705
+ return null;
1706
+ }
1707
+ const outputMappingPropertyName = outputMapping.propertyName;
1708
+ const oldValue = this.wizardModel[outputMappingPropertyName];
1709
+ if (oldValue instanceof ComputedVar) {
1710
+ throw new Error(`Cannot update ${outputMappingPropertyName} in WizardModel, because it is ComputedVar.`);
1711
+ }
1712
+ else if (oldValue instanceof SimpleVar) {
1713
+ this.wizardModel[outputMappingPropertyName].value = newValue;
1714
+ }
1715
+ else {
1716
+ this.wizardModel[outputMappingPropertyName] = newValue;
1717
+ }
1718
+ const newValueStr = stringify(newValue, outputMappingPropertyName);
1719
+ const oldValueStr = this.wizardModelOldValues[outputMappingPropertyName];
1720
+ if (oldValueStr !== newValueStr) {
1721
+ this.wizardModelOldValues[outputMappingPropertyName] = newValueStr;
1722
+ const oldValueParsed = parse(oldValueStr, outputMappingPropertyName);
1723
+ return new ModelChange(outputMappingPropertyName, oldValueParsed, newValue);
1724
+ }
1725
+ return null;
1726
+ }
1727
+ injectPropertiesToPendingStepInternal(pendingStep) {
1728
+ const defaultResult = {
1729
+ wizardModelChanges: [],
1730
+ stepModelChanges: {},
1731
+ };
1732
+ const result = of(defaultResult);
1733
+ if (!pendingStep) {
1734
+ return result;
1735
+ }
1736
+ let createdModelInstance = false;
1737
+ if (pendingStep.instantiateLazy && !pendingStep.modelInstance) {
1738
+ // If lazy instantiated, modelInstance may not be initialized yet.
1739
+ this.initStepModel(pendingStep);
1740
+ this.bindStepModelListener(pendingStep);
1741
+ createdModelInstance = true;
1742
+ }
1743
+ const stepModel = pendingStep.modelInstance;
1744
+ if (!stepModel) {
1745
+ return result;
1746
+ }
1747
+ const inputMappings = this.getInputMappings(stepModel, pendingStep.mappings);
1748
+ if (!inputMappings) {
1749
+ // If there are no input mappings and recreateComponent is true, then re-create modelInstance
1750
+ // Since, there are no input properties, pass empty object as modelChanges to recreateComponent method.
1751
+ if (pendingStep.recreateComponent && pendingStep.recreateComponent({})) {
1752
+ this.unbindStepModelListener(pendingStep);
1753
+ this.initStepModel(pendingStep);
1754
+ this.bindStepModelListener(pendingStep);
1755
+ return of({
1756
+ ...defaultResult,
1757
+ recreateComponent: true,
1758
+ });
1759
+ }
1760
+ return result;
1761
+ }
1762
+ const wizardProps = Object.entries(inputMappings).map(([stepModelPropName, inputMapping]) => {
1763
+ return this.wrapWorkflowPropertyInObservable(stepModelPropName, inputMapping);
1764
+ });
1765
+ const wizardProps$ = wizardProps.map(wrapper => wrapper.value$);
1766
+ const wizardCompProps = Object.keys(this.wizardModel).filter(propName => this.wizardModel[propName] instanceof ComputedVar);
1767
+ const oldWizardModelCompPropValues = this.extractModelProperties(this.wizardModel, wizardCompProps);
1768
+ if (oldWizardModelCompPropValues.length) {
1769
+ this.loading$.next(true);
1770
+ }
1771
+ const stepInputProperties = Object.keys(inputMappings);
1772
+ const oldStepModelValues = this.extractLastStepInputValues(stepModel, stepInputProperties);
1773
+ return combineLatest(wizardProps$).pipe(take(1), // apply the 'take' operator first to avoid recursive calls when both @In and @Out are declared on same property
1774
+ map((propValues) => {
1775
+ // Inject workflow values into the step model.
1776
+ this.injectWizardPropertiesToStepModel(wizardProps, propValues, stepModel);
1777
+ const newStepModelValues = this.extractModelProperties(stepModel, stepInputProperties);
1778
+ const stepModelChangesList = this.diffPropertyValues(oldStepModelValues, newStepModelValues);
1779
+ const stepModelChanges = (stepModelChangesList || []).reduce((res, curr) => {
1780
+ res[curr.propertyName] = curr;
1781
+ return res;
1782
+ }, {});
1783
+ // if recreateComponent, create new model.
1784
+ const recreateComponent = pendingStep.recreateComponent && pendingStep.recreateComponent(stepModelChanges);
1785
+ if (recreateComponent && !createdModelInstance) {
1786
+ this.unbindStepModelListener(pendingStep);
1787
+ const newStepModel = this.initStepModel(pendingStep);
1788
+ this.bindStepModelListener(pendingStep);
1789
+ this.injectWizardPropertiesToStepModel(wizardProps, propValues, newStepModel, pendingStep.mappings);
1790
+ }
1791
+ // Detect changes in all computed properties, because dependent computed
1792
+ // properties might also have changed.
1793
+ const newWizardModelCompPropValues = this.extractModelProperties(this.wizardModel, wizardCompProps);
1794
+ const wizardModelChanges = this.diffPropertyValues(oldWizardModelCompPropValues, newWizardModelCompPropValues);
1795
+ return {
1796
+ wizardModelChanges: wizardModelChanges,
1797
+ stepModelChanges: stepModelChanges,
1798
+ recreateComponent: recreateComponent,
1799
+ };
1800
+ }), tap(() => this.loading$.next(false)), catchError((error) => {
1801
+ this.loading$.next(false);
1802
+ return throwError(() => error);
1803
+ }));
1804
+ }
1805
+ injectWizardPropertiesToStepModel(wizardProps, propValues, stepModel, mappings) {
1806
+ wizardProps.forEach((wrapper, index) => {
1807
+ const stepModelNewValue = propValues[index];
1808
+ this.updateStepModel(stepModel, wrapper.name, stepModelNewValue);
1809
+ });
1810
+ this.cacheStepModelInputProps(stepModel, mappings);
1811
+ }
1812
+ wrapWorkflowPropertyInObservable(stepModelPropName, inputMapping) {
1813
+ const wizardProp = this.wizardModel[inputMapping.propertyName];
1814
+ if (!Object.prototype.hasOwnProperty.call(this.wizardModel, inputMapping.propertyName) &&
1815
+ !Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this.wizardModel), inputMapping.propertyName)) {
1816
+ return this.wrapOptionalWorkflowPropertyInObservable(stepModelPropName, inputMapping);
1817
+ }
1818
+ else if (wizardProp instanceof ComputedVar) {
1819
+ return this.wrapComputedWorkflowPropertyInObservable(stepModelPropName, inputMapping);
1820
+ }
1821
+ else if (wizardProp instanceof SimpleVar) {
1822
+ return this.wrapSimpleWorkflowPropertyInObservable(stepModelPropName, inputMapping);
1823
+ }
1824
+ else {
1825
+ return {
1826
+ name: stepModelPropName,
1827
+ value$: of(wizardProp),
1828
+ computed: false,
1829
+ };
1830
+ }
1831
+ }
1832
+ wrapOptionalWorkflowPropertyInObservable(stepModelPropName, inputMapping) {
1833
+ if (!inputMapping.optional) {
1834
+ throw new Error(`Workflow model property ${inputMapping.propertyName} not found or not initialized.`);
1835
+ }
1836
+ return {
1837
+ name: stepModelPropName,
1838
+ value$: of(missingOptionalProperty),
1839
+ computed: false,
1840
+ };
1841
+ }
1842
+ wrapComputedWorkflowPropertyInObservable(stepModelPropName, inputMapping) {
1843
+ const wizardProp = this.wizardModel[inputMapping.propertyName];
1844
+ const unsatisfiedDeps = wizardProp.unsatisfiedDependencies;
1845
+ if (unsatisfiedDeps.length) {
1846
+ if (inputMapping.optional) {
1847
+ return {
1848
+ name: stepModelPropName,
1849
+ value$: of(missingOptionalProperty),
1850
+ computed: true,
1851
+ };
1852
+ }
1853
+ else {
1854
+ throw new Error(`Dependencies not satisfied for Var: ${wizardProp.name} --> ${unsatisfiedDeps}`);
1855
+ }
1856
+ }
1857
+ else {
1858
+ return {
1859
+ name: stepModelPropName,
1860
+ value$: wizardProp.value$,
1861
+ computed: true,
1862
+ };
1863
+ }
1864
+ }
1865
+ wrapSimpleWorkflowPropertyInObservable(stepModelPropName, inputMapping) {
1866
+ const wizardProp = this.wizardModel[inputMapping.propertyName];
1867
+ if (wizardProp.value === undefined) {
1868
+ if (inputMapping.optional) {
1869
+ return {
1870
+ name: stepModelPropName,
1871
+ value$: of(missingOptionalProperty),
1872
+ computed: false,
1873
+ };
1874
+ }
1875
+ else {
1876
+ throw new Error(`Value not initialized for Var: ${wizardProp.name}`);
1877
+ }
1878
+ }
1879
+ else {
1880
+ return {
1881
+ name: stepModelPropName,
1882
+ value$: wizardProp.value$,
1883
+ computed: false,
1884
+ };
1885
+ }
1886
+ }
1887
+ updateStepModel(stepModel, propertyName, newValue) {
1888
+ // Early return if input mapping is defined as optional and there is no value.
1889
+ if (newValue === missingOptionalProperty) {
1890
+ return;
1891
+ }
1892
+ // Set the new value
1893
+ if (stepModel[propertyName] instanceof SimpleVar) {
1894
+ stepModel[propertyName].value = newValue;
1895
+ }
1896
+ else {
1897
+ stepModel[propertyName] = newValue;
1898
+ }
1899
+ }
1900
+ diffPropertyValues(oldValues, newValues) {
1901
+ const changes = [];
1902
+ oldValues.forEach((nameValue, index) => {
1903
+ const oldValueStr = nameValue.valueStr;
1904
+ const newValueStr = newValues[index].valueStr;
1905
+ if (oldValueStr !== newValueStr) {
1906
+ const change = new ModelChange(nameValue.name, nameValue.value, newValues[index].value);
1907
+ changes.push(change);
1908
+ }
1909
+ });
1910
+ return changes;
1911
+ }
1912
+ /**
1913
+ * Return the input step model values, that were cached during the last invocation of
1914
+ * {@link ejectPropertiesFromCurrentStep} method.
1915
+ */
1916
+ extractLastStepInputValues(model, propNames) {
1917
+ const lastStepModelValues = this.stepModelLastValuesIn.get(model);
1918
+ if (!lastStepModelValues) {
1919
+ // When a step is activated for the first time, it has no "last" values cached.
1920
+ return this.extractModelProperties(model, propNames);
1921
+ }
1922
+ const result = [];
1923
+ for (const propertyName of propNames) {
1924
+ const valueStr = lastStepModelValues[propertyName];
1925
+ const propertyValue = parse(valueStr, propertyName);
1926
+ result.push({
1927
+ name: propertyName,
1928
+ value: propertyValue,
1929
+ valueStr: valueStr,
1930
+ });
1931
+ }
1932
+ return result;
1933
+ }
1934
+ /**
1935
+ * Return stringified values of {@link propNames} of the {@link model}.
1936
+ */
1937
+ extractModelProperties(model, propNames) {
1938
+ const result = [];
1939
+ for (const propertyName of propNames) {
1940
+ let propertyValue = model[propertyName];
1941
+ if (propertyValue instanceof ComputedVar || propertyValue instanceof SimpleVar) {
1942
+ propertyValue = propertyValue.value;
1943
+ }
1944
+ const valueStr = stringify(propertyValue, propertyName);
1945
+ result.push({
1946
+ name: propertyName,
1947
+ value: propertyValue,
1948
+ valueStr: valueStr,
1949
+ });
1950
+ }
1951
+ return result;
1952
+ }
1953
+ /**
1954
+ * Remove null elements from the "changes" array and emit on {@link onModelChange$}
1955
+ * if there are changes.
1956
+ */
1957
+ emitModelChange(changes) {
1958
+ const nonNullChanges = changes.filter(change => !!change);
1959
+ if (nonNullChanges.length) {
1960
+ this.onModelChange$.next(nonNullChanges);
1961
+ }
1962
+ }
1963
+ cacheStepModelInputProps(stepModel, mappings) {
1964
+ const inputMappings = this.getInputMappings(stepModel, mappings);
1965
+ if (inputMappings) {
1966
+ const stepModelStringifiedProps = {};
1967
+ for (const [key] of Object.entries(inputMappings)) {
1968
+ let propertyValue = stepModel[key];
1969
+ if (propertyValue instanceof ComputedVar || propertyValue instanceof SimpleVar) {
1970
+ propertyValue = propertyValue.value;
1971
+ }
1972
+ const stepModelValueStr = stringify(propertyValue, key);
1973
+ stepModelStringifiedProps[key] = stepModelValueStr;
1974
+ }
1975
+ this.stepModelLastValuesIn.set(stepModel, stepModelStringifiedProps);
1976
+ }
1977
+ }
1978
+ getInputMappings(stepModel, mappings) {
1979
+ const externalMappings = mappings?.getPropertyMappings();
1980
+ const inputMappings = getInputMappings(stepModel);
1981
+ if (inputMappings && externalMappings) {
1982
+ for (const [stepModelPropertyName, wizardModelPropertyName] of Object.entries(externalMappings)) {
1983
+ const propertyMapping = inputMappings[stepModelPropertyName];
1984
+ if (propertyMapping) {
1985
+ propertyMapping.propertyName = wizardModelPropertyName;
1986
+ }
1987
+ }
1988
+ }
1989
+ return inputMappings;
1990
+ }
1991
+ getOutputMappings(stepModel, mappings) {
1992
+ const externalMappings = mappings?.getPropertyMappings();
1993
+ const outputMappings = getOutputMappings(stepModel);
1994
+ if (outputMappings && externalMappings) {
1995
+ for (const [stepModelPropertyName, wizardModelPropertyName] of Object.entries(externalMappings)) {
1996
+ const propertyMapping = outputMappings[stepModelPropertyName];
1997
+ if (propertyMapping) {
1998
+ propertyMapping.propertyName = wizardModelPropertyName;
1999
+ }
2000
+ }
2001
+ }
2002
+ return outputMappings;
2003
+ }
2004
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: WorkflowModelManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2005
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: WorkflowModelManager }); }
2006
+ }
2007
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: WorkflowModelManager, decorators: [{
2008
+ type: Injectable
2009
+ }] });
2010
+ class OptionalProperty {
2011
+ }
2012
+ // Value that will be returned when @InputMapping refers to an optional property,
2013
+ // that is missing from the wizard model.
2014
+ const missingOptionalProperty = new OptionalProperty();
2015
+
2016
+ /*
2017
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
2018
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
2019
+ * This software is released under MIT license.
2020
+ * The full license information can be found in LICENSE in the root directory of this project.
2021
+ */
2022
+
2023
+ /**
2024
+ * Generated bundle index. Do not edit.
2025
+ */
2026
+
2027
+ export { AppfxWorkflowCoreModule, TabLayout as DialogLayout, ErrorComponent, In, Mappings, ModelChange, Out, RelevanceService, SpinnerComponent as Spinner, SpinnerComponent, StepContainerComponent as StepContainer, StepContainerComponent, StepValidationState, TabLayout, ValidationBannerComponent as ValidationBanner, ValidationBannerComponent, ValidationBannerInternalComponent as ValidationBannerInternal, ValidationBannerInternalComponent, Var, WorkflowConfigurationService, WorkflowModelManager, WorkflowModelMonitorComponent as WorkflowModelMonitor, WorkflowModelMonitorComponent, formatError, modalServiceToken, stringify };
2028
+ //# sourceMappingURL=hermes-ui-angular-addons-var.mjs.map