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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/assets/css/components/actionbar.component.css +1 -1
  2. package/assets/css/components/actionbar.component.css.map +1 -1
  3. package/assets/css/components/address-lookup.component.css +1 -1
  4. package/assets/css/components/address-lookup.component.css.map +1 -1
  5. package/assets/css/components/barchart.component.css +1 -1
  6. package/assets/css/components/barchart.component.css.map +1 -1
  7. package/assets/css/components/calendar.component.css +1 -1
  8. package/assets/css/components/calendar.component.css.map +1 -1
  9. package/assets/css/components/card.component.css +1 -1
  10. package/assets/css/components/card.component.css.map +1 -1
  11. package/assets/css/components/carousel.component.css +1 -1
  12. package/assets/css/components/carousel.component.css.map +1 -1
  13. package/assets/css/components/collapsible-side.css +1 -1
  14. package/assets/css/components/collapsible-side.css.map +1 -1
  15. package/assets/css/components/content.component.css +1 -1
  16. package/assets/css/components/content.component.css.map +1 -1
  17. package/assets/css/components/doughnutchart.component.css +1 -1
  18. package/assets/css/components/doughnutchart.component.css.map +1 -1
  19. package/assets/css/components/fileupload.css +1 -1
  20. package/assets/css/components/fileupload.css.map +1 -1
  21. package/assets/css/components/header.css +1 -1
  22. package/assets/css/components/header.css.map +1 -1
  23. package/assets/css/components/modal.component.css +1 -1
  24. package/assets/css/components/modal.component.css.map +1 -1
  25. package/assets/css/components/multi-step-modal.component.css +1 -1
  26. package/assets/css/components/multi-step-modal.component.css.map +1 -1
  27. package/assets/css/components/multiselect.css +1 -1
  28. package/assets/css/components/multiselect.css.map +1 -1
  29. package/assets/css/components/multiselect.preload.css +1 -1
  30. package/assets/css/components/multiselect.preload.css.map +1 -1
  31. package/assets/css/components/nav.component.css +1 -1
  32. package/assets/css/components/nav.component.css.map +1 -1
  33. package/assets/css/components/pagination.css +1 -1
  34. package/assets/css/components/pagination.css.map +1 -1
  35. package/assets/css/components/slider.css +1 -1
  36. package/assets/css/components/slider.css.map +1 -1
  37. package/assets/css/components/split-button.component.css +1 -1
  38. package/assets/css/components/split-button.component.css.map +1 -1
  39. package/assets/css/components/tabs.component.css +1 -1
  40. package/assets/css/components/tabs.component.css.map +1 -1
  41. package/assets/css/components/tag.component.css +1 -1
  42. package/assets/css/components/tag.component.css.map +1 -1
  43. package/assets/css/components/tag.preload.css +1 -1
  44. package/assets/css/components/tag.preload.css.map +1 -1
  45. package/assets/css/components/tooltip.component.css +1 -1
  46. package/assets/css/components/tooltip.component.css.map +1 -1
  47. package/assets/css/components/video-modal.component.css +1 -1
  48. package/assets/css/components/video-modal.component.css.map +1 -1
  49. package/assets/css/core.min.css +1 -1
  50. package/assets/css/core.min.css.map +1 -1
  51. package/assets/css/style.min.css +1 -1
  52. package/assets/css/style.min.css.map +1 -1
  53. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  54. package/assets/js/components/actionbar/actionbar.component.min.js +2 -2
  55. package/assets/js/components/address-lookup/address-lookup.component.js +11 -5
  56. package/assets/js/components/address-lookup/address-lookup.component.min.js +4 -4
  57. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  58. package/assets/js/components/advanced-select/advanced-select.component.min.js +1 -1
  59. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  60. package/assets/js/components/barchart/barchart.component.min.js +4 -4
  61. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  62. package/assets/js/components/calendar/calendar.component.min.js +2 -2
  63. package/assets/js/components/card/card.component.min.js +2 -2
  64. package/assets/js/components/carousel/carousel.component.min.js +3 -3
  65. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +2 -2
  66. package/assets/js/components/content/content.component.min.js +2 -2
  67. package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
  68. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +4 -4
  69. package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
  70. package/assets/js/components/filter-card/filter-card.component.min.js +1 -1
  71. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  72. package/assets/js/components/form/form.component.min.js +1 -1
  73. package/assets/js/components/header/header.component.min.js +2 -2
  74. package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
  75. package/assets/js/components/input/input.component.min.js +1 -1
  76. package/assets/js/components/input-range/input-range.component.min.js +1 -1
  77. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  78. package/assets/js/components/menu/menu.component.min.js +1 -1
  79. package/assets/js/components/milestone/milestone.component.min.js +1 -1
  80. package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
  81. package/assets/js/components/modal/modal.component.js +1 -1
  82. package/assets/js/components/modal/modal.component.min.js +3 -3
  83. package/assets/js/components/modal/modal.component.min.js.map +1 -1
  84. package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
  85. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +4 -4
  86. package/assets/js/components/multiselect/multiselect.component.js +9 -76
  87. package/assets/js/components/multiselect/multiselect.component.min.js +4 -4
  88. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  89. package/assets/js/components/nav/nav.component.min.js +2 -2
  90. package/assets/js/components/notification/notification.component.min.js +1 -1
  91. package/assets/js/components/pagination/pagination.component.min.js +2 -2
  92. package/assets/js/components/password/password.component.min.js +1 -1
  93. package/assets/js/components/popover/popover.component.min.js +1 -1
  94. package/assets/js/components/rank/rank.component.min.js +1 -1
  95. package/assets/js/components/rankings/rankings.component.min.js +1 -1
  96. package/assets/js/components/rating/rating.component.min.js +1 -1
  97. package/assets/js/components/record-card/record-card.component.min.js +1 -1
  98. package/assets/js/components/search/search.component.min.js +1 -1
  99. package/assets/js/components/slider/slider.component.min.js +2 -2
  100. package/assets/js/components/split-button/split-button.component.min.js +5 -5
  101. package/assets/js/components/std-address-lookup/std-address-lookup.component.js +39 -2
  102. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +10 -9
  103. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
  104. package/assets/js/components/table/table.component.min.js +1 -1
  105. package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
  106. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  107. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
  108. package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
  109. package/assets/js/components/tabs/tabs.component.min.js +2 -2
  110. package/assets/js/components/tag/tag.component.js +6 -1
  111. package/assets/js/components/tag/tag.component.min.js +4 -4
  112. package/assets/js/components/tag/tag.component.min.js.map +1 -1
  113. package/assets/js/components/tooltip/tooltip.component.min.js +2 -2
  114. package/assets/js/components/video-card/video-card.component.min.js +1 -1
  115. package/assets/js/components/video-modal/video-modal.component.min.js +3 -3
  116. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  117. package/assets/js/modules/dropdown.js +97 -4
  118. package/assets/js/scripts.bundle.js +1 -1
  119. package/assets/js/scripts.bundle.min.js +1 -1
  120. package/assets/sass/_components.scss +0 -2
  121. package/assets/sass/_elements.scss +1 -0
  122. package/assets/sass/components/multiselect.preload.scss +0 -55
  123. package/assets/sass/components/multiselect.scss +172 -174
  124. package/assets/sass/components/tag.component.scss +38 -57
  125. package/assets/sass/components/tag.preload.scss +1 -26
  126. package/assets/sass/components/tooltip.component.scss +16 -15
  127. package/assets/sass/elements/button__group.css +43 -5
  128. package/assets/sass/elements/container.scss +7 -2
  129. package/assets/sass/elements/dropdown.scss +87 -0
  130. package/assets/sass/elements/forms.scss +6 -0
  131. package/assets/sass/foundations/colours.scss +10 -7
  132. package/assets/ts/components/address-lookup/address-lookup.component.ts +12 -5
  133. package/assets/ts/components/modal/modal.component.ts +1 -1
  134. package/assets/ts/components/multiselect/multiselect.component.ts +10 -78
  135. package/assets/ts/components/std-address-lookup/std-address-lookup.component.ts +51 -2
  136. package/assets/ts/components/tag/tag.component.ts +8 -11
  137. package/assets/ts/modules/dropdown.ts +117 -5
  138. package/dist/components.es.js +28 -28
  139. package/dist/components.umd.js +232 -225
  140. package/package.json +2 -2
