@tui/design-system 1.9.0 → 1.11.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/CHANGELOG.md +99 -0
- package/dist/themes/crystalski/index.css +37 -33
- package/dist/themes/crystalski/index.css.map +1 -1
- package/dist/themes/firstchoice/index.css +36 -33
- package/dist/themes/firstchoice/index.css.map +1 -1
- package/dist/themes/tui/index.css +45 -41
- package/dist/themes/tui/index.css.map +1 -1
- package/package.json +7 -1
- package/scss/lib/accordion/_mixins.scss +17 -1
- package/scss/lib/cards/product/_index.scss +3 -0
- package/scss/lib/cards/product/_mixins.scss +351 -0
- package/scss/lib/cards/product/_variables.scss +9 -0
- package/scss/lib/cards/search/_mixins.scss +15 -2
- package/scss/lib/cards/selectable/_mixins.scss +34 -11
- package/scss/lib/forms/input-checkbox/_mixins.scss +7 -7
- package/scss/lib/forms/input-radio/_mixins.scss +7 -7
- package/scss/lib/forms/input-select/_mixins.scss +21 -2
- package/scss/lib/grid/_column.scss +21 -0
- package/scss/lib/grid/_mixins.scss +89 -0
- package/scss/lib/highlight-panel/_mixins.scss +16 -2
- package/scss/lib/info-tag/_mixins.scss +2 -0
- package/scss/lib/patterns/reasons-to-book/_index.scss +3 -0
- package/scss/lib/patterns/reasons-to-book/_mixins.scss +86 -0
- package/scss/lib/patterns/reasons-to-book/_variables.scss +3 -0
- package/scss/lib/show-more-less/_mixins.scss +15 -4
- package/scss/lib/skeleton/_mixins.scss +33 -12
- package/scss/lib/timeline/_index.scss +2 -0
- package/scss/lib/timeline/_mixins.scss +87 -0
- package/scss/mixins.scss +6 -2
- package/scss/reset.scss +4 -0
- package/scss/themes/crystalski/_overrides.scss +25 -26
- package/scss/themes/crystalski/index.scss +13 -10
- package/scss/themes/firstchoice/_overrides.scss +33 -28
- package/scss/themes/firstchoice/index.scss +9 -6
- package/scss/themes/firstchoice/theme.json +7 -0
- package/scss/themes/tui/_overrides.scss +8 -3
- package/scss/themes/tui/index.scss +12 -9
- package/scss/variables/base-theme.json +30 -8
- package/scss/variables.scss +5 -2
- package/types/components.ts +14 -1
|
@@ -22,12 +22,10 @@ $uilib-input-select-included: false !default;
|
|
|
22
22
|
|
|
23
23
|
display: flex;
|
|
24
24
|
flex-flow: row nowrap;
|
|
25
|
-
gap: var(--uilib-spacing-200);
|
|
26
25
|
align-items: center;
|
|
27
26
|
|
|
28
27
|
width: 100%;
|
|
29
28
|
height: 2.5rem;
|
|
30
|
-
padding: 0 var(--uilib-spacing-200);
|
|
31
29
|
|
|
32
30
|
color: var(--uilib-color-text-body);
|
|
33
31
|
|
|
@@ -39,6 +37,9 @@ $uilib-input-select-included: false !default;
|
|
|
39
37
|
cursor: pointer;
|
|
40
38
|
|
|
41
39
|
&::after {
|
|
40
|
+
position: absolute;
|
|
41
|
+
top: 50%;
|
|
42
|
+
right: var(--uilib-spacing-200);
|
|
42
43
|
content: '';
|
|
43
44
|
|
|
44
45
|
display: flex;
|
|
@@ -54,6 +55,8 @@ $uilib-input-select-included: false !default;
|
|
|
54
55
|
-webkit-mask-size: cover;
|
|
55
56
|
mask-size: cover;
|
|
56
57
|
|
|
58
|
+
transform: translateY(-50%);
|
|
59
|
+
|
|
57
60
|
pointer-events: none;
|
|
58
61
|
}
|
|
59
62
|
|
|
@@ -67,6 +70,9 @@ $uilib-input-select-included: false !default;
|
|
|
67
70
|
|
|
68
71
|
&__select {
|
|
69
72
|
width: 100%;
|
|
73
|
+
height: calc(2.5rem - var(--uilib-stroke-size-050));
|
|
74
|
+
padding: var(--uilib-spacing-200);
|
|
75
|
+
padding-right: calc(var(--uilib-icon-size-medium) + var(--uilib-spacing-400));
|
|
70
76
|
|
|
71
77
|
color: var(--uilib-color-text-body);
|
|
72
78
|
font: var(--uilib-typography-body-medium);
|
|
@@ -74,6 +80,7 @@ $uilib-input-select-included: false !default;
|
|
|
74
80
|
text-overflow: ellipsis;
|
|
75
81
|
|
|
76
82
|
border: 0;
|
|
83
|
+
border-radius: var(--uilib-border-radius-100);
|
|
77
84
|
|
|
78
85
|
background: none;
|
|
79
86
|
|
|
@@ -91,9 +98,21 @@ $uilib-input-select-included: false !default;
|
|
|
91
98
|
}
|
|
92
99
|
|
|
93
100
|
&__icon {
|
|
101
|
+
position: absolute;
|
|
102
|
+
top: 50%;
|
|
103
|
+
left: var(--uilib-spacing-200);
|
|
104
|
+
|
|
94
105
|
flex-shrink: 0;
|
|
95
106
|
|
|
96
107
|
background-color: var(--uilib-color-status-info-icon);
|
|
108
|
+
|
|
109
|
+
transform: translateY(-50%);
|
|
110
|
+
|
|
111
|
+
pointer-events: none;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
&:has(&__icon) &__select {
|
|
115
|
+
padding-left: calc(var(--uilib-icon-size-xsmall) + var(--uilib-spacing-400));
|
|
97
116
|
}
|
|
98
117
|
|
|
99
118
|
&:has(select[disabled]),
|
|
@@ -47,6 +47,27 @@
|
|
|
47
47
|
#{$uilib-grid-selector-column}--order#{$prefix}-reset {
|
|
48
48
|
@include uilib-grid-col-order-reset;
|
|
49
49
|
}
|
|
50
|
+
|
|
51
|
+
// Dividers
|
|
52
|
+
#{$uilib-grid-selector-column}--divider#{$prefix}-left {
|
|
53
|
+
@include uilib-grid-col-divider-left;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
#{$uilib-grid-selector-column}--divider#{$prefix}-top {
|
|
57
|
+
@include uilib-grid-col-divider-top;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
#{$uilib-grid-selector-column}--divider#{$prefix}-left-none {
|
|
61
|
+
@include uilib-grid-col-divider-left-none;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
#{$uilib-grid-selector-column}--divider#{$prefix}-top-none {
|
|
65
|
+
@include uilib-grid-col-divider-top-none;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
#{$uilib-grid-selector-column}--divider#{$prefix}-none {
|
|
69
|
+
@include uilib-grid-col-divider-none;
|
|
70
|
+
}
|
|
50
71
|
}
|
|
51
72
|
|
|
52
73
|
@include uilib-generate-grid-for-resolution;
|
|
@@ -130,3 +130,92 @@
|
|
|
130
130
|
@mixin uilib-grid-col-order-reset {
|
|
131
131
|
order: 0;
|
|
132
132
|
}
|
|
133
|
+
|
|
134
|
+
/* --- Grid Column Dividers ------- */
|
|
135
|
+
|
|
136
|
+
/// Adds a vertical divider (left edge) to a grid column using ::after.
|
|
137
|
+
/// Positioned in the centre of the column gap.
|
|
138
|
+
/// Can be combined with uilib-grid-col-divider-top on the same element.
|
|
139
|
+
///
|
|
140
|
+
/// @example scss - Usage
|
|
141
|
+
/// .my-col { @include uilib-grid-col-divider-left; }
|
|
142
|
+
///
|
|
143
|
+
/// @example scss - Both dividers on the same column
|
|
144
|
+
/// .my-col {
|
|
145
|
+
/// @include uilib-grid-col-divider-left;
|
|
146
|
+
/// @include uilib-grid-col-divider-top;
|
|
147
|
+
/// }
|
|
148
|
+
|
|
149
|
+
@mixin uilib-grid-col-divider-left {
|
|
150
|
+
position: relative;
|
|
151
|
+
|
|
152
|
+
&::after {
|
|
153
|
+
position: absolute;
|
|
154
|
+
top: 0;
|
|
155
|
+
left: calc(var(--uilib-grid-gutter-width) / -2);
|
|
156
|
+
bottom: 0;
|
|
157
|
+
content: '';
|
|
158
|
+
|
|
159
|
+
border-left: var(--uilib-stroke-size-025) var(--uilib-stroke-style-solid) var(--uilib-color-border-divider);
|
|
160
|
+
|
|
161
|
+
pointer-events: none;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/// Adds a horizontal divider (top edge) to a grid column using ::before.
|
|
166
|
+
/// Positioned in the centre of the row gap.
|
|
167
|
+
/// Can be combined with uilib-grid-col-divider-left on the same element.
|
|
168
|
+
///
|
|
169
|
+
/// @example scss - Usage
|
|
170
|
+
/// .my-col { @include uilib-grid-col-divider-top; }
|
|
171
|
+
|
|
172
|
+
@mixin uilib-grid-col-divider-top {
|
|
173
|
+
position: relative;
|
|
174
|
+
|
|
175
|
+
&::before {
|
|
176
|
+
position: absolute;
|
|
177
|
+
top: calc(var(--uilib-grid-gutter-height) / -2);
|
|
178
|
+
left: 0;
|
|
179
|
+
right: 0;
|
|
180
|
+
content: '';
|
|
181
|
+
|
|
182
|
+
border-top: var(--uilib-stroke-size-025) var(--uilib-stroke-style-solid) var(--uilib-color-border-divider);
|
|
183
|
+
|
|
184
|
+
pointer-events: none;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/// Removes the left (vertical) divider from a grid column.
|
|
189
|
+
|
|
190
|
+
@mixin uilib-grid-col-divider-left-none {
|
|
191
|
+
&::after {
|
|
192
|
+
content: none;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/// Removes the top (horizontal) divider from a grid column.
|
|
197
|
+
|
|
198
|
+
@mixin uilib-grid-col-divider-top-none {
|
|
199
|
+
&::before {
|
|
200
|
+
content: none;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/// Removes both dividers from a grid column.
|
|
205
|
+
///
|
|
206
|
+
/// @example scss - Remove all dividers at a breakpoint
|
|
207
|
+
/// .my-col {
|
|
208
|
+
/// @include uilib-grid-col-divider-left;
|
|
209
|
+
/// @include uilib-grid-col-divider-top;
|
|
210
|
+
/// @include uilib-breakpoint(md) { @include uilib-grid-col-divider-none; }
|
|
211
|
+
/// }
|
|
212
|
+
|
|
213
|
+
@mixin uilib-grid-col-divider-none {
|
|
214
|
+
&::after {
|
|
215
|
+
content: none;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
&::before {
|
|
219
|
+
content: none;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
@@ -112,17 +112,31 @@ $uilib-highlight-panel-included: false !default;
|
|
|
112
112
|
&__collapsible::details-content {
|
|
113
113
|
block-size: 0;
|
|
114
114
|
|
|
115
|
+
visibility: hidden;
|
|
116
|
+
|
|
115
117
|
overflow: hidden;
|
|
116
118
|
|
|
119
|
+
content-visibility: visible;
|
|
120
|
+
|
|
117
121
|
@media (prefers-reduced-motion: no-preference) {
|
|
118
122
|
transition:
|
|
119
|
-
block-size var(--uilib-motion-duration-medium) var(--uilib-motion-timing-
|
|
120
|
-
|
|
123
|
+
block-size var(--uilib-motion-duration-medium) var(--uilib-motion-timing-in),
|
|
124
|
+
visibility 0s var(--uilib-motion-duration-medium);
|
|
121
125
|
}
|
|
122
126
|
}
|
|
123
127
|
|
|
124
128
|
&__collapsible[open]::details-content {
|
|
125
129
|
block-size: auto;
|
|
130
|
+
|
|
131
|
+
visibility: visible;
|
|
132
|
+
|
|
133
|
+
content-visibility: visible;
|
|
134
|
+
|
|
135
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
136
|
+
transition:
|
|
137
|
+
block-size var(--uilib-motion-duration-medium) var(--uilib-motion-timing-out),
|
|
138
|
+
visibility 0s;
|
|
139
|
+
}
|
|
126
140
|
}
|
|
127
141
|
|
|
128
142
|
&__header-text {
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// Reasons to book / _mixins
|
|
2
|
+
@use 'variables' as *;
|
|
3
|
+
@use '../../link/mixins' as *;
|
|
4
|
+
@use '../../cards/carousel/mixins' as *;
|
|
5
|
+
|
|
6
|
+
$uilib-reasons-to-book-included: false !default;
|
|
7
|
+
|
|
8
|
+
@mixin uilib-reasons-to-book() {
|
|
9
|
+
@if not $uilib-reasons-to-book-included {
|
|
10
|
+
$uilib-reasons-to-book-included: true !global;
|
|
11
|
+
|
|
12
|
+
@include uilib-link;
|
|
13
|
+
@include uilib-carousel;
|
|
14
|
+
@include uilib-reasons-to-book-master;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@mixin uilib-reasons-to-book-master() {
|
|
19
|
+
.uilib-reasons-to-book {
|
|
20
|
+
container-name: uilib-reasons-to-book;
|
|
21
|
+
container-type: inline-size;
|
|
22
|
+
|
|
23
|
+
&__heading {
|
|
24
|
+
margin: 0 0 var(--uilib-spacing-400);
|
|
25
|
+
|
|
26
|
+
color: var(--uilib-color-text-strong);
|
|
27
|
+
font: var(--uilib-typography-heading-xxlarge);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Reason cards keep their own natural (content-driven) width and simply overflow/scroll
|
|
31
|
+
// rather than being evenly redivided to fill the viewport — unlike the generic Carousel
|
|
32
|
+
// `item` slide, which defaults to `flex: 0 0 calc(100cqw / visible)`. The trailing divider
|
|
33
|
+
// line is a `::after` pseudo-element on the slide itself (not a separate Divider element),
|
|
34
|
+
// so this internal `gap` (not the track gap, which Embla would mismeasure) provides the
|
|
35
|
+
// space between the reason content and its line — and the line is automatically omitted on
|
|
36
|
+
// the last slide via `:not(:last-child)`, with no JS "is this the last item" check needed.
|
|
37
|
+
.uilib-carousel__slide {
|
|
38
|
+
flex: 0 0 auto;
|
|
39
|
+
gap: var(--uilib-spacing-400);
|
|
40
|
+
|
|
41
|
+
&:not(:last-child)::after {
|
|
42
|
+
content: '';
|
|
43
|
+
|
|
44
|
+
flex: 0 0 auto;
|
|
45
|
+
align-self: stretch;
|
|
46
|
+
|
|
47
|
+
border-inline-end: var(--uilib-stroke-size-025) solid var(--uilib-color-border-divider);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
&__reason {
|
|
52
|
+
display: flex;
|
|
53
|
+
gap: var(--uilib-spacing-200);
|
|
54
|
+
align-items: center;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
&__pictogram {
|
|
58
|
+
flex: 0 0 auto;
|
|
59
|
+
|
|
60
|
+
width: 4.5rem; /* 72 / 16 — fixed pictogram size per Figma, no matching icon-size token */
|
|
61
|
+
height: 4.5rem;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
&__text {
|
|
65
|
+
max-width: 9.875rem; /* 158 / 16 — keeps the ~238px card pitch from Figma; wraps to 2 lines */
|
|
66
|
+
margin: 0;
|
|
67
|
+
|
|
68
|
+
color: var(--uilib-color-text-strong);
|
|
69
|
+
font: var(--uilib-typography-component-heading-small-strong);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Compact reflow: below this container width the reason card centres its text and stacks
|
|
73
|
+
// the pictogram above it. Driven by the pattern's own width, not the viewport, so it works
|
|
74
|
+
// the same whether the carousel is full-bleed or nested in a narrower column.
|
|
75
|
+
// 34.1875rem = 547px — the top of the Compact range in Figma (288–547px); Static/Scrollable
|
|
76
|
+
// (548px+) stay above it.
|
|
77
|
+
/* stylelint-disable-next-line order/order */
|
|
78
|
+
@container uilib-reasons-to-book (max-width: 34.1875rem) {
|
|
79
|
+
.uilib-reasons-to-book__reason {
|
|
80
|
+
flex-direction: column;
|
|
81
|
+
|
|
82
|
+
text-align: center;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -40,25 +40,36 @@ $uilib-show-more-less-included: false !default;
|
|
|
40
40
|
|
|
41
41
|
&[is-hydrated] .uilib-show-more-less__content {
|
|
42
42
|
block-size: 0;
|
|
43
|
-
content-visibility: hidden;
|
|
44
|
-
|
|
45
43
|
margin-top: 0;
|
|
46
44
|
|
|
45
|
+
visibility: hidden;
|
|
46
|
+
|
|
47
47
|
overflow: hidden;
|
|
48
48
|
|
|
49
|
+
content-visibility: visible;
|
|
50
|
+
|
|
49
51
|
@media (prefers-reduced-motion: no-preference) {
|
|
50
52
|
transition:
|
|
51
53
|
block-size var(--uilib-motion-duration-medium) var(--uilib-motion-timing-out),
|
|
52
|
-
|
|
54
|
+
visibility 0s var(--uilib-motion-duration-medium),
|
|
53
55
|
margin-top var(--uilib-motion-duration-medium) var(--uilib-motion-timing-out);
|
|
54
56
|
}
|
|
55
57
|
}
|
|
56
58
|
|
|
57
59
|
&[is-open] .uilib-show-more-less__content {
|
|
58
60
|
block-size: auto;
|
|
61
|
+
margin-top: var(--uilib-spacing-400);
|
|
62
|
+
|
|
63
|
+
visibility: visible;
|
|
64
|
+
|
|
59
65
|
content-visibility: visible;
|
|
60
66
|
|
|
61
|
-
|
|
67
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
68
|
+
transition:
|
|
69
|
+
block-size var(--uilib-motion-duration-medium) var(--uilib-motion-timing-out),
|
|
70
|
+
visibility 0s,
|
|
71
|
+
margin-top var(--uilib-motion-duration-medium) var(--uilib-motion-timing-out);
|
|
72
|
+
}
|
|
62
73
|
}
|
|
63
74
|
}
|
|
64
75
|
|
|
@@ -37,15 +37,16 @@ $uilib-skeleton-included: false !default;
|
|
|
37
37
|
|
|
38
38
|
background: linear-gradient(
|
|
39
39
|
90deg,
|
|
40
|
-
var(--uilib-skeleton-color) 0%,
|
|
41
|
-
var(--uilib-skeleton-shimmer-color)
|
|
42
|
-
var(--uilib-skeleton-color)
|
|
43
|
-
var(--uilib-skeleton-color)
|
|
44
|
-
var(--uilib-skeleton-shimmer-color)
|
|
45
|
-
var(--uilib-skeleton-color)
|
|
46
|
-
var(--uilib-skeleton-color)
|
|
47
|
-
var(--uilib-skeleton-
|
|
48
|
-
var(--uilib-skeleton-color)
|
|
40
|
+
var(--uilib-skeleton-shimmer-color) 0%,
|
|
41
|
+
var(--uilib-skeleton-shimmer-color) 1%,
|
|
42
|
+
var(--uilib-skeleton-color) 5%,
|
|
43
|
+
var(--uilib-skeleton-color) 45%,
|
|
44
|
+
var(--uilib-skeleton-shimmer-color) 49%,
|
|
45
|
+
var(--uilib-skeleton-shimmer-color) 51%,
|
|
46
|
+
var(--uilib-skeleton-color) 55%,
|
|
47
|
+
var(--uilib-skeleton-color) 95%,
|
|
48
|
+
var(--uilib-skeleton-shimmer-color) 99%,
|
|
49
|
+
var(--uilib-skeleton-shimmer-color) 100%
|
|
49
50
|
);
|
|
50
51
|
background-position-x: calc(var(--uilib-skeleton-position) * 100%);
|
|
51
52
|
background-size: 200% 100%;
|
|
@@ -73,12 +74,15 @@ $uilib-skeleton-included: false !default;
|
|
|
73
74
|
}
|
|
74
75
|
|
|
75
76
|
&--circle {
|
|
77
|
+
flex-grow: 0;
|
|
76
78
|
flex-shrink: 0;
|
|
77
79
|
|
|
78
|
-
width:
|
|
80
|
+
width: auto;
|
|
79
81
|
height: var(--uilib-spacing-500);
|
|
80
82
|
|
|
81
|
-
|
|
83
|
+
aspect-ratio: var(--uilib-aspect-ratio-1x1-square);
|
|
84
|
+
|
|
85
|
+
border-radius: var(--uilib-border-radius-circle);
|
|
82
86
|
}
|
|
83
87
|
|
|
84
88
|
&--card {
|
|
@@ -89,6 +93,23 @@ $uilib-skeleton-included: false !default;
|
|
|
89
93
|
}
|
|
90
94
|
}
|
|
91
95
|
|
|
96
|
+
&--product-card {
|
|
97
|
+
display: grid;
|
|
98
|
+
|
|
99
|
+
&::before {
|
|
100
|
+
content: '';
|
|
101
|
+
|
|
102
|
+
display: block;
|
|
103
|
+
|
|
104
|
+
aspect-ratio: var(--uilib-aspect-ratio-16x9-wide);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* stylelint-disable-next-line order/order */
|
|
108
|
+
@container (min-width: 35rem) {
|
|
109
|
+
grid-template-columns: 45% 55%;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
92
113
|
&--container {
|
|
93
114
|
padding: var(--uilib-spacing-400);
|
|
94
115
|
}
|
|
@@ -116,7 +137,7 @@ $uilib-skeleton-included: false !default;
|
|
|
116
137
|
}
|
|
117
138
|
|
|
118
139
|
@media (prefers-reduced-motion: no-preference) {
|
|
119
|
-
animation: shimmer
|
|
140
|
+
animation: shimmer 3.5s linear infinite;
|
|
120
141
|
}
|
|
121
142
|
|
|
122
143
|
// Width utilities
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
@use '../icon/mixins' as *;
|
|
2
|
+
|
|
3
|
+
$uilib-timeline-included: false !default;
|
|
4
|
+
|
|
5
|
+
@mixin uilib-timeline() {
|
|
6
|
+
@if not $uilib-timeline-included {
|
|
7
|
+
$uilib-timeline-included: true !global;
|
|
8
|
+
|
|
9
|
+
@include uilib-icon;
|
|
10
|
+
@include uilib-timeline-master;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@mixin uilib-timeline-master() {
|
|
15
|
+
.uilib-timeline {
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
|
|
19
|
+
margin: 0;
|
|
20
|
+
padding: 0;
|
|
21
|
+
|
|
22
|
+
list-style: none;
|
|
23
|
+
|
|
24
|
+
&--gap {
|
|
25
|
+
gap: var(--uilib-spacing-400);
|
|
26
|
+
|
|
27
|
+
.uilib-timeline__marker::after {
|
|
28
|
+
bottom: calc(var(--uilib-spacing-700) * -1);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
&--gap &__item--gap:not(:last-child) {
|
|
33
|
+
margin-bottom: 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
&__item {
|
|
37
|
+
display: grid;
|
|
38
|
+
grid-template-columns: var(--uilib-spacing-500) 1fr;
|
|
39
|
+
gap: var(--uilib-spacing-200);
|
|
40
|
+
|
|
41
|
+
&--gap:not(:last-child) {
|
|
42
|
+
margin-bottom: var(--uilib-spacing-400);
|
|
43
|
+
|
|
44
|
+
.uilib-timeline__marker::after {
|
|
45
|
+
bottom: calc(var(--uilib-spacing-700) * -1);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
&:not(:last-child) .uilib-timeline__marker::after {
|
|
50
|
+
content: '';
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
&__marker {
|
|
55
|
+
position: relative;
|
|
56
|
+
|
|
57
|
+
display: flex;
|
|
58
|
+
justify-content: center;
|
|
59
|
+
align-items: flex-start;
|
|
60
|
+
|
|
61
|
+
&::after {
|
|
62
|
+
position: absolute;
|
|
63
|
+
top: calc(var(--uilib-spacing-400) + var(--uilib-icon-size-small));
|
|
64
|
+
left: 50%;
|
|
65
|
+
bottom: calc(var(--uilib-spacing-300) * -1);
|
|
66
|
+
content: none;
|
|
67
|
+
|
|
68
|
+
border-left: var(--uilib-stroke-size-050) var(--uilib-stroke-style-dashed) var(--uilib-color-border-dashed);
|
|
69
|
+
|
|
70
|
+
transform: translateX(-50%);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
&__icon {
|
|
75
|
+
margin-top: calc(var(--uilib-spacing-300) + var(--uilib-spacing-050)); /* 12 + 2 */
|
|
76
|
+
|
|
77
|
+
background: var(--uilib-color-status-info-icon);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
&__content {
|
|
81
|
+
align-content: flex-end;
|
|
82
|
+
|
|
83
|
+
min-width: 0;
|
|
84
|
+
min-height: calc(var(--uilib-spacing-400) + var(--uilib-icon-size-small));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
package/scss/mixins.scss
CHANGED
|
@@ -4,11 +4,14 @@
|
|
|
4
4
|
@forward 'lib/breadcrumb/mixins';
|
|
5
5
|
@forward 'lib/alert/mixins';
|
|
6
6
|
@forward 'lib/button/mixins';
|
|
7
|
-
@forward 'lib/cards/card/mixins';
|
|
8
7
|
@forward 'lib/cards/article/mixins';
|
|
8
|
+
@forward 'lib/cards/card/mixins';
|
|
9
9
|
@forward 'lib/cards/carousel/mixins';
|
|
10
10
|
@forward 'lib/cards/icon/mixins';
|
|
11
|
+
@forward 'lib/cards/promotion/mixins';
|
|
11
12
|
@forward 'lib/cards/search/mixins';
|
|
13
|
+
@forward 'lib/cards/product/mixins';
|
|
14
|
+
@forward 'lib/cards/promotion/mixins';
|
|
12
15
|
@forward 'lib/cards/selectable/mixins';
|
|
13
16
|
@forward 'lib/divider/mixins';
|
|
14
17
|
@forward 'lib/flight-details/mixins';
|
|
@@ -38,7 +41,6 @@
|
|
|
38
41
|
@forward 'lib/pagination/mixins';
|
|
39
42
|
@forward 'lib/price/mixins';
|
|
40
43
|
@forward 'lib/price-box/mixins';
|
|
41
|
-
@forward 'lib/cards/promotion/mixins';
|
|
42
44
|
@forward 'lib/promo-tag/mixins';
|
|
43
45
|
@forward 'lib/ratings-reviews/customer-review/mixins';
|
|
44
46
|
@forward 'lib/ratings-reviews/numerical/mixins';
|
|
@@ -53,6 +55,7 @@
|
|
|
53
55
|
@forward 'lib/social-proofing/mixins';
|
|
54
56
|
@forward 'lib/tabs/in-page/mixins';
|
|
55
57
|
@forward 'lib/tabs/anchor/mixins';
|
|
58
|
+
@forward 'lib/timeline/mixins';
|
|
56
59
|
@forward 'lib/tooltip/mixins';
|
|
57
60
|
@forward 'lib/travel-aware-banner/mixins';
|
|
58
61
|
@forward 'lib/typography/mixins';
|
|
@@ -60,5 +63,6 @@
|
|
|
60
63
|
|
|
61
64
|
// Pattern mixins
|
|
62
65
|
@forward 'lib/patterns/edit-search/mixins';
|
|
66
|
+
@forward 'lib/patterns/reasons-to-book/mixins';
|
|
63
67
|
@forward 'lib/patterns/review-card/mixins';
|
|
64
68
|
@forward 'lib/patterns/review-summary/mixins';
|
package/scss/reset.scss
CHANGED
|
@@ -124,10 +124,14 @@ textarea:-webkit-autofill:focus,
|
|
|
124
124
|
select:-webkit-autofill,
|
|
125
125
|
select:-webkit-autofill:hover,
|
|
126
126
|
select:-webkit-autofill:focus {
|
|
127
|
+
border-radius: inherit;
|
|
128
|
+
|
|
127
129
|
background-color: transparent;
|
|
128
130
|
|
|
129
131
|
-webkit-box-shadow: none;
|
|
130
132
|
-webkit-text-fill-color: var(--uilib-color-text-body);
|
|
133
|
+
|
|
134
|
+
transition: background-color 9999s ease-in-out 0s !important;
|
|
131
135
|
}
|
|
132
136
|
|
|
133
137
|
/* Remove spinner arrows from number input */
|
|
@@ -126,6 +126,23 @@ $uilib-crystalski-card-icon-variables: map.merge(
|
|
|
126
126
|
)
|
|
127
127
|
);
|
|
128
128
|
|
|
129
|
+
// Card - product
|
|
130
|
+
$uilib-crystalski-card-product-variables: map.merge(
|
|
131
|
+
$uilib-card-product-variables,
|
|
132
|
+
(
|
|
133
|
+
highlights-icon: url('#{$uilib-assets-base-url}v3/icons/crystalski/standard/chevron-down.svg'),
|
|
134
|
+
)
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
// Card - promotion
|
|
138
|
+
$uilib-crystalski-card-promotion-variables: map.merge(
|
|
139
|
+
$uilib-card-promotion-variables,
|
|
140
|
+
(
|
|
141
|
+
cta-copy-icon: url('#{$uilib-assets-base-url}v3/icons/crystalski/standard/copy.svg'),
|
|
142
|
+
cta-copied-icon: url('#{$uilib-assets-base-url}v3/icons/crystalski/standard/checkmark-circled-filled.svg'),
|
|
143
|
+
)
|
|
144
|
+
);
|
|
145
|
+
|
|
129
146
|
// Card - selectable
|
|
130
147
|
$uilib-crystalski-card-selectable-variables: map.merge(
|
|
131
148
|
$uilib-card-selectable-variables,
|
|
@@ -317,15 +334,6 @@ $uilib-crystalski-pagination-variables: map.merge(
|
|
|
317
334
|
)
|
|
318
335
|
);
|
|
319
336
|
|
|
320
|
-
// Promo banner
|
|
321
|
-
$uilib-crystalski-card-promotion-variables: map.merge(
|
|
322
|
-
$uilib-card-promotion-variables,
|
|
323
|
-
(
|
|
324
|
-
cta-copy-icon: url('#{$uilib-assets-base-url}v3/icons/crystalski/standard/copy.svg'),
|
|
325
|
-
cta-copied-icon: url('#{$uilib-assets-base-url}v3/icons/crystalski/standard/checkmark-circled-filled.svg'),
|
|
326
|
-
)
|
|
327
|
-
);
|
|
328
|
-
|
|
329
337
|
// Ratings and Reviews - Numerical
|
|
330
338
|
$uilib-crystalski-ratings-numerical-variables: map.merge(
|
|
331
339
|
$uilib-ratings-numerical-variables,
|
|
@@ -361,6 +369,14 @@ $uilib-crystalski-show-more-less-variables: map.merge(
|
|
|
361
369
|
)
|
|
362
370
|
);
|
|
363
371
|
|
|
372
|
+
// Social proofing
|
|
373
|
+
$uilib-crystalski-social-proofing-variables: map.merge(
|
|
374
|
+
$uilib-social-proofing-variables,
|
|
375
|
+
(
|
|
376
|
+
close-icon: url('#{$uilib-assets-base-url}v3/icons/crystalski/standard/cross.svg'),
|
|
377
|
+
)
|
|
378
|
+
);
|
|
379
|
+
|
|
364
380
|
// Tabs - in-page
|
|
365
381
|
$uilib-crystalski-tabs-in-page-variables: map.merge(
|
|
366
382
|
$uilib-tabs-in-page-variables,
|
|
@@ -378,20 +394,3 @@ $uilib-crystalski-tabs-anchor-variables: map.merge(
|
|
|
378
394
|
scroll-right-icon: url('#{$uilib-assets-base-url}v3/icons/crystalski/standard/chevron-right.svg'),
|
|
379
395
|
)
|
|
380
396
|
);
|
|
381
|
-
|
|
382
|
-
// Skeleton
|
|
383
|
-
$uilib-crystalski-skeleton-variables: map.merge(
|
|
384
|
-
$uilib-skeleton-variables,
|
|
385
|
-
(
|
|
386
|
-
color: map.get($uilib-color-semantic-crystalski, 'other-skeleton-loading'),
|
|
387
|
-
shimmer-color: map.get($uilib-crystalski-primitives, 'color-neutral-20'),
|
|
388
|
-
)
|
|
389
|
-
);
|
|
390
|
-
|
|
391
|
-
// Social proofing
|
|
392
|
-
$uilib-crystalski-social-proofing-variables: map.merge(
|
|
393
|
-
$uilib-social-proofing-variables,
|
|
394
|
-
(
|
|
395
|
-
close-icon: url('#{$uilib-assets-base-url}v3/icons/crystalski/standard/cross.svg'),
|
|
396
|
-
)
|
|
397
|
-
);
|