@iamproperty/components 7.3.0 → 7.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/README.md +1 -1
  2. package/assets/css/components/actionbar.component.css +1 -1
  3. package/assets/css/components/actionbar.component.css.map +1 -1
  4. package/assets/css/components/actionbar.global.css +1 -1
  5. package/assets/css/components/actionbar.global.css.map +1 -1
  6. package/assets/css/components/address-lookup.component.css +1 -0
  7. package/assets/css/components/address-lookup.component.css.map +1 -0
  8. package/assets/css/components/barchart.component.css +1 -1
  9. package/assets/css/components/barchart.component.css.map +1 -1
  10. package/assets/css/components/calendar.component.css +1 -0
  11. package/assets/css/components/calendar.component.css.map +1 -0
  12. package/assets/css/components/calendar.config.css +1 -0
  13. package/assets/css/components/calendar.config.css.map +1 -0
  14. package/assets/css/components/card.component.css +1 -1
  15. package/assets/css/components/card.component.css.map +1 -1
  16. package/assets/css/components/carousel.component.css +1 -1
  17. package/assets/css/components/carousel.component.css.map +1 -1
  18. package/assets/css/components/charts.css +1 -1
  19. package/assets/css/components/charts.css.map +1 -1
  20. package/assets/css/components/collapsible-side.css +1 -1
  21. package/assets/css/components/collapsible-side.css.map +1 -1
  22. package/assets/css/components/content.component.css +1 -0
  23. package/assets/css/components/content.component.css.map +1 -0
  24. package/assets/css/components/darkmode.component.css +1 -0
  25. package/assets/css/components/darkmode.component.css.map +1 -0
  26. package/assets/css/components/doughnutchart.component.css +1 -1
  27. package/assets/css/components/doughnutchart.component.css.map +1 -1
  28. package/assets/css/components/fileupload.css.map +1 -1
  29. package/assets/css/components/inline-edit.css +1 -1
  30. package/assets/css/components/inline-edit.css.map +1 -1
  31. package/assets/css/components/marketing.component.css +1 -0
  32. package/assets/css/components/marketing.component.css.map +1 -0
  33. package/assets/css/components/menu.component.css.map +1 -1
  34. package/assets/css/components/{menu.css → menu.global.css} +1 -1
  35. package/assets/css/components/menu.global.css.map +1 -0
  36. package/assets/css/components/milestone.css +1 -0
  37. package/assets/css/components/milestone.css.map +1 -0
  38. package/assets/css/components/multi-step.component.css +1 -1
  39. package/assets/css/components/multi-step.component.css.map +1 -1
  40. package/assets/css/components/multiselect.css +1 -1
  41. package/assets/css/components/multiselect.css.map +1 -1
  42. package/assets/css/components/multiselect.preload.css +1 -1
  43. package/assets/css/components/multiselect.preload.css.map +1 -1
  44. package/assets/css/components/nav.component.css +1 -1
  45. package/assets/css/components/nav.component.css.map +1 -1
  46. package/assets/css/components/nav.global.css +1 -1
  47. package/assets/css/components/nav.global.css.map +1 -1
  48. package/assets/css/components/notification.css +1 -1
  49. package/assets/css/components/notification.css.map +1 -1
  50. package/assets/css/components/pagination.css.map +1 -1
  51. package/assets/css/components/property-searchbar.css +1 -1
  52. package/assets/css/components/property-searchbar.css.map +1 -1
  53. package/assets/css/components/rank.component.css +1 -1
  54. package/assets/css/components/rank.component.css.map +1 -1
  55. package/assets/css/components/rankings.component.css +1 -1
  56. package/assets/css/components/rankings.component.css.map +1 -1
  57. package/assets/css/components/rankings.global.css +1 -1
  58. package/assets/css/components/rankings.global.css.map +1 -1
  59. package/assets/css/components/slider.css.map +1 -1
  60. package/assets/css/components/split-button.component.css +1 -0
  61. package/assets/css/components/split-button.component.css.map +1 -0
  62. package/assets/css/components/word-count.component.css +1 -0
  63. package/assets/css/components/word-count.component.css.map +1 -0
  64. package/assets/css/core.min.css +1 -1
  65. package/assets/css/core.min.css.map +1 -1
  66. package/assets/css/mobile-core.min.css +1 -1
  67. package/assets/css/mobile-core.min.css.map +1 -1
  68. package/assets/css/mobile.min.css +1 -1
  69. package/assets/css/mobile.min.css.map +1 -1
  70. package/assets/css/style.min.css +1 -1
  71. package/assets/css/style.min.css.map +1 -1
  72. package/assets/js/components/accordion/accordion.component.js +40 -19
  73. package/assets/js/components/accordion/accordion.component.min.js +15 -15
  74. package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
  75. package/assets/js/components/actionbar/actionbar.component.js +59 -31
  76. package/assets/js/components/actionbar/actionbar.component.min.js +18 -17
  77. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  78. package/assets/js/components/address-lookup/address-lookup.component.js +6 -8
  79. package/assets/js/components/address-lookup/address-lookup.component.min.js +10 -12
  80. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  81. package/assets/js/components/advanced-select/advanced-select.component.js +63 -0
  82. package/assets/js/components/advanced-select/advanced-select.component.min.js +23 -0
  83. package/assets/js/components/advanced-select/advanced-select.component.min.js.map +1 -0
  84. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  85. package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
  86. package/assets/js/components/barchart/barchart.component.min.js +2 -2
  87. package/assets/js/components/barchart/barchart.component.min.js.map +1 -1
  88. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  89. package/assets/js/components/bento-grid/bento-grid.component.min.js.map +1 -1
  90. package/assets/js/components/calendar/calendar.component.js +1100 -0
  91. package/assets/js/components/calendar/calendar.component.min.js +170 -0
  92. package/assets/js/components/calendar/calendar.component.min.js.map +1 -0
  93. package/assets/js/components/card/card.component.js +14 -8
  94. package/assets/js/components/card/card.component.min.js +16 -10
  95. package/assets/js/components/card/card.component.min.js.map +1 -1
  96. package/assets/js/components/carousel/carousel.component.js +17 -19
  97. package/assets/js/components/carousel/carousel.component.min.js +17 -19
  98. package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
  99. package/assets/js/components/collapsible-side/collapsible-side.component.js +47 -12
  100. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +6 -5
  101. package/assets/js/components/collapsible-side/collapsible-side.component.min.js.map +1 -1
  102. package/assets/js/components/content/content.component.js +66 -0
  103. package/assets/js/components/content/content.component.min.js +15 -0
  104. package/assets/js/components/content/content.component.min.js.map +1 -0
  105. package/assets/js/components/darkmode/darkmode.component.js +70 -0
  106. package/assets/js/components/darkmode/darkmode.component.min.js +10 -0
  107. package/assets/js/components/darkmode/darkmode.component.min.js.map +1 -0
  108. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +2 -2
  109. package/assets/js/components/doughnutchart/doughnutchart.component.min.js.map +1 -1
  110. package/assets/js/components/fileupload/fileupload.component.min.js +1 -1
  111. package/assets/js/components/fileupload/fileupload.component.min.js.map +1 -1
  112. package/assets/js/components/filter-card/filter-card.component.min.js +1 -1
  113. package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -1
  114. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  115. package/assets/js/components/filterlist/filterlist.component.min.js.map +1 -1
  116. package/assets/js/components/header/header.component.min.js +1 -1
  117. package/assets/js/components/header/header.component.min.js.map +1 -1
  118. package/assets/js/components/inline-edit/inline-edit.component.min.js +5 -5
  119. package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -1
  120. package/assets/js/components/marketing/marketing.component.js +1 -1
  121. package/assets/js/components/marketing/marketing.component.min.js +2 -2
  122. package/assets/js/components/marketing/marketing.component.min.js.map +1 -1
  123. package/assets/js/components/menu/menu.component.js +12 -4
  124. package/assets/js/components/menu/menu.component.min.js +4 -5
  125. package/assets/js/components/menu/menu.component.min.js.map +1 -1
  126. package/assets/js/components/milestone/milestone.component.js +36 -0
  127. package/assets/js/components/milestone/milestone.component.min.js +15 -0
  128. package/assets/js/components/milestone/milestone.component.min.js.map +1 -0
  129. package/assets/js/components/milestone-group/milestone-group.component.js +33 -0
  130. package/assets/js/components/milestone-group/milestone-group.component.min.js +13 -0
  131. package/assets/js/components/milestone-group/milestone-group.component.min.js.map +1 -0
  132. package/assets/js/components/multi-step/multi-step.component.min.js +3 -3
  133. package/assets/js/components/multi-step/multi-step.component.min.js.map +1 -1
  134. package/assets/js/components/multiselect/multiselect.component.js +54 -2
  135. package/assets/js/components/multiselect/multiselect.component.min.js +5 -5
  136. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  137. package/assets/js/components/nav/nav.component.js +18 -0
  138. package/assets/js/components/nav/nav.component.min.js +6 -6
  139. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  140. package/assets/js/components/notification/notification.component.js +15 -11
  141. package/assets/js/components/notification/notification.component.min.js +4 -4
  142. package/assets/js/components/notification/notification.component.min.js.map +1 -1
  143. package/assets/js/components/pagination/pagination.component.min.js +1 -1
  144. package/assets/js/components/pagination/pagination.component.min.js.map +1 -1
  145. package/assets/js/components/rank/rank.component.js +346 -210
  146. package/assets/js/components/rank/rank.component.min.js +346 -211
  147. package/assets/js/components/rank/rank.component.min.js.map +1 -1
  148. package/assets/js/components/rankings/rankings.component.js +17 -8
  149. package/assets/js/components/rankings/rankings.component.min.js +14 -8
  150. package/assets/js/components/rankings/rankings.component.min.js.map +1 -1
  151. package/assets/js/components/record-card/record-card.component.min.js +1 -1
  152. package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
  153. package/assets/js/components/search/search.component.js +5 -3
  154. package/assets/js/components/search/search.component.min.js +6 -6
  155. package/assets/js/components/search/search.component.min.js.map +1 -1
  156. package/assets/js/components/slider/slider.component.min.js +1 -1
  157. package/assets/js/components/slider/slider.component.min.js.map +1 -1
  158. package/assets/js/components/split-button/split-button.component.js +58 -0
  159. package/assets/js/components/split-button/split-button.component.min.js +31 -0
  160. package/assets/js/components/split-button/split-button.component.min.js.map +1 -0
  161. package/assets/js/components/table/table.component.js +12 -0
  162. package/assets/js/components/table/table.component.min.js +3 -3
  163. package/assets/js/components/table/table.component.min.js.map +1 -1
  164. package/assets/js/components/table-ajax/table-ajax.component.js +12 -0
  165. package/assets/js/components/table-ajax/table-ajax.component.min.js +3 -3
  166. package/assets/js/components/table-ajax/table-ajax.component.min.js.map +1 -1
  167. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  168. package/assets/js/components/table-basic/table-basic.component.min.js.map +1 -1
  169. package/assets/js/components/table-no-submit/table-no-submit.component.js +12 -0
  170. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +3 -3
  171. package/assets/js/components/table-no-submit/table-no-submit.component.min.js.map +1 -1
  172. package/assets/js/components/table-submit/table-submit.component.js +12 -0
  173. package/assets/js/components/table-submit/table-submit.component.min.js +3 -3
  174. package/assets/js/components/table-submit/table-submit.component.min.js.map +1 -1
  175. package/assets/js/components/tabs/tabs.component.min.js +1 -1
  176. package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
  177. package/assets/js/components/video-card/video-card.component.min.js +1 -1
  178. package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
  179. package/assets/js/components/word-count/word-count.component.js +81 -0
  180. package/assets/js/components/word-count/word-count.component.min.js +12 -0
  181. package/assets/js/components/word-count/word-count.component.min.js.map +1 -0
  182. package/assets/js/components.js +59 -0
  183. package/assets/js/modules/advanced-select.js +106 -0
  184. package/assets/js/modules/dialogs.js +53 -51
  185. package/assets/js/modules/dynamicEvents.js +7 -0
  186. package/assets/js/modules/inputs.js +0 -18
  187. package/assets/js/modules/milestone-group.js +30 -0
  188. package/assets/js/modules/milestone.js +89 -0
  189. package/assets/js/modules/table.js +11 -1
  190. package/assets/js/modules/videos.js +1 -1
  191. package/assets/js/scripts.bundle.js +3 -3
  192. package/assets/js/scripts.bundle.js.map +1 -1
  193. package/assets/js/scripts.bundle.min.js +2 -2
  194. package/assets/js/scripts.bundle.min.js.map +1 -1
  195. package/assets/js/scripts.js +5 -0
  196. package/assets/sass/_components.scss +15 -4
  197. package/assets/sass/_example.scss +1 -1
  198. package/assets/sass/_functions/utility-mixins.scss +40 -0
  199. package/assets/sass/_functions/variables.scss +11 -5
  200. package/assets/sass/components/actionbar.component.scss +23 -1
  201. package/assets/sass/components/actionbar.global.scss +5 -5
  202. package/assets/sass/components/{address-lookup.scss → address-lookup.component.scss} +10 -0
  203. package/assets/sass/components/calendar.component.scss +1272 -0
  204. package/assets/sass/components/calendar.config.scss +423 -0
  205. package/assets/sass/components/card.component.scss +4 -34
  206. package/assets/sass/components/carousel.component.scss +5 -0
  207. package/assets/sass/components/collapsible-side.scss +91 -95
  208. package/assets/sass/components/content.component.scss +18 -0
  209. package/assets/sass/components/darkmode.component.scss +22 -0
  210. package/assets/sass/components/inline-edit.scss +2 -0
  211. package/assets/sass/components/{marketing.scss → marketing.component.scss} +2 -6
  212. package/assets/sass/components/menu.component.scss +3 -8
  213. package/assets/sass/components/milestone.scss +216 -0
  214. package/assets/sass/components/multi-step.component.scss +1 -1
  215. package/assets/sass/components/multiselect.preload.scss +1 -1
  216. package/assets/sass/components/multiselect.scss +2 -0
  217. package/assets/sass/components/nav.component.scss +17 -6
  218. package/assets/sass/components/nav.global.scss +29 -3
  219. package/assets/sass/components/notification.scss +32 -13
  220. package/assets/sass/components/rank.component.scss +197 -24
  221. package/assets/sass/components/rankings.component.scss +38 -28
  222. package/assets/sass/components/rankings.global.scss +64 -2
  223. package/assets/sass/components/split-button.component.scss +79 -0
  224. package/assets/sass/components/table-basic.global.scss +32 -32
  225. package/assets/sass/components/word-count.component.scss +26 -0
  226. package/assets/sass/elements/admin-panel.scss +1 -1
  227. package/assets/sass/elements/badge-tag.scss +5 -1
  228. package/assets/sass/elements/buttons--compact.scss +4 -0
  229. package/assets/sass/elements/details.scss +33 -7
  230. package/assets/sass/elements/forms.scss +135 -28
  231. package/assets/sass/elements/links.scss +132 -4
  232. package/assets/sass/elements/lists.scss +62 -1
  233. package/assets/sass/elements/popover.scss +64 -10
  234. package/assets/sass/elements/toggle-button.scss +8 -8
  235. package/assets/sass/elements/type.scss +7 -10
  236. package/assets/sass/foundations/colours.scss +0 -0
  237. package/assets/sass/foundations/reboot.scss +8 -1
  238. package/assets/sass/foundations/root.scss +41 -51
  239. package/assets/sass/templates/form.scss +0 -2
  240. package/assets/ts/components/accordion/accordion.component.ts +47 -26
  241. package/assets/ts/components/actionbar/actionbar.component.ts +58 -22
  242. package/assets/ts/components/address-lookup/address-lookup.component.ts +6 -8
  243. package/assets/ts/components/advanced-select/advanced-select.component.ts +74 -0
  244. package/assets/ts/components/calendar/calendar.component.ts +1330 -0
  245. package/assets/ts/components/card/card.component.ts +15 -14
  246. package/assets/ts/components/carousel/carousel.component.ts +17 -19
  247. package/assets/ts/components/collapsible-side/collapsible-side.component.ts +53 -12
  248. package/assets/ts/components/content/content.component.ts +78 -0
  249. package/assets/ts/components/darkmode/darkmode.component.ts +85 -0
  250. package/assets/ts/components/marketing/marketing.component.ts +1 -1
  251. package/assets/ts/components/menu/menu.component.ts +18 -10
  252. package/assets/ts/components/milestone/milestone.component.ts +43 -0
  253. package/assets/ts/components/milestone-group/milestone-group.component.ts +39 -0
  254. package/assets/ts/components/multiselect/multiselect.component.ts +60 -3
  255. package/assets/ts/components/nav/nav.component.ts +18 -0
  256. package/assets/ts/components/notification/notification.component.ts +30 -11
  257. package/assets/ts/components/rank/rank.component.ts +345 -209
  258. package/assets/ts/components/rankings/rankings.component.ts +27 -8
  259. package/assets/ts/components/search/search.component.ts +6 -4
  260. package/assets/ts/components/split-button/split-button.component.ts +67 -0
  261. package/assets/ts/components/table/table.component.ts +14 -0
  262. package/assets/ts/components/table-ajax/table-ajax.component.ts +14 -0
  263. package/assets/ts/components/table-no-submit/table-no-submit.component.ts +14 -0
  264. package/assets/ts/components/table-submit/table-submit.component.ts +14 -0
  265. package/assets/ts/components/video-card/video-card.component.ts +2 -3
  266. package/assets/ts/components/word-count/word-count.component.ts +91 -0
  267. package/assets/ts/components.ts +64 -0
  268. package/assets/ts/modules/advanced-select.ts +120 -0
  269. package/assets/ts/modules/data-layer.md +0 -5
  270. package/assets/ts/modules/dialogs.ts +64 -61
  271. package/assets/ts/modules/dynamicEvents.ts +10 -0
  272. package/assets/ts/modules/inputs.ts +0 -25
  273. package/assets/ts/modules/milestone-group.ts +39 -0
  274. package/assets/ts/modules/milestone.ts +119 -0
  275. package/assets/ts/modules/table.ts +15 -1
  276. package/assets/ts/modules/videos.ts +19 -37
  277. package/assets/ts/scripts.ts +6 -3
  278. package/dist/components.es.js +849 -1079
  279. package/dist/components.umd.js +1052 -220
  280. package/package.json +6 -6
  281. package/src/components/Accordion/Accordion.vue +14 -23
  282. package/src/components/Accordion/AccordionItem.vue +27 -43
  283. package/src/components/Actionbar/Actionbar.vue +17 -19
  284. package/src/components/AddressLookup/AddressLookup.vue +17 -18
  285. package/src/components/AdvancedSelect/AdvancedSelect.vue +22 -0
  286. package/src/components/AppliedFilters/AppliedFilters.vue +16 -18
  287. package/src/components/Banner/Banner.vue +18 -21
  288. package/src/components/BarChart/BarChart.vue +17 -18
  289. package/src/components/Calendar/Calendar.vue +20 -0
  290. package/src/components/Card/Card.vue +17 -17
  291. package/src/components/Carousel/Carousel.vue +17 -20
  292. package/src/components/CollapsibleSideMenu/CollapsibleSideMenu.vue +7 -13
  293. package/src/components/Content/Content.vue +22 -0
  294. package/src/components/DarkMode/DarkMode.vue +19 -0
  295. package/src/components/DoughnutChart/DoughnutChart.vue +17 -18
  296. package/src/components/FileUpload/FileUpload.vue +22 -28
  297. package/src/components/FilterCard/FilterCard.vue +17 -18
  298. package/src/components/Filterlist/Filterlist.vue +17 -0
  299. package/src/components/Header/Header.vue +28 -29
  300. package/src/components/InlineEdit/InlineEdit.vue +11 -19
  301. package/src/components/Menu/Menu.vue +17 -17
  302. package/src/components/Milestones/Milestone.vue +22 -0
  303. package/src/components/Milestones/MilestoneGroup.vue +24 -0
  304. package/src/components/Multiselect/Multiselect.vue +17 -18
  305. package/src/components/Nav/Nav.vue +17 -19
  306. package/src/components/Notification/Notification.vue +17 -15
  307. package/src/components/Pagination/Pagination.vue +16 -16
  308. package/src/components/Rank/Rank.vue +17 -18
  309. package/src/components/Rankings/Rankings.vue +17 -27
  310. package/src/components/RecordCard/RecordCard.vue +17 -18
  311. package/src/components/Search/Search.vue +17 -17
  312. package/src/components/Slider/Slider.vue +17 -17
  313. package/src/components/SplitButton/README.md +19 -0
  314. package/src/components/SplitButton/SplitButton.vue +23 -0
  315. package/src/components/Tabs/Tabs.vue +17 -17
  316. package/src/components/VideoCard/VideoCard.vue +17 -18
  317. package/src/components/WordCount/WordCount.vue +22 -0
  318. package/src/index.js +2 -0
  319. package/assets/css/components/address-lookup.css +0 -1
  320. package/assets/css/components/address-lookup.css.map +0 -1
  321. package/assets/css/components/marketing.css +0 -1
  322. package/assets/css/components/marketing.css.map +0 -1
  323. package/assets/css/components/menu.css.map +0 -1
  324. package/assets/css/components/nav.old.css +0 -1
  325. package/assets/css/components/nav.old.css.map +0 -1
  326. package/assets/sass/components/nav.old.scss +0 -891
  327. /package/assets/sass/components/{menu.scss → menu.global.scss} +0 -0
