@skyscanner/backpack-web 38.22.0 → 40.0.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.
Files changed (50) hide show
  1. package/bpk-component-bottom-sheet/src/BpkBottomSheet.d.ts +15 -0
  2. package/bpk-component-bottom-sheet/src/BpkBottomSheet.js +44 -2
  3. package/bpk-component-bottom-sheet/src/BpkBottomSheet.module.css +1 -1
  4. package/bpk-component-card-list/src/BpkCardListRowRail/BpkCardListCarousel.module.css +1 -1
  5. package/bpk-component-card-list/src/BpkCardListRowRail/BpkCardListRowRailContainer.module.css +1 -1
  6. package/bpk-component-inset-banner/src/BpkInsetBannerV2/BpkInsetBannerSponsored.js +6 -0
  7. package/bpk-mixins/_badges-v2.scss +37 -36
  8. package/bpk-mixins/_badges.scss +37 -36
  9. package/bpk-mixins/_borders.scss +16 -16
  10. package/bpk-mixins/_breakpoints.scss +11 -11
  11. package/bpk-mixins/_buttons.scss +141 -137
  12. package/bpk-mixins/_cards.scss +13 -13
  13. package/bpk-mixins/_chips.scss +66 -66
  14. package/bpk-mixins/_forms.scss +214 -202
  15. package/bpk-mixins/_icons.scss +7 -4
  16. package/bpk-mixins/_index.scss +19 -19
  17. package/bpk-mixins/_layers.scss +34 -34
  18. package/bpk-mixins/_margins.scss +3 -3
  19. package/bpk-mixins/_panels.scss +9 -9
  20. package/bpk-mixins/_radii.scss +6 -6
  21. package/bpk-mixins/_scroll-indicators.scss +2 -2
  22. package/bpk-mixins/_shadows.scss +4 -4
  23. package/bpk-mixins/_spinners.scss +10 -10
  24. package/bpk-mixins/_tokens.scss +1 -3
  25. package/bpk-mixins/_typography.scss +204 -195
  26. package/bpk-mixins/_utils.scss +17 -12
  27. package/bpk-stylesheets/index.scss +13 -14
  28. package/bpk-stylesheets/normalize.css +18 -422
  29. package/bpk-stylesheets/normalize.scss +422 -0
  30. package/package.json +1 -5
  31. package/unstable__bpk-mixins/_badges-v2.scss +0 -240
  32. package/unstable__bpk-mixins/_badges.scss +0 -240
  33. package/unstable__bpk-mixins/_borders.scss +0 -268
  34. package/unstable__bpk-mixins/_breakpoints.scss +0 -221
  35. package/unstable__bpk-mixins/_buttons.scss +0 -587
  36. package/unstable__bpk-mixins/_cards.scss +0 -94
  37. package/unstable__bpk-mixins/_chips.scss +0 -249
  38. package/unstable__bpk-mixins/_forms.scss +0 -1045
  39. package/unstable__bpk-mixins/_icons.scss +0 -88
  40. package/unstable__bpk-mixins/_index.scss +0 -38
  41. package/unstable__bpk-mixins/_layers.scss +0 -199
  42. package/unstable__bpk-mixins/_margins.scss +0 -75
  43. package/unstable__bpk-mixins/_panels.scss +0 -96
  44. package/unstable__bpk-mixins/_radii.scss +0 -80
  45. package/unstable__bpk-mixins/_scroll-indicators.scss +0 -79
  46. package/unstable__bpk-mixins/_shadows.scss +0 -58
  47. package/unstable__bpk-mixins/_spinners.scss +0 -102
  48. package/unstable__bpk-mixins/_tokens.scss +0 -19
  49. package/unstable__bpk-mixins/_typography.scss +0 -1225
  50. package/unstable__bpk-mixins/_utils.scss +0 -267
