@iamproperty/components 5.0.0 → 5.1.0-beta10

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 (208) hide show
  1. package/assets/css/components/accordion.css +1 -1
  2. package/assets/css/components/accordion.css.map +1 -1
  3. package/assets/css/components/accordion.global.css +1 -0
  4. package/assets/css/components/accordion.global.css.map +1 -0
  5. package/assets/css/components/actionbar.css +1 -1
  6. package/assets/css/components/actionbar.css.map +1 -1
  7. package/assets/css/components/actionbar.global.css +1 -0
  8. package/assets/css/components/actionbar.global.css.map +1 -0
  9. package/assets/css/components/card.css +1 -1
  10. package/assets/css/components/card.css.map +1 -1
  11. package/assets/css/components/card.global.css +1 -0
  12. package/assets/css/components/card.global.css.map +1 -0
  13. package/assets/css/components/carousel.css +1 -1
  14. package/assets/css/components/carousel.css.map +1 -1
  15. package/assets/css/components/component.native.css +1 -0
  16. package/assets/css/components/component.native.css.map +1 -0
  17. package/assets/css/components/component.reset.css +1 -1
  18. package/assets/css/components/component.reset.css.map +1 -1
  19. package/assets/css/components/fileupload.css +1 -1
  20. package/assets/css/components/fileupload.css.map +1 -1
  21. package/assets/css/components/header.css +1 -1
  22. package/assets/css/components/header.css.map +1 -1
  23. package/assets/css/components/marketing.css +1 -0
  24. package/assets/css/components/marketing.css.map +1 -0
  25. package/assets/css/components/nav.css +1 -1
  26. package/assets/css/components/nav.css.map +1 -1
  27. package/assets/css/components/nav.global.css +1 -0
  28. package/assets/css/components/nav.global.css.map +1 -0
  29. package/assets/css/components/notification.global.css +1 -0
  30. package/assets/css/components/notification.global.css.map +1 -0
  31. package/assets/css/components/pagination.css +1 -1
  32. package/assets/css/components/pagination.css.map +1 -1
  33. package/assets/css/components/slider.css +1 -0
  34. package/assets/css/components/slider.css.map +1 -0
  35. package/assets/css/components/table.css +1 -1
  36. package/assets/css/components/table.css.map +1 -1
  37. package/assets/css/components/{table.extras.css → table.global.css} +1 -1
  38. package/assets/css/components/{table.extras.css.map → table.global.css.map} +1 -1
  39. package/assets/css/components/tabs.css +1 -1
  40. package/assets/css/components/tabs.css.map +1 -1
  41. package/assets/css/core.min.css +1 -1
  42. package/assets/css/core.min.css.map +1 -1
  43. package/assets/css/style.min.css +1 -1
  44. package/assets/css/style.min.css.map +1 -1
  45. package/assets/img/illustrations/add-new-property.png +0 -0
  46. package/assets/img/illustrations/auctioneer.png +0 -0
  47. package/assets/img/illustrations/branch.png +0 -0
  48. package/assets/img/illustrations/company-level.png +0 -0
  49. package/assets/img/illustrations/contractors.png +0 -0
  50. package/assets/img/illustrations/find-existing-property.png +0 -0
  51. package/assets/img/illustrations/green/add-new-property.png +0 -0
  52. package/assets/img/illustrations/green/auctioneer.png +0 -0
  53. package/assets/img/illustrations/green/branch.png +0 -0
  54. package/assets/img/illustrations/green/buyer.png +0 -0
  55. package/assets/img/illustrations/green/company-level.png +0 -0
  56. package/assets/img/illustrations/green/contractors.png +0 -0
  57. package/assets/img/illustrations/green/estate-agents.png +0 -0
  58. package/assets/img/illustrations/green/find-existing-property.png +0 -0
  59. package/assets/img/illustrations/green/landlords.png +0 -0
  60. package/assets/img/illustrations/green/seller.png +0 -0
  61. package/assets/img/illustrations/green/whats-new-2.png +0 -0
  62. package/assets/img/illustrations/green/whats-new.png +0 -0
  63. package/assets/img/illustrations/information-works.png +0 -0
  64. package/assets/img/illustrations/landlords.png +0 -0
  65. package/assets/img/illustrations/whats-new-2.png +0 -0
  66. package/assets/img/illustrations/whats-new.png +0 -0
  67. package/assets/img/signin-bg.png +0 -0
  68. package/assets/js/components/accordion/accordion.component.js +4 -0
  69. package/assets/js/components/accordion/accordion.component.min.js +6 -5
  70. package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
  71. package/assets/js/components/actionbar/actionbar.component.js +4 -0
  72. package/assets/js/components/actionbar/actionbar.component.min.js +5 -4
  73. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  74. package/assets/js/components/address-lookup/address-lookup.component.js +18 -4
  75. package/assets/js/components/address-lookup/address-lookup.component.min.js +5 -5
  76. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  77. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  78. package/assets/js/components/card/card.component.js +6 -1
  79. package/assets/js/components/card/card.component.min.js +6 -4
  80. package/assets/js/components/card/card.component.min.js.map +1 -1
  81. package/assets/js/components/carousel/carousel.component.js +61 -0
  82. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  83. package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
  84. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  85. package/assets/js/components/header/header.component.js +6 -12
  86. package/assets/js/components/header/header.component.min.js +8 -14
  87. package/assets/js/components/header/header.component.min.js.map +1 -1
  88. package/assets/js/components/marketing/marketing.component.js +37 -0
  89. package/assets/js/components/nav/nav.component.js +8 -36
  90. package/assets/js/components/nav/nav.component.min.js +10 -12
  91. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  92. package/assets/js/components/notification/notification.component.js +4 -0
  93. package/assets/js/components/notification/notification.component.min.js +4 -3
  94. package/assets/js/components/notification/notification.component.min.js.map +1 -1
  95. package/assets/js/components/pagination/pagination.component.min.js +2 -2
  96. package/assets/js/components/search/search.component.js +148 -0
  97. package/assets/js/components/search/search.component.min.js +14 -0
  98. package/assets/js/components/search/search.component.min.js.map +1 -0
  99. package/assets/js/components/slider/slider.component.js +143 -0
  100. package/assets/js/components/table/table.component.js +1 -1
  101. package/assets/js/components/table/table.component.min.js +6 -6
  102. package/assets/js/components/table/table.component.min.js.map +1 -1
  103. package/assets/js/components/tabs/tabs.component.js +2 -0
  104. package/assets/js/components/tabs/tabs.component.min.js +5 -3
  105. package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
  106. package/assets/js/dynamic.js +1 -1
  107. package/assets/js/dynamic.min.js +5 -5
  108. package/assets/js/dynamic.min.js.map +1 -1
  109. package/assets/js/modules/carousel.js +15 -23
  110. package/assets/js/modules/dynamicEvents.js +28 -13
  111. package/assets/js/modules/helpers.js +4 -1
  112. package/assets/js/modules/inputs.js +44 -3
  113. package/assets/js/modules/table.js +8 -6
  114. package/assets/js/modules/tabs.js +29 -31
  115. package/assets/js/scripts.bundle.js +31 -35
  116. package/assets/js/scripts.bundle.js.map +1 -1
  117. package/assets/js/scripts.bundle.min.js +2 -2
  118. package/assets/js/scripts.bundle.min.js.map +1 -1
  119. package/assets/js/tests/slider.spec.js +20 -0
  120. package/assets/sass/_components.scss +0 -6
  121. package/assets/sass/_corefiles.scss +9 -88
  122. package/assets/sass/_elements.scss +1 -2
  123. package/assets/sass/_functions/mixins.scss +16 -0
  124. package/assets/sass/_functions/utilities.scss +0 -17
  125. package/assets/sass/_functions/variables.scss +1 -0
  126. package/assets/sass/components/accordion.global.scss +135 -0
  127. package/assets/sass/components/accordion.scss +6 -192
  128. package/assets/sass/components/{actionbar-global.scss → actionbar.global.scss} +3 -1
  129. package/assets/sass/components/actionbar.scss +2 -2
  130. package/assets/sass/components/{card-global.scss → card.global.scss} +2 -23
  131. package/assets/sass/components/card.scss +44 -3
  132. package/assets/sass/components/carousel.scss +86 -159
  133. package/assets/sass/components/component.native.scss +120 -0
  134. package/assets/sass/components/component.reset.scss +1 -3
  135. package/assets/sass/components/fileupload.scss +1 -1
  136. package/assets/sass/components/header.scss +55 -52
  137. package/assets/sass/components/marketing.scss +64 -0
  138. package/assets/sass/components/{nav-global.scss → nav.global.scss} +2 -1
  139. package/assets/sass/components/nav.scss +7 -1
  140. package/assets/sass/components/notification.global.scss +41 -0
  141. package/assets/sass/components/pagination.scss +4 -0
  142. package/assets/sass/components/slider.scss +121 -0
  143. package/assets/sass/components/{table.extras.scss → table.global.scss} +5 -1
  144. package/assets/sass/components/table.scss +1 -1
  145. package/assets/sass/components/tabs.scss +2 -5
  146. package/assets/sass/core.scss +1 -2
  147. package/assets/sass/elements/admin-panel.scss +9 -7
  148. package/assets/sass/elements/badge.scss +29 -0
  149. package/assets/sass/elements/container.scss +17 -0
  150. package/assets/sass/elements/dialog.scss +4 -4
  151. package/assets/sass/elements/forms.scss +142 -14
  152. package/assets/sass/elements/links.scss +2 -1
  153. package/assets/sass/elements/table.element.scss +1 -2
  154. package/assets/sass/error.scss +1 -1
  155. package/assets/sass/foundations/reboot.scss +59 -12
  156. package/assets/sass/foundations/root.scss +11 -3
  157. package/assets/sass/helpers/max-height.scss +78 -4
  158. package/assets/sass/main.scss +0 -1
  159. package/assets/sass/templates/auth.scss +112 -0
  160. package/assets/sass/templates/form.scss +1 -0
  161. package/assets/ts/components/accordion/accordion.component.ts +5 -0
  162. package/assets/ts/components/actionbar/actionbar.component.ts +5 -0
  163. package/assets/ts/components/address-lookup/address-lookup.component.ts +24 -5
  164. package/assets/ts/components/card/card.component.ts +7 -1
  165. package/assets/ts/components/carousel/README.md +39 -0
  166. package/assets/ts/components/carousel/carousel.component.ts +75 -0
  167. package/assets/ts/components/header/header.component.ts +6 -12
  168. package/assets/ts/components/marketing/marketing.component.ts +49 -0
  169. package/assets/ts/components/nav/README.md +2 -13
  170. package/assets/ts/components/nav/nav.component.ts +9 -47
  171. package/assets/ts/components/notification/notification.component.ts +4 -0
  172. package/assets/ts/components/search/search.component.ts +177 -0
  173. package/assets/ts/components/slider/README.md +26 -0
  174. package/assets/ts/components/slider/slider.component.ts +189 -0
  175. package/assets/ts/components/table/table.component.ts +1 -1
  176. package/assets/ts/components/tabs/tabs.component.ts +2 -0
  177. package/assets/ts/dynamic.ts +1 -1
  178. package/assets/ts/modules/carousel.ts +21 -33
  179. package/assets/ts/modules/dynamicEvents.ts +44 -24
  180. package/assets/ts/modules/helpers.ts +8 -2
  181. package/assets/ts/modules/inputs.ts +61 -4
  182. package/assets/ts/modules/table.ts +11 -14
  183. package/assets/ts/modules/tabs.ts +38 -41
  184. package/assets/ts/tests/slider.spec.ts +33 -0
  185. package/dist/components.es.js +893 -1542
  186. package/dist/components.umd.js +328 -161
  187. package/dist/style.css +1 -1
  188. package/package.json +5 -4
  189. package/src/components/Accordion/Accordion.vue +12 -5
  190. package/src/components/Actionbar/Actionbar.vue +12 -5
  191. package/src/components/Card/Card.vue +1 -1
  192. package/src/components/Carousel/Carousel.vue +18 -103
  193. package/src/components/Header/Header.vue +10 -6
  194. package/src/components/Marketing/Marketing.vue +39 -0
  195. package/src/components/Marketing/README.md +20 -0
  196. package/src/components/Nav/Nav.vue +1 -1
  197. package/src/components/Nav/README.md +1 -12
  198. package/src/components/Search/Search.vue +25 -0
  199. package/src/components/Slider/README.md +11 -0
  200. package/src/components/Slider/Slider.vue +25 -0
  201. package/src/components/Tabs/Tabs.vue +14 -5
  202. package/assets/css/components/actionbar-global.css +0 -1
  203. package/assets/css/components/actionbar-global.css.map +0 -1
  204. package/assets/css/components/card-global.css +0 -1
  205. package/assets/css/components/card-global.css.map +0 -1
  206. package/assets/css/components/nav-global.css +0 -1
  207. package/assets/css/components/nav-global.css.map +0 -1
  208. package/src/components/Carousel/Carousel.spec.js +0 -45
