@iamproperty/components 7.5.1--beta5 → 7.5.1--beta7

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 (196) 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.js +1 -1
  93. package/assets/js/components/multiselect/multiselect.component.min.js +5 -5
  94. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  95. package/assets/js/components/nav/nav.component.min.js +5 -5
  96. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  97. package/assets/js/components/notification/notification.component.min.js +1 -1
  98. package/assets/js/components/pagination/pagination.component.min.js +3 -3
  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.js +1 -1
  107. package/assets/js/components/search/search.component.min.js +5 -5
  108. package/assets/js/components/search/search.component.min.js.map +1 -1
  109. package/assets/js/components/slider/slider.component.min.js +3 -3
  110. package/assets/js/components/split-button/split-button.component.min.js +1 -1
  111. package/assets/js/components/std-address-lookup/std-address-lookup.component.js +5 -1
  112. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +22 -9
  113. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
  114. package/assets/js/components/table/table.component.min.js +3 -3
  115. package/assets/js/components/table/table.component.min.js.map +1 -1
  116. package/assets/js/components/table-ajax/table-ajax.component.min.js +4 -4
  117. package/assets/js/components/table-ajax/table-ajax.component.min.js.map +1 -1
  118. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  119. package/assets/js/components/table-basic/table-basic.component.min.js.map +1 -1
  120. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
  121. package/assets/js/components/table-no-submit/table-no-submit.component.min.js.map +1 -1
  122. package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
  123. package/assets/js/components/table-submit/table-submit.component.min.js.map +1 -1
  124. package/assets/js/components/tabs/tabs.component.min.js +2 -2
  125. package/assets/js/components/video-card/video-card.component.min.js +4 -4
  126. package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
  127. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  128. package/assets/js/modules/applied-filters.js +78 -61
  129. package/assets/js/modules/card.module.js +6 -1
  130. package/assets/js/modules/dialogs.js +6 -2
  131. package/assets/js/modules/password.js +72 -0
  132. package/assets/js/modules/table.js +10 -6
  133. package/assets/js/scripts.bundle.js +2 -3
  134. package/assets/js/scripts.bundle.js.map +1 -1
  135. package/assets/js/scripts.bundle.min.js +2 -2
  136. package/assets/js/scripts.bundle.min.js.map +1 -1
  137. package/assets/js/scripts.js +0 -2
  138. package/assets/js/tests/helpers.spec.js +54 -1
  139. package/assets/sass/_components.scss +2 -0
  140. package/assets/sass/_elements.scss +2 -0
  141. package/assets/sass/components/actionbar.component.scss +1 -0
  142. package/assets/sass/components/address-lookup.component.scss +24 -0
  143. package/assets/sass/components/applied-filters.scss +10 -14
  144. package/assets/sass/components/input-range.component.scss +38 -0
  145. package/assets/sass/components/input.component.scss +102 -0
  146. package/assets/sass/components/modal.component.scss +269 -0
  147. package/assets/sass/components/multi-step-modal.component.scss +255 -0
  148. package/assets/sass/components/multi-step-modal.global.scss +92 -0
  149. package/assets/sass/components/multiselect.scss +2 -2
  150. package/assets/sass/components/password.component.scss +60 -0
  151. package/assets/sass/components/tabs.config.scss +2 -2
  152. package/assets/sass/elements/badge-tag.scss +0 -1
  153. package/assets/sass/elements/details.scss +12 -7
  154. package/assets/sass/elements/dialog.scss +46 -5
  155. package/assets/sass/elements/forms.scss +41 -177
  156. package/assets/sass/elements/hr.scss +1 -1
  157. package/assets/sass/elements/modal.scss +19 -21
  158. package/assets/sass/elements/prefix.scss +115 -0
  159. package/assets/ts/components/accordion/accordion.component.ts +1 -1
  160. package/assets/ts/components/actionbar/actionbar.component.ts +3 -10
  161. package/assets/ts/components/address-lookup/address-lookup.component.ts +60 -0
  162. package/assets/ts/components/applied-filters/applied-filters.component.ts +0 -2
  163. package/assets/ts/components/filter-card/filter-card.component.ts +27 -0
  164. package/assets/ts/components/input/input.component.ts +168 -0
  165. package/assets/ts/components/input-range/input-range.component.ts +78 -0
  166. package/assets/ts/components/modal/modal.component.ts +188 -0
  167. package/assets/ts/components/multi-step-modal/multi-step-modal.component.ts +304 -0
  168. package/assets/ts/components/multiselect/multiselect.component.ts +1 -1
  169. package/assets/ts/components/password/password.component.ts +118 -0
  170. package/assets/ts/components/search/search.component.ts +1 -1
  171. package/assets/ts/components/std-address-lookup/std-address-lookup.component.ts +5 -3
  172. package/assets/ts/modules/applied-filters.ts +107 -71
  173. package/assets/ts/modules/card.module.ts +9 -4
  174. package/assets/ts/modules/dialogs.ts +6 -2
  175. package/assets/ts/modules/password.ts +82 -0
  176. package/assets/ts/modules/table.ts +13 -6
  177. package/assets/ts/scripts.ts +2 -2
  178. package/assets/ts/tests/helpers.spec.ts +100 -1
  179. package/dist/components.es.js +641 -959
  180. package/dist/components.umd.js +281 -182
  181. package/package.json +2 -2
  182. package/src/components/Input/Input.vue +19 -363
  183. package/src/components/InputRange/InputRange.vue +22 -0
  184. package/src/components/Modal/Modal.vue +22 -0
  185. package/src/components/MultiStepModal/MultiStepModal.vue +23 -0
  186. package/src/components/{PasswordIndicator/PasswordIndicator.vue → Password/Password.vue} +23 -23
  187. package/assets/js/components/password-indicator/password-indicator.component.js +0 -19
  188. package/assets/js/components/password-indicator/password-indicator.component.min.js +0 -7
  189. package/assets/js/components/password-indicator/password-indicator.component.min.js.map +0 -1
  190. package/assets/js/modules/form.js +0 -125
  191. package/assets/js/modules/inputs.js +0 -151
  192. package/assets/js/modules/password-indicator.js +0 -21
  193. package/assets/ts/components/password-indicator/password-indicator.component.ts +0 -24
  194. package/assets/ts/modules/form.ts +0 -166
  195. package/assets/ts/modules/inputs.ts +0 -181
  196. package/assets/ts/modules/password-indicator.ts +0 -29
