@iamproperty/components 5.1.0-beta → 5.1.0-beta11

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.
Files changed (118) hide show
  1. package/assets/css/components/accordion.global.css.map +1 -1
  2. package/assets/css/components/card.css +1 -1
  3. package/assets/css/components/card.css.map +1 -1
  4. package/assets/css/components/carousel.css +1 -1
  5. package/assets/css/components/carousel.css.map +1 -1
  6. package/assets/css/components/component.native.css +1 -1
  7. package/assets/css/components/component.native.css.map +1 -1
  8. package/assets/css/components/component.reset.css +1 -1
  9. package/assets/css/components/component.reset.css.map +1 -1
  10. package/assets/css/components/fileupload.css +1 -1
  11. package/assets/css/components/fileupload.css.map +1 -1
  12. package/assets/css/components/header.css +1 -1
  13. package/assets/css/components/header.css.map +1 -1
  14. package/assets/css/components/marketing.css +1 -0
  15. package/assets/css/components/marketing.css.map +1 -0
  16. package/assets/css/components/nav.css +1 -1
  17. package/assets/css/components/nav.css.map +1 -1
  18. package/assets/css/components/nav.global.css +1 -1
  19. package/assets/css/components/nav.global.css.map +1 -1
  20. package/assets/css/components/pagination.css +1 -1
  21. package/assets/css/components/pagination.css.map +1 -1
  22. package/assets/css/components/slider.css.map +1 -1
  23. package/assets/css/core.min.css +1 -1
  24. package/assets/css/core.min.css.map +1 -1
  25. package/assets/css/style.min.css +1 -1
  26. package/assets/css/style.min.css.map +1 -1
  27. package/assets/img/signin-bg.png +0 -0
  28. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  29. package/assets/js/components/actionbar/actionbar.component.min.js +1 -1
  30. package/assets/js/components/address-lookup/address-lookup.component.js +17 -3
  31. package/assets/js/components/address-lookup/address-lookup.component.min.js +4 -4
  32. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  33. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  34. package/assets/js/components/card/card.component.js +2 -1
  35. package/assets/js/components/card/card.component.min.js +4 -3
  36. package/assets/js/components/card/card.component.min.js.map +1 -1
  37. package/assets/js/components/carousel/carousel.component.js +61 -0
  38. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  39. package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
  40. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  41. package/assets/js/components/header/header.component.js +6 -12
  42. package/assets/js/components/header/header.component.min.js +8 -14
  43. package/assets/js/components/header/header.component.min.js.map +1 -1
  44. package/assets/js/components/marketing/marketing.component.js +37 -0
  45. package/assets/js/components/nav/nav.component.js +4 -36
  46. package/assets/js/components/nav/nav.component.min.js +10 -13
  47. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  48. package/assets/js/components/notification/notification.component.min.js +1 -1
  49. package/assets/js/components/pagination/pagination.component.min.js +2 -2
  50. package/assets/js/components/search/search.component.js +148 -0
  51. package/assets/js/components/search/search.component.min.js +14 -0
  52. package/assets/js/components/search/search.component.min.js.map +1 -0
  53. package/assets/js/components/table/table.component.min.js +5 -5
  54. package/assets/js/components/table/table.component.min.js.map +1 -1
  55. package/assets/js/components/tabs/tabs.component.min.js +1 -1
  56. package/assets/js/dynamic.js +1 -1
  57. package/assets/js/dynamic.min.js +5 -4
  58. package/assets/js/dynamic.min.js.map +1 -1
  59. package/assets/js/modules/carousel.js +15 -23
  60. package/assets/js/modules/dynamicEvents.js +28 -13
  61. package/assets/js/modules/helpers.js +8 -1
  62. package/assets/js/modules/inputs.js +57 -0
  63. package/assets/js/modules/table.js +8 -6
  64. package/assets/js/scripts.bundle.js +39 -43
  65. package/assets/js/scripts.bundle.js.map +1 -1
  66. package/assets/js/scripts.bundle.min.js +2 -2
  67. package/assets/js/scripts.bundle.min.js.map +1 -1
  68. package/assets/js/vendor/hibp.js +78 -0
  69. package/assets/sass/_corefiles.scss +1 -0
  70. package/assets/sass/_elements.scss +1 -1
  71. package/assets/sass/_functions/mixins.scss +16 -0
  72. package/assets/sass/_functions/utilities.scss +0 -17
  73. package/assets/sass/_functions/variables.scss +1 -0
  74. package/assets/sass/components/card.scss +23 -3
  75. package/assets/sass/components/carousel.scss +86 -159
  76. package/assets/sass/components/component.native.scss +86 -3
  77. package/assets/sass/components/fileupload.scss +1 -1
  78. package/assets/sass/components/header.scss +53 -55
  79. package/assets/sass/components/marketing.scss +64 -0
  80. package/assets/sass/components/nav.global.scss +2 -1
  81. package/assets/sass/components/nav.scss +7 -1
  82. package/assets/sass/components/pagination.scss +4 -0
  83. package/assets/sass/elements/admin-panel.scss +9 -7
  84. package/assets/sass/elements/badge.scss +29 -0
  85. package/assets/sass/elements/dialog.scss +4 -4
  86. package/assets/sass/elements/forms.scss +23 -4
  87. package/assets/sass/elements/links.scss +2 -1
  88. package/assets/sass/foundations/reboot.scss +12 -13
  89. package/assets/sass/foundations/root.scss +11 -3
  90. package/assets/sass/helpers/max-height.scss +78 -4
  91. package/assets/sass/templates/auth.scss +112 -0
  92. package/assets/ts/components/address-lookup/address-lookup.component.ts +23 -4
  93. package/assets/ts/components/card/card.component.ts +2 -1
  94. package/assets/ts/components/carousel/README.md +39 -0
  95. package/assets/ts/components/carousel/carousel.component.ts +75 -0
  96. package/assets/ts/components/header/header.component.ts +6 -12
  97. package/assets/ts/components/marketing/marketing.component.ts +49 -0
  98. package/assets/ts/components/nav/README.md +2 -13
  99. package/assets/ts/components/nav/nav.component.ts +4 -47
  100. package/assets/ts/components/search/search.component.ts +177 -0
  101. package/assets/ts/dynamic.ts +1 -1
  102. package/assets/ts/modules/carousel.ts +21 -33
  103. package/assets/ts/modules/dynamicEvents.ts +44 -24
  104. package/assets/ts/modules/helpers.ts +13 -2
  105. package/assets/ts/modules/inputs.ts +79 -0
  106. package/assets/ts/modules/table.ts +11 -14
  107. package/assets/ts/vendor/hibp.ts +81 -0
  108. package/dist/components.es.js +744 -949
  109. package/dist/components.umd.js +107 -101
  110. package/dist/style.css +1 -1
  111. package/package.json +1 -1
  112. package/src/components/Carousel/Carousel.vue +18 -103
  113. package/src/components/Header/Header.vue +1 -3
  114. package/src/components/Marketing/Marketing.vue +39 -0
  115. package/src/components/Marketing/README.md +20 -0
  116. package/src/components/Nav/README.md +1 -12
  117. package/src/components/Search/Search.vue +25 -0
  118. package/src/components/Carousel/Carousel.spec.js +0 -45
