@thalassic/themes 22.16.0 → 22.17.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/package.json +1 -1
- package/themes/thalassic/components/_confirm.scss +28 -3
- package/themes/thalassic/components/_odometer.scss +1 -14
- package/themes/thalassic/components/_password.scss +1 -1
- package/themes/thalassic/components/_table.scss +29 -2
- package/themes/thalassic/components/_virtual-scroll.scss +11 -0
- package/themes/thalassic/components/autocomplete/_autocomplete-panel.scss +21 -0
- package/themes/thalassic/components/calendar/_agenda.scss +3 -2
- package/themes/thalassic/components/calendar/_calendar.scss +27 -0
- package/themes/thalassic/components/calendar/_compact.scss +21 -0
- package/themes/thalassic/components/calendar/_lines.scss +23 -0
- package/themes/thalassic/components/calendar/_month-view.scss +132 -6
- package/themes/thalassic/components/calendar/_time-grid.scss +6 -5
- package/themes/thalassic/components/dialog/_dialog.scss +43 -0
- package/themes/thalassic/components/drawer/_drawer-side.scss +65 -0
- package/themes/thalassic/components/drawer/_drawer.scss +16 -0
- package/themes/thalassic/components/index.scss +3 -0
- package/themes/thalassic/components/multi-select/_multi-select-panel.scss +21 -0
- package/themes/thalassic/components/pagination/_pagination.scss +1 -1
- package/themes/thalassic/components/progress/_index.scss +3 -0
- package/themes/thalassic/components/progress/_progress-color.scss +5 -0
- package/themes/thalassic/components/progress/_progress-size.scss +13 -0
- package/themes/thalassic/components/progress/_progress.scss +38 -0
- package/themes/thalassic/components/rating/_index.scss +3 -0
- package/themes/thalassic/components/rating/_rating-color.scss +43 -0
- package/themes/thalassic/components/rating/_rating-size.scss +13 -0
- package/themes/thalassic/components/rating/_rating.scss +144 -0
- package/themes/thalassic/components/select/_select-panel.scss +21 -0
- package/themes/thalassic/components/stepper/_index.scss +1 -0
- package/themes/thalassic/components/stepper/_stepper-color.scss +34 -152
- package/themes/thalassic/components/stepper/_stepper-label-position.scss +41 -0
- package/themes/thalassic/components/stepper/_stepper-orientation.scss +13 -1
- package/themes/thalassic/components/stepper/_stepper.scss +37 -11
- package/themes/thalassic/components/toast/_toast.scss +4 -3
- package/themes/thalassic/mixins/_index.scss +2 -0
- package/themes/thalassic/mixins/_pop.scss +26 -0
- package/themes/thalassic/mixins/_visually-hidden.scss +19 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
.tls-stepper {
|
|
2
|
+
// Bottom labels — a horizontal-only layout: every step takes an equal
|
|
3
|
+
// column with its index centered and text underneath, and each connector
|
|
4
|
+
// runs from a step's index to the next column's, so the rail reads
|
|
5
|
+
// symmetrically edge to edge. A vertical stepper keeps the end placement.
|
|
6
|
+
&.tls-stepper--horizontal.tls-stepper--label-bottom {
|
|
7
|
+
.tls-stepper-header {
|
|
8
|
+
&__item {
|
|
9
|
+
width: auto;
|
|
10
|
+
|
|
11
|
+
flex: 1 1 0;
|
|
12
|
+
|
|
13
|
+
&:last-child {
|
|
14
|
+
width: auto;
|
|
15
|
+
|
|
16
|
+
flex: 1 1 0;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.tls-stepper-header-button {
|
|
20
|
+
width: 100%;
|
|
21
|
+
|
|
22
|
+
align-items: center;
|
|
23
|
+
|
|
24
|
+
text-align: center;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
&__divider {
|
|
29
|
+
// Runs from this column's index to the next one's: the inline insets
|
|
30
|
+
// resolve against the item's width, and the columns are equal, so
|
|
31
|
+
// half a width beyond the box lands exactly on the neighbouring
|
|
32
|
+
// column's center. The index radius plus a small gap keeps the run
|
|
33
|
+
// clear of both circles.
|
|
34
|
+
inset-inline-start: calc(50% + var(--tls-stepper-index-size) / 2 + var(--spacing-1));
|
|
35
|
+
inset-inline-end: calc(-50% + var(--tls-stepper-index-size) / 2 + var(--spacing-1));
|
|
36
|
+
|
|
37
|
+
width: auto;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -5,8 +5,13 @@
|
|
|
5
5
|
&__item {
|
|
6
6
|
width: 100%;
|
|
7
7
|
|
|
8
|
+
// The last step needs no room for a trailing divider: it keeps its
|
|
9
|
+
// natural width, and never shrinks below it — otherwise the flexbox
|
|
10
|
+
// would squeeze it to min-content and wrap its label.
|
|
8
11
|
&:last-child {
|
|
9
12
|
width: auto;
|
|
13
|
+
|
|
14
|
+
flex-shrink: 0;
|
|
10
15
|
}
|
|
11
16
|
}
|
|
12
17
|
|
|
@@ -19,11 +24,13 @@
|
|
|
19
24
|
}
|
|
20
25
|
}
|
|
21
26
|
|
|
22
|
-
// Vertical
|
|
27
|
+
// Vertical — header and content sit side by side, overriding the base
|
|
28
|
+
// column layout that stacks a horizontal header above the content.
|
|
23
29
|
&.tls-stepper--vertical {
|
|
24
30
|
height: 100%;
|
|
25
31
|
|
|
26
32
|
display: flex;
|
|
33
|
+
flex-direction: row;
|
|
27
34
|
|
|
28
35
|
.tls-stepper-header {
|
|
29
36
|
flex-direction: column;
|
|
@@ -31,8 +38,13 @@
|
|
|
31
38
|
&__item {
|
|
32
39
|
height: 100%;
|
|
33
40
|
|
|
41
|
+
// Keeps a visible run of divider between step buttons when the
|
|
42
|
+
// container does not stretch the header.
|
|
43
|
+
min-height: 64px;
|
|
44
|
+
|
|
34
45
|
&:last-child {
|
|
35
46
|
height: auto;
|
|
47
|
+
min-height: 0;
|
|
36
48
|
}
|
|
37
49
|
|
|
38
50
|
.tls-stepper-header-button {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
@use '../../mixins' as mixins;
|
|
2
|
+
|
|
1
3
|
.tls-stepper {
|
|
2
4
|
--tls-stepper-label-color: var(--color-outline);
|
|
3
|
-
--tls-stepper-background-color: var(--color-surface);
|
|
4
5
|
|
|
5
6
|
--tls-stepper-content-gap: var(--spacing-4);
|
|
6
7
|
|
|
@@ -8,6 +9,8 @@
|
|
|
8
9
|
--tls-stepper-index-size: calc(32px - var(--tls-stepper-index-border-width) * 2);
|
|
9
10
|
|
|
10
11
|
--tls-stepper-index-on-color: var(--color-on-surface);
|
|
12
|
+
// The index circle is opaque so the divider running behind it stays masked;
|
|
13
|
+
// it matches the surface the stepper sits on, which itself stays transparent.
|
|
11
14
|
--tls-stepper-index-background-color: var(--color-surface);
|
|
12
15
|
--tls-stepper-index-border-color: var(--color-outline-variant);
|
|
13
16
|
|
|
@@ -17,15 +20,10 @@
|
|
|
17
20
|
--tls-stepper-divider-color: var(--color-outline-variant);
|
|
18
21
|
--tls-stepper-divider-width: 2px;
|
|
19
22
|
|
|
20
|
-
background: var(--tls-stepper-background-color);
|
|
21
|
-
|
|
22
23
|
display: flex;
|
|
23
24
|
flex-direction: column;
|
|
24
25
|
gap: var(--tls-stepper-content-gap);
|
|
25
26
|
|
|
26
|
-
transition: border-color var(--motion-theme),
|
|
27
|
-
background-color var(--motion-theme);
|
|
28
|
-
|
|
29
27
|
&.tls-stepper--completed {
|
|
30
28
|
.tls-stepper-content {
|
|
31
29
|
.tls-step {
|
|
@@ -69,14 +67,33 @@
|
|
|
69
67
|
position: relative;
|
|
70
68
|
z-index: 1;
|
|
71
69
|
|
|
70
|
+
padding: 0;
|
|
71
|
+
|
|
72
72
|
display: flex;
|
|
73
73
|
flex-direction: column;
|
|
74
74
|
gap: var(--spacing-2);
|
|
75
75
|
|
|
76
|
+
border: none;
|
|
77
|
+
|
|
78
|
+
background: none;
|
|
79
|
+
|
|
80
|
+
font: inherit;
|
|
81
|
+
text-align: start;
|
|
76
82
|
color: var(--tls-stepper-label-color);
|
|
77
83
|
|
|
78
|
-
|
|
79
|
-
|
|
84
|
+
cursor: pointer;
|
|
85
|
+
|
|
86
|
+
@include mixins.motion {
|
|
87
|
+
transition: color var(--motion-fast);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@include mixins.touch-target(var(--tls-stepper-index-size));
|
|
91
|
+
|
|
92
|
+
&:focus-visible {
|
|
93
|
+
@include mixins.focus-ring;
|
|
94
|
+
|
|
95
|
+
border-radius: var(--radius-sm);
|
|
96
|
+
}
|
|
80
97
|
|
|
81
98
|
// The header is a tablist: it resolves the clicked step from
|
|
82
99
|
// `event.target` and ignores any target that is not an `HTMLElement`,
|
|
@@ -101,13 +118,15 @@
|
|
|
101
118
|
color: var(--tls-stepper-index-on-color);
|
|
102
119
|
background-color: var(--tls-stepper-index-background-color);
|
|
103
120
|
|
|
104
|
-
|
|
121
|
+
@include mixins.motion {
|
|
122
|
+
transition: background-color var(--motion-fast), border-color var(--motion-fast);
|
|
123
|
+
}
|
|
105
124
|
}
|
|
106
125
|
|
|
107
126
|
&__text {
|
|
108
127
|
display: flex;
|
|
109
128
|
flex-direction: column;
|
|
110
|
-
gap:
|
|
129
|
+
gap: var(--spacing-1);
|
|
111
130
|
|
|
112
131
|
.tls-stepper-header-button__label {
|
|
113
132
|
font-size: var(--font-label-large-size);
|
|
@@ -123,6 +142,11 @@
|
|
|
123
142
|
letter-spacing: var(--font-label-medium-letter-spacing);
|
|
124
143
|
}
|
|
125
144
|
}
|
|
145
|
+
|
|
146
|
+
// State text (completed / invalid) for assistive technology only.
|
|
147
|
+
&__state {
|
|
148
|
+
@include mixins.visually-hidden;
|
|
149
|
+
}
|
|
126
150
|
}
|
|
127
151
|
|
|
128
152
|
.tls-stepper-header__divider {
|
|
@@ -130,7 +154,9 @@
|
|
|
130
154
|
|
|
131
155
|
background-color: var(--tls-stepper-divider-color);
|
|
132
156
|
|
|
133
|
-
|
|
157
|
+
@include mixins.motion {
|
|
158
|
+
transition: background-color var(--motion-fast);
|
|
159
|
+
}
|
|
134
160
|
}
|
|
135
161
|
}
|
|
136
162
|
}
|
|
@@ -138,15 +138,16 @@
|
|
|
138
138
|
&__title {
|
|
139
139
|
margin: 0;
|
|
140
140
|
|
|
141
|
-
font-size: var(--font-size
|
|
141
|
+
font-size: var(--font-body-small-size);
|
|
142
142
|
font-weight: var(--font-weight-semibold);
|
|
143
|
+
line-height: var(--font-body-small-line-height);
|
|
143
144
|
}
|
|
144
145
|
|
|
145
146
|
&__message {
|
|
146
147
|
margin: 0;
|
|
147
148
|
|
|
148
|
-
font-size: var(--font-size
|
|
149
|
-
line-height:
|
|
149
|
+
font-size: var(--font-body-small-size);
|
|
150
|
+
line-height: var(--font-body-small-line-height);
|
|
150
151
|
overflow-wrap: anywhere;
|
|
151
152
|
}
|
|
152
153
|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
@use 'motion';
|
|
2
|
+
|
|
3
|
+
// A quick grow-and-settle acknowledging a just-committed selection: the element
|
|
4
|
+
// scales up to `--tls-pop-scale` and springs back. Only the peak is keyframed —
|
|
5
|
+
// the edges fill in from the element's underlying transform, so the pop rides
|
|
6
|
+
// on top of whatever scale the element already has (e.g. a hover grow) instead
|
|
7
|
+
// of snapping it back to 1 first.
|
|
8
|
+
@keyframes tls-pop {
|
|
9
|
+
50% {
|
|
10
|
+
transform: scale(var(--tls-pop-scale, 1.3));
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@mixin pop(
|
|
15
|
+
$scale: 1.3,
|
|
16
|
+
$duration: var(--motion-default),
|
|
17
|
+
$easing: var(--motion-ease-spring)
|
|
18
|
+
) {
|
|
19
|
+
// Selection feedback is expressive — the committed state already reads
|
|
20
|
+
// without it — so the pop belongs to the `full` tier only.
|
|
21
|
+
@include motion.motion(full) {
|
|
22
|
+
--tls-pop-scale: #{$scale};
|
|
23
|
+
|
|
24
|
+
animation: tls-pop $duration $easing;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Removes an element from the visual layout while leaving it in the accessibility tree, so the
|
|
2
|
+
// text keeps naming its control for assistive technology. Use it instead of `display: none`
|
|
3
|
+
// whenever hiding content would otherwise strip a control's accessible name.
|
|
4
|
+
@mixin visually-hidden {
|
|
5
|
+
position: absolute;
|
|
6
|
+
|
|
7
|
+
width: 1px;
|
|
8
|
+
height: 1px;
|
|
9
|
+
|
|
10
|
+
margin: -1px;
|
|
11
|
+
padding: 0;
|
|
12
|
+
|
|
13
|
+
border: 0;
|
|
14
|
+
|
|
15
|
+
white-space: nowrap;
|
|
16
|
+
overflow: hidden;
|
|
17
|
+
|
|
18
|
+
clip-path: inset(50%);
|
|
19
|
+
}
|