@iamproperty/components 5.6.1-beta2 → 5.6.1-beta21
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/address-lookup.css +1 -1
- package/assets/css/components/address-lookup.css.map +1 -1
- package/assets/css/components/card.css +1 -1
- package/assets/css/components/card.css.map +1 -1
- package/assets/css/components/carousel.css +1 -1
- package/assets/css/components/carousel.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/fileupload.css +1 -1
- package/assets/css/components/fileupload.css.map +1 -1
- package/assets/css/components/multiselect.css +1 -1
- package/assets/css/components/multiselect.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/table.global.css +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/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 +7 -7
- package/assets/js/components/actionbar/actionbar.component.min.js +10 -10
- package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
- package/assets/js/components/address-lookup/address-lookup.component.js +24 -13
- package/assets/js/components/address-lookup/address-lookup.component.min.js +9 -8
- package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
- package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
- package/assets/js/components/card/card.component.js +40 -20
- package/assets/js/components/card/card.component.min.js +19 -19
- package/assets/js/components/card/card.component.min.js.map +1 -1
- package/assets/js/components/carousel/carousel.component.js +17 -4
- package/assets/js/components/carousel/carousel.component.min.js +8 -8
- package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
- package/assets/js/components/collapsible-side/collapsible-side.component.js +5 -5
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js +7 -7
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js.map +1 -1
- package/assets/js/components/fileupload/fileupload.component.js +19 -3
- package/assets/js/components/fileupload/fileupload.component.min.js +10 -8
- package/assets/js/components/fileupload/fileupload.component.min.js.map +1 -1
- package/assets/js/components/filterlist/filterlist.component.js +2 -2
- package/assets/js/components/filterlist/filterlist.component.min.js +5 -5
- package/assets/js/components/filterlist/filterlist.component.min.js.map +1 -1
- package/assets/js/components/header/header.component.min.js +1 -1
- package/assets/js/components/inline-edit/inline-edit.component.js +3 -3
- package/assets/js/components/inline-edit/inline-edit.component.min.js +4 -4
- package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -1
- package/assets/js/components/marketing/marketing.component.min.js +1 -1
- package/assets/js/components/multiselect/multiselect.component.js +4 -3
- package/assets/js/components/multiselect/multiselect.component.min.js +6 -6
- package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
- package/assets/js/components/nav/nav.component.min.js +1 -1
- package/assets/js/components/notification/notification.component.js +1 -1
- package/assets/js/components/notification/notification.component.min.js +2 -2
- package/assets/js/components/notification/notification.component.min.js.map +1 -1
- package/assets/js/components/pagination/pagination.component.min.js +3 -3
- package/assets/js/components/search/search.component.min.js +1 -1
- 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/table/table.component.js +16 -1
- package/assets/js/components/table/table.component.min.js +5 -5
- package/assets/js/components/table/table.component.min.js.map +1 -1
- package/assets/js/components/tabs/tabs.component.min.js +1 -1
- package/assets/js/dynamic.min.js +5 -5
- package/assets/js/dynamic.min.js.map +1 -1
- package/assets/js/modules/carousel.js +30 -8
- package/assets/js/modules/dialogs.js +7 -1
- package/assets/js/modules/dynamicEvents.js +3 -0
- package/assets/js/modules/fileupload.js +44 -19
- package/assets/js/modules/helpers.js +4 -0
- package/assets/js/modules/inputs.js +1 -1
- package/assets/js/modules/table.js +6 -1
- package/assets/js/scripts.bundle.js +29 -29
- 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/sass/_components.scss +54 -0
- package/assets/sass/components/address-lookup.scss +4 -0
- package/assets/sass/components/card.scss +88 -1
- package/assets/sass/components/carousel.scss +31 -7
- package/assets/sass/components/collapsible-side.scss +8 -1
- package/assets/sass/components/fileupload.scss +1 -10
- package/assets/sass/components/multiselect.scss +5 -1
- package/assets/sass/components/pagination.scss +11 -16
- package/assets/sass/components/table.global.scss +4 -19
- package/assets/sass/elements/dialog.scss +1 -1
- package/assets/sass/elements/forms.scss +39 -10
- package/assets/sass/elements/progress.scss +159 -17
- package/assets/ts/components/actionbar/actionbar.component.ts +7 -7
- package/assets/ts/components/address-lookup/address-lookup.component.ts +28 -14
- package/assets/ts/components/card/card.component.ts +51 -23
- package/assets/ts/components/carousel/carousel.component.ts +20 -4
- package/assets/ts/components/collapsible-side/collapsible-side.component.ts +5 -5
- package/assets/ts/components/fileupload/fileupload.component.ts +29 -3
- package/assets/ts/components/filterlist/filterlist.component.ts +2 -2
- package/assets/ts/components/inline-edit/inline-edit.component.ts +3 -3
- package/assets/ts/components/multiselect/multiselect.component.ts +4 -3
- package/assets/ts/components/notification/notification.component.ts +1 -1
- package/assets/ts/components/table/table.component.ts +24 -1
- package/assets/ts/modules/carousel.ts +40 -9
- package/assets/ts/modules/dialogs.ts +9 -1
- package/assets/ts/modules/dynamicEvents.ts +3 -0
- package/assets/ts/modules/fileupload.ts +64 -31
- package/assets/ts/modules/helpers.ts +6 -0
- package/assets/ts/modules/inputs.ts +1 -1
- package/assets/ts/modules/table.ts +8 -2
- package/dist/components.es.js +546 -611
- package/dist/components.umd.js +98 -95
- package/dist/style.css +1 -1
- package/package.json +3 -3
- package/src/components/Card/README.md +1 -0
- package/src/components/Carousel/Carousel.vue +5 -1
- package/src/components/CollapsibleSideMenu/CollapsibleSideMenu.vue +1 -1
- package/src/components/FileUpload/FileUpload.vue +29 -6
|
@@ -18,12 +18,10 @@ progress {
|
|
|
18
18
|
border: none;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
progress:before {
|
|
22
|
-
content: attr(
|
|
21
|
+
label[data-percent]:has(progress):before {
|
|
22
|
+
content: attr(data-percent)'%';
|
|
23
23
|
vertical-align: 0;
|
|
24
24
|
line-height: 1;
|
|
25
|
-
|
|
26
|
-
/*Position text over the progress bar */
|
|
27
25
|
position:absolute;
|
|
28
26
|
top: auto;
|
|
29
27
|
left:auto;
|
|
@@ -33,6 +31,10 @@ progress:before {
|
|
|
33
31
|
font-weight: bold;
|
|
34
32
|
}
|
|
35
33
|
|
|
34
|
+
progress[data-progress]:before {
|
|
35
|
+
content: attr(data-progress)'%';
|
|
36
|
+
}
|
|
37
|
+
|
|
36
38
|
progress::-webkit-progress-bar {
|
|
37
39
|
background-color: var(--colour-light);
|
|
38
40
|
border-radius: rem(5);
|
|
@@ -42,30 +44,170 @@ progress::-webkit-progress-value {
|
|
|
42
44
|
border-radius: rem(5);
|
|
43
45
|
}
|
|
44
46
|
|
|
47
|
+
// #region inline progress
|
|
48
|
+
:is(label, .label):has(.progress--inline){
|
|
49
|
+
|
|
50
|
+
font-size: 1rem;
|
|
51
|
+
color: var(--colour-body);
|
|
52
|
+
|
|
53
|
+
&:before {
|
|
54
|
+
bottom: -0.25em;
|
|
55
|
+
}
|
|
45
56
|
|
|
57
|
+
progress.progress--inline {
|
|
46
58
|
|
|
59
|
+
width: 100%;
|
|
47
60
|
|
|
48
|
-
|
|
49
|
-
/* style rules */
|
|
61
|
+
}
|
|
50
62
|
}
|
|
51
63
|
|
|
64
|
+
// #endregion
|
|
52
65
|
|
|
53
|
-
// #region
|
|
66
|
+
// #region Circular
|
|
67
|
+
label:has(.progress--circular){
|
|
54
68
|
|
|
55
|
-
:
|
|
69
|
+
--max-width: #{rem(200)};
|
|
70
|
+
--pt: #{rem(90)};
|
|
71
|
+
--pt-percent: 45%;
|
|
72
|
+
--bar-width: #{rem(20)};
|
|
73
|
+
--value-fs: #{rem(48)};
|
|
74
|
+
--value-pb: #{rem(32)};
|
|
75
|
+
--label-fs: #{rem(18)};
|
|
56
76
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
progress.progress--inline {
|
|
77
|
+
position: relative;
|
|
78
|
+
z-index: 1;
|
|
79
|
+
max-width: var(--max-width);
|
|
80
|
+
margin-bottom: 2rem;
|
|
62
81
|
|
|
63
|
-
|
|
82
|
+
padding-right: 0;
|
|
83
|
+
aspect-ratio: 1/1;
|
|
84
|
+
height: auto;
|
|
85
|
+
width: 100%;
|
|
86
|
+
text-align: center;
|
|
87
|
+
padding-top: min(calc(var(--pt-percent) + var(--value-pb)), calc(var(--pt) + var(--value-pb)));
|
|
88
|
+
padding-inline: var(--value-pb);
|
|
89
|
+
|
|
90
|
+
display: inline-block;
|
|
91
|
+
font-size: var(--label-fs);
|
|
92
|
+
line-height: 1;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
label:has(.progress--circular.progress--md){
|
|
96
|
+
--max-width: #{rem(170)};
|
|
97
|
+
--pt: #{rem(76.5)};
|
|
98
|
+
--pt-percent: 45%;
|
|
99
|
+
--bar-width: #{rem(20)};
|
|
100
|
+
--value-pb: #{rem(24)};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
label:has(.progress--circular.progress--sm){
|
|
104
|
+
--max-width: #{rem(120)};
|
|
105
|
+
--pt: #{rem(54)};
|
|
106
|
+
--pt-percent: 45%;
|
|
107
|
+
--bar-width: #{rem(16)};
|
|
108
|
+
--value-fs: #{rem(24)};
|
|
109
|
+
|
|
110
|
+
--value-pb: #{rem(16)};
|
|
111
|
+
--label-fs: #{rem(12)};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Responsive-ish settings
|
|
115
|
+
*:has(> label > .progress--circular){
|
|
64
116
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
117
|
+
container-type: inline-size;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
@container (width <= 10.625rem) {
|
|
121
|
+
|
|
122
|
+
label:has(.progress--circular:not(.progress--sm):not(.progress--md)){
|
|
123
|
+
--max-width: #{rem(170)};
|
|
124
|
+
--pt: #{rem(76.5)};
|
|
125
|
+
--pt-percent: 45%;
|
|
126
|
+
--bar-width: #{rem(20)};
|
|
127
|
+
--value-pb: #{rem(24)};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
@container (width <= 7.5rem) {
|
|
132
|
+
|
|
133
|
+
label:has(.progress--circular:not(.progress--sm):not(.progress--md)){
|
|
134
|
+
--max-width: #{rem(120)};
|
|
135
|
+
--pt: #{rem(54)};
|
|
136
|
+
--pt-percent: 45%;
|
|
137
|
+
--bar-width: #{rem(16)};
|
|
138
|
+
--value-fs: #{rem(24)};
|
|
139
|
+
|
|
140
|
+
--value-pb: #{rem(16)};
|
|
141
|
+
--label-fs: #{rem(12)};
|
|
68
142
|
}
|
|
69
143
|
}
|
|
70
144
|
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
label:has(.progress--circular) + label:has(.progress--circular) {
|
|
149
|
+
margin-left: 2rem;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Needed to allow it to be animated
|
|
153
|
+
@property --progress {
|
|
154
|
+
syntax: '<percentage>';
|
|
155
|
+
inherits: false;
|
|
156
|
+
initial-value: 0%;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.progress--circular {
|
|
160
|
+
|
|
161
|
+
--progress-shown: var(--progress, 0%);
|
|
162
|
+
position: absolute;
|
|
163
|
+
z-index: -2;
|
|
164
|
+
top: 0;
|
|
165
|
+
left: 0;
|
|
166
|
+
margin: 0;
|
|
167
|
+
background: red;
|
|
168
|
+
background: conic-gradient(var(--colour, var(--colour-info)) var(--progress-shown), var(--colour-light) var(--progress-shown) calc(100% - var(--progress-shown)));
|
|
169
|
+
height: 100%;
|
|
170
|
+
width: 100%;
|
|
171
|
+
border-radius: 50%;
|
|
172
|
+
box-shadow: #{rem(3)} #{rem(3)} #{rem(6)} rgba(0, 0, 0, 20%);
|
|
173
|
+
transition: --progress 1s;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.progress--circular::-webkit-progress-bar,
|
|
177
|
+
.progress--circular::-webkit-progress-value {
|
|
178
|
+
opacity: 0;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
.progress--circular::-moz-progress-bar {
|
|
183
|
+
opacity: 0;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
label[data-percent]:has(.progress--circular):before {
|
|
187
|
+
|
|
188
|
+
top: var(--pt-percent);
|
|
189
|
+
left:50%;
|
|
190
|
+
right:auto;
|
|
191
|
+
bottom: auto;
|
|
192
|
+
color: var(--colour-heading);
|
|
193
|
+
transform: translate(-50%,-50%);
|
|
194
|
+
font-size: var(--value-fs);
|
|
195
|
+
line-height: 1;
|
|
196
|
+
z-index: 2;
|
|
197
|
+
text-indent: 0;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
label:has(.progress--circular):after {
|
|
201
|
+
content: "";
|
|
202
|
+
position: absolute;
|
|
203
|
+
z-index: -1;
|
|
204
|
+
top: 50%;
|
|
205
|
+
left: 50%;
|
|
206
|
+
transform: translate(-50%, -50%);
|
|
207
|
+
aspect-ratio: 1/1;
|
|
208
|
+
width: calc(100% - var(--bar-width) - var(--bar-width));
|
|
209
|
+
background-color: var(--colour-canvas);
|
|
210
|
+
border-radius: 50%;
|
|
211
|
+
}
|
|
212
|
+
|
|
71
213
|
// #endregion
|
|
@@ -57,19 +57,19 @@ class iamActionbar extends HTMLElement {
|
|
|
57
57
|
<link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous">
|
|
58
58
|
<div class="actionbar__wrapper">
|
|
59
59
|
|
|
60
|
-
<div class="actionbar">
|
|
60
|
+
<div class="actionbar" part="actionbar">
|
|
61
61
|
<slot name="selectall"></slot>
|
|
62
62
|
<div class="safe-area">
|
|
63
63
|
<slot></slot>
|
|
64
64
|
<div class="body">
|
|
65
65
|
<div class="dialog__wrapper dialog__wrapper--right dialog-overflow d-none show">
|
|
66
66
|
<button class="btn btn-secondary btn-compact fa-ellipsis-vertical m-0">More actions</button>
|
|
67
|
-
<dialog class="dialog--list">
|
|
67
|
+
<dialog class="dialog--list" part="overflow">
|
|
68
68
|
<slot name="overflow"></slot>
|
|
69
69
|
<slot name="menu"></slot>
|
|
70
70
|
</dialog>
|
|
71
71
|
</div>
|
|
72
|
-
<button class="btn btn-secondary btn-compact btn-sm fa-search" data-search="">Search</button>
|
|
72
|
+
<button class="btn btn-secondary btn-compact btn-sm fa-search" data-search="" part="search-btn">Search</button>
|
|
73
73
|
</div>
|
|
74
74
|
</div>
|
|
75
75
|
</div>
|
|
@@ -79,7 +79,7 @@ class iamActionbar extends HTMLElement {
|
|
|
79
79
|
<div class="body">
|
|
80
80
|
<div class="dialog__wrapper dialog__wrapper--right dialog-overflow d-none show">
|
|
81
81
|
<button class="btn btn-secondary btn-compact fa-ellipsis-vertical m-0">More actions</button>
|
|
82
|
-
<dialog class="dialog--list">
|
|
82
|
+
<dialog class="dialog--list" part="selected-overflow">
|
|
83
83
|
<slot name="selected-overflow"></slot>
|
|
84
84
|
</dialog>
|
|
85
85
|
</div>
|
|
@@ -89,10 +89,10 @@ class iamActionbar extends HTMLElement {
|
|
|
89
89
|
<div class="actionbar--search">
|
|
90
90
|
<button data-search class="btn btn-compact fa-xmark-large btn-secondary m-0" >Close</button>
|
|
91
91
|
|
|
92
|
-
<div class="search-wrapper">
|
|
92
|
+
<div class="search-wrapper" part="search">
|
|
93
93
|
<label for="search" class="visually-hidden">Input field label</label>
|
|
94
|
-
<button class="suffix"><i class="fa-regular fa-search"></i></button>
|
|
95
|
-
<input type="text" id="search" name="search" required="">
|
|
94
|
+
<button class="suffix" part="search-btn"><i class="fa-regular fa-search"></i></button>
|
|
95
|
+
<input type="text" id="search" name="search" required="" part="search-input">
|
|
96
96
|
</div>
|
|
97
97
|
|
|
98
98
|
</div>
|
|
@@ -41,17 +41,18 @@ class iamAddressLookup extends HTMLElement {
|
|
|
41
41
|
</label>
|
|
42
42
|
|
|
43
43
|
</div>
|
|
44
|
-
<button class="btn btn-tertiary switch-to-manual-btn">Or enter address manually</button>
|
|
44
|
+
<button class="btn btn-tertiary switch-to-manual-btn" type="button">Or enter address manually</button>
|
|
45
45
|
</div>
|
|
46
46
|
<datalist id="address-lookup__addressess"></datalist>
|
|
47
47
|
|
|
48
48
|
<div class="manual-address pb-2 js-hide">
|
|
49
49
|
<slot></slot>
|
|
50
|
-
<button class="btn btn-tertiary switch-to-lookup-btn">Use postcode lookup</button>
|
|
50
|
+
<button class="btn btn-tertiary switch-to-lookup-btn" type="button">Use postcode lookup</button>
|
|
51
|
+
<slot name="after"></slot>
|
|
51
52
|
</div>
|
|
52
53
|
<div class="pre-filled pb-2 js-hide">
|
|
53
54
|
<strong class="title text-primary d-block"></strong>
|
|
54
|
-
<p><span class="pre-filled-address"></span><button class="text-primary text-decoration-none ms-1 cursor-pointer"><i class="fa-regular fa-pen-to-square"></i><span class="visually-hidden">Edit</span></button><slot name="prefilled"></slot></p>
|
|
55
|
+
<p><span class="pre-filled-address"></span><button class="text-primary text-decoration-none ms-1 cursor-pointer" type="button"><i class="fa-regular fa-pen-to-square"></i><span class="visually-hidden">Edit</span></button><slot name="prefilled"></slot></p>
|
|
55
56
|
</div>
|
|
56
57
|
</div>
|
|
57
58
|
`;
|
|
@@ -60,6 +61,7 @@ class iamAddressLookup extends HTMLElement {
|
|
|
60
61
|
|
|
61
62
|
async connectedCallback() {
|
|
62
63
|
|
|
64
|
+
const component = this;
|
|
63
65
|
const wrapper = this.shadowRoot.querySelector('.wrapper');
|
|
64
66
|
const lookup = this.shadowRoot.querySelector('[name="postcode"]');
|
|
65
67
|
const lookupWrapper = this.shadowRoot.querySelector('.postcode-lookup');
|
|
@@ -202,14 +204,19 @@ class iamAddressLookup extends HTMLElement {
|
|
|
202
204
|
Object.keys(values).forEach((key, index) => {
|
|
203
205
|
|
|
204
206
|
let value = values[key];
|
|
205
|
-
if(this.querySelector(`[data-name="${key}"]`))
|
|
207
|
+
if(this.querySelector(`[data-name="${key}"]`) && value != '')
|
|
206
208
|
this.querySelector(`[data-name="${key}"]`).value = value;
|
|
207
|
-
else if(this.querySelector(`[name="${key}"]`))
|
|
209
|
+
else if(this.querySelector(`[data-name-alt="${key}"]`) && value != '')
|
|
210
|
+
this.querySelector(`[data-name-alt="${key}"]`).value = value;
|
|
211
|
+
else if(this.querySelector(`[name="${key}"]`) && value != '')
|
|
208
212
|
this.querySelector(`[name="${key}"]`).value = value;
|
|
213
|
+
|
|
214
|
+
if(this.querySelector(`[data-name-2="${key}"]`))
|
|
215
|
+
this.querySelector(`[data-name-2="${key}"]`).value += ' '+value;
|
|
209
216
|
});
|
|
210
217
|
|
|
211
218
|
// Focus on first input
|
|
212
|
-
this.querySelector('[
|
|
219
|
+
this.querySelector('[name]').focus();
|
|
213
220
|
|
|
214
221
|
Array.from(this.querySelectorAll('[data-required]')).forEach((input, index) => {
|
|
215
222
|
input.setAttribute('required','true');
|
|
@@ -268,17 +275,24 @@ class iamAddressLookup extends HTMLElement {
|
|
|
268
275
|
else {
|
|
269
276
|
let values = JSON.stringify(address);
|
|
270
277
|
|
|
271
|
-
|
|
278
|
+
if(component.hasAttribute('data-display-text')){
|
|
272
279
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
280
|
+
listString += `<option value="${address[component.getAttribute('data-display-text')]}, ${postcode}" data-values='${values}'></option>`;
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
|
|
284
|
+
let itemString = '';
|
|
285
|
+
for (const [key, value] of Object.entries(address)) {
|
|
286
|
+
|
|
287
|
+
if(key == "address_number_name")
|
|
288
|
+
itemString += `${value} `;
|
|
289
|
+
else if(key != "postcode" && key != "address_title")
|
|
290
|
+
itemString += `${value}${(/^-?\d+$/.test(value)?'':',')} `;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
listString += `<option value="${itemString}${postcode}" data-values='${values}'></option>`;
|
|
279
294
|
}
|
|
280
295
|
|
|
281
|
-
listString += `<option value="${itemString}${postcode}" data-values='${values}'></option>`;
|
|
282
296
|
}
|
|
283
297
|
|
|
284
298
|
|
|
@@ -33,21 +33,7 @@ class iamCard extends HTMLElement {
|
|
|
33
33
|
</style>
|
|
34
34
|
<link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous">
|
|
35
35
|
<div class="card ${classList}" tabindex="0" part="card">
|
|
36
|
-
${this.
|
|
37
|
-
<div class="card__body">
|
|
38
|
-
${!this.hasAttribute('data-image') && this.querySelector('[slot="badges"]') && this.querySelector('[slot="checkbox"]') ? `<div class="card__badges card__badges--inline"><slot name="badges"></slot></div>` : ''}
|
|
39
|
-
${!this.hasAttribute('data-image') && this.querySelector('[slot="badges"]') ? `<div class="card__badges"><slot name="badges"></slot></div>` : ''}
|
|
40
|
-
${this.hasAttribute('data-illustration') ? `<div class="card__illustration"><img src="${this.getAttribute('data-illustration')}" alt="" loading="lazy" /></div>` : ''}
|
|
41
|
-
<slot></slot>
|
|
42
|
-
${this.hasAttribute('data-total') ? `<div class="card__total">${this.getAttribute('data-total')}</div>` : ''}
|
|
43
|
-
</div>
|
|
44
|
-
${this.hasAttribute('data-add-link') ? `<button class="btn btn-compact btn-secondary fa-plus">Add property</button>` : ''}
|
|
45
|
-
<slot name="checkbox"></slot>
|
|
46
|
-
<div class="card__footer">
|
|
47
|
-
<slot name="footer"></slot>
|
|
48
|
-
<slot name="btns"></slot>
|
|
49
|
-
${this.hasAttribute('data-cta') ? `<span class="link d-inline-block pt-0 mb-0">${this.getAttribute('data-cta')}</span>` : ''}
|
|
50
|
-
</div>
|
|
36
|
+
${this.createCardConent()}
|
|
51
37
|
</div>
|
|
52
38
|
`;
|
|
53
39
|
this.shadowRoot.appendChild(template.content.cloneNode(true));
|
|
@@ -57,14 +43,41 @@ class iamCard extends HTMLElement {
|
|
|
57
43
|
document.head.insertAdjacentHTML('beforeend',`<style id="cardGlobal">${loadExtraCSS}</style>`);
|
|
58
44
|
}
|
|
59
45
|
|
|
60
|
-
|
|
46
|
+
const createCardConent () {
|
|
47
|
+
|
|
48
|
+
return `${this.hasAttribute('data-image') || this.hasAttribute('data-record') ? `<div class="card__head">${this.hasAttribute('data-image') ? `<img src="${this.getAttribute('data-image')}" alt="" loading="lazy" />` : ``} <div class="card__badges"><slot name="badges"></slot></div></div>` : ''}
|
|
49
|
+
<div class="card__body" part="body">
|
|
50
|
+
${!this.hasAttribute('data-image') && this.querySelector('[slot="badges"]') && this.querySelector('[slot="checkbox"]') ? `<div class="card__badges card__badges--inline"><slot name="badges"></slot></div>` : ''}
|
|
51
|
+
${!this.hasAttribute('data-image') && !this.hasAttribute('data-record') && this.querySelector('[slot="badges"]') ? `<div class="card__badges"><slot name="badges"></slot></div>` : ''}
|
|
52
|
+
${this.hasAttribute('data-illustration') ? `<div class="card__illustration"><img src="${this.getAttribute('data-illustration')}" alt="" loading="lazy" /></div>` : ''}
|
|
53
|
+
<slot></slot>
|
|
54
|
+
${this.hasAttribute('data-total') ? `<div class="card__total">${this.getAttribute('data-total')}</div>` : ''}
|
|
55
|
+
</div>
|
|
56
|
+
${this.hasAttribute('data-add-link') ? `<button class="btn btn-compact btn-secondary fa-plus">Add property</button>` : ''}
|
|
57
|
+
<slot name="checkbox"></slot>
|
|
58
|
+
<div class="card__footer" part="footer">
|
|
59
|
+
<slot name="footer"></slot>
|
|
60
|
+
<slot name="btns"></slot>
|
|
61
|
+
${this.hasAttribute('data-cta') ? `<span class="link d-inline-block pt-0 mb-0">${this.getAttribute('data-cta')}</span>` : ''}
|
|
62
|
+
</div>`;
|
|
63
|
+
}
|
|
61
64
|
|
|
65
|
+
connectedCallback() {
|
|
62
66
|
this.classList.add('loaded');
|
|
63
|
-
|
|
67
|
+
|
|
64
68
|
// Mimic clicking the parent node so the focus and target events can be on the card
|
|
65
69
|
const parentNode = this.parentNode.closest('a, button, label, router-link')
|
|
66
70
|
const card = this.shadowRoot.querySelector('.card')
|
|
67
71
|
const btnCompact = this.shadowRoot.querySelector('.btn-compact');
|
|
72
|
+
const recordType = this.hasAttribute('data-record') ? this.getAttribute('data-record') : '';
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
If the parentNode is actually just a div,
|
|
76
|
+
we don't want to look for anything or add events
|
|
77
|
+
*/
|
|
78
|
+
if (!parentNode) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
68
81
|
|
|
69
82
|
if(parentNode)
|
|
70
83
|
parentNode.setAttribute('tabindex','-1');
|
|
@@ -177,10 +190,11 @@ class iamCard extends HTMLElement {
|
|
|
177
190
|
window.location = addLocation;
|
|
178
191
|
});
|
|
179
192
|
}
|
|
193
|
+
|
|
180
194
|
}
|
|
181
195
|
|
|
182
196
|
static get observedAttributes() {
|
|
183
|
-
return ["data-total","class"];
|
|
197
|
+
return ["data-total","class","data-image"];
|
|
184
198
|
}
|
|
185
199
|
|
|
186
200
|
attributeChangedCallback(attrName, oldVal, newVal) {
|
|
@@ -191,12 +205,26 @@ class iamCard extends HTMLElement {
|
|
|
191
205
|
break;
|
|
192
206
|
}
|
|
193
207
|
case "class": {
|
|
194
|
-
let classList = this.classList.toString();
|
|
195
|
-
|
|
196
|
-
if(this.querySelector('*:not(.badge):not(small):not(.btn) > [class*="fa-"]:not(.btn)'))
|
|
197
|
-
classList += ' card--has-icon';
|
|
198
208
|
|
|
199
|
-
|
|
209
|
+
if(oldVal != newVal){
|
|
210
|
+
let classList = this.classList.toString();
|
|
211
|
+
|
|
212
|
+
if(this.querySelector('*:not(.badge):not(small):not(.btn) > [class*="fa-"]:not(.btn)'))
|
|
213
|
+
classList += ' card--has-icon';
|
|
214
|
+
|
|
215
|
+
this.shadowRoot.querySelector('.card').setAttribute('class',`card ${classList}`);
|
|
216
|
+
|
|
217
|
+
this.shadowRoot.querySelector('.card').innerHTML = this.createCardConent();
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
case "data-image": {
|
|
223
|
+
|
|
224
|
+
if(oldVal != newVal){
|
|
225
|
+
|
|
226
|
+
this.shadowRoot.querySelector('.card').innerHTML = this.createCardConent();
|
|
227
|
+
}
|
|
200
228
|
break;
|
|
201
229
|
}
|
|
202
230
|
}
|
|
@@ -32,12 +32,12 @@ class iamCarousel extends HTMLElement {
|
|
|
32
32
|
<slot></slot>
|
|
33
33
|
</div>
|
|
34
34
|
|
|
35
|
-
<div class="carousel__controls">
|
|
35
|
+
<div class="carousel__controls" part="controls">
|
|
36
36
|
|
|
37
37
|
</div>
|
|
38
38
|
|
|
39
|
-
<button class="btn btn-prev" data-go="0" disabled>Prev</button>
|
|
40
|
-
<button class="btn btn-next" data-go="2">Next</button>
|
|
39
|
+
<button class="btn btn-prev" data-go="0" disabled part="prev">Prev</button>
|
|
40
|
+
<button class="btn btn-next" data-go="2" part="next">Next</button>
|
|
41
41
|
|
|
42
42
|
</div>
|
|
43
43
|
</div>
|
|
@@ -49,6 +49,8 @@ class iamCarousel extends HTMLElement {
|
|
|
49
49
|
|
|
50
50
|
const carouselElement = this.shadowRoot.querySelector('.carousel');
|
|
51
51
|
const row = this.querySelector('.row');
|
|
52
|
+
const thumbnailImages = JSON.parse(this.dataset.thumbnails);
|
|
53
|
+
|
|
52
54
|
const carouselControls = this.shadowRoot.querySelector('.carousel__controls');
|
|
53
55
|
|
|
54
56
|
let itemCount = this.querySelectorAll(':scope > .row > .col').length
|
|
@@ -61,10 +63,24 @@ class iamCarousel extends HTMLElement {
|
|
|
61
63
|
if(this.classList.contains('hide-controls'))
|
|
62
64
|
carouselElement.classList.add('hide-controls');
|
|
63
65
|
|
|
66
|
+
if (thumbnailImages?.length) {
|
|
67
|
+
carouselControls.classList.add('thumbnails');
|
|
68
|
+
}
|
|
69
|
+
|
|
64
70
|
// populate the pips
|
|
65
71
|
let pips = "";
|
|
66
72
|
for (let i = 1; i <= itemCount; i++) {
|
|
67
|
-
|
|
73
|
+
let pipContent = null;
|
|
74
|
+
let pipClass = '';
|
|
75
|
+
|
|
76
|
+
if (thumbnailImages.length) {
|
|
77
|
+
pipClass = 'has-thumbnail';
|
|
78
|
+
pipContent = `<img src="${thumbnailImages[i - 1].src}" alt="Slide ${i}" height="148"/>`;
|
|
79
|
+
} else {
|
|
80
|
+
pipContent = `Slide ${i}`;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
pips += `<button class="control-${i} ${pipClass}" data-slide="${i}" ${i == 1 ? "aria-current":""}>${pipContent}</button>`;
|
|
68
84
|
}
|
|
69
85
|
carouselControls.innerHTML = pips;
|
|
70
86
|
|
|
@@ -26,14 +26,14 @@ class iamCollapsibleSideMenu extends HTMLElement {
|
|
|
26
26
|
<link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous">
|
|
27
27
|
<div class="container" part="container">
|
|
28
28
|
|
|
29
|
-
<div class="side-menu">
|
|
30
|
-
<button class="btn btn-compact fa-chevron-right btn-secondary btn-sm btn-collapse">Open or close Collapsible menu</button>
|
|
31
|
-
<div class="side-menu-content closed">
|
|
29
|
+
<div class="side-menu" part="side-menu">
|
|
30
|
+
<button class="btn btn-compact fa-chevron-right btn-secondary btn-sm btn-collapse" part="btn">Open or close Collapsible menu</button>
|
|
31
|
+
<div class="side-menu-content closed" part="side-menu-content">
|
|
32
32
|
<slot name="menu"></slot>
|
|
33
33
|
</div>
|
|
34
34
|
</div>
|
|
35
35
|
|
|
36
|
-
<div class="main-content">
|
|
36
|
+
<div class="main-content" part="main-content">
|
|
37
37
|
<slot></slot>
|
|
38
38
|
</div>
|
|
39
39
|
|
|
@@ -67,7 +67,7 @@ class iamCollapsibleSideMenu extends HTMLElement {
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
|
|
70
|
-
if(this.hasAttribute('open')){
|
|
70
|
+
if(this.hasAttribute('open') && window.innerWidth > 992){
|
|
71
71
|
sideMenu.classList.add('open');
|
|
72
72
|
button.setAttribute('aria-expanded', true);
|
|
73
73
|
}
|
|
@@ -26,13 +26,15 @@ class iamFileupload extends HTMLElement {
|
|
|
26
26
|
${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
|
|
27
27
|
</style>
|
|
28
28
|
<div class="file-upload">
|
|
29
|
-
<span class="file-upload__title">Upload file</span>
|
|
29
|
+
<span class="file-upload__title" part="title">Upload file</span>
|
|
30
30
|
<p class="helper-text"><slot name="helper"></slot></p>
|
|
31
|
-
<button class="btn btn-primary"><slot name="btn"></slot> Upload ${this.hasAttribute('data-filetype') ? this.getAttribute('data-filetype') : 'file'}</button>
|
|
31
|
+
<button class="btn btn-primary" type="button" part="button"><slot name="btn"></slot> Upload ${this.hasAttribute('data-filetype') ? this.getAttribute('data-filetype') : 'file'}</button>
|
|
32
32
|
<div class="drop-area"></div>
|
|
33
33
|
<hr/>
|
|
34
34
|
<slot></slot>
|
|
35
|
-
<div class="files"><slot name="files"></slot></div>
|
|
35
|
+
<div class="files" part="files"><slot name="files"></slot></div>
|
|
36
|
+
<span class="invalid-feedback ext">Some files did not match the accpeted extension type.</span>
|
|
37
|
+
<span class="invalid-feedback size">Some files Were too large to upload.</span>
|
|
36
38
|
</div>
|
|
37
39
|
`;
|
|
38
40
|
this.shadowRoot.appendChild(template.content.cloneNode(true));
|
|
@@ -51,6 +53,30 @@ class iamFileupload extends HTMLElement {
|
|
|
51
53
|
|
|
52
54
|
fileupload(this,wrapper);
|
|
53
55
|
}
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
static get observedAttributes() {
|
|
59
|
+
return ["data-filename"];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
attributeChangedCallback(attrName, oldVal, newVal) {
|
|
63
|
+
|
|
64
|
+
switch (attrName) {
|
|
65
|
+
case "data-filename": {
|
|
66
|
+
if(oldVal != newVal){
|
|
67
|
+
|
|
68
|
+
const filesWrapper = this.shadowRoot.querySelector('.files');
|
|
69
|
+
|
|
70
|
+
filesWrapper.innerHTML = `<span class="file">${newVal} <button data-file="${newVal}">Remove</button></span>`;
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
54
80
|
}
|
|
55
81
|
|
|
56
82
|
export default iamFileupload;
|
|
@@ -40,9 +40,9 @@ class iamFilterlist extends HTMLElement {
|
|
|
40
40
|
<div class="form-control__wrapper">
|
|
41
41
|
<label for="search" class="visually-hidden">Search</label>
|
|
42
42
|
<span class="suffix" role="presentation"><slot name="icon"></slot></span>
|
|
43
|
-
<input name="search" id="search" type="text" class="form-control" autocomplete="off" placeholder="Search" />
|
|
43
|
+
<input name="search" id="search" type="text" class="form-control" autocomplete="off" placeholder="Search" part="search-input" />
|
|
44
44
|
</div>
|
|
45
|
-
<div class="list__wrapper">
|
|
45
|
+
<div class="list__wrapper" part="wrapper">
|
|
46
46
|
<slot></slot>
|
|
47
47
|
</div>
|
|
48
48
|
`;
|
|
@@ -26,10 +26,10 @@ class iamInlineEdit extends HTMLElement {
|
|
|
26
26
|
<link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous">
|
|
27
27
|
|
|
28
28
|
<slot></slot>
|
|
29
|
-
<div class="btns">
|
|
30
|
-
<button class="btn btn-action" id="save"><i class="fa-regular fa-save m-0"></i> Save</button><button class="btn btn-action" id="cancel">Cancel</button>
|
|
29
|
+
<div class="btns" part="btns">
|
|
30
|
+
<button class="btn btn-action" id="save" part="save-btn"><i class="fa-regular fa-save m-0"></i> Save</button><button class="btn btn-action" id="cancel" part="cancel-btn">Cancel</button>
|
|
31
31
|
</div>
|
|
32
|
-
<div class="status pe-none">
|
|
32
|
+
<div class="status pe-none" part="status">
|
|
33
33
|
<span class="btn btn-action border-0 bg-transparent prevent-invert d-none" id="saving"><i class="fa-regular fa-spinner fa-spin me-1"></i> Saving...</span>
|
|
34
34
|
<span class="btn btn-action border-0 bg-transparent prevent-invert d-none" id="saved"><i class="fa-regular fa-check me-1"></i> Saved</span>
|
|
35
35
|
<span class="btn btn-action border-0 bg-transparent prevent-invert d-none" id="notsaved"><i class="fa-regular fa-circle-info me-1"></i> Not Saved</span>
|
|
@@ -29,9 +29,9 @@ class iamMultiselect extends HTMLElement {
|
|
|
29
29
|
<div class="wrapper">
|
|
30
30
|
|
|
31
31
|
<slot name="checked"></slot>
|
|
32
|
-
<input name="search" id="search" autocomplete="off" required />
|
|
32
|
+
<input name="search" id="search" autocomplete="off" required part="search-input"/>
|
|
33
33
|
<span class="admin-panel feedback">This field is required</span>
|
|
34
|
-
<div class="admin-panel dropdown">
|
|
34
|
+
<div class="admin-panel dropdown" part="dropdown">
|
|
35
35
|
<slot></slot>
|
|
36
36
|
</div>
|
|
37
37
|
<button id="clear"><span class="visually-hidden">Clear</span></button>
|
|
@@ -142,8 +142,9 @@ class iamMultiselect extends HTMLElement {
|
|
|
142
142
|
|
|
143
143
|
let checkbox = label.querySelector('input');
|
|
144
144
|
let searchValue = checkbox.value;
|
|
145
|
+
let labelText = label.textContent;
|
|
145
146
|
|
|
146
|
-
if(searchValue.toLowerCase().includes(search.value.toLowerCase())){
|
|
147
|
+
if(searchValue.toLowerCase().includes(search.value.toLowerCase()) || labelText.toLowerCase().includes(search.value.toLowerCase())){
|
|
147
148
|
label.removeAttribute('slot')
|
|
148
149
|
}
|
|
149
150
|
else {
|
|
@@ -41,7 +41,7 @@ class iamNotification extends HTMLElement {
|
|
|
41
41
|
<div class="notification">
|
|
42
42
|
<div class="notification__icon"><slot name="icon"></slot></div>
|
|
43
43
|
<div class="notification__inner"><div class="notification__text"><slot></slot></div>${ buttons.length ? `<div class="notification__btns"><slot name="btns"></slot></div>` : '' }</div>
|
|
44
|
-
${ this.hasAttribute('data-dismiss') ? `<div class="notification__dismiss"><button data-dismiss-button>Dismiss</button></div>` : ''}
|
|
44
|
+
${ this.hasAttribute('data-dismiss') ? `<div class="notification__dismiss"><button data-dismiss-button part="dismiss-btn">Dismiss</button></div>` : ''}
|
|
45
45
|
</div>
|
|
46
46
|
`;
|
|
47
47
|
this.shadowRoot.appendChild(template.content.cloneNode(true));
|