@iamproperty/components 7.5.1--beta9 → 7.5.1--beta11

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 (194) 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/actionbar.global.css.map +1 -1
  4. package/assets/css/components/address-lookup.component.css +1 -1
  5. package/assets/css/components/address-lookup.component.css.map +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/calendar.config.css.map +1 -1
  12. package/assets/css/components/card.component.css +1 -1
  13. package/assets/css/components/card.component.css.map +1 -1
  14. package/assets/css/components/carousel.component.css +1 -1
  15. package/assets/css/components/carousel.component.css.map +1 -1
  16. package/assets/css/components/carousel.config.css.map +1 -1
  17. package/assets/css/components/charts.config.css.map +1 -1
  18. package/assets/css/components/collapsible-side.css +1 -1
  19. package/assets/css/components/collapsible-side.css.map +1 -1
  20. package/assets/css/components/content.component.css +1 -1
  21. package/assets/css/components/content.component.css.map +1 -1
  22. package/assets/css/components/doughnutchart.component.css +1 -1
  23. package/assets/css/components/doughnutchart.component.css.map +1 -1
  24. package/assets/css/components/fileupload.css +1 -1
  25. package/assets/css/components/fileupload.css.map +1 -1
  26. package/assets/css/components/header.css.map +1 -1
  27. package/assets/css/components/inline-edit.css.map +1 -1
  28. package/assets/css/components/inline-edit.preload.css.map +1 -1
  29. package/assets/css/components/marketing.component.css.map +1 -1
  30. package/assets/css/components/menu.component.css +1 -1
  31. package/assets/css/components/menu.component.css.map +1 -1
  32. package/assets/css/components/menu.global.css.map +1 -1
  33. package/assets/css/components/modal.component.css +1 -1
  34. package/assets/css/components/modal.component.css.map +1 -1
  35. package/assets/css/components/multi-step-modal.component.css +1 -1
  36. package/assets/css/components/multi-step-modal.component.css.map +1 -1
  37. package/assets/css/components/multi-step-modal.global.css.map +1 -1
  38. package/assets/css/components/multi-step.component.css.map +1 -1
  39. package/assets/css/components/multiselect.css +1 -1
  40. package/assets/css/components/multiselect.css.map +1 -1
  41. package/assets/css/components/multiselect.preload.css.map +1 -1
  42. package/assets/css/components/nav.component.css +1 -1
  43. package/assets/css/components/nav.component.css.map +1 -1
  44. package/assets/css/components/nav.docs.css.map +1 -1
  45. package/assets/css/components/nav.global.css.map +1 -1
  46. package/assets/css/components/nav.preload.css.map +1 -1
  47. package/assets/css/components/notification.css.map +1 -1
  48. package/assets/css/components/pagination.css +1 -1
  49. package/assets/css/components/pagination.css.map +1 -1
  50. package/assets/css/components/popover.component.css +1 -0
  51. package/assets/css/components/popover.component.css.map +1 -0
  52. package/assets/css/components/property-searchbar.css.map +1 -1
  53. package/assets/css/components/rank.component.css.map +1 -1
  54. package/assets/css/components/rankings.component.css.map +1 -1
  55. package/assets/css/components/rankings.global.css.map +1 -1
  56. package/assets/css/components/slider.css +1 -1
  57. package/assets/css/components/slider.css.map +1 -1
  58. package/assets/css/components/snapshot.css.map +1 -1
  59. package/assets/css/components/split-button.component.css +1 -1
  60. package/assets/css/components/split-button.component.css.map +1 -1
  61. package/assets/css/components/stepper.css.map +1 -1
  62. package/assets/css/components/table-basic.component.css.map +1 -1
  63. package/assets/css/components/table-basic.global.css +1 -1
  64. package/assets/css/components/table-basic.global.css.map +1 -1
  65. package/assets/css/components/table.component.css.map +1 -1
  66. package/assets/css/components/table.global.css +1 -1
  67. package/assets/css/components/table.global.css.map +1 -1
  68. package/assets/css/components/tabs.component.css +1 -1
  69. package/assets/css/components/tabs.component.css.map +1 -1
  70. package/assets/css/components/tabs.config.css.map +1 -1
  71. package/assets/css/components/testimonial.css.map +1 -1
  72. package/assets/css/components/timeline.css.map +1 -1
  73. package/assets/css/components/tooltip.component.css +1 -0
  74. package/assets/css/components/tooltip.component.css.map +1 -0
  75. package/assets/css/core.min.css +1 -1
  76. package/assets/css/core.min.css.map +1 -1
  77. package/assets/css/mobile-core.min.css +1 -1
  78. package/assets/css/mobile-core.min.css.map +1 -1
  79. package/assets/css/mobile.min.css +1 -1
  80. package/assets/css/mobile.min.css.map +1 -1
  81. package/assets/css/style.min.css +1 -1
  82. package/assets/css/style.min.css.map +1 -1
  83. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  84. package/assets/js/components/actionbar/actionbar.component.min.js +5 -5
  85. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  86. package/assets/js/components/address-lookup/address-lookup.component.min.js +4 -4
  87. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  88. package/assets/js/components/advanced-select/advanced-select.component.min.js +3 -3
  89. package/assets/js/components/advanced-select/advanced-select.component.min.js.map +1 -1
  90. package/assets/js/components/applied-filters/applied-filters.component.min.js +4 -4
  91. package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
  92. package/assets/js/components/barchart/barchart.component.min.js +2 -2
  93. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  94. package/assets/js/components/calendar/calendar.component.min.js +4 -4
  95. package/assets/js/components/card/card.component.min.js +6 -6
  96. package/assets/js/components/card/card.component.min.js.map +1 -1
  97. package/assets/js/components/carousel/carousel.component.min.js +4 -4
  98. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +2 -2
  99. package/assets/js/components/content/content.component.min.js +2 -2
  100. package/assets/js/components/darkmode/darkmode.component.js +5 -1
  101. package/assets/js/components/darkmode/darkmode.component.min.js +2 -2
  102. package/assets/js/components/darkmode/darkmode.component.min.js.map +1 -1
  103. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +7 -7
  104. package/assets/js/components/fileupload/fileupload.component.min.js +3 -3
  105. package/assets/js/components/filter-card/filter-card.component.min.js +1 -1
  106. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  107. package/assets/js/components/header/header.component.min.js +1 -1
  108. package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
  109. package/assets/js/components/input/input.component.js +82 -1
  110. package/assets/js/components/input/input.component.min.js +4 -4
  111. package/assets/js/components/input/input.component.min.js.map +1 -1
  112. package/assets/js/components/input-range/input-range.component.min.js +1 -1
  113. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  114. package/assets/js/components/menu/menu.component.js +1 -0
  115. package/assets/js/components/menu/menu.component.min.js +4 -4
  116. package/assets/js/components/menu/menu.component.min.js.map +1 -1
  117. package/assets/js/components/milestone/milestone.component.min.js +1 -1
  118. package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
  119. package/assets/js/components/modal/modal.component.min.js +4 -4
  120. package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
  121. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +4 -4
  122. package/assets/js/components/multiselect/multiselect.component.min.js +4 -4
  123. package/assets/js/components/nav/nav.component.min.js +2 -2
  124. package/assets/js/components/notification/notification.component.min.js +1 -1
  125. package/assets/js/components/pagination/pagination.component.min.js +2 -2
  126. package/assets/js/components/password/password.component.min.js +1 -1
  127. package/assets/js/components/popover/popover.component.js +36 -0
  128. package/assets/js/components/popover/popover.component.min.js +13 -0
  129. package/assets/js/components/popover/popover.component.min.js.map +1 -0
  130. package/assets/js/components/rank/rank.component.min.js +1 -1
  131. package/assets/js/components/rankings/rankings.component.min.js +1 -1
  132. package/assets/js/components/record-card/record-card.component.min.js +1 -1
  133. package/assets/js/components/search/search.component.min.js +5 -5
  134. package/assets/js/components/search/search.component.min.js.map +1 -1
  135. package/assets/js/components/slider/slider.component.min.js +2 -2
  136. package/assets/js/components/split-button/split-button.component.min.js +4 -4
  137. package/assets/js/components/split-button/split-button.component.min.js.map +1 -1
  138. package/assets/js/components/std-address-lookup/std-address-lookup.component.js +1 -1
  139. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +7 -7
  140. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
  141. package/assets/js/components/table/table.component.min.js +6 -6
  142. package/assets/js/components/table/table.component.min.js.map +1 -1
  143. package/assets/js/components/table-ajax/table-ajax.component.min.js +6 -6
  144. package/assets/js/components/table-ajax/table-ajax.component.min.js.map +1 -1
  145. package/assets/js/components/table-basic/table-basic.component.js +1 -1
  146. package/assets/js/components/table-basic/table-basic.component.min.js +4 -4
  147. package/assets/js/components/table-basic/table-basic.component.min.js.map +1 -1
  148. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +6 -6
  149. package/assets/js/components/table-no-submit/table-no-submit.component.min.js.map +1 -1
  150. package/assets/js/components/table-submit/table-submit.component.min.js +5 -5
  151. package/assets/js/components/table-submit/table-submit.component.min.js.map +1 -1
  152. package/assets/js/components/tabs/tabs.component.min.js +4 -4
  153. package/assets/js/components/tooltip/tooltip.component.js +68 -0
  154. package/assets/js/components/tooltip/tooltip.component.min.js +14 -0
  155. package/assets/js/components/tooltip/tooltip.component.min.js.map +1 -0
  156. package/assets/js/components/video-card/video-card.component.min.js +1 -1
  157. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  158. package/assets/js/modules/advanced-select.js +6 -0
  159. package/assets/js/modules/applied-filters.js +8 -2
  160. package/assets/js/modules/table.js +49 -164
  161. package/assets/js/scripts.bundle.js +1 -1
  162. package/assets/js/scripts.bundle.min.js +1 -1
  163. package/assets/sass/_elements.scss +5 -0
  164. package/assets/sass/_functions/mixins.scss +53 -0
  165. package/assets/sass/components/actionbar.component.scss +8 -1
  166. package/assets/sass/components/address-lookup.component.scss +1 -0
  167. package/assets/sass/components/menu.component.scss +7 -5
  168. package/assets/sass/components/popover.component.scss +28 -0
  169. package/assets/sass/components/table-basic.global.scss +5 -7
  170. package/assets/sass/components/tooltip.component.scss +120 -0
  171. package/assets/sass/elements/buttons--special.scss +45 -0
  172. package/assets/sass/elements/buttons.scss +6 -0
  173. package/assets/sass/elements/dialog.scss +8 -7
  174. package/assets/sass/elements/feature.scss +53 -0
  175. package/assets/sass/elements/forms.scss +10 -187
  176. package/assets/sass/elements/input.scss +177 -0
  177. package/assets/sass/elements/links.scss +7 -1
  178. package/assets/sass/elements/popover.scss +3 -2
  179. package/assets/ts/components/darkmode/darkmode.component.ts +6 -2
  180. package/assets/ts/components/input/input.component.ts +109 -1
  181. package/assets/ts/components/menu/menu.component.ts +1 -0
  182. package/assets/ts/components/popover/popover.component.ts +50 -0
  183. package/assets/ts/components/std-address-lookup/std-address-lookup.component.ts +1 -1
  184. package/assets/ts/components/table-basic/table-basic.component.ts +1 -1
  185. package/assets/ts/components/tooltip/tooltip.component.ts +98 -0
  186. package/assets/ts/modules/advanced-select.ts +8 -0
  187. package/assets/ts/modules/applied-filters.ts +12 -1
  188. package/assets/ts/modules/table.ts +15 -161
  189. package/dist/components.es.js +493 -563
  190. package/dist/components.umd.js +224 -201
  191. package/package.json +5 -5
  192. package/src/components/Filterlist/Filterlist.vue +0 -12
  193. package/src/components/Popover/Popover.vue +22 -0
  194. package/src/components/Tooltip/Tooltip.vue +22 -0
