@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,1082 @@
1
+ import * as i7 from '@angular/cdk/drag-drop';
2
+ import { CdkDropList, CdkDrag, DragDropModule } from '@angular/cdk/drag-drop';
3
+ import * as i6$1 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import * as i0 from '@angular/core';
6
+ import { Injectable, ElementRef, ViewContainerRef, ViewChild, Input, Optional, Component, EventEmitter, Output, NgModule } from '@angular/core';
7
+ import * as i8 from '@hermes-ui/angular/addons/translate';
8
+ import { AppfxTranslateService, defaultMissingTranslationHandler, appfxMissingTranslationToken, appfxTranslationsToken, AppfxTranslateModule } from '@hermes-ui/angular/addons/translate';
9
+ import * as i3 from '@hermes-ui/angular/forms/checkbox';
10
+ import { HermesCheckboxModule } from '@hermes-ui/angular/forms/checkbox';
11
+ import * as i4 from '@hermes-ui/angular/popover/dropdown';
12
+ import { HermesDropdownModule } from '@hermes-ui/angular/popover/dropdown';
13
+ import { trigger, transition, style, animate } from '@angular/animations';
14
+ import * as i5 from '@hermes-ui/angular/addons/a11y';
15
+ import { a11ykeys } from '@hermes-ui/angular/addons/a11y';
16
+ import * as i6 from '@hermes-ui/angular/icon';
17
+ import { ClarityIcons, dragHandleIcon, cogIcon } from '@hermes-ui/angular/icon';
18
+ import { Subscription, of } from 'rxjs';
19
+ import { tap, map, filter, take } from 'rxjs/operators';
20
+ import * as i1 from '@hermes-ui/angular/addons/drag-and-drop';
21
+ import * as i1$1 from '@hermes-ui/angular/forms/common';
22
+ import * as i5$1 from '@hermes-ui/angular/popover/common';
23
+
24
+ /*
25
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
26
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
27
+ * This software is released under MIT license.
28
+ * The full license information can be found in LICENSE in the root directory of this project.
29
+ */
30
+ const translations = {
31
+ en: {
32
+ /**
33
+ * Settings toggle button label for screen readers.
34
+ */
35
+ settingsCog: 'Settings',
36
+ /**
37
+ * Drag handle button label for screen readers.
38
+ */
39
+ cardDragHandle: 'Card drag handle',
40
+ /**
41
+ * Drag handle button describe for screen readers.
42
+ */
43
+ cardDragHandleDescription: 'Press Enter and use left or right key to move the card to a new position.',
44
+ },
45
+ fr: {
46
+ settingsCog: 'Paramètres',
47
+ cardDragHandle: 'Poignée de glissement de carte',
48
+ cardDragHandleDescription: 'Appuyez sur Entrée et utilisez la flèche vers la gauche ou la droite pour déplacer la carte vers une nouvelle position.',
49
+ },
50
+ es: {
51
+ settingsCog: 'Configuración',
52
+ cardDragHandle: 'Control de arrastre de tarjeta ',
53
+ cardDragHandleDescription: 'Pulse la tecla Intro y use la tecla de flecha izquierda o derecha para mover la tarjeta a una nueva posición.',
54
+ },
55
+ ja: {
56
+ settingsCog: '設定',
57
+ cardDragHandle: 'カード ドラッグ ハンドル',
58
+ cardDragHandleDescription: 'Enter キーを押し、←または→キーを押してカードを新しい位置に移動します。',
59
+ },
60
+ };
61
+
62
+ /*
63
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
64
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
65
+ * This software is released under MIT license.
66
+ * The full license information can be found in LICENSE in the root directory of this project.
67
+ */
68
+ // unit Card Width and Height
69
+ const cardSize = {
70
+ unitWidthInPixels: 258,
71
+ unitHeightInPixels: 58,
72
+ unitGutterSizeInPixels: 18,
73
+ headerHeightInPixels: 50,
74
+ footerHeightInPixels: 50,
75
+ };
76
+ // card defaults
77
+ const cardDefaults = {
78
+ unitWidth: 1,
79
+ unitHeight: 5,
80
+ order: Infinity,
81
+ hidden: false,
82
+ canHide: true,
83
+ };
84
+
85
+ /*
86
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
87
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
88
+ * This software is released under MIT license.
89
+ * The full license information can be found in LICENSE in the root directory of this project.
90
+ */
91
+ /**
92
+ * Provides functionality related to layout of cards like updating card sizes
93
+ * adding scrolling inside card block depending on conditions
94
+ */
95
+ class LayoutService {
96
+ constructor(renderer) {
97
+ this.renderer = renderer;
98
+ }
99
+ /**
100
+ * Updates the size of the cards according to the info provided
101
+ */
102
+ updateCardSize(element, unitWidth = 1, unitHeight = 5) {
103
+ const cardElement = element?.querySelector('.card');
104
+ if (!cardElement) {
105
+ return;
106
+ }
107
+ if (unitWidth > -1) {
108
+ const cardWidth = this.calculateCardWidth(unitWidth);
109
+ this.renderer.setStyle(cardElement, 'width', `${cardWidth}px`);
110
+ }
111
+ else {
112
+ this.renderer.removeStyle(cardElement, 'width');
113
+ }
114
+ let cardBlockHeight = this.calculateCardHeight(unitHeight);
115
+ // if .card-header is defined reduce header height(50px) from .card-block height
116
+ // 5 unit -> 58*5 + 18*4 -> 362px - 50px -> 312px
117
+ const cardHeader = cardElement.querySelector('.card-header');
118
+ if (cardHeader) {
119
+ cardBlockHeight -= cardSize.headerHeightInPixels;
120
+ this.renderer.setStyle(cardHeader, 'height', `${cardSize.headerHeightInPixels}px`);
121
+ }
122
+ // if .card-footer is defined reduce footer height(50px) from .card-block height
123
+ // 5 unit -> 58*5 + 18*4 -> 362px - 50px -> 312px
124
+ const cardFooter = cardElement.querySelector('.card-footer');
125
+ if (cardFooter) {
126
+ cardBlockHeight -= cardSize.footerHeightInPixels;
127
+ this.renderer.setStyle(cardFooter, 'height', `${cardSize.footerHeightInPixels}px`);
128
+ }
129
+ const cardBlock = cardElement.querySelector('.card-block');
130
+ if (cardBlock) {
131
+ if (unitHeight > -1) {
132
+ this.renderer.setStyle(cardBlock, 'height', `${cardBlockHeight}px`);
133
+ }
134
+ else {
135
+ this.renderer.removeStyle(cardBlock, 'height');
136
+ }
137
+ if (cardHeader) {
138
+ this.renderer.setStyle(cardBlock, 'overflow-y', 'auto');
139
+ }
140
+ }
141
+ }
142
+ /**
143
+ * card width is unitWidth * unitWidthInPixels(258px) + in between gutters * unitGutterSizeInPixels(18px)
144
+ * in between gutters are number of units - 1
145
+ * 1 unit -> 258px
146
+ * 2 unit -> 258*2 + 18 -> 534px
147
+ * 3 unit -> 258*3 + 18*2 -> 810px ....
148
+ * @param unitWidth
149
+ */
150
+ calculateCardWidth(unitWidth) {
151
+ return unitWidth * cardSize.unitWidthInPixels + (unitWidth - 1) * cardSize.unitGutterSizeInPixels;
152
+ }
153
+ /**
154
+ * card height is unitHeight * unitHeightInPixels(258px) + in between gutters * unitGutterSizeInPixels(18px)
155
+ * in between gutters are number of units - 1
156
+ * 1 unit -> 58px
157
+ * 5 unit -> 58*5 + 18*4 -> 362px
158
+ * 7 unit -> 58*7 + 18*6 -> 514px ....
159
+ * @param unitHeight
160
+ */
161
+ calculateCardHeight(unitHeight) {
162
+ return unitHeight * cardSize.unitHeightInPixels + (unitHeight - 1) * cardSize.unitGutterSizeInPixels;
163
+ }
164
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: LayoutService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
165
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: LayoutService }); }
166
+ }
167
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: LayoutService, decorators: [{
168
+ type: Injectable
169
+ }], ctorParameters: () => [{ type: i0.Renderer2 }] });
170
+
171
+ /*
172
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
173
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
174
+ * This software is released under MIT license.
175
+ * The full license information can be found in LICENSE in the root directory of this project.
176
+ */
177
+ /**
178
+ * Handles storing and retrieving of preferences/settings of the cards in container
179
+ * like order, hidden properties of card.
180
+ */
181
+ class PersistenceService {
182
+ constructor() {
183
+ this.appfxCardSettings = [];
184
+ }
185
+ initialize(containerStore) {
186
+ this.containerStore = containerStore;
187
+ }
188
+ retrieve() {
189
+ return this.containerStore.retrieve().pipe(tap((cardSettings) => {
190
+ this.appfxCardSettings = cardSettings;
191
+ }));
192
+ }
193
+ save(cards) {
194
+ const cardSettings = this.generateCardSettings(cards);
195
+ this.appfxCardSettings = this.mergeCardSettings(cardSettings);
196
+ this.containerStore.save(this.appfxCardSettings);
197
+ }
198
+ /**
199
+ * Generate Card Settings.
200
+ */
201
+ generateCardSettings(cards) {
202
+ return cards.map((card) => ({
203
+ id: card.id,
204
+ order: card.order,
205
+ hidden: card.hidden,
206
+ }));
207
+ }
208
+ /**
209
+ * If cardSettings are preset in the persistence store then update them with provided info and use them
210
+ * else add it to store if new card settings.
211
+ */
212
+ mergeCardSettings(cardSettings) {
213
+ const updatedCardSettings = this.appfxCardSettings.map((cardSetting) => {
214
+ const updatedCardSetting = cardSettings.find((setting) => setting.id === cardSetting.id);
215
+ return updatedCardSetting ?? cardSetting;
216
+ });
217
+ // get newly added cards
218
+ const newCardSettings = cardSettings.filter((cardSetting) => {
219
+ const alreadyUpdated = updatedCardSettings.find((updatedCardSetting) => updatedCardSetting.id === cardSetting.id);
220
+ return !alreadyUpdated;
221
+ });
222
+ // all cardsInfo's - existing with updated cardInfo's and newly added cardInfo's
223
+ return [...updatedCardSettings, ...newCardSettings];
224
+ }
225
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: PersistenceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
226
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: PersistenceService }); }
227
+ }
228
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: PersistenceService, decorators: [{
229
+ type: Injectable
230
+ }] });
231
+
232
+ /*
233
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
234
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
235
+ * This software is released under MIT license.
236
+ * The full license information can be found in LICENSE in the root directory of this project.
237
+ */
238
+ /**
239
+ * Keep track of the cards in the container with their properties like order, hidden etc.
240
+ * Takes care of updating store with the card preferences.
241
+ */
242
+ class ContainerService {
243
+ constructor(persistenceService) {
244
+ this.persistenceService = persistenceService;
245
+ this.containerCards = [];
246
+ }
247
+ /**
248
+ * Initialize container service by adding list of cards and persistence service instance.
249
+ */
250
+ initialize(cardContainer, cards) {
251
+ this.cardContainer = cardContainer;
252
+ // add unique cards
253
+ cards.forEach((card) => this.addCard(card));
254
+ }
255
+ /**
256
+ * Fetches card order, hidden properties from the persistence service and apply it to card.
257
+ * Filters hidden card, sorts cards according to order and remove duplicate order cards.
258
+ */
259
+ getCardsWithOrder() {
260
+ return this.persistenceService.retrieve().pipe(
261
+ // set card oder and hidden user preferences from store
262
+ map((cardSettings) => this.applySettingsToCards(cardSettings)),
263
+ // do not insert hidden cards
264
+ map((cardsWithSettings) => this.filterHiddenCards(cardsWithSettings)),
265
+ // sort cards in order to insert into container
266
+ map((visibleCards) => this.sortCardsByOrder(visibleCards)),
267
+ // remove duplicate order
268
+ map((sortedCards) => this.normalizeCardOrder(sortedCards)));
269
+ }
270
+ /**
271
+ * Fetches card order, hidden properties from the persistence service and apply it to card.
272
+ * if card is hidden before filters it accordingly so that container will not insert it.
273
+ */
274
+ getCardWithOrder(card) {
275
+ return this.persistenceService
276
+ .retrieve()
277
+ .pipe(map((cardSettings) => this.applyCardSettings(card, cardSettings)));
278
+ }
279
+ /**
280
+ * Toggles card hidden property and save updated settings in store.
281
+ */
282
+ toggleCardVisibility(cardId) {
283
+ this.containerCards = this.containerCards.map((containerCard) => {
284
+ if (containerCard.id === cardId) {
285
+ containerCard.hidden = !containerCard.hidden;
286
+ }
287
+ return containerCard;
288
+ });
289
+ return this.getCardById(cardId);
290
+ }
291
+ /**
292
+ * Moves the card from Drag Index to Drop Index
293
+ * by detaching card from view at drag Index and inserting it into Drop Index.
294
+ *
295
+ * Updates the order of the remaining cards once done.
296
+ */
297
+ moveCard(fromIndex, toIndex) {
298
+ // drag and drop on the same card position
299
+ if (fromIndex === toIndex) {
300
+ return;
301
+ }
302
+ // right to left
303
+ toIndex = fromIndex < toIndex ? toIndex : toIndex + 1;
304
+ const cardView = this.cardContainer.get(fromIndex);
305
+ if (cardView) {
306
+ this.cardContainer.detach(fromIndex);
307
+ this.cardContainer.insert(cardView, toIndex);
308
+ this.updateCardsOrder();
309
+ }
310
+ }
311
+ /**
312
+ * Removes card form the list of container cards.
313
+ */
314
+ removeCard(cardId) {
315
+ this.containerCards = this.containerCards.filter((card) => card.id !== cardId);
316
+ }
317
+ /**
318
+ * Update Card properties once inserted into container.
319
+ * View and order gets updated once card is available into container.
320
+ */
321
+ updateCard(card) {
322
+ this.containerCards = this.containerCards.map((containerCard) => {
323
+ return containerCard.id === card.id ? { ...containerCard, ...card } : containerCard;
324
+ });
325
+ }
326
+ /**
327
+ * Returns all cards inside container including hidden cards.
328
+ */
329
+ getContainerCards() {
330
+ return [...this.containerCards];
331
+ }
332
+ /**
333
+ * Returns number of visible cards in the container.
334
+ */
335
+ getVisibleCardsCount() {
336
+ return this.filterHiddenCards(this.containerCards).length;
337
+ }
338
+ /**
339
+ * Update the order on the cards after shuffling occurs new order is as per the index of cards in the view.
340
+ */
341
+ updateCardsOrder() {
342
+ this.containerCards = this.containerCards.map((card) => {
343
+ if (!card.hidden && card.view) {
344
+ const order = this.cardContainer.indexOf(card.view);
345
+ if (card.order !== order) {
346
+ card.order = order;
347
+ }
348
+ }
349
+ return card;
350
+ });
351
+ this.persistenceService.save(this.containerCards);
352
+ }
353
+ /**
354
+ * Returns container ViewRef
355
+ */
356
+ getCardContainer() {
357
+ return this.cardContainer;
358
+ }
359
+ /**
360
+ * Provides card by id if available
361
+ */
362
+ getCardById(cardId) {
363
+ return this.containerCards.find((containerCard) => containerCard.id === cardId);
364
+ }
365
+ /**
366
+ * provides order of the card in the container
367
+ */
368
+ getCardOrder(cardId) {
369
+ return this.getCardById(cardId)?.order ?? cardDefaults.order;
370
+ }
371
+ /**
372
+ * Adds card to the container list of cards of the container service.
373
+ * Container cards contains all the available cards within container visible as well as hidden.
374
+ */
375
+ addCard(card) {
376
+ if (this.getCardById(card.id)) {
377
+ throw new Error(`Card with id '${card.id}' already exist`);
378
+ }
379
+ this.containerCards = [...this.containerCards, card];
380
+ }
381
+ /**
382
+ * Updates each of the card settings properties like order, hidden.
383
+ */
384
+ applySettingsToCards(cardSettings) {
385
+ return this.containerCards.map((card) => this.applyCardSettings(card, cardSettings));
386
+ }
387
+ /**
388
+ * Updates card settings properties like order, hidden.
389
+ * If none available in the persistence store cardDefaults are used.
390
+ */
391
+ applyCardSettings(card, cardSettings) {
392
+ const cardSetting = cardSettings.find((setting) => setting.id === card.id);
393
+ card.order = cardSetting?.order ?? cardDefaults.order;
394
+ card.hidden = cardSetting?.hidden ?? cardDefaults.hidden;
395
+ return card;
396
+ }
397
+ /**
398
+ * Remove hidden cards
399
+ */
400
+ filterHiddenCards(cards) {
401
+ return cards.filter((card) => !card.hidden);
402
+ }
403
+ /**
404
+ * Sorts cards in ascending order
405
+ */
406
+ sortCardsByOrder(cards) {
407
+ return cards.sort((a, b) => {
408
+ return a.order !== undefined && b.order !== undefined ? a.order - b.order : 0;
409
+ });
410
+ }
411
+ /**
412
+ * Update order to remove duplicates.
413
+ * [0,1,1,2,3,3] -> [0,1,2,3,4,5]
414
+ */
415
+ normalizeCardOrder(cards) {
416
+ return cards.map((card, idx) => {
417
+ card.order = idx;
418
+ return card;
419
+ });
420
+ }
421
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ContainerService, deps: [{ token: PersistenceService }], target: i0.ɵɵFactoryTarget.Injectable }); }
422
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ContainerService }); }
423
+ }
424
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ContainerService, decorators: [{
425
+ type: Injectable
426
+ }], ctorParameters: () => [{ type: PersistenceService }] });
427
+
428
+ /*
429
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
430
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
431
+ * This software is released under MIT license.
432
+ * The full license information can be found in LICENSE in the root directory of this project.
433
+ */
434
+ /**
435
+ * Provides functionality to drag and drop cards with hermes drag drop directives.
436
+ */
437
+ class DragDropService {
438
+ constructor(containerService) {
439
+ this.containerService = containerService;
440
+ }
441
+ /**
442
+ * Saves the order of drag order to plate at the drop order later.
443
+ */
444
+ onDragStart(cardId) {
445
+ const dragOrder = this.containerService.getCardOrder(cardId);
446
+ if (dragOrder === cardDefaults.order) {
447
+ return;
448
+ }
449
+ this.dragOrder = dragOrder;
450
+ }
451
+ /**
452
+ * On drop move the cards from drag order to drop order.
453
+ */
454
+ onDragDrop(cardId) {
455
+ const dropOrder = this.containerService.getCardOrder(cardId);
456
+ if (dropOrder === cardDefaults.order) {
457
+ return;
458
+ }
459
+ this.containerService.moveCard(this.dragOrder, dropOrder);
460
+ }
461
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: DragDropService, deps: [{ token: ContainerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
462
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: DragDropService }); }
463
+ }
464
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: DragDropService, decorators: [{
465
+ type: Injectable
466
+ }], ctorParameters: () => [{ type: ContainerService }] });
467
+
468
+ /*
469
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
470
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
471
+ * This software is released under MIT license.
472
+ * The full license information can be found in LICENSE in the root directory of this project.
473
+ */
474
+ /**
475
+ * Provides functionality to drag and drop cards with keyboard interaction
476
+ */
477
+ class A11yService {
478
+ constructor(containerService) {
479
+ this.containerService = containerService;
480
+ this.a11yDragOrder = cardDefaults.order;
481
+ this.a11yDropOrder = cardDefaults.order;
482
+ }
483
+ /**
484
+ * Selects the card on press of Enter Key
485
+ * If it is first enter on the card container - updates the drag order
486
+ * Else moves the card from drag order to drop order
487
+ */
488
+ selectCard(cardId) {
489
+ const cardOrder = this.containerService.getCardOrder(cardId);
490
+ if (cardOrder === cardDefaults.order) {
491
+ return;
492
+ }
493
+ if (this.a11yMode) {
494
+ // if already in the drag card is already selected move it to the new drop position
495
+ this.containerService.moveCard(this.a11yDragOrder, this.a11yDropOrder);
496
+ // reset
497
+ this.getOutOfA11yMode();
498
+ }
499
+ else {
500
+ this.a11yDragOrder = cardOrder;
501
+ this.a11yDropOrder = cardOrder;
502
+ this.a11yMode = true;
503
+ }
504
+ }
505
+ /**
506
+ * Moves the drop position on Arrow Keys
507
+ * Updates the drop placeholder according to the arrow key direction
508
+ */
509
+ moveDropPosition(arrowKey) {
510
+ if (!this.a11yMode) {
511
+ return;
512
+ }
513
+ // move position of drop card
514
+ // if leftArrowKey then to previous card
515
+ if (arrowKey === a11ykeys.arrowLeft) {
516
+ this.a11yDropOrder -= 1;
517
+ }
518
+ // if rightArrowKey then to next card
519
+ if (arrowKey === a11ykeys.arrowRight) {
520
+ this.a11yDropOrder += 1;
521
+ }
522
+ // if drop card goes before first card, move to last card
523
+ this.a11yDropOrder = this.a11yDropOrder < 0 ? this.containerService.getVisibleCardsCount() - 1 : this.a11yDropOrder;
524
+ // if drop card goes after last card, move to first card
525
+ this.a11yDropOrder = this.a11yDropOrder > this.containerService.getVisibleCardsCount() - 1 ? 0 : this.a11yDropOrder;
526
+ }
527
+ /**
528
+ * Get out of the Accessibility mode
529
+ */
530
+ getOutOfA11yMode() {
531
+ this.a11yMode = false;
532
+ this.a11yDropOrder = cardDefaults.order;
533
+ this.a11yDragOrder = cardDefaults.order;
534
+ }
535
+ /**
536
+ * checks if cardOrder is equal to a11yDragOrder
537
+ */
538
+ isSelected(cardId) {
539
+ const cardOrder = this.containerService.getCardOrder(cardId);
540
+ return cardOrder !== cardDefaults.order && this.a11yDragOrder === cardOrder;
541
+ }
542
+ /**
543
+ * checks if cardOrder is equal to a11yDropOrder
544
+ */
545
+ isDraggableOver(cardId) {
546
+ const cardOrder = this.containerService.getCardOrder(cardId);
547
+ return cardOrder !== cardDefaults.order && this.a11yDropOrder === cardOrder;
548
+ }
549
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: A11yService, deps: [{ token: ContainerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
550
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: A11yService }); }
551
+ }
552
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: A11yService, decorators: [{
553
+ type: Injectable
554
+ }], ctorParameters: () => [{ type: ContainerService }] });
555
+
556
+ /*
557
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
558
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
559
+ * This software is released under MIT license.
560
+ * The full license information can be found in LICENSE in the root directory of this project.
561
+ */
562
+ /**
563
+ * Appfx Container Card
564
+ * Handles user interactions like drag and drop and a11y support for same through keyboard events
565
+ *
566
+ * Used internally in Appfx Card Container @see(AppfxCardContainer)
567
+ */
568
+ class AppfxCardComponent {
569
+ constructor(el, groupService, layoutService, dragDropService, a11yService, changeDetector, zoomLevelService) {
570
+ this.el = el;
571
+ this.groupService = groupService;
572
+ this.layoutService = layoutService;
573
+ this.dragDropService = dragDropService;
574
+ this.a11yService = a11yService;
575
+ this.changeDetector = changeDetector;
576
+ this.zoomLevelService = zoomLevelService;
577
+ this.dragDropEnabled = true;
578
+ this.subscriptions = new Subscription();
579
+ ClarityIcons.addIcons(dragHandleIcon);
580
+ }
581
+ get isSelected() {
582
+ return this.a11yService.isSelected(this.card.id);
583
+ }
584
+ get isDraggableOver() {
585
+ return this.a11yService.isDraggableOver(this.card.id);
586
+ }
587
+ get cdkDropGroup() {
588
+ return this.groupService.getGroupItems(this.dropGroup);
589
+ }
590
+ ngOnInit() {
591
+ if (!this.card.id) {
592
+ throw new Error('Missing Input property for card - id');
593
+ }
594
+ this.loadComponent();
595
+ if (this.zoomLevelService) {
596
+ this.currentUnitWidth = this.card.unitWidth;
597
+ this.currentUnitHeight = this.card.unitHeight;
598
+ this.subscriptions.add(this.zoomLevelService.onChange
599
+ .pipe(map((data) => {
600
+ if (!!this.card.cardZoomSizes && !!this.card.cardZoomSizes[data]) {
601
+ return this.card.cardZoomSizes[data];
602
+ }
603
+ return {
604
+ unitHeight: this.card.unitHeight,
605
+ unitWidth: this.card.unitWidth,
606
+ };
607
+ }), filter(size => {
608
+ return size.unitWidth !== this.currentUnitWidth || size.unitHeight !== this.currentUnitHeight;
609
+ }))
610
+ .subscribe(size => {
611
+ this.currentUnitWidth = size.unitWidth;
612
+ this.currentUnitHeight = size.unitHeight;
613
+ this.layoutService.updateCardSize(this.el.nativeElement, this.currentUnitWidth, this.currentUnitHeight);
614
+ this.changeDetector.detectChanges();
615
+ }));
616
+ }
617
+ }
618
+ ngAfterViewInit() {
619
+ this.layoutService.updateCardSize(this.el.nativeElement, this.card.unitWidth, this.card.unitHeight);
620
+ this.groupService.addGroupItem(this.dropGroup, this.dropList);
621
+ this.changeDetector.detectChanges();
622
+ }
623
+ ngOnDestroy() {
624
+ this.groupService.removeGroupItem(this.dropGroup, this.dropList);
625
+ this.subscriptions.unsubscribe();
626
+ }
627
+ onDragStart() {
628
+ this.dragDropService.onDragStart(this.card.id);
629
+ }
630
+ onDrop() {
631
+ this.dragDropService.onDragDrop(this.card.id);
632
+ }
633
+ selectCard(event) {
634
+ this.eventCheck(event);
635
+ this.a11yService.selectCard(this.card.id);
636
+ }
637
+ moveDropPositionBackwards(event) {
638
+ this.eventCheck(event);
639
+ this.a11yService.moveDropPosition(a11ykeys.arrowLeft);
640
+ }
641
+ moveDropPositionForwards(event) {
642
+ this.eventCheck(event);
643
+ this.a11yService.moveDropPosition(a11ykeys.arrowRight);
644
+ }
645
+ onDropHandleKeyUp(event) {
646
+ event.preventDefault();
647
+ event.stopImmediatePropagation();
648
+ this.cdkDragElementRefs?.nativeElement.focus();
649
+ this.a11yService.selectCard(this.card.id);
650
+ }
651
+ loadComponent() {
652
+ if (!this.card.componentClass) {
653
+ return;
654
+ }
655
+ this.cardViewContainer.clear();
656
+ const cr = this.cardViewContainer.createComponent(this.card.componentClass);
657
+ if (this.card.context) {
658
+ Object.entries(this.card.context).forEach(([key, value]) => {
659
+ cr.instance[key] = value;
660
+ });
661
+ }
662
+ }
663
+ eventCheck(event) {
664
+ if (event.target !== event.currentTarget) {
665
+ return;
666
+ }
667
+ event.preventDefault();
668
+ event.stopImmediatePropagation();
669
+ }
670
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: AppfxCardComponent, deps: [{ token: i0.ElementRef }, { token: i1.DragAndDropGroupService }, { token: LayoutService }, { token: DragDropService }, { token: A11yService }, { token: i0.ChangeDetectorRef }, { token: i5.ZoomLevelService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
671
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.22", type: AppfxCardComponent, isStandalone: false, selector: "appfx-card", inputs: { card: "card", dropGroup: "dropGroup" }, providers: [
672
+ AppfxTranslateService,
673
+ {
674
+ provide: appfxMissingTranslationToken,
675
+ useValue: defaultMissingTranslationHandler,
676
+ },
677
+ {
678
+ provide: appfxTranslationsToken,
679
+ useValue: translations,
680
+ },
681
+ ], viewQueries: [{ propertyName: "dropList", first: true, predicate: CdkDropList, descendants: true, static: true }, { propertyName: "cdkDragElementRefs", first: true, predicate: CdkDrag, descendants: true, read: ElementRef }, { propertyName: "cardViewContainer", first: true, predicate: ["cardViewContainer"], 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\r\n<div\r\n class=\"appfx-card droppable\"\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n cdkDropListAutoScrollStep=\"6\"\r\n [cdkDropListConnectedTo]=\"cdkDropGroup\"\r\n [class.draggable-over]=\"isDraggableOver\"\r\n (cdkDropListDropped)=\"onDrop()\"\r\n [@cardAnimation]\r\n>\r\n <div\r\n tabindex=\"0\"\r\n class=\"draggable\"\r\n [class.selected-card]=\"isSelected\"\r\n cdkDrag\r\n cdkDragPreviewContainer=\"parent\"\r\n (cdkDragStarted)=\"onDragStart()\"\r\n (keyup.enter)=\"selectCard($event)\"\r\n (keyup.arrowleft)=\"moveDropPositionBackwards($event)\"\r\n (keyup.arrowright)=\"moveDropPositionForwards($event)\"\r\n >\r\n <div class=\"custom-placeholder\" *cdkDragPlaceholder></div>\r\n <button\r\n class=\"drag-handler-button btn btn-icon\"\r\n [attr.aria-label]=\"'cardDragHandle' | translate\"\r\n aria-describedby=\"card-drag-handler-instructions\"\r\n (keyup.enter)=\"onDropHandleKeyUp($event)\"\r\n (keyup.space)=\"onDropHandleKeyUp($event)\"\r\n >\r\n <span class=\"hermes-sr-only\" id=\"card-drag-handler-instructions\">\r\n {{ 'cardDragHandleDescription' | translate }}\r\n </span>\r\n <hermes-icon\r\n class=\"drag-handle-icon\"\r\n shape=\"drag-handle\"\r\n size=\"32\"\r\n cdkDragHandle\r\n [cdkDragHandleDisabled]=\"!dragDropEnabled\"\r\n [hidden]=\"!dragDropEnabled\"\r\n >\r\n </hermes-icon>\r\n </button>\r\n <ng-template #cardViewContainer> </ng-template>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.draggable{margin:0 7px;position:relative}.draggable .drag-handler-button{position:absolute;right:0;border:none;margin:unset;z-index:1}.draggable .drag-handler-button .drag-handle-icon{position:absolute;right:0;color:var(--hermes-global-color-construction-400);cursor:grab}.draggable .drag-handler-button .drag-handle-icon:hover{color:var(--hermes-global-color-lavender-400)}.draggable ::ng-deep .card{margin-top:0}.draggable ::ng-deep .card-header{border-bottom:none}::ng-deep .draggable.cdk-drag-preview .card{box-shadow:2px 2px 10px 0 var(--hermes-global-color-cool-gray-500)}::ng-deep .draggable.cdk-drag-preview .draggable{margin:0}::ng-deep .draggable.cdk-drag-preview .drag-handle-icon{pointer-events:none;cursor:grabbing}::ng-deep .draggable.cdk-drag-preview .drag-handle-icon :focus{color:var(--hermes-global-color-lavender-400)}.droppable{margin:7px 0;border:2px solid transparent}.droppable.cdk-drop-list-receiving{border-right:2px dashed var(--hermes-global-color-lavender-100)}.droppable.cdk-drop-list-dragging{border-right:2px solid var(--hermes-global-color-lavender-300);position:relative}.droppable.cdk-drop-list-dragging:before{content:\"\\25cf\";color:var(--hermes-global-color-lavender-300);position:absolute;right:-5px;top:-10px}.droppable.cdk-drop-list-dragging .draggable:not(.cdk-drag-placeholder,.cdk-drag-preview){transform:unset!important}.droppable.draggable-over{border-right:2px solid var(--hermes-global-color-lavender-300);position:relative}.droppable.draggable-over:before{content:\"\\25cf\";color:var(--hermes-global-color-lavender-300);position:absolute;right:-5px;top:-10px}.custom-placeholder{height:0;width:0}.selected-card{opacity:.4;transition:.2s linear all}.selected-card.draggable:focus{outline:none}.selected-card.draggable:focus .card{box-shadow:none}\n"], dependencies: [{ kind: "component", type: i6.HermesIcon, selector: "hermes-icon, hermes-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }, { kind: "directive", type: i7.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i7.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i7.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], animations: [
682
+ trigger('cardAnimation', [
683
+ transition(':enter', [
684
+ style({ opacity: 0, transform: 'translateX(-100%)' }),
685
+ animate('200ms ease-in', style({ opacity: 1, transform: 'translateX(0%)' })),
686
+ ]),
687
+ transition(':leave', [animate('200ms ease-in', style({ opacity: 0, transform: 'translateX(0%)' }))]),
688
+ ]),
689
+ ] }); }
690
+ }
691
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: AppfxCardComponent, decorators: [{
692
+ type: Component,
693
+ args: [{ selector: 'appfx-card', standalone: false, providers: [
694
+ AppfxTranslateService,
695
+ {
696
+ provide: appfxMissingTranslationToken,
697
+ useValue: defaultMissingTranslationHandler,
698
+ },
699
+ {
700
+ provide: appfxTranslationsToken,
701
+ useValue: translations,
702
+ },
703
+ ], animations: [
704
+ trigger('cardAnimation', [
705
+ transition(':enter', [
706
+ style({ opacity: 0, transform: 'translateX(-100%)' }),
707
+ animate('200ms ease-in', style({ opacity: 1, transform: 'translateX(0%)' })),
708
+ ]),
709
+ transition(':leave', [animate('200ms ease-in', style({ opacity: 0, transform: 'translateX(0%)' }))]),
710
+ ]),
711
+ ], 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<div\r\n class=\"appfx-card droppable\"\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n cdkDropListAutoScrollStep=\"6\"\r\n [cdkDropListConnectedTo]=\"cdkDropGroup\"\r\n [class.draggable-over]=\"isDraggableOver\"\r\n (cdkDropListDropped)=\"onDrop()\"\r\n [@cardAnimation]\r\n>\r\n <div\r\n tabindex=\"0\"\r\n class=\"draggable\"\r\n [class.selected-card]=\"isSelected\"\r\n cdkDrag\r\n cdkDragPreviewContainer=\"parent\"\r\n (cdkDragStarted)=\"onDragStart()\"\r\n (keyup.enter)=\"selectCard($event)\"\r\n (keyup.arrowleft)=\"moveDropPositionBackwards($event)\"\r\n (keyup.arrowright)=\"moveDropPositionForwards($event)\"\r\n >\r\n <div class=\"custom-placeholder\" *cdkDragPlaceholder></div>\r\n <button\r\n class=\"drag-handler-button btn btn-icon\"\r\n [attr.aria-label]=\"'cardDragHandle' | translate\"\r\n aria-describedby=\"card-drag-handler-instructions\"\r\n (keyup.enter)=\"onDropHandleKeyUp($event)\"\r\n (keyup.space)=\"onDropHandleKeyUp($event)\"\r\n >\r\n <span class=\"hermes-sr-only\" id=\"card-drag-handler-instructions\">\r\n {{ 'cardDragHandleDescription' | translate }}\r\n </span>\r\n <hermes-icon\r\n class=\"drag-handle-icon\"\r\n shape=\"drag-handle\"\r\n size=\"32\"\r\n cdkDragHandle\r\n [cdkDragHandleDisabled]=\"!dragDropEnabled\"\r\n [hidden]=\"!dragDropEnabled\"\r\n >\r\n </hermes-icon>\r\n </button>\r\n <ng-template #cardViewContainer> </ng-template>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.draggable{margin:0 7px;position:relative}.draggable .drag-handler-button{position:absolute;right:0;border:none;margin:unset;z-index:1}.draggable .drag-handler-button .drag-handle-icon{position:absolute;right:0;color:var(--hermes-global-color-construction-400);cursor:grab}.draggable .drag-handler-button .drag-handle-icon:hover{color:var(--hermes-global-color-lavender-400)}.draggable ::ng-deep .card{margin-top:0}.draggable ::ng-deep .card-header{border-bottom:none}::ng-deep .draggable.cdk-drag-preview .card{box-shadow:2px 2px 10px 0 var(--hermes-global-color-cool-gray-500)}::ng-deep .draggable.cdk-drag-preview .draggable{margin:0}::ng-deep .draggable.cdk-drag-preview .drag-handle-icon{pointer-events:none;cursor:grabbing}::ng-deep .draggable.cdk-drag-preview .drag-handle-icon :focus{color:var(--hermes-global-color-lavender-400)}.droppable{margin:7px 0;border:2px solid transparent}.droppable.cdk-drop-list-receiving{border-right:2px dashed var(--hermes-global-color-lavender-100)}.droppable.cdk-drop-list-dragging{border-right:2px solid var(--hermes-global-color-lavender-300);position:relative}.droppable.cdk-drop-list-dragging:before{content:\"\\25cf\";color:var(--hermes-global-color-lavender-300);position:absolute;right:-5px;top:-10px}.droppable.cdk-drop-list-dragging .draggable:not(.cdk-drag-placeholder,.cdk-drag-preview){transform:unset!important}.droppable.draggable-over{border-right:2px solid var(--hermes-global-color-lavender-300);position:relative}.droppable.draggable-over:before{content:\"\\25cf\";color:var(--hermes-global-color-lavender-300);position:absolute;right:-5px;top:-10px}.custom-placeholder{height:0;width:0}.selected-card{opacity:.4;transition:.2s linear all}.selected-card.draggable:focus{outline:none}.selected-card.draggable:focus .card{box-shadow:none}\n"] }]
712
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.DragAndDropGroupService }, { type: LayoutService }, { type: DragDropService }, { type: A11yService }, { type: i0.ChangeDetectorRef }, { type: i5.ZoomLevelService, decorators: [{
713
+ type: Optional
714
+ }] }], propDecorators: { card: [{
715
+ type: Input
716
+ }], dropGroup: [{
717
+ type: Input
718
+ }], dropList: [{
719
+ type: ViewChild,
720
+ args: [CdkDropList, { static: true }]
721
+ }], cdkDragElementRefs: [{
722
+ type: ViewChild,
723
+ args: [CdkDrag, { read: ElementRef }]
724
+ }], cardViewContainer: [{
725
+ type: ViewChild,
726
+ args: ['cardViewContainer', { read: ViewContainerRef, static: true }]
727
+ }] } });
728
+
729
+ /*
730
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
731
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
732
+ * This software is released under MIT license.
733
+ * The full license information can be found in LICENSE in the root directory of this project.
734
+ */
735
+ /**
736
+ * Handles storing and retrieving of preferences of the container
737
+ * like order, hidden properties of card
738
+ */
739
+ class AppfxCardContainerStore {
740
+ constructor() {
741
+ this.localStorage = this.getLocalStorage(window);
742
+ }
743
+ getLocalStore(key) {
744
+ const retrieve = () => {
745
+ return this.getData(key);
746
+ };
747
+ const save = (cards) => {
748
+ this.setData(key, cards);
749
+ };
750
+ return {
751
+ retrieve,
752
+ save,
753
+ };
754
+ }
755
+ getLocalStorage(window) {
756
+ try {
757
+ if (window.localStorage) {
758
+ return window.localStorage;
759
+ }
760
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
761
+ }
762
+ catch (ignored) {
763
+ // ignored
764
+ }
765
+ return undefined;
766
+ }
767
+ /**
768
+ * Retrieving data from the local storage.
769
+ * @param key the key to the local storage data
770
+ * @returns the object being saved in the local storage,
771
+ * Note that the stored data is converted through angular.fromJson()
772
+ */
773
+ getData(key) {
774
+ if (this.localStorage) {
775
+ let data = this.localStorage.getItem(key);
776
+ if (data) {
777
+ data = JSON.parse(data);
778
+ return of(data);
779
+ }
780
+ }
781
+ return of([]);
782
+ }
783
+ /**
784
+ * Setting data into the local storage.
785
+ * @param key the key to the local storage data
786
+ * @param data to be stored
787
+ */
788
+ setData(key, cards) {
789
+ const data = JSON.stringify(cards);
790
+ if (this.localStorage) {
791
+ try {
792
+ this.localStorage.setItem(key, data);
793
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
794
+ }
795
+ catch (ignored) {
796
+ // ignored
797
+ }
798
+ }
799
+ }
800
+ }
801
+
802
+ /*
803
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
804
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
805
+ * This software is released under MIT license.
806
+ * The full license information can be found in LICENSE in the root directory of this project.
807
+ */
808
+ // sort function to display cards by sorted titles
809
+ const sortCardsByTitleFn = (a, b) => {
810
+ if (a.title && b.title) {
811
+ return a.title.localeCompare(b.title);
812
+ }
813
+ return 0;
814
+ };
815
+ /**
816
+ * Component to display container settings menu to show/hide cards.
817
+ * Shows card list alphabetically according to title with checkboxes.
818
+ */
819
+ class AppfxCardContainerSettingsComponent {
820
+ constructor() {
821
+ /**
822
+ * Event Emitter when user wants to show/hide card.
823
+ */
824
+ this.toggleCardVisibility = new EventEmitter();
825
+ ClarityIcons.addIcons(cogIcon);
826
+ }
827
+ /**
828
+ * Cards list to display in settings dropdown menu.
829
+ */
830
+ set containerCards(cards) {
831
+ this.cards = cards.sort(sortCardsByTitleFn);
832
+ }
833
+ /**
834
+ * Show/hide Card
835
+ */
836
+ toggleShowHide(card) {
837
+ if (card.canHide !== false) {
838
+ this.toggleCardVisibility.emit(card.id);
839
+ }
840
+ }
841
+ trackByFn(index, item) {
842
+ return item.id;
843
+ }
844
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: AppfxCardContainerSettingsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
845
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.22", type: AppfxCardContainerSettingsComponent, isStandalone: false, selector: "appfx-card-container-settings", inputs: { containerCards: "containerCards" }, outputs: { toggleCardVisibility: "toggleCardVisibility" }, providers: [
846
+ AppfxTranslateService,
847
+ {
848
+ provide: appfxMissingTranslationToken,
849
+ useValue: defaultMissingTranslationHandler,
850
+ },
851
+ {
852
+ provide: appfxTranslationsToken,
853
+ useValue: translations,
854
+ },
855
+ ], 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<hermes-dropdown [hermesCloseMenuOnItemClick]=\"false\">\r\n <button class=\"settings-btn\" hermesDropdownTrigger>\r\n <hermes-icon shape=\"cog\" size=\"24\" data-test-id=\"toggleContainerSettingsDropDown\"> </hermes-icon>\r\n <span class=\"hermes-sr-only\">\r\n {{ 'settingsCog' | translate }}\r\n </span>\r\n </button>\r\n <hermes-dropdown-menu class=\"container-settings\" hermesPosition=\"bottom-right\" *hermesIfOpen>\r\n <div *ngFor=\"let card of cards; trackBy: trackByFn\" hermesDropdownItem>\r\n <hermes-checkbox-wrapper\r\n [class.disabled-item]=\"card.canHide === false\"\r\n (keydown.space)=\"toggleShowHide(card)\"\r\n (keydown.enter)=\"toggleShowHide(card)\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n hermesCheckbox\r\n name=\"cards\"\r\n (change)=\"toggleShowHide(card)\"\r\n [checked]=\"!card.hidden\"\r\n [disabled]=\"card.canHide === false\"\r\n tabindex=\"-1\"\r\n />\r\n <label [title]=\"card.title\" hermes-text=\"truncate\">{{ card.title }}</label>\r\n </hermes-checkbox-wrapper>\r\n </div>\r\n </hermes-dropdown-menu>\r\n</hermes-dropdown>\r\n", styles: [".settings-btn{padding:0}.container-settings{margin-top:7px;max-height:350px;overflow-y:auto}.container-settings .disabled-item input[type=checkbox]+label:before{background-color:#ccc}.container-settings .disabled-item label{color:#ccc;cursor:not-allowed}.container-settings .container-settings-list{max-height:350px;overflow-y:auto}.container-settings .dropdown-item .hermes-checkbox-wrapper{padding:0 var(--hermes-global-space-3)}.container-settings .dropdown-item .hermes-checkbox-wrapper label.hermes-control-label{padding-left:18px;padding-right:18px;max-width:250px;flex:1 1 100%}hermes-dropdown .settings-btn{margin-top:10px;padding-right:0}:host ::ng-deep .dropdown-menu .dropdown-item{flex:1 0;padding:0}\n"], dependencies: [{ kind: "directive", type: i1$1.HermesControlLabel, selector: "label", inputs: ["id", "for"] }, { kind: "component", type: i6.HermesIcon, selector: "hermes-icon, hermes-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }, { kind: "directive", type: i3.HermesCheckbox, selector: "[hermesCheckbox],[hermesToggle]" }, { kind: "component", type: i3.HermesCheckboxWrapper, selector: "hermes-checkbox-wrapper,hermes-toggle-wrapper" }, { kind: "component", type: i4.HermesDropdown, selector: "hermes-dropdown", inputs: ["hermesCloseMenuOnItemClick"] }, { kind: "component", type: i4.HermesDropdownMenu, selector: "hermes-dropdown-menu", inputs: ["hermesPosition"] }, { kind: "directive", type: i4.HermesDropdownTrigger, selector: "[hermesDropdownTrigger],[hermesDropdownToggle]" }, { kind: "directive", type: i4.HermesDropdownItem, selector: "[hermesDropdownItem]", inputs: ["hermesDisabled", "id"] }, { kind: "directive", type: i5$1.HermesIfOpen, selector: "[hermesIfOpen]", inputs: ["hermesIfOpen"], outputs: ["hermesIfOpenChange"] }, { kind: "directive", type: i6$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
856
+ }
857
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: AppfxCardContainerSettingsComponent, decorators: [{
858
+ type: Component,
859
+ args: [{ selector: 'appfx-card-container-settings', standalone: false, providers: [
860
+ AppfxTranslateService,
861
+ {
862
+ provide: appfxMissingTranslationToken,
863
+ useValue: defaultMissingTranslationHandler,
864
+ },
865
+ {
866
+ provide: appfxTranslationsToken,
867
+ useValue: translations,
868
+ },
869
+ ], 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<hermes-dropdown [hermesCloseMenuOnItemClick]=\"false\">\r\n <button class=\"settings-btn\" hermesDropdownTrigger>\r\n <hermes-icon shape=\"cog\" size=\"24\" data-test-id=\"toggleContainerSettingsDropDown\"> </hermes-icon>\r\n <span class=\"hermes-sr-only\">\r\n {{ 'settingsCog' | translate }}\r\n </span>\r\n </button>\r\n <hermes-dropdown-menu class=\"container-settings\" hermesPosition=\"bottom-right\" *hermesIfOpen>\r\n <div *ngFor=\"let card of cards; trackBy: trackByFn\" hermesDropdownItem>\r\n <hermes-checkbox-wrapper\r\n [class.disabled-item]=\"card.canHide === false\"\r\n (keydown.space)=\"toggleShowHide(card)\"\r\n (keydown.enter)=\"toggleShowHide(card)\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n hermesCheckbox\r\n name=\"cards\"\r\n (change)=\"toggleShowHide(card)\"\r\n [checked]=\"!card.hidden\"\r\n [disabled]=\"card.canHide === false\"\r\n tabindex=\"-1\"\r\n />\r\n <label [title]=\"card.title\" hermes-text=\"truncate\">{{ card.title }}</label>\r\n </hermes-checkbox-wrapper>\r\n </div>\r\n </hermes-dropdown-menu>\r\n</hermes-dropdown>\r\n", styles: [".settings-btn{padding:0}.container-settings{margin-top:7px;max-height:350px;overflow-y:auto}.container-settings .disabled-item input[type=checkbox]+label:before{background-color:#ccc}.container-settings .disabled-item label{color:#ccc;cursor:not-allowed}.container-settings .container-settings-list{max-height:350px;overflow-y:auto}.container-settings .dropdown-item .hermes-checkbox-wrapper{padding:0 var(--hermes-global-space-3)}.container-settings .dropdown-item .hermes-checkbox-wrapper label.hermes-control-label{padding-left:18px;padding-right:18px;max-width:250px;flex:1 1 100%}hermes-dropdown .settings-btn{margin-top:10px;padding-right:0}:host ::ng-deep .dropdown-menu .dropdown-item{flex:1 0;padding:0}\n"] }]
870
+ }], ctorParameters: () => [], propDecorators: { toggleCardVisibility: [{
871
+ type: Output
872
+ }], containerCards: [{
873
+ type: Input
874
+ }] } });
875
+
876
+ /*
877
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
878
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
879
+ * This software is released under MIT license.
880
+ * The full license information can be found in LICENSE in the root directory of this project.
881
+ */
882
+ /**
883
+ * Appfx Card Container
884
+ *
885
+ * Provides container for cards with below functionalities
886
+ * - Dynamic card insertion and removal
887
+ * - Show/Hide cards through settings menu
888
+ * - Drag an Drop Cards to change order
889
+ * - Keyboard a11y events handling
890
+ * - Card order and hidden property persistence
891
+ *
892
+ * @Usages
893
+ * <appfx-card-container
894
+ * [containerId]="example-container"
895
+ * [cards]="container cards"
896
+ * [persistenceStore]="AppfxContainerPersistenceStore"> // optional if none provided local storage is used
897
+ * </<appfx-card-container>
898
+ */
899
+ class AppfxCardContainerComponent {
900
+ constructor(containerService, persistenceService, iterableDiffers) {
901
+ this.containerService = containerService;
902
+ this.persistenceService = persistenceService;
903
+ this.iterableDiffers = iterableDiffers;
904
+ this.cards = [];
905
+ this.showCardContainerSettings = true;
906
+ this.dragDropEnabled = true;
907
+ this.containerCards = [];
908
+ // iterable differ to track added/removed cards
909
+ this.differ = iterableDiffers.find(this.cards).create(this.trackByFn);
910
+ }
911
+ ngOnInit() {
912
+ if (!this.containerId) {
913
+ throw new Error('Missing Input property - containerId');
914
+ }
915
+ this.initialize();
916
+ }
917
+ ngDoCheck() {
918
+ const changes = this.differ.diff(this.cards);
919
+ if (changes) {
920
+ // insert card into container
921
+ changes.forEachAddedItem((record) => this.addDynamicCard(record.item));
922
+ // remove card from container
923
+ changes.forEachRemovedItem((record) => this.removeCardFromContainer(record.item));
924
+ }
925
+ }
926
+ onToggleCardVisibility(cardId) {
927
+ const card = this.containerService.toggleCardVisibility(cardId);
928
+ // if card is no more inside container
929
+ if (!card) {
930
+ return;
931
+ }
932
+ // remove card from container view but not from available list of cards
933
+ if (card.hidden) {
934
+ this.removeCardFromContainer(card, true);
935
+ this.containerService.updateCardsOrder();
936
+ this.updateContainerCards();
937
+ return;
938
+ }
939
+ // get card order, hidden property from store then update hidden to false and insert card into container
940
+ this.containerService
941
+ .getCardWithOrder(card)
942
+ .pipe(take(1), map((cardWithOrder) => ({
943
+ ...cardWithOrder,
944
+ hidden: false,
945
+ })), tap((cardWithOrder) => {
946
+ this.insertCardToContainer(cardWithOrder);
947
+ this.containerService.updateCardsOrder();
948
+ this.updateContainerCards();
949
+ }))
950
+ .subscribe();
951
+ }
952
+ initialize() {
953
+ // initialize persistence store service with provided or local store
954
+ this.persistenceService.initialize(this.persistenceStore || new AppfxCardContainerStore().getLocalStore(this.containerId));
955
+ // initialize container service
956
+ this.containerService.initialize(this.cardContainer, this.cards);
957
+ // get cards with order from store and accordingly insert into container
958
+ this.containerService
959
+ .getCardsWithOrder()
960
+ .pipe(take(1), tap((cards) => {
961
+ cards.forEach((card) => this.insertCardToContainer(card));
962
+ this.containerService.updateCardsOrder();
963
+ this.updateContainerCards();
964
+ }))
965
+ .subscribe();
966
+ }
967
+ addDynamicCard(card) {
968
+ if (this.containerService.getCardById(card.id)) {
969
+ return;
970
+ }
971
+ this.containerService.addCard(card); // add card to the list of container cards
972
+ this.updateContainerCards(); // update container list cards
973
+ // get order, hidden property from store and accordingly insert card into container
974
+ this.containerService
975
+ .getCardWithOrder(card)
976
+ .pipe(take(1), filter((cardWithOrder) => !cardWithOrder.hidden), tap((cardWithOrder) => {
977
+ this.insertCardToContainer(cardWithOrder);
978
+ this.containerService.updateCardsOrder();
979
+ }))
980
+ .subscribe();
981
+ }
982
+ insertCardToContainer(card) {
983
+ const containerCard = this.containerService.getCardById(card.id);
984
+ if (containerCard) {
985
+ // check if card is currently in ViewContainer angular returns -1 if card is not inside container
986
+ const index = this.cardContainer.indexOf(containerCard.view);
987
+ if (index !== -1) {
988
+ console.warn('Container Card already visualized, id = ' + card.id);
989
+ return;
990
+ }
991
+ }
992
+ const numCards = this.cardContainer.length;
993
+ // if order of card is out of current container cards insert card in end
994
+ card.order = card.order < 0 || card.order > numCards ? numCards : card.order;
995
+ const cr = this.cardContainer.createComponent(AppfxCardComponent, { index: card.order });
996
+ cr.instance.card = card; // set input properties
997
+ cr.instance.dropGroup = this.containerId; // card drag and drop should happen inside this container only
998
+ cr.instance.dragDropEnabled = this.dragDropEnabled;
999
+ // set view to retrieve order of card from view to use later
1000
+ card.view = this.cardContainer.get(card.order);
1001
+ this.containerService.updateCard(card);
1002
+ }
1003
+ removeCardFromContainer(card, hideOnly = false) {
1004
+ const containerCard = this.containerService.getCardById(card.id);
1005
+ if (!containerCard) {
1006
+ return;
1007
+ }
1008
+ // check if card is currently in ViewContainer angular returns -1 if card is not inside container
1009
+ const index = this.cardContainer.indexOf(containerCard.view);
1010
+ if (index !== -1) {
1011
+ this.cardContainer.remove(index);
1012
+ }
1013
+ // remove from list of available cards if its not hidden or card view is not available
1014
+ if (!hideOnly || !containerCard.view) {
1015
+ this.containerService.removeCard(containerCard.id);
1016
+ this.updateContainerCards();
1017
+ }
1018
+ }
1019
+ updateContainerCards() {
1020
+ this.containerCards = [...this.containerService.getContainerCards()];
1021
+ }
1022
+ trackByFn(index, item) {
1023
+ return item.id;
1024
+ }
1025
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: AppfxCardContainerComponent, deps: [{ token: ContainerService }, { token: PersistenceService }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Component }); }
1026
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.22", type: AppfxCardContainerComponent, isStandalone: false, selector: "appfx-card-container", inputs: { containerId: "containerId", cards: "cards", persistenceStore: "persistenceStore", showCardContainerSettings: "showCardContainerSettings", dragDropEnabled: "dragDropEnabled" }, providers: [A11yService, ContainerService, DragDropService, LayoutService, PersistenceService], viewQueries: [{ propertyName: "cardContainer", first: true, predicate: ["cardContainer"], 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=\"content-container hermes-flex-row\">\r\n <div class=\"card-container hermes-flex-grow-1\">\r\n <ng-template #cardContainer> </ng-template>\r\n </div>\r\n <appfx-card-container-settings\r\n *ngIf=\"showCardContainerSettings\"\r\n [containerCards]=\"containerCards\"\r\n (toggleCardVisibility)=\"onToggleCardVisibility($event)\"\r\n ></appfx-card-container-settings>\r\n</div>\r\n", styles: [".card-container{display:flex;flex-wrap:wrap;margin:auto -5px}\n"], dependencies: [{ kind: "directive", type: i6$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: AppfxCardContainerSettingsComponent, selector: "appfx-card-container-settings", inputs: ["containerCards"], outputs: ["toggleCardVisibility"] }] }); }
1027
+ }
1028
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: AppfxCardContainerComponent, decorators: [{
1029
+ type: Component,
1030
+ args: [{ selector: 'appfx-card-container', standalone: false, providers: [A11yService, ContainerService, DragDropService, LayoutService, PersistenceService], 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=\"content-container hermes-flex-row\">\r\n <div class=\"card-container hermes-flex-grow-1\">\r\n <ng-template #cardContainer> </ng-template>\r\n </div>\r\n <appfx-card-container-settings\r\n *ngIf=\"showCardContainerSettings\"\r\n [containerCards]=\"containerCards\"\r\n (toggleCardVisibility)=\"onToggleCardVisibility($event)\"\r\n ></appfx-card-container-settings>\r\n</div>\r\n", styles: [".card-container{display:flex;flex-wrap:wrap;margin:auto -5px}\n"] }]
1031
+ }], ctorParameters: () => [{ type: ContainerService }, { type: PersistenceService }, { type: i0.IterableDiffers }], propDecorators: { containerId: [{
1032
+ type: Input
1033
+ }], cards: [{
1034
+ type: Input
1035
+ }], persistenceStore: [{
1036
+ type: Input
1037
+ }], showCardContainerSettings: [{
1038
+ type: Input
1039
+ }], dragDropEnabled: [{
1040
+ type: Input
1041
+ }], cardContainer: [{
1042
+ type: ViewChild,
1043
+ args: ['cardContainer', { read: ViewContainerRef, static: true }]
1044
+ }] } });
1045
+
1046
+ /*
1047
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
1048
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
1049
+ * This software is released under MIT license.
1050
+ * The full license information can be found in LICENSE in the root directory of this project.
1051
+ */
1052
+ /**
1053
+ * AppFx Card Container module
1054
+ * declaration and exports of needed components
1055
+ */
1056
+ class AppfxCardContainerModule {
1057
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: AppfxCardContainerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1058
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.22", ngImport: i0, type: AppfxCardContainerModule, declarations: [AppfxCardComponent, AppfxCardContainerComponent, AppfxCardContainerSettingsComponent], imports: [AppfxTranslateModule, HermesCheckboxModule, HermesDropdownModule, CommonModule, DragDropModule], exports: [AppfxCardComponent, AppfxCardContainerComponent, AppfxCardContainerSettingsComponent] }); }
1059
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: AppfxCardContainerModule, imports: [AppfxTranslateModule, HermesCheckboxModule, HermesDropdownModule, CommonModule, DragDropModule] }); }
1060
+ }
1061
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: AppfxCardContainerModule, decorators: [{
1062
+ type: NgModule,
1063
+ args: [{
1064
+ imports: [AppfxTranslateModule, HermesCheckboxModule, HermesDropdownModule, CommonModule, DragDropModule],
1065
+ declarations: [AppfxCardComponent, AppfxCardContainerComponent, AppfxCardContainerSettingsComponent],
1066
+ exports: [AppfxCardComponent, AppfxCardContainerComponent, AppfxCardContainerSettingsComponent],
1067
+ }]
1068
+ }] });
1069
+
1070
+ /*
1071
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
1072
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
1073
+ * This software is released under MIT license.
1074
+ * The full license information can be found in LICENSE in the root directory of this project.
1075
+ */
1076
+
1077
+ /**
1078
+ * Generated bundle index. Do not edit.
1079
+ */
1080
+
1081
+ export { AppfxCardComponent, AppfxCardContainerComponent, AppfxCardContainerModule, AppfxCardContainerSettingsComponent };
1082
+ //# sourceMappingURL=hermes-ui-angular-addons-card-container.mjs.map