@tui/design-system 1.8.0 → 1.10.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 +72 -0
- package/dist/themes/crystalski/index.css +16 -13
- package/dist/themes/crystalski/index.css.map +1 -1
- package/dist/themes/firstchoice/index.css +16 -13
- package/dist/themes/firstchoice/index.css.map +1 -1
- package/dist/themes/tui/index.css +12 -9
- package/dist/themes/tui/index.css.map +1 -1
- package/package.json +7 -2
- package/scss/lib/cards/selectable/_mixins.scss +34 -11
- package/scss/lib/forms/input-checkbox/_mixins.scss +6 -7
- package/scss/lib/forms/input-radio/_mixins.scss +6 -7
- package/scss/lib/forms/input-select/_mixins.scss +21 -2
- package/scss/lib/forms/input-stepper/_mixins.scss +1 -3
- package/scss/lib/grid/_column.scss +21 -0
- package/scss/lib/grid/_mixins.scss +89 -0
- package/scss/lib/info-tag/_mixins.scss +2 -0
- package/scss/lib/patterns/edit-search/_index.scss +3 -0
- package/scss/lib/patterns/edit-search/_mixins.scss +98 -0
- package/scss/lib/patterns/edit-search/_variables.scss +7 -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/patterns/review-summary/_index.scss +3 -0
- package/scss/lib/patterns/review-summary/_mixins.scss +156 -0
- package/scss/lib/patterns/review-summary/_variables.scss +3 -0
- package/scss/lib/ratings-reviews/range-bar/_mixins.scss +3 -2
- package/scss/mixins.scss +5 -0
- package/scss/themes/crystalski/index.scss +4 -0
- package/scss/themes/firstchoice/index.scss +4 -0
- package/scss/themes/tui/index.scss +4 -0
- package/scss/variables/_grid.scss +3 -3
- package/scss/variables/base-theme.json +21 -0
- package/scss/variables.scss +4 -1
- package/types/components.ts +34 -0
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// Edit search / _mixins
|
|
2
|
+
@use 'sass:map';
|
|
3
|
+
@use 'variables' as *;
|
|
4
|
+
@use '../../../variables/breakpoints' as *;
|
|
5
|
+
@use '../../utility/mixins' as *;
|
|
6
|
+
@use '../../button/mixins' as *;
|
|
7
|
+
@use '../../link/mixins' as *;
|
|
8
|
+
@use '../../list/mixins' as *;
|
|
9
|
+
|
|
10
|
+
$uilib-edit-search-included: false !default;
|
|
11
|
+
|
|
12
|
+
@mixin uilib-edit-search() {
|
|
13
|
+
@if not $uilib-edit-search-included {
|
|
14
|
+
$uilib-edit-search-included: true !global;
|
|
15
|
+
|
|
16
|
+
@include uilib-button;
|
|
17
|
+
@include uilib-link;
|
|
18
|
+
@include uilib-list;
|
|
19
|
+
@include uilib-edit-search-master;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@mixin uilib-edit-search-master() {
|
|
24
|
+
.uilib-edit-search {
|
|
25
|
+
display: flex;
|
|
26
|
+
flex-flow: row nowrap;
|
|
27
|
+
gap: var(--uilib-spacing-600);
|
|
28
|
+
justify-content: space-between;
|
|
29
|
+
align-items: center;
|
|
30
|
+
|
|
31
|
+
padding: var(--uilib-spacing-200) var(--uilib-spacing-200) var(--uilib-spacing-200) var(--uilib-spacing-400);
|
|
32
|
+
|
|
33
|
+
color: var(--uilib-edit-search-text-color);
|
|
34
|
+
|
|
35
|
+
border-radius: var(--uilib-edit-search-radius);
|
|
36
|
+
|
|
37
|
+
background: var(--uilib-edit-search-bg-color);
|
|
38
|
+
|
|
39
|
+
&__content {
|
|
40
|
+
display: flex;
|
|
41
|
+
flex-flow: column;
|
|
42
|
+
gap: var(--uilib-spacing-100);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
&__heading {
|
|
46
|
+
font: var(--uilib-typography-label-medium-strong);
|
|
47
|
+
|
|
48
|
+
&--hidden {
|
|
49
|
+
@include uilib-visually-hidden;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
&__link:visited {
|
|
54
|
+
color: var(--uilib-color-text-link);
|
|
55
|
+
text-decoration-color: var(--uilib-link-decoration-color);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
&__button {
|
|
59
|
+
align-self: flex-end;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
&__list {
|
|
63
|
+
margin: 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* stylelint-disable-next-line order/order */
|
|
67
|
+
@media (max-width: #{map.get($uilib-breakpoints, md)}) {
|
|
68
|
+
&__list {
|
|
69
|
+
display: -webkit-box;
|
|
70
|
+
|
|
71
|
+
text-align: left;
|
|
72
|
+
text-overflow: ellipsis;
|
|
73
|
+
|
|
74
|
+
overflow: hidden;
|
|
75
|
+
-webkit-line-clamp: 2;
|
|
76
|
+
line-clamp: 2;
|
|
77
|
+
-webkit-box-orient: vertical;
|
|
78
|
+
|
|
79
|
+
> li {
|
|
80
|
+
display: inline;
|
|
81
|
+
|
|
82
|
+
padding-left: 0;
|
|
83
|
+
|
|
84
|
+
&::before,
|
|
85
|
+
.uilib-icon {
|
|
86
|
+
display: none;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
&:not(:last-child)::after {
|
|
90
|
+
content: ' | ';
|
|
91
|
+
|
|
92
|
+
display: inline;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
// Review summary / _mixins
|
|
2
|
+
@use 'variables' as *;
|
|
3
|
+
@use '../../utility/mixins' as *;
|
|
4
|
+
@use '../../divider/mixins' as *;
|
|
5
|
+
@use '../../link/mixins' as *;
|
|
6
|
+
@use '../../ratings-reviews/range-bar/mixins' as *;
|
|
7
|
+
@use '../../ratings-reviews/range-icons/mixins' as *;
|
|
8
|
+
@use '../../ratings-reviews/range-icons-group/mixins' as *;
|
|
9
|
+
|
|
10
|
+
$uilib-review-summary-included: false !default;
|
|
11
|
+
|
|
12
|
+
@mixin uilib-review-summary() {
|
|
13
|
+
@if not $uilib-review-summary-included {
|
|
14
|
+
$uilib-review-summary-included: true !global;
|
|
15
|
+
|
|
16
|
+
@include uilib-divider;
|
|
17
|
+
@include uilib-link;
|
|
18
|
+
@include uilib-ratings-range-bar;
|
|
19
|
+
@include uilib-ratings-range-icons;
|
|
20
|
+
@include uilib-ratings-range-icons-group;
|
|
21
|
+
@include uilib-review-summary-master;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@mixin uilib-review-summary-master() {
|
|
26
|
+
.uilib-review-summary {
|
|
27
|
+
container-name: uilib-review-summary;
|
|
28
|
+
container-type: inline-size;
|
|
29
|
+
|
|
30
|
+
display: grid;
|
|
31
|
+
grid-template-columns: auto 1fr;
|
|
32
|
+
gap: var(--uilib-spacing-400) var(--uilib-spacing-200);
|
|
33
|
+
align-items: center;
|
|
34
|
+
|
|
35
|
+
&__title {
|
|
36
|
+
color: var(--uilib-color-text-strong);
|
|
37
|
+
font: var(--uilib-typography-heading-small);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
&__logo {
|
|
41
|
+
height: 1.125rem; /* 18 / 16 */
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
&__overall-rating,
|
|
45
|
+
&__divider,
|
|
46
|
+
&__breakdown,
|
|
47
|
+
&__link {
|
|
48
|
+
grid-column: 1 / -1;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
&__overall-rating {
|
|
52
|
+
display: grid;
|
|
53
|
+
grid-template-columns: auto 1fr;
|
|
54
|
+
gap: var(--uilib-spacing-100) var(--uilib-spacing-400);
|
|
55
|
+
align-items: start;
|
|
56
|
+
|
|
57
|
+
max-width: max-content;
|
|
58
|
+
|
|
59
|
+
.uilib-ratings-range-icons__value {
|
|
60
|
+
grid-row: 1 / span 3;
|
|
61
|
+
|
|
62
|
+
font: var(--uilib-typography-heading-xxlarge);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.uilib-ratings-range-icons__score {
|
|
66
|
+
grid-row: unset;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.uilib-ratings-range-icons__details {
|
|
70
|
+
grid-column: unset;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
&__divider {
|
|
75
|
+
width: 100%;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
&__visually-hidden {
|
|
79
|
+
@include uilib-visually-hidden;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
&__breakdown {
|
|
83
|
+
display: flex;
|
|
84
|
+
flex-flow: column;
|
|
85
|
+
gap: var(--uilib-spacing-800) var(--uilib-spacing-1600);
|
|
86
|
+
align-items: flex-start;
|
|
87
|
+
|
|
88
|
+
width: 100%;
|
|
89
|
+
|
|
90
|
+
.uilib-ratings-range-bar-group,
|
|
91
|
+
.uilib-ratings-range-icons-group {
|
|
92
|
+
width: 100%;
|
|
93
|
+
max-width: 20rem; /* 320 / 16 */
|
|
94
|
+
margin: 0;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
&__link {
|
|
99
|
+
margin-top: var(--uilib-spacing-200);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* stylelint-disable-next-line order/order */
|
|
103
|
+
@container uilib-review-summary (min-width: 22rem) {
|
|
104
|
+
&__overall-rating {
|
|
105
|
+
.uilib-ratings-range-icons__value {
|
|
106
|
+
min-width: 3ex; /* 52px / 16 */
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
&__breakdown {
|
|
111
|
+
display: grid;
|
|
112
|
+
grid-template-columns: auto 1fr;
|
|
113
|
+
gap: var(--uilib-spacing-800) var(--uilib-spacing-400);
|
|
114
|
+
align-items: start;
|
|
115
|
+
|
|
116
|
+
&::before {
|
|
117
|
+
grid-row: 1 / span 2;
|
|
118
|
+
grid-column: 1;
|
|
119
|
+
|
|
120
|
+
content: '';
|
|
121
|
+
|
|
122
|
+
display: block;
|
|
123
|
+
|
|
124
|
+
width: 3ex; /* 52px / 16 */
|
|
125
|
+
height: 100%;
|
|
126
|
+
|
|
127
|
+
font: var(--uilib-typography-heading-xxlarge);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.uilib-ratings-range-bar-group,
|
|
131
|
+
.uilib-ratings-range-icons-group {
|
|
132
|
+
grid-column: 2;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
@container uilib-review-summary (min-width: 42rem) {
|
|
138
|
+
&__breakdown {
|
|
139
|
+
grid-template-columns: auto 1fr 1fr;
|
|
140
|
+
gap: var(--uilib-spacing-1600);
|
|
141
|
+
|
|
142
|
+
max-width: 44.5rem;
|
|
143
|
+
|
|
144
|
+
&::before {
|
|
145
|
+
grid-row: 1 / span 1;
|
|
146
|
+
|
|
147
|
+
margin-right: calc(var(--uilib-spacing-1200) * -1);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.uilib-ratings-range-icons-group {
|
|
151
|
+
grid-column: 3;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
@@ -133,9 +133,10 @@ $uilib-ratings-range-bar-included: false !default;
|
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
&__bar {
|
|
136
|
+
$margin: calc((1rem * var(--uilib-line-height-body)) - 1rem);
|
|
136
137
|
width: var(--uilib-ratings-range-bar-bar-width);
|
|
137
|
-
height:
|
|
138
|
-
margin
|
|
138
|
+
height: 1rem;
|
|
139
|
+
margin: calc(#{$margin} / 2) 0;
|
|
139
140
|
|
|
140
141
|
border: var(--uilib-stroke-size-025) var(--uilib-stroke-style-solid) var(--uilib-ratings-range-bar-bar-color);
|
|
141
142
|
border-radius: var(--uilib-border-radius-pill);
|
package/scss/mixins.scss
CHANGED
|
@@ -57,4 +57,9 @@
|
|
|
57
57
|
@forward 'lib/travel-aware-banner/mixins';
|
|
58
58
|
@forward 'lib/typography/mixins';
|
|
59
59
|
@forward 'lib/utility/mixins';
|
|
60
|
+
|
|
61
|
+
// Pattern mixins
|
|
62
|
+
@forward 'lib/patterns/edit-search/mixins';
|
|
63
|
+
@forward 'lib/patterns/reasons-to-book/mixins';
|
|
60
64
|
@forward 'lib/patterns/review-card/mixins';
|
|
65
|
+
@forward 'lib/patterns/review-summary/mixins';
|
|
@@ -208,4 +208,8 @@
|
|
|
208
208
|
|
|
209
209
|
// Travel Aware Banner
|
|
210
210
|
@include util.uilib-build-css-vars('travel-aware-banner', $uilib-travel-aware-banner-variables);
|
|
211
|
+
|
|
212
|
+
// Patterns
|
|
213
|
+
// Edit search
|
|
214
|
+
@include util.uilib-build-css-vars('edit-search', $uilib-edit-search-variables);
|
|
211
215
|
}
|
|
@@ -208,4 +208,8 @@
|
|
|
208
208
|
|
|
209
209
|
// Travel Aware Banner
|
|
210
210
|
@include util.uilib-build-css-vars('travel-aware-banner', $uilib-travel-aware-banner-variables);
|
|
211
|
+
|
|
212
|
+
// Patterns
|
|
213
|
+
// Edit search
|
|
214
|
+
@include util.uilib-build-css-vars('edit-search', $uilib-edit-search-variables);
|
|
211
215
|
}
|
|
@@ -208,4 +208,8 @@
|
|
|
208
208
|
|
|
209
209
|
// Travel Aware Banner
|
|
210
210
|
@include util.uilib-build-css-vars('travel-aware-banner', $uilib-travel-aware-banner-variables);
|
|
211
|
+
|
|
212
|
+
// Patterns
|
|
213
|
+
// Edit search
|
|
214
|
+
@include util.uilib-build-css-vars('edit-search', $uilib-edit-search-variables);
|
|
211
215
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// grid
|
|
2
2
|
$uilib-grid-size: 0.25rem !default; // 4px
|
|
3
3
|
$uilib-grid-columns: 12 !default;
|
|
4
|
-
$uilib-grid-gutter-width: $uilib-grid-size * 4; // 16px
|
|
5
|
-
$uilib-grid-gutter-height: $uilib-grid-size * 4; // 16px
|
|
4
|
+
$uilib-grid-gutter-width: $uilib-grid-size * 4 !default; // 16px
|
|
5
|
+
$uilib-grid-gutter-height: $uilib-grid-size * 4 !default; // 16px
|
|
6
6
|
|
|
7
7
|
// layout
|
|
8
|
-
$uilib-layout-max-width: 80rem; // 1280px
|
|
8
|
+
$uilib-layout-max-width: 80rem !default; // 1280px
|
|
9
9
|
$uilib-layout-app-height: 100dvh;
|
|
10
10
|
|
|
11
11
|
@mixin uilib-grid-base-vars() {
|
|
@@ -2769,5 +2769,26 @@
|
|
|
2769
2769
|
"description": "Travel Aware banner border radius"
|
|
2770
2770
|
}
|
|
2771
2771
|
}
|
|
2772
|
+
},
|
|
2773
|
+
"edit-search": {
|
|
2774
|
+
"displayType": "color",
|
|
2775
|
+
"tokens": {
|
|
2776
|
+
"edit-search-radius": {
|
|
2777
|
+
"displayType": "radius",
|
|
2778
|
+
"primitive": "uilib-border-radius-400",
|
|
2779
|
+
"title": "Edit search border radius",
|
|
2780
|
+
"description": "Edit search border radius"
|
|
2781
|
+
},
|
|
2782
|
+
"edit-search-bg-color": {
|
|
2783
|
+
"primitive": "--uilib-color-core-surface",
|
|
2784
|
+
"title": "Edit search background colour",
|
|
2785
|
+
"description": "Edit search background colour"
|
|
2786
|
+
},
|
|
2787
|
+
"edit-search-text-color": {
|
|
2788
|
+
"primitive": "--uilib-color-text-strong",
|
|
2789
|
+
"title": "Edit search text colour",
|
|
2790
|
+
"description": "Edit search text colour"
|
|
2791
|
+
}
|
|
2792
|
+
}
|
|
2772
2793
|
}
|
|
2773
2794
|
}
|
package/scss/variables.scss
CHANGED
|
@@ -73,5 +73,8 @@
|
|
|
73
73
|
@forward 'lib/travel-aware-banner/variables';
|
|
74
74
|
@forward 'lib/typography/variables';
|
|
75
75
|
|
|
76
|
-
//
|
|
76
|
+
// Pattern variables
|
|
77
|
+
@forward 'lib/patterns/edit-search/variables';
|
|
78
|
+
@forward 'lib/patterns/reasons-to-book/variables';
|
|
77
79
|
@forward 'lib/patterns/review-card/variables';
|
|
80
|
+
@forward 'lib/patterns/review-summary/variables';
|
package/types/components.ts
CHANGED
|
@@ -132,6 +132,7 @@ export interface CardSelectableProps {
|
|
|
132
132
|
selectedIndex?: number;
|
|
133
133
|
clickableArea?: 'input' | 'card';
|
|
134
134
|
includeImage?: boolean;
|
|
135
|
+
includeTag?: boolean;
|
|
135
136
|
}
|
|
136
137
|
|
|
137
138
|
// ─── Datepicker ────────────────────────────────────────
|
|
@@ -389,6 +390,13 @@ export type ListTextVariant = 'default' | 'strong' | 'label';
|
|
|
389
390
|
export type ListIconSize = 'small' | 'medium' | 'large';
|
|
390
391
|
export type ListLayout = 'default' | 'columns' | 'horizontal';
|
|
391
392
|
|
|
393
|
+
export interface ListItem {
|
|
394
|
+
label?: string;
|
|
395
|
+
iconSize?: ListIconSize;
|
|
396
|
+
iconAsset?: string;
|
|
397
|
+
imageUrl?: string;
|
|
398
|
+
}
|
|
399
|
+
|
|
392
400
|
export interface ListProps {
|
|
393
401
|
variant?: ListVariant;
|
|
394
402
|
textVariant?: ListTextVariant;
|
|
@@ -403,6 +411,7 @@ export interface ListProps {
|
|
|
403
411
|
altShape?: boolean;
|
|
404
412
|
start?: number;
|
|
405
413
|
theme?: Theme;
|
|
414
|
+
extraClasses?: string[];
|
|
406
415
|
}
|
|
407
416
|
|
|
408
417
|
// ─── Loader ────────────────────────────────────────────
|
|
@@ -563,6 +572,7 @@ export interface RangeBarProps {
|
|
|
563
572
|
/** @deprecated Theme is no longer supported for this component */
|
|
564
573
|
theme?: Theme;
|
|
565
574
|
isGroup?: boolean;
|
|
575
|
+
items?: { label: string; score: number; accessibleLabel?: string }[];
|
|
566
576
|
}
|
|
567
577
|
|
|
568
578
|
// ─── Ratings: Range icons (Sun/Star/TUI/TripAdvisor/TUI-T) ─
|
|
@@ -695,6 +705,7 @@ export interface TooltipProps {
|
|
|
695
705
|
label?: string;
|
|
696
706
|
content?: string;
|
|
697
707
|
isInverse?: boolean;
|
|
708
|
+
tooltipRoot?: string;
|
|
698
709
|
theme?: Theme;
|
|
699
710
|
}
|
|
700
711
|
|
|
@@ -717,3 +728,26 @@ export interface SocialProofingProps {
|
|
|
717
728
|
hasIcon?: boolean;
|
|
718
729
|
closeLabel?: string;
|
|
719
730
|
}
|
|
731
|
+
|
|
732
|
+
// ─── PATTERNS ────────────────────────────────────────────
|
|
733
|
+
// ─── Edit search ────────────────────────────────────────────
|
|
734
|
+
|
|
735
|
+
export interface EditSearchProps {
|
|
736
|
+
variant?: 'back' | 'list';
|
|
737
|
+
heading?: string;
|
|
738
|
+
listItems?: ListItem[];
|
|
739
|
+
uniqueId?: string;
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
// ─── Review Card ───────────────────────────────────────────
|
|
743
|
+
export interface ReviewCardProps {
|
|
744
|
+
layout?: 'default' | 'compact' | 'dual';
|
|
745
|
+
switchLayout?: boolean;
|
|
746
|
+
breakpoint?: number;
|
|
747
|
+
brand?: 'tripadvisor' | 'customer' | 'holidaycheck';
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
// ─── Review Summary ────────────────────────────────────────
|
|
751
|
+
export interface ReviewSummaryProps {
|
|
752
|
+
brand?: 'tripadvisor' | 'customer';
|
|
753
|
+
}
|