@iamproperty/components 7.6.3--beta1 → 7.6.3--beta3

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 (170) 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/barchart.component.css +1 -1
  8. package/assets/css/components/barchart.component.css.map +1 -1
  9. package/assets/css/components/calendar.component.css +1 -1
  10. package/assets/css/components/calendar.component.css.map +1 -1
  11. package/assets/css/components/card.component.css +1 -1
  12. package/assets/css/components/card.component.css.map +1 -1
  13. package/assets/css/components/carousel.component.css +1 -1
  14. package/assets/css/components/carousel.component.css.map +1 -1
  15. package/assets/css/components/collapsible-side.css +1 -1
  16. package/assets/css/components/collapsible-side.css.map +1 -1
  17. package/assets/css/components/content.component.css +1 -1
  18. package/assets/css/components/content.component.css.map +1 -1
  19. package/assets/css/components/doughnutchart.component.css +1 -1
  20. package/assets/css/components/doughnutchart.component.css.map +1 -1
  21. package/assets/css/components/fileupload.css +1 -1
  22. package/assets/css/components/fileupload.css.map +1 -1
  23. package/assets/css/components/header.css +1 -1
  24. package/assets/css/components/header.css.map +1 -1
  25. package/assets/css/components/modal.component.css +1 -1
  26. package/assets/css/components/modal.component.css.map +1 -1
  27. package/assets/css/components/multi-step-modal.component.css +1 -1
  28. package/assets/css/components/multi-step-modal.component.css.map +1 -1
  29. package/assets/css/components/multiselect.css +1 -1
  30. package/assets/css/components/multiselect.css.map +1 -1
  31. package/assets/css/components/multiselect.preload.css +1 -1
  32. package/assets/css/components/multiselect.preload.css.map +1 -1
  33. package/assets/css/components/nav.component.css +1 -1
  34. package/assets/css/components/nav.component.css.map +1 -1
  35. package/assets/css/components/pagination.css +1 -1
  36. package/assets/css/components/pagination.css.map +1 -1
  37. package/assets/css/components/rank.component.css +1 -1
  38. package/assets/css/components/rank.component.css.map +1 -1
  39. package/assets/css/components/rankings.component.css +1 -1
  40. package/assets/css/components/rankings.component.css.map +1 -1
  41. package/assets/css/components/rankings.global.css +1 -1
  42. package/assets/css/components/rankings.global.css.map +1 -1
  43. package/assets/css/components/split-button.component.css +1 -1
  44. package/assets/css/components/split-button.component.css.map +1 -1
  45. package/assets/css/components/tabs.component.css +1 -1
  46. package/assets/css/components/tabs.component.css.map +1 -1
  47. package/assets/css/components/tag.component.css +1 -0
  48. package/assets/css/components/tag.component.css.map +1 -0
  49. package/assets/css/components/tag.preload.css +1 -0
  50. package/assets/css/components/tag.preload.css.map +1 -0
  51. package/assets/css/components/tooltip.component.css +1 -1
  52. package/assets/css/components/tooltip.component.css.map +1 -1
  53. package/assets/css/components/video-modal.component.css +1 -0
  54. package/assets/css/components/video-modal.component.css.map +1 -0
  55. package/assets/css/core.min.css +1 -1
  56. package/assets/css/core.min.css.map +1 -1
  57. package/assets/css/style.min.css +1 -1
  58. package/assets/css/style.min.css.map +1 -1
  59. package/assets/img/illustrations/minimal-cost.png +0 -0
  60. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  61. package/assets/js/components/actionbar/actionbar.component.min.js +5 -5
  62. package/assets/js/components/address-lookup/address-lookup.component.min.js +2 -2
  63. package/assets/js/components/advanced-select/advanced-select.component.min.js +1 -1
  64. package/assets/js/components/applied-filters/applied-filters.component.min.js +3 -3
  65. package/assets/js/components/barchart/barchart.component.min.js +4 -4
  66. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  67. package/assets/js/components/calendar/calendar.component.min.js +2 -2
  68. package/assets/js/components/card/card.component.min.js +2 -2
  69. package/assets/js/components/carousel/carousel.component.min.js +4 -4
  70. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +2 -2
  71. package/assets/js/components/content/content.component.min.js +2 -2
  72. package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
  73. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +4 -4
  74. package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
  75. package/assets/js/components/filter-card/filter-card.component.min.js +1 -1
  76. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  77. package/assets/js/components/header/header.component.min.js +2 -2
  78. package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
  79. package/assets/js/components/input/input.component.min.js +1 -1
  80. package/assets/js/components/input-range/input-range.component.min.js +1 -1
  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 +11 -39
  86. package/assets/js/components/modal/modal.component.min.js +5 -5
  87. package/assets/js/components/modal/modal.component.min.js.map +1 -1
  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.min.js +4 -4
  90. package/assets/js/components/multiselect/multiselect.component.js +3 -17
  91. package/assets/js/components/multiselect/multiselect.component.min.js +4 -4
  92. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  93. package/assets/js/components/nav/nav.component.min.js +2 -2
  94. package/assets/js/components/notification/notification.component.min.js +1 -1
  95. package/assets/js/components/pagination/pagination.component.min.js +2 -2
  96. package/assets/js/components/password/password.component.min.js +1 -1
  97. package/assets/js/components/popover/popover.component.min.js +1 -1
  98. package/assets/js/components/rank/rank.component.min.js +1 -1
  99. package/assets/js/components/rankings/rankings.component.min.js +5 -5
  100. package/assets/js/components/record-card/record-card.component.min.js +1 -1
  101. package/assets/js/components/search/search.component.min.js +1 -1
  102. package/assets/js/components/slider/slider.component.min.js +1 -1
  103. package/assets/js/components/split-button/split-button.component.min.js +2 -2
  104. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +6 -6
  105. package/assets/js/components/table/table.component.min.js +1 -1
  106. package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
  107. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  108. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
  109. package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
  110. package/assets/js/components/tabs/tabs.component.min.js +3 -3
  111. package/assets/js/components/tag/tag.component.js +73 -0
  112. package/assets/js/components/tag/tag.component.min.js +18 -0
  113. package/assets/js/components/tag/tag.component.min.js.map +1 -0
  114. package/assets/js/components/tooltip/tooltip.component.min.js +4 -4
  115. package/assets/js/components/video-card/video-card.component.js +1 -1
  116. package/assets/js/components/video-card/video-card.component.min.js +4 -4
  117. package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
  118. package/assets/js/components/video-modal/video-modal.component.js +115 -0
  119. package/assets/js/components/video-modal/video-modal.component.min.js +19 -0
  120. package/assets/js/components/video-modal/video-modal.component.min.js.map +1 -0
  121. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  122. package/assets/js/modules/dropdown.js +86 -0
  123. package/assets/js/modules/modal.js +34 -0
  124. package/assets/js/modules/videos.js +5 -5
  125. package/assets/js/scripts.bundle.js +2 -2
  126. package/assets/js/scripts.bundle.js.map +1 -1
  127. package/assets/js/scripts.bundle.min.js +2 -2
  128. package/assets/js/scripts.bundle.min.js.map +1 -1
  129. package/assets/sass/_components.scss +1 -0
  130. package/assets/sass/_elements.scss +1 -0
  131. package/assets/sass/_grid.scss +1 -1
  132. package/assets/sass/_utilities.scss +3 -0
  133. package/assets/sass/components/modal.component.scss +7 -5
  134. package/assets/sass/components/multiselect.preload.scss +6 -0
  135. package/assets/sass/components/nav.component.scss +2 -2
  136. package/assets/sass/components/tag.component.scss +78 -0
  137. package/assets/sass/components/tag.preload.scss +45 -0
  138. package/assets/sass/components/tooltip.component.scss +17 -2
  139. package/assets/sass/components/video-modal.component.scss +25 -0
  140. package/assets/sass/elements/admin-panel.scss +17 -29
  141. package/assets/sass/elements/badge-tag.scss +7 -6
  142. package/assets/sass/elements/button__group.css +31 -0
  143. package/assets/sass/elements/buttons--compact.scss +54 -6
  144. package/assets/sass/elements/buttons.scss +2 -1
  145. package/assets/sass/elements/container.scss +1 -0
  146. package/assets/sass/elements/feature.scss +27 -8
  147. package/assets/sass/elements/highlight.css +70 -0
  148. package/assets/sass/elements/hr.css +1 -0
  149. package/assets/sass/elements/links.scss +5 -1
  150. package/assets/sass/elements/modal.scss +0 -12
  151. package/assets/sass/elements/type.css +9 -1
  152. package/assets/sass/foundations/colours.scss +2 -2
  153. package/assets/sass/utilities/columns.scss +62 -0
  154. package/assets/sass/utilities/flex.scss +142 -0
  155. package/assets/sass/utilities/font-awesome-iso-fallbacks.scss +32 -0
  156. package/assets/sass/utilities/ratio.scss +1 -0
  157. package/assets/sass/utilities/text.scss +69 -0
  158. package/assets/ts/components/modal/modal.component.ts +11 -52
  159. package/assets/ts/components/multiselect/multiselect.component.ts +3 -21
  160. package/assets/ts/components/tag/tag.component.ts +107 -0
  161. package/assets/ts/components/video-card/video-card.component.ts +1 -1
  162. package/assets/ts/components/video-modal/video-modal.component.ts +137 -0
  163. package/assets/ts/modules/dropdown.ts +104 -0
  164. package/assets/ts/modules/modal.ts +44 -0
  165. package/assets/ts/modules/videos.ts +5 -5
  166. package/dist/components.es.js +82 -82
  167. package/dist/components.umd.js +209 -179
  168. package/package.json +2 -2
  169. package/src/components/Tag/Tag.vue +22 -0
  170. package/src/components/VideoModal/VideoModal.vue +22 -0
