@iamproperty/components 7.7.1--beta5 → 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 (701) 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/barchart.component.css +1 -1
  159. package/assets/css/components/barchart.component.css.map +1 -1
  160. package/assets/css/components/calendar.component.css +1 -1
  161. package/assets/css/components/calendar.component.css.map +1 -1
  162. package/assets/css/components/card.component.css +1 -1
  163. package/assets/css/components/card.component.css.map +1 -1
  164. package/assets/css/components/card.module.css +1 -1
  165. package/assets/css/components/card.module.css.map +1 -1
  166. package/assets/css/components/carousel.component.css +1 -1
  167. package/assets/css/components/carousel.component.css.map +1 -1
  168. package/assets/css/components/charts.css +1 -1
  169. package/assets/css/components/charts.css.map +1 -1
  170. package/assets/css/components/collapsible-side.css +1 -1
  171. package/assets/css/components/collapsible-side.css.map +1 -1
  172. package/assets/css/components/config.component.css +1 -1
  173. package/assets/css/components/config.component.css.map +1 -1
  174. package/assets/css/components/content.component.css +1 -1
  175. package/assets/css/components/content.component.css.map +1 -1
  176. package/assets/css/components/doughnutchart.component.css +1 -1
  177. package/assets/css/components/doughnutchart.component.css.map +1 -1
  178. package/assets/css/components/fileupload.css +1 -1
  179. package/assets/css/components/fileupload.css.map +1 -1
  180. package/assets/css/components/filter-card.component.css +1 -1
  181. package/assets/css/components/filter-card.component.css.map +1 -1
  182. package/assets/css/components/header.css +1 -1
  183. package/assets/css/components/header.css.map +1 -1
  184. package/assets/css/components/input.component.css.map +1 -1
  185. package/assets/css/components/modal.component.css +1 -1
  186. package/assets/css/components/modal.component.css.map +1 -1
  187. package/assets/css/components/multi-step-modal.component.css +1 -1
  188. package/assets/css/components/multi-step-modal.component.css.map +1 -1
  189. package/assets/css/components/multiselect.css +1 -1
  190. package/assets/css/components/multiselect.css.map +1 -1
  191. package/assets/css/components/nav.component.css +1 -1
  192. package/assets/css/components/nav.component.css.map +1 -1
  193. package/assets/css/components/pagination.css +1 -1
  194. package/assets/css/components/pagination.css.map +1 -1
  195. package/assets/css/components/record-card.component.css +1 -1
  196. package/assets/css/components/record-card.component.css.map +1 -1
  197. package/assets/css/components/slider.css +1 -1
  198. package/assets/css/components/slider.css.map +1 -1
  199. package/assets/css/components/split-button.component.css +1 -1
  200. package/assets/css/components/split-button.component.css.map +1 -1
  201. package/assets/css/components/tabs.component.css +1 -1
  202. package/assets/css/components/tabs.component.css.map +1 -1
  203. package/assets/css/components/tag.component.css +1 -1
  204. package/assets/css/components/tag.component.css.map +1 -1
  205. package/assets/css/components/video-card.component.css +1 -1
  206. package/assets/css/components/video-card.component.css.map +1 -1
  207. package/assets/css/components/video-modal.component.css +1 -1
  208. package/assets/css/components/video-modal.component.css.map +1 -1
  209. package/assets/css/components/video.component.css +1 -1
  210. package/assets/css/components/video.component.css.map +1 -1
  211. package/assets/css/core.min.css +1 -1
  212. package/assets/css/core.min.css.map +1 -1
  213. package/assets/css/elements/buttons--global.css +1 -1
  214. package/assets/css/elements/buttons--global.css.map +1 -1
  215. package/assets/css/elements/buttons--secondary.css +1 -1
  216. package/assets/css/elements/buttons--secondary.css.map +1 -1
  217. package/assets/css/elements/buttons--special.css +1 -1
  218. package/assets/css/elements/buttons--special.css.map +1 -1
  219. package/assets/css/elements/buttons--tertiary.css +1 -1
  220. package/assets/css/elements/buttons--tertiary.css.map +1 -1
  221. package/assets/css/elements/buttons.css +1 -1
  222. package/assets/css/elements/buttons.css.map +1 -1
  223. package/assets/css/elements/container.css +1 -1
  224. package/assets/css/elements/container.css.map +1 -1
  225. package/assets/css/elements/details.css +1 -1
  226. package/assets/css/elements/details.css.map +1 -1
  227. package/assets/css/elements/dialog.css.map +1 -1
  228. package/assets/css/elements/dropdown.css +1 -1
  229. package/assets/css/elements/dropdown.css.map +1 -1
  230. package/assets/css/elements/feature.css +1 -1
  231. package/assets/css/elements/feature.css.map +1 -1
  232. package/assets/css/elements/forms.css +1 -1
  233. package/assets/css/elements/forms.css.map +1 -1
  234. package/assets/css/elements/label.css +1 -1
  235. package/assets/css/elements/label.css.map +1 -1
  236. package/assets/css/elements/links--collapsible-side.css +1 -0
  237. package/assets/css/elements/links--collapsible-side.css.map +1 -0
  238. package/assets/css/elements/links--global.css +1 -0
  239. package/assets/css/elements/links--global.css.map +1 -0
  240. package/assets/css/elements/links--video.css +1 -0
  241. package/assets/css/elements/links--video.css.map +1 -0
  242. package/assets/css/elements/links.css +1 -1
  243. package/assets/css/elements/links.css.map +1 -1
  244. package/assets/css/elements/modal.css.map +1 -1
  245. package/assets/css/elements/progress.css.map +1 -1
  246. package/assets/css/elements/textarea.css +1 -1
  247. package/assets/css/elements/textarea.css.map +1 -1
  248. package/assets/css/elements/toggle-button.css +1 -1
  249. package/assets/css/elements/toggle-button.css.map +1 -1
  250. package/assets/css/elements/tooltips.css +1 -1
  251. package/assets/css/elements/tooltips.css.map +1 -1
  252. package/assets/css/style.min.css +1 -1
  253. package/assets/css/style.min.css.map +1 -1
  254. package/assets/favicons/README.md +20 -20
  255. package/assets/favicons/browserconfig.xml +9 -9
  256. package/assets/favicons/manifest.json +31 -31
  257. package/assets/favicons/safari-pinned-tab.svg +35 -35
  258. package/assets/favicons/site.webmanifest +20 -20
  259. package/assets/js/components/accordion/accordion.component.js +15 -15
  260. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  261. package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
  262. package/assets/js/components/actionbar/actionbar.component.js +68 -68
  263. package/assets/js/components/actionbar/actionbar.component.min.js +2 -2
  264. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  265. package/assets/js/components/address-lookup/address-lookup.component.js +60 -60
  266. package/assets/js/components/address-lookup/address-lookup.component.min.js +2 -2
  267. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  268. package/assets/js/components/advanced-select/advanced-select.component.js +20 -20
  269. package/assets/js/components/advanced-select/advanced-select.component.min.js +1 -1
  270. package/assets/js/components/advanced-select/advanced-select.component.min.js.map +1 -1
  271. package/assets/js/components/applied-filters/applied-filters.component.js +7 -7
  272. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  273. package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
  274. package/assets/js/components/barchart/barchart.component.js +2 -2
  275. package/assets/js/components/barchart/barchart.component.min.js +6 -6
  276. package/assets/js/components/barchart/barchart.component.min.js.map +1 -1
  277. package/assets/js/components/bento-grid/bento-grid.component.js +9 -9
  278. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  279. package/assets/js/components/bento-grid/bento-grid.component.min.js.map +1 -1
  280. package/assets/js/components/calendar/calendar.component.js +2 -2
  281. package/assets/js/components/calendar/calendar.component.min.js +2 -2
  282. package/assets/js/components/calendar/calendar.component.min.js.map +1 -1
  283. package/assets/js/components/card/card.component.js +3 -3
  284. package/assets/js/components/card/card.component.min.js +2 -2
  285. package/assets/js/components/card/card.component.min.js.map +1 -1
  286. package/assets/js/components/carousel/carousel.component.js +2 -2
  287. package/assets/js/components/carousel/carousel.component.min.js +4 -4
  288. package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
  289. package/assets/js/components/chart/chart.component.js +1 -1
  290. package/assets/js/components/collapsible-side/collapsible-side.component.js +20 -20
  291. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +4 -4
  292. package/assets/js/components/collapsible-side/collapsible-side.component.min.js.map +1 -1
  293. package/assets/js/components/config/config.component.js +54 -54
  294. package/assets/js/components/config/config.component.min.js +2 -2
  295. package/assets/js/components/config/config.component.min.js.map +1 -1
  296. package/assets/js/components/content/content.component.js +9 -9
  297. package/assets/js/components/content/content.component.min.js +4 -4
  298. package/assets/js/components/content/content.component.min.js.map +1 -1
  299. package/assets/js/components/darkmode/darkmode.component.js +4 -4
  300. package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
  301. package/assets/js/components/darkmode/darkmode.component.min.js.map +1 -1
  302. package/assets/js/components/doughnutchart/doughnutchart.component.js +2 -2
  303. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +4 -4
  304. package/assets/js/components/doughnutchart/doughnutchart.component.min.js.map +1 -1
  305. package/assets/js/components/fileupload/fileupload.component.js +17 -17
  306. package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
  307. package/assets/js/components/fileupload/fileupload.component.min.js.map +1 -1
  308. package/assets/js/components/filter-card/filter-card.component.js +9 -9
  309. package/assets/js/components/filter-card/filter-card.component.min.js +5 -5
  310. package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -1
  311. package/assets/js/components/filterlist/filterlist.component.js +1 -1
  312. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  313. package/assets/js/components/filterlist/filterlist.component.min.js.map +1 -1
  314. package/assets/js/components/form/form.component.js +5 -5
  315. package/assets/js/components/form/form.component.min.js +1 -1
  316. package/assets/js/components/form/form.component.min.js.map +1 -1
  317. package/assets/js/components/header/header.component.js +53 -53
  318. package/assets/js/components/header/header.component.min.js +2 -2
  319. package/assets/js/components/header/header.component.min.js.map +1 -1
  320. package/assets/js/components/inline-edit/inline-edit.component.js +16 -16
  321. package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
  322. package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -1
  323. package/assets/js/components/input/input.component.js +11 -11
  324. package/assets/js/components/input/input.component.min.js +1 -1
  325. package/assets/js/components/input/input.component.min.js.map +1 -1
  326. package/assets/js/components/input-range/input-range.component.js +9 -9
  327. package/assets/js/components/input-range/input-range.component.min.js +1 -1
  328. package/assets/js/components/input-range/input-range.component.min.js.map +1 -1
  329. package/assets/js/components/marketing/marketing.component.js +10 -10
  330. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  331. package/assets/js/components/marketing/marketing.component.min.js.map +1 -1
  332. package/assets/js/components/menu/menu.component.js +6 -6
  333. package/assets/js/components/menu/menu.component.min.js +1 -1
  334. package/assets/js/components/menu/menu.component.min.js.map +1 -1
  335. package/assets/js/components/milestone/milestone.component.js +2 -2
  336. package/assets/js/components/milestone/milestone.component.min.js +1 -1
  337. package/assets/js/components/milestone/milestone.component.min.js.map +1 -1
  338. package/assets/js/components/milestone-group/milestone-group.component.js +2 -2
  339. package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
  340. package/assets/js/components/milestone-group/milestone-group.component.min.js.map +1 -1
  341. package/assets/js/components/modal/modal.component.js +23 -23
  342. package/assets/js/components/modal/modal.component.min.js +4 -4
  343. package/assets/js/components/modal/modal.component.min.js.map +1 -1
  344. package/assets/js/components/multi-step/multi-step.component.js +1 -1
  345. package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
  346. package/assets/js/components/multi-step/multi-step.component.min.js.map +1 -1
  347. package/assets/js/components/multi-step-modal/multi-step-modal.component.js +12 -12
  348. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +4 -4
  349. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js.map +1 -1
  350. package/assets/js/components/multiselect/multiselect.component.js +21 -21
  351. package/assets/js/components/multiselect/multiselect.component.min.js +4 -4
  352. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  353. package/assets/js/components/nav/nav.component.js +45 -45
  354. package/assets/js/components/nav/nav.component.min.js +2 -2
  355. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  356. package/assets/js/components/notification/notification.component.js +14 -14
  357. package/assets/js/components/notification/notification.component.min.js +1 -1
  358. package/assets/js/components/notification/notification.component.min.js.map +1 -1
  359. package/assets/js/components/pagination/pagination.component.js +39 -39
  360. package/assets/js/components/pagination/pagination.component.min.js +3 -3
  361. package/assets/js/components/pagination/pagination.component.min.js.map +1 -1
  362. package/assets/js/components/password/password.component.js +11 -11
  363. package/assets/js/components/password/password.component.min.js +1 -1
  364. package/assets/js/components/password/password.component.min.js.map +1 -1
  365. package/assets/js/components/popover/popover.component.js +8 -8
  366. package/assets/js/components/popover/popover.component.min.js +1 -1
  367. package/assets/js/components/popover/popover.component.min.js.map +1 -1
  368. package/assets/js/components/rank/rank.component.js +360 -360
  369. package/assets/js/components/rank/rank.component.min.js +1 -1
  370. package/assets/js/components/rank/rank.component.min.js.map +1 -1
  371. package/assets/js/components/rankings/rankings.component.js +18 -18
  372. package/assets/js/components/rankings/rankings.component.min.js +1 -1
  373. package/assets/js/components/rankings/rankings.component.min.js.map +1 -1
  374. package/assets/js/components/rating/rating.component.js +10 -10
  375. package/assets/js/components/rating/rating.component.min.js +1 -1
  376. package/assets/js/components/rating/rating.component.min.js.map +1 -1
  377. package/assets/js/components/record-card/record-card.component.js +2 -2
  378. package/assets/js/components/record-card/record-card.component.min.js +2 -2
  379. package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
  380. package/assets/js/components/search/search.component.js +19 -19
  381. package/assets/js/components/search/search.component.min.js +1 -1
  382. package/assets/js/components/search/search.component.min.js.map +1 -1
  383. package/assets/js/components/slider/slider.component.js +12 -12
  384. package/assets/js/components/slider/slider.component.min.js +2 -2
  385. package/assets/js/components/slider/slider.component.min.js.map +1 -1
  386. package/assets/js/components/split-button/split-button.component.js +19 -19
  387. package/assets/js/components/split-button/split-button.component.min.js +3 -3
  388. package/assets/js/components/split-button/split-button.component.min.js.map +1 -1
  389. package/assets/js/components/std-address-lookup/std-address-lookup.component.js +114 -114
  390. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +2 -2
  391. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
  392. package/assets/js/components/table/table.component.js +17 -17
  393. package/assets/js/components/table/table.component.min.js +1 -1
  394. package/assets/js/components/table/table.component.min.js.map +1 -1
  395. package/assets/js/components/table-ajax/table-ajax.component.js +17 -17
  396. package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
  397. package/assets/js/components/table-ajax/table-ajax.component.min.js.map +1 -1
  398. package/assets/js/components/table-basic/table-basic.component.js +16 -16
  399. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  400. package/assets/js/components/table-basic/table-basic.component.min.js.map +1 -1
  401. package/assets/js/components/table-no-submit/table-no-submit.component.js +17 -17
  402. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
  403. package/assets/js/components/table-no-submit/table-no-submit.component.min.js.map +1 -1
  404. package/assets/js/components/table-submit/table-submit.component.js +17 -17
  405. package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
  406. package/assets/js/components/table-submit/table-submit.component.min.js.map +1 -1
  407. package/assets/js/components/tabs/tabs.component.js +18 -18
  408. package/assets/js/components/tabs/tabs.component.min.js +2 -2
  409. package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
  410. package/assets/js/components/tag/tag.component.js +14 -14
  411. package/assets/js/components/tag/tag.component.min.js +4 -4
  412. package/assets/js/components/tag/tag.component.min.js.map +1 -1
  413. package/assets/js/components/tooltip/tooltip.component.js +9 -9
  414. package/assets/js/components/tooltip/tooltip.component.min.js +1 -1
  415. package/assets/js/components/tooltip/tooltip.component.min.js.map +1 -1
  416. package/assets/js/components/video/video.component.js +11 -11
  417. package/assets/js/components/video/video.component.min.js +4 -4
  418. package/assets/js/components/video/video.component.min.js.map +1 -1
  419. package/assets/js/components/video-card/video-card.component.js +16 -16
  420. package/assets/js/components/video-card/video-card.component.min.js +6 -6
  421. package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
  422. package/assets/js/components/video-modal/video-modal.component.js +16 -16
  423. package/assets/js/components/video-modal/video-modal.component.min.js +5 -5
  424. package/assets/js/components/video-modal/video-modal.component.min.js.map +1 -1
  425. package/assets/js/components/word-count/word-count.component.js +1 -1
  426. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  427. package/assets/js/components/word-count/word-count.component.min.js.map +1 -1
  428. package/assets/js/modules/card.module.js +14 -14
  429. package/assets/js/modules/chart.js +1 -1
  430. package/assets/js/modules/chart.module.js +5 -5
  431. package/assets/js/modules/helper.test.js +2 -2
  432. package/assets/js/modules/integration-tests.js +3 -3
  433. package/assets/js/modules/table.js +3 -3
  434. package/assets/js/modules/tabs.js +1 -1
  435. package/assets/js/modules/videos.js +6 -6
  436. package/assets/js/scripts.bundle.js +1 -1
  437. package/assets/js/scripts.bundle.js.map +1 -1
  438. package/assets/js/scripts.bundle.min.js +1 -1
  439. package/assets/js/scripts.bundle.min.js.map +1 -1
  440. package/assets/js/scripts.js +4 -4
  441. package/assets/sass/_bs_grid.scss +41 -41
  442. package/assets/sass/_bs_utilities.scss +51 -51
  443. package/assets/sass/_components.scss +162 -162
  444. package/assets/sass/_corefiles.scss +31 -31
  445. package/assets/sass/_elements.scss +30 -30
  446. package/assets/sass/_fonts.scss +28 -28
  447. package/assets/sass/_func.scss +2 -2
  448. package/assets/sass/_functions/bs_functions.scss +487 -487
  449. package/assets/sass/_functions/bs_mixins.scss +2103 -2103
  450. package/assets/sass/_functions/bs_utilities.scss +922 -922
  451. package/assets/sass/_functions/bs_variables.scss +1701 -1703
  452. package/assets/sass/_functions/functions.scss +48 -48
  453. package/assets/sass/_functions/mixins.scss +1 -1
  454. package/assets/sass/_grid.scss +320 -320
  455. package/assets/sass/_print.scss +64 -64
  456. package/assets/sass/_utilities.scss +35 -35
  457. package/assets/sass/components/actionbar.component.scss +421 -421
  458. package/assets/sass/components/actionbar.global.scss +115 -115
  459. package/assets/sass/components/address-lookup.component.scss +161 -161
  460. package/assets/sass/components/address-lookup.preload.scss +90 -90
  461. package/assets/sass/components/applied-filters.scss +19 -19
  462. package/assets/sass/components/barchart.component.scss +347 -347
  463. package/assets/sass/components/bento-grid.component.scss +109 -109
  464. package/assets/sass/components/bento-grid.global.scss +248 -248
  465. package/assets/sass/components/calendar.component.scss +1272 -1272
  466. package/assets/sass/components/calendar.config.scss +423 -423
  467. package/assets/sass/components/card.component.scss +187 -182
  468. package/assets/sass/components/card.module.scss +154 -151
  469. package/assets/sass/components/carousel.component.scss +631 -631
  470. package/assets/sass/components/carousel.config.scss +84 -84
  471. package/assets/sass/components/charts.config.scss +86 -86
  472. package/assets/sass/components/charts.module.scss +588 -588
  473. package/assets/sass/components/charts.scss +1298 -1298
  474. package/assets/sass/components/collapsible-side.scss +307 -307
  475. package/assets/sass/components/config.component.scss +235 -235
  476. package/assets/sass/components/content.component.scss +18 -18
  477. package/assets/sass/components/darkmode.component.scss +20 -20
  478. package/assets/sass/components/doughnutchart.component.scss +206 -206
  479. package/assets/sass/components/fileupload.scss +162 -162
  480. package/assets/sass/components/filter-card.component.scss +99 -99
  481. package/assets/sass/components/header.scss +251 -256
  482. package/assets/sass/components/inline-edit.preload.scss +203 -203
  483. package/assets/sass/components/inline-edit.scss +40 -40
  484. package/assets/sass/components/input-range.component.scss +46 -46
  485. package/assets/sass/components/input.component.scss +101 -101
  486. package/assets/sass/components/marketing.component.scss +65 -65
  487. package/assets/sass/components/menu.component.scss +161 -190
  488. package/assets/sass/components/menu.global.scss +82 -82
  489. package/assets/sass/components/milestone.scss +216 -216
  490. package/assets/sass/components/modal.component.scss +252 -252
  491. package/assets/sass/components/multi-step-modal.component.scss +255 -255
  492. package/assets/sass/components/multi-step-modal.global.scss +92 -92
  493. package/assets/sass/components/multi-step.component.scss +144 -144
  494. package/assets/sass/components/multiselect.preload.scss +8 -8
  495. package/assets/sass/components/multiselect.scss +238 -238
  496. package/assets/sass/components/nav.component.scss +718 -718
  497. package/assets/sass/components/nav.docs.scss +55 -55
  498. package/assets/sass/components/nav.global.scss +870 -870
  499. package/assets/sass/components/nav.preload.scss +54 -54
  500. package/assets/sass/components/notification.scss +218 -218
  501. package/assets/sass/components/pagination.scss +237 -237
  502. package/assets/sass/components/password.component.scss +56 -56
  503. package/assets/sass/components/popover.component.scss +28 -28
  504. package/assets/sass/components/property-searchbar.scss +139 -139
  505. package/assets/sass/components/rank.component.scss +275 -275
  506. package/assets/sass/components/rankings.component.scss +70 -70
  507. package/assets/sass/components/rankings.global.scss +140 -140
  508. package/assets/sass/components/rating.component.css +211 -211
  509. package/assets/sass/components/record-card.component.scss +191 -191
  510. package/assets/sass/components/slider.scss +127 -127
  511. package/assets/sass/components/snapshot.scss +65 -65
  512. package/assets/sass/components/split-button.component.scss +83 -83
  513. package/assets/sass/components/stepper.scss +157 -157
  514. package/assets/sass/components/table-basic.component.scss +136 -136
  515. package/assets/sass/components/table-basic.global.scss +676 -676
  516. package/assets/sass/components/table.component.scss +51 -51
  517. package/assets/sass/components/table.global.scss +398 -398
  518. package/assets/sass/components/tabs.component.scss +34 -34
  519. package/assets/sass/components/tabs.config.scss +258 -258
  520. package/assets/sass/components/tag.component.scss +59 -59
  521. package/assets/sass/components/tag.preload.scss +20 -20
  522. package/assets/sass/components/testimonial.scss +125 -125
  523. package/assets/sass/components/timeline.scss +92 -92
  524. package/assets/sass/components/tooltip.component.scss +148 -148
  525. package/assets/sass/components/video-card.component.scss +49 -49
  526. package/assets/sass/components/video-modal.component.scss +26 -26
  527. package/assets/sass/components/video.component.scss +74 -74
  528. package/assets/sass/components/word-count.component.scss +26 -26
  529. package/assets/sass/core.scss +4 -4
  530. package/assets/sass/elements/admin-panel.css +310 -310
  531. package/assets/sass/elements/badge-tag.css +101 -101
  532. package/assets/sass/elements/brand.css +80 -80
  533. package/assets/sass/elements/button__group.css +135 -135
  534. package/assets/sass/elements/buttons--action.css +71 -71
  535. package/assets/sass/elements/buttons--compact.css +168 -168
  536. package/assets/sass/elements/{buttons--global.scss → buttons--global.css} +239 -250
  537. package/assets/sass/elements/{buttons--secondary.scss → buttons--secondary.css} +18 -24
  538. package/assets/sass/elements/{buttons--special.scss → buttons--special.css} +164 -171
  539. package/assets/sass/elements/{buttons--tertiary.scss → buttons--tertiary.css} +51 -57
  540. package/assets/sass/elements/buttons.scss +9 -14
  541. package/assets/sass/elements/code.css +45 -45
  542. package/assets/sass/elements/container.scss +118 -155
  543. package/assets/sass/elements/{details.scss → details.css} +224 -227
  544. package/assets/sass/elements/dialog.scss +75 -86
  545. package/assets/sass/elements/{dropdown.scss → dropdown.css} +85 -87
  546. package/assets/sass/elements/{feature.scss → feature.css} +174 -180
  547. package/assets/sass/elements/forms.scss +1337 -1338
  548. package/assets/sass/elements/highlight.css +76 -76
  549. package/assets/sass/elements/hr.css +41 -41
  550. package/assets/sass/elements/icons.css +48 -48
  551. package/assets/sass/elements/input.scss +212 -212
  552. package/assets/sass/elements/{label.scss → label.css} +20 -20
  553. package/assets/sass/elements/links--collapsible-side.scss +130 -0
  554. package/assets/sass/elements/links--global.scss +155 -0
  555. package/assets/sass/elements/links--video.scss +73 -0
  556. package/assets/sass/elements/links.scss +5 -370
  557. package/assets/sass/elements/lists--breadcrumbs.scss +26 -26
  558. package/assets/sass/elements/lists--steps.css +171 -171
  559. package/assets/sass/elements/lists--tick-list.scss +112 -112
  560. package/assets/sass/elements/lists.scss +99 -99
  561. package/assets/sass/elements/media.css +20 -20
  562. package/assets/sass/elements/modal.scss +411 -415
  563. package/assets/sass/elements/popover.scss +259 -259
  564. package/assets/sass/elements/prefix.scss +139 -139
  565. package/assets/sass/elements/progress.scss +208 -214
  566. package/assets/sass/elements/table.element.scss +144 -144
  567. package/assets/sass/elements/{textarea.scss → textarea.css} +84 -96
  568. package/assets/sass/elements/{toggle-button.scss → toggle-button.css} +49 -55
  569. package/assets/sass/elements/tooltips.scss +152 -151
  570. package/assets/sass/elements/type.css +166 -166
  571. package/assets/sass/email.scss +68 -68
  572. package/assets/sass/error.scss +31 -33
  573. package/assets/sass/foundations/animations.scss +2 -2
  574. package/assets/sass/foundations/colours.scss +104 -104
  575. package/assets/sass/foundations/reboot.scss +166 -166
  576. package/assets/sass/foundations/root.scss +269 -269
  577. package/assets/sass/main.scss +7 -7
  578. package/assets/sass/templates/auth.scss +106 -106
  579. package/assets/sass/templates/form.scss +95 -95
  580. package/assets/sass/utilities/{align.scss → align.css} +24 -24
  581. package/assets/sass/utilities/{border.scss → border.css} +65 -68
  582. package/assets/sass/utilities/{clearfix.scss → clearfix.css} +8 -8
  583. package/assets/sass/utilities/colours.scss +43 -43
  584. package/assets/sass/utilities/{columns.scss → columns.css} +61 -61
  585. package/assets/sass/utilities/display.scss +89 -89
  586. package/assets/sass/utilities/{fixed.scss → fixed.css} +16 -16
  587. package/assets/sass/utilities/flex.scss +291 -291
  588. package/assets/sass/utilities/{font-awesome-iso-fallbacks.scss → font-awesome-iso-fallbacks.css} +43 -43
  589. package/assets/sass/utilities/gap.css +26 -0
  590. package/assets/sass/utilities/{gradients.scss → gradients.css} +39 -39
  591. package/assets/sass/utilities/{js-display.scss → js-display.css} +12 -12
  592. package/assets/sass/utilities/{line-clamp.scss → line-clamp.css} +24 -24
  593. package/assets/sass/utilities/margins.scss +74 -74
  594. package/assets/sass/utilities/max-height.scss +93 -93
  595. package/assets/sass/utilities/{opacity.scss → opacity.css} +20 -20
  596. package/assets/sass/utilities/order.css +104 -0
  597. package/assets/sass/utilities/{overflow.scss → overflow.css} +16 -16
  598. package/assets/sass/utilities/paddings.scss +33 -33
  599. package/assets/sass/utilities/{pointer-events.scss → pointer-events.css} +8 -8
  600. package/assets/sass/utilities/position.css +68 -0
  601. package/assets/sass/utilities/{ratio.scss → ratio.css} +33 -33
  602. package/assets/sass/utilities/{rounded.scss → rounded.css} +56 -56
  603. package/assets/sass/utilities/{shadow.scss → shadow.css} +7 -7
  604. package/assets/sass/utilities/{sizes.scss → sizes.css} +92 -92
  605. package/assets/sass/utilities/{sticky.scss → sticky.css} +38 -38
  606. package/assets/sass/utilities/{text-truncate.scss → text-truncate.css} +6 -6
  607. package/assets/sass/utilities/{text.scss → text.css} +190 -190
  608. package/assets/sass/utilities/{visible.scss → visible.css} +8 -8
  609. package/assets/sass/utilities/{visually-hidden.scss → visually-hidden.css} +13 -13
  610. package/assets/sass/utilities/wider-colours.scss +8 -8
  611. package/assets/svg/illustrations/table.svg +165 -165
  612. package/assets/svg/logo.svg +56 -56
  613. package/assets/ts/components/accordion/accordion.component.ts +77 -77
  614. package/assets/ts/components/actionbar/actionbar.component.ts +567 -567
  615. package/assets/ts/components/address-lookup/address-lookup.component.ts +672 -672
  616. package/assets/ts/components/advanced-select/advanced-select.component.ts +116 -116
  617. package/assets/ts/components/applied-filters/applied-filters.component.ts +37 -37
  618. package/assets/ts/components/bento-grid/bento-grid.component.ts +88 -88
  619. package/assets/ts/components/collapsible-side/collapsible-side.component.ts +165 -165
  620. package/assets/ts/components/config/config.component.ts +699 -699
  621. package/assets/ts/components/content/content.component.ts +78 -78
  622. package/assets/ts/components/darkmode/darkmode.component.ts +108 -108
  623. package/assets/ts/components/fileupload/fileupload.component.ts +74 -74
  624. package/assets/ts/components/filter-card/filter-card.component.ts +106 -106
  625. package/assets/ts/components/form/form.component.ts +102 -102
  626. package/assets/ts/components/header/header.component.ts +97 -97
  627. package/assets/ts/components/inline-edit/inline-edit.component.ts +212 -212
  628. package/assets/ts/components/input/input.component.ts +278 -278
  629. package/assets/ts/components/input-range/input-range.component.ts +78 -78
  630. package/assets/ts/components/marketing/marketing.component.ts +44 -44
  631. package/assets/ts/components/menu/menu.component.ts +212 -212
  632. package/assets/ts/components/modal/modal.component.ts +184 -184
  633. package/assets/ts/components/multi-step-modal/multi-step-modal.component.ts +304 -304
  634. package/assets/ts/components/multiselect/multiselect.component.ts +349 -349
  635. package/assets/ts/components/nav/nav.component.ts +369 -369
  636. package/assets/ts/components/notification/notification.component.ts +172 -172
  637. package/assets/ts/components/pagination/pagination.component.ts +213 -213
  638. package/assets/ts/components/password/password.component.ts +118 -118
  639. package/assets/ts/components/popover/popover.component.ts +50 -50
  640. package/assets/ts/components/rank/rank.component.ts +394 -394
  641. package/assets/ts/components/rankings/rankings.component.ts +79 -79
  642. package/assets/ts/components/rating/rating.component.ts +86 -86
  643. package/assets/ts/components/search/search.component.ts +244 -244
  644. package/assets/ts/components/slider/slider.component.ts +170 -170
  645. package/assets/ts/components/split-button/split-button.component.ts +63 -63
  646. package/assets/ts/components/std-address-lookup/std-address-lookup.component.ts +1919 -1919
  647. package/assets/ts/components/table/table.component.ts +94 -94
  648. package/assets/ts/components/table-ajax/table-ajax.component.ts +70 -70
  649. package/assets/ts/components/table-basic/table-basic.component.ts +56 -56
  650. package/assets/ts/components/table-no-submit/table-no-submit.component.ts +130 -130
  651. package/assets/ts/components/table-submit/table-submit.component.ts +71 -71
  652. package/assets/ts/components/tabs/tabs.component.ts +70 -70
  653. package/assets/ts/components/tag/tag.component.ts +104 -104
  654. package/assets/ts/components/tooltip/tooltip.component.ts +98 -98
  655. package/assets/ts/components/video/video.component.ts +74 -74
  656. package/assets/ts/components/video-card/video-card.component.ts +129 -129
  657. package/assets/ts/components/video-modal/video-modal.component.ts +88 -88
  658. package/assets/ts/modules/advanced-select.ts +186 -186
  659. package/assets/ts/modules/applied-filters.ts +238 -238
  660. package/assets/ts/modules/card.module.ts +46 -46
  661. package/assets/ts/modules/chart.module.ts +594 -594
  662. package/assets/ts/modules/data-layer.md +71 -71
  663. package/assets/ts/modules/dialogs.ts +259 -259
  664. package/assets/ts/modules/dropdown.ts +216 -216
  665. package/assets/ts/modules/helper.test.ts +143 -143
  666. package/assets/ts/modules/helpers.ts +212 -212
  667. package/assets/ts/modules/integration-tests.ts +525 -525
  668. package/assets/ts/modules/modal.ts +45 -45
  669. package/assets/ts/modules/password.ts +82 -82
  670. package/assets/ts/modules/table.ts +1500 -1500
  671. package/assets/ts/modules/test.ts +22 -22
  672. package/assets/ts/modules/videos.ts +233 -233
  673. package/assets/ts/scripts.ts +111 -111
  674. package/dist/components.es.js +25 -25
  675. package/dist/components.umd.js +27 -27
  676. package/package.json +115 -116
  677. package/src/components/AdvancedSelect/AdvancedSelect.vue +28 -28
  678. package/src/components/Config/Config.vue +23 -23
  679. package/src/components/DarkMode/DarkMode.vue +19 -19
  680. package/src/components/Filterlist/Filterlist.vue +23 -23
  681. package/src/components/Form/Form.vue +22 -22
  682. package/src/components/Header/Header.vue +36 -36
  683. package/src/components/Input/Input.vue +22 -22
  684. package/src/components/InputRange/InputRange.vue +22 -22
  685. package/src/components/Modal/Modal.vue +22 -22
  686. package/src/components/MultiStepModal/MultiStepModal.vue +23 -23
  687. package/src/components/NoteFeed/NoteFeed.vue +82 -82
  688. package/src/components/Password/Password.vue +23 -23
  689. package/src/components/Popover/Popover.vue +22 -22
  690. package/src/components/PropertySearchbar/PropertySearchbar.vue +235 -235
  691. package/src/components/PropertySearchbar/README.md +25 -25
  692. package/src/components/Rating/Rating.vue +22 -22
  693. package/src/components/STDAddressLookup/STDAddressLookup.vue +22 -22
  694. package/src/components/Snapshot/Snapshot.vue +30 -30
  695. package/src/components/Tag/Tag.vue +22 -22
  696. package/src/components/Tooltip/Tooltip.vue +22 -22
  697. package/src/components/Video/Video.vue +22 -22
  698. package/src/components/VideoModal/VideoModal.vue +22 -22
  699. package/assets/sass/utilities/gap.scss +0 -8
  700. package/assets/sass/utilities/order.scss +0 -43
  701. 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;