@iamproperty/components 7.2.2--beta3 → 7.3.0

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 (86) 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/barchart.component.css.map +1 -1
  4. package/assets/css/components/bento-grid.global.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/charts.module.css.map +1 -1
  8. package/assets/css/components/doughnutchart.component.css.map +1 -1
  9. package/assets/css/components/menu.component.css +1 -1
  10. package/assets/css/components/menu.component.css.map +1 -1
  11. package/assets/css/components/menu.css +1 -1
  12. package/assets/css/components/menu.css.map +1 -1
  13. package/assets/css/components/rank.component.css.map +1 -1
  14. package/assets/css/components/rankings.component.css.map +1 -1
  15. package/assets/css/components/rankings.global.css.map +1 -1
  16. package/assets/css/components/table-basic.global.css.map +1 -1
  17. package/assets/css/components/table.global.css.map +1 -1
  18. package/assets/css/core.min.css +1 -1
  19. package/assets/css/core.min.css.map +1 -1
  20. package/assets/css/mobile-core.min.css +1 -1
  21. package/assets/css/mobile-core.min.css.map +1 -1
  22. package/assets/css/mobile.min.css +1 -1
  23. package/assets/css/mobile.min.css.map +1 -1
  24. package/assets/css/style.min.css +1 -1
  25. package/assets/css/style.min.css.map +1 -1
  26. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  27. package/assets/js/components/actionbar/actionbar.component.min.js +2 -2
  28. package/assets/js/components/address-lookup/address-lookup.component.min.js +1 -1
  29. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  30. package/assets/js/components/barchart/barchart.component.min.js +1 -1
  31. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  32. package/assets/js/components/card/card.component.min.js +2 -2
  33. package/assets/js/components/carousel/carousel.component.min.js +1 -1
  34. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  35. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +1 -1
  36. package/assets/js/components/fileupload/fileupload.component.min.js +1 -1
  37. package/assets/js/components/filter-card/filter-card.component.min.js +1 -1
  38. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  39. package/assets/js/components/header/header.component.min.js +1 -1
  40. package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
  41. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  42. package/assets/js/components/menu/menu.component.js +138 -159
  43. package/assets/js/components/menu/menu.component.min.js +4 -69
  44. package/assets/js/components/menu/menu.component.min.js.map +1 -1
  45. package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
  46. package/assets/js/components/multiselect/multiselect.component.min.js +1 -1
  47. package/assets/js/components/nav/nav.component.min.js +1 -1
  48. package/assets/js/components/notification/notification.component.min.js +1 -1
  49. package/assets/js/components/pagination/pagination.component.min.js +1 -1
  50. package/assets/js/components/rank/rank.component.min.js +1 -1
  51. package/assets/js/components/rankings/rankings.component.min.js +1 -1
  52. package/assets/js/components/record-card/record-card.component.min.js +1 -1
  53. package/assets/js/components/search/search.component.min.js +1 -1
  54. package/assets/js/components/slider/slider.component.min.js +1 -1
  55. package/assets/js/components/table/table.component.min.js +1 -1
  56. package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
  57. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  58. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
  59. package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
  60. package/assets/js/components/tabs/tabs.component.min.js +1 -1
  61. package/assets/js/components/video-card/video-card.component.min.js +1 -1
  62. package/assets/js/scripts.bundle.js +1 -1
  63. package/assets/js/scripts.bundle.min.js +1 -1
  64. package/assets/sass/_functions/variables.scss +0 -3
  65. package/assets/sass/components/actionbar.component.scss +2 -3
  66. package/assets/sass/components/bento-grid.global.scss +0 -1
  67. package/assets/sass/components/charts.module.scss +0 -2
  68. package/assets/sass/components/menu.component.scss +123 -31
  69. package/assets/sass/components/menu.scss +68 -7
  70. package/assets/sass/components/rank.component.scss +14 -23
  71. package/assets/sass/components/rankings.component.scss +1 -7
  72. package/assets/sass/components/rankings.global.scss +6 -12
  73. package/assets/sass/components/table-basic.global.scss +2 -4
  74. package/assets/sass/components/table.global.scss +4 -4
  75. package/assets/sass/elements/buttons--global.scss +1 -1
  76. package/assets/sass/elements/dialog.scss +1 -3
  77. package/assets/sass/elements/forms.scss +18 -14
  78. package/assets/sass/foundations/reboot.scss +3 -3
  79. package/assets/ts/components/menu/menu.component.ts +152 -171
  80. package/assets/ts/components/rank/rank.component.ts +1 -6
  81. package/assets/ts/components/rankings/rankings.component.ts +1 -7
  82. package/dist/components.es.js +19 -19
  83. package/dist/components.umd.js +56 -121
  84. package/package.json +1 -1
  85. package/src/components/Rank/Rank.vue +1 -2
  86. package/src/components/Rankings/Rankings.vue +9 -10