@@ -72,6 +72,12 @@ $darkMode: 'true' !default;
72
72
  }
73
73
  }
74
74
 
75
+ &:not(.text-decoration-none).text-underline-plain {
76
+ &:after {
77
+ background: currentColor;
78
+ }
79
+ }
80
+
75
81
  [class*='fa-'] {
76
82
  margin-left: 0;
77
83
  margin-right: 0.5rem;
@@ -94,7 +100,7 @@ $darkMode: 'true' !default;
94
100
  }
95
101
 
96
102
  @include inline-text() {
97
- a:not(.btn) {
103
+ a:not(.btn):not(.link) {
98
104
  min-height: none;
99
105
  display: inline;
100
106
  margin: 0;
@@ -71,7 +71,8 @@ $darkMode: 'true' !default;
71
71
 
72
72
  //right: auto;
73
73
  margin: 0 0 0 #{rem(4)};
74
- padding: rem(16);
74
+ //padding: rem(16);
75
+ padding: rem(24);
75
76
 
76
77
  &::backdrop {
77
78
  display: none;
@@ -94,7 +95,6 @@ $darkMode: 'true' !default;
94
95
  min-width: rem(320);
95
96
  border-radius: rem(16);
96
97
  width: rem(320);
97
- padding: rem(24);
98
98
 
99
99
  @include media-breakpoint-up(sm, $mobileOnly) {
100
100
  width: rem(335);
@@ -256,3 +256,4 @@ $darkMode: 'true' !default;
256
256
  }
257
257
  // #endregion
258
258
  }
259
+
@@ -34,14 +34,18 @@ class iamDarkMode extends HTMLElement {
34
34
 
35
35
  const storedTheme = localStorage.getItem('user-theme');
36
36
 
37
+ console.log(storedTheme);
38
+
37
39
  // Work from local storage first then look at the media preferences
38
40
  label?.innerHTML = `<input type="checkbox" name="dark-mode" /> Light mode`;
39
41
  if (storedTheme == 'dark-theme') {
40
42
  label?.innerHTML = `<input type="checkbox" name="dark-mode" checked="checked" /> Dark mode`;
41
43
  label?.classList.add('dark-theme');
44
+ document.documentElement.className = 'dark-theme';
42
45
  } else if (storedTheme == 'light-theme') {
43
46
  label?.innerHTML = `<input type="checkbox" name="dark-mode" /> Light mode`;
44
47
  label?.classList.remove('dark-theme');
48
+ document.documentElement.className = 'light-theme';
45
49
  }
46
50
 
47
51
  const hasDarkPreference = window.matchMedia('(prefers-color-scheme: dark)').matches;
@@ -51,8 +55,6 @@ class iamDarkMode extends HTMLElement {
51
55
  }
52
56
 
53
57
  this.addEventListener('click', (event) => {
54
- console.log(label?.querySelector('input:checked'));
55
-
56
58
  if (label?.querySelector('input:checked')) {
57
59
  label?.innerHTML = `<input type="checkbox" name="dark-mode" checked="checked" /> Dark mode`;
58
60
  localStorage.setItem('user-theme', 'dark-theme');
@@ -70,6 +72,7 @@ class iamDarkMode extends HTMLElement {
70
72
  if (matches) {
71
73
  label?.innerHTML = `<input type="checkbox" name="dark-mode" checked="checked" /> Dark mode`;
72
74
  label?.classList.add('dark-theme');
75
+ document.documentElement.className = 'dark-theme';
73
76
  }
74
77
  });
75
78
 
@@ -77,6 +80,7 @@ class iamDarkMode extends HTMLElement {
77
80
  if (matches) {
78
81
  label?.innerHTML = `<input type="checkbox" name="dark-mode" /> Light mode`;
79
82
  label?.classList.remove('dark-theme');
83
+ document.documentElement.className = 'light-theme';
80
84
  }
81
85
  });
82
86
  }
@@ -20,7 +20,7 @@ class iamInput extends HTMLElement {
20
20
  <link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous">
21
21
  <div class="wrapper" part="wrapper">
22
22
  <span part="prefix"><slot name="prefix"></slot></span>
23
- <slot></slot>
23
+ <slot part="input-wrapper"></slot>
24
24
  <slot part="suffix"><slot name="suffix"></slot></slot>
25
25
  </div>
26
26
  `;
@@ -64,6 +64,61 @@ class iamInput extends HTMLElement {
64
64
  }
65
65
  setIcon(inputType);
66
66
 
67
+
68
+ const setCurrencyRules = () => {
69
+
70
+ input.setAttribute('type','text');
71
+ input?.setAttribute('data-value',input.value);
72
+ input.value = new Intl.NumberFormat("en-GB", {
73
+ style: "currency",
74
+ currency: "GBP",
75
+ minimumFractionDigits: Number.isInteger(input.value) ? 0 : 2,
76
+ maximumFractionDigits: Number.isInteger(input.value) ? 0 : 2,
77
+ trailingZeroDisplay: 'stripIfInteger' // Strip zeros if it's an integer
78
+ }).format(input.value).replace("£", "");
79
+ }
80
+
81
+
82
+ // Currency type
83
+ if(component?.hasAttribute('data-currency')) {
84
+
85
+ // Pre set the icons
86
+ switch (component?.hasAttribute('data-currency')) {
87
+ case "dollar":
88
+ component.setAttribute('data-prefix-icon','dollar-sign') ;
89
+ break;
90
+ case "euro":
91
+ component.setAttribute('data-prefix-icon','euro-sign') ;
92
+ break;
93
+ default:
94
+ component.setAttribute('data-prefix-icon','sterling-sign') ;
95
+ break;
96
+ }
97
+
98
+ setCurrencyRules();
99
+
100
+
101
+ input?.addEventListener('focus',(event) => {
102
+
103
+ input.setAttribute('type', 'number')
104
+
105
+ input.value = input.getAttribute('data-value');
106
+ input.setAttribute('value', input.getAttribute('data-value'));
107
+ });
108
+
109
+ input?.addEventListener('input',(event) => {
110
+
111
+ input?.setAttribute('data-value',input.value);
112
+ });
113
+
114
+ input?.addEventListener('blur',(event) => {
115
+
116
+ setCurrencyRules();
117
+ });
118
+ }
119
+
120
+
121
+
67
122
  // Colour input field
68
123
  if(input?.matches('[type="color"]')){
69
124
  this.insertAdjacentHTML('beforeend', `<output></output>`);
@@ -161,7 +216,60 @@ class iamInput extends HTMLElement {
161
216
  input.showPicker();
162
217
  });
163
218
 
219
+ // Duplicate input watches
220
+ if(component.hasAttribute('data-duplicate')){
221
+
222
+ const id = component.getAttribute('data-duplicate');
223
+ const watchedInputs = document.querySelectorAll(`[name="${id}"], [id="${id}"]`);
224
+
225
+ input.addEventListener('change', (event) => {
226
+
227
+ if(input.closest('iam-modal'))
228
+ return false;
229
+
230
+ if(input?.matches('[type="checkbox"]') && watchedInput?.matches('[type="checkbox"]')){
231
+ watchedInput.checked = event.target.checked;
232
+
233
+ if(!event.detail && !event.detail?.triggered){
234
+ const changeEvent = new CustomEvent('change', { detail: {triggered: true} });
235
+ watchedInput?.dispatchEvent(changeEvent);
236
+ }
237
+ }
238
+ });
239
+
240
+ Array.from(watchedInputs).forEach((watchedInput) => {
241
+
242
+ watchedInput?.addEventListener('change', (event) => {
243
+
244
+ // If both the duplicate input and the watched input are checkboxes
245
+ if(input?.matches('[type="checkbox"]') && watchedInput?.matches('[type="checkbox"]')){
246
+ input.checked = event.target.checked;
247
+
248
+ if(!event.detail && !event.detail?.triggered){
249
+ const changeEvent = new CustomEvent('change', { detail: {triggered: true} });
250
+ input?.dispatchEvent(changeEvent);
251
+ }
252
+ }
164
253
 
254
+ // if input is not a checkbox BUT the watched input is
255
+ // Then we need to create the input's value
256
+ if(!input?.matches('[type="checkbox"]') && watchedInput?.matches('[type="checkbox"]')){
257
+
258
+ let computedValue = '';
259
+ Array.from(document.querySelectorAll(`[name="${id}"]:checked`)).forEach((loopInput) => {
260
+
261
+ computedValue += (computedValue == '' ? '' : ',') + loopInput.value;
262
+ });
263
+ input.value = computedValue;
264
+
265
+ if(!event.detail && !event.detail?.triggered){
266
+ const changeEvent = new CustomEvent('change', { detail: {triggered: true} });
267
+ input?.dispatchEvent(changeEvent);
268
+ }
269
+ }
270
+ });
271
+ });
272
+ }
165
273
  }
166
274
  }
167
275
 
@@ -40,6 +40,7 @@ class iamMenu extends HTMLElement {
40
40
  // Set the needed CSS styles to connect the ID attribute to the anchor name
41
41
  if (menuID && menuButton) {
42
42
  this.setAttribute('role', 'menu');
43
+ this.setAttribute('popover', 'auto');
43
44
  this.style['position-anchor'] = `--${menuID}`;
44
45
 
45
46
  menuButton?.setAttribute('aria-haspopup', 'true');
@@ -0,0 +1,50 @@
1
+ import { trackComponent, trackComponentRegistered } from '../_global';
2
+
3
+
4
+ trackComponentRegistered('iam-popover');
5
+
6
+ class iamPopover 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/popover.component.css";`;
15
+
16
+ const template = document.createElement('template');
17
+ template.innerHTML = `
18
+ <style>
19
+ ${loadCSS}
20
+ </style>
21
+ <div>
22
+ <slot></slot>
23
+ </div>
24
+ `;
25
+
26
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
27
+ }
28
+
29
+ connectedCallback(): void {
30
+
31
+ const id = this.getAttribute('id');
32
+ const button = document.querySelector(`[popovertarget="${id}"]`);
33
+
34
+ this.setAttribute('popover','auto');
35
+
36
+
37
+ button?.addEventListener('click',() => {
38
+
39
+ if(this.matches(':popover-open')){
40
+ button.removeAttribute('aria-pressed');
41
+ }
42
+ else {
43
+
44
+ button.setAttribute('aria-pressed','true');
45
+ }
46
+ });
47
+ }
48
+ }
49
+
50
+ export default iamPopover;
@@ -1554,7 +1554,7 @@ class iamSTDAddressLookup extends HTMLElement {
1554
1554
  data-url="/standardaddress.json?search_query="
1555
1555
  data-postcode="true"
1556
1556
  data-min-chars="5"
1557
- data-title="Find an address by postcode"
1557
+ ${this.hasAttribute('data-title') ? `data-title='${this.getAttribute('data-title')}'` : `data-title='Find an address by postcode'`}
1558
1558
  data-placeholder="UK, Isle of Man, & Channel Islands "
1559
1559
  ${this.hasAttribute('data-manual') ? 'data-manual' : ''}
1560
1560
  ${this.hasAttribute('data-allow-manual') ? 'data-allow-manual' : ''}
@@ -48,7 +48,7 @@ class iamTableBasic extends HTMLElement {
48
48
  setupBasicTable(this, table, form, pagination);
49
49
 
50
50
  paginateTable(this, table, form, pagination, () => {
51
- paginateRows(component);
51
+ paginateRows(this);
52
52
  });
53
53
  }
54
54
  }
@@ -0,0 +1,98 @@
1
+ import { trackComponent, trackComponentRegistered } from '../_global';
2
+
3
+
4
+ trackComponentRegistered('iam-tooltip');
5
+
6
+ class iamTooltip 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/popover.component.css";`;
15
+
16
+ const template = document.createElement('template');
17
+ template.innerHTML = `
18
+ <style>
19
+ ${loadCSS}
20
+ </style>
21
+ <slot></slot>
22
+ <div class="tooltip__anchor">
23
+ </div>
24
+ <div class="tooltip__content" id="tooltip"></div>
25
+ `;
26
+
27
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
28
+ }
29
+
30
+ connectedCallback(): void {
31
+
32
+
33
+ const contentWrapper = this.shadowRoot?.querySelector('.tooltip__content');
34
+ const anchor = this.shadowRoot?.querySelector('.tooltip__anchor');
35
+
36
+ if(this.hasAttribute('data-heading'))
37
+ contentWrapper?.innerHTML += `<strong>${this.getAttribute('data-heading')}</strong>`;
38
+
39
+ contentWrapper?.innerHTML += this.getAttribute('title');
40
+
41
+
42
+ this.removeAttribute('title');
43
+
44
+ contentWrapper?.setAttribute('popover', 'auto');
45
+
46
+ this?.addEventListener('mouseenter', (event) => {
47
+
48
+ contentWrapper.showPopover();
49
+ });
50
+ this?.addEventListener('mouseleave', (event) => {
51
+
52
+ if(!contentWrapper?.classList.contains('show-popover'))
53
+ contentWrapper.hidePopover();
54
+ });
55
+
56
+
57
+ // Check if th component sets the tooltip open by default
58
+ if(this.classList.contains('show-popover')){
59
+ contentWrapper?.classList.add('show-popover');
60
+
61
+ contentWrapper?.setAttribute('popover', 'manual'); // Switch popover type first before showing popover
62
+ contentWrapper.showPopover();
63
+ }
64
+
65
+ this?.addEventListener('click', (event) => {
66
+
67
+ contentWrapper?.classList.toggle('show-popover');
68
+
69
+ if(contentWrapper?.classList.contains('show-popover')){
70
+
71
+ contentWrapper?.setAttribute('popover', 'manual'); // Switch popover type first before showing popover
72
+ contentWrapper.showPopover();
73
+ }
74
+ else {
75
+
76
+ contentWrapper?.setAttribute('popover', 'auto');
77
+ contentWrapper.hidePopover();
78
+ }
79
+ });
80
+
81
+ // Used for documentation
82
+ this?.parentNode?.addEventListener('update', (event) => {
83
+ contentWrapper?.setAttribute('popover', 'auto');
84
+ contentWrapper.hidePopover();
85
+
86
+ setTimeout(() => {
87
+
88
+ contentWrapper?.classList.add('show-popover');
89
+
90
+ contentWrapper?.setAttribute('popover', 'manual'); // Switch popover type first before showing popover
91
+ contentWrapper.showPopover();
92
+
93
+ }, 100);
94
+ });
95
+ }
96
+ }
97
+
98
+ export default iamTooltip;
@@ -24,7 +24,12 @@ function advancedSelect(advancedSelect, displayInputField, datalist, isSearch =
24
24
 
25
25
  });
