@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,94 @@
1
1
  // @ts-nocheck
2
- function carousel(carouselElement, row) {
2
+
3
+ export const generateThumbnailList = function(carouselComponent){
4
+
5
+ let thumbnailImages = [];
6
+
7
+ Array.from(carouselComponent.querySelectorAll(':scope > div')).forEach((slide, index) => {
8
+
9
+ if(slide.hasAttribute('data-thumbnail')){
10
+
11
+ thumbnailImages[index] = slide.getAttribute('data-thumbnail');
12
+ }
13
+ });
14
+
15
+ return thumbnailImages;
16
+ }
17
+
18
+
19
+ export const generatePipsHTML = function(carouselComponent,thumbnailImages){
20
+
21
+ let itemCount = carouselComponent.querySelectorAll(':scope > div').length;
22
+
23
+ let pips = "";
24
+ for (let i = 1; i <= itemCount; i++) {
25
+ let pipContent = null;
26
+ let pipClass = '';
27
+
28
+ if (thumbnailImages.length && thumbnailImages[i - 1]) {
29
+ pipClass = 'has-thumbnail';
30
+ pipContent = `<img src="${thumbnailImages[i - 1]}" alt="Slide ${i}" height="148"/>`;
31
+ } else {
32
+ pipContent = `Slide ${i}`;
33
+ }
34
+
35
+ pips += `<button class="control-${i} ${pipClass}" data-slide="${i}" ${i == 1 ? "aria-current":""}>${pipContent}</button>`;
36
+ }
37
+
38
+ return pips;
39
+ }
40
+
41
+
42
+ const getProgressMax = function(itemCount,visibleItems){
43
+
44
+ if(visibleItems == 1){
45
+ return itemCount;
46
+ }
47
+
48
+ let max = (Math.ceil(itemCount / visibleItems) * visibleItems) - visibleItems;
49
+
50
+ return max + 1;
51
+ }
52
+
53
+ const getProgressPercent = function(value,max){
54
+
55
+ return (((value-1)/(max-1)) * 100);
56
+ }
57
+
58
+ export const carousel = function (carouselComponent) {
3
59
 
4
60
  var scrollTimeout;
5
61
 
62
+ const carouselElement = carouselComponent.shadowRoot.querySelector('.carousel');
63
+
6
64
  let carouselInner = carouselElement.querySelector('.carousel__inner');
7
65
  let carouselControls = carouselElement.querySelector('.carousel__controls');
8
- let itemCount = row.querySelectorAll(':scope > .col').length;
66
+ let carouselProgress = carouselElement.querySelector('.carousel__progress [type="range"]');
67
+ let itemCount = carouselComponent.querySelectorAll(':scope > div').length;
68
+ let scrollArea = carouselInner.clientWidth;
69
+ let itemWidth = carouselComponent.querySelector(':scope > div').scrollWidth;
70
+ let visibleItems = Math.round(scrollArea / itemWidth);
71
+
72
+ carouselProgress.setAttribute('min',1);
73
+ carouselProgress.setAttribute('step',visibleItems);
74
+
75
+ let progressMax = getProgressMax(itemCount,visibleItems);
76
+
77
+ carouselProgress.setAttribute('max',progressMax);
78
+ carouselProgress.value = 1;
79
+
80
+ let percent = getProgressPercent(1,progressMax);
9
81
 
82
+ carouselProgress.style.setProperty('--percent', percent + "%");
83
+
84
+ let stepperInterval, stepperEvent = "mouseup", stepperStart = "mousedown";
85
+
86
+ if("ontouchstart" in document.documentElement) {
87
+ stepperEvent = "touchend";
88
+ stepperStart = "touchstart";
89
+ }
90
+
91
+
10
92
  // On scroll we need to make sure the buttons get corrected and the next testimonial is shown
11
93
  carouselInner.addEventListener('scroll', function(e){
12
94
  clearTimeout(scrollTimeout);
@@ -17,8 +99,8 @@ function carousel(carouselElement, row) {
17
99
  let scrollLeft = carouselInner.scrollLeft;
18
100
  let targetSlide = Math.round((scrollLeft / scrollWidth) * itemCount) + 1;
19
101
 
20
- let itemWidth = row.querySelector(':scope > .col').scrollWidth;
21
- let lastItemOffset = row.querySelector(':scope > .col:last-child').offsetLeft;
102
+ let itemWidth = carouselComponent.querySelector(':scope > div').scrollWidth;
103
+ let lastItemOffset = carouselComponent.querySelector(':scope > div:last-child').offsetLeft;
22
104
  //+60px here is to account for when the next offscreen slide is visible beneath the next arrow
23
105
  let lastItemInView = carouselInner.scrollLeft + scrollArea + carouselInner.getBoundingClientRect().left >= (lastItemOffset + 60);
24
106
 
@@ -27,6 +109,9 @@ function carousel(carouselElement, row) {
27
109
  //Check if theres room for more slides than we have
28
110
  let leftOverSpace = (Math.ceil(itemCount / visibleItems) * visibleItems) - itemCount;
29
111
 
112
+ carouselProgress.setAttribute('step',visibleItems);
113
+
114
+
30
115
  if(leftOverSpace > 0 && lastItemInView){
31
116
  targetSlide = (Math.floor(itemCount / visibleItems) * visibleItems) + 1;
32
117
  }
@@ -49,6 +134,16 @@ function carousel(carouselElement, row) {
49
134
  else
50
135
  carouselElement.querySelector('.btn-next').removeAttribute('disabled');
51
136
 
137
+ carouselProgress.value = targetSlide;
138
+
139
+
140
+ progressMax = getProgressMax(itemCount,visibleItems);
141
+
142
+ carouselProgress.setAttribute('max',progressMax);
143
+ percent = (targetSlide/progressMax) * 100;
144
+ percent = getProgressPercent(targetSlide,progressMax);
145
+ carouselProgress.style.setProperty('--percent', percent + "%");
146
+
52
147
  }, 100);
53
148
 
54
149
  }, false);
@@ -65,8 +160,15 @@ function carousel(carouselElement, row) {
65
160
  button.removeAttribute('aria-current');
66
161
  });
67
162
  target.setAttribute('aria-current', true);
163
+
164
+ const customEvent = new CustomEvent("pip-clicked", { detail: {
165
+ 'slide': target.getAttribute('data-slide')
166
+ }
167
+ });
168
+
169
+ carouselComponent.dispatchEvent(customEvent);
68
170
 
69
- const el = row.querySelector(`:scope > *:nth-child(${target.getAttribute('data-slide')})`);
171
+ const el = carouselComponent.querySelector(`:scope > *:nth-child(${target.getAttribute('data-slide')})`);
70
172
 
71
173
  carouselInner.scroll({
72
174
  top: 0,
@@ -83,11 +185,11 @@ function carousel(carouselElement, row) {
83
185
 
84
186
  let scrollArea = carouselInner.clientWidth;
85
187
  let scrollWidth = carouselInner.scrollWidth;
86
- let itemWidth = row.querySelector(':scope > .col').scrollWidth;
188
+ let itemWidth = carouselComponent.querySelector(':scope > div').scrollWidth;
87
189
 
88
190
  let visibleItems = Math.round(scrollArea / itemWidth);
89
191
 
90
- let lastItemOffset = row.querySelector(':scope > .col:last-child').offsetLeft;
192
+ let lastItemOffset = carouselComponent.querySelector(':scope > div:last-child').offsetLeft;
91
193
  let lastItemInView = carouselInner.scrollLeft + scrollArea + carouselInner.getBoundingClientRect().left >= (lastItemOffset + 60);
92
194
 
93
195
  //Check if theres room for more slides than we have
@@ -104,6 +206,15 @@ function carousel(carouselElement, row) {
104
206
 
105
207
  for (var target = e.target; target && target != this; target = target.parentNode) {
106
208
  if (typeof target.matches == "function" && target.matches('.btn-next, .btn-prev')) {
209
+
210
+ let direction = target.matches('.btn-next') ? 'next' : 'prev';
211
+
212
+ const customEvent = new CustomEvent(`${direction}-clicked`, { detail: {
213
+ 'slide': target.getAttribute('data-go')
214
+ }
215
+ });
216
+
217
+ carouselComponent.dispatchEvent(customEvent);
107
218
 
108
219
  e.preventDefault();
109
220
  let scrollTo = target.classList.contains('btn-prev') ? carouselInner.scrollLeft - movement : carouselInner.scrollLeft + carouselInner.clientWidth;
@@ -117,6 +228,49 @@ function carousel(carouselElement, row) {
117
228
  }
118
229
  }
119
230
  }, false);
231
+
232
+
233
+ carouselProgress.addEventListener(stepperStart,function(event){
234
+
235
+ clearInterval(stepperInterval);
236
+ stepperInterval = setInterval(function() {
237
+ scrollArea = carouselInner.clientWidth;
238
+ itemWidth = carouselComponent.querySelector(':scope > div').scrollWidth;
239
+ visibleItems = Math.round(scrollArea / itemWidth);
240
+ carouselProgress.setAttribute('step',visibleItems);
241
+ progressMax = getProgressMax(itemCount,visibleItems);
242
+ carouselProgress.setAttribute('max',progressMax);
243
+ percent = getProgressPercent(carouselProgress.value,progressMax);
244
+
245
+ carouselProgress.style.setProperty('--percent', percent + "%");
246
+ }, 10);
247
+ });
248
+
249
+ carouselProgress.addEventListener(stepperEvent,function(event){
250
+ clearInterval(stepperInterval);
251
+ });
252
+
253
+ carouselProgress.addEventListener('change', function(e){
254
+
255
+ clearInterval(stepperInterval);
256
+ let target = carouselComponent.querySelector(`:scope > *:nth-child(${carouselProgress.value})`);
257
+
258
+ carouselInner.scroll({
259
+ top: 0,
260
+ left: target ? target.offsetLeft - carouselInner.getBoundingClientRect().left : 0,
261
+ behavior: 'smooth'
262
+ });
263
+
264
+ let direction = target.matches('.btn-next') ? 'next' : 'prev';
265
+
266
+ const customEvent = new CustomEvent(`slider-changed`, { detail: {
267
+ 'slide': carouselProgress.value
268
+ }
269
+ });
270
+
271
+ carouselComponent.dispatchEvent(customEvent);
272
+
273
+ }, false);
120
274
  }
121
275
 
122
276
  export default carousel
@@ -1,6 +1,4 @@
1
1
  // @ts-nocheck
2
- import { createEmbed } from "./youtubevideo";
3
-
4
2
  const extendDialogs = (body) => {
5
3
 
6
4
  Array.from(body.querySelectorAll('dialog[open]')).forEach((dialog, index) => {
@@ -36,8 +34,11 @@ const extendDialogs = (body) => {
36
34
  dialog.showModal();
37
35
  dialog.focus();
38
36
 
39
- let firstWidth = dialog.offsetWidth;
40
- dialog.setAttribute('style',`max-width: ${firstWidth}px;`);
37
+ if(!dialog.querySelector('iam-multi-step')){
38
+
39
+ let firstWidth = dialog.offsetWidth;
40
+ dialog.setAttribute('style',`max-width: ${firstWidth}px;`);
41
+ }
41
42
 
42
43
  // When the modal is opened we want to make sure any duplicate checkboxes are matching the originals
43
44
  Array.from(dialog.querySelectorAll('[data-duplicate]')).forEach((element,index) => {
@@ -231,19 +232,8 @@ const extendDialogs = (body) => {
231
232
 
232
233
  export const createDialog = (dialog) => {
233
234
 
234
- // Create the video embed
235
- let videoButton = dialog.querySelector('.youtube-embed a');
236
- if (videoButton){
237
- createEmbed(videoButton)
238
- }
239
-
240
- // Multi dialog
241
- if(dialog.classList.contains('dialog--multi') && !dialog.querySelector(':scope > .steps')) {
242
- createMultiFormDialog(dialog);
243
- }
244
-
245
235
  // If you are using Vue eevents and bindings its recommended to add in the .mh-lg div manually to the dialog
246
- if(!dialog.querySelector(':scope .mh-lg') && !dialog.classList.contains('dialog--multi')){
236
+ if(!dialog.querySelector(':scope .mh-lg') && !dialog.querySelector('iam-multi-step')){
247
237
  dialog.innerHTML = `<div class="mh-lg">${dialog.innerHTML}</div>`;
248
238
 
249
239
  let dialogContent = dialog.querySelector('.mh-lg');
@@ -266,170 +256,4 @@ export const createDialog = (dialog) => {
266
256
 
267
257
  }
268
258
 
269
- export const createMultiFormDialog = (dialog) => {
270
-
271
- let buttons = "";
272
- let fieldsets = Array.from(dialog.querySelectorAll('fieldset[data-title]'));
273
- let form = dialog.querySelector('form');
274
-
275
- fieldsets.forEach((fieldset,index) => {
276
- buttons += `<button data-title="${fieldset.getAttribute('data-title')}" type="button" class="${index == 0 ? "active":""}" tabindex="-1">${fieldset.getAttribute('data-title')}</button>`;
277
-
278
- const btnWrapper = document.createElement("div");
279
- btnWrapper.classList.add('btn--wrapper');
280
- fieldset.appendChild(btnWrapper);
281
-
282
- if(index != 0)
283
- btnWrapper.innerHTML += `<button data-title="${fieldsets[index-1].getAttribute('data-title')}" class="btn btn-secondary mb-0" data-previous type="button">Previous</button>`;
284
-
285
- if(index != fieldsets.length - 1)
286
- btnWrapper.innerHTML += `<button data-title="${fieldsets[index+1].getAttribute('data-title')}" class="btn btn-primary mb-0" data-next type="button">Next</button>`;
287
-
288
- // Last fieldset
289
- if(index == fieldsets.length - 1){
290
- if(form && form.querySelector(':scope > button[type="submit"]')){
291
-
292
- let existingButton = form.querySelector(':scope > button[type="submit"]');
293
- existingButton.classList.add('mb-0')
294
-
295
- btnWrapper.insertAdjacentElement('beforeend',existingButton);
296
- }
297
- else
298
- btnWrapper.innerHTML += `<button data-title="${fieldsets[index].getAttribute('data-title')}" class="btn btn-primary mb-0" data-next type="submit">Submit</button>`;
299
- }
300
- });
301
-
302
- dialog.insertAdjacentHTML('afterbegin',`<div class="steps bg-primary">${buttons}</div>`);
303
-
304
-
305
- // Open the fieldset with an error inside
306
- let validatedFieldsets = Array.from(dialog.querySelectorAll('fieldset.was-validated'));
307
- for (let i = 0; i < validatedFieldsets.length; i++) {
308
-
309
- let fieldset = validatedFieldsets[i];
310
- let fieldsetID = fieldset.getAttribute('data-title');
311
-
312
- if(fieldset.querySelector('.is-invalid')){
313
-
314
- Array.from(dialog.querySelectorAll(`[data-title="${fieldsetID}"]`)).forEach((element, index) => {
315
-
316
- element.classList.add('active');
317
- });
318
-
319
- break;
320
- }
321
- else {
322
-
323
- Array.from(dialog.querySelectorAll(`[data-title="${fieldsetID}"]`)).forEach((element, index) => {
324
-
325
- element.classList.add('valid');
326
- });
327
- }
328
- }
329
-
330
- // Prevent the bubble messages
331
- dialog.addEventListener('invalid', (function () {
332
- return function (e) {
333
- e.preventDefault();
334
- };
335
- })(), true);
336
-
337
-
338
- function validateFieldset(button){
339
-
340
- const currentFieldset = dialog.querySelector(`fieldset.active`) ? dialog.querySelector(`fieldset.active`) : dialog.querySelector(`fieldset[data-title]`);
341
- const currentFieldsetID = currentFieldset.getAttribute('data-title');
342
- let isFieldsetValid = true;
343
-
344
- currentFieldset.classList.add('was-validated');
345
-
346
- Array.from(currentFieldset.querySelectorAll('input')).forEach((input, index) => {
347
-
348
- if (!input.checkValidity())
349
- isFieldsetValid = false;
350
- });
351
-
352
- // If valid mode to next field set
353
- if(!isFieldsetValid){
354
-
355
- Array.from(dialog.querySelectorAll(`[data-title="${currentFieldsetID}"]`)).forEach((element, index) => {
356
-
357
- element.classList.remove('valid');
358
- });
359
- }
360
- else {
361
-
362
- Array.from(dialog.querySelectorAll(`[data-title="${currentFieldsetID}"]`)).forEach((element, index) => {
363
-
364
- element.classList.add('valid');
365
- });
366
- }
367
-
368
- // Allow the previous button to navigate
369
- if(isFieldsetValid || !button.hasAttribute('data-next')){
370
-
371
- const fieldset = dialog.querySelector(`fieldset[data-title="${button.getAttribute('data-title')}"]`);
372
- const step = dialog.querySelector(`.steps button[data-title="${button.getAttribute('data-title')}"]`);
373
-
374
- Array.from(dialog.querySelectorAll('button')).forEach((button, index) => {
375
- button.classList.remove('active');
376
- });
377
- Array.from(dialog.querySelectorAll('fieldset')).forEach((button, index) => {
378
- button.classList.remove('active');
379
- });
380
-
381
- step.classList.add('active');
382
- fieldset.classList.add('active');
383
- }
384
-
385
-
386
- let fieldsetCount = Array.from(dialog.querySelectorAll(`fieldset`)).length;
387
- let validFieldsetCount = Array.from(dialog.querySelectorAll(`fieldset.valid`)).length;
388
-
389
- // update the progress bar
390
- dialog.style.setProperty('--progress', `${(validFieldsetCount/(fieldsetCount - 1) * 100)}%`);
391
- }
392
-
393
- // remove error messages from server
394
- dialog.addEventListener('keydown', (event) => {
395
- if (event && event.target instanceof HTMLElement && event.target.closest('button')){
396
-
397
- const button = event.target.closest('button');
398
-
399
- if(event.keyCode == 13 && button.getAttribute('type') != "submit"){
400
-
401
- event.preventDefault();
402
- validateFieldset(button);
403
- }
404
-
405
- }
406
-
407
- if (event && event.target instanceof HTMLElement && event.target.closest('input')){
408
- const input = event.target.closest('input');
409
-
410
- input.classList.remove('is-invalid');
411
-
412
- if(event.keyCode == 13){
413
-
414
- event.preventDefault();
415
- }
416
- }
417
- });
418
-
419
-
420
- dialog.addEventListener('click', (event) => {
421
- if (event && event.target instanceof HTMLElement && event.target.closest('button[type="submit"]')){
422
-
423
- const form = event.target.closest('form');
424
- form.classList.add('was-validated');
425
- }
426
- else if (event && event.target instanceof HTMLElement && event.target.closest('button[data-title]')){
427
-
428
- const button = event.target.closest('button[data-title]');
429
- validateFieldset(button);
430
- };
431
- return null
432
- });
433
- }
434
-
435
259
  export default extendDialogs;
@@ -758,7 +758,7 @@ export const filterTable = (table, form, wrapper) => {
758
758
  });
759
759
 
760
760
  // Work out what to display after pagination
761
- Array.from(table.querySelectorAll('tbody tr:not(.filtered')).forEach((row, index) => {
761
+ Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row, index) => {
762
762
 
763
763
  matched++;
764
764
 
@@ -0,0 +1,22 @@
1
+ // @ts-nocheck
2
+ // Modules
3
+ import * as helpers from '../js/modules/helpers'
4
+ import extendDialogs from '../js/modules/dialogs'
5
+ import createDataLayer from '../js/modules/data-layer'
6
+ import extendInputs from '../js/modules/inputs';
7
+ import createDynamicEvents from '../js/modules/dynamicEvents'
8
+
9
+ // Attach classes to dom elements
10
+ document.addEventListener("DOMContentLoaded", function() {
11
+
12
+ createDataLayer();
13
+ createDynamicEvents();
14
+
15
+ // Global stuff
16
+ helpers.addBodyClasses(document.body);
17
+ helpers.addGlobalEvents(document.body);
18
+
19
+ extendDialogs(document.body);
20
+ extendInputs(document.body);
21
+
22
+ });
@@ -24,6 +24,6 @@ describe('addDataAttributes', () => {
24
24
  test('should add a class of d-none to each item except the one containing Lucas Myers', () => {
25
25
 
26
26
  expect(list.querySelectorAll('li:not(.d-none)').length).toEqual(1);
27
- expect(list.querySelector('li:not(.d-none').textContent).toEqual('Lucas Myers');
27
+ expect(list.querySelector('li:not(.d-none)').textContent).toEqual('Lucas Myers');
28
28
  });
29
29
  });