@@ -1,1045 +0,0 @@
1
- /*
2
- * Backpack - Skyscanner's Design System
3
- *
4
- * Copyright 2016 Skyscanner Ltd
5
- *
6
- * Licensed under the Apache License, Version 2.0 (the "License");
7
- * you may not use this file except in compliance with the License.
8
- * You may obtain a copy of the License at
9
- *
10
- * http://www.apache.org/licenses/LICENSE-2.0
11
- *
12
- * Unless required by applicable law or agreed to in writing, software
13
- * distributed under the License is distributed on an "AS IS" BASIS,
14
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- * See the License for the specific language governing permissions and
16
- * limitations under the License.
17
- */
18
-
19
- /* stylelint-disable at-rule-disallowed-list */
20
-
21
- @use 'tokens.scss';
22
- @use 'typography.scss';
23
- @use 'utils.scss';
24
-
25
- ////
26
- /// @group forms
27
- ////
28
-
29
- /// Form input. Can be used for text, email, number, password and tel type inputs.
30
- ///
31
- /// @example scss
32
- /// .selector {
33
- /// @include bpk-input();
34
- /// }
35
-
36
- @mixin bpk-input {
37
- display: inline-block;
38
- width: 100%;
39
- height: tokens.$bpk-input-height;
40
- padding: tokens.$bpk-input-padding-y tokens.$bpk-input-padding-x;
41
- border: tokens.$bpk-input-border;
42
- border-radius: tokens.$bpk-input-border-radius;
43
- background: tokens.$bpk-input-background;
44
- color: tokens.$bpk-text-primary-day;
45
- appearance: none;
46
-
47
- &::placeholder {
48
- color: tokens.$bpk-text-secondary-day;
49
- }
50
-
51
- &:disabled {
52
- border-color: tokens.$bpk-input-disabled-border-color;
53
- background: tokens.$bpk-input-background;
54
- color: tokens.$bpk-input-disabled-color;
55
- cursor: not-allowed;
56
- }
57
-
58
- &[type='number'] {
59
- -moz-appearance: textfield; // stylelint-disable property-no-vendor-prefix
60
-
61
- &::-webkit-inner-spin-button,
62
- &::-webkit-outer-spin-button {
63
- appearance: none;
64
- }
65
- }
66
-
67
- &[type='number'],
68
- &[type='tel'],
69
- &[type='email'] {
70
- @include utils.bpk-rtl {
71
- text-align: right;
72
- direction: ltr;
73
- }
74
- }
75
-
76
- &::-ms-clear {
77
- display: none;
78
- }
79
- }
80
-
81
- /// Valid form input. Modifies the bpk-input mixin.
82
- ///
83
- /// @require {mixin} bpk-input
84
- ///
85
- /// @example scss
86
- /// .selector {
87
- /// @include bpk-input();
88
- /// @include bpk-input--valid();
89
- /// }
90
-
91
- @mixin bpk-input--valid {
92
- padding-right: tokens.bpk-spacing-xl();
93
- background: tokens.$bpk-input-background
94
- url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij48c3R5bGUgdHlwZT0idGV4dC9jc3MiPmNpcmNsZSwgZWxsaXBzZSwgbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3QsIHRleHQgeyBmaWxsOiAjMGM4MzhhICFpbXBvcnRhbnQgfTwvc3R5bGU+PHBhdGggZD0iTTEyIDIyLjVDNi4yMDEgMjIuNSAxLjUgMTcuNzk5IDEuNSAxMlM2LjIwMSAxLjUgMTIgMS41IDIyLjUgNi4yMDEgMjIuNSAxMiAxNy43OTkgMjIuNSAxMiAyMi41em01LjU2LTEyLjQ0YTEuNSAxLjUgMCAwIDAtMi4xMi0yLjEybC00Ljk0IDQuOTM5LTEuOTQtMS45NGExLjUgMS41IDAgMCAwLTIuMTIgMi4xMjJsMyAzYTEuNSAxLjUgMCAwIDAgMi4xMiAwbDYtNnoiLz48L3N2Zz4=')
95
- no-repeat right tokens.bpk-spacing-md() center;
96
- background-size: tokens.$bpk-icon-size-sm tokens.$bpk-icon-size-sm;
97
-
98
- @include utils.bpk-rtl {
99
- padding-right: tokens.$bpk-input-padding-x;
100
- padding-left: tokens.bpk-spacing-xl();
101
- background-position: left tokens.bpk-spacing-md() center;
102
- }
103
- }
104
-
105
- /// Invalid form input. Modifies the bpk-input mixin.
106
- ///
107
- /// @require {mixin} bpk-input
108
- ///
109
- /// @example scss
110
- /// .selector {
111
- /// @include bpk-input();
112
- /// @include bpk-input--invalid();
113
- /// }
114
-
115
- @mixin bpk-input--invalid {
116
- padding-right: tokens.bpk-spacing-xl();
117
- background: tokens.$bpk-input-background
118
- url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij48c3R5bGUgdHlwZT0idGV4dC9jc3MiPmNpcmNsZSwgZWxsaXBzZSwgbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3QsIHRleHQgeyBmaWxsOiAjZTcwODY2ICFpbXBvcnRhbnQgfTwvc3R5bGU+PHBhdGggZD0iTTEyIDEuNUExMC41IDEwLjUgMCAxIDAgMjIuNSAxMiAxMC41IDEwLjUgMCAwIDAgMTIgMS41ek0xMiAxOGExLjUgMS41IDAgMSAxIDEuNS0xLjVBMS41IDEuNSAwIDAgMSAxMiAxOHptMS41LTZhMS41IDEuNSAwIDAgMS0zIDBWNy41YTEuNSAxLjUgMCAwIDEgMyAweiIvPjwvc3ZnPg==')
119
- no-repeat right tokens.bpk-spacing-md() center;
120
- background-size: tokens.$bpk-icon-size-sm tokens.$bpk-icon-size-sm;
121
-
122
- @include utils.bpk-themeable-property(
123
- border-color,
124
- --bpk-input-invalid-border-color,
125
- tokens.$bpk-form-validation-color
126
- );
127
-
128
- @include utils.bpk-rtl {
129
- padding-right: tokens.$bpk-input-padding-x;
130
- padding-left: tokens.bpk-spacing-xl();
131
- background-position: left tokens.bpk-spacing-md() center;
132
- }
133
- }
134
-
135
- /// Clearable form input. Modifies the bpk-input mixin.
136
- ///
137
- /// @require {mixin} bpk-input
138
- ///
139
- /// @example scss
140
- /// .selector {
141
- /// @include bpk-input();
142
- /// @include bpk-input--clearable();
143
- /// }
144
-
145
- @mixin bpk-input--clearable {
146
- padding-right: tokens.bpk-spacing-xl();
147
-
148
- @include utils.bpk-rtl {
149
- padding-right: tokens.$bpk-input-padding-x;
150
- padding-left: tokens.bpk-spacing-xl();
151
- }
152
-
153
- &:focus {
154
- background: tokens.$bpk-input-background;
155
- }
156
- }
157
-
158
- /// Clearable form input container. Modifies the bpk-input mixin.
159
- ///
160
- /// @require {mixin} bpk-input
161
- ///
162
- /// @example scss
163
- /// .selector {
164
- /// @include bpk-input();
165
- /// @include bpk-input__container();
166
- /// }
167
-
168
- @mixin bpk-input__container {
169
- position: relative;
170
- display: inline-block;
171
- width: 100%;
172
- }
173
-
174
- /// Clearable (clear button) form input. Modifies the bpk-input mixin.
175
- ///
176
- /// @require {mixin} bpk-input
177
- ///
178
- /// @example scss
179
- /// .selector {
180
- /// @include bpk-input();
181
- /// @include bpk-input__clear-button();
182
- /// }
183
-
184
- @mixin bpk-input__clear-button {
185
- position: absolute;
186
- right: tokens.bpk-spacing-md();
187
- height: tokens.$bpk-input-height;
188
-
189
- // remove any default button styling
190
- padding: 0;
191
- border: 0;
192
- background-color: transparent;
193
- color: tokens.$bpk-text-secondary-day;
194
- cursor: pointer;
195
- appearance: none; // hidden by default
196
-
197
- @include utils.bpk-rtl {
198
- right: inherit;
199
- left: tokens.bpk-spacing-md();
200
- }
201
-
202
- @include utils.bpk-hover {
203
- color: tokens.$bpk-text-primary-day;
204
- }
205
-
206
- &:active {
207
- color: tokens.$bpk-text-primary-day;
208
- }
209
-
210
- &--large {
211
- right: tokens.bpk-spacing-base();
212
- height: tokens.$bpk-input-large-height;
213
-
214
- @include utils.bpk-rtl {
215
- left: tokens.bpk-spacing-base();
216
- }
217
- }
218
- }
219
-
220
- /// Large form input. Modifies the bpk-input mixin.
221
- ///
222
- /// @require {mixin} bpk-input
223
- ///
224
- /// @example scss
225
- /// .selector {
226
- /// @include bpk-input();
227
- /// @include bpk-input--large();
228
- /// }
229
-
230
- @mixin bpk-input--large {
231
- height: tokens.$bpk-input-large-height;
232
- padding-right: tokens.bpk-spacing-base();
233
- padding-left: tokens.bpk-spacing-base();
234
- border-radius: tokens.$bpk-input-large-border-radius;
235
-
236
- &.bpk-input--valid,
237
- &.bpk-input--invalid,
238
- &.bpk-input--clearable {
239
- padding-right: tokens.bpk-spacing-xxl();
240
- background-position: right tokens.bpk-spacing-base() center;
241
-
242
- @include utils.bpk-rtl {
243
- padding-right: tokens.bpk-spacing-base();
244
- padding-left: tokens.bpk-spacing-xxl();
245
- background-position: left tokens.bpk-spacing-base() center;
246
- }
247
- }
248
- }
249
-
250
- /// Docked (first-child) form input. Modifies the bpk-input mixin.
251
- ///
252
- /// @require {mixin} bpk-input
253
- ///
254
- /// @example scss
255
- /// .selector {
256
- /// @include bpk-input();
257
- /// @include bpk-input--docked-first-child();
258
- /// }
259
-
260
- @mixin bpk-input--docked-first-child {
261
- border-right-width: 0;
262
- border-radius: tokens.$bpk-input-border-radius 0 0 tokens.$bpk-input-border-radius;
263
-
264
- @include utils.bpk-rtl {
265
- border-right-width: tokens.$bpk-input-border-width;
266
- border-left-width: 0;
267
- border-radius: 0 tokens.$bpk-input-border-radius tokens.$bpk-input-border-radius 0;
268
- }
269
-
270
- &:focus {
271
- position: relative; // brings outline to the front
272
- }
273
- }
274
-
275
- /// Docked (last-child) form input. Modifies the bpk-input mixin.
276
- ///
277
- /// @require {mixin} bpk-input
278
- ///
279
- /// @example scss
280
- /// .selector {
281
- /// @include bpk-input();
282
- /// @include bpk-input--docked-last-child();
283
- /// }
284
-
285
- @mixin bpk-input--docked-last-child {
286
- border-radius: 0 tokens.$bpk-input-border-radius tokens.$bpk-input-border-radius 0;
287
-
288
- @include utils.bpk-rtl {
289
- border-radius: tokens.$bpk-input-border-radius 0 0 tokens.$bpk-input-border-radius;
290
- }
291
-
292
- &:focus {
293
- position: relative; // brings outline to the front
294
- }
295
- }
296
-
297
- /// Docked (middle-child) form input. Modifies the bpk-input mixin.
298
- ///
299
- /// @require {mixin} bpk-input
300
- ///
301
- /// @example scss
302
- /// .selector {
303
- /// @include bpk-input();
304
- /// @include bpk-input--docked-middle-child();
305
- /// }
306
-
307
- @mixin bpk-input--docked-middle-child {
308
- border-right-width: 0;
309
- border-radius: 0;
310
-
311
- @include utils.bpk-rtl {
312
- border-right-width: tokens.$bpk-input-border-width;
313
- border-left-width: 0;
314
- }
315
-
316
- &:focus {
317
- position: relative; // brings outline to the front
318
- }
319
- }
320
-
321
- /// Docked form input (inputs must sit side-by-side in the DOM). Modifies the bpk-input mixin.
322
- ///
323
- /// @require {mixin} bpk-input
324
- ///
325
- /// @example scss
326
- /// .selector {
327
- /// @include bpk-input();
328
- /// @include bpk-input--docked();
329
- /// }
330
-
331
- @mixin bpk-input--docked {
332
- &:first-child {
333
- @include bpk-input--docked-first-child;
334
- }
335
-
336
- &:last-child {
337
- @include bpk-input--docked-last-child;
338
- }
339
-
340
- &:not(:first-child):not(:last-child) {
341
- @include bpk-input--docked-middle-child;
342
- }
343
- }
344
-
345
- /// Form select input.
346
- ///
347
- /// @example scss
348
- /// .selector {
349
- /// @include bpk-select();
350
- /// }
351
-
352
- @mixin bpk-select {
353
- display: inline-block;
354
- width: 100%;
355
- height: tokens.$bpk-input-height;
356
- padding: tokens.bpk-spacing-md() - (2 * tokens.$bpk-one-pixel-rem) tokens.bpk-spacing-md();
357
- padding-right: tokens.bpk-spacing-xl();
358
- border: solid tokens.$bpk-one-pixel-rem tokens.$bpk-line-day;
359
- border-radius: tokens.$bpk-select-border-radius;
360
- background: tokens.$bpk-surface-default-day
361
- url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij48c3R5bGUgdHlwZT0idGV4dC9jc3MiPmNpcmNsZSwgZWxsaXBzZSwgbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3QsIHRleHQgeyBmaWxsOiAjMTYxNjE2ICFpbXBvcnRhbnQgfTwvc3R5bGU+PHBhdGggZD0iTTE2LjUzNyA4LjI1SDcuNDYzYTEuMzU4IDEuMzU4IDAgMCAwLTEuMTEgMi4yNTFsNC4zNTQgNC43N2ExLjUzIDEuNTMgMCAwIDAgMi4xODQuMDRsNC43MTgtNC43N2ExLjM1NyAxLjM1NyAwIDAgMC0xLjA3Mi0yLjI5MXoiLz48L3N2Zz4=')
362
- no-repeat right tokens.bpk-spacing-md() center;
363
- background-size: tokens.$bpk-input-height * 0.5;
364
- color: tokens.$bpk-text-primary-day;
365
- line-height: (tokens.$bpk-line-height-base - (2 * tokens.$bpk-select-border-width));
366
- appearance: none;
367
-
368
- @include utils.bpk-rtl {
369
- padding-right: tokens.bpk-spacing-md();
370
- padding-left: tokens.bpk-spacing-xl();
371
- background-position: left tokens.bpk-spacing-md() center;
372
- }
373
-
374
- @media screen\0 {
375
- /* stylelint-disable-next-line declaration-no-important */
376
- padding: tokens.bpk-spacing-md() !important;
377
- /* stylelint-disable-next-line declaration-no-important */
378
- background-image: none !important;
379
- }
380
-
381
- &:disabled {
382
- border-color: tokens.$bpk-surface-highlight-day;
383
- background: tokens.$bpk-surface-default-day
384
- url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij48c3R5bGUgdHlwZT0idGV4dC9jc3MiPmNpcmNsZSwgZWxsaXBzZSwgbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3QsIHRleHQgeyBmaWxsOiAjMDAwMDAwICFpbXBvcnRhbnQgfTwvc3R5bGU+PHBhdGggZD0iTTE2LjUzNyA4LjI1SDcuNDYzYTEuMzU4IDEuMzU4IDAgMCAwLTEuMTEgMi4yNTFsNC4zNTQgNC43N2ExLjUzIDEuNTMgMCAwIDAgMi4xODQuMDRsNC43MTgtNC43N2ExLjM1NyAxLjM1NyAwIDAgMC0xLjA3Mi0yLjI5MXoiLz48L3N2Zz4=')
385
- no-repeat right tokens.bpk-spacing-md() center;
386
- background-size: tokens.$bpk-input-height * 0.5;
387
- color: tokens.$bpk-text-disabled-day;
388
- cursor: not-allowed;
389
- }
390
- }
391
-
392
- /// Large form select input. Modifies the bpk-select mixin.
393
- ///
394
- /// @require {mixin} bpk-select
395
- ///
396
- /// @example scss
397
- /// .selector {
398
- /// @include bpk-select();
399
- /// @include bpk-select--large();
400
- /// }
401
-
402
- @mixin bpk-select--large {
403
- height: tokens.$bpk-input-large-height;
404
- padding: tokens.bpk-spacing-md() tokens.bpk-spacing-base();
405
- padding-right: tokens.bpk-spacing-xxl();
406
- border-radius: tokens.$bpk-select-large-border-radius;
407
- background: tokens.$bpk-surface-default-day
408
- url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij48c3R5bGUgdHlwZT0idGV4dC9jc3MiPmNpcmNsZSwgZWxsaXBzZSwgbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3QsIHRleHQgeyBmaWxsOiAjMTYxNjE2ICFpbXBvcnRhbnQgfTwvc3R5bGU+PHBhdGggZD0iTTE2LjUzNyA4LjI1SDcuNDYzYTEuMzU4IDEuMzU4IDAgMCAwLTEuMTEgMi4yNTFsNC4zNTQgNC43N2ExLjUzIDEuNTMgMCAwIDAgMi4xODQuMDRsNC43MTgtNC43N2ExLjM1NyAxLjM1NyAwIDAgMC0xLjA3Mi0yLjI5MXoiLz48L3N2Zz4=')
409
- no-repeat right tokens.bpk-spacing-base() center;
410
-
411
- @include utils.bpk-rtl {
412
- padding-right: tokens.bpk-spacing-base();
413
- padding-left: tokens.bpk-spacing-xxl();
414
- background-position: left tokens.bpk-spacing-base() center;
415
- }
416
- }
417
-
418
- /// Docked (first-child) form select input. Modifies the bpk-select mixin.
419
- ///
420
- /// @require {mixin} bpk-select
421
- ///
422
- /// @example scss
423
- /// .selector {
424
- /// @include bpk-select();
425
- /// @include bpk-select--docked-first-child();
426
- /// }
427
-
428
- @mixin bpk-select--docked-first-child {
429
- border-right-width: 0;
430
- border-radius: tokens.$bpk-select-border-radius 0 0 tokens.$bpk-select-border-radius;
431
-
432
- @include utils.bpk-rtl {
433
- border-right-width: tokens.$bpk-select-border-width;
434
- border-left-width: 0;
435
- border-radius: 0 tokens.$bpk-select-border-radius tokens.$bpk-select-border-radius 0;
436
- }
437
- }
438
-
439
- /// Docked (last-child) form select input. Modifies the bpk-select mixin.
440
- ///
441
- /// @require {mixin} bpk-select
442
- ///
443
- /// @example scss
444
- /// .selector {
445
- /// @include bpk-select();
446
- /// @include bpk-select--docked-last-child();
447
- /// }
448
-
449
- @mixin bpk-select--docked-last-child {
450
- border-radius: 0 tokens.$bpk-select-border-radius tokens.$bpk-select-border-radius 0;
451
-
452
- @include utils.bpk-rtl {
453
- border-radius: tokens.$bpk-select-border-radius 0 0 tokens.$bpk-select-border-radius;
454
- }
455
- }
456
-
457
- /// Docked (middle-child) form select input. Modifies the bpk-select mixin.
458
- ///
459
- /// @require {mixin} bpk-select
460
- ///
461
- /// @example scss
462
- /// .selector {
463
- /// @include bpk-select();
464
- /// @include bpk-select--docked-middle-child();
465
- /// }
466
-
467
- @mixin bpk-select--docked-middle-child {
468
- border-right-width: 0;
469
- border-radius: 0;
470
-
471
- @include utils.bpk-rtl {
472
- border-right-width: tokens.$bpk-select-border-width;
473
- border-left-width: 0;
474
- }
475
- }
476
-
477
- /// Docked form select input (selects must sit side-by-side in the DOM). Modifies the bpk-select mixin.
478
- ///
479
- /// @require {mixin} bpk-select
480
- ///
481
- /// @example scss
482
- /// .selector {
483
- /// @include bpk-select();
484
- /// @include bpk-select--docked();
485
- /// }
486
-
487
- @mixin bpk-select--docked {
488
- &:first-child {
489
- @include bpk-select--docked-first-child;
490
- }
491
-
492
- &:last-child {
493
- @include bpk-select--docked-last-child;
494
- }
495
-
496
- &:not(:first-child):not(:last-child) {
497
- @include bpk-select--docked-middle-child;
498
- }
499
- }
500
-
501
- /// Invalid form input. Modifies the bpk-selct mixin.
502
- ///
503
- /// @require {mixin} bpk-select
504
- ///
505
- /// @example scss
506
- /// .selector {
507
- /// @include bpk-select();
508
- /// @include bpk-select--invalid();
509
- /// }
510
-
511
- @mixin bpk-select--invalid {
512
- padding-right: tokens.bpk-spacing-xl();
513
- background: tokens.$bpk-surface-default-day
514
- url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij48c3R5bGUgdHlwZT0idGV4dC9jc3MiPmNpcmNsZSwgZWxsaXBzZSwgbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3QsIHRleHQgeyBmaWxsOiAjMTYxNjE2ICFpbXBvcnRhbnQgfTwvc3R5bGU+PHBhdGggZD0iTTE2LjUzNyA4LjI1SDcuNDYzYTEuMzU4IDEuMzU4IDAgMCAwLTEuMTEgMi4yNTFsNC4zNTQgNC43N2ExLjUzIDEuNTMgMCAwIDAgMi4xODQuMDRsNC43MTgtNC43N2ExLjM1NyAxLjM1NyAwIDAgMC0xLjA3Mi0yLjI5MXoiLz48L3N2Zz4=')
515
- no-repeat right tokens.bpk-spacing-md() center;
516
- background-size: tokens.$bpk-input-height * 0.5;
517
-
518
- @include utils.bpk-themeable-property(
519
- border-color,
520
- --bpk-select-invalid-border-color,
521
- tokens.$bpk-form-validation-color
522
- );
523
-
524
- @include utils.bpk-rtl {
525
- padding-right: tokens.bpk-spacing-md();
526
- padding-left: tokens.bpk-spacing-xl();
527
- background-position: left tokens.bpk-spacing-md() center;
528
- }
529
- }
530
-
531
- /// Form checkbox. Should be applied to containing label element.
532
- ///
533
- /// @example scss
534
- /// .selector {
535
- /// @include bpk-checkbox();
536
- /// }
537
-
538
- @mixin bpk-checkbox {
539
- position: relative;
540
- display: inline-block;
541
- padding-left: tokens.bpk-spacing-lg() + tokens.bpk-spacing-sm();
542
-
543
- @include typography.bpk-text;
544
- @include typography.bpk-body-default;
545
-
546
- @include utils.bpk-rtl {
547
- padding-right: tokens.bpk-spacing-lg() + tokens.bpk-spacing-sm();
548
- padding-left: 0;
549
- }
550
- }
551
-
552
- /// Label for checkbox. Should be applied to label text element.
553
- ///
554
- /// @example scss
555
- /// .selector {
556
- /// @include bpk-checkbox__label();
557
- /// }
558
-
559
- @mixin bpk-checkbox__label {
560
- vertical-align: baseline;
561
- }
562
-
563
- /// Small label for checkbox. Should be applied to label text element.
564
- /// Modifies bpk-checkbox__label.
565
- ///
566
- /// @example scss
567
- /// .selector {
568
- /// @include bpk-checkbox__label();
569
- /// @include bpk-checkbox__label--small();
570
- /// }
571
-
572
- @mixin bpk-checkbox__label--small {
573
- @include typography.bpk-text;
574
- @include typography.bpk-caption;
575
- }
576
-
577
- /// White label checkbox. Modifies the bpk-checkbox mixin.
578
- ///
579
- /// @require {mixin} bpk-checkbox
580
- ///
581
- /// @example scss
582
- /// .selector {
583
- /// @include bpk-checkbox();
584
- /// @include bpk-checkbox--white();
585
- /// }
586
-
587
- @mixin bpk-checkbox--white {
588
- color: tokens.$bpk-surface-default-day;
589
- }
590
-
591
- /// Disabled form checkbox. Modifies the bpk-checkbox mixin.
592
- ///
593
- /// @require {mixin} bpk-checkbox
594
- ///
595
- /// @example scss
596
- /// .selector {
597
- /// @include bpk-checkbox();
598
- /// @include bpk-checkbox--disabled();
599
- /// }
600
-
601
- @mixin bpk-checkbox--disabled {
602
- color: tokens.$bpk-label-disabled-color;
603
- cursor: not-allowed;
604
- }
605
-
606
- /// Invalid form checkbox. Modifies the bpk-checkbox mixin.
607
- ///
608
- /// @require {mixin} bpk-checkbox
609
- ///
610
- /// @example scss
611
- /// .selector {
612
- /// @include bpk-checkbox();
613
- /// @include bpk-checkbox--invalid();
614
- /// }
615
-
616
- @mixin bpk-checkbox--invalid {
617
- input[type='checkbox'] {
618
- border: (tokens.$bpk-one-pixel-rem * 3) solid tokens.$bpk-text-error-day;
619
- }
620
- }
621
-
622
- /// Used to create the check/tick inside
623
- /// a checked checkbox.
624
- ///
625
- /// @example scss
626
- /// .selector {
627
- /// @include bpk-checkbox__checkmark();
628
- /// }
629
- @mixin bpk-checkbox__checkmark {
630
- background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2213%22%20height%3D%229%22%20viewBox%3D%220%200%2013%209%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.35352%203.64648L5.5%207.5L11.5%201.5%22%20stroke%3D%22white%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E');
631
- background-repeat: no-repeat;
632
- background-position: tokens.$bpk-one-pixel-rem center;
633
- background-size: calc(100% - tokens.$bpk-one-pixel-rem * 2.5) auto;
634
-
635
- &:disabled {
636
- background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2213%22%20height%3D%229%22%20viewBox%3D%220%200%2013%209%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.35352%203.64648L5.5%207.5L11.5%201.5%22%20stroke%3D%22lightgrey%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E');
637
- }
638
- }
639
-
640
- /// Form checkbox input.
641
- ///
642
- /// @example scss
643
- /// .selector {
644
- /// @include bpk-checkbox__input();
645
- /// }
646
-
647
- @mixin bpk-checkbox__input {
648
- $checkbox-input-size: tokens.bpk-spacing-lg() - (tokens.$bpk-one-pixel-rem * 4);
649
-
650
- position: absolute;
651
- top: (tokens.$bpk-line-height-base - $checkbox-input-size) * 0.5;
652
- left: 0;
653
- width: $checkbox-input-size;
654
- height: $checkbox-input-size;
655
- margin: 0;
656
- padding: 0;
657
- border: (tokens.$bpk-one-pixel-rem * 3) solid tokens.$bpk-text-secondary-day;
658
- border-radius: (tokens.$bpk-one-pixel-rem * 4);
659
- cursor: pointer;
660
- vertical-align: text-bottom;
661
- appearance: none;
662
-
663
- @include utils.bpk-rtl {
664
- right: 0;
665
- left: auto;
666
- }
667
-
668
- @media screen\0 {
669
- /* stylelint-disable-next-line declaration-no-important */
670
- background: none !important;
671
- }
672
-
673
- &:checked,
674
- &:indeterminate {
675
- @include utils.bpk-themeable-property(
676
- background-color,
677
- --bpk-checkbox-checked-color,
678
- tokens.$bpk-core-accent-day
679
- );
680
- @include utils.bpk-themeable-property(
681
- border-color,
682
- --bpk-checkbox-checked-color,
683
- tokens.$bpk-core-accent-day
684
- );
685
-
686
- &:disabled {
687
- border-color: tokens.$bpk-text-disabled-day;
688
- background: none;
689
- }
690
- }
691
-
692
- &:checked:not(:indeterminate) {
693
- @include bpk-checkbox__checkmark;
694
- }
695
-
696
- &:disabled {
697
- border-color: tokens.$bpk-text-disabled-day;
698
- }
699
- }
700
-
701
- /// Form radio button mixin. This is a reusable mixin to set border styles for the radio button.
702
- ///
703
- /// @param {variable} $color
704
- ///
705
- /// @access private
706
- @mixin _bpk-radio-border($color) {
707
- border: tokens.$bpk-border-size-xl solid $color;
708
- border-radius: tokens.$bpk-border-radius-lg;
709
- }
710
-
711
- /// Form radio button. Should be applied to containing label element.
712
- ///
713
- /// @example scss
714
- /// .selector {
715
- /// @include bpk-radio();
716
- /// }
717
-
718
- @mixin bpk-radio {
719
- position: relative;
720
- display: inline-block;
721
- padding-left: tokens.bpk-spacing-lg() + tokens.bpk-spacing-sm();
722
-
723
- @include utils.bpk-rtl {
724
- padding-right: tokens.bpk-spacing-lg() + tokens.bpk-spacing-sm();
725
- padding-left: 0;
726
- }
727
- }
728
-
729
- /// Disabled form radio button. Modifies the bpk-radio mixin.
730
- ///
731
- /// @require {mixin} bpk-radio
732
- ///
733
- /// @example scss
734
- /// .selector {
735
- /// @include bpk-radio();
736
- /// @include bpk-radio--disabled();
737
- /// }
738
-
739
- @mixin bpk-radio--disabled {
740
- color: tokens.$bpk-label-disabled-color;
741
- cursor: not-allowed;
742
- }
743
-
744
- /// White label radio button. Modifies the bpk-radio mixin.
745
- ///
746
- /// @require {mixin} bpk-radio
747
- ///
748
- /// @example scss
749
- /// .selector {
750
- /// @include bpk-radio();
751
- /// @include bpk-radio--white();
752
- /// }
753
-
754
- @mixin bpk-radio--white {
755
- color: tokens.$bpk-text-primary-inverse-day;
756
-
757
- input[type='radio'] {
758
- background: tokens.$bpk-text-primary-inverse-day;
759
- }
760
- }
761
-
762
- /// Invalid radio button. Modifies the bpk-radio mixin.
763
- ///
764
- /// @require {mixin} bpk-radio
765
- ///
766
- /// @example scss
767
- /// .selector {
768
- /// @include bpk-radio();
769
- /// @include bpk-radio--invalid();
770
- /// }
771
-
772
- @mixin bpk-radio--invalid {
773
- input[type='radio'] {
774
- @include _bpk-radio-border(tokens.$bpk-text-error-day);
775
- }
776
- }
777
-
778
- /// Form radio input.
779
- ///
780
- /// @example scss
781
- /// .selector {
782
- /// @include bpk-radio__input();
783
- /// }
784
-
785
- @mixin bpk-radio__input {
786
- $bpk-radio-size: tokens.bpk-spacing-lg() - (tokens.$bpk-one-pixel-rem * 4);
787
-
788
- position: absolute;
789
- top: 0;
790
- left: 0;
791
- width: $bpk-radio-size;
792
- height: $bpk-radio-size;
793
- margin: 0;
794
- padding: 0;
795
- cursor: pointer;
796
- vertical-align: text-bottom;
797
- appearance: none;
798
-
799
- @include _bpk-radio-border(tokens.$bpk-text-secondary-day);
800
-
801
- @include utils.bpk-rtl {
802
- right: 0;
803
- left: auto;
804
- }
805
-
806
- @media screen\0 {
807
- /* stylelint-disable-next-line declaration-no-important */
808
- background: none !important;
809
- }
810
-
811
- &:checked {
812
- @include utils.bpk-themeable-property(
813
- border-color,
814
- --bpk-radio-checked-color,
815
- tokens.$bpk-core-accent-day
816
- );
817
-
818
- &:disabled {
819
- border-color: tokens.$bpk-text-disabled-day;
820
- }
821
- }
822
-
823
- &:disabled {
824
- border-color: tokens.$bpk-text-disabled-day;
825
- }
826
- }
827
-
828
- /// Form label.
829
- ///
830
- /// @example scss
831
- /// .selector {
832
- /// @include bpk-label();
833
- /// }
834
-
835
- @mixin bpk-label {
836
- display: block;
837
- color: tokens.$bpk-text-primary-day;
838
- font-size: tokens.$bpk-font-size-xs;
839
- font-weight: tokens.$bpk-font-weight-bold;
840
- line-height: tokens.$bpk-line-height-xs;
841
- }
842
-
843
- /// Invalid form label. Modifies the bpk-label mixin.
844
- ///
845
- /// @require {mixin} bpk-label
846
- ///
847
- /// @example scss
848
- /// .selector {
849
- /// @include bpk-label();
850
- /// @include bpk-label--invalid();
851
- /// }
852
-
853
- @mixin bpk-label--invalid {
854
- @include utils.bpk-themeable-property(
855
- color,
856
- --bpk-form-validation-text-color,
857
- tokens.$bpk-form-validation-color
858
- );
859
- }
860
-
861
- /// White form label. Modifies the bpk-label mixin.
862
- ///
863
- /// @require {mixin} bpk-label
864
- ///
865
- /// @example scss
866
- /// .selector {
867
- /// @include bpk-label();
868
- /// @include bpk-label--white();
869
- /// }
870
-
871
- @mixin bpk-label--white {
872
- color: tokens.$bpk-color-white;
873
- }
874
-
875
- /// Disabled form label. Modifies the bpk-label mixin.
876
- ///
877
- /// @require {mixin} bpk-label
878
- ///
879
- /// @example scss
880
- /// .selector {
881
- /// @include bpk-label();
882
- /// @include bpk-label--disabled();
883
- /// }
884
-
885
- @mixin bpk-label--disabled {
886
- color: tokens.$bpk-label-disabled-color;
887
- cursor: not-allowed;
888
- }
889
-
890
- /// Form validation.
891
- ///
892
- /// @example scss
893
- /// .selector {
894
- /// @include bpk-form-validation();
895
- /// }
896
-
897
- @mixin bpk-form-validation {
898
- position: relative;
899
- transform: translateY(-#{tokens.bpk-spacing-base()});
900
- transition:
901
- opacity tokens.$bpk-duration-sm ease-in-out,
902
- transform tokens.$bpk-duration-sm ease-in-out;
903
- opacity: 0;
904
-
905
- @include utils.bpk-themeable-property(
906
- color,
907
- --bpk-form-validation-text-color,
908
- tokens.$bpk-form-validation-color
909
- );
910
- }
911
-
912
- /// Form validation transition state. Modifies the bpk-form-validation mixin.
913
- ///
914
- /// @require {mixin} bpk-form-validation
915
- ///
916
- /// @example scss
917
- /// .selector {
918
- /// @include bpk-form-validation();
919
- ///
920
- /// &--appear {
921
- /// @include bpk-form-validation--appear();
922
- /// }
923
- /// }
924
-
925
- @mixin bpk-form-validation--appear {
926
- transform: translateY(0);
927
- opacity: 1;
928
- }
929
-
930
- /// Checkbox form validation. Modifies the bpk-form-validation mixin.
931
- ///
932
- /// @require {mixin} bpk-form-validation
933
- ///
934
- /// @example scss
935
- /// .selector {
936
- /// @include bpk-form-validation();
937
- ///
938
- /// &--is-checkbox {
939
- /// @include bpk-form-validation--is-checkbox();
940
- /// }
941
- /// }
942
-
943
- @mixin bpk-form-validation--is-checkbox {
944
- display: inline-block;
945
- }
946
-
947
- /// Form validation container.
948
- ///
949
- /// @example scss
950
- /// .selector {
951
- /// @include bpk-form-validation__container();
952
- /// }
953
-
954
- @mixin bpk-form-validation__container {
955
- margin-top: tokens.bpk-spacing-md();
956
- font-size: tokens.$bpk-font-size-xs;
957
- }
958
-
959
- /// Form textarea.
960
- ///
961
- /// @example scss
962
- /// .selector {
963
- /// @include bpk-textarea();
964
- /// }
965
-
966
- @mixin bpk-textarea {
967
- display: inline-block;
968
- width: 100%;
969
- max-width: 100%;
970
- min-height: tokens.bpk-spacing-md() * 11;
971
- padding: tokens.$bpk-input-padding-y tokens.$bpk-input-padding-x;
972
- border: tokens.$bpk-input-border;
973
- border-radius: tokens.$bpk-input-border-radius;
974
- background: tokens.$bpk-input-background;
975
- color: tokens.$bpk-text-primary-day;
976
- appearance: none;
977
-
978
- &::placeholder {
979
- color: tokens.$bpk-text-secondary-day;
980
- }
981
-
982
- &:disabled {
983
- border-color: tokens.$bpk-input-disabled-border-color;
984
- background: tokens.$bpk-input-background;
985
- color: tokens.$bpk-input-disabled-color;
986
- cursor: not-allowed;
987
- }
988
-
989
- &::-ms-clear {
990
- display: none;
991
- }
992
- }
993
-
994
- /// Invalid form input. Modifies the bpk-textarea mixin.
995
- ///
996
- /// @require {mixin} bpk-textarea
997
- ///
998
- /// @example scss
999
- /// .selector {
1000
- /// @include bpk-textarea();
1001
- /// @include bpk-textarea--invalid();
1002
- /// }
1003
-
1004
- @mixin bpk-textarea--invalid {
1005
- padding-right: tokens.bpk-spacing-xl();
1006
- background: tokens.$bpk-input-background
1007
- url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij48c3R5bGUgdHlwZT0idGV4dC9jc3MiPmNpcmNsZSwgZWxsaXBzZSwgbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3QsIHRleHQgeyBmaWxsOiAjZTcwODY2ICFpbXBvcnRhbnQgfTwvc3R5bGU+PHBhdGggZD0iTTEyIDEuNUExMC41IDEwLjUgMCAxIDAgMjIuNSAxMiAxMC41IDEwLjUgMCAwIDAgMTIgMS41ek0xMiAxOGExLjUgMS41IDAgMSAxIDEuNS0xLjVBMS41IDEuNSAwIDAgMSAxMiAxOHptMS41LTZhMS41IDEuNSAwIDAgMS0zIDBWNy41YTEuNSAxLjUgMCAwIDEgMyAweiIvPjwvc3ZnPg==')
1008
- no-repeat right tokens.bpk-spacing-md() center;
1009
-
1010
- @include utils.bpk-themeable-property(
1011
- border-color,
1012
- --bpk-textarea-invalid-border-color,
1013
- tokens.$bpk-form-validation-color
1014
- );
1015
-
1016
- @include utils.bpk-rtl {
1017
- padding-right: tokens.$bpk-input-padding-x;
1018
- padding-left: tokens.bpk-spacing-xl();
1019
- background-position: left tokens.bpk-spacing-md() center;
1020
-
1021
- &.bpk-textarea--large {
1022
- padding-right: tokens.bpk-spacing-base();
1023
- padding-left: tokens.bpk-spacing-xxl();
1024
- background-position: right tokens.bpk-spacing-base() center;
1025
- }
1026
- }
1027
- }
1028
-
1029
- @mixin bpk-textarea--large {
1030
- min-height: 6 * tokens.bpk-spacing-base();
1031
- padding-right: tokens.bpk-spacing-base();
1032
- padding-left: tokens.bpk-spacing-base();
1033
- border-radius: tokens.$bpk-input-large-border-radius;
1034
-
1035
- &.bpk-textarea--invalid {
1036
- padding-right: tokens.bpk-spacing-xxl();
1037
- background-position: right tokens.bpk-spacing-base() center;
1038
-
1039
- @include utils.bpk-rtl {
1040
- padding-right: tokens.bpk-spacing-base();
1041
- padding-left: tokens.bpk-spacing-xxl();
1042
- background-position: left tokens.bpk-spacing-base() center;
1043
- }
1044
- }
1045
- }