@@ -7,7 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import Cookies from 'js-cookie';
10
+ import Cookies from '../../../node_modules/js-cookie/dist/js.cookie.mjs';
11
11
  export const filterList = (component, search) => {
12
12
  Array.from(component.querySelectorAll(`label:not([slot="checked"])`)).forEach((label) => {
13
13
  const checkbox = label.querySelector('input');
@@ -27,8 +27,10 @@ export const searchAjax = (component, search, callback) => __awaiter(void 0, voi
27
27
  const ajaxURL = component.getAttribute('data-url');
28
28
  const firstInput = component.querySelector('input');
29
29
  console.log(firstInput);
30
- const inputType = firstInput.getAttribute('type');
31
- const inputName = firstInput.getAttribute('name');
30
+ const inputType = firstInput && firstInput.hasAttribute('type') ? firstInput.getAttribute('type') : 'checkbox';
31
+ let inputName = firstInput && firstInput.hasAttribute('name') ? firstInput.getAttribute('name') : 'tags';
32
+ if (component.hasAttribute('data-name'))
33
+ inputName = component.hasAttribute('data-name');
32
34
  const searchAjaxURL = `${ajaxURL}?search_query=${encodeURI(searchterm)}`;
33
35
  // Setup controller vars if not already set
34
36
  if (!window.controller)
@@ -56,7 +58,7 @@ export const searchAjax = (component, search, callback) => __awaiter(void 0, voi
56
58
  let items = '';
57
59
  for (let i = 0; i < response['data'].length; i++) {
58
60
  if (!component.querySelector(`[value="${response['data'][i].value}"]`))
59
- items += `<label class="tag"><input type="${inputType}" name="${component.hasAttribute('data-name') ? component.getAttribute('data-name') : inputName}" value="${response['data'][i].value}"/>${response['data'][i].title}</label>`;
61
+ items += `<label class="tag dropdown__option"><input type="${inputType}" name="${component.hasAttribute('data-name') ? component.getAttribute('data-name') : inputName}" value="${response['data'][i].value}"/>${response['data'][i].title}</label>`;
60
62
  }
61
63
  component.insertAdjacentHTML('beforeend', `${items}`);
62
64
  callback(component, search);
@@ -84,3 +86,94 @@ export const setTag = (tag) => {
84
86
  tagIndex = 1;
85
87
  tag === null || tag === void 0 ? void 0 : tag.classList.add(`wider-colour-${tagIndex + 1}`);
86
88
  };
89
+ export const addKeyboardEvents = (dropdown, search) => {
90
+ search.addEventListener('keydown', (e) => {
91
+ var _a;
92
+ switch (e.keyCode) {
93
+ case 40: // down
94
+ e.stopPropagation();
95
+ e.preventDefault();
96
+ (_a = dropdown.querySelector('label:not([slot="checked"]) input')) === null || _a === void 0 ? void 0 : _a.focus();
97
+ break;
98
+ }
99
+ });
100
+ dropdown.addEventListener('keydown', (event) => {
101
+ var _a, _b, _c;
102
+ const topLevelmenuItems = dropdown.querySelectorAll(':scope > a, :scope > button, :scope > details > summary, :scope > label:not([slot="checked"]) > input');
103
+ const menuItems = dropdown.querySelectorAll('a, button, input, label:not([slot="checked"]) > input');
104
+ const activeElement = document.activeElement;
105
+ if (event && event.target instanceof HTMLElement && event.target.closest('a, button, summary, label:not([slot="checked"]) > input')) {
106
+ const activeItem = document.activeElement;
107
+ const prevIndex = Array.from(topLevelmenuItems).indexOf(activeItem) - 1;
108
+ const nextIndex = Array.from(topLevelmenuItems).indexOf(activeItem) + 1;
109
+ switch (event.keyCode // change to event.key to key to use the above variable
110
+ ) {
111
+ case 27: // Esc
112
+ if (activeItem.closest('details')) {
113
+ event.stopPropagation();
114
+ event.preventDefault();
115
+ activeItem.closest('details').removeAttribute('open');
116
+ activeItem.closest('details').querySelector(':scope summary').focus();
117
+ }
118
+ else {
119
+ event.stopPropagation();
120
+ //menuButton.focus();
121
+ }
122
+ break;
123
+ case 32: // Space
124
+ case 13: // Enter
125
+ break;
126
+ case 35: // end
127
+ event.stopPropagation();
128
+ event.preventDefault();
129
+ (_a = dropdown.querySelector('details[open]')) === null || _a === void 0 ? void 0 : _a.removeAttribute('open');
130
+ Array.from(menuItems)[menuItems.length - 1].focus();
131
+ break;
132
+ case 36: // home
133
+ event.stopPropagation();
134
+ event.preventDefault();
135
+ (_b = dropdown.querySelector('details[open]')) === null || _b === void 0 ? void 0 : _b.removeAttribute('open');
136
+ Array.from(menuItems)[0].focus();
137
+ break;
138
+ case 38: // up
139
+ event.stopPropagation();
140
+ event.preventDefault();
141
+ if (Array.from(topLevelmenuItems).indexOf(activeItem) > -1) {
142
+ if (Array.from(topLevelmenuItems)[prevIndex] != undefined)
143
+ Array.from(topLevelmenuItems)[prevIndex].focus();
144
+ else
145
+ Array.from(topLevelmenuItems)[topLevelmenuItems.length - 1].focus();
146
+ }
147
+ else if (activeItem.closest('details')) {
148
+ const subMenuItems = activeItem
149
+ .closest('details')
150
+ .querySelectorAll('a, button, :scope details > summary');
151
+ subPrevIndex = Array.from(subMenuItems).indexOf(activeItem) - 1;
152
+ if (Array.from(subMenuItems)[subPrevIndex] != undefined)
153
+ Array.from(subMenuItems)[subPrevIndex].focus();
154
+ else
155
+ Array.from(subMenuItems)[subMenuItems.length - 1].focus();
156
+ }
157
+ break;
158
+ case 40: // down
159
+ event.stopPropagation();
160
+ event.preventDefault();
161
+ if (Array.from(topLevelmenuItems).indexOf(activeItem) > -1) {
162
+ if (Array.from(topLevelmenuItems)[nextIndex] != undefined)
163
+ Array.from(topLevelmenuItems)[nextIndex].focus();
164
+ else
165
+ Array.from(topLevelmenuItems)[0].focus();
166
+ }
167
+ else if (activeItem.closest('details')) {
168
+ const subMenuItems = (_c = activeItem.closest('details')) === null || _c === void 0 ? void 0 : _c.querySelectorAll('a, button, :scope details > summary');
169
+ subNextIndex = Array.from(subMenuItems).indexOf(activeItem) + 1;
170
+ if (Array.from(subMenuItems)[subNextIndex] != undefined)
171
+ Array.from(subMenuItems)[subNextIndex].focus();
172
+ else
173
+ Array.from(subMenuItems)[0].focus();
174
+ }
175
+ break;
176
+ }
177
+ }
178
+ });
179
+ };
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v7.6.4--beta2
2
+ * iamKey v7.6.4--beta4
3
3
  * Copyright 2022-2026 iamproperty
4
4
  */(function(d){typeof define=="function"&&define.amd?define(d):d()})((function(){"use strict";var d=a=>{a.classList.add("js-enabled"),(navigator.userAgent.indexOf("MSIE")!==-1||navigator.appVersion.indexOf("Trident/")>0)&&a.classList.add("ie")},g=a=>{var t=function(c){var r=document.querySelector('label[for="'.concat(c.replace("#",""),'"]')),o=document.querySelector(c+" summary"),i=document.querySelector("dialog".concat(c)),n=document.querySelector("detail".concat(c));r instanceof HTMLElement?r.click():o instanceof HTMLElement?o.click():i instanceof HTMLElement?i.showModal():n instanceof HTMLElement&&n.addAttribute("open")};location.hash&&t(location.hash),window.addEventListener("hashchange",function(){t(location.hash)},!1),addEventListener("popstate",e=>{if(e&&e.state&&e.state.type&&e.state.type=="pagination"){var c=document.querySelector("#".concat(e.state.form)),r=document.querySelector("#".concat(e.state.form," [data-pagination]"));r?r.value=e.state.page:c.innerHTML+='<input name="page" type="hidden" data-pagination="true" value="'.concat(e.state.page,'" />'),c.dispatchEvent(new Event("submit"))}}),Array.from(document.querySelectorAll("form")).forEach(e=>{e?.closest("iam-form")||e.addEventListener("submit",c=>{var r;e.querySelector(":invalid")&&(e.classList.add("was-validated"),(r=e?.querySelector("input:invalid"))===null||r===void 0||r.scrollIntoView(),c.preventDefault())})}),document.addEventListener("click",e=>{var c;if(e&&e.target instanceof HTMLElement&&e.target.matches("form button:not([type=button])")){var r=e.target.closest("form");r?.closest("iam-form")||(Array.from(r.querySelectorAll("[data-password-type]")).forEach(o=>{o.setAttribute("type","password")}),(r.querySelector(":invalid")||r.querySelector('.pwd-checker[data-strength="1"]')||r.querySelector('.pwd-checker[data-strength="2"]'))&&(r.classList.add("was-validated"),(c=r?.querySelector("input:invalid"))===null||c===void 0||c.scrollIntoView(),e.preventDefault()),r.querySelector("iam-multiselect[data-is-required][data-error]")&&(r.classList.add("was-validated"),e.preventDefault()))}}),document.addEventListener("keydown",e=>{e.key==="Escape"&&document.querySelector(".dialog--transactional[open], .dialog--acknowledgement[open]")&&(e.preventDefault(),e.stopPropagation())}),Array.from(document.querySelectorAll("label progress")).forEach(e=>{var c=e.closest("label");c.setAttribute("data-percent",e.getAttribute("value"))})};function m(){window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"Pageview",pageTitle:document.title}),document.addEventListener("click",a=>{var t=a.target.closest("[open] summary");if(t)window.dataLayer.push({event:"closeDetails",detailsTitle:t.textContent||""});else{var e=a.target.closest("summary"),c=a.target.closest("a"),r=a.target.closest("button");e&&window.dataLayer.push({event:"openDetails",detailsTitle:e.textContent||""}),c&&window.dataLayer.push({event:"linkClicked",linkText:c.hasAttribute("title")?c.getAttribute("title")||"":c.textContent||"",class:c.hasAttribute("class")&&c.getAttribute("class")||"",href:c.getAttribute("href")||""}),r&&window.dataLayer.push({event:"buttonClicked",buttonText:r.textContent||"",class:r.hasAttribute("class")&&r.getAttribute("class")||""})}})}window.triggerDynamicEvent=function(a){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"change";console.log("event"),a.hasAttribute("data-change-events")&&t=="change"&&l(a,a.getAttribute("data-change-events")),a.hasAttribute("data-click-events")&&t=="click"&&l(a,a.getAttribute("data-click-events"))};var p=()=>{document.addEventListener("change",a=>{a&&a.target instanceof HTMLElement&&a.target.closest("[data-change-events]")&&l(a.target,a.target.closest("[data-change-events]").getAttribute("data-change-events"))}),document.addEventListener("keyup",a=>{a&&a.target instanceof HTMLElement&&a.target.closest("[data-change-events]")&&l(a.target,a.target.closest("[data-change-events]").getAttribute("data-change-events"))}),document.addEventListener("click",a=>{a&&a.target instanceof HTMLElement&&a.target.closest("[data-click-events]")&&l(a.target,a.target.closest("[data-click-events]").getAttribute("data-click-events"))})},l=(a,t)=>{if(t||(t=a.parentNode.getAttribute("data-change-events")),!t)return!1;Array.from(JSON.parse(t)).forEach(e=>{v(a,e)})},v=(a,t)=>{if("matches"in t)return t.matches=="any"||a.value==t.matches?u(a,t,"if"):u(a,t,"else"),!1;if("in-list"in t){var e=document.querySelector("".concat(t["in-list"],' option[value="').concat(a.value,'"]'));return document.querySelector("".concat(t["in-list"],' option[value="').concat(a.value,'"]'))?u(e,t,"if"):u(e,t,"else"),!1}else"event"in t&&u(a,t,"event")},u=(a,t,e)=>{if(!(e in t))return!1;switch(t[e]){case"hide":if(document.querySelector(t.target)){var c=document.querySelector(t.target);c.classList.add("js-hide"),Array.from(c.querySelectorAll("[data-required]")).forEach(n=>{n.removeAttribute("required")})}break;case"show":if(document.querySelector(t.target)){var r=document.querySelector(t.target);r.classList.remove("js-hide"),Array.from(r.querySelectorAll("[data-required]")).forEach(n=>{n.closest(".js-hide")||n.setAttribute("required","true")})}break;case"populate-form":h(a,t);break;case"dispatchEvent":var o=new Event(t.value);document.querySelector("".concat(t.target)).dispatchEvent(o);break;case"setAttribute":Array.from(document.querySelectorAll("".concat(t.target))).forEach(function(n){n.setAttribute(t.attribute,t.value)});break;case"focus":document.querySelector("".concat(t.target)).focus();break;case"removeAttribute":Array.from(document.querySelectorAll("".concat(t.target))).forEach(function(n){n.removeAttribute(t.attribute)});break;case"updateValue":document.querySelector("".concat(t.target)).value=t.value?t.value:"";var i=new Event("change");document.querySelector("".concat(t.target)).dispatchEvent(i);break;case"submitForm":document.querySelector("".concat(t.target)).submit();break;case"openLink":document.querySelector("".concat(t.target)).value&&(window.location.href=document.querySelector("".concat(t.target)).value);break}},h=function(t,e){var c=JSON.parse(t.getAttribute("data-values")),r=document.querySelector(e.target);if(!c)return!1;Object.keys(c).forEach(o=>{document.getElementById(o)&&document.getElementById(o).tagName=="SPAN"&&(document.getElementById(o).innerHTML=c[o]),r.querySelector('select[name="'.concat(o,'"] [value="').concat(c[o],'"]'))?(r.querySelector('select[name="'.concat(o,'"]')).value=c[o],t.hasAttribute("data-lock-fields")&&(r.querySelector('select[name="'.concat(o,'"]')).disabled=!0)):r.querySelector('input[name="'.concat(o,'"][type="radio"][value="').concat(c[o],'"]'))?(Array.from(r.querySelectorAll('input[name="'.concat(o,'"][type="radio"]'))).forEach(function(i){i.disabled=!0}),r.querySelector('input[name="'.concat(o,'"][type="radio"][value="').concat(c[o],'"]')).checked=!0,r.querySelector('input[name="'.concat(o,'"][type="radio"][value="').concat(c[o],'"]')).disabled=!1):r.querySelector('input[name="'.concat(o,'"]'))&&(r.querySelector('input[name="'.concat(o,'"]')).value=c[o],t.hasAttribute("data-lock-fields")&&r.querySelector('input[name="'.concat(o,'"]')).setAttribute("readonly","true"))})},b=function(a,t,e,c){function r(o){return o instanceof e?o:new e(function(i){i(o)})}return new(e||(e=Promise))(function(o,i){function n(s){try{f(c.next(s))}catch(y){i(y)}}function q(s){try{f(c.throw(s))}catch(y){i(y)}}function f(s){s.done?o(s.value):r(s.value).then(n,q)}f((c=c.apply(a,t||[])).next())})};document.addEventListener("DOMContentLoaded",()=>b(void 0,void 0,void 0,function*(){m(),p(),d(document.body),g()}))}));
5
5
  //# sourceMappingURL=scripts.bundle.js.map
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v7.6.4--beta2
2
+ * iamKey v7.6.4--beta4
3
3
  * Copyright 2022-2026 iamproperty
4
4
  */
5
5
  !function(e){"function"==typeof define&&define.amd?define(e):e()}(function(){"use strict";window.triggerDynamicEvent=function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"change";console.log("event"),t.hasAttribute("data-change-events")&&"change"==a&&e(t,t.getAttribute("data-change-events")),t.hasAttribute("data-click-events")&&"click"==a&&e(t,t.getAttribute("data-click-events"))};var e=(e,a)=>{if(a||(a=e.parentNode.getAttribute("data-change-events")),!a)return!1;Array.from(JSON.parse(a)).forEach(a=>{t(e,a)})},t=(e,t)=>{if("matches"in t)return"any"==t.matches||e.value==t.matches?a(e,t,"if"):a(e,t,"else"),!1;if("in-list"in t){var n=document.querySelector("".concat(t["in-list"],' option[value="').concat(e.value,'"]'));return document.querySelector("".concat(t["in-list"],' option[value="').concat(e.value,'"]'))?a(n,t,"if"):a(n,t,"else"),!1}"event"in t&&a(e,t,"event")},a=(e,t,a)=>{if(!(a in t))return!1;switch(t[a]){case"hide":if(document.querySelector(t.target)){var r=document.querySelector(t.target);r.classList.add("js-hide"),Array.from(r.querySelectorAll("[data-required]")).forEach(e=>{e.removeAttribute("required")})}break;case"show":if(document.querySelector(t.target)){var c=document.querySelector(t.target);c.classList.remove("js-hide"),Array.from(c.querySelectorAll("[data-required]")).forEach(e=>{e.closest(".js-hide")||e.setAttribute("required","true")})}break;case"populate-form":n(e,t);break;case"dispatchEvent":var o=new Event(t.value);document.querySelector("".concat(t.target)).dispatchEvent(o);break;case"setAttribute":Array.from(document.querySelectorAll("".concat(t.target))).forEach(function(e){e.setAttribute(t.attribute,t.value)});break;case"focus":document.querySelector("".concat(t.target)).focus();break;case"removeAttribute":Array.from(document.querySelectorAll("".concat(t.target))).forEach(function(e){e.removeAttribute(t.attribute)});break;case"updateValue":document.querySelector("".concat(t.target)).value=t.value?t.value:"";var i=new Event("change");document.querySelector("".concat(t.target)).dispatchEvent(i);break;case"submitForm":document.querySelector("".concat(t.target)).submit();break;case"openLink":document.querySelector("".concat(t.target)).value&&(window.location.href=document.querySelector("".concat(t.target)).value)}},n=function(e,t){var a=JSON.parse(e.getAttribute("data-values")),n=document.querySelector(t.target);if(!a)return!1;Object.keys(a).forEach(t=>{document.getElementById(t)&&"SPAN"==document.getElementById(t).tagName&&(document.getElementById(t).innerHTML=a[t]),n.querySelector('select[name="'.concat(t,'"] [value="').concat(a[t],'"]'))?(n.querySelector('select[name="'.concat(t,'"]')).value=a[t],e.hasAttribute("data-lock-fields")&&(n.querySelector('select[name="'.concat(t,'"]')).disabled=!0)):n.querySelector('input[name="'.concat(t,'"][type="radio"][value="').concat(a[t],'"]'))?(Array.from(n.querySelectorAll('input[name="'.concat(t,'"][type="radio"]'))).forEach(function(e){e.disabled=!0}),n.querySelector('input[name="'.concat(t,'"][type="radio"][value="').concat(a[t],'"]')).checked=!0,n.querySelector('input[name="'.concat(t,'"][type="radio"][value="').concat(a[t],'"]')).disabled=!1):n.querySelector('input[name="'.concat(t,'"]'))&&(n.querySelector('input[name="'.concat(t,'"]')).value=a[t],e.hasAttribute("data-lock-fields")&&n.querySelector('input[name="'.concat(t,'"]')).setAttribute("readonly","true"))})};document.addEventListener("DOMContentLoaded",()=>{return t=void 0,a=void 0,r=function*(){var t,a;window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"Pageview",pageTitle:document.title}),document.addEventListener("click",e=>{var t=e.target.closest("[open] summary");if(t)window.dataLayer.push({event:"closeDetails",detailsTitle:t.textContent||""});else{var a=e.target.closest("summary"),n=e.target.closest("a"),r=e.target.closest("button");a&&window.dataLayer.push({event:"openDetails",detailsTitle:a.textContent||""}),n&&window.dataLayer.push({event:"linkClicked",linkText:n.hasAttribute("title")?n.getAttribute("title")||"":n.textContent||"",class:n.hasAttribute("class")&&n.getAttribute("class")||"",href:n.getAttribute("href")||""}),r&&window.dataLayer.push({event:"buttonClicked",buttonText:r.textContent||"",class:r.hasAttribute("class")&&r.getAttribute("class")||""})}}),document.addEventListener("change",t=>{t&&t.target instanceof HTMLElement&&t.target.closest("[data-change-events]")&&e(t.target,t.target.closest("[data-change-events]").getAttribute("data-change-events"))}),document.addEventListener("keyup",t=>{t&&t.target instanceof HTMLElement&&t.target.closest("[data-change-events]")&&e(t.target,t.target.closest("[data-change-events]").getAttribute("data-change-events"))}),document.addEventListener("click",t=>{t&&t.target instanceof HTMLElement&&t.target.closest("[data-click-events]")&&e(t.target,t.target.closest("[data-click-events]").getAttribute("data-click-events"))}),(a=document.body).classList.add("js-enabled"),(-1!==navigator.userAgent.indexOf("MSIE")||navigator.appVersion.indexOf("Trident/")>0)&&a.classList.add("ie"),t=function(e){var t=document.querySelector('label[for="'.concat(e.replace("#",""),'"]')),a=document.querySelector(e+" summary"),n=document.querySelector("dialog".concat(e)),r=document.querySelector("detail".concat(e));t instanceof HTMLElement?t.click():a instanceof HTMLElement?a.click():n instanceof HTMLElement?n.showModal():r instanceof HTMLElement&&r.addAttribute("open")},location.hash&&t(location.hash),window.addEventListener("hashchange",function(){t(location.hash)},!1),addEventListener("popstate",e=>{if(e&&e.state&&e.state.type&&"pagination"==e.state.type){var t=document.querySelector("#".concat(e.state.form)),a=document.querySelector("#".concat(e.state.form," [data-pagination]"));a?a.value=e.state.page:t.innerHTML+='<input name="page" type="hidden" data-pagination="true" value="'.concat(e.state.page,'" />'),t.dispatchEvent(new Event("submit"))}}),Array.from(document.querySelectorAll("form")).forEach(e=>{e?.closest("iam-form")||e.addEventListener("submit",t=>{var a;e.querySelector(":invalid")&&(e.classList.add("was-validated"),null===(a=e?.querySelector("input:invalid"))||void 0===a||a.scrollIntoView(),t.preventDefault())})}),document.addEventListener("click",e=>{var t;if(e&&e.target instanceof HTMLElement&&e.target.matches("form button:not([type=button])")){var a=e.target.closest("form");a?.closest("iam-form")||(Array.from(a.querySelectorAll("[data-password-type]")).forEach(e=>{e.setAttribute("type","password")}),(a.querySelector(":invalid")||a.querySelector('.pwd-checker[data-strength="1"]')||a.querySelector('.pwd-checker[data-strength="2"]'))&&(a.classList.add("was-validated"),null===(t=a?.querySelector("input:invalid"))||void 0===t||t.scrollIntoView(),e.preventDefault()),a.querySelector("iam-multiselect[data-is-required][data-error]")&&(a.classList.add("was-validated"),e.preventDefault()))}}),document.addEventListener("keydown",e=>{"Escape"===e.key&&document.querySelector(".dialog--transactional[open], .dialog--acknowledgement[open]")&&(e.preventDefault(),e.stopPropagation())}),Array.from(document.querySelectorAll("label progress")).forEach(e=>{e.closest("label").setAttribute("data-percent",e.getAttribute("value"))})},new((n=void 0)||(n=Promise))(function(e,c){function o(e){try{l(r.next(e))}catch(e){c(e)}}function i(e){try{l(r.throw(e))}catch(e){c(e)}}function l(t){t.done?e(t.value):function(e){return e instanceof n?e:new n(function(t){t(e)})}(t.value).then(o,i)}l((r=r.apply(t,a||[])).next())});var t,a,n,r})});
