@iamproperty/components 3.4.6 → 3.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 (304) hide show
  1. package/assets/bootstrap/LICENSE +22 -0
  2. package/assets/bootstrap/README.md +246 -0
  3. package/assets/bootstrap/js/src/alert.js +87 -0
  4. package/assets/bootstrap/js/src/base-component.js +85 -0
  5. package/assets/bootstrap/js/src/button.js +72 -0
  6. package/assets/bootstrap/js/src/carousel.js +475 -0
  7. package/assets/bootstrap/js/src/collapse.js +302 -0
  8. package/assets/bootstrap/js/src/dom/data.js +55 -0
  9. package/assets/bootstrap/js/src/dom/event-handler.js +320 -0
  10. package/assets/bootstrap/js/src/dom/manipulator.js +71 -0
  11. package/assets/bootstrap/js/src/dom/selector-engine.js +83 -0
  12. package/assets/bootstrap/js/src/dropdown.js +454 -0
  13. package/assets/bootstrap/js/src/modal.js +377 -0
  14. package/assets/bootstrap/js/src/offcanvas.js +283 -0
  15. package/assets/bootstrap/js/src/popover.js +97 -0
  16. package/assets/bootstrap/js/src/scrollspy.js +294 -0
  17. package/assets/bootstrap/js/src/tab.js +305 -0
  18. package/assets/bootstrap/js/src/toast.js +225 -0
  19. package/assets/bootstrap/js/src/tooltip.js +633 -0
  20. package/assets/bootstrap/js/src/util/backdrop.js +149 -0
  21. package/assets/bootstrap/js/src/util/component-functions.js +34 -0
  22. package/assets/bootstrap/js/src/util/config.js +66 -0
  23. package/assets/bootstrap/js/src/util/focustrap.js +115 -0
  24. package/assets/bootstrap/js/src/util/index.js +336 -0
  25. package/assets/bootstrap/js/src/util/sanitizer.js +118 -0
  26. package/assets/bootstrap/js/src/util/scrollbar.js +114 -0
  27. package/assets/bootstrap/js/src/util/swipe.js +146 -0
  28. package/assets/bootstrap/js/src/util/template-factory.js +160 -0
  29. package/assets/bootstrap/package.json +181 -0
  30. package/assets/bootstrap/scss/_accordion.scss +149 -0
  31. package/assets/bootstrap/scss/_alert.scss +71 -0
  32. package/assets/bootstrap/scss/_badge.scss +38 -0
  33. package/assets/bootstrap/scss/_breadcrumb.scss +40 -0
  34. package/assets/bootstrap/scss/_button-group.scss +142 -0
  35. package/assets/bootstrap/scss/_buttons.scss +207 -0
  36. package/assets/bootstrap/scss/_card.scss +234 -0
  37. package/assets/bootstrap/scss/_carousel.scss +226 -0
  38. package/assets/bootstrap/scss/_close.scss +40 -0
  39. package/assets/bootstrap/scss/_containers.scss +41 -0
  40. package/assets/bootstrap/scss/_dropdown.scss +249 -0
  41. package/assets/bootstrap/scss/_forms.scss +9 -0
  42. package/assets/bootstrap/scss/_functions.scss +302 -0
  43. package/assets/bootstrap/scss/_grid.scss +33 -0
  44. package/assets/bootstrap/scss/_helpers.scss +10 -0
  45. package/assets/bootstrap/scss/_images.scss +42 -0
  46. package/assets/bootstrap/scss/_list-group.scss +192 -0
  47. package/assets/bootstrap/scss/_maps.scss +54 -0
  48. package/assets/bootstrap/scss/_mixins.scss +43 -0
  49. package/assets/bootstrap/scss/_modal.scss +237 -0
  50. package/assets/bootstrap/scss/_nav.scss +172 -0
  51. package/assets/bootstrap/scss/_navbar.scss +278 -0
  52. package/assets/bootstrap/scss/_offcanvas.scss +144 -0
  53. package/assets/bootstrap/scss/_pagination.scss +109 -0
  54. package/assets/bootstrap/scss/_placeholders.scss +51 -0
  55. package/assets/bootstrap/scss/_popover.scss +196 -0
  56. package/assets/bootstrap/scss/_progress.scss +59 -0
  57. package/assets/bootstrap/scss/_reboot.scss +610 -0
  58. package/assets/bootstrap/scss/_root.scss +73 -0
  59. package/assets/bootstrap/scss/_spinners.scss +85 -0
  60. package/assets/bootstrap/scss/_tables.scss +164 -0
  61. package/assets/bootstrap/scss/_toasts.scss +73 -0
  62. package/assets/bootstrap/scss/_tooltip.scss +120 -0
  63. package/assets/bootstrap/scss/_transitions.scss +27 -0
  64. package/assets/bootstrap/scss/_type.scss +106 -0
  65. package/assets/bootstrap/scss/_utilities.scss +647 -0
  66. package/assets/bootstrap/scss/_variables.scss +1634 -0
  67. package/assets/bootstrap/scss/bootstrap-grid.scss +64 -0
  68. package/assets/bootstrap/scss/bootstrap-reboot.scss +9 -0
  69. package/assets/bootstrap/scss/bootstrap-utilities.scss +18 -0
  70. package/assets/bootstrap/scss/bootstrap.scss +51 -0
  71. package/assets/bootstrap/scss/forms/_floating-labels.scss +75 -0
  72. package/assets/bootstrap/scss/forms/_form-check.scss +175 -0
  73. package/assets/bootstrap/scss/forms/_form-control.scss +194 -0
  74. package/assets/bootstrap/scss/forms/_form-range.scss +91 -0
  75. package/assets/bootstrap/scss/forms/_form-select.scss +71 -0
  76. package/assets/bootstrap/scss/forms/_form-text.scss +11 -0
  77. package/assets/bootstrap/scss/forms/_input-group.scss +132 -0
  78. package/assets/bootstrap/scss/forms/_labels.scss +36 -0
  79. package/assets/bootstrap/scss/forms/_validation.scss +12 -0
  80. package/assets/bootstrap/scss/helpers/_clearfix.scss +3 -0
  81. package/assets/bootstrap/scss/helpers/_color-bg.scss +10 -0
  82. package/assets/bootstrap/scss/helpers/_colored-links.scss +12 -0
  83. package/assets/bootstrap/scss/helpers/_position.scss +36 -0
  84. package/assets/bootstrap/scss/helpers/_ratio.scss +26 -0
  85. package/assets/bootstrap/scss/helpers/_stacks.scss +15 -0
  86. package/assets/bootstrap/scss/helpers/_stretched-link.scss +15 -0
  87. package/assets/bootstrap/scss/helpers/_text-truncation.scss +7 -0
  88. package/assets/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
  89. package/assets/bootstrap/scss/helpers/_vr.scss +8 -0
  90. package/assets/bootstrap/scss/mixins/_alert.scss +15 -0
  91. package/assets/bootstrap/scss/mixins/_backdrop.scss +14 -0
  92. package/assets/bootstrap/scss/mixins/_banner.scss +9 -0
  93. package/assets/bootstrap/scss/mixins/_border-radius.scss +78 -0
  94. package/assets/bootstrap/scss/mixins/_box-shadow.scss +18 -0
  95. package/assets/bootstrap/scss/mixins/_breakpoints.scss +127 -0
  96. package/assets/bootstrap/scss/mixins/_buttons.scss +70 -0
  97. package/assets/bootstrap/scss/mixins/_caret.scss +64 -0
  98. package/assets/bootstrap/scss/mixins/_clearfix.scss +9 -0
  99. package/assets/bootstrap/scss/mixins/_color-scheme.scss +7 -0
  100. package/assets/bootstrap/scss/mixins/_container.scss +11 -0
  101. package/assets/bootstrap/scss/mixins/_deprecate.scss +10 -0
  102. package/assets/bootstrap/scss/mixins/_forms.scss +152 -0
  103. package/assets/bootstrap/scss/mixins/_gradients.scss +47 -0
  104. package/assets/bootstrap/scss/mixins/_grid.scss +151 -0
  105. package/assets/bootstrap/scss/mixins/_image.scss +16 -0
  106. package/assets/bootstrap/scss/mixins/_list-group.scss +24 -0
  107. package/assets/bootstrap/scss/mixins/_lists.scss +7 -0
  108. package/assets/bootstrap/scss/mixins/_pagination.scss +10 -0
  109. package/assets/bootstrap/scss/mixins/_reset-text.scss +17 -0
  110. package/assets/bootstrap/scss/mixins/_resize.scss +6 -0
  111. package/assets/bootstrap/scss/mixins/_table-variants.scss +24 -0
  112. package/assets/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  113. package/assets/bootstrap/scss/mixins/_transition.scss +26 -0
  114. package/assets/bootstrap/scss/mixins/_utilities.scss +97 -0
  115. package/assets/bootstrap/scss/mixins/_visually-hidden.scss +29 -0
  116. package/assets/bootstrap/scss/utilities/_api.scss +47 -0
  117. package/assets/bootstrap/scss/vendor/_rfs.scss +354 -0
  118. package/assets/css/components/accordion.css +1 -1
  119. package/assets/css/components/accordion.css.map +1 -1
  120. package/assets/css/components/admin-panel.css +1 -0
  121. package/assets/css/components/admin-panel.css.map +1 -0
  122. package/assets/css/components/alert.css +1 -1
  123. package/assets/css/components/alert.css.map +1 -1
  124. package/assets/css/components/applied-filters.css +1 -0
  125. package/assets/css/components/applied-filters.css.map +1 -0
  126. package/assets/css/components/card.css +1 -1
  127. package/assets/css/components/card.css.map +1 -1
  128. package/assets/css/components/carousel.css +1 -1
  129. package/assets/css/components/carousel.css.map +1 -1
  130. package/assets/css/components/charts.css +1 -1
  131. package/assets/css/components/charts.css.map +1 -1
  132. package/assets/css/components/container.css +1 -1
  133. package/assets/css/components/container.css.map +1 -1
  134. package/assets/css/components/dialog.css +1 -0
  135. package/assets/css/components/dialog.css.map +1 -0
  136. package/assets/css/components/forms.css +1 -1
  137. package/assets/css/components/forms.css.map +1 -1
  138. package/assets/css/components/header.css +1 -1
  139. package/assets/css/components/header.css.map +1 -1
  140. package/assets/css/components/lists.css +1 -1
  141. package/assets/css/components/lists.css.map +1 -1
  142. package/assets/css/components/nav.css +1 -1
  143. package/assets/css/components/nav.css.map +1 -1
  144. package/assets/css/components/pagination.css +1 -0
  145. package/assets/css/components/pagination.css.map +1 -0
  146. package/assets/css/components/property-searchbar.css +1 -1
  147. package/assets/css/components/property-searchbar.css.map +1 -1
  148. package/assets/css/components/stepper.css +1 -1
  149. package/assets/css/components/stepper.css.map +1 -1
  150. package/assets/css/components/table.css +1 -0
  151. package/assets/css/components/table.css.map +1 -0
  152. package/assets/css/components/tabs.css +1 -1
  153. package/assets/css/components/tabs.css.map +1 -1
  154. package/assets/css/components/tooltips.css +1 -1
  155. package/assets/css/components/tooltips.css.map +1 -1
  156. package/assets/css/core.min.css +1 -1
  157. package/assets/css/core.min.css.map +1 -1
  158. package/assets/css/style.min.css +1 -1
  159. package/assets/css/style.min.css.map +1 -1
  160. package/assets/js/bundle.js +18 -11
  161. package/assets/js/components/accordion/accordion.component.js +6 -0
  162. package/assets/js/components/accordion/accordion.component.min.js +3 -3
  163. package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
  164. package/assets/js/components/applied-filters/applied-filters.component.js +26 -0
  165. package/assets/js/components/card/card.component.js +91 -0
  166. package/assets/js/components/card/card.component.min.js +21 -0
  167. package/assets/js/components/card/card.component.min.js.map +1 -0
  168. package/assets/js/components/filterlist/filterlist.component.js +49 -0
  169. package/assets/js/components/filterlist/filterlist.component.min.js +23 -0
  170. package/assets/js/components/filterlist/filterlist.component.min.js.map +1 -0
  171. package/assets/js/components/header/header.component.js +6 -0
  172. package/assets/js/components/header/header.component.min.js +5 -5
  173. package/assets/js/components/header/header.component.min.js.map +1 -1
  174. package/assets/js/components/pagination/pagination.component.js +34 -0
  175. package/assets/js/components/table/table.component.js +108 -0
  176. package/assets/js/components/table/table.component.min.js +24 -0
  177. package/assets/js/components/table/table.component.min.js.map +1 -0
  178. package/assets/js/components/tabs/tabs.component.js +6 -0
  179. package/assets/js/components/tabs/tabs.component.min.js +17 -0
  180. package/assets/js/components/tabs/tabs.component.min.js.map +1 -0
  181. package/assets/js/dynamic.js +7 -18
  182. package/assets/js/dynamic.min.js +2 -53
  183. package/assets/js/dynamic.min.js.map +1 -1
  184. package/assets/js/flat-components.js +27 -9
  185. package/assets/js/modules/applied-filters.js +100 -0
  186. package/assets/js/modules/data-layer.js +45 -0
  187. package/assets/js/modules/filterlist.js +32 -0
  188. package/assets/js/modules/helpers.js +102 -49
  189. package/assets/js/modules/pagination.js +33 -0
  190. package/assets/js/modules/table.js +506 -420
  191. package/assets/js/modules/tabs.js +6 -0
  192. package/assets/js/modules/youtubevideo.js +53 -61
  193. package/assets/js/scripts.bundle.js +77 -62
  194. package/assets/js/scripts.bundle.js.map +1 -1
  195. package/assets/js/scripts.bundle.min.js +2 -2
  196. package/assets/js/scripts.bundle.min.js.map +1 -1
  197. package/assets/js/tests/filterlist.spec.js +22 -0
  198. package/assets/js/tests/pagination.spec.js +15 -0
  199. package/assets/js/tests/table.spec.js +149 -0
  200. package/assets/sass/_components.scss +1 -2
  201. package/assets/sass/_corefiles.scss +20 -19
  202. package/assets/sass/_forms.scss +7 -7
  203. package/assets/sass/_functions/functions.scss +1 -1
  204. package/assets/sass/_functions/mixins.scss +19 -21
  205. package/assets/sass/_functions/utilities.scss +67 -9
  206. package/assets/sass/_functions/variables.scss +109 -55
  207. package/assets/sass/_tests/colours.spec.scss +8 -22
  208. package/assets/sass/components/accordion.scss +13 -0
  209. package/assets/sass/components/admin-panel.scss +106 -0
  210. package/assets/sass/components/alert.scss +22 -0
  211. package/assets/sass/components/applied-filters.scss +65 -0
  212. package/assets/sass/components/card.scss +177 -233
  213. package/assets/sass/components/carousel.scss +72 -0
  214. package/assets/sass/components/charts.scss +41 -1
  215. package/assets/sass/components/container.scss +8 -3
  216. package/assets/sass/components/dialog.scss +208 -0
  217. package/assets/sass/components/forms.scss +37 -5
  218. package/assets/sass/components/lists.scss +29 -0
  219. package/assets/sass/components/nav.scss +6 -2
  220. package/assets/sass/components/pagination.scss +140 -0
  221. package/assets/sass/components/stepper.scss +3 -3
  222. package/assets/sass/components/table.scss +423 -0
  223. package/assets/sass/components/tabs.scss +20 -7
  224. package/assets/sass/components/tooltips.scss +1 -1
  225. package/assets/sass/foundations/buttons.scss +366 -0
  226. package/assets/sass/foundations/icons.scss +1 -1
  227. package/assets/sass/foundations/links.scss +125 -0
  228. package/assets/sass/foundations/media.scss +1 -1
  229. package/assets/sass/foundations/reboot.scss +21 -17
  230. package/assets/sass/foundations/root.scss +9 -29
  231. package/assets/sass/foundations/type.scss +1 -1
  232. package/assets/svg/illustrations/table.svg +165 -0
  233. package/assets/ts/bundle.ts +23 -12
  234. package/assets/ts/components/accordion/accordion.component.ts +7 -0
  235. package/assets/ts/components/applied-filters/README.md +5 -0
  236. package/assets/ts/components/applied-filters/applied-filters.component.ts +33 -0
  237. package/assets/ts/components/card/README.md +22 -0
  238. package/assets/ts/components/card/card.component.ts +117 -0
  239. package/assets/ts/components/filterlist/README.md +17 -0
  240. package/assets/ts/components/filterlist/filterlist.component.ts +60 -0
  241. package/assets/ts/components/header/header.component.ts +8 -0
  242. package/assets/ts/components/pagination/README.md +11 -0
  243. package/assets/ts/components/pagination/pagination.component.ts +45 -0
  244. package/assets/ts/components/table/README.md +23 -0
  245. package/assets/ts/components/table/table.component.ts +133 -0
  246. package/assets/ts/components/tabs/tabs.component.ts +7 -0
  247. package/assets/ts/dynamic.ts +12 -19
  248. package/assets/ts/flat-components.ts +37 -9
  249. package/assets/ts/modules/applied-filters.ts +146 -0
  250. package/assets/ts/modules/data-layer.ts +58 -0
  251. package/assets/ts/modules/filterlist.ts +46 -0
  252. package/assets/ts/modules/helpers.ts +129 -58
  253. package/assets/ts/modules/pagination.ts +44 -0
  254. package/assets/ts/modules/table.ts +598 -433
  255. package/assets/ts/modules/tabs.ts +8 -1
  256. package/assets/ts/modules/youtubevideo.ts +58 -63
  257. package/assets/ts/tests/filterlist.spec.ts +29 -0
  258. package/assets/ts/tests/pagination.spec.ts +21 -0
  259. package/assets/ts/tests/table.spec.ts +194 -0
  260. package/dist/components.es.js +1267 -1295
  261. package/dist/components.umd.js +70 -65
  262. package/dist/style.css +1 -1
  263. package/package.json +8 -5
  264. package/src/components/AppliedFilters/AppliedFilters.vue +20 -0
  265. package/src/components/AppliedFilters/README.md +5 -0
  266. package/src/components/Card/Card.vue +11 -112
  267. package/src/components/Card/README.md +16 -18
  268. package/src/components/Carousel/Carousel.vue +49 -10
  269. package/src/components/Chart/Chart.vue +46 -4
  270. package/src/components/Filterlist/Filterlist.vue +20 -0
  271. package/src/components/Filterlist/README.md +17 -0
  272. package/src/components/Pagination/Pagination.vue +30 -0
  273. package/src/components/Pagination/README.md +11 -0
  274. package/src/components/Table/README.md +29 -44
  275. package/src/components/Table/Table.spec.js +5 -37
  276. package/src/components/Table/Table.vue +16 -91
  277. package/src/foundations/YoutubeVideo/YoutubeVideo.vue +1 -1
  278. package/src/index.js +3 -2
  279. package/assets/css/components/buttons.css +0 -1
  280. package/assets/css/components/buttons.css.map +0 -1
  281. package/assets/css/components/cardDeck.css +0 -1
  282. package/assets/css/components/cardDeck.css.map +0 -1
  283. package/assets/css/components/links.css +0 -1
  284. package/assets/css/components/links.css.map +0 -1
  285. package/assets/css/components/modal.css +0 -1
  286. package/assets/css/components/modal.css.map +0 -1
  287. package/assets/css/components/panel.css +0 -1
  288. package/assets/css/components/panel.css.map +0 -1
  289. package/assets/css/components/tables.css +0 -1
  290. package/assets/css/components/tables.css.map +0 -1
  291. package/assets/js/modules/modal.js +0 -69
  292. package/assets/sass/components/buttons.scss +0 -252
  293. package/assets/sass/components/cardDeck.scss +0 -108
  294. package/assets/sass/components/links.scss +0 -99
  295. package/assets/sass/components/modal.scss +0 -136
  296. package/assets/sass/components/panel.scss +0 -161
  297. package/assets/sass/components/tables.scss +0 -291
  298. package/assets/ts/modules/modal.ts +0 -91
  299. package/src/components/CardDeck/CardDeck.spec.js +0 -99
  300. package/src/components/CardDeck/CardDeck.vue +0 -77
  301. package/src/components/CardDeck/README.md +0 -25
  302. package/src/components/Modal/Modal.spec.js +0 -22
  303. package/src/components/Modal/Modal.vue +0 -43
  304. package/src/components/Modal/README.md +0 -20
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * iamKey v3.4.6
2
+ * iamKey v3.5.0
3
3
  * Copyright 2022-2023 iamproperty
