@iamproperty/components 7.5.1--beta6 → 7.5.1--beta8
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/address-lookup.component.css +1 -1
- package/assets/css/components/address-lookup.component.css.map +1 -1
- package/assets/css/components/applied-filters.css +1 -1
- package/assets/css/components/applied-filters.css.map +1 -1
- package/assets/css/components/calendar.component.css +1 -1
- package/assets/css/components/calendar.component.css.map +1 -1
- package/assets/css/components/card.component.css +1 -1
- package/assets/css/components/card.component.css.map +1 -1
- package/assets/css/components/fileupload.css +1 -1
- package/assets/css/components/fileupload.css.map +1 -1
- package/assets/css/components/input-range.component.css +1 -0
- package/assets/css/components/input-range.component.css.map +1 -0
- package/assets/css/components/input.component.css +1 -0
- package/assets/css/components/input.component.css.map +1 -0
- package/assets/css/components/modal.component.css +1 -0
- package/assets/css/components/modal.component.css.map +1 -0
- package/assets/css/components/multi-step-modal.component.css +1 -0
- package/assets/css/components/multi-step-modal.component.css.map +1 -0
- package/assets/css/components/multi-step-modal.global.css +1 -0
- package/assets/css/components/multi-step-modal.global.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/pagination.css +1 -1
- package/assets/css/components/pagination.css.map +1 -1
- package/assets/css/components/password.component.css +1 -0
- package/assets/css/components/password.component.css.map +1 -0
- package/assets/css/components/slider.css +1 -1
- package/assets/css/components/slider.css.map +1 -1
- package/assets/css/components/tabs.component.css +1 -1
- package/assets/css/components/tabs.component.css.map +1 -1
- package/assets/css/components/tabs.config.css +1 -1
- package/assets/css/components/tabs.config.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.js +1 -1
- package/assets/js/components/accordion/accordion.component.min.js +3 -3
- package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
- package/assets/js/components/actionbar/actionbar.component.js +2 -4
- package/assets/js/components/actionbar/actionbar.component.min.js +4 -4
- package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
- package/assets/js/components/address-lookup/address-lookup.component.js +45 -0
- package/assets/js/components/address-lookup/address-lookup.component.min.js +12 -4
- package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
- package/assets/js/components/advanced-select/advanced-select.component.min.js +1 -1
- package/assets/js/components/applied-filters/applied-filters.component.js +0 -2
- package/assets/js/components/applied-filters/applied-filters.component.min.js +5 -7
- package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
- package/assets/js/components/barchart/barchart.component.min.js +1 -1
- package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
- package/assets/js/components/calendar/calendar.component.min.js +5 -5
- package/assets/js/components/card/card.component.min.js +8 -8
- package/assets/js/components/card/card.component.min.js.map +1 -1
- package/assets/js/components/carousel/carousel.component.min.js +1 -1
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
- package/assets/js/components/content/content.component.min.js +1 -1
- package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
- package/assets/js/components/doughnutchart/doughnutchart.component.min.js +1 -1
- package/assets/js/components/fileupload/fileupload.component.min.js +4 -4
- package/assets/js/components/filter-card/filter-card.component.js +19 -0
- package/assets/js/components/filter-card/filter-card.component.min.js +4 -4
- package/assets/js/components/filter-card/filter-card.component.min.js.map +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 +1 -1
- package/assets/js/components/input/input.component.js +128 -0
- package/assets/js/components/input/input.component.min.js +16 -0
- package/assets/js/components/input/input.component.min.js.map +1 -0
- package/assets/js/components/input-range/input-range.component.js +62 -0
- package/assets/js/components/input-range/input-range.component.min.js +14 -0
- package/assets/js/components/input-range/input-range.component.min.js.map +1 -0
- package/assets/js/components/marketing/marketing.component.min.js +1 -1
- package/assets/js/components/menu/menu.component.min.js +1 -1
- package/assets/js/components/milestone/milestone.component.min.js +1 -1
- package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
- package/assets/js/components/modal/modal.component.js +141 -0
- package/assets/js/components/modal/modal.component.min.js +28 -0
- package/assets/js/components/modal/modal.component.min.js.map +1 -0
- package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
- package/assets/js/components/multi-step-modal/multi-step-modal.component.js +233 -0
- package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +17 -0
- package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js.map +1 -0
- package/assets/js/components/multiselect/multiselect.component.min.js +4 -4
- package/assets/js/components/nav/nav.component.min.js +5 -5
- package/assets/js/components/nav/nav.component.min.js.map +1 -1
- package/assets/js/components/notification/notification.component.min.js +1 -1
- package/assets/js/components/pagination/pagination.component.js +0 -1
- package/assets/js/components/pagination/pagination.component.min.js +4 -4
- package/assets/js/components/pagination/pagination.component.min.js.map +1 -1
- package/assets/js/components/password/password.component.js +93 -0
- package/assets/js/components/password/password.component.min.js +17 -0
- package/assets/js/components/password/password.component.min.js.map +1 -0
- package/assets/js/components/rank/rank.component.min.js +1 -1
- package/assets/js/components/rankings/rankings.component.min.js +1 -1
- package/assets/js/components/record-card/record-card.component.min.js +4 -4
- package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
- package/assets/js/components/search/search.component.min.js +1 -1
- package/assets/js/components/slider/slider.component.min.js +3 -3
- package/assets/js/components/split-button/split-button.component.min.js +1 -1
- package/assets/js/components/std-address-lookup/std-address-lookup.component.js +2 -0
- package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +18 -8
- package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
- package/assets/js/components/table/table.component.min.js +4 -4
- package/assets/js/components/table/table.component.min.js.map +1 -1
- package/assets/js/components/table-ajax/table-ajax.component.min.js +4 -4
- 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 +2 -2
- 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.min.js +1 -1
- 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.min.js +2 -2
- package/assets/js/components/table-submit/table-submit.component.min.js.map +1 -1
- package/assets/js/components/tabs/tabs.component.min.js +2 -2
- package/assets/js/components/video-card/video-card.component.min.js +4 -4
- package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
- package/assets/js/components/word-count/word-count.component.min.js +1 -1
- package/assets/js/modules/applied-filters.js +80 -62
- package/assets/js/modules/card.module.js +6 -1
- package/assets/js/modules/dialogs.js +6 -2
- package/assets/js/modules/password.js +72 -0
- package/assets/js/modules/table.js +103 -32
- package/assets/js/scripts.bundle.js +2 -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 +0 -2
- package/assets/sass/_components.scss +2 -0
- package/assets/sass/_elements.scss +2 -0
- package/assets/sass/components/actionbar.component.scss +1 -0
- package/assets/sass/components/address-lookup.component.scss +20 -0
- package/assets/sass/components/applied-filters.scss +10 -14
- package/assets/sass/components/input-range.component.scss +38 -0
- package/assets/sass/components/input.component.scss +102 -0
- package/assets/sass/components/modal.component.scss +269 -0
- package/assets/sass/components/multi-step-modal.component.scss +255 -0
- package/assets/sass/components/multi-step-modal.global.scss +92 -0
- package/assets/sass/components/password.component.scss +60 -0
- package/assets/sass/components/tabs.config.scss +2 -2
- package/assets/sass/elements/badge-tag.scss +0 -1
- package/assets/sass/elements/details.scss +12 -7
- package/assets/sass/elements/dialog.scss +46 -5
- package/assets/sass/elements/forms.scss +41 -177
- package/assets/sass/elements/hr.scss +1 -1
- package/assets/sass/elements/modal.scss +19 -21
- package/assets/sass/elements/prefix.scss +115 -0
- package/assets/ts/components/accordion/accordion.component.ts +1 -1
- package/assets/ts/components/actionbar/actionbar.component.ts +3 -10
- package/assets/ts/components/address-lookup/address-lookup.component.ts +60 -0
- package/assets/ts/components/applied-filters/applied-filters.component.ts +0 -2
- package/assets/ts/components/filter-card/filter-card.component.ts +27 -0
- package/assets/ts/components/input/input.component.ts +168 -0
- package/assets/ts/components/input-range/input-range.component.ts +78 -0
- package/assets/ts/components/modal/modal.component.ts +188 -0
- package/assets/ts/components/multi-step-modal/multi-step-modal.component.ts +304 -0
- package/assets/ts/components/pagination/pagination.component.ts +0 -2
- package/assets/ts/components/password/password.component.ts +118 -0
- package/assets/ts/components/std-address-lookup/std-address-lookup.component.ts +2 -1
- package/assets/ts/modules/applied-filters.ts +110 -71
- package/assets/ts/modules/card.module.ts +9 -4
- package/assets/ts/modules/dialogs.ts +6 -2
- package/assets/ts/modules/password.ts +82 -0
- package/assets/ts/modules/table.ts +102 -12
- package/assets/ts/scripts.ts +2 -2
- package/dist/components.es.js +641 -959
- package/dist/components.umd.js +275 -182
- package/package.json +2 -2
- package/src/components/Input/Input.vue +19 -363
- package/src/components/InputRange/InputRange.vue +22 -0
- package/src/components/Modal/Modal.vue +22 -0
- package/src/components/MultiStepModal/MultiStepModal.vue +23 -0
- package/src/components/{PasswordIndicator/PasswordIndicator.vue → Password/Password.vue} +23 -23
- package/assets/js/components/password-indicator/password-indicator.component.js +0 -19
- package/assets/js/components/password-indicator/password-indicator.component.min.js +0 -7
- package/assets/js/components/password-indicator/password-indicator.component.min.js.map +0 -1
- package/assets/js/modules/form.js +0 -125
- package/assets/js/modules/inputs.js +0 -151
- package/assets/js/modules/password-indicator.js +0 -21
- package/assets/ts/components/password-indicator/password-indicator.component.ts +0 -24
- package/assets/ts/modules/form.ts +0 -166
- package/assets/ts/modules/inputs.ts +0 -181
- package/assets/ts/modules/password-indicator.ts +0 -29
|
@@ -34,6 +34,14 @@ class iamAddressLookup extends HTMLElement {
|
|
|
34
34
|
<link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous" />
|
|
35
35
|
<div class="wrapper">
|
|
36
36
|
|
|
37
|
+
<div class="matched d-none">
|
|
38
|
+
<div class="inner">
|
|
39
|
+
<p><span class="matched-address"></span></p>
|
|
40
|
+
<button class="link use-matched">Yes, use this address</button>
|
|
41
|
+
<button class="link use-entered">No, use the address I entered</button>
|
|
42
|
+
</div>
|
|
43
|
+
<span class="invalid-feedback">We found a matching address based on the details you entered. Is this address correct?</span>
|
|
44
|
+
</div>
|
|
37
45
|
<div class="postcode-lookup was-validated">
|
|
38
46
|
<div>
|
|
39
47
|
<label class="mb-1"><span class="title text-lowercase"></span>
|
|
@@ -101,6 +109,11 @@ class iamAddressLookup extends HTMLElement {
|
|
|
101
109
|
let pageNumber = 1;
|
|
102
110
|
const atleastone = this.querySelector('.atleastone');
|
|
103
111
|
|
|
112
|
+
const matchedAddress = this.shadowRoot.querySelector('.matched-address');
|
|
113
|
+
const matchedAddressWrapper = this.shadowRoot.querySelector('.matched');
|
|
114
|
+
const matchedAddressUse = this.shadowRoot.querySelector('.matched .use-matched');
|
|
115
|
+
const matchedAddressEntered = this.shadowRoot.querySelector('.matched .use-entered');
|
|
116
|
+
|
|
104
117
|
Array.from(this.shadowRoot.querySelectorAll('.title')).forEach((titleElement) => {
|
|
105
118
|
titleElement.innerHTML = title;
|
|
106
119
|
});
|
|
@@ -588,6 +601,53 @@ class iamAddressLookup extends HTMLElement {
|
|
|
588
601
|
});
|
|
589
602
|
// #endregion
|
|
590
603
|
|
|
604
|
+
// #region Matched address
|
|
605
|
+
|
|
606
|
+
if(this.hasAttribute('data-matched')){
|
|
607
|
+
|
|
608
|
+
matchedAddressWrapper?.classList.remove('d-none');
|
|
609
|
+
|
|
610
|
+
|
|
611
|
+
if(this.hasAttribute('data-matched-label'))
|
|
612
|
+
matchedAddress?.innerHTML = this.getAttribute('data-matched-label');
|
|
613
|
+
|
|
614
|
+
matchedAddressEntered?.addEventListener('click', () => {
|
|
615
|
+
|
|
616
|
+
matchedAddressWrapper?.remove();
|
|
617
|
+
|
|
618
|
+
const useCheckbox = this.shadowRoot?.querySelector('[name="use"]');
|
|
619
|
+
useCheckbox.checked = true;
|
|
620
|
+
|
|
621
|
+
lookupWrapper.classList.add('js-hide');
|
|
622
|
+
manualWrapper.classList.remove('js-hide');
|
|
623
|
+
|
|
624
|
+
const values = JSON.parse(this.getAttribute('data-use'));
|
|
625
|
+
|
|
626
|
+
Object.keys(values).forEach((key) => {
|
|
627
|
+
const value = values[key];
|
|
628
|
+
if (this.querySelector(`[data-name="${key}"]`)) this.querySelector(`[data-name="${key}"]`).value = value;
|
|
629
|
+
else if (this.querySelector(`[name="${key}"]`)) this.querySelector(`[name="${key}"]`).value = value;
|
|
630
|
+
});
|
|
631
|
+
|
|
632
|
+
checkFilled(this);
|
|
633
|
+
});
|
|
634
|
+
|
|
635
|
+
|
|
636
|
+
matchedAddressUse?.addEventListener('click', () => {
|
|
637
|
+
|
|
638
|
+
matchedAddressWrapper?.remove();
|
|
639
|
+
|
|
640
|
+
const values = JSON.parse(this.getAttribute('data-matched'));
|
|
641
|
+
|
|
642
|
+
fillInputs(values);
|
|
643
|
+
checkFilled(this);
|
|
644
|
+
});
|
|
645
|
+
}
|
|
646
|
+
else {
|
|
647
|
+
matchedAddressWrapper?.remove();
|
|
648
|
+
}
|
|
649
|
+
// #endregion
|
|
650
|
+
|
|
591
651
|
advancedSelect(this, lookup, list, true);
|
|
592
652
|
}
|
|
593
653
|
}
|
|
@@ -74,6 +74,33 @@ class iamFilerCard extends HTMLElement {
|
|
|
74
74
|
|
|
75
75
|
trackComponent(cardComponent, 'iam-filter-card', ['select-card', 'unselect-card']);
|
|
76
76
|
}
|
|
77
|
+
|
|
78
|
+
static get observedAttributes(): any {
|
|
79
|
+
return ['data-total'];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
attributeChangedCallback(attrName, oldVal, newVal): void {
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
switch (attrName) {
|
|
87
|
+
case 'data-total': {
|
|
88
|
+
if (oldVal != newVal) {
|
|
89
|
+
|
|
90
|
+
const cardBody = this.shadowRoot.querySelector('.card__body');
|
|
91
|
+
|
|
92
|
+
if(!cardBody?.querySelector('.card__total'))
|
|
93
|
+
cardBody.insertAdjacentHTML('beforeend',`<div class="card__total">${newVal}</div>`);
|
|
94
|
+
else {
|
|
95
|
+
cardBody?.querySelector('.card__total')?.innerHTML = newVal;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
}
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
77
104
|
}
|
|
78
105
|
|
|
79
106
|
export default iamFilerCard;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { trackComponent, trackComponentRegistered } from '../_global';
|
|
2
|
+
|
|
3
|
+
trackComponentRegistered('iam-iamPrefix');
|
|
4
|
+
class iamInput extends HTMLElement {
|
|
5
|
+
constructor() {
|
|
6
|
+
super();
|
|
7
|
+
this.attachShadow({ mode: 'open' });
|
|
8
|
+
|
|
9
|
+
const assetLocation = document.body.hasAttribute('data-assets-location')
|
|
10
|
+
? document.body.getAttribute('data-assets-location')
|
|
11
|
+
: '/assets';
|
|
12
|
+
|
|
13
|
+
const loadCSS = `@import "${assetLocation}/css/components/input.component.css";`;
|
|
14
|
+
|
|
15
|
+
const template = document.createElement('template');
|
|
16
|
+
template.innerHTML = `
|
|
17
|
+
<style>
|
|
18
|
+
${loadCSS}
|
|
19
|
+
</style>
|
|
20
|
+
<link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous">
|
|
21
|
+
<div class="wrapper" part="wrapper">
|
|
22
|
+
<span part="prefix"><slot name="prefix"></slot></span>
|
|
23
|
+
<slot></slot>
|
|
24
|
+
<slot part="suffix"><slot name="suffix"></slot></slot>
|
|
25
|
+
</div>
|
|
26
|
+
`;
|
|
27
|
+
this.shadowRoot.appendChild(template.content.cloneNode(true));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
connectedCallback(): void {
|
|
31
|
+
|
|
32
|
+
const component = this;
|
|
33
|
+
const input = this.querySelector('input');
|
|
34
|
+
const inputType = input?.hasAttribute('type') ? input?.getAttribute('type') : 'text';
|
|
35
|
+
const prefixIcon = this.shadowRoot?.querySelector('[part="prefix"]');
|
|
36
|
+
const suffixIcon = this.shadowRoot?.querySelector('[part="suffix"]');
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
if(this.closest('label'))
|
|
40
|
+
this.classList.add('mb-0');
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
const setIcon = (inputType) => {
|
|
44
|
+
|
|
45
|
+
// Pre set the icons
|
|
46
|
+
switch (inputType) {
|
|
47
|
+
case "date":
|
|
48
|
+
case "datetime-local":
|
|
49
|
+
case "year":
|
|
50
|
+
case "month":
|
|
51
|
+
case "week":
|
|
52
|
+
this.setAttribute('data-suffix-icon','calendar') ;
|
|
53
|
+
suffixIcon?.setAttribute('role','button');
|
|
54
|
+
break;
|
|
55
|
+
case "time":
|
|
56
|
+
this.setAttribute('data-suffix-icon','clock') ;
|
|
57
|
+
suffixIcon?.setAttribute('role','button');
|
|
58
|
+
break;
|
|
59
|
+
default:
|
|
60
|
+
this.removeAttribute('data-suffix-icon') ;
|
|
61
|
+
suffixIcon?.removeAttribute('role');
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
setIcon(inputType);
|
|
66
|
+
|
|
67
|
+
// Colour input field
|
|
68
|
+
if(input?.matches('[type="color"]')){
|
|
69
|
+
this.insertAdjacentHTML('beforeend', `<output></output>`);
|
|
70
|
+
|
|
71
|
+
input.addEventListener('input', () => {
|
|
72
|
+
|
|
73
|
+
input.nextElementSibling.value = input.value;
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
if(this.hasAttribute('data-prefix-icon')){
|
|
79
|
+
prefixIcon?.className = `prefix fa-${this.hasAttribute('data-prefix-weight') ? this.getAttribute('data-prefix-weight') : 'regular'} fa-${this.getAttribute('data-prefix-icon')}`;
|
|
80
|
+
this.querySelector('input')?.classList.add('has-prefix');
|
|
81
|
+
}
|
|
82
|
+
if(this.hasAttribute('data-suffix-icon')){
|
|
83
|
+
suffixIcon?.className = `suffix fa-${this.hasAttribute('data-suffix-weight') ? this.getAttribute('data-suffix-weight') : 'regular'} fa-${this.getAttribute('data-suffix-icon')}`;
|
|
84
|
+
this.querySelector('input')?.classList.add('has-suffix');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if(this.shadowRoot.querySelector('[name="prefix"]')?.assignedElements().length){
|
|
88
|
+
this.shadowRoot.querySelector('[name="prefix"]')?.classList.add('prefix');
|
|
89
|
+
this.querySelector('input')?.classList.add('has-prefix');
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if(this.shadowRoot.querySelector('[name="suffix"]')?.assignedElements().length){
|
|
93
|
+
this.shadowRoot.querySelector('[name="suffix"]')?.classList.add('suffix');
|
|
94
|
+
this.querySelector('input')?.classList.add('has-suffix');
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
// Change type
|
|
99
|
+
|
|
100
|
+
if(this.querySelector('[data-change-type]')){
|
|
101
|
+
const select = this.querySelector('[data-change-type]');
|
|
102
|
+
|
|
103
|
+
select.addEventListener('change', () => {
|
|
104
|
+
|
|
105
|
+
input.setAttribute('type', select.value);
|
|
106
|
+
|
|
107
|
+
setIcon(select.value);
|
|
108
|
+
if(this.getAttribute('data-suffix-icon')){
|
|
109
|
+
|
|
110
|
+
suffixIcon?.className = `suffix fa-${this.hasAttribute('data-suffix-weight') ? this.getAttribute('data-suffix-weight') : 'regular'} fa-${this.getAttribute('data-suffix-icon')}`;
|
|
111
|
+
input?.classList.add('has-suffix');
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
suffixIcon?.removeAttribute('class');
|
|
115
|
+
input?.classList.remove('has-suffix');
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
// #region Date restrictions
|
|
123
|
+
const today = new Date();
|
|
124
|
+
|
|
125
|
+
function formatDate(date, type = "date"): string {
|
|
126
|
+
const year = date.getFullYear();
|
|
127
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
128
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
129
|
+
|
|
130
|
+
if(type == "datetime-local")
|
|
131
|
+
return `${year}-${month}-${day}T00:00:00`;
|
|
132
|
+
|
|
133
|
+
return `${year}-${month}-${day}`;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const checkDayAllowed = (input,allowedDays) => {
|
|
137
|
+
|
|
138
|
+
const day = new Date(input.value).getUTCDay();
|
|
139
|
+
|
|
140
|
+
if (allowedDays.includes(day)) input.setCustomValidity('');
|
|
141
|
+
else input.setCustomValidity('That day of the week is not allowed');
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if(input?.matches('[type="date"], [type="datetime-local"]') && this.hasAttribute('data-allowed-days')){
|
|
145
|
+
const allowedDays = JSON.parse(`[${this.getAttribute('data-allowed-days')}]`);
|
|
146
|
+
|
|
147
|
+
checkDayAllowed(input,allowedDays);
|
|
148
|
+
input.addEventListener('input', () => { checkDayAllowed(input,allowedDays); });
|
|
149
|
+
}
|
|
150
|
+
// #endregion
|
|
151
|
+
|
|
152
|
+
suffixIcon.addEventListener('click', function () {
|
|
153
|
+
|
|
154
|
+
if(!component?.querySelector('select[data-change-type][slot="suffix"]'))
|
|
155
|
+
input.showPicker();
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
prefixIcon.addEventListener('click', function () {
|
|
159
|
+
|
|
160
|
+
if(!component?.querySelector('select[data-change-type][slot="prefix"]'))
|
|
161
|
+
input.showPicker();
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export default iamInput;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { trackComponent, trackComponentRegistered } from '../_global';
|
|
2
|
+
|
|
3
|
+
trackComponentRegistered('iam-iamPrefix');
|
|
4
|
+
class iamDaterange extends HTMLElement {
|
|
5
|
+
constructor() {
|
|
6
|
+
super();
|
|
7
|
+
this.attachShadow({ mode: 'open' });
|
|
8
|
+
|
|
9
|
+
const assetLocation = document.body.hasAttribute('data-assets-location')
|
|
10
|
+
? document.body.getAttribute('data-assets-location')
|
|
11
|
+
: '/assets';
|
|
12
|
+
|
|
13
|
+
const loadCSS = `@import "${assetLocation}/css/components/input-range.component.css";`;
|
|
14
|
+
|
|
15
|
+
const template = document.createElement('template');
|
|
16
|
+
template.innerHTML = `
|
|
17
|
+
<style>
|
|
18
|
+
${loadCSS}
|
|
19
|
+
</style>
|
|
20
|
+
<link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous">
|
|
21
|
+
<div class="wrapper" part="wrapper">
|
|
22
|
+
<slot></slot>
|
|
23
|
+
</div>
|
|
24
|
+
`;
|
|
25
|
+
this.shadowRoot.appendChild(template.content.cloneNode(true));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
connectedCallback(): void {
|
|
29
|
+
|
|
30
|
+
const inputs = this.querySelectorAll('input,select');
|
|
31
|
+
|
|
32
|
+
if(inputs.length > 1){
|
|
33
|
+
|
|
34
|
+
const setMinMax = ():void => {
|
|
35
|
+
|
|
36
|
+
const min = inputs[0].value;
|
|
37
|
+
let max = inputs[1].value;
|
|
38
|
+
|
|
39
|
+
// Make sure the second input/select is always higher than the first input/select
|
|
40
|
+
if(parseInt(inputs[1].value) < parseInt(inputs[0].value)){
|
|
41
|
+
max = min;
|
|
42
|
+
inputs[1].value = min;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// First input/select
|
|
46
|
+
if(inputs[0].matches('input'))
|
|
47
|
+
inputs[0].setAttribute('max',max);
|
|
48
|
+
|
|
49
|
+
if(inputs[0].matches('select')){
|
|
50
|
+
Array.from(inputs[0].querySelectorAll('option')).forEach((option) => {
|
|
51
|
+
|
|
52
|
+
if (parseInt(option.getAttribute('value')) > max) option.classList.add('d-none');
|
|
53
|
+
else option.classList.remove('d-none');
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Second input/select
|
|
58
|
+
if(inputs[1].matches('input'))
|
|
59
|
+
inputs[1].setAttribute('min',min);
|
|
60
|
+
|
|
61
|
+
Array.from(inputs[1].querySelectorAll('option')).forEach((option) => {
|
|
62
|
+
|
|
63
|
+
if (parseInt(option.getAttribute('value')) < min) option.classList.add('d-none');
|
|
64
|
+
else option.classList.remove('d-none');
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
setMinMax();
|
|
68
|
+
|
|
69
|
+
this.addEventListener('change', () => {
|
|
70
|
+
|
|
71
|
+
setMinMax();
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export default iamDaterange;
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { trackComponent, trackComponentRegistered } from '../_global';
|
|
2
|
+
import { cardHTML, setupCard } from '../../modules/card.module';
|
|
3
|
+
import iamMenu from '../menu/menu.component';
|
|
4
|
+
import Modal from '../../../../src/components/Modal/Modal.vue';
|
|
5
|
+
|
|
6
|
+
trackComponentRegistered('iam-card');
|
|
7
|
+
|
|
8
|
+
class iamModal extends HTMLElement {
|
|
9
|
+
constructor() {
|
|
10
|
+
super();
|
|
11
|
+
this.attachShadow({ mode: 'open' });
|
|
12
|
+
|
|
13
|
+
const assetLocation = document.body.hasAttribute('data-assets-location')
|
|
14
|
+
? document.body.getAttribute('data-assets-location')
|
|
15
|
+
: '/assets';
|
|
16
|
+
const loadCSS = `@import "${assetLocation}/css/components/modal.component.css";`;
|
|
17
|
+
|
|
18
|
+
const template = document.createElement('template');
|
|
19
|
+
template.innerHTML = `
|
|
20
|
+
<style>
|
|
21
|
+
${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
|
|
22
|
+
|
|
23
|
+
${loadCSS}
|
|
24
|
+
</style>
|
|
25
|
+
<link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous" />
|
|
26
|
+
<dialog>
|
|
27
|
+
<button class="btn btn-compact btn-secondary fa-xmark-large" data-close>Close</button>
|
|
28
|
+
<div class="scroll">
|
|
29
|
+
<i class="fa-light fa-circle" aria-hidden="true">
|
|
30
|
+
<i class="fa-regular fa-${this.hasAttribute('data-icon') ? this.getAttribute('data-icon') : 'info'}" aria-hidden="true"></i>
|
|
31
|
+
</i>
|
|
32
|
+
<slot></slot>
|
|
33
|
+
<div class="btn-group">
|
|
34
|
+
<button class="btn btn-secondary" data-cancel>Cancel</button>
|
|
35
|
+
<slot name="agreed-button">
|
|
36
|
+
<button class="btn btn-primary" data-agreed>${this.hasAttribute('data-agreed-text') ? this.getAttribute('data-agreed-text') : 'Ok'}</button>
|
|
37
|
+
</slot>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
</dialog>
|
|
41
|
+
`;
|
|
42
|
+
|
|
43
|
+
this.shadowRoot.appendChild(template.content.cloneNode(true));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
connectedCallback(): void {
|
|
47
|
+
|
|
48
|
+
const originalDialog = this.querySelector('dialog');
|
|
49
|
+
|
|
50
|
+
const id = this.hasAttribute('id') ? this.getAttribute('id') : originalDialog?.getAttribute('id');
|
|
51
|
+
const dialog = this.shadowRoot?.querySelector('dialog');
|
|
52
|
+
const closeButton = this.shadowRoot?.querySelector('[data-close]');
|
|
53
|
+
const cancelButton = this.shadowRoot?.querySelector('[data-cancel]');
|
|
54
|
+
const agreedButton = this.shadowRoot?.querySelector('[data-agreed]');
|
|
55
|
+
const slottedAgreedButton = this.querySelector('button[slot="agreed-button"]');
|
|
56
|
+
const modalType = this.hasAttribute('data-type') ? this.getAttribute('data-type') : 'passive';
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
const openModal = () => {
|
|
62
|
+
dialog?.showModal();
|
|
63
|
+
dialog?.focus();
|
|
64
|
+
|
|
65
|
+
const closeEvent = new CustomEvent('modal-opened', {
|
|
66
|
+
bubbles: true,
|
|
67
|
+
cancelable: true,
|
|
68
|
+
detail: { modalId: id },
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
this.dispatchEvent(closeEvent);
|
|
72
|
+
|
|
73
|
+
window.dataLayer = window.dataLayer || [];
|
|
74
|
+
window.dataLayer.push({
|
|
75
|
+
event: 'openModal',
|
|
76
|
+
id: id,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
document.addEventListener('click', (e) => {
|
|
81
|
+
|
|
82
|
+
if(e.target.matches(`[command="show-modal"][commandfor="${id}"]`) || e.target.matches(`[data-modal="${id}"]`)){
|
|
83
|
+
openModal();
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
// Disable the original event
|
|
88
|
+
originalDialog?.addEventListener('command', (e) => {
|
|
89
|
+
|
|
90
|
+
if (event.command == "show-modal") {
|
|
91
|
+
e.preventDefault();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
originalDialog?.addEventListener('command', (e) => {
|
|
96
|
+
|
|
97
|
+
if (event.command == "close") {
|
|
98
|
+
closeModal();
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
originalDialog?.addEventListener('close', (e) => {
|
|
103
|
+
|
|
104
|
+
closeModal();
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// Move the submit button so that the slot functionality works
|
|
108
|
+
Array.from(originalDialog?.querySelectorAll('[slot]')).forEach((element) => {
|
|
109
|
+
this.moveBefore(element, originalDialog);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
const closeModal = () => {
|
|
113
|
+
dialog?.close();
|
|
114
|
+
|
|
115
|
+
const closeEvent = new CustomEvent('modal-closed', {
|
|
116
|
+
bubbles: true,
|
|
117
|
+
cancelable: true,
|
|
118
|
+
detail: { modalId: id },
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
this.dispatchEvent(closeEvent);
|
|
122
|
+
|
|
123
|
+
window.dataLayer = window.dataLayer || [];
|
|
124
|
+
window.dataLayer.push({
|
|
125
|
+
event: 'closeModal',
|
|
126
|
+
id: id,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
closeButton?.addEventListener('click', () => {
|
|
131
|
+
closeModal();
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
cancelButton?.addEventListener('click', () => {
|
|
135
|
+
closeModal();
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
agreedButton?.addEventListener('click', () => {
|
|
139
|
+
|
|
140
|
+
const agreedEvent = new CustomEvent('agreed', {
|
|
141
|
+
detail: { modalId: id },
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
this.dispatchEvent(agreedEvent);
|
|
145
|
+
|
|
146
|
+
closeModal();
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
slottedAgreedButton?.addEventListener('click', () => {
|
|
150
|
+
|
|
151
|
+
const agreedEvent = new CustomEvent('agreed', {
|
|
152
|
+
detail: { modalId: id },
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
this.dispatchEvent(agreedEvent);
|
|
156
|
+
|
|
157
|
+
closeModal();
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
this.addEventListener('close-modal', () => {
|
|
161
|
+
closeModal();
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
this.addEventListener('click', (event) => {
|
|
165
|
+
|
|
166
|
+
// Small fix to make sure the dialog isn't a dialog inside of a dialog.
|
|
167
|
+
const style = window.getComputedStyle(dialog);
|
|
168
|
+
if (style.display === 'contents') dialog = dialog.parentNode.closest('dialog[open]');
|
|
169
|
+
|
|
170
|
+
// Dont allow the backdrop to be clicked when transactional
|
|
171
|
+
if (modalType != 'transactional' && modalType != 'acknowledgement') {
|
|
172
|
+
const dialogDimensions = dialog.getBoundingClientRect();
|
|
173
|
+
|
|
174
|
+
if (
|
|
175
|
+
event.clientX < dialogDimensions.left ||
|
|
176
|
+
event.clientX > dialogDimensions.right ||
|
|
177
|
+
event.clientY < dialogDimensions.top ||
|
|
178
|
+
event.clientY > dialogDimensions.bottom
|
|
179
|
+
) {
|
|
180
|
+
if (!event.target.closest('dialog *'))
|
|
181
|
+
closeModal(); // Weird bug when interacting with radio input fields within dialogs cuases it to close
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export default iamModal;
|