@iamproperty/components 7.8.2--beta3 → 7.8.2--beta4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/advanced-select.component.css +1 -1
- package/assets/css/components/advanced-select.component.css.map +1 -1
- package/assets/css/components/banner.preload.css +1 -0
- package/assets/css/components/banner.preload.css.map +1 -0
- 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/card.module.css +1 -1
- package/assets/css/components/card.module.css.map +1 -1
- package/assets/css/components/card.preload.css +1 -0
- package/assets/css/components/card.preload.css.map +1 -0
- package/assets/css/components/carousel.component.css +1 -1
- package/assets/css/components/carousel.component.css.map +1 -1
- package/assets/css/components/carousel.config.css +1 -1
- package/assets/css/components/carousel.config.css.map +1 -1
- package/assets/css/components/config.component.css +1 -1
- package/assets/css/components/config.component.css.map +1 -1
- package/assets/css/components/content.component.css +1 -1
- package/assets/css/components/content.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/filter-card.component.css +1 -1
- package/assets/css/components/filter-card.component.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/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/record-card.component.css +1 -1
- package/assets/css/components/record-card.component.css.map +1 -1
- package/assets/css/components/search.component.css +1 -1
- package/assets/css/components/search.component.css.map +1 -1
- package/assets/css/components/skeleton.global.css +1 -1
- package/assets/css/components/skeleton.global.css.map +1 -1
- package/assets/css/components/slider.css +1 -1
- package/assets/css/components/slider.css.map +1 -1
- package/assets/css/components/split-button.component.css +1 -1
- package/assets/css/components/split-button.component.css.map +1 -1
- package/assets/css/components/std-nav-standalone.component.css +1 -1
- package/assets/css/components/std-nav-standalone.component.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/tag.component.css +1 -1
- package/assets/css/components/tag.component.css.map +1 -1
- package/assets/css/components/video-card.component.css +1 -1
- package/assets/css/components/video-card.component.css.map +1 -1
- package/assets/css/core.min.css +1 -1
- package/assets/css/core.min.css.map +1 -1
- package/assets/css/elements/dropdown.css +1 -1
- package/assets/css/elements/dropdown.css.map +1 -1
- package/assets/css/elements/forms.css +1 -1
- package/assets/css/elements/forms.css.map +1 -1
- package/assets/css/elements/links--global.css +1 -1
- package/assets/css/elements/links--global.css.map +1 -1
- package/assets/css/elements/links.css +1 -1
- package/assets/css/elements/links.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.min.js +2 -2
- package/assets/js/components/address-lookup/address-lookup.component.min.js +4 -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 +2 -2
- package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
- package/assets/js/components/banner/banner.component.min.js +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/bone/bone.component.min.js +1 -1
- package/assets/js/components/button/button.component.min.js +1 -1
- package/assets/js/components/calendar/calendar.component.min.js +2 -2
- package/assets/js/components/card/card.component.js +114 -125
- package/assets/js/components/card/card.component.min.js +7 -7
- package/assets/js/components/card/card.component.min.js.map +1 -1
- package/assets/js/components/carousel/carousel.component.js +83 -29
- package/assets/js/components/carousel/carousel.component.min.js +16 -11
- package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
- package/assets/js/components/config/config.component.min.js +7 -7
- package/assets/js/components/config/config.component.min.js.map +1 -1
- package/assets/js/components/content/content.component.js +28 -69
- package/assets/js/components/content/content.component.min.js +4 -4
- package/assets/js/components/content/content.component.min.js.map +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 +2 -2
- package/assets/js/components/filter-card/filter-card.component.min.js +5 -5
- 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/form/form.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.min.js +1 -1
- package/assets/js/components/input-range/input-range.component.min.js +1 -1
- 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.min.js +1 -1
- package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
- package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +1 -1
- package/assets/js/components/multiselect/multiselect.component.min.js +4 -4
- package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
- package/assets/js/components/nav/nav.component.min.js +2 -2
- package/assets/js/components/notification/notification.component.min.js +1 -1
- package/assets/js/components/pagination/pagination.component.min.js +5 -5
- package/assets/js/components/password/password.component.min.js +1 -1
- package/assets/js/components/popover/popover.component.min.js +1 -1
- 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/rating/rating.component.min.js +1 -1
- package/assets/js/components/record-card/record-card.component.min.js +6 -6
- package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
- package/assets/js/components/search/search.component.js +234 -186
- package/assets/js/components/search/search.component.min.js +12 -7
- package/assets/js/components/search/search.component.min.js.map +1 -1
- package/assets/js/components/skeleton/skeleton.component.min.js +1 -1
- package/assets/js/components/slider/slider.component.min.js +2 -2
- package/assets/js/components/split-button/split-button.component.min.js +2 -2
- package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +5 -5
- package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
- package/assets/js/components/std-nav/std-nav.component.js +10 -9
- package/assets/js/components/std-nav/std-nav.component.min.js +9 -12
- package/assets/js/components/std-nav/std-nav.component.min.js.map +1 -1
- package/assets/js/components/std-nav-standalone/std-nav-standalone.component.min.js +5 -5
- package/assets/js/components/std-nav-standalone/std-nav-standalone.component.min.js.map +1 -1
- package/assets/js/components/table/table.component.min.js +1 -1
- package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
- package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
- package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
- package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
- package/assets/js/components/tabs/tabs.component.min.js +4 -4
- package/assets/js/components/tag/tag.component.min.js +3 -3
- package/assets/js/components/tag/tag.component.min.js.map +1 -1
- package/assets/js/components/tooltip/tooltip.component.min.js +1 -1
- package/assets/js/components/video/video.component.min.js +1 -1
- package/assets/js/components/video-card/video-card.component.min.js +9 -9
- package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
- package/assets/js/components/video-modal/video-modal.component.min.js +1 -1
- package/assets/js/components/word-count/word-count.component.min.js +1 -1
- package/assets/js/modules/card.module.js +12 -11
- package/assets/js/modules/content.js +40 -8
- package/assets/js/modules/content.test.js +62 -12
- package/assets/js/modules/data-layer.js +7 -6
- package/assets/js/modules/dropdown.js +0 -1
- package/assets/js/modules/nav.js +10 -3
- package/assets/js/modules/search.js +153 -0
- package/assets/js/modules/search.test.js +125 -0
- package/assets/js/modules/tabs.test.js +64 -12
- package/assets/js/modules/testimonial.test.js +44 -6
- package/assets/js/modules/videos.test.js +61 -13
- package/assets/js/scripts.bundle.js +3 -3
- package/assets/js/scripts.bundle.js.map +1 -1
- package/assets/js/scripts.bundle.min.js +2 -2
- package/assets/js/scripts.bundle.min.js.map +1 -1
- package/assets/sass/_components.scss +2 -63
- package/assets/sass/components/banner.preload.scss +26 -0
- package/assets/sass/components/card.component.scss +1 -7
- package/assets/sass/components/card.module.scss +6 -6
- package/assets/sass/components/card.preload.scss +80 -0
- package/assets/sass/components/carousel.component.scss +165 -0
- package/assets/sass/components/carousel.config.scss +85 -249
- package/assets/sass/components/content.component.scss +0 -7
- package/assets/sass/components/nav.component.scss +2 -1
- package/assets/sass/components/search.component.scss +89 -7
- package/assets/sass/components/skeleton.global.scss +4 -0
- package/assets/sass/elements/dropdown.css +2 -0
- package/assets/sass/elements/forms.scss +0 -27
- package/assets/sass/elements/links--global.scss +40 -2
- package/assets/sass/foundations/root.scss +0 -1
- package/assets/sass/utilities/js-display.css +2 -3
- package/assets/ts/components/card/card.component.ts +72 -62
- package/assets/ts/components/carousel/carousel.component.ts +84 -19
- package/assets/ts/components/content/content.component.ts +36 -100
- package/assets/ts/components/search/search.component.ts +257 -185
- package/assets/ts/components/std-nav/std-nav.component.ts +17 -16
- package/assets/ts/html.d.ts +6 -0
- package/assets/ts/modules/card.module.ts +20 -12
- package/assets/ts/modules/content.test.ts +84 -12
- package/assets/ts/modules/content.ts +56 -9
- package/assets/ts/modules/data-layer.ts +7 -11
- package/assets/ts/modules/dropdown.ts +0 -2
- package/assets/ts/modules/nav.ts +12 -3
- package/assets/ts/modules/search.test.ts +142 -0
- package/assets/ts/modules/search.ts +206 -0
- package/assets/ts/modules/tabs.test.ts +79 -12
- package/assets/ts/modules/testimonial.test.ts +45 -6
- package/assets/ts/modules/videos.test.ts +74 -14
- package/dist/components.es.js +25 -25
- package/dist/components.umd.js +163 -156
- package/package.json +1 -1
- package/assets/js/modules/carousel.js +0 -214
- package/assets/js/modules/carousel.test.js +0 -18
- package/assets/ts/modules/carousel.test.ts +0 -27
- package/assets/ts/modules/carousel.ts +0 -301
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
@use '../_func' as *;
|
|
2
|
-
@use '../elements/buttons' as *;
|
|
3
2
|
|
|
4
3
|
*,
|
|
5
4
|
*::before,
|
|
@@ -10,9 +9,3 @@
|
|
|
10
9
|
:host {
|
|
11
10
|
display: contents;
|
|
12
11
|
}
|
|
13
|
-
|
|
14
|
-
::slotted(iam-marketing:first-child:last-child) {
|
|
15
|
-
margin-bottom: 0;
|
|
16
|
-
min-height: 100%;
|
|
17
|
-
min-width: 100%;
|
|
18
|
-
}
|
|
@@ -120,9 +120,10 @@
|
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
@media screen and (min-width: 62em) {
|
|
123
|
+
min-width: 3rem;
|
|
123
124
|
width: fit-content;
|
|
124
125
|
height: auto;
|
|
125
|
-
margin: 0 0 0
|
|
126
|
+
margin: 0 0 0 1.5rem;
|
|
126
127
|
padding: 0 !important;
|
|
127
128
|
text-indent: 0;
|
|
128
129
|
padding-right: 0 !important;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
@use '
|
|
1
|
+
@use '../_func' as *;
|
|
2
|
+
@use '../elements/forms';
|
|
3
|
+
@use '../elements/dropdown';
|
|
4
|
+
@use '../elements/prefix';
|
|
3
5
|
|
|
4
6
|
@layer components {
|
|
5
7
|
|
|
@@ -18,7 +20,87 @@
|
|
|
18
20
|
}
|
|
19
21
|
}
|
|
20
22
|
|
|
23
|
+
:host {
|
|
24
|
+
display: block;
|
|
25
|
+
margin-top: 0.5rem;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.wrapper {
|
|
29
|
+
display: flex;
|
|
30
|
+
width: 100%;
|
|
31
|
+
position: relative;
|
|
32
|
+
|
|
33
|
+
.input__wrapper {
|
|
34
|
+
flex-grow: 1;
|
|
35
|
+
position: relative;
|
|
36
|
+
margin-top: 0!important;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.suffix {
|
|
40
|
+
flex-grow: 0;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
::slotted(input){
|
|
45
|
+
|
|
46
|
+
border-start-end-radius: 0 !important;
|
|
47
|
+
border-end-end-radius: 0 !important;
|
|
48
|
+
margin-top: 0!important;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
::slotted(label){
|
|
52
|
+
|
|
53
|
+
border-start-end-radius: 0 !important;
|
|
54
|
+
border-end-end-radius: 0 !important;
|
|
55
|
+
margin-top: 0!important;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
::slotted(button){
|
|
59
|
+
margin-top: 0!important;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* #region Clear seach button */
|
|
63
|
+
|
|
64
|
+
.clear-search {
|
|
65
|
+
display: var(--error-hide, block);
|
|
66
|
+
position: absolute;
|
|
67
|
+
top: 50%;
|
|
68
|
+
transform: translate(0,-50%);
|
|
69
|
+
right: 0.5rem;
|
|
70
|
+
margin: 0;
|
|
71
|
+
aspect-ratio: 1 / 1;
|
|
72
|
+
display: none;
|
|
73
|
+
|
|
74
|
+
&:not(:hover, :focus) {
|
|
75
|
+
border-color: transparent!important;
|
|
76
|
+
background-color: transparent!important;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
:host(.has-value) .clear-search {
|
|
81
|
+
display: block!important;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* #endregion */
|
|
85
|
+
|
|
86
|
+
/* #region datalist */
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
slot[name="datalist"] {
|
|
90
|
+
display: block;
|
|
91
|
+
position: relative;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
:host(:is(.js-show-datalist,.js-force-show-datalist)) ::slotted(datalist) {
|
|
95
|
+
display: block;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
::slotted(datalist:focus-within) {
|
|
99
|
+
display: block;
|
|
100
|
+
}
|
|
101
|
+
/* #endregion */
|
|
21
102
|
|
|
103
|
+
/* #region Stylised search */
|
|
22
104
|
:host(.search--stylised) ::slotted(input) {
|
|
23
105
|
|
|
24
106
|
outline: 1px solid var(--colour-border)!important;
|
|
@@ -38,18 +120,18 @@
|
|
|
38
120
|
outline: 1px solid var(--colour-info)!important;
|
|
39
121
|
}
|
|
40
122
|
|
|
41
|
-
:host(.search--stylised)
|
|
123
|
+
:host(.search--stylised) .suffix {
|
|
42
124
|
|
|
43
|
-
|
|
125
|
+
cursor: pointer;
|
|
44
126
|
background: transparent!important;
|
|
45
127
|
border-color: transparent!important;
|
|
46
|
-
color: var(--colour-
|
|
128
|
+
color: var(--colour-primary-theme)!important;
|
|
47
129
|
position: absolute!important;
|
|
48
130
|
top: 0;
|
|
49
131
|
left: 0;
|
|
50
132
|
}
|
|
51
133
|
|
|
52
|
-
:host(.hasInputSm)
|
|
134
|
+
:host(.hasInputSm) .suffix {
|
|
53
135
|
|
|
54
136
|
min-width: 2.5rem!important;
|
|
55
137
|
}
|
|
@@ -60,5 +142,5 @@
|
|
|
60
142
|
outline: none !important;
|
|
61
143
|
border: none !important;
|
|
62
144
|
}
|
|
63
|
-
|
|
145
|
+
/* #endregion */
|
|
64
146
|
}
|
|
@@ -95,6 +95,7 @@
|
|
|
95
95
|
top: 100%;
|
|
96
96
|
left: 0;
|
|
97
97
|
|
|
98
|
+
&:has(> .js-hide):not(:has(> *:not(.js-hide))):before,
|
|
98
99
|
&:empty:before {
|
|
99
100
|
content: "No results found"; /* TODO Allow for text to be overwritten */
|
|
100
101
|
background-color: white;
|
|
@@ -143,6 +144,7 @@
|
|
|
143
144
|
white-space: normal;
|
|
144
145
|
text-overflow: ellipsis;
|
|
145
146
|
overflow: clip;
|
|
147
|
+
outline: none;
|
|
146
148
|
|
|
147
149
|
&:not(:last-child){
|
|
148
150
|
margin: 0 0 0.25rem 0 !important;
|
|
@@ -821,31 +821,4 @@ $icon-tick: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' view
|
|
|
821
821
|
}
|
|
822
822
|
}
|
|
823
823
|
/* #endregion */
|
|
824
|
-
|
|
825
|
-
/* #region Clear seach button */
|
|
826
|
-
|
|
827
|
-
.clear-search {
|
|
828
|
-
display: var(--error-hide, block);
|
|
829
|
-
position: absolute;
|
|
830
|
-
top: 50%;
|
|
831
|
-
transform: translate(0,-50%);
|
|
832
|
-
right: 0.5rem;
|
|
833
|
-
margin: 0;
|
|
834
|
-
aspect-ratio: 1 / 1;
|
|
835
|
-
|
|
836
|
-
&:not(:hover, :focus) {
|
|
837
|
-
border-color: transparent!important;
|
|
838
|
-
background-color: transparent!important;
|
|
839
|
-
}
|
|
840
|
-
}
|
|
841
|
-
|
|
842
|
-
.input__wrapper:has(input[disabled],input.empty) .clear-search {
|
|
843
|
-
|
|
844
|
-
display: none;
|
|
845
|
-
}
|
|
846
|
-
|
|
847
|
-
.input__wrapper:has(input:is([name$="Alt"]):not([data-value],[data-placeholder])) .clear-search {
|
|
848
|
-
display: none;
|
|
849
|
-
}
|
|
850
|
-
/* #endregion */
|
|
851
824
|
}
|
|
@@ -136,6 +136,29 @@
|
|
|
136
136
|
text-decoration: none;
|
|
137
137
|
border-radius: var(--card-border-radius) !important;
|
|
138
138
|
|
|
139
|
+
|
|
140
|
+
$theme-colors: (
|
|
141
|
+
'primary': var(--colour-primary),
|
|
142
|
+
'secondary': var(--colour-secondary),
|
|
143
|
+
'info': var(--colour-info),
|
|
144
|
+
'warning': var(--colour-warning),
|
|
145
|
+
'success': var(--colour-success),
|
|
146
|
+
'complete': var(--colour-complete),
|
|
147
|
+
'danger': var(--colour-danger),
|
|
148
|
+
'dark': var(--colour-dark),
|
|
149
|
+
'light': var(--colour-light),
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
@each $color, $value in $theme-colors {
|
|
153
|
+
|
|
154
|
+
&:has(.colour-#{$color}){
|
|
155
|
+
|
|
156
|
+
--hover-outline-colour: var(--colour-#{$color}) !important;
|
|
157
|
+
--card-icon-bg: var(--colour-warning)!important;
|
|
158
|
+
--card-icon-colour: var(--colour-primary-theme)!important;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
139
162
|
&:not(:hover, :focus, .hover, :active, .active) {
|
|
140
163
|
|
|
141
164
|
outline: none !important;
|
|
@@ -148,16 +171,31 @@
|
|
|
148
171
|
outline: 2px solid var(--hover-outline-colour);
|
|
149
172
|
}
|
|
150
173
|
|
|
174
|
+
&:is(:focus) {
|
|
175
|
+
|
|
176
|
+
--card-icon-bg: var(--colour-primary-theme);
|
|
177
|
+
--card-icon-colour: #ffffff;
|
|
178
|
+
outline: 2px solid var(--hover-outline-colour);
|
|
179
|
+
}
|
|
180
|
+
|
|
151
181
|
&:is(:hover, :focus, .hover) {
|
|
152
182
|
|
|
153
183
|
--card-icon-bg: var(--colour-primary-theme);
|
|
154
184
|
--card-icon-colour: #ffffff;
|
|
185
|
+
|
|
186
|
+
outline: 2px solid var(--hover-outline-colour);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
&:has(.card--article):is(:hover, :focus, .hover){
|
|
190
|
+
|
|
191
|
+
outline: none !important;
|
|
155
192
|
}
|
|
156
193
|
|
|
157
194
|
|
|
158
195
|
&:is(:active, .active){
|
|
159
|
-
|
|
160
|
-
|
|
196
|
+
//--card-icon-bg: var(--colour-primary-theme);
|
|
197
|
+
//--card-icon-colour: #ffffff;
|
|
198
|
+
--card-icon-right: var(--card-icon-right-overide, 0.5rem);
|
|
161
199
|
}
|
|
162
200
|
|
|
163
201
|
&:before {
|
|
@@ -1,17 +1,24 @@
|
|
|
1
|
-
import { trackComponent
|
|
1
|
+
import { trackComponent } from '../_global';
|
|
2
2
|
import { cardHTML, setupCard } from '../../modules/card.module';
|
|
3
3
|
import iamMenu from '../menu/menu.component';
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
type CardSelectionDetail = {
|
|
6
|
+
'Card value': string;
|
|
7
|
+
'input name': string | null;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
type CardButtonDetail = {
|
|
11
|
+
Title: string | null;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const getAssetLocation = (): string => document.body.getAttribute('data-assets-location') || '/assets';
|
|
6
15
|
|
|
7
16
|
class iamCard extends HTMLElement {
|
|
8
17
|
constructor() {
|
|
9
18
|
super();
|
|
10
|
-
this.attachShadow({ mode: 'open' });
|
|
19
|
+
const shadowRoot = this.attachShadow({ mode: 'open' });
|
|
11
20
|
|
|
12
|
-
const assetLocation =
|
|
13
|
-
? document.body.getAttribute('data-assets-location')
|
|
14
|
-
: '/assets';
|
|
21
|
+
const assetLocation = getAssetLocation();
|
|
15
22
|
const loadCSS = `@import "${assetLocation}/css/components/card.component.css";`;
|
|
16
23
|
|
|
17
24
|
const template = document.createElement('template');
|
|
@@ -26,52 +33,51 @@ class iamCard extends HTMLElement {
|
|
|
26
33
|
<slot name="primary-action"></slot>
|
|
27
34
|
`;
|
|
28
35
|
|
|
29
|
-
|
|
36
|
+
shadowRoot.appendChild(template.content.cloneNode(true));
|
|
30
37
|
}
|
|
31
38
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
const cardBody = cardComponent.shadowRoot.querySelector('.card__body');
|
|
39
|
+
connectedCallback(): void {
|
|
40
|
+
const shadowRoot = this.shadowRoot;
|
|
41
|
+
const cardBody = shadowRoot?.querySelector<HTMLDivElement>('.card__body');
|
|
36
42
|
|
|
37
|
-
|
|
38
|
-
? document.body.getAttribute('data-assets-location')
|
|
39
|
-
: '/assets';
|
|
43
|
+
if (!shadowRoot) return;
|
|
40
44
|
|
|
41
45
|
if (!window.customElements.get(`iam-menu`)) window.customElements.define(`iam-menu`, iamMenu);
|
|
42
46
|
|
|
43
|
-
setupCard(
|
|
47
|
+
setupCard(this);
|
|
44
48
|
|
|
45
49
|
// Add Illustration HTML
|
|
46
|
-
if (
|
|
47
|
-
cardBody
|
|
50
|
+
if (this.hasAttribute('data-illustration')) {
|
|
51
|
+
cardBody?.insertAdjacentHTML(
|
|
48
52
|
'afterbegin',
|
|
49
53
|
`<div class="card__illustration"><img src="${this.getAttribute('data-illustration')}" alt="" loading="lazy" /></div>`
|
|
50
54
|
);
|
|
51
55
|
}
|
|
52
56
|
|
|
53
57
|
// Add class that shows the right arrow icon
|
|
54
|
-
if (!
|
|
55
|
-
|
|
58
|
+
if (!this.querySelector('[slot="btns"]') && !this.querySelector('[slot="secondary"]') && !this.classList.contains('card--article') && !this.closest('.carousel--article-cards')) {
|
|
59
|
+
this.classList.add('show-icon');
|
|
56
60
|
}
|
|
57
61
|
|
|
58
62
|
// Secondary buttons and actions
|
|
59
63
|
|
|
60
64
|
// Add the dialog wrapper HTML
|
|
61
|
-
if (
|
|
62
|
-
|
|
65
|
+
if (this.querySelector('[slot="btns"]')) {
|
|
66
|
+
const menuTemplate = document.createElement('template');
|
|
67
|
+
menuTemplate.innerHTML = `<div class="menu__wrapper">
|
|
63
68
|
<button class="btn btn-secondary btn-compact fa-ellipsis-vertical m-0" popovertarget="actions" style="anchor-name: --anchor-el;" title="Further actions" type="button">Open further actions</button>
|
|
64
69
|
<iam-menu class="dialog--fix dialog--list" id="actions" style="position-anchor: --anchor-el;" popover>
|
|
65
70
|
<slot name="btns"></slot>
|
|
66
71
|
</iam-menu>
|
|
67
72
|
</div>`;
|
|
73
|
+
shadowRoot.appendChild(menuTemplate.content.cloneNode(true));
|
|
68
74
|
|
|
69
75
|
// safari and firefox anchor fix for cards
|
|
70
|
-
if (!CSS.supports('top', 'anchor(top)')) {
|
|
71
|
-
const actionButton =
|
|
72
|
-
const actionPopover =
|
|
76
|
+
if (typeof CSS === 'undefined' || !CSS.supports('top', 'anchor(top)')) {
|
|
77
|
+
const actionButton = shadowRoot.querySelector<HTMLButtonElement>('[popovertarget="actions"]');
|
|
78
|
+
const actionPopover = shadowRoot.querySelector<HTMLElement>('[popover]');
|
|
73
79
|
|
|
74
|
-
actionButton?.addEventListener('click', (
|
|
80
|
+
actionButton?.addEventListener('click', () => {
|
|
75
81
|
this.style.setProperty('overflow', 'visible');
|
|
76
82
|
this.style.setProperty('z-index', '999999');
|
|
77
83
|
|
|
@@ -79,85 +85,84 @@ class iamCard extends HTMLElement {
|
|
|
79
85
|
const top = viewportOffset.top;
|
|
80
86
|
const left = viewportOffset.left;
|
|
81
87
|
|
|
82
|
-
actionPopover
|
|
83
|
-
actionPopover
|
|
84
|
-
actionPopover
|
|
88
|
+
actionPopover?.style.setProperty('display', 'block');
|
|
89
|
+
actionPopover?.style.setProperty('top', top + 'px');
|
|
90
|
+
actionPopover?.style.setProperty('left', left - 100 + 'px');
|
|
85
91
|
});
|
|
86
92
|
|
|
87
|
-
document.addEventListener('scroll', (
|
|
88
|
-
actionPopover
|
|
93
|
+
document.addEventListener('scroll', () => {
|
|
94
|
+
actionPopover?.style.setProperty('display', 'none');
|
|
89
95
|
});
|
|
90
96
|
}
|
|
91
97
|
}
|
|
92
98
|
|
|
93
99
|
// Make sure slotted buttons and links have correct button classes
|
|
94
|
-
|
|
100
|
+
this.querySelectorAll<HTMLElement>('[slot="btns"]').forEach((button) => {
|
|
95
101
|
button.classList.add('btn');
|
|
96
102
|
button.classList.add('btn-action');
|
|
97
103
|
});
|
|
98
104
|
|
|
99
105
|
// Hide the default hover and focus states when interacting with the checkbox, dialog wrapper or secondary button
|
|
100
|
-
|
|
101
|
-
const element = cardComponent.querySelector('[slot="checkbox"],[slot="secondary"]');
|
|
106
|
+
const preventHoverElement = this.querySelector<HTMLElement>('[slot="checkbox"],[slot="secondary"]');
|
|
102
107
|
|
|
103
|
-
|
|
104
|
-
|
|
108
|
+
if (preventHoverElement) {
|
|
109
|
+
preventHoverElement.addEventListener('mouseenter', () => {
|
|
110
|
+
this.classList.add('prevent-hover');
|
|
105
111
|
});
|
|
106
112
|
|
|
107
|
-
|
|
108
|
-
|
|
113
|
+
preventHoverElement.addEventListener('mouseleave', () => {
|
|
114
|
+
this.classList.remove('prevent-hover');
|
|
109
115
|
});
|
|
110
116
|
}
|
|
111
117
|
|
|
112
|
-
|
|
113
|
-
const element = cardComponent.shadowRoot.querySelector('.menu__wrapper');
|
|
118
|
+
const menuWrapper = shadowRoot.querySelector<HTMLElement>('.menu__wrapper');
|
|
114
119
|
|
|
115
|
-
|
|
116
|
-
|
|
120
|
+
if (menuWrapper) {
|
|
121
|
+
menuWrapper.addEventListener('mouseenter', () => {
|
|
122
|
+
this.classList.add('prevent-hover');
|
|
117
123
|
});
|
|
118
124
|
|
|
119
|
-
|
|
120
|
-
|
|
125
|
+
menuWrapper.addEventListener('mouseleave', () => {
|
|
126
|
+
this.classList.remove('prevent-hover');
|
|
121
127
|
});
|
|
122
128
|
}
|
|
123
129
|
|
|
124
130
|
// Dispatch events of selecting checkboxes
|
|
125
|
-
const checkbox =
|
|
131
|
+
const checkbox = this.querySelector<HTMLInputElement>('input[type="checkbox"]');
|
|
126
132
|
if (checkbox) {
|
|
127
133
|
checkbox.addEventListener('change', () => {
|
|
128
134
|
if (checkbox.checked) {
|
|
129
|
-
const customEvent = new CustomEvent('select-card', {
|
|
135
|
+
const customEvent = new CustomEvent<CardSelectionDetail>('select-card', {
|
|
130
136
|
detail: { 'Card value': checkbox.value, 'input name': checkbox.getAttribute('name') },
|
|
131
137
|
});
|
|
132
|
-
|
|
138
|
+
this.dispatchEvent(customEvent);
|
|
133
139
|
} else {
|
|
134
|
-
const customEvent = new CustomEvent('unselect-card', {
|
|
140
|
+
const customEvent = new CustomEvent<CardSelectionDetail>('unselect-card', {
|
|
135
141
|
detail: { 'Card value': checkbox.value, 'input name': checkbox.getAttribute('name') },
|
|
136
142
|
});
|
|
137
|
-
|
|
143
|
+
this.dispatchEvent(customEvent);
|
|
138
144
|
}
|
|
139
145
|
});
|
|
140
146
|
}
|
|
141
147
|
|
|
142
148
|
// Dispatch events of click onto secondary buttons
|
|
143
|
-
const secondaryBtn =
|
|
149
|
+
const secondaryBtn = this.querySelector<HTMLElement>('[slot="secondary"]');
|
|
144
150
|
if (secondaryBtn) {
|
|
145
151
|
secondaryBtn.addEventListener('click', () => {
|
|
146
|
-
const customEvent = new CustomEvent('secondary-button-clicked', {
|
|
152
|
+
const customEvent = new CustomEvent<CardButtonDetail>('secondary-button-clicked', {
|
|
147
153
|
detail: { Title: secondaryBtn.getAttribute('title') },
|
|
148
154
|
});
|
|
149
|
-
|
|
155
|
+
this.dispatchEvent(customEvent);
|
|
150
156
|
});
|
|
151
157
|
}
|
|
152
158
|
|
|
153
159
|
// Dispatch events of click onto action buttons
|
|
154
|
-
|
|
155
|
-
Array.from(actionBtns).forEach((button) => {
|
|
160
|
+
this.querySelectorAll<HTMLElement>('[slot="btns"]').forEach((button) => {
|
|
156
161
|
button.addEventListener('click', () => {
|
|
157
|
-
const customEvent = new CustomEvent('action-button-clicked', {
|
|
162
|
+
const customEvent = new CustomEvent<CardButtonDetail>('action-button-clicked', {
|
|
158
163
|
detail: { Title: button.getAttribute('title') },
|
|
159
164
|
});
|
|
160
|
-
|
|
165
|
+
this.dispatchEvent(customEvent);
|
|
161
166
|
});
|
|
162
167
|
});
|
|
163
168
|
|
|
@@ -165,7 +170,7 @@ class iamCard extends HTMLElement {
|
|
|
165
170
|
if(this.querySelector('[slot="link"]'))
|
|
166
171
|
this.classList.add('hasLink');
|
|
167
172
|
|
|
168
|
-
trackComponent(
|
|
173
|
+
trackComponent(this, 'iam-card', [
|
|
169
174
|
'select-card',
|
|
170
175
|
'unselect-card',
|
|
171
176
|
'secondary-button-clicked',
|
|
@@ -173,22 +178,27 @@ class iamCard extends HTMLElement {
|
|
|
173
178
|
]);
|
|
174
179
|
}
|
|
175
180
|
|
|
176
|
-
static get observedAttributes():
|
|
181
|
+
static get observedAttributes(): string[] {
|
|
177
182
|
return ['data-image'];
|
|
178
183
|
}
|
|
179
184
|
|
|
180
|
-
attributeChangedCallback(attrName, oldVal, newVal): void {
|
|
185
|
+
attributeChangedCallback(attrName: string, oldVal: string | null, newVal: string | null): void {
|
|
186
|
+
const shadowRoot = this.shadowRoot;
|
|
187
|
+
|
|
188
|
+
if (!shadowRoot) return;
|
|
189
|
+
|
|
181
190
|
switch (attrName) {
|
|
182
191
|
case 'data-total': {
|
|
183
|
-
|
|
184
|
-
|
|
192
|
+
const cardTotal = shadowRoot.querySelector<HTMLDivElement>('.card__total');
|
|
193
|
+
|
|
194
|
+
if (cardTotal) cardTotal.innerHTML = newVal || '';
|
|
185
195
|
break;
|
|
186
196
|
}
|
|
187
197
|
case 'data-image': {
|
|
188
198
|
if (oldVal != newVal) {
|
|
189
|
-
const cardHeadImg =
|
|
199
|
+
const cardHeadImg = shadowRoot.querySelector<HTMLImageElement>('.card__head img');
|
|
190
200
|
|
|
191
|
-
if (cardHeadImg) cardHeadImg.setAttribute('src', newVal);
|
|
201
|
+
if (cardHeadImg) cardHeadImg.setAttribute('src', newVal || '');
|
|
192
202
|
}
|
|
193
203
|
break;
|
|
194
204
|
}
|