@@ -1,4 +1,146 @@
1
1
  @layer utilities {
2
+
3
+ .flex-fill {
4
+ flex: 1 1 auto !important;
5
+ }
6
+
7
+ .flex-row {
8
+ flex-direction: row !important;
9
+ }
10
+
11
+ .flex-column {
12
+ flex-direction: column !important;
13
+ }
14
+
15
+ .flex-row-reverse {
16
+ flex-direction: row-reverse !important;
17
+ }
18
+
19
+ .flex-column-reverse {
20
+ flex-direction: column-reverse !important;
21
+ }
22
+
23
+ .flex-grow-0 {
24
+ flex-grow: 0 !important;
25
+ }
26
+
27
+ .flex-grow-1 {
28
+ flex-grow: 1 !important;
29
+ }
30
+
31
+ .flex-shrink-0 {
32
+ flex-shrink: 0 !important;
33
+ }
34
+
35
+ .flex-shrink-1 {
36
+ flex-shrink: 1 !important;
37
+ }
38
+
39
+ .flex-wrap {
40
+ flex-wrap: wrap !important;
41
+ }
42
+
43
+ .flex-nowrap {
44
+ flex-wrap: nowrap !important;
45
+ }
46
+
47
+ .flex-wrap-reverse {
48
+ flex-wrap: wrap-reverse !important;
49
+ }
50
+
51
+ .justify-content-start {
52
+ justify-content: flex-start !important;
53
+ }
54
+
55
+ .justify-content-end {
56
+ justify-content: flex-end !important;
57
+ }
58
+
59
+ .justify-content-center {
60
+ justify-content: center !important;
61
+ }
62
+
63
+ .justify-content-between {
64
+ justify-content: space-between !important;
65
+ }
66
+
67
+ .justify-content-around {
68
+ justify-content: space-around !important;
69
+ }
70
+
71
+ .justify-content-evenly {
72
+ justify-content: space-evenly !important;
73
+ }
74
+
75
+ .align-items-start {
76
+ align-items: flex-start !important;
77
+ }
78
+
79
+ .align-items-end {
80
+ align-items: flex-end !important;
81
+ }
82
+
83
+ .align-items-center {
84
+ align-items: center !important;
85
+ }
86
+
87
+ .align-items-baseline {
88
+ align-items: baseline !important;
89
+ }
90
+
91
+ .align-items-stretch {
92
+ align-items: stretch !important;
93
+ }
94
+
95
+ .align-content-start {
96
+ align-content: flex-start !important;
97
+ }
98
+
99
+ .align-content-end {
100
+ align-content: flex-end !important;
101
+ }
102
+
103
+ .align-content-center {
104
+ align-content: center !important;
105
+ }
106
+
107
+ .align-content-between {
108
+ align-content: space-between !important;
109
+ }
110
+
111
+ .align-content-around {
112
+ align-content: space-around !important;
113
+ }
114
+
115
+ .align-content-stretch {
116
+ align-content: stretch !important;
117
+ }
118
+
119
+ .align-self-auto {
120
+ align-self: auto !important;
121
+ }
122
+
123
+ .align-self-start {
124
+ align-self: flex-start !important;
125
+ }
126
+
127
+ .align-self-end {
128
+ align-self: flex-end !important;
129
+ }
130
+
131
+ .align-self-center {
132
+ align-self: center !important;
133
+ }
134
+
135
+ .align-self-baseline {
136
+ align-self: baseline !important;
137
+ }
138
+
139
+ .align-self-stretch {
140
+ align-self: stretch !important;
141
+ }
142
+
143
+
2
144
  $breakpoints: (
3
145
  sm: 36em,
4
146
  md: 62em,
@@ -0,0 +1,32 @@
1
+ @layer utilities {
2
+ .fa-right {
3
+ --iso: '\2192';
4
+ }
5
+ .fa-chevron-right {
6
+ --iso: '\003e';
7
+ }
8
+ .fa-left {
9
+ --iso: '\2190';
10
+ }
11
+ .fa-chevron-left {
12
+ --iso: '\003c';
13
+ }
14
+ .fa-up {
15
+ --iso: '\2191';
16
+ }
17
+ .fa-chevron-up {
18
+ --iso: '\2227';
19
+ }
20
+ .fa-down {
21
+ --iso: '\2193';
22
+ }
23
+ .fa-chevron-down {
24
+ --iso: '\2228';
25
+ }
26
+ .fa-plus {
27
+ --iso: '\002b';
28
+ }
29
+ .fa-bars {
30
+ --iso: '\039e';
31
+ }
32
+ }
@@ -1,5 +1,6 @@
1
1
  @layer utilities {
2
2
  .ratio {
3
+ display: block;
3
4
  position: relative;
4
5
  width: 100%;
5
6
 
@@ -81,6 +81,11 @@
81
81
 
82
82
  .text-center {
83
83
  text-align: center !important;
84
+
85
+ > * {
86
+
87
+ margin-inline: auto;
88
+ }
84
89
  }
85
90
 
86
91
  .text-decoration-none {
@@ -119,4 +124,68 @@
119
124
  word-wrap: break-word !important;
120
125
  word-break: break-word !important;
121
126
  }
127
+
128
+ @media screen and (min-width: 36em) {
129
+ .text-sm-start {
130
+ text-align: left !important;
131
+ }
132
+
133
+ .text-sm-end {
134
+ text-align: right !important;
135
+ }
136
+
137
+ .text-sm-center {
138
+ text-align: center !important;
139
+
140
+ > * {
141
+
142
+ margin-inline: auto;
143
+ }
144
+ }
145
+
146
+ .text-sm-wrap {
147
+ white-space: normal !important;
148
+ }
149
+
150
+ .text-sm-nowrap {
151
+ white-space: nowrap !important;
152
+ }
153
+
154
+ .text-sm-break {
155
+ word-wrap: break-word !important;
156
+ word-break: break-word !important;
157
+ }
158
+ }
159
+
160
+ @media screen and (min-width: 62em) {
161
+ .text-md-start {
162
+ text-align: left !important;
163
+ }
164
+
165
+ .text-md-end {
166
+ text-align: right !important;
167
+ }
168
+
169
+ .text-md-center {
170
+ text-align: center !important;
171
+
172
+ > * {
173
+
174
+ margin-inline: auto;
175
+ }
176
+ }
177
+
178
+ .text-md-wrap {
179
+ white-space: normal !important;
180
+ }
181
+
182
+ .text-md-nowrap {
183
+ white-space: nowrap !important;
184
+ }
185
+
186
+ .text-md-break {
187
+ word-wrap: break-word !important;
188
+ word-break: break-word !important;
189
+ }
190
+ }
122
191
  }
@@ -1,7 +1,5 @@
1
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';
2
+ import { openModal, closeModal, closeButtonHtml } from '../../modules/modal';
5
3
 
6
4
  trackComponentRegistered('iam-card');
7
5
 
@@ -24,7 +22,7 @@ class iamModal extends HTMLElement {
24
22
  </style>
25
23
  <link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous" />
26
24
  <dialog>
27
- <button class="btn btn-compact btn-secondary fa-xmark-large" data-close>Close</button>
25
+ ${closeButtonHtml}
28
26
  <div class="scroll">
29
27
  <i class="fa-light fa-circle" aria-hidden="true">
30
28
  <i class="fa-regular fa-${this.hasAttribute('data-icon') ? this.getAttribute('data-icon') : 'info'}" aria-hidden="true"></i>
@@ -56,31 +54,10 @@ class iamModal extends HTMLElement {
56
54
  const modalType = this.hasAttribute('data-type') ? this.getAttribute('data-type') : 'passive';
57
55
 
58
56
 
59
-
60
-
61
- const openModal = (): void => {
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
57
  document.addEventListener('click', (e) => {
81
58
 
82
59
  if(e.target.matches(`[command="show-modal"][commandfor="${id}"]`) || e.target.matches(`[data-modal="${id}"]`)){
83
- openModal();
60
+ openModal(id, this);
84
61
  }
85
62
  });
86
63
 
@@ -95,13 +72,13 @@ class iamModal extends HTMLElement {
95
72
  originalDialog?.addEventListener('command', (e) => {
96
73
 
97
74
  if (event.command == "close") {
98
- closeModal();
75
+ closeModal(id, this);
99
76
  }
100
77
  });
101
78
 
102
79
  originalDialog?.addEventListener('close', (e) => {
103
80
 
104
- closeModal();
81
+ closeModal(id, this);
105
82
  });
106
83
 
107
84
  // Move the submit button so that the slot functionality works
@@ -109,30 +86,12 @@ class iamModal extends HTMLElement {
109
86
  this.moveBefore(element, originalDialog);
110
87
  });
111
88
 
112
- const closeModal = (): void => {
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
89
  closeButton?.addEventListener('click', () => {
131
- closeModal();
90
+ closeModal(id, this);
132
91
  });
133
92
 
134
93
  cancelButton?.addEventListener('click', () => {
135
- closeModal();
94
+ closeModal(id, this);
136
95
  });
137
96
 
138
97
  agreedButton?.addEventListener('click', () => {
@@ -143,7 +102,7 @@ class iamModal extends HTMLElement {
143
102
 
144
103
  this.dispatchEvent(agreedEvent);
145
104
 
146
- closeModal();
105
+ closeModal(id, this);
147
106
  });
148
107
 
149
108
  slottedAgreedButton?.addEventListener('click', () => {
@@ -154,11 +113,11 @@ class iamModal extends HTMLElement {
154
113
 
155
114
  this.dispatchEvent(agreedEvent);
156
115
 
157
- closeModal();
116
+ closeModal(id, this);
158
117
  });
159
118
 
160
119
  this.addEventListener('close-modal', () => {
161
- closeModal();
120
+ closeModal(id, this);
162
121
  });
163
122
 
164
123
  this.addEventListener('click', (event) => {
@@ -178,7 +137,7 @@ class iamModal extends HTMLElement {
178
137
  event.clientY > dialogDimensions.bottom
179
138
  ) {
180
139
  if (!event.target.closest('dialog *'))
181
- closeModal(); // Weird bug when interacting with radio input fields within dialogs cuases it to close
140
+ closeModal(id, this); // Weird bug when interacting with radio input fields within dialogs cuases it to close
182
141
  }
183
142
  }
184
143
  });
@@ -1,4 +1,5 @@
1
1
  import Cookies from 'js-cookie';
2
+ import { filterList } from '../../modules/dropdown';
2
3
 
3
4
  // Data layer Web component created
4
5
  window.dataLayer = window.dataLayer || [];
@@ -126,25 +127,6 @@ class iamMultiselect extends HTMLElement {
126
127
  setItem(checkbox);
127
128
  });
128
129
 
129
- // Filter list
130
- const filterList = (): void => {
131
-
132
- Array.from(multiselect.querySelectorAll(`label:not([slot="checked"])`)).forEach((label) => {
133
- const checkbox = label.querySelector('input');
134
- const searchValue = checkbox.value;
135
- const labelText = label.textContent;
136
-
137
- if (
138
- searchValue.toLowerCase().includes(search.value.toLowerCase()) ||
139
- labelText.toLowerCase().includes(search.value.toLowerCase())
140
- ) {
141
- label.removeAttribute('slot');
142
- } else {
143
- label.setAttribute('slot', 'notmatched');
144
- }
145
- });
146
- }
147
-
148
130
  search.addEventListener('input', () => {
149
131
 
150
132
  if (multiselect.hasAttribute('data-url')) {
@@ -154,7 +136,7 @@ class iamMultiselect extends HTMLElement {
154
136
  }
155
137
  } else {
156
138
 
157
- filterList();
139
+ filterList(multiselect, search);
158
140
  }
159
141
  });
160
142
 
@@ -422,7 +404,7 @@ class iamMultiselect extends HTMLElement {
422
404
 
423
405
  multiselect.insertAdjacentHTML('beforeend', `${items}`);
424
406
 
425
- filterList();
407
+ filterList(multiselect, search);
426
408
  return response;
427
409
  });
428
410
  } catch (error) {
@@ -0,0 +1,107 @@
1
+ import { trackComponent, trackComponentRegistered } from '../_global';
2
+ import { searchAjax, filterList, setTag } from '../../modules/dropdown';
3
+
4
+ trackComponentRegistered('iam-tag');
5
+
6
+ class iamTag extends HTMLElement {
7
+ constructor() {
8
+ super();
9
+ this.attachShadow({ mode: 'open' });
10
+
11
+ const assetLocation = document.body.hasAttribute('data-assets-location')
12
+ ? document.body.getAttribute('data-assets-location')
13
+ : '/assets';
14
+ const loadCSS = `@import "${assetLocation}/css/components/tag.component.css";`;
15
+
16
+ const template = document.createElement('template');
17
+ template.innerHTML = `
18
+ <style>
19
+
20
+ ${loadCSS}
21
+ </style>
22
+ <div class="wrapper">
23
+ <input type="text" name="search" autocomplete="off" />
24
+ <slot name="checked"></slot>
25
+ <div class="admin-panel dropdown" part="dropdown">
26
+ <slot></slot>
27
+ </div>
28
+ </div>
29
+ `;
30
+
31
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
32
+ }
33
+
34
+ connectedCallback(): void {
35
+
36
+ const search = this.shadowRoot.querySelector('input');
37
+
38
+ const input = this.querySelector(':checked');
39
+ const inputName = input?.getAttribute('name');
40
+ let tag = this.querySelector('label:has(:checked)');
41
+
42
+ setTag(tag);
43
+
44
+
45
+ this.addEventListener('click',()=>{
46
+ if (event && event.target instanceof HTMLElement && event.target.closest('label:has(:checked)')) {
47
+
48
+ search.focus();
49
+ }
50
+
51
+ });
52
+
53
+ search.addEventListener('input', () => {
54
+
55
+ if (this.hasAttribute('data-url')) {
56
+
57
+ if (search.value.length == 3) {
58
+ searchAjax(this, search, filterList);
59
+ }
60
+ } else {
61
+ filterList(this, search);
62
+ }
63
+ });
64
+
65
+
66
+
67
+ this.addEventListener('change', (event) => {
68
+ if (event && event.target instanceof HTMLElement && event.target.closest('input[type="radio"],input[type="checkbox"]')) {
69
+ const checkbox = event.target.closest('input[type="radio"],input[type="checkbox"]');
70
+
71
+
72
+ tag.checked = false;
73
+ tag.removeAttribute('slot');
74
+
75
+ // Set the new tag
76
+ tag = this.querySelector('label:has(:checked)');
77
+ setTag(tag);
78
+
79
+ search?.blur();
80
+ search?.value = '';
81
+ filterList(this, search);
82
+
83
+
84
+ // dispatch event
85
+
86
+ const changeEvent = new CustomEvent('tag-changed', {
87
+ detail: {
88
+ value: tag?.querySelector(':checked').value,
89
+ title: tag?.textContent
90
+ }
91
+ });
92
+
93
+ this?.dispatchEvent(changeEvent);
94
+ }
95
+ });
96
+
97
+
98
+
99
+ // TODO Add keyboard actions
100
+
101
+
102
+
103
+
104
+ }
105
+ }
106
+
107
+ export default iamTag;
@@ -82,7 +82,7 @@ class iamVideoCard extends HTMLElement {
82
82
  });
83
83
  cardComponent.dispatchEvent(customEvent);
84
84
 
85
- createYoutTubeVideo(embed, this.getAttribute('[data-youtbue]'));
85
+ createYoutTubeVideo(embed, this.getAttribute('[data-youtube]'));
86
86
  dialog.showModal();
87
87
  });
88
88
 
@@ -0,0 +1,137 @@
1
+ import { trackComponent, trackComponentRegistered } from '../_global';
2
+ import { loadYouTubeScripts, createYoutTubeVideo } from '../../modules/videos';
3
+ import { openModal,closeModal,closeButtonHtml } from '../../modules/modal';
4
+
5
+ trackComponentRegistered('iam-video-modal');
6
+
7
+ class iamVideoCard extends HTMLElement {
8
+ constructor() {
9
+ super();
10
+ this.attachShadow({ mode: 'open' });
11
+
12
+ const assetLocation = document.body.hasAttribute('data-assets-location')
13
+ ? document.body.getAttribute('data-assets-location')
14
+ : '/assets';
15
+ const loadCSS = `@import "${assetLocation}/css/components/modal.component.css";`;
16
+
17
+ const template = document.createElement('template');
18
+ template.innerHTML = `
19
+ <style>
20
+ ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
21
+
22
+ ${loadCSS}
23
+ </style>
24
+
25
+ <link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous" />
26
+
27
+ <dialog>
28
+ ${closeButtonHtml}
29
+ <slot></slot>
30
+ </dialog>
31
+ `;
32
+
33
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
34
+ }
35
+
36
+ openYoutubeVideo = async (id, component):void => {
37
+
38
+ const embed = component.querySelector('.embed');
39
+
40
+ openModal(id, component);
41
+
42
+ const youtubeId = component.getAttribute('data-youtube');
43
+ let loaded;
44
+ if (!document.body.classList.contains('youtubeLoaded')) {
45
+
46
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
47
+ loaded = await loadYouTubeScripts();
48
+ }
49
+
50
+ const customEvent = new CustomEvent('play-video', {
51
+ detail: { 'Video Type': 'YoutTube', ID: youtubeId },
52
+ });
53
+ component.dispatchEvent(customEvent);
54
+
55
+ const interval = setInterval(():void => {
56
+
57
+ if(typeof YT != "undefined"){
58
+ clearInterval(interval);
59
+ createYoutTubeVideo(embed, youtubeId);
60
+ }
61
+ }, 200);
62
+ // Limit the number of calls
63
+ setTimeout(function() {
64
+ clearInterval(interval)
65
+ }, 2000);
66
+
67
+ }
68
+
69
+ openVimeoVideo = async (id, component):void => {
70
+
71
+ const embed = component.querySelector('.embed');
72
+
73
+ openModal(id, component);
74
+
75
+ const vimeoId = component.getAttribute('data-vimeo');
76
+
77
+ const customEvent = new CustomEvent('play-video', {
78
+ detail: { 'Video Type': 'Vimeo', ID: vimeoId },
79
+ });
80
+ component.dispatchEvent(customEvent);
81
+ window.dataLayer.push(customEvent.detail);
82
+
83
+ if (!embed.querySelector('iframe'))
84
+ embed.innerHTML = `<iframe src="https://player.vimeo.com/video/${vimeoId}?autoplay=1" width="100%" height="100%" frameborder="0" allow="autoplay; encrypted-media" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>`;
85
+
86
+ }
87
+
88
+ async connectedCallback(): void {
89
+
90
+ const id = this.getAttribute('id');
91
+ const closeButton = this.shadowRoot?.querySelector('[data-close]');
92
+
93
+ this.innerHTML = `<div class="embed"></div>`
94
+ const embed = this.querySelector('.embed');
95
+
96
+ document.addEventListener('click', async (e) => {
97
+
98
+ if(e.target.closest(`[command="show-modal"][commandfor="${id}"]`)){
99
+
100
+ e.preventDefault();
101
+
102
+ if(this.hasAttribute('data-youtube')){
103
+ const youtubeId = this.getAttribute('data-youtube');
104
+ embed?.setAttribute('id',youtubeId);
105
+ this.openYoutubeVideo(id, this);
106
+ }
107
+ else if(this.hasAttribute('data-vimeo')) {
108
+ this.openVimeoVideo(id, this);
109
+ }
110
+ }
111
+ });
112
+
113
+ closeButton?.addEventListener('click', () => {
114
+ closeModal(id, this);
115
+
116
+ if(this.hasAttribute('data-youtube')){
117
+ const youtubeId = this.getAttribute('data-youtube');
118
+
119
+ if (window.player[youtubeId] && typeof window.player[youtubeId].pauseVideo == 'function') {
120
+ window.player[youtubeId].pauseVideo();
121
+ }
122
+ }
123
+ else if(this.hasAttribute('data-vimeo')) {
124
+
125
+ embed.innerHTML = ``; // Remove the video since we cant pause it
126
+
127
+ const customEvent = new CustomEvent('close-video', {
128
+ detail: { 'Video Type': 'Vimeo', ID: this.getAttribute('data-vimeo') },
129
+ });
130
+ this.dispatchEvent(customEvent);
131
+ window.dataLayer.push(customEvent.detail);
132
+ }
133
+ });
134
+ }
135
+ }
136
+
137
+ export default iamVideoCard;