26
26
 
27
+ displayInputField.addEventListener('keyup', function () {
27
28
 
29
+ if(displayInputField.value != ""){
30
+ displayInputField.setAttribute('data-value', displayInputField.value);
31
+ }
32
+ });
28
33
 
29
34
  displayInputField.addEventListener('blur', function () {
30
35
  if (displayInputField.hasAttribute('data-value')) {
@@ -113,6 +118,9 @@ function advancedSelect(advancedSelect, displayInputField, datalist, isSearch =
113
118
 
114
119
 
115
120
  const emptyField = () => {
121
+
122
+ displayInputField.removeAttribute('placeholder');
123
+
116
124
  if(displayInputField.hasAttribute('data-original-placeholder'))
117
125
  displayInputField.setAttribute('placeholder', displayInputField.getAttribute('data-original-placeholder'));
118
126
 
@@ -127,6 +127,10 @@ function createAppliedFilters(container, filters): void {
127
127
 
128
128
 
129
129
  const filterClicked = (filter) => {
130
+
131
+ if(!filter?.hasAttribute('data-name'))
132
+ return false;
133
+
130
134
  const names = filter.getAttribute('data-name').split(',');
131
135
 
132
136
  for (let t = 0; t < names.length; t++) {
@@ -172,6 +176,9 @@ function createAppliedFilters(container, filters): void {
172
176
 
173
177
  filterClicked(filter);
174
178
 
179
+ const clickedEvent = new CustomEvent('filter-clicked',{'detail':filterName });
180
+ container.dispatchEvent(clickedEvent);
181
+
175
182
  // If you clicked on the filter on the parent component we want to tell the child component which filter to copy
176
183
  if(container.querySelector('dialog iam-applied-filters')) {
177
184
  const event = new CustomEvent('filter',{'detail':filterName });
@@ -196,10 +203,14 @@ function createAppliedFilters(container, filters): void {
196
203
  });
197
204
 
198
205
  if(dialog){
206
+ const primaryButton = container.querySelector('.btn-primary') ? container.querySelector('.btn-primary') : container.shadowRoot.querySelector('.btn-primary');
199
207
  // Force the filters inside of the dialog to effect the filters above
200
- container.querySelector('.btn-primary')?.addEventListener('click', (e) => {
208
+ primaryButton?.addEventListener('click', (e) => {
201
209
 
202
210
  const event = new CustomEvent('update');
211
+ const submitEvent = new CustomEvent('submit');
212
+
213
+ container.dispatchEvent(submitEvent);
203
214
 
204
215
  if(container.parentElement.closest('iam-applied-filters'))
205
216
  container.parentElement.closest('iam-applied-filters').dispatchEvent(event);