@thalassic/themes 22.16.1 → 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.
Files changed (35) hide show
  1. package/package.json +1 -1
  2. package/themes/thalassic/components/_odometer.scss +1 -14
  3. package/themes/thalassic/components/_table.scss +29 -2
  4. package/themes/thalassic/components/_virtual-scroll.scss +11 -0
  5. package/themes/thalassic/components/autocomplete/_autocomplete-panel.scss +21 -0
  6. package/themes/thalassic/components/calendar/_agenda.scss +3 -2
  7. package/themes/thalassic/components/calendar/_calendar.scss +27 -0
  8. package/themes/thalassic/components/calendar/_compact.scss +21 -0
  9. package/themes/thalassic/components/calendar/_lines.scss +23 -0
  10. package/themes/thalassic/components/calendar/_month-view.scss +132 -6
  11. package/themes/thalassic/components/calendar/_time-grid.scss +6 -5
  12. package/themes/thalassic/components/dialog/_dialog.scss +43 -0
  13. package/themes/thalassic/components/drawer/_drawer-side.scss +65 -0
  14. package/themes/thalassic/components/drawer/_drawer.scss +16 -0
  15. package/themes/thalassic/components/index.scss +3 -0
  16. package/themes/thalassic/components/multi-select/_multi-select-panel.scss +21 -0
  17. package/themes/thalassic/components/pagination/_pagination.scss +1 -1
  18. package/themes/thalassic/components/progress/_index.scss +3 -0
  19. package/themes/thalassic/components/progress/_progress-color.scss +5 -0
  20. package/themes/thalassic/components/progress/_progress-size.scss +13 -0
  21. package/themes/thalassic/components/progress/_progress.scss +38 -0
  22. package/themes/thalassic/components/rating/_index.scss +3 -0
  23. package/themes/thalassic/components/rating/_rating-color.scss +43 -0
  24. package/themes/thalassic/components/rating/_rating-size.scss +13 -0
  25. package/themes/thalassic/components/rating/_rating.scss +144 -0
  26. package/themes/thalassic/components/select/_select-panel.scss +21 -0
  27. package/themes/thalassic/components/stepper/_index.scss +1 -0
  28. package/themes/thalassic/components/stepper/_stepper-color.scss +34 -152
  29. package/themes/thalassic/components/stepper/_stepper-label-position.scss +41 -0
  30. package/themes/thalassic/components/stepper/_stepper-orientation.scss +13 -1
  31. package/themes/thalassic/components/stepper/_stepper.scss +37 -11
  32. package/themes/thalassic/components/toast/_toast.scss +4 -3
  33. package/themes/thalassic/mixins/_index.scss +2 -0
  34. package/themes/thalassic/mixins/_pop.scss +26 -0
  35. package/themes/thalassic/mixins/_visually-hidden.scss +19 -0
@@ -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
- transition: color var(--motion-fast),
79
- background-color var(--motion-fast);
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
- transition: background-color var(--motion-fast);
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: 0.25rem;
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
- transition: background-color var(--motion-fast);
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-sm);
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-sm);
149
- line-height: 1.4;
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
 
@@ -2,5 +2,7 @@
2
2
  @forward 'focus-ring';
3
3
  @forward 'motion';
4
4
  @forward 'panel-open';
5
+ @forward 'pop';
5
6
  @forward 'touch-target';
6
7
  @forward 'variant-treatment';
8
+ @forward 'visually-hidden';
@@ -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
+ }