@iamproperty/components 6.1.0--beta → 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 (129) hide show
  1. package/assets/css/components/actionbar.css.map +1 -1
  2. package/assets/css/components/actionbar.global.css.map +1 -1
  3. package/assets/css/components/card.component.css +1 -1
  4. package/assets/css/components/card.component.css.map +1 -1
  5. package/assets/css/components/carousel.component.css +1 -0
  6. package/assets/css/components/carousel.component.css.map +1 -0
  7. package/assets/css/components/carousel.config.css +1 -0
  8. package/assets/css/components/carousel.config.css.map +1 -0
  9. package/assets/css/components/collapsible-side.css.map +1 -1
  10. package/assets/css/components/fileupload.css.map +1 -1
  11. package/assets/css/components/header.css +1 -1
  12. package/assets/css/components/header.css.map +1 -1
  13. package/assets/css/components/marketing.css.map +1 -1
  14. package/assets/css/components/multi-step.component.css +1 -0
  15. package/assets/css/components/multi-step.component.css.map +1 -0
  16. package/assets/css/components/multiselect.preload.css.map +1 -1
  17. package/assets/css/components/nav.css.map +1 -1
  18. package/assets/css/components/nav.docs.css.map +1 -1
  19. package/assets/css/components/nav.global.css.map +1 -1
  20. package/assets/css/components/nav.old.css.map +1 -1
  21. package/assets/css/components/nav.preload.css +1 -1
  22. package/assets/css/components/nav.preload.css.map +1 -1
  23. package/assets/css/components/notification.css.map +1 -1
  24. package/assets/css/components/pagination.css.map +1 -1
  25. package/assets/css/components/property-searchbar.css.map +1 -1
  26. package/assets/css/components/slider.css.map +1 -1
  27. package/assets/css/components/snapshot.css.map +1 -1
  28. package/assets/css/components/stepper.css.map +1 -1
  29. package/assets/css/components/table.global.css.map +1 -1
  30. package/assets/css/components/tabs.css +1 -1
  31. package/assets/css/components/tabs.css.map +1 -1
  32. package/assets/css/components/testimonial.css.map +1 -1
  33. package/assets/css/components/timeline.css.map +1 -1
  34. package/assets/css/core.min.css +1 -1
  35. package/assets/css/core.min.css.map +1 -1
  36. package/assets/css/style.min.css +1 -1
  37. package/assets/css/style.min.css.map +1 -1
  38. package/assets/img/illustrations/not-found.png +0 -0
  39. package/assets/js/components/accordion/accordion.component.min.js +2 -2
  40. package/assets/js/components/actionbar/actionbar.component.min.js +6 -6
  41. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  42. package/assets/js/components/address-lookup/address-lookup.component.min.js +2 -2
  43. package/assets/js/components/applied-filters/applied-filters.component.min.js +2 -2
  44. package/assets/js/components/barchart/barchart.component.min.js +2 -2
  45. package/assets/js/components/card/card.component.min.js +3 -3
  46. package/assets/js/components/carousel/carousel.component.js +36 -41
  47. package/assets/js/components/carousel/carousel.component.min.js +18 -12
  48. package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
  49. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +2 -2
  50. package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
  51. package/assets/js/components/filter-card/filter-card.component.min.js +2 -2
  52. package/assets/js/components/filterlist/filterlist.component.min.js +2 -2
  53. package/assets/js/components/header/header.component.min.js +3 -3
  54. package/assets/js/components/inline-edit/inline-edit.component.min.js +2 -2
  55. package/assets/js/components/marketing/marketing.component.min.js +2 -2
  56. package/assets/js/components/multi-step/multi-step.component.js +162 -0
  57. package/assets/js/components/multiselect/multiselect.component.min.js +2 -2
  58. package/assets/js/components/nav/nav.component.min.js +2 -2
  59. package/assets/js/components/notification/notification.component.min.js +2 -2
  60. package/assets/js/components/pagination/pagination.component.min.js +2 -2
  61. package/assets/js/components/record-card/record-card.component.min.js +2 -2
  62. package/assets/js/components/search/search.component.min.js +2 -2
  63. package/assets/js/components/slider/slider.component.min.js +2 -2
  64. package/assets/js/components/table/table.component.js +1 -1
  65. package/assets/js/components/table/table.component.min.js +3 -3
  66. package/assets/js/components/table/table.component.min.js.map +1 -1
  67. package/assets/js/components/tabs/tabs.component.min.js +3 -3
  68. package/assets/js/components/video-card/video-card.component.min.js +2 -2
  69. package/assets/js/components.bundle.js +3 -3
  70. package/assets/js/components.bundle.js.map +1 -1
  71. package/assets/js/components.js +1 -1
  72. package/assets/js/modules/carousel.js +110 -8
  73. package/assets/js/modules/dialogs.js +5 -123
  74. package/assets/js/scripts.bundle.js +4 -4
  75. package/assets/js/scripts.bundle.js.map +1 -1
  76. package/assets/js/scripts.bundle.min.js +3 -3
  77. package/assets/js/scripts.bundle.min.js.map +1 -1
  78. package/assets/sass/_components.scss +3 -19
  79. package/assets/sass/_corefiles.scss +15 -0
  80. package/assets/sass/_func.scss +3 -0
  81. package/assets/sass/_functions/functions.scss +304 -1
  82. package/assets/sass/_functions/mixins.scss +458 -2
  83. package/assets/sass/_functions/utilities.scss +647 -2
  84. package/assets/sass/_functions/variables.scss +1724 -2
  85. package/assets/sass/_utilities.scss +126 -7
  86. package/assets/sass/components/carousel.component.scss +605 -0
  87. package/assets/sass/components/carousel.config.scss +84 -0
  88. package/assets/sass/components/header.scss +1 -0
  89. package/assets/sass/components/multi-step.component.scss +148 -0
  90. package/assets/sass/components/nav.preload.scss +5 -0
  91. package/assets/sass/components/tabs.scss +1 -1
  92. package/assets/sass/elements/admin-panel.scss +2 -1
  93. package/assets/sass/elements/buttons.scss +33 -0
  94. package/assets/sass/elements/container.scss +16 -6
  95. package/assets/sass/elements/details.scss +2 -0
  96. package/assets/sass/elements/forms.scss +236 -24
  97. package/assets/sass/elements/links.scss +27 -4
  98. package/assets/sass/elements/lists.scss +46 -0
  99. package/assets/sass/elements/media.scss +11 -1
  100. package/assets/sass/elements/modal.scss +138 -238
  101. package/assets/sass/elements/table.element.scss +35 -0
  102. package/assets/sass/elements/type.scss +38 -2
  103. package/assets/sass/error.scss +32 -1
  104. package/assets/sass/foundations/bs_grid.scss +33 -0
  105. package/assets/sass/foundations/grid.scss +270 -0
  106. package/assets/sass/foundations/reboot.scss +71 -49
  107. package/assets/sass/foundations/root.scss +16 -2
  108. package/assets/ts/components/carousel/carousel.component.ts +51 -44
  109. package/assets/ts/components/multi-step/multi-step.component.ts +262 -0
  110. package/assets/ts/components/table/table.component.ts +2 -1
  111. package/assets/ts/components.ts +1 -1
  112. package/assets/ts/modules/carousel.ts +161 -7
  113. package/assets/ts/modules/dialogs.ts +6 -174
  114. package/dist/components.es.js +177 -193
  115. package/dist/components.umd.js +73 -67
  116. package/dist/style.css +1 -1
  117. package/package.json +3 -2
  118. package/src/components/Carousel/Carousel.vue +1 -15
  119. package/src/components/FilterCard/FilterCard.vue +1 -1
  120. package/src/components/MultiStep/MultiStep.vue +25 -0
  121. package/src/components/RecordCard/RecordCard.vue +1 -1
  122. package/src/components/VideoCard/VideoCard.vue +1 -1
  123. package/assets/css/components/carousel.css +0 -1
  124. package/assets/css/components/carousel.css.map +0 -1
  125. package/assets/css/components/carousel.preload.css +0 -1
  126. package/assets/css/components/carousel.preload.css.map +0 -1
  127. package/assets/sass/components/carousel.preload.scss +0 -82
  128. package/assets/sass/components/carousel.scss +0 -258
  129. package/assets/ts/tests/dialogs.spec.js +0 -50
@@ -1,9 +1,62 @@
1
1
  // @ts-nocheck
