@iamproperty/components 7.8.2--beta4 → 7.8.2--beta6

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 (141) 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/calendar.component.css +1 -1
  4. package/assets/css/components/calendar.component.css.map +1 -1
  5. package/assets/css/components/card.component.css +1 -1
  6. package/assets/css/components/card.component.css.map +1 -1
  7. package/assets/css/components/carousel.config.css +1 -1
  8. package/assets/css/components/carousel.config.css.map +1 -1
  9. package/assets/css/components/modal.component.css +1 -1
  10. package/assets/css/components/modal.component.css.map +1 -1
  11. package/assets/css/components/multi-step-modal.component.css +1 -1
  12. package/assets/css/components/multi-step-modal.component.css.map +1 -1
  13. package/assets/css/components/nav.component.css +1 -1
  14. package/assets/css/components/nav.component.css.map +1 -1
  15. package/assets/css/components/nav.global.css +1 -1
  16. package/assets/css/components/nav.global.css.map +1 -1
  17. package/assets/css/components/notification.global.css +1 -1
  18. package/assets/css/components/notification.global.css.map +1 -1
  19. package/assets/css/components/std-nav-standalone.component.css +1 -1
  20. package/assets/css/components/std-nav-standalone.component.css.map +1 -1
  21. package/assets/css/components/video-card.component.css +1 -1
  22. package/assets/css/components/video-card.component.css.map +1 -1
  23. package/assets/css/components/video-modal.component.css +1 -1
  24. package/assets/css/components/video-modal.component.css.map +1 -1
  25. package/assets/css/core.min.css +1 -1
  26. package/assets/css/core.min.css.map +1 -1
  27. package/assets/css/elements/dialog.css +1 -1
  28. package/assets/css/elements/dialog.css.map +1 -1
  29. package/assets/css/style.min.css +1 -1
  30. package/assets/css/style.min.css.map +1 -1
  31. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  32. package/assets/js/components/actionbar/actionbar.component.min.js +3 -3
  33. package/assets/js/components/address-lookup/address-lookup.component.min.js +2 -2
  34. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  35. package/assets/js/components/advanced-select/advanced-select.component.min.js +1 -1
  36. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  37. package/assets/js/components/banner/banner.component.min.js +1 -1
  38. package/assets/js/components/barchart/barchart.component.min.js +1 -1
  39. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  40. package/assets/js/components/bone/bone.component.min.js +1 -1
  41. package/assets/js/components/button/button.component.min.js +1 -1
  42. package/assets/js/components/calendar/calendar.component.min.js +2 -2
  43. package/assets/js/components/card/card.component.min.js +6 -6
  44. package/assets/js/components/card/card.component.min.js.map +1 -1
  45. package/assets/js/components/carousel/carousel.component.min.js +1 -1
  46. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  47. package/assets/js/components/config/config.component.min.js +2 -2
  48. package/assets/js/components/config/config.component.min.js.map +1 -1
  49. package/assets/js/components/content/content.component.min.js +1 -1
  50. package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
  51. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +1 -1
  52. package/assets/js/components/fileupload/fileupload.component.min.js +1 -1
  53. package/assets/js/components/filter-card/filter-card.component.min.js +2 -2
  54. package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -1
  55. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  56. package/assets/js/components/form/form.component.js +42 -151
  57. package/assets/js/components/form/form.component.min.js +3 -3
  58. package/assets/js/components/form/form.component.min.js.map +1 -1
  59. package/assets/js/components/header/header.component.min.js +1 -1
  60. package/assets/js/components/inline-edit/inline-edit.component.min.js +2 -2
  61. package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -1
  62. package/assets/js/components/input/input.component.min.js +1 -1
  63. package/assets/js/components/input-range/input-range.component.min.js +1 -1
  64. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  65. package/assets/js/components/menu/menu.component.min.js +1 -1
  66. package/assets/js/components/milestone/milestone.component.min.js +1 -1
  67. package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
  68. package/assets/js/components/modal/modal.component.js +16 -11
  69. package/assets/js/components/modal/modal.component.min.js +7 -7
  70. package/assets/js/components/modal/modal.component.min.js.map +1 -1
  71. package/assets/js/components/multi-step/multi-step.component.min.js +2 -2
  72. package/assets/js/components/multi-step/multi-step.component.min.js.map +1 -1
  73. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +4 -4
  74. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js.map +1 -1
  75. package/assets/js/components/multiselect/multiselect.component.min.js +2 -2
  76. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  77. package/assets/js/components/nav/nav.component.js +88 -79
  78. package/assets/js/components/nav/nav.component.min.js +8 -8
  79. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  80. package/assets/js/components/notification/notification.component.min.js +2 -2
  81. package/assets/js/components/pagination/pagination.component.min.js +1 -1
  82. package/assets/js/components/password/password.component.min.js +1 -1
  83. package/assets/js/components/popover/popover.component.min.js +1 -1
  84. package/assets/js/components/rank/rank.component.min.js +1 -1
  85. package/assets/js/components/rankings/rankings.component.min.js +1 -1
  86. package/assets/js/components/rating/rating.component.min.js +1 -1
  87. package/assets/js/components/record-card/record-card.component.min.js +2 -2
  88. package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
  89. package/assets/js/components/search/search.component.js +2 -1
  90. package/assets/js/components/search/search.component.min.js +3 -3
  91. package/assets/js/components/search/search.component.min.js.map +1 -1
  92. package/assets/js/components/skeleton/skeleton.component.min.js +1 -1
  93. package/assets/js/components/slider/slider.component.min.js +1 -1
  94. package/assets/js/components/split-button/split-button.component.min.js +1 -1
  95. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +3 -3
  96. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
  97. package/assets/js/components/std-nav/std-nav.component.js +2 -0
  98. package/assets/js/components/std-nav/std-nav.component.min.js +12 -12
  99. package/assets/js/components/std-nav/std-nav.component.min.js.map +1 -1
  100. package/assets/js/components/std-nav-standalone/std-nav-standalone.component.min.js +2 -2
  101. package/assets/js/components/table/table.component.min.js +1 -1
  102. package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
  103. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  104. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
  105. package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
  106. package/assets/js/components/tabs/tabs.component.min.js +1 -1
  107. package/assets/js/components/tag/tag.component.min.js +2 -2
  108. package/assets/js/components/tag/tag.component.min.js.map +1 -1
  109. package/assets/js/components/tooltip/tooltip.component.min.js +1 -1
  110. package/assets/js/components/video/video.component.min.js +1 -1
  111. package/assets/js/components/video-card/video-card.component.min.js +6 -6
  112. package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
  113. package/assets/js/components/video-modal/video-modal.component.min.js +5 -5
  114. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  115. package/assets/js/modules/card.module.js +1 -1
  116. package/assets/js/modules/form.js +129 -0
  117. package/assets/js/modules/form.test.js +132 -0
  118. package/assets/js/modules/test-dom.js +5 -0
  119. package/assets/js/scripts.bundle.js +1 -1
  120. package/assets/js/scripts.bundle.min.js +1 -1
  121. package/assets/sass/_utilities.scss +1 -0
  122. package/assets/sass/components/carousel.config.scss +5 -0
  123. package/assets/sass/components/modal.component.scss +5 -1
  124. package/assets/sass/components/nav.global.scss +0 -10
  125. package/assets/sass/components/notification.global.scss +8 -0
  126. package/assets/sass/elements/dialog.scss +43 -0
  127. package/assets/sass/foundations/colours.scss +15 -24
  128. package/assets/sass/foundations/reboot.scss +4 -0
  129. package/assets/sass/utilities/wordpress.css +7 -0
  130. package/assets/ts/components/form/form.component.ts +54 -213
  131. package/assets/ts/components/modal/modal.component.ts +27 -19
  132. package/assets/ts/components/nav/nav.component.ts +107 -95
  133. package/assets/ts/components/search/search.component.ts +5 -1
  134. package/assets/ts/components/std-nav/std-nav.component.ts +3 -1
  135. package/assets/ts/modules/card.module.ts +1 -1
  136. package/assets/ts/modules/form.test.ts +183 -0
  137. package/assets/ts/modules/form.ts +210 -0
  138. package/assets/ts/modules/test-dom.ts +5 -0
  139. package/dist/components.es.js +2662 -1246
  140. package/dist/components.umd.js +372 -372
  141. package/package.json +5 -5
