@iamproperty/components 7.7.1--beta4 → 7.7.1--beta6

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 (712) hide show
  1. package/README.md +4 -4
  2. package/assets/bootstrap/README.md +247 -247
  3. package/assets/bootstrap/dist/css/bootstrap-grid.css +4124 -0
  4. package/assets/bootstrap/dist/css/bootstrap-grid.css.map +1 -0
  5. package/assets/bootstrap/dist/css/bootstrap-grid.min.css +7 -0
  6. package/assets/bootstrap/dist/css/bootstrap-grid.min.css.map +1 -0
  7. package/assets/bootstrap/dist/css/bootstrap-grid.rtl.css +4123 -0
  8. package/assets/bootstrap/dist/css/bootstrap-grid.rtl.css.map +1 -0
  9. package/assets/bootstrap/dist/css/bootstrap-grid.rtl.min.css +7 -0
  10. package/assets/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map +1 -0
  11. package/assets/bootstrap/dist/css/bootstrap-reboot.css +488 -0
  12. package/assets/bootstrap/dist/css/bootstrap-reboot.css.map +1 -0
  13. package/assets/bootstrap/dist/css/bootstrap-reboot.min.css +7 -0
  14. package/assets/bootstrap/dist/css/bootstrap-reboot.min.css.map +1 -0
  15. package/assets/bootstrap/dist/css/bootstrap-reboot.rtl.css +485 -0
  16. package/assets/bootstrap/dist/css/bootstrap-reboot.rtl.css.map +1 -0
  17. package/assets/bootstrap/dist/css/bootstrap-reboot.rtl.min.css +7 -0
  18. package/assets/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map +1 -0
  19. package/assets/bootstrap/dist/css/bootstrap-utilities.css +4197 -0
  20. package/assets/bootstrap/dist/css/bootstrap-utilities.css.map +1 -0
  21. package/assets/bootstrap/dist/css/bootstrap-utilities.min.css +7 -0
  22. package/assets/bootstrap/dist/css/bootstrap-utilities.min.css.map +1 -0
  23. package/assets/bootstrap/dist/css/bootstrap-utilities.rtl.css +4188 -0
  24. package/assets/bootstrap/dist/css/bootstrap-utilities.rtl.css.map +1 -0
  25. package/assets/bootstrap/dist/css/bootstrap-utilities.rtl.min.css +7 -0
  26. package/assets/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map +1 -0
  27. package/assets/bootstrap/dist/css/bootstrap.css +10907 -0
  28. package/assets/bootstrap/dist/css/bootstrap.css.map +1 -0
  29. package/assets/bootstrap/dist/css/bootstrap.min.css +7 -0
  30. package/assets/bootstrap/dist/css/bootstrap.min.css.map +1 -0
  31. package/assets/bootstrap/dist/css/bootstrap.rtl.css +10867 -0
  32. package/assets/bootstrap/dist/css/bootstrap.rtl.css.map +1 -0
  33. package/assets/bootstrap/dist/css/bootstrap.rtl.min.css +7 -0
  34. package/assets/bootstrap/dist/css/bootstrap.rtl.min.css.map +1 -0
  35. package/assets/bootstrap/dist/js/bootstrap.bundle.js +7066 -0
  36. package/assets/bootstrap/dist/js/bootstrap.bundle.js.map +1 -0
  37. package/assets/bootstrap/dist/js/bootstrap.bundle.min.js +7 -0
  38. package/assets/bootstrap/dist/js/bootstrap.bundle.min.js.map +1 -0
  39. package/assets/bootstrap/dist/js/bootstrap.esm.js +5204 -0
  40. package/assets/bootstrap/dist/js/bootstrap.esm.js.map +1 -0
  41. package/assets/bootstrap/dist/js/bootstrap.esm.min.js +7 -0
  42. package/assets/bootstrap/dist/js/bootstrap.esm.min.js.map +1 -0
  43. package/assets/bootstrap/dist/js/bootstrap.js +5251 -0
  44. package/assets/bootstrap/dist/js/bootstrap.js.map +1 -0
  45. package/assets/bootstrap/dist/js/bootstrap.min.js +7 -0
  46. package/assets/bootstrap/dist/js/bootstrap.min.js.map +1 -0
  47. package/assets/bootstrap/js/dist/alert.js +100 -0
  48. package/assets/bootstrap/js/dist/alert.js.map +1 -0
  49. package/assets/bootstrap/js/dist/base-component.js +100 -0
  50. package/assets/bootstrap/js/dist/base-component.js.map +1 -0
  51. package/assets/bootstrap/js/dist/button.js +82 -0
  52. package/assets/bootstrap/js/dist/button.js.map +1 -0
  53. package/assets/bootstrap/js/dist/carousel.js +471 -0
  54. package/assets/bootstrap/js/dist/carousel.js.map +1 -0
  55. package/assets/bootstrap/js/dist/collapse.js +311 -0
  56. package/assets/bootstrap/js/dist/collapse.js.map +1 -0
  57. package/assets/bootstrap/js/dist/dom/data.js +67 -0
  58. package/assets/bootstrap/js/dist/dom/data.js.map +1 -0
  59. package/assets/bootstrap/js/dist/dom/event-handler.js +284 -0
  60. package/assets/bootstrap/js/dist/dom/event-handler.js.map +1 -0
  61. package/assets/bootstrap/js/dist/dom/manipulator.js +85 -0
  62. package/assets/bootstrap/js/dist/dom/manipulator.js.map +1 -0
  63. package/assets/bootstrap/js/dist/dom/selector-engine.js +86 -0
  64. package/assets/bootstrap/js/dist/dom/selector-engine.js.map +1 -0
  65. package/assets/bootstrap/js/dist/dropdown.js +471 -0
  66. package/assets/bootstrap/js/dist/dropdown.js.map +1 -0
  67. package/assets/bootstrap/js/dist/modal.js +397 -0
  68. package/assets/bootstrap/js/dist/modal.js.map +1 -0
  69. package/assets/bootstrap/js/dist/offcanvas.js +298 -0
  70. package/assets/bootstrap/js/dist/offcanvas.js.map +1 -0
  71. package/assets/bootstrap/js/dist/popover.js +102 -0
  72. package/assets/bootstrap/js/dist/popover.js.map +1 -0
  73. package/assets/bootstrap/js/dist/scrollspy.js +308 -0
  74. package/assets/bootstrap/js/dist/scrollspy.js.map +1 -0
  75. package/assets/bootstrap/js/dist/tab.js +334 -0
  76. package/assets/bootstrap/js/dist/tab.js.map +1 -0
  77. package/assets/bootstrap/js/dist/toast.js +237 -0
  78. package/assets/bootstrap/js/dist/toast.js.map +1 -0
  79. package/assets/bootstrap/js/dist/tooltip.js +663 -0
  80. package/assets/bootstrap/js/dist/tooltip.js.map +1 -0
  81. package/assets/bootstrap/js/dist/util/backdrop.js +166 -0
  82. package/assets/bootstrap/js/dist/util/backdrop.js.map +1 -0
  83. package/assets/bootstrap/js/dist/util/component-functions.js +47 -0
  84. package/assets/bootstrap/js/dist/util/component-functions.js.map +1 -0
  85. package/assets/bootstrap/js/dist/util/config.js +80 -0
  86. package/assets/bootstrap/js/dist/util/config.js.map +1 -0
  87. package/assets/bootstrap/js/dist/util/focustrap.js +130 -0
  88. package/assets/bootstrap/js/dist/util/focustrap.js.map +1 -0
  89. package/assets/bootstrap/js/dist/util/index.js +351 -0
  90. package/assets/bootstrap/js/dist/util/index.js.map +1 -0
  91. package/assets/bootstrap/js/dist/util/sanitizer.js +123 -0
  92. package/assets/bootstrap/js/dist/util/sanitizer.js.map +1 -0
  93. package/assets/bootstrap/js/dist/util/scrollbar.js +139 -0
  94. package/assets/bootstrap/js/dist/util/scrollbar.js.map +1 -0
  95. package/assets/bootstrap/js/dist/util/swipe.js +156 -0
  96. package/assets/bootstrap/js/dist/util/swipe.js.map +1 -0
  97. package/assets/bootstrap/js/dist/util/template-factory.js +178 -0
  98. package/assets/bootstrap/js/dist/util/template-factory.js.map +1 -0
  99. package/assets/bootstrap/js/index.esm.js +19 -19
  100. package/assets/bootstrap/js/index.umd.js +34 -34
  101. package/assets/bootstrap/js/src/alert.js +87 -87
  102. package/assets/bootstrap/js/src/base-component.js +85 -85
  103. package/assets/bootstrap/js/src/button.js +72 -72
  104. package/assets/bootstrap/js/src/carousel.js +475 -475
  105. package/assets/bootstrap/js/src/collapse.js +302 -302
  106. package/assets/bootstrap/js/src/dom/data.js +55 -55
  107. package/assets/bootstrap/js/src/dom/event-handler.js +320 -320
  108. package/assets/bootstrap/js/src/dom/manipulator.js +71 -71
  109. package/assets/bootstrap/js/src/dom/selector-engine.js +83 -83
  110. package/assets/bootstrap/js/src/dropdown.js +445 -445
  111. package/assets/bootstrap/js/src/modal.js +373 -373
  112. package/assets/bootstrap/js/src/offcanvas.js +283 -283
  113. package/assets/bootstrap/js/src/popover.js +97 -97
  114. package/assets/bootstrap/js/src/scrollspy.js +290 -290
  115. package/assets/bootstrap/js/src/tab.js +307 -307
  116. package/assets/bootstrap/js/src/toast.js +220 -220
  117. package/assets/bootstrap/js/src/tooltip.js +651 -651
  118. package/assets/bootstrap/js/src/util/backdrop.js +149 -149
  119. package/assets/bootstrap/js/src/util/component-functions.js +34 -34
  120. package/assets/bootstrap/js/src/util/config.js +66 -66
  121. package/assets/bootstrap/js/src/util/focustrap.js +115 -115
  122. package/assets/bootstrap/js/src/util/index.js +336 -336
  123. package/assets/bootstrap/js/src/util/sanitizer.js +118 -118
  124. package/assets/bootstrap/js/src/util/scrollbar.js +114 -114
  125. package/assets/bootstrap/js/src/util/swipe.js +146 -146
  126. package/assets/bootstrap/js/src/util/template-factory.js +160 -160
  127. package/assets/bootstrap/package.json +180 -180
  128. package/assets/bootstrap/scss/_accordion.scss +146 -146
  129. package/assets/bootstrap/scss/_button-group.scss +142 -142
  130. package/assets/bootstrap/scss/_buttons.scss +186 -186
  131. package/assets/bootstrap/scss/_carousel.scss +229 -229
  132. package/assets/bootstrap/scss/_dropdown.scss +248 -248
  133. package/assets/bootstrap/scss/_functions.scss +302 -302
  134. package/assets/bootstrap/scss/_list-group.scss +191 -191
  135. package/assets/bootstrap/scss/_modal.scss +237 -237
  136. package/assets/bootstrap/scss/_nav.scss +172 -172
  137. package/assets/bootstrap/scss/_navbar.scss +276 -276
  138. package/assets/bootstrap/scss/_offcanvas.scss +143 -143
  139. package/assets/bootstrap/scss/_pagination.scss +109 -109
  140. package/assets/bootstrap/scss/_popover.scss +196 -196
  141. package/assets/bootstrap/scss/_toasts.scss +70 -70
  142. package/assets/bootstrap/scss/_variables-dark.scss +87 -87
  143. package/assets/bootstrap/scss/_variables.scss +1633 -1633
  144. package/assets/bootstrap/scss/bootstrap-utilities.scss +15 -15
  145. package/assets/bootstrap/scss/forms/_floating-labels.scss +74 -74
  146. package/assets/bootstrap/scss/forms/_input-group.scss +129 -129
  147. package/assets/bootstrap/scss/helpers/_focus-ring.scss +5 -5
  148. package/assets/bootstrap/scss/helpers/_icon-link.scss +25 -25
  149. package/assets/bootstrap/scss/mixins/_banner.scss +9 -9
  150. package/assets/bootstrap/scss/mixins/_color-mode.scss +21 -21
  151. package/assets/bootstrap/scss/mixins/_forms.scss +152 -152
  152. package/assets/bootstrap/scss/mixins/_table-variants.scss +24 -24
  153. package/assets/bootstrap/scss/mixins/_utilities.scss +97 -97
  154. package/assets/css/components/actionbar.component.css +1 -1
  155. package/assets/css/components/actionbar.component.css.map +1 -1
  156. package/assets/css/components/address-lookup.component.css +1 -1
  157. package/assets/css/components/address-lookup.component.css.map +1 -1
  158. package/assets/css/components/applied-filters.css +1 -1
  159. package/assets/css/components/applied-filters.css.map +1 -1
  160. package/assets/css/components/barchart.component.css +1 -1
  161. package/assets/css/components/barchart.component.css.map +1 -1
  162. package/assets/css/components/calendar.component.css +1 -1
  163. package/assets/css/components/calendar.component.css.map +1 -1
  164. package/assets/css/components/card.component.css +1 -1
  165. package/assets/css/components/card.component.css.map +1 -1
  166. package/assets/css/components/card.module.css +1 -1
  167. package/assets/css/components/card.module.css.map +1 -1
  168. package/assets/css/components/carousel.component.css +1 -1
  169. package/assets/css/components/carousel.component.css.map +1 -1
  170. package/assets/css/components/charts.css +1 -1
  171. package/assets/css/components/charts.css.map +1 -1
  172. package/assets/css/components/collapsible-side.css +1 -1
  173. package/assets/css/components/collapsible-side.css.map +1 -1
  174. package/assets/css/components/config.component.css +1 -1
  175. package/assets/css/components/config.component.css.map +1 -1
  176. package/assets/css/components/content.component.css +1 -1
  177. package/assets/css/components/content.component.css.map +1 -1
  178. package/assets/css/components/doughnutchart.component.css +1 -1
  179. package/assets/css/components/doughnutchart.component.css.map +1 -1
  180. package/assets/css/components/fileupload.css +1 -1
  181. package/assets/css/components/fileupload.css.map +1 -1
  182. package/assets/css/components/filter-card.component.css +1 -1
  183. package/assets/css/components/filter-card.component.css.map +1 -1
  184. package/assets/css/components/header.css +1 -1
  185. package/assets/css/components/header.css.map +1 -1
  186. package/assets/css/components/inline-edit.css +1 -1
  187. package/assets/css/components/inline-edit.css.map +1 -1
  188. package/assets/css/components/input.component.css.map +1 -1
  189. package/assets/css/components/modal.component.css +1 -1
  190. package/assets/css/components/modal.component.css.map +1 -1
  191. package/assets/css/components/multi-step-modal.component.css +1 -1
  192. package/assets/css/components/multi-step-modal.component.css.map +1 -1
  193. package/assets/css/components/multiselect.css +1 -1
  194. package/assets/css/components/multiselect.css.map +1 -1
  195. package/assets/css/components/nav.component.css +1 -1
  196. package/assets/css/components/nav.component.css.map +1 -1
  197. package/assets/css/components/pagination.css +1 -1
  198. package/assets/css/components/pagination.css.map +1 -1
  199. package/assets/css/components/record-card.component.css +1 -1
  200. package/assets/css/components/record-card.component.css.map +1 -1
  201. package/assets/css/components/slider.css +1 -1
  202. package/assets/css/components/slider.css.map +1 -1
  203. package/assets/css/components/split-button.component.css +1 -1
  204. package/assets/css/components/split-button.component.css.map +1 -1
  205. package/assets/css/components/tabs.component.css +1 -1
  206. package/assets/css/components/tabs.component.css.map +1 -1
  207. package/assets/css/components/tabs.config.css +1 -1
  208. package/assets/css/components/tabs.config.css.map +1 -1
  209. package/assets/css/components/tag.component.css +1 -1
  210. package/assets/css/components/tag.component.css.map +1 -1
  211. package/assets/css/components/video-card.component.css +1 -1
  212. package/assets/css/components/video-card.component.css.map +1 -1
  213. package/assets/css/components/video-modal.component.css +1 -1
  214. package/assets/css/components/video-modal.component.css.map +1 -1
  215. package/assets/css/components/video.component.css +1 -0
  216. package/assets/css/components/video.component.css.map +1 -0
  217. package/assets/css/core.min.css +1 -1
  218. package/assets/css/core.min.css.map +1 -1
  219. package/assets/css/elements/badge-tag.css +1 -1
  220. package/assets/css/elements/badge-tag.css.map +1 -1
  221. package/assets/css/elements/buttons--action.css +1 -1
  222. package/assets/css/elements/buttons--action.css.map +1 -1
  223. package/assets/css/elements/buttons--global.css +1 -1
  224. package/assets/css/elements/buttons--global.css.map +1 -1
  225. package/assets/css/elements/buttons--secondary.css +1 -1
  226. package/assets/css/elements/buttons--secondary.css.map +1 -1
  227. package/assets/css/elements/buttons--special.css +1 -1
  228. package/assets/css/elements/buttons--special.css.map +1 -1
  229. package/assets/css/elements/buttons--tertiary.css +1 -1
  230. package/assets/css/elements/buttons--tertiary.css.map +1 -1
  231. package/assets/css/elements/buttons.css +1 -1
  232. package/assets/css/elements/buttons.css.map +1 -1
  233. package/assets/css/elements/container.css +1 -1
  234. package/assets/css/elements/container.css.map +1 -1
  235. package/assets/css/elements/details.css +1 -1
  236. package/assets/css/elements/details.css.map +1 -1
  237. package/assets/css/elements/dialog.css.map +1 -1
  238. package/assets/css/elements/dropdown.css +1 -1
  239. package/assets/css/elements/dropdown.css.map +1 -1
  240. package/assets/css/elements/feature.css +1 -1
  241. package/assets/css/elements/feature.css.map +1 -1
  242. package/assets/css/elements/forms.css +1 -1
  243. package/assets/css/elements/forms.css.map +1 -1
  244. package/assets/css/elements/label.css +1 -1
  245. package/assets/css/elements/label.css.map +1 -1
  246. package/assets/css/elements/links--collapsible-side.css +1 -0
  247. package/assets/css/elements/links--collapsible-side.css.map +1 -0
  248. package/assets/css/elements/links--global.css +1 -0
  249. package/assets/css/elements/links--global.css.map +1 -0
  250. package/assets/css/elements/links--video.css +1 -0
  251. package/assets/css/elements/links--video.css.map +1 -0
  252. package/assets/css/elements/links.css +1 -1
  253. package/assets/css/elements/links.css.map +1 -1
  254. package/assets/css/elements/modal.css.map +1 -1
  255. package/assets/css/elements/progress.css.map +1 -1
  256. package/assets/css/elements/textarea.css +1 -1
  257. package/assets/css/elements/textarea.css.map +1 -1
  258. package/assets/css/elements/toggle-button.css +1 -1
  259. package/assets/css/elements/toggle-button.css.map +1 -1
  260. package/assets/css/elements/tooltips.css +1 -1
  261. package/assets/css/elements/tooltips.css.map +1 -1
  262. package/assets/css/style.min.css +1 -1
  263. package/assets/css/style.min.css.map +1 -1
  264. package/assets/favicons/README.md +20 -20
  265. package/assets/favicons/browserconfig.xml +9 -9
  266. package/assets/favicons/manifest.json +31 -31
  267. package/assets/favicons/safari-pinned-tab.svg +35 -35
  268. package/assets/favicons/site.webmanifest +20 -20
  269. package/assets/js/components/accordion/accordion.component.js +15 -15
  270. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  271. package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
  272. package/assets/js/components/actionbar/actionbar.component.js +68 -68
  273. package/assets/js/components/actionbar/actionbar.component.min.js +2 -2
  274. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  275. package/assets/js/components/address-lookup/address-lookup.component.js +60 -60
  276. package/assets/js/components/address-lookup/address-lookup.component.min.js +4 -4
  277. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  278. package/assets/js/components/advanced-select/advanced-select.component.js +20 -20
  279. package/assets/js/components/advanced-select/advanced-select.component.min.js +1 -1
  280. package/assets/js/components/advanced-select/advanced-select.component.min.js.map +1 -1
  281. package/assets/js/components/applied-filters/applied-filters.component.js +7 -7
  282. package/assets/js/components/applied-filters/applied-filters.component.min.js +2 -2
  283. package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
  284. package/assets/js/components/barchart/barchart.component.js +2 -2
  285. package/assets/js/components/barchart/barchart.component.min.js +3 -3
  286. package/assets/js/components/barchart/barchart.component.min.js.map +1 -1
  287. package/assets/js/components/bento-grid/bento-grid.component.js +9 -9
  288. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  289. package/assets/js/components/bento-grid/bento-grid.component.min.js.map +1 -1
  290. package/assets/js/components/calendar/calendar.component.js +2 -2
  291. package/assets/js/components/calendar/calendar.component.min.js +2 -2
  292. package/assets/js/components/calendar/calendar.component.min.js.map +1 -1
  293. package/assets/js/components/card/card.component.js +3 -3
  294. package/assets/js/components/card/card.component.min.js +2 -2
  295. package/assets/js/components/card/card.component.min.js.map +1 -1
  296. package/assets/js/components/carousel/carousel.component.js +2 -2
  297. package/assets/js/components/carousel/carousel.component.min.js +4 -4
  298. package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
  299. package/assets/js/components/chart/chart.component.js +1 -1
  300. package/assets/js/components/collapsible-side/collapsible-side.component.js +20 -20
  301. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +4 -4
  302. package/assets/js/components/collapsible-side/collapsible-side.component.min.js.map +1 -1
  303. package/assets/js/components/config/config.component.js +54 -54
  304. package/assets/js/components/config/config.component.min.js +2 -2
  305. package/assets/js/components/config/config.component.min.js.map +1 -1
  306. package/assets/js/components/content/content.component.js +9 -9
  307. package/assets/js/components/content/content.component.min.js +4 -4
  308. package/assets/js/components/content/content.component.min.js.map +1 -1
  309. package/assets/js/components/darkmode/darkmode.component.js +4 -4
  310. package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
  311. package/assets/js/components/darkmode/darkmode.component.min.js.map +1 -1
  312. package/assets/js/components/doughnutchart/doughnutchart.component.js +2 -2
  313. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +2 -2
  314. package/assets/js/components/doughnutchart/doughnutchart.component.min.js.map +1 -1
  315. package/assets/js/components/fileupload/fileupload.component.js +17 -17
  316. package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
  317. package/assets/js/components/fileupload/fileupload.component.min.js.map +1 -1
  318. package/assets/js/components/filter-card/filter-card.component.js +9 -9
  319. package/assets/js/components/filter-card/filter-card.component.min.js +5 -5
  320. package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -1
  321. package/assets/js/components/filterlist/filterlist.component.js +1 -1
  322. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  323. package/assets/js/components/filterlist/filterlist.component.min.js.map +1 -1
  324. package/assets/js/components/form/form.component.js +5 -5
  325. package/assets/js/components/form/form.component.min.js +1 -1
  326. package/assets/js/components/form/form.component.min.js.map +1 -1
  327. package/assets/js/components/header/header.component.js +53 -53
  328. package/assets/js/components/header/header.component.min.js +2 -2
  329. package/assets/js/components/header/header.component.min.js.map +1 -1
  330. package/assets/js/components/inline-edit/inline-edit.component.js +16 -16
  331. package/assets/js/components/inline-edit/inline-edit.component.min.js +4 -4
  332. package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -1
  333. package/assets/js/components/input/input.component.js +11 -11
  334. package/assets/js/components/input/input.component.min.js +1 -1
  335. package/assets/js/components/input/input.component.min.js.map +1 -1
  336. package/assets/js/components/input-range/input-range.component.js +9 -9
  337. package/assets/js/components/input-range/input-range.component.min.js +1 -1
  338. package/assets/js/components/input-range/input-range.component.min.js.map +1 -1
  339. package/assets/js/components/marketing/marketing.component.js +10 -10
  340. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  341. package/assets/js/components/marketing/marketing.component.min.js.map +1 -1
  342. package/assets/js/components/menu/menu.component.js +6 -6
  343. package/assets/js/components/menu/menu.component.min.js +1 -1
  344. package/assets/js/components/menu/menu.component.min.js.map +1 -1
  345. package/assets/js/components/milestone/milestone.component.js +2 -2
  346. package/assets/js/components/milestone/milestone.component.min.js +1 -1
  347. package/assets/js/components/milestone/milestone.component.min.js.map +1 -1
  348. package/assets/js/components/milestone-group/milestone-group.component.js +2 -2
  349. package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
  350. package/assets/js/components/milestone-group/milestone-group.component.min.js.map +1 -1
  351. package/assets/js/components/modal/modal.component.js +25 -25
  352. package/assets/js/components/modal/modal.component.min.js +4 -4
  353. package/assets/js/components/modal/modal.component.min.js.map +1 -1
  354. package/assets/js/components/multi-step/multi-step.component.js +1 -1
  355. package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
  356. package/assets/js/components/multi-step/multi-step.component.min.js.map +1 -1
  357. package/assets/js/components/multi-step-modal/multi-step-modal.component.js +12 -12
  358. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +4 -4
  359. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js.map +1 -1
  360. package/assets/js/components/multiselect/multiselect.component.js +21 -21
  361. package/assets/js/components/multiselect/multiselect.component.min.js +4 -4
  362. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  363. package/assets/js/components/nav/nav.component.js +45 -45
  364. package/assets/js/components/nav/nav.component.min.js +2 -2
  365. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  366. package/assets/js/components/notification/notification.component.js +14 -14
  367. package/assets/js/components/notification/notification.component.min.js +1 -1
  368. package/assets/js/components/notification/notification.component.min.js.map +1 -1
  369. package/assets/js/components/pagination/pagination.component.js +39 -39
  370. package/assets/js/components/pagination/pagination.component.min.js +3 -3
  371. package/assets/js/components/pagination/pagination.component.min.js.map +1 -1
  372. package/assets/js/components/password/password.component.js +11 -11
  373. package/assets/js/components/password/password.component.min.js +1 -1
  374. package/assets/js/components/password/password.component.min.js.map +1 -1
  375. package/assets/js/components/popover/popover.component.js +8 -8
  376. package/assets/js/components/popover/popover.component.min.js +1 -1
  377. package/assets/js/components/popover/popover.component.min.js.map +1 -1
  378. package/assets/js/components/rank/rank.component.js +360 -360
  379. package/assets/js/components/rank/rank.component.min.js +1 -1
  380. package/assets/js/components/rank/rank.component.min.js.map +1 -1
  381. package/assets/js/components/rankings/rankings.component.js +18 -18
  382. package/assets/js/components/rankings/rankings.component.min.js +1 -1
  383. package/assets/js/components/rankings/rankings.component.min.js.map +1 -1
  384. package/assets/js/components/rating/rating.component.js +10 -10
  385. package/assets/js/components/rating/rating.component.min.js +1 -1
  386. package/assets/js/components/rating/rating.component.min.js.map +1 -1
  387. package/assets/js/components/record-card/record-card.component.js +2 -2
  388. package/assets/js/components/record-card/record-card.component.min.js +2 -2
  389. package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
  390. package/assets/js/components/search/search.component.js +19 -19
  391. package/assets/js/components/search/search.component.min.js +1 -1
  392. package/assets/js/components/search/search.component.min.js.map +1 -1
  393. package/assets/js/components/slider/slider.component.js +12 -12
  394. package/assets/js/components/slider/slider.component.min.js +2 -2
  395. package/assets/js/components/slider/slider.component.min.js.map +1 -1
  396. package/assets/js/components/split-button/split-button.component.js +19 -19
  397. package/assets/js/components/split-button/split-button.component.min.js +3 -3
  398. package/assets/js/components/split-button/split-button.component.min.js.map +1 -1
  399. package/assets/js/components/std-address-lookup/std-address-lookup.component.js +114 -114
  400. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +4 -4
  401. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
  402. package/assets/js/components/table/table.component.js +17 -17
  403. package/assets/js/components/table/table.component.min.js +1 -1
  404. package/assets/js/components/table/table.component.min.js.map +1 -1
  405. package/assets/js/components/table-ajax/table-ajax.component.js +17 -17
  406. package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
  407. package/assets/js/components/table-ajax/table-ajax.component.min.js.map +1 -1
  408. package/assets/js/components/table-basic/table-basic.component.js +16 -16
  409. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  410. package/assets/js/components/table-basic/table-basic.component.min.js.map +1 -1
  411. package/assets/js/components/table-no-submit/table-no-submit.component.js +17 -17
  412. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
  413. package/assets/js/components/table-no-submit/table-no-submit.component.min.js.map +1 -1
  414. package/assets/js/components/table-submit/table-submit.component.js +17 -17
  415. package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
  416. package/assets/js/components/table-submit/table-submit.component.min.js.map +1 -1
  417. package/assets/js/components/tabs/tabs.component.js +31 -18
  418. package/assets/js/components/tabs/tabs.component.min.js +4 -4
  419. package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
  420. package/assets/js/components/tag/tag.component.js +14 -14
  421. package/assets/js/components/tag/tag.component.min.js +4 -4
  422. package/assets/js/components/tag/tag.component.min.js.map +1 -1
  423. package/assets/js/components/tooltip/tooltip.component.js +9 -9
  424. package/assets/js/components/tooltip/tooltip.component.min.js +1 -1
  425. package/assets/js/components/tooltip/tooltip.component.min.js.map +1 -1
  426. package/assets/js/components/video/video.component.js +67 -0
  427. package/assets/js/components/video/video.component.min.js +21 -0
  428. package/assets/js/components/video/video.component.min.js.map +1 -0
  429. package/assets/js/components/video-card/video-card.component.js +53 -70
  430. package/assets/js/components/video-card/video-card.component.min.js +15 -7
  431. package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
  432. package/assets/js/components/video-modal/video-modal.component.js +24 -58
  433. package/assets/js/components/video-modal/video-modal.component.min.js +12 -6
  434. package/assets/js/components/video-modal/video-modal.component.min.js.map +1 -1
  435. package/assets/js/components/word-count/word-count.component.js +1 -1
  436. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  437. package/assets/js/components/word-count/word-count.component.min.js.map +1 -1
  438. package/assets/js/modules/card.module.js +14 -14
  439. package/assets/js/modules/chart.js +1 -1
  440. package/assets/js/modules/chart.module.js +5 -5
  441. package/assets/js/modules/helper.test.js +2 -2
  442. package/assets/js/modules/integration-tests.js +3 -3
  443. package/assets/js/modules/modal.js +4 -2
  444. package/assets/js/modules/table.js +3 -3
  445. package/assets/js/modules/tabs.js +1 -1
  446. package/assets/js/modules/videos.js +42 -0
  447. package/assets/js/scripts.bundle.js +1 -1
  448. package/assets/js/scripts.bundle.js.map +1 -1
  449. package/assets/js/scripts.bundle.min.js +1 -1
  450. package/assets/js/scripts.bundle.min.js.map +1 -1
  451. package/assets/js/scripts.js +4 -4
  452. package/assets/sass/_bs_grid.scss +41 -41
  453. package/assets/sass/_bs_utilities.scss +51 -51
  454. package/assets/sass/_components.scss +162 -162
  455. package/assets/sass/_corefiles.scss +31 -31
  456. package/assets/sass/_elements.scss +30 -30
  457. package/assets/sass/_fonts.scss +28 -28
  458. package/assets/sass/_func.scss +2 -2
  459. package/assets/sass/_functions/bs_functions.scss +487 -487
  460. package/assets/sass/_functions/bs_mixins.scss +2103 -2103
  461. package/assets/sass/_functions/bs_utilities.scss +922 -922
  462. package/assets/sass/_functions/bs_variables.scss +1701 -1703
  463. package/assets/sass/_functions/functions.scss +48 -48
  464. package/assets/sass/_functions/mixins.scss +1 -1
  465. package/assets/sass/_grid.scss +320 -320
  466. package/assets/sass/_print.scss +64 -64
  467. package/assets/sass/_utilities.scss +35 -35
  468. package/assets/sass/components/actionbar.component.scss +421 -421
  469. package/assets/sass/components/actionbar.global.scss +115 -115
  470. package/assets/sass/components/address-lookup.component.scss +161 -161
  471. package/assets/sass/components/address-lookup.preload.scss +90 -90
  472. package/assets/sass/components/applied-filters.scss +19 -19
  473. package/assets/sass/components/barchart.component.scss +347 -347
  474. package/assets/sass/components/bento-grid.component.scss +109 -109
  475. package/assets/sass/components/bento-grid.global.scss +248 -248
  476. package/assets/sass/components/calendar.component.scss +1272 -1272
  477. package/assets/sass/components/calendar.config.scss +423 -423
  478. package/assets/sass/components/card.component.scss +187 -182
  479. package/assets/sass/components/card.module.scss +154 -151
  480. package/assets/sass/components/carousel.component.scss +631 -631
  481. package/assets/sass/components/carousel.config.scss +84 -84
  482. package/assets/sass/components/charts.config.scss +86 -86
  483. package/assets/sass/components/charts.module.scss +588 -588
  484. package/assets/sass/components/charts.scss +1298 -1298
  485. package/assets/sass/components/collapsible-side.scss +307 -307
  486. package/assets/sass/components/config.component.scss +235 -235
  487. package/assets/sass/components/content.component.scss +18 -18
  488. package/assets/sass/components/darkmode.component.scss +20 -20
  489. package/assets/sass/components/doughnutchart.component.scss +206 -206
  490. package/assets/sass/components/fileupload.scss +162 -162
  491. package/assets/sass/components/filter-card.component.scss +99 -99
  492. package/assets/sass/components/header.scss +251 -256
  493. package/assets/sass/components/inline-edit.preload.scss +203 -203
  494. package/assets/sass/components/inline-edit.scss +40 -40
  495. package/assets/sass/components/input-range.component.scss +46 -46
  496. package/assets/sass/components/input.component.scss +101 -101
  497. package/assets/sass/components/marketing.component.scss +65 -65
  498. package/assets/sass/components/menu.component.scss +161 -190
  499. package/assets/sass/components/menu.global.scss +82 -82
  500. package/assets/sass/components/milestone.scss +216 -216
  501. package/assets/sass/components/modal.component.scss +252 -252
  502. package/assets/sass/components/multi-step-modal.component.scss +255 -255
  503. package/assets/sass/components/multi-step-modal.global.scss +92 -92
  504. package/assets/sass/components/multi-step.component.scss +144 -144
  505. package/assets/sass/components/multiselect.preload.scss +8 -8
  506. package/assets/sass/components/multiselect.scss +238 -238
  507. package/assets/sass/components/nav.component.scss +718 -718
  508. package/assets/sass/components/nav.docs.scss +55 -55
  509. package/assets/sass/components/nav.global.scss +870 -870
  510. package/assets/sass/components/nav.preload.scss +54 -54
  511. package/assets/sass/components/notification.scss +218 -218
  512. package/assets/sass/components/pagination.scss +237 -237
  513. package/assets/sass/components/password.component.scss +56 -56
  514. package/assets/sass/components/popover.component.scss +28 -28
  515. package/assets/sass/components/property-searchbar.scss +139 -139
  516. package/assets/sass/components/rank.component.scss +275 -275
  517. package/assets/sass/components/rankings.component.scss +70 -70
  518. package/assets/sass/components/rankings.global.scss +140 -140
  519. package/assets/sass/components/rating.component.css +211 -211
  520. package/assets/sass/components/record-card.component.scss +191 -191
  521. package/assets/sass/components/slider.scss +127 -127
  522. package/assets/sass/components/snapshot.scss +65 -65
  523. package/assets/sass/components/split-button.component.scss +83 -83
  524. package/assets/sass/components/stepper.scss +157 -157
  525. package/assets/sass/components/table-basic.component.scss +136 -136
  526. package/assets/sass/components/table-basic.global.scss +676 -676
  527. package/assets/sass/components/table.component.scss +51 -51
  528. package/assets/sass/components/table.global.scss +398 -398
  529. package/assets/sass/components/tabs.component.scss +34 -9
  530. package/assets/sass/components/tabs.config.scss +258 -254
  531. package/assets/sass/components/tag.component.scss +59 -59
  532. package/assets/sass/components/tag.preload.scss +20 -20
  533. package/assets/sass/components/testimonial.scss +125 -125
  534. package/assets/sass/components/timeline.scss +92 -92
  535. package/assets/sass/components/tooltip.component.scss +148 -148
  536. package/assets/sass/components/video-card.component.scss +49 -75
  537. package/assets/sass/components/video-modal.component.scss +26 -24
  538. package/assets/sass/components/video.component.scss +75 -0
  539. package/assets/sass/components/word-count.component.scss +26 -26
  540. package/assets/sass/core.scss +4 -4
  541. package/assets/sass/elements/admin-panel.css +310 -310
  542. package/assets/sass/elements/badge-tag.css +101 -101
  543. package/assets/sass/elements/brand.css +80 -80
  544. package/assets/sass/elements/button__group.css +135 -135
  545. package/assets/sass/elements/buttons--action.css +71 -54
  546. package/assets/sass/elements/buttons--compact.css +168 -168
  547. package/assets/sass/elements/{buttons--global.scss → buttons--global.css} +239 -246
  548. package/assets/sass/elements/{buttons--secondary.scss → buttons--secondary.css} +18 -24
  549. package/assets/sass/elements/{buttons--special.scss → buttons--special.css} +164 -171
  550. package/assets/sass/elements/{buttons--tertiary.scss → buttons--tertiary.css} +51 -57
  551. package/assets/sass/elements/buttons.scss +9 -14
  552. package/assets/sass/elements/code.css +45 -45
  553. package/assets/sass/elements/container.scss +118 -155
  554. package/assets/sass/elements/{details.scss → details.css} +224 -227
  555. package/assets/sass/elements/dialog.scss +75 -86
  556. package/assets/sass/elements/{dropdown.scss → dropdown.css} +85 -87
  557. package/assets/sass/elements/{feature.scss → feature.css} +174 -180
  558. package/assets/sass/elements/forms.scss +1337 -1338
  559. package/assets/sass/elements/highlight.css +76 -76
  560. package/assets/sass/elements/hr.css +41 -41
  561. package/assets/sass/elements/icons.css +48 -48
  562. package/assets/sass/elements/input.scss +212 -212
  563. package/assets/sass/elements/{label.scss → label.css} +20 -20
  564. package/assets/sass/elements/links--collapsible-side.scss +130 -0
  565. package/assets/sass/elements/links--global.scss +155 -0
  566. package/assets/sass/elements/links--video.scss +73 -0
  567. package/assets/sass/elements/links.scss +5 -348
  568. package/assets/sass/elements/lists--breadcrumbs.scss +26 -26
  569. package/assets/sass/elements/lists--steps.css +171 -171
  570. package/assets/sass/elements/lists--tick-list.scss +112 -112
  571. package/assets/sass/elements/lists.scss +99 -99
  572. package/assets/sass/elements/media.css +20 -20
  573. package/assets/sass/elements/modal.scss +411 -415
  574. package/assets/sass/elements/popover.scss +259 -259
  575. package/assets/sass/elements/prefix.scss +139 -139
  576. package/assets/sass/elements/progress.scss +208 -214
  577. package/assets/sass/elements/table.element.scss +144 -144
  578. package/assets/sass/elements/{textarea.scss → textarea.css} +84 -96
  579. package/assets/sass/elements/{toggle-button.scss → toggle-button.css} +49 -55
  580. package/assets/sass/elements/tooltips.scss +152 -151
  581. package/assets/sass/elements/type.css +166 -166
  582. package/assets/sass/email.scss +68 -68
  583. package/assets/sass/error.scss +31 -33
  584. package/assets/sass/foundations/animations.scss +2 -2
  585. package/assets/sass/foundations/colours.scss +104 -104
  586. package/assets/sass/foundations/reboot.scss +166 -166
  587. package/assets/sass/foundations/root.scss +269 -269
  588. package/assets/sass/main.scss +7 -7
  589. package/assets/sass/templates/auth.scss +106 -106
  590. package/assets/sass/templates/form.scss +95 -95
  591. package/assets/sass/utilities/{align.scss → align.css} +24 -24
  592. package/assets/sass/utilities/{border.scss → border.css} +65 -68
  593. package/assets/sass/utilities/{clearfix.scss → clearfix.css} +8 -8
  594. package/assets/sass/utilities/colours.scss +43 -43
  595. package/assets/sass/utilities/{columns.scss → columns.css} +61 -61
  596. package/assets/sass/utilities/display.scss +89 -89
  597. package/assets/sass/utilities/{fixed.scss → fixed.css} +16 -16
  598. package/assets/sass/utilities/flex.scss +291 -291
  599. package/assets/sass/utilities/{font-awesome-iso-fallbacks.scss → font-awesome-iso-fallbacks.css} +43 -43
  600. package/assets/sass/utilities/gap.css +26 -0
  601. package/assets/sass/utilities/{gradients.scss → gradients.css} +39 -39
  602. package/assets/sass/utilities/{js-display.scss → js-display.css} +12 -12
  603. package/assets/sass/utilities/{line-clamp.scss → line-clamp.css} +24 -24
  604. package/assets/sass/utilities/margins.scss +74 -74
  605. package/assets/sass/utilities/max-height.scss +93 -93
  606. package/assets/sass/utilities/{opacity.scss → opacity.css} +20 -20
  607. package/assets/sass/utilities/order.css +104 -0
  608. package/assets/sass/utilities/{overflow.scss → overflow.css} +16 -16
  609. package/assets/sass/utilities/paddings.scss +33 -33
  610. package/assets/sass/utilities/{pointer-events.scss → pointer-events.css} +8 -8
  611. package/assets/sass/utilities/position.css +68 -0
  612. package/assets/sass/utilities/{ratio.scss → ratio.css} +33 -33
  613. package/assets/sass/utilities/{rounded.scss → rounded.css} +56 -56
  614. package/assets/sass/utilities/{shadow.scss → shadow.css} +7 -7
  615. package/assets/sass/utilities/{sizes.scss → sizes.css} +92 -92
  616. package/assets/sass/utilities/{sticky.scss → sticky.css} +38 -38
  617. package/assets/sass/utilities/{text-truncate.scss → text-truncate.css} +6 -6
  618. package/assets/sass/utilities/{text.scss → text.css} +190 -190
  619. package/assets/sass/utilities/{visible.scss → visible.css} +8 -8
  620. package/assets/sass/utilities/{visually-hidden.scss → visually-hidden.css} +13 -13
  621. package/assets/sass/utilities/wider-colours.scss +8 -8
  622. package/assets/svg/illustrations/table.svg +165 -165
  623. package/assets/svg/logo.svg +56 -56
  624. package/assets/ts/components/accordion/accordion.component.ts +77 -77
  625. package/assets/ts/components/actionbar/actionbar.component.ts +567 -567
  626. package/assets/ts/components/address-lookup/address-lookup.component.ts +672 -672
  627. package/assets/ts/components/advanced-select/advanced-select.component.ts +116 -116
  628. package/assets/ts/components/applied-filters/applied-filters.component.ts +37 -37
  629. package/assets/ts/components/bento-grid/bento-grid.component.ts +88 -88
  630. package/assets/ts/components/collapsible-side/collapsible-side.component.ts +165 -165
  631. package/assets/ts/components/config/config.component.ts +699 -699
  632. package/assets/ts/components/content/content.component.ts +78 -78
  633. package/assets/ts/components/darkmode/darkmode.component.ts +108 -108
  634. package/assets/ts/components/fileupload/fileupload.component.ts +74 -74
  635. package/assets/ts/components/filter-card/filter-card.component.ts +106 -106
  636. package/assets/ts/components/form/form.component.ts +102 -102
  637. package/assets/ts/components/header/header.component.ts +97 -97
  638. package/assets/ts/components/inline-edit/inline-edit.component.ts +212 -212
  639. package/assets/ts/components/input/input.component.ts +278 -278
  640. package/assets/ts/components/input-range/input-range.component.ts +78 -78
  641. package/assets/ts/components/marketing/marketing.component.ts +44 -44
  642. package/assets/ts/components/menu/menu.component.ts +212 -212
  643. package/assets/ts/components/modal/modal.component.ts +184 -184
  644. package/assets/ts/components/multi-step-modal/multi-step-modal.component.ts +304 -304
  645. package/assets/ts/components/multiselect/multiselect.component.ts +349 -349
  646. package/assets/ts/components/nav/nav.component.ts +369 -369
  647. package/assets/ts/components/notification/notification.component.ts +172 -172
  648. package/assets/ts/components/pagination/pagination.component.ts +213 -213
  649. package/assets/ts/components/password/password.component.ts +118 -118
  650. package/assets/ts/components/popover/popover.component.ts +50 -50
  651. package/assets/ts/components/rank/rank.component.ts +394 -394
  652. package/assets/ts/components/rankings/rankings.component.ts +79 -79
  653. package/assets/ts/components/rating/rating.component.ts +86 -86
  654. package/assets/ts/components/search/search.component.ts +244 -244
  655. package/assets/ts/components/slider/slider.component.ts +170 -170
  656. package/assets/ts/components/split-button/split-button.component.ts +63 -63
  657. package/assets/ts/components/std-address-lookup/std-address-lookup.component.ts +1919 -1919
  658. package/assets/ts/components/table/table.component.ts +94 -94
  659. package/assets/ts/components/table-ajax/table-ajax.component.ts +70 -70
  660. package/assets/ts/components/table-basic/table-basic.component.ts +56 -56
  661. package/assets/ts/components/table-no-submit/table-no-submit.component.ts +130 -130
  662. package/assets/ts/components/table-submit/table-submit.component.ts +71 -71
  663. package/assets/ts/components/tabs/tabs.component.ts +70 -51
  664. package/assets/ts/components/tag/tag.component.ts +104 -104
  665. package/assets/ts/components/tooltip/tooltip.component.ts +98 -98
  666. package/assets/ts/components/video/video.component.ts +74 -0
  667. package/assets/ts/components/video-card/video-card.component.ts +129 -150
  668. package/assets/ts/components/video-modal/video-modal.component.ts +88 -137
  669. package/assets/ts/modules/advanced-select.ts +186 -186
  670. package/assets/ts/modules/applied-filters.ts +238 -238
  671. package/assets/ts/modules/card.module.ts +46 -46
  672. package/assets/ts/modules/chart.module.ts +594 -594
  673. package/assets/ts/modules/data-layer.md +71 -71
  674. package/assets/ts/modules/dialogs.ts +259 -259
  675. package/assets/ts/modules/dropdown.ts +216 -216
  676. package/assets/ts/modules/helper.test.ts +143 -143
  677. package/assets/ts/modules/helpers.ts +212 -212
  678. package/assets/ts/modules/integration-tests.ts +525 -525
  679. package/assets/ts/modules/modal.ts +45 -43
  680. package/assets/ts/modules/password.ts +82 -82
  681. package/assets/ts/modules/table.ts +1500 -1500
  682. package/assets/ts/modules/test.ts +22 -22
  683. package/assets/ts/modules/videos.ts +233 -176
  684. package/assets/ts/scripts.ts +111 -111
  685. package/dist/components.es.js +25 -25
  686. package/dist/components.umd.js +143 -113
  687. package/package.json +115 -116
  688. package/src/components/AdvancedSelect/AdvancedSelect.vue +28 -28
  689. package/src/components/Config/Config.vue +23 -23
  690. package/src/components/DarkMode/DarkMode.vue +19 -19
  691. package/src/components/Filterlist/Filterlist.vue +23 -23
  692. package/src/components/Form/Form.vue +22 -22
  693. package/src/components/Header/Header.vue +36 -36
  694. package/src/components/Input/Input.vue +22 -22
  695. package/src/components/InputRange/InputRange.vue +22 -22
  696. package/src/components/Modal/Modal.vue +22 -22
  697. package/src/components/MultiStepModal/MultiStepModal.vue +23 -23
  698. package/src/components/NoteFeed/NoteFeed.vue +82 -82
  699. package/src/components/Password/Password.vue +23 -23
  700. package/src/components/Popover/Popover.vue +22 -22
  701. package/src/components/PropertySearchbar/PropertySearchbar.vue +235 -235
  702. package/src/components/PropertySearchbar/README.md +25 -25
  703. package/src/components/Rating/Rating.vue +22 -22
  704. package/src/components/STDAddressLookup/STDAddressLookup.vue +22 -22
  705. package/src/components/Snapshot/Snapshot.vue +30 -30
  706. package/src/components/Tag/Tag.vue +22 -22
  707. package/src/components/Tooltip/Tooltip.vue +22 -22
  708. package/src/components/Video/Video.vue +22 -0
  709. package/src/components/VideoModal/VideoModal.vue +22 -22
  710. package/assets/sass/utilities/gap.scss +0 -8
  711. package/assets/sass/utilities/order.scss +0 -43
  712. package/assets/sass/utilities/position.scss +0 -52
