@iamproperty/components 6.0.0 → 6.1.0--beta2

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 (277) hide show
  1. package/assets/bootstrap/README.md +8 -7
  2. package/assets/bootstrap/js/index.esm.js +19 -0
  3. package/assets/bootstrap/js/index.umd.js +34 -0
  4. package/assets/bootstrap/js/src/alert.js +1 -1
  5. package/assets/bootstrap/js/src/base-component.js +2 -2
  6. package/assets/bootstrap/js/src/button.js +1 -1
  7. package/assets/bootstrap/js/src/carousel.js +1 -1
  8. package/assets/bootstrap/js/src/collapse.js +1 -1
  9. package/assets/bootstrap/js/src/dom/data.js +1 -1
  10. package/assets/bootstrap/js/src/dom/event-handler.js +1 -1
  11. package/assets/bootstrap/js/src/dom/manipulator.js +1 -1
  12. package/assets/bootstrap/js/src/dom/selector-engine.js +1 -1
  13. package/assets/bootstrap/js/src/dropdown.js +3 -12
  14. package/assets/bootstrap/js/src/modal.js +13 -17
  15. package/assets/bootstrap/js/src/offcanvas.js +1 -1
  16. package/assets/bootstrap/js/src/popover.js +1 -1
  17. package/assets/bootstrap/js/src/scrollspy.js +10 -14
  18. package/assets/bootstrap/js/src/tab.js +4 -2
  19. package/assets/bootstrap/js/src/toast.js +4 -9
  20. package/assets/bootstrap/js/src/tooltip.js +50 -32
  21. package/assets/bootstrap/js/src/util/backdrop.js +1 -1
  22. package/assets/bootstrap/js/src/util/component-functions.js +1 -1
  23. package/assets/bootstrap/js/src/util/config.js +1 -1
  24. package/assets/bootstrap/js/src/util/focustrap.js +1 -1
  25. package/assets/bootstrap/js/src/util/index.js +1 -1
  26. package/assets/bootstrap/js/src/util/sanitizer.js +1 -1
  27. package/assets/bootstrap/js/src/util/scrollbar.js +1 -1
  28. package/assets/bootstrap/js/src/util/swipe.js +1 -1
  29. package/assets/bootstrap/js/src/util/template-factory.js +1 -1
  30. package/assets/bootstrap/package.json +27 -28
  31. package/assets/bootstrap/scss/_accordion.scss +4 -7
  32. package/assets/bootstrap/scss/_button-group.scss +1 -1
  33. package/assets/bootstrap/scss/_buttons.scss +7 -28
  34. package/assets/bootstrap/scss/_carousel.scss +3 -0
  35. package/assets/bootstrap/scss/_dropdown.scss +1 -2
  36. package/assets/bootstrap/scss/_functions.scss +2 -2
  37. package/assets/bootstrap/scss/_list-group.scss +5 -6
  38. package/assets/bootstrap/scss/_modal.scss +1 -1
  39. package/assets/bootstrap/scss/_nav.scss +2 -2
  40. package/assets/bootstrap/scss/_navbar.scss +0 -2
  41. package/assets/bootstrap/scss/_offcanvas.scss +4 -5
  42. package/assets/bootstrap/scss/_pagination.scss +1 -1
  43. package/assets/bootstrap/scss/_popover.scss +5 -5
  44. package/assets/bootstrap/scss/_toasts.scss +2 -5
  45. package/assets/bootstrap/scss/_variables-dark.scss +87 -0
  46. package/assets/bootstrap/scss/_variables.scss +17 -18
  47. package/assets/bootstrap/scss/bootstrap-utilities.scss +0 -3
  48. package/assets/bootstrap/scss/forms/_floating-labels.scss +0 -1
  49. package/assets/bootstrap/scss/forms/_input-group.scss +4 -7
  50. package/assets/bootstrap/scss/helpers/_focus-ring.scss +5 -0
  51. package/assets/bootstrap/scss/helpers/_icon-link.scss +25 -0
  52. package/assets/bootstrap/scss/mixins/_banner.scss +2 -2
  53. package/assets/bootstrap/scss/mixins/_color-mode.scss +21 -0
  54. package/assets/bootstrap/scss/mixins/_forms.scss +10 -10
  55. package/assets/bootstrap/scss/mixins/_table-variants.scss +2 -2
  56. package/assets/bootstrap/scss/mixins/_utilities.scss +1 -1
  57. package/assets/css/components/actionbar.css.map +1 -1
  58. package/assets/css/components/actionbar.global.css.map +1 -1
  59. package/assets/css/components/barchart.component.css +1 -1
  60. package/assets/css/components/barchart.component.css.map +1 -1
  61. package/assets/css/components/card.component.css +1 -0
  62. package/assets/css/components/card.component.css.map +1 -0
  63. package/assets/css/components/card.module.css +1 -0
  64. package/assets/css/components/card.module.css.map +1 -0
  65. package/assets/css/components/carousel.component.css +1 -0
  66. package/assets/css/components/carousel.component.css.map +1 -0
  67. package/assets/css/components/carousel.config.css +1 -0
  68. package/assets/css/components/carousel.config.css.map +1 -0
  69. package/assets/css/components/charts.config.css +1 -1
  70. package/assets/css/components/charts.config.css.map +1 -1
  71. package/assets/css/components/charts.css +1 -1
  72. package/assets/css/components/charts.css.map +1 -1
  73. package/assets/css/components/charts.module.css +1 -1
  74. package/assets/css/components/charts.module.css.map +1 -1
  75. package/assets/css/components/collapsible-side.css.map +1 -1
  76. package/assets/css/components/fileupload.css.map +1 -1
  77. package/assets/css/components/filter-card.component.css +1 -0
  78. package/assets/css/components/filter-card.component.css.map +1 -0
  79. package/assets/css/components/header.css +1 -1
  80. package/assets/css/components/header.css.map +1 -1
  81. package/assets/css/components/marketing.css.map +1 -1
  82. package/assets/css/components/multi-step.component.css +1 -0
  83. package/assets/css/components/multi-step.component.css.map +1 -0
  84. package/assets/css/components/multiselect.preload.css +1 -1
  85. package/assets/css/components/multiselect.preload.css.map +1 -1
  86. package/assets/css/components/nav.css.map +1 -1
  87. package/assets/css/components/nav.docs.css.map +1 -1
  88. package/assets/css/components/nav.global.css.map +1 -1
  89. package/assets/css/components/nav.old.css.map +1 -1
  90. package/assets/css/components/nav.preload.css +1 -1
  91. package/assets/css/components/nav.preload.css.map +1 -1
  92. package/assets/css/components/notification.css.map +1 -1
  93. package/assets/css/components/pagination.css.map +1 -1
  94. package/assets/css/components/property-searchbar.css.map +1 -1
  95. package/assets/css/components/record-card.component.css +1 -0
  96. package/assets/css/components/record-card.component.css.map +1 -0
  97. package/assets/css/components/slider.css.map +1 -1
  98. package/assets/css/components/snapshot.css.map +1 -1
  99. package/assets/css/components/stepper.css.map +1 -1
  100. package/assets/css/components/table.global.css.map +1 -1
  101. package/assets/css/components/tabs.css +1 -1
  102. package/assets/css/components/tabs.css.map +1 -1
  103. package/assets/css/components/testimonial.css.map +1 -1
  104. package/assets/css/components/timeline.css +1 -1
  105. package/assets/css/components/timeline.css.map +1 -1
  106. package/assets/css/components/video-card.component.css +1 -0
  107. package/assets/css/components/video-card.component.css.map +1 -0
  108. package/assets/css/core.min.css +1 -1
  109. package/assets/css/core.min.css.map +1 -1
  110. package/assets/css/style.min.css +1 -1
  111. package/assets/css/style.min.css.map +1 -1
  112. package/assets/img/illustrations/not-found.png +0 -0
  113. package/assets/js/components/accordion/accordion.component.min.js +2 -2
  114. package/assets/js/components/actionbar/actionbar.component.min.js +6 -6
  115. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  116. package/assets/js/components/address-lookup/address-lookup.component.min.js +2 -2
  117. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  118. package/assets/js/components/applied-filters/applied-filters.component.min.js +2 -2
  119. package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
  120. package/assets/js/components/barchart/barchart.component.js +2 -0
  121. package/assets/js/components/barchart/barchart.component.min.js +5 -3
  122. package/assets/js/components/barchart/barchart.component.min.js.map +1 -1
  123. package/assets/js/components/card/card.component.js +92 -154
  124. package/assets/js/components/card/card.component.min.js +27 -32
  125. package/assets/js/components/card/card.component.min.js.map +1 -1
  126. package/assets/js/components/carousel/carousel.component.js +36 -41
  127. package/assets/js/components/carousel/carousel.component.min.js +18 -12
  128. package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
  129. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +2 -2
  130. package/assets/js/components/collapsible-side/collapsible-side.component.min.js.map +1 -1
  131. package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
  132. package/assets/js/components/fileupload/fileupload.component.min.js.map +1 -1
  133. package/assets/js/components/filter-card/filter-card.component.js +71 -0
  134. package/assets/js/components/filter-card/filter-card.component.min.js +27 -0
  135. package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -0
  136. package/assets/js/components/filterlist/filterlist.component.min.js +2 -2
  137. package/assets/js/components/header/header.component.min.js +3 -3
  138. package/assets/js/components/header/header.component.min.js.map +1 -1
  139. package/assets/js/components/inline-edit/inline-edit.component.min.js +2 -2
  140. package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -1
  141. package/assets/js/components/marketing/marketing.component.min.js +2 -2
  142. package/assets/js/components/marketing/marketing.component.min.js.map +1 -1
  143. package/assets/js/components/multi-step/multi-step.component.js +162 -0
  144. package/assets/js/components/multiselect/multiselect.component.min.js +2 -2
  145. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  146. package/assets/js/components/nav/nav.component.min.js +2 -2
  147. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  148. package/assets/js/components/notification/notification.component.min.js +2 -2
  149. package/assets/js/components/notification/notification.component.min.js.map +1 -1
  150. package/assets/js/components/pagination/pagination.component.min.js +2 -2
  151. package/assets/js/components/pagination/pagination.component.min.js.map +1 -1
  152. package/assets/js/components/record-card/record-card.component.js +69 -0
  153. package/assets/js/components/record-card/record-card.component.min.js +27 -0
  154. package/assets/js/components/record-card/record-card.component.min.js.map +1 -0
  155. package/assets/js/components/search/search.component.min.js +2 -2
  156. package/assets/js/components/slider/slider.component.min.js +2 -2
  157. package/assets/js/components/slider/slider.component.min.js.map +1 -1
  158. package/assets/js/components/table/table.component.js +1 -1
  159. package/assets/js/components/table/table.component.min.js +4 -4
  160. package/assets/js/components/table/table.component.min.js.map +1 -1
  161. package/assets/js/components/tabs/tabs.component.min.js +3 -3
  162. package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
  163. package/assets/js/components/video-card/video-card.component.js +176 -0
  164. package/assets/js/components/video-card/video-card.component.min.js +30 -0
  165. package/assets/js/components/video-card/video-card.component.min.js.map +1 -0
  166. package/assets/js/components.bundle.js +5 -0
  167. package/assets/js/components.bundle.js.map +1 -0
  168. package/assets/js/components.js +30 -0
  169. package/assets/js/modules/card.module.js +33 -0
  170. package/assets/js/modules/carousel.js +110 -8
  171. package/assets/js/modules/chart.js +2 -2
  172. package/assets/js/modules/dialogs.js +5 -129
  173. package/assets/js/modules/table.js +1 -1
  174. package/assets/js/scripts.bundle.js +4 -195
  175. package/assets/js/scripts.bundle.js.map +1 -1
  176. package/assets/js/scripts.bundle.min.js +3 -3
  177. package/assets/js/scripts.bundle.min.js.map +1 -1
  178. package/assets/js/scripts.js +17 -0
  179. package/assets/js/tests/filterlist.spec.js +1 -1
  180. package/assets/sass/_components.scss +76 -12
  181. package/assets/sass/_corefiles.scss +19 -10
  182. package/assets/sass/_elements.scss +2 -0
  183. package/assets/sass/_func.scss +3 -0
  184. package/assets/sass/_functions/functions.scss +304 -1
  185. package/assets/sass/_functions/mixins.scss +458 -2
  186. package/assets/sass/_functions/utilities.scss +647 -2
  187. package/assets/sass/_functions/variables.scss +1724 -2
  188. package/assets/sass/_utilities.scss +126 -7
  189. package/assets/sass/components/card.component.scss +229 -0
  190. package/assets/sass/components/card.module.scss +154 -0
  191. package/assets/sass/components/carousel.component.scss +605 -0
  192. package/assets/sass/components/carousel.config.scss +84 -0
  193. package/assets/sass/components/charts.config.scss +3 -0
  194. package/assets/sass/components/charts.module.scss +5 -3
  195. package/assets/sass/components/filter-card.component.scss +106 -0
  196. package/assets/sass/components/header.scss +1 -0
  197. package/assets/sass/components/multi-step.component.scss +148 -0
  198. package/assets/sass/components/multiselect.preload.scss +7 -0
  199. package/assets/sass/components/nav.preload.scss +5 -0
  200. package/assets/sass/components/record-card.component.scss +204 -0
  201. package/assets/sass/components/tabs.scss +1 -1
  202. package/assets/sass/components/video-card.component.scss +80 -0
  203. package/assets/sass/components.reset.scss +5 -43
  204. package/assets/sass/elements/admin-panel.scss +2 -1
  205. package/assets/sass/elements/badge-tag.scss +5 -1
  206. package/assets/sass/elements/buttons.scss +36 -0
  207. package/assets/sass/elements/container.scss +16 -6
  208. package/assets/sass/elements/details.scss +2 -0
  209. package/assets/sass/elements/dialog.scss +2 -744
  210. package/assets/sass/elements/forms.scss +241 -24
  211. package/assets/sass/elements/links.scss +27 -4
  212. package/assets/sass/elements/lists.scss +46 -0
  213. package/assets/sass/elements/media.scss +10 -38
  214. package/assets/sass/elements/modal.scss +453 -0
  215. package/assets/sass/elements/popover.scss +207 -0
  216. package/assets/sass/elements/table.element.scss +35 -0
  217. package/assets/sass/elements/type.scss +38 -2
  218. package/assets/sass/error.scss +32 -1
  219. package/assets/sass/foundations/bs_grid.scss +33 -0
  220. package/assets/sass/foundations/grid.scss +270 -0
  221. package/assets/sass/foundations/reboot.scss +71 -49
  222. package/assets/sass/foundations/root.scss +16 -3
  223. package/assets/ts/components/barchart/barchart.component.ts +2 -0
  224. package/assets/ts/components/card/card.component.ts +94 -192
  225. package/assets/ts/components/carousel/carousel.component.ts +51 -44
  226. package/assets/ts/components/filter-card/filter-card.component.ts +81 -0
  227. package/assets/ts/components/multi-step/multi-step.component.ts +262 -0
  228. package/assets/ts/components/record-card/record-card.component.ts +82 -0
  229. package/assets/ts/components/table/table.component.ts +2 -1
  230. package/assets/ts/components/video-card/video-card.component.ts +227 -0
  231. package/assets/ts/components.ts +38 -0
  232. package/assets/ts/modules/card.module.ts +43 -0
  233. package/assets/ts/modules/carousel.ts +161 -7
  234. package/assets/ts/modules/dialogs.ts +6 -182
  235. package/assets/ts/modules/table.ts +1 -1
  236. package/assets/ts/scripts.ts +22 -0
  237. package/assets/ts/tests/filterlist.spec.ts +1 -1
  238. package/dist/components.es.js +227 -243
  239. package/dist/components.umd.js +105 -104
  240. package/dist/style.css +1 -1
  241. package/package.json +9 -7
  242. package/src/components/BarChart/BarChart.vue +2 -2
  243. package/src/components/Carousel/Carousel.vue +1 -15
  244. package/src/components/FilterCard/FilterCard.vue +25 -0
  245. package/src/components/MultiStep/MultiStep.vue +25 -0
  246. package/src/components/RecordCard/RecordCard.vue +25 -0
  247. package/src/components/VideoCard/VideoCard.vue +25 -0
  248. package/assets/css/components/card.css +0 -1
  249. package/assets/css/components/card.css.map +0 -1
  250. package/assets/css/components/card.global.css +0 -1
  251. package/assets/css/components/card.global.css.map +0 -1
  252. package/assets/css/components/card.preload.css +0 -1
  253. package/assets/css/components/card.preload.css.map +0 -1
  254. package/assets/css/components/carousel.css +0 -1
  255. package/assets/css/components/carousel.css.map +0 -1
  256. package/assets/css/components/carousel.preload.css +0 -1
  257. package/assets/css/components/carousel.preload.css.map +0 -1
  258. package/assets/js/bundle.js +0 -74
  259. package/assets/js/dynamic.js +0 -80
  260. package/assets/js/dynamic.min.js +0 -18
  261. package/assets/js/dynamic.min.js.map +0 -1
  262. package/assets/js/flat-components.js +0 -84
  263. package/assets/js/modules/youtubevideo.js +0 -106
  264. package/assets/sass/components/card.global.scss +0 -102
  265. package/assets/sass/components/card.preload.scss +0 -8
  266. package/assets/sass/components/card.scss +0 -606
  267. package/assets/sass/components/carousel.preload.scss +0 -82
  268. package/assets/sass/components/carousel.scss +0 -258
  269. package/assets/ts/bundle.ts +0 -94
  270. package/assets/ts/components/barchart/README.md +0 -37
  271. package/assets/ts/components/card/README.md +0 -39
  272. package/assets/ts/dynamic.ts +0 -107
  273. package/assets/ts/flat-components.ts +0 -106
  274. package/assets/ts/modules/youtubevideo.ts +0 -141
  275. package/assets/ts/tests/dialogs.spec.js +0 -50
  276. package/src/foundations/YoutubeVideo/README.md +0 -11
  277. package/src/foundations/YoutubeVideo/YoutubeVideo.vue +0 -24
