@iamproperty/components 7.1.0--beta1 → 7.1.0--beta3

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 (411) hide show
  1. package/assets/css/components/actionbar.css.map +1 -1
  2. package/assets/css/components/actionbar.global.css.map +1 -1
  3. package/assets/css/components/address-lookup.css.map +1 -1
  4. package/assets/css/components/applied-filters.css.map +1 -1
  5. package/assets/css/components/barchart.component.css +1 -1
  6. package/assets/css/components/barchart.component.css.map +1 -1
  7. package/assets/css/components/card.component.css +1 -1
  8. package/assets/css/components/card.component.css.map +1 -1
  9. package/assets/css/components/card.module.css.map +1 -1
  10. package/assets/css/components/carousel.component.css +1 -1
  11. package/assets/css/components/carousel.component.css.map +1 -1
  12. package/assets/css/components/carousel.config.css.map +1 -1
  13. package/assets/css/components/charts.config.css.map +1 -1
  14. package/assets/css/components/charts.css +1 -1
  15. package/assets/css/components/charts.css.map +1 -1
  16. package/assets/css/components/charts.module.css +1 -1
  17. package/assets/css/components/charts.module.css.map +1 -1
  18. package/assets/css/components/collapsible-side.css.map +1 -1
  19. package/assets/css/components/fileupload.css.map +1 -1
  20. package/assets/css/components/filter-card.component.css.map +1 -1
  21. package/assets/css/components/header.css.map +1 -1
  22. package/assets/css/components/inline-edit.css.map +1 -1
  23. package/assets/css/components/inline-edit.preload.css.map +1 -1
  24. package/assets/css/components/marketing.css.map +1 -1
  25. package/assets/css/components/multi-step.component.css.map +1 -1
  26. package/assets/css/components/multiselect.css +1 -1
  27. package/assets/css/components/multiselect.css.map +1 -1
  28. package/assets/css/components/multiselect.preload.css.map +1 -1
  29. package/assets/css/components/nav.css +1 -1
  30. package/assets/css/components/nav.css.map +1 -1
  31. package/assets/css/components/nav.docs.css.map +1 -1
  32. package/assets/css/components/nav.global.css +1 -1
  33. package/assets/css/components/nav.global.css.map +1 -1
  34. package/assets/css/components/nav.old.css +1 -1
  35. package/assets/css/components/nav.old.css.map +1 -1
  36. package/assets/css/components/nav.preload.css.map +1 -1
  37. package/assets/css/components/notification.css.map +1 -1
  38. package/assets/css/components/notification.global.css.map +1 -1
  39. package/assets/css/components/pagination.css.map +1 -1
  40. package/assets/css/components/property-searchbar.css +1 -1
  41. package/assets/css/components/property-searchbar.css.map +1 -1
  42. package/assets/css/components/record-card.component.css.map +1 -1
  43. package/assets/css/components/slider.css.map +1 -1
  44. package/assets/css/components/snapshot.css.map +1 -1
  45. package/assets/css/components/stepper.css.map +1 -1
  46. package/assets/css/components/table.css +1 -1
  47. package/assets/css/components/table.css.map +1 -1
  48. package/assets/css/components/table.global.css +1 -1
  49. package/assets/css/components/table.global.css.map +1 -1
  50. package/assets/css/components/tabs.css.map +1 -1
  51. package/assets/css/components/testimonial.css.map +1 -1
  52. package/assets/css/components/timeline.css +1 -1
  53. package/assets/css/components/timeline.css.map +1 -1
  54. package/assets/css/components/video-card.component.css.map +1 -1
  55. package/assets/css/core.min.css +1 -1
  56. package/assets/css/core.min.css.map +1 -1
  57. package/assets/css/style.min.css +1 -1
  58. package/assets/css/style.min.css.map +1 -1
  59. package/assets/js/components/_global.js +8 -8
  60. package/assets/js/components/accordion/accordion.component.js +13 -10
  61. package/assets/js/components/accordion/accordion.component.min.js +4 -4
  62. package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
  63. package/assets/js/components/actionbar/actionbar.component.js +97 -83
  64. package/assets/js/components/actionbar/actionbar.component.min.js +5 -5
  65. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  66. package/assets/js/components/address-lookup/address-lookup.component.js +30 -26
  67. package/assets/js/components/address-lookup/address-lookup.component.min.js +4 -4
  68. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  69. package/assets/js/components/applied-filters/applied-filters.component.js +10 -6
  70. package/assets/js/components/applied-filters/applied-filters.component.min.js +3 -3
  71. package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
  72. package/assets/js/components/barchart/barchart.component.js +8 -7
  73. package/assets/js/components/barchart/barchart.component.min.js +4 -4
  74. package/assets/js/components/barchart/barchart.component.min.js.map +1 -1
  75. package/assets/js/components/card/card.component.js +27 -12
  76. package/assets/js/components/card/card.component.min.js +3 -3
  77. package/assets/js/components/card/card.component.min.js.map +1 -1
  78. package/assets/js/components/carousel/carousel.component.js +18 -12
  79. package/assets/js/components/carousel/carousel.component.min.js +4 -4
  80. package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
  81. package/assets/js/components/chart/chart.component.js +9 -8
  82. package/assets/js/components/collapsible-side/collapsible-side.component.js +20 -8
  83. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  84. package/assets/js/components/collapsible-side/collapsible-side.component.min.js.map +1 -1
  85. package/assets/js/components/fileupload/fileupload.component.js +11 -7
  86. package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
  87. package/assets/js/components/fileupload/fileupload.component.min.js.map +1 -1
  88. package/assets/js/components/filter-card/filter-card.component.js +19 -9
  89. package/assets/js/components/filter-card/filter-card.component.min.js +2 -2
  90. package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -1
  91. package/assets/js/components/filterlist/filterlist.component.js +10 -6
  92. package/assets/js/components/filterlist/filterlist.component.min.js +3 -3
  93. package/assets/js/components/filterlist/filterlist.component.min.js.map +1 -1
  94. package/assets/js/components/header/header.component.js +8 -4
  95. package/assets/js/components/header/header.component.min.js +1 -1
  96. package/assets/js/components/header/header.component.min.js.map +1 -1
  97. package/assets/js/components/inline-edit/inline-edit.component.js +43 -23
  98. package/assets/js/components/inline-edit/inline-edit.component.min.js +4 -4
  99. package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -1
  100. package/assets/js/components/marketing/marketing.component.js +11 -5
  101. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  102. package/assets/js/components/marketing/marketing.component.min.js.map +1 -1
  103. package/assets/js/components/multi-step/multi-step.component.js +22 -19
  104. package/assets/js/components/multiselect/multiselect.component.js +65 -47
  105. package/assets/js/components/multiselect/multiselect.component.min.js +7 -6
  106. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  107. package/assets/js/components/nav/nav.component.js +57 -38
  108. package/assets/js/components/nav/nav.component.min.js +5 -5
  109. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  110. package/assets/js/components/notification/notification.component.js +9 -5
  111. package/assets/js/components/notification/notification.component.min.js +5 -5
  112. package/assets/js/components/notification/notification.component.min.js.map +1 -1
  113. package/assets/js/components/pagination/pagination.component.js +18 -14
  114. package/assets/js/components/pagination/pagination.component.min.js +2 -2
  115. package/assets/js/components/pagination/pagination.component.min.js.map +1 -1
  116. package/assets/js/components/record-card/record-card.component.js +10 -8
  117. package/assets/js/components/record-card/record-card.component.min.js +2 -2
  118. package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
  119. package/assets/js/components/search/search.component.js +22 -17
  120. package/assets/js/components/search/search.component.min.js +4 -4
  121. package/assets/js/components/search/search.component.min.js.map +1 -1
  122. package/assets/js/components/slider/slider.component.js +25 -21
  123. package/assets/js/components/slider/slider.component.min.js +3 -3
  124. package/assets/js/components/slider/slider.component.min.js.map +1 -1
  125. package/assets/js/components/table/table.component.js +30 -24
  126. package/assets/js/components/table/table.component.min.js +7 -7
  127. package/assets/js/components/table/table.component.min.js.map +1 -1
  128. package/assets/js/components/tabs/tabs.component.js +10 -6
  129. package/assets/js/components/tabs/tabs.component.min.js +3 -3
  130. package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
  131. package/assets/js/components/video-card/video-card.component.js +45 -33
  132. package/assets/js/components/video-card/video-card.component.min.js +3 -3
  133. package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
  134. package/assets/js/components.bundle.js +1 -1
  135. package/assets/js/components.bundle.js.map +1 -1
  136. package/assets/js/components.js +35 -8
  137. package/assets/js/modules/applied-filters.js +20 -20
  138. package/assets/js/modules/carousel.js +65 -60
  139. package/assets/js/modules/chart.js +184 -134
  140. package/assets/js/modules/chart.module.js +74 -63
  141. package/assets/js/modules/data-layer.js +17 -17
  142. package/assets/js/modules/dialogs.js +47 -38
  143. package/assets/js/modules/drawer.js +1 -1
  144. package/assets/js/modules/dynamicEvents.js +24 -24
  145. package/assets/js/modules/file-upload.js +8 -9
  146. package/assets/js/modules/fileupload.js +5 -5
  147. package/assets/js/modules/filterlist.js +4 -4
  148. package/assets/js/modules/form.js +22 -18
  149. package/assets/js/modules/helpers.js +54 -44
  150. package/assets/js/modules/inputs.js +25 -21
  151. package/assets/js/modules/nav.js +3 -1
  152. package/assets/js/modules/notification.js +6 -6
  153. package/assets/js/modules/orderablelist.js +12 -12
  154. package/assets/js/modules/pagination.js +5 -5
  155. package/assets/js/modules/table.js +242 -181
  156. package/assets/js/modules/tabs.js +35 -32
  157. package/assets/js/modules/testimonial.js +11 -12
  158. package/assets/js/scripts.bundle.js +1 -1
  159. package/assets/js/scripts.bundle.js.map +1 -1
  160. package/assets/js/scripts.bundle.min.js +1 -1
  161. package/assets/js/scripts.bundle.min.js.map +1 -1
  162. package/assets/js/scripts.js +1 -1
  163. package/assets/js/tests/chart.spec.js +5 -5
  164. package/assets/js/tests/filterlist.spec.js +2 -2
  165. package/assets/js/tests/slider.spec.js +2 -2
  166. package/assets/js/tests/table.spec.js +2 -2
  167. package/assets/js/vendor/hibp.js +4 -4
  168. package/assets/sass/_components.scss +28 -40
  169. package/assets/sass/_corefiles.scss +22 -29
  170. package/assets/sass/_elements.scss +19 -19
  171. package/assets/sass/_fonts.scss +10 -7
  172. package/assets/sass/_func.scss +14 -14
  173. package/assets/sass/_functions/functions.scss +115 -90
  174. package/assets/sass/_functions/mixins.scss +72 -112
  175. package/assets/sass/_functions/utilities.scss +447 -393
  176. package/assets/sass/_functions/variables.scss +1357 -1371
  177. package/assets/sass/_print.scss +18 -16
  178. package/assets/sass/_tests/colours.spec.scss +15 -14
  179. package/assets/sass/_tests/func.spec.scss +1 -2
  180. package/assets/sass/_tests/mixins.spec.scss +9 -14
  181. package/assets/sass/_tests/typography.spec.scss +1 -2
  182. package/assets/sass/_utilities.scss +8 -12
  183. package/assets/sass/components/actionbar.global.scss +45 -64
  184. package/assets/sass/components/actionbar.scss +58 -84
  185. package/assets/sass/components/address-lookup.scss +9 -11
  186. package/assets/sass/components/applied-filters.scss +3 -7
  187. package/assets/sass/components/barchart.component.scss +68 -99
  188. package/assets/sass/components/card.component.scss +35 -50
  189. package/assets/sass/components/card.module.scss +34 -37
  190. package/assets/sass/components/carousel.component.scss +198 -177
  191. package/assets/sass/components/carousel.config.scss +13 -19
  192. package/assets/sass/components/charts.config.scss +16 -23
  193. package/assets/sass/components/charts.module.scss +139 -178
  194. package/assets/sass/components/charts.scss +173 -232
  195. package/assets/sass/components/collapsible-side.scss +65 -98
  196. package/assets/sass/components/fileupload.scss +17 -23
  197. package/assets/sass/components/filter-card.component.scss +21 -28
  198. package/assets/sass/components/header.scss +24 -37
  199. package/assets/sass/components/inline-edit.preload.scss +24 -45
  200. package/assets/sass/components/inline-edit.scss +4 -5
  201. package/assets/sass/components/marketing.scss +19 -14
  202. package/assets/sass/components/multi-step.component.scss +36 -42
  203. package/assets/sass/components/multiselect.preload.scss +9 -12
  204. package/assets/sass/components/multiselect.scss +20 -24
  205. package/assets/sass/components/nav.docs.scss +7 -15
  206. package/assets/sass/components/nav.global.scss +123 -177
  207. package/assets/sass/components/nav.old.scss +64 -135
  208. package/assets/sass/components/nav.preload.scss +11 -12
  209. package/assets/sass/components/nav.scss +126 -173
  210. package/assets/sass/components/notification.global.scss +2 -3
  211. package/assets/sass/components/notification.scss +17 -32
  212. package/assets/sass/components/pagination.scss +32 -44
  213. package/assets/sass/components/property-searchbar.scss +2 -6
  214. package/assets/sass/components/record-card.component.scss +42 -55
  215. package/assets/sass/components/slider.scss +38 -35
  216. package/assets/sass/components/snapshot.scss +4 -10
  217. package/assets/sass/components/stepper.scss +14 -22
  218. package/assets/sass/components/table.global.scss +130 -171
  219. package/assets/sass/components/table.scss +17 -27
  220. package/assets/sass/components/tabs.scss +23 -32
  221. package/assets/sass/components/testimonial.scss +6 -14
  222. package/assets/sass/components/timeline.scss +8 -12
  223. package/assets/sass/components/video-card.component.scss +9 -14
  224. package/assets/sass/components.reset.scss +5 -5
  225. package/assets/sass/core.scss +3 -3
  226. package/assets/sass/elements/admin-panel.scss +41 -45
  227. package/assets/sass/elements/badge-tag.scss +16 -26
  228. package/assets/sass/elements/brand.scss +13 -16
  229. package/assets/sass/elements/buttons.scss +80 -106
  230. package/assets/sass/elements/container.scss +24 -133
  231. package/assets/sass/elements/details.scss +30 -50
  232. package/assets/sass/elements/dialog.scss +4 -6
  233. package/assets/sass/elements/forms.scss +421 -437
  234. package/assets/sass/elements/icons.scss +3 -4
  235. package/assets/sass/elements/links.scss +17 -25
  236. package/assets/sass/elements/lists.scss +30 -47
  237. package/assets/sass/elements/media.scss +1 -4
  238. package/assets/sass/elements/modal.scss +54 -80
  239. package/assets/sass/elements/popover.scss +28 -45
  240. package/assets/sass/elements/progress.scss +30 -40
  241. package/assets/sass/elements/table.element.scss +10 -15
  242. package/assets/sass/elements/tooltips.scss +27 -49
  243. package/assets/sass/elements/type.scss +47 -53
  244. package/assets/sass/email.scss +7 -9
  245. package/assets/sass/error.scss +23 -20
  246. package/assets/sass/foundations/bs_grid.scss +0 -1
  247. package/assets/sass/foundations/grid.scss +120 -122
  248. package/assets/sass/foundations/reboot.scss +27 -35
  249. package/assets/sass/foundations/root.scss +21 -31
  250. package/assets/sass/helpers/dynamic.scss +5 -5
  251. package/assets/sass/helpers/line-clamp.scss +1 -2
  252. package/assets/sass/helpers/max-height.scss +28 -36
  253. package/assets/sass/helpers/wider-colours.scss +2 -5
  254. package/assets/sass/main.scss +4 -4
  255. package/assets/sass/templates/auth.scss +11 -18
  256. package/assets/sass/templates/form.scss +16 -29
  257. package/assets/ts/components/_global.ts +14 -17
  258. package/assets/ts/components/accordion/accordion.component.ts +23 -19
  259. package/assets/ts/components/actionbar/README.md +8 -7
  260. package/assets/ts/components/actionbar/actionbar.component.ts +170 -220
  261. package/assets/ts/components/address-lookup/address-lookup.component.ts +94 -130
  262. package/assets/ts/components/applied-filters/README.md +1 -1
  263. package/assets/ts/components/applied-filters/applied-filters.component.ts +16 -15
  264. package/assets/ts/components/barchart/barchart.component.ts +29 -26
  265. package/assets/ts/components/card/card.component.ts +56 -57
  266. package/assets/ts/components/carousel/README.md +8 -9
  267. package/assets/ts/components/carousel/carousel.component.ts +30 -33
  268. package/assets/ts/components/chart/README.md +1 -3
  269. package/assets/ts/components/chart/chart.component.ts +24 -36
  270. package/assets/ts/components/collapsible-side/README.md +1 -1
  271. package/assets/ts/components/collapsible-side/collapsible-side.component.ts +44 -57
  272. package/assets/ts/components/fileupload/README.md +3 -3
  273. package/assets/ts/components/fileupload/fileupload.component.ts +23 -28
  274. package/assets/ts/components/filter-card/filter-card.component.ts +32 -33
  275. package/assets/ts/components/filterlist/README.md +3 -3
  276. package/assets/ts/components/filterlist/filterlist.component.ts +18 -16
  277. package/assets/ts/components/header/README.md +8 -9
  278. package/assets/ts/components/header/header.component.ts +15 -16
  279. package/assets/ts/components/inline-edit/README.md +1 -0
  280. package/assets/ts/components/inline-edit/inline-edit.component.ts +71 -71
  281. package/assets/ts/components/marketing/marketing.component.ts +17 -16
  282. package/assets/ts/components/multi-step/multi-step.component.ts +114 -156
  283. package/assets/ts/components/multiselect/README.md +5 -5
  284. package/assets/ts/components/multiselect/multiselect.component.ts +119 -135
  285. package/assets/ts/components/nav/README.md +13 -13
  286. package/assets/ts/components/nav/nav.component.ts +171 -167
  287. package/assets/ts/components/notification/README.md +9 -9
  288. package/assets/ts/components/notification/notification.component.ts +33 -32
  289. package/assets/ts/components/pagination/README.md +12 -12
  290. package/assets/ts/components/pagination/pagination.component.ts +51 -69
  291. package/assets/ts/components/record-card/record-card.component.ts +24 -34
  292. package/assets/ts/components/search/README.md +6 -7
  293. package/assets/ts/components/search/search.component.ts +75 -91
  294. package/assets/ts/components/slider/slider.component.ts +62 -77
  295. package/assets/ts/components/table/README.md +8 -8
  296. package/assets/ts/components/table/table.component.ts +97 -134
  297. package/assets/ts/components/tabs/README.md +4 -4
  298. package/assets/ts/components/tabs/tabs.component.ts +16 -14
  299. package/assets/ts/components/video-card/video-card.component.ts +89 -93
  300. package/assets/ts/components.ts +44 -20
  301. package/assets/ts/html.d.ts +1 -7
  302. package/assets/ts/modules/applied-filters.ts +104 -135
  303. package/assets/ts/modules/card.module.ts +13 -18
  304. package/assets/ts/modules/carousel.ts +194 -195
  305. package/assets/ts/modules/chart.module.ts +201 -246
  306. package/assets/ts/modules/chart.ts +454 -472
  307. package/assets/ts/modules/data-layer.md +35 -31
  308. package/assets/ts/modules/data-layer.ts +18 -18
  309. package/assets/ts/modules/dialogs.ts +113 -117
  310. package/assets/ts/modules/drawer.ts +7 -9
  311. package/assets/ts/modules/dynamicEvents.ts +67 -100
  312. package/assets/ts/modules/file-upload.ts +43 -40
  313. package/assets/ts/modules/fileupload.ts +38 -60
  314. package/assets/ts/modules/filterlist.ts +14 -20
  315. package/assets/ts/modules/form.ts +126 -128
  316. package/assets/ts/modules/helpers.ts +114 -120
  317. package/assets/ts/modules/inputs.ts +88 -120
  318. package/assets/ts/modules/nav.ts +19 -18
  319. package/assets/ts/modules/notification.ts +28 -32
  320. package/assets/ts/modules/orderablelist.ts +90 -82
  321. package/assets/ts/modules/pagination.ts +14 -19
  322. package/assets/ts/modules/table.ts +516 -599
  323. package/assets/ts/modules/tabs.ts +90 -127
  324. package/assets/ts/modules/testimonial.ts +59 -64
  325. package/assets/ts/scripts.ts +7 -9
  326. package/assets/ts/tests/chart.spec.ts +11 -20
  327. package/assets/ts/tests/data-layer.spec.js +3 -4
  328. package/assets/ts/tests/filterlist.spec.ts +3 -6
  329. package/assets/ts/tests/slider.spec.ts +9 -15
  330. package/assets/ts/tests/table.spec.ts +7 -24
  331. package/assets/ts/vendor/hibp.ts +43 -43
  332. package/dist/components.es.js +280 -270
  333. package/dist/components.umd.js +66 -66
  334. package/dist/style.css +1 -1
  335. package/package.json +14 -4
  336. package/src/components/Accordion/Accordion.spec.js +25 -31
  337. package/src/components/Accordion/Accordion.vue +16 -19
  338. package/src/components/Accordion/AccordionItem.vue +39 -37
  339. package/src/components/Accordion/README.md +10 -12
  340. package/src/components/Actionbar/Actionbar.vue +15 -18
  341. package/src/components/Actionbar/README.md +8 -7
  342. package/src/components/AddressLookup/AddressLookup.vue +14 -16
  343. package/src/components/AppliedFilters/AppliedFilters.vue +14 -16
  344. package/src/components/Banner/Banner.spec.js +13 -15
  345. package/src/components/Banner/Banner.vue +19 -19
  346. package/src/components/Banner/README.md +8 -10
  347. package/src/components/BarChart/BarChart.vue +14 -16
  348. package/src/components/Card/Card.vue +13 -16
  349. package/src/components/Card/README.md +8 -8
  350. package/src/components/Carousel/Carousel.vue +15 -18
  351. package/src/components/Carousel/README.md +7 -7
  352. package/src/components/Chart/Chart.spec.js +64 -87
  353. package/src/components/Chart/Chart.vue +41 -40
  354. package/src/components/Chart/README.md +8 -9
  355. package/src/components/CollapsibleSideMenu/CollapsibleSideMenu.vue +8 -10
  356. package/src/components/CollapsibleSideMenu/README.md +1 -1
  357. package/src/components/FileUpload/FileUpload.vue +35 -40
  358. package/src/components/FileUpload/README.md +3 -3
  359. package/src/components/FilterCard/FilterCard.vue +14 -16
  360. package/src/components/Filterlist/Filterlist.vue +7 -9
  361. package/src/components/Filterlist/README.md +3 -3
  362. package/src/components/Header/Header.vue +23 -26
  363. package/src/components/Header/README.md +8 -9
  364. package/src/components/InlineEdit/InlineEdit.vue +26 -32
  365. package/src/components/Input/Input.vue +323 -233
  366. package/src/components/Input/README.md +11 -11
  367. package/src/components/Marketing/Marketing.vue +24 -27
  368. package/src/components/Marketing/README.md +7 -7
  369. package/src/components/MultiStep/MultiStep.vue +13 -15
  370. package/src/components/Multiselect/Multiselect.vue +14 -17
  371. package/src/components/Nav/Nav.vue +15 -29
  372. package/src/components/Nav/README.md +12 -12
  373. package/src/components/Nav-old/Nav.vue +88 -93
  374. package/src/components/Nav-old/README.md +11 -12
  375. package/src/components/NoteFeed/NoteFeed.vue +59 -56
  376. package/src/components/NoteFeed/README.md +6 -6
  377. package/src/components/Notification/Notification.vue +11 -15
  378. package/src/components/Notification/README.md +9 -9
  379. package/src/components/Pagination/Pagination.vue +14 -24
  380. package/src/components/Pagination/README.md +12 -12
  381. package/src/components/PropertySearchbar/PropertySearchbar.vue +191 -160
  382. package/src/components/PropertySearchbar/README.md +14 -15
  383. package/src/components/RecordCard/RecordCard.vue +14 -16
  384. package/src/components/Search/README.md +1 -1
  385. package/src/components/Search/Search.vue +13 -16
  386. package/src/components/Slider/Slider.vue +13 -16
  387. package/src/components/Snapshot/README.md +9 -10
  388. package/src/components/Snapshot/Snapshot.vue +15 -17
  389. package/src/components/Stepper/README.md +12 -13
  390. package/src/components/Stepper/Step.vue +22 -18
  391. package/src/components/Stepper/Stepper.spec.js +41 -46
  392. package/src/components/Stepper/Stepper.vue +17 -18
  393. package/src/components/Table/README.md +12 -11
  394. package/src/components/Table/Table.spec.js +17 -28
  395. package/src/components/Table/Table.vue +49 -48
  396. package/src/components/Tabs/README.md +8 -8
  397. package/src/components/Tabs/Tab.vue +21 -21
  398. package/src/components/Tabs/Tabs.vue +14 -17
  399. package/src/components/Testimonial/README.md +11 -12
  400. package/src/components/Testimonial/Testimonial.spec.js +22 -26
  401. package/src/components/Testimonial/Testimonial.vue +31 -25
  402. package/src/components/Timeline/README.md +3 -3
  403. package/src/components/Timeline/Timeline.spec.js +9 -11
  404. package/src/components/Timeline/Timeline.vue +10 -10
  405. package/src/components/VideoCard/VideoCard.vue +14 -16
  406. package/src/foundations/Logo/Logo.spec.js +30 -30
  407. package/src/foundations/Logo/Logo.vue +28 -28
  408. package/src/foundations/Logo/README.md +5 -4
  409. package/src/helpers/strings.js +11 -8
  410. package/src/index.js +27 -28
  411. package/src/vue-shim.d.ts +4 -4
