@iamproperty/components 5.5.1-beta-2 → 5.5.1-beta-5

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 (84) hide show
  1. package/assets/css/components/actionbar.css +1 -1
  2. package/assets/css/components/actionbar.css.map +1 -1
  3. package/assets/css/components/actionbar.global.css +1 -1
  4. package/assets/css/components/actionbar.global.css.map +1 -1
  5. package/assets/css/components/inline-edit.css +1 -0
  6. package/assets/css/components/inline-edit.css.map +1 -0
  7. package/assets/css/components/inline-edit.preload.css +1 -0
  8. package/assets/css/components/inline-edit.preload.css.map +1 -0
  9. package/assets/css/components/multiselect.css +1 -0
  10. package/assets/css/components/multiselect.css.map +1 -0
  11. package/assets/css/components/multiselect.preload.css +1 -0
  12. package/assets/css/components/multiselect.preload.css.map +1 -0
  13. package/assets/css/components/nav.global.css +1 -1
  14. package/assets/css/components/nav.global.css.map +1 -1
  15. package/assets/css/core.min.css +1 -1
  16. package/assets/css/core.min.css.map +1 -1
  17. package/assets/css/style.min.css +1 -1
  18. package/assets/css/style.min.css.map +1 -1
  19. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  20. package/assets/js/components/actionbar/actionbar.component.js +2 -0
  21. package/assets/js/components/actionbar/actionbar.component.min.js +5 -3
  22. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  23. package/assets/js/components/address-lookup/address-lookup.component.min.js +1 -1
  24. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  25. package/assets/js/components/card/card.component.min.js +1 -1
  26. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  27. package/assets/js/components/fileupload/fileupload.component.min.js +1 -1
  28. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  29. package/assets/js/components/header/header.component.min.js +1 -1
  30. package/assets/js/components/inline-edit/inline-edit.component.js +148 -0
  31. package/assets/js/components/inline-edit/inline-edit.component.min.js +22 -0
  32. package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -0
  33. package/assets/js/components/multiselect/multiselect.component.js +221 -0
  34. package/assets/js/components/multiselect/multiselect.component.min.js +25 -0
  35. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -0
  36. package/assets/js/components/nav/nav.component.min.js +2 -2
  37. package/assets/js/components/notification/notification.component.min.js +1 -1
  38. package/assets/js/components/pagination/pagination.component.min.js +1 -1
  39. package/assets/js/components/search/search.component.min.js +1 -1
  40. package/assets/js/components/search/search.component.min.js.map +1 -1
  41. package/assets/js/components/table/table.component.js +26 -14
  42. package/assets/js/components/table/table.component.min.js +4 -4
  43. package/assets/js/components/table/table.component.min.js.map +1 -1
  44. package/assets/js/components/tabs/tabs.component.min.js +1 -1
  45. package/assets/js/dynamic.min.js +5 -5
  46. package/assets/js/dynamic.min.js.map +1 -1
  47. package/assets/js/modules/helpers.js +4 -0
  48. package/assets/js/modules/inputs.js +6 -2
  49. package/assets/js/modules/table.js +36 -18
  50. package/assets/js/scripts.bundle.js +4 -4
  51. package/assets/js/scripts.bundle.js.map +1 -1
  52. package/assets/js/scripts.bundle.min.js +2 -2
  53. package/assets/js/scripts.bundle.min.js.map +1 -1
  54. package/assets/sass/_components.scss +5 -0
  55. package/assets/sass/components/actionbar.global.scss +10 -0
  56. package/assets/sass/components/actionbar.scss +20 -3
  57. package/assets/sass/components/inline-edit.preload.scss +98 -0
  58. package/assets/sass/components/inline-edit.scss +32 -0
  59. package/assets/sass/components/multiselect.preload.scss +37 -0
  60. package/assets/sass/components/multiselect.scss +186 -0
  61. package/assets/sass/components/nav.global.scss +2 -0
  62. package/assets/sass/elements/admin-panel.scss +0 -3
  63. package/assets/sass/elements/badge-tag.scss +15 -5
  64. package/assets/sass/elements/forms.scss +16 -3
  65. package/assets/ts/components/actionbar/actionbar.component.ts +2 -0
  66. package/assets/ts/components/inline-edit/README.md +30 -0
  67. package/assets/ts/components/inline-edit/inline-edit.component.ts +211 -0
  68. package/assets/ts/components/multiselect/README.md +35 -0
  69. package/assets/ts/components/multiselect/multiselect.component.ts +304 -0
  70. package/assets/ts/components/search/README.md +36 -0
  71. package/assets/ts/components/table/table.component.ts +28 -21
  72. package/assets/ts/modules/helpers.ts +6 -0
  73. package/assets/ts/modules/inputs.ts +8 -2
  74. package/assets/ts/modules/table.ts +40 -19
  75. package/dist/components.es.js +66 -65
  76. package/dist/components.umd.js +61 -64
  77. package/package.json +1 -1
  78. package/src/components/InlineEdit/InlineEdit.vue +45 -0
  79. package/src/components/InlineEdit/README.md +7 -0
  80. package/src/components/Multiselect/Multiselect.vue +24 -0
  81. package/src/components/Multiselect/README.md +12 -0
  82. package/src/components/Search/README.md +11 -0
  83. package/src/components/Search/Search.vue +1 -1
  84. package/src/components/Table/Table.vue +2 -1
