@iamproperty/components 7.5.1--beta6 → 7.5.1--beta8

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 (190) hide show
  1. package/assets/css/components/actionbar.component.css +1 -1
  2. package/assets/css/components/actionbar.component.css.map +1 -1
  3. package/assets/css/components/address-lookup.component.css +1 -1
  4. package/assets/css/components/address-lookup.component.css.map +1 -1
  5. package/assets/css/components/applied-filters.css +1 -1
  6. package/assets/css/components/applied-filters.css.map +1 -1
  7. package/assets/css/components/calendar.component.css +1 -1
  8. package/assets/css/components/calendar.component.css.map +1 -1
  9. package/assets/css/components/card.component.css +1 -1
  10. package/assets/css/components/card.component.css.map +1 -1
  11. package/assets/css/components/fileupload.css +1 -1
  12. package/assets/css/components/fileupload.css.map +1 -1
  13. package/assets/css/components/input-range.component.css +1 -0
  14. package/assets/css/components/input-range.component.css.map +1 -0
  15. package/assets/css/components/input.component.css +1 -0
  16. package/assets/css/components/input.component.css.map +1 -0
  17. package/assets/css/components/modal.component.css +1 -0
  18. package/assets/css/components/modal.component.css.map +1 -0
  19. package/assets/css/components/multi-step-modal.component.css +1 -0
  20. package/assets/css/components/multi-step-modal.component.css.map +1 -0
  21. package/assets/css/components/multi-step-modal.global.css +1 -0
  22. package/assets/css/components/multi-step-modal.global.css.map +1 -0
  23. package/assets/css/components/multiselect.css +1 -1
  24. package/assets/css/components/multiselect.css.map +1 -1
  25. package/assets/css/components/nav.component.css +1 -1
  26. package/assets/css/components/nav.component.css.map +1 -1
  27. package/assets/css/components/pagination.css +1 -1
  28. package/assets/css/components/pagination.css.map +1 -1
  29. package/assets/css/components/password.component.css +1 -0
  30. package/assets/css/components/password.component.css.map +1 -0
  31. package/assets/css/components/slider.css +1 -1
  32. package/assets/css/components/slider.css.map +1 -1
  33. package/assets/css/components/tabs.component.css +1 -1
  34. package/assets/css/components/tabs.component.css.map +1 -1
  35. package/assets/css/components/tabs.config.css +1 -1
  36. package/assets/css/components/tabs.config.css.map +1 -1
  37. package/assets/css/core.min.css +1 -1
  38. package/assets/css/core.min.css.map +1 -1
  39. package/assets/css/mobile-core.min.css +1 -1
  40. package/assets/css/mobile-core.min.css.map +1 -1
  41. package/assets/css/mobile.min.css +1 -1
  42. package/assets/css/mobile.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/js/components/accordion/accordion.component.js +1 -1
  46. package/assets/js/components/accordion/accordion.component.min.js +3 -3
  47. package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
  48. package/assets/js/components/actionbar/actionbar.component.js +2 -4
  49. package/assets/js/components/actionbar/actionbar.component.min.js +4 -4
  50. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  51. package/assets/js/components/address-lookup/address-lookup.component.js +45 -0
  52. package/assets/js/components/address-lookup/address-lookup.component.min.js +12 -4
  53. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  54. package/assets/js/components/advanced-select/advanced-select.component.min.js +1 -1
  55. package/assets/js/components/applied-filters/applied-filters.component.js +0 -2
  56. package/assets/js/components/applied-filters/applied-filters.component.min.js +5 -7
  57. package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
  58. package/assets/js/components/barchart/barchart.component.min.js +1 -1
  59. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  60. package/assets/js/components/calendar/calendar.component.min.js +5 -5
  61. package/assets/js/components/card/card.component.min.js +8 -8
  62. package/assets/js/components/card/card.component.min.js.map +1 -1
  63. package/assets/js/components/carousel/carousel.component.min.js +1 -1
  64. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  65. package/assets/js/components/content/content.component.min.js +1 -1
  66. package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
  67. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +1 -1
  68. package/assets/js/components/fileupload/fileupload.component.min.js +4 -4
  69. package/assets/js/components/filter-card/filter-card.component.js +19 -0
  70. package/assets/js/components/filter-card/filter-card.component.min.js +4 -4
  71. package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -1
  72. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  73. package/assets/js/components/header/header.component.min.js +1 -1
  74. package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
  75. package/assets/js/components/input/input.component.js +128 -0
  76. package/assets/js/components/input/input.component.min.js +16 -0
  77. package/assets/js/components/input/input.component.min.js.map +1 -0
  78. package/assets/js/components/input-range/input-range.component.js +62 -0
  79. package/assets/js/components/input-range/input-range.component.min.js +14 -0
  80. package/assets/js/components/input-range/input-range.component.min.js.map +1 -0
  81. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  82. package/assets/js/components/menu/menu.component.min.js +1 -1
  83. package/assets/js/components/milestone/milestone.component.min.js +1 -1
  84. package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
  85. package/assets/js/components/modal/modal.component.js +141 -0
  86. package/assets/js/components/modal/modal.component.min.js +28 -0
  87. package/assets/js/components/modal/modal.component.min.js.map +1 -0
  88. package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
  89. package/assets/js/components/multi-step-modal/multi-step-modal.component.js +233 -0
  90. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +17 -0
  91. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js.map +1 -0
  92. package/assets/js/components/multiselect/multiselect.component.min.js +4 -4
  93. package/assets/js/components/nav/nav.component.min.js +5 -5
  94. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  95. package/assets/js/components/notification/notification.component.min.js +1 -1
  96. package/assets/js/components/pagination/pagination.component.js +0 -1
  97. package/assets/js/components/pagination/pagination.component.min.js +4 -4
  98. package/assets/js/components/pagination/pagination.component.min.js.map +1 -1
  99. package/assets/js/components/password/password.component.js +93 -0
  100. package/assets/js/components/password/password.component.min.js +17 -0
  101. package/assets/js/components/password/password.component.min.js.map +1 -0
  102. package/assets/js/components/rank/rank.component.min.js +1 -1
  103. package/assets/js/components/rankings/rankings.component.min.js +1 -1
  104. package/assets/js/components/record-card/record-card.component.min.js +4 -4
  105. package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
  106. package/assets/js/components/search/search.component.min.js +1 -1
  107. package/assets/js/components/slider/slider.component.min.js +3 -3
  108. package/assets/js/components/split-button/split-button.component.min.js +1 -1
  109. package/assets/js/components/std-address-lookup/std-address-lookup.component.js +2 -0
  110. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +18 -8
  111. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
  112. package/assets/js/components/table/table.component.min.js +4 -4
  113. package/assets/js/components/table/table.component.min.js.map +1 -1
  114. package/assets/js/components/table-ajax/table-ajax.component.min.js +4 -4
  115. package/assets/js/components/table-ajax/table-ajax.component.min.js.map +1 -1
  116. package/assets/js/components/table-basic/table-basic.component.min.js +2 -2
  117. package/assets/js/components/table-basic/table-basic.component.min.js.map +1 -1
  118. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
  119. package/assets/js/components/table-no-submit/table-no-submit.component.min.js.map +1 -1
  120. package/assets/js/components/table-submit/table-submit.component.min.js +2 -2
  121. package/assets/js/components/table-submit/table-submit.component.min.js.map +1 -1
  122. package/assets/js/components/tabs/tabs.component.min.js +2 -2
  123. package/assets/js/components/video-card/video-card.component.min.js +4 -4
  124. package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
  125. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  126. package/assets/js/modules/applied-filters.js +80 -62
  127. package/assets/js/modules/card.module.js +6 -1
  128. package/assets/js/modules/dialogs.js +6 -2
  129. package/assets/js/modules/password.js +72 -0
  130. package/assets/js/modules/table.js +103 -32
  131. package/assets/js/scripts.bundle.js +2 -3
  132. package/assets/js/scripts.bundle.js.map +1 -1
  133. package/assets/js/scripts.bundle.min.js +2 -2
  134. package/assets/js/scripts.bundle.min.js.map +1 -1
  135. package/assets/js/scripts.js +0 -2
  136. package/assets/sass/_components.scss +2 -0
  137. package/assets/sass/_elements.scss +2 -0
  138. package/assets/sass/components/actionbar.component.scss +1 -0
  139. package/assets/sass/components/address-lookup.component.scss +20 -0
  140. package/assets/sass/components/applied-filters.scss +10 -14
  141. package/assets/sass/components/input-range.component.scss +38 -0
  142. package/assets/sass/components/input.component.scss +102 -0
  143. package/assets/sass/components/modal.component.scss +269 -0
  144. package/assets/sass/components/multi-step-modal.component.scss +255 -0
  145. package/assets/sass/components/multi-step-modal.global.scss +92 -0
  146. package/assets/sass/components/password.component.scss +60 -0
  147. package/assets/sass/components/tabs.config.scss +2 -2
  148. package/assets/sass/elements/badge-tag.scss +0 -1
  149. package/assets/sass/elements/details.scss +12 -7
  150. package/assets/sass/elements/dialog.scss +46 -5
  151. package/assets/sass/elements/forms.scss +41 -177
  152. package/assets/sass/elements/hr.scss +1 -1
  153. package/assets/sass/elements/modal.scss +19 -21
  154. package/assets/sass/elements/prefix.scss +115 -0
  155. package/assets/ts/components/accordion/accordion.component.ts +1 -1
  156. package/assets/ts/components/actionbar/actionbar.component.ts +3 -10
  157. package/assets/ts/components/address-lookup/address-lookup.component.ts +60 -0
  158. package/assets/ts/components/applied-filters/applied-filters.component.ts +0 -2
  159. package/assets/ts/components/filter-card/filter-card.component.ts +27 -0
  160. package/assets/ts/components/input/input.component.ts +168 -0
  161. package/assets/ts/components/input-range/input-range.component.ts +78 -0
  162. package/assets/ts/components/modal/modal.component.ts +188 -0
  163. package/assets/ts/components/multi-step-modal/multi-step-modal.component.ts +304 -0
  164. package/assets/ts/components/pagination/pagination.component.ts +0 -2
  165. package/assets/ts/components/password/password.component.ts +118 -0
  166. package/assets/ts/components/std-address-lookup/std-address-lookup.component.ts +2 -1
  167. package/assets/ts/modules/applied-filters.ts +110 -71
  168. package/assets/ts/modules/card.module.ts +9 -4
  169. package/assets/ts/modules/dialogs.ts +6 -2
  170. package/assets/ts/modules/password.ts +82 -0
  171. package/assets/ts/modules/table.ts +102 -12
  172. package/assets/ts/scripts.ts +2 -2
  173. package/dist/components.es.js +641 -959
  174. package/dist/components.umd.js +275 -182
  175. package/package.json +2 -2
  176. package/src/components/Input/Input.vue +19 -363
  177. package/src/components/InputRange/InputRange.vue +22 -0
  178. package/src/components/Modal/Modal.vue +22 -0
  179. package/src/components/MultiStepModal/MultiStepModal.vue +23 -0
  180. package/src/components/{PasswordIndicator/PasswordIndicator.vue → Password/Password.vue} +23 -23
  181. package/assets/js/components/password-indicator/password-indicator.component.js +0 -19
  182. package/assets/js/components/password-indicator/password-indicator.component.min.js +0 -7
  183. package/assets/js/components/password-indicator/password-indicator.component.min.js.map +0 -1
  184. package/assets/js/modules/form.js +0 -125
  185. package/assets/js/modules/inputs.js +0 -151
  186. package/assets/js/modules/password-indicator.js +0 -21
  187. package/assets/ts/components/password-indicator/password-indicator.component.ts +0 -24
  188. package/assets/ts/modules/form.ts +0 -166
  189. package/assets/ts/modules/inputs.ts +0 -181
  190. package/assets/ts/modules/password-indicator.ts +0 -29
