@iamproperty/components 7.3.0 → 7.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/assets/css/components/actionbar.component.css +1 -1
  2. package/assets/css/components/actionbar.component.css.map +1 -1
  3. package/assets/css/components/actionbar.global.css +1 -1
  4. package/assets/css/components/actionbar.global.css.map +1 -1
  5. package/assets/css/components/barchart.component.css +1 -1
  6. package/assets/css/components/barchart.component.css.map +1 -1
  7. package/assets/css/components/calendar.component.css +1 -0
  8. package/assets/css/components/calendar.component.css.map +1 -0
  9. package/assets/css/components/calendar.config.css +1 -0
  10. package/assets/css/components/calendar.config.css.map +1 -0
  11. package/assets/css/components/card.component.css +1 -1
  12. package/assets/css/components/card.component.css.map +1 -1
  13. package/assets/css/components/carousel.component.css +1 -1
  14. package/assets/css/components/carousel.component.css.map +1 -1
  15. package/assets/css/components/collapsible-side.css +1 -1
  16. package/assets/css/components/collapsible-side.css.map +1 -1
  17. package/assets/css/components/content.component.css +1 -0
  18. package/assets/css/components/content.component.css.map +1 -0
  19. package/assets/css/components/doughnutchart.component.css +1 -1
  20. package/assets/css/components/doughnutchart.component.css.map +1 -1
  21. package/assets/css/components/fileupload.css.map +1 -1
  22. package/assets/css/components/inline-edit.css +1 -1
  23. package/assets/css/components/inline-edit.css.map +1 -1
  24. package/assets/css/components/marketing.component.css +1 -0
  25. package/assets/css/components/marketing.component.css.map +1 -0
  26. package/assets/css/components/menu.component.css.map +1 -1
  27. package/assets/css/components/milestone.css +1 -0
  28. package/assets/css/components/milestone.css.map +1 -0
  29. package/assets/css/components/multiselect.css +1 -1
  30. package/assets/css/components/multiselect.css.map +1 -1
  31. package/assets/css/components/nav.component.css +1 -1
  32. package/assets/css/components/nav.component.css.map +1 -1
  33. package/assets/css/components/nav.global.css +1 -1
  34. package/assets/css/components/nav.global.css.map +1 -1
  35. package/assets/css/components/pagination.css.map +1 -1
  36. package/assets/css/components/rank.component.css +1 -1
  37. package/assets/css/components/rank.component.css.map +1 -1
  38. package/assets/css/components/rankings.component.css +1 -1
  39. package/assets/css/components/rankings.component.css.map +1 -1
  40. package/assets/css/components/rankings.global.css +1 -1
  41. package/assets/css/components/rankings.global.css.map +1 -1
  42. package/assets/css/components/slider.css.map +1 -1
  43. package/assets/css/components/split-button.component.css +1 -0
  44. package/assets/css/components/split-button.component.css.map +1 -0
  45. package/assets/css/core.min.css +1 -1
  46. package/assets/css/core.min.css.map +1 -1
  47. package/assets/css/mobile-core.min.css +1 -1
  48. package/assets/css/mobile-core.min.css.map +1 -1
  49. package/assets/css/mobile.min.css +1 -1
  50. package/assets/css/mobile.min.css.map +1 -1
  51. package/assets/css/style.min.css +1 -1
  52. package/assets/css/style.min.css.map +1 -1
  53. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  54. package/assets/js/components/actionbar/actionbar.component.js +51 -31
  55. package/assets/js/components/actionbar/actionbar.component.min.js +17 -17
  56. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  57. package/assets/js/components/address-lookup/address-lookup.component.min.js +1 -1
  58. package/assets/js/components/advanced-select/advanced-select.component.js +63 -0
  59. package/assets/js/components/advanced-select/advanced-select.component.min.js +23 -0
  60. package/assets/js/components/advanced-select/advanced-select.component.min.js.map +1 -0
  61. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  62. package/assets/js/components/barchart/barchart.component.min.js +2 -2
  63. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  64. package/assets/js/components/calendar/calendar.component.js +1083 -0
  65. package/assets/js/components/calendar/calendar.component.min.js +170 -0
  66. package/assets/js/components/calendar/calendar.component.min.js.map +1 -0
  67. package/assets/js/components/card/card.component.js +20 -8
  68. package/assets/js/components/card/card.component.min.js +10 -10
  69. package/assets/js/components/card/card.component.min.js.map +1 -1
  70. package/assets/js/components/carousel/carousel.component.min.js +2 -2
  71. package/assets/js/components/collapsible-side/collapsible-side.component.js +47 -12
  72. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +6 -5
  73. package/assets/js/components/collapsible-side/collapsible-side.component.min.js.map +1 -1
  74. package/assets/js/components/content/content.component.js +66 -0
  75. package/assets/js/components/content/content.component.min.js +15 -0
  76. package/assets/js/components/content/content.component.min.js.map +1 -0
  77. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +2 -2
  78. package/assets/js/components/fileupload/fileupload.component.min.js +1 -1
  79. package/assets/js/components/filter-card/filter-card.component.min.js +1 -1
  80. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  81. package/assets/js/components/header/header.component.min.js +1 -1
  82. package/assets/js/components/inline-edit/inline-edit.component.min.js +5 -5
  83. package/assets/js/components/marketing/marketing.component.js +1 -1
  84. package/assets/js/components/marketing/marketing.component.min.js +2 -2
  85. package/assets/js/components/marketing/marketing.component.min.js.map +1 -1
  86. package/assets/js/components/menu/menu.component.js +10 -2
  87. package/assets/js/components/menu/menu.component.min.js +2 -2
  88. package/assets/js/components/menu/menu.component.min.js.map +1 -1
  89. package/assets/js/components/milestone/milestone.component.js +38 -0
  90. package/assets/js/components/milestone/milestone.component.min.js +15 -0
  91. package/assets/js/components/milestone/milestone.component.min.js.map +1 -0
  92. package/assets/js/components/milestone-group/milestone-group.component.js +35 -0
  93. package/assets/js/components/milestone-group/milestone-group.component.min.js +13 -0
  94. package/assets/js/components/milestone-group/milestone-group.component.min.js.map +1 -0
  95. package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
  96. package/assets/js/components/multiselect/multiselect.component.js +54 -2
  97. package/assets/js/components/multiselect/multiselect.component.min.js +5 -5
  98. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  99. package/assets/js/components/nav/nav.component.js +19 -0
  100. package/assets/js/components/nav/nav.component.min.js +6 -6
  101. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  102. package/assets/js/components/notification/notification.component.js +17 -11
  103. package/assets/js/components/notification/notification.component.min.js +4 -4
  104. package/assets/js/components/notification/notification.component.min.js.map +1 -1
  105. package/assets/js/components/pagination/pagination.component.min.js +1 -1
  106. package/assets/js/components/rank/rank.component.js +346 -210
  107. package/assets/js/components/rank/rank.component.min.js +346 -211
  108. package/assets/js/components/rank/rank.component.min.js.map +1 -1
  109. package/assets/js/components/rankings/rankings.component.js +17 -8
  110. package/assets/js/components/rankings/rankings.component.min.js +14 -8
  111. package/assets/js/components/rankings/rankings.component.min.js.map +1 -1
  112. package/assets/js/components/record-card/record-card.component.min.js +1 -1
  113. package/assets/js/components/search/search.component.js +5 -3
  114. package/assets/js/components/search/search.component.min.js +6 -6
  115. package/assets/js/components/search/search.component.min.js.map +1 -1
  116. package/assets/js/components/slider/slider.component.min.js +1 -1
  117. package/assets/js/components/split-button/split-button.component.js +60 -0
  118. package/assets/js/components/split-button/split-button.component.min.js +34 -0
  119. package/assets/js/components/split-button/split-button.component.min.js.map +1 -0
  120. package/assets/js/components/table/table.component.js +12 -0
  121. package/assets/js/components/table/table.component.min.js +3 -3
  122. package/assets/js/components/table/table.component.min.js.map +1 -1
  123. package/assets/js/components/table-ajax/table-ajax.component.js +12 -0
  124. package/assets/js/components/table-ajax/table-ajax.component.min.js +3 -3
  125. package/assets/js/components/table-ajax/table-ajax.component.min.js.map +1 -1
  126. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  127. package/assets/js/components/table-basic/table-basic.component.min.js.map +1 -1
  128. package/assets/js/components/table-no-submit/table-no-submit.component.js +12 -0
  129. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +3 -3
  130. package/assets/js/components/table-no-submit/table-no-submit.component.min.js.map +1 -1
  131. package/assets/js/components/table-submit/table-submit.component.js +12 -0
  132. package/assets/js/components/table-submit/table-submit.component.min.js +3 -3
  133. package/assets/js/components/table-submit/table-submit.component.min.js.map +1 -1
  134. package/assets/js/components/tabs/tabs.component.min.js +1 -1
  135. package/assets/js/components/video-card/video-card.component.min.js +1 -1
  136. package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
  137. package/assets/js/components.js +58 -0
  138. package/assets/js/modules/advanced-select.js +106 -0
  139. package/assets/js/modules/dialogs.js +53 -51
  140. package/assets/js/modules/dynamicEvents.js +7 -0
  141. package/assets/js/modules/milestone-group.js +30 -0
  142. package/assets/js/modules/milestone.js +89 -0
  143. package/assets/js/modules/table.js +11 -1
  144. package/assets/js/modules/videos.js +1 -1
  145. package/assets/js/scripts.bundle.js +3 -3
  146. package/assets/js/scripts.bundle.js.map +1 -1
  147. package/assets/js/scripts.bundle.min.js +2 -2
  148. package/assets/js/scripts.bundle.min.js.map +1 -1
  149. package/assets/js/scripts.js +4 -0
  150. package/assets/sass/_components.scss +11 -0
  151. package/assets/sass/_functions/utility-mixins.scss +41 -0
  152. package/assets/sass/_functions/variables.scss +11 -5
  153. package/assets/sass/components/actionbar.component.scss +1 -1
  154. package/assets/sass/components/actionbar.global.scss +4 -4
  155. package/assets/sass/components/calendar.component.scss +1380 -0
  156. package/assets/sass/components/calendar.config.scss +476 -0
  157. package/assets/sass/components/card.component.scss +4 -34
  158. package/assets/sass/components/carousel.component.scss +5 -0
  159. package/assets/sass/components/collapsible-side.scss +91 -95
  160. package/assets/sass/components/content.component.scss +18 -0
  161. package/assets/sass/components/inline-edit.scss +2 -0
  162. package/assets/sass/components/{marketing.scss → marketing.component.scss} +2 -6
  163. package/assets/sass/components/menu.component.scss +3 -8
  164. package/assets/sass/components/milestone.scss +207 -0
  165. package/assets/sass/components/multiselect.scss +3 -0
  166. package/assets/sass/components/nav.component.scss +1 -0
  167. package/assets/sass/components/nav.global.scss +30 -0
  168. package/assets/sass/components/rank.component.scss +197 -24
  169. package/assets/sass/components/rankings.component.scss +38 -28
  170. package/assets/sass/components/rankings.global.scss +64 -2
  171. package/assets/sass/components/split-button.component.scss +77 -0
  172. package/assets/sass/elements/badge-tag.scss +5 -1
  173. package/assets/sass/elements/buttons--compact.scss +4 -0
  174. package/assets/sass/elements/details.scss +0 -1
  175. package/assets/sass/elements/forms.scss +130 -8
  176. package/assets/sass/elements/links.scss +132 -4
  177. package/assets/sass/elements/lists.scss +61 -0
  178. package/assets/sass/elements/popover.scss +64 -10
  179. package/assets/sass/elements/toggle-button.scss +7 -8
  180. package/assets/sass/elements/type.scss +7 -10
  181. package/assets/sass/templates/form.scss +0 -2
  182. package/assets/ts/components/actionbar/actionbar.component.ts +49 -23
  183. package/assets/ts/components/advanced-select/advanced-select.component.ts +74 -0
  184. package/assets/ts/components/calendar/calendar.component.ts +1460 -0
  185. package/assets/ts/components/card/card.component.ts +22 -14
  186. package/assets/ts/components/collapsible-side/collapsible-side.component.ts +53 -12
  187. package/assets/ts/components/content/content.component.ts +78 -0
  188. package/assets/ts/components/marketing/marketing.component.ts +1 -1
  189. package/assets/ts/components/menu/menu.component.ts +16 -8
  190. package/assets/ts/components/milestone/milestone.component.ts +45 -0
  191. package/assets/ts/components/milestone-group/milestone-group.component.ts +41 -0
  192. package/assets/ts/components/multiselect/multiselect.component.ts +69 -3
  193. package/assets/ts/components/nav/nav.component.ts +25 -0
  194. package/assets/ts/components/notification/notification.component.ts +34 -11
  195. package/assets/ts/components/rank/rank.component.ts +345 -209
  196. package/assets/ts/components/rankings/rankings.component.ts +27 -8
  197. package/assets/ts/components/search/search.component.ts +6 -4
  198. package/assets/ts/components/split-button/split-button.component.ts +69 -0
  199. package/assets/ts/components/table/table.component.ts +14 -0
  200. package/assets/ts/components/table-ajax/table-ajax.component.ts +14 -0
  201. package/assets/ts/components/table-no-submit/table-no-submit.component.ts +14 -0
  202. package/assets/ts/components/table-submit/table-submit.component.ts +14 -0
  203. package/assets/ts/components/video-card/video-card.component.ts +2 -3
  204. package/assets/ts/components.ts +63 -0
  205. package/assets/ts/modules/advanced-select.ts +125 -0
  206. package/assets/ts/modules/dialogs.ts +64 -61
  207. package/assets/ts/modules/dynamicEvents.ts +12 -1
  208. package/assets/ts/modules/milestone-group.ts +42 -0
  209. package/assets/ts/modules/milestone.ts +122 -0
  210. package/assets/ts/modules/table.ts +15 -1
  211. package/assets/ts/modules/videos.ts +19 -37
  212. package/assets/ts/scripts.ts +5 -3
  213. package/dist/components.es.js +41 -1923
  214. package/dist/components.umd.js +126 -105
  215. package/package.json +1 -1
  216. package/src/components/AdvancedSelect/AdvancedSelect.vue +23 -0
  217. package/src/components/Calendar/Calendar.vue +26 -0
  218. package/src/components/Card/Card.vue +1 -1
  219. package/src/components/CollapsibleSideMenu/CollapsibleSideMenu.vue +7 -13
  220. package/src/components/Content/Content.vue +23 -0
  221. package/src/components/Milestones/Milestone.vue +27 -0
  222. package/src/components/Milestones/MilestoneGroup.vue +27 -0
  223. package/src/components/SplitButton/README.md +19 -0
  224. package/src/components/SplitButton/SplitButton.vue +26 -0
  225. package/src/index.js +44 -41
  226. package/assets/css/components/marketing.css +0 -1
  227. package/assets/css/components/marketing.css.map +0 -1
  228. package/assets/css/components/nav.old.css +0 -1
  229. package/assets/css/components/nav.old.css.map +0 -1
  230. package/assets/sass/components/nav.old.scss +0 -891