2
- function carousel(carouselElement, row) {
2
+ export const generateThumbnailList = function (carouselComponent) {
3
+ let thumbnailImages = [];
4
+ Array.from(carouselComponent.querySelectorAll(':scope > div')).forEach((slide, index) => {
5
+ if (slide.hasAttribute('data-thumbnail')) {
6
+ thumbnailImages[index] = slide.getAttribute('data-thumbnail');
7
+ }
8
+ });
9
+ return thumbnailImages;
10
+ };
11
+ export const generatePipsHTML = function (carouselComponent, thumbnailImages) {
12
+ let itemCount = carouselComponent.querySelectorAll(':scope > div').length;
13
+ let pips = "";
14
+ for (let i = 1; i <= itemCount; i++) {
15
+ let pipContent = null;
16
+ let pipClass = '';
17
+ if (thumbnailImages.length && thumbnailImages[i - 1]) {
18
+ pipClass = 'has-thumbnail';
19
+ pipContent = `<img src="${thumbnailImages[i - 1]}" alt="Slide ${i}" height="148"/>`;
20
+ }
21
+ else {
22
+ pipContent = `Slide ${i}`;
23
+ }
24
+ pips += `<button class="control-${i} ${pipClass}" data-slide="${i}" ${i == 1 ? "aria-current" : ""}>${pipContent}</button>`;
25
+ }
26
+ return pips;
27
+ };
28
+ const getProgressMax = function (itemCount, visibleItems) {
29
+ if (visibleItems == 1) {
30
+ return itemCount;
31
+ }
32
+ let max = (Math.ceil(itemCount / visibleItems) * visibleItems) - visibleItems;
33
+ return max + 1;
34
+ };
35
+ const getProgressPercent = function (value, max) {
36
+ return (((value - 1) / (max - 1)) * 100);
37
+ };
38
+ export const carousel = function (carouselComponent) {
3
39
  var scrollTimeout;
40
+ const carouselElement = carouselComponent.shadowRoot.querySelector('.carousel');
4
41
  let carouselInner = carouselElement.querySelector('.carousel__inner');
5
42
  let carouselControls = carouselElement.querySelector('.carousel__controls');
6
- let itemCount = row.querySelectorAll(':scope > .col').length;
43
+ let carouselProgress = carouselElement.querySelector('.carousel__progress [type="range"]');
44
+ let itemCount = carouselComponent.querySelectorAll(':scope > div').length;
45
+ let scrollArea = carouselInner.clientWidth;
46
+ let itemWidth = carouselComponent.querySelector(':scope > div').scrollWidth;
47
+ let visibleItems = Math.round(scrollArea / itemWidth);
48
+ carouselProgress.setAttribute('min', 1);
49
+ carouselProgress.setAttribute('step', visibleItems);
50
+ let progressMax = getProgressMax(itemCount, visibleItems);
51
+ carouselProgress.setAttribute('max', progressMax);
52
+ carouselProgress.value = 1;
53
+ let percent = getProgressPercent(1, progressMax);
54
+ carouselProgress.style.setProperty('--percent', percent + "%");
55
+ let stepperInterval, stepperEvent = "mouseup", stepperStart = "mousedown";
56
+ if ("ontouchstart" in document.documentElement) {
57
+ stepperEvent = "touchend";
58
+ stepperStart = "touchstart";
59
+ }
7
60
  // On scroll we need to make sure the buttons get corrected and the next testimonial is shown
8
61
  carouselInner.addEventListener('scroll', function (e) {
9
62
  clearTimeout(scrollTimeout);
@@ -12,13 +65,14 @@ function carousel(carouselElement, row) {
12
65
  let scrollWidth = carouselInner.scrollWidth;
13
66
  let scrollLeft = carouselInner.scrollLeft;
14
67
  let targetSlide = Math.round((scrollLeft / scrollWidth) * itemCount) + 1;
15
- let itemWidth = row.querySelector(':scope > .col').scrollWidth;
16
- let lastItemOffset = row.querySelector(':scope > .col:last-child').offsetLeft;
68
+ let itemWidth = carouselComponent.querySelector(':scope > div').scrollWidth;
69
+ let lastItemOffset = carouselComponent.querySelector(':scope > div:last-child').offsetLeft;
17
70
  //+60px here is to account for when the next offscreen slide is visible beneath the next arrow
18
71
  let lastItemInView = carouselInner.scrollLeft + scrollArea + carouselInner.getBoundingClientRect().left >= (lastItemOffset + 60);
19
72
  let visibleItems = Math.round(scrollArea / itemWidth);
20
73
  //Check if theres room for more slides than we have
21
74
  let leftOverSpace = (Math.ceil(itemCount / visibleItems) * visibleItems) - itemCount;
75
+ carouselProgress.setAttribute('step', visibleItems);
22
76
  if (leftOverSpace > 0 && lastItemInView) {
23
77
  targetSlide = (Math.floor(itemCount / visibleItems) * visibleItems) + 1;
24
78
  }
@@ -36,6 +90,12 @@ function carousel(carouselElement, row) {
36
90
  carouselElement.querySelector('.btn-next').setAttribute('disabled', 'disabled');
37
91
  else
38
92
  carouselElement.querySelector('.btn-next').removeAttribute('disabled');
93
+ carouselProgress.value = targetSlide;
94
+ progressMax = getProgressMax(itemCount, visibleItems);
95
+ carouselProgress.setAttribute('max', progressMax);
96
+ percent = (targetSlide / progressMax) * 100;
97
+ percent = getProgressPercent(targetSlide, progressMax);
98
+ carouselProgress.style.setProperty('--percent', percent + "%");
39
99
  }, 100);
40
100
  }, false);
41
101
  // when the buttons are used we need to make sure the carousel scrolls to the correct place
@@ -47,7 +107,12 @@ function carousel(carouselElement, row) {
47
107
  button.removeAttribute('aria-current');
48
108
  });
49
109
  target.setAttribute('aria-current', true);
50
- const el = row.querySelector(`:scope > *:nth-child(${target.getAttribute('data-slide')})`);
110
+ const customEvent = new CustomEvent("pip-clicked", { detail: {
111
+ 'slide': target.getAttribute('data-slide')
112
+ }
113
+ });
114
+ carouselComponent.dispatchEvent(customEvent);
115
+ const el = carouselComponent.querySelector(`:scope > *:nth-child(${target.getAttribute('data-slide')})`);
51
116
  carouselInner.scroll({
52
117
  top: 0,
53
118
  left: el.offsetLeft - carouselInner.getBoundingClientRect().left,
@@ -60,9 +125,9 @@ function carousel(carouselElement, row) {
60
125
  carouselElement.addEventListener('click', function (e) {
61
126
  let scrollArea = carouselInner.clientWidth;
62
127
  let scrollWidth = carouselInner.scrollWidth;
63
- let itemWidth = row.querySelector(':scope > .col').scrollWidth;
128
+ let itemWidth = carouselComponent.querySelector(':scope > div').scrollWidth;
64
129
  let visibleItems = Math.round(scrollArea / itemWidth);
65
- let lastItemOffset = row.querySelector(':scope > .col:last-child').offsetLeft;
130
+ let lastItemOffset = carouselComponent.querySelector(':scope > div:last-child').offsetLeft;
66
131
  let lastItemInView = carouselInner.scrollLeft + scrollArea + carouselInner.getBoundingClientRect().left >= (lastItemOffset + 60);
67
132
  //Check if theres room for more slides than we have
68
133
  let leftOverSpace = (Math.ceil(itemCount / visibleItems) * visibleItems) - itemCount;
@@ -75,6 +140,12 @@ function carousel(carouselElement, row) {
75
140
  let movement = lastItemInView && leftOverSpace > 0 ? spacesToMove * itemWidth : carouselInner.clientWidth;
76
141
  for (var target = e.target; target && target != this; target = target.parentNode) {
77
142
  if (typeof target.matches == "function" && target.matches('.btn-next, .btn-prev')) {
143
+ let direction = target.matches('.btn-next') ? 'next' : 'prev';
144
+ const customEvent = new CustomEvent(`${direction}-clicked`, { detail: {
145
+ 'slide': target.getAttribute('data-go')
146
+ }
147
+ });
148
+ carouselComponent.dispatchEvent(customEvent);
78
149
  e.preventDefault();
79
150
  let scrollTo = target.classList.contains('btn-prev') ? carouselInner.scrollLeft - movement : carouselInner.scrollLeft + carouselInner.clientWidth;
80
151
  carouselInner.scroll({
@@ -86,5 +157,36 @@ function carousel(carouselElement, row) {
86
157
  }
87
158
  }
88
159
  }, false);
89
- }
160
+ carouselProgress.addEventListener(stepperStart, function (event) {
161
+ clearInterval(stepperInterval);
162
+ stepperInterval = setInterval(function () {
163
+ scrollArea = carouselInner.clientWidth;
164
+ itemWidth = carouselComponent.querySelector(':scope > div').scrollWidth;
165
+ visibleItems = Math.round(scrollArea / itemWidth);
166
+ carouselProgress.setAttribute('step', visibleItems);
167
+ progressMax = getProgressMax(itemCount, visibleItems);
168
+ carouselProgress.setAttribute('max', progressMax);
169
+ percent = getProgressPercent(carouselProgress.value, progressMax);
170
+ carouselProgress.style.setProperty('--percent', percent + "%");
171
+ }, 10);
172
+ });
173
+ carouselProgress.addEventListener(stepperEvent, function (event) {
174
+ clearInterval(stepperInterval);
175
+ });
176
+ carouselProgress.addEventListener('change', function (e) {
177
+ clearInterval(stepperInterval);
178
+ let target = carouselComponent.querySelector(`:scope > *:nth-child(${carouselProgress.value})`);
179
+ carouselInner.scroll({
180
+ top: 0,
181
+ left: target ? target.offsetLeft - carouselInner.getBoundingClientRect().left : 0,
182
+ behavior: 'smooth'
183
+ });
184
+ let direction = target.matches('.btn-next') ? 'next' : 'prev';
185
+ const customEvent = new CustomEvent(`slider-changed`, { detail: {
186
+ 'slide': carouselProgress.value
187
+ }
188
+ });
189
+ carouselComponent.dispatchEvent(customEvent);
190
+ }, false);
191
+ };
90
192
  export default carousel;
@@ -22,8 +22,10 @@ const extendDialogs = (body) => {
22
22
  // Open the modal!
23
23
  dialog.showModal();
24
24
  dialog.focus();
25
- let firstWidth = dialog.offsetWidth;
26
- dialog.setAttribute('style', `max-width: ${firstWidth}px;`);
25
+ if (!dialog.querySelector('iam-multi-step')) {
26
+ let firstWidth = dialog.offsetWidth;
27
+ dialog.setAttribute('style', `max-width: ${firstWidth}px;`);
28
+ }
27
29
  // When the modal is opened we want to make sure any duplicate checkboxes are matching the originals
28
30
  Array.from(dialog.querySelectorAll('[data-duplicate]')).forEach((element, index) => {
29
31
  const id = element.getAttribute('data-duplicate');
@@ -168,12 +170,8 @@ const extendDialogs = (body) => {
168
170
  return null;
169
171
  };
170
172
  export const createDialog = (dialog) => {
171
- // Multi dialog
172
- if (dialog.classList.contains('dialog--multi') && !dialog.querySelector(':scope > .steps')) {
173
- createMultiFormDialog(dialog);
174
- }
175
173
  // If you are using Vue eevents and bindings its recommended to add in the .mh-lg div manually to the dialog
176
- if (!dialog.querySelector(':scope .mh-lg') && !dialog.classList.contains('dialog--multi')) {
174
+ if (!dialog.querySelector(':scope .mh-lg') && !dialog.querySelector('iam-multi-step')) {
177
175
  dialog.innerHTML = `<div class="mh-lg">${dialog.innerHTML}</div>`;
178
176
  let dialogContent = dialog.querySelector('.mh-lg');
179
177
  let titleElement = dialog.querySelector('.mh-lg :is(.h1,.h2,.h3,.h4,.h5,.h6)');
@@ -188,120 +186,4 @@ export const createDialog = (dialog) => {
188
186
  if (!dialog.querySelector(':scope > button:first-child'))
189
187
  dialog.insertAdjacentHTML('afterbegin', `<button class="dialog__close">Close</button>`);
190
188
  };
191
- export const createMultiFormDialog = (dialog) => {
192
- let buttons = "";
193
- let fieldsets = Array.from(dialog.querySelectorAll('fieldset[data-title]'));
194
- let form = dialog.querySelector('form');
195
- fieldsets.forEach((fieldset, index) => {
196
- buttons += `<button data-title="${fieldset.getAttribute('data-title')}" type="button" class="${index == 0 ? "active" : ""}" tabindex="-1">${fieldset.getAttribute('data-title')}</button>`;
197
- const btnWrapper = document.createElement("div");
198
- btnWrapper.classList.add('btn--wrapper');
199
- fieldset.appendChild(btnWrapper);
200
- if (index != 0)
201
- btnWrapper.innerHTML += `<button data-title="${fieldsets[index - 1].getAttribute('data-title')}" class="btn btn-secondary mb-0" data-previous type="button">Previous</button>`;
202
- if (index != fieldsets.length - 1)
203
- btnWrapper.innerHTML += `<button data-title="${fieldsets[index + 1].getAttribute('data-title')}" class="btn btn-primary mb-0" data-next type="button">Next</button>`;
204
- // Last fieldset
205
- if (index == fieldsets.length - 1) {
206
- if (form && form.querySelector(':scope > button[type="submit"]')) {
207
- let existingButton = form.querySelector(':scope > button[type="submit"]');
208
- existingButton.classList.add('mb-0');
209
- btnWrapper.insertAdjacentElement('beforeend', existingButton);
210
- }
211
- else
212
- btnWrapper.innerHTML += `<button data-title="${fieldsets[index].getAttribute('data-title')}" class="btn btn-primary mb-0" data-next type="submit">Submit</button>`;
213
- }
214
- });
215
- dialog.insertAdjacentHTML('afterbegin', `<div class="steps bg-primary">${buttons}</div>`);
216
- // Open the fieldset with an error inside
217
- let validatedFieldsets = Array.from(dialog.querySelectorAll('fieldset.was-validated'));
218
- for (let i = 0; i < validatedFieldsets.length; i++) {
219
- let fieldset = validatedFieldsets[i];
220
- let fieldsetID = fieldset.getAttribute('data-title');
221
- if (fieldset.querySelector('.is-invalid')) {
222
- Array.from(dialog.querySelectorAll(`[data-title="${fieldsetID}"]`)).forEach((element, index) => {
223
- element.classList.add('active');
224
- });
225
- break;
226
- }
227
- else {
228
- Array.from(dialog.querySelectorAll(`[data-title="${fieldsetID}"]`)).forEach((element, index) => {
229
- element.classList.add('valid');
230
- });
231
- }
232
- }
233
- // Prevent the bubble messages
234
- dialog.addEventListener('invalid', (function () {
235
- return function (e) {
236
- e.preventDefault();
237
- };
238
- })(), true);
239
- function validateFieldset(button) {
240
- const currentFieldset = dialog.querySelector(`fieldset.active`) ? dialog.querySelector(`fieldset.active`) : dialog.querySelector(`fieldset[data-title]`);
241
- const currentFieldsetID = currentFieldset.getAttribute('data-title');
242
- let isFieldsetValid = true;
243
- currentFieldset.classList.add('was-validated');
244
- Array.from(currentFieldset.querySelectorAll('input')).forEach((input, index) => {
245
- if (!input.checkValidity())
246
- isFieldsetValid = false;
247
- });
248
- // If valid mode to next field set
249
- if (!isFieldsetValid) {
250
- Array.from(dialog.querySelectorAll(`[data-title="${currentFieldsetID}"]`)).forEach((element, index) => {
251
- element.classList.remove('valid');
252
- });
253
- }
254
- else {
255
- Array.from(dialog.querySelectorAll(`[data-title="${currentFieldsetID}"]`)).forEach((element, index) => {
256
- element.classList.add('valid');
257
- });
258
- }
259
- // Allow the previous button to navigate
260
- if (isFieldsetValid || !button.hasAttribute('data-next')) {
261
- const fieldset = dialog.querySelector(`fieldset[data-title="${button.getAttribute('data-title')}"]`);
262
- const step = dialog.querySelector(`.steps button[data-title="${button.getAttribute('data-title')}"]`);
263
- Array.from(dialog.querySelectorAll('button')).forEach((button, index) => {
264
- button.classList.remove('active');
265
- });
266
- Array.from(dialog.querySelectorAll('fieldset')).forEach((button, index) => {
267
- button.classList.remove('active');
268
- });
269
- step.classList.add('active');
270
- fieldset.classList.add('active');
271
- }
272
- let fieldsetCount = Array.from(dialog.querySelectorAll(`fieldset`)).length;
273
- let validFieldsetCount = Array.from(dialog.querySelectorAll(`fieldset.valid`)).length;
274
- // update the progress bar
275
- dialog.style.setProperty('--progress', `${(validFieldsetCount / (fieldsetCount - 1) * 100)}%`);
276
- }
277
- // remove error messages from server
278
- dialog.addEventListener('keydown', (event) => {
279
- if (event && event.target instanceof HTMLElement && event.target.closest('button')) {
280
- const button = event.target.closest('button');
281
- if (event.keyCode == 13 && button.getAttribute('type') != "submit") {
282
- event.preventDefault();
283
- validateFieldset(button);
284
- }
285
- }
286
- if (event && event.target instanceof HTMLElement && event.target.closest('input')) {
287
- const input = event.target.closest('input');
288
- input.classList.remove('is-invalid');
289
- if (event.keyCode == 13) {
290
- event.preventDefault();
291
- }
292
- }
293
- });
294
- dialog.addEventListener('click', (event) => {
295
- if (event && event.target instanceof HTMLElement && event.target.closest('button[type="submit"]')) {
296
- const form = event.target.closest('form');
297
- form.classList.add('was-validated');
298
- }
299
- else if (event && event.target instanceof HTMLElement && event.target.closest('button[data-title]')) {
300
- const button = event.target.closest('button[data-title]');
301
- validateFieldset(button);
302
- }
303
- ;
304
- return null;
305
- });
306
- };
307
189
  export default extendDialogs;
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * iamKey v6.1.0--beta
3
- * Copyright 2022-2024 iamproperty
4
- */(function(b){typeof define=="function"&&define.amd?define(b):b()})(function(){"use strict";var b=a=>(a.classList.add("js-enabled"),(navigator.userAgent.indexOf("MSIE")!==-1||navigator.appVersion.indexOf("Trident/")>0)&&a.classList.add("ie"),null),C=a=>{var t=function(e){var c=document.querySelector('label[for="'.concat(e.replace("#",""),'"]')),s=document.querySelector(e+" summary"),i=document.querySelector("dialog".concat(e)),n=document.querySelector("detail".concat(e));c instanceof HTMLElement?c.click():s instanceof HTMLElement?s.click():i instanceof HTMLElement?i.showModal():n instanceof HTMLElement&&n.addAttribute("open")};return location.hash&&t(location.hash),window.addEventListener("hashchange",function(){t(location.hash)},!1),addEventListener("popstate",r=>{if(r&&r.state&&r.state.type&&r.state.type=="pagination"){var e=document.querySelector("#".concat(r.state.form)),c=document.querySelector("#".concat(r.state.form," [data-pagination]"));c?c.value=r.state.page:e.innerHTML+='<input name="page" type="hidden" data-pagination="true" value="'.concat(r.state.page,'" />'),e.dispatchEvent(new Event("submit"))}}),document.addEventListener("submit",r=>{if(r&&r.target instanceof HTMLElement&&r.target.matches("form")){var e=r.target;Array.from(e.querySelectorAll("[data-password-type]")).forEach((c,s)=>{c.setAttribute("type","password")}),(e.querySelector(":invalid")||e.querySelector('.pwd-checker[data-strength="1"]')||e.querySelector('.pwd-checker[data-strength="2"]'))&&(e.classList.add("was-validated"),r.preventDefault()),e.querySelector("iam-multiselect[data-is-required][data-error]")&&(e.classList.add("was-validated"),r.preventDefault())}}),document.addEventListener("keydown",r=>{r.key==="Escape"&&document.querySelector(".dialog--transactional[open], .dialog--acknowledgement[open]")&&(r.preventDefault(),r.stopPropagation())}),Array.from(document.querySelectorAll("label progress")).forEach((r,e)=>{var c=r.closest("label");c.setAttribute("data-percent",r.getAttribute("value"))}),null},H=a=>(Array.from(a.querySelectorAll("dialog[open]")).forEach((t,r)=>{var e=t.closest(".dialog__wrapper");e||(t.removeAttribute("open"),t.showModal(),t.focus(),k(t))}),a.addEventListener("click",t=>{if(t.target.tagName=="IAM-ACTIONBAR")return!1;if(t&&t.target instanceof HTMLElement&&t.target.closest("[data-modal]")){var r=t.target.closest("[data-modal]"),e=r.hasAttribute("data-modal")?r.getAttribute("data-modal"):r.getAttribute("data-filter"),c=document.querySelector("dialog#".concat(e));k(c),c.showModal(),c.focus();var s=c.offsetWidth;c.setAttribute("style","max-width: ".concat(s,"px;")),Array.from(c.querySelectorAll("[data-duplicate]")).forEach((y,w)=>{var J=y.getAttribute("data-duplicate"),T=document.getElementById(J);if(y.checked!=T.checked){y.checked=T.checked;var U=new Event("change");y.dispatchEvent(U)}}),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"openModal",id:e})}if(t&&t.target instanceof HTMLElement&&t.target.closest("button.dialog__close")){var i=t.target.closest("dialog[open]");t.preventDefault(),i.close(),Array.from(document.querySelectorAll(".dialog__wrapper > button")).forEach((y,w)=>{y.classList.remove("active")});var n=new CustomEvent("dialog-closed",{bubbles:!0,cancelable:!0,detail:{modalId:i.id}});t.target.dispatchEvent(n),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"closeModal",id:i.getAttribute("id")})}if(t&&t.target instanceof HTMLElement&&t.target.closest('button[formmethod="dialog"]')){var u=t.target.closest("dialog[open]");Array.from(document.querySelectorAll(".dialog__wrapper > button")).forEach((y,w)=>{y.classList.remove("active")}),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"closeModal",id:u.getAttribute("id")})}if(t&&t.target instanceof HTMLElement&&t.target.closest("dialog[open]")){var o=t.target.closest("dialog[open]"),l=window.getComputedStyle(o);if(l.display==="contents"&&(o=o.parentNode.closest("dialog[open]")),!o.classList.contains("dialog--transactional")&&!o.classList.contains("dialog--acknowledgement")){var d=o.getBoundingClientRect();(t.clientX<d.left||t.clientX>d.right||t.clientY<d.top||t.clientY>d.bottom)&&(t.target.closest("dialog *")||o.close(),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"closeModal",id:o.getAttribute("id")}))}}if(t&&t.target instanceof HTMLElement&&t.target.closest(".dialog__wrapper > button")){t.stopPropagation();var f=t.target.closest(".dialog__wrapper > button"),E=f.parentNode,A="openPopover",g=E.querySelector(":scope > dialog");if(document.querySelector("*:not([data-keep-open]) > dialog[open]")&&document.querySelector("*:not([data-keep-open]) > dialog[open]")!=g&&f.closest("dialog[open]")!=document.querySelector("*:not([data-keep-open]) > dialog[open]")&&document.querySelector("*:not([data-keep-open]) > dialog[open]").close(),Array.from(document.querySelectorAll(".dialog__wrapper > button")).forEach((y,w)=>{y.removeAttribute("aria-expanded")}),g.hasAttribute("open"))g.close(),A="closePopover",g.removeAttribute("style"),f.removeAttribute("aria-expanded");else{g.show(),f.setAttribute("aria-expanded",!0);var v=f.getBoundingClientRect(),m=v.top,p=v.left;if(f.closest("iam-table")){var M=f.closest("iam-table").parentNode.getBoundingClientRect();m-=M.top,p-=M.left}g.classList.contains("dialog--fix")&&g.setAttribute("style","position:fixed;top: ".concat(m,"px; left: ").concat(p,"px; margin: 3rem 0 0 0;"))}var q=g.getBoundingClientRect(),O=q.bottom-window.scrollY,Y=window.innerHeight-window.scrollY;if(O>Y){var R=g.hasAttribute("style")?g.getAttribute("style")+" ":"";g.setAttribute("style",R+"transform: translate(0, calc(-100% - 4rem))"),q=g.getBoundingClientRect();var W=q.top-window.scrollY;W<100&&g.removeAttribute("style")}window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:A,id:f.textContent})}t&&t.target instanceof HTMLElement&&!t.target.closest("dialog[open]")&&!t.target.closest(".dialog__wrapper > button")&&(document.querySelector(".dialog__wrapper:not([data-keep-open]) > dialog[open]")&&document.querySelector(".dialog__wrapper:not([data-keep-open]) > dialog[open]").close(),Array.from(document.querySelectorAll(".dialog__wrapper:not([data-keep-open]) > button")).forEach((y,w)=>{y.removeAttribute("aria-expanded")}))}),null),k=a=>{if(a.classList.contains("dialog--multi")&&!a.querySelector(":scope > .steps")&&D(a),!a.querySelector(":scope .mh-lg")&&!a.classList.contains("dialog--multi")){a.innerHTML='<div class="mh-lg">'.concat(a.innerHTML,"</div>");var t=a.querySelector(".mh-lg"),r=a.querySelector(".mh-lg :is(.h1,.h2,.h3,.h4,.h5,.h6)");if(r){var e=r.previousSibling;t.before(r),e&&r.before(e)}}a.querySelector(":scope > button:first-child")||a.insertAdjacentHTML("afterbegin",'<button class="dialog__close">Close</button>')},D=a=>{var t="",r=Array.from(a.querySelectorAll("fieldset[data-title]")),e=a.querySelector("form");r.forEach((o,l)=>{t+='<button data-title="'.concat(o.getAttribute("data-title"),'" type="button" class="').concat(l==0?"active":"",'" tabindex="-1">').concat(o.getAttribute("data-title"),"</button>");var d=document.createElement("div");if(d.classList.add("btn--wrapper"),o.appendChild(d),l!=0&&(d.innerHTML+='<button data-title="'.concat(r[l-1].getAttribute("data-title"),'" class="btn btn-secondary mb-0" data-previous type="button">Previous</button>')),l!=r.length-1&&(d.innerHTML+='<button data-title="'.concat(r[l+1].getAttribute("data-title"),'" class="btn btn-primary mb-0" data-next type="button">Next</button>')),l==r.length-1)if(e&&e.querySelector(':scope > button[type="submit"]')){var f=e.querySelector(':scope > button[type="submit"]');f.classList.add("mb-0"),d.insertAdjacentElement("beforeend",f)}else d.innerHTML+='<button data-title="'.concat(r[l].getAttribute("data-title"),'" class="btn btn-primary mb-0" data-next type="submit">Submit</button>')}),a.insertAdjacentHTML("afterbegin",'<div class="steps bg-primary">'.concat(t,"</div>"));for(var c=Array.from(a.querySelectorAll("fieldset.was-validated")),s=0;s<c.length;s++){var i=c[s],n=i.getAttribute("data-title");if(i.querySelector(".is-invalid")){Array.from(a.querySelectorAll('[data-title="'.concat(n,'"]'))).forEach((o,l)=>{o.classList.add("active")});break}else Array.from(a.querySelectorAll('[data-title="'.concat(n,'"]'))).forEach((o,l)=>{o.classList.add("valid")})}a.addEventListener("invalid",function(){return function(o){o.preventDefault()}}(),!0);function u(o){var l=a.querySelector("fieldset.active")?a.querySelector("fieldset.active"):a.querySelector("fieldset[data-title]"),d=l.getAttribute("data-title"),f=!0;if(l.classList.add("was-validated"),Array.from(l.querySelectorAll("input")).forEach((m,p)=>{m.checkValidity()||(f=!1)}),f?Array.from(a.querySelectorAll('[data-title="'.concat(d,'"]'))).forEach((m,p)=>{m.classList.add("valid")}):Array.from(a.querySelectorAll('[data-title="'.concat(d,'"]'))).forEach((m,p)=>{m.classList.remove("valid")}),f||!o.hasAttribute("data-next")){var E=a.querySelector('fieldset[data-title="'.concat(o.getAttribute("data-title"),'"]')),A=a.querySelector('.steps button[data-title="'.concat(o.getAttribute("data-title"),'"]'));Array.from(a.querySelectorAll("button")).forEach((m,p)=>{m.classList.remove("active")}),Array.from(a.querySelectorAll("fieldset")).forEach((m,p)=>{m.classList.remove("active")}),A.classList.add("active"),E.classList.add("active")}var g=Array.from(a.querySelectorAll("fieldset")).length,v=Array.from(a.querySelectorAll("fieldset.valid")).length;a.style.setProperty("--progress","".concat(v/(g-1)*100,"%"))}a.addEventListener("keydown",o=>{if(o&&o.target instanceof HTMLElement&&o.target.closest("button")){var l=o.target.closest("button");o.keyCode==13&&l.getAttribute("type")!="submit"&&(o.preventDefault(),u(l))}if(o&&o.target instanceof HTMLElement&&o.target.closest("input")){var d=o.target.closest("input");d.classList.remove("is-invalid"),o.keyCode==13&&o.preventDefault()}}),a.addEventListener("click",o=>{if(o&&o.target instanceof HTMLElement&&o.target.closest('button[type="submit"]')){var l=o.target.closest("form");l.classList.add("was-validated")}else if(o&&o.target instanceof HTMLElement&&o.target.closest("button[data-title]")){var d=o.target.closest("button[data-title]");u(d)}return null})};function _(){window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"Pageview",pageTitle:document.title}),document.addEventListener("click",a=>{var t=a.target.closest("[open] summary");if(t)window.dataLayer.push({event:"closeDetails",detailsTitle:t.textContent||""});else{var r=a.target.closest("summary"),e=a.target.closest("a"),c=a.target.closest("button");r&&window.dataLayer.push({event:"openDetails",detailsTitle:r.textContent||""}),e&&window.dataLayer.push({event:"linkClicked",linkText:e.hasAttribute("title")?e.getAttribute("title")||"":e.textContent||"",class:e.hasAttribute("class")&&e.getAttribute("class")||"",href:e.getAttribute("href")||""}),c&&window.dataLayer.push({event:"buttonClicked",buttonText:c.textContent||"",class:c.hasAttribute("class")&&c.getAttribute("class")||""})}})}function N(a){var t=new TextEncoder("utf-8").encode(a);return crypto.subtle.digest("SHA-1",t).then(function(r){for(var e=[],c=new DataView(r),s=0;s<c.byteLength;s+=4){var i=c.getUint32(s),n=i.toString(16),u="00000000",o=(u+n).slice(-u.length);e.push(o)}return e.join("")})}var B=(a,t)=>{N(a).then(function(r){var e=new XMLHttpRequest;e.addEventListener("load",function(){var c=this.responseText.split(`
5
- `),s=r.slice(5).toUpperCase(),i=!1;for(var n in c)if(c[n].substring(0,35)==s){i=!0;break}var u=new CustomEvent("hibpCheck",{detail:i});t.dispatchEvent(u)}),e.open("GET","https://api.pwnedpasswords.com/range/"+r.substr(0,5)),e.send()})},I=a=>{function t(){if(Array.from(document.querySelectorAll("input[maxlength],textarea[maxlength]")).forEach((e,c)=>{e.parentElement,P(e)}),Array.from(document.querySelectorAll("label input")).forEach((e,c)=>{!e.closest("label").querySelector(".optional-text")&&!e.hasAttribute("required")&&(e.parentNode.tagName.toLowerCase()=="span"?e.parentElement.insertAdjacentHTML("beforebegin",'<span class="optional-text"></span>'):e.insertAdjacentHTML("beforebegin",'<span class="optional-text"></span>'))}),document.querySelector('input[type="date"]')){let e=function(c){var s=c.getFullYear(),i=String(c.getMonth()+1).padStart(2,"0"),n=String(c.getDate()).padStart(2,"0");return"".concat(s,"-").concat(i,"-").concat(n)};var r=new Date;Array.from(document.querySelectorAll('input[type="date"]')).forEach((c,s)=>{var i=r;if(c.hasAttribute("data-start")&&(i.setDate(i.getDate()+parseInt(c.getAttribute("data-start"))),c.setAttribute("min",e(i))),c.hasAttribute("data-period")){var n=parseInt(c.getAttribute("data-period")),u=new Date;u.setDate(i.getDate()+n),c.setAttribute("max",e(u))}if(c.hasAttribute("data-allowed-days")){var o=JSON.parse("[".concat(c.getAttribute("data-allowed-days"),"]"));c.addEventListener("input",function(l){var d=new Date(this.value).getUTCDay();o.includes(d)?c.setCustomValidity(""):c.setCustomValidity("That day of the week is not allowed")})}})}}document.readyState==="complete"&&t(),document.onreadystatechange=()=>{document.readyState==="complete"&&t()},a.addEventListener("input",r=>{if(r&&r.target instanceof HTMLElement&&r.target.closest("input,textarea,select")){var e=r.target.closest("input,textarea,select");e.parentElement,e.hasAttribute("type")&&e.getAttribute("type")=="color"&&(e.nextElementSibling.value=e.value),e.hasAttribute("maxlength")&&e.nextElementSibling&&e.nextElementSibling.setAttribute("data-count",e.value.length),e.hasAttribute("data-strength-checker")&&S(e)}}),a.addEventListener("change",r=>{if(r&&r.target instanceof HTMLElement&&r.target.closest("select")){var e=r.target.closest("select");if(e.hasAttribute("data-change-type")&&e.hasAttribute("data-input")){var c=document.getElementById(e.getAttribute("data-input")),s=e.value;x(c,s)}}if(r&&r.target instanceof HTMLElement&&r.target.closest('dialog [type="radio"]')){var i=r.target.closest("dialog");r.target.closest('dialog [type="radio"]'),Array.from(i.querySelectorAll('[type="radio"][autofocus]')).forEach((n,u)=>{n.removeAttribute("autofocus")}),Array.from(i.querySelectorAll('[type="radio"]:checked')).forEach((n,u)=>{n.setAttribute("autofocus",!0)})}}),a.addEventListener("click",r=>{if(r&&r.target instanceof HTMLElement&&r.target.closest("[data-change-type][data-input]:not(select)")){var e=r.target.closest("[data-change-type]"),c=document.getElementById(e.getAttribute("data-input")),s=e.getAttribute("data-change-type");if(e.setAttribute("data-change-type",c.getAttribute("type")),x(c,s),e.hasAttribute("data-alt-class")){var i=e.getAttribute("data-alt-class");e.setAttribute("data-alt-class",e.getAttribute("class")),e.setAttribute("class",i)}}})},P=a=>{var t=a.parentElement,r=a.getAttribute("maxlength");t.style.setProperty("--maxlength",r);var e=a.nextElementSibling;(!e||e&&e.classList.contains("invalid-feedback"))&&(e=document.createElement("span"),t.insertBefore(e,a.nextSibling)),e.setAttribute("data-count",a.value.length)},x=(a,t)=>{a.hasAttribute("type")&&a.getAttribute("type")=="password"&&a.setAttribute("data-password-type",!0),a.setAttribute("type",t)},S=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"no",e=document.getElementById(t.getAttribute("data-strength-checker")),c=t.value,s=t.hasAttribute("minlength")?t.getAttribute("minlength"):12,i=1,n=["Very weak","Weak","Average","Strong","Very strong"],u="";if(c.match(/(?=.*[0-9])/)&&(i+=1),c.match(/(?=.*[!,%,&,#,$,^,*,?,_,~,<,>,])/)&&(i+=1),c.match(/(?=.*[a-z])/)&&(i+=1),c.match(/(?=.*[A-Z])/)&&(i+=1),c.length<s&&(i=1,u="(must be at least ".concat(s," characters.)")),i>=3&&r=="no"){let o=function(l,d){l.detail?S(d,"danger"):S(d,"success"),d.removeEventListener("hibpCheck",o)};B(c,t),t.addEventListener("hibpCheck",function(l){o(l,t)})}else i>=3&&r=="danger"&&(i=3,u="(this password is very common)");e&&(i<=3?e.classList.add("invalid-feedback"):e.classList.remove("invalid-feedback"),e.setAttribute("data-strength",i),e.innerHTML="Password strength: ".concat(n[i-1]," ").concat(u))},j=()=>{document.addEventListener("change",a=>{a&&a.target instanceof HTMLElement&&a.target.closest("[data-change-events]")&&L(a.target,a.target.closest("[data-change-events]").getAttribute("data-change-events"))}),document.addEventListener("keyup",a=>{a&&a.target instanceof HTMLElement&&a.target.closest("[data-change-events]")&&L(a.target,a.target.closest("[data-change-events]").getAttribute("data-change-events"))}),document.addEventListener("click",a=>{a&&a.target instanceof HTMLElement&&a.target.closest("[data-click-events]")&&L(a.target,a.target.closest("[data-click-events]").getAttribute("data-click-events"))})},L=(a,t)=>{if(t||(t=a.parentNode.getAttribute("data-change-events")),!t)return!1;Array.from(JSON.parse(t)).forEach((r,e)=>{F(a,r)})},F=(a,t)=>{if("matches"in t)return t.matches=="any"||a.value==t.matches?h(a,t,"if"):h(a,t,"else"),!1;if("in-list"in t){var r=document.querySelector("".concat(t["in-list"],' option[value="').concat(a.value,'"]'));return document.querySelector("".concat(t["in-list"],' option[value="').concat(a.value,'"]'))?h(r,t,"if"):h(r,t,"else"),!1}else"event"in t&&h(a,t,"event")},h=(a,t,r)=>{if(!(r in t))return!1;switch(t[r]){case"hide":if(document.querySelector(t.target)){var e=document.querySelector(t.target);e.classList.add("js-hide"),Array.from(e.querySelectorAll("[data-required]")).forEach((n,u)=>{n.removeAttribute("required")})}break;case"show":if(document.querySelector(t.target)){var c=document.querySelector(t.target);c.classList.remove("js-hide"),Array.from(c.querySelectorAll("[data-required]")).forEach((n,u)=>{n.closest(".js-hide")||n.setAttribute("required","true")})}break;case"populate-form":V(a,t);break;case"dispatchEvent":var s=new Event(t.value);document.querySelector("".concat(t.target)).dispatchEvent(s);break;case"setAttribute":Array.from(document.querySelectorAll("".concat(t.target))).forEach(function(n,u){n.setAttribute(t.attribute,t.value)});break;case"focus":document.querySelector("".concat(t.target)).focus();break;case"removeAttribute":Array.from(document.querySelectorAll("".concat(t.target))).forEach(function(n,u){n.removeAttribute(t.attribute)});break;case"updateValue":document.querySelector("".concat(t.target)).value=t.value?t.value:"";var i=new Event("change");document.querySelector("".concat(t.target)).dispatchEvent(i);break;case"submitForm":document.querySelector("".concat(t.target)).submit();break;case"openLink":document.querySelector("".concat(t.target)).value&&(window.location.href=document.querySelector("".concat(t.target)).value);break}},V=function(t,r){var e=JSON.parse(t.getAttribute("data-values")),c=document.querySelector(r.target);if(!e)return!1;Object.keys(e).forEach((s,i)=>{document.getElementById(s)&&document.getElementById(s).tagName=="SPAN"&&(document.getElementById(s).innerHTML=e[s]),c.querySelector('select[name="'.concat(s,'"] [value="').concat(e[s],'"]'))?(c.querySelector('select[name="'.concat(s,'"]')).value=e[s],t.hasAttribute("data-lock-fields")&&(c.querySelector('select[name="'.concat(s,'"]')).disabled=!0)):c.querySelector('input[name="'.concat(s,'"][type="radio"][value="').concat(e[s],'"]'))?(Array.from(c.querySelectorAll('input[name="'.concat(s,'"][type="radio"]'))).forEach(function(n,u){n.disabled=!0}),c.querySelector('input[name="'.concat(s,'"][type="radio"][value="').concat(e[s],'"]')).checked=!0,c.querySelector('input[name="'.concat(s,'"][type="radio"][value="').concat(e[s],'"]')).disabled=!1):c.querySelector('input[name="'.concat(s,'"]'))&&(c.querySelector('input[name="'.concat(s,'"]')).value=e[s],t.hasAttribute("data-lock-fields")&&c.querySelector('input[name="'.concat(s,'"]')).setAttribute("readonly","true"))})};document.addEventListener("DOMContentLoaded",function(){_(),j(),b(document.body),C(),H(document.body),I(document.body)})});
2
+ * iamKey v6.1.0--beta2
3
+ * Copyright 2022-2025 iamproperty
4
+ */(function(h){typeof define=="function"&&define.amd?define(h):h()})(function(){"use strict";var h=r=>(r.classList.add("js-enabled"),(navigator.userAgent.indexOf("MSIE")!==-1||navigator.appVersion.indexOf("Trident/")>0)&&r.classList.add("ie"),null),T=r=>{var e=function(t){var o=document.querySelector('label[for="'.concat(t.replace("#",""),'"]')),c=document.querySelector(t+" summary"),s=document.querySelector("dialog".concat(t)),n=document.querySelector("detail".concat(t));o instanceof HTMLElement?o.click():c instanceof HTMLElement?c.click():s instanceof HTMLElement?s.showModal():n instanceof HTMLElement&&n.addAttribute("open")};return location.hash&&e(location.hash),window.addEventListener("hashchange",function(){e(location.hash)},!1),addEventListener("popstate",a=>{if(a&&a.state&&a.state.type&&a.state.type=="pagination"){var t=document.querySelector("#".concat(a.state.form)),o=document.querySelector("#".concat(a.state.form," [data-pagination]"));o?o.value=a.state.page:t.innerHTML+='<input name="page" type="hidden" data-pagination="true" value="'.concat(a.state.page,'" />'),t.dispatchEvent(new Event("submit"))}}),document.addEventListener("submit",a=>{if(a&&a.target instanceof HTMLElement&&a.target.matches("form")){var t=a.target;Array.from(t.querySelectorAll("[data-password-type]")).forEach((o,c)=>{o.setAttribute("type","password")}),(t.querySelector(":invalid")||t.querySelector('.pwd-checker[data-strength="1"]')||t.querySelector('.pwd-checker[data-strength="2"]'))&&(t.classList.add("was-validated"),a.preventDefault()),t.querySelector("iam-multiselect[data-is-required][data-error]")&&(t.classList.add("was-validated"),a.preventDefault())}}),document.addEventListener("keydown",a=>{a.key==="Escape"&&document.querySelector(".dialog--transactional[open], .dialog--acknowledgement[open]")&&(a.preventDefault(),a.stopPropagation())}),Array.from(document.querySelectorAll("label progress")).forEach((a,t)=>{var o=a.closest("label");o.setAttribute("data-percent",a.getAttribute("value"))}),null},C=r=>(Array.from(r.querySelectorAll("dialog[open]")).forEach((e,a)=>{var t=e.closest(".dialog__wrapper");t||(e.removeAttribute("open"),e.showModal(),e.focus(),v(e))}),r.addEventListener("click",e=>{if(e.target.tagName=="IAM-ACTIONBAR")return!1;if(e&&e.target instanceof HTMLElement&&e.target.closest("[data-modal]")){var a=e.target.closest("[data-modal]"),t=a.hasAttribute("data-modal")?a.getAttribute("data-modal"):a.getAttribute("data-filter"),o=document.querySelector("dialog#".concat(t));if(v(o),o.showModal(),o.focus(),!o.querySelector("iam-multi-step")){var c=o.offsetWidth;o.setAttribute("style","max-width: ".concat(c,"px;"))}Array.from(o.querySelectorAll("[data-duplicate]")).forEach((u,p)=>{var W=u.getAttribute("data-duplicate"),M=document.getElementById(W);if(u.checked!=M.checked){u.checked=M.checked;var J=new Event("change");u.dispatchEvent(J)}}),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"openModal",id:t})}if(e&&e.target instanceof HTMLElement&&e.target.closest("button.dialog__close")){var s=e.target.closest("dialog[open]");e.preventDefault(),s.close(),Array.from(document.querySelectorAll(".dialog__wrapper > button")).forEach((u,p)=>{u.classList.remove("active")});var n=new CustomEvent("dialog-closed",{bubbles:!0,cancelable:!0,detail:{modalId:s.id}});e.target.dispatchEvent(n),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"closeModal",id:s.getAttribute("id")})}if(e&&e.target instanceof HTMLElement&&e.target.closest('button[formmethod="dialog"]')){var i=e.target.closest("dialog[open]");Array.from(document.querySelectorAll(".dialog__wrapper > button")).forEach((u,p)=>{u.classList.remove("active")}),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"closeModal",id:i.getAttribute("id")})}if(e&&e.target instanceof HTMLElement&&e.target.closest("dialog[open]")){var l=e.target.closest("dialog[open]"),y=window.getComputedStyle(l);if(y.display==="contents"&&(l=l.parentNode.closest("dialog[open]")),!l.classList.contains("dialog--transactional")&&!l.classList.contains("dialog--acknowledgement")){var g=l.getBoundingClientRect();(e.clientX<g.left||e.clientX>g.right||e.clientY<g.top||e.clientY>g.bottom)&&(e.target.closest("dialog *")||l.close(),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"closeModal",id:l.getAttribute("id")}))}}if(e&&e.target instanceof HTMLElement&&e.target.closest(".dialog__wrapper > button")){e.stopPropagation();var f=e.target.closest(".dialog__wrapper > button"),V=f.parentNode,E="openPopover",d=V.querySelector(":scope > dialog");if(document.querySelector("*:not([data-keep-open]) > dialog[open]")&&document.querySelector("*:not([data-keep-open]) > dialog[open]")!=d&&f.closest("dialog[open]")!=document.querySelector("*:not([data-keep-open]) > dialog[open]")&&document.querySelector("*:not([data-keep-open]) > dialog[open]").close(),Array.from(document.querySelectorAll(".dialog__wrapper > button")).forEach((u,p)=>{u.removeAttribute("aria-expanded")}),d.hasAttribute("open"))d.close(),E="closePopover",d.removeAttribute("style"),f.removeAttribute("aria-expanded");else{d.show(),f.setAttribute("aria-expanded",!0);var L=f.getBoundingClientRect(),q=L.top,x=L.left;if(f.closest("iam-table")){var k=f.closest("iam-table").parentNode.getBoundingClientRect();q-=k.top,x-=k.left}d.classList.contains("dialog--fix")&&d.setAttribute("style","position:fixed;top: ".concat(q,"px; left: ").concat(x,"px; margin: 3rem 0 0 0;"))}var w=d.getBoundingClientRect(),O=w.bottom-window.scrollY,Y=window.innerHeight-window.scrollY;if(O>Y){var R=d.hasAttribute("style")?d.getAttribute("style")+" ":"";d.setAttribute("style",R+"transform: translate(0, calc(-100% - 4rem))"),w=d.getBoundingClientRect();var F=w.top-window.scrollY;F<100&&d.removeAttribute("style")}window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:E,id:f.textContent})}e&&e.target instanceof HTMLElement&&!e.target.closest("dialog[open]")&&!e.target.closest(".dialog__wrapper > button")&&(document.querySelector(".dialog__wrapper:not([data-keep-open]) > dialog[open]")&&document.querySelector(".dialog__wrapper:not([data-keep-open]) > dialog[open]").close(),Array.from(document.querySelectorAll(".dialog__wrapper:not([data-keep-open]) > button")).forEach((u,p)=>{u.removeAttribute("aria-expanded")}))}),null),v=r=>{if(!r.querySelector(":scope .mh-lg")&&!r.querySelector("iam-multi-step")){r.innerHTML='<div class="mh-lg">'.concat(r.innerHTML,"</div>");var e=r.querySelector(".mh-lg"),a=r.querySelector(".mh-lg :is(.h1,.h2,.h3,.h4,.h5,.h6)");if(a){var t=a.previousSibling;e.before(a),t&&a.before(t)}}r.querySelector(":scope > button:first-child")||r.insertAdjacentHTML("afterbegin",'<button class="dialog__close">Close</button>')};function H(){window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"Pageview",pageTitle:document.title}),document.addEventListener("click",r=>{var e=r.target.closest("[open] summary");if(e)window.dataLayer.push({event:"closeDetails",detailsTitle:e.textContent||""});else{var a=r.target.closest("summary"),t=r.target.closest("a"),o=r.target.closest("button");a&&window.dataLayer.push({event:"openDetails",detailsTitle:a.textContent||""}),t&&window.dataLayer.push({event:"linkClicked",linkText:t.hasAttribute("title")?t.getAttribute("title")||"":t.textContent||"",class:t.hasAttribute("class")&&t.getAttribute("class")||"",href:t.getAttribute("href")||""}),o&&window.dataLayer.push({event:"buttonClicked",buttonText:o.textContent||"",class:o.hasAttribute("class")&&o.getAttribute("class")||""})}})}function D(r){var e=new TextEncoder("utf-8").encode(r);return crypto.subtle.digest("SHA-1",e).then(function(a){for(var t=[],o=new DataView(a),c=0;c<o.byteLength;c+=4){var s=o.getUint32(c),n=s.toString(16),i="00000000",l=(i+n).slice(-i.length);t.push(l)}return t.join("")})}var _=(r,e)=>{D(r).then(function(a){var t=new XMLHttpRequest;t.addEventListener("load",function(){var o=this.responseText.split(`
5
+ `),c=a.slice(5).toUpperCase(),s=!1;for(var n in o)if(o[n].substring(0,35)==c){s=!0;break}var i=new CustomEvent("hibpCheck",{detail:s});e.dispatchEvent(i)}),t.open("GET","https://api.pwnedpasswords.com/range/"+a.substr(0,5)),t.send()})},B=r=>{function e(){if(Array.from(document.querySelectorAll("input[maxlength],textarea[maxlength]")).forEach((t,o)=>{t.parentElement,I(t)}),Array.from(document.querySelectorAll("label input")).forEach((t,o)=>{!t.closest("label").querySelector(".optional-text")&&!t.hasAttribute("required")&&(t.parentNode.tagName.toLowerCase()=="span"?t.parentElement.insertAdjacentHTML("beforebegin",'<span class="optional-text"></span>'):t.insertAdjacentHTML("beforebegin",'<span class="optional-text"></span>'))}),document.querySelector('input[type="date"]')){let t=function(o){var c=o.getFullYear(),s=String(o.getMonth()+1).padStart(2,"0"),n=String(o.getDate()).padStart(2,"0");return"".concat(c,"-").concat(s,"-").concat(n)};var a=new Date;Array.from(document.querySelectorAll('input[type="date"]')).forEach((o,c)=>{var s=a;if(o.hasAttribute("data-start")&&(s.setDate(s.getDate()+parseInt(o.getAttribute("data-start"))),o.setAttribute("min",t(s))),o.hasAttribute("data-period")){var n=parseInt(o.getAttribute("data-period")),i=new Date;i.setDate(s.getDate()+n),o.setAttribute("max",t(i))}if(o.hasAttribute("data-allowed-days")){var l=JSON.parse("[".concat(o.getAttribute("data-allowed-days"),"]"));o.addEventListener("input",function(y){var g=new Date(this.value).getUTCDay();l.includes(g)?o.setCustomValidity(""):o.setCustomValidity("That day of the week is not allowed")})}})}}document.readyState==="complete"&&e(),document.onreadystatechange=()=>{document.readyState==="complete"&&e()},r.addEventListener("input",a=>{if(a&&a.target instanceof HTMLElement&&a.target.closest("input,textarea,select")){var t=a.target.closest("input,textarea,select");t.parentElement,t.hasAttribute("type")&&t.getAttribute("type")=="color"&&(t.nextElementSibling.value=t.value),t.hasAttribute("maxlength")&&t.nextElementSibling&&t.nextElementSibling.setAttribute("data-count",t.value.length),t.hasAttribute("data-strength-checker")&&b(t)}}),r.addEventListener("change",a=>{if(a&&a.target instanceof HTMLElement&&a.target.closest("select")){var t=a.target.closest("select");if(t.hasAttribute("data-change-type")&&t.hasAttribute("data-input")){var o=document.getElementById(t.getAttribute("data-input")),c=t.value;S(o,c)}}if(a&&a.target instanceof HTMLElement&&a.target.closest('dialog [type="radio"]')){var s=a.target.closest("dialog");a.target.closest('dialog [type="radio"]'),Array.from(s.querySelectorAll('[type="radio"][autofocus]')).forEach((n,i)=>{n.removeAttribute("autofocus")}),Array.from(s.querySelectorAll('[type="radio"]:checked')).forEach((n,i)=>{n.setAttribute("autofocus",!0)})}}),r.addEventListener("click",a=>{if(a&&a.target instanceof HTMLElement&&a.target.closest("[data-change-type][data-input]:not(select)")){var t=a.target.closest("[data-change-type]"),o=document.getElementById(t.getAttribute("data-input")),c=t.getAttribute("data-change-type");if(t.setAttribute("data-change-type",o.getAttribute("type")),S(o,c),t.hasAttribute("data-alt-class")){var s=t.getAttribute("data-alt-class");t.setAttribute("data-alt-class",t.getAttribute("class")),t.setAttribute("class",s)}}})},I=r=>{var e=r.parentElement,a=r.getAttribute("maxlength");e.style.setProperty("--maxlength",a);var t=r.nextElementSibling;(!t||t&&t.classList.contains("invalid-feedback"))&&(t=document.createElement("span"),e.insertBefore(t,r.nextSibling)),t.setAttribute("data-count",r.value.length)},S=(r,e)=>{r.hasAttribute("type")&&r.getAttribute("type")=="password"&&r.setAttribute("data-password-type",!0),r.setAttribute("type",e)},b=function(e){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"no",t=document.getElementById(e.getAttribute("data-strength-checker")),o=e.value,c=e.hasAttribute("minlength")?e.getAttribute("minlength"):12,s=1,n=["Very weak","Weak","Average","Strong","Very strong"],i="";if(o.match(/(?=.*[0-9])/)&&(s+=1),o.match(/(?=.*[!,%,&,#,$,^,*,?,_,~,<,>,])/)&&(s+=1),o.match(/(?=.*[a-z])/)&&(s+=1),o.match(/(?=.*[A-Z])/)&&(s+=1),o.length<c&&(s=1,i="(must be at least ".concat(c," characters.)")),s>=3&&a=="no"){let l=function(y,g){y.detail?b(g,"danger"):b(g,"success"),g.removeEventListener("hibpCheck",l)};_(o,e),e.addEventListener("hibpCheck",function(y){l(y,e)})}else s>=3&&a=="danger"&&(s=3,i="(this password is very common)");t&&(s<=3?t.classList.add("invalid-feedback"):t.classList.remove("invalid-feedback"),t.setAttribute("data-strength",s),t.innerHTML="Password strength: ".concat(n[s-1]," ").concat(i))},N=()=>{document.addEventListener("change",r=>{r&&r.target instanceof HTMLElement&&r.target.closest("[data-change-events]")&&A(r.target,r.target.closest("[data-change-events]").getAttribute("data-change-events"))}),document.addEventListener("keyup",r=>{r&&r.target instanceof HTMLElement&&r.target.closest("[data-change-events]")&&A(r.target,r.target.closest("[data-change-events]").getAttribute("data-change-events"))}),document.addEventListener("click",r=>{r&&r.target instanceof HTMLElement&&r.target.closest("[data-click-events]")&&A(r.target,r.target.closest("[data-click-events]").getAttribute("data-click-events"))})},A=(r,e)=>{if(e||(e=r.parentNode.getAttribute("data-change-events")),!e)return!1;Array.from(JSON.parse(e)).forEach((a,t)=>{P(r,a)})},P=(r,e)=>{if("matches"in e)return e.matches=="any"||r.value==e.matches?m(r,e,"if"):m(r,e,"else"),!1;if("in-list"in e){var a=document.querySelector("".concat(e["in-list"],' option[value="').concat(r.value,'"]'));return document.querySelector("".concat(e["in-list"],' option[value="').concat(r.value,'"]'))?m(a,e,"if"):m(a,e,"else"),!1}else"event"in e&&m(r,e,"event")},m=(r,e,a)=>{if(!(a in e))return!1;switch(e[a]){case"hide":if(document.querySelector(e.target)){var t=document.querySelector(e.target);t.classList.add("js-hide"),Array.from(t.querySelectorAll("[data-required]")).forEach((n,i)=>{n.removeAttribute("required")})}break;case"show":if(document.querySelector(e.target)){var o=document.querySelector(e.target);o.classList.remove("js-hide"),Array.from(o.querySelectorAll("[data-required]")).forEach((n,i)=>{n.closest(".js-hide")||n.setAttribute("required","true")})}break;case"populate-form":j(r,e);break;case"dispatchEvent":var c=new Event(e.value);document.querySelector("".concat(e.target)).dispatchEvent(c);break;case"setAttribute":Array.from(document.querySelectorAll("".concat(e.target))).forEach(function(n,i){n.setAttribute(e.attribute,e.value)});break;case"focus":document.querySelector("".concat(e.target)).focus();break;case"removeAttribute":Array.from(document.querySelectorAll("".concat(e.target))).forEach(function(n,i){n.removeAttribute(e.attribute)});break;case"updateValue":document.querySelector("".concat(e.target)).value=e.value?e.value:"";var s=new Event("change");document.querySelector("".concat(e.target)).dispatchEvent(s);break;case"submitForm":document.querySelector("".concat(e.target)).submit();break;case"openLink":document.querySelector("".concat(e.target)).value&&(window.location.href=document.querySelector("".concat(e.target)).value);break}},j=function(e,a){var t=JSON.parse(e.getAttribute("data-values")),o=document.querySelector(a.target);if(!t)return!1;Object.keys(t).forEach((c,s)=>{document.getElementById(c)&&document.getElementById(c).tagName=="SPAN"&&(document.getElementById(c).innerHTML=t[c]),o.querySelector('select[name="'.concat(c,'"] [value="').concat(t[c],'"]'))?(o.querySelector('select[name="'.concat(c,'"]')).value=t[c],e.hasAttribute("data-lock-fields")&&(o.querySelector('select[name="'.concat(c,'"]')).disabled=!0)):o.querySelector('input[name="'.concat(c,'"][type="radio"][value="').concat(t[c],'"]'))?(Array.from(o.querySelectorAll('input[name="'.concat(c,'"][type="radio"]'))).forEach(function(n,i){n.disabled=!0}),o.querySelector('input[name="'.concat(c,'"][type="radio"][value="').concat(t[c],'"]')).checked=!0,o.querySelector('input[name="'.concat(c,'"][type="radio"][value="').concat(t[c],'"]')).disabled=!1):o.querySelector('input[name="'.concat(c,'"]'))&&(o.querySelector('input[name="'.concat(c,'"]')).value=t[c],e.hasAttribute("data-lock-fields")&&o.querySelector('input[name="'.concat(c,'"]')).setAttribute("readonly","true"))})};document.addEventListener("DOMContentLoaded",function(){H(),N(),h(document.body),T(),C(document.body),B(document.body)})});
6
6
  //# sourceMappingURL=scripts.bundle.js.map