@@ -34,6 +34,14 @@ class iamAddressLookup extends HTMLElement {
34
34
  <link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous" />
35
35
  <div class="wrapper">
36
36
 
37
+ <div class="matched d-none">
38
+ <div class="inner">
39
+ <p><span class="matched-address"></span></p>
40
+ <button class="link use-matched">Yes, use this address</button>
41
+ <button class="link use-entered">No, use the address I entered</button>
42
+ </div>
43
+ <span class="invalid-feedback">We found a matching address based on the details you entered. Is this address correct?</span>
44
+ </div>
37
45
  <div class="postcode-lookup was-validated">
38
46
  <div>
39
47
  <label class="mb-1"><span class="title text-lowercase"></span>
@@ -101,6 +109,11 @@ class iamAddressLookup extends HTMLElement {
101
109
  let pageNumber = 1;
102
110
  const atleastone = this.querySelector('.atleastone');
103
111
 
112
+ const matchedAddress = this.shadowRoot.querySelector('.matched-address');
113
+ const matchedAddressWrapper = this.shadowRoot.querySelector('.matched');
114
+ const matchedAddressUse = this.shadowRoot.querySelector('.matched .use-matched');
115
+ const matchedAddressEntered = this.shadowRoot.querySelector('.matched .use-entered');
116
+
104
117
  Array.from(this.shadowRoot.querySelectorAll('.title')).forEach((titleElement) => {
105
118
  titleElement.innerHTML = title;
106
119
  });
@@ -588,6 +601,53 @@ class iamAddressLookup extends HTMLElement {
588
601
  });
589
602
  // #endregion
590
603
 
604
+ // #region Matched address
605
+
606
+ if(this.hasAttribute('data-matched')){
607
+
608
+ matchedAddressWrapper?.classList.remove('d-none');
609
+
610
+
611
+ if(this.hasAttribute('data-matched-label'))
612
+ matchedAddress?.innerHTML = this.getAttribute('data-matched-label');
613
+
614
+ matchedAddressEntered?.addEventListener('click', () => {
615
+
616
+ matchedAddressWrapper?.remove();
617
+
618
+ const useCheckbox = this.shadowRoot?.querySelector('[name="use"]');
619
+ useCheckbox.checked = true;
620
+
621
+ lookupWrapper.classList.add('js-hide');
622
+ manualWrapper.classList.remove('js-hide');
623
+
624
+ const values = JSON.parse(this.getAttribute('data-use'));
625
+
626
+ Object.keys(values).forEach((key) => {
627
+ const value = values[key];
628
+ if (this.querySelector(`[data-name="${key}"]`)) this.querySelector(`[data-name="${key}"]`).value = value;
629
+ else if (this.querySelector(`[name="${key}"]`)) this.querySelector(`[name="${key}"]`).value = value;
630
+ });
631
+
632
+ checkFilled(this);
633
+ });
634
+
635
+
636
+ matchedAddressUse?.addEventListener('click', () => {
637
+
638
+ matchedAddressWrapper?.remove();
639
+
640
+ const values = JSON.parse(this.getAttribute('data-matched'));
641
+
642
+ fillInputs(values);
643
+ checkFilled(this);
644
+ });
645
+ }
646
+ else {
647
+ matchedAddressWrapper?.remove();
648
+ }
649
+ // #endregion
650
+
591
651
  advancedSelect(this, lookup, list, true);
592
652
  }
