@ukic/web-components 3.0.0-alpha.6 → 3.0.0-alpha.7

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 (364) hide show
  1. package/README.md +4 -4
  2. package/dist/cjs/core.cjs.js +1 -1
  3. package/dist/cjs/{helpers-dd569d97.js → helpers-50fa27f6.js} +14 -1
  4. package/dist/cjs/helpers-50fa27f6.js.map +1 -0
  5. package/dist/cjs/ic-accordion-group.cjs.entry.js +1 -1
  6. package/dist/cjs/ic-accordion.cjs.entry.js +1 -1
  7. package/dist/cjs/ic-alert.cjs.entry.js +2 -9
  8. package/dist/cjs/ic-alert.cjs.entry.js.map +1 -1
  9. package/dist/cjs/ic-back-to-top.cjs.entry.js +1 -1
  10. package/dist/cjs/ic-badge.cjs.entry.js +1 -1
  11. package/dist/cjs/ic-breadcrumb-group.cjs.entry.js +1 -1
  12. package/dist/cjs/ic-breadcrumb.cjs.entry.js +1 -1
  13. package/dist/cjs/ic-button_3.cjs.entry.js +1 -1
  14. package/dist/cjs/ic-card-vertical.cjs.entry.js +12 -19
  15. package/dist/cjs/ic-card-vertical.cjs.entry.js.map +1 -1
  16. package/dist/cjs/ic-checkbox-group.cjs.entry.js +1 -1
  17. package/dist/cjs/ic-checkbox.cjs.entry.js +1 -1
  18. package/dist/cjs/ic-chip.cjs.entry.js +1 -1
  19. package/dist/cjs/ic-data-row.cjs.entry.js +1 -1
  20. package/dist/cjs/ic-dialog.cjs.entry.js +1 -1
  21. package/dist/cjs/ic-divider.cjs.entry.js +1 -1
  22. package/dist/cjs/ic-empty-state.cjs.entry.js +2 -12
  23. package/dist/cjs/ic-empty-state.cjs.entry.js.map +1 -1
  24. package/dist/cjs/ic-footer-link-group.cjs.entry.js +1 -1
  25. package/dist/cjs/ic-footer-link.cjs.entry.js +1 -1
  26. package/dist/cjs/ic-footer.cjs.entry.js +18 -7
  27. package/dist/cjs/ic-footer.cjs.entry.js.map +1 -1
  28. package/dist/cjs/ic-hero.cjs.entry.js +2 -9
  29. package/dist/cjs/ic-hero.cjs.entry.js.map +1 -1
  30. package/dist/cjs/ic-horizontal-scroll.cjs.entry.js +1 -1
  31. package/dist/cjs/ic-input-component-container_3.cjs.entry.js +27 -21
  32. package/dist/cjs/ic-input-component-container_3.cjs.entry.js.map +1 -1
  33. package/dist/cjs/ic-input-label_2.cjs.entry.js +1 -1
  34. package/dist/cjs/ic-link.cjs.entry.js +1 -1
  35. package/dist/cjs/ic-menu-group.cjs.entry.js +1 -1
  36. package/dist/cjs/ic-menu-item.cjs.entry.js +1 -1
  37. package/dist/cjs/ic-navigation-button.cjs.entry.js +1 -1
  38. package/dist/cjs/ic-navigation-group.cjs.entry.js +1 -1
  39. package/dist/cjs/ic-navigation-item.cjs.entry.js +1 -1
  40. package/dist/cjs/ic-navigation-menu.cjs.entry.js +1 -1
  41. package/dist/cjs/ic-page-header.cjs.entry.js +1 -1
  42. package/dist/cjs/ic-pagination-item.cjs.entry.js +1 -1
  43. package/dist/cjs/ic-pagination.cjs.entry.js +1 -1
  44. package/dist/cjs/ic-popover-menu.cjs.entry.js +1 -1
  45. package/dist/cjs/ic-radio-group.cjs.entry.js +1 -1
  46. package/dist/cjs/ic-radio-option.cjs.entry.js +1 -1
  47. package/dist/cjs/ic-search-bar.cjs.entry.js +32 -28
  48. package/dist/cjs/ic-search-bar.cjs.entry.js.map +1 -1
  49. package/dist/cjs/ic-select.cjs.entry.js +44 -32
  50. package/dist/cjs/ic-select.cjs.entry.js.map +1 -1
  51. package/dist/cjs/ic-side-navigation.cjs.entry.js +1 -1
  52. package/dist/cjs/ic-status-tag.cjs.entry.js +1 -1
  53. package/dist/cjs/ic-step.cjs.entry.js +1 -1
  54. package/dist/cjs/ic-stepper.cjs.entry.js +1 -1
  55. package/dist/cjs/ic-switch.cjs.entry.js +1 -1
  56. package/dist/cjs/ic-tab-group.cjs.entry.js +1 -1
  57. package/dist/cjs/ic-tab-panel.cjs.entry.js +1 -1
  58. package/dist/cjs/ic-tab.cjs.entry.js +1 -1
  59. package/dist/cjs/ic-text-field.cjs.entry.js +9 -7
  60. package/dist/cjs/ic-text-field.cjs.entry.js.map +1 -1
  61. package/dist/cjs/ic-theme.cjs.entry.js +1 -1
  62. package/dist/cjs/ic-toast.cjs.entry.js +1 -1
  63. package/dist/cjs/ic-toggle-button-group.cjs.entry.js +1 -1
  64. package/dist/cjs/ic-toggle-button.cjs.entry.js +1 -1
  65. package/dist/cjs/ic-top-navigation.cjs.entry.js +2 -2
  66. package/dist/cjs/ic-top-navigation.cjs.entry.js.map +1 -1
  67. package/dist/cjs/ic-typography.cjs.entry.js +1 -1
  68. package/dist/cjs/index-f982899d.js +4 -4
  69. package/dist/cjs/loader.cjs.js +1 -1
  70. package/dist/collection/ag-theme-icds.css +32 -31
  71. package/dist/collection/components/ic-alert/ic-alert.js +3 -10
  72. package/dist/collection/components/ic-alert/ic-alert.js.map +1 -1
  73. package/dist/collection/components/ic-alert/test/basic/ic-alert.spec.js +21 -3
  74. package/dist/collection/components/ic-alert/test/basic/ic-alert.spec.js.map +1 -1
  75. package/dist/collection/components/ic-card-vertical/ic-card-vertical.js +13 -20
  76. package/dist/collection/components/ic-card-vertical/ic-card-vertical.js.map +1 -1
  77. package/dist/collection/components/ic-card-vertical/test/basic/ic-card-vertical.spec.js +34 -3
  78. package/dist/collection/components/ic-card-vertical/test/basic/ic-card-vertical.spec.js.map +1 -1
  79. package/dist/collection/components/ic-empty-state/ic-empty-state.js +3 -13
  80. package/dist/collection/components/ic-empty-state/ic-empty-state.js.map +1 -1
  81. package/dist/collection/components/ic-footer/ic-footer.js +18 -7
  82. package/dist/collection/components/ic-footer/ic-footer.js.map +1 -1
  83. package/dist/collection/components/ic-footer/test/basic/ic-footer.spec.js +41 -0
  84. package/dist/collection/components/ic-footer/test/basic/ic-footer.spec.js.map +1 -1
  85. package/dist/collection/components/ic-hero/ic-hero.js +3 -10
  86. package/dist/collection/components/ic-hero/ic-hero.js.map +1 -1
  87. package/dist/collection/components/ic-hero/test/basic/ic-hero.spec.js +21 -3
  88. package/dist/collection/components/ic-hero/test/basic/ic-hero.spec.js.map +1 -1
  89. package/dist/collection/components/ic-input-component-container/ic-input-component-container.js +3 -10
  90. package/dist/collection/components/ic-input-component-container/ic-input-component-container.js.map +1 -1
  91. package/dist/collection/components/ic-input-component-container/test/basic/ic-input-component-container.spec.js +21 -3
  92. package/dist/collection/components/ic-input-component-container/test/basic/ic-input-component-container.spec.js.map +1 -1
  93. package/dist/collection/components/ic-menu/ic-menu.css +6 -0
  94. package/dist/collection/components/ic-menu/ic-menu.js +38 -11
  95. package/dist/collection/components/ic-menu/ic-menu.js.map +1 -1
  96. package/dist/collection/components/ic-menu/test/basic/ic-menu.spec.js +9 -9
  97. package/dist/collection/components/ic-menu/test/basic/ic-menu.spec.js.map +1 -1
  98. package/dist/collection/components/ic-search-bar/ic-search-bar.css +66 -4
  99. package/dist/collection/components/ic-search-bar/ic-search-bar.js +53 -28
  100. package/dist/collection/components/ic-search-bar/ic-search-bar.js.map +1 -1
  101. package/dist/collection/components/ic-search-bar/test/basic/ic-search-bar.spec.js +59 -93
  102. package/dist/collection/components/ic-search-bar/test/basic/ic-search-bar.spec.js.map +1 -1
  103. package/dist/collection/components/ic-select/ic-select.js +46 -34
  104. package/dist/collection/components/ic-select/ic-select.js.map +1 -1
  105. package/dist/collection/components/ic-select/test/basic/ic-select.spec.js +64 -0
  106. package/dist/collection/components/ic-select/test/basic/ic-select.spec.js.map +1 -1
  107. package/dist/collection/components/ic-text-field/ic-text-field.js +15 -8
  108. package/dist/collection/components/ic-text-field/ic-text-field.js.map +1 -1
  109. package/dist/collection/components/ic-top-navigation/ic-top-navigation.css +4 -0
  110. package/dist/collection/testspec.setup.js +14 -0
  111. package/dist/collection/testspec.setup.js.map +1 -1
  112. package/dist/collection/utils/helpers.js +11 -0
  113. package/dist/collection/utils/helpers.js.map +1 -1
  114. package/dist/components/helpers.js +13 -1
  115. package/dist/components/helpers.js.map +1 -1
  116. package/dist/components/ic-alert.js +3 -10
  117. package/dist/components/ic-alert.js.map +1 -1
  118. package/dist/components/ic-card-vertical.js +13 -20
  119. package/dist/components/ic-card-vertical.js.map +1 -1
  120. package/dist/components/ic-empty-state.js +3 -13
  121. package/dist/components/ic-empty-state.js.map +1 -1
  122. package/dist/components/ic-footer.js +18 -7
  123. package/dist/components/ic-footer.js.map +1 -1
  124. package/dist/components/ic-hero.js +3 -10
  125. package/dist/components/ic-hero.js.map +1 -1
  126. package/dist/components/ic-input-component-container2.js +3 -10
  127. package/dist/components/ic-input-component-container2.js.map +1 -1
  128. package/dist/components/ic-menu2.js +25 -12
  129. package/dist/components/ic-menu2.js.map +1 -1
  130. package/dist/components/ic-search-bar.js +46 -53
  131. package/dist/components/ic-search-bar.js.map +1 -1
  132. package/dist/components/ic-select.js +45 -33
  133. package/dist/components/ic-select.js.map +1 -1
  134. package/dist/components/ic-side-navigation.js +1 -1
  135. package/dist/components/ic-stepper.js +1 -1
  136. package/dist/components/ic-text-field.js +371 -1
  137. package/dist/components/ic-text-field.js.map +1 -1
  138. package/dist/components/ic-theme.js +1 -1
  139. package/dist/components/ic-top-navigation.js +2 -2
  140. package/dist/components/ic-top-navigation.js.map +1 -1
  141. package/dist/core/ag-theme-icds.css +32 -31
  142. package/dist/core/core.css +15 -3
  143. package/dist/core/core.esm.js +1 -1
  144. package/dist/core/core.esm.js.map +1 -1
  145. package/dist/core/p-050e3e36.entry.js +2 -0
  146. package/dist/core/p-050e3e36.entry.js.map +1 -0
  147. package/dist/core/{p-5ba8e679.entry.js → p-08a82b71.entry.js} +2 -2
  148. package/dist/core/{p-5d417fc0.entry.js → p-12bd8ade.entry.js} +2 -2
  149. package/dist/core/{p-ded2dbed.entry.js → p-13637d3f.entry.js} +2 -2
  150. package/dist/core/{p-406e58af.entry.js → p-1425c78b.entry.js} +2 -2
  151. package/dist/core/{p-4af52174.entry.js → p-16df8bcf.entry.js} +2 -2
  152. package/dist/core/{p-1234f7a5.entry.js → p-1b1f7523.entry.js} +2 -2
  153. package/dist/core/{p-bc7b8a1e.entry.js → p-2179e015.entry.js} +2 -2
  154. package/dist/core/{p-810f5a2d.entry.js → p-273f9b03.entry.js} +2 -2
  155. package/dist/core/p-273f9b03.entry.js.map +1 -0
  156. package/dist/core/{p-b5439baa.entry.js → p-27933dfe.entry.js} +2 -2
  157. package/dist/core/{p-c83e933c.entry.js → p-2aca1bac.entry.js} +2 -2
  158. package/dist/core/{p-a24bcf5f.entry.js → p-30f91e2e.entry.js} +2 -2
  159. package/dist/core/p-3361ac8f.entry.js +2 -0
  160. package/dist/core/p-3361ac8f.entry.js.map +1 -0
  161. package/dist/core/{p-98dbbb34.entry.js → p-34e89ebf.entry.js} +2 -2
  162. package/dist/core/{p-b9aa801f.entry.js → p-353893b7.entry.js} +2 -2
  163. package/dist/core/{p-0821fc5b.entry.js → p-3645c4e6.entry.js} +2 -2
  164. package/dist/core/p-369ff74c.entry.js +2 -0
  165. package/dist/core/p-369ff74c.entry.js.map +1 -0
  166. package/dist/core/p-46dd7413.entry.js +2 -0
  167. package/dist/core/p-46dd7413.entry.js.map +1 -0
  168. package/dist/core/{p-225384ab.entry.js → p-4e57c7ba.entry.js} +2 -2
  169. package/dist/core/{p-0b8c3770.entry.js → p-51990f23.entry.js} +2 -2
  170. package/dist/core/{p-4dc48606.entry.js → p-5347f687.entry.js} +2 -2
  171. package/dist/core/{p-6859019c.entry.js → p-538f1bb9.entry.js} +2 -2
  172. package/dist/core/{p-07cd8a50.entry.js → p-5479be2b.entry.js} +2 -2
  173. package/dist/core/{p-b51e378c.entry.js → p-5801598f.entry.js} +2 -2
  174. package/dist/core/{p-c2b359d9.entry.js → p-5b118dec.entry.js} +2 -2
  175. package/dist/core/p-5d89525e.entry.js +2 -0
  176. package/dist/core/p-5d89525e.entry.js.map +1 -0
  177. package/dist/core/{p-f42c0469.entry.js → p-5dcafe90.entry.js} +2 -2
  178. package/dist/core/{p-705db6a5.entry.js → p-5e694b17.entry.js} +2 -2
  179. package/dist/core/{p-b27dfa1b.entry.js → p-6331782f.entry.js} +2 -2
  180. package/dist/core/{p-5d653608.entry.js → p-6a5d58bc.entry.js} +2 -2
  181. package/dist/core/p-6d0c5a77.entry.js +2 -0
  182. package/dist/core/{p-cfe32b37.entry.js.map → p-6d0c5a77.entry.js.map} +1 -1
  183. package/dist/core/p-6f16a69e.entry.js +2 -0
  184. package/dist/core/{p-dcb2073d.entry.js.map → p-6f16a69e.entry.js.map} +1 -1
  185. package/dist/core/{p-9c1d4f72.entry.js → p-7a16046a.entry.js} +2 -2
  186. package/dist/core/p-7c0ff8cf.entry.js +2 -0
  187. package/dist/core/p-7c0ff8cf.entry.js.map +1 -0
  188. package/dist/core/{p-3cfef37a.entry.js → p-7c39afb5.entry.js} +2 -2
  189. package/dist/core/{p-a23c515d.entry.js → p-7e546e88.entry.js} +2 -2
  190. package/dist/core/{p-520c6089.entry.js → p-8dda6121.entry.js} +2 -2
  191. package/dist/core/{p-518ea375.entry.js → p-9505b0f1.entry.js} +2 -2
  192. package/dist/core/{p-b2a41070.entry.js → p-a25d535a.entry.js} +2 -2
  193. package/dist/core/p-a519e9a6.entry.js +2 -0
  194. package/dist/core/p-a519e9a6.entry.js.map +1 -0
  195. package/dist/core/p-b052e67a.entry.js +2 -0
  196. package/dist/core/{p-3420a999.entry.js.map → p-b052e67a.entry.js.map} +1 -1
  197. package/dist/core/{p-580b1593.entry.js → p-bafcbecc.entry.js} +2 -2
  198. package/dist/core/{p-61510f00.entry.js → p-bdbce1a0.entry.js} +2 -2
  199. package/dist/core/p-c68d98f8.entry.js +2 -0
  200. package/dist/core/p-c68d98f8.entry.js.map +1 -0
  201. package/dist/core/{p-4f72a02a.entry.js → p-cae08ac2.entry.js} +2 -2
  202. package/dist/core/{p-7124b387.entry.js → p-d6ce4473.entry.js} +2 -2
  203. package/dist/core/{p-193582d4.entry.js → p-dcdfe5f9.entry.js} +2 -2
  204. package/dist/core/{p-3994d86d.entry.js → p-e9c078fa.entry.js} +2 -2
  205. package/dist/core/p-eafa4df2.js +2 -0
  206. package/dist/core/p-eafa4df2.js.map +1 -0
  207. package/dist/core/{p-da85eaf6.entry.js → p-eb132c44.entry.js} +2 -2
  208. package/dist/core/p-ebf2b874.entry.js +2 -0
  209. package/dist/core/p-ebf2b874.entry.js.map +1 -0
  210. package/dist/core/{p-0d505c1f.entry.js → p-eec110a7.entry.js} +2 -2
  211. package/dist/core/{p-91c1327d.entry.js → p-f1b7e4f4.entry.js} +2 -2
  212. package/dist/core/{p-d2909711.entry.js → p-f8890135.entry.js} +2 -2
  213. package/dist/esm/core.js +1 -1
  214. package/dist/esm/{helpers-e594bfc6.js → helpers-8565b5c5.js} +14 -2
  215. package/dist/esm/helpers-8565b5c5.js.map +1 -0
  216. package/dist/esm/ic-accordion-group.entry.js +1 -1
  217. package/dist/esm/ic-accordion.entry.js +1 -1
  218. package/dist/esm/ic-alert.entry.js +3 -10
  219. package/dist/esm/ic-alert.entry.js.map +1 -1
  220. package/dist/esm/ic-back-to-top.entry.js +1 -1
  221. package/dist/esm/ic-badge.entry.js +1 -1
  222. package/dist/esm/ic-breadcrumb-group.entry.js +1 -1
  223. package/dist/esm/ic-breadcrumb.entry.js +1 -1
  224. package/dist/esm/ic-button_3.entry.js +1 -1
  225. package/dist/esm/ic-card-vertical.entry.js +13 -20
  226. package/dist/esm/ic-card-vertical.entry.js.map +1 -1
  227. package/dist/esm/ic-checkbox-group.entry.js +1 -1
  228. package/dist/esm/ic-checkbox.entry.js +1 -1
  229. package/dist/esm/ic-chip.entry.js +1 -1
  230. package/dist/esm/ic-data-row.entry.js +1 -1
  231. package/dist/esm/ic-dialog.entry.js +1 -1
  232. package/dist/esm/ic-divider.entry.js +1 -1
  233. package/dist/esm/ic-empty-state.entry.js +3 -13
  234. package/dist/esm/ic-empty-state.entry.js.map +1 -1
  235. package/dist/esm/ic-footer-link-group.entry.js +1 -1
  236. package/dist/esm/ic-footer-link.entry.js +1 -1
  237. package/dist/esm/ic-footer.entry.js +18 -7
  238. package/dist/esm/ic-footer.entry.js.map +1 -1
  239. package/dist/esm/ic-hero.entry.js +3 -10
  240. package/dist/esm/ic-hero.entry.js.map +1 -1
  241. package/dist/esm/ic-horizontal-scroll.entry.js +1 -1
  242. package/dist/esm/ic-input-component-container_3.entry.js +28 -22
  243. package/dist/esm/ic-input-component-container_3.entry.js.map +1 -1
  244. package/dist/esm/ic-input-label_2.entry.js +1 -1
  245. package/dist/esm/ic-link.entry.js +1 -1
  246. package/dist/esm/ic-menu-group.entry.js +1 -1
  247. package/dist/esm/ic-menu-item.entry.js +1 -1
  248. package/dist/esm/ic-navigation-button.entry.js +1 -1
  249. package/dist/esm/ic-navigation-group.entry.js +1 -1
  250. package/dist/esm/ic-navigation-item.entry.js +1 -1
  251. package/dist/esm/ic-navigation-menu.entry.js +1 -1
  252. package/dist/esm/ic-page-header.entry.js +1 -1
  253. package/dist/esm/ic-pagination-item.entry.js +1 -1
  254. package/dist/esm/ic-pagination.entry.js +1 -1
  255. package/dist/esm/ic-popover-menu.entry.js +1 -1
  256. package/dist/esm/ic-radio-group.entry.js +1 -1
  257. package/dist/esm/ic-radio-option.entry.js +1 -1
  258. package/dist/esm/ic-search-bar.entry.js +32 -28
  259. package/dist/esm/ic-search-bar.entry.js.map +1 -1
  260. package/dist/esm/ic-select.entry.js +44 -32
  261. package/dist/esm/ic-select.entry.js.map +1 -1
  262. package/dist/esm/ic-side-navigation.entry.js +1 -1
  263. package/dist/esm/ic-status-tag.entry.js +1 -1
  264. package/dist/esm/ic-step.entry.js +1 -1
  265. package/dist/esm/ic-stepper.entry.js +1 -1
  266. package/dist/esm/ic-switch.entry.js +1 -1
  267. package/dist/esm/ic-tab-group.entry.js +1 -1
  268. package/dist/esm/ic-tab-panel.entry.js +1 -1
  269. package/dist/esm/ic-tab.entry.js +1 -1
  270. package/dist/esm/ic-text-field.entry.js +9 -7
  271. package/dist/esm/ic-text-field.entry.js.map +1 -1
  272. package/dist/esm/ic-theme.entry.js +1 -1
  273. package/dist/esm/ic-toast.entry.js +1 -1
  274. package/dist/esm/ic-toggle-button-group.entry.js +1 -1
  275. package/dist/esm/ic-toggle-button.entry.js +1 -1
  276. package/dist/esm/ic-top-navigation.entry.js +2 -2
  277. package/dist/esm/ic-top-navigation.entry.js.map +1 -1
  278. package/dist/esm/ic-typography.entry.js +1 -1
  279. package/dist/esm/index-d1d2c456.js +4 -4
  280. package/dist/esm/loader.js +1 -1
  281. package/dist/types/components/ic-alert/ic-alert.d.ts +0 -1
  282. package/dist/types/components/ic-card-vertical/ic-card-vertical.d.ts +0 -1
  283. package/dist/types/components/ic-empty-state/ic-empty-state.d.ts +0 -1
  284. package/dist/types/components/ic-footer/ic-footer.d.ts +1 -0
  285. package/dist/types/components/ic-hero/ic-hero.d.ts +0 -1
  286. package/dist/types/components/ic-input-component-container/ic-input-component-container.d.ts +0 -1
  287. package/dist/types/components/ic-menu/ic-menu.d.ts +6 -1
  288. package/dist/types/components/ic-search-bar/ic-search-bar.d.ts +9 -2
  289. package/dist/types/components/ic-select/ic-select.d.ts +5 -4
  290. package/dist/types/components/ic-text-field/ic-text-field.d.ts +2 -1
  291. package/dist/types/components.d.ts +13 -3
  292. package/dist/types/testspec.setup.d.ts +9 -0
  293. package/dist/types/utils/helpers.d.ts +2 -0
  294. package/hydrate/index.js +150 -128
  295. package/package.json +2 -9
  296. package/vscode-data.json +1 -1
  297. package/dist/cjs/helpers-dd569d97.js.map +0 -1
  298. package/dist/components/ic-text-field2.js +0 -373
  299. package/dist/components/ic-text-field2.js.map +0 -1
  300. package/dist/core/p-3420a999.entry.js +0 -2
  301. package/dist/core/p-3bfc4a52.entry.js +0 -2
  302. package/dist/core/p-3bfc4a52.entry.js.map +0 -1
  303. package/dist/core/p-48e98730.js +0 -2
  304. package/dist/core/p-48e98730.js.map +0 -1
  305. package/dist/core/p-59800237.entry.js +0 -2
  306. package/dist/core/p-59800237.entry.js.map +0 -1
  307. package/dist/core/p-6159b077.entry.js +0 -2
  308. package/dist/core/p-6159b077.entry.js.map +0 -1
  309. package/dist/core/p-810744b5.entry.js +0 -2
  310. package/dist/core/p-810744b5.entry.js.map +0 -1
  311. package/dist/core/p-810f5a2d.entry.js.map +0 -1
  312. package/dist/core/p-8a2670c1.entry.js +0 -2
  313. package/dist/core/p-8a2670c1.entry.js.map +0 -1
  314. package/dist/core/p-aefebee9.entry.js +0 -2
  315. package/dist/core/p-aefebee9.entry.js.map +0 -1
  316. package/dist/core/p-c67f7603.entry.js +0 -2
  317. package/dist/core/p-c67f7603.entry.js.map +0 -1
  318. package/dist/core/p-c6e91e13.entry.js +0 -2
  319. package/dist/core/p-c6e91e13.entry.js.map +0 -1
  320. package/dist/core/p-ca27ab19.entry.js +0 -2
  321. package/dist/core/p-ca27ab19.entry.js.map +0 -1
  322. package/dist/core/p-cfe32b37.entry.js +0 -2
  323. package/dist/core/p-dcb2073d.entry.js +0 -2
  324. package/dist/esm/helpers-e594bfc6.js.map +0 -1
  325. /package/dist/core/{p-5ba8e679.entry.js.map → p-08a82b71.entry.js.map} +0 -0
  326. /package/dist/core/{p-5d417fc0.entry.js.map → p-12bd8ade.entry.js.map} +0 -0
  327. /package/dist/core/{p-ded2dbed.entry.js.map → p-13637d3f.entry.js.map} +0 -0
  328. /package/dist/core/{p-406e58af.entry.js.map → p-1425c78b.entry.js.map} +0 -0
  329. /package/dist/core/{p-4af52174.entry.js.map → p-16df8bcf.entry.js.map} +0 -0
  330. /package/dist/core/{p-1234f7a5.entry.js.map → p-1b1f7523.entry.js.map} +0 -0
  331. /package/dist/core/{p-bc7b8a1e.entry.js.map → p-2179e015.entry.js.map} +0 -0
  332. /package/dist/core/{p-b5439baa.entry.js.map → p-27933dfe.entry.js.map} +0 -0
  333. /package/dist/core/{p-c83e933c.entry.js.map → p-2aca1bac.entry.js.map} +0 -0
  334. /package/dist/core/{p-a24bcf5f.entry.js.map → p-30f91e2e.entry.js.map} +0 -0
  335. /package/dist/core/{p-98dbbb34.entry.js.map → p-34e89ebf.entry.js.map} +0 -0
  336. /package/dist/core/{p-b9aa801f.entry.js.map → p-353893b7.entry.js.map} +0 -0
  337. /package/dist/core/{p-0821fc5b.entry.js.map → p-3645c4e6.entry.js.map} +0 -0
  338. /package/dist/core/{p-225384ab.entry.js.map → p-4e57c7ba.entry.js.map} +0 -0
  339. /package/dist/core/{p-0b8c3770.entry.js.map → p-51990f23.entry.js.map} +0 -0
  340. /package/dist/core/{p-4dc48606.entry.js.map → p-5347f687.entry.js.map} +0 -0
  341. /package/dist/core/{p-6859019c.entry.js.map → p-538f1bb9.entry.js.map} +0 -0
  342. /package/dist/core/{p-07cd8a50.entry.js.map → p-5479be2b.entry.js.map} +0 -0
  343. /package/dist/core/{p-b51e378c.entry.js.map → p-5801598f.entry.js.map} +0 -0
  344. /package/dist/core/{p-c2b359d9.entry.js.map → p-5b118dec.entry.js.map} +0 -0
  345. /package/dist/core/{p-f42c0469.entry.js.map → p-5dcafe90.entry.js.map} +0 -0
  346. /package/dist/core/{p-705db6a5.entry.js.map → p-5e694b17.entry.js.map} +0 -0
  347. /package/dist/core/{p-b27dfa1b.entry.js.map → p-6331782f.entry.js.map} +0 -0
  348. /package/dist/core/{p-5d653608.entry.js.map → p-6a5d58bc.entry.js.map} +0 -0
  349. /package/dist/core/{p-9c1d4f72.entry.js.map → p-7a16046a.entry.js.map} +0 -0
  350. /package/dist/core/{p-3cfef37a.entry.js.map → p-7c39afb5.entry.js.map} +0 -0
  351. /package/dist/core/{p-a23c515d.entry.js.map → p-7e546e88.entry.js.map} +0 -0
  352. /package/dist/core/{p-520c6089.entry.js.map → p-8dda6121.entry.js.map} +0 -0
  353. /package/dist/core/{p-518ea375.entry.js.map → p-9505b0f1.entry.js.map} +0 -0
  354. /package/dist/core/{p-b2a41070.entry.js.map → p-a25d535a.entry.js.map} +0 -0
  355. /package/dist/core/{p-580b1593.entry.js.map → p-bafcbecc.entry.js.map} +0 -0
  356. /package/dist/core/{p-61510f00.entry.js.map → p-bdbce1a0.entry.js.map} +0 -0
  357. /package/dist/core/{p-4f72a02a.entry.js.map → p-cae08ac2.entry.js.map} +0 -0
  358. /package/dist/core/{p-7124b387.entry.js.map → p-d6ce4473.entry.js.map} +0 -0
  359. /package/dist/core/{p-193582d4.entry.js.map → p-dcdfe5f9.entry.js.map} +0 -0
  360. /package/dist/core/{p-3994d86d.entry.js.map → p-e9c078fa.entry.js.map} +0 -0
  361. /package/dist/core/{p-da85eaf6.entry.js.map → p-eb132c44.entry.js.map} +0 -0
  362. /package/dist/core/{p-0d505c1f.entry.js.map → p-eec110a7.entry.js.map} +0 -0
  363. /package/dist/core/{p-91c1327d.entry.js.map → p-f1b7e4f4.entry.js.map} +0 -0
  364. /package/dist/core/{p-d2909711.entry.js.map → p-f8890135.entry.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import { h, Host, } from "@stencil/core";
2
2
  import { IC_DEVICE_SIZES } from "../../utils/constants";
3
- import { getCurrentDeviceSize, getBrandForegroundAppearance, checkResizeObserver, hasClassificationBanner, isSlotUsed, } from "../../utils/helpers";
3
+ import { getCurrentDeviceSize, getBrandForegroundAppearance, checkResizeObserver, hasClassificationBanner, isSlotUsed, renderDynamicChildSlots, } from "../../utils/helpers";
4
4
  import { IcBrandForegroundEnum, } from "../../utils/types";
5
5
  /**
6
6
  * @slot description - Content will be rendered at the top of the footer.
@@ -11,6 +11,7 @@ import { IcBrandForegroundEnum, } from "../../utils/types";
11
11
  export class Footer {
12
12
  constructor() {
13
13
  this.resizeObserver = null;
14
+ this.hostMutationObserver = null;
14
15
  this.resizeObserverCallback = (currSize) => {
15
16
  if (currSize !== this.deviceSize) {
16
17
  this.deviceSize = currSize;
@@ -34,15 +35,23 @@ export class Footer {
34
35
  this.groupLinks = false;
35
36
  }
36
37
  disconnectedCallback() {
38
+ var _a;
37
39
  if (this.resizeObserver !== null) {
38
40
  this.resizeObserver.disconnect();
39
41
  }
42
+ (_a = this.hostMutationObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
40
43
  }
41
44
  componentWillLoad() {
42
45
  this.deviceSize = getCurrentDeviceSize();
43
46
  }
44
47
  componentDidLoad() {
45
48
  checkResizeObserver(this.runResizeObserver);
49
+ this.hostMutationObserver = new MutationObserver((mutationList) => {
50
+ return renderDynamicChildSlots(mutationList, "link", this);
51
+ });
52
+ this.hostMutationObserver.observe(this.el, {
53
+ childList: true,
54
+ });
46
55
  }
47
56
  brandChangeHandler(ev) {
48
57
  this.foregroundColor = ev.detail.mode;
@@ -62,8 +71,12 @@ export class Footer {
62
71
  : false;
63
72
  }
64
73
  render() {
65
- const { aligned, caption, copyright, description, groupLinks, foregroundColor, } = this;
74
+ const { aligned, caption, copyright, description, deviceSize, el, foregroundColor, groupLinks, } = this;
66
75
  const small = this.isSmall();
76
+ const showComplianceSection = isSlotUsed(el, "logo") ||
77
+ isSlotUsed(el, "caption") ||
78
+ caption ||
79
+ copyright;
67
80
  return (h(Host, { class: {
68
81
  ["ic-footer"]: true,
69
82
  [`ic-footer-${small ? "small" : "sparse"}`]: true,
@@ -72,14 +85,12 @@ export class Footer {
72
85
  // Slots will be able to infer their own color
73
86
  [`ic-footer-${IcBrandForegroundEnum.Dark}`]: foregroundColor === IcBrandForegroundEnum.Dark,
74
87
  [`ic-footer-${IcBrandForegroundEnum.Light}`]: foregroundColor === IcBrandForegroundEnum.Light,
75
- } }, h("footer", { ref: (footerEl) => (this.footerEl = footerEl) }, (isSlotUsed(this.el, "description") || description) && (h("div", { class: "footer-description" }, h("ic-section-container", { aligned: aligned, fullHeight: true }, h("div", { class: "footer-description-inner" }, h("ic-typography", { variant: "body" }, h("slot", { name: "description" }, description)))))), isSlotUsed(this.el, "link") && (h("div", { class: "footer-links" }, groupLinks && small ? (h("div", { class: "footer-links-inner", role: "list" }, h("slot", { name: "link" }))) : (h("ic-section-container", { fullHeight: true, aligned: aligned }, h("div", { class: "footer-links-inner", role: "list" }, h("slot", { name: "link" })))))), h("div", { class: "footer-compliance" }, h("ic-section-container", { aligned: aligned, fullHeight: true }, h("div", { class: "footer-compliance-inner" }, isSlotUsed(this.el, "logo") && (h("div", { class: "footer-logo" }, h("slot", { name: "logo" }))), (isSlotUsed(this.el, "caption") || caption) && (h("div", { class: "footer-caption" }, h("ic-typography", { variant: this.deviceSize <= IC_DEVICE_SIZES.M
76
- ? "caption"
77
- : "body" }, h("slot", { name: "caption" }, caption)))), copyright && (h("div", { class: {
88
+ } }, h("footer", { ref: (footerEl) => (this.footerEl = footerEl) }, (isSlotUsed(el, "description") || description) && (h("div", { class: "footer-description" }, h("ic-section-container", { aligned: aligned, fullHeight: true }, h("div", { class: "footer-description-inner" }, h("ic-typography", { variant: "body" }, h("slot", { name: "description" }, description)))))), isSlotUsed(el, "link") && (h("div", { class: "footer-links" }, groupLinks && small ? (h("div", { class: "footer-links-inner", role: "list" }, h("slot", { name: "link" }))) : (h("ic-section-container", { fullHeight: true, aligned: aligned }, h("div", { class: "footer-links-inner", role: "list" }, h("slot", { name: "link" })))))), showComplianceSection && (h("div", { class: "footer-compliance" }, h("ic-section-container", { aligned: aligned, fullHeight: true }, h("div", { class: "footer-compliance-inner" }, isSlotUsed(el, "logo") && (h("div", { class: "footer-logo" }, h("slot", { name: "logo" }))), (isSlotUsed(el, "caption") || caption) && (h("div", { class: "footer-caption" }, h("ic-typography", { variant: deviceSize <= IC_DEVICE_SIZES.M ? "caption" : "body" }, h("slot", { name: "caption" }, caption)))), copyright && (h("div", { class: {
78
89
  ["footer-copyright"]: true,
79
90
  ["classification-spacing"]: hasClassificationBanner(),
80
- } }, h("ic-typography", { variant: this.deviceSize <= IC_DEVICE_SIZES.M
91
+ } }, h("ic-typography", { variant: deviceSize <= IC_DEVICE_SIZES.M
81
92
  ? "caption-uppercase"
82
- : "label-uppercase" }, "\u00A9 Crown Copyright")))))))));
93
+ : "label-uppercase" }, "\u00A9 Crown Copyright"))))))))));
83
94
  }
84
95
  static get is() { return "ic-footer"; }
85
96
  static get encapsulation() { return "shadow"; }
@@ -1 +1 @@
1
- {"version":3,"file":"ic-footer.js","sourceRoot":"","sources":["../../../src/components/ic-footer/ic-footer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n Prop,\n State,\n h,\n Host,\n Listen,\n} from \"@stencil/core\";\nimport { IC_DEVICE_SIZES } from \"../../utils/constants\";\nimport {\n getCurrentDeviceSize,\n getBrandForegroundAppearance,\n checkResizeObserver,\n hasClassificationBanner,\n isSlotUsed,\n} from \"../../utils/helpers\";\nimport {\n IcAlignment,\n IcBrand,\n IcBrandForeground,\n IcBrandForegroundEnum,\n} from \"../../utils/types\";\nimport { IcFooterBreakpoints } from \"./ic-footer.types\";\n\n/**\n * @slot description - Content will be rendered at the top of the footer.\n * @slot link - Content will be rendered between description and logos.\n * @slot logo - Content will be rendered underneath footer links.\n * @slot caption - Content will be rendered above Crown Copyright.\n */\n\n@Component({\n tag: \"ic-footer\",\n styleUrl: \"ic-footer.css\",\n shadow: true,\n})\nexport class Footer {\n private footerEl: HTMLElement;\n private resizeObserver: ResizeObserver = null;\n\n @Element() el: HTMLIcFooterElement;\n\n @State() deviceSize: number = IC_DEVICE_SIZES.XL;\n @State() foregroundColor: IcBrandForeground = getBrandForegroundAppearance();\n\n /**\n * The alignment of the section containers used within the footer.\n */\n @Prop() aligned?: IcAlignment = \"left\";\n\n /**\n * The screen size breakpoint at which to switch to the small layout.\n */\n @Prop() breakpoint?: IcFooterBreakpoints = \"medium\";\n\n /**\n * The caption displayed at the bottom of the footer.\n */\n @Prop() caption: string;\n\n /**\n * If `true`, the footer will display the crown copyright at the bottom.\n */\n @Prop() copyright: boolean = true;\n\n /**\n * The description displayed at the top of the footer.\n */\n @Prop() description: string;\n\n /**\n * If `true`, the footer will be set up to handle link groups instead of standalone links.\n */\n @Prop() groupLinks?: boolean = false;\n\n /**\n * @internal Triggers on page resize and triggers style changes in footer links and link groups\n */\n @Event() footerResized: EventEmitter<void>;\n\n disconnectedCallback(): void {\n if (this.resizeObserver !== null) {\n this.resizeObserver.disconnect();\n }\n }\n\n componentWillLoad(): void {\n this.deviceSize = getCurrentDeviceSize();\n }\n\n componentDidLoad(): void {\n checkResizeObserver(this.runResizeObserver);\n }\n\n @Listen(\"brandChange\", { target: \"document\" })\n brandChangeHandler(ev: CustomEvent<IcBrand>): void {\n this.foregroundColor = ev.detail.mode;\n }\n\n private isSmall() {\n const bp = this.breakpoint;\n\n return bp === \"extra small\"\n ? this.deviceSize < IC_DEVICE_SIZES.XS\n : bp === \"small\"\n ? this.deviceSize < IC_DEVICE_SIZES.S\n : bp === \"medium\"\n ? this.deviceSize < IC_DEVICE_SIZES.M\n : bp === \"large\"\n ? this.deviceSize < IC_DEVICE_SIZES.L\n : bp === \"extra large\"\n ? this.deviceSize < IC_DEVICE_SIZES.XL\n : false;\n }\n\n private resizeObserverCallback = (currSize: number) => {\n if (currSize !== this.deviceSize) {\n this.deviceSize = currSize;\n }\n this.footerResized.emit();\n };\n\n private runResizeObserver = () => {\n this.resizeObserver = new ResizeObserver(() => {\n const currSize = getCurrentDeviceSize();\n this.resizeObserverCallback(currSize);\n });\n\n this.resizeObserver.observe(this.footerEl);\n };\n\n render() {\n const {\n aligned,\n caption,\n copyright,\n description,\n groupLinks,\n foregroundColor,\n } = this;\n const small = this.isSmall();\n\n return (\n <Host\n class={{\n [\"ic-footer\"]: true,\n [`ic-footer-${small ? \"small\" : \"sparse\"}`]: true,\n [`ic-footer-${groupLinks ? \"grouped\" : \"ungrouped\"}`]: true,\n [`ic-footer-foreground-${foregroundColor}`]: true,\n // Slots will be able to infer their own color\n [`ic-footer-${IcBrandForegroundEnum.Dark}`]:\n foregroundColor === IcBrandForegroundEnum.Dark,\n [`ic-footer-${IcBrandForegroundEnum.Light}`]:\n foregroundColor === IcBrandForegroundEnum.Light,\n }}\n >\n <footer ref={(footerEl) => (this.footerEl = footerEl)}>\n {/* Description */}\n {(isSlotUsed(this.el, \"description\") || description) && (\n <div class=\"footer-description\">\n <ic-section-container aligned={aligned} fullHeight={true}>\n <div class=\"footer-description-inner\">\n <ic-typography variant=\"body\">\n <slot name=\"description\">{description}</slot>\n </ic-typography>\n </div>\n </ic-section-container>\n </div>\n )}\n\n {/* Links */}\n {isSlotUsed(this.el, \"link\") && (\n <div class=\"footer-links\">\n {groupLinks && small ? (\n <div class=\"footer-links-inner\" role=\"list\">\n <slot name=\"link\" />\n </div>\n ) : (\n <ic-section-container fullHeight aligned={aligned}>\n <div class=\"footer-links-inner\" role=\"list\">\n <slot name=\"link\" />\n </div>\n </ic-section-container>\n )}\n </div>\n )}\n\n {/* Compliance (logo, caption, copyright) */}\n <div class=\"footer-compliance\">\n <ic-section-container aligned={aligned} fullHeight={true}>\n <div class=\"footer-compliance-inner\">\n {isSlotUsed(this.el, \"logo\") && (\n <div class=\"footer-logo\">\n {/* Logo */}\n <slot name=\"logo\" />\n </div>\n )}\n {(isSlotUsed(this.el, \"caption\") || caption) && (\n <div class=\"footer-caption\">\n <ic-typography\n variant={\n this.deviceSize <= IC_DEVICE_SIZES.M\n ? \"caption\"\n : \"body\"\n }\n >\n <slot name=\"caption\">{caption}</slot>\n </ic-typography>\n </div>\n )}\n {copyright && (\n <div\n class={{\n [\"footer-copyright\"]: true,\n [\"classification-spacing\"]: hasClassificationBanner(),\n }}\n >\n <ic-typography\n variant={\n this.deviceSize <= IC_DEVICE_SIZES.M\n ? \"caption-uppercase\"\n : \"label-uppercase\"\n }\n >\n &copy; Crown Copyright\n </ic-typography>\n </div>\n )}\n </div>\n </ic-section-container>\n </div>\n </footer>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"ic-footer.js","sourceRoot":"","sources":["../../../src/components/ic-footer/ic-footer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n State,\n} from \"@stencil/core\";\nimport { IC_DEVICE_SIZES } from \"../../utils/constants\";\nimport {\n getCurrentDeviceSize,\n getBrandForegroundAppearance,\n checkResizeObserver,\n hasClassificationBanner,\n isSlotUsed,\n renderDynamicChildSlots,\n} from \"../../utils/helpers\";\nimport {\n IcAlignment,\n IcBrand,\n IcBrandForeground,\n IcBrandForegroundEnum,\n} from \"../../utils/types\";\nimport { IcFooterBreakpoints } from \"./ic-footer.types\";\n\n/**\n * @slot description - Content will be rendered at the top of the footer.\n * @slot link - Content will be rendered between description and logos.\n * @slot logo - Content will be rendered underneath footer links.\n * @slot caption - Content will be rendered above Crown Copyright.\n */\n\n@Component({\n tag: \"ic-footer\",\n styleUrl: \"ic-footer.css\",\n shadow: true,\n})\nexport class Footer {\n private footerEl: HTMLElement;\n private resizeObserver: ResizeObserver = null;\n private hostMutationObserver: MutationObserver = null;\n\n @Element() el: HTMLIcFooterElement;\n\n @State() deviceSize: number = IC_DEVICE_SIZES.XL;\n @State() foregroundColor: IcBrandForeground = getBrandForegroundAppearance();\n\n /**\n * The alignment of the section containers used within the footer.\n */\n @Prop() aligned?: IcAlignment = \"left\";\n\n /**\n * The screen size breakpoint at which to switch to the small layout.\n */\n @Prop() breakpoint?: IcFooterBreakpoints = \"medium\";\n\n /**\n * The caption displayed at the bottom of the footer.\n */\n @Prop() caption: string;\n\n /**\n * If `true`, the footer will display the crown copyright at the bottom.\n */\n @Prop() copyright: boolean = true;\n\n /**\n * The description displayed at the top of the footer.\n */\n @Prop() description: string;\n\n /**\n * If `true`, the footer will be set up to handle link groups instead of standalone links.\n */\n @Prop() groupLinks?: boolean = false;\n\n /**\n * @internal Triggers on page resize and triggers style changes in footer links and link groups\n */\n @Event() footerResized: EventEmitter<void>;\n\n disconnectedCallback(): void {\n if (this.resizeObserver !== null) {\n this.resizeObserver.disconnect();\n }\n\n this.hostMutationObserver?.disconnect();\n }\n\n componentWillLoad(): void {\n this.deviceSize = getCurrentDeviceSize();\n }\n\n componentDidLoad(): void {\n checkResizeObserver(this.runResizeObserver);\n\n this.hostMutationObserver = new MutationObserver((mutationList) => {\n return renderDynamicChildSlots(mutationList, \"link\", this);\n });\n\n this.hostMutationObserver.observe(this.el, {\n childList: true,\n });\n }\n\n @Listen(\"brandChange\", { target: \"document\" })\n brandChangeHandler(ev: CustomEvent<IcBrand>): void {\n this.foregroundColor = ev.detail.mode;\n }\n\n private isSmall() {\n const bp = this.breakpoint;\n\n return bp === \"extra small\"\n ? this.deviceSize < IC_DEVICE_SIZES.XS\n : bp === \"small\"\n ? this.deviceSize < IC_DEVICE_SIZES.S\n : bp === \"medium\"\n ? this.deviceSize < IC_DEVICE_SIZES.M\n : bp === \"large\"\n ? this.deviceSize < IC_DEVICE_SIZES.L\n : bp === \"extra large\"\n ? this.deviceSize < IC_DEVICE_SIZES.XL\n : false;\n }\n\n private resizeObserverCallback = (currSize: number) => {\n if (currSize !== this.deviceSize) {\n this.deviceSize = currSize;\n }\n this.footerResized.emit();\n };\n\n private runResizeObserver = () => {\n this.resizeObserver = new ResizeObserver(() => {\n const currSize = getCurrentDeviceSize();\n this.resizeObserverCallback(currSize);\n });\n\n this.resizeObserver.observe(this.footerEl);\n };\n\n render() {\n const {\n aligned,\n caption,\n copyright,\n description,\n deviceSize,\n el,\n foregroundColor,\n groupLinks,\n } = this;\n const small = this.isSmall();\n\n const showComplianceSection =\n isSlotUsed(el, \"logo\") ||\n isSlotUsed(el, \"caption\") ||\n caption ||\n copyright;\n\n return (\n <Host\n class={{\n [\"ic-footer\"]: true,\n [`ic-footer-${small ? \"small\" : \"sparse\"}`]: true,\n [`ic-footer-${groupLinks ? \"grouped\" : \"ungrouped\"}`]: true,\n [`ic-footer-foreground-${foregroundColor}`]: true,\n // Slots will be able to infer their own color\n [`ic-footer-${IcBrandForegroundEnum.Dark}`]:\n foregroundColor === IcBrandForegroundEnum.Dark,\n [`ic-footer-${IcBrandForegroundEnum.Light}`]:\n foregroundColor === IcBrandForegroundEnum.Light,\n }}\n >\n <footer ref={(footerEl) => (this.footerEl = footerEl)}>\n {/* Description */}\n {(isSlotUsed(el, \"description\") || description) && (\n <div class=\"footer-description\">\n <ic-section-container aligned={aligned} fullHeight={true}>\n <div class=\"footer-description-inner\">\n <ic-typography variant=\"body\">\n <slot name=\"description\">{description}</slot>\n </ic-typography>\n </div>\n </ic-section-container>\n </div>\n )}\n\n {/* Links */}\n {isSlotUsed(el, \"link\") && (\n <div class=\"footer-links\">\n {groupLinks && small ? (\n <div class=\"footer-links-inner\" role=\"list\">\n <slot name=\"link\" />\n </div>\n ) : (\n <ic-section-container fullHeight aligned={aligned}>\n <div class=\"footer-links-inner\" role=\"list\">\n <slot name=\"link\" />\n </div>\n </ic-section-container>\n )}\n </div>\n )}\n\n {/* Compliance (logo, caption, copyright) */}\n {showComplianceSection && (\n <div class=\"footer-compliance\">\n <ic-section-container aligned={aligned} fullHeight={true}>\n <div class=\"footer-compliance-inner\">\n {isSlotUsed(el, \"logo\") && (\n <div class=\"footer-logo\">\n <slot name=\"logo\" />\n </div>\n )}\n {(isSlotUsed(el, \"caption\") || caption) && (\n <div class=\"footer-caption\">\n <ic-typography\n variant={\n deviceSize <= IC_DEVICE_SIZES.M ? \"caption\" : \"body\"\n }\n >\n <slot name=\"caption\">{caption}</slot>\n </ic-typography>\n </div>\n )}\n {copyright && (\n <div\n class={{\n [\"footer-copyright\"]: true,\n [\"classification-spacing\"]: hasClassificationBanner(),\n }}\n >\n <ic-typography\n variant={\n deviceSize <= IC_DEVICE_SIZES.M\n ? \"caption-uppercase\"\n : \"label-uppercase\"\n }\n >\n &copy; Crown Copyright\n </ic-typography>\n </div>\n )}\n </div>\n </ic-section-container>\n </div>\n )}\n </footer>\n </Host>\n );\n }\n}\n"]}
@@ -2,7 +2,14 @@ import { newSpecPage } from "@stencil/core/testing";
2
2
  import { Typography } from "../../../ic-typography/ic-typography";
