@iamproperty/components 7.8.2--beta2 → 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/applied-filters.css +1 -1
- package/assets/css/components/applied-filters.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/badge-tag.css +1 -1
- package/assets/css/elements/badge-tag.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 +2 -2
- 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/badge-tag.css +1 -1
- 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/border.css +1 -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 +164 -157
- 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 {
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
.border-gradient {
|
|
63
|
-
background: linear-gradient(
|
|
63
|
+
background: linear-gradient(var(--bg-colour,Canvas), var(--bg-colour,Canvas)) padding-box, linear-gradient(to right, var(--colour-primary-theme), var(--colour-info)) border-box;
|
|
64
64
|
border: var(--border-width) solid transparent;
|
|
65
65
|
}
|
|
66
66
|
}
|
|
@@ -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
|
}
|