@@ -6,8 +6,6 @@
6
6
 
7
7
  @use 'components/nav.preload';
8
8
  @use 'components/carousel.config';
9
- @use 'components/multiselect.preload';
10
- @use 'components/tag.preload';
11
9
  @use 'components/multi-step-modal.global';
12
10
 
13
11
  @use 'components/inline-edit.preload';
@@ -27,3 +27,4 @@
27
27
  @use 'elements/progress.scss';
28
28
  @use 'elements/code';
29
29
  @use 'elements/highlight';
30
+ @use 'elements/dropdown';
@@ -1,63 +1,8 @@
1
1
  @use '../_func' as *;
2
2
 
3
-
4
-
5
-
6
-
7
3
  @layer components {
8
- iam-multiselect .tag[slot='checked'] {
9
- margin-bottom: 0.5rem;
10
- order: var(--order, 1);
11
- margin-inline: rem(3);
12
-
13
- &:not(:has(i)):after {
14
- content: '\2715';
15
- margin-left: 0.6em;
16
- font-weight: bold;
17
- }
18
- }
19
-
20
- iam-multiselect .tag[slot='checked']:first-child:last-child {
21
-
22
- margin-inline: 0;
23
- }
24
-
25
- iam-multiselect .tag:not([slot='checked']) {
26
- display: block;
27
- width: 100%;
28
- max-width: 100%;
29
- margin: 0;
30
- text-align: left;
31
- border-radius: 0;
32
- padding-inline: 1rem;
33
- outline: none;
34
- padding-block: 0.5rem;
35
-
36
- &:not(:hover, :focus, :active, :focus-within) {
37
- background: none !important;
38
- }
39
-
40
- &::after {
41
- display: none;
42
- }
43
- }
44
4
 
45
- iam-multiselect:has(label:not([slot='checked']):not([slot='notmatched'])) {
46
- --display-panel: block;
47
- }
48
5
 
49
- iam-multiselect:has(label[slot='checked']) {
50
- --display-button: block;
51
- }
52
6
 
53
- @container style(--theme: dark) {
54
- iam-multiselect :is(.tag, .badge):not([slot='checked']) {
55
- color: var(--colour-heading);
56
- }
57
- }
58
7
 
59
- iam-multiselect[data-single] .tag[slot='checked'],
60
- iam-multiselect[data-single] .tag[slot='checked'] * {
61
- pointer-events: none!important;
62
- }
63
8
  }