@@ -0,0 +1,78 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * hibp.js
4
+ * @version v1
5
+ * @author Mehdi Bounya
6
+ *
7
+ * Report any bugs here: https://github.com/mehdibo/hibp-js
8
+ *
9
+ * The MIT License (http://www.opensource.org/licenses/mit-license.php)
10
+ *
11
+ * Permission is hereby granted, free of charge, to any person
12
+ * obtaining a copy of this software and associated documentation
13
+ * files (the "Software"), to deal in the Software without
14
+ * restriction, including without limitation the rights to use,
15
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ * copies of the Software, and to permit persons to whom the
17
+ * Software is furnished to do so, subject to the following
18
+ * conditions:
19
+ *
20
+ * The above copyright notice and this permission notice shall be
21
+ * included in all copies or substantial portions of the Software.
22
+ *
23
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
25
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
27
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
28
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
29
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
30
+ * OTHER DEALINGS IN THE SOFTWARE.
31
+ */
32
+ function sha1(string) {
33
+ var buffer = new TextEncoder("utf-8").encode(string);
34
+ return crypto.subtle.digest("SHA-1", buffer).then(function (buffer) {
35
+ // Get the hex code
36
+ var hexCodes = [];
37
+ var view = new DataView(buffer);
38
+ for (var i = 0; i < view.byteLength; i += 4) {
39
+ // Using getUint32 reduces the number of iterations needed (we process 4 bytes each time)
40
+ var value = view.getUint32(i);
41
+ // toString(16) will give the hex representation of the number without padding
42
+ var stringValue = value.toString(16);
43
+ // We use concatenation and slice for padding
44
+ var padding = '00000000';
45
+ var paddedValue = (padding + stringValue).slice(-padding.length);
46
+ hexCodes.push(paddedValue);
47
+ }
48
+ // Join all the hex strings into one
49
+ return hexCodes.join("");
50
+ });
51
+ }
52
+ const hibpCheck = (pwd, input) => {
53
+ // We hash the pwd first
54
+ sha1(pwd).then(function (hash) {
55
+ // We send the first 5 chars of the hash to hibp's API
56
+ const req = new XMLHttpRequest();
57
+ req.addEventListener("load", function () {
58
+ // When we get back a response from the server
59
+ // We create an array of lines and loop through them
60
+ const resp = this.responseText.split('\n');
61
+ const hashSub = hash.slice(5).toUpperCase();
62
+ var result = false;
63
+ for (let index in resp) {
64
+ // Check if the line matches the rest of the hash
65
+ if (resp[index].substring(0, 35) == hashSub) {
66
+ result = true;
67
+ break; // If found no need to continue the loop
68
+ }
69
+ }
70
+ // Trigger an event with the result
71
+ const event = new CustomEvent('hibpCheck', { detail: result });
72
+ input.dispatchEvent(event);
73
+ });
74
+ req.open('GET', 'https://api.pwnedpasswords.com/range/' + hash.substr(0, 5));
75
+ req.send();
76
+ });
77
+ };
78
+ export default hibpCheck;
@@ -31,6 +31,7 @@
31
31
 
32
32
  @include layer('templates') {
33
33
  @import "templates/form.scss";
34
+ @import "templates/auth.scss";
34
35
  }
35
36
 
36
37
  @include layer('utilities') {
@@ -15,4 +15,4 @@
15
15
 
16
16
  @import "elements/forms.scss";
17
17
 
18
- @import "../bootstrap/scss/_badge.scss";
18
+ @import "elements/badge.scss";
@@ -211,3 +211,19 @@
211
211
  --colour-#{$color}: #{$value};
212
212
  }
213
213
  }