@@ -8,8 +8,12 @@ $darkMode: 'true' !default;
8
8
  @include layer('elements', $layers) {
9
9
  // #region modal styling
10
10
 
11
- *:not(.dialog__wrapper) > dialog[open] {
12
- overflow-y: hidden;
11
+ *:not(.dialog__wrapper) > dialog[open] { // change this selector to be a dialog without a popover attribute
12
+
13
+
14
+ &:has(.mh-lg){
15
+ overflow-y: hidden!important;
16
+ }
13
17
  width: 90vw;
14
18
  max-width: rem(324); // col-width*4
15
19
 
@@ -17,6 +21,19 @@ $darkMode: 'true' !default;
17
21
  max-height: min(90vh, #{rem(752)});
18
22
  overscroll-behavior: contain;
19
23
 
24
+ @include media-breakpoint-up(sm, $mobileOnly) {
25
+ --dialog-padding: #{rem(32)};
26
+ min-width: rem(335);
27
+ width: fit-content;
28
+ max-width: rem(686);
29
+ }
30
+
31
+ @include media-breakpoint-up(md, $mobileOnly) {
32
+ min-width: rem(454);
33
+ width: fit-content;
34
+ max-width: rem(736);
35
+ }
36
+
20
37
  // Close button
21
38
  > form:first-child {
22
39
  position: static;
@@ -83,19 +100,6 @@ $darkMode: 'true' !default;
83
100
  }
84
101
  }
85
102
 
86
- @include media-breakpoint-up(sm, $mobileOnly) {
87
- --dialog-padding: #{rem(32)};
88
- min-width: rem(335);
89
- width: fit-content;
90
- max-width: rem(686);
91
- }
92
-
93
- @include media-breakpoint-up(md, $mobileOnly) {
94
- min-width: rem(454);
95
- width: fit-content;
96
- max-width: rem(736);
97
- }
98
-
99
103
  &:has(.youtube-embed) {
100
104
  padding: 0 !important;
101
105
  }
@@ -134,12 +138,6 @@ $darkMode: 'true' !default;
134
138
  }
135
139
  }
136
140
  }
137
-
138
- dialog::backdrop {
139
- background: rgba(0, 0, 0, 0.3);
140
- backdrop-filter: blur(4px);
141
- overscroll-behavior: contain;
142
- }
143
141
  // #endregion
144
142
 
145
143
  // #region Transactional