4
- */class r extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const t=document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets",e=document.createElement("template");e.innerHTML=`
4
+ */window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"header"});class o extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const e=document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets",r=document.createElement("template");r.innerHTML=`
5
5
  <style>
6
- @import "${t}/css/core.min.css";
7
- .header-banner{background:linear-gradient(180deg, var(--colour-secondary) 0, var(--colour-info) 100%);margin-bottom:2rem;position:relative;overflow:hidden;max-width:100% !important}@media screen and (min-width: 62em){.header-banner{min-height:29.375rem}}.header-banner>.container{padding-bottom:0;position:relative}.header-banner .breadcrumb{margin-top:1.5rem;margin-bottom:-0.5rem}@media screen and (min-width: 62em){.header-banner .breadcrumb{position:absolute;top:0;left:3.75rem}}.header-banner__inner{--colour-body: var(--colour-body-theme);--colour-heading: var(--colour-primary);--colour-link: var(--colour-link-theme);--colour-hover: var(--colour-hover-theme);--colour-active: var(--colour-active-theme);--colour-border: var(--colour-border-theme);--colour-brand: var(--colour-primary);--btn-bg: var(--colour-warning);--btn-text: var(--colour-primary);--btn-hover-text: var(--colour-primary);--btn-tertiary-bg: var(--colour-primary);--btn-tertiary-hover-text: white;color:var(--colour-body);background:#fff;padding:2rem;margin:1.875rem 0;position:relative;z-index:var(--index-above)}.header-banner__inner .text-primary{color:var(--colour-primary) !important}@media screen and (min-width: 62em){.header-banner__inner{max-width:37.5rem;margin:7rem 0 5rem 0;padding:3.5rem 4rem}}.header-banner__inner>*:last-child{padding-bottom:0;margin-bottom:0}.header-banner picture img{display:none}@media screen and (min-width: 62em){.header-banner picture img{display:block;position:absolute;top:-0.5%;left:40%;height:101%;object-fit:cover;width:60%;pointer-events:none}}::slotted(.breadcrumb){margin-top:1.5rem !important;margin-bottom:-0.5rem !important}@media screen and (min-width: 62em){::slotted(.breadcrumb){position:absolute !important;top:0 !important;left:5.25rem !important}}::slotted(*:last-child){padding-bottom:0 !important;margin-bottom:0 !important}/*# sourceMappingURL=assets/css/components/header.css.map */
6
+ @import "${e}/css/core.min.css";
7
+ .header-banner{background:linear-gradient(180deg, var(--colour-secondary) 0, var(--colour-info) 100%);margin-bottom:2rem;position:relative;overflow:hidden;max-width:100% !important}@media screen and (min-width: 62em){.header-banner{min-height:29.375rem}}.header-banner>.container{padding-bottom:0;position:relative}.header-banner .breadcrumb{margin-top:1.5rem;margin-bottom:-0.5rem}@media screen and (min-width: 62em){.header-banner .breadcrumb{position:absolute;top:0;left:3.75rem}}.header-banner__inner{--colour-muted: #9d9d9d;--colour-body: #595959;--colour-border: #D8D8D8;--colour-link: var(--colour-primary);--colour-brand: var(--colour-primary);--colour-underline: var(--colour-secondary);--colour-heading: var(--colour-primary);--colour-focus: var(--colour-primary);--colour-hover: var(--colour-primary);--colour-active: var(--colour-primary);--colour-selected: var(--colour-info);--colour-inverted: #FCFCFC;--colour-canvas: #FCFCFC;--colour-btn: var(--colour-primary);--colour-btn-bg: var(--colour-warning);--colour-btn-border: var(--colour-warning);--colour-btn-bg-hover: transparent;--colour-btn-hover: var(--colour-primary);--colour-btn-secondary: var(--colour-primary);--colour-btn-secondary-border: var(--colour-primary);--colour-btn-secondary-bg: transparent;--colour-btn-secondary-bg-hover: var(--colour-primary);--colour-btn-secondary-hover: var(--colour-inverted);color:var(--colour-body);background:#fff;padding:2rem;margin:1.875rem 0;position:relative;z-index:var(--index-above)}.header-banner__inner .text-primary{color:var(--colour-primary) !important}@media screen and (min-width: 62em){.header-banner__inner{max-width:37.5rem;margin:7rem 0 5rem 0;padding:3.5rem 4rem}}.header-banner__inner>*:last-child{padding-bottom:0;margin-bottom:0}.header-banner picture img{display:none}@media screen and (min-width: 62em){.header-banner picture img{display:block;position:absolute;top:-0.5%;left:40%;height:101%;object-fit:cover;width:60%;pointer-events:none}}::slotted(.breadcrumb){margin-top:1.5rem !important;margin-bottom:-0.5rem !important}@media screen and (min-width: 62em){::slotted(.breadcrumb){position:absolute !important;top:0 !important;left:5.25rem !important}}::slotted(*:last-child){padding-bottom:0 !important;margin-bottom:0 !important}/*# sourceMappingURL=assets/css/components/header.css.map */
8
8
 
9
9
  ${this.hasAttribute("css")?`@import "${this.getAttribute("css")}";`:""}
10
10
  :host {
@@ -26,5 +26,5 @@
26
26
  <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" alt="" lazy="" />
27
27
  </picture>
28
28
  </div>
29
- `,this.shadowRoot.appendChild(e.content.cloneNode(!0))}connectedCallback(){const t=this.shadowRoot.querySelector("picture"),e=this.shadowRoot.querySelector("picture source");this.hasAttribute("image")?e.setAttribute("srcset",this.getAttribute("image")):t.remove()}}export{r as default};
29
+ `,this.shadowRoot.appendChild(r.content.cloneNode(!0))}connectedCallback(){const e=this.shadowRoot.querySelector("picture"),r=this.shadowRoot.querySelector("picture source");this.hasAttribute("image")?r.setAttribute("srcset",this.getAttribute("image")):e.remove()}}export{o as default};
30
30
  //# sourceMappingURL=header.component.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"header.component.min.js","sources":["header.component.js"],"sourcesContent":["// @ts-nocheck\nclass iamHeader extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';\n const loadCSS = `@import \"${assetLocation}/css/components/header.css\";`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n @import \"${assetLocation}/css/core.min.css\";\n ${loadCSS}\n ${this.hasAttribute('css') ? `@import \"${this.getAttribute('css')}\";` : ``}\n :host {\n max-width:100%!important;\n padding:0!important;\n }\n </style>\n <div class=\"header-banner\">\n <div class=\"container\" part=\"container\">\n <slot name=\"breadcrumb\"></slot>\n <div class=\"header-banner__inner\">\n <slot></slot>\n </div>\n </div>\n <picture>\n <!-- Actual image only loaded on desktops -->\n <source srcset=\"\" media=\"(min-width: 62em)\">\n <!-- Placeholder image -->\n <img src=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"\" lazy=\"\" />\n </picture>\n </div>\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n const picture = this.shadowRoot.querySelector('picture');\n const source = this.shadowRoot.querySelector('picture source');\n if (this.hasAttribute('image'))\n source.setAttribute('srcset', this.getAttribute('image'));\n else\n picture.remove();\n }\n}\nexport default iamHeader;\n"],"names":["iamHeader","assetLocation","template","picture","source"],"mappings":";;;IACA,MAAMA,UAAkB,WAAY,CAChC,aAAc,CACV,QACA,KAAK,aAAa,CAAE,KAAM,MAAQ,CAAA,EAClC,MAAMC,EAAgB,SAAS,KAAK,aAAa,sBAAsB,EAAI,SAAS,KAAK,aAAa,sBAAsB,EAAI,UAE1HC,EAAW,SAAS,cAAc,UAAU,EAClDA,EAAS,UAAY;AAAA;AAAA,eAEdD;AAAA;AAAA;AAAA,MAET,KAAK,aAAa,KAAK,EAAI,YAAY,KAAK,aAAa,KAAK,MAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAqBpE,KAAK,WAAW,YAAYC,EAAS,QAAQ,UAAU,EAAI,CAAC,CAC/D,CACD,mBAAoB,CAChB,MAAMC,EAAU,KAAK,WAAW,cAAc,SAAS,EACjDC,EAAS,KAAK,WAAW,cAAc,gBAAgB,EACzD,KAAK,aAAa,OAAO,EACzBA,EAAO,aAAa,SAAU,KAAK,aAAa,OAAO,CAAC,EAExDD,EAAQ,OAAM,CACrB,CACL"}
1
+ {"version":3,"file":"header.component.min.js","sources":["header.component.js"],"sourcesContent":["// @ts-nocheck\n// Data layer Web component created\nwindow.dataLayer = window.dataLayer || [];\nwindow.dataLayer.push({\n \"event\": \"customElementRegistered\",\n \"element\": \"header\"\n});\nclass iamHeader extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';\n const loadCSS = `@import \"${assetLocation}/css/components/header.css\";`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n @import \"${assetLocation}/css/core.min.css\";\n ${loadCSS}\n ${this.hasAttribute('css') ? `@import \"${this.getAttribute('css')}\";` : ``}\n :host {\n max-width:100%!important;\n padding:0!important;\n }\n </style>\n <div class=\"header-banner\">\n <div class=\"container\" part=\"container\">\n <slot name=\"breadcrumb\"></slot>\n <div class=\"header-banner__inner\">\n <slot></slot>\n </div>\n </div>\n <picture>\n <!-- Actual image only loaded on desktops -->\n <source srcset=\"\" media=\"(min-width: 62em)\">\n <!-- Placeholder image -->\n <img src=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"\" lazy=\"\" />\n </picture>\n </div>\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n const picture = this.shadowRoot.querySelector('picture');\n const source = this.shadowRoot.querySelector('picture source');\n if (this.hasAttribute('image'))\n source.setAttribute('srcset', this.getAttribute('image'));\n else\n picture.remove();\n }\n}\nexport default iamHeader;\n"],"names":["iamHeader","assetLocation","template","picture","source"],"mappings":";;;IAEA,OAAO,UAAY,OAAO,WAAa,GACvC,OAAO,UAAU,KAAK,CAClB,MAAS,0BACT,QAAW,QACf,CAAC,EACD,MAAMA,UAAkB,WAAY,CAChC,aAAc,CACV,QACA,KAAK,aAAa,CAAE,KAAM,MAAQ,CAAA,EAClC,MAAMC,EAAgB,SAAS,KAAK,aAAa,sBAAsB,EAAI,SAAS,KAAK,aAAa,sBAAsB,EAAI,UAE1HC,EAAW,SAAS,cAAc,UAAU,EAClDA,EAAS,UAAY;AAAA;AAAA,eAEdD;AAAA;AAAA;AAAA,MAET,KAAK,aAAa,KAAK,EAAI,YAAY,KAAK,aAAa,KAAK,MAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAqBpE,KAAK,WAAW,YAAYC,EAAS,QAAQ,UAAU,EAAI,CAAC,CAC/D,CACD,mBAAoB,CAChB,MAAMC,EAAU,KAAK,WAAW,cAAc,SAAS,EACjDC,EAAS,KAAK,WAAW,cAAc,gBAAgB,EACzD,KAAK,aAAa,OAAO,EACzBA,EAAO,aAAa,SAAU,KAAK,aAAa,OAAO,CAAC,EAExDD,EAAQ,OAAM,CACrB,CACL"}
@@ -0,0 +1,34 @@
1
+ // @ts-nocheck
2
+ import createPaginationButttons from "../../modules/pagination.js";
3
+ class iamPagination extends HTMLElement {
4
+ constructor() {
5
+ super();
6
+ this.attachShadow({ mode: 'open' });
7
+ const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';
8
+ const template = document.createElement('template');
9
+ template.innerHTML = `
10
+ <style>
11
+ @import "${assetLocation}/css/core.min.css";
12
+ </style>
13
+ <div class="pagination__wrapper d-none">
14
+ </div>
15
+ `;
16
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
17
+ // Set default attributes
18
+ const params = new URLSearchParams(window.location.search);
19
+ if (!this.hasAttribute('data-total'))
20
+ this.setAttribute('data-total', this.querySelectorAll('table tbody tr').length);
21
+ if (!this.hasAttribute('data-page'))
22
+ this.setAttribute('data-page', (params.has('page') ? params.get('page') : 1));
23
+ if (!this.hasAttribute('data-show'))
24
+ this.setAttribute('data-show', (params.has('show') ? params.get('show') : 15));
25
+ if (!this.hasAttribute('data-increment'))
26
+ this.setAttribute('data-increment', 15);
27
+ this.setAttribute('data-pages', Math.ceil(this.getAttribute('data-total') / this.getAttribute('data-show')));
28
+ createPaginationButttons(this, this.shadowRoot.querySelector('.pagination__wrapper'));
29
+ }
30
+ connectedCallback() {
31
+ this.shadowRoot.querySelector('.pagination__wrapper').classList.remove('d-none');
32
+ }
33
+ }
34
+ export default iamPagination;
@@ -0,0 +1,108 @@
1
+ // @ts-nocheck
2
+ import * as tableModule from "../../modules/table.js";
3
+ import createPaginationButttons from "../../modules/pagination.js";
4
+ class iamTable extends HTMLElement {
5
+ constructor() {
6
+ super();
7
+ this.attachShadow({ mode: 'open' });
8
+ const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';
9
+ const isCTA = this.classList.contains('table--cta');
10
+ const isExportable = this.classList.contains('table--export');
11
+ let classList = this.classList.toString();
12
+ classList = classList.replace('table--cta', '');
13
+ const template = document.createElement('template');
14
+ template.innerHTML = `
15
+ <style>
16
+ @import "${assetLocation}/css/core.min.css";
17
+ </style>
18
+ ${isCTA ? '<div class="table--cta">' : ''}
19
+ <div class="table__wrapper ${classList}">
20
+ <slot></slot>
21
+ </div>
22
+ ${isCTA ? '</div>' : ''}
23
+ ${isExportable ? '<button class="link" type="button" data-export>Export table as CSV</button>' : ''}
24
+ <div class="table__pagination"></div>
25
+ `;
26
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
27
+ const params = new URLSearchParams(window.location.search);
28
+ // Set default attributes
29
+ if (!this.hasAttribute('data-total'))
30
+ this.setAttribute('data-total', this.querySelectorAll('table tbody tr').length);
31
+ if (!this.hasAttribute('data-page'))
32
+ this.setAttribute('data-page', (params.has('page') ? params.get('page') : 1));
33
+ if (!this.hasAttribute('data-show'))
34
+ this.setAttribute('data-show', 15);
35
+ this.setAttribute('data-pages', Math.ceil(this.getAttribute('data-total') / this.getAttribute('data-show')));
36
+ }
37
+ connectedCallback() {
38
+ this.table = this.querySelector('table');
39
+ this.savedTableBody = this.querySelector('tbody').cloneNode(true);
40
+ this.pagination = this.shadowRoot.querySelector('.table__pagination');
41
+ // Set events on the filter table
42
+ this.form = document.createElement('form');
43
+ if (this.hasAttribute('data-filterby')) {
44
+ this.form = document.querySelector(`#${this.getAttribute('data-filterby')}`);
45
+ // Create a data list if a search input is present
46
+ tableModule.createSearchDataList(this.table, this.form);
47
+ if (!this.form.querySelector('[data-page]')) {
48
+ this.form.innerHTML += `<input name="page" type="hidden" value="${this.getAttribute('data-page')}" data-pagination="true" />`;
49
+ }
50
+ if (!this.form.querySelector('[data-show]')) {
51
+ this.form.innerHTML += `<input name="show" type="hidden" value="${this.getAttribute('data-show')}" data-show="true" />`;
52
+ }
53
+ }
54
+ // Event listeners
55
+ tableModule.addTableEventListeners(this.table);
56
+ tableModule.addFilterEventListeners(this.table, this.form, this.pagination, this, this.savedTableBody);
57
+ tableModule.addPaginationEventListeners(this.table, this.form, this.pagination, this);
58
+ tableModule.addExportEventListeners(this.shadowRoot.querySelector('[data-export]'), this.table);
59
+ if (this.form.getAttribute('data-ajax')) {
60
+ tableModule.loadAjaxTable(this.table, this.form, this.pagination, this);
61
+ }
62
+ else {
63
+ tableModule.makeTableFunctional(this.table, this.form, this.pagination, this);
64
+ tableModule.filterTable(this.table, this.form, this);
65
+ createPaginationButttons(this, this.pagination);
66
+ }
67
+ this.shadowRoot.querySelector('.table__wrapper').addEventListener("scroll", (event) => {
68
+ if (this.table.querySelector('dialog[open]'))
69
+ this.table.querySelector('dialog[open]').close();
70
+ });
71
+ }
72
+ static get observedAttributes() {
73
+ return ["data-total", "data-pages", "data-page", "data-show"];
74
+ }
75
+ attributeChangedCallback(attrName, oldVal, newVal) {
76
+ /*
77
+ switch (attrName) {
78
+ case "data-total": {
79
+ this.setAttribute('data-pages', Math.ceil(newVal / this.getAttribute('data-show')));
80
+ break;
81
+ }
82
+ case "data-show": {
83
+ this.setAttribute('data-pages', Math.ceil(this.getAttribute('data-total') / newVal));
84
+ break;
85
+ }
86
+ case "data-pages": {
87
+ console.log('create pagination');
88
+
89
+ tableModule.filterTable(this.table, this.form);
90
+ createPaginationButttons(this,this.pagination);
91
+
92
+ break;
93
+ }
94
+ case "data-page": {
95
+
96
+ let paginationInput = this.form.querySelector('[data-pagination]');
97
+
98
+ paginationInput.value = newVal;
99
+
100
+ //tableModule.filterTable(this.table, this.form);
101
+
102
+ break;
103
+ }
104
+ }
105
+ */
106
+ }
107
+ }
108
+ export default iamTable;
@@ -0,0 +1,24 @@
1
+ /*!
2
+ * iamKey v3.5.0
3
+ * Copyright 2022-2023 iamproperty
4
+ */const P=function(a){return typeof a!="string"?!1:!isNaN(a)&&!isNaN(parseFloat(a))},j=(a,e)=>String(a).padStart(e,"0"),N=a=>a.charAt(0).toUpperCase()+a.slice(1),w=function(a,e){if(!a.getAttribute("data-pages"))return!1;a.getAttribute("data-page")||a.setAttribute("data-page",1);let l=a.getAttribute("data-page"),r=a.getAttribute("data-pages"),n=a.getAttribute("data-total"),o=a.getAttribute("data-show"),i=a.getAttribute("data-increment");if(r<=1)return e.innerHTML="",!1;let t="";for(let d=1;d<=r;d++)d==l?t+=`<li class="page-item active" aria-current="page"><span class="page-link">${d}</span></li>`:t+=`<li class="page-item"><a href="?page=${d}" class="page-link" data-page="${d}">${d}</a></li>`;return e.innerHTML=`<ul class="pagination mb-0 d-none d-sm-flex">
5
+ ${l==1?'<li class="page-item disabled"><span class="page-link">Previous</span></li>':`<li class="page-item"><a href="?page=${parseInt(l)-1}" class="page-link" data-page="${parseInt(l)-1}">Previous</a></li>`}
6
+ ${t}
7
+ ${l==r?'<li class="page-item disabled"><span class="page-link">Next</span></li>':`<li class="page-item"><a href="?page=${parseInt(l)+1}" class="page-link" data-page="${parseInt(l)+1}">Next</a></li>`}
8
+ </ul>`,e.innerHTML+=`<div class="d-sm-none text-center">
9
+ <span class="d-block pb-2">You've viewed ${o} of ${n} results</span>
10
+ <a href="?show=${parseInt(o)+parseInt(i)}" class="btn btn-primary w-100 m-0" data-show="${parseInt(o)+parseInt(i)}">Load more results</a>
11
+ </div>`,!0},C=a=>{const e=Array.from(a.querySelectorAll("thead th"));Array.from(a.querySelectorAll("tbody tr")).forEach((r,n)=>{const o=Array.from(r.querySelectorAll("th, td")),i=["Low","Medium","High","N/A","Pending","Verified","Incomplete","Completed","Requires approval"];o.forEach((t,d)=>{const s=e[d];if(typeof s<"u"){let u=document.createElement("div");u.innerHTML=s.innerHTML;let h=u.textContent||u.innerText||"";t.setAttribute("data-label",h),s.hasAttribute("class")&&t.setAttribute("class",s.getAttribute("class")),s.hasAttribute("data-format")&&(t.setAttribute("data-format",s.getAttribute("data-format")),t.innerHTML=S("date",t.textContent.trim())),i.includes(t.textContent.trim())&&t.setAttribute("data-content",t.textContent.trim())}})})},W=a=>{let e=0;return Array.from(a.querySelectorAll("tr")).forEach((l,r)=>{let n=window.getComputedStyle(document.querySelector("html")),o=l.querySelector(":scope > *:last-child > *:first-child");if(o){let t=o.offsetWidth/parseFloat(n.fontSize);t+=1.5,e=e>t?e:t}let i=l.offsetHeight/parseFloat(n.fontSize);l.style.setProperty("--row-height",`${i}rem`)}),e},I=a=>{if(a.closest(".table--fullwidth"))return!1;Array.from(a.querySelectorAll("tbody tr")).forEach((e,l)=>{let r=e.querySelector(":scope > :is(td,th):first-child"),n=r.textContent;r.innerHTML=`<span class="td__content">${n}</span><button type="button" class="d-none">${n}</button>`})},F=a=>{a.addEventListener("click",e=>{if(e&&e.target instanceof HTMLElement&&e.target.closest("tr > :is(td,th):first-child button")){let l=e.target.closest("tr > :is(td,th):first-child button"),r=l.parentNode.closest("tr");r.getAttribute("data-view")=="full"?r.setAttribute("data-view","default"):r.setAttribute("data-view","full"),l.blur()}})},v=(a,e)=>{let l=e.querySelector("[data-search]");if(!l)return!1;const r=l.getAttribute("id"),n=l.getAttribute("data-search").split(",");let o=l.parentNode,i={};n.forEach((t,d)=>{Array.from(a.querySelectorAll('td[data-label="'+t.trim()+'"]')).forEach((s,u)=>{s.querySelector(".td__content")?i[s.querySelector(".td__content").textContent]=s.querySelector(".td__content").textContent:i[s.textContent]=s.textContent})}),l.setAttribute("list",`${r}_list`),l.setAttribute("autocomplete","off"),o.querySelector("datalist")||(o.innerHTML+=`<datalist id="${r}_list"></datalist>`),o.querySelector("datalist").innerHTML=`${Object.keys(i).map(t=>`<option value="${t}"></option>`).join("")}`},O=(a,e,l,r,n)=>{var o;let i=function(){e.hasAttribute("data-ajax")?R(a,e,l,r):e.hasAttribute("data-submit")?e.submit():(D(a,e,r),w(r,l))};e.addEventListener("keyup",t=>{clearTimeout(o),t&&t.target instanceof HTMLElement&&t.target.closest("[data-search]")&&(o=setTimeout(function(){i()},500))}),e.addEventListener("change",t=>{clearTimeout(o),t&&t.target instanceof HTMLElement&&t.target.closest("[data-sort]")&&(e.hasAttribute("data-submit")||M(a,e,n),i()),t&&t.target instanceof HTMLElement&&t.target.closest("[data-search]")&&i(),t&&t.target instanceof HTMLElement&&t.target.closest("[data-filter]")&&!t.target.closest("form dialog")&&i(),t&&t.target instanceof HTMLElement&&t.target.closest("[data-show]")&&i()}),e.addEventListener("click",t=>{clearTimeout(o),t&&t.target instanceof HTMLElement&&t.target.closest('dialog button:not([type="button"])')&&t.target.closest('dialog button:not([type="button"])').closest("dialog").close(),t&&t.target instanceof HTMLElement&&t.target.closest(".dialog__close")&&(t.preventDefault(),t.stopPropagation()),t&&t.target instanceof HTMLElement&&t.target.closest("[data-clear]")&&(e.reset(),e.hasAttribute("data-submit")||M(a,e,n),i())}),e.addEventListener("submit",t=>{clearTimeout(o),e.hasAttribute("data-submit")||t.preventDefault(),i()})},M=(a,e,l)=>{if(e.getAttribute("data-ajax"))return!1;let r=a.querySelector("tbody"),n=e.querySelector("[data-sort]"),o=n.querySelector(`option:nth-child(${n.selectedIndex+1})`),i=o.getAttribute("data-sort"),t=o.getAttribute("data-order"),d=o.getAttribute("data-format");if(!i)return r.innerHTML=l.innerHTML,C(a),!1;let s=[];["asc","desc","descending"].includes(t)||(s=t.split(","));let u=[];Array.from(r.querySelectorAll("tr")).forEach((f,b)=>{let c=f.querySelector('td[data-label="'+i+'"], th[data-label="'+i+'"]').textContent.trim();s.length&&s.includes(c)&&(c=s.indexOf(c)),P(c)&&(c=j(c,10)),d&&d=="date"&&(c=new Date(c));const L={index:c,row:f};u.push(L)}),u.sort((f,b)=>f.index>b.index?1:-1),(t=="descending"||t=="desc")&&(u=u.reverse());let h="";u.forEach((f,b)=>{h+=f.row.outerHTML}),r.innerHTML=h},D=(a,e,l)=>{a.classList.remove("table--filtered");let r=[],n=[],o=0,i=e.querySelector("[data-pagination]")?parseInt(e.querySelector("[data-pagination]").value):1,t=e.querySelector("[data-show]")?parseInt(e.querySelector("[data-show]").value):15;if(Array.from(e.querySelectorAll("[data-filter]")).forEach((s,u)=>{if(!(s.type=="radio"&&!s.checked)&&!(s.type=="checkbox"&&!s.checked))if(s.getAttribute("data-filter")=="multi")for(const[h,f]of Object.entries(JSON.parse(s.value)))r[s.getAttribute("data-filter")].push(f);else s.value&&(r[s.getAttribute("data-filter")]||(r[s.getAttribute("data-filter")]=new Array),r[s.getAttribute("data-filter")].push(s.value))}),e.querySelector("[data-search]")){let s=e.querySelector("[data-search]");e.querySelector("[data-search]").getAttribute("data-search").split(",").forEach((h,f)=>{n.push({column:`${h.trim()}`,value:`${s.value}`})})}if(Array.from(e.querySelectorAll("[data-filter-count]")).forEach((s,u)=>{s.innerHTML=""}),r.length&&Array.from(e.querySelectorAll("[data-filter-count]")).forEach((s,u)=>{s.innerHTML+=`(${r.length})`}),!Object.keys(n).length&&!Object.keys(r).length)return!1;a.classList.add("table--filtered"),Array.from(a.querySelectorAll("tbody tr")).forEach((s,u)=>{s.classList.remove("filtered"),s.classList.remove("filtered--matched"),s.classList.remove("filtered--show"),s.removeAttribute("data-filtered-by")});for(const[s,u]of Object.entries(r))Array.from(a.querySelectorAll("tbody tr:not(.filtered)")).forEach((h,f)=>{let b=!1;u.forEach((c,L)=>{let A=h.querySelector(`[data-label="${s}"]`);if(c&&c=="$today")c=S("date",new Date);else if(c&&c=="$yesterday"){let g=new Date;g.setDate(g.getDate()-1),c=S("date",g)}else if(c&&(c=="$thisWeek"||c=="$lastWeek")){let g=new Date,p=new Date(g.setDate(g.getDate()-(g.getDay()-1))),m=new Date(g.setDate(g.getDate()-g.getDay()+7)),y=new Date(A.textContent.toLowerCase());if(g.setHours(0,0,0,0),p.setHours(0,0,0,0),m.setHours(0,0,0,0),y.setHours(0,0,0,0),c=="$thisWeek")b=y>=p&&y<=m;else{let $=new Date(p.setDate(p.getDate()-7)),H=new Date(m.setDate(m.getDate()-7));$.setHours(0,0,0,0),H.setHours(0,0,0,0),b=y>=$&&y<=H}}else if(c&&c=="$thisMonth"){let g=new Date,p=g.getFullYear(),m=g.getMonth();var x=new Date(p,m,1),q=new Date(p,m+1,0);let y=new Date(A.textContent.toLowerCase());x.setHours(0,0,0,0),q.setHours(0,0,0,0),y.setHours(0,0,0,0),b=y>=x&&y<=q}else if(c&&c=="$lastMonth"){let g=new Date,p=g.getFullYear(),m=g.getMonth();var E=new Date(p,m-1,1),T=new Date(p,m,0);let y=new Date(A.textContent.toLowerCase());E.setHours(0,0,0,0),T.setHours(0,0,0,0),y.setHours(0,0,0,0),b=y>=E&&y<=T}A&&A.textContent.toLowerCase().includes(c.toLowerCase())&&(b=!0)}),b||(h.classList.add("filtered"),h.setAttribute("data-filtered-by",s))});Array.from(a.querySelectorAll("tbody tr:not(.filtered)")).forEach((s,u)=>{let h=!(n.length>0&&n[0].value.length>=3);n.forEach((f,b)=>{let c=s.querySelector(`[data-label="${f.column}"]`);c&&f.value.length>=3&&c.textContent.toLowerCase().includes(f.value.toLowerCase())&&(h=!0)}),h||s.classList.add("filtered")}),Array.from(a.querySelectorAll("tbody tr:not(.filtered")).forEach((s,u)=>{o++,s.classList.add("filtered--matched"),Math.ceil(o/t)==parseInt(i)&&s.classList.add("filtered--show")}),l&&(l.setAttribute("data-page",i),l.setAttribute("data-pages",Math.ceil(o/t)),l.setAttribute("data-total",o),l.setAttribute("data-show",t)),k(a,e)},k=(a,e)=>{Array.from(e.querySelectorAll("[data-query]")).forEach((r,n)=>{let o=r.getAttribute("data-query"),i;if(o=="total")i=a.classList.contains("table--filtered")?a.querySelectorAll("tbody tr:not(.filtered)").length:a.querySelectorAll("tbody tr").length;else if(!o.includes(" == ")&&o.includes(" & ")){let t=o.split(" & "),d="";t.forEach(s=>{d+=`:not([data-filtered-by="${s}"])`}),i=Array.from(a.querySelectorAll(`tbody tr${d}`)).length}else if(!o.includes(" == "))i=Array.from(a.querySelectorAll(`tbody tr:not([data-filtered-by="${o}"])`)).length;else if(o.includes(" && ")){let t=o.split(" && ");i=Array.from(a.querySelectorAll("tbody tr:not(.filtered)")).filter(function(d){let s=!0;for(const[u,h]of Object.entries(t)){let f=h.split(" == ");(!d.querySelector(`td[data-label="${f[0]}"]`)||d.querySelector(`td[data-label="${f[0]}"]`).textContent!=`${f[1]}`)&&(s=!1)}return s}).length}else{let t=o.split(" == ");i=Array.from(a.querySelectorAll(`tbody tr:not([class*="filtered"]) td[data-label="${t[0]}"], tbody tr[data-filtered-by="${t[0]}"] td[data-label="${t[0]}"]`)).filter(function(d){return d.textContent===t[1]}).length}r.hasAttribute("data-total")?r.setAttribute("data-total",i):r.innerHTML=i})},B=function(a,e,l,r){l.addEventListener("click",n=>{if(n&&n.target instanceof HTMLElement&&n.target.closest("[data-page]")){n.preventDefault();let o=e.querySelector("[data-pagination]"),i=n.target.closest("[data-page]").getAttribute("data-page");o.value=i,r.setAttribute("data-page",i),e.dispatchEvent(new Event("submit"));const t=new URL(location);t.searchParams.set("page",i),history.pushState({type:"pagination",form:e.getAttribute("id"),page:i},"",t)}if(n&&n.target instanceof HTMLElement&&n.target.closest("[data-show]")){n.preventDefault();let o=e.querySelector("[data-show]"),i=n.target.closest("[data-show]").getAttribute("data-show");o.value=i,r.setAttribute("data-show",i),e.dispatchEvent(new Event("submit"))}})},V=(a,e)=>{if(!a)return!1;a.addEventListener("click",l=>{U(e)})},U=function(a){for(var e=[],l=a.getElementsByTagName("tr"),r=0;r<l.length;r++){for(var n=l[r].querySelectorAll("td,th"),o=[],i=0;i<n.length;i++)o.push(`"${n[i].textContent}"`);e.push(o.join(","))}e=e.join(`
12
+ `);let t=new Blob([e],{type:"text/csv"});var d=document.createElement("a");d.download="export.csv";var s=window.URL.createObjectURL(t);d.href=s,d.style.display="none",document.body.appendChild(d),d.click(),document.body.removeChild(d)},_=function(a,e,l,r){if(I(a),C(a),k(a,e),r&&r.classList.contains("table--cta")){const n=W(a);r.style.setProperty("--cta-width",`${n}rem`)}},R=function(a,e,l,r){const n=(t,d,s)=>d.split(/[\.\[\]\'\"]/).filter(u=>u).reduce((u,h)=>u?u[h]:s,t);new URLSearchParams(new FormData(e)).toString();let o=a.querySelectorAll("thead tr th"),i=a.querySelector("tbody");fetch(e.getAttribute("data-ajax"),{method:"get",credentials:"same-origin",headers:new Headers({"Content-Type":"application/json",Accept:"application/json","X-Requested-With":"XMLHttpRequest"})}).then(t=>t.json()).then(t=>{t.data?(i.innerHTML="",t.data.forEach((d,s)=>{var u=document.createElement("tr");o.forEach((h,f)=>{let b="";var c=document.createElement("td");if(c.setAttribute("data-label",h.innerText),h.getAttribute("data-output")){var L=h.getAttribute("data-output");b=L.replace(new RegExp(/{(.*?)}/,"gm"),function(A){return n(d,A.replace("{","").replace("}",""))})}h.hasAttribute("data-format")&&(b=S(h.getAttribute("data-format"),b)),c.innerHTML=b,u.appendChild(c)}),i.appendChild(u)}),v(a,e),_(a,e,l,r),r.setAttribute("data-total",t.meta.total?t.meta.total:1),r.setAttribute("data-page",t.meta.current_page?t.meta.current_page:1),r.setAttribute("data-pages",Math.ceil(r.getAttribute("data-total")/r.getAttribute("data-show"))),w(r,l),t.data.length==0&&(i.innerHTML='<tr><td colspan="100%"><span class="h4 m-0">No results found</span></td></tr>')):i.innerHTML='<tr><td colspan="100%"><span class="h6 m-0">Error loading table</span></td></tr>'})},S=(a,e)=>{switch(a){case"date":e=new Date(e).toLocaleDateString("en-gb",{year:"2-digit",month:"long",day:"numeric"});break;case"capitalise":e=N(e);break}return e};class z extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const e=document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets",l=this.classList.contains("table--cta"),r=this.classList.contains("table--export");let n=this.classList.toString();n=n.replace("table--cta","");const o=document.createElement("template");o.innerHTML=`
13
+ <style>
14
+ @import "${e}/css/core.min.css";
15
+ </style>
16
+ ${l?'<div class="table--cta">':""}
17
+ <div class="table__wrapper ${n}">
18
+ <slot></slot>
19
+ </div>
20
+ ${l?"</div>":""}
21
+ ${r?'<button class="link" type="button" data-export>Export table as CSV</button>':""}
22
+ <div class="table__pagination"></div>
23
+ `,this.shadowRoot.appendChild(o.content.cloneNode(!0));const i=new URLSearchParams(window.location.search);this.hasAttribute("data-total")||this.setAttribute("data-total",this.querySelectorAll("table tbody tr").length),this.hasAttribute("data-page")||this.setAttribute("data-page",i.has("page")?i.get("page"):1),this.hasAttribute("data-show")||this.setAttribute("data-show",15),this.setAttribute("data-pages",Math.ceil(this.getAttribute("data-total")/this.getAttribute("data-show")))}connectedCallback(){this.table=this.querySelector("table"),this.savedTableBody=this.querySelector("tbody").cloneNode(!0),this.pagination=this.shadowRoot.querySelector(".table__pagination"),this.form=document.createElement("form"),this.hasAttribute("data-filterby")&&(this.form=document.querySelector(`#${this.getAttribute("data-filterby")}`),v(this.table,this.form),this.form.querySelector("[data-page]")||(this.form.innerHTML+=`<input name="page" type="hidden" value="${this.getAttribute("data-page")}" data-pagination="true" />`),this.form.querySelector("[data-show]")||(this.form.innerHTML+=`<input name="show" type="hidden" value="${this.getAttribute("data-show")}" data-show="true" />`)),F(this.table),O(this.table,this.form,this.pagination,this,this.savedTableBody),B(this.table,this.form,this.pagination,this),V(this.shadowRoot.querySelector("[data-export]"),this.table),this.form.getAttribute("data-ajax")?R(this.table,this.form,this.pagination,this):(_(this.table,this.form,this.pagination,this),D(this.table,this.form,this),w(this,this.pagination)),this.shadowRoot.querySelector(".table__wrapper").addEventListener("scroll",e=>{this.table.querySelector("dialog[open]")&&this.table.querySelector("dialog[open]").close()})}static get observedAttributes(){return["data-total","data-pages","data-page","data-show"]}attributeChangedCallback(e,l,r){}}export{z as default};
24
+ //# sourceMappingURL=table.component.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.component.min.js","sources":["../../modules/helpers.js","../../modules/pagination.js","../../modules/table.js","table.component.js"],"sourcesContent":["// @ts-nocheck\nimport { createEmbed } from \"./youtubevideo.js\";\n/**\n * Global helper functions to help maintain and enhance framework elements.\n * @module Helpers\n */\n/**\n * Add global classes used by the CSS and later JavaScript.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addBodyClasses = (body) => {\n body.classList.add(\"js-enabled\");\n if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {\n body.classList.add(\"ie\");\n }\n return null;\n};\n/**\n * Add global events.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addGlobalEvents = (body) => {\n const checkElements = function (hash) {\n const label = document.querySelector(`label[for=\"${hash.replace('#', '')}\"]`);\n const summary = document.querySelector(hash + ' summary');\n const dialog = document.querySelector(`dialog${hash}`);\n if (label instanceof HTMLElement)\n label.click();\n else if (summary instanceof HTMLElement)\n summary.click();\n else if (dialog instanceof HTMLElement)\n dialog.showModal();\n };\n if (location.hash)\n checkElements(location.hash);\n window.addEventListener('hashchange', function () { checkElements(location.hash); }, false);\n addEventListener(\"popstate\", (event) => {\n if (event.state.type == \"pagination\") {\n let form = document.querySelector(`#${event.state.form}`);\n let pageInput = document.querySelector(`#${event.state.form} [data-pagination]`);\n if (pageInput)\n pageInput.value = event.state.page;\n else\n form.innerHTML += `<input name=\"page\" type=\"hidden\" data-pagination=\"true\" value=\"${event.state.page}\" />`;\n form.dispatchEvent(new Event(\"submit\"));\n }\n });\n // Dialogs/modals\n document.addEventListener('click', (event) => {\n // Modal\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-modal]')) {\n const button = event.target.closest('[data-modal]');\n const modalID = button.hasAttribute('data-modal') ? button.getAttribute('data-modal') : button.getAttribute('data-filter');\n const dialog = document.querySelector(`dialog#${modalID}`);\n // Create close button is needed\n dialog.innerHTML = `<button class=\"dialog__close\">Close</button>${dialog.innerHTML}`;\n let videoButton = dialog.querySelector('.youtube-embed a');\n if (videoButton) {\n createEmbed(videoButton);\n }\n dialog.showModal();\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n \"event\": \"openModal\",\n \"id\": modalID\n });\n }\n ;\n // Close modal\n if (event && event.target instanceof HTMLElement && event.target.closest('button.dialog__close')) {\n const dialog = event.target.closest('dialog[open]');\n event.preventDefault();\n dialog.close();\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n \"event\": \"closeModal\",\n \"id\": dialog.getAttribute('id')\n });\n }\n if (event && event.target instanceof HTMLElement && event.target.closest('dialog[open]')) {\n const dialog = event.target.closest('dialog[open]');\n const dialogDimensions = dialog.getBoundingClientRect();\n if (event.clientX < dialogDimensions.left || event.clientX > dialogDimensions.right || event.clientY < dialogDimensions.top || event.clientY > dialogDimensions.bottom) {\n dialog.close();\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n \"event\": \"closeModal\",\n \"id\": dialog.getAttribute('id')\n });\n }\n }\n // Popover\n if (event && event.target instanceof HTMLElement && event.target.closest('.dialog__wrapper > button')) {\n // Close existing open popover\n let btn = event.target.closest('.dialog__wrapper > button');\n let parent = event.target.closest('.dialog__wrapper > button').parentNode;\n let dataEvent = \"openPopover\";\n let popover = parent.querySelector(':scope > dialog');\n if (document.querySelector('dialog[open]') && document.querySelector('dialog[open]') != popover)\n document.querySelector('dialog[open]').close();\n if (popover.hasAttribute('open')) {\n popover.close();\n dataEvent = \"closePopover\";\n popover.removeAttribute('style');\n btn.classList.remove('active');\n }\n else {\n popover.show();\n btn.classList.add('active');\n var position = btn.getBoundingClientRect();\n let topOffset = position.top;\n let leftOffset = position.left;\n if (btn.closest('iam-table')) {\n let container = btn.closest('iam-table').parentNode.getBoundingClientRect();\n topOffset -= container.top;\n leftOffset -= container.left;\n }\n if (popover.classList.contains('dialog--fix')) {\n popover.setAttribute('style', `position:fixed;top: ${topOffset}px; left: ${leftOffset}px; margin: 3rem 0 0 0;`);\n }\n }\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n \"event\": dataEvent,\n \"id\": btn.textContent\n });\n }\n ;\n });\n return null;\n};\nexport const isNumeric = function (str) {\n if (typeof str != \"string\")\n return false; // we only process strings! \n return !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...\n !isNaN(parseFloat(str)); // ...and ensure strings of whitespace fail\n};\nexport const zeroPad = (num, places) => String(num).padStart(places, '0');\nexport const ucfirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nexport const ucwords = (str) => str.split(' ').map(s => ucfirst(s)).join(' ');\nexport const unsnake = (str) => str.replace(/_/g, ' ');\nexport const snake = (str) => str.replace(/ /g, '_');\nexport const safeID = function (str) {\n str = str.toLowerCase();\n str = snake(str);\n str = str.replace(/\\W/g, '');\n return str;\n};\n","const createPaginationButttons = function (controller, pagination) {\n if (!controller.getAttribute('data-pages'))\n return false;\n if (!controller.getAttribute('data-page'))\n controller.setAttribute('data-page', 1);\n let currentPage = controller.getAttribute('data-page');\n let numberPages = controller.getAttribute('data-pages');\n let numberRows = controller.getAttribute('data-total');\n let showRows = controller.getAttribute('data-show');\n let addRows = controller.getAttribute('data-increment');\n if (numberPages <= 1) {\n pagination.innerHTML = '';\n return false;\n }\n let strButtons = '';\n for (let i = 1; i <= numberPages; i++) {\n if (i == currentPage)\n strButtons += `<li class=\"page-item active\" aria-current=\"page\"><span class=\"page-link\">${i}</span></li>`;\n else\n strButtons += `<li class=\"page-item\"><a href=\"?page=${i}\" class=\"page-link\" data-page=\"${i}\">${i}</a></li>`;\n }\n pagination.innerHTML = `<ul class=\"pagination mb-0 d-none d-sm-flex\">\n ${currentPage == 1 ? `<li class=\"page-item disabled\"><span class=\"page-link\">Previous</span></li>` : `<li class=\"page-item\"><a href=\"?page=${parseInt(currentPage) - 1}\" class=\"page-link\" data-page=\"${parseInt(currentPage) - 1}\">Previous</a></li>`}\n ${strButtons}\n ${currentPage == numberPages ? `<li class=\"page-item disabled\"><span class=\"page-link\">Next</span></li>` : `<li class=\"page-item\"><a href=\"?page=${parseInt(currentPage) + 1}\" class=\"page-link\" data-page=\"${parseInt(currentPage) + 1}\">Next</a></li>`}\n </ul>`;\n pagination.innerHTML += `<div class=\"d-sm-none text-center\">\n <span class=\"d-block pb-2\">You've viewed ${showRows} of ${numberRows} results</span>\n <a href=\"?show=${parseInt(showRows) + parseInt(addRows)}\" class=\"btn btn-primary w-100 m-0\" data-show=\"${parseInt(showRows) + parseInt(addRows)}\">Load more results</a>\n </div>`;\n return true;\n};\nexport default createPaginationButttons;\n","// @ts-nocheck\nimport { zeroPad, isNumeric, ucfirst } from \"./helpers.js\";\nimport createPaginationButttons from \"./pagination.js\";\n// Basic functionality needed\nexport const addDataAttributes = (table) => {\n const colHeadings = Array.from(table.querySelectorAll('thead th'));\n const colRows = Array.from(table.querySelectorAll('tbody tr'));\n colRows.forEach((row, index) => {\n const cells = Array.from(row.querySelectorAll('th, td'));\n const statuses = ['Low', 'Medium', 'High', 'N/A', 'Pending', 'Verified', 'Incomplete', 'Completed', 'Requires approval'];\n cells.forEach((cell, cellIndex) => {\n const heading = colHeadings[cellIndex];\n if (typeof heading != \"undefined\") {\n let tempDiv = document.createElement(\"div\");\n tempDiv.innerHTML = heading.innerHTML;\n let headingText = tempDiv.textContent || tempDiv.innerText || \"\";\n cell.setAttribute('data-label', headingText);\n if (heading.hasAttribute('class'))\n cell.setAttribute('class', heading.getAttribute('class'));\n if (heading.hasAttribute('data-format')) {\n cell.setAttribute('data-format', heading.getAttribute('data-format'));\n cell.innerHTML = formatCell('date', cell.textContent.trim()); //Make sure date format is consistent\n }\n if (statuses.includes(cell.textContent.trim())) {\n cell.setAttribute('data-content', cell.textContent.trim());\n }\n }\n });\n });\n};\nexport const getLargestLastColWidth = (table) => {\n let largestWidth = 0;\n Array.from(table.querySelectorAll('tr')).forEach((row, index) => {\n let htmlStyles = window.getComputedStyle(document.querySelector('html'));\n let lastColChild = row.querySelector(':scope > *:last-child > *:first-child');\n if (lastColChild) {\n let responsiveWidth = lastColChild.offsetWidth / parseFloat(htmlStyles.fontSize);\n responsiveWidth += 1.5;\n largestWidth = largestWidth > responsiveWidth ? largestWidth : responsiveWidth;\n }\n let rowHeight = row.offsetHeight / parseFloat(htmlStyles.fontSize);\n row.style.setProperty(\"--row-height\", `${rowHeight}rem`);\n });\n return largestWidth;\n};\nexport const createMobileButton = (table) => {\n if (table.closest('.table--fullwidth'))\n return false;\n Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {\n let firstCol = row.querySelector(':scope > :is(td,th):first-child');\n let colContent = firstCol.textContent;\n firstCol.innerHTML = `<span class=\"td__content\">${colContent}</span><button type=\"button\" class=\"d-none\">${colContent}</button>`;\n });\n};\nexport const addTableEventListeners = (table) => {\n table.addEventListener('click', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('tr > :is(td,th):first-child button')) {\n let firstCol = event.target.closest('tr > :is(td,th):first-child button');\n let tableRow = firstCol.parentNode.closest('tr');\n if (tableRow.getAttribute('data-view') == \"full\")\n tableRow.setAttribute('data-view', 'default');\n else\n tableRow.setAttribute('data-view', 'full');\n firstCol.blur();\n }\n ;\n });\n};\n// Filters\nexport const createSearchDataList = (table, form) => {\n let searchInput = form.querySelector('[data-search]');\n if (!searchInput)\n return false;\n const searchID = searchInput.getAttribute('id');\n const searchableColumns = searchInput.getAttribute('data-search').split(',');\n let inputWrapper = searchInput.parentNode;\n let searchableTerms = {};\n searchableColumns.forEach((columnHeading, index) => {\n Array.from(table.querySelectorAll('td[data-label=\"' + columnHeading.trim() + '\"]')).forEach((td, index) => {\n if (td.querySelector('.td__content'))\n searchableTerms[td.querySelector('.td__content').textContent] = td.querySelector('.td__content').textContent;\n else\n searchableTerms[td.textContent] = td.textContent;\n });\n });\n searchInput.setAttribute('list', `${searchID}_list`);\n searchInput.setAttribute('autocomplete', 'off');\n if (!inputWrapper.querySelector('datalist'))\n inputWrapper.innerHTML += `<datalist id=\"${searchID}_list\"></datalist>`;\n inputWrapper.querySelector('datalist').innerHTML = `${Object.keys(searchableTerms).map(term => `<option value=\"${term}\"></option>`).join(\"\")}`;\n};\nexport const addFilterEventListeners = (table, form, pagination, wrapper, savedTableBody) => {\n var timer;\n // Check what conditions are set on the table to see what the form actions are\n let formSubmit = function () {\n if (form.hasAttribute('data-ajax'))\n loadAjaxTable(table, form, pagination, wrapper);\n else if (form.hasAttribute('data-submit'))\n form.submit();\n else {\n filterTable(table, form, wrapper);\n createPaginationButttons(wrapper, pagination);\n }\n };\n form.addEventListener('keyup', (event) => {\n clearTimeout(timer);\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-search]')) {\n timer = setTimeout(function () {\n formSubmit();\n }, 500);\n }\n ;\n });\n form.addEventListener('change', (event) => {\n clearTimeout(timer);\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-sort]')) {\n if (!form.hasAttribute('data-submit'))\n sortTable(table, form, savedTableBody);\n formSubmit();\n }\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-search]')) {\n formSubmit();\n }\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-filter]') && !event.target.closest('form dialog')) {\n formSubmit();\n }\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-show]')) {\n formSubmit();\n }\n });\n form.addEventListener('click', (event) => {\n clearTimeout(timer);\n if (event && event.target instanceof HTMLElement && event.target.closest('dialog button:not([type=\"button\"])')) {\n let button = event.target.closest('dialog button:not([type=\"button\"])');\n let modal = button.closest('dialog');\n modal.close();\n }\n // Prevent the form from submitting\n if (event && event.target instanceof HTMLElement && event.target.closest('.dialog__close')) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-clear]')) {\n form.reset();\n if (!form.hasAttribute('data-submit'))\n sortTable(table, form, savedTableBody);\n formSubmit();\n }\n });\n form.addEventListener('submit', (event) => {\n clearTimeout(timer);\n if (!form.hasAttribute('data-submit'))\n event.preventDefault();\n formSubmit();\n });\n};\nexport const sortTable = (table, form, savedTableBody) => {\n if (form.getAttribute('data-ajax')) {\n return false;\n }\n let tbody = table.querySelector('tbody');\n let select = form.querySelector('[data-sort]');\n let selectedOption = select.querySelector(`option:nth-child(${select.selectedIndex + 1})`);\n let sortBy = selectedOption.getAttribute('data-sort');\n let order = selectedOption.getAttribute('data-order');\n let format = selectedOption.getAttribute('data-format');\n if (!sortBy) {\n tbody.innerHTML = savedTableBody.innerHTML;\n addDataAttributes(table);\n return false;\n }\n let orderArray = [];\n if (!['asc', 'desc', 'descending'].includes(order)) {\n orderArray = order.split(',');\n }\n // Create an array from the table rows, the index created is then used to sort the array\n let tableArr = [];\n Array.from(tbody.querySelectorAll('tr')).forEach((tableRow, index) => {\n let rowIndex = tableRow.querySelector('td[data-label=\"' + sortBy + '\"], th[data-label=\"' + sortBy + '\"]').textContent.trim();\n // If a predefined order set replace the search term with an ordered numeric value so it can be sorted\n if (orderArray.length && orderArray.includes(rowIndex)) {\n rowIndex = orderArray.indexOf(rowIndex);\n }\n if (isNumeric(rowIndex))\n rowIndex = zeroPad(rowIndex, 10);\n // If the sort format is date then lets transform the index to a sortable date (this is never displayed)\n if (format && format == \"date\")\n rowIndex = new Date(rowIndex);\n const dataRow = {\n index: rowIndex,\n row: tableRow\n };\n tableArr.push(dataRow);\n });\n // Sort array alphabetically\n tableArr.sort((a, b) => (a.index > b.index) ? 1 : -1);\n // Reverse if descending\n if (order == \"descending\" || order == \"desc\")\n tableArr = tableArr.reverse();\n // Create a string to return and populate the tbody\n let strTbody = '';\n tableArr.forEach((tableRow, index) => {\n strTbody += tableRow.row.outerHTML;\n });\n tbody.innerHTML = strTbody;\n};\nexport const filterTable = (table, form, wrapper) => {\n table.classList.remove('table--filtered');\n let filters = [];\n let searches = [];\n let matched = 0;\n let page = form.querySelector('[data-pagination]') ? parseInt(form.querySelector('[data-pagination]').value) : 1;\n let showRows = form.querySelector('[data-show]') ? parseInt(form.querySelector('[data-show]').value) : 15;\n // Filter\n let filterInputs = Array.from(form.querySelectorAll('[data-filter]'));\n filterInputs.forEach((filterInput, index) => {\n // Ignore uncked radio inputs\n if (filterInput.type == 'radio' && !filterInput.checked) {\n return;\n }\n if (filterInput.type == 'checkbox' && !filterInput.checked) {\n return;\n }\n if (filterInput.getAttribute('data-filter') == \"multi\") {\n for (const [key, value] of Object.entries(JSON.parse(filterInput.value))) {\n filters[filterInput.getAttribute('data-filter')].push(value);\n }\n }\n else if (filterInput.value) {\n if (!filters[filterInput.getAttribute('data-filter')])\n filters[filterInput.getAttribute('data-filter')] = new Array();\n filters[filterInput.getAttribute('data-filter')].push(filterInput.value);\n }\n });\n // Add search columns too\n if (form.querySelector('[data-search]')) {\n let searchInput = form.querySelector('[data-search]');\n let searchColumns = form.querySelector('[data-search]').getAttribute('data-search').split(',');\n searchColumns.forEach((column, index) => {\n searches.push({ 'column': `${column.trim()}`, 'value': `${searchInput.value}` });\n });\n }\n //Display the filter count\n Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {\n element.innerHTML = '';\n });\n if (filters.length) {\n Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {\n element.innerHTML += `(${filters.length})`;\n });\n }\n // Stop function if no filters identified\n if (!Object.keys(searches).length && !Object.keys(filters).length)\n return false;\n table.classList.add('table--filtered');\n // Reset\n Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {\n row.classList.remove('filtered');\n row.classList.remove('filtered--matched');\n row.classList.remove('filtered--show');\n row.removeAttribute('data-filtered-by');\n });\n // Filter the table\n for (const [key, filterValue] of Object.entries(filters)) {\n Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row, index) => {\n let isMatched = false;\n filterValue.forEach((filter, index) => {\n let filterTd = row.querySelector(`[data-label=\"${key}\"]`);\n // Dynamic values\n if (filter && filter == \"$today\")\n filter = formatCell('date', new Date());\n else if (filter && filter == \"$yesterday\") {\n let yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n filter = formatCell('date', yesterday);\n }\n else if (filter && (filter == \"$thisWeek\" || filter == \"$lastWeek\")) {\n let today = new Date();\n let mondayThisWeek = new Date(today.setDate(today.getDate() - (today.getDay() - 1)));\n let sundayThisWeek = new Date(today.setDate(today.getDate() - today.getDay() + 7));\n let checkDate = new Date(filterTd.textContent.toLowerCase());\n today.setHours(0, 0, 0, 0);\n mondayThisWeek.setHours(0, 0, 0, 0);\n sundayThisWeek.setHours(0, 0, 0, 0);\n checkDate.setHours(0, 0, 0, 0);\n if (filter == \"$thisWeek\") {\n isMatched = (checkDate >= mondayThisWeek && checkDate <= sundayThisWeek);\n }\n else {\n let mondayLastWeek = new Date(mondayThisWeek.setDate(mondayThisWeek.getDate() - 7));\n let sundayLastWeek = new Date(sundayThisWeek.setDate(sundayThisWeek.getDate() - 7));\n mondayLastWeek.setHours(0, 0, 0, 0);\n sundayLastWeek.setHours(0, 0, 0, 0);\n isMatched = (checkDate >= mondayLastWeek && checkDate <= sundayLastWeek);\n }\n }\n else if (filter && filter == \"$thisMonth\") {\n let today = new Date(), year = today.getFullYear(), month = today.getMonth();\n var firstDayMonth = new Date(year, month, 1);\n var lastDayMonth = new Date(year, month + 1, 0);\n let checkDate = new Date(filterTd.textContent.toLowerCase());\n firstDayMonth.setHours(0, 0, 0, 0);\n lastDayMonth.setHours(0, 0, 0, 0);\n checkDate.setHours(0, 0, 0, 0);\n isMatched = (checkDate >= firstDayMonth && checkDate <= lastDayMonth);\n }\n else if (filter && filter == \"$lastMonth\") {\n let today = new Date(), year = today.getFullYear(), month = today.getMonth();\n var firstDayLastMonth = new Date(year, month - 1, 1);\n var lastDayLastMonth = new Date(year, month, 0);\n let checkDate = new Date(filterTd.textContent.toLowerCase());\n firstDayLastMonth.setHours(0, 0, 0, 0);\n lastDayLastMonth.setHours(0, 0, 0, 0);\n checkDate.setHours(0, 0, 0, 0);\n isMatched = (checkDate >= firstDayLastMonth && checkDate <= lastDayLastMonth);\n }\n if (filterTd && filterTd.textContent.toLowerCase().includes(filter.toLowerCase())) {\n isMatched = true;\n }\n });\n if (!isMatched) {\n row.classList.add('filtered');\n row.setAttribute('data-filtered-by', key);\n }\n });\n }\n // Search whats left of the table after filtering\n Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row, index) => {\n let isSearched = searches.length > 0 && searches[0].value.length >= 3 ? false : true;\n searches.forEach((search, index) => {\n let searchTd = row.querySelector(`[data-label=\"${search.column}\"]`);\n if (searchTd && search.value.length >= 3 && searchTd.textContent.toLowerCase().includes(search.value.toLowerCase())) {\n isSearched = true;\n }\n });\n if (!isSearched)\n row.classList.add('filtered');\n });\n // Work out what to display after pagination\n Array.from(table.querySelectorAll('tbody tr:not(.filtered')).forEach((row, index) => {\n matched++;\n row.classList.add('filtered--matched');\n // pagination bit \n if (Math.ceil(matched / showRows) == parseInt(page))\n row.classList.add('filtered--show');\n });\n if (wrapper) {\n wrapper.setAttribute('data-page', page);\n wrapper.setAttribute('data-pages', Math.ceil(matched / showRows));\n wrapper.setAttribute('data-total', matched);\n wrapper.setAttribute('data-show', showRows);\n }\n populateDataQueries(table, form);\n};\nexport const populateDataQueries = (table, form) => {\n const dataQueries = Array.from(form.querySelectorAll('[data-query]'));\n dataQueries.forEach((queryElement, index) => {\n let query = queryElement.getAttribute('data-query');\n let numberOfMatchedRows;\n if (query == 'total') {\n numberOfMatchedRows = table.classList.contains('table--filtered') ? table.querySelectorAll('tbody tr:not(.filtered)').length : table.querySelectorAll('tbody tr').length;\n }\n else if (!query.includes(' == ') && query.includes(' & ')) {\n let queries = query.split(' & ');\n let selector = '';\n queries.forEach(element => {\n selector += `:not([data-filtered-by=\"${element}\"])`;\n });\n numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr${selector}`)).length;\n }\n else if (!query.includes(' == ')) {\n numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr:not([data-filtered-by=\"${query}\"])`)).length;\n }\n else if (query.includes(' && ')) {\n let queries = query.split(' && ');\n numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr:not(.filtered)`)).filter(function (row) {\n let matched = true;\n for (const [index, value] of Object.entries(queries)) {\n let queryParts = value.split(' == ');\n if (!row.querySelector(`td[data-label=\"${queryParts[0]}\"]`) || row.querySelector(`td[data-label=\"${queryParts[0]}\"]`).textContent != `${queryParts[1]}`)\n matched = false;\n }\n return matched;\n }).length;\n }\n else {\n let queryParts = query.split(' == ');\n numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr:not([class*=\"filtered\"]) td[data-label=\"${queryParts[0]}\"], tbody tr[data-filtered-by=\"${queryParts[0]}\"] td[data-label=\"${queryParts[0]}\"]`)).filter(function (element) {\n return element.textContent === queryParts[1];\n }).length;\n }\n if (queryElement.hasAttribute('data-total'))\n queryElement.setAttribute('data-total', numberOfMatchedRows);\n else\n queryElement.innerHTML = numberOfMatchedRows;\n });\n};\n// Pagination\nexport const addPaginationEventListeners = function (table, form, pagination, wrapper) {\n pagination.addEventListener('click', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-page]')) {\n event.preventDefault();\n let paginationInput = form.querySelector('[data-pagination]');\n let newPage = event.target.closest('[data-page]').getAttribute('data-page');\n paginationInput.value = newPage;\n wrapper.setAttribute('data-page', newPage);\n form.dispatchEvent(new Event(\"submit\"));\n const url = new URL(location);\n url.searchParams.set(\"page\", newPage);\n history.pushState({ 'type': 'pagination', 'form': form.getAttribute('id'), 'page': newPage }, \"\", url);\n }\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-show]')) {\n event.preventDefault();\n let showInput = form.querySelector('[data-show]');\n let showRows = event.target.closest('[data-show]').getAttribute('data-show');\n showInput.value = showRows;\n wrapper.setAttribute('data-show', showRows);\n form.dispatchEvent(new Event(\"submit\"));\n }\n });\n};\n// Export CSV Data\nexport const addExportEventListeners = (button, table) => {\n if (!button)\n return false;\n button.addEventListener('click', (event) => {\n exportAsCSV(table);\n });\n};\nexport const exportAsCSV = function (table) {\n var csvData = [];\n // Get each row data\n var rows = table.getElementsByTagName('tr');\n for (var i = 0; i < rows.length; i++) {\n // Get each column data\n var cols = rows[i].querySelectorAll('td,th');\n // Stores each csv row data\n var csvRow = [];\n for (var j = 0; j < cols.length; j++) {\n // Get the text data of each cell of a row and push it to csvrow\n csvRow.push(`\"${cols[j].textContent}\"`);\n }\n // Combine each column value with comma\n csvData.push(csvRow.join(\",\"));\n }\n // Combine each row data with new line character\n csvData = csvData.join('\\n');\n // Create CSV file object and feed our csvData into it\n let CSVFile = new Blob([csvData], {\n type: \"text/csv\"\n });\n // Create to temporary link to initiate download process\n var tempLink = document.createElement('a');\n tempLink.download = \"export.csv\";\n var url = window.URL.createObjectURL(CSVFile);\n tempLink.href = url;\n // This link should not be displayed\n tempLink.style.display = \"none\";\n document.body.appendChild(tempLink);\n // Automatically click the link to trigger download\n tempLink.click();\n document.body.removeChild(tempLink);\n};\n// After table is loaded\nexport const makeTableFunctional = function (table, form, pagination, wrapper) {\n createMobileButton(table);\n addDataAttributes(table);\n populateDataQueries(table, form);\n // Work out the largest width of the CTA's in the last column\n if (wrapper && wrapper.classList.contains('table--cta')) {\n const largestWidth = getLargestLastColWidth(table);\n wrapper.style.setProperty(\"--cta-width\", `${largestWidth}rem`);\n }\n};\nexport const loadAjaxTable = function (table, form, pagination, wrapper) {\n const resolvePath = (object, path, defaultValue) => path.split(/[\\.\\[\\]\\'\\\"]/).filter(p => p).reduce((o, p) => o ? o[p] : defaultValue, object);\n let queryString = new URLSearchParams(new FormData(form)).toString();\n let columns = table.querySelectorAll('thead tr th');\n let tbody = table.querySelector('tbody');\n fetch(form.getAttribute('data-ajax'), {\n method: 'get',\n credentials: 'same-origin',\n headers: new Headers({\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Requested-With': 'XMLHttpRequest'\n })\n }).then((response) => response.json()).then((response) => {\n if (response.data) {\n tbody.innerHTML = '';\n response.data.forEach((row, index) => {\n var table_row = document.createElement('tr');\n columns.forEach((col, index) => {\n let cellOutput = '';\n var table_cell = document.createElement('td');\n // Add some data to help with the mobile layout design\n table_cell.setAttribute('data-label', col.innerText);\n if (col.getAttribute('data-output')) {\n var cellTemplate = col.getAttribute('data-output');\n // Use a regex to replace {var} with actual values from the json data\n cellOutput = cellTemplate.replace(new RegExp(/{(.*?)}/, \"gm\"), function (matched) { return resolvePath(row, matched.replace('{', '').replace('}', '')); });\n }\n if (col.hasAttribute('data-format')) {\n cellOutput = formatCell(col.getAttribute('data-format'), cellOutput);\n }\n table_cell.innerHTML = cellOutput;\n table_row.appendChild(table_cell);\n });\n tbody.appendChild(table_row);\n });\n createSearchDataList(table, form);\n // Add data to the pagination \n makeTableFunctional(table, form, pagination, wrapper);\n wrapper.setAttribute('data-total', (response.meta.total ? response.meta.total : 1));\n wrapper.setAttribute('data-page', (response.meta.current_page ? response.meta.current_page : 1));\n wrapper.setAttribute('data-pages', Math.ceil(wrapper.getAttribute('data-total') / wrapper.getAttribute('data-show')));\n createPaginationButttons(wrapper, pagination);\n if (response.data.length == 0) {\n tbody.innerHTML = '<tr><td colspan=\"100%\"><span class=\"h4 m-0\">No results found</span></td></tr>';\n }\n }\n else {\n tbody.innerHTML = '<tr><td colspan=\"100%\"><span class=\"h6 m-0\">Error loading table</span></td></tr>';\n }\n });\n};\nexport const formatCell = (format, cellOutput) => {\n switch (format) {\n case 'date':\n cellOutput = new Date(cellOutput).toLocaleDateString('en-gb', { year: \"2-digit\", month: \"long\", day: \"numeric\" });\n break;\n case 'capitalise':\n cellOutput = ucfirst(cellOutput);\n break;\n }\n return cellOutput;\n};\n","// @ts-nocheck\nimport * as tableModule from \"../../modules/table.js\";\nimport createPaginationButttons from \"../../modules/pagination.js\";\nclass iamTable extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';\n const isCTA = this.classList.contains('table--cta');\n const isExportable = this.classList.contains('table--export');\n let classList = this.classList.toString();\n classList = classList.replace('table--cta', '');\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n @import \"${assetLocation}/css/core.min.css\";\n </style>\n ${isCTA ? '<div class=\"table--cta\">' : ''}\n <div class=\"table__wrapper ${classList}\">\n <slot></slot>\n </div>\n ${isCTA ? '</div>' : ''}\n ${isExportable ? '<button class=\"link\" type=\"button\" data-export>Export table as CSV</button>' : ''}\n <div class=\"table__pagination\"></div>\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n const params = new URLSearchParams(window.location.search);\n // Set default attributes\n if (!this.hasAttribute('data-total'))\n this.setAttribute('data-total', this.querySelectorAll('table tbody tr').length);\n if (!this.hasAttribute('data-page'))\n this.setAttribute('data-page', (params.has('page') ? params.get('page') : 1));\n if (!this.hasAttribute('data-show'))\n this.setAttribute('data-show', 15);\n this.setAttribute('data-pages', Math.ceil(this.getAttribute('data-total') / this.getAttribute('data-show')));\n }\n connectedCallback() {\n this.table = this.querySelector('table');\n this.savedTableBody = this.querySelector('tbody').cloneNode(true);\n this.pagination = this.shadowRoot.querySelector('.table__pagination');\n // Set events on the filter table\n this.form = document.createElement('form');\n if (this.hasAttribute('data-filterby')) {\n this.form = document.querySelector(`#${this.getAttribute('data-filterby')}`);\n // Create a data list if a search input is present\n tableModule.createSearchDataList(this.table, this.form);\n if (!this.form.querySelector('[data-page]')) {\n this.form.innerHTML += `<input name=\"page\" type=\"hidden\" value=\"${this.getAttribute('data-page')}\" data-pagination=\"true\" />`;\n }\n if (!this.form.querySelector('[data-show]')) {\n this.form.innerHTML += `<input name=\"show\" type=\"hidden\" value=\"${this.getAttribute('data-show')}\" data-show=\"true\" />`;\n }\n }\n // Event listeners\n tableModule.addTableEventListeners(this.table);\n tableModule.addFilterEventListeners(this.table, this.form, this.pagination, this, this.savedTableBody);\n tableModule.addPaginationEventListeners(this.table, this.form, this.pagination, this);\n tableModule.addExportEventListeners(this.shadowRoot.querySelector('[data-export]'), this.table);\n if (this.form.getAttribute('data-ajax')) {\n tableModule.loadAjaxTable(this.table, this.form, this.pagination, this);\n }\n else {\n tableModule.makeTableFunctional(this.table, this.form, this.pagination, this);\n tableModule.filterTable(this.table, this.form, this);\n createPaginationButttons(this, this.pagination);\n }\n this.shadowRoot.querySelector('.table__wrapper').addEventListener(\"scroll\", (event) => {\n if (this.table.querySelector('dialog[open]'))\n this.table.querySelector('dialog[open]').close();\n });\n }\n static get observedAttributes() {\n return [\"data-total\", \"data-pages\", \"data-page\", \"data-show\"];\n }\n attributeChangedCallback(attrName, oldVal, newVal) {\n /*\n switch (attrName) {\n case \"data-total\": {\n this.setAttribute('data-pages', Math.ceil(newVal / this.getAttribute('data-show')));\n break;\n }\n case \"data-show\": {\n this.setAttribute('data-pages', Math.ceil(this.getAttribute('data-total') / newVal));\n break;\n }\n case \"data-pages\": {\n console.log('create pagination');\n \n tableModule.filterTable(this.table, this.form);\n createPaginationButttons(this,this.pagination);\n \n break;\n }\n case \"data-page\": {\n \n let paginationInput = this.form.querySelector('[data-pagination]');\n \n paginationInput.value = newVal;\n \n //tableModule.filterTable(this.table, this.form);\n \n break;\n }\n }\n */\n }\n}\nexport default iamTable;\n"],"names":["isNumeric","str","zeroPad","num","places","ucfirst","createPaginationButttons","controller","pagination","currentPage","numberPages","numberRows","showRows","addRows","strButtons","i","addDataAttributes","table","colHeadings","row","index","cells","statuses","cell","cellIndex","heading","tempDiv","headingText","formatCell","getLargestLastColWidth","largestWidth","htmlStyles","lastColChild","responsiveWidth","rowHeight","createMobileButton","firstCol","colContent","addTableEventListeners","event","tableRow","createSearchDataList","form","searchInput","searchID","searchableColumns","inputWrapper","searchableTerms","columnHeading","td","term","addFilterEventListeners","wrapper","savedTableBody","timer","formSubmit","loadAjaxTable","filterTable","sortTable","tbody","select","selectedOption","sortBy","order","format","orderArray","tableArr","rowIndex","dataRow","a","strTbody","filters","searches","matched","page","filterInput","key","value","column","element","filterValue","isMatched","filter","filterTd","yesterday","today","mondayThisWeek","sundayThisWeek","checkDate","mondayLastWeek","sundayLastWeek","year","month","firstDayMonth","lastDayMonth","firstDayLastMonth","lastDayLastMonth","isSearched","search","searchTd","populateDataQueries","queryElement","query","numberOfMatchedRows","queries","selector","queryParts","addPaginationEventListeners","paginationInput","newPage","url","showInput","addExportEventListeners","button","exportAsCSV","csvData","rows","cols","csvRow","j","CSVFile","tempLink","makeTableFunctional","resolvePath","object","path","defaultValue","p","o","columns","response","table_row","col","cellOutput","table_cell","cellTemplate","iamTable","assetLocation","isCTA","isExportable","classList","template","params","tableModule.createSearchDataList","tableModule.addTableEventListeners","tableModule.addFilterEventListeners","tableModule.addPaginationEventListeners","tableModule.addExportEventListeners","tableModule.loadAjaxTable","tableModule.makeTableFunctional","tableModule.filterTable","attrName","oldVal","newVal"],"mappings":"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"}
@@ -1,5 +1,11 @@
1
1
  // @ts-nocheck
2
2
  import tabs from "../../modules/tabs.js";
3
+ // Data layer Web component created
4
+ window.dataLayer = window.dataLayer || [];
5
+ window.dataLayer.push({
6
+ "event": "customElementRegistered",
7
+ "element": "tabs"
8
+ });
3
9
  class iamTabs extends HTMLElement {
4
10
  constructor() {
5
11
  super();
@@ -0,0 +1,17 @@
1
+ /*!
2
+ * iamKey v3.5.0
3
+ * Copyright 2022-2023 iamproperty
4
+ */const c=function(t){const n=t.querySelectorAll(":scope > details");t.querySelectorAll(":scope > details > summary");let s=t.querySelector(":scope > .tabs__links");t.shadowRoot&&t.shadowRoot.querySelector(".tabs__links")&&(s=t.shadowRoot.querySelector(".tabs__links")),s||(s=document.createElement("div"),s.classList.add("tabs__links"),t.prepend(s)),n.forEach((o,a)=>{let i=o.querySelector(":scope > summary");i.classList.add("visually-hidden");let e=document.createElement("button");o.hasAttribute("id")&&(e=document.createElement("a"),e.setAttribute("href",`#${o.getAttribute("id")}`)),o.hasAttribute("open")&&e.setAttribute("aria-pressed",!0),e.innerHTML=`${i.innerText}`,e.classList.add("link"),e.setAttribute("data-index",a),e.setAttribute("tabindex","-1"),s.appendChild(e)})},d=function(t){let n=t.querySelectorAll(":scope > details"),s=t.querySelectorAll(":scope > details > summary"),o=t.querySelectorAll(":scope > .tabs__links > button, .tabs__links > a");t.shadowRoot&&(o=t.shadowRoot.querySelectorAll(".tabs__links > button, .tabs__links > a")),o.forEach(a=>{a.addEventListener("click",i=>{i.preventDefault(),o.forEach(e=>{let r=e==a;e.setAttribute("aria-pressed",r)}),n.forEach((e,r)=>{let l=a.getAttribute("data-index")==r;l?e.setAttribute("open",l):e.removeAttribute("open")}),a.hasAttribute("href")&&history.pushState(void 0,void 0,a.getAttribute("href")),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"openTab",tabTitle:a.textContent})})}),s.forEach((a,i)=>{a.addEventListener("focus",e=>{o.forEach(r=>{r.classList.remove("focus")}),o[i].classList.add("focus")}),a.addEventListener("click",e=>{e.preventDefault(),o[i].click()})})},u=function(t){let n=t.querySelectorAll(":scope > details"),s=t.querySelectorAll(":scope > .tabs__links > button, .tabs__links > a");t.shadowRoot&&(s=t.shadowRoot.querySelectorAll(".tabs__links > button, .tabs__links > a")),location.hash&&t.querySelector(`.tabs__links [href="${location.hash}"]`)?(t.querySelector(`[href="${location.hash}"]`).setAttribute("open",!0),t.querySelector(`details[id="${location.hash.replace("#","")}"]`).setAttribute("open",!0)):t.querySelector("details[open]")||(n[0].setAttribute("open",!0),s[0].setAttribute("aria-pressed",!0))},b=function(t){c(t),d(t),u(t)};window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"tabs"});class h extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const n=document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets",s=document.createElement("template");s.innerHTML=`
5
+ <style>
6
+ @import "${n}/css/core.min.css";
7
+ .tabs{position:relative}.tabs>.tabs__links{margin-bottom:1.5rem;overflow:hidden;padding-bottom:2px}.tabs>.tabs__links .link:not(.text-decoration-none):not(.btn){--is-current: 0;font-weight:bold;font-family:var(--font-heading);font-size:1.125rem;cursor:pointer;margin:0 0 .5rem 0;float:left;clear:both;padding:0;display:inline-block}@media screen and (min-width: 36em){.tabs>.tabs__links .link:not(.text-decoration-none):not(.btn){clear:none;margin-bottom:0;margin-right:2rem}}.tabs>.tabs__links .link:not(.text-decoration-none):not(.btn):after{position:absolute;content:"";top:100%;left:50%;height:2px;transform:translate(-50%, 0);background:var(--colour-underline);transition:width .5s;width:calc(var(--is-current)*100%)}.tabs>.tabs__links .link:not(.text-decoration-none):not(.btn):hover:after,.tabs>.tabs__links .link:not(.text-decoration-none):not(.btn):focus:after,.tabs>.tabs__links .link:not(.text-decoration-none):not(.btn).focus:after{width:100%}.tabs .tabs__links .link:not(.text-decoration-none):not(.btn)[aria-pressed=true]{--is-current: 1;--panel-tab-colour: white;--panel-tab-border: var(--colour-secondary) }:host(.admin-panel){display:block}/*# sourceMappingURL=assets/css/components/tabs.css.map */
8
+
9
+
10
+ ${this.hasAttribute("css")?`@import "${this.getAttribute("css")}";`:""}
11
+ </style>
12
+ <div class="tabs">
13
+ <div class="tabs__links"></div>
14
+ <slot></slot>
15
+ </div>
16
+ `,this.shadowRoot.appendChild(s.content.cloneNode(!0))}connectedCallback(){b(this)}}export{h as default};
17
+ //# sourceMappingURL=tabs.component.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.component.min.js","sources":["../../modules/tabs.js","tabs.component.js"],"sourcesContent":["// @ts-nocheck\nexport const createTabsLinks = function (tabsElement) {\n const details = tabsElement.querySelectorAll(':scope > details');\n let summaries = tabsElement.querySelectorAll(':scope > details > summary');\n let tabLinks = tabsElement.querySelector(':scope > .tabs__links');\n if (tabsElement.shadowRoot && tabsElement.shadowRoot.querySelector('.tabs__links'))\n tabLinks = tabsElement.shadowRoot.querySelector('.tabs__links');\n if (!tabLinks) {\n tabLinks = document.createElement('div');\n tabLinks.classList.add('tabs__links');\n tabsElement.prepend(tabLinks);\n }\n // Create the tab buttons from the summary titles\n details.forEach((detail, index) => {\n let summary = detail.querySelector(':scope > summary');\n summary.classList.add('visually-hidden');\n let button = document.createElement('button');\n if (detail.hasAttribute('id')) {\n button = document.createElement('a');\n button.setAttribute('href', `#${detail.getAttribute('id')}`);\n }\n if (detail.hasAttribute('open')) {\n button.setAttribute('aria-pressed', true);\n }\n button.innerHTML = `${summary.innerText}`;\n button.classList.add('link');\n button.setAttribute('data-index', index);\n button.setAttribute('tabindex', '-1');\n tabLinks.appendChild(button);\n });\n};\nexport const setTabsEventHandlers = function (tabsElement) {\n let details = tabsElement.querySelectorAll(':scope > details');\n let summaries = tabsElement.querySelectorAll(':scope > details > summary');\n let buttons = tabsElement.querySelectorAll(':scope > .tabs__links > button, .tabs__links > a');\n if (tabsElement.shadowRoot)\n buttons = tabsElement.shadowRoot.querySelectorAll('.tabs__links > button, .tabs__links > a');\n // Set the on click for the tab buttons, these will open the details box it matches too\n buttons.forEach((button) => {\n button.addEventListener(\"click\", (e) => {\n e.preventDefault();\n buttons.forEach((buttonLoopItem) => {\n let buttonPressed = buttonLoopItem == button ? true : false;\n buttonLoopItem.setAttribute('aria-pressed', buttonPressed);\n });\n details.forEach((detail, detailsIndex) => {\n let detailsOpen = button.getAttribute('data-index') == detailsIndex ? true : false;\n if (detailsOpen)\n detail.setAttribute('open', detailsOpen);\n else\n detail.removeAttribute('open');\n });\n if (button.hasAttribute('href'))\n history.pushState(undefined, undefined, button.getAttribute('href'));\n // Data layer Open Event\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n \"event\": \"openTab\",\n \"tabTitle\": button.textContent\n });\n });\n });\n // Make sure we dont loose existing summary functionality\n summaries.forEach((summary, index) => {\n // Maintain the focus on the summary element but visually highlight the tab button\n summary.addEventListener(\"focus\", (e) => {\n buttons.forEach((button) => {\n button.classList.remove('focus');\n });\n buttons[index].classList.add('focus');\n });\n summary.addEventListener(\"click\", (e) => {\n e.preventDefault();\n buttons[index].click();\n });\n });\n};\nexport const openFirstTab = function (tabsElement) {\n let details = tabsElement.querySelectorAll(':scope > details');\n let buttons = tabsElement.querySelectorAll(':scope > .tabs__links > button, .tabs__links > a');\n if (tabsElement.shadowRoot)\n buttons = tabsElement.shadowRoot.querySelectorAll('.tabs__links > button, .tabs__links > a');\n if (location.hash && tabsElement.querySelector(`.tabs__links [href=\"${location.hash}\"]`)) {\n tabsElement.querySelector(`[href=\"${location.hash}\"]`).setAttribute('open', true);\n tabsElement.querySelector(`details[id=\"${location.hash.replace('#', '')}\"]`).setAttribute('open', true);\n }\n else if (!tabsElement.querySelector(`details[open]`)) {\n details[0].setAttribute('open', true);\n buttons[0].setAttribute('aria-pressed', true);\n }\n};\nconst tabs = function (tabsElement) {\n createTabsLinks(tabsElement);\n setTabsEventHandlers(tabsElement);\n openFirstTab(tabsElement);\n};\nexport default tabs;\n","// @ts-nocheck\nimport tabs from \"../../modules/tabs.js\";\n// Data layer Web component created\nwindow.dataLayer = window.dataLayer || [];\nwindow.dataLayer.push({\n \"event\": \"customElementRegistered\",\n \"element\": \"tabs\"\n});\nclass iamTabs extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';\n const loadCSS = `@import \"${assetLocation}/css/components/tabs.css\";`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n @import \"${assetLocation}/css/core.min.css\";\n ${loadCSS}\n \n ${this.hasAttribute('css') ? `@import \"${this.getAttribute('css')}\";` : ``}\n </style>\n <div class=\"tabs\">\n <div class=\"tabs__links\"></div>\n <slot></slot>\n </div>\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n tabs(this);\n }\n}\nexport default iamTabs;\n"],"names":["createTabsLinks","tabsElement","details","tabLinks","detail","index","summary","button","setTabsEventHandlers","summaries","buttons","e","buttonLoopItem","buttonPressed","detailsIndex","detailsOpen","openFirstTab","tabs","iamTabs","assetLocation","template"],"mappings":"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"}
@@ -1,15 +1,14 @@
1
1
  // @ts-nocheck
2
2
  // Modules
3
3
  import * as helpers from '../js/modules/helpers.js';
4
+ import createDataLayer from '../js/modules/data-layer.js';
4
5
  import nav from '../js/modules/nav.js';
5
- import table from '../js/modules/table.js';
6
6
  //import accordion from './modules/accordion.js'
7
7
  import testimonial from '../js/modules/testimonial.js';
8
8
  import carousel from '../js/modules/carousel.js';
9
9
  import form from '../js/modules/form.js';
10
10
  import youtubeVideo from '../js/modules/youtubevideo.js';
11
- import modal from '../js/modules/modal.js';
12
- const components = ['accordion', 'header', 'tabs'];
11
+ const components = ['accordion', 'header', 'tabs', 'table', 'card', 'pagination', 'filterlist', 'applied-filters'];
13
12
  const prefix = "iam";
14
13
  const options = {
15
14
  rootMargin: '50px',
@@ -18,11 +17,13 @@ const options = {
18
17
  const componentExt = ".component.js";
19
18
  // Load components - Each component will load once the first of its type has been loaded
20
19
  components.forEach((component) => {
20
+ console.log(component);
21
21
  if (document.getElementsByTagName(`${prefix}-${component}`).length === 0)
22
22
  return;
23
23
  let callback = (entries) => {
24
24
  entries.forEach((entry) => {
25
25
  if (entry.intersectionRatio > 0) {
26
+ console.log(component);
26
27
  import(`./components/${component}/${component}${componentExt}`).then(module => {
27
28
  if (!window.customElements.get(`${prefix}-${component}`))
28
29
  window.customElements.define(`${prefix}-${component}`, module.default);
@@ -38,24 +39,15 @@ components.forEach((component) => {
38
39
  });
39
40
  // Attach classes to dom elements
40
41
  document.addEventListener("DOMContentLoaded", function () {
42
+ createDataLayer();
41
43
  // Global stuff
42
44
  helpers.addBodyClasses(document.body);
43
45
  helpers.addGlobalEvents(document.body);
44
- helpers.checkElements(document.body);
46
+ //helpers.checkElements(document.body);
45
47
  // ANav
46
48
  Array.from(document.querySelectorAll('.nav')).forEach((arrayElement) => {
47
49
  nav(arrayElement);
48
50
  });
49
- // Advanced tables
50
- Array.from(document.querySelectorAll('.table__wrapper')).forEach((arrayElement) => {
51
- table(arrayElement);
52
- });
53
- // Accordions
54
- /*
55
- Array.from(document.querySelectorAll('.accordion')).forEach((arrayElement) => {
56
- accordion(arrayElement);
57
- });
58
- */
59
51
  // Testimonial
60
52
  Array.from(document.querySelectorAll('.testimonial')).forEach((arrayElement) => {
61
53
  testimonial(arrayElement);
@@ -68,12 +60,9 @@ document.addEventListener("DOMContentLoaded", function () {
68
60
  Array.from(document.querySelectorAll('form')).forEach((arrayElement) => {
69
61
  form(arrayElement);
70
62
  });
71
- // Modal
72
- Array.from(document.querySelectorAll('.modal')).forEach((arrayElement) => {
73
- modal(arrayElement);
74
- });
75
63
  // YouTube videos
76
64
  Array.from(document.querySelectorAll('.youtube-embed')).forEach((arrayElement) => {
65
+ console.log(arrayElement);
77
66
  new youtubeVideo(arrayElement);
78
67
  });
79
68
  window.addEventListener('hashchange', function () {