@@ -1,12 +1,8 @@
1
1
  // @ts-nocheck
2
+ import {trackComponent, trackComponentRegistered} from "../_global";
3
+ import {cardHTML,setupCard} from "../../modules/card.module";
2
4
 
3
- // Data layer Web component created
4
- window.dataLayer = window.dataLayer || [];
5
- window.dataLayer.push({
6
- "event": "customElementRegistered",
7
- "element": "Card"
8
- });
9
-
5
+ trackComponentRegistered("iam-card");
10
6
 
11
7
  class iamCard extends HTMLElement {
12
8
 
@@ -14,218 +10,136 @@ class iamCard extends HTMLElement {
14
10
  super();
15
11
  this.attachShadow({ mode: 'open'});
16
12
 
17
- if(this.querySelector('*:not(.badge):not(small):not(.btn):not(button) > [class*="fa-"]:not(.btn)'))
18
- this.classList.add('card--has-icon');
19
-
20
- let classList = this.classList.toString();
13
+ const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';
14
+ const loadCSS = `@import "${assetLocation}/css/components/card.component.css";`;
21
15
 
22
- const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets'
23
- const coreCSS = document.body.hasAttribute('data-core-css') ? document.body.getAttribute('data-core-css') : `${assetLocation}/css/core.min.css`;
24
- const loadCSS = `@import "${assetLocation}/css/components/card.css";`;
25
- const loadExtraCSS = `@import "${assetLocation}/css/components/card.global.css";`;
26
-
27
16
  const template = document.createElement('template');
28
17
  template.innerHTML = `
29
18
  <style>
30
- @import "${coreCSS}";
31
- ${loadCSS}
32
19
  ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
20
+
21
+ ${loadCSS}
33
22
  </style>
34
- <link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous">
35
- <div class="card ${classList}" tabindex="0" part="card">
36
- ${this.createCardConent()}
37
- </div>
23
+ ${cardHTML}
24
+ <slot name="primary-action"></slot>
38
25
  `;
39
- this.shadowRoot.appendChild(template.content.cloneNode(true));
40
-
41
- // insert extra CSS
42
- if(!document.getElementById('cardGlobal'))
43
- document.head.insertAdjacentHTML('beforeend',`<style id="cardGlobal">${loadExtraCSS}</style>`);
44
- }
45
26
 
46
- const createCardConent () {
47
-
48
- // TODO split this out a bit
49
- return `${this.hasAttribute('data-image') || this.hasAttribute('data-record') ? `<div class="card__head" part="head">${this.hasAttribute('data-image') ? `<img src="${this.getAttribute('data-image')}" alt="" loading="lazy" />` : ``} <div class="card__badges"><slot name="badges"></slot></div></div>` : ''}
50
- <div class="card__body" part="body">
51
- ${!this.hasAttribute('data-image') && this.querySelector('[slot="badges"]') && this.querySelector('[slot="checkbox"]') ? `<div class="card__badges card__badges--inline"><slot name="badges"></slot></div>` : ''}
52
- ${!this.hasAttribute('data-image') && !this.hasAttribute('data-record') && this.querySelector('[slot="badges"]') ? `<div class="card__badges"><slot name="badges"></slot></div>` : ''}
53
- ${this.hasAttribute('data-illustration') ? `<div class="card__illustration"><img src="${this.getAttribute('data-illustration')}" alt="" loading="lazy" /></div>` : ''}
54
- <slot></slot>
55
- ${this.hasAttribute('data-total') ? `<div class="card__total">${this.getAttribute('data-total')}</div>` : ''}
56
- </div>
57
- ${this.hasAttribute('data-add-link') ? `<button class="btn btn-compact btn-secondary fa-plus">Add property</button>` : ''}
58
- <slot name="checkbox"></slot>
59
- <slot name="primary-action"></slot>
60
- <div class="dialog__wrapper d-none">
61
- <button class="btn btn-secondary btn-compact fa-ellipsis-vertical" popovertarget="actions" title="${this.hasAttribute('data-menu-title') ? this.getAttribute('data-menu-title') : 'Further actions'}">Lorum ipsum</button>
62
- <dialog class="dialog--fix dialog--list" id="actions" popover>
63
- <slot name="actions"></slot>
64
- </dialog>
65
- </div>
66
- <div class="card__footer" part="footer">
67
- <slot name="footer"></slot>
68
- <slot name="btns"></slot>
69
- ${this.hasAttribute('data-cta') ? `<span class="link d-inline-block pt-0 mb-0">${this.getAttribute('data-cta')}</span>` : ''}
70
- </div>`;
27
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
71
28
  }
72
29
 
73
- connectedCallback() {
74
- this.classList.add('loaded');
75
-
76
- // Mimic clicking the parent node so the focus and target events can be on the card
77
- const component = this;
78
- const parentNode = component.parentNode.closest('a, button, label, router-link');
79
- const card = this.shadowRoot.querySelector('.card')
80
- const btnCompact = this.shadowRoot.querySelector('.btn-compact');
81
- const recordType = this.hasAttribute('data-record') ? this.getAttribute('data-record') : '';
82
-
83
-
84
- // Add the actions slot to the buttons and links to move them into a dialog warpper
85
- const actionsWrapper = this.shadowRoot.querySelector('.dialog__wrapper');
86
- let buttons = component.querySelectorAll('button[slot="actions"],a[slot="actions"]');
87
- if(buttons.length){
88
-
89
- const actionsWrapper = this.shadowRoot.querySelector('.dialog__wrapper');
90
- const actionsDialog = this.shadowRoot.querySelector('.dialog__wrapper dialog');
91
- const actionsBtn = actionsWrapper.querySelector('button');
30
+
31
+ async connectedCallback() {
92
32
 
93
- actionsWrapper.classList.remove('d-none');
33
+ const cardComponent = this;
34
+ const cardHead = cardComponent.shadowRoot.querySelector('.card__head');
35
+ const cardBody = cardComponent.shadowRoot.querySelector('.card__body');
36
+ const cardMenu = cardComponent.shadowRoot.querySelector('.dialog__wrapper');
37
+ const btn = cardComponent.shadowRoot.querySelector('.dialog__wrapper button');
94
38
 
95
- Array.from(buttons).forEach((button,index)=>{
39
+ setupCard(cardComponent);
96
40
 
97
- button.classList.add('btn');
98
- button.classList.add('btn-action');
99
- });
100
- }
101
- else {
102
- actionsWrapper.remove();
41
+ // Add Illustration HTML
42
+ if(cardComponent.hasAttribute('data-illustration')){
43
+ cardBody.insertAdjacentHTML('afterbegin',`<div class="card__illustration"><img src="${this.getAttribute('data-illustration')}" alt="" loading="lazy" /></div>`)
103
44
  }
104
45
 
105
- /*
106
- If the parentNode is actually just a div,
107
- we don't want to look for anything or add events
108
- */
109
- if (!parentNode) {
110
- return false;
46
+ // Add class that shows the right arrow icon
47
+ if(!cardComponent.querySelector('[slot="btns"]') && !cardComponent.querySelector('[slot="secondary"]')){
48
+ cardComponent.classList.add('show-icon');
111
49
  }
112
50
 
113
- if(parentNode)
114
- parentNode.setAttribute('tabindex','-1');
115
-
51
+ // Secondary buttons and actions
116
52
 
117
- if(parentNode.matches('label[for]')){
53
+ // Add the dialog wrapper HTML
54
+ if(cardComponent.querySelector('[slot="btns"]')){
118
55
 
119
- let isChecked = document.getElementById(parentNode.getAttribute('for')).checked;
120
-
121
- if(isChecked)
122
- card.classList.add('checked');
123
- else
124
- card.classList.remove('checked');
56
+ cardComponent.shadowRoot.innerHTML += `<div class="dialog__wrapper">
57
+ <button class="btn btn-secondary btn-compact fa-ellipsis-vertical" popovertarget="actions" title="Further actions" type="button">Open further actions</button>
58
+ <div class="dialog--fix dialog--list" id="actions" popover>
59
+ <slot name="btns"></slot>
60
+ </div>
61
+ </div>`;
125
62
  }
63
+
64
+ // Make sure slotted buttons and links have correct button classes
65
+ Array.from(cardComponent.querySelectorAll('[slot="btns"]')).forEach((button,index)=>{
126
66
 
127
- // Click event down
128
- this.addEventListener('click', (event) => {
129
-
130
- let clickEvent = new Event('click');
131
- card.dispatchEvent(clickEvent);
67
+ button.classList.add('btn');
68
+ button.classList.add('btn-action');
132
69
  });
133
70
 
134
- card.addEventListener('click', (event) => {
71
+ // Hide the default hover and focus states when interacting with the checkbox, dialog wrapper or secondary button
72
+ if(cardComponent.querySelector('[slot="checkbox"],[slot="secondary"]')){
135
73
 
136
- if(parentNode.matches('label[for]')){
74
+ const element = cardComponent.querySelector('[slot="checkbox"],[slot="secondary"]');
137
75
 
138
- event.stopPropagation();
139
- event.preventDefault();
76
+ element.addEventListener('mouseenter', (event) => {
77
+ cardComponent.classList.add('prevent-hover');
78
+ });
140
79
 
141
- const input = document.getElementById(parentNode.getAttribute('for'))
80
+ element.addEventListener('mouseleave', (event) => {
81
+ cardComponent.classList.remove('prevent-hover');
82
+ });
83
+ }
142
84
 
143
- const inputName = input.getAttribute('name');
144
- const inputID = input.getAttribute('id');
85
+ if(cardComponent.shadowRoot.querySelector('.dialog__wrapper')){
145
86
 
146
- // Mimic radio button functionality
147
- const inputs = Array.from(document.querySelectorAll(`[name="${inputName}"][type="radio"]:not([id="${inputID}"])`));
148
- inputs.forEach((input, index) => {
149
-
150
- const otherCard = document.querySelector(`[for="${input.getAttribute('id')}"] iam-card`);
151
-
152
- otherCard.dispatchEvent(new Event('inactive'));
153
- });
87
+ const element = cardComponent.shadowRoot.querySelector('.dialog__wrapper');
154
88
 
155
- parentNode.click();
156
- let isChecked = input.checked
157
-
158
- if(isChecked)
159
- card.classList.add('checked');
160
- else
161
- card.classList.remove('checked');
89
+ element.addEventListener('mouseenter', (event) => {
90
+ cardComponent.classList.add('prevent-hover');
91
+ });
162
92
 
163
- }
164
- });
93
+ element.addEventListener('mouseleave', (event) => {
94
+ cardComponent.classList.remove('prevent-hover');
95
+ });
96
+ }
165
97
 
166
- this.addEventListener('inactive', (event) => {
167
- card.classList.remove('checked');
168
- });
98
+ // Dispatch events of selecting checkboxes
99
+ const checkbox = cardComponent.querySelector('input[type="checkbox"]');
100
+ if(checkbox){
101
+ checkbox.addEventListener('change', (event) => {
169
102
 
170
- card.addEventListener('keydown', (event) => {
171
103
 
172
- switch(event.keyCode)
173
- {
174
- case 32:
175
- case 13:
176
- if(parentNode.matches('label[for]')){
104
+ if(checkbox.checked){
105
+ const customEvent = new CustomEvent("select-card", { detail: { 'Card value': checkbox.value, 'input name': checkbox.getAttribute('name') } });
106
+ cardComponent.dispatchEvent(customEvent);
107
+ }
108
+ else {
109
+
110
+ const customEvent = new CustomEvent("unselect-card", { detail: { 'Card value': checkbox.value, 'input name': checkbox.getAttribute('name') } });
111
+ cardComponent.dispatchEvent(customEvent);
112
+ }
113
+ });
114
+ }
177
115
 
178
- event.stopPropagation();
179
- event.preventDefault();
180
-
181
- const input = document.getElementById(parentNode.getAttribute('for'))
182
-
183
- const inputName = input.getAttribute('name');
184
- const inputID = input.getAttribute('id');
185
-
186
- const inputs = Array.from(document.querySelectorAll(`[name="${inputName}"]:not([id="${inputID}"])`));
187
-
188
- inputs.forEach((input, index) => {
189
-
190
- const otherCard = document.querySelector(`[for="${input.getAttribute('id')}"] iam-card`);
191
-
192
- otherCard.dispatchEvent(new Event('inactive'));
193
- });
194
-
195
- parentNode.click();
196
- let isChecked = input.checked
197
-
198
- if(isChecked)
199
- card.classList.add('checked');
200
- else
201
- card.classList.remove('checked');
202
-
203
- }
204
- else {
205
- parentNode.click();
206
- }
207
- break;
208
- default:
209
- break;
210
- }
211
- });
116
+ // Dispatch events of click onto secondary buttons
117
+ const secondaryBtn = cardComponent.querySelector('[slot="secondary"]');
118
+ if(secondaryBtn){
119
+ secondaryBtn.addEventListener('click', (event) => {
212
120
 
213
- if(btnCompact){
121
+ const customEvent = new CustomEvent("secondary-button-clicked", { detail: { 'Title': secondaryBtn.getAttribute('title') } });
122
+ cardComponent.dispatchEvent(customEvent);
123
+ });
124
+ }
214
125
 
215
- let addLocation = this.getAttribute('data-add-link');
126
+ // Dispatch events of click onto action buttons
127
+ const actionBtns = cardComponent.querySelectorAll('[slot="btns"]');
128
+ Array.from(actionBtns).forEach((button,index)=>{
216
129
 
217
- btnCompact.addEventListener('click', (event) => {
130
+ button.addEventListener('click', (event) => {
218
131
 
219
- event.stopPropagation();
220
- event.preventDefault();
221
- window.location = addLocation;
132
+ const customEvent = new CustomEvent("action-button-clicked", { detail: { 'Title': button.getAttribute('title') } });
133
+ cardComponent.dispatchEvent(customEvent);
222
134
  });
223
- }
135
+ });
224
136
 
137
+
138
+ trackComponent(cardComponent,"iam-card",['select-card','unselect-card','secondary-button-clicked','action-button-clicked']);
225
139
  }
226
140
 
227
141
  static get observedAttributes() {
228
- return ["data-total","class","data-image"];
142
+ return ["data-image"];
229
143
  }
230
144
 
231
145
  attributeChangedCallback(attrName, oldVal, newVal) {
@@ -235,26 +149,14 @@ class iamCard extends HTMLElement {
235
149
  this.shadowRoot.querySelector('.card__total').innerHTML = newVal;
236
150
  break;
237
151
  }
238
- case "class": {
239
-
240
- if(oldVal != newVal){
241
- let classList = this.classList.toString();
242
-
243
- if(this.querySelector('*:not(.badge):not(small):not(.btn):not(button) > [class*="fa-"]:not(.btn)'))
244
- classList += ' card--has-icon';
245
-
246
- this.shadowRoot.querySelector('.card').setAttribute('class',`card ${classList}`);
247
-
248
- this.shadowRoot.querySelector('.card').innerHTML = this.createCardConent();
249
- }
250
-
251
- break;
252
- }
253
152
  case "data-image": {
254
153
 
255
154
  if(oldVal != newVal){
256
155
 
257
- this.shadowRoot.querySelector('.card').innerHTML = this.createCardConent();
156
+ const cardHeadImg = this.shadowRoot.querySelector('.card__head img');
157
+
158
+ if(cardHeadImg)
159
+ cardHeadImg.setAttribute('src',newVal);
258
160
  }
259
161
  break;
260
162
  }
@@ -1,12 +1,8 @@
1
1
  // @ts-nocheck
2
- import carousel from "../../modules/carousel";
2
+ import {generateThumbnailList,generatePipsHTML,carousel} from "../../modules/carousel";
3
+ import {trackComponent, trackComponentRegistered} from "../_global";
3
4
 
4
- // Data layer Web component created
5
- window.dataLayer = window.dataLayer || [];
6
- window.dataLayer.push({
7
- "event": "customElementRegistered",
8
- "element": "carousel"
9
- });
5
+ trackComponentRegistered("iam-carousel");
10
6
 
11
7
  class iamCarousel extends HTMLElement {
12
8
 
@@ -15,31 +11,37 @@ class iamCarousel extends HTMLElement {
15
11
  this.attachShadow({ mode: 'open'});
16
12
 
17
13
  const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';
18
- const coreCSS = document.body.hasAttribute('data-core-css') ? document.body.getAttribute('data-core-css') : `${assetLocation}/css/core.min.css`;
19
- const loadCSS = `@import "${assetLocation}/css/components/carousel.css";`;
14
+
15
+ const loadCSS = `@import "${assetLocation}/css/components/carousel.component.css";`;
20
16
 
21
17
  const template = document.createElement('template');
22
18
  template.innerHTML = `
23
19
  <style>
24
- @import "${coreCSS}";
25
20
  ${loadCSS}
26
21
  ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
27
22
  </style>
28
- <div class="carousel" :id="'carousel'+id">
23
+ <div class="carousel" part="carousel">
29
24
  <div class="carousel__wrapper">
30
25
  <div class="carousel__inner">
31
-
32
- <slot></slot>
26
+ <div class="carousel__content" part="content">
27
+ <slot></slot>
28
+ </div>
33
29
  </div>
34
30
 
31
+ </div>
32
+ <div class="carousel__btns" part="btns">
33
+ <button class="btn btn-secondary btn-compact fa-plus-large btn-prev" data-go="0" disabled part="prev">Prev</button>
34
+ <button class="btn btn-secondary btn-compact fa-plus-large btn-next" data-go="2" part="next">Next</button>
35
+ </div>
36
+
35
37
  <div class="carousel__controls" part="controls">
36
38
 
37
39
  </div>
38
40
 
39
- <button class="btn btn-prev" data-go="0" disabled part="prev">Prev</button>
40
- <button class="btn btn-next" data-go="2" part="next">Next</button>
41
+ <div class="carousel__progress" part="progress">
42
+ <input type="range" min="0" max="100" value="1" step="1">
43
+ </div>
41
44
 
42
- </div>
43
45
  </div>
44
46
  `;
45
47
  this.shadowRoot.appendChild(template.content.cloneNode(true));
@@ -47,44 +49,49 @@ class iamCarousel extends HTMLElement {
47
49
 
48
50
  connectedCallback() {
49
51
 
52
+ const carouselComponent = this;
50
53
  const carouselElement = this.shadowRoot.querySelector('.carousel');
51
- const row = this.querySelector('.row');
52
- const thumbnailImages = JSON.parse(this.dataset.thumbnails);
53
-
54
- const carouselControls = this.shadowRoot.querySelector('.carousel__controls');
54
+ const row = this.shadowRoot.querySelector('.row');
55
55
 
56
- let itemCount = this.querySelectorAll(':scope > .row > .col').length
56
+ let thumbnailImages = [];
57
57
 
58
- carouselElement.setAttribute('data-row-class',row.className);
58
+ const carouselControls = this.shadowRoot.querySelector('.carousel__controls');
59
59
 
60
- if(this.classList.contains('hide-btns'))
61
- carouselElement.classList.add('hide-btns');
62
60
 
63
- if(this.classList.contains('hide-controls'))
64
- carouselElement.classList.add('hide-controls');
65
61
 
66
- if (thumbnailImages?.length) {
67
- carouselControls.classList.add('thumbnails');
62
+ if(carouselComponent.querySelector('[data-thumbnail]')){
63
+ thumbnailImages = generateThumbnailList(carouselComponent);
64
+ carouselComponent.classList.add('thumbnails');
68
65
  }
69
66
 
70
67
  // populate the pips
71
- let pips = "";
72
- for (let i = 1; i <= itemCount; i++) {
73
- let pipContent = null;
74
- let pipClass = '';
75
-
76
- if (thumbnailImages.length) {
77
- pipClass = 'has-thumbnail';
78
- pipContent = `<img src="${thumbnailImages[i - 1].src}" alt="Slide ${i}" height="148"/>`;
79
- } else {
80
- pipContent = `Slide ${i}`;
81
- }
82
-
83
- pips += `<button class="control-${i} ${pipClass}" data-slide="${i}" ${i == 1 ? "aria-current":""}>${pipContent}</button>`;
84
- }
85
- carouselControls.innerHTML = pips;
68
+ carouselControls.innerHTML = generatePipsHTML(carouselComponent,thumbnailImages);
69
+
70
+
71
+ Array.from(carouselComponent.querySelectorAll(':scope > div > img:first-child:last-child, :scope > div > picture:first-child:last-child img')).forEach((image, index) => {
72
+
73
+ image.style.inset = "0 0.5rem 0 0.5rem";
74
+ image.style.position = "absolute";
75
+ image.style.width = "calc(100% - 1rem)";
76
+ image.style.height = "100%";
77
+ image.style['object-fit'] = "cover";
78
+
79
+ image.closest('div').classList.add('image__wrapper');
80
+ });
81
+
82
+
83
+ carousel(carouselComponent);
84
+
85
+ trackComponent(carouselComponent,"iam-carousel",['pip-clicked','next-clicked','prev-clicked','slider-changed']);
86
+ }
87
+
88
+ attributeChangedCallback(attrName, oldVal, newVal) {
89
+
90
+
91
+
92
+
93
+
86
94
 
87
- carousel(carouselElement,row);
88
95
  }
89
96
  }
90
97
 
@@ -0,0 +1,81 @@
1
+ // @ts-nocheck
2
+ import {trackComponent, trackComponentRegistered} from "../_global";
3
+ import {cardHTML,setupCard} from "../../modules/card.module";
4
+
5
+ trackComponentRegistered("iam-filter-card");
6
+
7
+ class iamFilerCard extends HTMLElement {
8
+
9
+ constructor(){
10
+ super();
11
+ this.attachShadow({ mode: 'open'});
12
+
13
+ const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';
14
+ const loadCSS = `@import "${assetLocation}/css/components/filter-card.component.css";`;
15
+
16
+ const template = document.createElement('template');
17
+ template.innerHTML = `
18
+ <style>
19
+ ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
20
+
21
+ ${loadCSS}
22
+ </style>
23
+ ${cardHTML}
24
+ `;
25
+
26
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
27
+ }
28
+
29
+ async connectedCallback() {
30
+
31
+ const cardComponent = this;
32
+ const cardHead = cardComponent.shadowRoot.querySelector('.card__head');
33
+
34
+ setupCard(cardComponent);
35
+
36
+ // Dispatch events of selecting checkboxes
37
+ const checkbox = cardComponent.parentElement.querySelector('input[type="checkbox"]');
38
+ if(checkbox){
39
+ checkbox.addEventListener('change', (event) => {
40
+
41
+ if(checkbox.checked){
42
+ const customEvent = new CustomEvent("select-card", { detail: { 'Card value': checkbox.value, 'input name': checkbox.getAttribute('name') } });
43
+ cardComponent.dispatchEvent(customEvent);
44
+ cardComponent.classList.add('active');
45
+ }
46
+ else {
47
+
48
+ const customEvent = new CustomEvent("unselect-card", { detail: { 'Card value': checkbox.value, 'input name': checkbox.getAttribute('name') } });
49
+ cardComponent.dispatchEvent(customEvent);
50
+ cardComponent.classList.remove('active');
51
+ }
52
+ });
53
+ }
54
+
55
+ if(cardComponent.parentElement.matches('button')){
56
+
57
+ const button = cardComponent.parentElement;
58
+
59
+ button.addEventListener('click', (event) => {
60
+
61
+ if(!cardComponent.classList.contains('active')){
62
+ const customEvent = new CustomEvent("select-card", { detail: { 'button name': button.getAttribute('name') } });
63
+ cardComponent.dispatchEvent(customEvent);
64
+ cardComponent.classList.add('active');
65
+ }
66
+ else {
67
+
68
+ const customEvent = new CustomEvent("unselect-card", { detail: { 'button name': button.getAttribute('name') } });
69
+ cardComponent.dispatchEvent(customEvent);
70
+ cardComponent.classList.remove('active');
71
+ }
72
+ });
73
+ }
74
+
75
+
76
+ trackComponent(cardComponent,"iam-filter-card",['select-card','unselect-card']);
77
+ }
78
+
79
+ }
80
+
81
+ export default iamFilerCard;