@iamproperty/components 7.1.0--beta6 → 7.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. package/assets/css/components/actionbar.component.css +1 -0
  2. package/assets/css/components/actionbar.component.css.map +1 -0
  3. package/assets/css/components/actionbar.global.css +1 -1
  4. package/assets/css/components/actionbar.global.css.map +1 -1
  5. package/assets/css/components/address-lookup.css +1 -1
  6. package/assets/css/components/address-lookup.css.map +1 -1
  7. package/assets/css/components/barchart.component.css +1 -1
  8. package/assets/css/components/barchart.component.css.map +1 -1
  9. package/assets/css/components/bento-grid.component.css +1 -0
  10. package/assets/css/components/bento-grid.component.css.map +1 -0
  11. package/assets/css/components/card.component.css +1 -1
  12. package/assets/css/components/card.component.css.map +1 -1
  13. package/assets/css/components/carousel.component.css +1 -1
  14. package/assets/css/components/carousel.component.css.map +1 -1
  15. package/assets/css/components/carousel.config.css +1 -1
  16. package/assets/css/components/carousel.config.css.map +1 -1
  17. package/assets/css/components/charts.config.css +1 -1
  18. package/assets/css/components/charts.config.css.map +1 -1
  19. package/assets/css/components/charts.css +1 -1
  20. package/assets/css/components/charts.css.map +1 -1
  21. package/assets/css/components/charts.module.css +1 -1
  22. package/assets/css/components/charts.module.css.map +1 -1
  23. package/assets/css/components/collapsible-side.css +1 -1
  24. package/assets/css/components/collapsible-side.css.map +1 -1
  25. package/assets/css/components/doughnutchart.component.css +1 -0
  26. package/assets/css/components/doughnutchart.component.css.map +1 -0
  27. package/assets/css/components/fileupload.css.map +1 -1
  28. package/assets/css/components/header.css.map +1 -1
  29. package/assets/css/components/inline-edit.preload.css +1 -1
  30. package/assets/css/components/inline-edit.preload.css.map +1 -1
  31. package/assets/css/components/marketing.css.map +1 -1
  32. package/assets/css/components/menu.component.css +1 -0
  33. package/assets/css/components/menu.component.css.map +1 -0
  34. package/assets/css/components/menu.css +1 -0
  35. package/assets/css/components/menu.css.map +1 -0
  36. package/assets/css/components/multi-step.component.css.map +1 -1
  37. package/assets/css/components/multiselect.preload.css +1 -1
  38. package/assets/css/components/multiselect.preload.css.map +1 -1
  39. package/assets/css/components/nav.component.css +1 -0
  40. package/assets/css/components/nav.component.css.map +1 -0
  41. package/assets/css/components/nav.docs.css.map +1 -1
  42. package/assets/css/components/nav.global.css.map +1 -1
  43. package/assets/css/components/nav.old.css +1 -1
  44. package/assets/css/components/nav.old.css.map +1 -1
  45. package/assets/css/components/nav.preload.css +1 -1
  46. package/assets/css/components/nav.preload.css.map +1 -1
  47. package/assets/css/components/notification.css +1 -1
  48. package/assets/css/components/notification.css.map +1 -1
  49. package/assets/css/components/pagination.css +1 -1
  50. package/assets/css/components/pagination.css.map +1 -1
  51. package/assets/css/components/property-searchbar.css.map +1 -1
  52. package/assets/css/components/slider.css +1 -1
  53. package/assets/css/components/slider.css.map +1 -1
  54. package/assets/css/components/snapshot.css.map +1 -1
  55. package/assets/css/components/stepper.css.map +1 -1
  56. package/assets/css/components/{table.css → table.component.css} +1 -1
  57. package/assets/css/components/table.component.css.map +1 -0
  58. package/assets/css/components/table.global.css +1 -1
  59. package/assets/css/components/table.global.css.map +1 -1
  60. package/assets/css/components/tabs.component.css +1 -0
  61. package/assets/css/components/tabs.component.css.map +1 -0
  62. package/assets/css/components/tabs.css +1 -1
  63. package/assets/css/components/tabs.css.map +1 -1
  64. package/assets/css/components/testimonial.css.map +1 -1
  65. package/assets/css/components/timeline.css.map +1 -1
  66. package/assets/css/core.min.css +1 -1
  67. package/assets/css/core.min.css.map +1 -1
  68. package/assets/css/mobile-core.min.css +1 -0
  69. package/assets/css/mobile-core.min.css.map +1 -0
  70. package/assets/css/mobile.min.css +1 -0
  71. package/assets/css/mobile.min.css.map +1 -0
  72. package/assets/css/style.min.css +1 -1
  73. package/assets/css/style.min.css.map +1 -1
  74. package/assets/js/components/_global.js +0 -1
  75. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  76. package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
  77. package/assets/js/components/actionbar/actionbar.component.js +86 -8
  78. package/assets/js/components/actionbar/actionbar.component.min.js +19 -6
  79. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  80. package/assets/js/components/address-lookup/address-lookup.component.js +17 -18
  81. package/assets/js/components/address-lookup/address-lookup.component.min.js +5 -5
  82. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  83. package/assets/js/components/applied-filters/applied-filters.component.js +0 -1
  84. package/assets/js/components/applied-filters/applied-filters.component.min.js +4 -4
  85. package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
  86. package/assets/js/components/barchart/barchart.component.js +2 -3
  87. package/assets/js/components/barchart/barchart.component.min.js +8 -4
  88. package/assets/js/components/barchart/barchart.component.min.js.map +1 -1
  89. package/assets/js/components/bento-grid/bento-grid.component.js +50 -0
  90. package/assets/js/components/bento-grid/bento-grid.component.min.js +15 -0
  91. package/assets/js/components/bento-grid/bento-grid.component.min.js.map +1 -0
  92. package/assets/js/components/card/card.component.js +10 -13
  93. package/assets/js/components/card/card.component.min.js +7 -7
  94. package/assets/js/components/card/card.component.min.js.map +1 -1
  95. package/assets/js/components/carousel/carousel.component.js +4 -5
  96. package/assets/js/components/carousel/carousel.component.min.js +4 -4
  97. package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
  98. package/assets/js/components/chart/chart.component.js +1 -5
  99. package/assets/js/components/collapsible-side/collapsible-side.component.js +4 -5
  100. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +4 -4
  101. package/assets/js/components/collapsible-side/collapsible-side.component.min.js.map +1 -1
  102. package/assets/js/components/doughnutchart/doughnutchart.component.js +70 -0
  103. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +25 -0
  104. package/assets/js/components/doughnutchart/doughnutchart.component.min.js.map +1 -0
  105. package/assets/js/components/fileupload/fileupload.component.js +2 -3
  106. package/assets/js/components/fileupload/fileupload.component.min.js +6 -6
  107. package/assets/js/components/fileupload/fileupload.component.min.js.map +1 -1
  108. package/assets/js/components/filter-card/filter-card.component.js +3 -4
  109. package/assets/js/components/filter-card/filter-card.component.min.js +4 -4
  110. package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -1
  111. package/assets/js/components/filterlist/filterlist.component.js +0 -1
  112. package/assets/js/components/filterlist/filterlist.component.min.js +3 -3
  113. package/assets/js/components/filterlist/filterlist.component.min.js.map +1 -1
  114. package/assets/js/components/header/header.component.js +0 -1
  115. package/assets/js/components/header/header.component.min.js +1 -1
  116. package/assets/js/components/header/header.component.min.js.map +1 -1
  117. package/assets/js/components/inline-edit/inline-edit.component.js +7 -8
  118. package/assets/js/components/inline-edit/inline-edit.component.min.js +4 -4
  119. package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -1
  120. package/assets/js/components/marketing/marketing.component.js +0 -1
  121. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  122. package/assets/js/components/marketing/marketing.component.min.js.map +1 -1
  123. package/assets/js/components/menu/menu.component.js +200 -0
  124. package/assets/js/components/menu/menu.component.min.js +77 -0
  125. package/assets/js/components/menu/menu.component.min.js.map +1 -0
  126. package/assets/js/components/multi-step/multi-step.component.js +10 -10
  127. package/assets/js/components/multi-step/multi-step.component.min.js +13 -0
  128. package/assets/js/components/multi-step/multi-step.component.min.js.map +1 -0
  129. package/assets/js/components/multiselect/multiselect.component.js +10 -10
  130. package/assets/js/components/multiselect/multiselect.component.min.js +3 -3
  131. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  132. package/assets/js/components/nav/nav.component.js +7 -7
  133. package/assets/js/components/nav/nav.component.min.js +7 -7
  134. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  135. package/assets/js/components/notification/notification.component.js +3 -3
  136. package/assets/js/components/notification/notification.component.min.js +4 -4
  137. package/assets/js/components/notification/notification.component.min.js.map +1 -1
  138. package/assets/js/components/pagination/pagination.component.js +3 -4
  139. package/assets/js/components/pagination/pagination.component.min.js +4 -4
  140. package/assets/js/components/pagination/pagination.component.min.js.map +1 -1
  141. package/assets/js/components/record-card/record-card.component.js +6 -8
  142. package/assets/js/components/record-card/record-card.component.min.js +4 -4
  143. package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
  144. package/assets/js/components/search/search.component.js +9 -6
  145. package/assets/js/components/search/search.component.min.js +8 -5
  146. package/assets/js/components/search/search.component.min.js.map +1 -1
  147. package/assets/js/components/slider/slider.component.js +8 -8
  148. package/assets/js/components/slider/slider.component.min.js +5 -5
  149. package/assets/js/components/slider/slider.component.min.js.map +1 -1
  150. package/assets/js/components/table/table.component.js +12 -11
  151. package/assets/js/components/table/table.component.min.js +7 -7
  152. package/assets/js/components/table/table.component.min.js.map +1 -1
  153. package/assets/js/components/tabs/tabs.component.js +1 -2
  154. package/assets/js/components/tabs/tabs.component.min.js +4 -4
  155. package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
  156. package/assets/js/components/video-card/video-card.component.js +4 -3
  157. package/assets/js/components/video-card/video-card.component.min.js +3 -3
  158. package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
  159. package/assets/js/modules/applied-filters.js +8 -9
  160. package/assets/js/modules/carousel.js +9 -10
  161. package/assets/js/modules/chart.js +5 -3
  162. package/assets/js/modules/chart.module.js +127 -6
  163. package/assets/js/modules/dialogs.js +6 -7
  164. package/assets/js/modules/drawer.js +1 -2
  165. package/assets/js/modules/dynamicEvents.js +7 -8
  166. package/assets/js/modules/fileupload.js +7 -7
  167. package/assets/js/modules/filterlist.js +3 -4
  168. package/assets/js/modules/form.js +12 -13
  169. package/assets/js/modules/helpers.js +3 -5
  170. package/assets/js/modules/inputs.js +6 -9
  171. package/assets/js/modules/nav.js +3 -4
  172. package/assets/js/modules/notification.js +2 -3
  173. package/assets/js/modules/orderablelist.js +0 -1
  174. package/assets/js/modules/table.js +80 -42
  175. package/assets/js/modules/tabs.js +3 -6
  176. package/assets/js/scripts.bundle.js +3 -3
  177. package/assets/js/scripts.bundle.js.map +1 -1
  178. package/assets/js/scripts.bundle.min.js +2 -2
  179. package/assets/js/scripts.bundle.min.js.map +1 -1
  180. package/assets/js/scripts.js +64 -6
  181. package/assets/js/tests/card.spec.js +14 -0
  182. package/assets/js/tests/carousel.spec.js +60 -0
  183. package/assets/js/tests/chart.spec.js +7 -5
  184. package/assets/js/tests/fileupload.spec.js +22 -0
  185. package/assets/js/tests/multistep.spec.js +68 -0
  186. package/assets/sass/_bs_grid.scss +39 -0
  187. package/assets/sass/_components.scss +323 -100
  188. package/assets/sass/_corefiles.scss +46 -39
  189. package/assets/sass/_elements.scss +98 -18
  190. package/assets/sass/_example.scss +61 -0
  191. package/assets/sass/_func.scss +4 -14
  192. package/assets/sass/_functions/{utilities.scss → bs_utilities.scss} +43 -39
  193. package/assets/sass/_functions/functions.scss +66 -52
  194. package/assets/sass/_functions/mixins.scss +82 -137
  195. package/assets/sass/_functions/utility-mixins.scss +1445 -0
  196. package/assets/sass/_functions/variables.scss +90 -1659
  197. package/assets/sass/_functions/variables_old.scss +1701 -0
  198. package/assets/sass/{foundations/grid.scss → _grid.scss} +96 -82
  199. package/assets/sass/_tests/func.spec.scss +1 -37
  200. package/assets/sass/_tests/mixins.spec.scss +1 -77
  201. package/assets/sass/_tests/typography.spec.scss +1 -1
  202. package/assets/sass/_utilities.scss +35 -117
  203. package/assets/sass/_utility-mixins.scss +37 -0
  204. package/assets/sass/components/{actionbar.scss → actionbar.component.scss} +82 -16
  205. package/assets/sass/components/actionbar.global.scss +28 -14
  206. package/assets/sass/components/address-lookup.scss +6 -0
  207. package/assets/sass/components/barchart.component.scss +8 -19
  208. package/assets/sass/components/bento-grid.component.scss +91 -0
  209. package/assets/sass/components/carousel.config.scss +64 -58
  210. package/assets/sass/components/charts.config.scss +73 -67
  211. package/assets/sass/components/charts.module.scss +131 -73
  212. package/assets/sass/components/charts.scss +43 -42
  213. package/assets/sass/components/collapsible-side.scss +29 -27
  214. package/assets/sass/components/doughnutchart.component.scss +205 -0
  215. package/assets/sass/components/fileupload.scss +4 -3
  216. package/assets/sass/components/header.scss +5 -5
  217. package/assets/sass/components/inline-edit.preload.scss +108 -102
  218. package/assets/sass/components/menu.component.scss +101 -0
  219. package/assets/sass/components/menu.scss +21 -0
  220. package/assets/sass/components/multi-step.component.scss +5 -3
  221. package/assets/sass/components/multiselect.preload.scss +36 -30
  222. package/assets/sass/components/{nav.scss → nav.component.scss} +41 -21
  223. package/assets/sass/components/nav.docs.scss +1 -1
  224. package/assets/sass/components/nav.global.scss +13 -11
  225. package/assets/sass/components/nav.old.scss +21 -24
  226. package/assets/sass/components/nav.preload.scss +40 -34
  227. package/assets/sass/components/notification.scss +9 -5
  228. package/assets/sass/components/pagination.scss +6 -0
  229. package/assets/sass/components/property-searchbar.scss +7 -7
  230. package/assets/sass/components/slider.scss +2 -0
  231. package/assets/sass/components/snapshot.scss +2 -2
  232. package/assets/sass/components/stepper.scss +7 -7
  233. package/assets/sass/components/table.global.scss +57 -1
  234. package/assets/sass/components/tabs.component.scss +5 -0
  235. package/assets/sass/components/tabs.scss +9 -6
  236. package/assets/sass/components/testimonial.scss +7 -7
  237. package/assets/sass/components/timeline.scss +1 -1
  238. package/assets/sass/core.scss +13 -2
  239. package/assets/sass/elements/admin-panel.scss +201 -134
  240. package/assets/sass/elements/badge-tag.scss +87 -81
  241. package/assets/sass/elements/brand.scss +67 -61
  242. package/assets/sass/elements/buttons--action.scss +55 -0
  243. package/assets/sass/elements/buttons--compact.scss +135 -0
  244. package/assets/sass/elements/buttons--global.scss +322 -0
  245. package/assets/sass/elements/buttons--secondary.scss +24 -0
  246. package/assets/sass/elements/buttons--tertiary.scss +57 -0
  247. package/assets/sass/elements/buttons.scss +29 -503
  248. package/assets/sass/elements/container.scss +160 -121
  249. package/assets/sass/elements/details.scss +147 -138
  250. package/assets/sass/elements/dialog.scss +36 -30
  251. package/assets/sass/elements/forms.scss +1061 -1047
  252. package/assets/sass/elements/icons.scss +23 -17
  253. package/assets/sass/elements/links.scss +131 -116
  254. package/assets/sass/elements/lists.scss +270 -264
  255. package/assets/sass/elements/media.scss +19 -13
  256. package/assets/sass/elements/modal.scss +336 -330
  257. package/assets/sass/elements/popover.scss +163 -152
  258. package/assets/sass/elements/progress.scss +173 -162
  259. package/assets/sass/elements/table.element.scss +115 -109
  260. package/assets/sass/elements/tooltips.scss +87 -80
  261. package/assets/sass/elements/type.scss +172 -160
  262. package/assets/sass/email.scss +4 -1
  263. package/assets/sass/error.scss +15 -9
  264. package/assets/sass/foundations/reboot.scss +176 -170
  265. package/assets/sass/foundations/root.scss +136 -125
  266. package/assets/sass/helpers/line-clamp.scss +0 -23
  267. package/assets/sass/helpers/max-height.scss +2 -2
  268. package/assets/sass/main.scss +14 -3
  269. package/assets/sass/mobile-core.scss +14 -0
  270. package/assets/sass/mobile.scss +16 -0
  271. package/assets/sass/templates/auth.scss +88 -83
  272. package/assets/sass/templates/form.scss +68 -59
  273. package/assets/ts/components/_global.ts +2 -3
  274. package/assets/ts/components/actionbar/actionbar.component.ts +94 -2
  275. package/assets/ts/components/address-lookup/address-lookup.component.ts +21 -22
  276. package/assets/ts/components/applied-filters/applied-filters.component.ts +1 -2
  277. package/assets/ts/components/barchart/barchart.component.ts +3 -5
  278. package/assets/ts/components/bento-grid/README.md +31 -0
  279. package/assets/ts/components/bento-grid/bento-grid.component.ts +67 -0
  280. package/assets/ts/components/card/card.component.ts +13 -16
  281. package/assets/ts/components/carousel/carousel.component.ts +5 -7
  282. package/assets/ts/components/chart/chart.component.ts +4 -9
  283. package/assets/ts/components/collapsible-side/collapsible-side.component.ts +5 -6
  284. package/assets/ts/components/doughnutchart/doughnutchart.component.ts +85 -0
  285. package/assets/ts/components/fileupload/fileupload.component.ts +5 -6
  286. package/assets/ts/components/filter-card/filter-card.component.ts +4 -5
  287. package/assets/ts/components/filterlist/filterlist.component.ts +1 -2
  288. package/assets/ts/components/header/header.component.ts +1 -3
  289. package/assets/ts/components/inline-edit/inline-edit.component.ts +8 -11
  290. package/assets/ts/components/marketing/marketing.component.ts +1 -3
  291. package/assets/ts/components/menu/menu.component.ts +222 -0
  292. package/assets/ts/components/multi-step/multi-step.component.ts +19 -23
  293. package/assets/ts/components/multiselect/multiselect.component.ts +13 -14
  294. package/assets/ts/components/nav/nav.component.ts +8 -9
  295. package/assets/ts/components/notification/notification.component.ts +3 -3
  296. package/assets/ts/components/pagination/pagination.component.ts +7 -8
  297. package/assets/ts/components/record-card/record-card.component.ts +9 -11
  298. package/assets/ts/components/search/search.component.ts +12 -9
  299. package/assets/ts/components/slider/slider.component.ts +9 -10
  300. package/assets/ts/components/table/table.component.ts +19 -18
  301. package/assets/ts/components/tabs/tabs.component.ts +2 -3
  302. package/assets/ts/components/video-card/video-card.component.ts +13 -12
  303. package/assets/ts/modules/applied-filters.ts +10 -11
  304. package/assets/ts/modules/card.module.ts +1 -1
  305. package/assets/ts/modules/carousel.ts +13 -15
  306. package/assets/ts/modules/chart.module.ts +176 -24
  307. package/assets/ts/modules/chart.ts +26 -24
  308. package/assets/ts/modules/dialogs.ts +10 -13
  309. package/assets/ts/modules/drawer.ts +1 -2
  310. package/assets/ts/modules/dynamicEvents.ts +12 -14
  311. package/assets/ts/modules/fileupload.ts +10 -10
  312. package/assets/ts/modules/filterlist.ts +6 -7
  313. package/assets/ts/modules/form.ts +16 -17
  314. package/assets/ts/modules/helpers.ts +18 -21
  315. package/assets/ts/modules/inputs.ts +15 -18
  316. package/assets/ts/modules/nav.ts +4 -5
  317. package/assets/ts/modules/notification.ts +7 -8
  318. package/assets/ts/modules/orderablelist.ts +3 -4
  319. package/assets/ts/modules/pagination.ts +1 -1
  320. package/assets/ts/modules/table.ts +103 -60
  321. package/assets/ts/modules/tabs.ts +6 -14
  322. package/assets/ts/scripts.ts +70 -6
  323. package/assets/ts/tests/card.spec.ts +19 -0
  324. package/assets/ts/tests/carousel.spec.ts +66 -0
  325. package/assets/ts/tests/chart.spec.ts +9 -6
  326. package/assets/ts/tests/fileupload.spec.ts +30 -0
  327. package/assets/ts/tests/multistep.spec.ts +78 -0
  328. package/dist/components.es.js +1258 -1063
  329. package/dist/components.umd.js +473 -195
  330. package/package.json +44 -49
  331. package/src/components/BentoGrid/BentoGrid.vue +20 -0
  332. package/src/components/DoughnutChart/DoughnutChart.vue +23 -0
  333. package/src/components/FileUpload/FileUpload.vue +4 -1
  334. package/src/components/Menu/Menu.vue +22 -0
  335. package/src/components/Tabs/Tabs.vue +0 -4
  336. package/src/index.js +25 -19
  337. package/assets/css/components/actionbar.css +0 -1
  338. package/assets/css/components/actionbar.css.map +0 -1
  339. package/assets/css/components/nav.css +0 -1
  340. package/assets/css/components/nav.css.map +0 -1
  341. package/assets/css/components/table.css.map +0 -1
  342. package/assets/js/components.bundle.js +0 -5
  343. package/assets/js/components.bundle.js.map +0 -1
  344. package/assets/js/components.js +0 -57
  345. package/assets/js/modules/file-upload.js +0 -32
  346. package/assets/sass/components.reset.scss +0 -8
  347. package/assets/sass/foundations/bs_grid.scss +0 -32
  348. package/assets/ts/components.ts +0 -62
  349. package/assets/ts/modules/file-upload.ts +0 -52
  350. package/dist/style.css +0 -1
  351. /package/assets/sass/components/{table.scss → table.component.scss} +0 -0
