@iamproperty/components 7.6.4--beta2 → 7.6.4--beta4

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 (140) 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/barchart.component.css +1 -1
  6. package/assets/css/components/barchart.component.css.map +1 -1
  7. package/assets/css/components/calendar.component.css +1 -1
  8. package/assets/css/components/calendar.component.css.map +1 -1
  9. package/assets/css/components/card.component.css +1 -1
  10. package/assets/css/components/card.component.css.map +1 -1
  11. package/assets/css/components/carousel.component.css +1 -1
  12. package/assets/css/components/carousel.component.css.map +1 -1
  13. package/assets/css/components/collapsible-side.css +1 -1
  14. package/assets/css/components/collapsible-side.css.map +1 -1
  15. package/assets/css/components/content.component.css +1 -1
  16. package/assets/css/components/content.component.css.map +1 -1
  17. package/assets/css/components/doughnutchart.component.css +1 -1
  18. package/assets/css/components/doughnutchart.component.css.map +1 -1
  19. package/assets/css/components/fileupload.css +1 -1
  20. package/assets/css/components/fileupload.css.map +1 -1
  21. package/assets/css/components/header.css +1 -1
  22. package/assets/css/components/header.css.map +1 -1
  23. package/assets/css/components/modal.component.css +1 -1
  24. package/assets/css/components/modal.component.css.map +1 -1
  25. package/assets/css/components/multi-step-modal.component.css +1 -1
  26. package/assets/css/components/multi-step-modal.component.css.map +1 -1
  27. package/assets/css/components/multiselect.css +1 -1
  28. package/assets/css/components/multiselect.css.map +1 -1
  29. package/assets/css/components/multiselect.preload.css +1 -1
  30. package/assets/css/components/multiselect.preload.css.map +1 -1
  31. package/assets/css/components/nav.component.css +1 -1
  32. package/assets/css/components/nav.component.css.map +1 -1
  33. package/assets/css/components/pagination.css +1 -1
  34. package/assets/css/components/pagination.css.map +1 -1
  35. package/assets/css/components/slider.css +1 -1
  36. package/assets/css/components/slider.css.map +1 -1
  37. package/assets/css/components/split-button.component.css +1 -1
  38. package/assets/css/components/split-button.component.css.map +1 -1
  39. package/assets/css/components/tabs.component.css +1 -1
  40. package/assets/css/components/tabs.component.css.map +1 -1
  41. package/assets/css/components/tag.component.css +1 -1
  42. package/assets/css/components/tag.component.css.map +1 -1
  43. package/assets/css/components/tag.preload.css +1 -1
  44. package/assets/css/components/tag.preload.css.map +1 -1
  45. package/assets/css/components/tooltip.component.css +1 -1
  46. package/assets/css/components/tooltip.component.css.map +1 -1
  47. package/assets/css/components/video-modal.component.css +1 -1
  48. package/assets/css/components/video-modal.component.css.map +1 -1
  49. package/assets/css/core.min.css +1 -1
  50. package/assets/css/core.min.css.map +1 -1
  51. package/assets/css/style.min.css +1 -1
  52. package/assets/css/style.min.css.map +1 -1
  53. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  54. package/assets/js/components/actionbar/actionbar.component.min.js +2 -2
  55. package/assets/js/components/address-lookup/address-lookup.component.js +11 -5
  56. package/assets/js/components/address-lookup/address-lookup.component.min.js +4 -4
  57. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  58. package/assets/js/components/advanced-select/advanced-select.component.min.js +1 -1
  59. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  60. package/assets/js/components/barchart/barchart.component.min.js +4 -4
  61. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  62. package/assets/js/components/calendar/calendar.component.min.js +2 -2
  63. package/assets/js/components/card/card.component.min.js +2 -2
  64. package/assets/js/components/carousel/carousel.component.min.js +3 -3
  65. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +2 -2
  66. package/assets/js/components/content/content.component.min.js +2 -2
  67. package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
  68. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +4 -4
  69. package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
  70. package/assets/js/components/filter-card/filter-card.component.min.js +1 -1
  71. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  72. package/assets/js/components/form/form.component.min.js +1 -1
  73. package/assets/js/components/header/header.component.min.js +2 -2
  74. package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
  75. package/assets/js/components/input/input.component.min.js +1 -1
  76. package/assets/js/components/input-range/input-range.component.min.js +1 -1
  77. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  78. package/assets/js/components/menu/menu.component.min.js +1 -1
  79. package/assets/js/components/milestone/milestone.component.min.js +1 -1
  80. package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
  81. package/assets/js/components/modal/modal.component.js +1 -1
  82. package/assets/js/components/modal/modal.component.min.js +3 -3
  83. package/assets/js/components/modal/modal.component.min.js.map +1 -1
  84. package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
  85. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +4 -4
  86. package/assets/js/components/multiselect/multiselect.component.js +9 -76
  87. package/assets/js/components/multiselect/multiselect.component.min.js +4 -4
  88. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  89. package/assets/js/components/nav/nav.component.min.js +2 -2
  90. package/assets/js/components/notification/notification.component.min.js +1 -1
  91. package/assets/js/components/pagination/pagination.component.min.js +2 -2
  92. package/assets/js/components/password/password.component.min.js +1 -1
  93. package/assets/js/components/popover/popover.component.min.js +1 -1
  94. package/assets/js/components/rank/rank.component.min.js +1 -1
  95. package/assets/js/components/rankings/rankings.component.min.js +1 -1
  96. package/assets/js/components/rating/rating.component.min.js +1 -1
  97. package/assets/js/components/record-card/record-card.component.min.js +1 -1
  98. package/assets/js/components/search/search.component.min.js +1 -1
  99. package/assets/js/components/slider/slider.component.min.js +2 -2
  100. package/assets/js/components/split-button/split-button.component.min.js +5 -5
  101. package/assets/js/components/std-address-lookup/std-address-lookup.component.js +39 -2
  102. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +10 -9
  103. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
  104. package/assets/js/components/table/table.component.min.js +1 -1
  105. package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
  106. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  107. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
  108. package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
  109. package/assets/js/components/tabs/tabs.component.min.js +2 -2
  110. package/assets/js/components/tag/tag.component.js +6 -1
  111. package/assets/js/components/tag/tag.component.min.js +4 -4
  112. package/assets/js/components/tag/tag.component.min.js.map +1 -1
  113. package/assets/js/components/tooltip/tooltip.component.min.js +2 -2
  114. package/assets/js/components/video-card/video-card.component.min.js +1 -1
  115. package/assets/js/components/video-modal/video-modal.component.min.js +3 -3
  116. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  117. package/assets/js/modules/dropdown.js +97 -4
  118. package/assets/js/scripts.bundle.js +1 -1
  119. package/assets/js/scripts.bundle.min.js +1 -1
  120. package/assets/sass/_components.scss +0 -2
  121. package/assets/sass/_elements.scss +1 -0
  122. package/assets/sass/components/multiselect.preload.scss +0 -55
  123. package/assets/sass/components/multiselect.scss +172 -174
  124. package/assets/sass/components/tag.component.scss +38 -57
  125. package/assets/sass/components/tag.preload.scss +1 -26
  126. package/assets/sass/components/tooltip.component.scss +16 -15
  127. package/assets/sass/elements/button__group.css +43 -5
  128. package/assets/sass/elements/container.scss +7 -2
  129. package/assets/sass/elements/dropdown.scss +87 -0
  130. package/assets/sass/elements/forms.scss +6 -0
  131. package/assets/sass/foundations/colours.scss +10 -7
  132. package/assets/ts/components/address-lookup/address-lookup.component.ts +12 -5
  133. package/assets/ts/components/modal/modal.component.ts +1 -1
  134. package/assets/ts/components/multiselect/multiselect.component.ts +10 -78
  135. package/assets/ts/components/std-address-lookup/std-address-lookup.component.ts +51 -2
  136. package/assets/ts/components/tag/tag.component.ts +8 -11
  137. package/assets/ts/modules/dropdown.ts +117 -5
  138. package/dist/components.es.js +28 -28
  139. package/dist/components.umd.js +232 -225
  140. package/package.json +2 -2
