@iamproperty/components 7.2.2--beta3 → 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.
- package/assets/css/components/actionbar.component.css +1 -1
- package/assets/css/components/actionbar.component.css.map +1 -1
- package/assets/css/components/actionbar.global.css +1 -1
- package/assets/css/components/actionbar.global.css.map +1 -1
- package/assets/css/components/barchart.component.css +1 -1
- package/assets/css/components/barchart.component.css.map +1 -1
- package/assets/css/components/bento-grid.global.css.map +1 -1
- package/assets/css/components/calendar.component.css +1 -0
- package/assets/css/components/calendar.component.css.map +1 -0
- package/assets/css/components/calendar.config.css +1 -0
- package/assets/css/components/calendar.config.css.map +1 -0
- package/assets/css/components/card.component.css +1 -1
- package/assets/css/components/card.component.css.map +1 -1
- package/assets/css/components/carousel.component.css +1 -1
- package/assets/css/components/carousel.component.css.map +1 -1
- package/assets/css/components/charts.module.css.map +1 -1
- package/assets/css/components/collapsible-side.css +1 -1
- package/assets/css/components/collapsible-side.css.map +1 -1
- package/assets/css/components/content.component.css +1 -0
- package/assets/css/components/content.component.css.map +1 -0
- package/assets/css/components/doughnutchart.component.css +1 -1
- package/assets/css/components/doughnutchart.component.css.map +1 -1
- package/assets/css/components/fileupload.css.map +1 -1
- package/assets/css/components/inline-edit.css +1 -1
- package/assets/css/components/inline-edit.css.map +1 -1
- package/assets/css/components/marketing.component.css +1 -0
- package/assets/css/components/marketing.component.css.map +1 -0
- package/assets/css/components/menu.component.css +1 -1
- package/assets/css/components/menu.component.css.map +1 -1
- package/assets/css/components/menu.css +1 -1
- package/assets/css/components/menu.css.map +1 -1
- package/assets/css/components/milestone.css +1 -0
- package/assets/css/components/milestone.css.map +1 -0
- package/assets/css/components/multiselect.css +1 -1
- package/assets/css/components/multiselect.css.map +1 -1
- package/assets/css/components/nav.component.css +1 -1
- package/assets/css/components/nav.component.css.map +1 -1
- package/assets/css/components/nav.global.css +1 -1
- package/assets/css/components/nav.global.css.map +1 -1
- package/assets/css/components/pagination.css.map +1 -1
- package/assets/css/components/rank.component.css +1 -1
- package/assets/css/components/rank.component.css.map +1 -1
- package/assets/css/components/rankings.component.css +1 -1
- package/assets/css/components/rankings.component.css.map +1 -1
- package/assets/css/components/rankings.global.css +1 -1
- package/assets/css/components/rankings.global.css.map +1 -1
- package/assets/css/components/slider.css.map +1 -1
- package/assets/css/components/split-button.component.css +1 -0
- package/assets/css/components/split-button.component.css.map +1 -0
- package/assets/css/components/table-basic.global.css.map +1 -1
- package/assets/css/components/table.global.css.map +1 -1
- package/assets/css/core.min.css +1 -1
- package/assets/css/core.min.css.map +1 -1
- package/assets/css/mobile-core.min.css +1 -1
- package/assets/css/mobile-core.min.css.map +1 -1
- package/assets/css/mobile.min.css +1 -1
- package/assets/css/mobile.min.css.map +1 -1
- package/assets/css/style.min.css +1 -1
- package/assets/css/style.min.css.map +1 -1
- package/assets/js/components/accordion/accordion.component.min.js +1 -1
- package/assets/js/components/actionbar/actionbar.component.js +51 -31
- package/assets/js/components/actionbar/actionbar.component.min.js +17 -17
- package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
- package/assets/js/components/address-lookup/address-lookup.component.min.js +1 -1
- package/assets/js/components/advanced-select/advanced-select.component.js +63 -0
- package/assets/js/components/advanced-select/advanced-select.component.min.js +23 -0
- package/assets/js/components/advanced-select/advanced-select.component.min.js.map +1 -0
- package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
- package/assets/js/components/barchart/barchart.component.min.js +2 -2
- package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
- package/assets/js/components/calendar/calendar.component.js +1083 -0
- package/assets/js/components/calendar/calendar.component.min.js +170 -0
- package/assets/js/components/calendar/calendar.component.min.js.map +1 -0
- package/assets/js/components/card/card.component.js +20 -8
- package/assets/js/components/card/card.component.min.js +10 -10
- package/assets/js/components/card/card.component.min.js.map +1 -1
- package/assets/js/components/carousel/carousel.component.min.js +2 -2
- package/assets/js/components/collapsible-side/collapsible-side.component.js +47 -12
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js +6 -5
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js.map +1 -1
- package/assets/js/components/content/content.component.js +66 -0
- package/assets/js/components/content/content.component.min.js +15 -0
- package/assets/js/components/content/content.component.min.js.map +1 -0
- package/assets/js/components/doughnutchart/doughnutchart.component.min.js +2 -2
- package/assets/js/components/fileupload/fileupload.component.min.js +1 -1
- package/assets/js/components/filter-card/filter-card.component.min.js +1 -1
- package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
- package/assets/js/components/header/header.component.min.js +1 -1
- package/assets/js/components/inline-edit/inline-edit.component.min.js +5 -5
- package/assets/js/components/marketing/marketing.component.js +1 -1
- package/assets/js/components/marketing/marketing.component.min.js +2 -2
- package/assets/js/components/marketing/marketing.component.min.js.map +1 -1
- package/assets/js/components/menu/menu.component.js +148 -161
- package/assets/js/components/menu/menu.component.min.js +4 -69
- package/assets/js/components/menu/menu.component.min.js.map +1 -1
- package/assets/js/components/milestone/milestone.component.js +38 -0
- package/assets/js/components/milestone/milestone.component.min.js +15 -0
- package/assets/js/components/milestone/milestone.component.min.js.map +1 -0
- package/assets/js/components/milestone-group/milestone-group.component.js +35 -0
- package/assets/js/components/milestone-group/milestone-group.component.min.js +13 -0
- package/assets/js/components/milestone-group/milestone-group.component.min.js.map +1 -0
- package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
- package/assets/js/components/multiselect/multiselect.component.js +54 -2
- package/assets/js/components/multiselect/multiselect.component.min.js +5 -5
- package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
- package/assets/js/components/nav/nav.component.js +19 -0
- package/assets/js/components/nav/nav.component.min.js +6 -6
- package/assets/js/components/nav/nav.component.min.js.map +1 -1
- package/assets/js/components/notification/notification.component.js +17 -11
- package/assets/js/components/notification/notification.component.min.js +4 -4
- package/assets/js/components/notification/notification.component.min.js.map +1 -1
- package/assets/js/components/pagination/pagination.component.min.js +1 -1
- package/assets/js/components/rank/rank.component.js +346 -210
- package/assets/js/components/rank/rank.component.min.js +346 -211
- package/assets/js/components/rank/rank.component.min.js.map +1 -1
- package/assets/js/components/rankings/rankings.component.js +17 -8
- package/assets/js/components/rankings/rankings.component.min.js +14 -8
- package/assets/js/components/rankings/rankings.component.min.js.map +1 -1
- package/assets/js/components/record-card/record-card.component.min.js +1 -1
- package/assets/js/components/search/search.component.js +5 -3
- package/assets/js/components/search/search.component.min.js +6 -6
- package/assets/js/components/search/search.component.min.js.map +1 -1
- package/assets/js/components/slider/slider.component.min.js +1 -1
- package/assets/js/components/split-button/split-button.component.js +60 -0
- package/assets/js/components/split-button/split-button.component.min.js +34 -0
- package/assets/js/components/split-button/split-button.component.min.js.map +1 -0
- package/assets/js/components/table/table.component.js +12 -0
- package/assets/js/components/table/table.component.min.js +3 -3
- package/assets/js/components/table/table.component.min.js.map +1 -1
- package/assets/js/components/table-ajax/table-ajax.component.js +12 -0
- package/assets/js/components/table-ajax/table-ajax.component.min.js +3 -3
- package/assets/js/components/table-ajax/table-ajax.component.min.js.map +1 -1
- package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
- package/assets/js/components/table-basic/table-basic.component.min.js.map +1 -1
- package/assets/js/components/table-no-submit/table-no-submit.component.js +12 -0
- package/assets/js/components/table-no-submit/table-no-submit.component.min.js +3 -3
- package/assets/js/components/table-no-submit/table-no-submit.component.min.js.map +1 -1
- package/assets/js/components/table-submit/table-submit.component.js +12 -0
- package/assets/js/components/table-submit/table-submit.component.min.js +3 -3
- package/assets/js/components/table-submit/table-submit.component.min.js.map +1 -1
- package/assets/js/components/tabs/tabs.component.min.js +1 -1
- package/assets/js/components/video-card/video-card.component.min.js +1 -1
- package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
- package/assets/js/components.js +58 -0
- package/assets/js/modules/advanced-select.js +106 -0
- package/assets/js/modules/dialogs.js +53 -51
- package/assets/js/modules/dynamicEvents.js +7 -0
- package/assets/js/modules/milestone-group.js +30 -0
- package/assets/js/modules/milestone.js +89 -0
- package/assets/js/modules/table.js +11 -1
- package/assets/js/modules/videos.js +1 -1
- package/assets/js/scripts.bundle.js +3 -3
- package/assets/js/scripts.bundle.js.map +1 -1
- package/assets/js/scripts.bundle.min.js +2 -2
- package/assets/js/scripts.bundle.min.js.map +1 -1
- package/assets/js/scripts.js +4 -0
- package/assets/sass/_components.scss +11 -0
- package/assets/sass/_functions/utility-mixins.scss +41 -0
- package/assets/sass/_functions/variables.scss +11 -8
- package/assets/sass/components/actionbar.component.scss +3 -4
- package/assets/sass/components/actionbar.global.scss +4 -4
- package/assets/sass/components/bento-grid.global.scss +0 -1
- package/assets/sass/components/calendar.component.scss +1380 -0
- package/assets/sass/components/calendar.config.scss +476 -0
- package/assets/sass/components/card.component.scss +4 -34
- package/assets/sass/components/carousel.component.scss +5 -0
- package/assets/sass/components/charts.module.scss +0 -2
- package/assets/sass/components/collapsible-side.scss +91 -95
- package/assets/sass/components/content.component.scss +18 -0
- package/assets/sass/components/inline-edit.scss +2 -0
- package/assets/sass/components/{marketing.scss → marketing.component.scss} +2 -6
- package/assets/sass/components/menu.component.scss +118 -31
- package/assets/sass/components/menu.scss +68 -7
- package/assets/sass/components/milestone.scss +207 -0
- package/assets/sass/components/multiselect.scss +3 -0
- package/assets/sass/components/nav.component.scss +1 -0
- package/assets/sass/components/nav.global.scss +30 -0
- package/assets/sass/components/rank.component.scss +197 -33
- package/assets/sass/components/rankings.component.scss +39 -35
- package/assets/sass/components/rankings.global.scss +66 -10
- package/assets/sass/components/split-button.component.scss +77 -0
- package/assets/sass/components/table-basic.global.scss +2 -4
- package/assets/sass/components/table.global.scss +4 -4
- package/assets/sass/elements/badge-tag.scss +5 -1
- package/assets/sass/elements/buttons--compact.scss +4 -0
- package/assets/sass/elements/buttons--global.scss +1 -1
- package/assets/sass/elements/details.scss +0 -1
- package/assets/sass/elements/dialog.scss +1 -3
- package/assets/sass/elements/forms.scss +148 -22
- package/assets/sass/elements/links.scss +132 -4
- package/assets/sass/elements/lists.scss +61 -0
- package/assets/sass/elements/popover.scss +64 -10
- package/assets/sass/elements/toggle-button.scss +7 -8
- package/assets/sass/elements/type.scss +7 -10
- package/assets/sass/foundations/reboot.scss +3 -3
- package/assets/sass/templates/form.scss +0 -2
- package/assets/ts/components/actionbar/actionbar.component.ts +49 -23
- package/assets/ts/components/advanced-select/advanced-select.component.ts +74 -0
- package/assets/ts/components/calendar/calendar.component.ts +1460 -0
- package/assets/ts/components/card/card.component.ts +22 -14
- package/assets/ts/components/collapsible-side/collapsible-side.component.ts +53 -12
- package/assets/ts/components/content/content.component.ts +78 -0
- package/assets/ts/components/marketing/marketing.component.ts +1 -1
- package/assets/ts/components/menu/menu.component.ts +162 -173
- package/assets/ts/components/milestone/milestone.component.ts +45 -0
- package/assets/ts/components/milestone-group/milestone-group.component.ts +41 -0
- package/assets/ts/components/multiselect/multiselect.component.ts +69 -3
- package/assets/ts/components/nav/nav.component.ts +25 -0
- package/assets/ts/components/notification/notification.component.ts +34 -11
- package/assets/ts/components/rank/rank.component.ts +345 -214
- package/assets/ts/components/rankings/rankings.component.ts +28 -15
- package/assets/ts/components/search/search.component.ts +6 -4
- package/assets/ts/components/split-button/split-button.component.ts +69 -0
- package/assets/ts/components/table/table.component.ts +14 -0
- package/assets/ts/components/table-ajax/table-ajax.component.ts +14 -0
- package/assets/ts/components/table-no-submit/table-no-submit.component.ts +14 -0
- package/assets/ts/components/table-submit/table-submit.component.ts +14 -0
- package/assets/ts/components/video-card/video-card.component.ts +2 -3
- package/assets/ts/components.ts +63 -0
- package/assets/ts/modules/advanced-select.ts +125 -0
- package/assets/ts/modules/dialogs.ts +64 -61
- package/assets/ts/modules/dynamicEvents.ts +12 -1
- package/assets/ts/modules/milestone-group.ts +42 -0
- package/assets/ts/modules/milestone.ts +122 -0
- package/assets/ts/modules/table.ts +15 -1
- package/assets/ts/modules/videos.ts +19 -37
- package/assets/ts/scripts.ts +5 -3
- package/dist/components.es.js +41 -1923
- package/dist/components.umd.js +127 -171
- package/package.json +1 -1
- package/src/components/AdvancedSelect/AdvancedSelect.vue +23 -0
- package/src/components/Calendar/Calendar.vue +26 -0
- package/src/components/Card/Card.vue +1 -1
- package/src/components/CollapsibleSideMenu/CollapsibleSideMenu.vue +7 -13
- package/src/components/Content/Content.vue +23 -0
- package/src/components/Milestones/Milestone.vue +27 -0
- package/src/components/Milestones/MilestoneGroup.vue +27 -0
- package/src/components/Rank/Rank.vue +1 -2
- package/src/components/Rankings/Rankings.vue +9 -10
- package/src/components/SplitButton/README.md +19 -0
- package/src/components/SplitButton/SplitButton.vue +26 -0
- package/src/index.js +44 -41
- package/assets/css/components/marketing.css +0 -1
- package/assets/css/components/marketing.css.map +0 -1
- package/assets/css/components/nav.old.css +0 -1
- package/assets/css/components/nav.old.css.map +0 -1
- 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}"
|
|
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}'
|
|
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.
|
|
2
|
+
* iamKey v7.4.0
|
|
3
3
|
* Copyright 2022-2025 iamproperty
|
|
4
|
-
*/import
|
|
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 "${
|
|
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(
|
|
23
|
-
`,", ");
|
|
24
|
-
`,", ");
|
|
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":"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"}
|
|
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.
|
|
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);
|