@iamproperty/components 3.4.7 → 3.6.0
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/bootstrap/LICENSE +22 -0
- package/assets/bootstrap/README.md +246 -0
- package/assets/bootstrap/js/src/alert.js +87 -0
- package/assets/bootstrap/js/src/base-component.js +85 -0
- package/assets/bootstrap/js/src/button.js +72 -0
- package/assets/bootstrap/js/src/carousel.js +475 -0
- package/assets/bootstrap/js/src/collapse.js +302 -0
- package/assets/bootstrap/js/src/dom/data.js +55 -0
- package/assets/bootstrap/js/src/dom/event-handler.js +320 -0
- package/assets/bootstrap/js/src/dom/manipulator.js +71 -0
- package/assets/bootstrap/js/src/dom/selector-engine.js +83 -0
- package/assets/bootstrap/js/src/dropdown.js +454 -0
- package/assets/bootstrap/js/src/modal.js +377 -0
- package/assets/bootstrap/js/src/offcanvas.js +283 -0
- package/assets/bootstrap/js/src/popover.js +97 -0
- package/assets/bootstrap/js/src/scrollspy.js +294 -0
- package/assets/bootstrap/js/src/tab.js +305 -0
- package/assets/bootstrap/js/src/toast.js +225 -0
- package/assets/bootstrap/js/src/tooltip.js +633 -0
- package/assets/bootstrap/js/src/util/backdrop.js +149 -0
- package/assets/bootstrap/js/src/util/component-functions.js +34 -0
- package/assets/bootstrap/js/src/util/config.js +66 -0
- package/assets/bootstrap/js/src/util/focustrap.js +115 -0
- package/assets/bootstrap/js/src/util/index.js +336 -0
- package/assets/bootstrap/js/src/util/sanitizer.js +118 -0
- package/assets/bootstrap/js/src/util/scrollbar.js +114 -0
- package/assets/bootstrap/js/src/util/swipe.js +146 -0
- package/assets/bootstrap/js/src/util/template-factory.js +160 -0
- package/assets/bootstrap/package.json +181 -0
- package/assets/bootstrap/scss/_accordion.scss +149 -0
- package/assets/bootstrap/scss/_alert.scss +71 -0
- package/assets/bootstrap/scss/_badge.scss +38 -0
- package/assets/bootstrap/scss/_breadcrumb.scss +40 -0
- package/assets/bootstrap/scss/_button-group.scss +142 -0
- package/assets/bootstrap/scss/_buttons.scss +207 -0
- package/assets/bootstrap/scss/_card.scss +234 -0
- package/assets/bootstrap/scss/_carousel.scss +226 -0
- package/assets/bootstrap/scss/_close.scss +40 -0
- package/assets/bootstrap/scss/_containers.scss +41 -0
- package/assets/bootstrap/scss/_dropdown.scss +249 -0
- package/assets/bootstrap/scss/_forms.scss +9 -0
- package/assets/bootstrap/scss/_functions.scss +302 -0
- package/assets/bootstrap/scss/_grid.scss +33 -0
- package/assets/bootstrap/scss/_helpers.scss +10 -0
- package/assets/bootstrap/scss/_images.scss +42 -0
- package/assets/bootstrap/scss/_list-group.scss +192 -0
- package/assets/bootstrap/scss/_maps.scss +54 -0
- package/assets/bootstrap/scss/_mixins.scss +43 -0
- package/assets/bootstrap/scss/_modal.scss +237 -0
- package/assets/bootstrap/scss/_nav.scss +172 -0
- package/assets/bootstrap/scss/_navbar.scss +278 -0
- package/assets/bootstrap/scss/_offcanvas.scss +144 -0
- package/assets/bootstrap/scss/_pagination.scss +109 -0
- package/assets/bootstrap/scss/_placeholders.scss +51 -0
- package/assets/bootstrap/scss/_popover.scss +196 -0
- package/assets/bootstrap/scss/_progress.scss +59 -0
- package/assets/bootstrap/scss/_reboot.scss +610 -0
- package/assets/bootstrap/scss/_root.scss +73 -0
- package/assets/bootstrap/scss/_spinners.scss +85 -0
- package/assets/bootstrap/scss/_tables.scss +164 -0
- package/assets/bootstrap/scss/_toasts.scss +73 -0
- package/assets/bootstrap/scss/_tooltip.scss +120 -0
- package/assets/bootstrap/scss/_transitions.scss +27 -0
- package/assets/bootstrap/scss/_type.scss +106 -0
- package/assets/bootstrap/scss/_utilities.scss +647 -0
- package/assets/bootstrap/scss/_variables.scss +1634 -0
- package/assets/bootstrap/scss/bootstrap-grid.scss +64 -0
- package/assets/bootstrap/scss/bootstrap-reboot.scss +9 -0
- package/assets/bootstrap/scss/bootstrap-utilities.scss +18 -0
- package/assets/bootstrap/scss/bootstrap.scss +51 -0
- package/assets/bootstrap/scss/forms/_floating-labels.scss +75 -0
- package/assets/bootstrap/scss/forms/_form-check.scss +175 -0
- package/assets/bootstrap/scss/forms/_form-control.scss +194 -0
- package/assets/bootstrap/scss/forms/_form-range.scss +91 -0
- package/assets/bootstrap/scss/forms/_form-select.scss +71 -0
- package/assets/bootstrap/scss/forms/_form-text.scss +11 -0
- package/assets/bootstrap/scss/forms/_input-group.scss +132 -0
- package/assets/bootstrap/scss/forms/_labels.scss +36 -0
- package/assets/bootstrap/scss/forms/_validation.scss +12 -0
- package/assets/bootstrap/scss/helpers/_clearfix.scss +3 -0
- package/assets/bootstrap/scss/helpers/_color-bg.scss +10 -0
- package/assets/bootstrap/scss/helpers/_colored-links.scss +12 -0
- package/assets/bootstrap/scss/helpers/_position.scss +36 -0
- package/assets/bootstrap/scss/helpers/_ratio.scss +26 -0
- package/assets/bootstrap/scss/helpers/_stacks.scss +15 -0
- package/assets/bootstrap/scss/helpers/_stretched-link.scss +15 -0
- package/assets/bootstrap/scss/helpers/_text-truncation.scss +7 -0
- package/assets/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
- package/assets/bootstrap/scss/helpers/_vr.scss +8 -0
- package/assets/bootstrap/scss/mixins/_alert.scss +15 -0
- package/assets/bootstrap/scss/mixins/_backdrop.scss +14 -0
- package/assets/bootstrap/scss/mixins/_banner.scss +9 -0
- package/assets/bootstrap/scss/mixins/_border-radius.scss +78 -0
- package/assets/bootstrap/scss/mixins/_box-shadow.scss +18 -0
- package/assets/bootstrap/scss/mixins/_breakpoints.scss +127 -0
- package/assets/bootstrap/scss/mixins/_buttons.scss +70 -0
- package/assets/bootstrap/scss/mixins/_caret.scss +64 -0
- package/assets/bootstrap/scss/mixins/_clearfix.scss +9 -0
- package/assets/bootstrap/scss/mixins/_color-scheme.scss +7 -0
- package/assets/bootstrap/scss/mixins/_container.scss +11 -0
- package/assets/bootstrap/scss/mixins/_deprecate.scss +10 -0
- package/assets/bootstrap/scss/mixins/_forms.scss +152 -0
- package/assets/bootstrap/scss/mixins/_gradients.scss +47 -0
- package/assets/bootstrap/scss/mixins/_grid.scss +151 -0
- package/assets/bootstrap/scss/mixins/_image.scss +16 -0
- package/assets/bootstrap/scss/mixins/_list-group.scss +24 -0
- package/assets/bootstrap/scss/mixins/_lists.scss +7 -0
- package/assets/bootstrap/scss/mixins/_pagination.scss +10 -0
- package/assets/bootstrap/scss/mixins/_reset-text.scss +17 -0
- package/assets/bootstrap/scss/mixins/_resize.scss +6 -0
- package/assets/bootstrap/scss/mixins/_table-variants.scss +24 -0
- package/assets/bootstrap/scss/mixins/_text-truncate.scss +8 -0
- package/assets/bootstrap/scss/mixins/_transition.scss +26 -0
- package/assets/bootstrap/scss/mixins/_utilities.scss +97 -0
- package/assets/bootstrap/scss/mixins/_visually-hidden.scss +29 -0
- package/assets/bootstrap/scss/utilities/_api.scss +47 -0
- package/assets/bootstrap/scss/vendor/_rfs.scss +354 -0
- package/assets/css/components/accordion.css +1 -1
- package/assets/css/components/accordion.css.map +1 -1
- package/assets/css/components/admin-panel.css +1 -0
- package/assets/css/components/admin-panel.css.map +1 -0
- package/assets/css/components/alert.css +1 -1
- package/assets/css/components/alert.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/card.css +1 -1
- package/assets/css/components/card.css.map +1 -1
- package/assets/css/components/carousel.css +1 -1
- package/assets/css/components/carousel.css.map +1 -1
- package/assets/css/components/charts.css +1 -1
- package/assets/css/components/charts.css.map +1 -1
- package/assets/css/components/container.css.map +1 -1
- package/assets/css/components/dialog.css +1 -1
- package/assets/css/components/dialog.css.map +1 -1
- package/assets/css/components/forms.css +1 -1
- package/assets/css/components/forms.css.map +1 -1
- package/assets/css/components/header.css +1 -1
- package/assets/css/components/header.css.map +1 -1
- package/assets/css/components/lists.css +1 -1
- package/assets/css/components/lists.css.map +1 -1
- package/assets/css/components/nav.css +1 -1
- package/assets/css/components/nav.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/property-searchbar.css +1 -1
- package/assets/css/components/property-searchbar.css.map +1 -1
- package/assets/css/components/stepper.css +1 -1
- package/assets/css/components/stepper.css.map +1 -1
- package/assets/css/components/table.css +1 -1
- package/assets/css/components/table.css.map +1 -1
- package/assets/css/components/tabs.css +1 -1
- package/assets/css/components/tabs.css.map +1 -1
- package/assets/css/components/tooltips.css +1 -1
- package/assets/css/components/tooltips.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/card/card.component.js +1 -1
- package/assets/js/components/card/card.component.min.js +5 -5
- package/assets/js/components/card/card.component.min.js.map +1 -1
- package/assets/js/components/filterlist/filterlist.component.js +13 -9
- package/assets/js/components/filterlist/filterlist.component.min.js +14 -5
- package/assets/js/components/filterlist/filterlist.component.min.js.map +1 -1
- package/assets/js/components/header/header.component.min.js +5 -5
- package/assets/js/components/table/table.component.js +16 -1
- package/assets/js/components/table/table.component.min.js +21 -11
- package/assets/js/components/table/table.component.min.js.map +1 -1
- package/assets/js/components/tabs/tabs.component.js +6 -2
- package/assets/js/components/tabs/tabs.component.min.js +6 -4
- package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
- package/assets/js/dynamic.min.js +2 -2
- package/assets/js/dynamic.min.js.map +1 -1
- package/assets/js/modules/applied-filters.js +6 -2
- package/assets/js/modules/helpers.js +36 -6
- package/assets/js/modules/table.js +27 -16
- package/assets/js/modules/tabs.js +4 -2
- package/assets/js/scripts.bundle.js +42 -20
- package/assets/js/scripts.bundle.js.map +1 -1
- package/assets/js/scripts.bundle.min.js +2 -2
- package/assets/js/scripts.bundle.min.js.map +1 -1
- package/assets/js/tests/table.spec.js +3 -2
- package/assets/sass/_corefiles.scss +18 -15
- package/assets/sass/_forms.scss +7 -7
- package/assets/sass/_functions/functions.scss +3 -4
- package/assets/sass/_functions/mixins.scss +10 -28
- package/assets/sass/_functions/utilities.scss +83 -9
- package/assets/sass/_functions/variables.scss +110 -57
- package/assets/sass/_tests/colours.spec.scss +8 -22
- package/assets/sass/_tests/func.spec.scss +1 -1
- package/assets/sass/components/accordion.scss +13 -0
- package/assets/sass/components/admin-panel.scss +174 -0
- package/assets/sass/components/alert.scss +22 -0
- package/assets/sass/components/applied-filters.scss +4 -0
- package/assets/sass/components/card.scss +12 -8
- package/assets/sass/components/carousel.scss +72 -0
- package/assets/sass/components/charts.scss +37 -1
- package/assets/sass/components/container.scss +1 -1
- package/assets/sass/components/dialog.scss +29 -15
- package/assets/sass/components/forms.scss +2 -2
- package/assets/sass/components/lists.scss +14 -0
- package/assets/sass/components/nav.scss +1 -1
- package/assets/sass/components/pagination.scss +5 -1
- package/assets/sass/components/stepper.scss +3 -3
- package/assets/sass/components/table.scss +163 -44
- package/assets/sass/components/tabs.scss +54 -85
- package/assets/sass/components/tooltips.scss +1 -1
- package/assets/sass/foundations/buttons.scss +381 -0
- package/assets/sass/foundations/links.scss +75 -75
- package/assets/sass/foundations/media.scss +1 -1
- package/assets/sass/foundations/reboot.scss +8 -9
- package/assets/sass/foundations/root.scss +44 -70
- package/assets/sass/foundations/type.scss +5 -1
- package/assets/sass/helpers/max-height.scss +3 -0
- package/assets/ts/components/card/card.component.ts +1 -1
- package/assets/ts/components/filterlist/filterlist.component.ts +13 -11
- package/assets/ts/components/table/table.component.ts +17 -1
- package/assets/ts/components/tabs/tabs.component.ts +7 -2
- package/assets/ts/modules/applied-filters.ts +9 -3
- package/assets/ts/modules/helpers.ts +57 -8
- package/assets/ts/modules/table.ts +38 -18
- package/assets/ts/modules/tabs.ts +7 -2
- package/assets/ts/tests/table.spec.ts +3 -3
- package/dist/components.es.js +195 -160
- package/dist/components.umd.js +37 -15
- package/dist/style.css +1 -1
- package/package.json +2 -1
- package/assets/css/components/buttons.css +0 -1
- package/assets/css/components/buttons.css.map +0 -1
- package/assets/css/components/panel.css +0 -1
- package/assets/css/components/panel.css.map +0 -1
- package/assets/sass/components/buttons.scss +0 -252
- package/assets/sass/components/panel.scss +0 -161
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
@use "../func" as *;
|
|
2
2
|
|
|
3
|
-
@import "
|
|
3
|
+
@import "../../bootstrap/scss/_root.scss";
|
|
4
4
|
|
|
5
5
|
:root {
|
|
6
6
|
// Print out the $vars array setup in the variables file so they can be used as CSS vars
|
|
@@ -25,109 +25,83 @@
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
// Extra vars needed
|
|
28
|
-
--body-bg: white;
|
|
29
|
-
--colour-underline: var(--colour-primary);
|
|
30
|
-
--colour-heading: var(--colour-primary);
|
|
31
|
-
--alpha: var(--bg-opacity,1);
|
|
32
|
-
--#{$variable-prefix}gradient: #{$gradient};
|
|
33
28
|
--content-max-width: #{$content-max-width};
|
|
34
29
|
--colour-brand: var(--colour-primary);
|
|
35
|
-
|
|
36
|
-
/* Button colours */
|
|
37
|
-
--btn-bg: var(--colour-warning);
|
|
38
|
-
--btn-text: var(--colour-primary);
|
|
39
|
-
--btn-hover-text: var(--colour-primary);
|
|
40
|
-
--btn-tertiary-bg: var(--colour-primary);
|
|
41
|
-
--btn-tertiary-hover-text: white;
|
|
42
30
|
}
|
|
43
31
|
|
|
44
32
|
// Dark mode; functional colours get updated
|
|
45
33
|
@media screen and (prefers-color-scheme: dark) {
|
|
46
34
|
:root {
|
|
47
|
-
|
|
48
|
-
|
|
35
|
+
|
|
36
|
+
@each $color, $value in $dark-mode-colors {
|
|
37
|
+
--colour-#{$color}: #{$value};
|
|
38
|
+
}
|
|
49
39
|
@include invert-colours();
|
|
50
40
|
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@media screen and (prefers-color-scheme: light) {
|
|
51
44
|
|
|
52
|
-
|
|
53
|
-
|
|
45
|
+
// Reset the colours of lighter backgrounds to make sure they aren't over written by dark mode. Some other tweaks to colours are applied
|
|
46
|
+
[class*="bg-"]:not(.bg-primary):not(.bg-dark):not(.bg-danger):not(.bg-white):not(.bg-canvas):not(.bg-canvas-2):not(.invert-colours) {
|
|
47
|
+
|
|
48
|
+
@each $color, $value in $theme-colors {
|
|
49
|
+
--colour-#{$color}: #{$value};
|
|
50
|
+
}
|
|
51
|
+
@include reset-colours();
|
|
52
|
+
--colour-body: var(--colour-primary);
|
|
53
|
+
color: var(--colour-body);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
// Override the colours when on a dark background, similiar to dark mode but on a module level
|
|
57
|
+
[class*="bg-"]:not(.bg-info):not(.bg-success):not(.bg-light):not(.bg-white):not(.bg-canvas):not(.bg-canvas-2):not(.prevent-invert),
|
|
58
|
+
.invert-colours {
|
|
59
|
+
|
|
60
|
+
@include invert-colours();
|
|
61
|
+
|
|
62
|
+
color: #{$colour-inverted};
|
|
58
63
|
}
|
|
59
64
|
}
|
|
60
65
|
|
|
61
|
-
@media screen {
|
|
66
|
+
@media screen and (prefers-color-scheme: dark) {
|
|
62
67
|
|
|
63
68
|
// Reset the colours of lighter backgrounds to make sure they aren't over written by dark mode. Some other tweaks to colours are applied
|
|
64
|
-
[class*="bg-"]:not(.bg-
|
|
69
|
+
[class*="bg-"]:not(.bg-canvas):not(.bg-canvas-2) {
|
|
65
70
|
|
|
66
71
|
@include reset-colours();
|
|
67
|
-
|
|
68
|
-
--colour-body: var(--colour-primary);
|
|
69
|
-
--colour-heading: var(--colour-primary);
|
|
72
|
+
--colour-body: #{$primary};
|
|
70
73
|
color: var(--colour-body);
|
|
74
|
+
}
|
|
71
75
|
|
|
72
|
-
|
|
73
|
-
--btn-text: var(--colour-white);
|
|
74
|
-
--colour-underline: var(--colour-primary);
|
|
76
|
+
@each $color, $value in $theme-colors {
|
|
75
77
|
|
|
76
|
-
.
|
|
78
|
+
.bg-#{$color}[class*="gradient-"] {
|
|
77
79
|
|
|
78
|
-
|
|
80
|
+
background-color: var(--colour-#{$color}-theme) !important;
|
|
79
81
|
}
|
|
80
|
-
|
|
81
82
|
}
|
|
82
|
-
|
|
83
83
|
|
|
84
|
+
[class*="bg-"][class*="gradient-"]:not(.bg-primary):not(.bg-dark):not(.bg-danger) {
|
|
84
85
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
--body-bg: var(--colour-light);
|
|
88
|
-
--colour-heading: var(--colour-dark);
|
|
89
|
-
color: var(--colour-dark);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Override the colours when on a dark background, similiar to dark mode but on a module level
|
|
93
|
-
.bg-primary:not(.prevent-invert),
|
|
94
|
-
.bg-dark:not(.prevent-invert),
|
|
95
|
-
.bg-danger:not(.prevent-invert),
|
|
96
|
-
.bg-black:not(.prevent-invert),
|
|
97
|
-
.invert-colours {
|
|
98
|
-
|
|
99
|
-
@if $compatible != "true" {
|
|
100
|
-
|
|
101
|
-
@include invert-colours();
|
|
86
|
+
@each $color, $value in $theme-colors {
|
|
87
|
+
--colour-#{$color}: #{$value};
|
|
102
88
|
}
|
|
103
|
-
|
|
89
|
+
@include reset-colours();
|
|
90
|
+
--colour-body: var(--colour-primary-theme);
|
|
91
|
+
color: var(--colour-body);
|
|
104
92
|
}
|
|
105
93
|
|
|
106
|
-
|
|
107
|
-
.bg-dark:not(.prevent-invert),
|
|
108
|
-
.bg-danger:not(.prevent-invert),
|
|
109
|
-
.bg-black:not(.prevent-invert),
|
|
110
|
-
.invert-colours {
|
|
94
|
+
[class*="bg-"][class*="gradient-"]:not(.bg-info):not(.bg-success):not(.bg-light):not(.prevent-invert) {
|
|
111
95
|
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
@include media-breakpoint-up(md) {
|
|
96
|
+
@include invert-colours();
|
|
119
97
|
|
|
120
|
-
.invert-colours-md {
|
|
121
|
-
|
|
122
|
-
@if $compatible != "true" {
|
|
123
|
-
|
|
124
|
-
@include invert-colours();
|
|
125
|
-
}
|
|
126
98
|
color: #{$colour-inverted};
|
|
127
|
-
--colour-underline: #{$colour-inverted};
|
|
128
99
|
}
|
|
100
|
+
}
|
|
129
101
|
|
|
130
|
-
|
|
131
|
-
|
|
102
|
+
|
|
103
|
+
@media (forced-colors: active) {
|
|
104
|
+
:root {
|
|
105
|
+
--contrast-outline-width: 1px;
|
|
132
106
|
}
|
|
133
107
|
}
|
|
@@ -11,7 +11,7 @@ small {
|
|
|
11
11
|
@include font-size($small-font-size);
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
@import "
|
|
14
|
+
@import "../../bootstrap/scss/_type.scss";
|
|
15
15
|
|
|
16
16
|
// #region headings
|
|
17
17
|
%heading {
|
|
@@ -27,6 +27,10 @@ small {
|
|
|
27
27
|
clear: both;
|
|
28
28
|
display: block;
|
|
29
29
|
padding-bottom: 2rem;
|
|
30
|
+
|
|
31
|
+
[class*="fa-"] {
|
|
32
|
+
margin-right: 0.5rem;
|
|
33
|
+
}
|
|
30
34
|
}
|
|
31
35
|
|
|
32
36
|
@include is('h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6,.display-1,.display-2, .display-3, .display-4'){
|
|
@@ -8,7 +8,7 @@ class iamCard extends HTMLElement {
|
|
|
8
8
|
const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';
|
|
9
9
|
const loadCSS = `@import "${assetLocation}/css/components/card.css";`;
|
|
10
10
|
|
|
11
|
-
if(this.querySelector('.
|
|
11
|
+
if(this.querySelector('.fa'))
|
|
12
12
|
this.classList.add('card--has-icon');
|
|
13
13
|
|
|
14
14
|
let classList = this.classList.toString();
|
|
@@ -22,14 +22,23 @@ class iamFilterlist extends HTMLElement {
|
|
|
22
22
|
${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
|
|
23
23
|
|
|
24
24
|
:host {
|
|
25
|
-
margin-bottom:
|
|
25
|
+
margin-bottom: 1rem;
|
|
26
26
|
display:block;
|
|
27
27
|
}
|
|
28
|
+
:host(.mh-sm){
|
|
29
|
+
max-height: none!important;
|
|
30
|
+
}
|
|
31
|
+
:host(.mh-md){
|
|
32
|
+
max-height: none!important;
|
|
33
|
+
}
|
|
34
|
+
:host(.mh-lg){
|
|
35
|
+
max-height: none!important;
|
|
36
|
+
}
|
|
28
37
|
</style>
|
|
29
38
|
<div class="form-control__wrapper">
|
|
30
39
|
<label for="search" class="visually-hidden">Search</label>
|
|
31
40
|
<span class="suffix" role="presentation"><slot name="icon"></slot></span>
|
|
32
|
-
<input name="search" id="search" type="text" class="form-control" autocomplete="off"
|
|
41
|
+
<input name="search" id="search" type="text" class="form-control" autocomplete="off" placeholder="Search" />
|
|
33
42
|
</div>
|
|
34
43
|
<div class="list__wrapper">
|
|
35
44
|
<slot></slot>
|
|
@@ -40,15 +49,8 @@ class iamFilterlist extends HTMLElement {
|
|
|
40
49
|
|
|
41
50
|
connectedCallback() {
|
|
42
51
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"medium": "25rem",
|
|
46
|
-
"large": "37.5rem"
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
let maxHeightClass = (this.hasAttribute('data-max-height') && maxHeights[this.getAttribute('data-max-height')] ? 'list__wrapper--'+this.getAttribute('data-max-height') : '');
|
|
50
|
-
|
|
51
|
-
this.shadowRoot.querySelector('.list__wrapper').classList.add(maxHeightClass);
|
|
52
|
+
let classList = this.classList.toString();
|
|
53
|
+
this.shadowRoot.querySelector('.list__wrapper').setAttribute('class',`list__wrapper ${classList}`);
|
|
52
54
|
|
|
53
55
|
if(!this.querySelector('i.fa-search'))
|
|
54
56
|
this.innerHTML += '<i class="fa fa-light fa-search" aria-hidden="true" slot="icon"></i>';
|
|
@@ -20,6 +20,16 @@ class iamTable extends HTMLElement {
|
|
|
20
20
|
template.innerHTML = `
|
|
21
21
|
<style>
|
|
22
22
|
@import "${assetLocation}/css/core.min.css";
|
|
23
|
+
|
|
24
|
+
:host(.mh-sm){
|
|
25
|
+
max-height: none!important;
|
|
26
|
+
}
|
|
27
|
+
:host(.mh-md){
|
|
28
|
+
max-height: none!important;
|
|
29
|
+
}
|
|
30
|
+
:host(.mh-lg){
|
|
31
|
+
max-height: none!important;
|
|
32
|
+
}
|
|
23
33
|
</style>
|
|
24
34
|
${isCTA ? '<div class="table--cta">' : ''}
|
|
25
35
|
<div class="table__wrapper ${classList}">
|
|
@@ -48,7 +58,7 @@ class iamTable extends HTMLElement {
|
|
|
48
58
|
connectedCallback() {
|
|
49
59
|
|
|
50
60
|
this.table = this.querySelector('table');
|
|
51
|
-
this.savedTableBody = this.querySelector('tbody').cloneNode(true);
|
|
61
|
+
this.savedTableBody = this.table.querySelector('tbody').cloneNode(true);
|
|
52
62
|
this.pagination = this.shadowRoot.querySelector('.table__pagination');
|
|
53
63
|
|
|
54
64
|
// Set events on the filter table
|
|
@@ -82,8 +92,14 @@ class iamTable extends HTMLElement {
|
|
|
82
92
|
tableModule.makeTableFunctional(this.table, this.form, this.pagination, this);
|
|
83
93
|
tableModule.filterTable(this.table, this.form,this);
|
|
84
94
|
createPaginationButttons(this,this.pagination);
|
|
95
|
+
tableModule.populateDataQueries(this.table, this.form);
|
|
85
96
|
}
|
|
86
97
|
|
|
98
|
+
this.shadowRoot.querySelector('.table__wrapper').addEventListener("scroll", (event) => {
|
|
99
|
+
|
|
100
|
+
if(this.table.querySelector('dialog[open]'))
|
|
101
|
+
this.table.querySelector('dialog[open]').close();
|
|
102
|
+
});
|
|
87
103
|
}
|
|
88
104
|
|
|
89
105
|
|
|
@@ -15,12 +15,14 @@ class iamTabs extends HTMLElement {
|
|
|
15
15
|
this.attachShadow({ mode: 'open'});
|
|
16
16
|
|
|
17
17
|
const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';
|
|
18
|
-
const loadCSS = `@import "${assetLocation}/css/components/tabs.css";`;
|
|
19
18
|
const template = document.createElement('template');
|
|
20
19
|
template.innerHTML = `
|
|
21
20
|
<style>
|
|
22
21
|
@import "${assetLocation}/css/core.min.css";
|
|
23
|
-
|
|
22
|
+
|
|
23
|
+
:host(.admin-panel){
|
|
24
|
+
display: contents!important;
|
|
25
|
+
}
|
|
24
26
|
|
|
25
27
|
${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
|
|
26
28
|
</style>
|
|
@@ -33,6 +35,9 @@ class iamTabs extends HTMLElement {
|
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
connectedCallback() {
|
|
38
|
+
|
|
39
|
+
let classList = this.classList.toString().replace('container','');
|
|
40
|
+
this.shadowRoot.querySelector('.tabs').setAttribute('class',`tabs ${classList}`);
|
|
36
41
|
|
|
37
42
|
tabs(this);
|
|
38
43
|
}
|
|
@@ -103,7 +103,7 @@ function createAppliedFilters(container,filters) {
|
|
|
103
103
|
|
|
104
104
|
let input = event.target.closest('input[data-filter-text]');
|
|
105
105
|
|
|
106
|
-
addFilterButton (filters, input)
|
|
106
|
+
addFilterButton (filters, input);
|
|
107
107
|
};
|
|
108
108
|
|
|
109
109
|
}, false);
|
|
@@ -125,13 +125,19 @@ function createAppliedFilters(container,filters) {
|
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
let inputs = container.querySelectorAll(selector);
|
|
128
|
+
|
|
128
129
|
for(var i=0;i<inputs.length;i++){
|
|
129
130
|
let input = inputs[i];
|
|
130
131
|
|
|
132
|
+
|
|
131
133
|
if(input.getAttribute('type') != 'radio' && input.getAttribute('type') != 'checkbox')
|
|
132
|
-
|
|
134
|
+
input.value = "";
|
|
135
|
+
else {
|
|
136
|
+
input.checked = false;
|
|
133
137
|
|
|
134
|
-
|
|
138
|
+
var event = new Event('force');
|
|
139
|
+
input.closest('form').dispatchEvent(event);
|
|
140
|
+
}
|
|
135
141
|
}
|
|
136
142
|
}
|
|
137
143
|
|
|
@@ -69,16 +69,18 @@ export const addGlobalEvents = (body) => {
|
|
|
69
69
|
if (event && event.target instanceof HTMLElement && event.target.closest('[data-modal]')){
|
|
70
70
|
|
|
71
71
|
const button = event.target.closest('[data-modal]');
|
|
72
|
-
const modalID = button.getAttribute('data-modal');
|
|
72
|
+
const modalID = button.hasAttribute('data-modal') ? button.getAttribute('data-modal') : button.getAttribute('data-filter');
|
|
73
73
|
const dialog = document.querySelector(`dialog#${modalID}`);
|
|
74
74
|
|
|
75
75
|
// Create close button is needed
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
dialog.innerHTML = `<button class="dialog__close">Close</button>${dialog.innerHTML}`;
|
|
77
|
+
|
|
78
|
+
// remove close button when dialog is closed
|
|
79
|
+
dialog.addEventListener("close", () => {
|
|
80
|
+
const closeButton = dialog.querySelector('.dialog__close');
|
|
81
|
+
dialog.removeChild(closeButton);
|
|
82
|
+
}, { once: true }); // only adds this once
|
|
83
|
+
|
|
82
84
|
let videoButton = dialog.querySelector('.youtube-embed a');
|
|
83
85
|
|
|
84
86
|
if (videoButton){
|
|
@@ -93,11 +95,27 @@ export const addGlobalEvents = (body) => {
|
|
|
93
95
|
"id": modalID
|
|
94
96
|
});
|
|
95
97
|
};
|
|
98
|
+
|
|
96
99
|
// Close modal
|
|
100
|
+
if (event && event.target instanceof HTMLElement && event.target.closest('button.dialog__close')){
|
|
101
|
+
const dialog = event.target.closest('dialog[open]');
|
|
102
|
+
|
|
103
|
+
event.preventDefault();
|
|
104
|
+
dialog.close()
|
|
105
|
+
|
|
106
|
+
window.dataLayer = window.dataLayer || [];
|
|
107
|
+
window.dataLayer.push({
|
|
108
|
+
"event": "closeModal",
|
|
109
|
+
"id": dialog.getAttribute('id')
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
|
|
97
113
|
if (event && event.target instanceof HTMLElement && event.target.closest('dialog[open]')){
|
|
98
114
|
const dialog = event.target.closest('dialog[open]');
|
|
99
115
|
const dialogDimensions = dialog.getBoundingClientRect()
|
|
116
|
+
|
|
100
117
|
if (event.clientX < dialogDimensions.left || event.clientX > dialogDimensions.right || event.clientY < dialogDimensions.top || event.clientY > dialogDimensions.bottom) {
|
|
118
|
+
|
|
101
119
|
dialog.close()
|
|
102
120
|
|
|
103
121
|
window.dataLayer = window.dataLayer || [];
|
|
@@ -111,18 +129,49 @@ export const addGlobalEvents = (body) => {
|
|
|
111
129
|
// Popover
|
|
112
130
|
if (event && event.target instanceof HTMLElement && event.target.closest('.dialog__wrapper > button')){
|
|
113
131
|
|
|
132
|
+
// Close existing open popover
|
|
133
|
+
|
|
114
134
|
let btn = event.target.closest('.dialog__wrapper > button');
|
|
115
135
|
let parent = event.target.closest('.dialog__wrapper > button').parentNode;
|
|
116
136
|
let dataEvent = "openPopover"
|
|
117
137
|
let popover = parent.querySelector(':scope > dialog');
|
|
118
138
|
|
|
139
|
+
|
|
140
|
+
if(document.querySelector('dialog[open]') && document.querySelector('dialog[open]') != popover)
|
|
141
|
+
document.querySelector('dialog[open]').close();
|
|
142
|
+
|
|
143
|
+
|
|
119
144
|
if(popover.hasAttribute('open')){
|
|
120
145
|
|
|
121
146
|
popover.close();
|
|
122
147
|
dataEvent = "closePopover"
|
|
148
|
+
|
|
149
|
+
popover.removeAttribute('style');
|
|
150
|
+
btn.classList.remove('active');
|
|
123
151
|
}
|
|
124
|
-
else
|
|
152
|
+
else {
|
|
153
|
+
|
|
125
154
|
popover.show();
|
|
155
|
+
btn.classList.add('active');
|
|
156
|
+
|
|
157
|
+
var position = btn.getBoundingClientRect();
|
|
158
|
+
let topOffset = position.top;
|
|
159
|
+
let leftOffset = position.left;
|
|
160
|
+
|
|
161
|
+
if(btn.closest('iam-table')){
|
|
162
|
+
|
|
163
|
+
let container = btn.closest('iam-table').parentNode.getBoundingClientRect();
|
|
164
|
+
|
|
165
|
+
topOffset -= container.top;
|
|
166
|
+
leftOffset -= container.left;
|
|
167
|
+
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if(popover.classList.contains('dialog--fix')){
|
|
171
|
+
popover.setAttribute('style',`position:fixed;top: ${topOffset}px; left: ${leftOffset}px; margin: 3rem 0 0 0;`)
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
126
175
|
|
|
127
176
|
window.dataLayer = window.dataLayer || [];
|
|
128
177
|
|
|
@@ -23,8 +23,8 @@ export const addDataAttributes = (table) => {
|
|
|
23
23
|
let headingText = tempDiv.textContent || tempDiv.innerText || "";
|
|
24
24
|
cell.setAttribute('data-label',headingText);
|
|
25
25
|
|
|
26
|
-
if(heading.hasAttribute('class'))
|
|
27
|
-
cell.setAttribute('class',heading.getAttribute('class'))
|
|
26
|
+
if(heading.hasAttribute('data-td-class'))
|
|
27
|
+
cell.setAttribute('class',heading.getAttribute('data-td-class'))
|
|
28
28
|
|
|
29
29
|
if(heading.hasAttribute('data-format')){
|
|
30
30
|
cell.setAttribute('data-format',heading.getAttribute('data-format'))
|
|
@@ -64,10 +64,21 @@ export const getLargestLastColWidth = (table) => {
|
|
|
64
64
|
|
|
65
65
|
export const createMobileButton = (table) => {
|
|
66
66
|
|
|
67
|
+
if(table.closest('.table--fullwidth'))
|
|
68
|
+
return false;
|
|
69
|
+
|
|
67
70
|
Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {
|
|
68
71
|
let firstCol = row.querySelector(':scope > :is(td,th):first-child');
|
|
69
72
|
let colContent = firstCol.textContent;
|
|
70
|
-
|
|
73
|
+
|
|
74
|
+
if(colContent != "")
|
|
75
|
+
firstCol.innerHTML =`<span class="td__content">${colContent}</span><button type="button" class="d-none">${colContent}</button>`;
|
|
76
|
+
else {
|
|
77
|
+
|
|
78
|
+
let secondCol = row.querySelector(':scope > :is(td,th):nth-child(2)');
|
|
79
|
+
let secondColContent = secondCol.textContent;
|
|
80
|
+
secondCol.innerHTML =`<span class="td__content">${secondColContent}</span><button type="button" class="d-none">${secondColContent}</button>`;
|
|
81
|
+
}
|
|
71
82
|
});
|
|
72
83
|
}
|
|
73
84
|
|
|
@@ -137,6 +148,7 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
|
|
|
137
148
|
else {
|
|
138
149
|
filterTable(table, form, wrapper);
|
|
139
150
|
createPaginationButttons(wrapper,pagination);
|
|
151
|
+
populateDataQueries(table,form);
|
|
140
152
|
}
|
|
141
153
|
}
|
|
142
154
|
|
|
@@ -169,6 +181,11 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
|
|
|
169
181
|
formSubmit();
|
|
170
182
|
}
|
|
171
183
|
|
|
184
|
+
if (event && event.target instanceof HTMLElement && event.target.closest('[data-filter]') && event.target.closest('form .dialog__wrapper > dialog')){
|
|
185
|
+
|
|
186
|
+
formSubmit();
|
|
187
|
+
}
|
|
188
|
+
|
|
172
189
|
if (event && event.target instanceof HTMLElement && event.target.closest('[data-filter]') && !event.target.closest('form dialog')){
|
|
173
190
|
|
|
174
191
|
formSubmit();
|
|
@@ -220,6 +237,11 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
|
|
|
220
237
|
|
|
221
238
|
formSubmit();
|
|
222
239
|
});
|
|
240
|
+
|
|
241
|
+
form.addEventListener('force', (event) => {
|
|
242
|
+
|
|
243
|
+
formSubmit();
|
|
244
|
+
});
|
|
223
245
|
}
|
|
224
246
|
|
|
225
247
|
export const sortTable = (table, form, savedTableBody) => {
|
|
@@ -298,6 +320,15 @@ export const filterTable = (table, form, wrapper) => {
|
|
|
298
320
|
let page = form.querySelector('[data-pagination]') ? parseInt(form.querySelector('[data-pagination]').value) : 1;
|
|
299
321
|
let showRows = form.querySelector('[data-show]') ? parseInt(form.querySelector('[data-show]').value) : 15;
|
|
300
322
|
|
|
323
|
+
// Reset
|
|
324
|
+
Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {
|
|
325
|
+
row.classList.remove('filtered');
|
|
326
|
+
row.classList.remove('filtered--matched');
|
|
327
|
+
row.classList.remove('filtered--show');
|
|
328
|
+
|
|
329
|
+
row.removeAttribute('data-filtered-by');
|
|
330
|
+
});
|
|
331
|
+
|
|
301
332
|
// Filter
|
|
302
333
|
let filterInputs = Array.from(form.querySelectorAll('[data-filter]'));
|
|
303
334
|
|
|
@@ -345,6 +376,7 @@ export const filterTable = (table, form, wrapper) => {
|
|
|
345
376
|
Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {
|
|
346
377
|
element.innerHTML = '';
|
|
347
378
|
});
|
|
379
|
+
|
|
348
380
|
if(filters.length) {
|
|
349
381
|
|
|
350
382
|
Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {
|
|
@@ -353,25 +385,16 @@ export const filterTable = (table, form, wrapper) => {
|
|
|
353
385
|
}
|
|
354
386
|
|
|
355
387
|
// Stop function if no filters identified
|
|
356
|
-
if(!searches.length && !filters.length)
|
|
388
|
+
if(!Object.keys(searches).length && !Object.keys(filters).length)
|
|
357
389
|
return false;
|
|
358
390
|
|
|
359
391
|
table.classList.add('table--filtered');
|
|
360
392
|
|
|
361
|
-
// Reset
|
|
362
|
-
Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {
|
|
363
|
-
row.classList.remove('filtered');
|
|
364
|
-
row.classList.remove('filtered--matched');
|
|
365
|
-
row.classList.remove('filtered--show');
|
|
366
|
-
|
|
367
|
-
row.removeAttribute('data-filtered-by');
|
|
368
|
-
});
|
|
369
393
|
|
|
370
394
|
// Filter the table
|
|
371
395
|
|
|
372
396
|
for (const [key, filterValue] of Object.entries(filters)) {
|
|
373
397
|
|
|
374
|
-
console.log(filterValue)
|
|
375
398
|
Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row, index) => {
|
|
376
399
|
|
|
377
400
|
let isMatched = false;
|
|
@@ -493,7 +516,6 @@ export const filterTable = (table, form, wrapper) => {
|
|
|
493
516
|
wrapper.setAttribute('data-show',showRows);
|
|
494
517
|
}
|
|
495
518
|
|
|
496
|
-
populateDataQueries(table,form);
|
|
497
519
|
}
|
|
498
520
|
|
|
499
521
|
export const populateDataQueries = (table,form) => {
|
|
@@ -506,7 +528,7 @@ export const populateDataQueries = (table,form) => {
|
|
|
506
528
|
let numberOfMatchedRows: 0;
|
|
507
529
|
|
|
508
530
|
if(query == 'total'){
|
|
509
|
-
numberOfMatchedRows = table.classList.contains('table--filtered') ? table.querySelectorAll('tbody tr
|
|
531
|
+
numberOfMatchedRows = table.classList.contains('table--filtered') ? table.querySelectorAll('tbody tr').length : table.querySelectorAll('tbody tr').length;
|
|
510
532
|
}
|
|
511
533
|
else if(!query.includes(' == ') && query.includes(' & ')){
|
|
512
534
|
|
|
@@ -516,8 +538,7 @@ export const populateDataQueries = (table,form) => {
|
|
|
516
538
|
queries.forEach(element => {
|
|
517
539
|
selector += `:not([data-filtered-by="${element}"])`;
|
|
518
540
|
});
|
|
519
|
-
|
|
520
|
-
console.log(selector)
|
|
541
|
+
|
|
521
542
|
numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr${selector}`)).length;
|
|
522
543
|
}
|
|
523
544
|
else if(!query.includes(' == ')){
|
|
@@ -547,7 +568,6 @@ export const populateDataQueries = (table,form) => {
|
|
|
547
568
|
else {
|
|
548
569
|
|
|
549
570
|
let queryParts = query.split(' == ');
|
|
550
|
-
console.log(queryParts[0]);
|
|
551
571
|
numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr.filtered--matched td[data-label="${queryParts[0]}"], tbody tr[data-filtered-by="${queryParts[0]}"] td[data-label="${queryParts[0]}"]`)).filter(function(element){
|
|
552
572
|
return element.textContent === queryParts[1];
|
|
553
573
|
}).length;
|
|
@@ -46,15 +46,20 @@ export const setTabsEventHandlers = function(tabsElement: Element){
|
|
|
46
46
|
|
|
47
47
|
let details = tabsElement.querySelectorAll(':scope > details');
|
|
48
48
|
let summaries = tabsElement.querySelectorAll(':scope > details > summary');
|
|
49
|
-
let buttons = tabsElement.querySelectorAll(':scope
|
|
49
|
+
let buttons = tabsElement.querySelectorAll(':scope .tabs__links > .link');
|
|
50
50
|
|
|
51
51
|
if(tabsElement.shadowRoot)
|
|
52
|
-
buttons = tabsElement.shadowRoot.querySelectorAll('.tabs__links >
|
|
52
|
+
buttons = tabsElement.shadowRoot.querySelectorAll('.tabs__links > .link');
|
|
53
|
+
|
|
54
|
+
console.log(buttons)
|
|
53
55
|
|
|
54
56
|
// Set the on click for the tab buttons, these will open the details box it matches too
|
|
55
57
|
buttons.forEach((button) => {
|
|
56
58
|
|
|
57
59
|
button.addEventListener("click", (e) => {
|
|
60
|
+
|
|
61
|
+
console.log('hi')
|
|
62
|
+
|
|
58
63
|
e.preventDefault();
|
|
59
64
|
buttons.forEach((buttonLoopItem) => {
|
|
60
65
|
|
|
@@ -11,7 +11,7 @@ const basicTable = `<thead>
|
|
|
11
11
|
<th>Heading 3</th>
|
|
12
12
|
</tr>
|
|
13
13
|
</thead>
|
|
14
|
-
<tbody
|
|
14
|
+
<tbody>
|
|
15
15
|
<tr>
|
|
16
16
|
<td>Cell 1</td>
|
|
17
17
|
<td>Low</td>
|
|
@@ -168,14 +168,14 @@ describe('populateDataQueries', () => {
|
|
|
168
168
|
const table = document.createElement('table');
|
|
169
169
|
table.innerHTML = basicTable;
|
|
170
170
|
const form = document.createElement('form');
|
|
171
|
-
form.innerHTML += `<div><span data-query="total"></span><span data-query="Heading 2 == Low"></span></div>`;
|
|
171
|
+
form.innerHTML += `<div><input name="heading" value="Low" data-filter="Heading 2" /><span data-query="total"></span><span data-query="Heading 2 == Low"></span></div>`;
|
|
172
172
|
|
|
173
173
|
tableModule.addDataAttributes(table);
|
|
174
|
+
tableModule.filterTable(table, form, document.createElement('div'));
|
|
174
175
|
tableModule.populateDataQueries(table, form);
|
|
175
176
|
|
|
176
177
|
test('should populate elements with the data-query attribute with the result of the corresponding query', () => {
|
|
177
178
|
|
|
178
|
-
|
|
179
179
|
expect(form.querySelector('[data-query="total"]').textContent).toEqual('4');
|
|
180
180
|
expect(form.querySelector('[data-query="Heading 2 == Low"]').textContent).toEqual('2');
|
|
181
181
|
});
|