@educarehq/solaris-ui 0.27.3 → 2.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 (41) hide show
  1. package/fesm2022/educarehq-solaris-ui-holidays-en-US-mijc8PUa.mjs +96 -0
  2. package/fesm2022/educarehq-solaris-ui-holidays-en-US-mijc8PUa.mjs.map +1 -0
  3. package/fesm2022/educarehq-solaris-ui-holidays-es-rZHStdFY.mjs +72 -0
  4. package/fesm2022/educarehq-solaris-ui-holidays-es-rZHStdFY.mjs.map +1 -0
  5. package/fesm2022/educarehq-solaris-ui-holidays-pt-BR-BIt7aq4i.mjs +127 -0
  6. package/fesm2022/educarehq-solaris-ui-holidays-pt-BR-BIt7aq4i.mjs.map +1 -0
  7. package/fesm2022/educarehq-solaris-ui.mjs +82187 -18398
  8. package/fesm2022/educarehq-solaris-ui.mjs.map +1 -1
  9. package/package.json +14 -8
  10. package/styles/_button.scss +494 -270
  11. package/styles/_core.scss +3 -0
  12. package/styles/_dropdown-menu.scss +3 -3
  13. package/styles/_form-field.scss +116 -0
  14. package/styles/_icon-button.scss +577 -210
  15. package/styles/_index.scss +3 -0
  16. package/styles/_input.scss +113 -63
  17. package/styles/_loading-zone.scss +7 -0
  18. package/styles/_motion.scss +14 -0
  19. package/styles/_popover.scss +5 -4
  20. package/styles/_textarea.scss +97 -47
  21. package/styles/_theme.scss +12 -0
  22. package/styles/token/color/_dark.scss +61 -51
  23. package/styles/token/color/_high-contrast.scss +157 -122
  24. package/styles/token/color/_light.scss +62 -52
  25. package/styles/token/density/_comfortable.scss +12 -12
  26. package/styles/token/density/_compact.scss +13 -13
  27. package/styles/token/density/_normal.scss +13 -13
  28. package/styles/token/focus/_focus.scss +4 -2
  29. package/styles/token/motion/_index.scss +2 -0
  30. package/styles/token/motion/_motion-keyframes.scss +188 -0
  31. package/styles/token/motion/_motion-mixins.scss +213 -0
  32. package/styles/token/motion/_motion.scss +4 -1
  33. package/styles/token/motion/_reduced-motion.scss +2 -0
  34. package/styles/token/radius/_radius.scss +1 -0
  35. package/styles/token/sizing/_control-height.scss +42 -0
  36. package/styles/token/sizing/_control-matrix.scss +37 -0
  37. package/styles/token/sizing/_index.scss +2 -0
  38. package/styles/token/spacing/_spacing.scss +19 -16
  39. package/styles/token/typography/_font-family.scss +1 -2
  40. package/styles/token/typography/_typography.scss +15 -11
  41. package/types/educarehq-solaris-ui.d.ts +17665 -4154
@@ -19,11 +19,14 @@
19
19
 
20
20
  @forward './core';
21
21
  @forward './theme';
22
+ @forward './motion';
22
23
  @forward './button';
23
24
  @forward './icon-button';
24
25
  @forward './input';
25
26
  @forward './textarea';
27
+ @forward './form-field';
26
28
  @forward './popover';
27
29
  @forward './tooltip';
28
30
  @forward './toast';
31
+ @forward './loading-zone';
29
32
  @forward './dropdown-menu';