@@ -2,15 +2,19 @@
2
2
  // Data layer Web component created
3
3
  window.dataLayer = window.dataLayer || [];
4
4
  window.dataLayer.push({
5
- "event": "customElementRegistered",
6
- "element": "mutliselect"
5
+ event: 'customElementRegistered',
6
+ element: 'mutliselect',
7
7
  });
8
8
  class iamMultiselect extends HTMLElement {
9
9
  constructor() {
10
10
  super();
11
11
  this.attachShadow({ mode: 'open' });
12
- const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';
13
- const coreCSS = document.body.hasAttribute('data-core-css') ? document.body.getAttribute('data-core-css') : `${assetLocation}/css/core.min.css`;
12
+ const assetLocation = document.body.hasAttribute('data-assets-location')
13
+ ? document.body.getAttribute('data-assets-location')
14
+ : '/assets';
15
+ const coreCSS = document.body.hasAttribute('data-core-css')
16
+ ? document.body.getAttribute('data-core-css')
17
+ : `${assetLocation}/css/core.min.css`;
14
18
  const loadCSS = `@import "${assetLocation}/css/components/multiselect.css";`;
15
19
  const template = document.createElement('template');
16
20
  template.innerHTML = `
@@ -19,7 +23,7 @@ class iamMultiselect extends HTMLElement {
19
23
  ${loadCSS}
20
24
  ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
21
25
  </style>
22
- <label for="search"> <slot name="feedback"></slot></label>
26
+ <label for="search" class="mb-0"><span class="inner-label label"></span> <slot name="feedback"></slot>
23
27
  <div class="outer">
24
28
  <div class="wrapper">
25
29
 
@@ -32,47 +36,46 @@ class iamMultiselect extends HTMLElement {
32
36
  <button id="clear"><span class="visually-hidden">Clear</span></button>
33
37
  </div>
34
38
  </div>
39
+ </label>
35
40
  `;
36
41
  this.shadowRoot.appendChild(template.content.cloneNode(true));
37
42
  }
38
43
  connectedCallback() {
39
- let multiselect = this;
40
- let form = this.closest('form');
41
- let wrapper = this.shadowRoot.querySelector('.wrapper');
42
- let search = multiselect.shadowRoot.querySelector('#search');
43
- let button = multiselect.shadowRoot.querySelector('#clear');
44
+ const multiselect = this;
45
+ const form = this.closest('form');
46
+ const wrapper = this.shadowRoot.querySelector('.wrapper');
47
+ const search = multiselect.shadowRoot.querySelector('#search');
48
+ const button = multiselect.shadowRoot.querySelector('#clear');
44
49
  let order = 0;
45
- let label = multiselect.shadowRoot.querySelector('label');
46
- label.innerHTML = multiselect.getAttribute('data-label');
50
+ const innerLabel = multiselect.shadowRoot.querySelector('label .inner-label');
51
+ innerLabel.innerHTML = multiselect.getAttribute('data-label');
47
52
  if (multiselect.hasAttribute('placeholder')) {
48
53
  search.setAttribute('placeholder', multiselect.getAttribute('placeholder'));
49
54
  }
50
55
  multiselect.setAttribute('data-error', 'true');
51
56
  // If in form and is required lets watch for the form being submitted
52
57
  if (form && multiselect.hasAttribute('data-is-required')) {
53
- let observer = new MutationObserver(function (mutations) {
58
+ const observer = new MutationObserver(function (mutations) {
54
59
  mutations.forEach(function (mutationRecord) {
55
60
  const targetElement = mutationRecord.target;
56
61
  console.log(targetElement);
57
- if (targetElement.classList.contains("was-validated")) {
62
+ if (targetElement.classList.contains('was-validated')) {
58
63
  wrapper.classList.add('was-validated');
59
64
  }
60
65
  else {
61
66
  wrapper.classList.remove('was-validated');
62
67
  }
63
- ;
64
68
  });
65
69
  });
66
- if (form.classList.contains("was-validated")) {
70
+ if (form.classList.contains('was-validated')) {
67
71
  wrapper.classList.add('was-validated');
68
72
  }
69
73
  else {
70
74
  wrapper.classList.remove('was-validated');
71
75
  }
72
- ;
73
76
  observer.observe(form, {
74
77
  attributes: true,
75
- attributeFilter: ['style', 'class']
78
+ attributeFilter: ['style', 'class'],
76
79
  });
77
80
  }
78
81
  // Set the correct attributes
@@ -109,10 +112,11 @@ class iamMultiselect extends HTMLElement {
109
112
  // Filter list
110
113
  search.addEventListener('input', (event) => {
111
114
  Array.from(multiselect.querySelectorAll(`label:not([slot="checked"])`)).forEach((label, index) => {
112
- let checkbox = label.querySelector('input');
113
- let searchValue = checkbox.value;
114
- let labelText = label.textContent;
115
- if (searchValue.toLowerCase().includes(search.value.toLowerCase()) || labelText.toLowerCase().includes(search.value.toLowerCase())) {
115
+ const checkbox = label.querySelector('input');
116
+ const searchValue = checkbox.value;
117
+ const labelText = label.textContent;
118
+ if (searchValue.toLowerCase().includes(search.value.toLowerCase()) ||
119
+ labelText.toLowerCase().includes(search.value.toLowerCase())) {
116
120
  label.removeAttribute('slot');
117
121
  }
118
122
  else {
@@ -120,16 +124,28 @@ class iamMultiselect extends HTMLElement {
120
124
  }
121
125
  });
122
126
  });
127
+ // Add a delayed hover effect for non hover devices
128
+ let hoverTimeout;
129
+ multiselect.addEventListener('focus', (event) => {
130
+ multiselect.classList.add('hover');
131
+ clearTimeout(hoverTimeout);
132
+ });
133
+ search.addEventListener('blur', (event) => {
134
+ clearTimeout(hoverTimeout);
135
+ hoverTimeout = setTimeout(function () {
136
+ multiselect.classList.remove('hover');
137
+ }, 1000);
138
+ });
123
139
  // Set items
124
140
  multiselect.addEventListener('change', (event) => {
125
141
  if (event && event.target instanceof HTMLElement && event.target.closest('input[type="checkbox"]')) {
126
- let checkbox = event.target.closest('input[type="checkbox"]');
142
+ const checkbox = event.target.closest('input[type="checkbox"]');
127
143
  setItem(checkbox);
128
144
  search.focus();
129
145
  }
130
146
  });
131
147
  // Clear all
132
- button.addEventListener("click", function (event) {
148
+ button.addEventListener('click', function (event) {
133
149
  Array.from(multiselect.querySelectorAll(`label input[type="checkbox"]`)).forEach((checkbox, index) => {
134
150
  checkbox.checked = false;
135
151
  setItem(checkbox);
@@ -137,39 +153,40 @@ class iamMultiselect extends HTMLElement {
137
153
  search.focus();
138
154
  });
139
155
  // Add some keyboard features to keep it accessible
140
- multiselect.addEventListener("keydown", function (event) {
156
+ multiselect.addEventListener('keydown', function (event) {
141
157
  const activeElement = document.activeElement;
142
- switch (event.key) { // change to event.key to key to use the above variable
143
- case "ArrowUp":
158
+ switch (event.key // change to event.key to key to use the above variable
159
+ ) {
160
+ case 'ArrowUp':
144
161
  // Up pressed
145
162
  event.preventDefault();
146
- if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == "checkbox") {
147
- let arrCheckboxes = multiselect.querySelectorAll(`label:not([slot="checked"]):not([slot="checked"])`);
148
- let activeIndex = Array.from(arrCheckboxes).indexOf(activeElement.closest('label'));
149
- let prevCheckbox = Array.from(arrCheckboxes)[activeIndex - 1];
163
+ if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == 'checkbox') {
164
+ const arrCheckboxes = multiselect.querySelectorAll(`label:not([slot="checked"]):not([slot="checked"])`);
165
+ const activeIndex = Array.from(arrCheckboxes).indexOf(activeElement.closest('label'));
166
+ const prevCheckbox = Array.from(arrCheckboxes)[activeIndex - 1];
150
167
  if (prevCheckbox)
151
168
  prevCheckbox.focus();
152
169
  else
153
170
  search.focus();
154
171
  }
155
172
  break;
156
- case "ArrowDown":
173
+ case 'ArrowDown':
157
174
  // Down pressed
158
175
  event.preventDefault();
159
176
  if (activeElement == multiselect) {
160
177
  multiselect.querySelector('label:not([slot="checked"]):not([slot="checked"])').focus();
161
178
  }
162
- else if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == "checkbox") {
163
- let activeValue = activeElement.value;
164
- let nextCheckbox = multiselect.querySelector(`label:has(input[value="${activeValue}"]) ~ label:not([slot="checked"]):not([slot="checked"])`);
179
+ else if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == 'checkbox') {
180
+ const activeValue = activeElement.value;
181
+ const nextCheckbox = multiselect.querySelector(`label:has(input[value="${activeValue}"]) ~ label:not([slot="checked"]):not([slot="checked"])`);
165
182
  if (nextCheckbox)
166
183
  nextCheckbox.focus();
167
184
  }
168
185
  break;
169
- case "Enter":
186
+ case 'Enter':
170
187
  event.stopPropagation();
171
188
  event.preventDefault();
172
- if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == "checkbox") {
189
+ if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == 'checkbox') {
173
190
  if (activeElement.checked == false)
174
191
  activeElement.checked = true;
175
192
  else
@@ -189,19 +206,20 @@ class iamMultiselect extends HTMLElement {
189
206
  }
190
207
  return lastTag;
191
208
  }
192
- search.addEventListener("keydown", function (event) {
193
- switch (event.key) { // change to event.key to key to use the above variable
194
- case "Enter":
195
- let match = multiselect.querySelector(`input[value="${search.value}"]:not(:checked)`);
209
+ search.addEventListener('keydown', function (event) {
210
+ switch (event.key // change to event.key to key to use the above variable
211
+ ) {
212
+ case 'Enter':
213
+ const match = multiselect.querySelector(`input[value="${search.value}"]:not(:checked)`);
196
214
  if (!match)
197
- search.value = "";
215
+ search.value = '';
198
216
  search.focus();
199
217
  break;
200
- case "Backspace":
218
+ case 'Backspace':
201
219
  if (!search.value) {
202
- let lastTag = checkLastTag(order);
220
+ const lastTag = checkLastTag(order);
203
221
  if (lastTag) {
204
- let lastTagInput = lastTag.querySelector('input');
222
+ const lastTagInput = lastTag.querySelector('input');
205
223
  lastTagInput.checked = false;
206
224
  setItem(lastTagInput);
207
225
  }
@@ -211,10 +229,10 @@ class iamMultiselect extends HTMLElement {
211
229
  }
212
230
  });
213
231
  // Fix for the inline edit multiselect
214
- multiselect.addEventListener("mousedown", (event) => {
232
+ multiselect.addEventListener('mousedown', (event) => {
215
233
  wrapper.setAttribute('data-mousedown', 'true');
216
234
  });
217
- multiselect.addEventListener("mouseup", (event) => {
235
+ multiselect.addEventListener('mouseup', (event) => {
218
236
  wrapper.removeAttribute('data-mousedown');
219
237
  });
220
238
  }
@@ -1,14 +1,14 @@
1
1
  /*!
2
- * iamKey v7.1.0--beta1
2
+ * iamKey v7.1.0--beta3
3
3
  * Copyright 2022-2025 iamproperty
4
- */window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"mutliselect"});class b extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const t=document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets",s=document.body.hasAttribute("data-core-css")?document.body.getAttribute("data-core-css"):`${t}/css/core.min.css`,r=document.createElement("template");r.innerHTML=`
4
+ */window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"mutliselect"});class f extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const t=document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets",l=document.body.hasAttribute("data-core-css")?document.body.getAttribute("data-core-css"):`${t}/css/core.min.css`,r=document.createElement("template");r.innerHTML=`
5
5
  <style>
6
- @import "${s}";
7
- .outer{position:relative;max-width:var(--input-max-width, 50rem);display:block}label{margin-bottom:0;padding-bottom:.5rem}.wrapper{margin-bottom:1.5rem;max-width:var(--input-max-width, 50rem)}.wrapper:after{content:"";display:block;position:absolute;top:100%;left:0;width:100%;height:1rem}.wrapper input{margin-bottom:0.5rem}.wrapper .feedback{position:absolute;right:0;bottom:100%;padding:.85rem;width:min-content;white-space:nowrap;margin-bottom:.5rem;display:none}.wrapper.was-validated .feedback{display:block}.wrapper.filled{display:flex;flex-direction:row;flex-wrap:wrap;align-items:flex-start;min-height:calc(2.75rem + 4px);padding:0.5rem 2rem 0rem 0.8125rem;font-size:var(--input-fs, 1rem);line-height:var(--input-lh, 1.25rem);color:var(--colour-body);background-color:var(--colour-canvas-2);border:2px solid var(--colour-primary);border-radius:0.5rem}.wrapper.filled:is(:focus-within,.focus-within):not(:disabled){border-color:var(--colour-info);outline:0;box-shadow:0 0 0 .1rem rgba(30,190,230,.25)}.wrapper.filled input{all:unset;font-size:1rem;line-height:1.625rem;display:inline-block;width:0;flex-grow:1;padding:0 0.5rem 0 0 !important;margin-inline:0.1875rem;order:999;margin-bottom:0.5rem}.wrapper.filled .feedback{display:none !important}.wrapper.filled:is(:focus,.focus):not(:disabled){border-color:var(--colour-info);outline:0;box-shadow:0 0 0 .1rem rgba(30,190,230,.25)}button{position:absolute;top:.75rem;right:.5rem;border:none;background:none;padding-inline:.5rem;display:var(--display-button, none)}button:after{content:"\u2715";font-weight:bold}.dropdown{position:absolute;top:calc(100% + .5rem);padding:0;left:0;width:100%;margin:0;z-index:99;display:none;max-height:15.25rem !important;overflow:auto}.dropdown:before{display:none}.wrapper:is(:focus-within) .dropdown{display:var(--display-panel, none)}.wrapper .dropdown:hover{display:var(--display-panel, none)}:host-context(:focus-within) input{background-color:none !important}:host-context(iam-inline-edit){display:block;--display-btns: none}:host-context(iam-inline-edit) label:hover+.outer:not(:focus-within) .wrapper:not([data-mousedown]),:host-context(iam-inline-edit) .outer:not(:focus-within) .wrapper:not([data-mousedown]):hover{background-color:var(--colour-light)}:host-context(iam-inline-edit) label:hover+.outer:not(:focus-within) .wrapper:not([data-mousedown]) input,:host-context(iam-inline-edit) .outer:not(:focus-within) .wrapper:not([data-mousedown]):hover input{background-color:var(--colour-light)}:host-context(iam-inline-edit) label:hover+.outer:not(:focus-within) .wrapper:not([data-mousedown]) .dropdown,:host-context(iam-inline-edit) .outer:not(:focus-within) .wrapper:not([data-mousedown]):hover .dropdown{display:none}:host-context(iam-inline-edit) .wrapper{margin-bottom:0}:host-context(iam-inline-edit) .wrapper:not(.filled):not(:focus-within):not([data-mousedown]) input{border:none;background:none;margin-left:-1rem;width:calc(100% + 1rem);max-width:calc(100% + 1rem);box-shadow:none}:host-context(iam-inline-edit) .wrapper:not(.filled):not(:focus-within):not([data-mousedown]) .dropdown{display:none}:host-context(iam-inline-edit) .wrapper.filled:not(:focus-within):not([data-mousedown]){background:none;border:none;padding-left:0}/*# sourceMappingURL=assets/css/components/multiselect.css.map */
6
+ @import "${l}";
7
+ .outer{position:relative;max-width:var(--input-max-width, 50rem);display:block}label{margin-bottom:0;padding-bottom:.5rem}.wrapper{margin-bottom:1.5rem;max-width:var(--input-max-width, 50rem)}.wrapper:after{content:"";display:block;position:absolute;top:100%;left:0;width:100%;height:1rem}.wrapper input{margin-bottom:0.5rem}.wrapper .feedback{position:absolute;right:0;bottom:100%;padding:.85rem;width:min-content;white-space:nowrap;margin-bottom:.5rem;display:none}.wrapper.was-validated .feedback{display:block}.wrapper.filled{display:flex;flex-direction:row;flex-wrap:wrap;align-items:flex-start;min-height:calc(2.75rem + 4px);padding:0.5rem 2rem 0rem 0.8125rem;font-size:var(--input-fs, 1rem);line-height:var(--input-lh, 1.25rem);color:var(--colour-body);background-color:var(--colour-canvas-2);border:2px solid var(--colour-primary);border-radius:0.5rem}.wrapper.filled:is(:focus-within,.focus-within):not(:disabled){border-color:var(--colour-info);outline:0;box-shadow:0 0 0 .1rem rgba(30,190,230,.25)}.wrapper.filled input{all:unset;font-size:1rem;line-height:1.625rem;display:inline-block;width:0;flex-grow:1;padding:0 0.5rem 0 0 !important;margin-inline:0.1875rem;order:999;margin-bottom:0.5rem}.wrapper.filled .feedback{display:none !important}.wrapper.filled:is(:focus,.focus):not(:disabled){border-color:var(--colour-info);outline:0;box-shadow:0 0 0 .1rem rgba(30,190,230,.25)}button{position:absolute;top:.75rem;right:.5rem;border:none;background:none;padding-inline:.5rem;display:var(--display-button, none)}button:after{content:"\u2715";font-weight:bold}.dropdown{position:absolute;top:calc(100% + .5rem);padding:0;left:0;width:100%;margin:0;z-index:99;display:none;max-height:15.25rem !important;overflow:auto}.dropdown:before{display:none}.wrapper:is(:focus-within) .dropdown{display:var(--display-panel, none)}@media(hover: hover){.wrapper .dropdown:hover{display:var(--display-panel, none)}}@media(hover: none){:host-context(.hover) .wrapper .dropdown{display:block}}:host-context(:focus-within) input{background-color:none !important}:host-context(iam-inline-edit){display:block;--display-btns: none}:host-context(iam-inline-edit) label:hover+.outer:not(:focus-within) .wrapper:not([data-mousedown]),:host-context(iam-inline-edit) .outer:not(:focus-within) .wrapper:not([data-mousedown]):hover{background-color:var(--colour-light)}:host-context(iam-inline-edit) label:hover+.outer:not(:focus-within) .wrapper:not([data-mousedown]) input,:host-context(iam-inline-edit) .outer:not(:focus-within) .wrapper:not([data-mousedown]):hover input{background-color:var(--colour-light)}:host-context(iam-inline-edit) label:hover+.outer:not(:focus-within) .wrapper:not([data-mousedown]) .dropdown,:host-context(iam-inline-edit) .outer:not(:focus-within) .wrapper:not([data-mousedown]):hover .dropdown{display:none}:host-context(iam-inline-edit) .wrapper{margin-bottom:0}:host-context(iam-inline-edit) .wrapper:not(.filled):not(:focus-within):not([data-mousedown]) input{border:none;background:none;margin-left:-1rem;width:calc(100% + 1rem);max-width:calc(100% + 1rem);box-shadow:none}:host-context(iam-inline-edit) .wrapper:not(.filled):not(:focus-within):not([data-mousedown]) .dropdown{display:none}:host-context(iam-inline-edit) .wrapper.filled:not(:focus-within):not([data-mousedown]){background:none;border:none;padding-left:0}/*# sourceMappingURL=assets/css/components/multiselect.css.map */
8
8
 
9
9
  ${this.hasAttribute("css")?`@import "${this.getAttribute("css")}";`:""}
10
10
  </style>
11
- <label for="search"> <slot name="feedback"></slot></label>
11
+ <label for="search" class="mb-0"><span class="inner-label label"></span> <slot name="feedback"></slot>
12
12
  <div class="outer">
13
13
  <div class="wrapper">
14
14
 
@@ -21,5 +21,6 @@
21
21
  <button id="clear"><span class="visually-hidden">Clear</span></button>
22
22
  </div>
23
23
  </div>
24
- `,this.shadowRoot.appendChild(r.content.cloneNode(!0))}connectedCallback(){let t=this,s=this.closest("form"),r=this.shadowRoot.querySelector(".wrapper"),a=t.shadowRoot.querySelector("#search"),p=t.shadowRoot.querySelector("#clear"),n=0,h=t.shadowRoot.querySelector("label");if(h.innerHTML=t.getAttribute("data-label"),t.hasAttribute("placeholder")&&a.setAttribute("placeholder",t.getAttribute("placeholder")),t.setAttribute("data-error","true"),s&&t.hasAttribute("data-is-required")){let e=new MutationObserver(function(o){o.forEach(function(i){const l=i.target;console.log(l),l.classList.contains("was-validated")?r.classList.add("was-validated"):r.classList.remove("was-validated")})});s.classList.contains("was-validated")?r.classList.add("was-validated"):r.classList.remove("was-validated"),e.observe(s,{attributes:!0,attributeFilter:["style","class"]})}function c(e){e.checked==!1?(e.closest("label").removeAttribute("slot"),e.closest("label").removeAttribute("style"),e.closest("label").removeAttribute("data-order")):(n++,e.closest("label").setAttribute("slot","checked"),e.closest("label").setAttribute("style",`--order:${n};`),e.closest("label").setAttribute("data-order",n)),t.querySelector('label[slot="checked"]')?(r.classList.add("filled"),t.removeAttribute("data-error"),a.removeAttribute("placeholder")):(r.classList.remove("filled"),t.setAttribute("data-error","true"),t.hasAttribute("placeholder")&&a.setAttribute("placeholder",t.getAttribute("placeholder")))}Array.from(t.querySelectorAll('label input[type="checkbox"]:checked')).forEach((e,o)=>{c(e)}),a.addEventListener("input",e=>{Array.from(t.querySelectorAll('label:not([slot="checked"])')).forEach((o,i)=>{let d=o.querySelector("input").value,m=o.textContent;d.toLowerCase().includes(a.value.toLowerCase())||m.toLowerCase().includes(a.value.toLowerCase())?o.removeAttribute("slot"):o.setAttribute("slot","notmatched")})}),t.addEventListener("change",e=>{if(e&&e.target instanceof HTMLElement&&e.target.closest('input[type="checkbox"]')){let o=e.target.closest('input[type="checkbox"]');c(o),a.focus()}}),p.addEventListener("click",function(e){Array.from(t.querySelectorAll('label input[type="checkbox"]')).forEach((o,i)=>{o.checked=!1,c(o)}),a.focus()}),t.addEventListener("keydown",function(e){const o=document.activeElement;switch(e.key){case"ArrowUp":if(e.preventDefault(),o.hasAttribute("type")&&o.getAttribute("type")=="checkbox"){let i=t.querySelectorAll('label:not([slot="checked"]):not([slot="checked"])'),l=Array.from(i).indexOf(o.closest("label")),d=Array.from(i)[l-1];d?d.focus():a.focus()}break;case"ArrowDown":if(e.preventDefault(),o==t)t.querySelector('label:not([slot="checked"]):not([slot="checked"])').focus();else if(o.hasAttribute("type")&&o.getAttribute("type")=="checkbox"){let i=o.value,l=t.querySelector(`label:has(input[value="${i}"]) ~ label:not([slot="checked"]):not([slot="checked"])`);l&&l.focus()}break;case"Enter":e.stopPropagation(),e.preventDefault(),o.hasAttribute("type")&&o.getAttribute("type")=="checkbox"&&(o.checked==!1?o.checked=!0:o.checked=!1),c(o),a.focus();break}});function u(){if(n==0)return!1;let e=t.querySelector(`label[data-order="${n}"]`);return e||(e=u(n--)),e}a.addEventListener("keydown",function(e){switch(e.key){case"Enter":t.querySelector(`input[value="${a.value}"]:not(:checked)`)||(a.value=""),a.focus();break;case"Backspace":if(!a.value){let i=u();if(i){let l=i.querySelector("input");l.checked=!1,c(l)}a.focus()}break}}),t.addEventListener("mousedown",e=>{r.setAttribute("data-mousedown","true")}),t.addEventListener("mouseup",e=>{r.removeAttribute("data-mousedown")})}}export{b as default};
24
+ </label>
25
+ `,this.shadowRoot.appendChild(r.content.cloneNode(!0))}connectedCallback(){const t=this,l=this.closest("form"),r=this.shadowRoot.querySelector(".wrapper"),a=t.shadowRoot.querySelector("#search"),h=t.shadowRoot.querySelector("#clear");let i=0;const m=t.shadowRoot.querySelector("label .inner-label");if(m.innerHTML=t.getAttribute("data-label"),t.hasAttribute("placeholder")&&a.setAttribute("placeholder",t.getAttribute("placeholder")),t.setAttribute("data-error","true"),l&&t.hasAttribute("data-is-required")){const e=new MutationObserver(function(o){o.forEach(function(n){const s=n.target;console.log(s),s.classList.contains("was-validated")?r.classList.add("was-validated"):r.classList.remove("was-validated")})});l.classList.contains("was-validated")?r.classList.add("was-validated"):r.classList.remove("was-validated"),e.observe(l,{attributes:!0,attributeFilter:["style","class"]})}function c(e){e.checked==!1?(e.closest("label").removeAttribute("slot"),e.closest("label").removeAttribute("style"),e.closest("label").removeAttribute("data-order")):(i++,e.closest("label").setAttribute("slot","checked"),e.closest("label").setAttribute("style",`--order:${i};`),e.closest("label").setAttribute("data-order",i)),t.querySelector('label[slot="checked"]')?(r.classList.add("filled"),t.removeAttribute("data-error"),a.removeAttribute("placeholder")):(r.classList.remove("filled"),t.setAttribute("data-error","true"),t.hasAttribute("placeholder")&&a.setAttribute("placeholder",t.getAttribute("placeholder")))}Array.from(t.querySelectorAll('label input[type="checkbox"]:checked')).forEach((e,o)=>{c(e)}),a.addEventListener("input",e=>{Array.from(t.querySelectorAll('label:not([slot="checked"])')).forEach((o,n)=>{const d=o.querySelector("input").value,b=o.textContent;d.toLowerCase().includes(a.value.toLowerCase())||b.toLowerCase().includes(a.value.toLowerCase())?o.removeAttribute("slot"):o.setAttribute("slot","notmatched")})});let u;t.addEventListener("focus",e=>{t.classList.add("hover"),clearTimeout(u)}),a.addEventListener("blur",e=>{clearTimeout(u),u=setTimeout(function(){t.classList.remove("hover")},1e3)}),t.addEventListener("change",e=>{if(e&&e.target instanceof HTMLElement&&e.target.closest('input[type="checkbox"]')){const o=e.target.closest('input[type="checkbox"]');c(o),a.focus()}}),h.addEventListener("click",function(e){Array.from(t.querySelectorAll('label input[type="checkbox"]')).forEach((o,n)=>{o.checked=!1,c(o)}),a.focus()}),t.addEventListener("keydown",function(e){const o=document.activeElement;switch(e.key){case"ArrowUp":if(e.preventDefault(),o.hasAttribute("type")&&o.getAttribute("type")=="checkbox"){const n=t.querySelectorAll('label:not([slot="checked"]):not([slot="checked"])'),s=Array.from(n).indexOf(o.closest("label")),d=Array.from(n)[s-1];d?d.focus():a.focus()}break;case"ArrowDown":if(e.preventDefault(),o==t)t.querySelector('label:not([slot="checked"]):not([slot="checked"])').focus();else if(o.hasAttribute("type")&&o.getAttribute("type")=="checkbox"){const n=o.value,s=t.querySelector(`label:has(input[value="${n}"]) ~ label:not([slot="checked"]):not([slot="checked"])`);s&&s.focus()}break;case"Enter":e.stopPropagation(),e.preventDefault(),o.hasAttribute("type")&&o.getAttribute("type")=="checkbox"&&(o.checked==!1?o.checked=!0:o.checked=!1),c(o),a.focus();break}});function p(){if(i==0)return!1;let e=t.querySelector(`label[data-order="${i}"]`);return e||(e=p(i--)),e}a.addEventListener("keydown",function(e){switch(e.key){case"Enter":t.querySelector(`input[value="${a.value}"]:not(:checked)`)||(a.value=""),a.focus();break;case"Backspace":if(!a.value){const n=p();if(n){const s=n.querySelector("input");s.checked=!1,c(s)}a.focus()}break}}),t.addEventListener("mousedown",e=>{r.setAttribute("data-mousedown","true")}),t.addEventListener("mouseup",e=>{r.removeAttribute("data-mousedown")})}}export{f as default};
25
26
  //# sourceMappingURL=multiselect.component.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"multiselect.component.min.js","sources":["multiselect.component.js"],"sourcesContent":["// @ts-nocheck\n// Data layer Web component created\nwindow.dataLayer = window.dataLayer || [];\nwindow.dataLayer.push({\n \"event\": \"customElementRegistered\",\n \"element\": \"mutliselect\"\n});\nclass iamMultiselect extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';\n const coreCSS = document.body.hasAttribute('data-core-css') ? document.body.getAttribute('data-core-css') : `${assetLocation}/css/core.min.css`;\n const loadCSS = `@import \"${assetLocation}/css/components/multiselect.css\";`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n @import \"${coreCSS}\";\n ${loadCSS}\n ${this.hasAttribute('css') ? `@import \"${this.getAttribute('css')}\";` : ``}\n </style>\n <label for=\"search\"> <slot name=\"feedback\"></slot></label>\n <div class=\"outer\">\n <div class=\"wrapper\">\n \n <slot name=\"checked\"></slot>\n <input name=\"search\" id=\"search\" autocomplete=\"off\" required part=\"search-input\"/>\n <span class=\"admin-panel feedback\">This field is required</span>\n <div class=\"admin-panel dropdown\" part=\"dropdown\">\n <slot></slot>\n </div>\n <button id=\"clear\"><span class=\"visually-hidden\">Clear</span></button>\n </div>\n </div>\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n let multiselect = this;\n let form = this.closest('form');\n let wrapper = this.shadowRoot.querySelector('.wrapper');\n let search = multiselect.shadowRoot.querySelector('#search');\n let button = multiselect.shadowRoot.querySelector('#clear');\n let order = 0;\n let label = multiselect.shadowRoot.querySelector('label');\n label.innerHTML = multiselect.getAttribute('data-label');\n if (multiselect.hasAttribute('placeholder')) {\n search.setAttribute('placeholder', multiselect.getAttribute('placeholder'));\n }\n multiselect.setAttribute('data-error', 'true');\n // If in form and is required lets watch for the form being submitted\n if (form && multiselect.hasAttribute('data-is-required')) {\n let observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutationRecord) {\n const targetElement = mutationRecord.target;\n console.log(targetElement);\n if (targetElement.classList.contains(\"was-validated\")) {\n wrapper.classList.add('was-validated');\n }\n else {\n wrapper.classList.remove('was-validated');\n }\n ;\n });\n });\n if (form.classList.contains(\"was-validated\")) {\n wrapper.classList.add('was-validated');\n }\n else {\n wrapper.classList.remove('was-validated');\n }\n ;\n observer.observe(form, {\n attributes: true,\n attributeFilter: ['style', 'class']\n });\n }\n // Set the correct attributes\n function setItem(inputToSet) {\n if (inputToSet.checked == false) {\n inputToSet.closest('label').removeAttribute('slot');\n inputToSet.closest('label').removeAttribute('style');\n inputToSet.closest('label').removeAttribute('data-order');\n }\n else {\n order++;\n inputToSet.closest('label').setAttribute('slot', 'checked');\n inputToSet.closest('label').setAttribute('style', `--order:${order};`);\n inputToSet.closest('label').setAttribute('data-order', order);\n }\n // check for errors\n if (multiselect.querySelector('label[slot=\"checked\"]')) {\n wrapper.classList.add('filled');\n multiselect.removeAttribute('data-error');\n search.removeAttribute('placeholder');\n }\n else {\n wrapper.classList.remove('filled');\n multiselect.setAttribute('data-error', 'true');\n if (multiselect.hasAttribute('placeholder')) {\n search.setAttribute('placeholder', multiselect.getAttribute('placeholder'));\n }\n }\n }\n // Set on load\n Array.from(multiselect.querySelectorAll(`label input[type=\"checkbox\"]:checked`)).forEach((checkbox, index) => {\n setItem(checkbox);\n });\n // Filter list\n search.addEventListener('input', (event) => {\n Array.from(multiselect.querySelectorAll(`label:not([slot=\"checked\"])`)).forEach((label, index) => {\n let checkbox = label.querySelector('input');\n let searchValue = checkbox.value;\n let labelText = label.textContent;\n if (searchValue.toLowerCase().includes(search.value.toLowerCase()) || labelText.toLowerCase().includes(search.value.toLowerCase())) {\n label.removeAttribute('slot');\n }\n else {\n label.setAttribute('slot', 'notmatched');\n }\n });\n });\n // Set items\n multiselect.addEventListener('change', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('input[type=\"checkbox\"]')) {\n let checkbox = event.target.closest('input[type=\"checkbox\"]');\n setItem(checkbox);\n search.focus();\n }\n });\n // Clear all\n button.addEventListener(\"click\", function (event) {\n Array.from(multiselect.querySelectorAll(`label input[type=\"checkbox\"]`)).forEach((checkbox, index) => {\n checkbox.checked = false;\n setItem(checkbox);\n });\n search.focus();\n });\n // Add some keyboard features to keep it accessible\n multiselect.addEventListener(\"keydown\", function (event) {\n const activeElement = document.activeElement;\n switch (event.key) { // change to event.key to key to use the above variable\n case \"ArrowUp\":\n // Up pressed\n event.preventDefault();\n if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == \"checkbox\") {\n let arrCheckboxes = multiselect.querySelectorAll(`label:not([slot=\"checked\"]):not([slot=\"checked\"])`);\n let activeIndex = Array.from(arrCheckboxes).indexOf(activeElement.closest('label'));\n let prevCheckbox = Array.from(arrCheckboxes)[activeIndex - 1];\n if (prevCheckbox)\n prevCheckbox.focus();\n else\n search.focus();\n }\n break;\n case \"ArrowDown\":\n // Down pressed\n event.preventDefault();\n if (activeElement == multiselect) {\n multiselect.querySelector('label:not([slot=\"checked\"]):not([slot=\"checked\"])').focus();\n }\n else if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == \"checkbox\") {\n let activeValue = activeElement.value;\n let nextCheckbox = multiselect.querySelector(`label:has(input[value=\"${activeValue}\"]) ~ label:not([slot=\"checked\"]):not([slot=\"checked\"])`);\n if (nextCheckbox)\n nextCheckbox.focus();\n }\n break;\n case \"Enter\":\n event.stopPropagation();\n event.preventDefault();\n if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == \"checkbox\") {\n if (activeElement.checked == false)\n activeElement.checked = true;\n else\n activeElement.checked = false;\n }\n setItem(activeElement);\n search.focus();\n break;\n }\n });\n function checkLastTag() {\n if (order == 0)\n return false;\n let lastTag = multiselect.querySelector(`label[data-order=\"${order}\"]`);\n if (!lastTag) {\n lastTag = checkLastTag(order--);\n }\n return lastTag;\n }\n search.addEventListener(\"keydown\", function (event) {\n switch (event.key) { // change to event.key to key to use the above variable\n case \"Enter\":\n let match = multiselect.querySelector(`input[value=\"${search.value}\"]:not(:checked)`);\n if (!match)\n search.value = \"\";\n search.focus();\n break;\n case \"Backspace\":\n if (!search.value) {\n let lastTag = checkLastTag(order);\n if (lastTag) {\n let lastTagInput = lastTag.querySelector('input');\n lastTagInput.checked = false;\n setItem(lastTagInput);\n }\n search.focus();\n }\n break;\n }\n });\n // Fix for the inline edit multiselect\n multiselect.addEventListener(\"mousedown\", (event) => {\n wrapper.setAttribute('data-mousedown', 'true');\n });\n multiselect.addEventListener(\"mouseup\", (event) => {\n wrapper.removeAttribute('data-mousedown');\n });\n }\n}\nexport default iamMultiselect;\n"],"names":["iamMultiselect","assetLocation","coreCSS","template","multiselect","form","wrapper","search","button","order","label","observer","mutations","mutationRecord","targetElement","setItem","inputToSet","checkbox","index","event","searchValue","labelText","activeElement","arrCheckboxes","activeIndex","prevCheckbox","activeValue","nextCheckbox","checkLastTag","lastTag","lastTagInput"],"mappings":";;;IAEA,OAAO,UAAY,OAAO,WAAa,GACvC,OAAO,UAAU,KAAK,CAClB,MAAS,0BACT,QAAW,aACf,CAAC,EACD,MAAMA,UAAuB,WAAY,CACrC,aAAc,CACV,QACA,KAAK,aAAa,CAAE,KAAM,MAAQ,CAAA,EAClC,MAAMC,EAAgB,SAAS,KAAK,aAAa,sBAAsB,EAAI,SAAS,KAAK,aAAa,sBAAsB,EAAI,UAC1HC,EAAU,SAAS,KAAK,aAAa,eAAe,EAAI,SAAS,KAAK,aAAa,eAAe,EAAI,GAAGD,qBAEzGE,EAAW,SAAS,cAAc,UAAU,EAClDA,EAAS,UAAY;AAAA;AAAA,eAEdD;AAAA;AAAA;AAAA,MAET,KAAK,aAAa,KAAK,EAAI,YAAY,KAAK,aAAa,KAAK,MAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBpE,KAAK,WAAW,YAAYC,EAAS,QAAQ,UAAU,EAAI,CAAC,CAChE,CACA,mBAAoB,CAChB,IAAIC,EAAc,KACdC,EAAO,KAAK,QAAQ,MAAM,EAC1BC,EAAU,KAAK,WAAW,cAAc,UAAU,EAClDC,EAASH,EAAY,WAAW,cAAc,SAAS,EACvDI,EAASJ,EAAY,WAAW,cAAc,QAAQ,EACtDK,EAAQ,EACRC,EAAQN,EAAY,WAAW,cAAc,OAAO,EAOxD,GANAM,EAAM,UAAYN,EAAY,aAAa,YAAY,EACnDA,EAAY,aAAa,aAAa,GACtCG,EAAO,aAAa,cAAeH,EAAY,aAAa,aAAa,CAAC,EAE9EA,EAAY,aAAa,aAAc,MAAM,EAEzCC,GAAQD,EAAY,aAAa,kBAAkB,EAAG,CACtD,IAAIO,EAAW,IAAI,iBAAiB,SAAUC,EAAW,CACrDA,EAAU,QAAQ,SAAUC,EAAgB,CACxC,MAAMC,EAAgBD,EAAe,OACrC,QAAQ,IAAIC,CAAa,EACrBA,EAAc,UAAU,SAAS,eAAe,EAChDR,EAAQ,UAAU,IAAI,eAAe,EAGrCA,EAAQ,UAAU,OAAO,eAAe,CAGhE,CAAiB,CACjB,CAAa,EACGD,EAAK,UAAU,SAAS,eAAe,EACvCC,EAAQ,UAAU,IAAI,eAAe,EAGrCA,EAAQ,UAAU,OAAO,eAAe,EAG5CK,EAAS,QAAQN,EAAM,CACnB,WAAY,GACZ,gBAAiB,CAAC,QAAS,OAAO,CAClD,CAAa,EAGL,SAASU,EAAQC,EAAY,CACrBA,EAAW,SAAW,IACtBA,EAAW,QAAQ,OAAO,EAAE,gBAAgB,MAAM,EAClDA,EAAW,QAAQ,OAAO,EAAE,gBAAgB,OAAO,EACnDA,EAAW,QAAQ,OAAO,EAAE,gBAAgB,YAAY,IAGxDP,IACAO,EAAW,QAAQ,OAAO,EAAE,aAAa,OAAQ,SAAS,EAC1DA,EAAW,QAAQ,OAAO,EAAE,aAAa,QAAS,WAAWP,IAAQ,EACrEO,EAAW,QAAQ,OAAO,EAAE,aAAa,aAAcP,CAAK,GAG5DL,EAAY,cAAc,uBAAuB,GACjDE,EAAQ,UAAU,IAAI,QAAQ,EAC9BF,EAAY,gBAAgB,YAAY,EACxCG,EAAO,gBAAgB,aAAa,IAGpCD,EAAQ,UAAU,OAAO,QAAQ,EACjCF,EAAY,aAAa,aAAc,MAAM,EACzCA,EAAY,aAAa,aAAa,GACtCG,EAAO,aAAa,cAAeH,EAAY,aAAa,aAAa,CAAC,EAGtF,CAEA,MAAM,KAAKA,EAAY,iBAAiB,sCAAsC,CAAC,EAAE,QAAQ,CAACa,EAAUC,IAAU,CAC1GH,EAAQE,CAAQ,CAC5B,CAAS,EAEDV,EAAO,iBAAiB,QAAUY,GAAU,CACxC,MAAM,KAAKf,EAAY,iBAAiB,6BAA6B,CAAC,EAAE,QAAQ,CAACM,EAAOQ,IAAU,CAE9F,IAAIE,EADWV,EAAM,cAAc,OAAO,EACf,MACvBW,EAAYX,EAAM,YAClBU,EAAY,YAAa,EAAC,SAASb,EAAO,MAAM,YAAa,CAAA,GAAKc,EAAU,YAAa,EAAC,SAASd,EAAO,MAAM,YAAW,CAAE,EAC7HG,EAAM,gBAAgB,MAAM,EAG5BA,EAAM,aAAa,OAAQ,YAAY,CAE3D,CAAa,CACb,CAAS,EAEDN,EAAY,iBAAiB,SAAWe,GAAU,CAC9C,GAAIA,GAASA,EAAM,kBAAkB,aAAeA,EAAM,OAAO,QAAQ,wBAAwB,EAAG,CAChG,IAAIF,EAAWE,EAAM,OAAO,QAAQ,wBAAwB,EAC5DJ,EAAQE,CAAQ,EAChBV,EAAO,MAAK,EAE5B,CAAS,EAEDC,EAAO,iBAAiB,QAAS,SAAUW,EAAO,CAC9C,MAAM,KAAKf,EAAY,iBAAiB,8BAA8B,CAAC,EAAE,QAAQ,CAACa,EAAUC,IAAU,CAClGD,EAAS,QAAU,GACnBF,EAAQE,CAAQ,CAChC,CAAa,EACDV,EAAO,MAAK,CACxB,CAAS,EAEDH,EAAY,iBAAiB,UAAW,SAAUe,EAAO,CACrD,MAAMG,EAAgB,SAAS,cAC/B,OAAQH,EAAM,IAAG,CACb,IAAK,UAGD,GADAA,EAAM,eAAc,EAChBG,EAAc,aAAa,MAAM,GAAKA,EAAc,aAAa,MAAM,GAAK,WAAY,CACxF,IAAIC,EAAgBnB,EAAY,iBAAiB,mDAAmD,EAChGoB,EAAc,MAAM,KAAKD,CAAa,EAAE,QAAQD,EAAc,QAAQ,OAAO,CAAC,EAC9EG,EAAe,MAAM,KAAKF,CAAa,EAAEC,EAAc,CAAC,EACxDC,EACAA,EAAa,MAAK,EAElBlB,EAAO,MAAK,EAEpB,MACJ,IAAK,YAGD,GADAY,EAAM,eAAc,EAChBG,GAAiBlB,EACjBA,EAAY,cAAc,mDAAmD,EAAE,MAAK,UAE/EkB,EAAc,aAAa,MAAM,GAAKA,EAAc,aAAa,MAAM,GAAK,WAAY,CAC7F,IAAII,EAAcJ,EAAc,MAC5BK,EAAevB,EAAY,cAAc,0BAA0BsB,0DAAoE,EACvIC,GACAA,EAAa,MAAK,EAE1B,MACJ,IAAK,QACDR,EAAM,gBAAe,EACrBA,EAAM,eAAc,EAChBG,EAAc,aAAa,MAAM,GAAKA,EAAc,aAAa,MAAM,GAAK,aACxEA,EAAc,SAAW,GACzBA,EAAc,QAAU,GAExBA,EAAc,QAAU,IAEhCP,EAAQO,CAAa,EACrBf,EAAO,MAAK,EACZ,KACR,CACZ,CAAS,EACD,SAASqB,GAAe,CACpB,GAAInB,GAAS,EACT,MAAO,GACX,IAAIoB,EAAUzB,EAAY,cAAc,qBAAqBK,KAAS,EACtE,OAAKoB,IACDA,EAAUD,EAAanB,GAAO,GAE3BoB,CACX,CACAtB,EAAO,iBAAiB,UAAW,SAAUY,EAAO,CAChD,OAAQA,EAAM,IAAG,CACb,IAAK,QACWf,EAAY,cAAc,gBAAgBG,EAAO,uBAAuB,IAEhFA,EAAO,MAAQ,IACnBA,EAAO,MAAK,EACZ,MACJ,IAAK,YACD,GAAI,CAACA,EAAO,MAAO,CACf,IAAIsB,EAAUD,EAAkB,EAChC,GAAIC,EAAS,CACT,IAAIC,EAAeD,EAAQ,cAAc,OAAO,EAChDC,EAAa,QAAU,GACvBf,EAAQe,CAAY,EAExBvB,EAAO,MAAK,EAEhB,KACR,CACZ,CAAS,EAEDH,EAAY,iBAAiB,YAAce,GAAU,CACjDb,EAAQ,aAAa,iBAAkB,MAAM,CACzD,CAAS,EACDF,EAAY,iBAAiB,UAAYe,GAAU,CAC/Cb,EAAQ,gBAAgB,gBAAgB,CACpD,CAAS,CACL,CACJ"}
1
+ {"version":3,"file":"multiselect.component.min.js","sources":["multiselect.component.js"],"sourcesContent":["// @ts-nocheck\n// Data layer Web component created\nwindow.dataLayer = window.dataLayer || [];\nwindow.dataLayer.push({\n event: 'customElementRegistered',\n element: 'mutliselect',\n});\nclass iamMultiselect extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location')\n ? document.body.getAttribute('data-assets-location')\n : '/assets';\n const coreCSS = document.body.hasAttribute('data-core-css')\n ? document.body.getAttribute('data-core-css')\n : `${assetLocation}/css/core.min.css`;\n const loadCSS = `@import \"${assetLocation}/css/components/multiselect.css\";`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n @import \"${coreCSS}\";\n ${loadCSS}\n ${this.hasAttribute('css') ? `@import \"${this.getAttribute('css')}\";` : ``}\n </style>\n <label for=\"search\" class=\"mb-0\"><span class=\"inner-label label\"></span> <slot name=\"feedback\"></slot>\n <div class=\"outer\">\n <div class=\"wrapper\">\n \n <slot name=\"checked\"></slot>\n <input name=\"search\" id=\"search\" autocomplete=\"off\" required part=\"search-input\"/>\n <span class=\"admin-panel feedback\">This field is required</span>\n <div class=\"admin-panel dropdown\" part=\"dropdown\">\n <slot></slot>\n </div>\n <button id=\"clear\"><span class=\"visually-hidden\">Clear</span></button>\n </div>\n </div>\n </label>\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n const multiselect = this;\n const form = this.closest('form');\n const wrapper = this.shadowRoot.querySelector('.wrapper');\n const search = multiselect.shadowRoot.querySelector('#search');\n const button = multiselect.shadowRoot.querySelector('#clear');\n let order = 0;\n const innerLabel = multiselect.shadowRoot.querySelector('label .inner-label');\n innerLabel.innerHTML = multiselect.getAttribute('data-label');\n if (multiselect.hasAttribute('placeholder')) {\n search.setAttribute('placeholder', multiselect.getAttribute('placeholder'));\n }\n multiselect.setAttribute('data-error', 'true');\n // If in form and is required lets watch for the form being submitted\n if (form && multiselect.hasAttribute('data-is-required')) {\n const observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutationRecord) {\n const targetElement = mutationRecord.target;\n console.log(targetElement);\n if (targetElement.classList.contains('was-validated')) {\n wrapper.classList.add('was-validated');\n }\n else {\n wrapper.classList.remove('was-validated');\n }\n });\n });\n if (form.classList.contains('was-validated')) {\n wrapper.classList.add('was-validated');\n }\n else {\n wrapper.classList.remove('was-validated');\n }\n observer.observe(form, {\n attributes: true,\n attributeFilter: ['style', 'class'],\n });\n }\n // Set the correct attributes\n function setItem(inputToSet) {\n if (inputToSet.checked == false) {\n inputToSet.closest('label').removeAttribute('slot');\n inputToSet.closest('label').removeAttribute('style');\n inputToSet.closest('label').removeAttribute('data-order');\n }\n else {\n order++;\n inputToSet.closest('label').setAttribute('slot', 'checked');\n inputToSet.closest('label').setAttribute('style', `--order:${order};`);\n inputToSet.closest('label').setAttribute('data-order', order);\n }\n // check for errors\n if (multiselect.querySelector('label[slot=\"checked\"]')) {\n wrapper.classList.add('filled');\n multiselect.removeAttribute('data-error');\n search.removeAttribute('placeholder');\n }\n else {\n wrapper.classList.remove('filled');\n multiselect.setAttribute('data-error', 'true');\n if (multiselect.hasAttribute('placeholder')) {\n search.setAttribute('placeholder', multiselect.getAttribute('placeholder'));\n }\n }\n }\n // Set on load\n Array.from(multiselect.querySelectorAll(`label input[type=\"checkbox\"]:checked`)).forEach((checkbox, index) => {\n setItem(checkbox);\n });\n // Filter list\n search.addEventListener('input', (event) => {\n Array.from(multiselect.querySelectorAll(`label:not([slot=\"checked\"])`)).forEach((label, index) => {\n const checkbox = label.querySelector('input');\n const searchValue = checkbox.value;\n const labelText = label.textContent;\n if (searchValue.toLowerCase().includes(search.value.toLowerCase()) ||\n labelText.toLowerCase().includes(search.value.toLowerCase())) {\n label.removeAttribute('slot');\n }\n else {\n label.setAttribute('slot', 'notmatched');\n }\n });\n });\n // Add a delayed hover effect for non hover devices\n let hoverTimeout;\n multiselect.addEventListener('focus', (event) => {\n multiselect.classList.add('hover');\n clearTimeout(hoverTimeout);\n });\n search.addEventListener('blur', (event) => {\n clearTimeout(hoverTimeout);\n hoverTimeout = setTimeout(function () {\n multiselect.classList.remove('hover');\n }, 1000);\n });\n // Set items\n multiselect.addEventListener('change', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('input[type=\"checkbox\"]')) {\n const checkbox = event.target.closest('input[type=\"checkbox\"]');\n setItem(checkbox);\n search.focus();\n }\n });\n // Clear all\n button.addEventListener('click', function (event) {\n Array.from(multiselect.querySelectorAll(`label input[type=\"checkbox\"]`)).forEach((checkbox, index) => {\n checkbox.checked = false;\n setItem(checkbox);\n });\n search.focus();\n });\n // Add some keyboard features to keep it accessible\n multiselect.addEventListener('keydown', function (event) {\n const activeElement = document.activeElement;\n switch (event.key // change to event.key to key to use the above variable\n ) {\n case 'ArrowUp':\n // Up pressed\n event.preventDefault();\n if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == 'checkbox') {\n const arrCheckboxes = multiselect.querySelectorAll(`label:not([slot=\"checked\"]):not([slot=\"checked\"])`);\n const activeIndex = Array.from(arrCheckboxes).indexOf(activeElement.closest('label'));\n const prevCheckbox = Array.from(arrCheckboxes)[activeIndex - 1];\n if (prevCheckbox)\n prevCheckbox.focus();\n else\n search.focus();\n }\n break;\n case 'ArrowDown':\n // Down pressed\n event.preventDefault();\n if (activeElement == multiselect) {\n multiselect.querySelector('label:not([slot=\"checked\"]):not([slot=\"checked\"])').focus();\n }\n else if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == 'checkbox') {\n const activeValue = activeElement.value;\n const nextCheckbox = multiselect.querySelector(`label:has(input[value=\"${activeValue}\"]) ~ label:not([slot=\"checked\"]):not([slot=\"checked\"])`);\n if (nextCheckbox)\n nextCheckbox.focus();\n }\n break;\n case 'Enter':\n event.stopPropagation();\n event.preventDefault();\n if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == 'checkbox') {\n if (activeElement.checked == false)\n activeElement.checked = true;\n else\n activeElement.checked = false;\n }\n setItem(activeElement);\n search.focus();\n break;\n }\n });\n function checkLastTag() {\n if (order == 0)\n return false;\n let lastTag = multiselect.querySelector(`label[data-order=\"${order}\"]`);\n if (!lastTag) {\n lastTag = checkLastTag(order--);\n }\n return lastTag;\n }\n search.addEventListener('keydown', function (event) {\n switch (event.key // change to event.key to key to use the above variable\n ) {\n case 'Enter':\n const match = multiselect.querySelector(`input[value=\"${search.value}\"]:not(:checked)`);\n if (!match)\n search.value = '';\n search.focus();\n break;\n case 'Backspace':\n if (!search.value) {\n const lastTag = checkLastTag(order);\n if (lastTag) {\n const lastTagInput = lastTag.querySelector('input');\n lastTagInput.checked = false;\n setItem(lastTagInput);\n }\n search.focus();\n }\n break;\n }\n });\n // Fix for the inline edit multiselect\n multiselect.addEventListener('mousedown', (event) => {\n wrapper.setAttribute('data-mousedown', 'true');\n });\n multiselect.addEventListener('mouseup', (event) => {\n wrapper.removeAttribute('data-mousedown');\n });\n }\n}\nexport default iamMultiselect;\n"],"names":["iamMultiselect","assetLocation","coreCSS","template","multiselect","form","wrapper","search","button","order","innerLabel","observer","mutations","mutationRecord","targetElement","setItem","inputToSet","checkbox","index","event","label","searchValue","labelText","hoverTimeout","activeElement","arrCheckboxes","activeIndex","prevCheckbox","activeValue","nextCheckbox","checkLastTag","lastTag","lastTagInput"],"mappings":"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"}
@@ -2,15 +2,19 @@
2
2
  // Data layer Web component created
3
3
  window.dataLayer = window.dataLayer || [];
4
4
  window.dataLayer.push({
5
- "event": "customElementRegistered",
6
- "element": "nav"
5
+ event: 'customElementRegistered',
6
+ element: 'nav',
7
7
  });
8
8
  class iamNav extends HTMLElement {
9
9
  constructor() {
10
10
  super();
11
11
  const shadowRoot = this.attachShadow({ mode: 'open' });
12
- const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';
13
- const coreCSS = document.body.hasAttribute('data-core-css') ? document.body.getAttribute('data-core-css') : `${assetLocation}/css/core.min.css`;
12
+ const assetLocation = document.body.hasAttribute('data-assets-location')
13
+ ? document.body.getAttribute('data-assets-location')
14
+ : '/assets';
15
+ const coreCSS = document.body.hasAttribute('data-core-css')
16
+ ? document.body.getAttribute('data-core-css')
17
+ : `${assetLocation}/css/core.min.css`;
14
18
  const loadCSS = `@import "${assetLocation}/css/components/nav.css";`;
15
19
  const loadExtraCSS = `@import "${assetLocation}/css/components/nav.global.css";`;
16
20
  const template = document.createElement('template');
@@ -55,17 +59,19 @@ class iamNav extends HTMLElement {
55
59
  connectedCallback() {
56
60
  // Load external CSS if needed
57
61
  if (this.hasAttribute('data-css'))
58
- this.shadowRoot.querySelector('.doc-styles').insertAdjacentHTML('beforeend', `@import "${this.getAttribute('data-css')}";`);
62
+ this.shadowRoot
63
+ .querySelector('.doc-styles')
64
+ .insertAdjacentHTML('beforeend', `@import "${this.getAttribute('data-css')}";`);
59
65
  const menuButton = this.shadowRoot.querySelector('.btn-menu');
60
66
  const menu = this.shadowRoot.querySelector('.menu');
61
67
  const iamNav = this;
62
68
  const backdrop = this.shadowRoot.querySelector('.backdrop');
63
69
  const buttonsHolder = this.shadowRoot.querySelector('.buttons-holder');
64
- // Check the content
70
+ // Check the content
65
71
  this.querySelectorAll(':scope > *').forEach(function (element) {
66
- let tagname = element.tagName;
72
+ const tagname = element.tagName;
67
73
  switch (tagname) {
68
- case "BUTTON":
74
+ case 'BUTTON':
69
75
  if (!element.hasAttribute('slot')) {
70
76
  element.setAttribute('slot', 'actions');
71
77
  menu.classList.add('has-actions');
@@ -73,7 +79,9 @@ class iamNav extends HTMLElement {
73
79
  break;
74
80
  }
75
81
  // Create menu button
76
- if (element.classList.contains('nav--menu') && element.hasAttribute('data-title') && element.hasAttribute('data-icon')) {
82
+ if (element.classList.contains('nav--menu') &&
83
+ element.hasAttribute('data-title') &&
84
+ element.hasAttribute('data-icon')) {
77
85
  const title = element.getAttribute('data-title');
78
86
  const iconClass = element.getAttribute('data-icon');
79
87
  // Create the menu button that sits seperately to the menu
@@ -103,14 +111,16 @@ class iamNav extends HTMLElement {
103
111
  element.classList.toggle('open');
104
112
  mdButton.classList.toggle('active');
105
113
  // Close desktop menus
106
- let openMenu = iamNav.querySelector(':scope > details[open]');
114
+ const openMenu = iamNav.querySelector(':scope > details[open]');
107
115
  if (openMenu)
108
116
  openMenu.removeAttribute('open');
109
117
  // Close the main menu and fix states on the button, iamNav component and backdrop
110
118
  if (element.classList.contains('open')) {
111
119
  menu.classList.remove('open');
112
120
  menuButton.removeAttribute('aria-expanded');
113
- setTimeout(function () { menu.classList.add('closed'); }, 1000); // Delay until its close so the animation is broken
121
+ setTimeout(function () {
122
+ menu.classList.add('closed');
123
+ }, 1000); // Delay until its close so the animation is broken
114
124
  iamNav.classList.add('open');
115
125
  backdrop.classList.add('show');
116
126
  element.classList.remove('closed');
@@ -118,7 +128,9 @@ class iamNav extends HTMLElement {
118
128
  else {
119
129
  iamNav.classList.remove('open');
120
130
  backdrop.classList.remove('show');
121
- setTimeout(function () { element.classList.add('closed'); }, 1000);
131
+ setTimeout(function () {
132
+ element.classList.add('closed');
133
+ }, 1000);
122
134
  }
123
135
  // Close any open menus
124
136
  iamNav.querySelectorAll('.nav--menu.open').forEach(function (openmenu) {
@@ -126,10 +138,12 @@ class iamNav extends HTMLElement {
126
138
  openmenu.classList.remove('open');
127
139
  }
128
140
  });
129
- iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu[aria-expanded]').forEach(function (selectedButton) {
141
+ iamNav.shadowRoot
142
+ .querySelectorAll('.buttons-holder .btn-menu[aria-expanded]')
143
+ .forEach(function (selectedButton) {
130
144
  if (selectedButton != button) {
131
145
  selectedButton.removeAttribute('aria-expanded');
132
- let innerBtn = selectedButton.querySelector('.btn-primary');
146
+ const innerBtn = selectedButton.querySelector('.btn-primary');
133
147
  innerBtn.classList.remove('active');
134
148
  }
135
149
  });
@@ -144,7 +158,7 @@ class iamNav extends HTMLElement {
144
158
  menu.classList.add('has-secondary');
145
159
  }
146
160
  // Create a scroll width variable to help with the sizing of the menu with in the CSS
147
- document.documentElement.style.setProperty('--scrollbar-width', (window.innerWidth - document.documentElement.offsetWidth) + 'px');
161
+ document.documentElement.style.setProperty('--scrollbar-width', window.innerWidth - document.documentElement.offsetWidth + 'px');
148
162
  // Open and close the menu
149
163
  menuButton.addEventListener('click', function (e) {
150
164
  e.preventDefault();
@@ -153,11 +167,13 @@ class iamNav extends HTMLElement {
153
167
  // Close any other menus
154
168
  iamNav.querySelectorAll('.nav--menu.open').forEach(function (element) {
155
169
  element.classList.remove('open');
156
- setTimeout(function () { element.classList.add('closed'); }, 1000);
170
+ setTimeout(function () {
171
+ element.classList.add('closed');
172
+ }, 1000);
157
173
  });
158
174
  iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu[aria-expanded]').forEach(function (element) {
159
175
  element.removeAttribute('aria-expanded');
160
- let innerBtn = element.querySelector('.btn-primary');
176
+ const innerBtn = element.querySelector('.btn-primary');
161
177
  innerBtn.classList.remove('active');
162
178
  });
163
179
  if (menu.classList.contains('open')) {
@@ -166,18 +182,20 @@ class iamNav extends HTMLElement {
166
182
  }
167
183
  else {
168
184
  iamNav.classList.remove('open');
169
- setTimeout(function () { menu.classList.add('closed'); }, 1000);
185
+ setTimeout(function () {
186
+ menu.classList.add('closed');
187
+ }, 1000);
170
188
  }
171
189
  }, false);
172
190
  // Allow outside JS to close the menu
173
- this.addEventListener("request-close", (event) => {
191
+ this.addEventListener('request-close', (event) => {
174
192
  menuButton.removeAttribute('aria-expanded');
175
193
  menu.classList.remove('open');
176
194
  iamNav.classList.remove('open');
177
195
  });
178
196
  // Close the menu on the click of the backdrop on desktop
179
- backdrop.addEventListener("click", (event) => {
180
- let openMenu = this.querySelector('details[open] summary');
197
+ backdrop.addEventListener('click', (event) => {
198
+ const openMenu = this.querySelector('details[open] summary');
181
199
  if (openMenu)
182
200
  openMenu.click();
183
201
  iamNav.classList.toggle('open');
@@ -186,18 +204,18 @@ class iamNav extends HTMLElement {
186
204
  });
187
205
  iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu[aria-expanded]').forEach(function (element) {
188
206
  element.removeAttribute('aria-expanded');
189
- let innerBtn = element.querySelector('.btn-primary');
207
+ const innerBtn = element.querySelector('.btn-primary');
190
208
  innerBtn.classList.remove('active');
191
209
  });
192
210
  backdrop.classList.remove('show');
193
211
  });
194
212
  // On desktop close other menu's (details) when one is clicked
195
- this.addEventListener("click", (event) => {
213
+ this.addEventListener('click', (event) => {
196
214
  if (event && event.target instanceof HTMLElement && event.target.closest('summary')) {
197
215
  if (window.innerWidth > 992 && !event.target.closest('.nav--menu')) {
198
- let summary = event.target.closest('summary');
199
- let details = summary.closest('details');
200
- let wrapper = details.parentNode;
216
+ const summary = event.target.closest('summary');
217
+ const details = summary.closest('details');
218
+ const wrapper = details.parentNode;
201
219
  if (details.hasAttribute('open'))
202
220
  details.removeAttribute('open');
203
221
  else
@@ -205,11 +223,13 @@ class iamNav extends HTMLElement {
205
223
  // Close any bespoke menus
206
224
  iamNav.querySelectorAll('.nav--menu.open').forEach(function (element) {
207
225
  element.classList.remove('open');
208
- setTimeout(function () { menu.classList.add('closed'); }, 1000);
226
+ setTimeout(function () {
227
+ menu.classList.add('closed');
228
+ }, 1000);
209
229
  });
210
230
  iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu[aria-expanded]').forEach(function (element) {
211
231
  element.removeAttribute('aria-expanded');
212
- let innerBtn = element.querySelector('.btn-primary');
232
+ const innerBtn = element.querySelector('.btn-primary');
213
233
  innerBtn.classList.remove('active');
214
234
  });
215
235
  // Close any other dropdowns on the same level
@@ -228,18 +248,17 @@ class iamNav extends HTMLElement {
228
248
  event.preventDefault();
229
249
  }
230
250
  }
231
- ;
232
251
  });
233
252
  // Mega menu title
234
253
  this.querySelectorAll('details').forEach((detailsElement) => {
235
- let summary = detailsElement.querySelector('summary');
236
- let containerDiv = detailsElement.querySelector(':Scope > div');
254
+ const summary = detailsElement.querySelector('summary');
255
+ const containerDiv = detailsElement.querySelector(':Scope > div');
237
256
  containerDiv.setAttribute('data-title', summary.textContent);
238
257
  });
239
- // Search
258
+ // Search
240
259
  if (this.querySelector('[slot="search"]')) {
241
260
  menu.classList.add('has-search');
242
- let searchWrapper = this.shadowRoot.querySelector('#search-wrapper');
261
+ const searchWrapper = this.shadowRoot.querySelector('#search-wrapper');
243
262
  searchWrapper.classList.remove('d-none');
244
263
  searchWrapper.insertAdjacentHTML('afterbegin', `<button class="btn btn-secondary btn-compact fa-search me-0 mb-0" id="search-button" aria-controls="search-dialog">Open Search field</button>
245
264
  <dialog id="search-dialog">
@@ -254,20 +273,20 @@ class iamNav extends HTMLElement {
254
273
  </div>
255
274
  </div>
256
275
  </dialog>`);
257
- let searchButton = this.shadowRoot.querySelector('#search-button');
258
- let searchClose = this.shadowRoot.querySelector('#search-close');
259
- let searchDialog = this.shadowRoot.querySelector('#search-dialog');
276
+ const searchButton = this.shadowRoot.querySelector('#search-button');
277
+ const searchClose = this.shadowRoot.querySelector('#search-close');
278
+ const searchDialog = this.shadowRoot.querySelector('#search-dialog');
260
279
  if (this.hasAttribute('data-search-open')) {
261
280
  searchDialog.setAttribute('open', 'open');
262
281
  this.classList.add('search-open');
263
282
  searchButton.setAttribute('aria-expanded', true);
264
283
  }
265
- searchButton.addEventListener("click", (event) => {
284
+ searchButton.addEventListener('click', (event) => {
266
285
  searchDialog.setAttribute('open', 'open');
267
286
  this.classList.add('search-open');
268
287
  searchButton.setAttribute('aria-expanded', true);
269
288
  });
270
- searchClose.addEventListener("click", (event) => {
289
+ searchClose.addEventListener('click', (event) => {
271
290
  searchDialog.removeAttribute('open');
272
291
  this.classList.remove('search-open');
273
292
  searchButton.removeAttribute('aria-expanded');