@@ -0,0 +1,221 @@
1
+ // @ts-nocheck
2
+ // Data layer Web component created
3
+ window.dataLayer = window.dataLayer || [];
4
+ window.dataLayer.push({
5
+ "event": "customElementRegistered",
6
+ "element": "mutliselect"
7
+ });
8
+ class iamMultiselect extends HTMLElement {
9
+ constructor() {
10
+ super();
11
+ this.attachShadow({ mode: 'open' });
12
+ const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';
13
+ const coreCSS = document.body.hasAttribute('data-core-css') ? document.body.getAttribute('data-core-css') : `${assetLocation}/css/core.min.css`;
14
+ const loadCSS = `@import "${assetLocation}/css/components/multiselect.css";`;
15
+ const template = document.createElement('template');
16
+ template.innerHTML = `
17
+ <style>
18
+ @import "${coreCSS}";
19
+ ${loadCSS}
20
+ ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
21
+ </style>
22
+ <label for="search"> <slot name="feedback"></slot></label>
23
+ <div class="outer">
24
+ <div class="wrapper">
25
+
26
+ <slot name="checked"></slot>
27
+ <input name="search" id="search" autocomplete="off" required />
28
+ <span class="admin-panel feedback">This field is required</span>
29
+ <div class="admin-panel dropdown">
30
+ <slot></slot>
31
+ </div>
32
+ <button id="clear"><span class="visually-hidden">Clear</span></button>
33
+ </div>
34
+ </div>
35
+ `;
36
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
37
+ }
38
+ connectedCallback() {
39
+ let multiselect = this;
40
+ let form = this.closest('form');
41
+ let wrapper = this.shadowRoot.querySelector('.wrapper');
42
+ let search = multiselect.shadowRoot.querySelector('#search');
43
+ let button = multiselect.shadowRoot.querySelector('#clear');
44
+ let order = 0;
45
+ let label = multiselect.shadowRoot.querySelector('label');
46
+ label.innerHTML = multiselect.getAttribute('data-label');
47
+ if (multiselect.hasAttribute('placeholder')) {
48
+ search.setAttribute('placeholder', multiselect.getAttribute('placeholder'));
49
+ }
50
+ multiselect.setAttribute('data-error', 'true');
51
+ // If in form and is required lets watch for the form being submitted
52
+ if (form && multiselect.hasAttribute('data-is-required')) {
53
+ let observer = new MutationObserver(function (mutations) {
54
+ mutations.forEach(function (mutationRecord) {
55
+ const targetElement = mutationRecord.target;
56
+ console.log(targetElement);
57
+ if (targetElement.classList.contains("was-validated")) {
58
+ wrapper.classList.add('was-validated');
59
+ }
60
+ else {
61
+ wrapper.classList.remove('was-validated');
62
+ }
63
+ ;
64
+ });
65
+ });
66
+ if (form.classList.contains("was-validated")) {
67
+ wrapper.classList.add('was-validated');
68
+ }
69
+ else {
70
+ wrapper.classList.remove('was-validated');
71
+ }
72
+ ;
73
+ observer.observe(form, {
74
+ attributes: true,
75
+ attributeFilter: ['style', 'class']
76
+ });
77
+ }
78
+ // Set the correct attributes
79
+ function setItem(inputToSet) {
80
+ if (inputToSet.checked == false) {
81
+ inputToSet.closest('label').removeAttribute('slot');
82
+ inputToSet.closest('label').removeAttribute('style');
83
+ inputToSet.closest('label').removeAttribute('data-order');
84
+ }
85
+ else {
86
+ order++;
87
+ inputToSet.closest('label').setAttribute('slot', 'checked');
88
+ inputToSet.closest('label').setAttribute('style', `--order:${order};`);
89
+ inputToSet.closest('label').setAttribute('data-order', order);
90
+ }
91
+ // check for errors
92
+ if (multiselect.querySelector('label[slot="checked"]')) {
93
+ wrapper.classList.add('filled');
94
+ multiselect.removeAttribute('data-error');
95
+ search.removeAttribute('placeholder');
96
+ }
97
+ else {
98
+ wrapper.classList.remove('filled');
99
+ multiselect.setAttribute('data-error', 'true');
100
+ if (multiselect.hasAttribute('placeholder')) {
101
+ search.setAttribute('placeholder', multiselect.getAttribute('placeholder'));
102
+ }
103
+ }
104
+ }
105
+ // Set on load
106
+ Array.from(multiselect.querySelectorAll(`label input[type="checkbox"]:checked`)).forEach((checkbox, index) => {
107
+ setItem(checkbox);
108
+ });
109
+ // Filter list
110
+ search.addEventListener('input', (event) => {
111
+ Array.from(multiselect.querySelectorAll(`label:not([slot="checked"])`)).forEach((label, index) => {
112
+ let checkbox = label.querySelector('input');
113
+ let searchValue = checkbox.value;
114
+ if (searchValue.toLowerCase().includes(search.value.toLowerCase())) {
115
+ label.removeAttribute('slot');
116
+ }
117
+ else {
118
+ label.setAttribute('slot', 'notmatched');
119
+ }
120
+ });
121
+ });
122
+ // Set items
123
+ multiselect.addEventListener('change', (event) => {
124
+ if (event && event.target instanceof HTMLElement && event.target.closest('input[type="checkbox"]')) {
125
+ let checkbox = event.target.closest('input[type="checkbox"]');
126
+ setItem(checkbox);
127
+ search.focus();
128
+ }
129
+ });
130
+ // Clear all
131
+ button.addEventListener("click", function (event) {
132
+ Array.from(multiselect.querySelectorAll(`label input[type="checkbox"]`)).forEach((checkbox, index) => {
133
+ checkbox.checked = false;
134
+ setItem(checkbox);
135
+ });
136
+ search.focus();
137
+ });
138
+ // Add some keyboard features to keep it accessible
139
+ multiselect.addEventListener("keydown", function (event) {
140
+ const activeElement = document.activeElement;
141
+ switch (event.key) { // change to event.key to key to use the above variable
142
+ case "ArrowUp":
143
+ // Up pressed
144
+ event.preventDefault();
145
+ if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == "checkbox") {
146
+ let arrCheckboxes = multiselect.querySelectorAll(`label:not([slot="checked"]):not([slot="checked"])`);
147
+ let activeIndex = Array.from(arrCheckboxes).indexOf(activeElement.closest('label'));
148
+ let prevCheckbox = Array.from(arrCheckboxes)[activeIndex - 1];
149
+ if (prevCheckbox)
150
+ prevCheckbox.focus();
151
+ else
152
+ search.focus();
153
+ }
154
+ break;
155
+ case "ArrowDown":
156
+ // Down pressed
157
+ event.preventDefault();
158
+ if (activeElement == multiselect) {
159
+ multiselect.querySelector('label:not([slot="checked"]):not([slot="checked"])').focus();
160
+ }
161
+ else if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == "checkbox") {
162
+ let activeValue = activeElement.value;
163
+ let nextCheckbox = multiselect.querySelector(`label:has(input[value="${activeValue}"]) ~ label:not([slot="checked"]):not([slot="checked"])`);
164
+ if (nextCheckbox)
165
+ nextCheckbox.focus();
166
+ }
167
+ break;
168
+ case "Enter":
169
+ event.stopPropagation();
170
+ event.preventDefault();
171
+ if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == "checkbox") {
172
+ if (activeElement.checked == false)
173
+ activeElement.checked = true;
174
+ else
175
+ activeElement.checked = false;
176
+ }
177
+ setItem(activeElement);
178
+ search.focus();
179
+ break;
180
+ }
181
+ });
182
+ function checkLastTag() {
183
+ if (order == 0)
184
+ return false;
185
+ let lastTag = multiselect.querySelector(`label[data-order="${order}"]`);
186
+ if (!lastTag) {
187
+ lastTag = checkLastTag(order--);
188
+ }
189
+ return lastTag;
190
+ }
191
+ search.addEventListener("keydown", function (event) {
192
+ switch (event.key) { // change to event.key to key to use the above variable
193
+ case "Enter":
194
+ let match = multiselect.querySelector(`input[value="${search.value}"]:not(:checked)`);
195
+ if (!match)
196
+ search.value = "";
197
+ search.focus();
198
+ break;
199
+ case "Backspace":
200
+ if (!search.value) {
201
+ let lastTag = checkLastTag(order);
202
+ if (lastTag) {
203
+ let lastTagInput = lastTag.querySelector('input');
204
+ lastTagInput.checked = false;
205
+ setItem(lastTagInput);
206
+ }
207
+ search.focus();
208
+ }
209
+ break;
210
+ }
211
+ });
212
+ // Fix for the inline edit multiselect
213
+ multiselect.addEventListener("mousedown", (event) => {
214
+ wrapper.setAttribute('data-mousedown', 'true');
215
+ });
216
+ multiselect.addEventListener("mouseup", (event) => {
217
+ wrapper.removeAttribute('data-mousedown');
218
+ });
219
+ }
220
+ }
221
+ export default iamMultiselect;
@@ -0,0 +1,25 @@
1
+ /*!
2
+ * iamKey v5.5.1-beta-5
3
+ * Copyright 2022-2024 iamproperty
4
+ */window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"mutliselect"});class m extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const t=document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets",s=document.body.hasAttribute("data-core-css")?document.body.getAttribute("data-core-css"):`${t}/css/core.min.css`,r=document.createElement("template");r.innerHTML=`
5
+ <style>
6
+ @import "${s}";
7
+ .outer{position:relative;max-width:var(--input-max-width, 50rem);display:block}label{margin-bottom:0;padding-bottom:.5rem}.wrapper{margin-bottom:1.5rem;max-width:var(--input-max-width, 50rem)}.wrapper:after{content:"";display:block;position:absolute;top:100%;left:0;width:100%;height:1rem}.wrapper input{margin-bottom:0.5rem}.wrapper .feedback{position:absolute;right:0;bottom:100%;padding:.85rem;width:min-content;white-space:nowrap;margin-bottom:.5rem;display:none}.wrapper.was-validated .feedback{display:block}.wrapper.filled{display:flex;flex-direction:row;flex-wrap:wrap;align-items:flex-start;min-height:calc(2.75rem + 4px);padding:0.5rem 2rem 0rem 0.8125rem;font-size:var(--input-fs, 1rem);line-height:var(--input-lh, 1.25rem);color:var(--colour-body);background-color:var(--colour-canvas-2);border:2px solid var(--colour-primary);border-radius:0.5rem}.wrapper.filled:is(:focus-within,.focus-within):not(:disabled){border-color:var(--colour-info);outline:0;box-shadow:0 0 0 .1rem rgba(30,190,230,.25)}.wrapper.filled input{all:unset;font-size:1rem;line-height:1.625rem;display:inline-block;width:0;flex-grow:1;padding:0 0.5rem 0 0 !important;margin-inline:0.1875rem;order:999;margin-bottom:0.5rem}.wrapper.filled .feedback{display:none !important}.wrapper.filled:is(:focus,.focus):not(:disabled){border-color:var(--colour-info);outline:0;box-shadow:0 0 0 .1rem rgba(30,190,230,.25)}button{position:absolute;top:.75rem;right:.5rem;border:none;background:none;padding-inline:.5rem;display:var(--display-button, none)}button:after{content:"\u2715";font-weight:bold}.dropdown{position:absolute;top:calc(100% + .5rem);padding:0;left:0;width:100%;margin:0;z-index:99;display:none;max-height:15.25rem !important;overflow:auto}.dropdown:before{display:none}.wrapper:is(:hover,:focus-within) .dropdown{display:var(--display-panel, none)}:host-context(:focus-within) input{background-color:none !important}:host-context(iam-inline-edit){display:block;--display-btns: none}:host-context(iam-inline-edit) label:hover+.outer:not(:focus-within) .wrapper:not([data-mousedown]),:host-context(iam-inline-edit) .outer:not(:focus-within) .wrapper:not([data-mousedown]):hover{background-color:var(--colour-light)}:host-context(iam-inline-edit) label:hover+.outer:not(:focus-within) .wrapper:not([data-mousedown]) input,:host-context(iam-inline-edit) .outer:not(:focus-within) .wrapper:not([data-mousedown]):hover input{background-color:var(--colour-light)}:host-context(iam-inline-edit) label:hover+.outer:not(:focus-within) .wrapper:not([data-mousedown]) .dropdown,:host-context(iam-inline-edit) .outer:not(:focus-within) .wrapper:not([data-mousedown]):hover .dropdown{display:none}:host-context(iam-inline-edit) .wrapper{margin-bottom:0}:host-context(iam-inline-edit) .wrapper:not(.filled):not(:focus-within):not([data-mousedown]) input{border:none;background:none;margin-left:-1rem;width:calc(100% + 1rem);max-width:calc(100% + 1rem);box-shadow:none}:host-context(iam-inline-edit) .wrapper:not(.filled):not(:focus-within):not([data-mousedown]) .dropdown{display:none}:host-context(iam-inline-edit) .wrapper.filled:not(:focus-within):not([data-mousedown]){background:none;border:none;padding-left:0}/*# sourceMappingURL=assets/css/components/multiselect.css.map */
8
+
9
+ ${this.hasAttribute("css")?`@import "${this.getAttribute("css")}";`:""}
10
+ </style>
11
+ <label for="search"> <slot name="feedback"></slot></label>
12
+ <div class="outer">
13
+ <div class="wrapper">
14
+
15
+ <slot name="checked"></slot>
16
+ <input name="search" id="search" autocomplete="off" required />
17
+ <span class="admin-panel feedback">This field is required</span>
18
+ <div class="admin-panel dropdown">
19
+ <slot></slot>
20
+ </div>
21
+ <button id="clear"><span class="visually-hidden">Clear</span></button>
22
+ </div>
23
+ </div>
24
+ `,this.shadowRoot.appendChild(r.content.cloneNode(!0))}connectedCallback(){let t=this,s=this.closest("form"),r=this.shadowRoot.querySelector(".wrapper"),a=t.shadowRoot.querySelector("#search"),p=t.shadowRoot.querySelector("#clear"),n=0,h=t.shadowRoot.querySelector("label");if(h.innerHTML=t.getAttribute("data-label"),t.hasAttribute("placeholder")&&a.setAttribute("placeholder",t.getAttribute("placeholder")),t.setAttribute("data-error","true"),s&&t.hasAttribute("data-is-required")){let e=new MutationObserver(function(o){o.forEach(function(i){const l=i.target;console.log(l),l.classList.contains("was-validated")?r.classList.add("was-validated"):r.classList.remove("was-validated")})});s.classList.contains("was-validated")?r.classList.add("was-validated"):r.classList.remove("was-validated"),e.observe(s,{attributes:!0,attributeFilter:["style","class"]})}function c(e){e.checked==!1?(e.closest("label").removeAttribute("slot"),e.closest("label").removeAttribute("style"),e.closest("label").removeAttribute("data-order")):(n++,e.closest("label").setAttribute("slot","checked"),e.closest("label").setAttribute("style",`--order:${n};`),e.closest("label").setAttribute("data-order",n)),t.querySelector('label[slot="checked"]')?(r.classList.add("filled"),t.removeAttribute("data-error"),a.removeAttribute("placeholder")):(r.classList.remove("filled"),t.setAttribute("data-error","true"),t.hasAttribute("placeholder")&&a.setAttribute("placeholder",t.getAttribute("placeholder")))}Array.from(t.querySelectorAll('label input[type="checkbox"]:checked')).forEach((e,o)=>{c(e)}),a.addEventListener("input",e=>{Array.from(t.querySelectorAll('label:not([slot="checked"])')).forEach((o,i)=>{o.querySelector("input").value.toLowerCase().includes(a.value.toLowerCase())?o.removeAttribute("slot"):o.setAttribute("slot","notmatched")})}),t.addEventListener("change",e=>{if(e&&e.target instanceof HTMLElement&&e.target.closest('input[type="checkbox"]')){let o=e.target.closest('input[type="checkbox"]');c(o),a.focus()}}),p.addEventListener("click",function(e){Array.from(t.querySelectorAll('label input[type="checkbox"]')).forEach((o,i)=>{o.checked=!1,c(o)}),a.focus()}),t.addEventListener("keydown",function(e){const o=document.activeElement;switch(e.key){case"ArrowUp":if(e.preventDefault(),o.hasAttribute("type")&&o.getAttribute("type")=="checkbox"){let i=t.querySelectorAll('label:not([slot="checked"]):not([slot="checked"])'),l=Array.from(i).indexOf(o.closest("label")),d=Array.from(i)[l-1];d?d.focus():a.focus()}break;case"ArrowDown":if(e.preventDefault(),o==t)t.querySelector('label:not([slot="checked"]):not([slot="checked"])').focus();else if(o.hasAttribute("type")&&o.getAttribute("type")=="checkbox"){let i=o.value,l=t.querySelector(`label:has(input[value="${i}"]) ~ label:not([slot="checked"]):not([slot="checked"])`);l&&l.focus()}break;case"Enter":e.stopPropagation(),e.preventDefault(),o.hasAttribute("type")&&o.getAttribute("type")=="checkbox"&&(o.checked==!1?o.checked=!0:o.checked=!1),c(o),a.focus();break}});function u(){if(n==0)return!1;let e=t.querySelector(`label[data-order="${n}"]`);return e||(e=u(n--)),e}a.addEventListener("keydown",function(e){switch(e.key){case"Enter":t.querySelector(`input[value="${a.value}"]:not(:checked)`)||(a.value=""),a.focus();break;case"Backspace":if(!a.value){let i=u();if(i){let l=i.querySelector("input");l.checked=!1,c(l)}a.focus()}break}}),t.addEventListener("mousedown",e=>{r.setAttribute("data-mousedown","true")}),t.addEventListener("mouseup",e=>{r.removeAttribute("data-mousedown")})}}export{m as default};
25
+ //# sourceMappingURL=multiselect.component.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiselect.component.min.js","sources":["multiselect.component.js"],"sourcesContent":["// @ts-nocheck\n// Data layer Web component created\nwindow.dataLayer = window.dataLayer || [];\nwindow.dataLayer.push({\n \"event\": \"customElementRegistered\",\n \"element\": \"mutliselect\"\n});\nclass iamMultiselect extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';\n const coreCSS = document.body.hasAttribute('data-core-css') ? document.body.getAttribute('data-core-css') : `${assetLocation}/css/core.min.css`;\n const loadCSS = `@import \"${assetLocation}/css/components/multiselect.css\";`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n @import \"${coreCSS}\";\n ${loadCSS}\n ${this.hasAttribute('css') ? `@import \"${this.getAttribute('css')}\";` : ``}\n </style>\n <label for=\"search\"> <slot name=\"feedback\"></slot></label>\n <div class=\"outer\">\n <div class=\"wrapper\">\n \n <slot name=\"checked\"></slot>\n <input name=\"search\" id=\"search\" autocomplete=\"off\" required />\n <span class=\"admin-panel feedback\">This field is required</span>\n <div class=\"admin-panel dropdown\">\n <slot></slot>\n </div>\n <button id=\"clear\"><span class=\"visually-hidden\">Clear</span></button>\n </div>\n </div>\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n let multiselect = this;\n let form = this.closest('form');\n let wrapper = this.shadowRoot.querySelector('.wrapper');\n let search = multiselect.shadowRoot.querySelector('#search');\n let button = multiselect.shadowRoot.querySelector('#clear');\n let order = 0;\n let label = multiselect.shadowRoot.querySelector('label');\n label.innerHTML = multiselect.getAttribute('data-label');\n if (multiselect.hasAttribute('placeholder')) {\n search.setAttribute('placeholder', multiselect.getAttribute('placeholder'));\n }\n multiselect.setAttribute('data-error', 'true');\n // If in form and is required lets watch for the form being submitted\n if (form && multiselect.hasAttribute('data-is-required')) {\n let observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutationRecord) {\n const targetElement = mutationRecord.target;\n console.log(targetElement);\n if (targetElement.classList.contains(\"was-validated\")) {\n wrapper.classList.add('was-validated');\n }\n else {\n wrapper.classList.remove('was-validated');\n }\n ;\n });\n });\n if (form.classList.contains(\"was-validated\")) {\n wrapper.classList.add('was-validated');\n }\n else {\n wrapper.classList.remove('was-validated');\n }\n ;\n observer.observe(form, {\n attributes: true,\n attributeFilter: ['style', 'class']\n });\n }\n // Set the correct attributes\n function setItem(inputToSet) {\n if (inputToSet.checked == false) {\n inputToSet.closest('label').removeAttribute('slot');\n inputToSet.closest('label').removeAttribute('style');\n inputToSet.closest('label').removeAttribute('data-order');\n }\n else {\n order++;\n inputToSet.closest('label').setAttribute('slot', 'checked');\n inputToSet.closest('label').setAttribute('style', `--order:${order};`);\n inputToSet.closest('label').setAttribute('data-order', order);\n }\n // check for errors\n if (multiselect.querySelector('label[slot=\"checked\"]')) {\n wrapper.classList.add('filled');\n multiselect.removeAttribute('data-error');\n search.removeAttribute('placeholder');\n }\n else {\n wrapper.classList.remove('filled');\n multiselect.setAttribute('data-error', 'true');\n if (multiselect.hasAttribute('placeholder')) {\n search.setAttribute('placeholder', multiselect.getAttribute('placeholder'));\n }\n }\n }\n // Set on load\n Array.from(multiselect.querySelectorAll(`label input[type=\"checkbox\"]:checked`)).forEach((checkbox, index) => {\n setItem(checkbox);\n });\n // Filter list\n search.addEventListener('input', (event) => {\n Array.from(multiselect.querySelectorAll(`label:not([slot=\"checked\"])`)).forEach((label, index) => {\n let checkbox = label.querySelector('input');\n let searchValue = checkbox.value;\n if (searchValue.toLowerCase().includes(search.value.toLowerCase())) {\n label.removeAttribute('slot');\n }\n else {\n label.setAttribute('slot', 'notmatched');\n }\n });\n });\n // Set items\n multiselect.addEventListener('change', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('input[type=\"checkbox\"]')) {\n let checkbox = event.target.closest('input[type=\"checkbox\"]');\n setItem(checkbox);\n search.focus();\n }\n });\n // Clear all\n button.addEventListener(\"click\", function (event) {\n Array.from(multiselect.querySelectorAll(`label input[type=\"checkbox\"]`)).forEach((checkbox, index) => {\n checkbox.checked = false;\n setItem(checkbox);\n });\n search.focus();\n });\n // Add some keyboard features to keep it accessible\n multiselect.addEventListener(\"keydown\", function (event) {\n const activeElement = document.activeElement;\n switch (event.key) { // change to event.key to key to use the above variable\n case \"ArrowUp\":\n // Up pressed\n event.preventDefault();\n if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == \"checkbox\") {\n let arrCheckboxes = multiselect.querySelectorAll(`label:not([slot=\"checked\"]):not([slot=\"checked\"])`);\n let activeIndex = Array.from(arrCheckboxes).indexOf(activeElement.closest('label'));\n let prevCheckbox = Array.from(arrCheckboxes)[activeIndex - 1];\n if (prevCheckbox)\n prevCheckbox.focus();\n else\n search.focus();\n }\n break;\n case \"ArrowDown\":\n // Down pressed\n event.preventDefault();\n if (activeElement == multiselect) {\n multiselect.querySelector('label:not([slot=\"checked\"]):not([slot=\"checked\"])').focus();\n }\n else if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == \"checkbox\") {\n let activeValue = activeElement.value;\n let nextCheckbox = multiselect.querySelector(`label:has(input[value=\"${activeValue}\"]) ~ label:not([slot=\"checked\"]):not([slot=\"checked\"])`);\n if (nextCheckbox)\n nextCheckbox.focus();\n }\n break;\n case \"Enter\":\n event.stopPropagation();\n event.preventDefault();\n if (activeElement.hasAttribute('type') && activeElement.getAttribute('type') == \"checkbox\") {\n if (activeElement.checked == false)\n activeElement.checked = true;\n else\n activeElement.checked = false;\n }\n setItem(activeElement);\n search.focus();\n break;\n }\n });\n function checkLastTag() {\n if (order == 0)\n return false;\n let lastTag = multiselect.querySelector(`label[data-order=\"${order}\"]`);\n if (!lastTag) {\n lastTag = checkLastTag(order--);\n }\n return lastTag;\n }\n search.addEventListener(\"keydown\", function (event) {\n switch (event.key) { // change to event.key to key to use the above variable\n case \"Enter\":\n let match = multiselect.querySelector(`input[value=\"${search.value}\"]:not(:checked)`);\n if (!match)\n search.value = \"\";\n search.focus();\n break;\n case \"Backspace\":\n if (!search.value) {\n let lastTag = checkLastTag(order);\n if (lastTag) {\n let lastTagInput = lastTag.querySelector('input');\n lastTagInput.checked = false;\n setItem(lastTagInput);\n }\n search.focus();\n }\n break;\n }\n });\n // Fix for the inline edit multiselect\n multiselect.addEventListener(\"mousedown\", (event) => {\n wrapper.setAttribute('data-mousedown', 'true');\n });\n multiselect.addEventListener(\"mouseup\", (event) => {\n wrapper.removeAttribute('data-mousedown');\n });\n }\n}\nexport default iamMultiselect;\n"],"names":["iamMultiselect","assetLocation","coreCSS","template","multiselect","form","wrapper","search","button","order","label","observer","mutations","mutationRecord","targetElement","setItem","inputToSet","checkbox","index","event","activeElement","arrCheckboxes","activeIndex","prevCheckbox","activeValue","nextCheckbox","checkLastTag","lastTag","lastTagInput"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v5.5.1-beta-2
2
+ * iamKey v5.5.1-beta-5
3
3
  * Copyright 2022-2024 iamproperty
4
4
  */window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"nav"});class v extends HTMLElement{constructor(){super();const s=this.attachShadow({mode:"open"}),n=document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets",e=document.body.hasAttribute("data-core-css")?document.body.getAttribute("data-core-css"):`${n}/css/core.min.css`,i=document.createElement("template");i.innerHTML=`
5
5
  <style class="styles">
@@ -34,7 +34,7 @@
34
34
  </div>
35
35
  </div>
36
36
  <div class="backdrop" part="backdrop"></div>
37
- `,s.appendChild(i.content.cloneNode(!0)),document.getElementById("navGlobal")||document.head.insertAdjacentHTML("beforeend",`<style id="navGlobal">body:has(iam-nav.open:not(.nav--sticky):not(.nav--xs-sticky)){max-height:100vh;overflow:hidden}body{--nav-height: 6rem;--sticky-padding: 0px}body:has(iam-nav a[slot=secondary]){--nav-height: 8.5rem}body:has(iam-nav.nav--sticky){--sticky-padding: var(--nav-height)}nav:has(iam-nav){min-height:6rem;display:block;position:relative}nav:has(iam-nav) iam-nav{position:absolute;top:0;left:0;width:100%;z-index:var(--index-menu)}@media screen and (min-width: 62em){nav:has(iam-nav a[slot=secondary]){min-height:8.5rem}}nav:has(iam-nav.nav--sticky) iam-nav{position:fixed}@media screen and (max-width: 36em){body:has(iam-nav.open:not(.nav--xs-sticky)){max-height:100vh;overflow:hidden}nav:has(iam-nav.nav--xs-sticky) iam-nav{position:fixed}}@media screen and (min-width: 36em){body:has(iam-nav.open:not(.nav--sticky)){max-height:100vh;overflow:hidden}}iam-nav{--nav-height: 6rem;overscroll-behavior:contain !important;background-color:var(--colour-canvas);display:block;margin-left:auto;margin-right:auto;padding:var(--container-padding);padding-top:1.5rem;padding-bottom:1.5rem;width:100%}iam-nav:has(a[slot=secondary]){--nav-height: 8.5rem}iam-nav .brand{font-size:3rem;height:3rem;padding:0;text-decoration:none;min-width:min(var(--svg-width),14rem);margin-right:auto}iam-nav .brand img{height:100%;width:auto}iam-nav a:not([slot=logo]):not(.btn):not(:has(iam-card)){text-decoration:none}iam-nav a:not([slot=logo]):not(.btn):not(:has(iam-card)) .badge{position:absolute;right:0;top:50%;margin-top:-0.8rem}iam-nav a:not([slot=logo]):not(.btn):not(:has(iam-card)):where(:hover,:focus,.selected,[aria-current=page]){text-decoration:underline;text-underline-offset:.3em;text-decoration-thickness:2px;text-decoration-color:var(--colour-underline)}iam-nav a:not([slot=logo]):not(.btn):not(:has(iam-card)):active{text-decoration-color:#a2d393 !important}iam-nav a:not([slot=logo]):not(.btn):not(:has(iam-card)).selected,iam-nav a:not([slot=logo]):not(.btn):not(:has(iam-card))[aria-current=page]{text-decoration-color:var(--colour-info) !important}iam-nav details>summary{text-decoration:none}iam-nav details>summary:where(:hover,:focus,.selected){text-decoration:underline;text-underline-offset:.3em;text-decoration-thickness:2px;text-decoration-color:var(--colour-underline)}iam-nav details>summary:active{text-decoration-color:#a2d393 !important}iam-nav details[open]>summary{text-decoration:underline;text-underline-offset:.3em;text-decoration-thickness:2px;text-decoration-color:var(--colour-success)}iam-nav details:has([aria-current=page]:not([data-duplicate]))>summary{text-decoration:underline;text-underline-offset:.3em;text-decoration-thickness:2px;text-decoration-color:var(--colour-info)}@media screen and (max-width: 62em){iam-nav details{background-color:var(--colour-canvas);margin-left:-1.5rem;margin-right:-1.5rem;padding-inline:1.5rem;width:auto;position:relative}}@media screen and (max-width: 62em)and (prefers-color-scheme: light){iam-nav details{background-color:#eee}}@media screen and (max-width: 62em){iam-nav details summary{background-color:var(--colour-white);display:block;border:none;color:var(--colour-link);margin:0;margin-left:-1.5rem;margin-right:-1.5rem;padding:1.5rem 4rem 1.5rem 1.5rem;font-size:1rem;line-height:1.5rem;min-height:1.5rem;position:relative;font-weight:normal}}@media screen and (max-width: 62em)and (prefers-color-scheme: dark){iam-nav details summary{background-color:var(--colour-canvas-2)}}@media screen and (max-width: 62em){iam-nav details summary:after{content:"\uF055";display:block;font-size:1.5rem;font-weight:300;position:absolute;top:1.5rem;right:1.5rem;font-family:"Font Awesome 6 Pro";line-height:1em}iam-nav details[open]>summary:after{content:"\uF056";font-weight:bold}iam-nav details a{text-decoration:none;display:block;border:none;color:var(--colour-link);margin:0;margin-left:3rem;padding:1.5rem 0 1.5rem 0;font-size:1rem;line-height:1.5rem;min-height:1.5rem;position:relative;font-weight:normal}iam-nav details a:after{background:var(--colour-border) !important;top:calc(100% - 2px) !important;width:100% !important}iam-nav details a:has(iam-card){display:none !important}iam-nav details>div a:last-child{margin-bottom:0 !important}iam-nav details>div a:last-child:after{display:none}iam-nav details:after{content:"";position:absolute;top:calc(100% - 2px);left:1.5rem;height:2px;width:calc(100% - 3rem);display:block;height:2px;background-color:var(--colour-border) !important}iam-nav details details:after{display:none}iam-nav details details summary{padding:0 1.5rem 1.5rem 3.5rem;position:relative}iam-nav details details summary:after{left:1.5rem;font-size:1rem;top:0.1875rem;transform:none;font-weight:400}iam-nav details a+details>summary{padding-top:1.5rem}iam-nav details a+details>summary:after{margin-top:1.5rem}iam-nav details details[open]+details:before{content:"";display:block;background:var(--colour-canvas-2);padding-top:1.5rem;margin-left:-1.5rem;margin-right:-1.5rem}}@media screen and (max-width: 62em)and (min-width: 36em){iam-nav details{padding-right:2.5rem;margin-right:-2.5rem}iam-nav details:after{width:calc(100% - 4rem)}iam-nav details summary{padding-right:2.5rem;margin-right:-2.5rem}iam-nav details summary:after{right:2.5rem}iam-nav details details[open]+details:before{padding-right:2.5rem;margin-right:-2.5rem}}@media screen and (min-width: 62em){iam-nav .nav--menu details{background-color:var(--colour-canvas);margin-left:-1.5rem;margin-right:-1.5rem;padding-inline:1.5rem;width:auto;position:relative;padding-right:2.5rem;margin-right:-2.5rem}}@media screen and (min-width: 62em)and (prefers-color-scheme: light){iam-nav .nav--menu details{background-color:#eee}}@media screen and (min-width: 62em){iam-nav .nav--menu details summary{background-color:var(--colour-white);display:block;border:none;color:var(--colour-link);margin:0;margin-left:-1.5rem;margin-right:-1.5rem;padding:1.5rem 4rem 1.5rem 1.5rem;font-size:1rem;line-height:1.5rem;min-height:1.5rem;position:relative;font-weight:normal}}@media screen and (min-width: 62em)and (prefers-color-scheme: dark){iam-nav .nav--menu details summary{background-color:var(--colour-canvas-2)}}@media screen and (min-width: 62em){iam-nav .nav--menu details summary:after{content:"\uF055";display:block;font-size:1.5rem;font-weight:300;position:absolute;top:1.5rem;right:1.5rem;font-family:"Font Awesome 6 Pro";line-height:1em}iam-nav .nav--menu details[open]>summary:after{content:"\uF056";font-weight:bold}iam-nav .nav--menu details a{text-decoration:none;display:block;border:none;color:var(--colour-link);margin:0;margin-left:3rem;padding:1.5rem 0 1.5rem 0;font-size:1rem;line-height:1.5rem;min-height:1.5rem;position:relative;font-weight:normal}iam-nav .nav--menu details a:after{background:var(--colour-border) !important;top:calc(100% - 2px) !important;width:100% !important}iam-nav .nav--menu details a:has(iam-card){display:none !important}iam-nav .nav--menu details>div a:last-child{margin-bottom:0 !important}iam-nav .nav--menu details>div a:last-child:after{display:none}iam-nav .nav--menu details:after{content:"";position:absolute;top:calc(100% - 2px);left:1.5rem;height:2px;width:calc(100% - 3rem);display:block;height:2px;background-color:var(--colour-border) !important}iam-nav .nav--menu details:after{width:calc(100% - 4rem)}iam-nav .nav--menu details summary{padding-right:2.5rem;margin-right:-2.5rem}iam-nav .nav--menu details summary:after{right:2.5rem}}@media screen and (min-width: 62em){iam-nav>details,iam-nav *:not(.nav--menu)>details{width:auto}iam-nav>details>summary,iam-nav *:not(.nav--menu)>details>summary{display:block;border:none;color:var(--colour-link);margin:0;font-size:1rem;line-height:6rem;min-height:6rem;margin-block:-1.5rem;position:relative;font-weight:normal;white-space:nowrap;padding-right:1.5rem}iam-nav>details>summary:after,iam-nav *:not(.nav--menu)>details>summary:after{content:"\uF078";display:block;font-size:1rem;font-weight:300;position:absolute;top:50%;transform:translate(0, -50%);right:0;font-family:"Font Awesome 6 Pro";line-height:1em}iam-nav>details:not(:first-child)>summary,iam-nav *:not(.nav--menu)>details:not(:first-child)>summary{margin-left:1.5rem}iam-nav>details div,iam-nav *:not(.nav--menu)>details div{display:none}iam-nav>details[open]>div,iam-nav *:not(.nav--menu)>details[open]>div{position:absolute;display:block;top:100%;left:0;width:100%;padding-inline:max(var(--padding-inline),(100% - var(--container-max-width))/2 + var(--padding-inline)) !important;box-shadow:0px 6px 12px rgba(0,0,0,.11)}}@media screen and (min-width: 62em)and (prefers-color-scheme: light){iam-nav>details[open]>div,iam-nav *:not(.nav--menu)>details[open]>div{background:var(--colour-white);--colour-muted: #9d9d9d;--colour-body: #595959;--colour-border: #D8D8D8;--colour-link: var(--colour-primary-theme);--colour-brand: var(--colour-primary-theme);--colour-underline: var(--colour-secondary);--colour-heading: var(--colour-primary);--colour-focus: var(--colour-primary-theme);--colour-hover: var(--colour-primary-theme);--colour-active: var(--colour-primary-theme);--colour-selected: var(--colour-info);--colour-inverted: #FCFCFC;--colour-btn: var(--colour-primary-theme);--colour-btn-bg: var(--colour-warning);--colour-btn-border: var(--colour-warning);--colour-btn-bg-hover: transparent;--colour-btn-hover: var(--colour-primary-theme);--colour-btn-secondary: var(--colour-primary-theme);--colour-btn-secondary-border: var(--colour-primary-theme);--colour-btn-secondary-bg: transparent;--colour-btn-secondary-bg-hover: var(--colour-primary-theme);--colour-btn-secondary-hover: var(--colour-inverted);--colour-canvas-2: white;--colour-btn-action-hover-bg: var(--colour-light)}iam-nav>details[open]>div .text-primary,iam-nav *:not(.nav--menu)>details[open]>div .text-primary{color:var(--colour-primary) !important}}@media screen and (min-width: 62em)and (prefers-color-scheme: dark){iam-nav>details[open]>div,iam-nav *:not(.nav--menu)>details[open]>div{--colour-canvas: #262626;--colour-canvas-2: #313131;--colour-body: #BFBFBF;--colour-heading: var(--colour-white);--colour-link: var(--colour-white);--colour-hover: var(--colour-white);--colour-active: var(--colour-white);--colour-border: var(--colour-white);--colour-brand: var(--colour-white);--colour-btn: #00313c;--colour-btn-border: var(--colour-white);--colour-btn-bg: var(--colour-white);--colour-btn-hover: var(--colour-white);--colour-btn-secondary: var(--colour-white);--colour-btn-secondary-border: var(--colour-white);--colour-btn-secondary-bg: transparent;--colour-btn-secondary-bg-hover: var(--colour-white);--colour-btn-secondary-hover: var(--colour-primary-theme);--colour-btn-action-hover-bg: var(--colour-canvas-2)}}@media screen and (min-width: 62em){iam-nav>details[open]>div:has(details),iam-nav *:not(.nav--menu)>details[open]>div:has(details){background:var(--colour-canvas-2)}}@media screen and (min-width: 62em)and (prefers-color-scheme: light){iam-nav>details[open]>div:has(details),iam-nav *:not(.nav--menu)>details[open]>div:has(details){background:#eee}}@media screen and (min-width: 62em){iam-nav>details[open]>div:has(details)>a,iam-nav *:not(.nav--menu)>details[open]>div:has(details)>a{display:inline-block !important;margin-right:2rem !important}iam-nav>details[open]>div:has(details)>a:first-child,iam-nav *:not(.nav--menu)>details[open]>div:has(details)>a:first-child{margin-right:0}iam-nav>details[open]>div:has(details)>a:after,iam-nav *:not(.nav--menu)>details[open]>div:has(details)>a:after{display:none !important}iam-nav>details[open]>div:has(details) a:has(iam-card),iam-nav *:not(.nav--menu)>details[open]>div:has(details) a:has(iam-card){display:none}iam-nav>details[open]>div:has(details) details,iam-nav *:not(.nav--menu)>details[open]>div:has(details) details{display:inline-block}iam-nav>details[open]>div:has(details) details summary,iam-nav *:not(.nav--menu)>details[open]>div:has(details) details summary{display:inline-block;margin-left:0 !important;margin-right:2rem}iam-nav>details[open]>div:has(details) details:first-child summary,iam-nav *:not(.nav--menu)>details[open]>div:has(details) details:first-child summary{margin-left:0}iam-nav>details[open]>div:not(:has(details)),iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details)){background:var(--colour-canvas);padding-top:8rem;padding-bottom:4rem;columns:3;column-gap:6.875rem}}@media screen and (min-width: 62em)and (prefers-color-scheme: light){iam-nav>details[open]>div:not(:has(details)),iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details)){background:var(--colour-white);--colour-canvas-2: white}}@media screen and (min-width: 62em){iam-nav>details[open]>div:not(:has(details))>a,iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details))>a{margin-right:0 !important;display:block;max-height:6rem}iam-nav>details[open]>div:not(:has(details))>a.double-height,iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details))>a.double-height{min-height:6rem}iam-nav>details[open]>div:not(:has(details)) a:has(iam-card),iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details)) a:has(iam-card){display:inline-block}iam-nav>details[open]>div:not(:has(details)):before,iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details)):before{content:attr(data-title);display:block;position:absolute;top:0;left:0;width:100%;color:var(--colour-white);padding-inline:max(var(--padding-inline),(100% - var(--container-max-width))/2 + var(--padding-inline)) !important;font-size:2rem;font-weight:bold;line-height:5.5rem;--gradient-direction: 90deg;background-color:var(--colour-info-theme);background-image:linear-gradient(var(--gradient-direction), var(--colour-primary-theme) 0, transparent 100%) !important}iam-nav>details[open]>div:not(:has(details)):has(iam-card),iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details)):has(iam-card){column-gap:1rem}iam-nav>details[open]>div:not(:has(details)):has(iam-card) a:not(:has(iam-card)),iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details)):has(iam-card) a:not(:has(iam-card)){margin-right:5.875rem !important}iam-nav>details[open]>div:not(:has(details)):has(iam-card) a:has(iam-card):after,iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details)):has(iam-card) a:has(iam-card):after{display:none}iam-nav>details[open]>div:not(:has(details)):has(iam-card) a:not(:has(iam-card))+a:has(iam-card),iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details)):has(iam-card) a:not(:has(iam-card))+a:has(iam-card){break-before:column}iam-nav>details a:not([slot=logo]):not(.btn):not(:has(iam-card)),iam-nav *:not(.nav--menu)>details a:not([slot=logo]):not(.btn):not(:has(iam-card)){font-size:1rem;line-height:1.5rem;padding-block:1.5rem;position:relative;font-weight:normal;display:block;margin:0}iam-nav>details a:not([slot=logo]):not(.btn):not(:has(iam-card)):where(:hover,:focus,.selected,[aria-current=page]),iam-nav *:not(.nav--menu)>details a:not([slot=logo]):not(.btn):not(:has(iam-card)):where(:hover,:focus,.selected,[aria-current=page]){text-decoration:underline;text-underline-offset:.3em;text-decoration-thickness:2px;text-decoration-color:var(--colour-underline)}iam-nav>details a:not([slot=logo]):not(.btn):not(:has(iam-card)):active,iam-nav *:not(.nav--menu)>details a:not([slot=logo]):not(.btn):not(:has(iam-card)):active{text-decoration-color:#a2d393 !important}iam-nav>details a:not([slot=logo]):not(.btn):not(:has(iam-card)).selected,iam-nav>details a:not([slot=logo]):not(.btn):not(:has(iam-card))[aria-current=page],iam-nav *:not(.nav--menu)>details a:not([slot=logo]):not(.btn):not(:has(iam-card)).selected,iam-nav *:not(.nav--menu)>details a:not([slot=logo]):not(.btn):not(:has(iam-card))[aria-current=page]{text-decoration-color:var(--colour-info)}iam-nav>details a:not([slot=logo]):not(.btn):not(:has(iam-card)):after,iam-nav *:not(.nav--menu)>details a:not([slot=logo]):not(.btn):not(:has(iam-card)):after{content:"";display:block;height:2px;width:100% !important;top:calc(100% - 2px);background-color:var(--colour-border) !important}iam-nav>details details>summary,iam-nav *:not(.nav--menu)>details details>summary{padding-right:0;background:rgba(0,0,0,0)}iam-nav>details details>summary:after,iam-nav *:not(.nav--menu)>details details>summary:after{display:none}iam-nav>details details:not(:first-child)>summary,iam-nav *:not(.nav--menu)>details details:not(:first-child)>summary{margin-left:2rem}nav:has(iam-nav.open){min-height:100vh !important;max-height:100vh;overflow:auto;margin-bottom:calc((100vh - var(--nav-height))*-1)}html:has(iam-nav.open:not(.demo-open)){overflow:hidden}}@media screen and (min-width: 80em){iam-nav.nav--large *:not(.nav--menu)>details[open]>div:not(:has(details)){columns:4;column-gap:6.875rem}}@media screen and (min-width: 62em){iam-nav.search-open>*:not([slot=logo]):not([slot=secondary]):not([slot=search]){display:none !important}}@media screen and (min-width: 62em){iam-nav:has([slot=dual]) .brand:has(~[slot=dual]){margin-right:1.5rem !important}iam-nav:has([slot=dual]) *:not([slot=dual]):has(+[slot=dual])+[slot=dual]{margin-left:auto !important}iam-nav:has([slot=dual]) .btn[slot=dual]{margin-left:0}iam-nav:has([slot=dual])::part(btn-menu){margin-left:1rem !important}}iam-nav>.dialog__wrapper .dialog--list a{font-size:1rem}@media screen and (max-width: 62em){iam-nav>.dialog__wrapper:not(.dialog--xs){width:100%}iam-nav>.dialog__wrapper:not(.dialog--xs) .btn-compact{display:none !important}iam-nav>.dialog__wrapper:not(.dialog--xs) .dialog--list{display:contents !important}iam-nav>.dialog__wrapper:not(.dialog--xs) .dialog--list a{font-size:1rem}iam-nav>.dialog__wrapper:not(.dialog--xs) .dialog--list a,iam-nav .btn-compact{--compact-size: 2rem;all:unset;display:block !important;font-size:0.875rem !important;line-height:2rem !important;height:2rem !important;min-height:2rem !important;max-height:2rem !important;width:100% !important;margin:0 !important;cursor:pointer;color:var(--colour-link);font-weight:normal !important}iam-nav>.dialog__wrapper:not(.dialog--xs) .dialog--list a:where(:hover,:focus,.selected,[aria-current=page]),iam-nav .btn-compact:where(:hover,:focus,.selected,[aria-current=page]){text-decoration:underline;text-underline-offset:.3em;text-decoration-thickness:2px;text-decoration-color:var(--colour-underline)}iam-nav>.dialog__wrapper:not(.dialog--xs) .dialog--list a:before,iam-nav .btn-compact:before{display:inline-block;width:auto;position:static;margin-right:.5rem;font-size:.875rem !important;text-decoration:none !important}iam-nav>.dialog__wrapper:not(.dialog--xs) .dialog--list a:after,iam-nav .btn-compact:after{display:none}}iam-nav .nav--menu{outline:none !important}iam-nav .nav--menu::-webkit-scrollbar{width:6px}iam-nav .nav--menu::-webkit-scrollbar-track{border:0 !important}iam-nav .nav--menu::-webkit-scrollbar-thumb{border:0 !important}iam-nav .nav--menu hr{width:100% !important;border-top:2px solid var(--colour-border) !important}iam-nav .nav--menu a{display:block !important;line-height:1.25rem !important;padding:1.5rem 0 !important;margin:0 !important;flex-shrink:0;font-size:1rem !important;font-weight:normal !important}iam-nav .nav--menu a:not(.mb-0):not(:has(+a)){margin:0 0 2.25rem 0 !important}iam-nav .nav--menu a:has(+a){margin-bottom:0 !important}iam-nav .nav--menu a:after{content:"";display:block;height:2px;width:100% !important;background-color:var(--colour-border) !important;top:calc(100% - 2px) !important}iam-nav .nav--menu>button{min-width:100%;text-align:center}iam-nav .nav--menu.closed *{display:none !important}/*# sourceMappingURL=assets/css/components/nav.global.css.map */
37
+ `,s.appendChild(i.content.cloneNode(!0)),document.getElementById("navGlobal")||document.head.insertAdjacentHTML("beforeend",`<style id="navGlobal">body:has(iam-nav.open:not(.nav--sticky):not(.nav--xs-sticky)){max-height:100vh;overflow:hidden}body{--nav-height: 6rem;--sticky-padding: 0px}body:has(iam-nav a[slot=secondary]){--nav-height: 8.5rem}body:has(iam-nav.nav--sticky){--sticky-padding: var(--nav-height)}nav:has(iam-nav){min-height:6rem;display:block;position:relative}nav:has(iam-nav) iam-nav{position:absolute;top:0;left:0;width:100%;z-index:var(--index-menu)}@media screen and (min-width: 62em){nav:has(iam-nav a[slot=secondary]){min-height:8.5rem}}nav:has(iam-nav.nav--sticky) iam-nav{position:fixed}@media screen and (max-width: 36em){body:has(iam-nav.open:not(.nav--xs-sticky)){max-height:100vh;overflow:hidden}nav:has(iam-nav.nav--xs-sticky) iam-nav{position:fixed}}@media screen and (min-width: 36em){body:has(iam-nav.open:not(.nav--sticky)){max-height:100vh;overflow:hidden}}iam-nav{--nav-height: 6rem;overscroll-behavior:contain !important;background-color:var(--colour-canvas);display:block;margin-left:auto;margin-right:auto;padding:var(--container-padding);padding-top:1.5rem;padding-bottom:1.5rem;width:100%}iam-nav:has(a[slot=secondary]){--nav-height: 8.5rem}iam-nav .brand{font-size:3rem;height:3rem;padding:0;text-decoration:none;min-width:min(var(--svg-width),14rem);margin-right:auto}iam-nav .brand img{height:100%;width:auto}iam-nav a:not([slot=logo]):not(.btn):not(:has(iam-card)){text-decoration:none}iam-nav a:not([slot=logo]):not(.btn):not(:has(iam-card)) .badge{position:absolute;right:0;top:50%;margin-top:-0.8rem}iam-nav a:not([slot=logo]):not(.btn):not(:has(iam-card)):where(:hover,:focus,.selected,[aria-current=page]){text-decoration:underline;text-underline-offset:.3em;text-decoration-thickness:2px;text-decoration-color:var(--colour-underline)}iam-nav a:not([slot=logo]):not(.btn):not(:has(iam-card)):active{text-decoration-color:#a2d393 !important}iam-nav a:not([slot=logo]):not(.btn):not(:has(iam-card)).selected,iam-nav a:not([slot=logo]):not(.btn):not(:has(iam-card))[aria-current=page]{text-decoration-color:var(--colour-info) !important}iam-nav details{padding-bottom:0}iam-nav details>summary{text-decoration:none}iam-nav details>summary:where(:hover,:focus,.selected){text-decoration:underline;text-underline-offset:.3em;text-decoration-thickness:2px;text-decoration-color:var(--colour-underline)}iam-nav details>summary:active{text-decoration-color:#a2d393 !important}iam-nav details[open]>summary{text-decoration:underline;text-underline-offset:.3em;text-decoration-thickness:2px;text-decoration-color:var(--colour-success)}iam-nav details:has([aria-current=page]:not([data-duplicate]))>summary{text-decoration:underline;text-underline-offset:.3em;text-decoration-thickness:2px;text-decoration-color:var(--colour-info)}@media screen and (max-width: 62em){iam-nav details{background-color:var(--colour-canvas);margin-left:-1.5rem;margin-right:-1.5rem;padding-inline:1.5rem;width:auto;position:relative}}@media screen and (max-width: 62em)and (prefers-color-scheme: light){iam-nav details{background-color:#eee}}@media screen and (max-width: 62em){iam-nav details summary{background-color:var(--colour-white);display:block;border:none;color:var(--colour-link);margin:0;margin-left:-1.5rem;margin-right:-1.5rem;padding:1.5rem 4rem 1.5rem 1.5rem;font-size:1rem;line-height:1.5rem;min-height:1.5rem;position:relative;font-weight:normal}}@media screen and (max-width: 62em)and (prefers-color-scheme: dark){iam-nav details summary{background-color:var(--colour-canvas-2)}}@media screen and (max-width: 62em){iam-nav details summary:after{content:"\uF055";display:block;font-size:1.5rem;font-weight:300;position:absolute;top:1.5rem;right:1.5rem;font-family:"Font Awesome 6 Pro";line-height:1em}iam-nav details[open]>summary:after{content:"\uF056";font-weight:bold}iam-nav details a{text-decoration:none;display:block;border:none;color:var(--colour-link);margin:0;margin-left:3rem;padding:1.5rem 0 1.5rem 0;font-size:1rem;line-height:1.5rem;min-height:1.5rem;position:relative;font-weight:normal}iam-nav details a:after{background:var(--colour-border) !important;top:calc(100% - 2px) !important;width:100% !important}iam-nav details a:has(iam-card){display:none !important}iam-nav details>div a:last-child{margin-bottom:0 !important}iam-nav details>div a:last-child:after{display:none}iam-nav details:after{content:"";position:absolute;top:calc(100% - 2px);left:1.5rem;height:2px;width:calc(100% - 3rem);display:block;height:2px;background-color:var(--colour-border) !important}iam-nav details details:after{display:none}iam-nav details details summary{padding:0 1.5rem 1.5rem 3.5rem;position:relative}iam-nav details details summary:after{left:1.5rem;font-size:1rem;top:0.1875rem;transform:none;font-weight:400}iam-nav details a+details>summary{padding-top:1.5rem}iam-nav details a+details>summary:after{margin-top:1.5rem}iam-nav details details[open]+details:before{content:"";display:block;background:var(--colour-canvas-2);padding-top:1.5rem;margin-left:-1.5rem;margin-right:-1.5rem}}@media screen and (max-width: 62em)and (min-width: 36em){iam-nav details{padding-right:2.5rem;margin-right:-2.5rem}iam-nav details:after{width:calc(100% - 4rem)}iam-nav details summary{padding-right:2.5rem;margin-right:-2.5rem}iam-nav details summary:after{right:2.5rem}iam-nav details details[open]+details:before{padding-right:2.5rem;margin-right:-2.5rem}}@media screen and (min-width: 62em){iam-nav .nav--menu details{background-color:var(--colour-canvas);margin-left:-1.5rem;margin-right:-1.5rem;padding-inline:1.5rem;width:auto;position:relative;padding-right:2.5rem;margin-right:-2.5rem}}@media screen and (min-width: 62em)and (prefers-color-scheme: light){iam-nav .nav--menu details{background-color:#eee}}@media screen and (min-width: 62em){iam-nav .nav--menu details summary{background-color:var(--colour-white);display:block;border:none;color:var(--colour-link);margin:0;margin-left:-1.5rem;margin-right:-1.5rem;padding:1.5rem 4rem 1.5rem 1.5rem;font-size:1rem;line-height:1.5rem;min-height:1.5rem;position:relative;font-weight:normal}}@media screen and (min-width: 62em)and (prefers-color-scheme: dark){iam-nav .nav--menu details summary{background-color:var(--colour-canvas-2)}}@media screen and (min-width: 62em){iam-nav .nav--menu details summary:after{content:"\uF055";display:block;font-size:1.5rem;font-weight:300;position:absolute;top:1.5rem;right:1.5rem;font-family:"Font Awesome 6 Pro";line-height:1em}iam-nav .nav--menu details[open]>summary:after{content:"\uF056";font-weight:bold}iam-nav .nav--menu details a{text-decoration:none;display:block;border:none;color:var(--colour-link);margin:0;margin-left:3rem;padding:1.5rem 0 1.5rem 0;font-size:1rem;line-height:1.5rem;min-height:1.5rem;position:relative;font-weight:normal}iam-nav .nav--menu details a:after{background:var(--colour-border) !important;top:calc(100% - 2px) !important;width:100% !important}iam-nav .nav--menu details a:has(iam-card){display:none !important}iam-nav .nav--menu details>div a:last-child{margin-bottom:0 !important}iam-nav .nav--menu details>div a:last-child:after{display:none}iam-nav .nav--menu details:after{content:"";position:absolute;top:calc(100% - 2px);left:1.5rem;height:2px;width:calc(100% - 3rem);display:block;height:2px;background-color:var(--colour-border) !important}iam-nav .nav--menu details:after{width:calc(100% - 4rem)}iam-nav .nav--menu details summary{padding-right:2.5rem;margin-right:-2.5rem}iam-nav .nav--menu details summary:after{right:2.5rem}}@media screen and (min-width: 62em){iam-nav>details,iam-nav *:not(.nav--menu)>details{width:auto}iam-nav>details>summary,iam-nav *:not(.nav--menu)>details>summary{display:block;border:none;color:var(--colour-link);margin:0;font-size:1rem;line-height:6rem;min-height:6rem;margin-block:-1.5rem;position:relative;font-weight:normal;white-space:nowrap;padding-right:1.5rem}iam-nav>details>summary:after,iam-nav *:not(.nav--menu)>details>summary:after{content:"\uF078";display:block;font-size:1rem;font-weight:300;position:absolute;top:50%;transform:translate(0, -50%);right:0;font-family:"Font Awesome 6 Pro";line-height:1em}iam-nav>details:not(:first-child)>summary,iam-nav *:not(.nav--menu)>details:not(:first-child)>summary{margin-left:1.5rem}iam-nav>details div,iam-nav *:not(.nav--menu)>details div{display:none}iam-nav>details[open]>div,iam-nav *:not(.nav--menu)>details[open]>div{position:absolute;display:block;top:100%;left:0;width:100%;padding-inline:max(var(--padding-inline),(100% - var(--container-max-width))/2 + var(--padding-inline)) !important;box-shadow:0px 6px 12px rgba(0,0,0,.11)}}@media screen and (min-width: 62em)and (prefers-color-scheme: light){iam-nav>details[open]>div,iam-nav *:not(.nav--menu)>details[open]>div{background:var(--colour-white);--colour-muted: #9d9d9d;--colour-body: #595959;--colour-border: #D8D8D8;--colour-link: var(--colour-primary-theme);--colour-brand: var(--colour-primary-theme);--colour-underline: var(--colour-secondary);--colour-heading: var(--colour-primary);--colour-focus: var(--colour-primary-theme);--colour-hover: var(--colour-primary-theme);--colour-active: var(--colour-primary-theme);--colour-selected: var(--colour-info);--colour-inverted: #FCFCFC;--colour-btn: var(--colour-primary-theme);--colour-btn-bg: var(--colour-warning);--colour-btn-border: var(--colour-warning);--colour-btn-bg-hover: transparent;--colour-btn-hover: var(--colour-primary-theme);--colour-btn-secondary: var(--colour-primary-theme);--colour-btn-secondary-border: var(--colour-primary-theme);--colour-btn-secondary-bg: transparent;--colour-btn-secondary-bg-hover: var(--colour-primary-theme);--colour-btn-secondary-hover: var(--colour-inverted);--colour-canvas-2: white;--colour-btn-action-hover-bg: var(--colour-light)}iam-nav>details[open]>div .text-primary,iam-nav *:not(.nav--menu)>details[open]>div .text-primary{color:var(--colour-primary) !important}}@media screen and (min-width: 62em)and (prefers-color-scheme: dark){iam-nav>details[open]>div,iam-nav *:not(.nav--menu)>details[open]>div{--colour-canvas: #262626;--colour-canvas-2: #313131;--colour-body: #BFBFBF;--colour-heading: var(--colour-white);--colour-link: var(--colour-white);--colour-hover: var(--colour-white);--colour-active: var(--colour-white);--colour-border: var(--colour-white);--colour-brand: var(--colour-white);--colour-btn: #00313c;--colour-btn-border: var(--colour-white);--colour-btn-bg: var(--colour-white);--colour-btn-hover: var(--colour-white);--colour-btn-secondary: var(--colour-white);--colour-btn-secondary-border: var(--colour-white);--colour-btn-secondary-bg: transparent;--colour-btn-secondary-bg-hover: var(--colour-white);--colour-btn-secondary-hover: var(--colour-primary-theme);--colour-btn-action-hover-bg: var(--colour-canvas-2)}}@media screen and (min-width: 62em){iam-nav>details[open]>div:has(details),iam-nav *:not(.nav--menu)>details[open]>div:has(details){background:var(--colour-canvas-2)}}@media screen and (min-width: 62em)and (prefers-color-scheme: light){iam-nav>details[open]>div:has(details),iam-nav *:not(.nav--menu)>details[open]>div:has(details){background:#eee}}@media screen and (min-width: 62em){iam-nav>details[open]>div:has(details)>a,iam-nav *:not(.nav--menu)>details[open]>div:has(details)>a{display:inline-block !important;margin-right:2rem !important}iam-nav>details[open]>div:has(details)>a:first-child,iam-nav *:not(.nav--menu)>details[open]>div:has(details)>a:first-child{margin-right:0}iam-nav>details[open]>div:has(details)>a:after,iam-nav *:not(.nav--menu)>details[open]>div:has(details)>a:after{display:none !important}iam-nav>details[open]>div:has(details) a:has(iam-card),iam-nav *:not(.nav--menu)>details[open]>div:has(details) a:has(iam-card){display:none}iam-nav>details[open]>div:has(details) details,iam-nav *:not(.nav--menu)>details[open]>div:has(details) details{display:inline-block}iam-nav>details[open]>div:has(details) details summary,iam-nav *:not(.nav--menu)>details[open]>div:has(details) details summary{display:inline-block;margin-left:0 !important;margin-right:2rem}iam-nav>details[open]>div:has(details) details:first-child summary,iam-nav *:not(.nav--menu)>details[open]>div:has(details) details:first-child summary{margin-left:0}iam-nav>details[open]>div:not(:has(details)),iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details)){background:var(--colour-canvas);padding-top:8rem;padding-bottom:4rem;columns:3;column-gap:6.875rem}}@media screen and (min-width: 62em)and (prefers-color-scheme: light){iam-nav>details[open]>div:not(:has(details)),iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details)){background:var(--colour-white);--colour-canvas-2: white}}@media screen and (min-width: 62em){iam-nav>details[open]>div:not(:has(details))>a,iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details))>a{margin-right:0 !important;display:block;max-height:6rem}iam-nav>details[open]>div:not(:has(details))>a.double-height,iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details))>a.double-height{min-height:6rem}iam-nav>details[open]>div:not(:has(details)) a:has(iam-card),iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details)) a:has(iam-card){display:inline-block}iam-nav>details[open]>div:not(:has(details)):before,iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details)):before{content:attr(data-title);display:block;position:absolute;top:0;left:0;width:100%;color:var(--colour-white);padding-inline:max(var(--padding-inline),(100% - var(--container-max-width))/2 + var(--padding-inline)) !important;font-size:2rem;font-weight:bold;line-height:5.5rem;--gradient-direction: 90deg;background-color:var(--colour-info-theme);background-image:linear-gradient(var(--gradient-direction), var(--colour-primary-theme) 0, transparent 100%) !important}iam-nav>details[open]>div:not(:has(details)):has(iam-card),iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details)):has(iam-card){column-gap:1rem}iam-nav>details[open]>div:not(:has(details)):has(iam-card) a:not(:has(iam-card)),iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details)):has(iam-card) a:not(:has(iam-card)){margin-right:5.875rem !important}iam-nav>details[open]>div:not(:has(details)):has(iam-card) a:has(iam-card):after,iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details)):has(iam-card) a:has(iam-card):after{display:none}iam-nav>details[open]>div:not(:has(details)):has(iam-card) a:not(:has(iam-card))+a:has(iam-card),iam-nav *:not(.nav--menu)>details[open]>div:not(:has(details)):has(iam-card) a:not(:has(iam-card))+a:has(iam-card){break-before:column}iam-nav>details a:not([slot=logo]):not(.btn):not(:has(iam-card)),iam-nav *:not(.nav--menu)>details a:not([slot=logo]):not(.btn):not(:has(iam-card)){font-size:1rem;line-height:1.5rem;padding-block:1.5rem;position:relative;font-weight:normal;display:block;margin:0}iam-nav>details a:not([slot=logo]):not(.btn):not(:has(iam-card)):where(:hover,:focus,.selected,[aria-current=page]),iam-nav *:not(.nav--menu)>details a:not([slot=logo]):not(.btn):not(:has(iam-card)):where(:hover,:focus,.selected,[aria-current=page]){text-decoration:underline;text-underline-offset:.3em;text-decoration-thickness:2px;text-decoration-color:var(--colour-underline)}iam-nav>details a:not([slot=logo]):not(.btn):not(:has(iam-card)):active,iam-nav *:not(.nav--menu)>details a:not([slot=logo]):not(.btn):not(:has(iam-card)):active{text-decoration-color:#a2d393 !important}iam-nav>details a:not([slot=logo]):not(.btn):not(:has(iam-card)).selected,iam-nav>details a:not([slot=logo]):not(.btn):not(:has(iam-card))[aria-current=page],iam-nav *:not(.nav--menu)>details a:not([slot=logo]):not(.btn):not(:has(iam-card)).selected,iam-nav *:not(.nav--menu)>details a:not([slot=logo]):not(.btn):not(:has(iam-card))[aria-current=page]{text-decoration-color:var(--colour-info)}iam-nav>details a:not([slot=logo]):not(.btn):not(:has(iam-card)):after,iam-nav *:not(.nav--menu)>details a:not([slot=logo]):not(.btn):not(:has(iam-card)):after{content:"";display:block;height:2px;width:100% !important;top:calc(100% - 2px);background-color:var(--colour-border) !important}iam-nav>details details>summary,iam-nav *:not(.nav--menu)>details details>summary{padding-right:0;background:rgba(0,0,0,0)}iam-nav>details details>summary:after,iam-nav *:not(.nav--menu)>details details>summary:after{display:none}iam-nav>details details:not(:first-child)>summary,iam-nav *:not(.nav--menu)>details details:not(:first-child)>summary{margin-left:2rem}nav:has(iam-nav.open){min-height:100vh !important;max-height:100vh;overflow:auto;margin-bottom:calc((100vh - var(--nav-height))*-1)}html:has(iam-nav.open:not(.demo-open)){overflow:hidden}}@media screen and (min-width: 80em){iam-nav.nav--large *:not(.nav--menu)>details[open]>div:not(:has(details)){columns:4;column-gap:6.875rem}}@media screen and (min-width: 62em){iam-nav.search-open>*:not([slot=logo]):not([slot=secondary]):not([slot=search]){display:none !important}}@media screen and (min-width: 62em){iam-nav:has([slot=dual]) .brand:has(~[slot=dual]){margin-right:1.5rem !important}iam-nav:has([slot=dual]) *:not([slot=dual]):has(+[slot=dual])+[slot=dual]{margin-left:auto !important}iam-nav:has([slot=dual]) .btn[slot=dual]{margin-left:0}iam-nav:has([slot=dual])::part(btn-menu){margin-left:1rem !important}}iam-nav>.dialog__wrapper .dialog--list a{font-size:1rem}@media screen and (max-width: 62em){iam-nav>.dialog__wrapper:not(.dialog--xs){width:100%}iam-nav>.dialog__wrapper:not(.dialog--xs) .btn-compact{display:none !important}iam-nav>.dialog__wrapper:not(.dialog--xs) .dialog--list{display:contents !important}iam-nav>.dialog__wrapper:not(.dialog--xs) .dialog--list a{font-size:1rem}iam-nav>.dialog__wrapper:not(.dialog--xs) .dialog--list a,iam-nav .btn-compact{--compact-size: 2rem;all:unset;display:block !important;font-size:0.875rem !important;line-height:2rem !important;height:2rem !important;min-height:2rem !important;max-height:2rem !important;width:100% !important;margin:0 !important;cursor:pointer;color:var(--colour-link);font-weight:normal !important}iam-nav>.dialog__wrapper:not(.dialog--xs) .dialog--list a:where(:hover,:focus,.selected,[aria-current=page]),iam-nav .btn-compact:where(:hover,:focus,.selected,[aria-current=page]){text-decoration:underline;text-underline-offset:.3em;text-decoration-thickness:2px;text-decoration-color:var(--colour-underline)}iam-nav>.dialog__wrapper:not(.dialog--xs) .dialog--list a:before,iam-nav .btn-compact:before{display:inline-block;width:auto;position:static;margin-right:.5rem;font-size:.875rem !important;text-decoration:none !important}iam-nav>.dialog__wrapper:not(.dialog--xs) .dialog--list a:after,iam-nav .btn-compact:after{display:none}}iam-nav .nav--menu{outline:none !important}iam-nav .nav--menu::-webkit-scrollbar{width:6px}iam-nav .nav--menu::-webkit-scrollbar-track{border:0 !important}iam-nav .nav--menu::-webkit-scrollbar-thumb{border:0 !important}iam-nav .nav--menu hr{width:100% !important;border-top:2px solid var(--colour-border) !important}iam-nav .nav--menu a{display:block !important;line-height:1.25rem !important;padding:1.5rem 0 !important;margin:0 !important;flex-shrink:0;font-size:1rem !important;font-weight:normal !important}iam-nav .nav--menu a:not(.mb-0):not(:has(+a)){margin:0 0 2.25rem 0 !important}iam-nav .nav--menu a:has(+a){margin-bottom:0 !important}iam-nav .nav--menu a:after{content:"";display:block;height:2px;width:100% !important;background-color:var(--colour-border) !important;top:calc(100% - 2px) !important}iam-nav .nav--menu>button{min-width:100%;text-align:center}iam-nav .nav--menu.closed *{display:none !important}/*# sourceMappingURL=assets/css/components/nav.global.css.map */
38
38
  </style>`)}connectedCallback(){this.hasAttribute("data-css")&&this.shadowRoot.querySelector(".doc-styles").insertAdjacentHTML("beforeend",`@import "${this.getAttribute("data-css")}";`);const s=this.shadowRoot.querySelector(".btn-menu"),n=this.shadowRoot.querySelector(".menu"),e=this,i=this.shadowRoot.querySelector(".backdrop"),u=this.shadowRoot.querySelector(".buttons-holder");if(this.querySelectorAll(":scope > *").forEach(function(a){switch(a.tagName){case"BUTTON":a.hasAttribute("slot")||(a.setAttribute("slot","actions"),n.classList.add("has-actions"));break}if(a.classList.contains("nav--menu")&&a.hasAttribute("data-title")&&a.hasAttribute("data-icon")){const r=a.getAttribute("data-title"),l=a.getAttribute("data-icon"),o=document.createElement("button");o.setAttribute("slot",r),o.classList.add("btn-menu"),o.setAttribute("part","btn-menu"),o.innerHTML=`<span class="btn btn-primary"><span>${r}</span><i class="${l}"></i><i class="fa-regular fa-xmark-large"></i></span>`,u.insertAdjacentElement("beforeend",o);const m=o.querySelector(".btn-primary");a.setAttribute("slot","menus"),a.classList.contains("open")?(o.setAttribute("aria-expanded",!0),m.classList.toggle("active"),e.classList.add("open"),i.classList.add("show")):a.classList.add("closed"),o.addEventListener("click",function(h){h.preventDefault(),o.toggleAttribute("aria-expanded"),a.classList.toggle("open"),m.classList.toggle("active");let c=e.querySelector(":scope > details[open]");c&&c.removeAttribute("open"),a.classList.contains("open")?(n.classList.remove("open"),s.removeAttribute("aria-expanded"),setTimeout(function(){n.classList.add("closed")},1e3),e.classList.add("open"),i.classList.add("show"),a.classList.remove("closed")):(e.classList.remove("open"),i.classList.remove("show"),setTimeout(function(){a.classList.add("closed")},1e3)),e.querySelectorAll(".nav--menu.open").forEach(function(d){d!=a&&d.classList.remove("open")}),e.shadowRoot.querySelectorAll(".buttons-holder .btn-menu[aria-expanded]").forEach(function(d){d!=o&&(d.removeAttribute("aria-expanded"),d.querySelector(".btn-primary").classList.remove("active"))})},!1)}}),this.querySelectorAll("details").forEach(function(a){a.classList.add("details--revert")}),this.querySelector('a[slot="secondary"]')&&n.classList.add("has-secondary"),document.documentElement.style.setProperty("--scrollbar-width",window.innerWidth-document.documentElement.offsetWidth+"px"),s.addEventListener("click",function(a){a.preventDefault(),s.toggleAttribute("aria-expanded"),n.classList.toggle("open"),e.querySelectorAll(".nav--menu.open").forEach(function(t){t.classList.remove("open"),setTimeout(function(){t.classList.add("closed")},1e3)}),e.shadowRoot.querySelectorAll(".buttons-holder .btn-menu[aria-expanded]").forEach(function(t){t.removeAttribute("aria-expanded"),t.querySelector(".btn-primary").classList.remove("active")}),n.classList.contains("open")?(e.classList.add("open"),n.classList.remove("closed")):(e.classList.remove("open"),setTimeout(function(){n.classList.add("closed")},1e3))},!1),this.addEventListener("request-close",a=>{s.removeAttribute("aria-expanded"),n.classList.remove("open"),e.classList.remove("open")}),i.addEventListener("click",a=>{let t=this.querySelector("details[open] summary");t&&t.click(),e.querySelectorAll(".nav--menu.open").forEach(function(r){r.classList.remove("open")}),e.shadowRoot.querySelectorAll(".buttons-holder .btn-menu[aria-expanded]").forEach(function(r){r.removeAttribute("aria-expanded"),r.querySelector(".btn-primary").classList.remove("active")}),i.classList.remove("show")}),this.addEventListener("click",a=>{if(a&&a.target instanceof HTMLElement&&a.target.closest("summary")&&window.innerWidth>992&&!a.target.closest(".nav--menu")){let r=a.target.closest("summary").closest("details"),l=r.parentNode;r.hasAttribute("open")?r.removeAttribute("open"):r.setAttribute("open","true"),e.querySelectorAll(".nav--menu.open").forEach(function(o){o.classList.remove("open"),setTimeout(function(){n.classList.add("closed")},1e3)}),e.shadowRoot.querySelectorAll(".buttons-holder .btn-menu[aria-expanded]").forEach(function(o){o.removeAttribute("aria-expanded"),o.querySelector(".btn-primary").classList.remove("active")}),Array.from(l.querySelectorAll(":scope > details")).forEach((o,m)=>{o!=r&&o.removeAttribute("open")}),this.querySelectorAll(":scope > details[open]").length?(i.classList.add("show"),e.classList.add("open")):(i.classList.remove("show"),e.classList.remove("open")),a.preventDefault()}}),this.querySelectorAll("details").forEach(a=>{let t=a.querySelector("summary");a.querySelector(":Scope > div").setAttribute("data-title",t.textContent)}),this.querySelector('[slot="search"]')){n.classList.add("has-search");let a=this.shadowRoot.querySelector("#search-wrapper");a.classList.remove("d-none"),a.insertAdjacentHTML("afterbegin",`<button class="btn btn-secondary btn-compact fa-search me-0 mb-0" id="search-button" aria-controls="search-dialog">Open Search field</button>
39
39
  <dialog id="search-dialog">
40
40
  <div class="container">
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v5.5.1-beta-2
2
+ * iamKey v5.5.1-beta-5
3
3
  * Copyright 2022-2024 iamproperty
4
4
  */function r(i){if(i.hasAttribute("data-type")&&i.getAttribute("data-type")=="toast"){let t=document.querySelector(".notification__holder");t||(t=document.createElement("div"),t.classList.add("notification__holder"),t.classList.add("container"),document.querySelector("body").appendChild(t)),i.closest(".notification__holder")||t.appendChild(i)}if(i.setAttribute("role","alert"),i.addEventListener("click",function(t){event&&event.target instanceof HTMLElement&&event.target.closest("[data-dismiss-button]")&&(t.preventDefault(),a(i))},!1),i.hasAttribute("data-timeout")){let t=i.getAttribute("data-timeout");var n=new c(function(){a(i)},t);i.addEventListener("mouseenter",o=>{n.pause()}),i.addEventListener("mouseleave",o=>{n.resume()})}}function c(i,n){var t,o,e=n;this.pause=function(){window.clearTimeout(t),e-=new Date-o},this.resume=function(){o=new Date,window.clearTimeout(t),t=window.setTimeout(i,e)},this.resume()}const a=function(i){i.classList.add("d-none")};window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"Notification"});class d extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const n=document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets",t=document.body.hasAttribute("data-core-css")?document.body.getAttribute("data-core-css"):`${n}/css/core.min.css`,o=this.querySelectorAll("a,button");Array.from(o).forEach((s,l)=>{s.setAttribute("slot","btns"),s.classList.add("link")}),(o.length||this.hasAttribute("data-dismiss"))&&this.classList.add("notification--dismissable");const e=document.createElement("template");e.innerHTML=`
5
5
  <style>
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v5.5.1-beta-2
2
+ * iamKey v5.5.1-beta-5
3
3
  * Copyright 2022-2024 iamproperty
4
4
  */class v extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const i=document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets",t=document.body.hasAttribute("data-core-css")?document.body.getAttribute("data-core-css"):`${i}/css/core.min.css`,e=document.createElement("template");e.innerHTML=`
5
5
  <style>
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v5.5.1-beta-2
2
+ * iamKey v5.5.1-beta-5
3
3
  * Copyright 2022-2024 iamproperty
4
4
  */import k from"js-cookie";const q=e=>e.replace(/ /g,"_"),x=function(e){return e=e.toLowerCase(),e=q(e),e=e.replace(/\W/g,""),e},m=(e,s,a)=>s.split(/[\.\[\]\'\"]/).filter(o=>o).reduce((o,d)=>o?o[d]:a,e),S=e=>Array.isArray(e)||e!==null&&["function","object"].includes(typeof e);var L=function(e,s,a,o){function d(c){return c instanceof a?c:new a(function(n){n(c)})}return new(a||(a=Promise))(function(c,n){function v(r){try{u(o.next(r))}catch(i){n(i)}}function t(r){try{u(o.throw(r))}catch(i){n(i)}}function u(r){r.done?c(r.value):d(r.value).then(v,t)}u((o=o.apply(e,s||[])).next())})};window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"Search"});class C extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const s=document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets",a=document.body.hasAttribute("data-core-css")?document.body.getAttribute("data-core-css"):`${s}/css/core.min.css`,o=document.createElement("template");o.innerHTML=`
5
5
  <style>
@@ -1 +1 @@
1
- {"version":3,"file":"search.component.min.js","sources":["../../modules/helpers.js","search.component.js"],"sourcesContent":["// @ts-nocheck\n/**\n * Global helper functions to help maintain and enhance framework elements.\n * @module Helpers\n */\n/**\n * Add global classes used by the CSS and later JavaScript.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addBodyClasses = (body) => {\n body.classList.add(\"js-enabled\");\n if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {\n body.classList.add(\"ie\");\n }\n return null;\n};\n/**\n * Add global events.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addGlobalEvents = (body) => {\n const checkElements = function (hash) {\n const label = document.querySelector(`label[for=\"${hash.replace('#', '')}\"]`);\n const summary = document.querySelector(hash + ' summary');\n const dialog = document.querySelector(`dialog${hash}`);\n const detail = document.querySelector(`detail${hash}`);\n if (label instanceof HTMLElement)\n label.click();\n else if (summary instanceof HTMLElement)\n summary.click();\n else if (dialog instanceof HTMLElement)\n dialog.showModal();\n else if (detail instanceof HTMLElement)\n detail.addAttribute('open');\n };\n if (location.hash)\n checkElements(location.hash);\n window.addEventListener('hashchange', function () { checkElements(location.hash); }, false);\n addEventListener(\"popstate\", (event) => {\n if (event && event.state && event.state.type && event.state.type == \"pagination\") {\n let form = document.querySelector(`#${event.state.form}`);\n let pageInput = document.querySelector(`#${event.state.form} [data-pagination]`);\n if (pageInput)\n pageInput.value = event.state.page;\n else\n form.innerHTML += `<input name=\"page\" type=\"hidden\" data-pagination=\"true\" value=\"${event.state.page}\" />`;\n form.dispatchEvent(new Event(\"submit\"));\n }\n });\n document.addEventListener(\"submit\", (event) => {\n if (event && event.target instanceof HTMLElement && event.target.matches('form')) {\n let form = event.target;\n // Reset password types\n Array.from(form.querySelectorAll('[data-password-type]')).forEach((input, index) => {\n input.setAttribute('type', 'password');\n });\n if (form.querySelector(':invalid') || form.querySelector('.pwd-checker[data-strength=\"1\"]') || form.querySelector('.pwd-checker[data-strength=\"2\"]')) {\n form.classList.add('was-validated');\n event.preventDefault();\n }\n }\n });\n document.addEventListener(\"keydown\", (e) => {\n if (e.key === \"Escape\") {\n if (document.querySelector('.dialog--transactional[open], .dialog--acknowledgement[open]')) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n });\n return null;\n};\nexport const isNumeric = function (str) {\n if (typeof str != \"string\")\n return false; // we only process strings! \n return !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...\n !isNaN(parseFloat(str)); // ...and ensure strings of whitespace fail\n};\nexport const zeroPad = (num, places) => String(num).padStart(places, '0');\nexport const ucfirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nexport const ucwords = (str) => str.split(' ').map(s => ucfirst(s)).join(' ');\nexport const unsnake = (str) => str.replace(/_/g, ' ');\nexport const snake = (str) => str.replace(/ /g, '_');\nexport const safeID = function (str) {\n str = str.toLowerCase();\n str = snake(str);\n str = str.replace(/\\W/g, '');\n return str;\n};\nexport const numberOfDays = function (startDateString, endDateString) {\n let convertStart = startDateString.split('/');\n let convertEnd = endDateString.split('/');\n let dateStart = new Date(convertStart[1] + '/' + convertStart[0] + '/' + convertStart[2]);\n let dateEnd = new Date(convertEnd[1] + '/' + convertEnd[0] + '/' + convertEnd[2]);\n if (dateStart == \"Invalid Date\")\n throw \"Start date is not a valid date\";\n if (dateEnd == \"Invalid Date\")\n throw \"End date is not a valid date\";\n // To calculate the time difference of two dates\n let diffTime = dateEnd.getTime() - dateStart.getTime();\n let numberOfDays = (diffTime / (1000 * 3600 * 24) + 1);\n if (numberOfDays < 0)\n throw \"The start date should be before the end date\";\n return numberOfDays;\n};\n// Used to get values from nested json objects\nexport const resolvePath = (object, path, defaultValue) => path.split(/[\\.\\[\\]\\'\\\"]/).filter(p => p).reduce((o, p) => o ? o[p] : defaultValue, object);\nexport const isTraversable = o => Array.isArray(o) || o !== null && ['function', 'object'].includes(typeof o);\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n// @ts-nocheck\nimport Cookies from 'js-cookie';\nimport { safeID, resolvePath, isTraversable } from '../../modules/helpers.js';\n// Data layer Web component created\nwindow.dataLayer = window.dataLayer || [];\nwindow.dataLayer.push({\n \"event\": \"customElementRegistered\",\n \"element\": \"Search\"\n});\nclass iamSearch extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';\n const coreCSS = document.body.hasAttribute('data-core-css') ? document.body.getAttribute('data-core-css') : `${assetLocation}/css/core.min.css`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n @import \"${coreCSS}\";\n input {\n background: red;\n }\n input:not(.is-invalid):not(:invalid) {\n background: none!important;\n }\n .optional-text {\n display: none;\n }\n </style>\n <link rel=\"stylesheet\" href=\"https://kit.fontawesome.com/26fdbf0179.css\" crossorigin=\"anonymous\" />\n <slot></slot>\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n return __awaiter(this, void 0, void 0, function* () {\n const searchWrapper = this;\n const inputField = this.querySelector('input');\n const valueSchema = this.hasAttribute('data-value-schema') ? this.getAttribute('data-value-schema') : 'value';\n const displaySchema = this.hasAttribute('data-display-schema') ? this.getAttribute('data-display-schema') : 'label';\n const loopSchema = this.hasAttribute('data-schema') ? this.getAttribute('data-schema') : '';\n let datalist = this.querySelector('datalist');\n let searched = [];\n // Clone original input field, re-name and use for display purposes\n const displayInputField = inputField.cloneNode();\n displayInputField.setAttribute('name', `${inputField.getAttribute('name')}Alt`);\n inputField.removeAttribute('data-change-events');\n displayInputField.removeAttribute('id');\n inputField.after(displayInputField);\n // Hide original input field\n inputField.setAttribute('type', 'hidden');\n // if data list does not exist then create one and append\n if (!datalist) {\n datalist = document.createElement(\"datalist\");\n let listID = safeID('list');\n datalist.setAttribute('id', listID);\n searchWrapper.appendChild(datalist);\n displayInputField.setAttribute('list', listID);\n }\n // Search the endpoint when 3 characters has been added\n if (searchWrapper.hasAttribute('data-url')) {\n displayInputField.addEventListener('input', (event) => {\n if (displayInputField.value.length == 3 && !searched.includes(displayInputField.value)) {\n search(displayInputField.value);\n searched.push(displayInputField.value);\n }\n });\n }\n function checkMatch() {\n let match = datalist.querySelector(`option[value=\"${displayInputField.value}\"]`);\n let subMatch = datalist.querySelector(`option[value*=\"${displayInputField.value}\" i]`);\n if (match) {\n inputField.value = match.getAttribute('data-value');\n }\n else if (displayInputField.value.length > 0 && !subMatch) {\n displayInputField.classList.add('is-invalid');\n displayInputField.closest('label').setAttribute('data-error', 'No results returned');\n }\n else {\n displayInputField.classList.remove('is-invalid');\n displayInputField.closest('label').removeAttribute('data-error');\n }\n }\n // on change update oringinal field with the actual value and use displayed input for the nice display text\n displayInputField.addEventListener('input', (event) => {\n checkMatch();\n });\n const search = (searchterm) => __awaiter(this, void 0, void 0, function* () {\n let ajaxURL = searchWrapper.getAttribute('data-url');\n ajaxURL += `${encodeURI(searchterm)}`;\n // Setup controller vars if not already set\n if (!window.controller)\n window.controller = [];\n // Abort if controller already present for this url\n if (window.controller[ajaxURL])\n window.controller[ajaxURL].abort();\n // Create a new controller so it can be aborted if new fetch made\n window.controller[ajaxURL] = new AbortController();\n const { signal } = controller[ajaxURL];\n try {\n yield fetch(ajaxURL, {\n signal: signal,\n method: 'get',\n credentials: 'same-origin',\n headers: new Headers({\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-XSRF-TOKEN': Cookies.get('XSRF-TOKEN')\n })\n })\n .then((response) => response.json()).then((response) => {\n // populate datalist\n let listString = '';\n let loopValues = resolvePath(response, loopSchema, '');\n if (isTraversable(loopValues) && typeof loopValues.forEach == 'function') {\n loopValues.forEach((item, index) => {\n let actualValue = resolvePath(item, valueSchema, '');\n let displayValue = resolvePath(item, displaySchema, '').replace('\\n', ', ');\n console.log(displayValue);\n if (!datalist.querySelector(`option[data-value=\"${actualValue}\"]`))\n listString += `<option value=\"${displayValue}\" data-value=\"${actualValue}\"></option>`;\n });\n }\n else if (typeof loopValues == 'object') {\n for (const [key, value] of Object.entries(loopValues)) {\n if (isTraversable(value) && typeof value.forEach == 'function') {\n value.forEach((item, index) => {\n let actualValue = resolvePath(item, valueSchema, '');\n let displayValue = resolvePath(item, displaySchema, '').replace('\\n', ', ');\n if (!datalist.querySelector(`option[data-value=\"${actualValue}\"]`))\n listString += `<option value=\"${key}: ${displayValue}\" data-value='${actualValue}'></option>`;\n });\n }\n }\n }\n datalist.innerHTML += listString;\n displayInputField.closest('form').classList.add('was-validated');\n checkMatch();\n return response;\n });\n }\n catch (error) {\n console.log(error);\n }\n });\n if (searchWrapper.hasAttribute('data-prevent-submit')) {\n const form = searchWrapper.closest('form');\n form.addEventListener('submit', (e) => {\n e.preventDefault();\n });\n }\n });\n }\n}\nexport default iamSearch;\n"],"names":["snake","str","safeID","resolvePath","object","path","defaultValue","p","isTraversable","o","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","e","rejected","result","iamSearch","assetLocation","coreCSS","template","searchWrapper","inputField","valueSchema","displaySchema","loopSchema","datalist","searched","displayInputField","listID","event","search","checkMatch","match","subMatch","searchterm","ajaxURL","signal","Cookies","response","listString","loopValues","item","index","actualValue","displayValue","key","error"],"mappings":"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"}
1
+ {"version":3,"file":"search.component.min.js","sources":["../../modules/helpers.js","search.component.js"],"sourcesContent":["// @ts-nocheck\n/**\n * Global helper functions to help maintain and enhance framework elements.\n * @module Helpers\n */\n/**\n * Add global classes used by the CSS and later JavaScript.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addBodyClasses = (body) => {\n body.classList.add(\"js-enabled\");\n if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {\n body.classList.add(\"ie\");\n }\n return null;\n};\n/**\n * Add global events.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addGlobalEvents = (body) => {\n const checkElements = function (hash) {\n const label = document.querySelector(`label[for=\"${hash.replace('#', '')}\"]`);\n const summary = document.querySelector(hash + ' summary');\n const dialog = document.querySelector(`dialog${hash}`);\n const detail = document.querySelector(`detail${hash}`);\n if (label instanceof HTMLElement)\n label.click();\n else if (summary instanceof HTMLElement)\n summary.click();\n else if (dialog instanceof HTMLElement)\n dialog.showModal();\n else if (detail instanceof HTMLElement)\n detail.addAttribute('open');\n };\n if (location.hash)\n checkElements(location.hash);\n window.addEventListener('hashchange', function () { checkElements(location.hash); }, false);\n addEventListener(\"popstate\", (event) => {\n if (event && event.state && event.state.type && event.state.type == \"pagination\") {\n let form = document.querySelector(`#${event.state.form}`);\n let pageInput = document.querySelector(`#${event.state.form} [data-pagination]`);\n if (pageInput)\n pageInput.value = event.state.page;\n else\n form.innerHTML += `<input name=\"page\" type=\"hidden\" data-pagination=\"true\" value=\"${event.state.page}\" />`;\n form.dispatchEvent(new Event(\"submit\"));\n }\n });\n document.addEventListener(\"submit\", (event) => {\n if (event && event.target instanceof HTMLElement && event.target.matches('form')) {\n let form = event.target;\n // Reset password types\n Array.from(form.querySelectorAll('[data-password-type]')).forEach((input, index) => {\n input.setAttribute('type', 'password');\n });\n if (form.querySelector(':invalid') || form.querySelector('.pwd-checker[data-strength=\"1\"]') || form.querySelector('.pwd-checker[data-strength=\"2\"]')) {\n form.classList.add('was-validated');\n event.preventDefault();\n }\n if (form.querySelector('iam-multiselect[data-is-required][data-error]')) {\n form.classList.add('was-validated');\n event.preventDefault();\n }\n }\n });\n document.addEventListener(\"keydown\", (e) => {\n if (e.key === \"Escape\") {\n if (document.querySelector('.dialog--transactional[open], .dialog--acknowledgement[open]')) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n });\n return null;\n};\nexport const isNumeric = function (str) {\n if (typeof str != \"string\")\n return false; // we only process strings! \n return !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...\n !isNaN(parseFloat(str)); // ...and ensure strings of whitespace fail\n};\nexport const zeroPad = (num, places) => String(num).padStart(places, '0');\nexport const ucfirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nexport const ucwords = (str) => str.split(' ').map(s => ucfirst(s)).join(' ');\nexport const unsnake = (str) => str.replace(/_/g, ' ');\nexport const snake = (str) => str.replace(/ /g, '_');\nexport const safeID = function (str) {\n str = str.toLowerCase();\n str = snake(str);\n str = str.replace(/\\W/g, '');\n return str;\n};\nexport const numberOfDays = function (startDateString, endDateString) {\n let convertStart = startDateString.split('/');\n let convertEnd = endDateString.split('/');\n let dateStart = new Date(convertStart[1] + '/' + convertStart[0] + '/' + convertStart[2]);\n let dateEnd = new Date(convertEnd[1] + '/' + convertEnd[0] + '/' + convertEnd[2]);\n if (dateStart == \"Invalid Date\")\n throw \"Start date is not a valid date\";\n if (dateEnd == \"Invalid Date\")\n throw \"End date is not a valid date\";\n // To calculate the time difference of two dates\n let diffTime = dateEnd.getTime() - dateStart.getTime();\n let numberOfDays = (diffTime / (1000 * 3600 * 24) + 1);\n if (numberOfDays < 0)\n throw \"The start date should be before the end date\";\n return numberOfDays;\n};\n// Used to get values from nested json objects\nexport const resolvePath = (object, path, defaultValue) => path.split(/[\\.\\[\\]\\'\\\"]/).filter(p => p).reduce((o, p) => o ? o[p] : defaultValue, object);\nexport const isTraversable = o => Array.isArray(o) || o !== null && ['function', 'object'].includes(typeof o);\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n// @ts-nocheck\nimport Cookies from 'js-cookie';\nimport { safeID, resolvePath, isTraversable } from '../../modules/helpers.js';\n// Data layer Web component created\nwindow.dataLayer = window.dataLayer || [];\nwindow.dataLayer.push({\n \"event\": \"customElementRegistered\",\n \"element\": \"Search\"\n});\nclass iamSearch extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';\n const coreCSS = document.body.hasAttribute('data-core-css') ? document.body.getAttribute('data-core-css') : `${assetLocation}/css/core.min.css`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n @import \"${coreCSS}\";\n input {\n background: red;\n }\n input:not(.is-invalid):not(:invalid) {\n background: none!important;\n }\n .optional-text {\n display: none;\n }\n </style>\n <link rel=\"stylesheet\" href=\"https://kit.fontawesome.com/26fdbf0179.css\" crossorigin=\"anonymous\" />\n <slot></slot>\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n return __awaiter(this, void 0, void 0, function* () {\n const searchWrapper = this;\n const inputField = this.querySelector('input');\n const valueSchema = this.hasAttribute('data-value-schema') ? this.getAttribute('data-value-schema') : 'value';\n const displaySchema = this.hasAttribute('data-display-schema') ? this.getAttribute('data-display-schema') : 'label';\n const loopSchema = this.hasAttribute('data-schema') ? this.getAttribute('data-schema') : '';\n let datalist = this.querySelector('datalist');\n let searched = [];\n // Clone original input field, re-name and use for display purposes\n const displayInputField = inputField.cloneNode();\n displayInputField.setAttribute('name', `${inputField.getAttribute('name')}Alt`);\n inputField.removeAttribute('data-change-events');\n displayInputField.removeAttribute('id');\n inputField.after(displayInputField);\n // Hide original input field\n inputField.setAttribute('type', 'hidden');\n // if data list does not exist then create one and append\n if (!datalist) {\n datalist = document.createElement(\"datalist\");\n let listID = safeID('list');\n datalist.setAttribute('id', listID);\n searchWrapper.appendChild(datalist);\n displayInputField.setAttribute('list', listID);\n }\n // Search the endpoint when 3 characters has been added\n if (searchWrapper.hasAttribute('data-url')) {\n displayInputField.addEventListener('input', (event) => {\n if (displayInputField.value.length == 3 && !searched.includes(displayInputField.value)) {\n search(displayInputField.value);\n searched.push(displayInputField.value);\n }\n });\n }\n function checkMatch() {\n let match = datalist.querySelector(`option[value=\"${displayInputField.value}\"]`);\n let subMatch = datalist.querySelector(`option[value*=\"${displayInputField.value}\" i]`);\n if (match) {\n inputField.value = match.getAttribute('data-value');\n }\n else if (displayInputField.value.length > 0 && !subMatch) {\n displayInputField.classList.add('is-invalid');\n displayInputField.closest('label').setAttribute('data-error', 'No results returned');\n }\n else {\n displayInputField.classList.remove('is-invalid');\n displayInputField.closest('label').removeAttribute('data-error');\n }\n }\n // on change update oringinal field with the actual value and use displayed input for the nice display text\n displayInputField.addEventListener('input', (event) => {\n checkMatch();\n });\n const search = (searchterm) => __awaiter(this, void 0, void 0, function* () {\n let ajaxURL = searchWrapper.getAttribute('data-url');\n ajaxURL += `${encodeURI(searchterm)}`;\n // Setup controller vars if not already set\n if (!window.controller)\n window.controller = [];\n // Abort if controller already present for this url\n if (window.controller[ajaxURL])\n window.controller[ajaxURL].abort();\n // Create a new controller so it can be aborted if new fetch made\n window.controller[ajaxURL] = new AbortController();\n const { signal } = controller[ajaxURL];\n try {\n yield fetch(ajaxURL, {\n signal: signal,\n method: 'get',\n credentials: 'same-origin',\n headers: new Headers({\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-XSRF-TOKEN': Cookies.get('XSRF-TOKEN')\n })\n })\n .then((response) => response.json()).then((response) => {\n // populate datalist\n let listString = '';\n let loopValues = resolvePath(response, loopSchema, '');\n if (isTraversable(loopValues) && typeof loopValues.forEach == 'function') {\n loopValues.forEach((item, index) => {\n let actualValue = resolvePath(item, valueSchema, '');\n let displayValue = resolvePath(item, displaySchema, '').replace('\\n', ', ');\n console.log(displayValue);\n if (!datalist.querySelector(`option[data-value=\"${actualValue}\"]`))\n listString += `<option value=\"${displayValue}\" data-value=\"${actualValue}\"></option>`;\n });\n }\n else if (typeof loopValues == 'object') {\n for (const [key, value] of Object.entries(loopValues)) {\n if (isTraversable(value) && typeof value.forEach == 'function') {\n value.forEach((item, index) => {\n let actualValue = resolvePath(item, valueSchema, '');\n let displayValue = resolvePath(item, displaySchema, '').replace('\\n', ', ');\n if (!datalist.querySelector(`option[data-value=\"${actualValue}\"]`))\n listString += `<option value=\"${key}: ${displayValue}\" data-value='${actualValue}'></option>`;\n });\n }\n }\n }\n datalist.innerHTML += listString;\n displayInputField.closest('form').classList.add('was-validated');\n checkMatch();\n return response;\n });\n }\n catch (error) {\n console.log(error);\n }\n });\n if (searchWrapper.hasAttribute('data-prevent-submit')) {\n const form = searchWrapper.closest('form');\n form.addEventListener('submit', (e) => {\n e.preventDefault();\n });\n }\n });\n }\n}\nexport default iamSearch;\n"],"names":["snake","str","safeID","resolvePath","object","path","defaultValue","p","isTraversable","o","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","e","rejected","result","iamSearch","assetLocation","coreCSS","template","searchWrapper","inputField","valueSchema","displaySchema","loopSchema","datalist","searched","displayInputField","listID","event","search","checkMatch","match","subMatch","searchterm","ajaxURL","signal","Cookies","response","listString","loopValues","item","index","actualValue","displayValue","key","error"],"mappings":"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"}