@@ -1,19 +1,24 @@
1
1
  input[solaris-input] {
2
2
  --solaris-input-radius: var(--solaris-radius-sm);
3
3
  --solaris-input-height: var(--solaris-spacing-10);
4
- --solaris-input-color: var(--solaris-text-default);
4
+ --solaris-input-color: var(--solaris-neutral-text-body);
5
5
  --solaris-input-padding-x: var(--solaris-spacing-3);
6
6
  --solaris-input-padding-y: var(--solaris-spacing-2);
7
7
  --solaris-input-font-size: var(--solaris-font-size-md);
8
- --solaris-input-background: var(--solaris-surface-base);
8
+ --solaris-input-background: var(--solaris-neutral-default);
9
9
  --solaris-input-line-height: var(--solaris-line-height-md);
10
- --solaris-input-border-color: var(--solaris-border-default);
10
+ --solaris-input-border-color: var(--solaris-neutral-border-default);
11
11
  --solaris-input-disabled-opacity: var(--solaris-opacity-50);
12
12
  --solaris-input-border-width: var(--solaris-border-width-sm);
13
- --solaris-input-placeholder-color: var(--solaris-text-muted);
14
- --solaris-input-focus-ring-color: var(--solaris-primary-base);
15
- --solaris-input-invalid-border-color: var(--solaris-danger-base);
16
- --solaris-input-readonly-background: var(--solaris-surface-muted);
13
+ --solaris-input-placeholder-color: var(--solaris-neutral-text-secondary);
14
+ --solaris-input-focus-ring-color: var(--solaris-primary-solid);
15
+ --solaris-input-focus-ring-width: var(--solaris-focus-ring-width);
16
+ --solaris-input-focus-ring-shadow: 0 0 0 var(--solaris-input-focus-ring-width)
17
+ var(--solaris-input-focus-ring-color);
18
+ --solaris-input-error-ring-shadow: 0 0 0 var(--solaris-input-focus-ring-width)
19
+ var(--solaris-input-invalid-border-color);
20
+ --solaris-input-invalid-border-color: var(--solaris-danger-solid);
21
+ --solaris-input-readonly-background: var(--solaris-neutral-sunken);
17
22
 
18
23
  margin: 0;
19
24
  width: 100%;
@@ -30,21 +35,24 @@ input[solaris-input] {
30
35
  border: var(--solaris-input-border-width) solid
31
36
  var(--solaris-input-border-color);
32
37
  transition:
33
- border-color var(--solaris-motion-duration-fast)
38
+ border-color var(--solaris-motion-duration-normal)
34
39
  var(--solaris-motion-easing-standard),
35
- box-shadow var(--solaris-motion-duration-fast)
40
+ box-shadow var(--solaris-motion-duration-normal)
36
41
  var(--solaris-motion-easing-standard);
37
42
  }
38
43
 
39
44
  input[solaris-input]::placeholder {
40
- opacity: 1;
45
+ opacity: var(--solaris-opacity-70);
41
46
  color: var(--solaris-input-placeholder-color);
42
47
  }
43
48
 
44
49
  input[solaris-input]:focus-visible {
45
- // SOLARIS_TOKEN_EXCEPTION: Focus ring box-shadow uses CSS var with tokenized color. Hardcoded spread is required by design.
46
50
  border-color: var(--solaris-input-focus-ring-color);
47
- box-shadow: 0 0 0 2px var(--solaris-input-focus-ring-color);
51
+ box-shadow: var(--solaris-input-focus-ring-shadow);
52
+ }
53
+
54
+ input[solaris-input]:hover:not(:disabled, [readonly]) {
55
+ border-color: var(--solaris-neutral-border-strong);
48
56
  }
49
57
 
50
58
  input[solaris-input][data-invalid] {
@@ -52,9 +60,8 @@ input[solaris-input][data-invalid] {
52
60
  }
53
61
 
54
62
  input[solaris-input][data-invalid]:focus-visible {
55
- // SOLARIS_TOKEN_EXCEPTION: Invalid state focus ring box-shadow uses CSS var. Hardcoded spread required by design.
56
63
  border-color: var(--solaris-input-invalid-border-color);
57
- box-shadow: 0 0 0 2px var(--solaris-input-invalid-border-color);
64
+ box-shadow: var(--solaris-input-error-ring-shadow);
58
65
  }
59
66
 
60
67
  input[solaris-input]:disabled {
@@ -74,9 +81,15 @@ input[solaris-input]::-webkit-search-results-decoration {
74
81
  -webkit-appearance: none;
75
82
  }
76
83
 
77
- input[solaris-input]::-webkit-inner-spin-button,
78
- input[solaris-input]::-webkit-outer-spin-button {
79
- opacity: 1;
84
+ input[solaris-input][type='number'] {
85
+ -moz-appearance: textfield;
86
+ appearance: textfield;
87
+ }
88
+
89
+ input[solaris-input][type='number']::-webkit-inner-spin-button,
90
+ input[solaris-input][type='number']::-webkit-outer-spin-button {
91
+ margin: 0;
92
+ -webkit-appearance: none;
80
93
  }
81
94
 
82
95
  input[solaris-input]:autofill,
@@ -88,86 +101,116 @@ input[solaris-input]:-webkit-autofill {
88
101
  }
89
102
 
90
103
  input[solaris-input][data-appearance='outline'] {
91
- --solaris-input-color: var(--solaris-text-default);
92
- --solaris-input-background: var(--solaris-surface-base);
93
- --solaris-input-border-color: var(--solaris-border-default);
104
+ --solaris-input-color: var(--solaris-neutral-text-body);
105
+ --solaris-input-background: var(--solaris-neutral-default);
106
+ --solaris-input-border-color: var(--solaris-neutral-border-subtle);
94
107
  --solaris-input-disabled-opacity: var(--solaris-opacity-50);
95
108
  --solaris-input-border-width: var(--solaris-border-width-sm);
96
- --solaris-input-placeholder-color: var(--solaris-text-muted);
97
- --solaris-input-focus-ring-color: var(--solaris-primary-base);
98
- --solaris-input-invalid-border-color: var(--solaris-danger-base);
99
- --solaris-input-readonly-background: var(--solaris-surface-muted);
109
+ --solaris-input-placeholder-color: var(--solaris-neutral-text-secondary);
110
+ --solaris-input-focus-ring-color: var(--solaris-primary-solid);
111
+ --solaris-input-invalid-border-color: var(--solaris-danger-solid);
112
+ --solaris-input-readonly-background: var(--solaris-neutral-sunken);
100
113
  }
101
114
 
102
115
  input[solaris-input][data-appearance='surface'] {
103
- --solaris-input-color: var(--solaris-text-default);
104
- --solaris-input-background: var(--solaris-surface-muted);
105
- --solaris-input-border-color: var(--solaris-border-subtle);
116
+ --solaris-input-color: var(--solaris-neutral-text-body);
117
+ --solaris-input-background: var(--solaris-neutral-subtle);
118
+ --solaris-input-border-color: var(--solaris-neutral-border-subtle);
106
119
  --solaris-input-disabled-opacity: var(--solaris-opacity-50);
107
- --solaris-input-border-width: var(--solaris-border-width-sm);
108
- --solaris-input-placeholder-color: var(--solaris-text-muted);
109
- --solaris-input-focus-ring-color: var(--solaris-primary-base);
110
- --solaris-input-invalid-border-color: var(--solaris-danger-base);
111
- --solaris-input-readonly-background: var(--solaris-surface-base);
120
+ --solaris-input-border-width: 0;
121
+ --solaris-input-placeholder-color: var(--solaris-neutral-text-secondary);
122
+ --solaris-input-focus-ring-color: var(--solaris-primary-solid);
123
+ --solaris-input-invalid-border-color: var(--solaris-danger-solid);
124
+ --solaris-input-readonly-background: var(--solaris-neutral-default);
112
125
  }
113
126
 
114
127
  input[solaris-input][data-appearance='filled'] {
115
- --solaris-input-border-color: transparent;
116
- --solaris-input-color: var(--solaris-text-default);
117
- --solaris-input-background: var(--solaris-surface-muted);
128
+ --solaris-input-border-color: var(--solaris-neutral-border-subtle);
129
+ --solaris-input-color: var(--solaris-neutral-text-body);
130
+ --solaris-input-background: var(--solaris-neutral-subtle);
118
131
  --solaris-input-disabled-opacity: var(--solaris-opacity-50);
119
- --solaris-input-placeholder-color: var(--solaris-text-muted);
120
- --solaris-input-focus-ring-color: var(--solaris-primary-base);
121
- --solaris-input-invalid-border-color: var(--solaris-danger-base);
122
- --solaris-input-readonly-background: var(--solaris-surface-base);
123
- --solaris-input-border-width: 0 0 var(--solaris-border-width-sm) 0;
132
+ --solaris-input-placeholder-color: var(--solaris-neutral-text-secondary);
133
+ --solaris-input-focus-ring-color: var(--solaris-primary-solid);
134
+ --solaris-input-invalid-border-color: var(--solaris-danger-solid);
135
+ --solaris-input-readonly-background: var(--solaris-neutral-sunken);
136
+ --solaris-input-border-width: var(--solaris-border-width-sm);
124
137
  }
125
138
 
126
139
  input[solaris-input][data-size='sm'] {
127
- --solaris-input-height: var(--solaris-spacing-8);
128
140
  --solaris-input-padding-x: var(--solaris-spacing-2);
129
141
  --solaris-input-padding-y: var(--solaris-spacing-1);
130
- --solaris-input-font-size: var(--solaris-font-size-sm);
142
+ --solaris-input-font-size: var(--solaris-font-size-xs);
131
143
  --solaris-input-line-height: var(--solaris-line-height-sm);
132
144
  }
133
145
 
134
146
  input[solaris-input][data-size='md'] {
135
- --solaris-input-height: var(--solaris-spacing-10);
136
147
  --solaris-input-padding-x: var(--solaris-spacing-3);
137
148
  --solaris-input-padding-y: var(--solaris-spacing-2);
138
- --solaris-input-font-size: var(--solaris-font-size-md);
149
+ --solaris-input-font-size: var(--solaris-font-size-sm);
139
150
  --solaris-input-line-height: var(--solaris-line-height-md);
140
151
  }
141
152
 
142
153
  input[solaris-input][data-size='lg'] {
143
- --solaris-input-height: var(--solaris-spacing-12);
144
154
  --solaris-input-padding-x: var(--solaris-spacing-4);
145
155
  --solaris-input-padding-y: var(--solaris-spacing-2);
146
- --solaris-input-font-size: var(--solaris-font-size-lg);
156
+ --solaris-input-font-size: var(--solaris-font-size-md);
147
157
  --solaris-input-line-height: var(--solaris-line-height-lg);
148
158
  }
149
159
 
150
160
  input[solaris-input][data-density='compact'] {
151
- --solaris-input-height: var(--solaris-density-min-height);
152
161
  --solaris-input-line-height: var(--solaris-line-height-sm);
153
- --solaris-input-font-size: var(--solaris-density-font-size);
162
+ --solaris-input-font-size: var(--solaris-font-size-xs);
154
163
  --solaris-input-padding-y: var(--solaris-density-padding-xs);
155
164
  }
156
165
 
157
166
  input[solaris-input][data-density='normal'] {
158
- --solaris-input-height: var(--solaris-density-min-height);
159
167
  --solaris-input-line-height: var(--solaris-line-height-sm);
160
- --solaris-input-font-size: var(--solaris-density-font-size);
168
+ --solaris-input-font-size: var(--solaris-font-size-sm);
161
169
  --solaris-input-padding-y: var(--solaris-density-padding-xs);
162
170
  }
163
171
 
164
172
  input[solaris-input][data-density='comfortable'] {
165
- --solaris-input-height: var(--solaris-density-min-height);
166
173
  --solaris-input-line-height: var(--solaris-line-height-md);
167
- --solaris-input-font-size: var(--solaris-density-font-size);
174
+ --solaris-input-font-size: var(--solaris-font-size-md);
168
175
  --solaris-input-padding-y: var(--solaris-density-padding-sm);
169
176
  }
170
177
 
178
+ input[solaris-input][data-size='sm'][data-density='compact'] {
179
+ --solaris-input-height: var(--solaris-control-height-compact-sm);
180
+ }
181
+
182
+ input[solaris-input][data-size='md'][data-density='compact'] {
183
+ --solaris-input-height: var(--solaris-control-height-compact-md);
184
+ }
185
+
186
+ input[solaris-input][data-size='lg'][data-density='compact'] {
187
+ --solaris-input-height: var(--solaris-control-height-compact-lg);
188
+ }
189
+
190
+ input[solaris-input][data-size='sm'][data-density='normal'] {
191
+ --solaris-input-height: var(--solaris-control-height-normal-sm);
192
+ }
193
+
194
+ input[solaris-input][data-size='md'][data-density='normal'] {
195
+ --solaris-input-height: var(--solaris-control-height-normal-md);
196
+ }
197
+
198
+ input[solaris-input][data-size='lg'][data-density='normal'] {
199
+ --solaris-input-height: var(--solaris-control-height-normal-lg);
200
+ }
201
+
202
+ input[solaris-input][data-size='sm'][data-density='comfortable'] {
203
+ --solaris-input-height: var(--solaris-control-height-comfortable-sm);
204
+ }
205
+
206
+ input[solaris-input][data-size='md'][data-density='comfortable'] {
207
+ --solaris-input-height: var(--solaris-control-height-comfortable-md);
208
+ }
209
+
210
+ input[solaris-input][data-size='lg'][data-density='comfortable'] {
211
+ --solaris-input-height: var(--solaris-control-height-comfortable-lg);
212
+ }
213
+
171
214
  input[solaris-input][data-radius='none'] {
172
215
  --solaris-input-radius: var(--solaris-radius-none);
173
216
  }
@@ -184,6 +227,10 @@ input[solaris-input][data-radius='lg'] {
184
227
  --solaris-input-radius: var(--solaris-radius-lg);
185
228
  }
186
229
 
230
+ input[solaris-input][data-radius='xl'] {
231
+ --solaris-input-radius: var(--solaris-radius-full);
232
+ }
233
+
187
234
  input[solaris-input][data-full-width] {
188
235
  width: 100%;
189
236
  }
@@ -211,9 +258,8 @@ solaris-form-field input[solaris-input] {
211
258
  // SOLARIS_TOKEN_EXCEPTION: Resetting box-shadow inside form-field context is intentional to inherit from parent.
212
259
  border: none;
213
260
  height: auto;
214
- padding-left: 0;
261
+ padding: 0;
215
262
  border-radius: 0;
216
- padding-right: 0;
217
263
  box-shadow: none;
218
264
  background: transparent;
219
265
  }
@@ -242,19 +288,23 @@ solaris-form-field input[solaris-input][readonly] {
242
288
  background: transparent;
243
289
  }
244
290
 
245
- solaris-form-field input[solaris-input][data-density='compact'] {
246
- padding-top: var(--solaris-density-padding-xs);
247
- padding-bottom: var(--solaris-density-padding-xs);
291
+ solaris-form-field[data-loading] input[solaris-input] {
292
+ padding-inline-end: calc(
293
+ var(--solaris-form-field-affix-size) + var(--solaris-form-field-control-gap)
294
+ );
248
295
  }
249
296
 
250
- solaris-form-field input[solaris-input][data-density='normal'] {
251
- padding-top: var(--solaris-density-padding-xs);
252
- padding-bottom: var(--solaris-density-padding-xs);
297
+ solaris-form-field input[solaris-input][type='number'] {
298
+ -moz-appearance: textfield;
299
+ appearance: textfield;
253
300
  }
254
301
 
255
- solaris-form-field input[solaris-input][data-density='comfortable'] {
256
- padding-top: var(--solaris-density-padding-sm);
257
- padding-bottom: var(--solaris-density-padding-sm);
302
+ solaris-form-field
303
+ input[solaris-input][type='number']::-webkit-inner-spin-button,
304
+ solaris-form-field
305
+ input[solaris-input][type='number']::-webkit-outer-spin-button {
306
+ margin: 0;
307
+ -webkit-appearance: none;
258
308
  }
259
309
 
260
310
  solaris-form-field input[solaris-input]::-webkit-search-decoration,
@@ -0,0 +1,7 @@
1
+ .solaris-loading-zone {
2
+ position: relative;
3
+ }
4
+
5
+ .solaris-loading-zone[data-loading] {
6
+ cursor: progress;
7
+ }
@@ -0,0 +1,14 @@
1
+ /// Solaris UI — Motion API (consumers).
2
+ ///
3
+ /// Re-exports the shared motion mixins. Keyframes themselves are emitted
4
+ /// globally by `core()`, so consumers only need this module when authoring
5
+ /// custom CSS that should follow the Solaris motion language.
6
+ ///
7
+ /// Usage:
8
+ /// @use '@solaris-ui/angular/styles/motion' as motion;
9
+ ///
10
+ /// .my-panel {
11
+ /// @include motion.solaris-motion-overlay-enter;
12
+ /// }
13
+
14
+ @forward 'token/motion/motion-mixins';
@@ -10,8 +10,8 @@
10
10
  --solaris-popover-radius: var(--solaris-radius-md);
11
11
  --solaris-popover-shadow: var(--solaris-shadow-lg);
12
12
  --solaris-popover-padding: var(--solaris-spacing-3);
13
- --solaris-popover-color: var(--solaris-text-default);
14
- --solaris-popover-background: var(--solaris-surface-raised);
13
+ --solaris-popover-color: var(--solaris-neutral-text-body);
14
+ --solaris-popover-background: var(--solaris-neutral-overlay);
15
15
 
16
16
  outline: none;
17
17
  display: block;
@@ -32,8 +32,9 @@
32
32
  }
33
33
 
34
34
  .solaris-popover-panel__container[data-appearance='outline'] {
35
- background: var(--solaris-surface-base);
36
- border: var(--solaris-border-width-sm) solid var(--solaris-border-subtle);
35
+ background: var(--solaris-neutral-overlay);
36
+ border: var(--solaris-border-width-sm) solid
37
+ var(--solaris-neutral-border-subtle);
37
38
  }
38
39
 
39
40
  .solaris-popover-panel__container[data-padding='none'] {
@@ -1,18 +1,25 @@
1
1
  textarea[solaris-textarea] {
2
2
  --solaris-textarea-radius: var(--solaris-radius-sm);
3
- --solaris-textarea-color: var(--solaris-text-default);
3
+ --solaris-textarea-color: var(--solaris-neutral-text-body);
4
4
  --solaris-textarea-padding-x: var(--solaris-spacing-3);
5
5
  --solaris-textarea-padding-y: var(--solaris-spacing-2);
6
6
  --solaris-textarea-font-size: var(--solaris-font-size-md);
7
- --solaris-textarea-background: var(--solaris-surface-base);
7
+ --solaris-textarea-background: var(--solaris-neutral-default);
8
8
  --solaris-textarea-line-height: var(--solaris-line-height-md);
9
- --solaris-textarea-border-color: var(--solaris-border-default);
9
+ --solaris-textarea-border-color: var(--solaris-neutral-border-default);
10
10
  --solaris-textarea-disabled-opacity: var(--solaris-opacity-50);
11
11
  --solaris-textarea-border-width: var(--solaris-border-width-sm);
12
- --solaris-textarea-placeholder-color: var(--solaris-text-muted);
13
- --solaris-textarea-focus-ring-color: var(--solaris-primary-base);
14
- --solaris-textarea-invalid-border-color: var(--solaris-danger-base);
15
- --solaris-textarea-readonly-background: var(--solaris-surface-muted);
12
+ --solaris-textarea-placeholder-color: var(--solaris-neutral-text-secondary);
13
+ --solaris-textarea-focus-ring-color: var(--solaris-primary-solid);
14
+ --solaris-textarea-focus-ring-width: var(--solaris-focus-ring-width);
15
+ --solaris-textarea-focus-ring-shadow: 0 0 0
16
+ var(--solaris-textarea-focus-ring-width)
17
+ var(--solaris-textarea-focus-ring-color);
18
+ --solaris-textarea-error-ring-shadow: 0 0 0
19
+ var(--solaris-textarea-focus-ring-width)
20
+ var(--solaris-textarea-invalid-border-color);
21
+ --solaris-textarea-invalid-border-color: var(--solaris-danger-solid);
22
+ --solaris-textarea-readonly-background: var(--solaris-neutral-sunken);
16
23
  --solaris-textarea-min-height: calc(
17
24
  var(--solaris-spacing-8) + var(--solaris-spacing-1)
18
25
  );
@@ -32,21 +39,24 @@ textarea[solaris-textarea] {
32
39
  border: var(--solaris-textarea-border-width) solid
33
40
  var(--solaris-textarea-border-color);
34
41
  transition:
35
- border-color var(--solaris-motion-duration-fast)
42
+ border-color var(--solaris-motion-duration-normal)
36
43
  var(--solaris-motion-easing-standard),
37
- box-shadow var(--solaris-motion-duration-fast)
44
+ box-shadow var(--solaris-motion-duration-normal)
38
45
  var(--solaris-motion-easing-standard);
39
46
  }
40
47
 
41
48
  textarea[solaris-textarea]::placeholder {
42
- opacity: 1;
49
+ opacity: var(--solaris-opacity-70);
43
50
  color: var(--solaris-textarea-placeholder-color);
44
51
  }
45
52
 
46
53
  textarea[solaris-textarea]:focus-visible {
47
- // SOLARIS_TOKEN_EXCEPTION: Focus ring box-shadow uses CSS var with tokenized color. Hardcoded spread required by design.
48
54
  border-color: var(--solaris-textarea-focus-ring-color);
49
- box-shadow: 0 0 0 2px var(--solaris-textarea-focus-ring-color);
55
+ box-shadow: var(--solaris-textarea-focus-ring-shadow);
56
+ }
57
+
58
+ textarea[solaris-textarea]:hover:not(:disabled, [readonly]) {
59
+ border-color: var(--solaris-neutral-border-strong);
50
60
  }
51
61
 
52
62
  textarea[solaris-textarea][data-invalid] {
@@ -54,9 +64,8 @@ textarea[solaris-textarea][data-invalid] {
54
64
  }
55
65
 
56
66
  textarea[solaris-textarea][data-invalid]:focus-visible {
57
- // SOLARIS_TOKEN_EXCEPTION: Invalid state focus ring box-shadow uses CSS var. Hardcoded spread required by design.
58
67
  border-color: var(--solaris-textarea-invalid-border-color);
59
- box-shadow: 0 0 0 2px var(--solaris-textarea-invalid-border-color);
68
+ box-shadow: var(--solaris-textarea-error-ring-shadow);
60
69
  }
61
70
 
62
71
  textarea[solaris-textarea]:disabled {
@@ -70,53 +79,53 @@ textarea[solaris-textarea][readonly] {
70
79
  }
71
80
 
72
81
  textarea[solaris-textarea][data-appearance='outline'] {
73
- --solaris-textarea-color: var(--solaris-text-default);
74
- --solaris-textarea-background: var(--solaris-surface-base);
75
- --solaris-textarea-border-color: var(--solaris-border-default);
82
+ --solaris-textarea-color: var(--solaris-neutral-text-body);
83
+ --solaris-textarea-background: var(--solaris-neutral-default);
84
+ --solaris-textarea-border-color: var(--solaris-neutral-border-subtle);
76
85
  --solaris-textarea-disabled-opacity: var(--solaris-opacity-50);
77
86
  --solaris-textarea-border-width: var(--solaris-border-width-sm);
78
- --solaris-textarea-placeholder-color: var(--solaris-text-muted);
79
- --solaris-textarea-focus-ring-color: var(--solaris-primary-base);
80
- --solaris-textarea-invalid-border-color: var(--solaris-danger-base);
81
- --solaris-textarea-readonly-background: var(--solaris-surface-muted);
87
+ --solaris-textarea-placeholder-color: var(--solaris-neutral-text-secondary);
88
+ --solaris-textarea-focus-ring-color: var(--solaris-primary-solid);
89
+ --solaris-textarea-invalid-border-color: var(--solaris-danger-solid);
90
+ --solaris-textarea-readonly-background: var(--solaris-neutral-sunken);
82
91
  }
83
92
 
84
93
  textarea[solaris-textarea][data-appearance='surface'] {
85
- --solaris-textarea-color: var(--solaris-text-default);
86
- --solaris-textarea-background: var(--solaris-surface-muted);
87
- --solaris-textarea-border-color: var(--solaris-border-subtle);
94
+ --solaris-textarea-color: var(--solaris-neutral-text-body);
95
+ --solaris-textarea-background: var(--solaris-neutral-subtle);
96
+ --solaris-textarea-border-color: var(--solaris-neutral-border-subtle);
88
97
  --solaris-textarea-disabled-opacity: var(--solaris-opacity-50);
89
- --solaris-textarea-border-width: var(--solaris-border-width-sm);
90
- --solaris-textarea-placeholder-color: var(--solaris-text-muted);
91
- --solaris-textarea-focus-ring-color: var(--solaris-primary-base);
92
- --solaris-textarea-invalid-border-color: var(--solaris-danger-base);
93
- --solaris-textarea-readonly-background: var(--solaris-surface-base);
98
+ --solaris-textarea-border-width: 0;
99
+ --solaris-textarea-placeholder-color: var(--solaris-neutral-text-secondary);
100
+ --solaris-textarea-focus-ring-color: var(--solaris-primary-solid);
101
+ --solaris-textarea-invalid-border-color: var(--solaris-danger-solid);
102
+ --solaris-textarea-readonly-background: var(--solaris-neutral-default);
94
103
  }
95
104
 
96
105
  textarea[solaris-textarea][data-appearance='filled'] {
97
- --solaris-textarea-border-color: transparent;
98
- --solaris-textarea-color: var(--solaris-text-default);
99
- --solaris-textarea-background: var(--solaris-surface-muted);
106
+ --solaris-textarea-border-color: var(--solaris-neutral-border-subtle);
107
+ --solaris-textarea-color: var(--solaris-neutral-text-body);
108
+ --solaris-textarea-background: var(--solaris-neutral-subtle);
100
109
  --solaris-textarea-disabled-opacity: var(--solaris-opacity-50);
101
- --solaris-textarea-placeholder-color: var(--solaris-text-muted);
102
- --solaris-textarea-focus-ring-color: var(--solaris-primary-base);
103
- --solaris-textarea-invalid-border-color: var(--solaris-danger-base);
104
- --solaris-textarea-readonly-background: var(--solaris-surface-base);
105
- --solaris-textarea-border-width: 0 0 var(--solaris-border-width-sm) 0;
110
+ --solaris-textarea-placeholder-color: var(--solaris-neutral-text-secondary);
111
+ --solaris-textarea-focus-ring-color: var(--solaris-primary-solid);
112
+ --solaris-textarea-invalid-border-color: var(--solaris-danger-solid);
113
+ --solaris-textarea-readonly-background: var(--solaris-neutral-sunken);
114
+ --solaris-textarea-border-width: var(--solaris-border-width-sm);
106
115
  }
107
116
 
108
117
  textarea[solaris-textarea][data-size='sm'] {
109
118
  --solaris-textarea-padding-x: var(--solaris-spacing-2);
110
119
  --solaris-textarea-min-height: var(--solaris-spacing-8);
111
- --solaris-textarea-padding-y: var(--solaris-spacing-half);
112
- --solaris-textarea-font-size: var(--solaris-font-size-sm);
120
+ --solaris-textarea-padding-y: var(--solaris-spacing-2);
121
+ --solaris-textarea-font-size: var(--solaris-font-size-xs);
113
122
  --solaris-textarea-line-height: var(--solaris-line-height-sm);
114
123
  }
115
124
 
116
125
  textarea[solaris-textarea][data-size='md'] {
117
126
  --solaris-textarea-padding-x: var(--solaris-spacing-3);
118
127
  --solaris-textarea-padding-y: var(--solaris-spacing-1);
119
- --solaris-textarea-font-size: var(--solaris-font-size-md);
128
+ --solaris-textarea-font-size: var(--solaris-font-size-sm);
120
129
  --solaris-textarea-line-height: var(--solaris-line-height-md);
121
130
  --solaris-textarea-min-height: calc(
122
131
  var(--solaris-spacing-8) + var(--solaris-spacing-1)
@@ -127,28 +136,64 @@ textarea[solaris-textarea][data-size='lg'] {
127
136
  --solaris-textarea-padding-x: var(--solaris-spacing-4);
128
137
  --solaris-textarea-padding-y: var(--solaris-spacing-1);
129
138
  --solaris-textarea-min-height: var(--solaris-spacing-10);
130
- --solaris-textarea-font-size: var(--solaris-font-size-lg);
139
+ --solaris-textarea-font-size: var(--solaris-font-size-md);
131
140
  --solaris-textarea-line-height: var(--solaris-line-height-lg);
132
141
  }
133
142
 
134
143
  textarea[solaris-textarea][data-density='compact'] {
135
- --solaris-textarea-font-size: var(--solaris-density-font-size);
144
+ --solaris-textarea-font-size: var(--solaris-font-size-xs);
136
145
  --solaris-textarea-line-height: var(--solaris-line-height-sm);
137
- --solaris-textarea-padding-y: var(--solaris-spacing-half);
146
+ --solaris-textarea-padding-y: var(--solaris-spacing-2);
138
147
  }
139
148
 
140
149
  textarea[solaris-textarea][data-density='normal'] {
141
- --solaris-textarea-font-size: var(--solaris-density-font-size);
150
+ --solaris-textarea-font-size: var(--solaris-font-size-sm);
142
151
  --solaris-textarea-line-height: var(--solaris-line-height-sm);
143
152
  --solaris-textarea-padding-y: var(--solaris-spacing-1);
144
153
  }
145
154
 
146
155
  textarea[solaris-textarea][data-density='comfortable'] {
147
- --solaris-textarea-font-size: var(--solaris-density-font-size);
156
+ --solaris-textarea-font-size: var(--solaris-font-size-md);
148
157
  --solaris-textarea-padding-y: var(--solaris-spacing-1);
149
158
  --solaris-textarea-line-height: var(--solaris-line-height-md);
150
159
  }
151
160
 
161
+ textarea[solaris-textarea][data-size='sm'][data-density='compact'] {
162
+ --solaris-textarea-min-height: var(--solaris-control-height-compact-sm);
163
+ }
164
+
165
+ textarea[solaris-textarea][data-size='md'][data-density='compact'] {
166
+ --solaris-textarea-min-height: var(--solaris-control-height-compact-md);
167
+ }
168
+
169
+ textarea[solaris-textarea][data-size='lg'][data-density='compact'] {
170
+ --solaris-textarea-min-height: var(--solaris-control-height-compact-lg);
171
+ }
172
+
173
+ textarea[solaris-textarea][data-size='sm'][data-density='normal'] {
174
+ --solaris-textarea-min-height: var(--solaris-control-height-normal-sm);
175
+ }
176
+
177
+ textarea[solaris-textarea][data-size='md'][data-density='normal'] {
178
+ --solaris-textarea-min-height: var(--solaris-control-height-normal-md);
179
+ }
180
+
181
+ textarea[solaris-textarea][data-size='lg'][data-density='normal'] {
182
+ --solaris-textarea-min-height: var(--solaris-control-height-normal-lg);
183
+ }
184
+
185
+ textarea[solaris-textarea][data-size='sm'][data-density='comfortable'] {
186
+ --solaris-textarea-min-height: var(--solaris-control-height-comfortable-sm);
187
+ }
188
+
189
+ textarea[solaris-textarea][data-size='md'][data-density='comfortable'] {
190
+ --solaris-textarea-min-height: var(--solaris-control-height-comfortable-md);
191
+ }
192
+
193
+ textarea[solaris-textarea][data-size='lg'][data-density='comfortable'] {
194
+ --solaris-textarea-min-height: var(--solaris-control-height-comfortable-lg);
195
+ }
196
+
152
197
  textarea[solaris-textarea][data-radius='none'] {
153
198
  --solaris-textarea-radius: var(--solaris-radius-none);
154
199
  }
@@ -165,6 +210,10 @@ textarea[solaris-textarea][data-radius='lg'] {
165
210
  --solaris-textarea-radius: var(--solaris-radius-lg);
166
211
  }
167
212
 
213
+ textarea[solaris-textarea][data-radius='xl'] {
214
+ --solaris-textarea-radius: var(--solaris-radius-full);
215
+ }
216
+
168
217
  textarea[solaris-textarea][data-resize='none'] {
169
218
  resize: none;
170
219
  }
@@ -207,9 +256,10 @@ textarea[solaris-textarea][data-full-width] {
207
256
  solaris-form-field textarea[solaris-textarea] {
208
257
  // SOLARIS_TOKEN_EXCEPTION: Resetting box-shadow inside form-field context is intentional to inherit from parent.
209
258
  border: none;
210
- padding-left: 0;
259
+ height: auto;
260
+ min-height: 0;
261
+ padding-inline: 0;
211
262
  border-radius: 0;
212
- padding-right: 0;
213
263
  box-shadow: none;
214
264
  background: transparent;
215
265
  }
@@ -14,6 +14,7 @@
14
14
  @use 'token/color';
15
15
  @use 'token/density';
16
16
  @use 'token/radius';
17
+ @use 'token/sizing';
17
18
  @use 'token/spacing';
18
19
  @use 'token/typography';
19
20
  @use 'token/shadow';
@@ -49,6 +50,16 @@ $-default-config: (
49
50
  color-scheme: dark;
50
51
  @include color.solaris-dark-tokens;
51
52
  }
53
+ } @else if $color-scheme == high-contrast {
54
+ :root:not([data-theme]) {
55
+ color-scheme: light;
56
+ @include color.solaris-high-contrast-tokens;
57
+ }
58
+ } @else if $color-scheme == high-contrast-dark {
59
+ :root:not([data-theme]) {
60
+ color-scheme: dark;
61
+ @include color.solaris-high-contrast-dark-tokens;
62
+ }
52
63
  } @else {
53
64
  :root {
54
65
  color-scheme: light dark;
@@ -85,6 +96,7 @@ $-default-config: (
85
96
  --solaris-motion-duration-normal: 0ms;
86
97
  --solaris-motion-duration-slow: 0ms;
87
98
  --solaris-motion-duration-slower: 0ms;
99
+ --solaris-motion-duration-slowest: 0ms;
88
100
  }
89
101
  }
90
102
  }