@iamproperty/components 5.6.0 → 5.6.1-beta10
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/card.css +1 -1
- package/assets/css/components/card.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/inline-edit.preload.css +1 -1
- package/assets/css/components/inline-edit.preload.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/table.global.css +1 -1
- package/assets/css/components/table.global.css.map +1 -1
- package/assets/css/components/tabs.css +1 -1
- package/assets/css/components/tabs.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 +3 -3
- package/assets/js/components/address-lookup/address-lookup.component.min.js +6 -6
- 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 +5 -4
- package/assets/js/components/card/card.component.min.js +9 -9
- package/assets/js/components/card/card.component.min.js.map +1 -1
- package/assets/js/components/carousel/carousel.component.js +3 -3
- package/assets/js/components/carousel/carousel.component.min.js +5 -5
- package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
- package/assets/js/components/collapsible-side/collapsible-side.component.js +14 -10
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js +14 -14
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js.map +1 -1
- package/assets/js/components/fileupload/fileupload.component.js +3 -3
- package/assets/js/components/fileupload/fileupload.component.min.js +8 -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 +11 -3
- package/assets/js/components/inline-edit/inline-edit.component.min.js +7 -7
- 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 +1 -1
- 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.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 +2 -2
- package/assets/js/dynamic.min.js +5 -5
- package/assets/js/dynamic.min.js.map +1 -1
- package/assets/js/modules/dialogs.js +10 -5
- package/assets/js/modules/dynamicEvents.js +3 -0
- package/assets/js/modules/fileupload.js +2 -9
- package/assets/js/modules/helpers.js +4 -0
- package/assets/js/scripts.bundle.js +17 -17
- 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 +47 -0
- package/assets/sass/_functions/variables.scss +1 -1
- package/assets/sass/components/card.scss +88 -1
- package/assets/sass/components/collapsible-side.scss +63 -48
- package/assets/sass/components/fileupload.scss +1 -0
- package/assets/sass/components/inline-edit.preload.scss +57 -3
- package/assets/sass/components/multiselect.scss +5 -1
- package/assets/sass/components/table.global.scss +4 -19
- package/assets/sass/components/tabs.scss +1 -6
- package/assets/sass/elements/buttons.scss +1 -1
- package/assets/sass/elements/dialog.scss +29 -1
- package/assets/sass/elements/forms.scss +40 -9
- package/assets/sass/elements/progress.scss +159 -17
- package/assets/sass/foundations/reboot.scss +3 -3
- package/assets/sass/foundations/root.scss +2 -2
- package/assets/ts/components/actionbar/actionbar.component.ts +7 -7
- package/assets/ts/components/address-lookup/address-lookup.component.ts +3 -3
- package/assets/ts/components/card/card.component.ts +6 -4
- package/assets/ts/components/carousel/carousel.component.ts +3 -3
- package/assets/ts/components/collapsible-side/collapsible-side.component.ts +17 -11
- package/assets/ts/components/fileupload/fileupload.component.ts +3 -3
- package/assets/ts/components/filterlist/filterlist.component.ts +2 -2
- package/assets/ts/components/inline-edit/inline-edit.component.ts +15 -4
- package/assets/ts/components/multiselect/multiselect.component.ts +4 -3
- package/assets/ts/components/notification/notification.component.ts +1 -1
- package/assets/ts/modules/dialogs.ts +13 -5
- package/assets/ts/modules/dynamicEvents.ts +3 -0
- package/assets/ts/modules/fileupload.ts +3 -14
- package/assets/ts/modules/helpers.ts +6 -0
- package/dist/components.es.js +550 -621
- package/dist/components.umd.js +86 -86
- package/dist/style.css +1 -1
- package/package.json +4 -4
- package/src/components/Card/README.md +1 -0
- 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
|
|
@@ -182,12 +182,12 @@ details {
|
|
|
182
182
|
var(--padding-inline) [container-end]
|
|
183
183
|
var(--full-width-start) [full-width-end];
|
|
184
184
|
|
|
185
|
-
&:not(:has(.container:last-child)){
|
|
185
|
+
&:not(:has(.container:last-child)):not(:has(iam-collapsible-side:last-child)){
|
|
186
186
|
padding-bottom: 1rem;
|
|
187
187
|
}
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
-
main > :not(.full-width, .container, iam-header, [class*="bg-"]) {
|
|
190
|
+
main > :not(.full-width, .container, iam-header, iam-collapsible-side, [class*="bg-"]) {
|
|
191
191
|
grid-column: content;
|
|
192
192
|
}
|
|
193
193
|
|
|
@@ -196,7 +196,7 @@ main > :is(.full-width, .container, iam-header) {
|
|
|
196
196
|
grid-column: container;
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
-
main > :is(.full-width, [class*="bg-"]) {
|
|
199
|
+
main > :is(.full-width, [class*="bg-"], iam-collapsible-side) {
|
|
200
200
|
grid-column: full-width;
|
|
201
201
|
}
|
|
202
202
|
|
|
@@ -97,7 +97,7 @@ $root: ':root'!default;
|
|
|
97
97
|
@include light-mode() {
|
|
98
98
|
|
|
99
99
|
// Reset the colours of lighter backgrounds to make sure they aren't over written by dark mode. Some other tweaks to colours are applied
|
|
100
|
-
[class*="bg-"]:not(.bg-primary):not(.bg-dark):not(.bg-danger):not(.bg-white):not(.bg-admin):not(.bg-canvas):not(.bg-canvas-2):not(.invert-colours) {
|
|
100
|
+
html:not(.dark-theme) [class*="bg-"]:not(.bg-primary):not(.bg-dark):not(.bg-danger):not(.bg-white):not(.bg-admin):not(.bg-canvas):not(.bg-canvas-2):not(.invert-colours) {
|
|
101
101
|
|
|
102
102
|
@each $color, $value in $theme-colors {
|
|
103
103
|
--colour-#{$color}: #{$value};
|
|
@@ -120,7 +120,7 @@ $root: ':root'!default;
|
|
|
120
120
|
@include dark-mode() {
|
|
121
121
|
|
|
122
122
|
// Reset the colours of lighter backgrounds to make sure they aren't over written by dark mode. Some other tweaks to colours are applied
|
|
123
|
-
[class*="bg-"]:not(.bg-canvas):not(.bg-canvas-2) {
|
|
123
|
+
[class*="bg-"]:not(.bg-canvas):not(.bg-canvas-2):not(.bg-light) {
|
|
124
124
|
|
|
125
125
|
@include reset-colours();
|
|
126
126
|
--colour-body: #{$primary};
|
|
@@ -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,17 @@ 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
51
|
</div>
|
|
52
52
|
<div class="pre-filled pb-2 js-hide">
|
|
53
53
|
<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>
|
|
54
|
+
<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
55
|
</div>
|
|
56
56
|
</div>
|
|
57
57
|
`;
|
|
@@ -33,17 +33,17 @@ 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
|
-
|
|
37
|
-
<div class="card__body">
|
|
36
|
+
${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>` : ''}
|
|
37
|
+
<div class="card__body" part="body">
|
|
38
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>` : ''}
|
|
39
|
+
${!this.hasAttribute('data-image') && !this.hasAttribute('data-record') && this.querySelector('[slot="badges"]') ? `<div class="card__badges"><slot name="badges"></slot></div>` : ''}
|
|
40
40
|
${this.hasAttribute('data-illustration') ? `<div class="card__illustration"><img src="${this.getAttribute('data-illustration')}" alt="" loading="lazy" /></div>` : ''}
|
|
41
41
|
<slot></slot>
|
|
42
42
|
${this.hasAttribute('data-total') ? `<div class="card__total">${this.getAttribute('data-total')}</div>` : ''}
|
|
43
43
|
</div>
|
|
44
44
|
${this.hasAttribute('data-add-link') ? `<button class="btn btn-compact btn-secondary fa-plus">Add property</button>` : ''}
|
|
45
45
|
<slot name="checkbox"></slot>
|
|
46
|
-
<div class="card__footer">
|
|
46
|
+
<div class="card__footer" part="footer">
|
|
47
47
|
<slot name="footer"></slot>
|
|
48
48
|
<slot name="btns"></slot>
|
|
49
49
|
${this.hasAttribute('data-cta') ? `<span class="link d-inline-block pt-0 mb-0">${this.getAttribute('data-cta')}</span>` : ''}
|
|
@@ -65,6 +65,7 @@ class iamCard extends HTMLElement {
|
|
|
65
65
|
const parentNode = this.parentNode.closest('a, button, label, router-link')
|
|
66
66
|
const card = this.shadowRoot.querySelector('.card')
|
|
67
67
|
const btnCompact = this.shadowRoot.querySelector('.btn-compact');
|
|
68
|
+
const recordType = this.hasAttribute('data-record') ? this.getAttribute('data-record') : '';
|
|
68
69
|
|
|
69
70
|
if(parentNode)
|
|
70
71
|
parentNode.setAttribute('tabindex','-1');
|
|
@@ -177,6 +178,7 @@ class iamCard extends HTMLElement {
|
|
|
177
178
|
window.location = addLocation;
|
|
178
179
|
});
|
|
179
180
|
}
|
|
181
|
+
|
|
180
182
|
}
|
|
181
183
|
|
|
182
184
|
static get observedAttributes() {
|
|
@@ -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>
|
|
@@ -24,20 +24,20 @@ class iamCollapsibleSideMenu extends HTMLElement {
|
|
|
24
24
|
${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
|
|
25
25
|
</style>
|
|
26
26
|
<link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous">
|
|
27
|
-
|
|
27
|
+
<div class="container" part="container">
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
+
<slot name="menu"></slot>
|
|
33
|
+
</div>
|
|
33
34
|
</div>
|
|
34
|
-
</div>
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
<div class="main-content" part="main-content">
|
|
37
|
+
<slot></slot>
|
|
38
|
+
</div>
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
</div>
|
|
41
41
|
`;
|
|
42
42
|
this.shadowRoot.appendChild(template.content.cloneNode(true));
|
|
43
43
|
}
|
|
@@ -65,7 +65,13 @@ class iamCollapsibleSideMenu extends HTMLElement {
|
|
|
65
65
|
this.querySelector(':scope > :is(h1,h2,h3,h4,h5,h6)').classList.add('h4');
|
|
66
66
|
this.querySelector(':scope > :is(h1,h2,h3,h4,h5,h6)').classList.add('main-content__title');
|
|
67
67
|
}
|
|
68
|
-
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
if(this.hasAttribute('open') && window.innerWidth > 992){
|
|
71
|
+
sideMenu.classList.add('open');
|
|
72
|
+
button.setAttribute('aria-expanded', true);
|
|
73
|
+
}
|
|
74
|
+
|
|
69
75
|
// Open the menu
|
|
70
76
|
button.addEventListener('click', (event) => {
|
|
71
77
|
|
|
@@ -26,13 +26,13 @@ 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
36
|
</div>
|
|
37
37
|
`;
|
|
38
38
|
this.shadowRoot.appendChild(template.content.cloneNode(true));
|
|
@@ -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>
|
|
@@ -47,6 +47,7 @@ class iamInlineEdit extends HTMLElement {
|
|
|
47
47
|
|
|
48
48
|
let label = this.querySelector('label');
|
|
49
49
|
let input = this.querySelector('input, textarea, select');
|
|
50
|
+
let preview = this.querySelector('.preview');
|
|
50
51
|
|
|
51
52
|
let statusSaving = this.shadowRoot.querySelector('#saving');
|
|
52
53
|
let statusSaved = this.shadowRoot.querySelector('#saved');
|
|
@@ -92,8 +93,14 @@ class iamInlineEdit extends HTMLElement {
|
|
|
92
93
|
input.blur();
|
|
93
94
|
inlineEdit.blur();
|
|
94
95
|
|
|
95
|
-
|
|
96
96
|
statusSaving.classList.remove('d-none');
|
|
97
|
+
|
|
98
|
+
if(preview){
|
|
99
|
+
|
|
100
|
+
console.log(input.value)
|
|
101
|
+
|
|
102
|
+
preview.innerHTML = input.value;
|
|
103
|
+
}
|
|
97
104
|
});
|
|
98
105
|
|
|
99
106
|
// Save
|
|
@@ -174,6 +181,10 @@ class iamInlineEdit extends HTMLElement {
|
|
|
174
181
|
inlineEdit.dispatchEvent(saveEvent);
|
|
175
182
|
|
|
176
183
|
statusSaving.classList.remove('d-none');
|
|
184
|
+
|
|
185
|
+
if(preview){
|
|
186
|
+
preview.innerHTML = input.value;
|
|
187
|
+
}
|
|
177
188
|
}
|
|
178
189
|
else if(!inlineEdit.querySelector('.inline-feedback')){
|
|
179
190
|
statusNotSaved.classList.remove('d-none');
|
|
@@ -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));
|
|
@@ -111,7 +111,7 @@ const extendDialogs = (body) => {
|
|
|
111
111
|
|
|
112
112
|
if (event.clientX < dialogDimensions.left || event.clientX > dialogDimensions.right || event.clientY < dialogDimensions.top || event.clientY > dialogDimensions.bottom) {
|
|
113
113
|
|
|
114
|
-
if(!event.target.closest('
|
|
114
|
+
if(!event.target.closest('dialog *')) // Weird bug when interacting with radio input fields within dialogs cuases it to close
|
|
115
115
|
dialog.close()
|
|
116
116
|
|
|
117
117
|
window.dataLayer = window.dataLayer || [];
|
|
@@ -130,12 +130,20 @@ const extendDialogs = (body) => {
|
|
|
130
130
|
event.stopPropagation();
|
|
131
131
|
|
|
132
132
|
let btn = event.target.closest('.dialog__wrapper > button');
|
|
133
|
-
let parent =
|
|
133
|
+
let parent = btn.parentNode;
|
|
134
134
|
let dataEvent = "openPopover"
|
|
135
135
|
let popover = parent.querySelector(':scope > dialog');
|
|
136
136
|
|
|
137
|
-
|
|
138
|
-
|
|
137
|
+
|
|
138
|
+
// close open dialogs
|
|
139
|
+
if(document.querySelector('*:not([data-keep-open]) > dialog[open]') && document.querySelector('*:not([data-keep-open]) > dialog[open]') != popover){
|
|
140
|
+
|
|
141
|
+
// Check that the ope dialog isn't a parent of the dialog being opened
|
|
142
|
+
if(btn.closest('dialog[open]') != document.querySelector('*:not([data-keep-open]) > dialog[open]')){
|
|
143
|
+
document.querySelector('*:not([data-keep-open]) > dialog[open]').close();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
139
147
|
|
|
140
148
|
// Remove active class from exiting active buttons
|
|
141
149
|
Array.from(document.querySelectorAll('.dialog__wrapper > button')).forEach((btnElement,index) => {
|
|
@@ -227,7 +235,7 @@ export const createDialog = (dialog) => {
|
|
|
227
235
|
}
|
|
228
236
|
|
|
229
237
|
// If you are using Vue eevents and bindings its recommended to add in the .mh-lg div manually to the dialog
|
|
230
|
-
if(!dialog.querySelector(':scope
|
|
238
|
+
if(!dialog.querySelector(':scope .mh-lg') && !dialog.classList.contains('dialog--multi')){
|
|
231
239
|
dialog.innerHTML = `<div class="mh-lg">${dialog.innerHTML}</div>`;
|
|
232
240
|
|
|
233
241
|
let dialogContent = dialog.querySelector('.mh-lg');
|
|
@@ -115,6 +115,9 @@ const runEvent = (element,event,eventType) => {
|
|
|
115
115
|
element.setAttribute(event['attribute'],event['value']);
|
|
116
116
|
});
|
|
117
117
|
break;
|
|
118
|
+
case "focus":
|
|
119
|
+
document.querySelector(`${event['target']}`).focus();
|
|
120
|
+
break;
|
|
118
121
|
case "removeAttribute":
|
|
119
122
|
Array.from(document.querySelectorAll(`${event['target']}`)).forEach(function(element,index){
|
|
120
123
|
element.removeAttribute(event['attribute']);
|
|
@@ -50,6 +50,9 @@ function fileupload(fileupload: Element, wrapper: Element) {
|
|
|
50
50
|
|
|
51
51
|
const changeEvent = new Event('change');
|
|
52
52
|
input.dispatchEvent(changeEvent);
|
|
53
|
+
|
|
54
|
+
const elementChangeEvent = new Event('elementChange');
|
|
55
|
+
fileupload.dispatchEvent(elementChangeEvent);
|
|
53
56
|
}
|
|
54
57
|
});
|
|
55
58
|
|
|
@@ -121,20 +124,6 @@ function fileupload(fileupload: Element, wrapper: Element) {
|
|
|
121
124
|
filesWrapper.innerHTML += `<span class="file">${filename} <button data-file="${filename}">Remove</button></span>`;
|
|
122
125
|
}
|
|
123
126
|
|
|
124
|
-
|
|
125
|
-
// Change the filename
|
|
126
|
-
wrapper.addEventListener('click', (event) => {
|
|
127
|
-
|
|
128
|
-
if (event && event.target instanceof HTMLElement && event.target.closest('.btn-primary')){
|
|
129
|
-
|
|
130
|
-
const button = event.target.closest('.btn-primary');
|
|
131
|
-
|
|
132
|
-
// If the input allows multiples then use the buffer clone input
|
|
133
|
-
const inputTrigger = input.hasAttribute('multiple') ? cloneInput : input;
|
|
134
|
-
|
|
135
|
-
inputTrigger.click();
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
127
|
}
|
|
139
128
|
|
|
140
129
|
export default fileupload;
|
|
@@ -100,6 +100,12 @@ export const addGlobalEvents = (body) => {
|
|
|
100
100
|
}
|
|
101
101
|
});
|
|
102
102
|
|
|
103
|
+
Array.from(document.querySelectorAll('label progress')).forEach((progress,index) => {
|
|
104
|
+
let label = progress.closest('label');
|
|
105
|
+
|
|
106
|
+
label.setAttribute('data-percent',progress.getAttribute('value'));
|
|
107
|
+
});
|
|
108
|
+
|
|
103
109
|
return null
|
|
104
110
|
}
|
|
105
111
|
|