@@ -5,6 +5,7 @@
5
5
  @use '../elements/admin-panel.scss' as *;
6
6
  @use '../elements/buttons.scss' as *;
7
7
  @use '../elements/buttons--action.scss' as *;
8
+ @use '../elements/dropdown.scss' as *;
8
9
 
9
10
  @use '../utilities/visually-hidden' as *;
10
11
  @use '../utilities/display' as *;
@@ -15,227 +16,224 @@
15
16
  box-sizing: border-box;
16
17
  }
17
18
 
18
- :host {
19
+ @layer components {
20
+ :host {
19
21
 
20
- margin-bottom: 1.5rem;
21
- }
22
-
23
- .outer {
24
- position: relative;
25
- max-width: var(--input-max-width, 50rem);
26
- display: block;
27
- }
28
-
29
- label {
30
- margin-bottom: 0;
31
- padding-bottom: 0.5rem;
32
- }
33
-
34
- .inner-label:empty {
35
- display: none;
36
- }
37
-
38
- .wrapper {
39
- max-width: var(--input-max-width, 50rem);
22
+ margin-bottom: 1.5rem;
23
+ }
40
24
 
41
- &:after {
42
- content: '';
25
+ .outer {
26
+ position: relative;
27
+ max-width: var(--input-max-width, 50rem);
43
28
  display: block;
44
- position: absolute;
45
- top: 100%;
46
- left: 0;
47
- width: 100%;
48
- height: 1rem;
49
29
  }
50
30
 
51
- input {
52
- margin-bottom: 0.5rem;
31
+ label {
32
+ margin-bottom: 0;
33
+ padding-bottom: 0.5rem;
53
34
  }
54
35
 
55
- .feedback {
56
- position: absolute;
57
- right: 0;
58
- bottom: 100%;
59
- padding: 0.85rem;
60
- width: min-content;
61
- white-space: nowrap;
62
- margin-bottom: 0.5rem;
36
+ .inner-label:empty {
63
37
  display: none;
64
38
  }
65
39
 
66
- &.was-validated .feedback {
67
- display: block;
68
- }
69
- }
40
+ .wrapper {
41
+ max-width: var(--input-max-width, 50rem);
42
+
43
+ &:after {
44
+ content: '';
45
+ display: block;
46
+ position: absolute;
47
+ top: 100%;
48
+ left: 0;
49
+ width: 100%;
50
+ height: 1rem;
51
+ }
70
52
 
71
- .wrapper {
53
+ input {
54
+ margin-bottom: 0.5rem;
55
+ }
72
56
 
73
- input {
57
+ .feedback {
58
+ position: absolute;
59
+ right: 0;
60
+ bottom: 100%;
61
+ padding: 0.85rem;
62
+ width: min-content;
63
+ white-space: nowrap;
64
+ margin-bottom: 0.5rem;
65
+ display: none;
66
+ }
74
67
 
75
- margin-top: unset;
76
- }
77
- }
78
- .wrapper.filled {
79
- display: flex;
80
- flex-direction: row;
81
- flex-wrap: wrap;
82
- align-items: flex-start;
83
- min-height: calc(0.75rem + 0.75rem + 1.25rem + 4px);
84
- padding: 0.5rem 2rem 0 #{rem(13)};
85
- font-size: var(--input-fs, 1rem);
86
- line-height: var(--input-lh, 1.25rem);
87
- color: var(--colour-body);
88
- background-color: var(--colour-canvas-2);
89
- border: 2px solid var(--colour-primary);
90
- border-radius: 0.5rem;
91
-
92
- &:is(:focus-within, .focus-within):not(:disabled) {
93
- border-color: var(--colour-info);
94
- outline: 0;
95
- box-shadow: 0 0 0 0.1rem rgba(30, 190, 230, 0.25);
96
- }
97
-
98
- input {
99
- all: unset;
100
- font-size: 1rem;
101
- line-height: rem(26);
102
- display: var(--search-display,inline-block);
103
- width: 0;
104
- flex-grow: 1;
105
- padding: 0 0.5rem 0 0 !important;
106
- margin-inline: rem(3);
107
- order: 999;
108
- margin-bottom: 0.5rem;
68
+ &.was-validated .feedback {
69
+ display: block;
70
+ }
109
71
  }
110
72
 
111
- .feedback {
112
- display: none !important;
113
- }
73
+ .wrapper {
74
+
75
+ input {
114
76
 
115
- &:is(:focus, .focus):not(:disabled) {
116
- border-color: var(--colour-info);
117
- outline: 0;
118
- box-shadow: 0 0 0 0.1rem rgba(30, 190, 230, 0.25);
77
+ margin-top: unset;
78
+ }
119
79
  }
120
- }
80
+ .wrapper.filled {
81
+ display: flex;
82
+ flex-direction: row;
83
+ flex-wrap: wrap;
84
+ align-items: flex-start;
85
+ min-height: calc(0.75rem + 0.75rem + 1.25rem + 4px);
86
+ padding: 0.5rem 2rem 0 #{rem(13)};
87
+ font-size: var(--input-fs, 1rem);
88
+ line-height: var(--input-lh, 1.25rem);
89
+ color: var(--colour-body);
90
+ background-color: var(--colour-canvas-2);
91
+ border: 2px solid var(--colour-primary);
92
+ border-radius: 0.5rem;
93
+
94
+ &:is(:focus-within, .focus-within):not(:disabled) {
95
+ border-color: var(--colour-info);
96
+ outline: 0;
97
+ box-shadow: 0 0 0 0.1rem rgba(30, 190, 230, 0.25);
98
+ }
121
99
 
122
- button {
123
- position: absolute;
124
- right: 0.5rem;
125
- border: none;
126
- padding-inline: 0.5rem;
127
- display: var(--display-button, none);
100
+ input {
101
+ all: unset;
102
+ font-size: 1rem;
103
+ line-height: rem(26);
104
+ display: var(--search-display,inline-block);
105
+ width: 0;
106
+ flex-grow: 1;
107
+ padding: 0 0.5rem 0 0 !important;
108
+ margin-inline: rem(3);
109
+ order: 999;
110
+ margin-bottom: 0.5rem;
111
+ }
128
112
 
129
- &:after {
130
- content: '\2715';
131
- font-weight: bold;
132
- }
133
- }
113
+ .feedback {
114
+ display: none !important;
115
+ }
134
116
 
135
- .dropdown {
136
- position: absolute;
137
- top: calc(100% + 0.5rem);
138
- padding: 0;
139
- left: 0;
140
- width: 100%;
141
- margin: 0;
142
- z-index: 99;
143
- display: none;
144
- max-height: rem(244) !important;
145
- overflow: auto;
146
-
147
- &:before {
148
- display: none;
117
+ &:is(:focus, .focus):not(:disabled) {
118
+ border-color: var(--colour-info);
119
+ outline: 0;
120
+ box-shadow: 0 0 0 0.1rem rgba(30, 190, 230, 0.25);
121
+ }
149
122
  }
150
- }
151
123
 
152
- .wrapper:is(:focus-within) .dropdown {
153
- display: var(--display-panel, none);
154
- }
124
+ button {
125
+ position: absolute;
126
+ right: 0.5rem;
127
+ border: none;
128
+ padding-inline: 0.5rem;
129
+ display: var(--display-button, none);
155
130
 
156
- @media (hover: hover) {
157
- .wrapper .dropdown:hover {
158
- display: var(--display-panel, none);
131
+ &:after {
132
+ content: '\2715';
133
+ font-weight: bold;
134
+ }
159
135
  }
160
- }
161
136
 
162
- @media (hover: none) {
163
- :host(.hover) .wrapper .dropdown {
164
- display: block;
137
+ .wrapper:is(:focus-within) .dropdown {
138
+ display: var(--display-panel, none);
165
139
  }
166
- }
167
140
 
168
- // Inline edit
169
- :host-context(:focus-within) {
170
- input {
171
- background-color: none !important;
141
+ @media (hover: hover) {
142
+ .wrapper .dropdown:hover {
143
+ display: var(--display-panel, none);
144
+ }
172
145
  }
173
- }
174
- :host-context(iam-inline-edit) {
175
- display: block;
176
- --display-btns: none;
177
146
 
178
- label:hover + .outer:not(:focus-within) .wrapper:not([data-mousedown]),
179
- .outer:not(:focus-within) .wrapper:not([data-mousedown]):hover {
180
- background-color: var(--colour-light);
147
+ @media (hover: none) {
148
+ :host(.hover) .wrapper .dropdown {
149
+ display: block;
150
+ }
151
+ }
181
152
 
153
+ // Inline edit
154
+ :host-context(:focus-within) {
182
155
  input {
156
+ background-color: none !important;
157
+ }
158
+ }
159
+ :host-context(iam-inline-edit) {
160
+ display: block;
161
+ --display-btns: none;
162
+
163
+ label:hover + .outer:not(:focus-within) .wrapper:not([data-mousedown]),
164
+ .outer:not(:focus-within) .wrapper:not([data-mousedown]):hover {
183
165
  background-color: var(--colour-light);
166
+
167
+ input {
168
+ background-color: var(--colour-light);
169
+ }
170
+
171
+ .dropdown {
172
+ display: none;
173
+ }
184
174
  }
185
175
 
186
- .dropdown {
187
- display: none;
176
+ .wrapper {
177
+ margin-bottom: 0;
188
178
  }
189
- }
190
179
 
191
- .wrapper {
192
- margin-bottom: 0;
180
+ .wrapper:not(.filled):not(:focus-within):not([data-mousedown]) {
181
+ input {
182
+ border-color: transparent;
183
+ background: none;
184
+ margin-left: var(--input-ms,-1rem);
185
+ width: calc(100% + 1rem);
186
+ max-width: calc(100% + 1rem);
187
+ box-shadow: none;
188
+ }
189
+
190
+ .dropdown {
191
+ display: none;
192
+ }
193
+ }
194
+ .wrapper.filled:not(:focus-within):not([data-mousedown]) {
195
+ background: none;
196
+ border: none;
197
+ padding-left: 0;
198
+ }
193
199
  }
194
200
 
195
- .wrapper:not(.filled):not(:focus-within):not([data-mousedown]) {
196
- input {
197
- border-color: transparent;
198
- background: none;
199
- margin-left: var(--input-ms,-1rem);
200
- width: calc(100% + 1rem);
201
- max-width: calc(100% + 1rem);
202
- box-shadow: none;
201
+ :host([data-single]){
202
+
203
+ .wrapper.filled{
204
+
205
+ slot[name='checked'] {
206
+ pointer-events: none;
207
+ }
203
208
  }
204
209
 
205
- .dropdown {
210
+ #clear {
211
+ display: none;
212
+ }
213
+ ::slotted([slot='checked'])::after {
206
214
  display: none;
207
215
  }
208
216
  }
209
- .wrapper.filled:not(:focus-within):not([data-mousedown]) {
210
- background: none;
211
- border: none;
212
- padding-left: 0;
213
- }
214
- }
215
-
216
- :host([data-single]){
217
+ :host-context(td){
217
218
 
218
- .wrapper.filled{
219
-
220
- slot[name='checked'] {
221
- pointer-events: none;
222
- }
219
+ input,
220
+ textarea,
221
+ select {
222
+ margin-left: 0!important;
223
+ width: 100%!important;
224
+ max-width: 100%!important;
225
+ }
223
226
  }
224
227
 
225
- #clear {
226
- display: none;
228
+ ::slotted([slot='checked']) {
229
+ margin-bottom: 0.5rem;
230
+ order: var(--order, 1);
231
+ margin-inline: rem(3);
227
232
  }
233
+
228
234
  ::slotted([slot='checked'])::after {
229
- display: none;
235
+ content: '\2715';
236
+ margin-left: 0.6em;
237
+ font-weight: bold;
230
238
  }
231
- }
232
- :host-context(td){
233
-
234
- input,
235
- textarea,
236
- select {
237
- margin-left: 0!important;
238
- width: 100%!important;
239
- max-width: 100%!important;
240
- }
241
239
  }