214
+
215
+ @mixin slotted($el, $isComponent:"true"){
216
+
217
+ @if $isComponent == "true" {
218
+ ::slotted(#{$el}) {
219
+
220
+ @content;
221
+ }
222
+ }
223
+ @else {
224
+ #{$el} {
225
+
226
+ @content;
227
+ }
228
+ }
229
+ }
@@ -201,23 +201,6 @@ $utilities: map-merge(
201
201
  );
202
202
  // #endregion
203
203
 
204
- // #region Max height classes
205
- $utilities: map-merge(
206
- $utilities,
207
- (
208
- "max-heights": (
209
- property: max-height,
210
- class: mh,
211
- values: (
212
- "sm": #{rem(200)},
213
- "md": #{rem(400)},
214
- "lg": #{rem(600)}
215
- )
216
- )
217
- )
218
- );
219
- // #endregion
220
-
221
204
  // #region Max height classes
222
205
  $utilities: map-merge(
223
206
  $utilities,
@@ -39,6 +39,7 @@ $vars: map-merge((
39
39
  "--container-padding-top": 0,
40
40
  "--container-padding-bottom": #{rem(16)},
41
41
  "--container-padding-x": #{rem($container-padding-x)},
42
+ "--container-padding-x-sm": #{rem($container-padding-x-sm)},
42
43
  "--container-padding-x-md": #{rem($container-padding-x-md)},
43
44
  "--container-padding": $container-padding,
44
45
  "--container-padding-sm": $container-padding-sm,
@@ -17,8 +17,8 @@
17
17
  overflow: hidden;
18
18
  z-index: 0;
19
19
  background: var(--colour-canvas-2);
20
- outline: var(--contrast-outline-width, 0px) solid var(--colour-primary);
21
- outline-offset: -1px;
20
+ outline: 2px solid var(--colour-canvas-2);
21
+ outline-offset: -2px;
22
22
 
23
23
  &.border-0 {
24
24
  box-shadow: none;
@@ -131,7 +131,7 @@
131
131
  vertical-align: middle!important;
132
132
  }
133
133
 
134
- ::slotted(span){
134
+ ::slotted(span:not(.badge)){
135
135
  display: block!important;
136
136
  font-weight: normal!important;
137
137
  padding-top: rem(24)!important;
@@ -139,6 +139,26 @@
139
139
  }
140
140
  // #endregion
141
141
 
142
+ // #region card bages
143
+ .card__badges {
144
+ position: absolute;
145
+ top: 0;
146
+ right: 0.25rem;
147
+ padding: 0.25rem;
148
+ z-index: 9;
149
+ text-align: right;
150
+ width: 1;
151
+ }
152
+ .card__head .card__badges {
153
+
154
+ top: auto;
155
+ bottom: 0;
156
+ text-align: left;
157
+ left: 0.25rem;
158
+ right: auto;
159
+ }
160
+ // #endregion
161
+
142
162
  // #region border left
143
163
  .card[class*="colour-"],
144
164
  .card--filter {
@@ -2,7 +2,6 @@
2
2
 
3
3
  // #region default carousel
4
4
  .carousel {
5
- padding-bottom: 3rem;
6
5
 
7
6
  .carousel__wrapper {
8
7
 
@@ -14,45 +13,31 @@
14
13
  --gutter-x: #{$grid-gutter-width};
15
14
  overflow: auto;
16
15
  scroll-snap-type: x mandatory;
17
- margin-right: calc(var(--gutter-x) * -.5);
18
- margin-left: calc(var(--gutter-x) * -.5);
19
-
20
- > .row {
21
- flex-wrap: nowrap;
22
- margin: 0;
23
-
24
- > .col {
25
- padding-top: rem(36);
26
- padding-bottom: rem(24);
27
- scroll-snap-align: start;
28
- scroll-padding: calc(var(--gutter-x) * -1);
29
- }
30
- }
31
16
  }
32
17
 
33
- .carousel__item > *:last-child {
18
+ .col > *:last-child {
34
19
  margin-bottom: 0;
35
20
  padding-bottom: 0;
36
21
  }
37
22
  }
23
+
24
+
38
25
  // #endregion
39
26
 
40
27
  // #region Remove the scrollbar
41
- body.js-enabled .carousel__inner {
28
+ .carousel__inner {
42
29
  // FireFox
43
30
  scrollbar-width: none;
44
31
  // IE10+
45
32
  -ms-overflow-style: none;
46
33
  }
47
34
 
48
- body.js-enabled .carousel__inner::-webkit-scrollbar {
35
+ .carousel__inner::-webkit-scrollbar {
49
36
  // Chrome, Safari, Edge
50
37
  display: none;
51
38
  }
52
39
  // #endregion
53
40
 
54
-
55
-
56
41
  // #region Direction button
57
42
  .btn-next,
58
43
  .btn-prev {
@@ -63,13 +48,8 @@ body.js-enabled .carousel__inner::-webkit-scrollbar {
63
48
  background: var(--marker-bg);
64
49
  border-radius: 100%;
65
50
  width: rem(36);
51
+ max-width: rem(36);
66
52
  height: rem(36);
67
-
68
- @include media-breakpoint-up(md) {
69
-
70
- width: rem(48);
71
- height: rem(48);
72
- }
73
53
  text-indent: -300rem;
74
54
  overflow: hidden;
75
55
  border: none;
@@ -77,6 +57,11 @@ body.js-enabled .carousel__inner::-webkit-scrollbar {
77
57
  margin: 0 rem(8);
78
58
  padding: 0;
79
59
 
60
+ position: absolute;
61
+ top: 50%;
62
+ left: 0rem;
63
+ transform: translate(0,-50%);
64
+
80
65
  &:disabled {
81
66
  opacity: 0.8;
82
67
  pointer-events: none;
@@ -114,194 +99,136 @@ body.js-enabled .carousel__inner::-webkit-scrollbar {
114
99
  }
115
100
  }
116
101
 
102
+ .btn-next {
103
+ left: auto;
104
+ right: 0;
105
+
106
+ @include media-breakpoint-up(md) {
107
+
108
+ margin-right: rem(-48);
109
+ }
110
+ }
111
+
117
112
  .btn-prev {
113
+
114
+ @include media-breakpoint-up(md) {
115
+
116
+ margin-left: rem(-48);
117
+ }
118
+
118
119
  &:after {
119
120
 
120
121
  transform: rotate(180deg);
121
122
  }
122
123
  }
123
- // #endregion
124
124
 
125
125
 
126
- // #region carousel controls/pips
127
- .carousel:not(.hide-controls) {
128
- padding-bottom: 4.5rem!important;
129
- }
130
126
 
131
- .carousel.hide-controls .carousel__controls {
132
- display: none;
133
- }
134
127
 
128
+
129
+ // #endregion
130
+
131
+ // #region carousel controls/pips
135
132
  .carousel .carousel__controls {
136
- position: absolute;
133
+
137
134
  text-align: center;
138
- width: auto;
139
- left: 0;
140
- width: calc(100% + 2rem);
141
- margin-left: -1rem;
142
- margin-right: -1rem;
143
- bottom: -3rem;
144
-
145
- a {
135
+ width: 10rem;
136
+ max-height: 1rem;
137
+ overflow: hidden;
138
+ margin-inline: auto;
139
+
140
+ @include media-breakpoint-up(sm) {
141
+ width: 100%;
142
+ }
143
+
144
+ button {
146
145
  width: 1rem;
147
146
  height: 1rem;
148
147
  min-height: 1rem;
149
148
  border-radius: 50%;
150
149
  text-indent: -50rem;
151
150
  overflow: hidden;
152
- background: currentColor;
151
+ background: var(--colour-primary-theme);
153
152
  padding: 0;
154
153
  margin: 0 0.5rem 0.5rem 0.5rem;
154
+ border: none;
155
155
 
156
156
  &:before {
157
157
  display: none;
158
158
  }
159
159
  }
160
160
 
161
- a:first-child:last-child {
161
+ button:first-child:last-child {
162
162
  display: none;
163
163
  }
164
164
  }
165
165
 
166
- .carousel .carousel__controls > a:nth-child(10) ~ a {
166
+ .carousel__controls > button[aria-current] {
167
167
 
168
- display: none;
168
+ background: var(--colour-success);
169
169
  }
170
+
170
171
  // #endregion
171
172
 
172
- // #region Carousel buttons
173
+ // #region Hide buttons and pips
173
174
  .carousel.hide-btns .carousel__wrapper > .btn {
174
175
  display: none;
175
176
  }
176
177
 
177
- .carousel:not(.hide-btns) .carousel__inner {
178
-
179
- margin-left: rem(28);
180
- margin-right: rem(28);
181
- }
182
-
183
- .carousel .carousel__wrapper > .btn {
184
- position: absolute;
185
- top: 50%;
186
- left: -1.25rem;
187
- transform: translate(0,-50%);
188
-
189
- &.btn-next {
190
- left: auto;
191
- right: -1.25rem;
192
- }
193
-
194
- @include media-breakpoint-up(md) {
195
-
196
- margin-left: -1rem;
197
- margin-right: -1rem;
198
- }
199
- }
200
-
201
-
202
- // #endregion
203
-
204
- .carousel .carousel__inner > .row > .col:first-child {
205
- margin-left: 0!important;
178
+ .carousel.hide-controls .carousel__controls {
179
+ display: none;
206
180
  }
207
181
 
208
182
  @include media-breakpoint-up(sm) {
209
183
 
210
- .carousel .carousel__controls > a:nth-child(10) ~ a {
211
-
212
- display: inline-block;
213
- }
214
-
215
- .carousel .carousel__inner > .row[class*="row-cols-sm-"] > .col{
216
- scroll-snap-align: unset;
217
- }
218
-
219
- .carousel .carousel__inner > .row-cols-sm-2 > .col:nth-child(odd),
220
- .carousel .carousel__inner > .row-cols-sm-3 > .col:nth-child(3n+1),
221
- .carousel .carousel__inner > .row-cols-sm-4 > .col:nth-child(4n+1),
222
- .carousel .carousel__inner > .row-cols-sm-5 > .col:nth-child(5n+1),
223
- .carousel .carousel__inner > .row-cols-sm-6 > .col:nth-child(6n+1) {
224
- scroll-snap-align: start;
225
-
226
- body:not(.js-enabled) & {
227
- margin-left: 4rem;
228
- }
229
- }
230
-
231
- .carousel .carousel__controls.cols-sm-2 > a:not(:nth-child(odd)),
232
- .carousel .carousel__controls.cols-sm-3 > a:not(:nth-child(3n+1)),
233
- .carousel .carousel__controls.cols-sm-4 > a:not(:nth-child(4n+1)),
234
- .carousel .carousel__controls.cols-sm-5 > a:not(:nth-child(5n+1)),
235
- .carousel .carousel__controls.cols-sm-6 > a:not(:nth-child(6n+1)) {
184
+ [data-row-class*="cols-sm-2"] .carousel__controls > button:not(:nth-child(odd)),
185
+ [data-row-class*="cols-sm-3"] .carousel__controls > button:not(:nth-child(3n+1)),
186
+ [data-row-class*="cols-sm-4"] .carousel__controls > button:not(:nth-child(4n+1)),
187
+ [data-row-class*="cols-sm-5"] .carousel__controls > button:not(:nth-child(5n+1)),
188
+ [data-row-class*="cols-sm-6"] .carousel__controls > button:not(:nth-child(6n+1)) {
236
189
  display: none;
237
190
  }
238
191
 
239
192
  // Make sure that we dont just have one pip showing
240
- .carousel .carousel__controls.cols-sm-2 > a:first-child:nth-last-child(2),
241
- .carousel .carousel__controls.cols-sm-3 > :is(a:first-child:nth-last-child(2), a:first-child:nth-last-child(3)),
242
- .carousel .carousel__controls.cols-sm-4 > :is(a:first-child:nth-last-child(2), a:first-child:nth-last-child(3), a:first-child:nth-last-child(4)),
243
- .carousel .carousel__controls.cols-sm-5 > :is(a:first-child:nth-last-child(2),a:first-child:nth-last-child(3),a:first-child:nth-last-child(4),a:first-child:nth-last-child(5)),
244
- .carousel .carousel__controls.cols-sm-6 > :is(a:first-child:nth-last-child(2),a:first-child:nth-last-child(3),a:first-child:nth-last-child(4),a:first-child:nth-last-child(5),a:first-child:nth-last-child(6)) {
245
- display: none;
246
- }
247
-
248
- // Hide buttons if not needed
249
- .carousel.hide-sm-btns .carousel__wrapper > .btn {
193
+ [data-row-class*="cols-sm-2"] .carousel__controls:has(button:first-child:nth-last-child(2)),
194
+ [data-row-class*="cols-sm-3"] .carousel__controls:has(:is(button:first-child:nth-last-child(2), button:first-child:nth-last-child(3))),
195
+ [data-row-class*="cols-sm-4"] .carousel__controls:has(:is(button:first-child:nth-last-child(2), button:first-child:nth-last-child(3), button:first-child:nth-last-child(4))),
196
+ [data-row-class*="cols-sm-5"] .carousel__controls:has(:is(button:first-child:nth-last-child(2),button:first-child:nth-last-child(3),button:first-child:nth-last-child(4),button:first-child:nth-last-child(5))),
197
+ [data-row-class*="cols-sm-6"] .carousel__controls:has(:is(button:first-child:nth-last-child(2),button:first-child:nth-last-child(3),button:first-child:nth-last-child(4),button:first-child:nth-last-child(5),button:first-child:nth-last-child(6))),
198
+ [data-row-class*="cols-sm-2"] .carousel__controls:has(button:first-child:nth-last-child(2)) ~ .btn,
199
+ [data-row-class*="cols-sm-3"] .carousel__controls:has(:is(button:first-child:nth-last-child(2), button:first-child:nth-last-child(3))) ~ .btn,
200
+ [data-row-class*="cols-sm-4"] .carousel__controls:has(:is(button:first-child:nth-last-child(2), button:first-child:nth-last-child(3), button:first-child:nth-last-child(4))) ~ .btn,
201
+ [data-row-class*="cols-sm-5"] .carousel__controls:has(:is(button:first-child:nth-last-child(2),button:first-child:nth-last-child(3),button:first-child:nth-last-child(4),button:first-child:nth-last-child(5))) ~ .btn,
202
+ [data-row-class*="cols-sm-6"] .carousel__controls:has(:is(button:first-child:nth-last-child(2),button:first-child:nth-last-child(3),button:first-child:nth-last-child(4),button:first-child:nth-last-child(5),button:first-child:nth-last-child(6))) ~ .btn {
250
203
  display: none;
251
204
  }
252
-
253
- .carousel.hide-sm-btns .carousel__inner {
254
-
255
- margin-left: 0;
256
- margin-right: 0;
257
- }
258
205
  }
259
206
 
260
207
  @include media-breakpoint-up(md) {
261
-
262
- .carousel .carousel__inner > .row[class*="row-cols-md-"] > .col{
263
- scroll-snap-align: unset;
264
- margin-left: 0;
208
+ .carousel__controls > button {
209
+ display: inline-block!important;
265
210
  }
266
-
267
- .carousel .carousel__inner > .row-cols-md-2 > .col:nth-child(odd),
268
- .carousel .carousel__inner > .row-cols-md-3 > .col:nth-child(3n+1),
269
- .carousel .carousel__inner > .row-cols-md-4 > .col:nth-child(4n+1),
270
- .carousel .carousel__inner > .row-cols-md-5 > .col:nth-child(5n+1),
271
- .carousel .carousel__inner > .row-cols-md-6 > .col:nth-child(6n+1) {
272
- scroll-snap-align: start;
273
-
274
- body:not(.js-enabled) & {
275
211
 
276
- margin-left: calc(50vw);
277
- }
278
- }
279
-
280
- .carousel .carousel__controls.cols-md-2 > a:not(:nth-child(odd)),
281
- .carousel .carousel__controls.cols-md-3 > a:not(:nth-child(3n+1)),
282
- .carousel .carousel__controls.cols-md-4 > a:not(:nth-child(4n+1)),
283
- .carousel .carousel__controls.cols-md-5 > a:not(:nth-child(5n+1)),
284
- .carousel .carousel__controls.cols-md-6 > a:not(:nth-child(6n+1)) {
285
- display: none;
212
+ [data-row-class*="cols-md-2"] .carousel__controls > button:not(:nth-child(odd)),
213
+ [data-row-class*="cols-md-3"] .carousel__controls > button:not(:nth-child(3n+1)),
214
+ [data-row-class*="cols-md-4"] .carousel__controls > button:not(:nth-child(4n+1)),
215
+ [data-row-class*="cols-md-5"] .carousel__controls > button:not(:nth-child(5n+1)),
216
+ [data-row-class*="cols-md-6"] .carousel__controls > button:not(:nth-child(6n+1)) {
217
+ display: none!important;
286
218
  }
287
219
 
288
220
  // Make sure that we dont just have one pip showing
289
- .carousel .carousel__controls.cols-md-2 > a:first-child:nth-last-child(2),
290
- .carousel .carousel__controls.cols-md-3 > :is(a:first-child:nth-last-child(2), a:first-child:nth-last-child(3)),
291
- .carousel .carousel__controls.cols-md-4 > :is(a:first-child:nth-last-child(2), a:first-child:nth-last-child(3), a:first-child:nth-last-child(4)),
292
- .carousel .carousel__controls.cols-md-5 > :is(a:first-child:nth-last-child(2),a:first-child:nth-last-child(3),a:first-child:nth-last-child(4),a:first-child:nth-last-child(5)),
293
- .carousel .carousel__controls.cols-md-6 > :is(a:first-child:nth-last-child(2),a:first-child:nth-last-child(3),a:first-child:nth-last-child(4),a:first-child:nth-last-child(5),a:first-child:nth-last-child(6)) {
294
- display: none;
295
- }
296
-
297
- // Hide buttons when not needed
298
- .carousel.hide-md-btns .carousel__wrapper > .btn {
221
+ [data-row-class*="cols-md-2"] .carousel__controls:has(button:first-child:nth-last-child(2)),
222
+ [data-row-class*="cols-md-3"] .carousel__controls:has(:is(button:first-child:nth-last-child(2), button:first-child:nth-last-child(3))),
223
+ [data-row-class*="cols-md-4"] .carousel__controls:has(:is(button:first-child:nth-last-child(2), button:first-child:nth-last-child(3), button:first-child:nth-last-child(4))),
224
+ [data-row-class*="cols-md-5"] .carousel__controls:has(:is(button:first-child:nth-last-child(2),button:first-child:nth-last-child(3),button:first-child:nth-last-child(4),button:first-child:nth-last-child(5))),
225
+ [data-row-class*="cols-md-6"] .carousel__controls:has(:is(button:first-child:nth-last-child(2),button:first-child:nth-last-child(3),button:first-child:nth-last-child(4),button:first-child:nth-last-child(5),button:first-child:nth-last-child(6))),
226
+ [data-row-class*="cols-md-2"] .carousel__controls:has(button:first-child:nth-last-child(2)) ~ .btn,
227
+ [data-row-class*="cols-md-3"] .carousel__controls:has(:is(button:first-child:nth-last-child(2), button:first-child:nth-last-child(3))) ~ .btn,
228
+ [data-row-class*="cols-md-4"] .carousel__controls:has(:is(button:first-child:nth-last-child(2), button:first-child:nth-last-child(3), button:first-child:nth-last-child(4))) ~ .btn,
229
+ [data-row-class*="cols-md-5"] .carousel__controls:has(:is(button:first-child:nth-last-child(2),button:first-child:nth-last-child(3),button:first-child:nth-last-child(4),button:first-child:nth-last-child(5))) ~ .btn,
230
+ [data-row-class*="cols-md-6"] .carousel__controls:has(:is(button:first-child:nth-last-child(2),button:first-child:nth-last-child(3),button:first-child:nth-last-child(4),button:first-child:nth-last-child(5),button:first-child:nth-last-child(6))) ~ .btn {
299
231
  display: none;
300
232
  }
301
-
302
- .carousel.hide-md-btns .carousel__inner {
303
-
304
- margin-left: 0;
305
- margin-right: 0;
306
- }
307
- }
233
+ }
234
+ // #endregion
@@ -2,7 +2,7 @@
2
2
  @use "../_func" as *;
3
3
 
4
4
  // #region Undefined web components
5
- :is(*):not(:defined):not(iam-nav):not(iam-pagination) {
5
+ :is(*):not(:defined):not(iam-nav):not(iam-pagination):not(iam-carousel) {
6
6
  display: block;
7
7
  padding: rem(24);
8
8
  margin-bottom: rem(24);
@@ -12,7 +12,7 @@
12
12
  max-width: 80rem;
13
13
  }
14
14
 
15
- main > :is(*):not(:defined) {
15
+ main > :is(*):not(:defined):not(iam-carousel) {
16
16
 
17
17
  padding: var(--container-padding);
18
18
  padding-top: 1rem;
@@ -20,7 +20,7 @@ main > :is(*):not(:defined) {
20
20
 
21
21
  @include media-breakpoint-up(md) {
22
22
 
23
- main > :is(*):not(:defined) {
23
+ main > :is(*):not(:defined):not(iam-carousel) {
24
24
  max-width: 100%!important;
25
25
  padding-inline: calc(50% - #{rem(math.div(1112,2))});
26
26
  }
@@ -34,4 +34,87 @@ main > :is(*):not(:defined) {
34
34
  box-shadow: var(--card-box-shadow);
35
35
  border-radius: var(--card-border-radius);
36
36
  padding: var(--card-top-padding) var(--card-right-padding) var(--card-bottom-padding) var(--card-left-padding);
37
+ }
38
+
39
+ // carousel
40
+ iam-carousel {
41
+
42
+ margin-inline: calc(var(--container-padding-x) * -1);
43
+ margin-bottom: 5rem;
44
+ overflow: auto;
45
+ display: block;
46
+
47
+ > .row {
48
+
49
+ flex-wrap: nowrap!important;
50
+ margin-inline-end: 0;
51
+ padding-inline-start: var(--container-padding-x);
52
+ padding-inline-end: var(--container-padding-x);
53
+
54
+ .col:last-child{
55
+ padding-inline-end: var(--container-padding-x);
56
+ }
57
+ }
58
+
59
+ @include media-breakpoint-up(md) {
60
+
61
+ margin-inline: calc(-0.5 * $grid-gutter-width);
62
+
63
+ > .row {
64
+
65
+ padding-inline: 0;
66
+ margin-inline: 0;
67
+
68
+ .col:last-child{
69
+ padding-inline-end: calc(0.5 * $grid-gutter-width);
70
+ }
71
+ }
72
+ }
73
+ }
74
+
75
+
76
+
77
+
78
+ // For extra file
79
+ iam-carousel:defined {
80
+
81
+ overflow: visible;
82
+ }
83
+ iam-carousel > .row .col {
84
+ scroll-snap-align: start;
85
+ scroll-margin-left: calc(var(--container-padding-x) - calc(0.5 * $grid-gutter-width));
86
+ }
87
+
88
+
89
+ @include media-breakpoint-up(sm) {
90
+
91
+ iam-carousel > .row[class*="row-cols-sm-"] > .col{
92
+ scroll-snap-align: unset;
93
+ }
94
+
95
+ iam-carousel > .row-cols-sm-2 > .col:nth-child(odd),
96
+ iam-carousel > .row-cols-sm-3 > .col:nth-child(3n+1),
97
+ iam-carousel > .row-cols-sm-4 > .col:nth-child(4n+1),
98
+ iam-carousel > .row-cols-sm-5 > .col:nth-child(5n+1),
99
+ iam-carousel > .row-cols-sm-6 > .col:nth-child(6n+1) {
100
+ scroll-snap-align: start;
101
+ }
102
+ }
103
+
104
+ @include media-breakpoint-up(md) {
105
+
106
+ iam-carousel > .row[class*="row-cols-md-"] > .col{
107
+ scroll-snap-align: unset;
108
+ margin-left: 0;
109
+ scroll-margin-left: 0;
110
+ }
111
+
112
+ iam-carousel > .row-cols-md-2 > .col:nth-child(odd),
113
+ iam-carousel > .row-cols-md-3 > .col:nth-child(3n+1),
114
+ iam-carousel > .row-cols-md-4 > .col:nth-child(4n+1),
115
+ iam-carousel > .row-cols-md-5 > .col:nth-child(5n+1),
116
+ iam-carousel > .row-cols-md-6 > .col:nth-child(6n+1) {
117
+ scroll-snap-align: start;
118
+
119
+ }
37
120
  }
@@ -57,7 +57,7 @@
57
57
 
58
58
  background: var(--colour-canvas-2);
59
59
  border-color: var(--colour-canvas-2);
60
- color: var(--colour-white);
60
+ color: var(--colour-body);
61
61
  }
62
62
 
63
63