@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,594 +1,594 @@
1
- import { ucfirst, unsnake } from './helpers';
2
-
3
- // #region Functions that setup and trigger other functions
4
-
5
- export const addClasses = (chartElement: any, chartOuter: any): boolean => {
6
- // add colour classes
7
- for (let i = 1; i <= 10; i++) {
8
- if (chartElement.hasAttribute(`data-colour-${i}`)) {
9
- const colour = chartElement.getAttribute(`data-colour-${i}`);
10
- chartElement.style.setProperty(`--chart-colour-${i}`, `var(--chart-colour-${colour})`);
11
- chartElement.style.setProperty(`--chart-colour-${i}-hover`, `var(--chart-colour-${colour}-hover)`);
12
- }
13
-
14
- Array.from(chartOuter.querySelectorAll(`[data-colour-${i}]`)).forEach((element: HTMLElement) => {
15
- const colour = element.getAttribute(`data-colour-${i}`);
16
- element.style.setProperty(`--chart-colour-${i}`, `var(--chart-colour-${colour})`);
17
- element.style.setProperty(`--chart-colour-${i}-hover`, `var(--chart-colour-${colour}-hover)`);
18
- });
19
- }
20
-
21
- return true;
22
- };
23
-
24
- export const setupChart = (chartElement: any, chartOuter: any, tableElement: any): boolean => {
25
- if (chartElement.tagName == 'IAM-DOUGHNUTCHART') {
26
- setupDoughnutChart(chartElement, chartOuter, tableElement);
27
- return true;
28
- }
29
-
30
- // #region Reset the chart
31
- // empty divs to re-populate
32
- const chartKey = chartOuter.querySelector('.chart__key');
33
- chartKey.innerHTML = '';
34
- const chartGuidelines = chartOuter.querySelector('.chart__guidelines');
35
- chartGuidelines.innerHTML = ``;
36
- const chartYaxis = chartOuter.querySelector('.chart__yaxis');
37
- chartYaxis.innerHTML = ``;
38
-
39
- // Remove old input fields
40
- Array.from(chartOuter.querySelectorAll(':scope > input[type="checkbox"],:scope > input[type="radio"]')).map(
41
- (element: any) => {
42
- element.remove();
43
- }
44
- );
45
- // #endregion
46
-
47
- const { xaxis } = getChartData(chartElement);
48
-
49
- setCellData(chartElement, tableElement);
50
-
51
- createChartKey(chartOuter, tableElement, chartKey);
52
- createChartGuidelines(chartElement, chartGuidelines);
53
- createChartYaxis(chartElement, chartYaxis);
54
-
55
- if (xaxis) {
56
- createXaxis(chartOuter);
57
- }
58
-
59
- return true;
60
- };
61
-
62
- export const setupDoughnutChart = (chartElement: any, chartOuter: any, tableElement: any): boolean => {
63
- // #region Reset the chart
64
- // empty divs to re-populate
65
- const chartKey = chartOuter.querySelector('.chart__key');
66
- chartKey.innerHTML = '';
67
-
68
- // Remove old input fields
69
- Array.from(chartOuter.querySelectorAll(':scope > input[type="checkbox"],:scope > input[type="radio"]')).map(
70
- (element: any) => {
71
- element.remove();
72
- }
73
- );
74
- // #endregion
75
-
76
- setCellData(chartElement, tableElement);
77
-
78
- createChartKey(chartOuter, tableElement, chartKey);
79
- createdoughnuts(chartOuter);
80
-
81
- return true;
82
- };
83
- // #endregion
84
-
85
- // #region Event handlers and observers
86
- export const setEventListener = function (chartElement: any, chartOuter: any): void {
87
- const chart = chartOuter.querySelector('.chart');
88
- chart.addEventListener('mousemove', (event: any) => {
89
- if (event && event.target instanceof HTMLElement && event.target.closest('td:not(:first-child')) {
90
- const column = event.target.closest('td:not(:first-child');
91
-
92
- const rect = column.getBoundingClientRect();
93
-
94
- const x = event.clientX - rect.left;
95
- const y = event.clientY - rect.top;
96
- chart.setAttribute('style', `--cursor-x: ${x}px; --cursor-y: ${y}px;`);
97
- }
98
- });
99
-
100
- // Use the part for the chart items to pass through states to the pages CSS
101
- const labels = chartOuter.querySelectorAll('label');
102
-
103
- Array.from(labels).forEach((label: HTMLElement) => {
104
- if (chartOuter.querySelector(`input#${label.getAttribute('for')}`).checked)
105
- label.setAttribute('part', 'key-checked');
106
- else label.setAttribute('part', 'key-unchecked');
107
- });
108
-
109
- const table = chartElement.querySelector('table');
110
- const shadowTable = chartOuter.querySelector('table');
111
-
112
- chartOuter.addEventListener('change', function (event: any) {
113
- const eventTarget = event.target;
114
-
115
- const customEvent = new CustomEvent('view-change', {
116
- detail: {
117
- 'data-dataset': eventTarget.getAttribute('data-dataset'),
118
- label: eventTarget.getAttribute('data-label'),
119
- checked: eventTarget.checked,
120
- },
121
- });
122
-
123
- chartElement.dispatchEvent(customEvent);
124
-
125
- Array.from(labels).forEach((label: HTMLElement) => {
126
- if (chartOuter.querySelector(`input#${label.getAttribute('for')}`)?.checked)
127
- label.setAttribute('part', 'key-checked');
128
- else label.setAttribute('part', 'key-unchecked');
129
- });
130
-
131
- shadowTable.innerHTML = table.innerHTML;
132
- setCellData(chartElement, shadowTable);
133
-
134
- if (chartElement.tagName == 'IAM-DOUGHNUTCHART') {
135
- createdoughnuts(chartOuter);
136
- }
137
- });
138
- };
139
-
140
- export const setEventObservers = function (chartElement: any, chartOuter: any): boolean {
141
- const table = chartElement.querySelector('table');
142
- const shadowTable = chartOuter.querySelector('table');
143
-
144
- const attributesUpdated = (mutationList: any, observer: any): void => {
145
- observer.disconnect();
146
- observer2.disconnect();
147
-
148
- for (const mutation of mutationList) {
149
- if (mutation.attributeName == 'class' || mutation.type === 'attributes' || mutation.type === 'attributes') {
150
- shadowTable.innerHTML = table.innerHTML;
151
- setupChart(chartElement, chartOuter, shadowTable);
152
- }
153
- }
154
-
155
- observer.observe(table, { characterData: true, subtree: true });
156
- observer2.observe(chartElement, { attributes: true });
157
- };
158
-
159
- const tableUpdated = (mutationList: any, observer: any): void => {
160
- observer.disconnect();
161
- observer2.disconnect();
162
-
163
- for (const mutation of mutationList) {
164
- if (mutation.type == 'characterData' || (mutation.type == 'childList' && mutation.addedNodes.length)) {
165
- shadowTable.innerHTML = table.innerHTML;
166
- setupChart(chartElement, chartOuter, shadowTable);
167
- }
168
- }
169
-
170
- observer.observe(table, { characterData: true, subtree: true });
171
- observer2.observe(chartElement, { attributes: true });
172
- };
173
-
174
- const observer = new MutationObserver(tableUpdated);
175
- const observer2 = new MutationObserver(attributesUpdated);
176
-
177
- observer.observe(table, { characterData: true, subtree: true });
178
- observer2.observe(chartElement, { attributes: true });
179
-
180
- return true;
181
- };
182
-
183
- function getCoordinatesForPercent(percent: number, doughnutCount: number): any {
184
- // This moves the start point to the top middle point like a clock
185
- if (doughnutCount > 1) percent = percent - 0.25;
186
-
187
- const x = Math.cos(2 * Math.PI * percent);
188
- const y = Math.sin(2 * Math.PI * percent);
189
- return [x * 100, y * 100];
190
- }
191
- // #endregion
192
-
193
- // #region GET functions
194
- export const getChartData = function (chartElement: any): any {
195
- const table = chartElement.shadowRoot.querySelector('.chart__wrapper table');
196
-
197
- const min: any = chartElement.hasAttribute('data-min') ? chartElement.getAttribute('data-min') : 0;
198
- const max: any = chartElement.hasAttribute('data-max')
199
- ? chartElement.getAttribute('data-max')
200
- : getLargestValue(chartElement, table);
201
- //let type:string = chartElement.hasAttribute('data-type') ? chartElement.getAttribute('data-type') : 'column';
202
- const yaxis: any = chartElement.hasAttribute('data-yaxis') ? chartElement.getAttribute('data-yaxis').split(',') : [];
203
- const guidelines: any = chartElement.hasAttribute('data-guidelines')
204
- ? chartElement.getAttribute('data-guidelines').split(',')
205
- : [];
206
- //let targets:any = chartElement.hasAttribute('data-targets') ? JSON.parse(chartElement.getAttribute('data-targets')) : null;
207
- //let events:any = chartElement.hasAttribute('data-events') ? JSON.parse(chartElement.getAttribute('data-events')) : null;
208
- const xaxis: any = chartElement.hasAttribute('data-xaxis')
209
- ? chartElement.getAttribute('data-xaxis').split(',')
210
- : null;
211
- //let increment = chartElement.hasAttribute('data-increment') ? chartElement.getAttribute('data-increment'): null;
212
-
213
- //let start:any = chartElement.hasAttribute('data-start') ? chartElement.getAttribute('data-start') : 0;
214
- //let end:any = chartElement.hasAttribute('data-end') ? chartElement.getAttribute('data-end') : getLargestValue(chartElement,table); // TODO - get largest value from the data-xaxis
215
-
216
- //let slope:any = chartElement.hasAttribute('data-slope') ? chartElement.getAttribute('data-slope') : null;
217
- //let yInt:any = chartElement.hasAttribute('data-yint') ? chartElement.getAttribute('data-yint') : null;
218
-
219
- return { min, max, yaxis, xaxis, guidelines };
220
- };
221
-
222
- function getLargestValue(chartElement: any, table: any): number {
223
- const selector = chartElement.classList.contains('chart--stacked') ? 'tbody tr' : 'tbody td:not(:first-child)';
224
-
225
- const values = Array.from(table.querySelectorAll(selector)).map((element: any) => {
226
- const currentValue = element.getAttribute('data-numeric');
227
-
228
- return currentValue;
229
- });
230
-
231
- const largestValue: number = Math.max(...values);
232
-
233
- // TO DO round to the nearest 10, 100, 1000 and so on
234
- return Math.ceil(largestValue);
235
- }
236
-
237
- const getValues = function (value: number, min: any, max: any, start?: number): any {
238
- let cleanValue: string | number = String(value);
239
- cleanValue = cleanValue.replace('£', '');
240
- cleanValue = cleanValue.replace('%', '');
241
- cleanValue = cleanValue.replace(',', '');
242
- cleanValue = Number.parseFloat(cleanValue);
243
-
244
- let percent = ((cleanValue - min) / (max - min)) * 100;
245
- let axis = percent;
246
- let bottom = 0;
247
-
248
- if (start && start != 0) {
249
- bottom = ((start - min) / (max - min)) * 100;
250
- }
251
-
252
- // If the value is negative the position below the 0 line
253
- if (min < 0) {
254
- bottom = Math.abs((min / (max - min)) * 100);
255
-
256
- if (cleanValue < 0) {
257
- percent = bottom - percent;
258
- bottom = bottom - percent;
259
- axis = bottom;
260
- } else {
261
- percent = percent - bottom;
262
- axis = percent + bottom;
263
- }
264
- }
265
-
266
- return { percent, axis, bottom };
267
- };
268
-
269
- // #endregion
270
-
271
- // #region SET functions - set data attributes and classes
272
- export const setCellData = function (chartElement: any, table: any): void {
273
- Array.from(table.querySelectorAll('tbody tr')).forEach((tr: any) => {
274
- let rowValue = 0;
275
- // Set the data numeric value if not set
276
- Array.from(tr.querySelectorAll('td:not(:first-child)')).forEach((td: any) => {
277
- // Ignore the buttons and links inside
278
- const copyTD = td.cloneNode(true);
279
- Array.from(copyTD.querySelectorAll('*')).forEach((element: any) => {
280
- element.remove();
281
- });
282
-
283
- const value = parseFloat(copyTD.textContent.replace('£', '').replace('%', '').replace(',', ''));
284
-
285
- td.setAttribute('data-numeric', value);
286
- td.setAttribute('data-value', copyTD.textContent);
287
-
288
- const display = getComputedStyle(td).display;
289
-
290
- if (display != 'none') rowValue += value;
291
-
292
- Array.from(td.querySelectorAll('a, button')).forEach((element: any, index: number) => {
293
- if (index == 0) {
294
- element.insertAdjacentHTML('beforeBegin', '<hr/>');
295
- }
296
-
297
- element.classList.add('btn');
298
- element.classList.add('btn-tertiary');
299
- });
300
- });
301
-
302
- tr.setAttribute('data-numeric', rowValue);
303
- });
304
-
305
- const { min, max } = getChartData(chartElement);
306
-
307
- Array.from(table.querySelectorAll('tbody tr')).forEach((tr: any, index) => {
308
- const group = tr.querySelector('td:first-child, th:first-child')
309
- ? tr.querySelector('td:first-child, th:first-child').textContent
310
- : '';
311
-
312
- tr.setAttribute('part', 'group');
313
-
314
- const percent = ((tr.getAttribute('data-numeric') - min) / (max - min)) * 100;
315
-
316
- tr.style.setProperty('--percent', `${percent}%`);
317
-
318
- // Set the data label value if not set
319
- Array.from(tr.querySelectorAll('td:not([data-label])')).forEach((td: any, index) => {
320
- if (index == 0)
321
- td.setAttribute('part', 'xaxis-label'); // PART
322
- else td.setAttribute('part', 'value');
323
-
324
- if (tr.querySelectorAll('td').length > 2)
325
- td.setAttribute('data-label', table.querySelectorAll('thead th')[index].textContent);
326
- });
327
-
328
- const rowMin = tr.hasAttribute('data-min') ? tr.getAttribute('data-min') : min;
329
- const rowMax = tr.hasAttribute('data-max') ? tr.getAttribute('data-max') : max;
330
-
331
- if (rowMin < 0) {
332
- const minBottom = Math.abs((rowMin / (rowMax - rowMin)) * 100);
333
- chartElement.setAttribute('style', `--min-bottom: ${minBottom}%;`);
334
- }
335
-
336
- // Add a useful index css var for the use of animatons.
337
- tr.style.setProperty('--row-index', index + 1);
338
-
339
- // Add css vars to cells
340
- Array.from(
341
- tr.querySelectorAll('td[data-numeric]:not([data-label="Min"]):not([data-label="Max"]):not(:first-child)')
342
- ).forEach((td: any) => {
343
- const display = getComputedStyle(td).display;
344
- if (display == 'none') return;
345
-
346
- const content = td.innerHTML;
347
- const value = Number.parseFloat(td.getAttribute('data-numeric'));
348
- const start = Number.parseFloat(td.getAttribute('data-start'));
349
-
350
- if (!td.querySelector('span[data-group]'))
351
- td.innerHTML = `<span data-group="${group}" ${td.hasAttribute('data-label') ? `data-label="${td.getAttribute('data-label')}"` : ''} part="popover">${content}</span>`;
352
-
353
- if (!td.hasAttribute('style')) {
354
- const { percent, bottom, axis } = getValues(value, rowMin, rowMax, start);
355
-
356
- td.setAttribute('data-percent', percent);
357
- td.setAttribute('style', `--bottom:${bottom}%;--percent:${percent}%;--axis:${axis}%;`);
358
- }
359
- });
360
- });
361
- };
362
-
363
- export const setLongestLabel = function (chartOuter: any): void {
364
- const chartWrapper = chartOuter.querySelector('.chart__wrapper');
365
- const chartSpacer = chartOuter.querySelector('.chart__spacer span');
366
- const table = chartOuter.querySelector('.chart table');
367
- // set the longest label attr so that the bar chart knows what margin to set on the left
368
- let longestLabel = '';
369
- Array.from(table.querySelectorAll('tbody tr td:first-child')).forEach((td: any) => {
370
- if (typeof td.textContent != 'undefined' && td.textContent.length > longestLabel.length) {
371
- longestLabel = td.textContent;
372
- }
373
- });
374
- chartWrapper.setAttribute('data-longest-label', longestLabel);
375
- chartSpacer.innerHTML = longestLabel;
376
- };
377
-
378
- export const setLongestValue = function (chartOuter: any): void {
379
- const chartWrapper = chartOuter.querySelector('.chart__wrapper');
380
- const table = chartOuter.querySelector('.chart table');
381
-
382
- let longestValue = '';
383
- Array.from(table.querySelectorAll('tbody tr td:not(:first-child)')).forEach((td: any) => {
384
- if (
385
- typeof td.getAttribute('data-value') != 'undefined' &&
386
- td.getAttribute('data-value').length > longestValue.length
387
- ) {
388
- longestValue = td.getAttribute('data-value');
389
- }
390
- });
391
- chartWrapper.setAttribute('data-longest-value', longestValue);
392
- };
393
- // #endregion
394
-
395
- // #region CREATE function
396
-
397
- export const createChartKey = function (chartOuter: any, tableElement: any, chartKey: any): boolean {
398
- const chartID = `chart-${Date.now() + (Math.floor(Math.random() * 100) + 1)}`;
399
- //const chartOuter = chartElement.querySelector('.chart__outer');
400
-
401
- let previousInput: any;
402
-
403
- const headings = Array.from(tableElement.querySelectorAll('thead th'));
404
-
405
- headings.forEach((arrayElement: any, index) => {
406
- if (index != 0) {
407
- previousInput = createChartKeyItem(chartID, index, arrayElement.textContent, chartKey, chartOuter, previousInput);
408
- }
409
-
410
- if (index == 50) {
411
- headings.length = index + 1;
412
- }
413
- });
414
-
415
- return true;
416
- };
417
-
418
- function createChartKeyItem(
419
- chartID: string,
420
- index: number,
421
- text: Array<string>,
422
- chartKey: any,
423
- chartOuter: any,
424
- previousInput: any
425
- ): any {
426
- const input = document.createElement('input');
427
- input.setAttribute('name', `${chartID}-dataset-${index}`);
428
- input.setAttribute('id', `${chartID}-dataset-${index}`);
429
- input.setAttribute('data-dataset', `${index}`);
430
- input.setAttribute('data-label', `${text}`);
431
- input.checked = true;
432
- input.setAttribute('type', `checkbox`);
433
-
434
- if (index == 1) chartOuter.prepend(input);
435
- else chartOuter.insertBefore(input, previousInput.nextSibling);
436
-
437
- previousInput = input;
438
-
439
- const label = document.createElement('label');
440
- label.setAttribute('class', `key btn btn-action`);
441
- label.setAttribute('for', `${chartID}-dataset-${index}`);
442
- label.setAttribute('data-label', `${text}`);
443
- label.setAttribute('part', `key`);
444
-
445
- const total = chartOuter.querySelector(`tbody tr td:nth-child(${index + 1})`)?.getAttribute('data-numeric');
446
-
447
- label.setAttribute('data-numeric', total);
448
- label.innerHTML = `${text}`;
449
- chartKey.append(label);
450
-
451
- return previousInput;
452
- }
453
-
454
- export const createChartGuidelines = function (chartElement: any, chartGuidelines: any): any {
455
- const { min, max, yaxis } = getChartData(chartElement);
456
- let { guidelines } = getChartData(chartElement);
457
-
458
- if (!guidelines.length) guidelines = yaxis;
459
-
460
- chartGuidelines.innerHTML = '';
461
- for (let i = 0; i < guidelines.length; i++) {
462
- const value = parseFloat(guidelines[i].replace('£', '').replace('%', '').replace(',', ''));
463
-
464
- const { axis } = getValues(value, min, max);
465
- chartGuidelines.innerHTML += `<div class="guideline" style="--percent:${axis}%;">${yaxis.indexOf(guidelines[i]) != -1 ? `<span>${guidelines[i]}</span>` : ''}</div>`;
466
- }
467
- };
468
-
469
- export const createChartYaxis = function (chartElement: any, chartYaxis: any): void {
470
- const { min, max, yaxis } = getChartData(chartElement);
471
-
472
- chartYaxis.innerHTML = '';
473
- for (let i = 0; i < yaxis.length; i++) {
474
- const value = parseFloat(yaxis[i].replace('£', '').replace('%', ''));
475
-
476
- const { axis } = getValues(value, min, max);
477
- chartYaxis.innerHTML += `<div class="axis__point" style="--percent:${axis}%;"><span>${yaxis[i]}</span></div>`;
478
- }
479
- };
480
-
481
- export const createXaxis = function (chartOuter: any): void {
482
- const chart = chartOuter.querySelector('.chart');
483
- let chartXaxis = chartOuter.querySelector('.chart__xaxis');
484
-
485
- if (!chartXaxis) {
486
- chartXaxis = document.createElement('div');
487
- chartXaxis.setAttribute('class', 'chart__xaxis');
488
- }
489
-
490
- chart.prepend(chartXaxis);
491
- };
492
-
493
- export const createTooltips = function (chartOuter: any): void {
494
- const titles = chartOuter.querySelectorAll(
495
- 'thead th[title], tbody th[title]:first-child, tbody td[title]:first-child'
496
- );
497
-
498
- Array.from(titles).forEach((title: HTMLElement) => {
499
- const tooltipId = `tooltip-${Date.now()}-${Math.floor(Math.random() * 100)}`;
500
-
501
- title.innerHTML = `<button class="tooltip" popovertarget="${tooltipId}" part="tooltip" style="anchor-name: --${tooltipId};">${title.textContent}</button><span id="${tooltipId}" style="position-anchor: --${tooltipId};" popover part="tooltip__content" class="tooltip__content">${title.getAttribute('title')}</span>`;
502
-
503
- //title.removeAttribute('title'); // TODO add a supports query for anchor positioning
504
- });
505
- };
506
-
507
- export const createdoughnuts = function (chartOuter: any): void {
508
- let returnString = '';
509
- const chartInner = chartOuter.querySelector('.chart');
510
- let doughnutWrapper = chartOuter.querySelector('.doughnuts');
511
-
512
- if (!doughnutWrapper) {
513
- doughnutWrapper = document.createElement('div');
514
- doughnutWrapper.setAttribute('class', 'doughnuts');
515
- chartInner.append(doughnutWrapper);
516
- }
517
-
518
- Array.from(chartInner.querySelectorAll('tbody tr')).forEach((item: any, index) => {
519
- let paths = '';
520
- let tooltips = '';
521
- let cumulativePercent = 0;
522
- let total = 0;
523
- const titleKey = item.querySelectorAll('td')[0];
524
- const title = titleKey.innerHTML;
525
- let doughnutCount = 0;
526
- const rowTotal = item.getAttribute('data-numeric');
527
-
528
- // Work out the total amount
529
- Array.from(item.querySelectorAll('td')).forEach((td: any, subindex) => {
530
- const display = getComputedStyle(td).display;
531
-
532
- if (subindex != 0 && display != 'none') {
533
- let value = td.getAttribute('data-numeric');
534
-
535
- value = value.replace('£', '');
536
- value = value.replace('%', '');
537
- value = value.replace(',', '');
538
- value = Number.parseInt(value);
539
-
540
- total += value;
541
- doughnutCount++;
542
- }
543
- });
544
-
545
- // Create the paths
546
- Array.from(item.querySelectorAll('td')).forEach((td: any, subindex) => {
547
- const display = getComputedStyle(td).display;
548
-
549
- if (subindex != 0 && doughnutCount == 1 && display != 'none') {
550
- const pathData = `M 0 0 L 100 0 A 100 100 0 1 1 100 -0.01 L 0 0`;
551
-
552
- paths += `<path d="${pathData}" style="${td.getAttribute('style')} --path-index: ${subindex};"></path>`;
553
- tooltips += `<span class="h5 mb-0" part="popover">${ucfirst(unsnake(td.getAttribute('data-label'))).trim()}<br/>${td.hasAttribute('data-second') ? `${td.getAttribute('data-second-label')}: ${td.getAttribute('data-second')}<br/>` : ''}${td.querySelector('[part="popover"]')?.innerHTML}</span>`;
554
- } else if (subindex != 0) {
555
- let value = td.getAttribute('data-numeric');
556
- const hide = display == 'none' ? 'display: none;' : '';
557
-
558
- value = value.replace('£', '');
559
- value = value.replace('%', '');
560
- value = value.replace(',', '');
561
- value = Number.parseInt(value);
562
-
563
- const percent = value / total;
564
- const [startX, startY] = getCoordinatesForPercent(cumulativePercent, doughnutCount);
565
- const [endX, endY] = getCoordinatesForPercent(cumulativePercent + percent, doughnutCount);
566
- const largeArcFlag = percent > 0.5 ? 1 : 0; // if the slice is more than 50%, take the large arc (the long way around)
567
- const pathData = [
568
- `M 0 0`,
569
- `L ${startX ? startX.toFixed(0) : 0} ${startY ? startY.toFixed(0) : 0}`, // Move
570
- `A 100 100 0 ${largeArcFlag} 1 ${endX ? endX.toFixed(0) : 0} ${endY ? endY.toFixed(0) : 0}`, // Arc
571
- `L 0 0`, // Line
572
- ].join(' ');
573
-
574
- paths += `<path d="${pathData}" style="${td.getAttribute('style')} --path-index: ${subindex};${hide}"></path>`;
575
- tooltips += `<span class="h5 mb-0" part="popover">${ucfirst(unsnake(td.getAttribute('data-label'))).trim()}<br/>${td.hasAttribute('data-second') ? `${td.getAttribute('data-second-label')}: ${td.getAttribute('data-second')}<br/>` : ''}${td.querySelector('[part="popover"]')?.innerHTML}</span>`;
576
-
577
- // each slice starts where the last slice ended, so keep a cumulative percent
578
- if (display != 'none') cumulativePercent += percent;
579
- }
580
- });
581
-
582
- returnString += `<div class="doughnut">
583
- <svg viewBox="-105 -105 210 210" preserveAspectRatio="none" style="--row-index: ${index + 1};">${paths}</svg>
584
- <div class="doughnut__title" data-numeric="${rowTotal}"><span class="h5 mb-0">${title}</span></div>
585
- <div class="tooltips">${tooltips}</div>
586
- </div>`;
587
- });
588
-
589
- doughnutWrapper.innerHTML = returnString;
590
- };
591
-
592
- // #endregion
593
-
594
- export default setupChart;
1
+ import { ucfirst, unsnake } from './helpers';
2
+
3
+ // #region Functions that setup and trigger other functions
4
+
5
+ export const addClasses = (chartElement: any, chartOuter: any): boolean => {
6
+ // add colour classes
7
+ for (let i = 1; i <= 10; i++) {
8
+ if (chartElement.hasAttribute(`data-colour-${i}`)) {
9
+ const colour = chartElement.getAttribute(`data-colour-${i}`);
10
+ chartElement.style.setProperty(`--chart-colour-${i}`, `var(--chart-colour-${colour})`);
11
+ chartElement.style.setProperty(`--chart-colour-${i}-hover`, `var(--chart-colour-${colour}-hover)`);
12
+ }
13
+
14
+ Array.from(chartOuter.querySelectorAll(`[data-colour-${i}]`)).forEach((element: HTMLElement) => {
15
+ const colour = element.getAttribute(`data-colour-${i}`);
16
+ element.style.setProperty(`--chart-colour-${i}`, `var(--chart-colour-${colour})`);
17
+ element.style.setProperty(`--chart-colour-${i}-hover`, `var(--chart-colour-${colour}-hover)`);
18
+ });
19
+ }
20
+
21
+ return true;
22
+ };
23
+
24
+ export const setupChart = (chartElement: any, chartOuter: any, tableElement: any): boolean => {
25
+ if (chartElement.tagName == 'IAM-DOUGHNUTCHART') {
26
+ setupDoughnutChart(chartElement, chartOuter, tableElement);
27
+ return true;
28
+ }
29
+
30
+ // #region Reset the chart
31
+ // empty divs to re-populate
32
+ const chartKey = chartOuter.querySelector('.chart__key');
33
+ chartKey.innerHTML = '';
34
+ const chartGuidelines = chartOuter.querySelector('.chart__guidelines');
35
+ chartGuidelines.innerHTML = ``;
36
+ const chartYaxis = chartOuter.querySelector('.chart__yaxis');
37
+ chartYaxis.innerHTML = ``;
38
+
39
+ // Remove old input fields
40
+ Array.from(chartOuter.querySelectorAll(':scope > input[type="checkbox"],:scope > input[type="radio"]')).map(
41
+ (element: any) => {
42
+ element.remove();
43
+ }
44
+ );
45
+ // #endregion
46
+
47
+ const { xaxis } = getChartData(chartElement);
48
+
49
+ setCellData(chartElement, tableElement);
50
+
51
+ createChartKey(chartOuter, tableElement, chartKey);
52
+ createChartGuidelines(chartElement, chartGuidelines);
53
+ createChartYaxis(chartElement, chartYaxis);
54
+
55
+ if (xaxis) {
56
+ createXaxis(chartOuter);
57
+ }
58
+
59
+ return true;
60
+ };
61
+
62
+ export const setupDoughnutChart = (chartElement: any, chartOuter: any, tableElement: any): boolean => {
63
+ // #region Reset the chart
64
+ // empty divs to re-populate
65
+ const chartKey = chartOuter.querySelector('.chart__key');
66
+ chartKey.innerHTML = '';
67
+
68
+ // Remove old input fields
69
+ Array.from(chartOuter.querySelectorAll(':scope > input[type="checkbox"],:scope > input[type="radio"]')).map(
70
+ (element: any) => {
71
+ element.remove();
72
+ }
73
+ );
74
+ // #endregion
75
+
76
+ setCellData(chartElement, tableElement);
77
+
78
+ createChartKey(chartOuter, tableElement, chartKey);
79
+ createdoughnuts(chartOuter);
80
+
81
+ return true;
82
+ };
83
+ // #endregion
84
+
85
+ // #region Event handlers and observers
86
+ export const setEventListener = function (chartElement: any, chartOuter: any): void {
87
+ const chart = chartOuter.querySelector('.chart');
88
+ chart.addEventListener('mousemove', (event: any) => {
89
+ if (event && event.target instanceof HTMLElement && event.target.closest('td:not(:first-child')) {
90
+ const column = event.target.closest('td:not(:first-child');
91
+
92
+ const rect = column.getBoundingClientRect();
93
+
94
+ const x = event.clientX - rect.left;
95
+ const y = event.clientY - rect.top;
96
+ chart.setAttribute('style', `--cursor-x: ${x}px; --cursor-y: ${y}px;`);
97
+ }
98
+ });
99
+
100
+ // Use the part for the chart items to pass through states to the pages CSS
101
+ const labels = chartOuter.querySelectorAll('label');
102
+
103
+ Array.from(labels).forEach((label: HTMLElement) => {
104
+ if (chartOuter.querySelector(`input#${label.getAttribute('for')}`).checked)
105
+ label.setAttribute('part', 'key-checked');
106
+ else label.setAttribute('part', 'key-unchecked');
107
+ });
108
+
109
+ const table = chartElement.querySelector('table');
110
+ const shadowTable = chartOuter.querySelector('table');
111
+
112
+ chartOuter.addEventListener('change', function (event: any) {
113
+ const eventTarget = event.target;
114
+
115
+ const customEvent = new CustomEvent('view-change', {
116
+ detail: {
117
+ 'data-dataset': eventTarget.getAttribute('data-dataset'),
118
+ label: eventTarget.getAttribute('data-label'),
119
+ checked: eventTarget.checked,
120
+ },
121
+ });
122
+
123
+ chartElement.dispatchEvent(customEvent);
124
+
125
+ Array.from(labels).forEach((label: HTMLElement) => {
126
+ if (chartOuter.querySelector(`input#${label.getAttribute('for')}`)?.checked)
127
+ label.setAttribute('part', 'key-checked');
128
+ else label.setAttribute('part', 'key-unchecked');
129
+ });
130
+
131
+ shadowTable.innerHTML = table.innerHTML;
132
+ setCellData(chartElement, shadowTable);
133
+
134
+ if (chartElement.tagName == 'IAM-DOUGHNUTCHART') {
135
+ createdoughnuts(chartOuter);
136
+ }
137
+ });
138
+ };
139
+
140
+ export const setEventObservers = function (chartElement: any, chartOuter: any): boolean {
141
+ const table = chartElement.querySelector('table');
142
+ const shadowTable = chartOuter.querySelector('table');
143
+
144
+ const attributesUpdated = (mutationList: any, observer: any): void => {
145
+ observer.disconnect();
146
+ observer2.disconnect();
147
+
148
+ for (const mutation of mutationList) {
149
+ if (mutation.attributeName == 'class' || mutation.type === 'attributes' || mutation.type === 'attributes') {
150
+ shadowTable.innerHTML = table.innerHTML;
151
+ setupChart(chartElement, chartOuter, shadowTable);
152
+ }
153
+ }
154
+
155
+ observer.observe(table, { characterData: true, subtree: true });
156
+ observer2.observe(chartElement, { attributes: true });
157
+ };
158
+
159
+ const tableUpdated = (mutationList: any, observer: any): void => {
160
+ observer.disconnect();
161
+ observer2.disconnect();
162
+
163
+ for (const mutation of mutationList) {
164
+ if (mutation.type == 'characterData' || (mutation.type == 'childList' && mutation.addedNodes.length)) {
165
+ shadowTable.innerHTML = table.innerHTML;
166
+ setupChart(chartElement, chartOuter, shadowTable);
167
+ }
168
+ }
169
+
170
+ observer.observe(table, { characterData: true, subtree: true });
171
+ observer2.observe(chartElement, { attributes: true });
172
+ };
173
+
174
+ const observer = new MutationObserver(tableUpdated);
175
+ const observer2 = new MutationObserver(attributesUpdated);
176
+
177
+ observer.observe(table, { characterData: true, subtree: true });
178
+ observer2.observe(chartElement, { attributes: true });
179
+
180
+ return true;
181
+ };
182
+
183
+ function getCoordinatesForPercent(percent: number, doughnutCount: number): any {
184
+ // This moves the start point to the top middle point like a clock
185
+ if (doughnutCount > 1) percent = percent - 0.25;
186
+
187
+ const x = Math.cos(2 * Math.PI * percent);
188
+ const y = Math.sin(2 * Math.PI * percent);
189
+ return [x * 100, y * 100];
190
+ }
191
+ // #endregion
192
+
193
+ // #region GET functions
194
+ export const getChartData = function (chartElement: any): any {
195
+ const table = chartElement.shadowRoot.querySelector('.chart__wrapper table');
196
+
197
+ const min: any = chartElement.hasAttribute('data-min') ? chartElement.getAttribute('data-min') : 0;
198
+ const max: any = chartElement.hasAttribute('data-max')
199
+ ? chartElement.getAttribute('data-max')
200
+ : getLargestValue(chartElement, table);
201
+ //let type:string = chartElement.hasAttribute('data-type') ? chartElement.getAttribute('data-type') : 'column';
202
+ const yaxis: any = chartElement.hasAttribute('data-yaxis') ? chartElement.getAttribute('data-yaxis').split(',') : [];
203
+ const guidelines: any = chartElement.hasAttribute('data-guidelines')
204
+ ? chartElement.getAttribute('data-guidelines').split(',')
205
+ : [];
206
+ //let targets:any = chartElement.hasAttribute('data-targets') ? JSON.parse(chartElement.getAttribute('data-targets')) : null;
207
+ //let events:any = chartElement.hasAttribute('data-events') ? JSON.parse(chartElement.getAttribute('data-events')) : null;
208
+ const xaxis: any = chartElement.hasAttribute('data-xaxis')
209
+ ? chartElement.getAttribute('data-xaxis').split(',')
210
+ : null;
211
+ //let increment = chartElement.hasAttribute('data-increment') ? chartElement.getAttribute('data-increment'): null;
212
+
213
+ //let start:any = chartElement.hasAttribute('data-start') ? chartElement.getAttribute('data-start') : 0;
214
+ //let end:any = chartElement.hasAttribute('data-end') ? chartElement.getAttribute('data-end') : getLargestValue(chartElement,table); // TODO - get largest value from the data-xaxis
215
+
216
+ //let slope:any = chartElement.hasAttribute('data-slope') ? chartElement.getAttribute('data-slope') : null;
217
+ //let yInt:any = chartElement.hasAttribute('data-yint') ? chartElement.getAttribute('data-yint') : null;
218
+
219
+ return { min, max, yaxis, xaxis, guidelines };
220
+ };
221
+
222
+ function getLargestValue(chartElement: any, table: any): number {
223
+ const selector = chartElement.classList.contains('chart--stacked') ? 'tbody tr' : 'tbody td:not(:first-child)';
224
+
225
+ const values = Array.from(table.querySelectorAll(selector)).map((element: any) => {
226
+ const currentValue = element.getAttribute('data-numeric');
227
+
228
+ return currentValue;
229
+ });
230
+
231
+ const largestValue: number = Math.max(...values);
232
+
233
+ // TO DO round to the nearest 10, 100, 1000 and so on
234
+ return Math.ceil(largestValue);
235
+ }
236
+
237
+ const getValues = function (value: number, min: any, max: any, start?: number): any {
238
+ let cleanValue: string | number = String(value);
239
+ cleanValue = cleanValue.replace('£', '');
240
+ cleanValue = cleanValue.replace('%', '');
241
+ cleanValue = cleanValue.replace(',', '');
242
+ cleanValue = Number.parseFloat(cleanValue);
243
+
244
+ let percent = ((cleanValue - min) / (max - min)) * 100;
245
+ let axis = percent;
246
+ let bottom = 0;
247
+
248
+ if (start && start != 0) {
249
+ bottom = ((start - min) / (max - min)) * 100;
250
+ }
251
+
252
+ // If the value is negative the position below the 0 line
253
+ if (min < 0) {
254
+ bottom = Math.abs((min / (max - min)) * 100);
255
+
256
+ if (cleanValue < 0) {
257
+ percent = bottom - percent;
258
+ bottom = bottom - percent;
259
+ axis = bottom;
260
+ } else {
261
+ percent = percent - bottom;
262
+ axis = percent + bottom;
263
+ }
264
+ }
265
+
266
+ return { percent, axis, bottom };
267
+ };
268
+
269
+ // #endregion
270
+
271
+ // #region SET functions - set data attributes and classes
272
+ export const setCellData = function (chartElement: any, table: any): void {
273
+ Array.from(table.querySelectorAll('tbody tr')).forEach((tr: any) => {
274
+ let rowValue = 0;
275
+ // Set the data numeric value if not set
276
+ Array.from(tr.querySelectorAll('td:not(:first-child)')).forEach((td: any) => {
277
+ // Ignore the buttons and links inside
278
+ const copyTD = td.cloneNode(true);
279
+ Array.from(copyTD.querySelectorAll('*')).forEach((element: any) => {
280
+ element.remove();
281
+ });
282
+
283
+ const value = parseFloat(copyTD.textContent.replace('£', '').replace('%', '').replace(',', ''));
284
+
285
+ td.setAttribute('data-numeric', value);
286
+ td.setAttribute('data-value', copyTD.textContent);
287
+
288
+ const display = getComputedStyle(td).display;
289
+
290
+ if (display != 'none') rowValue += value;
291
+
292
+ Array.from(td.querySelectorAll('a, button')).forEach((element: any, index: number) => {
293
+ if (index == 0) {
294
+ element.insertAdjacentHTML('beforeBegin', '<hr/>');
295
+ }
296
+
297
+ element.classList.add('btn');
298
+ element.classList.add('btn-tertiary');
299
+ });
300
+ });
301
+
302
+ tr.setAttribute('data-numeric', rowValue);
303
+ });
304
+
305
+ const { min, max } = getChartData(chartElement);
306
+
307
+ Array.from(table.querySelectorAll('tbody tr')).forEach((tr: any, index) => {
308
+ const group = tr.querySelector('td:first-child, th:first-child')
309
+ ? tr.querySelector('td:first-child, th:first-child').textContent
310
+ : '';
311
+
312
+ tr.setAttribute('part', 'group');
313
+
314
+ const percent = ((tr.getAttribute('data-numeric') - min) / (max - min)) * 100;
315
+
316
+ tr.style.setProperty('--percent', `${percent}%`);
317
+
318
+ // Set the data label value if not set
319
+ Array.from(tr.querySelectorAll('td:not([data-label])')).forEach((td: any, index) => {
320
+ if (index == 0)
321
+ td.setAttribute('part', 'xaxis-label'); // PART
322
+ else td.setAttribute('part', 'value');
323
+
324
+ if (tr.querySelectorAll('td').length > 2)
325
+ td.setAttribute('data-label', table.querySelectorAll('thead th')[index].textContent);
326
+ });
327
+
328
+ const rowMin = tr.hasAttribute('data-min') ? tr.getAttribute('data-min') : min;
329
+ const rowMax = tr.hasAttribute('data-max') ? tr.getAttribute('data-max') : max;
330
+
331
+ if (rowMin < 0) {
332
+ const minBottom = Math.abs((rowMin / (rowMax - rowMin)) * 100);
333
+ chartElement.setAttribute('style', `--min-bottom: ${minBottom}%;`);
334
+ }
335
+
336
+ // Add a useful index css var for the use of animatons.
337
+ tr.style.setProperty('--row-index', index + 1);
338
+
339
+ // Add css vars to cells
340
+ Array.from(
341
+ tr.querySelectorAll('td[data-numeric]:not([data-label="Min"]):not([data-label="Max"]):not(:first-child)')
342
+ ).forEach((td: any) => {
343
+ const display = getComputedStyle(td).display;
344
+ if (display == 'none') return;
345
+
346
+ const content = td.innerHTML;
347
+ const value = Number.parseFloat(td.getAttribute('data-numeric'));
348
+ const start = Number.parseFloat(td.getAttribute('data-start'));
349
+
350
+ if (!td.querySelector('span[data-group]'))
351
+ td.innerHTML = `<span data-group="${group}" ${td.hasAttribute('data-label') ? `data-label="${td.getAttribute('data-label')}"` : ''} part="popover">${content}</span>`;
352
+
353
+ if (!td.hasAttribute('style')) {
354
+ const { percent, bottom, axis } = getValues(value, rowMin, rowMax, start);
355
+
356
+ td.setAttribute('data-percent', percent);
357
+ td.setAttribute('style', `--bottom:${bottom}%;--percent:${percent}%;--axis:${axis}%;`);
358
+ }
359
+ });
360
+ });
361
+ };
362
+
363
+ export const setLongestLabel = function (chartOuter: any): void {
364
+ const chartWrapper = chartOuter.querySelector('.chart__wrapper');
365
+ const chartSpacer = chartOuter.querySelector('.chart__spacer span');
366
+ const table = chartOuter.querySelector('.chart table');
367
+ // set the longest label attr so that the bar chart knows what margin to set on the left
368
+ let longestLabel = '';
369
+ Array.from(table.querySelectorAll('tbody tr td:first-child')).forEach((td: any) => {
370
+ if (typeof td.textContent != 'undefined' && td.textContent.length > longestLabel.length) {
371
+ longestLabel = td.textContent;
372
+ }
373
+ });
374
+ chartWrapper.setAttribute('data-longest-label', longestLabel);
375
+ chartSpacer.innerHTML = longestLabel;
376
+ };
377
+
378
+ export const setLongestValue = function (chartOuter: any): void {
379
+ const chartWrapper = chartOuter.querySelector('.chart__wrapper');
380
+ const table = chartOuter.querySelector('.chart table');
381
+
382
+ let longestValue = '';
383
+ Array.from(table.querySelectorAll('tbody tr td:not(:first-child)')).forEach((td: any) => {
384
+ if (
385
+ typeof td.getAttribute('data-value') != 'undefined' &&
386
+ td.getAttribute('data-value').length > longestValue.length
387
+ ) {
388
+ longestValue = td.getAttribute('data-value');
389
+ }
390
+ });
391
+ chartWrapper.setAttribute('data-longest-value', longestValue);
392
+ };
393
+ // #endregion
394
+
395
+ // #region CREATE function
396
+
397
+ export const createChartKey = function (chartOuter: any, tableElement: any, chartKey: any): boolean {
398
+ const chartID = `chart-${Date.now() + (Math.floor(Math.random() * 100) + 1)}`;
399
+ //const chartOuter = chartElement.querySelector('.chart__outer');
400
+
401
+ let previousInput: any;
402
+
403
+ const headings = Array.from(tableElement.querySelectorAll('thead th'));
404
+
405
+ headings.forEach((arrayElement: any, index) => {
406
+ if (index != 0) {
407
+ previousInput = createChartKeyItem(chartID, index, arrayElement.textContent, chartKey, chartOuter, previousInput);
408
+ }
409
+
410
+ if (index == 50) {
411
+ headings.length = index + 1;
412
+ }
413
+ });
414
+
415
+ return true;
416
+ };
417
+
418
+ function createChartKeyItem(
419
+ chartID: string,
420
+ index: number,
421
+ text: Array<string>,
422
+ chartKey: any,
423
+ chartOuter: any,
424
+ previousInput: any
425
+ ): any {
426
+ const input = document.createElement('input');
427
+ input.setAttribute('name', `${chartID}-dataset-${index}`);
428
+ input.setAttribute('id', `${chartID}-dataset-${index}`);
429
+ input.setAttribute('data-dataset', `${index}`);
430
+ input.setAttribute('data-label', `${text}`);
431
+ input.checked = true;
432
+ input.setAttribute('type', `checkbox`);
433
+
434
+ if (index == 1) chartOuter.prepend(input);
435
+ else chartOuter.insertBefore(input, previousInput.nextSibling);
436
+
437
+ previousInput = input;
438
+
439
+ const label = document.createElement('label');
440
+ label.setAttribute('class', `key btn btn-action`);
441
+ label.setAttribute('for', `${chartID}-dataset-${index}`);
442
+ label.setAttribute('data-label', `${text}`);
443
+ label.setAttribute('part', `key`);
444
+
445
+ const total = chartOuter.querySelector(`tbody tr td:nth-child(${index + 1})`)?.getAttribute('data-numeric');
446
+
447
+ label.setAttribute('data-numeric', total);
448
+ label.innerHTML = `${text}`;
449
+ chartKey.append(label);
450
+
451
+ return previousInput;
452
+ }
453
+
454
+ export const createChartGuidelines = function (chartElement: any, chartGuidelines: any): any {
455
+ const { min, max, yaxis } = getChartData(chartElement);
456
+ let { guidelines } = getChartData(chartElement);
457
+
458
+ if (!guidelines.length) guidelines = yaxis;
459
+
460
+ chartGuidelines.innerHTML = '';
461
+ for (let i = 0; i < guidelines.length; i++) {
462
+ const value = parseFloat(guidelines[i].replace('£', '').replace('%', '').replace(',', ''));
463
+
464
+ const { axis } = getValues(value, min, max);
465
+ chartGuidelines.innerHTML += `<div class="guideline" style="--percent:${axis}%;">${yaxis.indexOf(guidelines[i]) != -1 ? `<span>${guidelines[i]}</span>` : ''}</div>`;
466
+ }
467
+ };
468
+
469
+ export const createChartYaxis = function (chartElement: any, chartYaxis: any): void {
470
+ const { min, max, yaxis } = getChartData(chartElement);
471
+
472
+ chartYaxis.innerHTML = '';
473
+ for (let i = 0; i < yaxis.length; i++) {
474
+ const value = parseFloat(yaxis[i].replace('£', '').replace('%', ''));
475
+
476
+ const { axis } = getValues(value, min, max);
477
+ chartYaxis.innerHTML += `<div class="axis__point" style="--percent:${axis}%;"><span>${yaxis[i]}</span></div>`;
478
+ }
479
+ };
480
+
481
+ export const createXaxis = function (chartOuter: any): void {
482
+ const chart = chartOuter.querySelector('.chart');
483
+ let chartXaxis = chartOuter.querySelector('.chart__xaxis');
484
+
485
+ if (!chartXaxis) {
486
+ chartXaxis = document.createElement('div');
487
+ chartXaxis.setAttribute('class', 'chart__xaxis');
488
+ }
489
+
490
+ chart.prepend(chartXaxis);
491
+ };
492
+
493
+ export const createTooltips = function (chartOuter: any): void {
494
+ const titles = chartOuter.querySelectorAll(
495
+ 'thead th[title], tbody th[title]:first-child, tbody td[title]:first-child'
496
+ );
497
+
498
+ Array.from(titles).forEach((title: HTMLElement) => {
499
+ const tooltipId = `tooltip-${Date.now()}-${Math.floor(Math.random() * 100)}`;
500
+
501
+ title.innerHTML = `<button class="tooltip" popovertarget="${tooltipId}" part="tooltip" style="anchor-name: --${tooltipId};">${title.textContent}</button><span id="${tooltipId}" style="position-anchor: --${tooltipId};" popover part="tooltip__content" class="tooltip__content">${title.getAttribute('title')}</span>`;
502
+
503
+ //title.removeAttribute('title'); // TODO add a supports query for anchor positioning
504
+ });
505
+ };
506
+
507
+ export const createdoughnuts = function (chartOuter: any): void {
508
+ let returnString = '';
509
+ const chartInner = chartOuter.querySelector('.chart');
510
+ let doughnutWrapper = chartOuter.querySelector('.doughnuts');
511
+
512
+ if (!doughnutWrapper) {
513
+ doughnutWrapper = document.createElement('div');
514
+ doughnutWrapper.setAttribute('class', 'doughnuts');
515
+ chartInner.append(doughnutWrapper);
516
+ }
517
+
518
+ Array.from(chartInner.querySelectorAll('tbody tr')).forEach((item: any, index) => {
519
+ let paths = '';
520
+ let tooltips = '';
521
+ let cumulativePercent = 0;
522
+ let total = 0;
523
+ const titleKey = item.querySelectorAll('td')[0];
524
+ const title = titleKey.innerHTML;
525
+ let doughnutCount = 0;
526
+ const rowTotal = item.getAttribute('data-numeric');
527
+
528
+ // Work out the total amount
529
+ Array.from(item.querySelectorAll('td')).forEach((td: any, subindex) => {
530
+ const display = getComputedStyle(td).display;
531
+
532
+ if (subindex != 0 && display != 'none') {
533
+ let value = td.getAttribute('data-numeric');
534
+
535
+ value = value.replace('£', '');
536
+ value = value.replace('%', '');
537
+ value = value.replace(',', '');
538
+ value = Number.parseInt(value);
539
+
540
+ total += value;
541
+ doughnutCount++;
542
+ }
543
+ });
544
+
545
+ // Create the paths
546
+ Array.from(item.querySelectorAll('td')).forEach((td: any, subindex) => {
547
+ const display = getComputedStyle(td).display;
548
+
549
+ if (subindex != 0 && doughnutCount == 1 && display != 'none') {
550
+ const pathData = `M 0 0 L 100 0 A 100 100 0 1 1 100 -0.01 L 0 0`;
551
+
552
+ paths += `<path d="${pathData}" style="${td.getAttribute('style')} --path-index: ${subindex};"></path>`;
553
+ tooltips += `<span class="h5 mb-0" part="popover">${ucfirst(unsnake(td.getAttribute('data-label'))).trim()}<br/>${td.hasAttribute('data-second') ? `${td.getAttribute('data-second-label')}: ${td.getAttribute('data-second')}<br/>` : ''}${td.querySelector('[part="popover"]')?.innerHTML}</span>`;
554
+ } else if (subindex != 0) {
555
+ let value = td.getAttribute('data-numeric');
556
+ const hide = display == 'none' ? 'display: none;' : '';
557
+
558
+ value = value.replace('£', '');
559
+ value = value.replace('%', '');
560
+ value = value.replace(',', '');
561
+ value = Number.parseInt(value);
562
+
563
+ const percent = value / total;
564
+ const [startX, startY] = getCoordinatesForPercent(cumulativePercent, doughnutCount);
565
+ const [endX, endY] = getCoordinatesForPercent(cumulativePercent + percent, doughnutCount);
566
+ const largeArcFlag = percent > 0.5 ? 1 : 0; // if the slice is more than 50%, take the large arc (the long way around)
567
+ const pathData = [
568
+ `M 0 0`,
569
+ `L ${startX ? startX.toFixed(0) : 0} ${startY ? startY.toFixed(0) : 0}`, // Move
570
+ `A 100 100 0 ${largeArcFlag} 1 ${endX ? endX.toFixed(0) : 0} ${endY ? endY.toFixed(0) : 0}`, // Arc
571
+ `L 0 0`, // Line
572
+ ].join(' ');
573
+
574
+ paths += `<path d="${pathData}" style="${td.getAttribute('style')} --path-index: ${subindex};${hide}"></path>`;
575
+ tooltips += `<span class="h5 mb-0" part="popover">${ucfirst(unsnake(td.getAttribute('data-label'))).trim()}<br/>${td.hasAttribute('data-second') ? `${td.getAttribute('data-second-label')}: ${td.getAttribute('data-second')}<br/>` : ''}${td.querySelector('[part="popover"]')?.innerHTML}</span>`;
576
+
577
+ // each slice starts where the last slice ended, so keep a cumulative percent
578
+ if (display != 'none') cumulativePercent += percent;
579
+ }
580
+ });
581
+
582
+ returnString += `<div class="doughnut">
583
+ <svg viewBox="-105 -105 210 210" preserveAspectRatio="none" style="--row-index: ${index + 1};">${paths}</svg>
584
+ <div class="doughnut__title" data-numeric="${rowTotal}"><span class="h5 mb-0">${title}</span></div>
585
+ <div class="tooltips">${tooltips}</div>
586
+ </div>`;
587
+ });
588
+
589
+ doughnutWrapper.innerHTML = returnString;
590
+ };
591
+
592
+ // #endregion
593
+
594
+ export default setupChart;