3
3
  import { Footer } from "../../ic-footer";
4
4
  import { DEVICE_SIZES } from "../../../../utils/helpers";
5
+ import { mockHasDynamicChildSlots, mockMutationObserverImplementation, mockRenderDynamicChildSlots, } from "../../../../testspec.setup";
5
6
  describe("ic-footer", () => {
7
+ afterAll(() => {
8
+ jest.restoreAllMocks();
9
+ });
10
+ afterEach(() => {
11
+ jest.clearAllMocks();
12
+ });
6
13
  it("should render", async () => {
7
14
  const page = await newSpecPage({
8
15
  components: [Footer],
@@ -38,6 +45,13 @@ describe("ic-footer", () => {
38
45
  });
39
46
  expect(page.root).toMatchSnapshot();
40
47
  });
48
+ it("should render without the compliance section when there is no logo, caption or copyright", async () => {
49
+ const page = await newSpecPage({
50
+ components: [Footer],
51
+ html: `<ic-footer description="This is a footer" copyright=false></ic-footer>`,
52
+ });
53
+ expect(page.root).toMatchSnapshot();
54
+ });
41
55
  it("should render with links", async () => {
42
56
  const page = await newSpecPage({
43
57
  components: [Footer],
@@ -136,5 +150,32 @@ describe("ic-footer", () => {
136
150
  expect(page.root).not.toBeNull;
137
151
  expect(page.root).toMatchSnapshot("footer-xl-breakpoint");
138
152
  });
153
+ it("should test rendering slotted after initial render", async () => {
154
+ const page = await newSpecPage({
155
+ components: [Footer],
156
+ html: `<ic-footer></ic-footer>`,
157
+ });
158
+ const component = page.rootInstance;
159
+ const host = page.root;
160
+ const observerInstance = mockMutationObserverImplementation.mock.results[0].value;
161
+ const footerLink = page.doc.createElement("ic-footer-link");
162
+ footerLink.textContent = "foo";
163
+ footerLink.setAttribute("slot", "link");
164
+ observerInstance.observe(host, { childList: true });
165
+ host.appendChild(footerLink);
166
+ const mockMutationRecord = [
167
+ {
168
+ addedNodes: [footerLink],
169
+ removedNodes: [],
170
+ target: host,
171
+ },
172
+ ];
173
+ observerInstance.trigger(mockMutationRecord);
174
+ await page.waitForChanges();
175
+ expect(mockRenderDynamicChildSlots).toHaveBeenCalledTimes(1);
176
+ expect(mockRenderDynamicChildSlots).toHaveBeenCalledWith(mockMutationRecord, "link", component);
177
+ expect(mockHasDynamicChildSlots).toHaveBeenCalledTimes(1);
178
+ expect(page.root).toMatchSnapshot();
179
+ });
139
180
  });
140
181
  //# sourceMappingURL=ic-footer.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ic-footer.spec.js","sourceRoot":"","sources":["../../../../../src/components/ic-footer/test/basic/ic-footer.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { newSpecPage } from \"@stencil/core/testing\";\nimport { Typography } from \"../../../ic-typography/ic-typography\";\nimport { Footer } from \"../../ic-footer\";\nimport { DEVICE_SIZES } from \"../../../../utils/helpers\";\n\ndescribe(\"ic-footer\", () => {\n it(\"should render\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: `<ic-footer></ic-footer>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it(\"should render with a description via the description slot\", async () => {\n const page = await newSpecPage({\n components: [Footer, Typography],\n html: `<ic-footer><ic-typography slot=\"description\">This is a footer</ic-typography></ic-footer>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it(\"should render with a caption via the caption prop\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: `<ic-footer description=\"This is a footer\" caption=\"Made by ICDS\"></ic-footer>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it(\"should render with a caption via the caption slot\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: `<ic-footer description=\"This is a footer\"><ic-typography slot=\"caption\">Made by ICDS</ic-typography></ic-footer>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it(\"should render without the copyright text when the copyright prop is false\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: `<ic-footer description=\"This is a footer\" copyright=false><ic-typography slot=\"caption\">Made by ICDS</ic-typography></ic-footer>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it(\"should render with links\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: `\n <ic-footer description=\"This is a footer\" caption=\"Made by ICDS\">\n <ic-footer-link href=\"/\" slot=\"link\">Link</ic-footer-link>\n <ic-footer-link href=\"/\" slot=\"link\">Link</ic-footer-link>\n </ic-footer>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it(\"should render with link groups\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: `\n <ic-footer description=\"This is a footer\" caption=\"Made by ICDS\">\n <ic-footer-link-group label=\"Links\" slot=\"link\">\n <ic-footer-link href=\"/\">Link</ic-footer-link>\n <ic-footer-link href=\"/\">Link</ic-footer-link>\n </ic-footer-link-group>\n </ic-footer>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it(\"should render with classification banner\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: `<ic-classification-banner></ic-classification-banner><ic-footer></ic-footer>`,\n });\n\n expect(page.root).toMatchSnapshot(\"footer-classification-banner\");\n });\n\n it(\"should update foreground colour when the brand is updated\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: \"<div><ic-footer id='ic-footer'></ic-footer></div>\",\n });\n\n await page.rootInstance.brandChangeHandler({ detail: { mode: \"light\" } });\n\n expect(page.rootInstance.foregroundColor).toBe(\"light\");\n });\n\n it(\"should update when resized\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: \"<div><ic-footer id='ic-footer' caption='caption'></ic-footer></div>\",\n });\n\n await page.rootInstance.runResizeObserver();\n await page.waitForChanges();\n\n await page.rootInstance.resizeObserverCallback(DEVICE_SIZES.XL);\n await page.waitForChanges();\n\n expect(\n page.root.shadowRoot\n .querySelector(\".footer-caption\")\n .firstElementChild.getAttribute(\"variant\")\n ).toBe(\"body\");\n\n await page.rootInstance.resizeObserverCallback(DEVICE_SIZES.XS);\n await page.waitForChanges();\n\n expect(\n page.root.shadowRoot\n .querySelector(\".footer-caption\")\n .firstElementChild.getAttribute(\"variant\")\n ).toBe(\"caption\");\n\n await page.rootInstance.disconnectedCallback();\n });\n\n it(\"should render with the correct small breakpoint at extra small device size\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: \"<div><ic-footer id='ic-footer' caption='caption' breakpoint='extra small'></ic-footer></div>\",\n });\n\n expect(page.root).not.toBeNull;\n\n expect(page.root).toMatchSnapshot(\"footer-xs-breakpoint\");\n });\n\n it(\"should render with the correct small breakpoint at small device size\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: \"<div><ic-footer id='ic-footer' caption='caption' breakpoint='small'></ic-footer></div>\",\n });\n\n expect(page.root).not.toBeNull;\n\n expect(page.root).toMatchSnapshot(\"footer-s-breakpoint\");\n });\n\n it(\"should render with the correct small breakpoint at medium device size\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: \"<div><ic-footer id='ic-footer' caption='caption' breakpoint='medium'></ic-footer></div>\",\n });\n\n expect(page.root).not.toBeNull;\n\n expect(page.root).toMatchSnapshot(\"footer-m-breakpoint\");\n });\n\n it(\"should render with the correct small breakpoint at large device size\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: \"<div><ic-footer id='ic-footer' caption='caption' breakpoint='large'></ic-footer></div>\",\n });\n\n expect(page.root).not.toBeNull;\n\n expect(page.root).toMatchSnapshot(\"footer-l-breakpoint\");\n });\n\n it(\"should render with the correct small breakpoint at extra large device size\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: \"<div><ic-footer id='ic-footer' caption='caption' breakpoint='extra large'></ic-footer></div>\",\n });\n\n expect(page.root).not.toBeNull;\n\n expect(page.root).toMatchSnapshot(\"footer-xl-breakpoint\");\n });\n});\n"]}
1
+ {"version":3,"file":"ic-footer.spec.js","sourceRoot":"","sources":["../../../../../src/components/ic-footer/test/basic/ic-footer.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { newSpecPage } from \"@stencil/core/testing\";\nimport { Typography } from \"../../../ic-typography/ic-typography\";\nimport { Footer } from \"../../ic-footer\";\nimport { DEVICE_SIZES } from \"../../../../utils/helpers\";\nimport {\n mockHasDynamicChildSlots,\n mockMutationObserverImplementation,\n MockMutationRecord,\n mockRenderDynamicChildSlots,\n} from \"../../../../testspec.setup\";\n\ndescribe(\"ic-footer\", () => {\n afterAll(() => {\n jest.restoreAllMocks();\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n it(\"should render\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: `<ic-footer></ic-footer>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it(\"should render with a description via the description slot\", async () => {\n const page = await newSpecPage({\n components: [Footer, Typography],\n html: `<ic-footer><ic-typography slot=\"description\">This is a footer</ic-typography></ic-footer>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it(\"should render with a caption via the caption prop\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: `<ic-footer description=\"This is a footer\" caption=\"Made by ICDS\"></ic-footer>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it(\"should render with a caption via the caption slot\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: `<ic-footer description=\"This is a footer\"><ic-typography slot=\"caption\">Made by ICDS</ic-typography></ic-footer>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it(\"should render without the copyright text when the copyright prop is false\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: `<ic-footer description=\"This is a footer\" copyright=false><ic-typography slot=\"caption\">Made by ICDS</ic-typography></ic-footer>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it(\"should render without the compliance section when there is no logo, caption or copyright\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: `<ic-footer description=\"This is a footer\" copyright=false></ic-footer>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it(\"should render with links\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: `\n <ic-footer description=\"This is a footer\" caption=\"Made by ICDS\">\n <ic-footer-link href=\"/\" slot=\"link\">Link</ic-footer-link>\n <ic-footer-link href=\"/\" slot=\"link\">Link</ic-footer-link>\n </ic-footer>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it(\"should render with link groups\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: `\n <ic-footer description=\"This is a footer\" caption=\"Made by ICDS\">\n <ic-footer-link-group label=\"Links\" slot=\"link\">\n <ic-footer-link href=\"/\">Link</ic-footer-link>\n <ic-footer-link href=\"/\">Link</ic-footer-link>\n </ic-footer-link-group>\n </ic-footer>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it(\"should render with classification banner\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: `<ic-classification-banner></ic-classification-banner><ic-footer></ic-footer>`,\n });\n\n expect(page.root).toMatchSnapshot(\"footer-classification-banner\");\n });\n\n it(\"should update foreground colour when the brand is updated\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: \"<div><ic-footer id='ic-footer'></ic-footer></div>\",\n });\n\n await page.rootInstance.brandChangeHandler({ detail: { mode: \"light\" } });\n\n expect(page.rootInstance.foregroundColor).toBe(\"light\");\n });\n\n it(\"should update when resized\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: \"<div><ic-footer id='ic-footer' caption='caption'></ic-footer></div>\",\n });\n\n await page.rootInstance.runResizeObserver();\n await page.waitForChanges();\n\n await page.rootInstance.resizeObserverCallback(DEVICE_SIZES.XL);\n await page.waitForChanges();\n\n expect(\n page.root.shadowRoot\n .querySelector(\".footer-caption\")\n .firstElementChild.getAttribute(\"variant\")\n ).toBe(\"body\");\n\n await page.rootInstance.resizeObserverCallback(DEVICE_SIZES.XS);\n await page.waitForChanges();\n\n expect(\n page.root.shadowRoot\n .querySelector(\".footer-caption\")\n .firstElementChild.getAttribute(\"variant\")\n ).toBe(\"caption\");\n\n await page.rootInstance.disconnectedCallback();\n });\n\n it(\"should render with the correct small breakpoint at extra small device size\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: \"<div><ic-footer id='ic-footer' caption='caption' breakpoint='extra small'></ic-footer></div>\",\n });\n\n expect(page.root).not.toBeNull;\n\n expect(page.root).toMatchSnapshot(\"footer-xs-breakpoint\");\n });\n\n it(\"should render with the correct small breakpoint at small device size\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: \"<div><ic-footer id='ic-footer' caption='caption' breakpoint='small'></ic-footer></div>\",\n });\n\n expect(page.root).not.toBeNull;\n\n expect(page.root).toMatchSnapshot(\"footer-s-breakpoint\");\n });\n\n it(\"should render with the correct small breakpoint at medium device size\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: \"<div><ic-footer id='ic-footer' caption='caption' breakpoint='medium'></ic-footer></div>\",\n });\n\n expect(page.root).not.toBeNull;\n\n expect(page.root).toMatchSnapshot(\"footer-m-breakpoint\");\n });\n\n it(\"should render with the correct small breakpoint at large device size\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: \"<div><ic-footer id='ic-footer' caption='caption' breakpoint='large'></ic-footer></div>\",\n });\n\n expect(page.root).not.toBeNull;\n\n expect(page.root).toMatchSnapshot(\"footer-l-breakpoint\");\n });\n\n it(\"should render with the correct small breakpoint at extra large device size\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: \"<div><ic-footer id='ic-footer' caption='caption' breakpoint='extra large'></ic-footer></div>\",\n });\n\n expect(page.root).not.toBeNull;\n\n expect(page.root).toMatchSnapshot(\"footer-xl-breakpoint\");\n });\n\n it(\"should test rendering slotted after initial render\", async () => {\n const page = await newSpecPage({\n components: [Footer],\n html: `<ic-footer></ic-footer>`,\n });\n\n const component = page.rootInstance;\n const host = page.root;\n\n const observerInstance =\n mockMutationObserverImplementation.mock.results[0].value;\n\n const footerLink = page.doc.createElement(\"ic-footer-link\");\n footerLink.textContent = \"foo\";\n footerLink.setAttribute(\"slot\", \"link\");\n\n observerInstance.observe(host, { childList: true });\n\n host.appendChild(footerLink);\n\n const mockMutationRecord: MockMutationRecord[] = [\n {\n addedNodes: [footerLink],\n removedNodes: [],\n target: host,\n },\n ];\n\n observerInstance.trigger(mockMutationRecord);\n\n await page.waitForChanges();\n\n expect(mockRenderDynamicChildSlots).toHaveBeenCalledTimes(1);\n expect(mockRenderDynamicChildSlots).toHaveBeenCalledWith(\n mockMutationRecord,\n \"link\",\n component\n );\n\n expect(mockHasDynamicChildSlots).toHaveBeenCalledTimes(1);\n\n expect(page.root).toMatchSnapshot();\n });\n});\n"]}
@@ -1,6 +1,6 @@
1
- import { Host, h, forceUpdate, } from "@stencil/core";
1
+ import { Host, h, } from "@stencil/core";
2
2
  import { IcBrandForegroundEnum, } from "../../utils/types";
3
- import { slotHasContent, getBrandForegroundAppearance, onComponentRequiredPropUndefined, isPropDefined, isSlotUsed, checkSlotInChildMutations, } from "../../utils/helpers";
3
+ import { slotHasContent, getBrandForegroundAppearance, onComponentRequiredPropUndefined, isPropDefined, isSlotUsed, renderDynamicChildSlots, } from "../../utils/helpers";
4
4
  /**
5
5
  * @slot heading - Content will be rendered in the title area, in place of the heading.
6
6
  * @slot subheading - Content will be rendered in the title area, in place of the subheading.
@@ -10,13 +10,6 @@ import { slotHasContent, getBrandForegroundAppearance, onComponentRequiredPropUn
10
10
  export class Hero {
11
11
  constructor() {
12
12
  this.hostMutationObserver = null;
13
- this.hostMutationCallback = (mutationList) => {
14
- if (mutationList.some(({ type, addedNodes, removedNodes }) => type === "childList"
15
- ? checkSlotInChildMutations(addedNodes, removedNodes, "secondary")
16
- : false)) {
17
- forceUpdate(this);
18
- }
19
- };
20
13
  this.foregroundColor = getBrandForegroundAppearance();
21
14
  this.rightContent = false;
22
15
  this.leftContentFullWidth = !this.rightContent && this.secondaryHeading === undefined;
@@ -41,7 +34,7 @@ export class Hero {
41
34
  componentDidLoad() {
42
35
  !isSlotUsed(this.el, "heading") &&
43
36
  onComponentRequiredPropUndefined([{ prop: this.heading, propName: "heading" }], "Hero");
44
- this.hostMutationObserver = new MutationObserver(this.hostMutationCallback);
37
+ this.hostMutationObserver = new MutationObserver((mutationList) => renderDynamicChildSlots(mutationList, "secondary", this));
45
38
  this.hostMutationObserver.observe(this.el, {
46
39
  childList: true,
47
40
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ic-hero.js","sourceRoot":"","sources":["../../../src/components/ic-hero/ic-hero.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Host,\n Prop,\n h,\n State,\n Listen,\n forceUpdate,\n} from \"@stencil/core\";\nimport {\n IcAlignment,\n IcSizesNoLarge,\n IcBrand,\n IcBrandForeground,\n IcBrandForegroundEnum,\n} from \"../../utils/types\";\nimport {\n slotHasContent,\n getBrandForegroundAppearance,\n onComponentRequiredPropUndefined,\n isPropDefined,\n isSlotUsed,\n checkSlotInChildMutations,\n} from \"../../utils/helpers\";\nimport { IcHeroContentAlignments } from \"./ic-hero.types\";\n\n/**\n * @slot heading - Content will be rendered in the title area, in place of the heading.\n * @slot subheading - Content will be rendered in the title area, in place of the subheading.\n * @slot interaction - Content will be rendered in the interaction area, adjacent to the title area.\n * @slot secondary - Content will be rendered in the secondary content area.\n */\n\n@Component({\n tag: \"ic-hero\",\n styleUrl: \"ic-hero.css\",\n shadow: true,\n})\nexport class Hero {\n private hostMutationObserver: MutationObserver = null;\n\n @Element() el: HTMLIcHeroElement;\n\n @State() foregroundColor: IcBrandForeground = getBrandForegroundAppearance();\n @State() rightContent: boolean = false;\n // set by above state\n @State() leftContentFullWidth: boolean =\n !this.rightContent && this.secondaryHeading === undefined;\n @State() scrollFactor: string = \"right -100px\";\n\n /**\n * The alignment of the hero.\n */\n @Prop() aligned: IcAlignment = \"left\";\n\n /**\n * The optional background image.\n */\n @Prop() backgroundImage?: string;\n\n /**\n * The alignment of the hero content.\n */\n @Prop() contentAligned: IcHeroContentAlignments = \"left\";\n\n /**\n * If `true`, the background image (if set) will not scroll using a parallax effect.\n */\n @Prop() disableBackgroundParallax?: boolean = false;\n\n /**\n * The heading of the hero. An <h2> level heading.\n */\n @Prop() heading: string;\n\n /**\n * The optional secondary heading, an <h3> level heading. Replaced by slotted right content.\n */\n @Prop() secondaryHeading?: string;\n\n /**\n * The optional secondary subheading, replaced by slotted right content.\n */\n @Prop() secondarySubheading?: string;\n\n /**\n * The size of the hero component.\n */\n @Prop() size?: IcSizesNoLarge = \"medium\";\n\n /**\n * The description for the hero.\n */\n @Prop() subheading?: string;\n\n disconnectedCallback(): void {\n this.hostMutationObserver?.disconnect();\n }\n\n componentWillLoad(): void {\n this.rightContent = slotHasContent(this.el, \"secondary\");\n }\n\n componentDidLoad(): void {\n !isSlotUsed(this.el, \"heading\") &&\n onComponentRequiredPropUndefined(\n [{ prop: this.heading, propName: \"heading\" }],\n \"Hero\"\n );\n\n this.hostMutationObserver = new MutationObserver(this.hostMutationCallback);\n this.hostMutationObserver.observe(this.el, {\n childList: true,\n });\n }\n\n componentWillRender(): void {\n this.rightContent = slotHasContent(this.el, \"secondary\");\n }\n\n @Listen(\"brandChange\", { target: \"document\" })\n brandChangeHandler(ev: CustomEvent<IcBrand>): void {\n this.foregroundColor = ev.detail.mode;\n }\n\n @Listen(\"scroll\", { target: \"document\" })\n doScroll(): void {\n if (this.disableBackgroundParallax) {\n return;\n }\n\n const scrolltotop = document.scrollingElement.scrollTop;\n const factor = 0.4;\n const y = -100 + scrolltotop * factor;\n this.scrollFactor = \"right \" + y + \"px\";\n }\n\n private hostMutationCallback = (mutationList: MutationRecord[]): void => {\n if (\n mutationList.some(({ type, addedNodes, removedNodes }) =>\n type === \"childList\"\n ? checkSlotInChildMutations(addedNodes, removedNodes, \"secondary\")\n : false\n )\n ) {\n forceUpdate(this);\n }\n };\n\n render() {\n const {\n aligned,\n size,\n heading,\n subheading,\n secondaryHeading,\n secondarySubheading,\n foregroundColor,\n backgroundImage,\n scrollFactor,\n } = this;\n\n let style = {};\n\n if (isPropDefined(backgroundImage)) {\n style = {\n \"background-image\": \"url(\" + backgroundImage + \")\",\n \"background-position\": scrollFactor,\n };\n }\n\n return (\n <Host\n class={{\n [`ic-hero-${IcBrandForegroundEnum.Dark}`]:\n foregroundColor === IcBrandForegroundEnum.Dark,\n [\"has-background-image\"]: backgroundImage !== undefined,\n [\"ic-hero-small\"]: size === \"small\",\n [\"secondary-heading\"]: !!secondaryHeading,\n }}\n style={style}\n >\n <ic-section-container\n aligned={aligned}\n fullHeight\n class=\"section-container\"\n >\n <div\n class={{\n [\"left-container\"]: true,\n [\"left-container-full-width\"]: this.leftContentFullWidth,\n }}\n >\n <div class=\"heading\">\n <slot name=\"heading\">\n <ic-typography\n variant={size === \"small\" ? \"h2\" : \"h1\"}\n class={{\n [\"heading-bottom-spacing\"]: size !== \"small\",\n }}\n >\n <h2>{heading}</h2>\n </ic-typography>\n </slot>\n </div>\n <div class=\"subheading\">\n <slot name=\"subheading\">\n <ic-typography variant=\"body\">{subheading}</ic-typography>\n </slot>\n </div>\n <div class=\"interaction-container\">\n <slot name=\"interaction\"></slot>\n </div>\n </div>\n {(isPropDefined(secondaryHeading) || this.rightContent) && (\n <div class=\"right-container\">\n <slot name=\"secondary\">\n {secondaryHeading && (\n <div class=\"secondary-container\">\n <div class=\"secondary-heading\">\n <ic-typography variant=\"h4\">\n <h3>{secondaryHeading}</h3>\n </ic-typography>\n </div>\n <div class=\"secondary-subheading\">\n <ic-typography variant=\"subtitle-small\">\n {secondarySubheading}\n </ic-typography>\n </div>\n </div>\n )}\n </slot>\n </div>\n )}\n </ic-section-container>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"ic-hero.js","sourceRoot":"","sources":["../../../src/components/ic-hero/ic-hero.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Host,\n Prop,\n h,\n State,\n Listen,\n} from \"@stencil/core\";\nimport {\n IcAlignment,\n IcSizesNoLarge,\n IcBrand,\n IcBrandForeground,\n IcBrandForegroundEnum,\n} from \"../../utils/types\";\nimport {\n slotHasContent,\n getBrandForegroundAppearance,\n onComponentRequiredPropUndefined,\n isPropDefined,\n isSlotUsed,\n renderDynamicChildSlots,\n} from \"../../utils/helpers\";\nimport { IcHeroContentAlignments } from \"./ic-hero.types\";\n\n/**\n * @slot heading - Content will be rendered in the title area, in place of the heading.\n * @slot subheading - Content will be rendered in the title area, in place of the subheading.\n * @slot interaction - Content will be rendered in the interaction area, adjacent to the title area.\n * @slot secondary - Content will be rendered in the secondary content area.\n */\n\n@Component({\n tag: \"ic-hero\",\n styleUrl: \"ic-hero.css\",\n shadow: true,\n})\nexport class Hero {\n private hostMutationObserver: MutationObserver = null;\n\n @Element() el: HTMLIcHeroElement;\n\n @State() foregroundColor: IcBrandForeground = getBrandForegroundAppearance();\n @State() rightContent: boolean = false;\n // set by above state\n @State() leftContentFullWidth: boolean =\n !this.rightContent && this.secondaryHeading === undefined;\n @State() scrollFactor: string = \"right -100px\";\n\n /**\n * The alignment of the hero.\n */\n @Prop() aligned: IcAlignment = \"left\";\n\n /**\n * The optional background image.\n */\n @Prop() backgroundImage?: string;\n\n /**\n * The alignment of the hero content.\n */\n @Prop() contentAligned: IcHeroContentAlignments = \"left\";\n\n /**\n * If `true`, the background image (if set) will not scroll using a parallax effect.\n */\n @Prop() disableBackgroundParallax?: boolean = false;\n\n /**\n * The heading of the hero. An <h2> level heading.\n */\n @Prop() heading: string;\n\n /**\n * The optional secondary heading, an <h3> level heading. Replaced by slotted right content.\n */\n @Prop() secondaryHeading?: string;\n\n /**\n * The optional secondary subheading, replaced by slotted right content.\n */\n @Prop() secondarySubheading?: string;\n\n /**\n * The size of the hero component.\n */\n @Prop() size?: IcSizesNoLarge = \"medium\";\n\n /**\n * The description for the hero.\n */\n @Prop() subheading?: string;\n\n disconnectedCallback(): void {\n this.hostMutationObserver?.disconnect();\n }\n\n componentWillLoad(): void {\n this.rightContent = slotHasContent(this.el, \"secondary\");\n }\n\n componentDidLoad(): void {\n !isSlotUsed(this.el, \"heading\") &&\n onComponentRequiredPropUndefined(\n [{ prop: this.heading, propName: \"heading\" }],\n \"Hero\"\n );\n\n this.hostMutationObserver = new MutationObserver((mutationList) =>\n renderDynamicChildSlots(mutationList, \"secondary\", this)\n );\n this.hostMutationObserver.observe(this.el, {\n childList: true,\n });\n }\n\n componentWillRender(): void {\n this.rightContent = slotHasContent(this.el, \"secondary\");\n }\n\n @Listen(\"brandChange\", { target: \"document\" })\n brandChangeHandler(ev: CustomEvent<IcBrand>): void {\n this.foregroundColor = ev.detail.mode;\n }\n\n @Listen(\"scroll\", { target: \"document\" })\n doScroll(): void {\n if (this.disableBackgroundParallax) {\n return;\n }\n\n const scrolltotop = document.scrollingElement.scrollTop;\n const factor = 0.4;\n const y = -100 + scrolltotop * factor;\n this.scrollFactor = \"right \" + y + \"px\";\n }\n\n render() {\n const {\n aligned,\n size,\n heading,\n subheading,\n secondaryHeading,\n secondarySubheading,\n foregroundColor,\n backgroundImage,\n scrollFactor,\n } = this;\n\n let style = {};\n\n if (isPropDefined(backgroundImage)) {\n style = {\n \"background-image\": \"url(\" + backgroundImage + \")\",\n \"background-position\": scrollFactor,\n };\n }\n\n return (\n <Host\n class={{\n [`ic-hero-${IcBrandForegroundEnum.Dark}`]:\n foregroundColor === IcBrandForegroundEnum.Dark,\n [\"has-background-image\"]: backgroundImage !== undefined,\n [\"ic-hero-small\"]: size === \"small\",\n [\"secondary-heading\"]: !!secondaryHeading,\n }}\n style={style}\n >\n <ic-section-container\n aligned={aligned}\n fullHeight\n class=\"section-container\"\n >\n <div\n class={{\n [\"left-container\"]: true,\n [\"left-container-full-width\"]: this.leftContentFullWidth,\n }}\n >\n <div class=\"heading\">\n <slot name=\"heading\">\n <ic-typography\n variant={size === \"small\" ? \"h2\" : \"h1\"}\n class={{\n [\"heading-bottom-spacing\"]: size !== \"small\",\n }}\n >\n <h2>{heading}</h2>\n </ic-typography>\n </slot>\n </div>\n <div class=\"subheading\">\n <slot name=\"subheading\">\n <ic-typography variant=\"body\">{subheading}</ic-typography>\n </slot>\n </div>\n <div class=\"interaction-container\">\n <slot name=\"interaction\"></slot>\n </div>\n </div>\n {(isPropDefined(secondaryHeading) || this.rightContent) && (\n <div class=\"right-container\">\n <slot name=\"secondary\">\n {secondaryHeading && (\n <div class=\"secondary-container\">\n <div class=\"secondary-heading\">\n <ic-typography variant=\"h4\">\n <h3>{secondaryHeading}</h3>\n </ic-typography>\n </div>\n <div class=\"secondary-subheading\">\n <ic-typography variant=\"subtitle-small\">\n {secondarySubheading}\n </ic-typography>\n </div>\n </div>\n )}\n </slot>\n </div>\n )}\n </ic-section-container>\n </Host>\n );\n }\n}\n"]}
@@ -1,6 +1,13 @@
1
1
  import { newSpecPage } from "@stencil/core/testing";
2
2
  import { Hero } from "../../ic-hero";
3
+ import { mockHasDynamicChildSlots, mockMutationObserverImplementation, mockRenderDynamicChildSlots, } from "../../../../testspec.setup";
3
4
  describe("ic-hero component", () => {
5
+ afterAll(() => {
6
+ jest.restoreAllMocks();
7
+ });
8
+ afterEach(() => {
9
+ jest.clearAllMocks();
10
+ });
4
11
  it("should render", async () => {
5
12
  const page = await newSpecPage({
6
13
  components: [Hero],
@@ -77,15 +84,26 @@ describe("ic-hero component", () => {
77
84
  components: [Hero],
78
85
  html: `<ic-hero heading="Test title" subheading="Test text"></ic-hero>`,
79
86
  });
87
+ const component = page.rootInstance;
88
+ const host = page.root;
89
+ const observerInstance = mockMutationObserverImplementation.mock.results[0].value;
80
90
  const icon = document.createElement("svg");
81
91
  icon.setAttribute("slot", "secondary");
82
- page.rootInstance.hostMutationCallback([
92
+ observerInstance.observe(host, { childList: true });
93
+ host.appendChild(icon);
94
+ const mockMutationRecord = [
83
95
  {
84
- type: "childList",
85
96
  addedNodes: [icon],
86
97
  removedNodes: [],
98
+ target: host,
87
99
  },
88
- ]);
100
+ ];
101
+ observerInstance.trigger(mockMutationRecord);
102
+ await page.waitForChanges();
103
+ expect(mockRenderDynamicChildSlots).toHaveBeenCalledTimes(1);
104
+ expect(mockRenderDynamicChildSlots).toHaveBeenCalledWith(mockMutationRecord, "secondary", component);
105
+ expect(mockHasDynamicChildSlots).toHaveBeenCalledTimes(1);
106
+ expect(page.root).toMatchSnapshot();
89
107
  });
90
108
  });
91
109
  //# sourceMappingURL=ic-hero.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ic-hero.spec.js","sourceRoot":"","sources":["../../../../../src/components/ic-hero/test/basic/ic-hero.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { newSpecPage } from \"@stencil/core/testing\";\nimport { Hero } from \"../../ic-hero\";\n\ndescribe(\"ic-hero component\", () => {\n it(\"should render\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" subheading=\"Test text\"></ic-hero>`,\n });\n\n expect(page.root).toMatchSnapshot(\"renders\");\n });\n\n it(\"should render with a secondary heading\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" subheading=\"Test text\" secondary-heading=\"Test title\" secondary-subheading=\"Test text\"></ic-hero>`,\n });\n\n expect(page.root).toMatchSnapshot(\"renders-with-secondary-heading\");\n });\n\n it(\"should render with interaction content\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" subheading=\"Test text\"><ic-button slot=\"interaction\">Button</ic-button></ic-hero>`,\n });\n\n expect(page.root).toMatchSnapshot(\"renders-with-interaction-content\");\n });\n\n it(\"should render with secondary content\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" subheading=\"Test text\"><ic-card-vertical slot=\"secondary\" heading=\"Test card\"></ic-card-vertical></ic-hero>`,\n });\n\n expect(page.root).toMatchSnapshot(\"renders-with-secondary-content\");\n });\n\n it(\"should render with a background image when given\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" subheading=\"Test text\" background-image=\"test.png\"><ic-card-vertical slot=\"secondary\" heading=\"Test card\"></ic-card-vertical></ic-hero>`,\n });\n\n expect(page.root).toMatchSnapshot(\"renders-with-background-image\");\n });\n\n it(\"should use parallax on scroll when a background image is given\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" subheading=\"Test text\" background-image=\"test.png\"><ic-card-vertical slot=\"secondary\" heading=\"Test card\"></ic-card-vertical></ic-hero>`,\n });\n\n page.doc.scrollingElement.scrollTop = 50;\n page.doc.dispatchEvent(new CustomEvent(\"scroll\"));\n\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot(\"renders-with-parallax-on-scroll\");\n });\n\n it(\"should use not parallax on scroll when a background image is given, but parallax disabled\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" disable-background-parallax subheading=\"Test text\" background-image=\"test.png\"><ic-card-vertical slot=\"secondary\" heading=\"Test card\"></ic-card-vertical></ic-hero>`,\n });\n\n page.doc.scrollingElement.scrollTop = 50;\n page.doc.dispatchEvent(new CustomEvent(\"scroll\"));\n\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot(\n \"renders-with-parallax-on-scroll-disabled\"\n );\n });\n\n it(\"should render at size small\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero size=\"small\" heading=\"Test title\" subheading=\"Test text\"></ic-hero>`,\n });\n\n expect(page.root).toMatchSnapshot(\"renders-small-variant\");\n });\n\n it(\"should correctly set foregroundColor on brand change\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" subheading=\"Test text\"></ic-hero>`,\n });\n\n await page.rootInstance.brandChangeHandler({ detail: { mode: \"dark\" } });\n await page.waitForChanges();\n\n expect(page.rootInstance.foregroundColor).toBe(\"dark\");\n });\n\n it(\"should test rendering secondary slot after initial render\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" subheading=\"Test text\"></ic-hero>`,\n });\n\n const icon = document.createElement(\"svg\");\n icon.setAttribute(\"slot\", \"secondary\");\n\n page.rootInstance.hostMutationCallback([\n {\n type: \"childList\",\n addedNodes: [icon],\n removedNodes: [],\n },\n ]);\n });\n});\n"]}
1
+ {"version":3,"file":"ic-hero.spec.js","sourceRoot":"","sources":["../../../../../src/components/ic-hero/test/basic/ic-hero.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { newSpecPage } from \"@stencil/core/testing\";\nimport { Hero } from \"../../ic-hero\";\nimport {\n mockHasDynamicChildSlots,\n mockMutationObserverImplementation,\n MockMutationRecord,\n mockRenderDynamicChildSlots,\n} from \"../../../../testspec.setup\";\n\ndescribe(\"ic-hero component\", () => {\n afterAll(() => {\n jest.restoreAllMocks();\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n it(\"should render\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" subheading=\"Test text\"></ic-hero>`,\n });\n\n expect(page.root).toMatchSnapshot(\"renders\");\n });\n\n it(\"should render with a secondary heading\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" subheading=\"Test text\" secondary-heading=\"Test title\" secondary-subheading=\"Test text\"></ic-hero>`,\n });\n\n expect(page.root).toMatchSnapshot(\"renders-with-secondary-heading\");\n });\n\n it(\"should render with interaction content\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" subheading=\"Test text\"><ic-button slot=\"interaction\">Button</ic-button></ic-hero>`,\n });\n\n expect(page.root).toMatchSnapshot(\"renders-with-interaction-content\");\n });\n\n it(\"should render with secondary content\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" subheading=\"Test text\"><ic-card-vertical slot=\"secondary\" heading=\"Test card\"></ic-card-vertical></ic-hero>`,\n });\n\n expect(page.root).toMatchSnapshot(\"renders-with-secondary-content\");\n });\n\n it(\"should render with a background image when given\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" subheading=\"Test text\" background-image=\"test.png\"><ic-card-vertical slot=\"secondary\" heading=\"Test card\"></ic-card-vertical></ic-hero>`,\n });\n\n expect(page.root).toMatchSnapshot(\"renders-with-background-image\");\n });\n\n it(\"should use parallax on scroll when a background image is given\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" subheading=\"Test text\" background-image=\"test.png\"><ic-card-vertical slot=\"secondary\" heading=\"Test card\"></ic-card-vertical></ic-hero>`,\n });\n\n page.doc.scrollingElement.scrollTop = 50;\n page.doc.dispatchEvent(new CustomEvent(\"scroll\"));\n\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot(\"renders-with-parallax-on-scroll\");\n });\n\n it(\"should use not parallax on scroll when a background image is given, but parallax disabled\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" disable-background-parallax subheading=\"Test text\" background-image=\"test.png\"><ic-card-vertical slot=\"secondary\" heading=\"Test card\"></ic-card-vertical></ic-hero>`,\n });\n\n page.doc.scrollingElement.scrollTop = 50;\n page.doc.dispatchEvent(new CustomEvent(\"scroll\"));\n\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot(\n \"renders-with-parallax-on-scroll-disabled\"\n );\n });\n\n it(\"should render at size small\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero size=\"small\" heading=\"Test title\" subheading=\"Test text\"></ic-hero>`,\n });\n\n expect(page.root).toMatchSnapshot(\"renders-small-variant\");\n });\n\n it(\"should correctly set foregroundColor on brand change\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" subheading=\"Test text\"></ic-hero>`,\n });\n\n await page.rootInstance.brandChangeHandler({ detail: { mode: \"dark\" } });\n await page.waitForChanges();\n\n expect(page.rootInstance.foregroundColor).toBe(\"dark\");\n });\n\n it(\"should test rendering secondary slot after initial render\", async () => {\n const page = await newSpecPage({\n components: [Hero],\n html: `<ic-hero heading=\"Test title\" subheading=\"Test text\"></ic-hero>`,\n });\n\n const component = page.rootInstance;\n const host = page.root;\n\n const observerInstance =\n mockMutationObserverImplementation.mock.results[0].value;\n\n const icon = document.createElement(\"svg\");\n icon.setAttribute(\"slot\", \"secondary\");\n\n observerInstance.observe(host, { childList: true });\n\n host.appendChild(icon);\n\n const mockMutationRecord: MockMutationRecord[] = [\n {\n addedNodes: [icon],\n removedNodes: [],\n target: host,\n },\n ];\n\n observerInstance.trigger(mockMutationRecord);\n\n await page.waitForChanges();\n\n expect(mockRenderDynamicChildSlots).toHaveBeenCalledTimes(1);\n expect(mockRenderDynamicChildSlots).toHaveBeenCalledWith(\n mockMutationRecord,\n \"secondary\",\n component\n );\n\n expect(mockHasDynamicChildSlots).toHaveBeenCalledTimes(1);\n\n expect(page.root).toMatchSnapshot();\n });\n});\n"]}
@@ -1,19 +1,12 @@
1
- import { Host, forceUpdate, h, } from "@stencil/core";
1
+ import { Host, h } from "@stencil/core";
2
2
  import { IcInformationStatus, } from "../../utils/types";
3
3
  import successIcon from "../../assets/success-icon.svg";
4
- import { checkSlotInChildMutations, removeDisabledFalse, slotHasContent, } from "../../utils/helpers";
4
+ import { removeDisabledFalse, renderDynamicChildSlots, slotHasContent, } from "../../utils/helpers";
5
5
  /**
6
6
  * @slot left-icon - Content will be placed to the left of the input.
7
7
  */
8
8
  export class InputComponentContainer {
9
9
  constructor() {
10
- this.hostMutationCallback = (mutationList) => {
11
- if (mutationList.some(({ type, addedNodes, removedNodes }) => type === "childList"
12
- ? checkSlotInChildMutations(addedNodes, removedNodes, "left-icon")
13
- : false)) {
14
- forceUpdate(this);
15
- }
16
- };
17
10
  this.disabled = false;
18
11
  this.fullWidth = false;
19
12
  this.multiLine = false;
@@ -29,7 +22,7 @@ export class InputComponentContainer {
29
22
  removeDisabledFalse(this.disabled, this.el);
30
23
  }
31
24
  componentDidLoad() {
32
- this.hostMutationObserver = new MutationObserver(this.hostMutationCallback);
25
+ this.hostMutationObserver = new MutationObserver((mutationList) => renderDynamicChildSlots(mutationList, "left-icon", this));
33
26
  this.hostMutationObserver.observe(this.el, { childList: true });
34
27
  }
35
28
  render() {
@@ -1 +1 @@
1
- {"version":3,"file":"ic-input-component-container.js","sourceRoot":"","sources":["../../../src/components/ic-input-component-container/ic-input-component-container.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,WAAW,EACX,CAAC,GACF,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,mBAAmB,GAGpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,WAAW,MAAM,+BAA+B,CAAC;AACxD,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AAKH,MAAM,OAAO,uBAAuB;;QAoD1B,yBAAoB,GAAG,CAAC,YAA8B,EAAQ,EAAE;YACtE,IACE,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE,CACvD,IAAI,KAAK,WAAW;gBAClB,CAAC,CAAC,yBAAyB,CAAC,UAAU,EAAE,YAAY,EAAE,WAAW,CAAC;gBAClE,CAAC,CAAC,KAAK,CACV,EACD,CAAC;gBACD,WAAW,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;wBAvD0B,KAAK;yBASJ,KAAK;yBAKL,KAAK;wBAKN,KAAK;oBAKR,QAAQ;gCAKG,KAAK;gCAKc,EAAE;;IAhCzD,oBAAoB;QAClB,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAgCD,iBAAiB;QACf,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,oBAAoB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC5E,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IAcD,MAAM;QACJ,MAAM,EACJ,IAAI,EACJ,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,gBAAgB,GACjB,GAAG,IAAI,CAAC;QAET,OAAO,CACL,EAAC,IAAI,IACH,KAAK,EAAE;gBACL,CAAC,gCAAgC,IAAI,EAAE,CAAC,EAAE,IAAI;gBAC9C,CAAC,gCAAgC,gBAAgB,EAAE,CAAC,EAClD,gBAAgB,KAAK,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ;gBACnD,uCAAuC,EAAE,QAAQ;gBACjD,uCAAuC,EAAE,QAAQ;gBACjD,wCAAwC,EAAE,SAAS;gBACnD,yCAAyC,EAAE,SAAS;aACrD,mBACc,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;YAEvC,WAAK,KAAK,EAAC,iBAAiB;gBACzB,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,CACvC,WAAK,KAAK,EAAC,gBAAgB;oBACzB,YAAM,IAAI,EAAC,WAAW,GAAG,CACrB,CACP;gBACD,eAAa;gBAEZ,gBAAgB;oBACf,gBAAgB,KAAK,mBAAmB,CAAC,OAAO,IAAI,CAClD,YAAM,KAAK,EAAC,gBAAgB,EAAC,SAAS,EAAE,WAAW,GAAI,CACxD,CACC,CACD,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n Element,\n Host,\n Prop,\n Watch,\n forceUpdate,\n h,\n} from \"@stencil/core\";\n\nimport {\n IcInformationStatus,\n IcInformationStatusOrEmpty,\n IcSizes,\n} from \"../../utils/types\";\nimport successIcon from \"../../assets/success-icon.svg\";\nimport {\n checkSlotInChildMutations,\n removeDisabledFalse,\n slotHasContent,\n} from \"../../utils/helpers\";\n\n/**\n * @slot left-icon - Content will be placed to the left of the input.\n */\n@Component({\n tag: \"ic-input-component-container\",\n styleUrl: \"ic-input-component-container.css\",\n})\nexport class InputComponentContainer {\n private hostMutationObserver: MutationObserver;\n @Element() el: HTMLIcInputComponentContainerElement;\n\n /**\n * If `true`, the disabled state will be set.\n */\n @Prop() disabled: boolean = false;\n @Watch(\"disabled\")\n watchDisabledHandler(): void {\n removeDisabledFalse(this.disabled, this.el);\n }\n\n /**\n * If `true`, the input component container will fill the width of the container it is in.\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * If `true`, the input component container will allow for multiple lines.\n */\n @Prop() multiLine: boolean = false;\n\n /**\n * If `true`, the readonly state will be set.\n */\n @Prop() readonly: boolean = false;\n\n /**\n * The size of the input component container component.\n */\n @Prop() size?: IcSizes = \"medium\";\n\n /**\n * If `true`, the validation will display inline.\n */\n @Prop() validationInline: boolean = false;\n\n /**\n * The validation status of the input component container - e.g. 'error' | 'warning' | 'success'.\n */\n @Prop() validationStatus: IcInformationStatusOrEmpty = \"\";\n\n componentWillLoad(): void {\n removeDisabledFalse(this.disabled, this.el);\n }\n\n componentDidLoad(): void {\n this.hostMutationObserver = new MutationObserver(this.hostMutationCallback);\n this.hostMutationObserver.observe(this.el, { childList: true });\n }\n\n private hostMutationCallback = (mutationList: MutationRecord[]): void => {\n if (\n mutationList.some(({ type, addedNodes, removedNodes }) =>\n type === \"childList\"\n ? checkSlotInChildMutations(addedNodes, removedNodes, \"left-icon\")\n : false\n )\n ) {\n forceUpdate(this);\n }\n };\n\n render() {\n const {\n size,\n validationStatus,\n disabled,\n readonly,\n multiLine,\n fullWidth,\n validationInline,\n } = this;\n\n return (\n <Host\n class={{\n [`ic-input-component-container-${size}`]: true,\n [`ic-input-component-container-${validationStatus}`]:\n validationStatus !== \"\" && !disabled && !readonly,\n \"ic-input-component-container-disabled\": disabled,\n \"ic-input-component-container-readonly\": readonly,\n \"ic-input-component-container-multiline\": multiLine,\n \"ic-input-component-container-full-width\": fullWidth,\n }}\n aria-disabled={disabled ? \"true\" : null}\n >\n <div class=\"focus-indicator\">\n {slotHasContent(this.el, \"left-icon\") && (\n <div class=\"icon-container\">\n <slot name=\"left-icon\" />\n </div>\n )}\n <slot></slot>\n\n {validationInline &&\n validationStatus === IcInformationStatus.Success && (\n <span class=\"inline-success\" innerHTML={successIcon} />\n )}\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"ic-input-component-container.js","sourceRoot":"","sources":["../../../src/components/ic-input-component-container/ic-input-component-container.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAEzE,OAAO,EACL,mBAAmB,GAGpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,WAAW,MAAM,+BAA+B,CAAC;AACxD,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AAKH,MAAM,OAAO,uBAAuB;;wBAON,KAAK;yBASJ,KAAK;yBAKL,KAAK;wBAKN,KAAK;oBAKR,QAAQ;gCAKG,KAAK;gCAKc,EAAE;;IAhCzD,oBAAoB;QAClB,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAgCD,iBAAiB;QACf,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,oBAAoB,GAAG,IAAI,gBAAgB,CAAC,CAAC,YAAY,EAAE,EAAE,CAChE,uBAAuB,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,CACzD,CAAC;QACF,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,MAAM;QACJ,MAAM,EACJ,IAAI,EACJ,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,gBAAgB,GACjB,GAAG,IAAI,CAAC;QAET,OAAO,CACL,EAAC,IAAI,IACH,KAAK,EAAE;gBACL,CAAC,gCAAgC,IAAI,EAAE,CAAC,EAAE,IAAI;gBAC9C,CAAC,gCAAgC,gBAAgB,EAAE,CAAC,EAClD,gBAAgB,KAAK,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ;gBACnD,uCAAuC,EAAE,QAAQ;gBACjD,uCAAuC,EAAE,QAAQ;gBACjD,wCAAwC,EAAE,SAAS;gBACnD,yCAAyC,EAAE,SAAS;aACrD,mBACc,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;YAEvC,WAAK,KAAK,EAAC,iBAAiB;gBACzB,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,CACvC,WAAK,KAAK,EAAC,gBAAgB;oBACzB,YAAM,IAAI,EAAC,WAAW,GAAG,CACrB,CACP;gBACD,eAAa;gBAEZ,gBAAgB;oBACf,gBAAgB,KAAK,mBAAmB,CAAC,OAAO,IAAI,CAClD,YAAM,KAAK,EAAC,gBAAgB,EAAC,SAAS,EAAE,WAAW,GAAI,CACxD,CACC,CACD,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Element, Host, Prop, Watch, h } from \"@stencil/core\";\n\nimport {\n IcInformationStatus,\n IcInformationStatusOrEmpty,\n IcSizes,\n} from \"../../utils/types\";\nimport successIcon from \"../../assets/success-icon.svg\";\nimport {\n removeDisabledFalse,\n renderDynamicChildSlots,\n slotHasContent,\n} from \"../../utils/helpers\";\n\n/**\n * @slot left-icon - Content will be placed to the left of the input.\n */\n@Component({\n tag: \"ic-input-component-container\",\n styleUrl: \"ic-input-component-container.css\",\n})\nexport class InputComponentContainer {\n private hostMutationObserver: MutationObserver;\n @Element() el: HTMLIcInputComponentContainerElement;\n\n /**\n * If `true`, the disabled state will be set.\n */\n @Prop() disabled: boolean = false;\n @Watch(\"disabled\")\n watchDisabledHandler(): void {\n removeDisabledFalse(this.disabled, this.el);\n }\n\n /**\n * If `true`, the input component container will fill the width of the container it is in.\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * If `true`, the input component container will allow for multiple lines.\n */\n @Prop() multiLine: boolean = false;\n\n /**\n * If `true`, the readonly state will be set.\n */\n @Prop() readonly: boolean = false;\n\n /**\n * The size of the input component container component.\n */\n @Prop() size?: IcSizes = \"medium\";\n\n /**\n * If `true`, the validation will display inline.\n */\n @Prop() validationInline: boolean = false;\n\n /**\n * The validation status of the input component container - e.g. 'error' | 'warning' | 'success'.\n */\n @Prop() validationStatus: IcInformationStatusOrEmpty = \"\";\n\n componentWillLoad(): void {\n removeDisabledFalse(this.disabled, this.el);\n }\n\n componentDidLoad(): void {\n this.hostMutationObserver = new MutationObserver((mutationList) =>\n renderDynamicChildSlots(mutationList, \"left-icon\", this)\n );\n this.hostMutationObserver.observe(this.el, { childList: true });\n }\n\n render() {\n const {\n size,\n validationStatus,\n disabled,\n readonly,\n multiLine,\n fullWidth,\n validationInline,\n } = this;\n\n return (\n <Host\n class={{\n [`ic-input-component-container-${size}`]: true,\n [`ic-input-component-container-${validationStatus}`]:\n validationStatus !== \"\" && !disabled && !readonly,\n \"ic-input-component-container-disabled\": disabled,\n \"ic-input-component-container-readonly\": readonly,\n \"ic-input-component-container-multiline\": multiLine,\n \"ic-input-component-container-full-width\": fullWidth,\n }}\n aria-disabled={disabled ? \"true\" : null}\n >\n <div class=\"focus-indicator\">\n {slotHasContent(this.el, \"left-icon\") && (\n <div class=\"icon-container\">\n <slot name=\"left-icon\" />\n </div>\n )}\n <slot></slot>\n\n {validationInline &&\n validationStatus === IcInformationStatus.Success && (\n <span class=\"inline-success\" innerHTML={successIcon} />\n )}\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -1,6 +1,13 @@
1
+ import { mockHasDynamicChildSlots, mockMutationObserverImplementation, mockRenderDynamicChildSlots, } from "../../../../testspec.setup";
1
2
  import { InputComponentContainer } from "../../ic-input-component-container";
2
3
  import { newSpecPage } from "@stencil/core/testing";
3
4
  describe("ic-input-component-container", () => {
5
+ afterAll(() => {
6
+ jest.restoreAllMocks();
7
+ });
8
+ afterEach(() => {
9
+ jest.clearAllMocks();
10
+ });
4
11
  it("should render", async () => {
5
12
  const page = await newSpecPage({
6
13
  components: [InputComponentContainer],
@@ -140,15 +147,26 @@ describe("ic-input-component-container", () => {
140
147
  components: [InputComponentContainer],
141
148
  html: `<ic-input-component-container>content</ic-input-component-container>`,
142
149
  });
150
+ const component = page.rootInstance;
151
+ const host = page.root;
152
+ const observerInstance = mockMutationObserverImplementation.mock.results[0].value;
143
153
  const icon = document.createElement("svg");
144
154
  icon.setAttribute("slot", "left-icon");
145
- page.rootInstance.hostMutationCallback([
155
+ observerInstance.observe(host, { childList: true });
156
+ host.appendChild(icon);
157
+ const mockMutationRecord = [
146
158
  {
147
- type: "childList",
148
159
  addedNodes: [icon],
149
160
  removedNodes: [],
161
+ target: host,
150
162
  },
151
- ]);
163
+ ];
164
+ observerInstance.trigger(mockMutationRecord);
165
+ await page.waitForChanges();
166
+ expect(mockRenderDynamicChildSlots).toHaveBeenCalledTimes(1);
167
+ expect(mockRenderDynamicChildSlots).toHaveBeenCalledWith(mockMutationRecord, "left-icon", component);
168
+ expect(mockHasDynamicChildSlots).toHaveBeenCalledTimes(1);
169
+ expect(page.root).toMatchSnapshot();
152
170
  });
153
171
  });
154
172
  //# sourceMappingURL=ic-input-component-container.spec.js.map