@@ -0,0 +1,115 @@
1
+ @use 'sass:map';
2
+ @use 'sass:math';
3
+
4
+ @use '../_func' as *;
5
+
6
+
7
+ @layer elements{
8
+ :is(.prefix, .suffix) {
9
+ display: none;
10
+ }
11
+
12
+ :is(.prefix, .suffix) {
13
+ --fa-display: flex;
14
+ display: inline-block;
15
+ display: flex;
16
+ flex-direction: column;
17
+ justify-content: center;
18
+ align-items: center;
19
+ width: auto;
20
+ padding: 0 rem(12);
21
+ font-size: var(--input-fs, #{rem(16)});
22
+ line-height: var(--input-lh, #{rem(20)});
23
+ color: var(--colour-body);
24
+ background-color: var(--colour-primary-theme);
25
+ border: 2px solid var(--colour-primary);
26
+ color: var(--colour-white);
27
+ margin: 0 !important;
28
+ //margin-bottom: 1rem;
29
+ border-end-start-radius: rem(8);
30
+ border-start-start-radius: rem(8);
31
+ min-width: calc(#{rem(20 + 12 + 12)} + 4px);
32
+ overflow: hidden;
33
+ white-space: nowrap;
34
+ text-align: center;
35
+ text-overflow: ellipsis;
36
+ position: relative;
37
+ height: stretch;
38
+
39
+ flex-shrink: 0;
40
+
41
+ &:after {
42
+ display: inline-block;
43
+ max-width: rem(20);
44
+ }
45
+
46
+ &[class*='fa-'] {
47
+ width: calc(#{rem(20 + 12 + 12)} + 4px);
48
+ padding-inline: 0;
49
+ }
50
+
51
+ select {
52
+ position: absolute;
53
+ inset: 0;
54
+ opacity: 0;
55
+ cursor: pointer;
56
+ }
57
+
58
+ span {
59
+ display: none;
60
+ }
61
+
62
+ select:has(option:nth-child(1):checked) ~ span:nth-of-type(1),
63
+ select:has(option:nth-child(2):checked) ~ span:nth-of-type(2),
64
+ select:has(option:nth-child(3):checked) ~ span:nth-of-type(3),
65
+ select:has(option:nth-child(4):checked) ~ span:nth-of-type(4),
66
+ select:has(option:nth-child(5):checked) ~ span:nth-of-type(5),
67
+ select:has(option:nth-child(6):checked) ~ span:nth-of-type(6),
68
+ select:has(option:nth-child(7):checked) ~ span:nth-of-type(7),
69
+ select:has(option:nth-child(8):checked) ~ span:nth-of-type(8),
70
+ select:has(option:nth-child(9):checked) ~ span:nth-of-type(9),
71
+ select:has(option:nth-child(10):checked) ~ span:nth-of-type(10) {
72
+ display: block;
73
+ }
74
+
75
+ select ~ span:after {
76
+ content: ' \f078';
77
+ font-family: 'Font Awesome 6 Pro';
78
+ font-size: 0.8em;
79
+ display: inline-block;
80
+ padding-left: 1em;
81
+ }
82
+
83
+ select:focus-visible ~ span:after {
84
+ content: '\f077';
85
+ }
86
+ }
87
+
88
+ .prefix {
89
+ border-right: none;
90
+ }
91
+
92
+ .suffix {
93
+ border-left: none;
94
+ border-end-start-radius: 0;
95
+ border-start-start-radius: 0;
96
+ border-start-end-radius: rem(8) !important;
97
+ border-end-end-radius: rem(8) !important;
98
+ order: 2;
99
+ }
100
+
101
+ .prefix span {
102
+ display: none;
103
+
104
+ small {
105
+ font-size: 0.8em;
106
+ }
107
+ }
108
+
109
+ .prefix
110
+ ~ :is(input:not([type='checkbox']):not([type='radio']):not([type='file']):not([type='range']), textarea, output) {
111
+ border-end-start-radius: 0 !important;
112
+ border-start-start-radius: 0 !important;
113
+ }
114
+
115
+ }
@@ -34,7 +34,7 @@ class iamAccordion extends HTMLElement {
34
34
 
35
35
  const details: NodeListOf<HTMLElement> = this.querySelectorAll(':scope > details');
36
36
 
37
- if (!this.classList.contains('accordion--keep-open')) {
37
+ if (!this.classList.contains('accordion--keep-open') && !this.querySelector('details[name]')) {
38
38
  // Add the toggle listeners.
39
39
  details.forEach((targetDetail) => {
40
40
  targetDetail.addEventListener('toggle', () => {
@@ -266,25 +266,18 @@ class iamActionbar extends HTMLElement {
266
266
  this.dispatchEvent(changeEvent);
267
267
  });
268
268
 
269
- console.log(searchBar);
270
-
271
269
  searchBar.addEventListener('click', (event) => {
272
270
 
273
- console.log(event);
274
-
275
- console.log(event.target.closest('button.suffix'));
276
-
277
271
  if (event && event.target instanceof HTMLElement && event.target.closest('button.suffix')) {
278
272
 
279
-
280
-
281
273
  const submitEvent = new CustomEvent('search-submit', {
282
274
  detail: { search: searchBar.querySelector('input').value },
283
275
  });
284
276
 
285
- console.log(this)
286
-
287
277
  this.dispatchEvent(submitEvent);
278
+
279
+ searchBar.classList.toggle('show');
280
+ searchBtn.toggleAttribute('aria-expanded');
288
281
  }
289
282
  });
290
283
 
@@ -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;