@@ -1,12 +1,11 @@
1
- // @ts-nocheck
2
1
  import { zeroPad, isNumeric, ucfirst, resolvePath } from './helpers';
3
2
 
4
3
  // Basic functionality needed
5
- export const addDataAttributes = (table) => {
4
+ export const addDataAttributes = (table): void => {
6
5
  const colHeadings = Array.from(table.querySelectorAll('thead th'));
7
6
  const colRows = Array.from(table.querySelectorAll('tbody tr'));
8
7
 
9
- colRows.forEach((row, index) => {
8
+ colRows.forEach((row) => {
10
9
  const cells = Array.from(row.querySelectorAll('th, td'));
11
10
  const statuses = [
12
11
  '0',
@@ -55,10 +54,10 @@ export const addDataAttributes = (table) => {
55
54
  });
56
55
  };
57
56
 
58
- export const getLargestLastColWidth = (table) => {
57
+ export const getLargestLastColWidth = (table): number => {
59
58
  let largestWidth = 0;
60
59
 
61
- Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {
60
+ Array.from(table.querySelectorAll('tbody tr')).forEach((row) => {
62
61
  const htmlStyles = window.getComputedStyle(document.querySelector('html'));
63
62
  const lastColChild = row.querySelector(':scope > *:last-child > *:first-child');
64
63
 
@@ -73,19 +72,19 @@ export const getLargestLastColWidth = (table) => {
73
72
  return largestWidth;
74
73
  };
75
74
 
76
- export const createMobileButton = (table, wrapper) => {
75
+ export const createMobileButton = (table, wrapper): void => {
77
76
  if (wrapper.classList.contains('table--fullwidth') && !wrapper.hasAttribute('data-expandable')) return false;
78
77
 
79
78
  if (table.querySelectorAll('thead tr th').length < 4 && !wrapper.hasAttribute('data-expandable')) return false;
80
79
 
81
80
  //If the expand column already exists we don't need to add a new one.
82
- Array.from(table.querySelectorAll('thead tr')).forEach((row, index) => {
81
+ Array.from(table.querySelectorAll('thead tr')).forEach((row) => {
83
82
  if (!table.querySelectorAll('thead tr th.expand-button-heading').length) {
84
83
  row.insertAdjacentHTML('afterbegin', `<th class="th--fixed expand-button-heading"></th>`);
85
84
  }
86
85
  });
87
86
 
88
- Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {
87
+ Array.from(table.querySelectorAll('tbody tr')).forEach((row) => {
89
88
  const preExpanded = row.getAttribute('data-view') === 'full' ? 'aria-expanded' : '';
90
89
  row.insertAdjacentHTML(
91
90
  'afterbegin',
@@ -94,7 +93,7 @@ export const createMobileButton = (table, wrapper) => {
94
93
  });
95
94
  };
96
95
 
97
- export const addTableEventListeners = (table) => {
96
+ export const addTableEventListeners = (table, wrapper): void => {
98
97
  table.addEventListener('click', (event) => {
99
98
  if (event && event.target instanceof HTMLElement && event.target.closest('[data-expand-button]')) {
100
99
  const button = event.target.closest('[data-expand-button]');
@@ -106,12 +105,50 @@ export const addTableEventListeners = (table) => {
106
105
  else tableRow.setAttribute('data-view', 'full');
107
106
 
108
107
  button.blur();
108
+ } else if (event && event.target instanceof HTMLElement && event.target.closest('[data-sort]')) {
109
+ const heading = event.target.closest('[data-sort]');
110
+ heading.setAttribute('data-sort', 'true');
111
+
112
+ // Turn other headings off
113
+ Array.from(table.querySelectorAll('th[data-sort]')).forEach((element) => {
114
+ if (element != heading) {
115
+ element.setAttribute('data-sort', '');
116
+ element.removeAttribute('data-order-by');
117
+ heading.setAttribute('title', 'Click to sort ascending');
118
+ }
119
+ });
120
+
121
+ if (heading.hasAttribute('data-order-by') && heading.getAttribute('data-order-by') == 'asc') {
122
+ heading.setAttribute('data-order-by', 'desc');
123
+ heading.setAttribute('title', 'Click to sort ascending');
124
+ } else {
125
+ heading.setAttribute('data-order-by', 'asc');
126
+ heading.setAttribute('title', 'Click to sort descending');
127
+ }
128
+
129
+ // dispath event
130
+ const dispatchedEvent = new CustomEvent('sort-by-heading', {
131
+ detail: {
132
+ heading: heading.textContent,
133
+ sortBy: heading.getAttribute('data-order-by'),
134
+ ref: heading.getAttribute('data-ref'),
135
+ },
136
+ });
137
+ const component = heading.closest('iam-table');
138
+ component.dispatchEvent(dispatchedEvent);
139
+
140
+ const sortBy = heading.textContent.trim();
141
+ const order = heading.getAttribute('data-order-by');
142
+
143
+ if (!wrapper.hasAttribute('data-submit')) {
144
+ sortTableByValues(table, sortBy, order);
145
+ }
109
146
  }
110
147
  });
111
148
  };
112
149
 
113
150
  // Filters
114
- export const createSearchDataList = (table, form) => {
151
+ export const createSearchDataList = (table, form): void => {
115
152
  const searchInput = form.querySelector('input[data-search]');
116
153
 
117
154
  if (!searchInput) return false;
@@ -121,8 +158,8 @@ export const createSearchDataList = (table, form) => {
121
158
  const inputWrapper = searchInput.parentNode;
122
159
 
123
160
  const searchableTerms = {};
124
- searchableColumns.forEach((columnHeading, index) => {
125
- Array.from(table.querySelectorAll('td[data-label="' + columnHeading.trim() + '"]')).forEach((td, index) => {
161
+ searchableColumns.forEach((columnHeading) => {
162
+ Array.from(table.querySelectorAll('td[data-label="' + columnHeading.trim() + '"]')).forEach((td) => {
126
163
  if (td.querySelector('.td__content'))
127
164
  searchableTerms[td.querySelector('.td__content').textContent] = td.querySelector('.td__content').textContent;
128
165
  else searchableTerms[td.textContent] = td.textContent;
@@ -139,18 +176,18 @@ export const createSearchDataList = (table, form) => {
139
176
  .join('')}`;
140
177
  };
141
178
 
142
- export const addFilterEventListeners = (table, form, pagination, wrapper, savedTableBody) => {
179
+ export const addFilterEventListeners = (table, form, pagination, wrapper, savedTableBody): void => {
143
180
  let timer;
144
181
 
145
182
  // Check what conditions are set on the table to see what the form actions are
146
- const formSubmit = function (event, paginate = false) {
183
+ const formSubmit = function (event, paginate = false): void | boolean {
147
184
  if (wrapper.hasAttribute('data-no-submit')) {
148
185
  return false;
149
186
  }
150
187
 
151
188
  if (form.classList.contains('processing')) return false;
152
189
 
153
- Array.from(form.querySelectorAll('iam-applied-filters')).forEach((element, index) => {
190
+ Array.from(form.querySelectorAll('iam-applied-filters')).forEach((element) => {
154
191
  const event = new Event('tags-set');
155
192
  element.dispatchEvent(event);
156
193
  });
@@ -158,7 +195,7 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
158
195
  // Before submitting check if any duplicate checkboxes within the filters dialog needs to upset the original input
159
196
  if (event.type == 'submit') {
160
197
  form.classList.add('processing');
161
- Array.from(form.querySelectorAll('[data-duplicate]')).forEach((element, index) => {
198
+ Array.from(form.querySelectorAll('[data-duplicate]')).forEach((element) => {
162
199
  const id = element.getAttribute('data-duplicate');
163
200
  const input = document.getElementById(id);
164
201
  const card = document.querySelector(`[for="${id}"] iam-card`);
@@ -299,7 +336,7 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
299
336
  if (event && event.target instanceof HTMLElement && event.target.closest('[data-clear]')) {
300
337
  form.classList.add('processing');
301
338
  // Make sure any applied filters have been removed
302
- Array.from(form.querySelectorAll('.applied-filters')).forEach((filters, index) => {
339
+ Array.from(form.querySelectorAll('.applied-filters')).forEach((filters) => {
303
340
  filters.innerHTML = '';
304
341
  });
305
342
 
@@ -373,10 +410,10 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
373
410
  const fields = [];
374
411
 
375
412
  // Collect the forms that we need to add an event listener for.
376
- Array.from(form.querySelectorAll('[data-mimic]')).forEach((input, index) => {
413
+ Array.from(form.querySelectorAll('[data-mimic]')).forEach((input) => {
377
414
  const mimicField = input.getAttribute('data-mimic');
378
415
 
379
- Array.from(document.querySelectorAll(`[name="${mimicField}"]`)).forEach((mimicInput, index) => {
416
+ Array.from(document.querySelectorAll(`[name="${mimicField}"]`)).forEach((mimicInput) => {
380
417
  const parentForm = mimicInput.closest('form');
381
418
 
382
419
  if (!forms.includes(parentForm)) {
@@ -390,8 +427,8 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
390
427
  });
391
428
 
392
429
  // For each form add change listener
393
- forms.forEach((parentForm, index) => {
394
- const updateMimicInput = function () {
430
+ forms.forEach((parentForm) => {
431
+ const updateMimicInput = function (): void {
395
432
  const mimickedAlready = [];
396
433
  const formData = new FormData(parentForm);
397
434
 
@@ -422,17 +459,17 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
422
459
  }
423
460
  };
424
461
 
425
- parentForm.addEventListener('force', (event) => {
462
+ parentForm.addEventListener('force', () => {
426
463
  updateMimicInput();
427
464
  });
428
465
 
429
- parentForm.addEventListener('change', (event) => {
466
+ parentForm.addEventListener('change', () => {
430
467
  updateMimicInput();
431
468
  });
432
469
  });
433
470
  };
434
471
 
435
- export const sortTable = (table, form, savedTableBody) => {
472
+ export const sortTable = (table, form, savedTableBody): void | boolean => {
436
473
  if (form.getAttribute('data-ajax')) {
437
474
  return false;
438
475
  }
@@ -456,6 +493,12 @@ export const sortTable = (table, form, savedTableBody) => {
456
493
  return false;
457
494
  }
458
495
 
496
+ sortTableByValues(table, sortBy, order, format);
497
+ };
498
+
499
+ export const sortTableByValues = (table, sortBy, order, format = ''): void => {
500
+ const tbody = table.querySelector('tbody');
501
+
459
502
  let orderArray = [];
460
503
  if (!['asc', 'desc', 'descending'].includes(order)) {
461
504
  orderArray = order.split(',');
@@ -463,7 +506,7 @@ export const sortTable = (table, form, savedTableBody) => {
463
506
 
464
507
  // Create an array from the table rows, the index created is then used to sort the array
465
508
  let tableArr = [];
466
- Array.from(tbody.querySelectorAll('tr')).forEach((tableRow, index) => {
509
+ Array.from(tbody.querySelectorAll('tr')).forEach((tableRow) => {
467
510
  let rowIndex = tableRow
468
511
  .querySelector('td[data-label="' + sortBy + '"], th[data-label="' + sortBy + '"]')
469
512
  .textContent.trim();
@@ -503,13 +546,13 @@ export const sortTable = (table, form, savedTableBody) => {
503
546
 
504
547
  // Create a string to return and populate the tbody
505
548
  let strTbody = '';
506
- tableArr.forEach((tableRow, index) => {
549
+ tableArr.forEach((tableRow) => {
507
550
  strTbody += tableRow.row.outerHTML;
508
551
  });
509
552
  tbody.innerHTML = strTbody;
510
553
  };
511
554
 
512
- export const filterTable = (table, form, wrapper) => {
555
+ export const filterTable = (table, form, wrapper): void => {
513
556
  table.classList.remove('table--filtered');
514
557
 
515
558
  const filters = filterFilters(form);
@@ -519,7 +562,7 @@ export const filterTable = (table, form, wrapper) => {
519
562
  const showRows = form.querySelector('[data-show]') ? parseInt(form.querySelector('[data-show]').value) : 15;
520
563
 
521
564
  // Reset
522
- Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {
565
+ Array.from(table.querySelectorAll('tbody tr')).forEach((row) => {
523
566
  row.classList.remove('filtered');
524
567
  row.classList.remove('filtered--matched');
525
568
  row.classList.remove('filtered--show');
@@ -532,19 +575,19 @@ export const filterTable = (table, form, wrapper) => {
532
575
  const searchInput = form.querySelector('input[data-search]');
533
576
  const searchColumns = form.querySelector('input[data-search]').getAttribute('data-search').split(',');
534
577
 
535
- searchColumns.forEach((column, index) => {
578
+ searchColumns.forEach((column) => {
536
579
  searches.push({ column: `${column.trim()}`, value: `${searchInput.value}` });
537
580
  });
538
581
  }
539
582
 
540
583
  //Display the filter count
541
- Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {
584
+ Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element) => {
542
585
  element.innerHTML = '';
543
586
  element.parentNode.classList.remove('hover');
544
587
  });
545
588
 
546
589
  let filterCount = 0;
547
- Object.values(filters).forEach((filter, index) => {
590
+ Object.values(filters).forEach((filter) => {
548
591
  if (typeof filter == 'object' && Object.values(filter).length) {
549
592
  filterCount += Object.values(filter).length;
550
593
  } else {
@@ -553,7 +596,7 @@ export const filterTable = (table, form, wrapper) => {
553
596
  });
554
597
 
555
598
  if (filterCount) {
556
- Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {
599
+ Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element) => {
557
600
  element.innerHTML += `(${filterCount})`;
558
601
  element.parentNode.classList.add('hover');
559
602
  });
@@ -562,9 +605,9 @@ export const filterTable = (table, form, wrapper) => {
562
605
  // Filter the table
563
606
  table.classList.add('table--filtered');
564
607
  for (const [key, filterValue] of Object.entries(filters)) {
565
- Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row, index) => {
608
+ Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row) => {
566
609
  let isMatched = false;
567
- filterValue.forEach((filter, index) => {
610
+ filterValue.forEach((filter) => {
568
611
  const filterTd = row.querySelector(`[data-label="${key}"]`);
569
612
 
570
613
  if (filter.includes('-date-from')) {
@@ -672,10 +715,10 @@ export const filterTable = (table, form, wrapper) => {
672
715
  });
673
716
  }
674
717
  // Search whats left of the table after filtering
675
- Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row, index) => {
718
+ Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row) => {
676
719
  let isSearched = searches.length > 0 && searches[0].value.length >= 3 ? false : true;
677
720
 
678
- searches.forEach((search, index) => {
721
+ searches.forEach((search) => {
679
722
  const searchTd = row.querySelector(`[data-label="${search.column}"]`);
680
723
 
681
724
  if (
@@ -693,7 +736,7 @@ export const filterTable = (table, form, wrapper) => {
693
736
  });
694
737
 
695
738
  // Work out what to display after pagination
696
- Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row, index) => {
739
+ Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row) => {
697
740
  matched++;
698
741
 
699
742
  row.classList.add('filtered--matched');
@@ -712,10 +755,10 @@ export const filterTable = (table, form, wrapper) => {
712
755
  }
713
756
  };
714
757
 
715
- export const populateDataQueries = (table, form, wrapper) => {
758
+ export const populateDataQueries = (table, form, wrapper): void | boolean => {
716
759
  const dataQueries = Array.from(form.querySelectorAll('[data-query]'));
717
760
 
718
- dataQueries.forEach((queryElement, index) => {
761
+ dataQueries.forEach((queryElement) => {
719
762
  const query = queryElement.getAttribute('data-query');
720
763
  let numberOfMatchedRows = 0;
721
764
 
@@ -742,7 +785,7 @@ export const populateDataQueries = (table, form, wrapper) => {
742
785
  numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr:not(.filtered)`)).filter(function (row) {
743
786
  let matched = true;
744
787
 
745
- for (const [index, value] of Object.entries(queries)) {
788
+ for (const value of Object.entries(queries)) {
746
789
  const queryParts = value.split(' == ');
747
790
 
748
791
  if (
@@ -774,7 +817,7 @@ export const populateDataQueries = (table, form, wrapper) => {
774
817
  };
775
818
 
776
819
  // Pagination
777
- export const addPaginationEventListeners = function (table, form, pagination, wrapper) {
820
+ export const addPaginationEventListeners = function (table, form, pagination, wrapper): void | boolean {
778
821
  if (wrapper.hasAttribute('data-no-submit')) {
779
822
  return false;
780
823
  }
@@ -814,17 +857,17 @@ export const addPaginationEventListeners = function (table, form, pagination, wr
814
857
  };
815
858
 
816
859
  // Export CSV Data
817
- export const addExportEventListeners = (button, table) => {
860
+ export const addExportEventListeners = (button, table): void | boolean => {
818
861
  if (!button) {
819
862
  return false;
820
863
  }
821
864
 
822
- button.addEventListener('click', (event) => {
865
+ button.addEventListener('click', () => {
823
866
  exportAsCSV(table);
824
867
  });
825
868
  };
826
869
 
827
- export const exportAsCSV = function (table) {
870
+ export const exportAsCSV = function (table): void {
828
871
  let csvData = [];
829
872
  // Get each row data
830
873
  const rows = table.getElementsByTagName('tr');
@@ -867,7 +910,7 @@ export const exportAsCSV = function (table) {
867
910
  };
868
911
 
869
912
  // After table is loaded
870
- export const makeTableFunctional = function (table, form, pagination, wrapper) {
913
+ export const makeTableFunctional = function (table, form, pagination, wrapper): void {
871
914
  addDataAttributes(table);
872
915
  createMobileButton(table, wrapper);
873
916
  populateDataQueries(table, form, wrapper);
@@ -877,8 +920,8 @@ export const makeTableFunctional = function (table, form, pagination, wrapper) {
877
920
  const largestWidth = getLargestLastColWidth(table);
878
921
  wrapper.style.setProperty('--cta-width', `${largestWidth}rem`);
879
922
 
880
- function outputsize() {
881
- Array.from(table.querySelectorAll('tr')).forEach((row, index) => {
923
+ function outputsize(): void {
924
+ Array.from(table.querySelectorAll('tr')).forEach((row) => {
882
925
  const rowHeight = row.offsetHeight;
883
926
  row.style.setProperty('--row-height', `${rowHeight}px`);
884
927
  });
@@ -888,13 +931,13 @@ export const makeTableFunctional = function (table, form, pagination, wrapper) {
888
931
  }
889
932
  };
890
933
 
891
- const filterFilters = function (form) {
934
+ const filterFilters = function (form): object {
892
935
  const filters = new Object();
893
936
 
894
937
  // Filter
895
938
  const filterInputs = Array.from(form.querySelectorAll('[data-filter]'));
896
939
 
897
- filterInputs.forEach((filterInput, index) => {
940
+ filterInputs.forEach((filterInput) => {
898
941
  // Ignore uncked radio inputs
899
942
  if (filterInput.type == 'radio' && !filterInput.checked) {
900
943
  return;
@@ -921,7 +964,7 @@ const filterFilters = function (form) {
921
964
  return filters;
922
965
  };
923
966
 
924
- export const loadAjaxTable = async function (table, form, pagination, wrapper) {
967
+ export const loadAjaxTable = async function (table, form, pagination, wrapper): void {
925
968
  const formData = new FormData(form);
926
969
  const queryString = new URLSearchParams(formData).toString();
927
970
  const columns = table.querySelectorAll('thead tr th:not(.expand-button-heading)');
@@ -933,19 +976,19 @@ export const loadAjaxTable = async function (table, form, pagination, wrapper) {
933
976
  // Display the filter count
934
977
  const filters = filterFilters(form);
935
978
 
936
- Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {
979
+ Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element) => {
937
980
  element.innerHTML = '';
938
981
  element.parentNode.classList.remove('hover');
939
982
  });
940
983
 
941
984
  let filterCount = 0;
942
- Object.values(filters).forEach((filter, index) => {
985
+ Object.values(filters).forEach((filter) => {
943
986
  if (typeof filter == 'object' && Object.values(filter).length) filterCount += Object.values(filter).length;
944
987
  else filterCount++;
945
988
  });
946
989
 
947
990
  if (filterCount) {
948
- Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {
991
+ Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element) => {
949
992
  element.innerHTML += `(${filterCount})`;
950
993
  element.parentNode.classList.add('hover');
951
994
  });
@@ -996,17 +1039,17 @@ export const loadAjaxTable = async function (table, form, pagination, wrapper) {
996
1039
  if (data) {
997
1040
  tbody.innerHTML = '';
998
1041
 
999
- data.forEach((row, index) => {
1042
+ data.forEach((row) => {
1000
1043
  const table_row = document.createElement('tr');
1001
1044
 
1002
- columns.forEach((col, index) => {
1045
+ columns.forEach((col) => {
1003
1046
  let cellOutput = '';
1004
1047
  const table_cell = document.createElement('td');
1005
1048
  // Add some data to help with the mobile layout design
1006
1049
  table_cell.setAttribute('data-label', col.innerText);
1007
1050
 
1008
1051
  if (col.getAttribute('data-output')) {
1009
- var cellTemplate = col.getAttribute('data-output');
1052
+ const cellTemplate = col.getAttribute('data-output');
1010
1053
  // Use a regex to replace {var} with actual values from the json data
1011
1054
  cellOutput = cellTemplate.replace(new RegExp(/{(.*?)}/, 'gm'), function (matched) {
1012
1055
  return resolvePath(row, matched.replace('{', '').replace('}', ''));
@@ -1015,11 +1058,11 @@ export const loadAjaxTable = async function (table, form, pagination, wrapper) {
1015
1058
 
1016
1059
  // If an output array is defined then the content is going to made of of multiple values from an array
1017
1060
  if (col.hasAttribute('data-output-array')) {
1018
- var cellTemplate = col.getAttribute('data-output');
1061
+ const cellTemplate = col.getAttribute('data-output');
1019
1062
  const arrValue = resolvePath(row, cellTemplate.replace('{', '').replace('}', ''));
1020
1063
 
1021
1064
  cellOutput = '';
1022
- arrValue.forEach((rowValue, i) => {
1065
+ arrValue.forEach((rowValue) => {
1023
1066
  const cellTemplateValue = col.getAttribute('data-output-array');
1024
1067
  let cellOutputValue = '';
1025
1068
 
@@ -1066,7 +1109,7 @@ export const loadAjaxTable = async function (table, form, pagination, wrapper) {
1066
1109
 
1067
1110
  makeTableFunctional(table, form, pagination, wrapper);
1068
1111
 
1069
- Array.from(form.querySelectorAll('[data-ajax-query]')).forEach((queryElement, index) => {
1112
+ Array.from(form.querySelectorAll('[data-ajax-query]')).forEach((queryElement) => {
1070
1113
  const totalNumber = resolvePath(response, queryElement.getAttribute('data-ajax-query'), '');
1071
1114
 
1072
1115
  if (queryElement.hasAttribute('data-total')) queryElement.setAttribute('data-total', totalNumber);
@@ -1098,7 +1141,7 @@ export const loadAjaxTable = async function (table, form, pagination, wrapper) {
1098
1141
  }
1099
1142
  };
1100
1143
 
1101
- export const formatCell = (format, cellOutput) => {
1144
+ export const formatCell = (format, cellOutput): any => {
1102
1145
  switch (format) {
1103
1146
  case 'datetime':
1104
1147
  return (
@@ -1,10 +1,7 @@
1
- // @ts-nocheck
2
1
  import { getSwipeDirection } from './helpers';
3
2
 
4
- export const createTabsLinks = function (tabsElement: Element) {
5
- const details = tabsElement.querySelectorAll(':scope > details');
3
+ export const createTabsLinks = function (tabsElement: Element): void {
6
4
  const detailsORLinks = tabsElement.querySelectorAll(':scope > details, :scope > a');
7
- const summaries = tabsElement.querySelectorAll(':scope > details > summary');
8
5
  let tabLinks = tabsElement.querySelector(':scope > .tabs__links');
9
6
 
10
7
  if (tabsElement.shadowRoot && tabsElement.shadowRoot.querySelector('.tabs__links'))
@@ -23,7 +20,7 @@ export const createTabsLinks = function (tabsElement: Element) {
23
20
 
24
21
  // Create the tab buttons from the summary titles
25
22
  let tabindex = 0;
26
- detailsORLinks.forEach((element, index) => {
23
+ detailsORLinks.forEach((element) => {
27
24
  let button = document.createElement('button');
28
25
 
29
26
  if (element.matches('details')) {
@@ -57,7 +54,7 @@ export const createTabsLinks = function (tabsElement: Element) {
57
54
  });
58
55
  };
59
56
 
60
- export const setTabsEventHandlers = function (tabsElement: Element) {
57
+ export const setTabsEventHandlers = function (tabsElement: Element): void {
61
58
  const details = tabsElement.querySelectorAll(':scope > details');
62
59
  const summaries = tabsElement.querySelectorAll(':scope > details > summary');
63
60
  let buttonWrapper = tabsElement.querySelector(':scope .tabs__links');
@@ -65,7 +62,7 @@ export const setTabsEventHandlers = function (tabsElement: Element) {
65
62
 
66
63
  let nextButton = tabsElement.querySelector(':scope .tabs__next');
67
64
 
68
- var scrollTimeout;
65
+ let scrollTimeout;
69
66
  window.isClicked = false;
70
67
  window.isScrolling = false;
71
68
 
@@ -117,12 +114,10 @@ export const setTabsEventHandlers = function (tabsElement: Element) {
117
114
  });
118
115
  });
119
116
 
120
- buttonWrapper.addEventListener('scrollend', (event) => {
121
-
117
+ buttonWrapper.addEventListener('scrollend', () => {
122
118
  clearTimeout(scrollTimeout);
123
119
 
124
120
  scrollTimeout = setTimeout(function () {
125
-
126
121
  let buttonToClick = buttons[0];
127
122
  let closestOffset = Math.abs(buttonToClick.getBoundingClientRect().left);
128
123
 
@@ -136,13 +131,10 @@ export const setTabsEventHandlers = function (tabsElement: Element) {
136
131
  if (window.isClicked) {
137
132
  window.isClicked = false;
138
133
  return false;
139
- }
140
- else {
141
-
134
+ } else {
142
135
  buttonToClick.click();
143
136
  }
144
137
  buttonToClick.focus();
145
-
146
138
  }, 500);
147
139
  });
148
140
 
@@ -1,10 +1,40 @@
1
- // @ts-nocheck
2
1
  // Modules
3
- import * as helpers from '../js/modules/helpers';
4
- import extendDialogs from '../js/modules/dialogs';
5
- import createDataLayer from '../js/modules/data-layer';
6
- import extendInputs from '../js/modules/inputs';
7
- import createDynamicEvents from '../js/modules/dynamicEvents';
2
+ import * as helpers from './modules/helpers';
3
+ import extendDialogs from './modules/dialogs';
4
+ import createDataLayer from './modules/data-layer';
5
+ import extendInputs from './modules/inputs';
6
+ import createDynamicEvents from './modules/dynamicEvents';
7
+
8
+ const components = [
9
+ 'accordion',
10
+ 'header',
11
+ 'table',
12
+ 'tabs',
13
+ 'card',
14
+ 'filter-card',
15
+ 'video-card',
16
+ 'record-card',
17
+ 'filterlist',
18
+ 'applied-filters',
19
+ 'pagination',
20
+ 'notification',
21
+ 'actionbar',
22
+ 'nav',
23
+ 'collapsible-side',
24
+ 'address-lookup',
25
+ 'fileupload',
26
+ 'search',
27
+ 'inline-edit',
28
+ 'multiselect',
29
+ 'multi-step',
30
+ 'menu',
31
+ 'slider',
32
+ 'carousel',
33
+ 'marketing',
34
+ 'barchart',
35
+ 'doughnutchart',
36
+ 'bento-grid',
37
+ ];
8
38
 
9
39
  // Attach classes to dom elements
10
40
  document.addEventListener('DOMContentLoaded', function () {
@@ -17,4 +47,38 @@ document.addEventListener('DOMContentLoaded', function () {
17
47
 
18
48
  extendDialogs(document.body);
19
49
  extendInputs(document.body);
50
+
51
+ const prefix = 'iam';
52
+ const options = {
53
+ rootMargin: '50px',
54
+ threshold: 0.1,
55
+ };
56
+ const componentExt = '.component.min.js';
57
+
58
+ // Load components - Each component will load once the first of its type has been loaded
59
+ components.forEach((component) => {
60
+ if (document.getElementsByTagName(`${prefix}-${component}`).length === 0) return;
61
+
62
+ const callback = (entries: any): void => {
63
+ entries.forEach((entry: any) => {
64
+ if (entry.intersectionRatio > 0) {
65
+ console.log(component);
66
+
67
+ import(/* @vite-ignore */ `../js/components/${component}/${component}${componentExt}`)
68
+ .then((module) => {
69
+ if (!window.customElements.get(`${prefix}-${component}`))
70
+ window.customElements.define(`${prefix}-${component}`, module.default);
71
+ })
72
+ .catch((err) => {
73
+ console.log(err.message);
74
+ });
75
+
76
+ intObserver.unobserve(entry.target);
77
+ }
78
+ });
79
+ };
80
+
81
+ const intObserver = new IntersectionObserver(callback, options);
82
+ intObserver.observe(document.getElementsByTagName(`${prefix}-${component}`)[0]);
83
+ });
20
84
  });
@@ -0,0 +1,19 @@
1
+ // @ts-nocheck
2
+ import '@testing-library/jest-dom';
3
+ import { getChartData } from '../modules/chart.module';
4
+ import puppeteer from 'puppeteer';
5
+ import 'expect-puppeteer';
6
+
7
+ import iamCard from '../components/card/card.component';
8
+
9
+ describe('The card component', () => {
10
+ if (!window.customElements.get(`iam-card`)) window.customElements.define(`iam-card`, iamCard);
11
+
12
+ document.body.innerHTML = `
13
+ <iam-card>Financial preparation <span>Here would be the top level description of the task</span></iam-card>`;
14
+
15
+ test('should have the class of card added to it', () => {
16
+ let component = document.querySelector('iam-card');
17
+ expect(component.classList).toContain('card');
18
+ });
19
+ });