@@ -9,6 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  };
10
10
  import Cookies from 'js-cookie';
11
11
  import { safeID, resolvePath, isTraversable } from '../../modules/helpers.js';
12
+ import advancedSelect from '../../modules/advanced-select.js';
12
13
  // Data layer Web component created
13
14
  window.dataLayer = window.dataLayer || [];
14
15
  window.dataLayer.push({
@@ -74,6 +75,7 @@ class iamSearch extends HTMLElement {
74
75
  searchWrapper.appendChild(datalist);
75
76
  displayInputField.setAttribute('list', listID);
76
77
  }
78
+ advancedSelect(this, displayInputField, datalist, true);
77
79
  // Search the endpoint when 3 characters has been added
78
80
  if (searchWrapper.hasAttribute('data-url')) {
79
81
  displayInputField.addEventListener('input', () => {
@@ -88,6 +90,7 @@ class iamSearch extends HTMLElement {
88
90
  const subMatch = datalist.querySelector(`option[value*="${displayInputField.value}" i]`);
89
91
  if (match) {
90
92
  inputField.value = match.getAttribute('data-value');
93
+ displayInputField.value = match.getAttribute('data-value');
91
94
  }
92
95
  else if (displayInputField.value.length > 0 && !subMatch) {
93
96
  displayInputField.classList.add('is-invalid');
@@ -134,9 +137,8 @@ class iamSearch extends HTMLElement {
134
137
  loopValues.forEach((item) => {
135
138
  const actualValue = resolvePath(item, valueSchema, '');
136
139
  const displayValue = resolvePath(item, displaySchema, '').replace('\n', ', ');
137
- console.log(displayValue);
138
140
  if (!datalist.querySelector(`option[data-value="${actualValue}"]`))
139
- listString += `<option value="${displayValue}" data-value="${actualValue}"></option>`;
141
+ listString += `<option value="${displayValue}" data-value="${actualValue}">${displayValue}</option>`;
140
142
  });
141
143
  }
142
144
  else if (typeof loopValues == 'object') {
@@ -146,7 +148,7 @@ class iamSearch extends HTMLElement {
146
148
  const actualValue = resolvePath(item, valueSchema, '');
147
149
  const displayValue = resolvePath(item, displaySchema, '').replace('\n', ', ');
148
150
  if (!datalist.querySelector(`option[data-value="${actualValue}"]`))
149
- listString += `<option value="${key}: ${displayValue}" data-value='${actualValue}'></option>`;
151
+ listString += `<option value="${key}: ${displayValue}" data-value='${actualValue}'>${key}: ${displayValue}</option>`;
150
152
  });
151
153
  }
152
154
  }
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * iamKey v7.3.0
2
+ * iamKey v7.4.0
3
3
  * Copyright 2022-2025 iamproperty
4
- */import $ from"js-cookie";const k=e=>e.replace(/ /g,"_"),j=function(e){return e=e.toLowerCase(),e=k(e),e=e.replace(/\W/g,""),e},b=(e,i,a)=>i.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,i,a,o){function d(r){return r instanceof a?r:new a(function(n){n(r)})}return new(a||(a=Promise))(function(r,n){function y(s){try{t(o.next(s))}catch(p){n(p)}}function l(s){try{t(o.throw(s))}catch(p){n(p)}}function t(s){s.done?r(s.value):d(s.value).then(y,l)}t((o=o.apply(e,i||[])).next())})};window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"Search"});class q extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const i=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"):`${i}/css/core.min.css`,o=document.createElement("template");o.innerHTML=`
4
+ */import S from"js-cookie";const $=a=>a.replace(/ /g,"_"),C=function(a){return a=a.toLowerCase(),a=$(a),a=a.replace(/\W/g,""),a},g=(a,t,n)=>t.split(/[\.\[\]\'\"]/).filter(s=>s).reduce((s,i)=>s?s[i]:n,a),E=a=>Array.isArray(a)||a!==null&&["function","object"].includes(typeof a);function T(a,t,n,s=!1){let i=-1;s?t.addEventListener("focus",function(){t.setAttribute("data-list",t.getAttribute("list")),t.setAttribute("list",""),n.style.display="block"}):t.addEventListener("focus",function(){t.setAttribute("placeholder",t.value),t.setAttribute("data-value",t.value),t.value="",t.setAttribute("data-list",t.getAttribute("list")),t.setAttribute("list",""),n.style.display="block"}),t.addEventListener("blur",function(){t.hasAttribute("data-value")&&(t.value=t.getAttribute("data-value")),setTimeout(()=>{n.style.display="none"},500)});for(const o of n.options)o.innerHTML==""&&(o.innerHTML=o.value);a.addEventListener("click",function(){if(event&&event.target instanceof HTMLElement&&event.target.closest("datalist option")){const o=event.target.closest("datalist option");t.value=o.value,typeof window.triggerDynamicEvent=="function"&&window.triggerDynamicEvent(t),n.style.display="none";for(const e of n.options)e.classList.remove("active");o.classList.add("active")}}),t.addEventListener("input",function(){t.removeAttribute("data-value"),i=-1;const o=t.value.toUpperCase();for(const e of n.options)e.value.toUpperCase().indexOf(o)>-1?e.style.display="block":e.style.display="none"}),t.addEventListener("keydown",function(o){o.keyCode==40?(i++,c(n.options)):o.keyCode==38?(i--,c(n.options)):o.keyCode==13&&(o.preventDefault(),i>-1&&n.options&&n.options[i].click())});function c(o){if(!o)return!1;r(o),i>=o.length&&(i=0),i<0&&(i=o.length-1),o[i].classList.add("active")}function r(o){for(let e=0;e<o.length;e++)o[e].classList.remove("active")}t.closest("label").insertAdjacentHTML("beforeend",'<button class="empty btn btn-action"><i class="fa-light fa-times me-0"></i></button>'),a.querySelector(".empty").addEventListener("click",function(o){t.removeAttribute("placeholder"),t.removeAttribute("data-value"),t.value="";for(const e of n.options)e.classList.remove("active"),e.removeAttribute("style")})}var k=function(a,t,n,s){function i(c){return c instanceof n?c:new n(function(r){r(c)})}return new(n||(n=Promise))(function(c,r){function v(l){try{e(s.next(l))}catch(h){r(h)}}function o(l){try{e(s.throw(l))}catch(h){r(h)}}function e(l){l.done?c(l.value):i(l.value).then(v,o)}e((s=s.apply(a,t||[])).next())})};window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"Search"});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",n=document.body.hasAttribute("data-core-css")?document.body.getAttribute("data-core-css"):`${t}/css/core.min.css`,s=document.createElement("template");s.innerHTML=`
5
5
  <style>
6
- @import "${a}";
6
+ @import "${n}";
7
7
  input {
8
8
  background: red;
9
9
  }
@@ -19,7 +19,7 @@
19
19
  </style>
20
20
  <link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous" />
21
21
  <slot></slot>
22
- `,this.shadowRoot.appendChild(o.content.cloneNode(!0))}connectedCallback(){return L(this,void 0,void 0,function*(){const i=this,a=this.querySelector("input"),o=this.hasAttribute("data-value-schema")?this.getAttribute("data-value-schema"):"value",d=this.hasAttribute("data-display-schema")?this.getAttribute("data-display-schema"):"label",r=this.hasAttribute("data-schema")?this.getAttribute("data-schema"):"";let n=this.querySelector("datalist");const y=[];let l=this.getAttribute("data-url");const t=a.cloneNode();if(t.setAttribute("name",`${a.getAttribute("name")}Alt`),a.removeAttribute("data-change-events"),t.removeAttribute("id"),a.after(t),a.setAttribute("type","hidden"),!n){n=document.createElement("datalist");const c=j("list");n.setAttribute("id",c),i.appendChild(n),t.setAttribute("list",c)}i.hasAttribute("data-url")&&t.addEventListener("input",()=>{t.value.length==3&&!y.includes(t.value)&&(p(t.value),y.push(t.value))});function s(){const c=n.querySelector(`option[value="${t.value}"]`),f=n.querySelector(`option[value*="${t.value}" i]`);c?a.value=c.getAttribute("data-value"):t.value.length>0&&!f?(t.classList.add("is-invalid"),t.closest("label").setAttribute("data-error","No results returned")):(t.classList.remove("is-invalid"),t.closest("label").removeAttribute("data-error"))}t.addEventListener("input",()=>{s()});const p=c=>L(this,void 0,void 0,function*(){l+=`${encodeURI(c)}`,window.controller||(window.controller=[]),window.controller[l]&&window.controller[l].abort(),window.controller[l]=new AbortController;const{signal:f}=controller[l];try{yield fetch(l,{signal:f,method:"get",credentials:"same-origin",headers:new Headers({"Content-Type":"application/json",Accept:"application/json","X-Requested-With":"XMLHttpRequest","X-XSRF-TOKEN":$.get("XSRF-TOKEN")})}).then(u=>u.json()).then(u=>{let A="";const m=b(u,r,"");if(S(m)&&typeof m.forEach=="function")m.forEach(w=>{const h=b(w,o,""),v=b(w,d,"").replace(`
23
- `,", ");console.log(v),n.querySelector(`option[data-value="${h}"]`)||(A+=`<option value="${v}" data-value="${h}"></option>`)});else if(typeof m=="object")for(const[w,h]of Object.entries(m))S(h)&&typeof h.forEach=="function"&&h.forEach(v=>{const g=b(v,o,""),E=b(v,d,"").replace(`
24
- `,", ");n.querySelector(`option[data-value="${g}"]`)||(A+=`<option value="${w}: ${E}" data-value='${g}'></option>`)});return n.innerHTML+=A,t.closest("form").classList.add("was-validated"),s(),u})}catch(u){console.log(u)}});i.hasAttribute("data-prevent-submit")&&i.closest("form").addEventListener("submit",f=>{f.preventDefault()})})}}export{q as default};
22
+ `,this.shadowRoot.appendChild(s.content.cloneNode(!0))}connectedCallback(){return k(this,void 0,void 0,function*(){const t=this,n=this.querySelector("input"),s=this.hasAttribute("data-value-schema")?this.getAttribute("data-value-schema"):"value",i=this.hasAttribute("data-display-schema")?this.getAttribute("data-display-schema"):"label",c=this.hasAttribute("data-schema")?this.getAttribute("data-schema"):"";let r=this.querySelector("datalist");const v=[];let o=this.getAttribute("data-url");const e=n.cloneNode();if(e.setAttribute("name",`${n.getAttribute("name")}Alt`),n.removeAttribute("data-change-events"),e.removeAttribute("id"),n.after(e),n.setAttribute("type","hidden"),!r){r=document.createElement("datalist");const u=C("list");r.setAttribute("id",u),t.appendChild(r),e.setAttribute("list",u)}T(this,e,r,!0),t.hasAttribute("data-url")&&e.addEventListener("input",()=>{e.value.length==3&&!v.includes(e.value)&&(h(e.value),v.push(e.value))});function l(){const u=r.querySelector(`option[value="${e.value}"]`),b=r.querySelector(`option[value*="${e.value}" i]`);u?(n.value=u.getAttribute("data-value"),e.value=u.getAttribute("data-value")):e.value.length>0&&!b?(e.classList.add("is-invalid"),e.closest("label").setAttribute("data-error","No results returned")):(e.classList.remove("is-invalid"),e.closest("label").removeAttribute("data-error"))}e.addEventListener("input",()=>{l()});const h=u=>k(this,void 0,void 0,function*(){o+=`${encodeURI(u)}`,window.controller||(window.controller=[]),window.controller[o]&&window.controller[o].abort(),window.controller[o]=new AbortController;const{signal:b}=controller[o];try{yield fetch(o,{signal:b,method:"get",credentials:"same-origin",headers:new Headers({"Content-Type":"application/json",Accept:"application/json","X-Requested-With":"XMLHttpRequest","X-XSRF-TOKEN":S.get("XSRF-TOKEN")})}).then(f=>f.json()).then(f=>{let y="";const m=g(f,c,"");if(E(m)&&typeof m.forEach=="function")m.forEach(p=>{const d=g(p,s,""),A=g(p,i,"").replace(`
23
+ `,", ");r.querySelector(`option[data-value="${d}"]`)||(y+=`<option value="${A}" data-value="${d}">${A}</option>`)});else if(typeof m=="object")for(const[p,d]of Object.entries(m))E(d)&&typeof d.forEach=="function"&&d.forEach(A=>{const w=g(A,s,""),L=g(A,i,"").replace(`
24
+ `,", ");r.querySelector(`option[data-value="${w}"]`)||(y+=`<option value="${p}: ${L}" data-value='${w}'>${p}: ${L}</option>`)});return r.innerHTML+=y,e.closest("form").classList.add("was-validated"),l(),f})}catch(f){console.log(f)}});t.hasAttribute("data-prevent-submit")&&t.closest("form").addEventListener("submit",b=>{b.preventDefault()})})}}export{M as default};
25
25
  //# sourceMappingURL=search.component.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.component.min.js","sources":["../../modules/helpers.js","search.component.js"],"sourcesContent":["/**\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};\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 () {\n checkElements(location.hash);\n }, false);\n addEventListener('popstate', (event) => {\n if (event && event.state && event.state.type && event.state.type == 'pagination') {\n const form = document.querySelector(`#${event.state.form}`);\n const 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 const form = event.target;\n // Reset password types\n Array.from(form.querySelectorAll('[data-password-type]')).forEach((input) => {\n input.setAttribute('type', 'password');\n });\n if (form.querySelector(':invalid') ||\n form.querySelector('.pwd-checker[data-strength=\"1\"]') ||\n 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 Array.from(document.querySelectorAll('label progress')).forEach((progress) => {\n const label = progress.closest('label');\n label.setAttribute('data-percent', progress.getAttribute('value'));\n });\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\n .split(' ')\n .map((s) => ucfirst(s))\n .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 const convertStart = startDateString.split('/');\n const convertEnd = endDateString.split('/');\n const dateStart = new Date(convertStart[1] + '/' + convertStart[0] + '/' + convertStart[2]);\n const 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 const diffTime = dateEnd.getTime() - dateStart.getTime();\n const 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\n // eslint-disable-next-line no-useless-escape\n .split(/[\\.\\[\\]\\'\\\"]/)\n .filter((p) => p)\n .reduce((o, p) => (o ? o[p] : defaultValue), object);\nexport const isTraversable = (o) => Array.isArray(o) || (o !== null && ['function', 'object'].includes(typeof o));\nexport const getSwipeDirection = (touchstartX, touchstartY, touchendX, touchendY) => {\n const limit = Math.tan(((45 * 1.5) / 180) * Math.PI);\n const pageWidth = window.innerWidth || document.body.clientWidth;\n const treshold = Math.max(1, Math.floor(0.01 * pageWidth));\n const x = touchendX - touchstartX;\n const y = touchendY - touchstartY;\n const xy = Math.abs(x / y);\n const yx = Math.abs(y / x);\n if (Math.abs(x) > treshold || Math.abs(y) > treshold) {\n if (yx <= limit) {\n if (x < 0) {\n return 'left';\n }\n else {\n return 'right';\n }\n }\n if (xy <= limit) {\n if (y < 0) {\n return 'top';\n }\n else {\n return 'bottom';\n }\n }\n }\n else {\n return 'tap';\n }\n};\nexport const uniqueID = (index = 1) => {\n const ID = Math.floor(Math.random() * Date.now() * (index + 1));\n return ID;\n};\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};\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')\n ? document.body.getAttribute('data-assets-location')\n : '/assets';\n const coreCSS = document.body.hasAttribute('data-core-css')\n ? document.body.getAttribute('data-core-css')\n : `${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 .js-hide {\n display: none !important;\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 // eslint-disable-next-line @typescript-eslint/no-this-alias\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 const searched = [];\n let ajaxURL = this.getAttribute('data-url');\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 const 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', () => {\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 const match = datalist.querySelector(`option[value=\"${displayInputField.value}\"]`);\n const 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', () => {\n checkMatch();\n });\n const search = (searchterm) => __awaiter(this, void 0, void 0, function* () {\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())\n .then((response) => {\n // populate datalist\n let listString = '';\n const loopValues = resolvePath(response, loopSchema, '');\n if (isTraversable(loopValues) && typeof loopValues.forEach == 'function') {\n loopValues.forEach((item) => {\n const actualValue = resolvePath(item, valueSchema, '');\n const 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) => {\n const actualValue = resolvePath(item, valueSchema, '');\n const 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","ajaxURL","displayInputField","listID","search","checkMatch","match","subMatch","searchterm","signal","Cookies","response","listString","loopValues","item","actualValue","displayValue","key","error"],"mappings":";;;6BA8FO,MAAMA,EAASC,GAAQA,EAAI,QAAQ,KAAM,GAAG,EACtCC,EAAS,SAAUD,EAAK,CACjC,OAAAA,EAAMA,EAAI,YAAa,EACvBA,EAAMD,EAAMC,CAAG,EACfA,EAAMA,EAAI,QAAQ,MAAO,EAAE,EACpBA,CACX,EAkBaE,EAAc,CAACC,EAAQC,EAAMC,IAAiBD,EAEtD,MAAM,cAAc,EACpB,OAAQE,GAAMA,CAAC,EACf,OAAO,CAAC,EAAGA,IAAO,EAAI,EAAEA,CAAC,EAAID,EAAeF,CAAM,EAC1CI,EAAiBC,GAAM,MAAM,QAAQA,CAAC,GAAMA,IAAM,MAAQ,CAAC,WAAY,QAAQ,EAAE,SAAS,OAAOA,CAAC,EC3H/G,IAAIC,EAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAI,CAAA,CAAE,CAC1G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAI,OAAQK,EAAG,CAAEH,EAAOG,CAAC,CAAI,CAAA,CACzF,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAI,OAAQK,EAAG,CAAEH,EAAOG,CAAC,CAAI,CAAA,CAC5F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAE,CAC5GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAA,CAAE,GAAG,MAAM,CAC5E,CAAK,CACL,EAIA,OAAO,UAAY,OAAO,WAAa,CAAE,EACzC,OAAO,UAAU,KAAK,CAClB,MAAO,0BACP,QAAS,QACb,CAAC,EACD,MAAMY,UAAkB,WAAY,CAChC,aAAc,CACV,MAAO,EACP,KAAK,aAAa,CAAE,KAAM,MAAM,CAAE,EAClC,MAAMC,EAAgB,SAAS,KAAK,aAAa,sBAAsB,EACjE,SAAS,KAAK,aAAa,sBAAsB,EACjD,UACAC,EAAU,SAAS,KAAK,aAAa,eAAe,EACpD,SAAS,KAAK,aAAa,eAAe,EAC1C,GAAGD,CAAa,oBAChBE,EAAW,SAAS,cAAc,UAAU,EAClDA,EAAS,UAAY;AAAA;AAAA,eAEdD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiBd,KAAK,WAAW,YAAYC,EAAS,QAAQ,UAAU,EAAI,CAAC,CACpE,CACI,mBAAoB,CAChB,OAAOjB,EAAU,KAAM,OAAQ,OAAQ,WAAa,CAEhD,MAAMkB,EAAgB,KAChBC,EAAa,KAAK,cAAc,OAAO,EACvCC,EAAc,KAAK,aAAa,mBAAmB,EAAI,KAAK,aAAa,mBAAmB,EAAI,QAChGC,EAAgB,KAAK,aAAa,qBAAqB,EAAI,KAAK,aAAa,qBAAqB,EAAI,QACtGC,EAAa,KAAK,aAAa,aAAa,EAAI,KAAK,aAAa,aAAa,EAAI,GACzF,IAAIC,EAAW,KAAK,cAAc,UAAU,EAC5C,MAAMC,EAAW,CAAE,EACnB,IAAIC,EAAU,KAAK,aAAa,UAAU,EAE1C,MAAMC,EAAoBP,EAAW,UAAW,EAQhD,GAPAO,EAAkB,aAAa,OAAQ,GAAGP,EAAW,aAAa,MAAM,CAAC,KAAK,EAC9EA,EAAW,gBAAgB,oBAAoB,EAC/CO,EAAkB,gBAAgB,IAAI,EACtCP,EAAW,MAAMO,CAAiB,EAElCP,EAAW,aAAa,OAAQ,QAAQ,EAEpC,CAACI,EAAU,CACXA,EAAW,SAAS,cAAc,UAAU,EAC5C,MAAMI,EAASnC,EAAO,MAAM,EAC5B+B,EAAS,aAAa,KAAMI,CAAM,EAClCT,EAAc,YAAYK,CAAQ,EAClCG,EAAkB,aAAa,OAAQC,CAAM,CAC7D,CAEgBT,EAAc,aAAa,UAAU,GACrCQ,EAAkB,iBAAiB,QAAS,IAAM,CAC1CA,EAAkB,MAAM,QAAU,GAAK,CAACF,EAAS,SAASE,EAAkB,KAAK,IACjFE,EAAOF,EAAkB,KAAK,EAC9BF,EAAS,KAAKE,EAAkB,KAAK,EAE7D,CAAiB,EAEL,SAASG,GAAa,CAClB,MAAMC,EAAQP,EAAS,cAAc,iBAAiBG,EAAkB,KAAK,IAAI,EAC3EK,EAAWR,EAAS,cAAc,kBAAkBG,EAAkB,KAAK,MAAM,EACnFI,EACAX,EAAW,MAAQW,EAAM,aAAa,YAAY,EAE7CJ,EAAkB,MAAM,OAAS,GAAK,CAACK,GAC5CL,EAAkB,UAAU,IAAI,YAAY,EAC5CA,EAAkB,QAAQ,OAAO,EAAE,aAAa,aAAc,qBAAqB,IAGnFA,EAAkB,UAAU,OAAO,YAAY,EAC/CA,EAAkB,QAAQ,OAAO,EAAE,gBAAgB,YAAY,EAEnF,CAEYA,EAAkB,iBAAiB,QAAS,IAAM,CAC9CG,EAAY,CAC5B,CAAa,EACD,MAAMD,EAAUI,GAAehC,EAAU,KAAM,OAAQ,OAAQ,WAAa,CACxEyB,GAAW,GAAG,UAAUO,CAAU,CAAC,GAE9B,OAAO,aACR,OAAO,WAAa,CAAE,GAEtB,OAAO,WAAWP,CAAO,GACzB,OAAO,WAAWA,CAAO,EAAE,MAAO,EAEtC,OAAO,WAAWA,CAAO,EAAI,IAAI,gBACjC,KAAM,CAAE,OAAAQ,CAAM,EAAK,WAAWR,CAAO,EACrC,GAAI,CACA,MAAM,MAAMA,EAAS,CACjB,OAAQQ,EACR,OAAQ,MACR,YAAa,cACb,QAAS,IAAI,QAAQ,CACjB,eAAgB,mBAChB,OAAQ,mBACR,mBAAoB,iBACpB,eAAgBC,EAAQ,IAAI,YAAY,CACpE,CAAyB,CACJ,CAAA,EACI,KAAMC,GAAaA,EAAS,KAAM,CAAA,EAClC,KAAMA,GAAa,CAEpB,IAAIC,EAAa,GACjB,MAAMC,EAAa5C,EAAY0C,EAAUb,EAAY,EAAE,EACvD,GAAIxB,EAAcuC,CAAU,GAAK,OAAOA,EAAW,SAAW,WAC1DA,EAAW,QAASC,GAAS,CACzB,MAAMC,EAAc9C,EAAY6C,EAAMlB,EAAa,EAAE,EAC/CoB,EAAe/C,EAAY6C,EAAMjB,EAAe,EAAE,EAAE,QAAQ;AAAA,EAAM,IAAI,EAC5E,QAAQ,IAAImB,CAAY,EACnBjB,EAAS,cAAc,sBAAsBgB,CAAW,IAAI,IAC7DH,GAAc,kBAAkBI,CAAY,iBAAiBD,CAAW,cAC5G,CAA6B,UAEI,OAAOF,GAAc,SAC1B,SAAW,CAACI,EAAKnC,CAAK,IAAK,OAAO,QAAQ+B,CAAU,EAC5CvC,EAAcQ,CAAK,GAAK,OAAOA,EAAM,SAAW,YAChDA,EAAM,QAASgC,GAAS,CACpB,MAAMC,EAAc9C,EAAY6C,EAAMlB,EAAa,EAAE,EAC/CoB,EAAe/C,EAAY6C,EAAMjB,EAAe,EAAE,EAAE,QAAQ;AAAA,EAAM,IAAI,EACvEE,EAAS,cAAc,sBAAsBgB,CAAW,IAAI,IAC7DH,GAAc,kBAAkBK,CAAG,KAAKD,CAAY,iBAAiBD,CAAW,cAC5H,CAAqC,EAIb,OAAAhB,EAAS,WAAaa,EACtBV,EAAkB,QAAQ,MAAM,EAAE,UAAU,IAAI,eAAe,EAC/DG,EAAY,EACLM,CAC/B,CAAqB,CACrB,OACuBO,EAAO,CACV,QAAQ,IAAIA,CAAK,CACrC,CACA,CAAa,EACGxB,EAAc,aAAa,qBAAqB,GACnCA,EAAc,QAAQ,MAAM,EACpC,iBAAiB,SAAWP,GAAM,CACnCA,EAAE,eAAgB,CACtC,CAAiB,CAEjB,CAAS,CACT,CACA"}
1
+ {"version":3,"file":"search.component.min.js","sources":["../../modules/helpers.js","../../modules/advanced-select.js","search.component.js"],"sourcesContent":["/**\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};\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 () {\n checkElements(location.hash);\n }, false);\n addEventListener('popstate', (event) => {\n if (event && event.state && event.state.type && event.state.type == 'pagination') {\n const form = document.querySelector(`#${event.state.form}`);\n const 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 const form = event.target;\n // Reset password types\n Array.from(form.querySelectorAll('[data-password-type]')).forEach((input) => {\n input.setAttribute('type', 'password');\n });\n if (form.querySelector(':invalid') ||\n form.querySelector('.pwd-checker[data-strength=\"1\"]') ||\n 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 Array.from(document.querySelectorAll('label progress')).forEach((progress) => {\n const label = progress.closest('label');\n label.setAttribute('data-percent', progress.getAttribute('value'));\n });\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\n .split(' ')\n .map((s) => ucfirst(s))\n .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 const convertStart = startDateString.split('/');\n const convertEnd = endDateString.split('/');\n const dateStart = new Date(convertStart[1] + '/' + convertStart[0] + '/' + convertStart[2]);\n const 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 const diffTime = dateEnd.getTime() - dateStart.getTime();\n const 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\n // eslint-disable-next-line no-useless-escape\n .split(/[\\.\\[\\]\\'\\\"]/)\n .filter((p) => p)\n .reduce((o, p) => (o ? o[p] : defaultValue), object);\nexport const isTraversable = (o) => Array.isArray(o) || (o !== null && ['function', 'object'].includes(typeof o));\nexport const getSwipeDirection = (touchstartX, touchstartY, touchendX, touchendY) => {\n const limit = Math.tan(((45 * 1.5) / 180) * Math.PI);\n const pageWidth = window.innerWidth || document.body.clientWidth;\n const treshold = Math.max(1, Math.floor(0.01 * pageWidth));\n const x = touchendX - touchstartX;\n const y = touchendY - touchstartY;\n const xy = Math.abs(x / y);\n const yx = Math.abs(y / x);\n if (Math.abs(x) > treshold || Math.abs(y) > treshold) {\n if (yx <= limit) {\n if (x < 0) {\n return 'left';\n }\n else {\n return 'right';\n }\n }\n if (xy <= limit) {\n if (y < 0) {\n return 'top';\n }\n else {\n return 'bottom';\n }\n }\n }\n else {\n return 'tap';\n }\n};\nexport const uniqueID = (index = 1) => {\n const ID = Math.floor(Math.random() * Date.now() * (index + 1));\n return ID;\n};\n","function advancedSelect(advancedSelect, displayInputField, datalist, isSearch = false) {\n let currentFocus = -1;\n if (!isSearch) {\n displayInputField.addEventListener('focus', function () {\n displayInputField.setAttribute('placeholder', displayInputField.value);\n displayInputField.setAttribute('data-value', displayInputField.value);\n displayInputField.value = '';\n displayInputField.setAttribute('data-list', displayInputField.getAttribute('list'));\n displayInputField.setAttribute('list', '');\n datalist.style.display = 'block';\n });\n }\n else {\n displayInputField.addEventListener('focus', function () {\n displayInputField.setAttribute('data-list', displayInputField.getAttribute('list'));\n displayInputField.setAttribute('list', '');\n datalist.style.display = 'block';\n });\n }\n displayInputField.addEventListener('blur', function () {\n if (displayInputField.hasAttribute('data-value')) {\n displayInputField.value = displayInputField.getAttribute('data-value');\n }\n setTimeout(() => {\n datalist.style.display = 'none';\n }, 500);\n });\n for (const option of datalist.options) {\n if (option.innerHTML == '')\n option.innerHTML = option.value;\n }\n advancedSelect.addEventListener('click', function () {\n if (event && event.target instanceof HTMLElement && event.target.closest('datalist option')) {\n const option = event.target.closest('datalist option');\n displayInputField.value = option.value;\n if (typeof window.triggerDynamicEvent == \"function\")\n window.triggerDynamicEvent(displayInputField);\n datalist.style.display = 'none';\n for (const optionInner of datalist.options) {\n optionInner.classList.remove('active');\n }\n option.classList.add('active');\n }\n });\n displayInputField.addEventListener('input', function () {\n displayInputField.removeAttribute('data-value');\n currentFocus = -1;\n const text = displayInputField.value.toUpperCase();\n for (const option of datalist.options) {\n if (option.value.toUpperCase().indexOf(text) > -1) {\n option.style.display = 'block';\n }\n else {\n option.style.display = 'none';\n }\n }\n });\n displayInputField.addEventListener('keydown', function (e) {\n if (e.keyCode == 40) {\n currentFocus++;\n addActive(datalist.options);\n }\n else if (e.keyCode == 38) {\n currentFocus--;\n addActive(datalist.options);\n }\n else if (e.keyCode == 13) {\n e.preventDefault();\n if (currentFocus > -1) {\n /*and simulate a click on the \"active\" item:*/\n if (datalist.options)\n datalist.options[currentFocus].click();\n }\n }\n });\n function addActive(x) {\n if (!x)\n return false;\n removeActive(x);\n if (currentFocus >= x.length)\n currentFocus = 0;\n if (currentFocus < 0)\n currentFocus = x.length - 1;\n x[currentFocus].classList.add('active');\n }\n function removeActive(x) {\n for (let i = 0; i < x.length; i++) {\n x[i].classList.remove('active');\n }\n }\n // Add the empty button\n displayInputField\n .closest('label')\n .insertAdjacentHTML('beforeend', '<button class=\"empty btn btn-action\"><i class=\"fa-light fa-times me-0\"></i></button>');\n const closeBtn = advancedSelect.querySelector('.empty');\n closeBtn.addEventListener('click', function (e) {\n displayInputField.removeAttribute('placeholder');\n displayInputField.removeAttribute('data-value');\n displayInputField.value = '';\n for (const optionInner of datalist.options) {\n optionInner.classList.remove('active');\n optionInner.removeAttribute('style');\n }\n });\n}\nexport default advancedSelect;\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};\nimport Cookies from 'js-cookie';\nimport { safeID, resolvePath, isTraversable } from '../../modules/helpers.js';\nimport advancedSelect from '../../modules/advanced-select.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')\n ? document.body.getAttribute('data-assets-location')\n : '/assets';\n const coreCSS = document.body.hasAttribute('data-core-css')\n ? document.body.getAttribute('data-core-css')\n : `${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 .js-hide {\n display: none !important;\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 // eslint-disable-next-line @typescript-eslint/no-this-alias\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 const searched = [];\n let ajaxURL = this.getAttribute('data-url');\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 const listID = safeID('list');\n datalist.setAttribute('id', listID);\n searchWrapper.appendChild(datalist);\n displayInputField.setAttribute('list', listID);\n }\n advancedSelect(this, displayInputField, datalist, true);\n // Search the endpoint when 3 characters has been added\n if (searchWrapper.hasAttribute('data-url')) {\n displayInputField.addEventListener('input', () => {\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 const match = datalist.querySelector(`option[value=\"${displayInputField.value}\"]`);\n const subMatch = datalist.querySelector(`option[value*=\"${displayInputField.value}\" i]`);\n if (match) {\n inputField.value = match.getAttribute('data-value');\n displayInputField.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', () => {\n checkMatch();\n });\n const search = (searchterm) => __awaiter(this, void 0, void 0, function* () {\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())\n .then((response) => {\n // populate datalist\n let listString = '';\n const loopValues = resolvePath(response, loopSchema, '');\n if (isTraversable(loopValues) && typeof loopValues.forEach == 'function') {\n loopValues.forEach((item) => {\n const actualValue = resolvePath(item, valueSchema, '');\n const displayValue = resolvePath(item, displaySchema, '').replace('\\n', ', ');\n if (!datalist.querySelector(`option[data-value=\"${actualValue}\"]`))\n listString += `<option value=\"${displayValue}\" data-value=\"${actualValue}\">${displayValue}</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) => {\n const actualValue = resolvePath(item, valueSchema, '');\n const displayValue = resolvePath(item, displaySchema, '').replace('\\n', ', ');\n if (!datalist.querySelector(`option[data-value=\"${actualValue}\"]`))\n listString += `<option value=\"${key}: ${displayValue}\" data-value='${actualValue}'>${key}: ${displayValue}</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","o","isTraversable","advancedSelect","displayInputField","datalist","isSearch","currentFocus","option","optionInner","text","e","addActive","x","removeActive","i","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","rejected","result","iamSearch","assetLocation","coreCSS","template","searchWrapper","inputField","valueSchema","displaySchema","loopSchema","searched","ajaxURL","listID","search","checkMatch","match","subMatch","searchterm","signal","Cookies","response","listString","loopValues","item","actualValue","displayValue","key","error"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v7.3.0
2
+ * iamKey v7.4.0
3
3
  * Copyright 2022-2025 iamproperty
4
4
  */window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"Slider"});class w extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const o=document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets",d=document.body.hasAttribute("data-core-css")?document.body.getAttribute("data-core-css"):`${o}/css/core.min.css`,n=document.createElement("template");n.innerHTML=`
5
5
  <style>
@@ -0,0 +1,60 @@
1
+ import iamMenu from '../menu/menu.component.js';
2
+ // Data layer Web component created
3
+ window.dataLayer = window.dataLayer || [];
4
+ window.dataLayer.push({
5
+ event: 'customElementRegistered',
6
+ element: 'split-button',
7
+ });
8
+ class iamSplitButton extends HTMLElement {
9
+ constructor() {
10
+ super();
11
+ this.attachShadow({ mode: 'open' });
12
+ const assetLocation = document.body.hasAttribute('data-assets-location')
13
+ ? document.body.getAttribute('data-assets-location')
14
+ : '/assets';
15
+ const coreCSS = document.body.hasAttribute('data-core-css')
16
+ ? document.body.getAttribute('data-core-css')
17
+ : `${assetLocation}/css/core.min.css`;
18
+ const loadCSS = `@import "${assetLocation}/css/components/split-button.component.css";`;
19
+ const template = document.createElement('template');
20
+ template.innerHTML = `
21
+ <style>
22
+ @import "${coreCSS}";
23
+ ${loadCSS}
24
+ ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
25
+ </style>
26
+ <div class="split-button">
27
+ <slot></slot>
28
+ <div class="dropdown">
29
+ <button class="btn btn-split" part="dropdown" popovertarget="actions" style="anchor-name: --anchor-el;" title="Further actions">
30
+ <i class="fa fa-angle-down fa-light"></i>
31
+ </button>
32
+
33
+ <iam-menu id="actions" style="position-anchor: --anchor-el;" popover>
34
+ <slot name="menu-item">
35
+
36
+ </slot>
37
+ </iam-menu>
38
+
39
+ </div>
40
+ </div>
41
+ `;
42
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
43
+ }
44
+ connectedCallback() {
45
+ const dropdown = this.shadowRoot.querySelector('.split-menu');
46
+ const splitBtn = this.shadowRoot.querySelector('.btn-split');
47
+ const html = document.querySelector('html');
48
+ const mainButton = this.querySelector('.btn');
49
+ if (!window.customElements.get(`iam-menu`))
50
+ window.customElements.define(`iam-menu`, iamMenu);
51
+ splitBtn.className = `${mainButton.className} btn-split`;
52
+ if (mainButton.disabled) {
53
+ splitBtn.disabled = true;
54
+ }
55
+ if (mainButton.classList.contains('btn-sm')) {
56
+ splitBtn.classList.add('btn-sm');
57
+ }
58
+ }
59
+ }
60
+ export default iamSplitButton;
@@ -0,0 +1,34 @@
1
+ /*!
2
+ * iamKey v7.4.0
3
+ * Copyright 2022-2025 iamproperty
4
+ */class p extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),document.body.hasAttribute("data-assets-location")&&document.body.getAttribute("data-assets-location");const i=document.createElement("template");i.innerHTML=`
5
+ <style>
6
+ @layer elements{*,*::before,*::after{box-sizing:border-box}button{border-radius:0;text-transform:none;margin:0;font-family:inherit;font-size:inherit;line-height:inherit}[role=button]{cursor:pointer}button:focus:not(:focus-visible){outline:0}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}.btn{--btn-margin: 1rem;--btn-padding-block: 0.75rem;--btn-padding-inline: 2.5rem;--btn-border-width: 0.125rem;--btn-font-size: 1.125rem;--btn-line-height: 1.25rem;display:inline-block;font-weight:bold;text-align:left;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;color:var(--colour-btn);font-size:var(--btn-font-size);line-height:var(--btn-line-height);padding:var(--btn-padding-block) var(--btn-padding-inline);border-radius:1.5rem;margin-bottom:var(--btn-margin);background:none;transition:border .5s,background .5s,color .5s;height:auto;max-width:fit-content;appearance:none;white-space:nowrap}@media screen and (min-width: 36em){.btn{--btn-margin: 1.5rem}}.btn:not(.btn-secondary)[class*=colour-]{--colour-btn-bg: var(--colour);--colour-btn-border: var(--colour)}.btn:is(.colour-primary,.colour-dark,.colour-danger,.colour-black){--colour-btn: #fcfcfc}.btn:not(.border-0){background:var(--colour-btn-bg);border:var(--btn-border-width) solid var(--colour-btn-border)}.btn:not(:last-child){margin-right:var(--btn-margin)}a:is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active) .btn,.btn:is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active){outline:0;text-decoration:none;background:var(--colour-btn-bg-hover);color:var(--colour-btn-hover);border-radius:1.5rem}a:is(:active,.active):not([disabled]) .btn,.btn:is(:active,.active):not([disabled]){filter:brightness(85%);transition:background .1s,color .1s;color:var(--colour-btn);border-radius:1.5rem}a:disabled .btn,.btn:disabled,[disabled] .btn,.btn[disabled]{opacity:.4;cursor:not-allowed}.btn.colour-success{--colour-btn-bg-hover: var(--colour);--colour-btn-border-hover: var(--colour);--colour-btn-hover: var(--colour-primary-theme);position:relative;padding-left:3.5rem;padding-right:3.5rem}a:is(:hover,:focus,.hover):not([disabled],:active,.active) .btn.colour-success,.btn.colour-success:is(:hover,:focus,.hover):not([disabled],:active,.active){padding-left:2.5rem;padding-right:2.5rem}a:is(:hover,:focus,.hover):not([disabled],:active,.active) .btn.colour-success:before,.btn.colour-success:is(:hover,:focus,.hover):not([disabled],:active,.active):before{content:"\uF00C";font-family:"Font Awesome 6 Pro";margin-right:1rem;font-style:inherit;width:1rem;display:inline-block;height:var(--btn-line-height);vertical-align:bottom}.btn.btn-sm{--btn-padding-block: 0.5rem;--btn-padding-inline: 2rem;--btn-margin: 0.5rem;--btn-font-size: 1rem}.btn[class*=fa-]:before{content:var(--fa);font-family:"Font Awesome 6 Pro";line-height:1em}.btn.btn[class*=fa-after]{padding-right:4rem}.btn.btn[class*=fa-after]:before{margin-right:0;margin-right:0.375rem;position:absolute;right:1.5rem;top:50%;transform:translate(0, -50%)}.btn:not(.btn-compact):before{margin-right:1rem}.btn i[class*=fa-]{font-family:"Font Awesome 6 Pro";margin-right:1rem;line-height:1em;font-style:inherit}.btn i[class*=fa-]:not(:first-child){margin-left:1rem;margin-right:0}.btn.btn--prompt:after{content:"";height:var(--btn-line-height);width:1rem;display:inline-block;background:currentColor;mask-image:var(--icon-arrow);mask-size:100%;mask-repeat:no-repeat;mask-position:50% 50%;-webkit-mask-image:var(--icon-arrow);-webkit-mask-size:100%;-webkit-mask-repeat:no-repeat;-webkit-mask-position:50% 50%;vertical-align:bottom;margin-left:1rem}a:is(:hover,:focus,.hover):not([disabled],:active,.active) .btn.btn--prompt:after,.btn.btn--prompt:is(:hover,:focus,.hover):not([disabled],:active,.active):after{margin-left:1.5rem;margin-right:-0.5rem}.btn:has(select){position:relative;padding-right:3.5rem}.btn:has(select):not(.mw-100){max-width:13rem}.btn:has(select) select{all:unset !important;margin:calc(-0.75rem) calc(-2.5rem) !important;padding:var(--btn-padding-block) var(--btn-padding-inline) !important;padding-right:3.5rem !important;margin-right:-3.5rem !important;border-radius:1.5rem !important;appearance:none !important;background:none !important;border:none !important;color:currentColor !important;display:block;max-width:100% !important;outline:none;font-weight:bold;font-size:var(--btn-font-size) !important;line-height:var(--btn-line-height) !important}.btn:has(select) select option{padding:0;text-align:left;color:var(--colour-primary)}.btn:has(select):after{position:absolute;top:0.625rem;right:2rem;content:"";height:1.5rem;width:1rem;display:inline-block;background:currentColor;mask-image:var(--icon-arrow);mask-size:100%;mask-repeat:no-repeat;mask-position:50% 50%;-webkit-mask-image:var(--icon-arrow);-webkit-mask-size:100%;-webkit-mask-repeat:no-repeat;-webkit-mask-position:50% 50%;vertical-align:bottom;margin-left:1rem;transform:rotate(90deg);pointer-events:none}.btn:has(select).active:after{transform:rotate(-90deg)}.btn:has(select:focus):after{transform:rotate(-90deg)}.btn-filter:after{content:"\uF1DE";display:inline-block;margin-left:1em;margin-bottom:-0.15em;height:1em;width:1em;z-index:var(--index-focus);color:currentColor;font-weight:300;font-family:"Font Awesome 6 Pro"}}@layer elements{.btn-secondary{color:var(--colour-btn-secondary)}.btn-secondary:not(.border-0){background:var(--colour-btn-secondary-bg);border:2px solid var(--colour-btn-secondary-border)}a:is(:hover,:focus,.hover,:active,.active):not([disabled]) .btn-secondary,.btn-secondary:is(:hover,:focus,.hover,:focus-within,:active,.active):not([disabled]){background:var(--colour-btn-secondary-bg-hover);color:var(--colour-btn-secondary-hover)}}@layer elements{.btn.btn-tertiary{background-color:rgba(0,0,0,0);border:none;color:var(--colour-link);margin:0 var(--btn-margin) var(--btn-margin) 0;padding:0;font-size:1.125rem;font-weight:normal;line-height:1.5rem;min-height:1.5rem;position:relative}.btn.btn-tertiary:after{position:absolute;content:"";top:100%;left:50%;height:2px;width:100%;transform:translate(-50%, 0);background:var(--colour-underline);transition:width .5s}.btn.btn-tertiary.text-decoration-none:after{width:0%}.btn.btn-tertiary [class*=fa-]{margin-left:0;margin-right:.5rem}.btn.btn-tertiary [class*=fa-]:not(:first-child){margin-left:.5rem;margin-right:0}.btn.btn-tertiary:is(:hover,:focus,.hover,:focus-within):not([disabled],:disabled,:active,.active):after{width:60% !important}.btn.btn-tertiary:is(:active,.active):not([disabled],:disabled){color:var(--colour-active)}}@layer elements{.btn-action{--btn-border-width: 0.0625rem;--btn-padding-block: 0.3125rem;--btn-padding-inline: 0.3125rem;--btn-margin: 0.5rem;border-radius:0.25rem !important;font-weight:400 !important;font-size:1rem;line-height:1.25rem}.btn-action:not(.btn-primary){color:var(--colour-heading)}.btn-action:not(.btn-primary):not(.border-0){background-color:var(--colour-canvas-2);border:var(--btn-border-width) solid var(--colour-muted)}.btn-action.btn[class*=fa-]:before{content:var(--fa);margin-right:0.375rem}a:not(.btn-primary):is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active) .btn-action,.btn-action:not(.btn-primary):is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active){background:var(--colour-btn-action-hover-bg)}.btn-primary:is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active) .btn-action,.btn-action.btn-primary:is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active){filter:brightness(90%);background:var(--colour-btn-bg);border:var(--btn-border-width) solid var(--colour-btn-border);color:var(--colour-btn)}a:is(:active,.active):not([disabled]):not(.btn-primary) .btn-action,.btn-action:is(:active,.active):not([disabled]):not(.btn-primary){filter:brightness(85%);transition:all .1s;color:var(--colour-heading)}}@layer elements{.btn-compact{--compact-size: 3rem;padding:0 !important;margin-bottom:0.5rem;text-align:center;width:var(--compact-size);min-width:var(--compact-size);max-width:var(--compact-size);height:var(--compact-size) !important;min-height:var(--compact-size) !important;max-height:var(--compact-size) !important;line-height:var(--compact-size) !important;text-indent:-500px;overflow:hidden;position:relative;font-size:1rem}.btn-compact:not(:last-child){margin-right:0.5rem}.btn-compact:before{content:var(--fa);position:absolute;top:0;left:0;width:100%;height:100%;text-indent:0;line-height:calc(var(--compact-size) - 0.25rem);font-weight:900}.btn-compact[class*=fa-]:before{line-height:calc(var(--compact-size) - 0.25rem)}@media screen and (prefers-color-scheme: dark){.btn-compact[class*=fa-]:before{color:#fff}}.btn-compact.btn-sm{--compact-size: 2.5rem;font-size:1rem;padding:0 !important}.btn-compact.btn-action{--compact-size: 2rem;font-size:1rem}.btn-compact.btn-action:before{font-size:1em;font-weight:400}.btn-compact.btn-secondary{--colour-btn-bg: transparent;--colour-btn-border: transparent;border-color:rgba(0,0,0,0)}.btn-compact.btn-secondary:not([class*=colour-]){--colour: var(--colour-light)}.btn-compact.btn-secondary:is(:hover,:focus,.hover,:active,.active,[aria-expanded],:focus-within):not([disabled]):not(.btn-collapse){background-color:var(--colour);color:var(--colour-primary-theme);border-color:var(--colour)}.btn-compact.btn-secondary:is(:hover,:focus,.hover,:active,.active,[aria-expanded],:focus-within):not([disabled]):not(.btn-collapse):is(.colour-primary,.colour-dark,.colour-danger,.colour-black){color:var(--colour-inverted)}.btn-compact[data-number]{position:relative}.btn-compact[data-number]:after{content:attr(data-number);position:absolute;top:.5em;z-index:99;background:var(--colour-danger);height:1.5em;width:1.5em;border-radius:50%;text-indent:0;left:50%;font-size:.5em;line-height:1.5em;text-align:center;color:#fff;letter-spacing:-0.1em;font-family:arial,sans-serif}[class*=bg-]:not(.bg-info):not(.bg-success):not(.bg-light):not(.bg-warning):not(.bg-white):not(.bg-admin):not(.bg-canvas):not(.bg-canvas-2):not(.prevent-invert) .btn-compact.btn-secondary:not(:hover,:focus,.hover,:focus-within):not(.btn-collapse),.invert-colours .btn-compact.btn-secondary:not(:hover,:focus,.hover,:focus-within):not(.btn-collapse){background-color:var(--colour-inverted) !important;border-color:var(--colour-inverted) !important;color:var(--colour-primary-theme)}[class*=bg-]:not(.bg-info):not(.bg-success):not(.bg-light):not(.bg-warning):not(.bg-white):not(.bg-admin):not(.bg-canvas):not(.bg-canvas-2):not(.prevent-invert) .btn-compact.btn-secondary:is(:hover,:focus,.hover,:focus-within):not([disabled]):not(.btn-collapse),.invert-colours .btn-compact.btn-secondary:is(:hover,:focus,.hover,:focus-within):not([disabled]):not(.btn-collapse){background-color:rgba(0,0,0,0);border-color:var(--colour-inverted) !important;color:var(--colour-inverted)}[class*=bg-]:not(.bg-info):not(.bg-success):not(.bg-light):not(.bg-warning):not(.bg-white):not(.bg-admin):not(.bg-canvas):not(.bg-canvas-2):not(.prevent-invert) .btn-compact.btn-secondary[disabled],.invert-colours .btn-compact.btn-secondary[disabled]{background-color:var(--colour-inverted) !important;border-color:var(--colour-inverted) !important;color:var(--colour-primary-theme) !important}}::slotted(button:not([slot])){float:left;margin-right:0 !important;border-top-right-radius:0 !important;border-bottom-right-radius:0 !important;border-right:none !important;padding-right:1rem !important}::slotted(button[slot]){background:none !important;display:block !important;float:none !important;border:none !important}.split-button{position:relative}.split-button .dropdown{position:relative;display:inline-block}.split-button .dropdown button{border-top-left-radius:0;border-bottom-left-radius:0;border-left:1px solid rgba(0,0,0,.2);padding-right:0;padding-left:.75rem;margin-bottom:0}.split-button .dropdown button .fa-light::before{content:"\uF107"}.split-button .dropdown button:hover,.split-button .dropdown button:active,.split-button .dropdown button:focus{border-top-left-radius:0;border-bottom-left-radius:0}.btn-secondary:not([disabled]):hover i,.btn-secondary:not([disabled]):active i,.btn-secondary:not([disabled]):focus i{color:#fff !important}@media(prefers-color-scheme: dark){.btn-secondary.btn-split{border-left-color:#fff !important}.btn-secondary.btn-split:hover i,.btn-secondary.btn-split:active i,.btn-secondary.btn-split:focus i{color:#000 !important}}/*# sourceMappingURL=assets/css/components/split-button.component.css.map */
7
+
8
+ </style>
9
+ <div class="menu--inner" part="inner">
10
+ <slot></slot>
11
+ </div>`,this.shadowRoot.appendChild(i.content.cloneNode(!0))}connectedCallback(){const i=this.hasAttribute("id")?this.getAttribute("id"):!1,e=document.querySelector(`[popovertarget="${i}"]`);let n=this.querySelectorAll(":scope > a, :scope > button, :scope > details > summary"),c=this.querySelectorAll("a, button");this.closest(".menu__wrapper")&&(c=this.shadowRoot.querySelector("slot").assignedElements({flatten:!0}),n=c),this.querySelectorAll("details");let l,b;i&&e&&(this.setAttribute("role","menu"),this.style["position-anchor"]=`--${i}`,e?.setAttribute("aria-haspopup","true"),e==null||(e.style["anchor-name"]=`--${i}`),e?.setAttribute("aria-controls",i)),c.forEach((t,o)=>{t.setAttribute("role","menuitem"),t.setAttribute("tabindex","0"),o==0&&t.setAttribute("autofocus",!0)}),this.addEventListener("keydown",t=>{if(t&&t.target instanceof HTMLElement&&t.target.closest("a, button, summary")){const o=document.activeElement,a=Array.from(n).indexOf(o)-1,s=Array.from(n).indexOf(o)+1;switch(t.keyCode){case 27:o.closest("details")?(t.stopPropagation(),t.preventDefault(),o.closest("details").removeAttribute("open"),o.closest("details").querySelector(":scope summary").focus()):(t.stopPropagation(),e.focus());break;case 32:case 13:break;case 35:t.stopPropagation(),t.preventDefault(),this.querySelector("details[open]").removeAttribute("open"),Array.from(c)[c.length-1].focus();break;case 36:t.stopPropagation(),t.preventDefault(),this.querySelector("details[open]").removeAttribute("open"),Array.from(c)[0].focus();break;case 38:if(t.stopPropagation(),t.preventDefault(),Array.from(n).indexOf(o)>-1)Array.from(n)[a]!=null?Array.from(n)[a].focus():Array.from(n)[n.length-1].focus();else if(o.closest("details")){const r=o.closest("details").querySelectorAll("a, button, :scope details > summary");b=Array.from(r).indexOf(o)-1,Array.from(r)[b]!=null?Array.from(r)[b].focus():Array.from(r)[r.length-1].focus()}break;case 40:if(t.stopPropagation(),t.preventDefault(),Array.from(n).indexOf(o)>-1)Array.from(n)[s]!=null?Array.from(n)[s].focus():Array.from(n)[0].focus();else if(o.closest("details")){const r=o.closest("details").querySelectorAll("a, button, :scope details > summary");l=Array.from(r).indexOf(o)+1,Array.from(r)[l]!=null?Array.from(r)[l].focus():Array.from(r)[0].focus()}break}}}),this.addEventListener("toggle",t=>{var o,a,s,r;const d=new CustomEvent(t.newState,{detail:{id:this.getAttribute("id"),target:t.target}});this.dispatchEvent(d),this.closest(".menu__wrapper")&&c[0].focus(),this.hasAttribute("popover-open")&&(t.preventDefault(),this.removeAttribute("popover-open"),this.hidePopover()),this.matches(":popover-open")&&document.querySelector(`[popovertarget="${this.getAttribute("id")}"]`)?((o=document.querySelector(`[popovertarget="${this.getAttribute("id")}"]`))===null||o===void 0||o.setAttribute("aria-pressed","true"),(a=document.querySelector(`[popovertarget="${this.getAttribute("id")}"]`))===null||a===void 0||a.classList.add("active")):((s=document.querySelector(`[popovertarget="${this.getAttribute("id")}"]`))===null||s===void 0||s.removeAttribute("aria-pressed"),(r=document.querySelector(`[popovertarget="${this.getAttribute("id")}"]`))===null||r===void 0||r.classList.remove("active"))}),this.addEventListener("click",t=>{if(t&&t.target instanceof HTMLElement&&t.target.closest("button:has(+ iam-menu:not([popover]))")){const o=t.target.closest("button:has(+ iam-menu)");o?.classList.toggle("open")}else if(t&&t.target instanceof HTMLElement&&t.target.closest("button.selectable")){const o=t.target.closest("button.selectable");this.hasAttribute("multiple")?o.classList.toggle("selected"):o?.classList.contains("selected")?this.querySelectorAll(".selected").forEach(a=>{a.classList.remove("selected")}):(this.querySelectorAll(".selected").forEach(a=>{a.classList.remove("selected")}),o.classList.add("selected"))}}),CSS.supports("top","anchor(top)")||document.addEventListener("click",t=>{if(t.originalTarget&&t.originalTarget.matches("[popovertarget]")){const o=t.originalTarget,a=o.getAttribute("popovertarget"),s=document.getElementById(a),r=o.getBoundingClientRect(),d=r.top,u=r.left;s.style.setProperty("top",d+"px"),s.style.setProperty("left",u+o.clientWidth+"px")}})}}window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"split-button"});class h extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const i=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"):`${i}/css/core.min.css`,n=document.createElement("template");n.innerHTML=`
12
+ <style>
13
+ @import "${e}";
14
+ @layer elements{*,*::before,*::after{box-sizing:border-box}button{border-radius:0;text-transform:none;margin:0;font-family:inherit;font-size:inherit;line-height:inherit}[role=button]{cursor:pointer}button:focus:not(:focus-visible){outline:0}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}.btn{--btn-margin: 1rem;--btn-padding-block: 0.75rem;--btn-padding-inline: 2.5rem;--btn-border-width: 0.125rem;--btn-font-size: 1.125rem;--btn-line-height: 1.25rem;display:inline-block;font-weight:bold;text-align:left;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;color:var(--colour-btn);font-size:var(--btn-font-size);line-height:var(--btn-line-height);padding:var(--btn-padding-block) var(--btn-padding-inline);border-radius:1.5rem;margin-bottom:var(--btn-margin);background:none;transition:border .5s,background .5s,color .5s;height:auto;max-width:fit-content;appearance:none;white-space:nowrap}@media screen and (min-width: 36em){.btn{--btn-margin: 1.5rem}}.btn:not(.btn-secondary)[class*=colour-]{--colour-btn-bg: var(--colour);--colour-btn-border: var(--colour)}.btn:is(.colour-primary,.colour-dark,.colour-danger,.colour-black){--colour-btn: #fcfcfc}.btn:not(.border-0){background:var(--colour-btn-bg);border:var(--btn-border-width) solid var(--colour-btn-border)}.btn:not(:last-child){margin-right:var(--btn-margin)}a:is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active) .btn,.btn:is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active){outline:0;text-decoration:none;background:var(--colour-btn-bg-hover);color:var(--colour-btn-hover);border-radius:1.5rem}a:is(:active,.active):not([disabled]) .btn,.btn:is(:active,.active):not([disabled]){filter:brightness(85%);transition:background .1s,color .1s;color:var(--colour-btn);border-radius:1.5rem}a:disabled .btn,.btn:disabled,[disabled] .btn,.btn[disabled]{opacity:.4;cursor:not-allowed}.btn.colour-success{--colour-btn-bg-hover: var(--colour);--colour-btn-border-hover: var(--colour);--colour-btn-hover: var(--colour-primary-theme);position:relative;padding-left:3.5rem;padding-right:3.5rem}a:is(:hover,:focus,.hover):not([disabled],:active,.active) .btn.colour-success,.btn.colour-success:is(:hover,:focus,.hover):not([disabled],:active,.active){padding-left:2.5rem;padding-right:2.5rem}a:is(:hover,:focus,.hover):not([disabled],:active,.active) .btn.colour-success:before,.btn.colour-success:is(:hover,:focus,.hover):not([disabled],:active,.active):before{content:"\uF00C";font-family:"Font Awesome 6 Pro";margin-right:1rem;font-style:inherit;width:1rem;display:inline-block;height:var(--btn-line-height);vertical-align:bottom}.btn.btn-sm{--btn-padding-block: 0.5rem;--btn-padding-inline: 2rem;--btn-margin: 0.5rem;--btn-font-size: 1rem}.btn[class*=fa-]:before{content:var(--fa);font-family:"Font Awesome 6 Pro";line-height:1em}.btn.btn[class*=fa-after]{padding-right:4rem}.btn.btn[class*=fa-after]:before{margin-right:0;margin-right:0.375rem;position:absolute;right:1.5rem;top:50%;transform:translate(0, -50%)}.btn:not(.btn-compact):before{margin-right:1rem}.btn i[class*=fa-]{font-family:"Font Awesome 6 Pro";margin-right:1rem;line-height:1em;font-style:inherit}.btn i[class*=fa-]:not(:first-child){margin-left:1rem;margin-right:0}.btn.btn--prompt:after{content:"";height:var(--btn-line-height);width:1rem;display:inline-block;background:currentColor;mask-image:var(--icon-arrow);mask-size:100%;mask-repeat:no-repeat;mask-position:50% 50%;-webkit-mask-image:var(--icon-arrow);-webkit-mask-size:100%;-webkit-mask-repeat:no-repeat;-webkit-mask-position:50% 50%;vertical-align:bottom;margin-left:1rem}a:is(:hover,:focus,.hover):not([disabled],:active,.active) .btn.btn--prompt:after,.btn.btn--prompt:is(:hover,:focus,.hover):not([disabled],:active,.active):after{margin-left:1.5rem;margin-right:-0.5rem}.btn:has(select){position:relative;padding-right:3.5rem}.btn:has(select):not(.mw-100){max-width:13rem}.btn:has(select) select{all:unset !important;margin:calc(-0.75rem) calc(-2.5rem) !important;padding:var(--btn-padding-block) var(--btn-padding-inline) !important;padding-right:3.5rem !important;margin-right:-3.5rem !important;border-radius:1.5rem !important;appearance:none !important;background:none !important;border:none !important;color:currentColor !important;display:block;max-width:100% !important;outline:none;font-weight:bold;font-size:var(--btn-font-size) !important;line-height:var(--btn-line-height) !important}.btn:has(select) select option{padding:0;text-align:left;color:var(--colour-primary)}.btn:has(select):after{position:absolute;top:0.625rem;right:2rem;content:"";height:1.5rem;width:1rem;display:inline-block;background:currentColor;mask-image:var(--icon-arrow);mask-size:100%;mask-repeat:no-repeat;mask-position:50% 50%;-webkit-mask-image:var(--icon-arrow);-webkit-mask-size:100%;-webkit-mask-repeat:no-repeat;-webkit-mask-position:50% 50%;vertical-align:bottom;margin-left:1rem;transform:rotate(90deg);pointer-events:none}.btn:has(select).active:after{transform:rotate(-90deg)}.btn:has(select:focus):after{transform:rotate(-90deg)}.btn-filter:after{content:"\uF1DE";display:inline-block;margin-left:1em;margin-bottom:-0.15em;height:1em;width:1em;z-index:var(--index-focus);color:currentColor;font-weight:300;font-family:"Font Awesome 6 Pro"}}@layer elements{.btn-secondary{color:var(--colour-btn-secondary)}.btn-secondary:not(.border-0){background:var(--colour-btn-secondary-bg);border:2px solid var(--colour-btn-secondary-border)}a:is(:hover,:focus,.hover,:active,.active):not([disabled]) .btn-secondary,.btn-secondary:is(:hover,:focus,.hover,:focus-within,:active,.active):not([disabled]){background:var(--colour-btn-secondary-bg-hover);color:var(--colour-btn-secondary-hover)}}@layer elements{.btn.btn-tertiary{background-color:rgba(0,0,0,0);border:none;color:var(--colour-link);margin:0 var(--btn-margin) var(--btn-margin) 0;padding:0;font-size:1.125rem;font-weight:normal;line-height:1.5rem;min-height:1.5rem;position:relative}.btn.btn-tertiary:after{position:absolute;content:"";top:100%;left:50%;height:2px;width:100%;transform:translate(-50%, 0);background:var(--colour-underline);transition:width .5s}.btn.btn-tertiary.text-decoration-none:after{width:0%}.btn.btn-tertiary [class*=fa-]{margin-left:0;margin-right:.5rem}.btn.btn-tertiary [class*=fa-]:not(:first-child){margin-left:.5rem;margin-right:0}.btn.btn-tertiary:is(:hover,:focus,.hover,:focus-within):not([disabled],:disabled,:active,.active):after{width:60% !important}.btn.btn-tertiary:is(:active,.active):not([disabled],:disabled){color:var(--colour-active)}}@layer elements{.btn-action{--btn-border-width: 0.0625rem;--btn-padding-block: 0.3125rem;--btn-padding-inline: 0.3125rem;--btn-margin: 0.5rem;border-radius:0.25rem !important;font-weight:400 !important;font-size:1rem;line-height:1.25rem}.btn-action:not(.btn-primary){color:var(--colour-heading)}.btn-action:not(.btn-primary):not(.border-0){background-color:var(--colour-canvas-2);border:var(--btn-border-width) solid var(--colour-muted)}.btn-action.btn[class*=fa-]:before{content:var(--fa);margin-right:0.375rem}a:not(.btn-primary):is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active) .btn-action,.btn-action:not(.btn-primary):is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active){background:var(--colour-btn-action-hover-bg)}.btn-primary:is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active) .btn-action,.btn-action.btn-primary:is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active){filter:brightness(90%);background:var(--colour-btn-bg);border:var(--btn-border-width) solid var(--colour-btn-border);color:var(--colour-btn)}a:is(:active,.active):not([disabled]):not(.btn-primary) .btn-action,.btn-action:is(:active,.active):not([disabled]):not(.btn-primary){filter:brightness(85%);transition:all .1s;color:var(--colour-heading)}}@layer elements{.btn-compact{--compact-size: 3rem;padding:0 !important;margin-bottom:0.5rem;text-align:center;width:var(--compact-size);min-width:var(--compact-size);max-width:var(--compact-size);height:var(--compact-size) !important;min-height:var(--compact-size) !important;max-height:var(--compact-size) !important;line-height:var(--compact-size) !important;text-indent:-500px;overflow:hidden;position:relative;font-size:1rem}.btn-compact:not(:last-child){margin-right:0.5rem}.btn-compact:before{content:var(--fa);position:absolute;top:0;left:0;width:100%;height:100%;text-indent:0;line-height:calc(var(--compact-size) - 0.25rem);font-weight:900}.btn-compact[class*=fa-]:before{line-height:calc(var(--compact-size) - 0.25rem)}@media screen and (prefers-color-scheme: dark){.btn-compact[class*=fa-]:before{color:#fff}}.btn-compact.btn-sm{--compact-size: 2.5rem;font-size:1rem;padding:0 !important}.btn-compact.btn-action{--compact-size: 2rem;font-size:1rem}.btn-compact.btn-action:before{font-size:1em;font-weight:400}.btn-compact.btn-secondary{--colour-btn-bg: transparent;--colour-btn-border: transparent;border-color:rgba(0,0,0,0)}.btn-compact.btn-secondary:not([class*=colour-]){--colour: var(--colour-light)}.btn-compact.btn-secondary:is(:hover,:focus,.hover,:active,.active,[aria-expanded],:focus-within):not([disabled]):not(.btn-collapse){background-color:var(--colour);color:var(--colour-primary-theme);border-color:var(--colour)}.btn-compact.btn-secondary:is(:hover,:focus,.hover,:active,.active,[aria-expanded],:focus-within):not([disabled]):not(.btn-collapse):is(.colour-primary,.colour-dark,.colour-danger,.colour-black){color:var(--colour-inverted)}.btn-compact[data-number]{position:relative}.btn-compact[data-number]:after{content:attr(data-number);position:absolute;top:.5em;z-index:99;background:var(--colour-danger);height:1.5em;width:1.5em;border-radius:50%;text-indent:0;left:50%;font-size:.5em;line-height:1.5em;text-align:center;color:#fff;letter-spacing:-0.1em;font-family:arial,sans-serif}[class*=bg-]:not(.bg-info):not(.bg-success):not(.bg-light):not(.bg-warning):not(.bg-white):not(.bg-admin):not(.bg-canvas):not(.bg-canvas-2):not(.prevent-invert) .btn-compact.btn-secondary:not(:hover,:focus,.hover,:focus-within):not(.btn-collapse),.invert-colours .btn-compact.btn-secondary:not(:hover,:focus,.hover,:focus-within):not(.btn-collapse){background-color:var(--colour-inverted) !important;border-color:var(--colour-inverted) !important;color:var(--colour-primary-theme)}[class*=bg-]:not(.bg-info):not(.bg-success):not(.bg-light):not(.bg-warning):not(.bg-white):not(.bg-admin):not(.bg-canvas):not(.bg-canvas-2):not(.prevent-invert) .btn-compact.btn-secondary:is(:hover,:focus,.hover,:focus-within):not([disabled]):not(.btn-collapse),.invert-colours .btn-compact.btn-secondary:is(:hover,:focus,.hover,:focus-within):not([disabled]):not(.btn-collapse){background-color:rgba(0,0,0,0);border-color:var(--colour-inverted) !important;color:var(--colour-inverted)}[class*=bg-]:not(.bg-info):not(.bg-success):not(.bg-light):not(.bg-warning):not(.bg-white):not(.bg-admin):not(.bg-canvas):not(.bg-canvas-2):not(.prevent-invert) .btn-compact.btn-secondary[disabled],.invert-colours .btn-compact.btn-secondary[disabled]{background-color:var(--colour-inverted) !important;border-color:var(--colour-inverted) !important;color:var(--colour-primary-theme) !important}}::slotted(button:not([slot])){float:left;margin-right:0 !important;border-top-right-radius:0 !important;border-bottom-right-radius:0 !important;border-right:none !important;padding-right:1rem !important}::slotted(button[slot]){background:none !important;display:block !important;float:none !important;border:none !important}.split-button{position:relative}.split-button .dropdown{position:relative;display:inline-block}.split-button .dropdown button{border-top-left-radius:0;border-bottom-left-radius:0;border-left:1px solid rgba(0,0,0,.2);padding-right:0;padding-left:.75rem;margin-bottom:0}.split-button .dropdown button .fa-light::before{content:"\uF107"}.split-button .dropdown button:hover,.split-button .dropdown button:active,.split-button .dropdown button:focus{border-top-left-radius:0;border-bottom-left-radius:0}.btn-secondary:not([disabled]):hover i,.btn-secondary:not([disabled]):active i,.btn-secondary:not([disabled]):focus i{color:#fff !important}@media(prefers-color-scheme: dark){.btn-secondary.btn-split{border-left-color:#fff !important}.btn-secondary.btn-split:hover i,.btn-secondary.btn-split:active i,.btn-secondary.btn-split:focus i{color:#000 !important}}/*# sourceMappingURL=assets/css/components/split-button.component.css.map */
15
+
16
+ ${this.hasAttribute("css")?`@import "${this.getAttribute("css")}";`:""}
17
+ </style>
18
+ <div class="split-button">
19
+ <slot></slot>
20
+ <div class="dropdown">
21
+ <button class="btn btn-split" part="dropdown" popovertarget="actions" style="anchor-name: --anchor-el;" title="Further actions">
22
+ <i class="fa fa-angle-down fa-light"></i>
23
+ </button>
24
+
25
+ <iam-menu id="actions" style="position-anchor: --anchor-el;" popover>
26
+ <slot name="menu-item">
27
+
28
+ </slot>
29
+ </iam-menu>
30
+
31
+ </div>
32
+ </div>
33
+ `,this.shadowRoot.appendChild(n.content.cloneNode(!0))}connectedCallback(){this.shadowRoot.querySelector(".split-menu");const i=this.shadowRoot.querySelector(".btn-split");document.querySelector("html");const e=this.querySelector(".btn");window.customElements.get("iam-menu")||window.customElements.define("iam-menu",p),i.className=`${e.className} btn-split`,e.disabled&&(i.disabled=!0),e.classList.contains("btn-sm")&&i.classList.add("btn-sm")}}export{h as default};
34
+ //# sourceMappingURL=split-button.component.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-button.component.min.js","sources":["../menu/menu.component.js","split-button.component.js"],"sourcesContent":["class iamMenu extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location')\n ? document.body.getAttribute('data-assets-location')\n : '/assets';\n const loadCSS = `@import \"${assetLocation}/css/components/menu.component.css\";`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n ${loadCSS}\n </style>\n <div class=\"menu--inner\" part=\"inner\">\n <slot></slot>\n </div>`;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n const menuID = this.hasAttribute('id') ? this.getAttribute('id') : false;\n const menuButton = document.querySelector(`[popovertarget=\"${menuID}\"]`);\n let topLevelmenuItems = this.querySelectorAll(':scope > a, :scope > button, :scope > details > summary');\n let menuItems = this.querySelectorAll('a, button');\n if (this.closest('.menu__wrapper')) {\n menuItems = this.shadowRoot.querySelector('slot').assignedElements({ flatten: true });\n topLevelmenuItems = menuItems;\n }\n const subMenus = this.querySelectorAll('details');\n let subNextIndex;\n let subPrevIndex;\n // Set the needed CSS styles to connect the ID attribute to the anchor name\n if (menuID && menuButton) {\n this.setAttribute('role', 'menu');\n this.style['position-anchor'] = `--${menuID}`;\n menuButton === null || menuButton === void 0 ? void 0 : menuButton.setAttribute('aria-haspopup', 'true');\n menuButton === null || menuButton === void 0 ? void 0 : menuButton.style['anchor-name'] = `--${menuID}`;\n menuButton === null || menuButton === void 0 ? void 0 : menuButton.setAttribute('aria-controls', menuID);\n }\n menuItems.forEach((item, index) => {\n item.setAttribute('role', 'menuitem');\n item.setAttribute('tabindex', '0');\n if (index == 0) {\n item.setAttribute('autofocus', true);\n }\n });\n this.addEventListener('keydown', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('a, button, summary')) {\n const activeItem = document.activeElement;\n const prevIndex = Array.from(topLevelmenuItems).indexOf(activeItem) - 1;\n const nextIndex = Array.from(topLevelmenuItems).indexOf(activeItem) + 1;\n switch (event.keyCode // change to event.key to key to use the above variable\n ) {\n case 27: // Esc\n if (activeItem.closest('details')) {\n event.stopPropagation();\n event.preventDefault();\n activeItem.closest('details').removeAttribute('open');\n activeItem.closest('details').querySelector(':scope summary').focus();\n }\n else {\n event.stopPropagation();\n menuButton.focus();\n }\n break;\n case 32: // Space\n case 13: // Enter\n break;\n case 35: // end\n event.stopPropagation();\n event.preventDefault();\n this.querySelector('details[open]').removeAttribute('open');\n Array.from(menuItems)[menuItems.length - 1].focus();\n break;\n case 36: // home\n event.stopPropagation();\n event.preventDefault();\n this.querySelector('details[open]').removeAttribute('open');\n Array.from(menuItems)[0].focus();\n break;\n case 38: // up\n event.stopPropagation();\n event.preventDefault();\n if (Array.from(topLevelmenuItems).indexOf(activeItem) > -1) {\n if (Array.from(topLevelmenuItems)[prevIndex] != undefined)\n Array.from(topLevelmenuItems)[prevIndex].focus();\n else\n Array.from(topLevelmenuItems)[topLevelmenuItems.length - 1].focus();\n }\n else if (activeItem.closest('details')) {\n const subMenuItems = activeItem\n .closest('details')\n .querySelectorAll('a, button, :scope details > summary');\n subPrevIndex = Array.from(subMenuItems).indexOf(activeItem) - 1;\n if (Array.from(subMenuItems)[subPrevIndex] != undefined)\n Array.from(subMenuItems)[subPrevIndex].focus();\n else\n Array.from(subMenuItems)[subMenuItems.length - 1].focus();\n }\n break;\n case 40: // down\n event.stopPropagation();\n event.preventDefault();\n if (Array.from(topLevelmenuItems).indexOf(activeItem) > -1) {\n if (Array.from(topLevelmenuItems)[nextIndex] != undefined)\n Array.from(topLevelmenuItems)[nextIndex].focus();\n else\n Array.from(topLevelmenuItems)[0].focus();\n }\n else if (activeItem.closest('details')) {\n const subMenuItems = activeItem\n .closest('details')\n .querySelectorAll('a, button, :scope details > summary');\n subNextIndex = Array.from(subMenuItems).indexOf(activeItem) + 1;\n if (Array.from(subMenuItems)[subNextIndex] != undefined)\n Array.from(subMenuItems)[subNextIndex].focus();\n else\n Array.from(subMenuItems)[0].focus();\n }\n break;\n }\n }\n });\n this.addEventListener('toggle', (e) => {\n var _a, _b, _c, _d;\n const updateEvent = new CustomEvent(e.newState, { detail: { id: this.getAttribute('id'), target: e.target } });\n this.dispatchEvent(updateEvent);\n // Fix the focus\n if (this.closest('.menu__wrapper')) {\n menuItems[0].focus();\n }\n if (this.hasAttribute('popover-open')) {\n e.preventDefault();\n this.removeAttribute('popover-open');\n this.hidePopover();\n }\n if (this.matches(':popover-open') && document.querySelector(`[popovertarget=\"${this.getAttribute('id')}\"]`)) {\n (_a = document.querySelector(`[popovertarget=\"${this.getAttribute('id')}\"]`)) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-pressed', 'true');\n (_b = document.querySelector(`[popovertarget=\"${this.getAttribute('id')}\"]`)) === null || _b === void 0 ? void 0 : _b.classList.add('active');\n }\n else {\n (_c = document.querySelector(`[popovertarget=\"${this.getAttribute('id')}\"]`)) === null || _c === void 0 ? void 0 : _c.removeAttribute('aria-pressed');\n (_d = document.querySelector(`[popovertarget=\"${this.getAttribute('id')}\"]`)) === null || _d === void 0 ? void 0 : _d.classList.remove('active');\n }\n });\n this.addEventListener('click', (event) => {\n if (event &&\n event.target instanceof HTMLElement &&\n event.target.closest('button:has(+ iam-menu:not([popover]))')) {\n const button = event.target.closest('button:has(+ iam-menu)');\n button === null || button === void 0 ? void 0 : button.classList.toggle('open');\n }\n else if (event && event.target instanceof HTMLElement && event.target.closest('button.selectable')) {\n const button = event.target.closest('button.selectable');\n if (this.hasAttribute('multiple')) {\n button.classList.toggle('selected');\n }\n else if (button === null || button === void 0 ? void 0 : button.classList.contains('selected')) {\n this.querySelectorAll('.selected').forEach((item) => {\n item.classList.remove('selected');\n });\n }\n else {\n this.querySelectorAll('.selected').forEach((item) => {\n item.classList.remove('selected');\n });\n button.classList.add('selected');\n }\n }\n });\n // safari and firefox anchor fix for cards\n if (!CSS.supports('top', 'anchor(top)')) {\n document.addEventListener('click', (event) => {\n if (event.originalTarget && event.originalTarget.matches('[popovertarget]')) {\n const button = event.originalTarget;\n const popoverID = button.getAttribute('popovertarget');\n const popover = document.getElementById(popoverID);\n const viewportOffset = button.getBoundingClientRect();\n const top = viewportOffset.top;\n const left = viewportOffset.left;\n popover.style.setProperty('top', top + 'px');\n popover.style.setProperty('left', left + button.clientWidth + 'px');\n }\n });\n }\n }\n}\nexport default iamMenu;\n","import iamMenu from '../menu/menu.component.js';\n// Data layer Web component created\nwindow.dataLayer = window.dataLayer || [];\nwindow.dataLayer.push({\n event: 'customElementRegistered',\n element: 'split-button',\n});\nclass iamSplitButton extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location')\n ? document.body.getAttribute('data-assets-location')\n : '/assets';\n const coreCSS = document.body.hasAttribute('data-core-css')\n ? document.body.getAttribute('data-core-css')\n : `${assetLocation}/css/core.min.css`;\n const loadCSS = `@import \"${assetLocation}/css/components/split-button.component.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 <div class=\"split-button\">\n <slot></slot>\n <div class=\"dropdown\">\n <button class=\"btn btn-split\" part=\"dropdown\" popovertarget=\"actions\" style=\"anchor-name: --anchor-el;\" title=\"Further actions\">\n <i class=\"fa fa-angle-down fa-light\"></i>\n </button>\n\n <iam-menu id=\"actions\" style=\"position-anchor: --anchor-el;\" popover>\n <slot name=\"menu-item\">\n\n </slot>\n </iam-menu>\n\n </div>\n </div>\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n const dropdown = this.shadowRoot.querySelector('.split-menu');\n const splitBtn = this.shadowRoot.querySelector('.btn-split');\n const html = document.querySelector('html');\n const mainButton = this.querySelector('.btn');\n if (!window.customElements.get(`iam-menu`))\n window.customElements.define(`iam-menu`, iamMenu);\n splitBtn.className = `${mainButton.className} btn-split`;\n if (mainButton.disabled) {\n splitBtn.disabled = true;\n }\n if (mainButton.classList.contains('btn-sm')) {\n splitBtn.classList.add('btn-sm');\n }\n }\n}\nexport default iamSplitButton;\n"],"names":["iamMenu","template","menuID","menuButton","topLevelmenuItems","menuItems","subNextIndex","subPrevIndex","item","index","event","activeItem","prevIndex","nextIndex","subMenuItems","e","_a","_b","_c","_d","updateEvent","button","popoverID","popover","viewportOffset","top","left","iamSplitButton","assetLocation","coreCSS","splitBtn","mainButton"],"mappings":"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"}
@@ -36,6 +36,18 @@ class iamTableBasic extends HTMLElement {
36
36
  const table = this.querySelector('table');
37
37
  const form = findForm(this, table);
38
38
  const savedTableBody = table.querySelector('tbody').cloneNode(true);
39
+ const assetLocation = document.body.hasAttribute('data-assets-location')
40
+ ? document.body.getAttribute('data-assets-location')
41
+ : '/assets';
42
+ if (!window.customElements.get(`iam-menu`)) {
43
+ import(/* @vite-ignore */ `${assetLocation}/js/components/menu/menu.component.js`)
44
+ .then((module) => {
45
+ window.customElements.define(`iam-menu`, module.default);
46
+ })
47
+ .catch((err) => {
48
+ console.log(err.message);
49
+ });
50
+ }
39
51
  moveAttributesToComponents(this);
40
52
  setupBasicTable(this, table, form, pagination);
41
53
  setupAdvancedTable(this, table, form, pagination);