@@ -132,80 +132,83 @@ const extendDialogs = (body): void => {
132
132
 
133
133
  // Popover
134
134
  if (event && event.target instanceof HTMLElement && event.target.closest('.dialog__wrapper > button')) {
135
- event.stopPropagation();
136
-
137
135
  const btn = event.target.closest('.dialog__wrapper > button');
138
136
  const parent = btn.parentNode;
139
- let dataEvent = 'openPopover';
140
- const popover = parent.querySelector(':scope > dialog');
141
-
142
- // close open dialogs
143
- if (
144
- document.querySelector('*:not([data-keep-open]) > dialog[open]') &&
145
- document.querySelector('*:not([data-keep-open]) > dialog[open]') != popover
146
- ) {
147
- // Check that the ope dialog isn't a parent of the dialog being opened
148
- if (btn.closest('dialog[open]') != document.querySelector('*:not([data-keep-open]) > dialog[open]')) {
149
- document.querySelector('*:not([data-keep-open]) > dialog[open]').close();
150
- }
151
- }
152
-
153
- // Remove active class from exiting active buttons
154
- Array.from(document.querySelectorAll('.dialog__wrapper > button')).forEach((btnElement) => {
155
- btnElement.removeAttribute('aria-expanded');
156
- });
157
137
 
158
- if (popover.hasAttribute('open')) {
159
- popover.close();
160
- dataEvent = 'closePopover';
138
+ if (parent.querySelector('dialog')) {
139
+ event.stopPropagation();
161
140
 
162
- popover.removeAttribute('style');
163
- btn.removeAttribute('aria-expanded');
164
- } else {
165
- popover.show();
166
- btn.setAttribute('aria-expanded', true);
141
+ let dataEvent = 'openPopover';
142
+ const popover = parent.querySelector(':scope > dialog');
167
143
 
168
- const position = btn.getBoundingClientRect();
169
- let topOffset = position.top;
170
- let leftOffset = position.left;
171
-
172
- if (btn.closest('iam-table')) {
173
- const container = btn.closest('iam-table').parentNode.getBoundingClientRect();
174
-
175
- topOffset -= container.top;
176
- leftOffset -= container.left;
144
+ // close open dialogs
145
+ if (
146
+ document.querySelector('*:not([data-keep-open]) > dialog[open]') &&
147
+ document.querySelector('*:not([data-keep-open]) > dialog[open]') != popover
148
+ ) {
149
+ // Check that the ope dialog isn't a parent of the dialog being opened
150
+ if (btn.closest('dialog[open]') != document.querySelector('*:not([data-keep-open]) > dialog[open]')) {
151
+ document.querySelector('*:not([data-keep-open]) > dialog[open]').close();
152
+ }
177
153
  }
178
154
 
179
- if (popover.classList.contains('dialog--fix')) {
180
- popover.setAttribute(
181
- 'style',
182
- `position:fixed;top: ${topOffset}px; left: ${leftOffset}px; margin: 3rem 0 0 0;`
183
- );
155
+ // Remove active class from exiting active buttons
156
+ Array.from(document.querySelectorAll('.dialog__wrapper > button')).forEach((btnElement) => {
157
+ btnElement.removeAttribute('aria-expanded');
158
+ });
159
+
160
+ if (popover.hasAttribute('open')) {
161
+ popover.close();
162
+ dataEvent = 'closePopover';
163
+
164
+ popover.removeAttribute('style');
165
+ btn.removeAttribute('aria-expanded');
166
+ } else {
167
+ popover.show();
168
+ btn.setAttribute('aria-expanded', true);
169
+
170
+ const position = btn.getBoundingClientRect();
171
+ let topOffset = position.top;
172
+ let leftOffset = position.left;
173
+
174
+ if (btn.closest('iam-table')) {
175
+ const container = btn.closest('iam-table').parentNode.getBoundingClientRect();
176
+
177
+ topOffset -= container.top;
178
+ leftOffset -= container.left;
179
+ }
180
+
181
+ if (popover.classList.contains('dialog--fix')) {
182
+ popover.setAttribute(
183
+ 'style',
184
+ `position:fixed;top: ${topOffset}px; left: ${leftOffset}px; margin: 3rem 0 0 0;`
185
+ );
186
+ }
184
187
  }
185
- }
186
188
 
187
- // When the dialog is fixed it could dip under the viewport
188
- // Lets check the dimensions and transform it to appear above
189
- let boundingRec = popover.getBoundingClientRect();
190
- const popoverBottom = boundingRec.bottom - window.scrollY;
191
- const windowPos = window.innerHeight - window.scrollY;
192
- if (popoverBottom > windowPos) {
193
- const currentStyle = popover.hasAttribute('style') ? popover.getAttribute('style') + ' ' : '';
194
- popover.setAttribute('style', currentStyle + `transform: translate(0, calc(-100% - 4rem))`);
189
+ // When the dialog is fixed it could dip under the viewport
190
+ // Lets check the dimensions and transform it to appear above
191
+ let boundingRec = popover.getBoundingClientRect();
192
+ const popoverBottom = boundingRec.bottom - window.scrollY;
193
+ const windowPos = window.innerHeight - window.scrollY;
194
+ if (popoverBottom > windowPos) {
195
+ const currentStyle = popover.hasAttribute('style') ? popover.getAttribute('style') + ' ' : '';
196
+ popover.setAttribute('style', currentStyle + `transform: translate(0, calc(-100% - 4rem))`);
195
197
 
196
- // Check that the dialog doesn't go over the top of the page
197
- boundingRec = popover.getBoundingClientRect();
198
- const popoverTop = boundingRec.top - window.scrollY;
198
+ // Check that the dialog doesn't go over the top of the page
199
+ boundingRec = popover.getBoundingClientRect();
200
+ const popoverTop = boundingRec.top - window.scrollY;
199
201
 
200
- if (popoverTop < 100) popover.removeAttribute('style');
201
- }
202
+ if (popoverTop < 100) popover.removeAttribute('style');
203
+ }
202
204
 
203
- window.dataLayer = window.dataLayer || [];
205
+ window.dataLayer = window.dataLayer || [];
204
206
 
205
- window.dataLayer.push({
206
- event: dataEvent,
207
- id: btn.textContent,
208
- });
207
+ window.dataLayer.push({
208
+ event: dataEvent,
209
+ id: btn.textContent,
210
+ });
211
+ }
209
212
  }
210
213
 
211
214
  // Close popovers when clicked away
@@ -1,4 +1,14 @@
1
1
  // Create the event listeners
2
+ window.triggerDynamicEvent = (element, event = 'change'): void => {
3
+ console.log('event');
4
+
5
+ if (element.hasAttribute('data-change-events') && event == 'change')
6
+ splitEvents(element, element.getAttribute('data-change-events'));
7
+
8
+ if (element.hasAttribute('data-click-events') && event == 'click')
9
+ splitEvents(element, element.getAttribute('data-click-events'));
10
+ };
11
+
2
12
  const createDynamicEvents = (): void => {
3
13
  // Change event
4
14
  document.addEventListener('change', (event) => {
@@ -2,12 +2,6 @@ import hibpCheck from '../vendor/hibp.js';
2
2
 
3
3
  const extendInputs = (body): void => {
4
4
  function loadInput(): void {
5
- // maxlength counter init
6
- Array.from(document.querySelectorAll('input[maxlength],textarea[maxlength]')).forEach((input) => {
7
- const wrapper = input.parentElement;
8
- setMaxlengthVars(input, wrapper);
9
- });
10
-
11
5
  Array.from(document.querySelectorAll('label input')).forEach((input) => {
12
6
  if (!input.closest('label').querySelector('.optional-text') && !input.hasAttribute('required')) {
13
7
  if (input.parentNode.tagName.toLowerCase() == 'span')
@@ -76,9 +70,6 @@ const extendInputs = (body): void => {
76
70
  if (input.hasAttribute('type') && input.getAttribute('type') == 'color')
77
71
  input.nextElementSibling.value = input.value;
78
72
 
79
- if (input.hasAttribute('maxlength') && input.nextElementSibling)
80
- input.nextElementSibling.setAttribute('data-count', input.value.length);
81
-
82
73
  if (input.hasAttribute('data-strength-checker')) checkPWDStrength(input);
83
74
  }
84
75
  });
@@ -129,22 +120,6 @@ const extendInputs = (body): void => {
129
120
  });
130
121
  };
131
122
 
132
- export const setMaxlengthVars = (input): void => {
133
- const wrapper = input.parentElement;
134
- const maxlength = input.getAttribute('maxlength');
135
-
136
- wrapper.style.setProperty('--maxlength', maxlength);
137
-
138
- let span = input.nextElementSibling;
139
-
140
- if (!span || (span && span.classList.contains('invalid-feedback'))) {
141
- span = document.createElement('span');
142
- wrapper.insertBefore(span, input.nextSibling);
143
- }
144
-
145
- span.setAttribute('data-count', input.value.length);
146
- };
147
-
148
123
  export const changeType = (input, type): void => {
149
124
  if (input.hasAttribute('type') && input.getAttribute('type') == 'password')
150
125
  input.setAttribute('data-password-type', true);
@@ -0,0 +1,39 @@
1
+ export const showFuture = function (milestoneGroupElement: Element): void {
2
+ const futureToggle = milestoneGroupElement.dataset.showAllToggle;
3
+
4
+ if (!futureToggle) {
5
+ return;
6
+ }
7
+
8
+ const toggleBtn = document.createElement('button');
9
+ toggleBtn.innerHTML = 'Show next steps';
10
+ toggleBtn.classList.add('btn', 'btn-tertiary', 'show-all-toggle');
11
+
12
+ milestoneGroupElement.appendChild(toggleBtn);
13
+
14
+ toggleBtn.addEventListener('click', () => {
15
+ if (milestoneGroupElement.classList.contains('show-all')) {
16
+ toggleBtn.innerHTML = 'Show next steps';
17
+
18
+ milestoneGroupElement.classList.remove('show-all');
19
+ toggleInteractionEvent('hide-future-items', milestoneGroupElement);
20
+ } else {
21
+ toggleBtn.innerHTML = 'Hide next steps';
22
+
23
+ milestoneGroupElement.classList.add('show-all');
24
+ toggleInteractionEvent('show-future-items', milestoneGroupElement);
25
+ }
26
+ });
27
+ };
28
+
29
+ const toggleInteractionEvent = function (eventName: string, element: Element): void {
30
+ const customEvent = new CustomEvent(eventName, {});
31
+
32
+ element.dispatchEvent(customEvent);
33
+ };
34
+
35
+ const milestoneGroup = function (milestoneGroupElement: Element): void {
36
+ showFuture(milestoneGroupElement);
37
+ };
38
+
39
+ export default milestoneGroup;
@@ -0,0 +1,119 @@
1
+ export const setStatus = function (milestoneElement: Element): void {
2
+ const status = milestoneElement.dataset.status;
3
+
4
+ if (!status) {
5
+ return;
6
+ }
7
+
8
+ const milestoneWrap = milestoneElement.shadowRoot.querySelector('.milestone-wrap');
9
+ const statusTag = document.createElement('span');
10
+ statusTag.setAttribute('part', 'status');
11
+ statusTag.classList.add('milestone-status');
12
+ statusTag.innerHTML = `${status} Step`;
13
+
14
+ if (status === 'Current') {
15
+ milestoneElement.classList.add('current');
16
+ }
17
+
18
+ milestoneWrap.insertAdjacentElement('afterbegin', statusTag);
19
+ };
20
+
21
+ export const getMilestoneTasks = function (milestoneElement: Element): void {
22
+ const taskWrap = milestoneElement.shadowRoot.querySelector('.task-wrap');
23
+ const tasks = milestoneElement.dataset.items ? JSON.parse(milestoneElement.dataset.items) : [];
24
+
25
+ if (!tasks.length) {
26
+ return;
27
+ }
28
+
29
+ tasks.forEach((task) => {
30
+ const taskItem = document.createElement('details');
31
+ const taskName = document.createElement('summary');
32
+ const detailsWrap = document.createElement('div');
33
+ const taskDescription = document.createElement('p');
34
+
35
+ detailsWrap.classList.add('task-details');
36
+
37
+ taskName.innerHTML = task.name;
38
+
39
+ if (task.date_completed) {
40
+ taskName.classList.add('complete');
41
+ }
42
+
43
+ taskItem.appendChild(taskName);
44
+
45
+ if (task.description) {
46
+ taskDescription.innerHTML = task.description;
47
+ detailsWrap.appendChild(taskDescription);
48
+ }
49
+
50
+ if (task.actions.length) {
51
+ detailsWrap.appendChild(getSubtasks(task.actions, taskName));
52
+ }
53
+
54
+ taskItem.appendChild(detailsWrap);
55
+
56
+ taskWrap.insertAdjacentElement('beforeend', taskItem);
57
+
58
+ // Fire tracking events
59
+ taskItem.addEventListener('click', () => {
60
+ if (taskItem?.hasAttribute('open')) {
61
+ itemInteractionEvent('milestone-item-closed', task.name, milestoneElement);
62
+ } else {
63
+ itemInteractionEvent('milestone-item-opened', task.name, milestoneElement);
64
+ }
65
+ });
66
+ });
67
+
68
+ milestoneElement.appendChild(taskWrap);
69
+ };
70
+
71
+ const itemInteractionEvent = function (eventName: string, taskName: string, element: Element): void {
72
+ const customEvent = new CustomEvent(eventName, {
73
+ detail: {
74
+ title: taskName,
75
+ },
76
+ });
77
+
78
+ element.dispatchEvent(customEvent);
79
+ };
80
+
81
+ const getSubtasks = function (actions: Array, taskName: Element): void {
82
+ const actionsWrap = document.createElement('ul');
83
+ const totalCount = actions.length;
84
+ const completed = actions.filter((action) => action.date_completed);
85
+ const completedCount = completed.length || 0;
86
+
87
+ if (totalCount < 1) {
88
+ return;
89
+ }
90
+
91
+ taskName.innerHTML += ` (${completedCount}/${totalCount})`;
92
+
93
+ actions.forEach((action) => {
94
+ const actionItem = document.createElement('li');
95
+ const actionCompletedDate = document.createElement('span');
96
+
97
+ if (action.date_completed) {
98
+ actionItem.classList.add('complete');
99
+
100
+ actionCompletedDate.classList.add('action-date');
101
+ actionCompletedDate.innerHTML = action.date_completed;
102
+ }
103
+
104
+ actionItem.innerHTML = action.action;
105
+
106
+ actionItem.appendChild(actionCompletedDate);
107
+
108
+ actionsWrap.appendChild(actionItem);
109
+ });
110
+
111
+ return actionsWrap;
112
+ };
113
+
114
+ const milestone = function (milestoneElement: Element): void {
115
+ setStatus(milestoneElement);
116
+ getMilestoneTasks(milestoneElement);
117
+ };
118
+
119
+ export default milestone;
@@ -343,7 +343,21 @@ export const setupAdvancedTable = (component, table): void => {
343
343
  addSelectboxes(component, table, actionbar);
344
344
  }
345
345
 
346
- component.querySelectorAll('.dialog__wrapper .btn-compact').forEach((btn) => {
346
+ component.querySelectorAll('.dialog__wrapper .btn-compact').forEach((btn, index) => {
347
+ const wrapper = btn.closest('.dialog__wrapper');
348
+ const dialog = wrapper.querySelector('dialog');
349
+
350
+ // Transform dialog into a menu custom element
351
+ if (dialog) {
352
+ const id = `menu${uniqueID(index)}`;
353
+
354
+ dialog.setAttribute('id', id);
355
+ dialog.setAttribute('popover', 'auto');
356
+ btn.setAttribute('popovertarget', id);
357
+
358
+ dialog.outerHTML = dialog.outerHTML.replace(/<dialog/g, '<iam-menu').replace(/<\/dialog>/g, '</iam-menu>');
359
+ }
360
+
347
361
  btn.classList.add('btn-sm');
348
362
  btn.classList.add('m-0');
349
363
 
@@ -1,30 +1,23 @@
1
- const videoSupport = async(body): void => {
2
-
3
- if (document.querySelector('.youtube-link[data-youtube]') && !document.body.classList.contains('youtubeLoaded')) {
4
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
5
- const loaded = await loadYouTubeScripts();
6
- }
7
- setTimeout(async() => {
8
-
1
+ const videoSupport = async (body): void => {
9
2
  if (document.querySelector('.youtube-link[data-youtube]') && !document.body.classList.contains('youtubeLoaded')) {
10
3
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
11
4
  const loaded = await loadYouTubeScripts();
12
5
  }
13
- }, "2000");
14
-
15
-
16
- body.addEventListener('click', async(event) => {
6
+ setTimeout(async () => {
7
+ if (document.querySelector('.youtube-link[data-youtube]') && !document.body.classList.contains('youtubeLoaded')) {
8
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
9
+ const loaded = await loadYouTubeScripts();
10
+ }
11
+ }, '2000');
17
12
 
13
+ body.addEventListener('click', async (event) => {
18
14
  let target = (event.target as HTMLElement).closest<HTMLElement>('.youtube-link[data-youtube]');
19
15
 
20
- if(!target){
16
+ if (!target) {
21
17
  target = (event.target as HTMLElement).closest<HTMLElement>('.vimeo-link[data-vimeo]');
22
18
  }
23
-
24
-
25
- if(target && target.hasAttribute('data-youtube')){
26
-
27
19
 
20
+ if (target && target.hasAttribute('data-youtube')) {
28
21
  event.preventDefault();
29
22
 
30
23
  if (!document.body.classList.contains('youtubeLoaded')) {
@@ -33,7 +26,7 @@ setTimeout(async() => {
33
26
  }
34
27
 
35
28
  const link_id = 'youtube-' + target.getAttribute('data-youtube');
36
-
29
+
37
30
  if (!document.getElementById(`${link_id}-dialog`)) {
38
31
  document.body.insertAdjacentHTML(
39
32
  'beforeend',
@@ -49,7 +42,7 @@ setTimeout(async() => {
49
42
  });
50
43
  target.dispatchEvent(customEvent);
51
44
  window.dataLayer.push(customEvent.detail);
52
-
45
+
53
46
  createYoutTubeVideo(embed, target.getAttribute('data-youtube'));
54
47
  dialog.showModal();
55
48
 
@@ -67,14 +60,11 @@ setTimeout(async() => {
67
60
  target.dispatchEvent(customEvent);
68
61
  window.dataLayer.push(customEvent.detail);
69
62
  });
70
-
71
- }
72
- else if(target && target.hasAttribute('data-vimeo')){
73
-
63
+ } else if (target && target.hasAttribute('data-vimeo')) {
74
64
  event.preventDefault();
75
65
 
76
66
  const link_id = 'vimeo-' + target.getAttribute('data-youtube');
77
-
67
+
78
68
  if (!document.getElementById(`${link_id}-dialog`)) {
79
69
  document.body.insertAdjacentHTML(
80
70
  'beforeend',
@@ -85,7 +75,6 @@ setTimeout(async() => {
85
75
  const dialog = document.getElementById(`${link_id}-dialog`);
86
76
  const embed = document.getElementById(link_id);
87
77
 
88
-
89
78
  const videoId = target.getAttribute('data-vimeo');
90
79
 
91
80
  const customEvent = new CustomEvent('play-video', {
@@ -99,7 +88,6 @@ setTimeout(async() => {
99
88
 
100
89
  dialog.showModal();
101
90
 
102
-
103
91
  dialog.addEventListener('close', () => {
104
92
  embed.innerHTML = ``; // Remove the video since we cant pause it
105
93
 
@@ -110,16 +98,11 @@ setTimeout(async() => {
110
98
  window.dataLayer.push(customEvent.detail);
111
99
  });
112
100
  }
113
-
114
-
115
101
  });
102
+ };
116
103
 
117
- }
118
-
119
-
120
- export const loadYouTubeScripts = async(): any => {
104
+ export const loadYouTubeScripts = async (): any => {
121
105
  return new Promise((resolve, reject) => {
122
-
123
106
  const image = new Image();
124
107
  image.onload = function (): any {
125
108
  // This code loads the IFrame Player API code asynchronously.
@@ -135,10 +118,9 @@ export const loadYouTubeScripts = async(): any => {
135
118
  };
136
119
  image.src = 'https://youtube.com/favicon.ico';
137
120
  });
138
- }
139
-
121
+ };
140
122
 
141
- export const createYoutTubeVideo = async(target, video_id): void | boolean => {
123
+ export const createYoutTubeVideo = async (target, video_id): void | boolean => {
142
124
  if (typeof window.player == 'undefined') {
143
125
  window.player = [];
144
126
  }
@@ -189,6 +171,6 @@ export const createYoutTubeVideo = async(target, video_id): void | boolean => {
189
171
  done = true;
190
172
  }
191
173
  }
192
- }
174
+ };
193
175
 
194
176
  export default videoSupport;
@@ -14,6 +14,8 @@ const components = [
14
14
  'table-no-submit',
15
15
  'tabs',
16
16
  'card',
17
+ 'calendar',
18
+ 'content',
17
19
  'filter-card',
18
20
  'video-card',
19
21
  'record-card',
@@ -37,10 +39,13 @@ const components = [
37
39
  'barchart',
38
40
  'doughnutchart',
39
41
  'bento-grid',
42
+ 'milestone-group',
43
+ 'milestone',
44
+ 'darkmode',
40
45
  ];
41
46
 
42
47
  // Attach classes to dom elements
43
- document.addEventListener('DOMContentLoaded', async():void => {
48
+ document.addEventListener('DOMContentLoaded', async (): void => {
44
49
  createDataLayer();
45
50
  createDynamicEvents();
46
51
 
@@ -53,8 +58,6 @@ document.addEventListener('DOMContentLoaded', async():void => {
53
58
 
54
59
  videoSupport(document.body);
55
60
 
56
-
57
-
58
61
  /*
59
62
  const prefix = 'iam';
60
63
  const options = {