@@ -1,78 +1,59 @@
1
1
  @use '../_func' as *;
2
2
  @use '../elements/forms';
3
-
4
3
  @use '../elements/admin-panel.scss' as *;
5
-
6
-
4
+ @use '../elements/dropdown.scss' as *;
7
5
  @use '../utilities/visually-hidden' as *;
8
6
  @use '../utilities/display' as *;
7
+
9
8
  *,
10
9
  *::before,
11
10
  *::after {
12
11
  box-sizing: border-box;
13
12
  }
14
13
 
15
-
16
- .wrapper {
17
-
18
- position: relative;
19
- display: inline-block;
20
- margin-bottom: 1rem;
21
-
22
- input {
23
- position: absolute;
24
- min-height: unset;
25
- top: 50%;
26
- left: 0;
27
- transform: translate(0,-50%);
28
- z-index: -99;
29
- opacity: 0;
14
+ @layer components {
15
+ .wrapper {
16
+
17
+ position: relative;
18
+ display: inline-block;
19
+ margin-bottom: 1rem;
20
+
21
+ input {
22
+ position: absolute;
23
+ min-height: unset;
24
+ top: 50%;
25
+ left: 0;
26
+ transform: translate(0,-50%);
27
+ z-index: -99;
28
+ opacity: 0;
29
+ }
30
30
  }
31
- }
32
-
33
- ::slotted(*) {
34
- margin-bottom: 0!important;
35
- }
36
-
37
-
38
-
39
-
40
- input:focus {
41
-
42
- opacity: 1;
43
- z-index: 99;
44
- }
45
31
 
32
+ ::slotted(*) {
33
+ margin-bottom: 0!important;
34
+ }
46
35
 
47
- .dropdown {
48
- position: absolute;
49
- top: calc(100% + 0.5rem);
50
- padding: 0;
51
- left: 0;
52
- width: 100%;
53
- margin: 0;
54
- z-index: 99;
55
- display: none;
56
- max-height: rem(244) !important;
57
- overflow: auto;
58
36
 
59
- &:before {
60
- display: none;
37
+ input:focus {
38
+
39
+ opacity: 1;
40
+ z-index: 99;
61
41
  }
62
- }
63
-
64
- .wrapper:is(:focus-within) .dropdown {
65
- display: var(--display-panel, none);
66
- }
67
42
 
68
- @media (hover: hover) {
69
- .wrapper .dropdown:hover {
43
+ .wrapper:is(:focus-within) .dropdown {
70
44
  display: var(--display-panel, none);
71
45
  }
72
- }
73
46
 
74
- @media (hover: none) {
75
- :host(.hover) .wrapper .dropdown {
76
- display: block;
47
+ @media (hover: hover) {
48
+ .wrapper .dropdown:hover {
49
+ display: var(--display-panel, none);
50
+ }
51
+ }
52
+
53
+ @media (hover: none) {
54
+ :host(.hover) .wrapper .dropdown {
55
+ display: block;
56
+ }
77
57
  }
78
- }
58
+
59
+ }
@@ -2,32 +2,7 @@
2
2
 
3
3
 
4
4
  @layer components {
5
- iam-tag .tag[slot='checked'] {
6
- //margin-bottom: 0.5rem;
7
- order: var(--order, 1);
8
- //margin-inline: rem(3);
9
- }
10
-
11
- iam-tag .tag:not([slot='checked']) {
12
- display: block;
13
- width: 100%;
14
- max-width: 100%;
15
- margin: 0;
16
- text-align: left;
17
- border-radius: 0;
18
- padding-inline: 1rem;
19
- outline: none;
20
- padding-block: 0.5rem;
21
-
22
- &:not(:hover, :focus, :active, :focus-within) {
23
- background: none !important;
24
- }
25
-
26
- &::after {
27
- display: none;
28
- }
29
- }
30
-
5
+
31
6
  iam-tag:has(label:not([slot='checked']):not([slot='notmatched'])) {
32
7
  --display-panel: block;
33
8
  }
@@ -11,41 +11,42 @@
11
11
  :host {
12
12
  display: inline;
13
13
  position: relative;
14
- text-decoration: underline;
15
- text-decoration-style: dashed;
16
- text-underline-offset: 0.2em;
17
14
  overflow-anchor: none;
18
15
  cursor: pointer;
16
+ margin-right: 0.25rem;
17
+ }
18
+
19
+ slot {
20
+ display: inline;
21
+ }
22
+
23
+ :host(:empty) {
19
24
  display: inline-block;
20
25
  width: 1rem;
21
26
  height: 1lh;
22
27
  min-height: 1rem;
23
28
  vertical-align: text-top;
29
+ margin-right: 0;
24
30
  }
25
31
 
26
32
  .tooltip__anchor {
27
33
 
28
34
  anchor-name: --anchor;
29
- position: absolute;
30
- display: block;
31
- inset: 0;
32
- height: 100%;
33
- width: 100%;
34
- min-width: 1rem;
35
- left: auto;
36
- right: 0;
35
+ position: relative;
36
+ display: inline-block;
37
37
  }
38
38
 
39
- :host(:empty) .tooltip__anchor{
39
+ .tooltip__anchor {
40
40
 
41
41
  height: 1rem;
42
42
  width: 1rem;
43
43
  background-color: var(--colour, var(--colour-info));
44
44
  border-radius: 50%;
45
- top: 50%;
46
- translate: 0% -50%;
45
+ margin-bottom: calc(calc(1lh - 1rem) / 2);
46
+ vertical-align: bottom;
47
47
  }
48
- :host(:empty) .tooltip__anchor:after {
48
+
49
+ .tooltip__anchor:after {
49
50
  font-family: "Font Awesome 6 Pro";
50
51
  font-weight: 900;
51
52
  content: "\?";
@@ -5,6 +5,8 @@
5
5
  display: flex;
6
6
  flex-direction: column;
7
7
  row-gap: var(--gap);
8
+ reading-flow: source-order;
9
+ margin-bottom: 1.5rem;
8
10
 
9
11
  .btn {
10
12
  margin-inline-end: 0;
@@ -15,37 +17,73 @@
15
17
  margin: 0;
16
18
  }
17
19
 
20
+ .btn-tertiary {
21
+ max-width: fit-content;
22
+ margin-inline: auto;
23
+ order: 3;
24
+ reading-order: 3;
25
+ }
18
26
  .btn-secondary {
19
27
  order: 2;
28
+ reading-order: 2;
20
29
  }
21
30
  .btn-primary {
22
31
  order: 1;
32
+ reading-order: 1;
33
+ }
34
+
35
+ .btn-compact {
36
+
37
+ max-width: fit-content;
38
+ margin-inline: auto;
23
39
  }
24
40
  }
41
+ :is(iam-form,form) .btn__group{
42
+ padding-top: 1rem;
43
+ }
25
44
  @container (min-width: 36em) {
26
45
  .btn__group {
27
46
  flex-direction: row;
28
47
  row-gap: 0;
29
- column-gap: var(--gap);
30
- margin-bottom: 1.5rem;
48
+ gap: var(--gap);
49
+ flex-wrap: wrap;
31
50
 
32
51
  .btn {
33
52
 
34
53
  max-width: fit-content;
35
54
  white-space: nowrap;
55
+ margin-block: auto;
36
56
  }
37
57
 
38
-
39
- .btn-secondary {
58
+
59
+ .btn-tertiary {
60
+ max-width: fit-content;
61
+ margin-inline: 0;
62
+ margin-block: auto;
40
63
  order: 1;
64
+ reading-order: 1;
41
65
  }
42
- .btn-primary {
66
+ .btn-secondary {
43
67
  order: 2;
68
+ reading-order: 2;
69
+ }
70
+ .btn-primary {
71
+ order: 3;
72
+ reading-order: 3;
73
+ }
74
+ .btn-compact {
75
+
76
+ margin-inline: 0;
77
+ margin-block: auto;
44
78
  }
45
79
  }
46
80
  .btn__group.text-end {
47
81
  justify-content: flex-end;
48
82
  }
83
+ :is(iam-form,form) .btn__group{
84
+ justify-content: flex-end;
85
+ padding-top: 3rem;
86
+ }
49
87
  iam-modal .btn__group:last-child .btn,
50
88
  dialog .btn__group:last-child .btn {
51
89
  margin-bottom: 0;
@@ -6,17 +6,22 @@
6
6
 
7
7
 
8
8
  @layer elements {
9
+ // #region contain
9
10
  // #region container
10
11
  .container {
11
12
  display: block;
12
13
  margin-left: auto;
13
14
  margin-right: auto;
14
- padding: var(--container-padding);
15
15
 
16
- grid-column: container !important;
17
16
  container-type: inline-size;
18
17
  width: 100%;
19
18
 
19
+ &:not([class*='col-']){
20
+
21
+ grid-column: container !important;
22
+ padding: var(--container-padding);
23
+ }
24
+
20
25
  &:not(:has(.row)):has([class*='col-']) {
21
26
  display: grid;
22
27
  grid-template-columns:
@@ -0,0 +1,87 @@
1
+ @use '../_func' as *;
2
+
3
+ @layer elements {
4
+
5
+ // #region Dropdown
6
+ .dropdown {
7
+ position: absolute;
8
+ top: calc(100% + 0.5rem);
9
+ padding: 0;
10
+ left: 0;
11
+ width: 100%;
12
+ margin: 0;
13
+ z-index: 99;
14
+ display: none;
15
+ max-height: rem(244) !important;
16
+ overflow: auto;
17
+
18
+ &:before {
19
+ display: none;
20
+ }
21
+ }
22
+
23
+ // #endregion
24
+
25
+ // #region Needed for the component files
26
+ :is(iam-tag,iam-multiselect):has(label:not([slot='checked'])) {
27
+ --display-panel: block;
28
+ }
29
+
30
+ :is(iam-tag,iam-multiselect):has(label[slot='checked']) {
31
+ --display-button: block;
32
+ }
33
+
34
+ :is(iam-tag,iam-multiselect)[data-single] .tag[slot='checked'],
35
+ :is(iam-tag,iam-multiselect)[data-single] .tag[slot='checked'] * {
36
+ pointer-events: none!important;
37
+ }
38
+
39
+ @container style(--theme: dark) {
40
+ :host :is(.tag, .badge):not([slot='checked']) {
41
+ color: var(--colour-heading);
42
+ }
43
+ }
44
+ // #endregion
45
+
46
+ // #region Indivitual options
47
+ .dropdown__option[slot='checked'] {
48
+ order: var(--order, 1);
49
+ }
50
+
51
+ .dropdown__option:not([slot='checked']) {
52
+ display: block;
53
+ width: 100%;
54
+ max-width: 100%;
55
+ margin: 0;
56
+ text-align: left;
57
+ border-radius: 0;
58
+ padding-inline: 1rem;
59
+ outline: none;
60
+ padding-block: 0.5rem;
61
+
62
+ padding-bottom: 0.25em;
63
+ text-overflow: ellipsis;
64
+ overflow: hidden;
65
+
66
+ &:not(:hover, :focus, :active, :focus-within) {
67
+ background: none !important;
68
+ }
69
+
70
+ &::after {
71
+ display: none;
72
+ }
73
+
74
+ &[data-email] {
75
+
76
+ &::after {
77
+ content: attr(data-email);
78
+ display: block;
79
+ line-height: 1;
80
+ padding-bottom: 0.25em;
81
+ text-overflow: ellipsis;
82
+ overflow: hidden;
83
+ }
84
+ }
85
+ }
86
+ // #endregion
87
+ }
@@ -1029,6 +1029,7 @@ $icon-tick: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' view
1029
1029
  padding-right: 3rem;
1030
1030
  }
1031
1031
 
1032
+
1032
1033
  .empty {
1033
1034
  position: absolute;
1034
1035
  bottom: 0.5rem;
@@ -1051,6 +1052,11 @@ $icon-tick: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' view
1051
1052
  font-size: 1.5rem;
1052
1053
  }
1053
1054
  }
1055
+
1056
+ &:has([name="postcode"][disabled]) .empty{
1057
+
1058
+ display: none;
1059
+ }
1054
1060
 
1055
1061
  &:has(input:is([name$="Alt"]):not([data-value],[data-placeholder])) .empty {
1056
1062
  display: none;
@@ -23,18 +23,21 @@
23
23
  }
24
24
  }
25
25
 
26
- :is(.bg-primary, .bg-danger, .bg-dark, .gradient-primary) {
27
-
28
- --colour-heading: var(--colour-white);
29
- --colour-body: var(--colour-white);
30
- color: var(--colour-white);
26
+ @scope (:is(.bg-primary, .bg-danger, .bg-dark, .gradient-primary)) to ([class*='bg-']) {
27
+
28
+ :scope {
29
+
30
+ --colour-heading: var(--colour-white);
31
+ --colour-body: var(--colour-white);
32
+ color: var(--colour-white);
31
33
 
32
- > * {
34
+ }
35
+
36
+ :scope > * {
33
37
 
34
38
  color-scheme: dark;
35
39
  }
36
40
  }
37
-
38
41
  // #region When the theme is set to dark via the dark mode component
39
42
  // OR when the dark mode is set via the browser or device when no component is present
40
43
 
@@ -617,19 +617,26 @@ class iamAddressLookup extends HTMLElement {
617
617
  // #endregion
618
618
 
619
619
  advancedSelect(this, lookup, list, true);
620
+
621
+ if (this.hasAttribute('data-disabled'))
622
+ lookup?.setAttribute('disabled','disabled');
620
623
  }
621
624
 
622
625
  static get observedAttributes(): any {
623
- return ['data-url'];
626
+ return ['data-disabled'];
624
627
  }
625
628
 
626
629
  attributeChangedCallback(attrName, oldVal, newVal): void {
627
- const addressComponent = this.querySelector('iam-address-lookup');
630
+ const lookup = this.shadowRoot.querySelector('[name="postcode"]');
628
631
 
629
632
  switch (attrName) {
630
- case 'data-url': {
631
- if (oldVal != newVal && addressComponent) {
632
- addressComponent.setAttribute('data-url', newVal + '?search_string=');
633
+ case 'data-disabled': {
634
+ console.log(newVal);
635
+ if (oldVal != newVal && newVal == 'disabled') {
636
+ lookup?.setAttribute('disabled','disabled');
637
+ }
638
+ else if (oldVal != newVal) {
639
+ lookup?.removeAttribute('disabled');
633
640
  }
634
641
  break;
635
642
  }
@@ -43,7 +43,7 @@ class iamModal extends HTMLElement {
43
43
  const originalDialog = this.querySelector('dialog');
44
44
 
45
45
  const id = this.hasAttribute('id') ? this.getAttribute('id') : originalDialog?.getAttribute('id');
46
- const dialog = this.shadowRoot?.querySelector('dialog');
46
+ let dialog = this.shadowRoot?.querySelector('dialog');
47
47
  const closeButton = this.shadowRoot?.querySelector('[data-close]');
48
48
  const cancelButton = this.shadowRoot?.querySelector('[data-cancel]');
49
49
  const agreedButton = this.querySelector('button[slot="agreed-button"]') ? this.querySelector('button[slot="agreed-button"]') : this.shadowRoot?.querySelector('[data-agreed]');
@@ -1,5 +1,4 @@
1
- import Cookies from 'js-cookie';
2
- import { filterList } from '../../modules/dropdown';
1
+ import { searchAjax, filterList, addKeyboardEvents } from '../../modules/dropdown';
3
2
 
4
3
  // Data layer Web component created
5
4
  window.dataLayer = window.dataLayer || [];
@@ -56,6 +55,12 @@ class iamMultiselect extends HTMLElement {
56
55
  const ajaxURL = this.getAttribute('data-url');
57
56
  innerLabel.innerHTML = multiselect.getAttribute('data-label');
58
57
 
58
+ // Make sure the dropdown options are set
59
+ Array.from(this.querySelectorAll(':scope > label')).forEach((label) => {
60
+ label.classList.add('dropdown__option');
61
+ label?.querySelector('i')?.remove();
62
+ });
63
+
59
64
  if (multiselect.hasAttribute('placeholder')) {
60
65
  search.setAttribute('placeholder', multiselect.getAttribute('placeholder'));
61
66
  }
@@ -132,7 +137,7 @@ class iamMultiselect extends HTMLElement {
132
137
  if (multiselect.hasAttribute('data-url')) {
133
138
 
134
139
  if (search.value.length == 3) {
135
- searchAjax(search.value);
140
+ searchAjax(multiselect, search, filterList);
136
141
  }
137
142
  } else {
138
143
 
@@ -222,6 +227,7 @@ class iamMultiselect extends HTMLElement {
222
227
  });
223
228
 
224
229
  // Add some keyboard features to keep it accessible
230
+ addKeyboardEvents(this, search);
225
231
  multiselect.addEventListener('keydown', function (event) {
226
232
  const activeElement = document.activeElement;
227
233
 
@@ -262,38 +268,6 @@ class iamMultiselect extends HTMLElement {
262
268
  if (nextCheckbox) nextCheckbox.focus();
263
269
  else search.focus();
264
270
  }
265
- break;
266
- case 'ArrowUp':
267
- // Up pressed
268
- event.preventDefault();
269
-
270
- if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == 'checkbox') {
271
- const arrCheckboxes = multiselect.querySelectorAll(`label:not([slot="checked"]):not([slot="checked"])`);
272
-
273
- const activeIndex = Array.from(arrCheckboxes).indexOf(activeElement.closest('label'));
274
- const prevCheckbox = Array.from(arrCheckboxes)[activeIndex - 1];
275
-
276
- if (prevCheckbox) prevCheckbox.focus();
277
- else search.focus();
278
- }
279
-
280
- break;
281
- case 'ArrowDown':
282
- // Down pressed
283
- event.preventDefault();
284
-
285
- if (activeElement == multiselect) {
286
- multiselect.querySelector('label:not([slot="checked"]):not([slot="checked"])').focus();
287
- } else if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == 'checkbox') {
288
- const activeValue = activeElement.value;
289
-
290
- const nextCheckbox = multiselect.querySelector(
291
- `label:has(input[value="${activeValue}"]) ~ label:not([slot="checked"]):not([slot="checked"])`
292
- );
293
-
294
- if (nextCheckbox) nextCheckbox.focus();
295
- }
296
-
297
271
  break;
298
272
  case 'Enter':
299
273
  event.stopPropagation();
@@ -318,6 +292,7 @@ class iamMultiselect extends HTMLElement {
318
292
  }
319
293
  });
320
294
 
295
+
321
296
  function checkLastTag(): Element | null {
322
297
  if (order == 0) return false;
323
298
 
@@ -368,49 +343,6 @@ class iamMultiselect extends HTMLElement {
368
343
  wrapper.removeAttribute('data-mousedown');
369
344
  });
370
345
 
371
- const searchAjax = async (searchterm): any => {
372
- const searchAjaxURL = `${ajaxURL}${encodeURI(searchterm)}`;
373
-
374
- // Setup controller vars if not already set
375
- if (!window.controller) window.controller = [];
376
-
377
- // Abort if controller already present for this url
378
- if (window.controller[searchAjaxURL]) window.controller[searchAjaxURL].abort();
379
-
380
- // Create a new controller so it can be aborted if new fetch made
381
- window.controller[searchAjaxURL] = new AbortController();
382
- const { signal } = controller[searchAjaxURL];
383
-
384
- try {
385
- await fetch(searchAjaxURL, {
386
- signal: signal,
387
- method: 'get',
388
- credentials: 'same-origin',
389
- headers: new Headers({
390
- 'Content-Type': 'application/json',
391
- Accept: 'application/json',
392
- 'X-Requested-With': 'XMLHttpRequest',
393
- 'X-XSRF-TOKEN': Cookies.get('XSRF-TOKEN'),
394
- }),
395
- })
396
- .then((response) => response.json())
397
- .then((response) => {
398
-
399
- let items = '';
400
-
401
- for (let i = 0; i < response['data'].length; i++) {
402
- items += `<label class="tag"><input type="checkbox" name="${multiselect.hasAttribute('data-name') ? multiselect.getAttribute('data-name') : 'tags'}" value="${ response['data'][i].value }"/>${ response['data'][i].title }</label>`;
403
- }
404
-
405
- multiselect.insertAdjacentHTML('beforeend', `${items}`);
406
-
407
- filterList(multiselect, search);
408
- return response;
409
- });
410
- } catch (error) {
411
- console.log(error);
412
- }
413
- };
414
346
  }
415
347
  }
416
348