@@ -1,672 +1,672 @@
1
- import Cookies from '../../../../node_modules/js-cookie/dist/js.cookie.mjs';
2
- import advancedSelect from '../../modules/advanced-select';
3
- import { isValidPostcode } from '../../modules/helpers';
4
-
5
- // Data layer Web component created
6
- declare global {
7
- interface Window {
8
- dataLayer: Array<object>;
9
- }
10
- }
11
- window.dataLayer = window.dataLayer || [];
12
- window.dataLayer.push({
13
- event: 'customElementRegistered',
14
- element: 'Address Lookup',
15
- });
16
-
17
- class iamAddressLookup extends HTMLElement {
18
- constructor() {
19
- super();
20
- this.attachShadow({ mode: 'open' });
21
-
22
- const assetLocation = document.body.hasAttribute('data-assets-location')
23
- ? document.body.getAttribute('data-assets-location')
24
- : '/assets';
25
-
26
- const loadCSS = `@import "${assetLocation}/css/components/address-lookup.component.css";`;
27
-
28
- const template = document.createElement('template');
29
- template.innerHTML = `
30
- <style>
31
- ${loadCSS}
32
-
33
- </style>
34
- <link rel="stylesheet" href="https://kit.fontawesome.com/8bd0fca975.css" crossorigin="anonymous" />
35
- <div class="wrapper">
36
-
37
- <div class="matched d-none">
38
- <div class="inner">
39
- <p><span class="matched-address"></span></p>
40
- <button class="link use-matched">Yes, use this address</button>
41
- <button class="link use-entered">No, use the address I entered</button>
42
- </div>
43
- <span class="invalid-feedback">We found a matching address based on the details you entered. Is this address correct?</span>
44
- </div>
45
- <div class="postcode-lookup was-validated">
46
- <div>
47
- <label class="mb-1"><span class="title text-lowercase"></span>
48
- <span>
49
- <input type="text" name="postcode" class="${this.hasAttribute('data-input-class') ? this.getAttribute('data-input-class') : ''}" list="address-lookup__addressess" autocomplete="one-time-code" aria-autocomplete="none" placeholder="${this?.hasAttribute('data-placeholder') ? this?.getAttribute('data-placeholder') : 'Postcode'}" value="${this.hasAttribute('data-postcode-value') ? this.getAttribute('data-postcode-value') : ''}" part="input" />
50
- <button id="postcode__submit" class="suffix fa-regular fa-search" part="suffix"></button>
51
- </span>
52
- </label>
53
- <span class="invalid-feedback mb-2" id="invalid-feedback-address-lookup">${this.hasAttribute('data-error-msg') ? this.getAttribute('data-error-msg') : 'Required address fields'}</span>
54
-
55
- <div class="datalist__wrapper ${this.hasAttribute('data-list-class') ? this.getAttribute('data-list-class') : ''}" tabindex="0" part="list-wrapper">
56
- <slot name="beforeList"></slot>
57
- <slot name="preloadedList"></slot>
58
- <datalist id="address-lookup__addressess" class=""></datalist>
59
- <div id="paginationWrapper"></div>
60
- <slot name="afterList"></slot>
61
- </div>
62
- </div>
63
- <slot name="hint"></slot>
64
- <div class="actions">
65
- <button class="btn btn-tertiary switch-to-manual-btn" type="button" part="manualButton">Or enter address manually</button>
66
- <slot name="actions"></slot>
67
- </div>
68
- </div>
69
-
70
- <div class="manual-address pb-2 js-hide">
71
- <slot part="contents"></slot>
72
- <button class="btn btn-tertiary switch-to-lookup-btn" type="button" part="button">${this.hasAttribute('data-postcode-lookup-label') ? this.getAttribute('data-postcode-lookup-label') : 'Use postcode lookup'}</button>
73
- <slot name="after"></slot>
74
- </div>
75
- <div class="pre-filled p-2 js-hide">
76
- <strong class="title text-primary d-block"></strong>
77
- <p><span class="pre-filled-address"></span>
78
- <button class="link m-0 text-primary ms-2 cursor-pointer" type="button" part="edit-button">
79
- <i class="fa-regular fa-pen-to-square m-0"></i> <span class="visually-hidden">Edit</span>
80
- </button>
81
- <button class="link m-0 text-primary ms-2 cursor-pointer" type="button" part="remove-button">
82
- <i class="fa-regular fa-trash m-0"></i> <span class="visually-hidden">Remove</span>
83
- </button>
84
- <slot name="prefilled"></slot></p>
85
- </div>
86
- </div>
87
- `;
88
- this.shadowRoot?.appendChild(template.content.cloneNode(true));
89
- }
90
-
91
- async connectedCallback(): void {
92
- const lookup = this.shadowRoot.querySelector('[name="postcode"]');
93
- const lookupWrapper = this.shadowRoot.querySelector('.postcode-lookup');
94
- const manualWrapper = this.shadowRoot.querySelector('.manual-address');
95
- const preFilledWrapper = this.shadowRoot.querySelector('.pre-filled');
96
- const list = this.querySelector('datalist[slot="preloadedList"]')
97
- ? this.querySelector('datalist[slot="preloadedList"]')
98
- : this.shadowRoot.querySelector('.datalist__wrapper datalist');
99
- const listWrapper = this.shadowRoot.querySelector('.datalist__wrapper');
100
- const switchManualBtn = this.shadowRoot.querySelector('.switch-to-manual-btn');
101
- const switchLookupBtn = this.shadowRoot.querySelector('.switch-to-lookup-btn');
102
- const title = this.hasAttribute('data-title') ? this.getAttribute('data-title') : 'Find an address';
103
- const preFilledAddressBtn = this.shadowRoot.querySelector('[part="edit-button"]');
104
- const preFilledAddressRemoveBtn = this.shadowRoot.querySelector('[part="remove-button"]');
105
- const dataDisplayText = this.hasAttribute('data-display-text');
106
- const postcodeSubmit = this.shadowRoot?.querySelector('#postcode__submit');
107
- const errorMsg = this.shadowRoot?.querySelector('#invalid-feedback-address-lookup');
108
- const paginationWrapper = this.shadowRoot?.querySelector('#paginationWrapper');
109
- const minChars = this.hasAttribute('data-min-chars') ? parseInt(this.getAttribute('data-min-chars')) : 3;
110
- let pageNumber = 1;
111
- const atleastone = this.querySelector('.atleastone');
112
-
113
- const matchedAddress = this.shadowRoot.querySelector('.matched-address');
114
- const matchedAddressWrapper = this.shadowRoot.querySelector('.matched');
115
- const matchedAddressUse = this.shadowRoot.querySelector('.matched .use-matched');
116
- const matchedAddressEntered = this.shadowRoot.querySelector('.matched .use-entered');
117
-
118
- let cacheSearchQuery = '';
119
-
120
- Array.from(this.shadowRoot.querySelectorAll('.title')).forEach((titleElement) => {
121
- titleElement.innerHTML = title;
122
- });
123
-
124
- // #region functions
125
- function checkFilled(component): void {
126
- const preFilledAddress = component.shadowRoot.querySelector('.pre-filled-address');
127
- let preFilled = true;
128
- preFilledAddress.innerHTML = '';
129
-
130
- Array.from(
131
- component.querySelectorAll('input[required],input[data-required],select[required],select[data-required]')
132
- ).forEach((input) => {
133
- let value = input.hasAttribute('data-value') ? input.getAttribute('data-value') : input.value;
134
-
135
- if (input.tagName == 'SELECT' && component.querySelector(`[value="${input.value}"][data-value]`))
136
- value = component.querySelector(`[value="${input.value}"][data-value]`).getAttribute('data-value');
137
-
138
- if (!value) {
139
- if (input.closest('.atleastone')) {
140
- if (!atleastone.querySelector('input:valid, input.is-valid')) {
141
- preFilled = false;
142
- }
143
- } else {
144
- preFilled = false;
145
- }
146
- } else {
147
- preFilledAddress.innerHTML += value + (/^-?\d+$/.test(value) ? ' ' : ', ');
148
- }
149
- });
150
-
151
- preFilledAddress.innerHTML = preFilledAddress.innerHTML.slice(0, -2);
152
-
153
- // If has label then use that
154
-
155
- if (preFilled) {
156
- if (component.querySelector('[name="label"]'))
157
- preFilledAddress.innerHTML = component.querySelector('[name="label"]').value;
158
-
159
- // If has label then use that
160
-
161
- preFilledWrapper.classList.remove('js-hide');
162
- lookupWrapper.classList.add('js-hide');
163
- manualWrapper.classList.add('js-hide');
164
- }
165
- }
166
-
167
- function openManualWrapper(): void {
168
- lookupWrapper.classList.add('js-hide');
169
- manualWrapper.classList.remove('js-hide');
170
-
171
- Array.from(manualWrapper.querySelectorAll('[data-required]')).forEach((input) => {
172
- input.setAttribute('required', 'true');
173
- });
174
-
175
- manualWrapper.scrollIntoView();
176
- }
177
-
178
- const atleastoneValidate = (): void => {
179
- if (atleastone.querySelector('input:valid, input.is-valid')) {
180
- Array.from(atleastone.querySelectorAll('input')).forEach((element) => {
181
- element.removeAttribute('required');
182
- });
183
- } else {
184
- Array.from(atleastone.querySelectorAll('input')).forEach((input) => {
185
- input.setAttribute('required', 'true');
186
- });
187
- }
188
- };
189
-
190
- const fillInputs = (values): void => {
191
- lookupWrapper.classList.add('js-hide');
192
- manualWrapper.classList.remove('js-hide');
193
-
194
- Object.keys(values).forEach((key) => {
195
- const value = values[key];
196
- let input = false;
197
- if (this.querySelector(`[data-name="${key}"]`)) input = this.querySelector(`[data-name="${key}"]`);
198
- else if (this.querySelector(`[data-name-alt="${key}"]`)) input = this.querySelector(`[data-name-alt="${key}"]`);
199
- else if (this.querySelector(`[name="${key}"]`)) input = this.querySelector(`[name="${key}"]`);
200
-
201
- if (input && input.tagName == 'SELECT' && value.id) {
202
- input.value = value.id;
203
- } else if (input && value != '') {
204
- input.value = value;
205
-
206
- if (input.hasAttribute('data-readonly')) {
207
- input.setAttribute('readonly', true);
208
- input.classList.add('is-valid');
209
- }
210
- } else if (value != '') {
211
- this.insertAdjacentHTML(
212
- 'beforeend',
213
- `<input type="hidden" class="inserted" data-hidden name="${key}" value="${value}" />`
214
- );
215
- }
216
-
217
- if (this.querySelector(`[data-name-2="${key}"]`))
218
- this.querySelector(`[data-name-2="${key}"]`).value += ' ' + value;
219
- });
220
-
221
- Array.from(this.querySelectorAll('[data-required]')).forEach((input) => {
222
- input.setAttribute('required', 'true');
223
- });
224
- lookup.removeAttribute('required');
225
-
226
- if (atleastone) {
227
- atleastoneValidate();
228
- }
229
-
230
- if (!this.hasAttribute('data-force-manual')) checkFilled(this);
231
- };
232
-
233
- const search = async (searchValue, paginate = false): any => {
234
- if (!paginate && searchValue === cacheSearchQuery) {
235
- if (list?.children?.length) {
236
- list?.classList.remove('loading');
237
- list?.classList.remove('noresults');
238
- listWrapper?.focus();
239
- list?.querySelector('option')?.focus();
240
- return true;
241
- }
242
- }
243
-
244
- // check if postcode is valid
245
- const limit = this.hasAttribute('data-limit') ? parseInt(this.getAttribute('data-limit')) : 100;
246
-
247
- if (paginate) pageNumber++;
248
- else pageNumber = 1;
249
-
250
- let ajaxURL = this.getAttribute('data-url');
251
- ajaxURL += `${encodeURI(searchValue)}&page[number]=${pageNumber}&page[size]=${limit}`;
252
-
253
- if (this.hasAttribute('data-url-2')) {
254
- ajaxURL += this.getAttribute('data-url-2');
255
- }
256
-
257
- const postcode = searchValue; // TODO: remove when postcode comes from response
258
-
259
- if (this.hasAttribute('data-postcode')) {
260
- if (!isValidPostcode(searchValue)) {
261
- return 'Invalid postcode, please enter a valid postcode';
262
- } else {
263
- if (!paginate) list.innerHTML = '';
264
- list?.classList.add('loading');
265
- list?.classList.remove('noresults');
266
- lookup?.classList.remove('is-invalid');
267
- errorMsg?.innerHTML = '';
268
- list?.classList.remove('show-welsh-banner');
269
-
270
- Array.from(this.querySelectorAll('[data-required]')).forEach((input) => {
271
- input.removeAttribute('required');
272
- });
273
- Array.from(this.querySelectorAll('[data-readonly]')).forEach((input) => {
274
- input.removeAttribute('readonly');
275
- input.classList.remove('is-valid');
276
- });
277
- Array.from(this.querySelectorAll('.inserted')).forEach((input) => {
278
- input.remove();
279
- });
280
- }
281
- }
282
-
283
- this.classList.add('searched');
284
- this.classList.add('was-validated');
285
-
286
- // Setup controller vars if not already set
287
- if (!window.controller) window.controller = [];
288
-
289
- // Abort if controller already present for this url
290
- if (window.controller[ajaxURL]) window.controller[ajaxURL].abort();
291
-
292
- // Create a new controller so it can be aborted if new fetch made
293
- window.controller[ajaxURL] = new AbortController();
294
- const { signal } = window.controller[ajaxURL];
295
-
296
- try {
297
- return await fetch(ajaxURL, {
298
- signal: signal,
299
- method: 'get',
300
- credentials: 'same-origin',
301
- headers: new Headers({
302
- 'Content-Type': 'application/json',
303
- Accept: 'application/json',
304
- 'X-Requested-With': 'XMLHttpRequest',
305
- 'X-XSRF-TOKEN': Cookies.get('XSRF-TOKEN'),
306
- }),
307
- })
308
- .then((response) => response.json())
309
- .then((response) => {
310
- // populate datalist
311
- let listString = '';
312
-
313
- const addresses = response['data'] ? response['data'] : response;
314
-
315
- addresses.forEach((address) => {
316
- // Deal with agent platform response
317
- if (typeof address.attributes == 'object' && address.attributes.label) {
318
- const attributes = {};
319
-
320
- if (address.id) address.attributes.id = address.id;
321
-
322
- if (address.relationships)
323
- address.attributes = Object.assign(address.attributes, address.relationships);
324
-
325
- Object.keys(address.attributes).forEach((key) => {
326
-
327
- const attribute = address.attributes[key];
328
-
329
- if(typeof attribute == 'object'){
330
- attributes[key] = attribute?.id;
331
- }
332
- else {
333
- attributes[key] = attribute;
334
- }
335
- });
336
-
337
- const values = JSON.stringify(attributes);
338
-
339
- listString += `<option data-values='${values}' >${address.attributes.label}</option>`;
340
- } else if (typeof address.value == 'object') {
341
- if (address.id) address.attributes.id = address.id;
342
-
343
- if (address.relationships)
344
- address.attributes = Object.assign(address.attributes, address.relationships);
345
-
346
- const values = JSON.stringify(address.value);
347
- listString += `<option data-values='${values}'>${address['label']}, ${postcode}</option>`;
348
- } else {
349
- const values = JSON.stringify(address);
350
-
351
- if (dataDisplayText) {
352
- listString += `<option data-values='${values}'>${address[dataDisplayText]}, ${postcode}</option>`;
353
- } else {
354
- let itemString = '';
355
- for (const [key, value] of Object.entries(address)) {
356
- if (key == 'address_number_name') itemString += `${value} `;
357
- else if (key != 'postcode' && key != 'address_title' && key != 'group')
358
- itemString += `${value}${/^-?\d+$/.test(value) ? '' : ','} `;
359
- }
360
-
361
- listString += `<option data-values='${values}'>${itemString}, ${postcode}</option>`; // TODO postcode should come from the response
362
- }
363
- }
364
- });
365
-
366
- if (paginate) list.innerHTML += listString;
367
- else list.innerHTML = listString;
368
-
369
- // Cache the search value to prevent further calls
370
- cacheSearchQuery = searchValue;
371
-
372
- if (addresses.length) {
373
- list?.classList.remove('loading');
374
- } else {
375
- list?.classList.remove('loading');
376
- list?.classList.add('noresults');
377
- }
378
-
379
- // pagination
380
- if (
381
- response.meta &&
382
- response.meta.current_page &&
383
- response.meta.total_pages &&
384
- response.meta.total_pages > response.meta.current_page
385
- ) {
386
- paginationWrapper?.innerHTML = `<div class="bg-light text-center p-2"><p class="m-0">Showing 1-${response.meta.current_page * limit} of ${response.meta.total_results} addresses <br /><button type="button" data-next="${response.meta.current_page + 1}" class="mt-1 mb-0 btn btn-action"><i class="fa-regular fa-eye me-1"></i>Show more addresses</button></p></div>`;
387
- } else {
388
- paginationWrapper?.innerHTML = '';
389
- }
390
-
391
- if (response.meta && response.meta.welsh_language) {
392
- list?.classList.add('show-welsh-banner');
393
- }
394
- listWrapper?.focus();
395
- list?.querySelector('option')?.focus();
396
-
397
- return true;
398
- });
399
- } catch (error) {
400
- if (error?.name === 'AbortError') {
401
- return true;
402
- }
403
- console.log(error);
404
- return 'There has been a problem. Please try again in a few moments.';
405
- }
406
- };
407
-
408
- let searchTimer: number | undefined;
409
-
410
- const triggerSearch = (raw: string, paginate = false, immediate = false) => {
411
- const value = (raw ?? '').trim();
412
-
413
- if (value.length < minChars) return;
414
-
415
- if (immediate) {
416
- if (searchTimer) window.clearTimeout(searchTimer);
417
- void search(value, paginate);
418
- return;
419
- }
420
-
421
- if (searchTimer) window.clearTimeout(searchTimer);
422
- searchTimer = window.setTimeout(() => {
423
- void search(value, paginate);
424
- }, 200);
425
- };
426
-
427
- // #endregion
428
-
429
- // #region check attributes and trigger functions
430
- if (!this.hasAttribute('data-force-manual')) checkFilled(this);
431
-
432
- this.addEventListener('filled', () => {
433
- if (!this.hasAttribute('data-force-manual')) checkFilled(this);
434
- });
435
-
436
- if (this.hasAttribute('data-use')) {
437
- const useLabel = this.hasAttribute('data-use-label') ? this.getAttribute('data-use-label') : 'Use saved address';
438
- const useCheckbox = `<div><input type="checkbox" name="use" id="use" value="yes"><label for="use">${useLabel}</label></div>`;
439
-
440
- lookupWrapper.insertAdjacentHTML('afterbegin', useCheckbox);
441
-
442
- this.shadowRoot.addEventListener('change', (event) => {
443
- if (event && event.target instanceof HTMLElement && event.target.closest('[name="use"]')) {
444
- const checkbox = event.target.closest('[name="use"]');
445
-
446
- if (checkbox.checked) {
447
- lookupWrapper.classList.add('js-hide');
448
- manualWrapper.classList.remove('js-hide');
449
-
450
- const values = JSON.parse(this.getAttribute('data-use'));
451
-
452
- Object.keys(values).forEach((key) => {
453
- const value = values[key];
454
- if (this.querySelector(`[data-name="${key}"]`)) this.querySelector(`[data-name="${key}"]`).value = value;
455
- else if (this.querySelector(`[name="${key}"]`)) this.querySelector(`[name="${key}"]`).value = value;
456
- });
457
- }
458
- }
459
- });
460
-
461
- if (this.hasAttribute('data-use-default')) {
462
- lookupWrapper.querySelector('[name="use"]').checked = true;
463
-
464
- const values = JSON.parse(this.getAttribute('data-use'));
465
- fillInputs(values);
466
- }
467
- }
468
-
469
- if (this.hasAttribute('data-manual')) {
470
- fillInputs({});
471
- }
472
-
473
- if (this.classList.contains('show-pagination'))
474
- paginationWrapper?.innerHTML = `<div class="bg-light text-center p-2"><p class="m-0">Showing 1-500 of 585 addresses <br /><button type="button" data-next="2" class="mt-1 mb-0 btn btn-action"><i class="fa-regular fa-eye me-1"></i>Show more addresses</button></p></div>`;
475
-
476
- if (this.classList.contains('scroll-to-bottom-results')) paginationWrapper.scrollIntoView({ container: 'nearest' });
477
- // #endregion
478
-
479
- // #region event listeners
480
- preFilledAddressBtn.addEventListener('click', () => {
481
- preFilledWrapper.classList.add('js-hide');
482
- openManualWrapper();
483
- });
484
-
485
- preFilledAddressRemoveBtn.addEventListener('click', () => {
486
- preFilledWrapper.classList.add('js-hide');
487
- lookupWrapper.classList.remove('js-hide');
488
- manualWrapper.classList.add('js-hide');
489
-
490
- list.innerHTML = '';
491
- list?.classList.remove('loading');
492
- list?.classList.remove('noresults');
493
- lookup?.classList.remove('is-invalid');
494
- errorMsg?.innerHTML = '';
495
- list?.classList.remove('show-welsh-banner');
496
-
497
- lookup.focus();
498
- lookup.value = '';
499
-
500
- if (lookup?.hasAttribute('data-placeholder'))
501
- lookup.setAttribute('placeholder', lookup?.getAttribute('data-placeholder'));
502
-
503
- // empty fields
504
- Array.from(this.querySelectorAll('input, select')).forEach((input) => {
505
- input.value = '';
506
- });
507
-
508
- lookup.value = "";
509
-
510
- // uncheck box
511
- if (this.shadowRoot.querySelector('[name="use"]'))
512
- this.shadowRoot.querySelector('[name="use"]').checked = false;
513
-
514
- const updateEvent = new CustomEvent('switch-to-lookup');
515
- this.dispatchEvent(updateEvent);
516
-
517
- lookupWrapper.scrollIntoView();
518
- });
519
-
520
- switchManualBtn.addEventListener('click', () => {
521
- openManualWrapper();
522
- });
523
-
524
- this.addEventListener('open-manual', () => {
525
- openManualWrapper();
526
- });
527
-
528
- switchLookupBtn.addEventListener('click', () => {
529
- lookupWrapper.classList.remove('js-hide');
530
- manualWrapper.classList.add('js-hide');
531
-
532
- const updateEvent = new CustomEvent('switch-to-lookup');
533
- this.dispatchEvent(updateEvent);
534
-
535
- lookupWrapper.scrollIntoView();
536
- });
537
-
538
- lookup.addEventListener('keyup', (e) => {
539
- if (e.keyCode === 13) {
540
- triggerSearch(lookup.value, false, true);
541
- }
542
- });
543
-
544
- lookup.addEventListener('input', () => {
545
- lookup.classList.remove('is-invalid');
546
- if (errorMsg) errorMsg.innerHTML = '';
547
-
548
- const v = (lookup.value ?? '').trim();
549
-
550
- if (v.length < minChars) {
551
- list.innerHTML = '';
552
- if (paginationWrapper) {
553
- paginationWrapper.innerHTML = '';
554
- }
555
- list?.classList.remove('loading', 'noresults');
556
- cacheSearchQuery = '';
557
- return;
558
- }
559
-
560
- triggerSearch(v);
561
- });
562
-
563
- list.addEventListener('click', (e) => {
564
- if (e.target.tagName == 'OPTION') {
565
- const values = JSON.parse(e.target.getAttribute('data-values'));
566
-
567
- fillInputs(values);
568
-
569
- if (this.shadowRoot.querySelector('[name="use"]'))
570
- this.shadowRoot.querySelector('[name="use"]').checked = false;
571
- }
572
- });
573
-
574
- atleastone?.addEventListener('input', (e) => {
575
- Array.from(atleastone.querySelectorAll('[data-required]')).forEach((input) => {
576
- input.setAttribute('required', 'true');
577
- });
578
-
579
- atleastoneValidate();
580
- });
581
-
582
- postcodeSubmit?.addEventListener('click', () => {
583
- triggerSearch(lookup.value, false, true);
584
- });
585
-
586
- this?.addEventListener('close-button-pressed', () => {
587
- list.innerHTML = '';
588
- list?.classList.remove('loading');
589
- list?.classList.remove('noresults');
590
- lookup?.classList.remove('is-invalid');
591
- errorMsg?.innerHTML = '';
592
- list?.classList.remove('show-welsh-banner');
593
-
594
- lookup.focus();
595
- });
596
-
597
- paginationWrapper?.addEventListener('click', (e) => {
598
- if (e.target.tagName === 'BUTTON') {
599
- triggerSearch(lookup.value, true, true);
600
- }
601
- });
602
-
603
- // #endregion
604
-
605
- // #region Matched address
606
-
607
- if (this.hasAttribute('data-matched')) {
608
- matchedAddressWrapper?.classList.remove('d-none');
609
-
610
- if (this.hasAttribute('data-matched-label')) matchedAddress?.innerHTML = this.getAttribute('data-matched-label');
611
-
612
- matchedAddressEntered?.addEventListener('click', () => {
613
- matchedAddressWrapper?.remove();
614
-
615
- const useCheckbox = this.shadowRoot?.querySelector('[name="use"]');
616
- useCheckbox.checked = true;
617
-
618
- lookupWrapper.classList.add('js-hide');
619
- manualWrapper.classList.remove('js-hide');
620
-
621
- const values = JSON.parse(this.getAttribute('data-use'));
622
-
623
- Object.keys(values).forEach((key) => {
624
- const value = values[key];
625
- if (this.querySelector(`[data-name="${key}"]`)) this.querySelector(`[data-name="${key}"]`).value = value;
626
- else if (this.querySelector(`[name="${key}"]`)) this.querySelector(`[name="${key}"]`).value = value;
627
- });
628
-
629
- checkFilled(this);
630
- });
631
-
632
- matchedAddressUse?.addEventListener('click', () => {
633
- matchedAddressWrapper?.remove();
634
-
635
- const values = JSON.parse(this.getAttribute('data-matched'));
636
-
637
- fillInputs(values);
638
- checkFilled(this);
639
- });
640
- } else {
641
- matchedAddressWrapper?.remove();
642
- }
643
- // #endregion
644
-
645
- advancedSelect(this, lookup, list, true);
646
-
647
- if (this.hasAttribute('data-disabled'))
648
- lookup?.setAttribute('disabled','disabled');
649
- }
650
-
651
- static get observedAttributes(): any {
652
- return ['data-disabled'];
653
- }
654
-
655
- attributeChangedCallback(attrName, oldVal, newVal): void {
656
- const lookup = this.shadowRoot.querySelector('[name="postcode"]');
657
-
658
- switch (attrName) {
659
- case 'data-disabled': {
660
- if (oldVal != newVal && newVal == 'disabled') {
661
- lookup?.setAttribute('disabled','disabled');
662
- }
663
- else if (oldVal != newVal) {
664
- lookup?.removeAttribute('disabled');
665
- }
666
- break;
667
- }
668
- }
669
- }
670
- }
671
-
672
- export default iamAddressLookup;
1
+ import Cookies from '../../../../node_modules/js-cookie/dist/js.cookie.mjs';
2
+ import advancedSelect from '../../modules/advanced-select';
3
+ import { isValidPostcode } from '../../modules/helpers';
4
+
5
+ // Data layer Web component created
6
+ declare global {
7
+ interface Window {
8
+ dataLayer: Array<object>;
9
+ }
10
+ }
11
+ window.dataLayer = window.dataLayer || [];
12
+ window.dataLayer.push({
13
+ event: 'customElementRegistered',
14
+ element: 'Address Lookup',
15
+ });
16
+
17
+ class iamAddressLookup extends HTMLElement {
18
+ constructor() {
19
+ super();
20
+ this.attachShadow({ mode: 'open' });
21
+
22
+ const assetLocation = document.body.hasAttribute('data-assets-location')
23
+ ? document.body.getAttribute('data-assets-location')
24
+ : '/assets';
25
+
26
+ const loadCSS = `@import "${assetLocation}/css/components/address-lookup.component.css";`;
27
+
28
+ const template = document.createElement('template');
29
+ template.innerHTML = `
30
+ <style>
31
+ ${loadCSS}
32
+
33
+ </style>
34
+ <link rel="stylesheet" href="https://kit.fontawesome.com/8bd0fca975.css" crossorigin="anonymous" />
35
+ <div class="wrapper">
36
+
37
+ <div class="matched d-none">
38
+ <div class="inner">
39
+ <p><span class="matched-address"></span></p>
40
+ <button class="link use-matched">Yes, use this address</button>
41
+ <button class="link use-entered">No, use the address I entered</button>
42
+ </div>
43
+ <span class="invalid-feedback">We found a matching address based on the details you entered. Is this address correct?</span>
44
+ </div>
45
+ <div class="postcode-lookup was-validated">
46
+ <div>
47
+ <label class="mb-1"><span class="title text-lowercase"></span>
48
+ <span>
49
+ <input type="text" name="postcode" class="${this.hasAttribute('data-input-class') ? this.getAttribute('data-input-class') : ''}" list="address-lookup__addressess" autocomplete="one-time-code" aria-autocomplete="none" placeholder="${this?.hasAttribute('data-placeholder') ? this?.getAttribute('data-placeholder') : 'Postcode'}" value="${this.hasAttribute('data-postcode-value') ? this.getAttribute('data-postcode-value') : ''}" part="input" />
50
+ <button id="postcode__submit" class="suffix fa-regular fa-search" part="suffix"></button>
51
+ </span>
52
+ </label>
53
+ <span class="invalid-feedback mb-2" id="invalid-feedback-address-lookup">${this.hasAttribute('data-error-msg') ? this.getAttribute('data-error-msg') : 'Required address fields'}</span>
54
+
55
+ <div class="datalist__wrapper ${this.hasAttribute('data-list-class') ? this.getAttribute('data-list-class') : ''}" tabindex="0" part="list-wrapper">
56
+ <slot name="beforeList"></slot>
57
+ <slot name="preloadedList"></slot>
58
+ <datalist id="address-lookup__addressess" class=""></datalist>
59
+ <div id="paginationWrapper"></div>
60
+ <slot name="afterList"></slot>
61
+ </div>
62
+ </div>
63
+ <slot name="hint"></slot>
64
+ <div class="actions">
65
+ <button class="btn btn-tertiary switch-to-manual-btn" type="button" part="manualButton">Or enter address manually</button>
66
+ <slot name="actions"></slot>
67
+ </div>
68
+ </div>
69
+
70
+ <div class="manual-address pb-2 js-hide">
71
+ <slot part="contents"></slot>
72
+ <button class="btn btn-tertiary switch-to-lookup-btn" type="button" part="button">${this.hasAttribute('data-postcode-lookup-label') ? this.getAttribute('data-postcode-lookup-label') : 'Use postcode lookup'}</button>
73
+ <slot name="after"></slot>
74
+ </div>
75
+ <div class="pre-filled p-2 js-hide">
76
+ <strong class="title text-primary d-block"></strong>
77
+ <p><span class="pre-filled-address"></span>
78
+ <button class="link m-0 text-primary ms-2 cursor-pointer" type="button" part="edit-button">
79
+ <i class="fa-regular fa-pen-to-square m-0"></i> <span class="visually-hidden">Edit</span>
80
+ </button>
81
+ <button class="link m-0 text-primary ms-2 cursor-pointer" type="button" part="remove-button">
82
+ <i class="fa-regular fa-trash m-0"></i> <span class="visually-hidden">Remove</span>
83
+ </button>
84
+ <slot name="prefilled"></slot></p>
85
+ </div>
86
+ </div>
87
+ `;
88
+ this.shadowRoot?.appendChild(template.content.cloneNode(true));
89
+ }
90
+
91
+ async connectedCallback(): void {
92
+ const lookup = this.shadowRoot.querySelector('[name="postcode"]');
93
+ const lookupWrapper = this.shadowRoot.querySelector('.postcode-lookup');
94
+ const manualWrapper = this.shadowRoot.querySelector('.manual-address');
95
+ const preFilledWrapper = this.shadowRoot.querySelector('.pre-filled');
96
+ const list = this.querySelector('datalist[slot="preloadedList"]')
97
+ ? this.querySelector('datalist[slot="preloadedList"]')
98
+ : this.shadowRoot.querySelector('.datalist__wrapper datalist');
99
+ const listWrapper = this.shadowRoot.querySelector('.datalist__wrapper');
100
+ const switchManualBtn = this.shadowRoot.querySelector('.switch-to-manual-btn');
101
+ const switchLookupBtn = this.shadowRoot.querySelector('.switch-to-lookup-btn');
102
+ const title = this.hasAttribute('data-title') ? this.getAttribute('data-title') : 'Find an address';
103
+ const preFilledAddressBtn = this.shadowRoot.querySelector('[part="edit-button"]');
104
+ const preFilledAddressRemoveBtn = this.shadowRoot.querySelector('[part="remove-button"]');
105
+ const dataDisplayText = this.hasAttribute('data-display-text');
106
+ const postcodeSubmit = this.shadowRoot?.querySelector('#postcode__submit');
107
+ const errorMsg = this.shadowRoot?.querySelector('#invalid-feedback-address-lookup');
108
+ const paginationWrapper = this.shadowRoot?.querySelector('#paginationWrapper');
109
+ const minChars = this.hasAttribute('data-min-chars') ? parseInt(this.getAttribute('data-min-chars')) : 3;
110
+ let pageNumber = 1;
111
+ const atleastone = this.querySelector('.atleastone');
112
+
113
+ const matchedAddress = this.shadowRoot.querySelector('.matched-address');
114
+ const matchedAddressWrapper = this.shadowRoot.querySelector('.matched');
115
+ const matchedAddressUse = this.shadowRoot.querySelector('.matched .use-matched');
116
+ const matchedAddressEntered = this.shadowRoot.querySelector('.matched .use-entered');
117
+
118
+ let cacheSearchQuery = '';
119
+
120
+ Array.from(this.shadowRoot.querySelectorAll('.title')).forEach((titleElement) => {
121
+ titleElement.innerHTML = title;
122
+ });
123
+
124
+ // #region functions
125
+ function checkFilled(component): void {
126
+ const preFilledAddress = component.shadowRoot.querySelector('.pre-filled-address');
127
+ let preFilled = true;
128
+ preFilledAddress.innerHTML = '';
129
+
130
+ Array.from(
131
+ component.querySelectorAll('input[required],input[data-required],select[required],select[data-required]')
132
+ ).forEach((input) => {
133
+ let value = input.hasAttribute('data-value') ? input.getAttribute('data-value') : input.value;
134
+
135
+ if (input.tagName == 'SELECT' && component.querySelector(`[value="${input.value}"][data-value]`))
136
+ value = component.querySelector(`[value="${input.value}"][data-value]`).getAttribute('data-value');
137
+
138
+ if (!value) {
139
+ if (input.closest('.atleastone')) {
140
+ if (!atleastone.querySelector('input:valid, input.is-valid')) {
141
+ preFilled = false;
142
+ }
143
+ } else {
144
+ preFilled = false;
145
+ }
146
+ } else {
147
+ preFilledAddress.innerHTML += value + (/^-?\d+$/.test(value) ? ' ' : ', ');
148
+ }
149
+ });
150
+
151
+ preFilledAddress.innerHTML = preFilledAddress.innerHTML.slice(0, -2);
152
+
153
+ // If has label then use that
154
+
155
+ if (preFilled) {
156
+ if (component.querySelector('[name="label"]'))
157
+ preFilledAddress.innerHTML = component.querySelector('[name="label"]').value;
158
+
159
+ // If has label then use that
160
+
161
+ preFilledWrapper.classList.remove('js-hide');
162
+ lookupWrapper.classList.add('js-hide');
163
+ manualWrapper.classList.add('js-hide');
164
+ }
165
+ }
166
+
167
+ function openManualWrapper(): void {
168
+ lookupWrapper.classList.add('js-hide');
169
+ manualWrapper.classList.remove('js-hide');
170
+
171
+ Array.from(manualWrapper.querySelectorAll('[data-required]')).forEach((input) => {
172
+ input.setAttribute('required', 'true');
173
+ });
174
+
175
+ manualWrapper.scrollIntoView();
176
+ }
177
+
178
+ const atleastoneValidate = (): void => {
179
+ if (atleastone.querySelector('input:valid, input.is-valid')) {
180
+ Array.from(atleastone.querySelectorAll('input')).forEach((element) => {
181
+ element.removeAttribute('required');
182
+ });
183
+ } else {
184
+ Array.from(atleastone.querySelectorAll('input')).forEach((input) => {
185
+ input.setAttribute('required', 'true');
186
+ });
187
+ }
188
+ };
189
+
190
+ const fillInputs = (values): void => {
191
+ lookupWrapper.classList.add('js-hide');
192
+ manualWrapper.classList.remove('js-hide');
193
+
194
+ Object.keys(values).forEach((key) => {
195
+ const value = values[key];
196
+ let input = false;
197
+ if (this.querySelector(`[data-name="${key}"]`)) input = this.querySelector(`[data-name="${key}"]`);
198
+ else if (this.querySelector(`[data-name-alt="${key}"]`)) input = this.querySelector(`[data-name-alt="${key}"]`);
199
+ else if (this.querySelector(`[name="${key}"]`)) input = this.querySelector(`[name="${key}"]`);
200
+
201
+ if (input && input.tagName == 'SELECT' && value.id) {
202
+ input.value = value.id;
203
+ } else if (input && value != '') {
204
+ input.value = value;
205
+
206
+ if (input.hasAttribute('data-readonly')) {
207
+ input.setAttribute('readonly', true);
208
+ input.classList.add('is-valid');
209
+ }
210
+ } else if (value != '') {
211
+ this.insertAdjacentHTML(
212
+ 'beforeend',
213
+ `<input type="hidden" class="inserted" data-hidden name="${key}" value="${value}" />`
214
+ );
215
+ }
216
+
217
+ if (this.querySelector(`[data-name-2="${key}"]`))
218
+ this.querySelector(`[data-name-2="${key}"]`).value += ' ' + value;
219
+ });
220
+
221
+ Array.from(this.querySelectorAll('[data-required]')).forEach((input) => {
222
+ input.setAttribute('required', 'true');
223
+ });
224
+ lookup.removeAttribute('required');
225
+
226
+ if (atleastone) {
227
+ atleastoneValidate();
228
+ }
229
+
230
+ if (!this.hasAttribute('data-force-manual')) checkFilled(this);
231
+ };
232
+
233
+ const search = async (searchValue, paginate = false): any => {
234
+ if (!paginate && searchValue === cacheSearchQuery) {
235
+ if (list?.children?.length) {
236
+ list?.classList.remove('loading');
237
+ list?.classList.remove('noresults');
238
+ listWrapper?.focus();
239
+ list?.querySelector('option')?.focus();
240
+ return true;
241
+ }
242
+ }
243
+
244
+ // check if postcode is valid
245
+ const limit = this.hasAttribute('data-limit') ? parseInt(this.getAttribute('data-limit')) : 100;
246
+
247
+ if (paginate) pageNumber++;
248
+ else pageNumber = 1;
249
+
250
+ let ajaxURL = this.getAttribute('data-url');
251
+ ajaxURL += `${encodeURI(searchValue)}&page[number]=${pageNumber}&page[size]=${limit}`;
252
+
253
+ if (this.hasAttribute('data-url-2')) {
254
+ ajaxURL += this.getAttribute('data-url-2');
255
+ }
256
+
257
+ const postcode = searchValue; // TODO: remove when postcode comes from response
258
+
259
+ if (this.hasAttribute('data-postcode')) {
260
+ if (!isValidPostcode(searchValue)) {
261
+ return 'Invalid postcode, please enter a valid postcode';
262
+ } else {
263
+ if (!paginate) list.innerHTML = '';
264
+ list?.classList.add('loading');
265
+ list?.classList.remove('noresults');
266
+ lookup?.classList.remove('is-invalid');
267
+ errorMsg?.innerHTML = '';
268
+ list?.classList.remove('show-welsh-banner');
269
+
270
+ Array.from(this.querySelectorAll('[data-required]')).forEach((input) => {
271
+ input.removeAttribute('required');
272
+ });
273
+ Array.from(this.querySelectorAll('[data-readonly]')).forEach((input) => {
274
+ input.removeAttribute('readonly');
275
+ input.classList.remove('is-valid');
276
+ });
277
+ Array.from(this.querySelectorAll('.inserted')).forEach((input) => {
278
+ input.remove();
279
+ });
280
+ }
281
+ }
282
+
283
+ this.classList.add('searched');
284
+ this.classList.add('was-validated');
285
+
286
+ // Setup controller vars if not already set
287
+ if (!window.controller) window.controller = [];
288
+
289
+ // Abort if controller already present for this url
290
+ if (window.controller[ajaxURL]) window.controller[ajaxURL].abort();
291
+
292
+ // Create a new controller so it can be aborted if new fetch made
293
+ window.controller[ajaxURL] = new AbortController();
294
+ const { signal } = window.controller[ajaxURL];
295
+
296
+ try {
297
+ return await fetch(ajaxURL, {
298
+ signal: signal,
299
+ method: 'get',
300
+ credentials: 'same-origin',
301
+ headers: new Headers({
302
+ 'Content-Type': 'application/json',
303
+ Accept: 'application/json',
304
+ 'X-Requested-With': 'XMLHttpRequest',
305
+ 'X-XSRF-TOKEN': Cookies.get('XSRF-TOKEN'),
306
+ }),
307
+ })
308
+ .then((response) => response.json())
309
+ .then((response) => {
310
+ // populate datalist
311
+ let listString = '';
312
+
313
+ const addresses = response['data'] ? response['data'] : response;
314
+
315
+ addresses.forEach((address) => {
316
+ // Deal with agent platform response
317
+ if (typeof address.attributes == 'object' && address.attributes.label) {
318
+ const attributes = {};
319
+
320
+ if (address.id) address.attributes.id = address.id;
321
+
322
+ if (address.relationships)
323
+ address.attributes = Object.assign(address.attributes, address.relationships);
324
+
325
+ Object.keys(address.attributes).forEach((key) => {
326
+
327
+ const attribute = address.attributes[key];
328
+
329
+ if(typeof attribute == 'object'){
330
+ attributes[key] = attribute?.id;
331
+ }
332
+ else {
333
+ attributes[key] = attribute;
334
+ }
335
+ });
336
+
337
+ const values = JSON.stringify(attributes);
338
+
339
+ listString += `<option data-values='${values}' >${address.attributes.label}</option>`;
340
+ } else if (typeof address.value == 'object') {
341
+ if (address.id) address.attributes.id = address.id;
342
+
343
+ if (address.relationships)
344
+ address.attributes = Object.assign(address.attributes, address.relationships);
345
+
346
+ const values = JSON.stringify(address.value);
347
+ listString += `<option data-values='${values}'>${address['label']}, ${postcode}</option>`;
348
+ } else {
349
+ const values = JSON.stringify(address);
350
+
351
+ if (dataDisplayText) {
352
+ listString += `<option data-values='${values}'>${address[dataDisplayText]}, ${postcode}</option>`;
353
+ } else {
354
+ let itemString = '';
355
+ for (const [key, value] of Object.entries(address)) {
356
+ if (key == 'address_number_name') itemString += `${value} `;
357
+ else if (key != 'postcode' && key != 'address_title' && key != 'group')
358
+ itemString += `${value}${/^-?\d+$/.test(value) ? '' : ','} `;
359
+ }
360
+
361
+ listString += `<option data-values='${values}'>${itemString}, ${postcode}</option>`; // TODO postcode should come from the response
362
+ }
363
+ }
364
+ });
365
+
366
+ if (paginate) list.innerHTML += listString;
367
+ else list.innerHTML = listString;
368
+
369
+ // Cache the search value to prevent further calls
370
+ cacheSearchQuery = searchValue;
371
+
372
+ if (addresses.length) {
373
+ list?.classList.remove('loading');
374
+ } else {
375
+ list?.classList.remove('loading');
376
+ list?.classList.add('noresults');
377
+ }
378
+
379
+ // pagination
380
+ if (
381
+ response.meta &&
382
+ response.meta.current_page &&
383
+ response.meta.total_pages &&
384
+ response.meta.total_pages > response.meta.current_page
385
+ ) {
386
+ paginationWrapper?.innerHTML = `<div class="bg-light text-center p-2"><p class="m-0">Showing 1-${response.meta.current_page * limit} of ${response.meta.total_results} addresses <br /><button type="button" data-next="${response.meta.current_page + 1}" class="mt-1 mb-0 btn btn-action"><i class="fa-regular fa-eye me-1"></i>Show more addresses</button></p></div>`;
387
+ } else {
388
+ paginationWrapper?.innerHTML = '';
389
+ }
390
+
391
+ if (response.meta && response.meta.welsh_language) {
392
+ list?.classList.add('show-welsh-banner');
393
+ }
394
+ listWrapper?.focus();
395
+ list?.querySelector('option')?.focus();
396
+
397
+ return true;
398
+ });
399
+ } catch (error) {
400
+ if (error?.name === 'AbortError') {
401
+ return true;
402
+ }
403
+ console.log(error);
404
+ return 'There has been a problem. Please try again in a few moments.';
405
+ }
406
+ };
407
+
408
+ let searchTimer: number | undefined;
409
+
410
+ const triggerSearch = (raw: string, paginate = false, immediate = false) => {
411
+ const value = (raw ?? '').trim();
412
+
413
+ if (value.length < minChars) return;
414
+
415
+ if (immediate) {
416
+ if (searchTimer) window.clearTimeout(searchTimer);
417
+ void search(value, paginate);
418
+ return;
419
+ }
420
+
421
+ if (searchTimer) window.clearTimeout(searchTimer);
422
+ searchTimer = window.setTimeout(() => {
423
+ void search(value, paginate);
424
+ }, 200);
425
+ };
426
+
427
+ // #endregion
428
+
429
+ // #region check attributes and trigger functions
430
+ if (!this.hasAttribute('data-force-manual')) checkFilled(this);
431
+
432
+ this.addEventListener('filled', () => {
433
+ if (!this.hasAttribute('data-force-manual')) checkFilled(this);
434
+ });
435
+
436
+ if (this.hasAttribute('data-use')) {
437
+ const useLabel = this.hasAttribute('data-use-label') ? this.getAttribute('data-use-label') : 'Use saved address';
438
+ const useCheckbox = `<div><input type="checkbox" name="use" id="use" value="yes"><label for="use">${useLabel}</label></div>`;
439
+
440
+ lookupWrapper.insertAdjacentHTML('afterbegin', useCheckbox);
441
+
442
+ this.shadowRoot.addEventListener('change', (event) => {
443
+ if (event && event.target instanceof HTMLElement && event.target.closest('[name="use"]')) {
444
+ const checkbox = event.target.closest('[name="use"]');
445
+
446
+ if (checkbox.checked) {
447
+ lookupWrapper.classList.add('js-hide');
448
+ manualWrapper.classList.remove('js-hide');
449
+
450
+ const values = JSON.parse(this.getAttribute('data-use'));
451
+
452
+ Object.keys(values).forEach((key) => {
453
+ const value = values[key];
454
+ if (this.querySelector(`[data-name="${key}"]`)) this.querySelector(`[data-name="${key}"]`).value = value;
455
+ else if (this.querySelector(`[name="${key}"]`)) this.querySelector(`[name="${key}"]`).value = value;
456
+ });
457
+ }
458
+ }
459
+ });
460
+
461
+ if (this.hasAttribute('data-use-default')) {
462
+ lookupWrapper.querySelector('[name="use"]').checked = true;
463
+
464
+ const values = JSON.parse(this.getAttribute('data-use'));
465
+ fillInputs(values);
466
+ }
467
+ }
468
+
469
+ if (this.hasAttribute('data-manual')) {
470
+ fillInputs({});
471
+ }
472
+
473
+ if (this.classList.contains('show-pagination'))
474
+ paginationWrapper?.innerHTML = `<div class="bg-light text-center p-2"><p class="m-0">Showing 1-500 of 585 addresses <br /><button type="button" data-next="2" class="mt-1 mb-0 btn btn-action"><i class="fa-regular fa-eye me-1"></i>Show more addresses</button></p></div>`;
475
+
476
+ if (this.classList.contains('scroll-to-bottom-results')) paginationWrapper.scrollIntoView({ container: 'nearest' });
477
+ // #endregion
478
+
479
+ // #region event listeners
480
+ preFilledAddressBtn.addEventListener('click', () => {
481
+ preFilledWrapper.classList.add('js-hide');
482
+ openManualWrapper();
483
+ });
484
+
485
+ preFilledAddressRemoveBtn.addEventListener('click', () => {
486
+ preFilledWrapper.classList.add('js-hide');
487
+ lookupWrapper.classList.remove('js-hide');
488
+ manualWrapper.classList.add('js-hide');
489
+
490
+ list.innerHTML = '';
491
+ list?.classList.remove('loading');
492
+ list?.classList.remove('noresults');
493
+ lookup?.classList.remove('is-invalid');
494
+ errorMsg?.innerHTML = '';
495
+ list?.classList.remove('show-welsh-banner');
496
+
497
+ lookup.focus();
498
+ lookup.value = '';
499
+
500
+ if (lookup?.hasAttribute('data-placeholder'))
501
+ lookup.setAttribute('placeholder', lookup?.getAttribute('data-placeholder'));
502
+
503
+ // empty fields
504
+ Array.from(this.querySelectorAll('input, select')).forEach((input) => {
505
+ input.value = '';
506
+ });
507
+
508
+ lookup.value = "";
509
+
510
+ // uncheck box
511
+ if (this.shadowRoot.querySelector('[name="use"]'))
512
+ this.shadowRoot.querySelector('[name="use"]').checked = false;
513
+
514
+ const updateEvent = new CustomEvent('switch-to-lookup');
515
+ this.dispatchEvent(updateEvent);
516
+
517
+ lookupWrapper.scrollIntoView();
518
+ });
519
+
520
+ switchManualBtn.addEventListener('click', () => {
521
+ openManualWrapper();
522
+ });
523
+
524
+ this.addEventListener('open-manual', () => {
525
+ openManualWrapper();
526
+ });
527
+
528
+ switchLookupBtn.addEventListener('click', () => {
529
+ lookupWrapper.classList.remove('js-hide');
530
+ manualWrapper.classList.add('js-hide');
531
+
532
+ const updateEvent = new CustomEvent('switch-to-lookup');
533
+ this.dispatchEvent(updateEvent);
534
+
535
+ lookupWrapper.scrollIntoView();
536
+ });
537
+
538
+ lookup.addEventListener('keyup', (e) => {
539
+ if (e.keyCode === 13) {
540
+ triggerSearch(lookup.value, false, true);
541
+ }
542
+ });
543
+
544
+ lookup.addEventListener('input', () => {
545
+ lookup.classList.remove('is-invalid');
546
+ if (errorMsg) errorMsg.innerHTML = '';
547
+
548
+ const v = (lookup.value ?? '').trim();
549
+
550
+ if (v.length < minChars) {
551
+ list.innerHTML = '';
552
+ if (paginationWrapper) {
553
+ paginationWrapper.innerHTML = '';
554
+ }
555
+ list?.classList.remove('loading', 'noresults');
556
+ cacheSearchQuery = '';
557
+ return;
558
+ }
559
+
560
+ triggerSearch(v);
561
+ });
562
+
563
+ list.addEventListener('click', (e) => {
564
+ if (e.target.tagName == 'OPTION') {
565
+ const values = JSON.parse(e.target.getAttribute('data-values'));
566
+
567
+ fillInputs(values);
568
+
569
+ if (this.shadowRoot.querySelector('[name="use"]'))
570
+ this.shadowRoot.querySelector('[name="use"]').checked = false;
571
+ }
572
+ });
573
+
574
+ atleastone?.addEventListener('input', (e) => {
575
+ Array.from(atleastone.querySelectorAll('[data-required]')).forEach((input) => {
576
+ input.setAttribute('required', 'true');
577
+ });
578
+
579
+ atleastoneValidate();
580
+ });
581
+
582
+ postcodeSubmit?.addEventListener('click', () => {
583
+ triggerSearch(lookup.value, false, true);
584
+ });
585
+
586
+ this?.addEventListener('close-button-pressed', () => {
587
+ list.innerHTML = '';
588
+ list?.classList.remove('loading');
589
+ list?.classList.remove('noresults');
590
+ lookup?.classList.remove('is-invalid');
591
+ errorMsg?.innerHTML = '';
592
+ list?.classList.remove('show-welsh-banner');
593
+
594
+ lookup.focus();
595
+ });
596
+
597
+ paginationWrapper?.addEventListener('click', (e) => {
598
+ if (e.target.tagName === 'BUTTON') {
599
+ triggerSearch(lookup.value, true, true);
600
+ }
601
+ });
602
+
603
+ // #endregion
604
+
605
+ // #region Matched address
606
+
607
+ if (this.hasAttribute('data-matched')) {
608
+ matchedAddressWrapper?.classList.remove('d-none');
609
+
610
+ if (this.hasAttribute('data-matched-label')) matchedAddress?.innerHTML = this.getAttribute('data-matched-label');
611
+
612
+ matchedAddressEntered?.addEventListener('click', () => {
613
+ matchedAddressWrapper?.remove();
614
+
615
+ const useCheckbox = this.shadowRoot?.querySelector('[name="use"]');
616
+ useCheckbox.checked = true;
617
+
618
+ lookupWrapper.classList.add('js-hide');
619
+ manualWrapper.classList.remove('js-hide');
620
+
621
+ const values = JSON.parse(this.getAttribute('data-use'));
622
+
623
+ Object.keys(values).forEach((key) => {
624
+ const value = values[key];
625
+ if (this.querySelector(`[data-name="${key}"]`)) this.querySelector(`[data-name="${key}"]`).value = value;
626
+ else if (this.querySelector(`[name="${key}"]`)) this.querySelector(`[name="${key}"]`).value = value;
627
+ });
628
+
629
+ checkFilled(this);
630
+ });
631
+
632
+ matchedAddressUse?.addEventListener('click', () => {
633
+ matchedAddressWrapper?.remove();
634
+
635
+ const values = JSON.parse(this.getAttribute('data-matched'));
636
+
637
+ fillInputs(values);
638
+ checkFilled(this);
639
+ });
640
+ } else {
641
+ matchedAddressWrapper?.remove();
642
+ }
643
+ // #endregion
644
+
645
+ advancedSelect(this, lookup, list, true);
646
+
647
+ if (this.hasAttribute('data-disabled'))
648
+ lookup?.setAttribute('disabled','disabled');
649
+ }
650
+
651
+ static get observedAttributes(): any {
652
+ return ['data-disabled'];
653
+ }
654
+
655
+ attributeChangedCallback(attrName, oldVal, newVal): void {
656
+ const lookup = this.shadowRoot.querySelector('[name="postcode"]');
657
+
658
+ switch (attrName) {
659
+ case 'data-disabled': {
660
+ if (oldVal != newVal && newVal == 'disabled') {
661
+ lookup?.setAttribute('disabled','disabled');
662
+ }
663
+ else if (oldVal != newVal) {
664
+ lookup?.removeAttribute('disabled');
665
+ }
666
+ break;
667
+ }
668
+ }
669
+ }
670
+ }
671
+
672
+ export default iamAddressLookup;