@@ -6,8 +6,6 @@ $selector: 'iam-table, iam-table-basic, iam-table-no-submit, iam-table-submit';
6
6
 
7
7
  // #region Basic table stuff
8
8
 
9
-
10
-
11
9
  :is(#{$selector}) {
12
10
  --hover-background: var(--colour-light);
13
11
  --row-bg: var(--colour-canvas-2);
@@ -207,11 +205,11 @@ $selector: 'iam-table, iam-table-basic, iam-table-no-submit, iam-table-submit';
207
205
 
208
206
  :is(#{$selector}).table--cta {
209
207
  @container (width > 23.4375em) {
210
- padding-right: calc(var(--wrapper-padding) + 1.5rem)!important;
208
+ padding-right: calc(var(--wrapper-padding) + 1.5rem) !important;
211
209
 
212
210
  tr > th:nth-last-child(2),
213
211
  tr > td:nth-last-child(2) {
214
- padding-right: var(--cta-width)!important;
212
+ padding-right: var(--cta-width) !important;
215
213
  }
216
214
 
217
215
  tr > *:not(:first-child):last-child {
@@ -285,7 +285,7 @@ $selector: 'iam-table, iam-table-basic, iam-table-no-submit, iam-table-submit';
285
285
 
286
286
  .th--fixed + th:not(.th--fixed),
287
287
  .td--fixed + td:not(.td--fixed) {
288
- padding-left: calc(rem(48 + 6))!important;
288
+ padding-left: calc(rem(48 + 6)) !important;
289
289
  }
290
290
 
291
291
  .th--fixed + .th--fixed,
@@ -295,7 +295,7 @@ $selector: 'iam-table, iam-table-basic, iam-table-no-submit, iam-table-submit';
295
295
 
296
296
  .th--fixed + .th--fixed + th:not(.th--fixed),
297
297
  .td--fixed + .td--fixed + td:not(.td--fixed) {
298
- padding-left: calc(rem(48 + 48 + 6))!important;
298
+ padding-left: calc(rem(48 + 48 + 6)) !important;
299
299
  }
300
300
 
301
301
  .th--fixed + .th--fixed + .th--fixed,
@@ -305,7 +305,7 @@ $selector: 'iam-table, iam-table-basic, iam-table-no-submit, iam-table-submit';
305
305
 
306
306
  .th--fixed + .th--fixed + .th--fixed + th:not(.th--fixed),
307
307
  .td--fixed + .td--fixed + .td--fixed + td:not(.td--fixed) {
308
- padding-left: calc(rem(48 + 48 + 48 + 6))!important;
308
+ padding-left: calc(rem(48 + 48 + 48 + 6)) !important;
309
309
  }
310
310
 
311
311
  .dialog__wrapper {
@@ -348,7 +348,7 @@ $icon-sort-desc: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'
348
348
  }
349
349
 
350
350
  &:has(th[data-sort]) :is(th, td) {
351
- padding-left: 0.25rem!important;
351
+ padding-left: 0.25rem !important;
352
352
  }
353
353
 
354
354
  th[data-sort][data-order-by='asc'] {
@@ -68,7 +68,7 @@ $darkMode: 'true' !default;
68
68
  border-radius: rem(24);
69
69
  margin-bottom: var(--btn-margin);
70
70
  background: none;
71
-
71
+
72
72
  transition:
73
73
  border 0.5s,
74
74
  background 0.5s,
@@ -11,8 +11,7 @@ $darkMode: 'true' !default;
11
11
  display: block;
12
12
  }
13
13
 
14
- // #region Default styling of both modals and popovers
15
- [popover],
14
+ // #region Default styling of both modals
16
15
  dialog {
17
16
  --dialog-padding: #{rem(24)};
18
17
 
@@ -29,7 +28,6 @@ $darkMode: 'true' !default;
29
28
  outline: var(--contrast-outline-width, 0px) solid var(--colour-primary);
30
29
  }
31
30
 
32
- [popover]:popover-open,
33
31
  dialog[open] {
34
32
  display: flex;
35
33
  flex-direction: column;
@@ -762,8 +762,8 @@ $optionalText: 'true' !default;
762
762
  border: 2px solid var(--colour-check-border, var(--colour-primary));
763
763
  background: var(--colour-check-bg, transparent);
764
764
  border-radius: var(--border-radius);
765
- height: rem(24);
766
- width: rem(24);
765
+ height: var(--radio-size, #{rem(24)});
766
+ width: var(--radio-size, #{rem(24)});
767
767
  display: inline-block;
768
768
  position: absolute;
769
769
  top: rem(10 - 2);
@@ -783,10 +783,14 @@ $optionalText: 'true' !default;
783
783
  border-radius: var(--border-radius);
784
784
  height: rem(14);
785
785
  width: rem(14);
786
+
787
+ height: var(--radio-inner-size, #{rem(14)});
788
+ width: var(--radio-inner-size, #{rem(14)});
789
+
786
790
  display: none;
787
791
  position: absolute;
788
- top: rem(15 - 2);
789
- left: calc(#{rem(5)} + var(--outline-width));
792
+ top: var(--radio-inner-top, #{rem(15 - 2)});
793
+ left: var(--radio-inner-left, calc(#{rem(5)} + var(--outline-width)));
790
794
  }
791
795
 
792
796
  &.radio--tick {
@@ -854,19 +858,19 @@ $optionalText: 'true' !default;
854
858
  &:after {
855
859
  content: '\f00c';
856
860
  position: absolute;
857
- font-size: 1em;
861
+ font-size: var(--checkbox-tick-size, 1em);
858
862
  line-height: 1;
859
863
  color: var(--colour-primary-theme);
860
864
  font-family: 'Font Awesome 6 Pro';
861
865
  font-weight: bold;
862
- height: rem(24);
863
- width: rem(24);
866
+ height: var(--checkbox-inner-size, #{rem(24)});
867
+ width: var(--checkbox-inner-size, #{rem(24)});
864
868
  line-height: rem(26);
865
869
  background: none !important;
866
870
  border: none !important;
867
871
  outline: none !important;
868
- top: rem(10 - 2);
869
- left: var(--outline-width);
872
+ top: var(--checkbox-inner-top, #{rem(10 - 2)});
873
+ left: var(--checkbox-inner-left, var(--outline-width));
870
874
  text-align: center;
871
875
  }
872
876
  }
@@ -881,19 +885,19 @@ $optionalText: 'true' !default;
881
885
  &:after {
882
886
  content: '\f068';
883
887
  position: absolute;
884
- font-size: 1em;
888
+ font-size: var(--checkbox-tick-size, 1em);
885
889
  line-height: 1;
886
890
  color: var(--colour-primary-theme);
887
891
  font-family: 'Font Awesome 6 Pro';
888
892
  font-weight: bold;
889
- height: rem(24);
890
- width: rem(24);
893
+ height: var(--checkbox-inner-size, #{rem(24)});
894
+ width: var(--checkbox-inner-size, #{rem(24)});
891
895
  line-height: rem(26);
892
896
  background: none !important;
893
897
  border: none !important;
894
898
  outline: none !important;
895
- top: rem(10 - 2);
896
- left: var(--outline-width);
899
+ top: var(--checkbox-inner-top, #{rem(10 - 2)});
900
+ left: var(--checkbox-inner-left, var(--outline-width));
897
901
  text-align: center;
898
902
  }
899
903
  }
@@ -126,18 +126,18 @@ $darkMode: 'true' !default;
126
126
  }
127
127
 
128
128
  // #region scrollbars
129
- :is(div, form, fieldset, textarea, details)::-webkit-scrollbar {
129
+ :is(div, form, fieldset, textarea, details, iam-menu)::-webkit-scrollbar {
130
130
  width: 10px;
131
131
  height: 10px;
132
132
  }
133
133
 
134
- :is(div, form, fieldset, textarea, details)::-webkit-scrollbar-track {
134
+ :is(div, form, fieldset, textarea, details, iam-menu)::-webkit-scrollbar-track {
135
135
  background-color: #f1f1f1;
136
136
  border-top: 4px solid var(--colour-canvas-2);
137
137
  border-left: 4px solid var(--colour-canvas-2);
138
138
  }
139
139
 
140
- :is(div, form, fieldset, textarea, details)::-webkit-scrollbar-thumb {
140
+ :is(div, form, fieldset, textarea, details, iam-menu)::-webkit-scrollbar-thumb {
141
141
  background-color: #c1c1c1;
142
142
  width: 6px;
143
143
  border-top: 4px solid var(--colour-canvas-2);
@@ -24,7 +24,6 @@ class iamMenu extends HTMLElement {
24
24
  const menuID = this.hasAttribute('id') ? this.getAttribute('id') : false;
25
25
  const menuButton = document.querySelector(`[popovertarget="${menuID}"]`);
26
26
 
27
- const menuInner = this.shadowRoot.querySelector('.menu--inner');
28
27
  const topLevelmenuItems = this.querySelectorAll(':scope > a, :scope > button, :scope > details > summary');
29
28
  const menuItems = this.querySelectorAll('a, button');
30
29
  const subMenus = this.querySelectorAll('details');
@@ -34,188 +33,170 @@ class iamMenu extends HTMLElement {
34
33
 
35
34
  // Set the needed CSS styles to connect the ID attribute to the anchor name
36
35
  if (menuID && menuButton) {
37
- menuInner?.setAttribute('role', 'menu');
36
+ this.setAttribute('role', 'menu');
38
37
  this.style['position-anchor'] = `--${menuID}`;
39
38
 
40
39
  menuButton?.setAttribute('aria-haspopup', 'true');
41
40
  menuButton?.style['anchor-name'] = `--${menuID}`;
42
41
  menuButton?.setAttribute('aria-controls', menuID);
42
+ }
43
43
 
44
- subMenus.forEach((item, index) => {
45
- item.setAttribute('role', 'menu');
46
- });
47
-
48
- menuItems.forEach((item, index) => {
49
- item.setAttribute('role', 'menuitem');
50
- item.setAttribute('tabindex', '0');
51
-
52
- if (index == 0) {
53
- item.setAttribute('autofocus', true);
54
- }
55
- });
56
-
57
- this.addEventListener('keydown', (event) => {
58
- if (event && event.target instanceof HTMLElement && event.target.closest('a, button, summary')) {
59
- const activeItem = document.activeElement;
60
- const prevIndex = Array.from(topLevelmenuItems).indexOf(activeItem) - 1;
61
- const nextIndex = Array.from(topLevelmenuItems).indexOf(activeItem) + 1;
62
-
63
- switch (
64
- event.keyCode // change to event.key to key to use the above variable
65
- ) {
66
- case 27: // Esc
67
- if (activeItem.closest('details')) {
68
- event.stopPropagation();
69
- event.preventDefault();
70
- activeItem.closest('details').removeAttribute('open');
71
- activeItem.closest('details').querySelector(':scope summary').focus();
72
- } else {
73
- event.stopPropagation();
74
- menuButton.focus();
75
- }
76
-
77
- break;
78
- case 32: // Space
79
- case 13: // Enter
80
- if (activeItem.matches('summary') && !activeItem.parentElement.matches('details[open]')) {
81
- activeItem.parentElement.setAttribute('open', true);
82
- const subMenuItems = activeItem
83
- .closest('details')
84
- .querySelectorAll('a, button, :scope details > summary');
85
- Array.from(subMenuItems)[0].focus();
86
- }
87
-
88
- break;
89
- case 35: // end
90
- event.stopPropagation();
91
- event.preventDefault();
92
-
93
- this.querySelector('details[open]').removeAttribute('open');
94
- Array.from(menuItems)[menuItems.length - 1].focus();
95
-
96
- break;
97
- case 36: // home
98
- event.stopPropagation();
99
- event.preventDefault();
100
-
101
- this.querySelector('details[open]').removeAttribute('open');
102
- Array.from(menuItems)[0].focus();
103
-
104
- break;
105
- case 38: // up
44
+ menuItems.forEach((item, index) => {
45
+ item.setAttribute('role', 'menuitem');
46
+ item.setAttribute('tabindex', '0');
47
+
48
+ if (index == 0) {
49
+ item.setAttribute('autofocus', true);
50
+ }
51
+ });
52
+
53
+ this.addEventListener('keydown', (event) => {
54
+ if (event && event.target instanceof HTMLElement && event.target.closest('a, button, summary')) {
55
+ const activeItem = document.activeElement;
56
+ const prevIndex = Array.from(topLevelmenuItems).indexOf(activeItem) - 1;
57
+ const nextIndex = Array.from(topLevelmenuItems).indexOf(activeItem) + 1;
58
+
59
+ switch (
60
+ event.keyCode // change to event.key to key to use the above variable
61
+ ) {
62
+ case 27: // Esc
63
+ if (activeItem.closest('details')) {
106
64
  event.stopPropagation();
107
65
  event.preventDefault();
108
-
109
- if (Array.from(topLevelmenuItems).indexOf(activeItem) > -1) {
110
- if (Array.from(topLevelmenuItems)[prevIndex] != undefined)
111
- Array.from(topLevelmenuItems)[prevIndex].focus();
112
- else Array.from(topLevelmenuItems)[topLevelmenuItems.length - 1].focus();
113
- } else if (activeItem.closest('details')) {
114
- const subMenuItems = activeItem
115
- .closest('details')
116
- .querySelectorAll('a, button, :scope details > summary');
117
- subPrevIndex = Array.from(subMenuItems).indexOf(activeItem) - 1;
118
-
119
- if (Array.from(subMenuItems)[subPrevIndex] != undefined) Array.from(subMenuItems)[subPrevIndex].focus();
120
- else Array.from(subMenuItems)[subMenuItems.length - 1].focus();
121
- }
122
-
123
- break;
124
- case 40: // down
66
+ activeItem.closest('details').removeAttribute('open');
67
+ activeItem.closest('details').querySelector(':scope summary').focus();
68
+ } else {
125
69
  event.stopPropagation();
126
- event.preventDefault();
127
-
128
- if (Array.from(topLevelmenuItems).indexOf(activeItem) > -1) {
129
- if (Array.from(topLevelmenuItems)[nextIndex] != undefined)
130
- Array.from(topLevelmenuItems)[nextIndex].focus();
131
- else Array.from(topLevelmenuItems)[0].focus();
132
- } else if (activeItem.closest('details')) {
133
- const subMenuItems = activeItem
134
- .closest('details')
135
- .querySelectorAll('a, button, :scope details > summary');
136
- subNextIndex = Array.from(subMenuItems).indexOf(activeItem) + 1;
137
-
138
- if (Array.from(subMenuItems)[subNextIndex] != undefined) Array.from(subMenuItems)[subNextIndex].focus();
139
- else Array.from(subMenuItems)[0].focus();
140
- }
141
-
142
- break;
143
- }
70
+ menuButton.focus();
71
+ }
72
+
73
+ break;
74
+ case 32: // Space
75
+ case 13: // Enter
76
+ break;
77
+ case 35: // end
78
+ event.stopPropagation();
79
+ event.preventDefault();
80
+
81
+ this.querySelector('details[open]').removeAttribute('open');
82
+ Array.from(menuItems)[menuItems.length - 1].focus();
83
+
84
+ break;
85
+ case 36: // home
86
+ event.stopPropagation();
87
+ event.preventDefault();
88
+
89
+ this.querySelector('details[open]').removeAttribute('open');
90
+ Array.from(menuItems)[0].focus();
91
+
92
+ break;
93
+ case 38: // up
94
+ event.stopPropagation();
95
+ event.preventDefault();
96
+
97
+ if (Array.from(topLevelmenuItems).indexOf(activeItem) > -1) {
98
+ if (Array.from(topLevelmenuItems)[prevIndex] != undefined)
99
+ Array.from(topLevelmenuItems)[prevIndex].focus();
100
+ else Array.from(topLevelmenuItems)[topLevelmenuItems.length - 1].focus();
101
+ } else if (activeItem.closest('details')) {
102
+ const subMenuItems = activeItem
103
+ .closest('details')
104
+ .querySelectorAll('a, button, :scope details > summary');
105
+ subPrevIndex = Array.from(subMenuItems).indexOf(activeItem) - 1;
106
+
107
+ if (Array.from(subMenuItems)[subPrevIndex] != undefined) Array.from(subMenuItems)[subPrevIndex].focus();
108
+ else Array.from(subMenuItems)[subMenuItems.length - 1].focus();
109
+ }
110
+
111
+ break;
112
+ case 40: // down
113
+ event.stopPropagation();
114
+ event.preventDefault();
115
+
116
+ if (Array.from(topLevelmenuItems).indexOf(activeItem) > -1) {
117
+ if (Array.from(topLevelmenuItems)[nextIndex] != undefined)
118
+ Array.from(topLevelmenuItems)[nextIndex].focus();
119
+ else Array.from(topLevelmenuItems)[0].focus();
120
+ } else if (activeItem.closest('details')) {
121
+ const subMenuItems = activeItem
122
+ .closest('details')
123
+ .querySelectorAll('a, button, :scope details > summary');
124
+ subNextIndex = Array.from(subMenuItems).indexOf(activeItem) + 1;
125
+
126
+ if (Array.from(subMenuItems)[subNextIndex] != undefined) Array.from(subMenuItems)[subNextIndex].focus();
127
+ else Array.from(subMenuItems)[0].focus();
128
+ }
129
+
130
+ break;
131
+ }
132
+ }
133
+ });
134
+
135
+ this.addEventListener('toggle', (e) => {
136
+ const updateEvent = new CustomEvent(e.newState, { detail: { id: this.getAttribute('id'), target: e.target } });
137
+ this.dispatchEvent(updateEvent);
138
+
139
+ if (this.hasAttribute('popover-open')) {
140
+ e.preventDefault();
141
+ this.removeAttribute('popover-open');
142
+ this.hidePopover();
143
+ }
144
+
145
+ if(this.matches(':popover-open') && document.querySelector(`[popovertarget="${this.getAttribute('id')}"]`)){
146
+
147
+ document.querySelector(`[popovertarget="${this.getAttribute('id')}"]`)?.setAttribute('aria-pressed','true');
148
+ document.querySelector(`[popovertarget="${this.getAttribute('id')}"]`)?.classList.add('active');
149
+ }
150
+ else {
151
+
152
+ document.querySelector(`[popovertarget="${this.getAttribute('id')}"]`)?.removeAttribute('aria-pressed');
153
+ document.querySelector(`[popovertarget="${this.getAttribute('id')}"]`)?.classList.remove('active');
154
+ }
155
+ });
156
+
157
+ this.addEventListener('click', (event) => {
158
+ if (
159
+ event &&
160
+ event.target instanceof HTMLElement &&
161
+ event.target.closest('button:has(+ iam-menu:not([popover]))')
162
+ ) {
163
+ const button = event.target.closest('button:has(+ iam-menu)');
164
+
165
+ button?.classList.toggle('open');
166
+ } else if (event && event.target instanceof HTMLElement && event.target.closest('button.selectable')) {
167
+ const button = event.target.closest('button.selectable');
168
+ if (this.hasAttribute('multiple')) {
169
+ button.classList.toggle('selected');
170
+ } else if (button?.classList.contains('selected')) {
171
+ this.querySelectorAll('.selected').forEach((item) => {
172
+ item.classList.remove('selected');
173
+ });
174
+ } else {
175
+ this.querySelectorAll('.selected').forEach((item) => {
176
+ item.classList.remove('selected');
177
+ });
178
+ button.classList.add('selected');
179
+ }
180
+ }
181
+ });
182
+
183
+ // safari and firefox anchor fix for cards
184
+ if (!CSS.supports('top', 'anchor(top)')) {
185
+ document.addEventListener('click', (event) => {
186
+ if (event.originalTarget && event.originalTarget.matches('[popovertarget]')) {
187
+ const button = event.originalTarget;
188
+ const popoverID = button.getAttribute('popovertarget');
189
+ const popover = document.getElementById(popoverID);
190
+
191
+ const viewportOffset = button.getBoundingClientRect();
192
+ const top = viewportOffset.top;
193
+ const left = viewportOffset.left;
194
+
195
+ popover.style.setProperty('top', top + 'px');
196
+ popover.style.setProperty('left', left + button.clientWidth + 'px');
144
197
  }
145
198
  });
146
199
  }
147
-
148
- // insert extra CSS to help style inline details and summary items to allow collapsible sub menus
149
- if (this.querySelector('details') && !document.getElementById('menuGlobalStyles'))
150
- document.head.insertAdjacentHTML(
151
- 'beforeend',
152
- `<style id="menuGlobalStyles">
153
- iam-menu details > * {
154
- background: unset !important;
155
- border: unset !important;
156
- color: inherit!important;
157
- font-weight: inherit!important;
158
- font-family: inherit!important;
159
- font-size: 1rem!important;
160
- display: block!important;
161
- margin: var(--menu-item-margin, 0 0 0.25rem 0)!important;
162
- padding: var(--menu-item-padding, 0)!important;
163
- width: var(--menu-item-width, 100%)!important;
164
- text-align: var(--menu-item-text-align, left)!important;
165
- cursor: var(--menu-item-cursor, pointer)!important;
166
- }
167
- iam-menu details > *:after,
168
- iam-menu details > *:not(summary):before {
169
- display: none!important;
170
- }
171
- iam-menu details :is(button,a) {
172
- padding-inline-start: var(--menu-dialog-offset,1rem)!important;
173
- }
174
- iam-menu details :is(button,a):last-child {
175
- margin-block-end: var(--menu-dialog-offset,1rem)!important;
176
- }
177
- iam-menu details summary {
178
- padding: 0 !important;
179
- margin: var(--menu-item-margin, 0 0 0.25rem 0)!important;
180
- }
181
- iam-menu details summary:before {
182
- text-align: center;
183
- display: inline-block!important;
184
- vertical-align: bottom;
185
- float: right;
186
- color: inherit;
187
- height: 1em;
188
- width: 1em;
189
- }
190
-
191
- iam-menu details summary[class*="fa-"]:before {
192
- font-family: var(--fa-font-family, "Font Awesome 6 Pro");
193
- }
194
-
195
- iam-menu details summary:not([class*="fa-"]:before {
196
- --icon-arrow: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' viewBox='0 0 22 22'%3e%3cpath d='M6.5,2l9,9-9,9' style='fill:none;stroke:%23000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:3px'/%3e%3c/svg%3e");
197
-
198
- content: ""!important;
199
- height: 1.2rem;
200
- width: 1.2rem;
201
- background: var(--colour-primary-theme);
202
- mask-image: var(--icon, var(--icon-arrow));
203
- mask-size: 50%;
204
- mask-repeat: no-repeat;
205
- mask-position: 50% 50%;
206
- -webkit-mask-image: var(--icon, var(--icon-arrow));
207
- -webkit-mask-size: 50%;
208
- -webkit-mask-repeat: no-repeat;
209
- -webkit-mask-position: 50% 50%;
210
- z-index: 2;
211
- display: inline-block;
212
- vertical-align: bottom;
213
- float: right;
214
- rotate: 90deg;
215
- color: inherit;
216
- }
217
- </style>`
218
- );
219
200
  }
220
201
  }
221
202
 
@@ -247,17 +247,12 @@ class iamRank extends HTMLElement {
247
247
  }
248
248
 
249
249
  connectedCallback(): void {
250
-
251
-
252
250
  const position = this.hasAttribute('data-position') ? this.getAttribute('data-position') : this.textContent?.trim();
253
-
254
- this.setAttribute('data-position', position);
255
251
 
252
+ this.setAttribute('data-position', position);
256
253
 
257
-
258
254
  trackComponent(this, 'iam-rank', ['select-card']);
259
255
  }
260
-
261
256
  }
262
257
 
263
258
  export default iamRank;
@@ -33,8 +33,6 @@ class iamRankings extends HTMLElement {
33
33
  }
34
34
 
35
35
  connectedCallback(): void {
36
-
37
-
38
36
  const firstText = this.shadowRoot?.querySelector('.first-position');
39
37
  const secondText = this.shadowRoot?.querySelector('.second-position');
40
38
  const thirdText = this.shadowRoot?.querySelector('.third-position');
@@ -44,19 +42,15 @@ class iamRankings extends HTMLElement {
44
42
  secondText?.innerHTML = this.querySelector('tbody tr:nth-child(2) :is(td,th):nth-child(1)')?.textContent;
45
43
  thirdText?.innerHTML = this.querySelector('tbody tr:nth-child(3) :is(td,th):nth-child(1)')?.textContent;
46
44
 
47
-
48
-
49
45
  this.querySelectorAll('tbody tr').forEach((element) => {
50
-
51
46
  const value = element.querySelector('td:last-child')?.textContent?.trim();
52
47
 
53
- if(!element.querySelector(':first-child progress'))
48
+ if (!element.querySelector(':first-child progress'))
54
49
  element.querySelector(':first-child')?.innerHTML += `<progress max="${max}" value="${value}"></progress>`;
55
50
  });
56
51
 
57
52
  trackComponent(this, 'iam-rank', ['select-card']);
58
53
  }
59
-
60
54
  }
61
55
 
62
56
  export default iamRankings;