593
653
  }
@@ -21,9 +21,7 @@ class iamAppliedFilters extends HTMLElement {
21
21
  const template = document.createElement('template');
22
22
  template.innerHTML = `
23
23
  <style>
24
-
25
24
  ${loadCSS}
26
-
27
25
  </style>
28
26
  <div class="applied-filters ${classList}"></div>
29
27
  <slot></slot>
@@ -74,6 +74,33 @@ class iamFilerCard extends HTMLElement {
74
74
 
75
75
  trackComponent(cardComponent, 'iam-filter-card', ['select-card', 'unselect-card']);
76
76
  }
77
+
78
+ static get observedAttributes(): any {
79
+ return ['data-total'];
80
+ }
81
+
82
+ attributeChangedCallback(attrName, oldVal, newVal): void {
83
+
84
+
85
+
86
+ switch (attrName) {
87
+ case 'data-total': {
88
+ if (oldVal != newVal) {
89
+
90
+ const cardBody = this.shadowRoot.querySelector('.card__body');
91
+
92
+ if(!cardBody?.querySelector('.card__total'))
93
+ cardBody.insertAdjacentHTML('beforeend',`<div class="card__total">${newVal}</div>`);
94
+ else {
95
+ cardBody?.querySelector('.card__total')?.innerHTML = newVal;
96
+ }
97
+
98
+
99
+ }
100
+ break;
101
+ }
102
+ }
103
+ }
77
104
  }
78
105
 
79
106
  export default iamFilerCard;
@@ -0,0 +1,168 @@
1
+ import { trackComponent, trackComponentRegistered } from '../_global';
2
+
3
+ trackComponentRegistered('iam-iamPrefix');
4
+ class iamInput extends HTMLElement {
5
+ constructor() {
6
+ super();
7
+ this.attachShadow({ mode: 'open' });
8
+
9
+ const assetLocation = document.body.hasAttribute('data-assets-location')
10
+ ? document.body.getAttribute('data-assets-location')
11
+ : '/assets';
12
+
13
+ const loadCSS = `@import "${assetLocation}/css/components/input.component.css";`;
14
+
15
+ const template = document.createElement('template');
16
+ template.innerHTML = `
17
+ <style>
18
+ ${loadCSS}
19
+ </style>
20
+ <link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous">
21
+ <div class="wrapper" part="wrapper">
22
+ <span part="prefix"><slot name="prefix"></slot></span>
23
+ <slot></slot>
24
+ <slot part="suffix"><slot name="suffix"></slot></slot>
25
+ </div>
26
+ `;
27
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
28
+ }
29
+
30
+ connectedCallback(): void {
31
+
32
+ const component = this;
33
+ const input = this.querySelector('input');
34
+ const inputType = input?.hasAttribute('type') ? input?.getAttribute('type') : 'text';
35
+ const prefixIcon = this.shadowRoot?.querySelector('[part="prefix"]');
36
+ const suffixIcon = this.shadowRoot?.querySelector('[part="suffix"]');
37
+
38
+
39
+ if(this.closest('label'))
40
+ this.classList.add('mb-0');
41
+
42
+
43
+ const setIcon = (inputType) => {
44
+
45
+ // Pre set the icons
46
+ switch (inputType) {
47
+ case "date":
48
+ case "datetime-local":
49
+ case "year":
50
+ case "month":
51
+ case "week":
52
+ this.setAttribute('data-suffix-icon','calendar') ;
53
+ suffixIcon?.setAttribute('role','button');
54
+ break;
55
+ case "time":
56
+ this.setAttribute('data-suffix-icon','clock') ;
57
+ suffixIcon?.setAttribute('role','button');
58
+ break;
59
+ default:
60
+ this.removeAttribute('data-suffix-icon') ;
61
+ suffixIcon?.removeAttribute('role');
62
+ break;
63
+ }
64
+ }
65
+ setIcon(inputType);
66
+
67
+ // Colour input field
68
+ if(input?.matches('[type="color"]')){
69
+ this.insertAdjacentHTML('beforeend', `<output></output>`);
70
+
71
+ input.addEventListener('input', () => {
72
+
73
+ input.nextElementSibling.value = input.value;
74
+ });
75
+ }
76
+
77
+
78
+ if(this.hasAttribute('data-prefix-icon')){
79
+ prefixIcon?.className = `prefix fa-${this.hasAttribute('data-prefix-weight') ? this.getAttribute('data-prefix-weight') : 'regular'} fa-${this.getAttribute('data-prefix-icon')}`;
80
+ this.querySelector('input')?.classList.add('has-prefix');
81
+ }
82
+ if(this.hasAttribute('data-suffix-icon')){
83
+ suffixIcon?.className = `suffix fa-${this.hasAttribute('data-suffix-weight') ? this.getAttribute('data-suffix-weight') : 'regular'} fa-${this.getAttribute('data-suffix-icon')}`;
84
+ this.querySelector('input')?.classList.add('has-suffix');
85
+ }
86
+
87
+ if(this.shadowRoot.querySelector('[name="prefix"]')?.assignedElements().length){
88
+ this.shadowRoot.querySelector('[name="prefix"]')?.classList.add('prefix');
89
+ this.querySelector('input')?.classList.add('has-prefix');
90
+ }
91
+
92
+ if(this.shadowRoot.querySelector('[name="suffix"]')?.assignedElements().length){
93
+ this.shadowRoot.querySelector('[name="suffix"]')?.classList.add('suffix');
94
+ this.querySelector('input')?.classList.add('has-suffix');
95
+ }
96
+
97
+
98
+ // Change type
99
+
100
+ if(this.querySelector('[data-change-type]')){
101
+ const select = this.querySelector('[data-change-type]');
102
+
103
+ select.addEventListener('change', () => {
104
+
105
+ input.setAttribute('type', select.value);
106
+
107
+ setIcon(select.value);
108
+ if(this.getAttribute('data-suffix-icon')){
109
+
110
+ suffixIcon?.className = `suffix fa-${this.hasAttribute('data-suffix-weight') ? this.getAttribute('data-suffix-weight') : 'regular'} fa-${this.getAttribute('data-suffix-icon')}`;
111
+ input?.classList.add('has-suffix');
112
+ }
113
+ else {
114
+ suffixIcon?.removeAttribute('class');
115
+ input?.classList.remove('has-suffix');
116
+ }
117
+ });
118
+ }
119
+
120
+
121
+
122
+ // #region Date restrictions
123
+ const today = new Date();
124
+
125
+ function formatDate(date, type = "date"): string {
126
+ const year = date.getFullYear();
127
+ const month = String(date.getMonth() + 1).padStart(2, '0');
128
+ const day = String(date.getDate()).padStart(2, '0');
129
+
130
+ if(type == "datetime-local")
131
+ return `${year}-${month}-${day}T00:00:00`;
132
+
133
+ return `${year}-${month}-${day}`;
134
+ }
135
+
136
+ const checkDayAllowed = (input,allowedDays) => {
137
+
138
+ const day = new Date(input.value).getUTCDay();
139
+
140
+ if (allowedDays.includes(day)) input.setCustomValidity('');
141
+ else input.setCustomValidity('That day of the week is not allowed');
142
+ }
143
+
144
+ if(input?.matches('[type="date"], [type="datetime-local"]') && this.hasAttribute('data-allowed-days')){
145
+ const allowedDays = JSON.parse(`[${this.getAttribute('data-allowed-days')}]`);
146
+
147
+ checkDayAllowed(input,allowedDays);
148
+ input.addEventListener('input', () => { checkDayAllowed(input,allowedDays); });
149
+ }
150
+ // #endregion
151
+
152
+ suffixIcon.addEventListener('click', function () {
153
+
154
+ if(!component?.querySelector('select[data-change-type][slot="suffix"]'))
155
+ input.showPicker();
156
+ });
157
+
158
+ prefixIcon.addEventListener('click', function () {
159
+
160
+ if(!component?.querySelector('select[data-change-type][slot="prefix"]'))
161
+ input.showPicker();
162
+ });
163
+
164
+
165
+ }
166
+ }
167
+
168
+ export default iamInput;
@@ -0,0 +1,78 @@
1
+ import { trackComponent, trackComponentRegistered } from '../_global';
2
+
3
+ trackComponentRegistered('iam-iamPrefix');
4
+ class iamDaterange extends HTMLElement {
5
+ constructor() {
6
+ super();
7
+ this.attachShadow({ mode: 'open' });
8
+
9
+ const assetLocation = document.body.hasAttribute('data-assets-location')
10
+ ? document.body.getAttribute('data-assets-location')
11
+ : '/assets';
12
+
13
+ const loadCSS = `@import "${assetLocation}/css/components/input-range.component.css";`;
14
+
15
+ const template = document.createElement('template');
16
+ template.innerHTML = `
17
+ <style>
18
+ ${loadCSS}
19
+ </style>
20
+ <link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous">
21
+ <div class="wrapper" part="wrapper">
22
+ <slot></slot>
23
+ </div>
24
+ `;
25
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
26
+ }
27
+
28
+ connectedCallback(): void {
29
+
30
+ const inputs = this.querySelectorAll('input,select');
31
+
32
+ if(inputs.length > 1){
33
+
34
+ const setMinMax = ():void => {
35
+
36
+ const min = inputs[0].value;
37
+ let max = inputs[1].value;
38
+
39
+ // Make sure the second input/select is always higher than the first input/select
40
+ if(parseInt(inputs[1].value) < parseInt(inputs[0].value)){
41
+ max = min;
42
+ inputs[1].value = min;
43
+ }
44
+
45
+ // First input/select
46
+ if(inputs[0].matches('input'))
47
+ inputs[0].setAttribute('max',max);
48
+
49
+ if(inputs[0].matches('select')){
50
+ Array.from(inputs[0].querySelectorAll('option')).forEach((option) => {
51
+
52
+ if (parseInt(option.getAttribute('value')) > max) option.classList.add('d-none');
53
+ else option.classList.remove('d-none');
54
+ });
55
+ }
56
+
57
+ // Second input/select
58
+ if(inputs[1].matches('input'))
59
+ inputs[1].setAttribute('min',min);
60
+
61
+ Array.from(inputs[1].querySelectorAll('option')).forEach((option) => {
62
+
63
+ if (parseInt(option.getAttribute('value')) < min) option.classList.add('d-none');
64
+ else option.classList.remove('d-none');
65
+ });
66
+ }
67
+ setMinMax();
68
+
69
+ this.addEventListener('change', () => {
70
+
71
+ setMinMax();
72
+ });
73
+ }
74
+
75
+ }
76
+ }
77
+
78
+ export default iamDaterange;
@@ -0,0 +1,188 @@
1
+ import { trackComponent, trackComponentRegistered } from '../_global';
2
+ import { cardHTML, setupCard } from '../../modules/card.module';
3
+ import iamMenu from '../menu/menu.component';
4
+ import Modal from '../../../../src/components/Modal/Modal.vue';
5
+
6
+ trackComponentRegistered('iam-card');
7
+
8
+ class iamModal extends HTMLElement {
9
+ constructor() {
10
+ super();
11
+ this.attachShadow({ mode: 'open' });
12
+
13
+ const assetLocation = document.body.hasAttribute('data-assets-location')
14
+ ? document.body.getAttribute('data-assets-location')
15
+ : '/assets';
16
+ const loadCSS = `@import "${assetLocation}/css/components/modal.component.css";`;
17
+
18
+ const template = document.createElement('template');
19
+ template.innerHTML = `
20
+ <style>
21
+ ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
22
+
23
+ ${loadCSS}
24
+ </style>
25
+ <link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous" />
26
+ <dialog>
27
+ <button class="btn btn-compact btn-secondary fa-xmark-large" data-close>Close</button>
28
+ <div class="scroll">
29
+ <i class="fa-light fa-circle" aria-hidden="true">
30
+ <i class="fa-regular fa-${this.hasAttribute('data-icon') ? this.getAttribute('data-icon') : 'info'}" aria-hidden="true"></i>
31
+ </i>
32
+ <slot></slot>
33
+ <div class="btn-group">
34
+ <button class="btn btn-secondary" data-cancel>Cancel</button>
35
+ <slot name="agreed-button">
36
+ <button class="btn btn-primary" data-agreed>${this.hasAttribute('data-agreed-text') ? this.getAttribute('data-agreed-text') : 'Ok'}</button>
37
+ </slot>
38
+ </div>
39
+ </div>
40
+ </dialog>
41
+ `;
42
+
43
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
44
+ }
45
+
46
+ connectedCallback(): void {
47
+
48
+ const originalDialog = this.querySelector('dialog');
49
+
50
+ const id = this.hasAttribute('id') ? this.getAttribute('id') : originalDialog?.getAttribute('id');
51
+ const dialog = this.shadowRoot?.querySelector('dialog');
52
+ const closeButton = this.shadowRoot?.querySelector('[data-close]');
53
+ const cancelButton = this.shadowRoot?.querySelector('[data-cancel]');
54
+ const agreedButton = this.shadowRoot?.querySelector('[data-agreed]');
55
+ const slottedAgreedButton = this.querySelector('button[slot="agreed-button"]');
56
+ const modalType = this.hasAttribute('data-type') ? this.getAttribute('data-type') : 'passive';
57
+
58
+
59
+
60
+
61
+ const openModal = () => {
62
+ dialog?.showModal();
63
+ dialog?.focus();
64
+
65
+ const closeEvent = new CustomEvent('modal-opened', {
66
+ bubbles: true,
67
+ cancelable: true,
68
+ detail: { modalId: id },
69
+ });
70
+
71
+ this.dispatchEvent(closeEvent);
72
+
73
+ window.dataLayer = window.dataLayer || [];
74
+ window.dataLayer.push({
75
+ event: 'openModal',
76
+ id: id,
77
+ });
78
+ }
79
+
80
+ document.addEventListener('click', (e) => {
81
+
82
+ if(e.target.matches(`[command="show-modal"][commandfor="${id}"]`) || e.target.matches(`[data-modal="${id}"]`)){
83
+ openModal();
84
+ }
85
+ });
86
+
87
+ // Disable the original event
88
+ originalDialog?.addEventListener('command', (e) => {
89
+
90
+ if (event.command == "show-modal") {
91
+ e.preventDefault();
92
+ }
93
+ });
94
+
95
+ originalDialog?.addEventListener('command', (e) => {
96
+
97
+ if (event.command == "close") {
98
+ closeModal();
99
+ }
100
+ });
101
+
102
+ originalDialog?.addEventListener('close', (e) => {
103
+
104
+ closeModal();
105
+ });
106
+
107
+ // Move the submit button so that the slot functionality works
108
+ Array.from(originalDialog?.querySelectorAll('[slot]')).forEach((element) => {
109
+ this.moveBefore(element, originalDialog);
110
+ });
111
+
112
+ const closeModal = () => {
113
+ dialog?.close();
114
+
115
+ const closeEvent = new CustomEvent('modal-closed', {
116
+ bubbles: true,
117
+ cancelable: true,
118
+ detail: { modalId: id },
119
+ });
120
+
121
+ this.dispatchEvent(closeEvent);
122
+
123
+ window.dataLayer = window.dataLayer || [];
124
+ window.dataLayer.push({
125
+ event: 'closeModal',
126
+ id: id,
127
+ });
128
+ }
129
+
130
+ closeButton?.addEventListener('click', () => {
131
+ closeModal();
132
+ });
133
+
134
+ cancelButton?.addEventListener('click', () => {
135
+ closeModal();
136
+ });
137
+
138
+ agreedButton?.addEventListener('click', () => {
139
+
140
+ const agreedEvent = new CustomEvent('agreed', {
141
+ detail: { modalId: id },
142
+ });
143
+
144
+ this.dispatchEvent(agreedEvent);
145
+
146
+ closeModal();
147
+ });
148
+
149
+ slottedAgreedButton?.addEventListener('click', () => {
150
+
151
+ const agreedEvent = new CustomEvent('agreed', {
152
+ detail: { modalId: id },
153
+ });
154
+
155
+ this.dispatchEvent(agreedEvent);
156
+
157
+ closeModal();
158
+ });
159
+
160
+ this.addEventListener('close-modal', () => {
161
+ closeModal();
162
+ });
163
+
164
+ this.addEventListener('click', (event) => {
165
+
166
+ // Small fix to make sure the dialog isn't a dialog inside of a dialog.
167
+ const style = window.getComputedStyle(dialog);
168
+ if (style.display === 'contents') dialog = dialog.parentNode.closest('dialog[open]');
169
+
170
+ // Dont allow the backdrop to be clicked when transactional
171
+ if (modalType != 'transactional' && modalType != 'acknowledgement') {
172
+ const dialogDimensions = dialog.getBoundingClientRect();
173
+
174
+ if (
175
+ event.clientX < dialogDimensions.left ||
176
+ event.clientX > dialogDimensions.right ||
177
+ event.clientY < dialogDimensions.top ||
178
+ event.clientY > dialogDimensions.bottom
179
+ ) {
180
+ if (!event.target.closest('dialog *'))
181
+ closeModal(); // Weird bug when interacting with radio input fields within dialogs cuases it to close
182
+ }
183
+ }
184
+ });
185
+ }
186
+ }
187
+
188
+ export default iamModal;