@@ -1,12 +1,9 @@
1
1
  // @ts-nocheck
2
- function carousel(carouselElement) {
2
+ function carousel(carouselElement, row) {
3
3
  var scrollTimeout;
4
4
  let carouselInner = carouselElement.querySelector('.carousel__inner');
5
- let itemCount = carouselElement.querySelectorAll('.carousel__item').length;
6
- let cols = carouselElement.getAttribute('data-cols');
7
- let smCols = carouselElement.getAttribute('data-sm-cols');
8
- let mdCols = carouselElement.getAttribute('data-md-cols');
9
- carouselElement.querySelector('.carousel__controls a').setAttribute('aria-current', true);
5
+ let carouselControls = carouselElement.querySelector('.carousel__controls');
6
+ let itemCount = row.querySelectorAll('.col').length;
10
7
  // On scroll we need to make sure the buttons get corrected and the next testimonial is shown
11
8
  carouselInner.addEventListener('scroll', function (e) {
12
9
  clearTimeout(scrollTimeout);
@@ -15,9 +12,11 @@ function carousel(carouselElement) {
15
12
  let scrollWidth = carouselInner.scrollWidth;
16
13
  let scrollLeft = carouselInner.scrollLeft;
17
14
  let targetSlide = Math.round((scrollLeft / scrollWidth) * itemCount) + 1;
18
- let lastItemOffset = carouselElement.querySelector('.carousel__item:last-child').offsetLeft;
19
- Array.from(carouselElement.querySelectorAll('.carousel__controls a')).forEach((link, index) => {
20
- link.removeAttribute('aria-current');
15
+ let lastItemOffset = row.querySelector('.col:last-child').offsetLeft + 50;
16
+ if (carouselInner.scrollLeft + scrollArea >= lastItemOffset)
17
+ targetSlide = itemCount;
18
+ Array.from(carouselElement.querySelectorAll('.carousel__controls button')).forEach((button, index) => {
19
+ button.removeAttribute('aria-current');
21
20
  });
22
21
  carouselElement.querySelector('.control-' + targetSlide).setAttribute('aria-current', true);
23
22
  // Disable the previous button
@@ -26,22 +25,22 @@ function carousel(carouselElement) {
26
25
  else
27
26
  carouselElement.querySelector('.btn-prev').removeAttribute('disabled');
28
27
  // Disable the next button if the last item is in view
29
- if (carouselInner.scrollLeft + scrollArea > lastItemOffset)
28
+ if (targetSlide == itemCount)
30
29
  carouselElement.querySelector('.btn-next').setAttribute('disabled', 'disabled');
31
30
  else
32
31
  carouselElement.querySelector('.btn-next').removeAttribute('disabled');
33
32
  }, 100);
34
33
  }, false);
35
34
  // when the buttons are used we need to make sure the carousel scrolls to the correct place
36
- carouselElement.addEventListener('click', function (e) {
35
+ carouselControls.addEventListener('click', function (e) {
37
36
  for (var target = e.target; target && target != this; target = target.parentNode) {
38
- if (target.matches('.carousel__controls a')) {
37
+ if (typeof target.matches == "function" && target.matches('button')) {
39
38
  e.preventDefault();
40
- Array.from(carouselElement.querySelectorAll('.carousel__controls a')).forEach((link, index) => {
41
- link.removeAttribute('aria-current');
39
+ Array.from(carouselControls.querySelectorAll('button')).forEach((button, index) => {
40
+ button.removeAttribute('aria-current');
42
41
  });
43
42
  target.setAttribute('aria-current', true);
44
- const el = document.querySelector(target.getAttribute('href'));
43
+ const el = row.querySelector(`*:nth-child(${target.getAttribute('data-slide')})`);
45
44
  carouselInner.scroll({
46
45
  top: 0,
47
46
  left: el.offsetLeft,
@@ -53,7 +52,7 @@ function carousel(carouselElement) {
53
52
  }, false);
54
53
  carouselElement.addEventListener('click', function (e) {
55
54
  for (var target = e.target; target && target != this; target = target.parentNode) {
56
- if (target.matches('.btn-next, .btn-prev')) {
55
+ if (typeof target.matches == "function" && target.matches('.btn-next, .btn-prev')) {
57
56
  e.preventDefault();
58
57
  let scrollTo = target.classList.contains('btn-prev') ? carouselInner.scrollLeft - carouselInner.clientWidth : carouselInner.scrollLeft + carouselInner.clientWidth;
59
58
  carouselInner.scroll({
@@ -65,12 +64,5 @@ function carousel(carouselElement) {
65
64
  }
66
65
  }
67
66
  }, false);
68
- // Add responsive hide button classes
69
- if (itemCount == 1)
70
- carouselElement.classList.add('hide-btns');
71
- if (smCols >= itemCount)
72
- carouselElement.classList.add('hide-sm-btns');
73
- if (mdCols >= itemCount)
74
- carouselElement.classList.add('hide-md-btns');
75
67
  }
76
68
  export default carousel;
@@ -59,19 +59,23 @@ const runEvent = (element, event, eventType) => {
59
59
  return false;
60
60
  switch (event[eventType]) {
61
61
  case "hide":
62
- let hideElement = document.querySelector(event['target']);
63
- hideElement.classList.add('js-hide');
64
- Array.from(hideElement.querySelectorAll('[data-required]')).forEach((input, index) => {
65
- input.removeAttribute('required');
66
- });
62
+ if (document.querySelector(event['target'])) {
63
+ let hideElement = document.querySelector(event['target']);
64
+ hideElement.classList.add('js-hide');
65
+ Array.from(hideElement.querySelectorAll('[data-required]')).forEach((input, index) => {
66
+ input.removeAttribute('required');
67
+ });
68
+ }
67
69
  break;
68
70
  case "show":
69
- let showElement = document.querySelector(event['target']);
70
- showElement.classList.remove('js-hide');
71
- Array.from(showElement.querySelectorAll('[data-required]')).forEach((input, index) => {
72
- if (!input.closest('.js-hide'))
73
- input.setAttribute('required', 'true');
74
- });
71
+ if (document.querySelector(event['target'])) {
72
+ let showElement = document.querySelector(event['target']);
73
+ showElement.classList.remove('js-hide');
74
+ Array.from(showElement.querySelectorAll('[data-required]')).forEach((input, index) => {
75
+ if (!input.closest('.js-hide'))
76
+ input.setAttribute('required', 'true');
77
+ });
78
+ }
75
79
  break;
76
80
  case "populate-form":
77
81
  populateForm(element, event);
@@ -81,16 +85,27 @@ const runEvent = (element, event, eventType) => {
81
85
  document.querySelector(`${event['target']}`).dispatchEvent(theEvent);
82
86
  break;
83
87
  case "setAttribute":
84
- document.querySelector(`${event['target']}`).setAttribute(event['attribute'], event['value']);
88
+ Array.from(document.querySelectorAll(`${event['target']}`)).forEach(function (element, index) {
89
+ element.setAttribute(event['attribute'], event['value']);
90
+ });
85
91
  break;
86
92
  case "removeAttribute":
87
- document.querySelector(`${event['target']}`).removeAttribute(event['attribute']);
93
+ Array.from(document.querySelectorAll(`${event['target']}`)).forEach(function (element, index) {
94
+ element.removeAttribute(event['attribute']);
95
+ });
88
96
  break;
89
97
  case "updateValue":
90
98
  document.querySelector(`${event['target']}`).value = event['value'] ? event['value'] : "";
91
99
  let changeEvent = new Event('change');
92
100
  document.querySelector(`${event['target']}`).dispatchEvent(changeEvent);
93
101
  break;
102
+ case "submitForm":
103
+ document.querySelector(`${event['target']}`).submit();
104
+ break;
105
+ case "openLink":
106
+ if (document.querySelector(`${event['target']}`).value)
107
+ window.location.href = document.querySelector(`${event['target']}`).value;
108
+ break;
94
109
  default:
95
110
  break;
96
111
  }
@@ -34,7 +34,7 @@ export const addGlobalEvents = (body) => {
34
34
  checkElements(location.hash);
35
35
  window.addEventListener('hashchange', function () { checkElements(location.hash); }, false);
36
36
  addEventListener("popstate", (event) => {
37
- if (event && event.state.type && event.state.type == "pagination") {
37
+ if (event && event.state && event.state.type && event.state.type == "pagination") {
38
38
  let form = document.querySelector(`#${event.state.form}`);
39
39
  let pageInput = document.querySelector(`#${event.state.form} [data-pagination]`);
40
40
  if (pageInput)
@@ -72,3 +72,6 @@ export const safeID = function (str) {
72
72
  str = str.replace(/\W/g, '');
73
73
  return str;
74
74
  };
75
+ // Used to get values from nested json objects
76
+ export const resolvePath = (object, path, defaultValue) => path.split(/[\.\[\]\'\"]/).filter(p => p).reduce((o, p) => o ? o[p] : defaultValue, object);
77
+ export const isTraversable = o => Array.isArray(o) || o !== null && ['function', 'object'].includes(typeof o);
@@ -1,12 +1,53 @@
1
1
  // @ts-nocheck
2
2
  const extendInputs = (body) => {
3
- document.addEventListener("load", function () {
3
+ function loadInput() {
4
4
  // maxlength counter init
5
- Array.from(document.querySelectorAll('input')).forEach((input, index) => {
5
+ Array.from(document.querySelectorAll('input[maxlength]')).forEach((input, index) => {
6
6
  let wrapper = input.parentElement;
7
7
  setMaxlengthVars(input, wrapper);
8
8
  });
9
- });
9
+ // Date restrictions
10
+ if (document.querySelector('input[type="date"]')) {
11
+ const today = new Date();
12
+ function formatDate(date) {
13
+ const year = date.getFullYear();
14
+ const month = String(date.getMonth() + 1).padStart(2, '0');
15
+ const day = String(date.getDate()).padStart(2, '0');
16
+ return `${year}-${month}-${day}`;
17
+ }
18
+ Array.from(document.querySelectorAll('input[type="date"]')).forEach((input, index) => {
19
+ let startDate = today;
20
+ if (input.hasAttribute('data-start')) {
21
+ startDate.setDate(startDate.getDate() + parseInt(input.getAttribute('data-start')));
22
+ input.setAttribute('min', formatDate(startDate));
23
+ }
24
+ if (input.hasAttribute('data-period')) {
25
+ let timePeriod = parseInt(input.getAttribute('data-period'));
26
+ let endDate = new Date();
27
+ endDate.setDate(startDate.getDate() + timePeriod);
28
+ input.setAttribute('max', formatDate(endDate));
29
+ }
30
+ if (input.hasAttribute('data-allowed-days')) {
31
+ let allowedDays = JSON.parse(`[${input.getAttribute('data-allowed-days')}]`);
32
+ input.addEventListener('input', function (e) {
33
+ var day = new Date(this.value).getUTCDay();
34
+ if (allowedDays.includes(day))
35
+ input.setCustomValidity("");
36
+ else
37
+ input.setCustomValidity("That day of the week is not allowed");
38
+ });
39
+ }
40
+ });
41
+ }
42
+ }
43
+ if (document.readyState === 'complete') {
44
+ loadInput();
45
+ }
46
+ document.onreadystatechange = () => {
47
+ if (document.readyState === "complete") {
48
+ loadInput();
49
+ }
50
+ };
10
51
  body.addEventListener('input', (event) => {
11
52
  if (event && event.target instanceof HTMLElement && event.target.closest('input,textarea,select')) {
12
53
  const input = event.target.closest('input,textarea,select');
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  // @ts-nocheck
11
- import { zeroPad, isNumeric, ucfirst } from "./helpers.js";
11
+ import { zeroPad, isNumeric, ucfirst, resolvePath } from "./helpers.js";
12
12
  // Basic functionality needed
13
13
  export const addDataAttributes = (table) => {
14
14
  const colHeadings = Array.from(table.querySelectorAll('thead th'));
@@ -51,12 +51,15 @@ export const getLargestLastColWidth = (table) => {
51
51
  return largestWidth;
52
52
  };
53
53
  export const createMobileButton = (table, wrapper) => {
54
- if (wrapper.classList.contains('.table--fullwidth') && !wrapper.hasAttribute('data-expandable'))
54
+ if (wrapper.classList.contains('table--fullwidth') && !wrapper.hasAttribute('data-expandable'))
55
55
  return false;
56
56
  if (table.querySelectorAll('thead tr th').length < 4 && !wrapper.hasAttribute('data-expandable'))
57
57
  return false;
58
+ //If the expand column already exists we don't need to add a new one.
58
59
  Array.from(table.querySelectorAll('thead tr')).forEach((row, index) => {
59
- row.insertAdjacentHTML('afterbegin', `<th class="th--fixed expand-button-heading"></th>`);
60
+ if (!table.querySelectorAll('thead tr th.expand-button-heading').length) {
61
+ row.insertAdjacentHTML('afterbegin', `<th class="th--fixed expand-button-heading"></th>`);
62
+ }
60
63
  });
61
64
  Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {
62
65
  const preExpanded = row.getAttribute('data-view') === 'full' ? 'aria-expanded' : '';
@@ -493,7 +496,7 @@ export const populateDataQueries = (table, form, wrapper) => {
493
496
  const dataQueries = Array.from(form.querySelectorAll('[data-query]'));
494
497
  dataQueries.forEach((queryElement, index) => {
495
498
  let query = queryElement.getAttribute('data-query');
496
- let numberOfMatchedRows;
499
+ let numberOfMatchedRows = 0;
497
500
  if (query == 'total') {
498
501
  if (wrapper.hasAttribute('data-total'))
499
502
  numberOfMatchedRows = wrapper.getAttribute('data-total');
@@ -648,10 +651,9 @@ const filterFilters = function (form) {
648
651
  };
649
652
  export const loadAjaxTable = function (table, form, pagination, wrapper) {
650
653
  return __awaiter(this, void 0, void 0, function* () {
651
- const resolvePath = (object, path, defaultValue) => path.split(/[\.\[\]\'\"]/).filter(p => p).reduce((o, p) => o ? o[p] : defaultValue, object);
652
654
  let formData = new FormData(form);
653
655
  let queryString = new URLSearchParams(formData).toString();
654
- let columns = table.querySelectorAll('thead tr th');
656
+ let columns = table.querySelectorAll('thead tr th:not(.expand-button-heading)');
655
657
  let tbody = table.querySelector('tbody');
656
658
  let ajaxURL = form.getAttribute('data-ajax');
657
659
  wrapper.classList.add('table--loading');
@@ -1,6 +1,7 @@
1
1
  // @ts-nocheck
2
2
  export const createTabsLinks = function (tabsElement) {
3
3
  const details = tabsElement.querySelectorAll(':scope > details');
4
+ const detailsORLinks = tabsElement.querySelectorAll(':scope > details, :scope > a');
4
5
  let summaries = tabsElement.querySelectorAll(':scope > details > summary');
5
6
  let tabLinks = tabsElement.querySelector(':scope > .tabs__links');
6
7
  if (tabsElement.shadowRoot && tabsElement.shadowRoot.querySelector('.tabs__links'))
@@ -14,34 +15,40 @@ export const createTabsLinks = function (tabsElement) {
14
15
  tabsElement.prepend(tabLinksWrapper);
15
16
  }
16
17
  // Create the tab buttons from the summary titles
17
- details.forEach((detail, index) => {
18
- let summary = detail.querySelector(':scope > summary');
19
- let isDisabled = summary.classList.contains('disabled');
20
- summary.classList.add('visually-hidden');
18
+ let tabindex = 0;
19
+ detailsORLinks.forEach((element, index) => {
21
20
  let button = document.createElement('button');
22
- if (detail.hasAttribute('id')) {
23
- button = document.createElement('a');
24
- button.setAttribute('href', `#${detail.getAttribute('id')}`);
21
+ if (element.matches('details')) {
22
+ let summary = element.querySelector(':scope > summary');
23
+ let isDisabled = summary.classList.contains('disabled');
24
+ summary.classList.add('visually-hidden');
25
+ if (element.hasAttribute('id'))
26
+ button.setAttribute('data-id', `${element.getAttribute('id')}`);
27
+ if (element.hasAttribute('open')) {
28
+ button.setAttribute('aria-pressed', true);
29
+ }
30
+ button.innerHTML = `${summary.innerText}`;
31
+ button.classList.add('link');
32
+ button.setAttribute('data-index', tabindex);
33
+ element.setAttribute('tabindex', '-1');
34
+ if (isDisabled) {
35
+ button.classList.add('disabled');
36
+ }
37
+ tabindex++;
25
38
  }
26
- if (detail.hasAttribute('open')) {
27
- button.setAttribute('aria-pressed', true);
39
+ else if (element.matches('a')) {
40
+ button = element;
28
41
  }
29
- button.innerHTML = `${summary.innerText}`;
30
42
  button.classList.add('link');
31
- button.setAttribute('data-index', index);
32
- button.setAttribute('tabindex', '-1');
33
- if (isDisabled) {
34
- button.classList.add('disabled');
35
- }
36
43
  tabLinks.appendChild(button);
37
44
  });
38
45
  };
39
46
  export const setTabsEventHandlers = function (tabsElement) {
40
47
  let details = tabsElement.querySelectorAll(':scope > details');
41
48
  let summaries = tabsElement.querySelectorAll(':scope > details > summary');
42
- let buttons = tabsElement.querySelectorAll(':scope .tabs__links > .link');
49
+ let buttons = tabsElement.querySelectorAll(':scope .tabs__links > button');
43
50
  if (tabsElement.shadowRoot)
44
- buttons = tabsElement.shadowRoot.querySelectorAll('.tabs__links > .link');
51
+ buttons = tabsElement.shadowRoot.querySelectorAll('.tabs__links > button');
45
52
  // Set the on click for the tab buttons, these will open the details box it matches too
46
53
  buttons.forEach((button) => {
47
54
  button.addEventListener("click", (e) => {
@@ -59,8 +66,6 @@ export const setTabsEventHandlers = function (tabsElement) {
59
66
  else
60
67
  detail.removeAttribute('open');
61
68
  });
62
- if (button.hasAttribute('href'))
63
- history.pushState(undefined, undefined, button.getAttribute('href'));
64
69
  // Data layer Open Event
65
70
  window.dataLayer = window.dataLayer || [];
66
71
  window.dataLayer.push({
@@ -71,13 +76,6 @@ export const setTabsEventHandlers = function (tabsElement) {
71
76
  });
72
77
  // Make sure we dont loose existing summary functionality
73
78
  summaries.forEach((summary, index) => {
74
- // Maintain the focus on the summary element but visually highlight the tab button
75
- summary.addEventListener("focus", (e) => {
76
- buttons.forEach((button) => {
77
- button.classList.remove('focus');
78
- });
79
- buttons[index].classList.add('focus');
80
- });
81
79
  summary.addEventListener("click", (e) => {
82
80
  e.preventDefault();
83
81
  buttons[index].click();
@@ -85,12 +83,12 @@ export const setTabsEventHandlers = function (tabsElement) {
85
83
  });
86
84
  };
87
85
  export const openFirstTab = function (tabsElement) {
86
+ if (!tabsElement.querySelector(':scope > details'))
87
+ return false;
88
88
  let details = tabsElement.querySelectorAll(':scope > details');
89
- let buttons = tabsElement.querySelectorAll(':scope > .tabs__links > button, .tabs__links > a');
90
- if (tabsElement.shadowRoot)
91
- buttons = tabsElement.shadowRoot.querySelectorAll('.tabs__links > button, .tabs__links > a');
92
- if (location.hash && tabsElement.querySelector(`.tabs__links [href="${location.hash}"]`)) {
93
- tabsElement.querySelector(`[href="${location.hash}"]`).setAttribute('open', true);
89
+ let buttons = tabsElement.shadowRoot.querySelectorAll('.tabs__links > button');
90
+ if (location.hash && tabsElement.shadowRoot.querySelector(`.tabs__links [data-id="${location.hash.replace('#', '')}"]`)) {
91
+ tabsElement.shadowRoot.querySelector(`[data-id="${location.hash.replace('#', '')}"]`).setAttribute('aria-pressed', true);
94
92
  tabsElement.querySelector(`details[id="${location.hash.replace('#', '')}"]`).setAttribute('open', true);
95
93
  }
96
94
  else if (!tabsElement.querySelector(`details[open]`)) {