@@ -0,0 +1,210 @@
1
+ type FormControlElement = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
2
+
3
+ interface FormCondition {
4
+ equals: string | number | boolean | null;
5
+ if: string;
6
+ }
7
+
8
+ interface CheckboxLimitDetail {
9
+ element: string;
10
+ limit: number;
11
+ }
12
+
13
+ const getConditions = (conditions: string | null): FormCondition[] => JSON.parse(conditions || '[]') as FormCondition[];
14
+
15
+ const getFormControl = (form: HTMLElement, id: string): FormControlElement | null =>
16
+ form.querySelector<FormControlElement>(`#${id}`);
17
+
18
+ export const isFormValid = (form: HTMLFormElement): boolean => {
19
+
20
+ if (form.querySelector(':invalid'))
21
+ return false;
22
+
23
+ if (form.querySelector('.pwd-checker[data-strength="1"]') || form.querySelector('.pwd-checker[data-strength="2"]'))
24
+ return false;
25
+
26
+ if (form.querySelector('iam-multiselect[data-is-required][data-error]'))
27
+ return false;
28
+
29
+ return true;
30
+ };
31
+
32
+ export const checkConditions = (conditions: string | null, form: HTMLElement): boolean => {
33
+
34
+ let meetsCondition = true;
35
+
36
+ getConditions(conditions).forEach((condition) => {
37
+ const input = getFormControl(form, condition.if);
38
+
39
+ if(input?.value != condition.equals)
40
+ meetsCondition = false;
41
+ });
42
+
43
+ return meetsCondition;
44
+ }
45
+
46
+
47
+ export const showIf = (form: HTMLElement): void => {
48
+
49
+ form.querySelectorAll<HTMLElement>('[data-show-if]').forEach((element) => {
50
+
51
+ if(!checkConditions(element.getAttribute('data-show-if'), form))
52
+ element.classList.add('d-none');
53
+ else
54
+ element.classList.remove('d-none');
55
+
56
+ });
57
+ }
58
+
59
+ export const hideIf = (form: HTMLElement): void => {
60
+
61
+ form.querySelectorAll<HTMLElement>('[data-hide-if]').forEach((element) => {
62
+
63
+ if(checkConditions(element.getAttribute('data-hide-if'), form))
64
+ element.classList.add('d-none');
65
+ else
66
+ element.classList.remove('d-none');
67
+
68
+ });
69
+ }
70
+
71
+ export const disabledIf = (form: HTMLElement): void => {
72
+
73
+ form.querySelectorAll<HTMLElement>('[data-disabled-if]').forEach((element) => {
74
+
75
+ if(checkConditions(element.getAttribute('data-disabled-if'), form))
76
+ element.setAttribute('disabled','disabled');
77
+ else
78
+ element.removeAttribute('disabled');
79
+
80
+ });
81
+ }
82
+
83
+ export const enabledIf = (form: HTMLElement): void => {
84
+
85
+ form.querySelectorAll<HTMLElement>('[data-enabled-if]').forEach((element) => {
86
+
87
+ if(!checkConditions(element.getAttribute('data-enabled-if'), form))
88
+ element.setAttribute('disabled','disabled');
89
+ else
90
+ element.removeAttribute('disabled');
91
+
92
+ });
93
+ }
94
+
95
+ export const requiredIf = (form: HTMLElement): void => {
96
+
97
+ form.querySelectorAll<HTMLElement>('[data-required-if]').forEach((element) => {
98
+
99
+ if(checkConditions(element.getAttribute('data-required-if'), form))
100
+ element.setAttribute('required','required');
101
+ else
102
+ element.removeAttribute('required');
103
+
104
+ });
105
+ }
106
+
107
+ export const readonlyIf = (form: HTMLElement): void => {
108
+
109
+ form.querySelectorAll<HTMLElement>('[data-readonly-if]').forEach((element) => {
110
+
111
+ if(checkConditions(element.getAttribute('data-readonly-if'), form))
112
+ element.setAttribute('readonly','readonly');
113
+ else
114
+ element.removeAttribute('readonly');
115
+
116
+ });
117
+ }
118
+
119
+ export const writeIf = (form: HTMLElement): void => {
120
+
121
+ form.querySelectorAll<HTMLElement>('[data-write-if]').forEach((element) => {
122
+
123
+ if(!checkConditions(element.getAttribute('data-write-if'), form))
124
+ element.setAttribute('readonly','readonly');
125
+ else
126
+ element.removeAttribute('readonly');
127
+
128
+ });
129
+ }
130
+
131
+ export const emptyIf = (form: HTMLElement): void => {
132
+
133
+ form.querySelectorAll<FormControlElement>('[data-empty-if]').forEach((element) => {
134
+
135
+ if(checkConditions(element.getAttribute('data-empty-if'), form))
136
+ element.value = "";
137
+
138
+ });
139
+ }
140
+
141
+ export const getCheckboxLimit = (element: HTMLElement): number => {
142
+
143
+ const limit = parseInt(element.getAttribute('data-checkbox-limit') || '10', 10);
144
+
145
+ return !isNaN(limit) && limit > 0 ? limit : 10;
146
+ }
147
+
148
+ export const limitCheckboxes = (event: Event | null | undefined, root: HTMLElement): void => {
149
+
150
+ console.log(event);
151
+
152
+
153
+ const target = event?.target instanceof HTMLInputElement ? event.target : null;
154
+ const changedCheckbox = target?.matches('input[type="checkbox"]') ? target : null;
155
+ const checkboxLimitGroup = changedCheckbox?.closest<HTMLElement>('[data-checkbox-limit]');
156
+ const checkboxLimitGroups = checkboxLimitGroup
157
+ ? [checkboxLimitGroup]
158
+ : [
159
+ ...(root.hasAttribute('data-checkbox-limit') ? [root] : []),
160
+ ...Array.from(root.querySelectorAll<HTMLElement>('[data-checkbox-limit]')),
161
+ ];
162
+
163
+ checkboxLimitGroups.forEach((group) => {
164
+
165
+ const limit = getCheckboxLimit(group);
166
+ const checked = Array.from(group.querySelectorAll<HTMLInputElement>('input[type="checkbox"]:checked'));
167
+ const notChecked = Array.from(group.querySelectorAll<HTMLInputElement>('input[type="checkbox"]:not(:checked)'));
168
+
169
+ notChecked.forEach((checkbox) => {
170
+
171
+ checkbox.setAttribute('disabled','disabled');
172
+ });
173
+
174
+ if(checked.length < limit){
175
+ notChecked.forEach((checkbox) => {
176
+
177
+ checkbox.removeAttribute('disabled');
178
+ });
179
+
180
+ return;
181
+ }
182
+
183
+ if(checked.length == limit){
184
+
185
+ // Data layer Web component created
186
+
187
+ const eventDetails: CheckboxLimitDetail = {element: group.hasAttribute('id') ? `#${group.getAttribute('id')}` :'', limit: limit};
188
+ const changeEvent = new CustomEvent<CheckboxLimitDetail>('checkbox-limit-reached', { detail: eventDetails });
189
+
190
+ root.dispatchEvent(changeEvent);
191
+
192
+ const formWindow = window as WindowWithDataLayer;
193
+ formWindow.dataLayer = formWindow.dataLayer || [];
194
+ formWindow.dataLayer.push({'event': 'checkbox-limit-reached', ...eventDetails});
195
+
196
+ return;
197
+ }
198
+
199
+
200
+ if(changedCheckbox?.checked && group.contains(changedCheckbox)) {
201
+ changedCheckbox.checked = false;
202
+ return;
203
+ }
204
+
205
+ checked.slice(limit).forEach((checkbox) => {
206
+
207
+ checkbox.checked = false;
208
+ });
209
+ });
210
+ }
@@ -443,6 +443,11 @@ export class TestElement extends EventTarget {
443
443
  return null;
444
444
  }
445
445
 
446
+ contains(element) {
447
+ if (element === this) return true;
448
+ return this.children.some((child) => child.contains(element));
449
+ }
450
+
446
451
  matches(selector) {
447
452
  return matchesSelector(this, selector);
448
453
  }