@educarehq/solaris-ui 0.3.3 → 0.6.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 (54) hide show
  1. package/fesm2022/educarehq-solaris-ui.mjs +1563 -911
  2. package/fesm2022/educarehq-solaris-ui.mjs.map +1 -1
  3. package/package.json +18 -1
  4. package/schematics/collection.json +16 -0
  5. package/schematics/init/fonts.js +18 -0
  6. package/schematics/init/index.js +77 -0
  7. package/schematics/init/messages.js +25 -0
  8. package/schematics/init/providers.js +89 -0
  9. package/schematics/init/schema.json +54 -0
  10. package/schematics/init/styles.js +75 -0
  11. package/schematics/init/workspace.js +45 -0
  12. package/schematics/ng-add/index.js +66 -0
  13. package/schematics/ng-add/schema.json +40 -0
  14. package/schematics/package.json +5 -0
  15. package/styles/_button.scss +122 -66
  16. package/styles/_core.scss +13 -37
  17. package/styles/_dropdown-menu.scss +13 -15
  18. package/styles/_icon-button.scss +34 -29
  19. package/styles/_index.scss +3 -2
  20. package/styles/_input.scss +50 -48
  21. package/styles/_textarea.scss +65 -59
  22. package/styles/_theme.scss +80 -46
  23. package/styles/_toast.scss +2 -2
  24. package/styles/_tooltip.scss +3 -1
  25. package/styles/token/border/_border.scss +7 -5
  26. package/styles/token/border/_index.scss +1 -1
  27. package/styles/token/color/_dark.scss +81 -78
  28. package/styles/token/color/_high-contrast.scss +143 -27
  29. package/styles/token/color/_index.scss +3 -3
  30. package/styles/token/color/_light.scss +72 -69
  31. package/styles/token/density/_comfortable.scss +15 -15
  32. package/styles/token/density/_compact.scss +15 -15
  33. package/styles/token/density/_index.scss +2 -2
  34. package/styles/token/focus/_focus.scss +16 -0
  35. package/styles/token/focus/_index.scss +1 -0
  36. package/styles/token/glass/_glass.scss +17 -0
  37. package/styles/token/glass/_index.scss +1 -0
  38. package/styles/token/motion/_index.scss +2 -2
  39. package/styles/token/motion/_motion.scss +17 -15
  40. package/styles/token/motion/_reduced-motion.scss +15 -15
  41. package/styles/token/opacity/_index.scss +1 -1
  42. package/styles/token/opacity/_opacity.scss +13 -4
  43. package/styles/token/radius/_index.scss +1 -1
  44. package/styles/token/radius/_radius.scss +8 -8
  45. package/styles/token/shadow/_index.scss +1 -1
  46. package/styles/token/shadow/_shadow.scss +40 -26
  47. package/styles/token/spacing/_index.scss +1 -1
  48. package/styles/token/spacing/_spacing.scss +18 -15
  49. package/styles/token/typography/_font-family.scss +13 -13
  50. package/styles/token/typography/_index.scss +2 -2
  51. package/styles/token/typography/_typography.scss +26 -25
  52. package/styles/token/z-index/_index.scss +1 -1
  53. package/styles/token/z-index/_z-index.scss +13 -10
  54. package/types/educarehq-solaris-ui.d.ts +384 -106
@@ -1,28 +1,27 @@
1
1
  [solaris-icon-button] {
2
- --solaris-icon-button-size: initial;
3
- --solaris-icon-button-color: initial;
4
- --solaris-icon-button-radius: initial;
5
- --solaris-icon-button-background: initial;
6
- --solaris-icon-button-border-color: initial;
7
- --solaris-icon-button-border-width: initial;
8
- --solaris-icon-button-disabled-opacity: 0.5;
9
- --solaris-icon-button-focus-ring-color: initial;
10
- --solaris-icon-button-hover-background: initial;
11
- --solaris-icon-button-active-background: initial;
12
- --solaris-icon-button-hover-border-color: initial;
13
- --solaris-icon-button-active-border-color: initial;
14
-
2
+ --solaris-icon-button-border-width: 0;
15
3
  --solaris-icon-button-custom-color: initial;
4
+ --solaris-icon-button-border-color: transparent;
16
5
  --solaris-icon-button-custom-background: initial;
17
6
  --solaris-icon-button-custom-border-color: initial;
7
+ --solaris-icon-button-size: var(--solaris-spacing-10);
8
+ --solaris-icon-button-hover-border-color: transparent;
9
+ --solaris-icon-button-radius: var(--solaris-radius-sm);
10
+ --solaris-icon-button-active-border-color: transparent;
18
11
  --solaris-icon-button-custom-hover-background: initial;
19
- --solaris-icon-button-custom-hover-border-color: initial;
20
12
  --solaris-icon-button-custom-active-background: initial;
13
+ --solaris-icon-button-color: var(--solaris-primary-text);
14
+ --solaris-icon-button-custom-hover-border-color: initial;
21
15
  --solaris-icon-button-custom-active-border-color: initial;
16
+ --solaris-icon-button-background: var(--solaris-primary-base);
17
+ --solaris-icon-button-disabled-opacity: var(--solaris-opacity-50);
18
+ --solaris-icon-button-focus-ring-color: var(--solaris-primary-base);
19
+ --solaris-icon-button-hover-background: var(--solaris-primary-hover);
20
+ --solaris-icon-button-active-background: var(--solaris-primary-active);
22
21
 
23
22
  padding: 0;
24
23
  flex-shrink: 0;
25
- line-height: 1;
24
+ line-height: var(--solaris-line-height-none);
26
25
  cursor: pointer;
27
26
  user-select: none;
28
27
  position: relative;
@@ -105,19 +104,20 @@
105
104
  border-radius: 50%;
106
105
  border: 2px solid var(--solaris-icon-button-color);
107
106
  border-top-color: transparent;
108
- animation: solaris-icon-button-spin 0.6s linear infinite;
107
+ animation: solaris-icon-button-spin 0.6s var(--solaris-motion-easing-linear)
108
+ infinite;
109
109
  }
110
110
 
111
111
  @media (prefers-reduced-motion: reduce) {
112
112
  [solaris-icon-button][data-loading]::before {
113
- opacity: 0.5;
114
113
  animation: none;
114
+ opacity: var(--solaris-opacity-50);
115
115
  }
116
116
  }
117
117
 
118
118
  [data-reduced-motion='true'] [solaris-icon-button][data-loading]::before {
119
119
  animation: none;
120
- opacity: 0.5;
120
+ opacity: var(--solaris-opacity-50);
121
121
  }
122
122
 
123
123
  @keyframes solaris-icon-button-spin {
@@ -208,7 +208,7 @@
208
208
  }
209
209
 
210
210
  [solaris-icon-button][data-color='primary'][data-appearance='outline'] {
211
- --solaris-icon-button-color: var(--solaris-primary-text);
211
+ --solaris-icon-button-color: var(--solaris-primary-base);
212
212
  --solaris-icon-button-border-color: var(--solaris-primary-border);
213
213
  --solaris-icon-button-focus-ring-color: var(--solaris-primary-base);
214
214
  --solaris-icon-button-hover-background: var(--solaris-primary-surface);
@@ -216,7 +216,7 @@
216
216
  }
217
217
 
218
218
  [solaris-icon-button][data-color='primary'][data-appearance='ghost'] {
219
- --solaris-icon-button-color: var(--solaris-primary-text);
219
+ --solaris-icon-button-color: var(--solaris-primary-base);
220
220
  --solaris-icon-button-focus-ring-color: var(--solaris-primary-base);
221
221
  --solaris-icon-button-hover-background: var(--solaris-primary-surface);
222
222
  --solaris-icon-button-active-background: var(--solaris-primary-surface);
@@ -241,8 +241,8 @@
241
241
  }
242
242
 
243
243
  [solaris-icon-button][data-color='success'][data-appearance='solid'] {
244
- --solaris-icon-button-background: var(--solaris-success-base);
245
244
  --solaris-icon-button-color: var(--solaris-success-on-solid);
245
+ --solaris-icon-button-background: var(--solaris-success-base);
246
246
  --solaris-icon-button-focus-ring-color: var(--solaris-success-base);
247
247
  --solaris-icon-button-hover-background: var(--solaris-success-hover);
248
248
  --solaris-icon-button-active-background: var(--solaris-success-active);
@@ -282,11 +282,11 @@
282
282
  }
283
283
 
284
284
  [solaris-icon-button][data-color='warning'][data-appearance='solid'] {
285
- --solaris-icon-button-background: var(--solaris-warning-base);
286
285
  --solaris-icon-button-color: var(--solaris-warning-on-solid);
286
+ --solaris-icon-button-background: var(--solaris-warning-base);
287
+ --solaris-icon-button-focus-ring-color: var(--solaris-warning-base);
287
288
  --solaris-icon-button-hover-background: var(--solaris-warning-hover);
288
289
  --solaris-icon-button-active-background: var(--solaris-warning-active);
289
- --solaris-icon-button-focus-ring-color: var(--solaris-warning-base);
290
290
  }
291
291
 
292
292
  [solaris-icon-button][data-color='warning'][data-appearance='outline'] {
@@ -323,8 +323,8 @@
323
323
  }
324
324
 
325
325
  [solaris-icon-button][data-color='danger'][data-appearance='solid'] {
326
- --solaris-icon-button-background: var(--solaris-danger-base);
327
326
  --solaris-icon-button-color: var(--solaris-danger-on-solid);
327
+ --solaris-icon-button-background: var(--solaris-danger-base);
328
328
  --solaris-icon-button-focus-ring-color: var(--solaris-danger-base);
329
329
  --solaris-icon-button-hover-background: var(--solaris-danger-hover);
330
330
  --solaris-icon-button-active-background: var(--solaris-danger-active);
@@ -436,18 +436,21 @@
436
436
  }
437
437
 
438
438
  [solaris-icon-button][data-size='sm'] {
439
- font-size: var(--solaris-font-size-sm);
440
439
  --solaris-icon-button-size: var(--solaris-spacing-8);
440
+
441
+ font-size: var(--solaris-font-size-sm);
441
442
  }
442
443
 
443
444
  [solaris-icon-button][data-size='md'] {
444
- font-size: var(--solaris-font-size-md);
445
445
  --solaris-icon-button-size: var(--solaris-spacing-10);
446
+
447
+ font-size: var(--solaris-font-size-md);
446
448
  }
447
449
 
448
450
  [solaris-icon-button][data-size='lg'] {
449
- font-size: var(--solaris-font-size-lg);
450
451
  --solaris-icon-button-size: var(--solaris-spacing-12);
452
+
453
+ font-size: var(--solaris-font-size-lg);
451
454
  }
452
455
 
453
456
  [solaris-icon-button][data-radius='none'] {
@@ -471,11 +474,13 @@
471
474
  }
472
475
 
473
476
  [solaris-icon-button][data-density='compact'] {
474
- font-size: var(--solaris-font-size-sm);
475
477
  --solaris-icon-button-size: var(--solaris-density-min-height);
478
+
479
+ font-size: var(--solaris-font-size-sm);
476
480
  }
477
481
 
478
482
  [solaris-icon-button][data-density='comfortable'] {
479
- font-size: var(--solaris-font-size-md);
480
483
  --solaris-icon-button-size: var(--solaris-density-min-height);
484
+
485
+ font-size: var(--solaris-font-size-md);
481
486
  }
@@ -1,12 +1,13 @@
1
1
  /// Solaris UI — Design System Styles
2
2
  ///
3
3
  /// Public entry point for the Solaris design system SCSS API.
4
+ /// All tokens use browser default font-size (1rem = 16px).
4
5
  ///
5
6
  /// Usage:
6
7
  /// @use '@solaris-ui/angular/styles' as solaris;
7
8
  ///
8
- /// // Apply core foundation (root font-size, resets)
9
- /// @include solaris.core((root-font-size: rem-10));
9
+ /// // Apply core foundation
10
+ /// @include solaris.core();
10
11
  ///
11
12
  /// // Apply theme tokens
12
13
  /// @include solaris.theme((
@@ -1,47 +1,49 @@
1
1
  input[solaris-input] {
2
- --solaris-input-background: initial;
3
- --solaris-input-color: initial;
4
- --solaris-input-border-color: initial;
5
- --solaris-input-border-width: initial;
6
- --solaris-input-radius: initial;
7
- --solaris-input-height: initial;
8
- --solaris-input-padding-x: initial;
9
- --solaris-input-padding-y: initial;
10
- --solaris-input-font-size: initial;
11
- --solaris-input-line-height: initial;
12
- --solaris-input-placeholder-color: initial;
13
- --solaris-input-focus-ring-color: initial;
14
- --solaris-input-invalid-border-color: initial;
15
- --solaris-input-disabled-opacity: initial;
16
- --solaris-input-readonly-background: initial;
2
+ --solaris-input-radius: var(--solaris-radius-sm);
3
+ --solaris-input-height: var(--solaris-spacing-10);
4
+ --solaris-input-color: var(--solaris-text-default);
5
+ --solaris-input-padding-x: var(--solaris-spacing-3);
6
+ --solaris-input-padding-y: var(--solaris-spacing-2);
7
+ --solaris-input-font-size: var(--solaris-font-size-md);
8
+ --solaris-input-background: var(--solaris-surface-base);
9
+ --solaris-input-line-height: var(--solaris-line-height-md);
10
+ --solaris-input-border-color: var(--solaris-border-default);
11
+ --solaris-input-disabled-opacity: var(--solaris-opacity-50);
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);
17
17
 
18
- font-family: var(--solaris-font-family-sans), system-ui;
19
- box-sizing: border-box;
20
18
  margin: 0;
21
19
  width: 100%;
20
+ outline: none;
21
+ box-sizing: border-box;
22
22
  color: var(--solaris-input-color);
23
- background: var(--solaris-input-background);
24
- border: var(--solaris-input-border-width) solid
25
- var(--solaris-input-border-color);
26
- border-radius: var(--solaris-input-radius);
27
23
  height: var(--solaris-input-height);
28
- padding: var(--solaris-input-padding-y) var(--solaris-input-padding-x);
29
24
  font-size: var(--solaris-input-font-size);
25
+ border-radius: var(--solaris-input-radius);
26
+ background: var(--solaris-input-background);
30
27
  line-height: var(--solaris-input-line-height);
31
- outline: none;
28
+ font-family: var(--solaris-font-family-sans), system-ui;
29
+ padding: var(--solaris-input-padding-y) var(--solaris-input-padding-x);
30
+ border: var(--solaris-input-border-width) solid
31
+ var(--solaris-input-border-color);
32
32
  transition:
33
- border-color var(--solaris-motion-duration-fast, 150ms) ease,
34
- box-shadow var(--solaris-motion-duration-fast, 150ms) ease;
33
+ border-color var(--solaris-motion-duration-fast)
34
+ var(--solaris-motion-easing-standard),
35
+ box-shadow var(--solaris-motion-duration-fast)
36
+ var(--solaris-motion-easing-standard);
35
37
  }
36
38
 
37
39
  input[solaris-input]::placeholder {
38
- color: var(--solaris-input-placeholder-color);
39
40
  opacity: 1;
41
+ color: var(--solaris-input-placeholder-color);
40
42
  }
41
43
 
42
44
  input[solaris-input]:focus-visible {
43
- border-color: var(--solaris-input-focus-ring-color);
44
45
  // SOLARIS_TOKEN_EXCEPTION: Focus ring box-shadow uses CSS var with tokenized color. Hardcoded spread is required by design.
46
+ border-color: var(--solaris-input-focus-ring-color);
45
47
  box-shadow: 0 0 0 2px var(--solaris-input-focus-ring-color);
46
48
  }
47
49
 
@@ -50,8 +52,8 @@ input[solaris-input][data-invalid] {
50
52
  }
51
53
 
52
54
  input[solaris-input][data-invalid]:focus-visible {
53
- border-color: var(--solaris-input-invalid-border-color);
54
55
  // SOLARIS_TOKEN_EXCEPTION: Invalid state focus ring box-shadow uses CSS var. Hardcoded spread required by design.
56
+ border-color: var(--solaris-input-invalid-border-color);
55
57
  box-shadow: 0 0 0 2px var(--solaris-input-invalid-border-color);
56
58
  }
57
59
 
@@ -61,8 +63,8 @@ input[solaris-input]:disabled {
61
63
  }
62
64
 
63
65
  input[solaris-input][readonly] {
64
- background: var(--solaris-input-readonly-background);
65
66
  cursor: default;
67
+ background: var(--solaris-input-readonly-background);
66
68
  }
67
69
 
68
70
  input[solaris-input]::-webkit-search-decoration,
@@ -79,46 +81,46 @@ input[solaris-input]::-webkit-outer-spin-button {
79
81
 
80
82
  input[solaris-input]:autofill,
81
83
  input[solaris-input]:-webkit-autofill {
82
- -webkit-text-fill-color: var(--solaris-input-color);
83
84
  // SOLARIS_TOKEN_EXCEPTION: WebKit autofill requires hardcoded box-shadow inset to override browser default yellow background.
85
+ transition: background-color 5000s var(--solaris-motion-easing-standard) 0s;
86
+ -webkit-text-fill-color: var(--solaris-input-color);
84
87
  -webkit-box-shadow: 0 0 0 30px var(--solaris-input-background) inset;
85
- transition: background-color 5000s ease-in-out 0s;
86
88
  }
87
89
 
88
90
  input[solaris-input][data-appearance='outline'] {
89
- --solaris-input-background: var(--solaris-surface-base);
90
91
  --solaris-input-color: var(--solaris-text-default);
92
+ --solaris-input-background: var(--solaris-surface-base);
91
93
  --solaris-input-border-color: var(--solaris-border-default);
94
+ --solaris-input-disabled-opacity: var(--solaris-opacity-50);
92
95
  --solaris-input-border-width: var(--solaris-border-width-sm);
93
96
  --solaris-input-placeholder-color: var(--solaris-text-muted);
94
97
  --solaris-input-focus-ring-color: var(--solaris-primary-base);
95
98
  --solaris-input-invalid-border-color: var(--solaris-danger-base);
96
- --solaris-input-disabled-opacity: 0.5;
97
99
  --solaris-input-readonly-background: var(--solaris-surface-muted);
98
100
  }
99
101
 
100
102
  input[solaris-input][data-appearance='surface'] {
101
- --solaris-input-background: var(--solaris-surface-muted);
102
103
  --solaris-input-color: var(--solaris-text-default);
104
+ --solaris-input-background: var(--solaris-surface-muted);
103
105
  --solaris-input-border-color: var(--solaris-border-subtle);
106
+ --solaris-input-disabled-opacity: var(--solaris-opacity-50);
104
107
  --solaris-input-border-width: var(--solaris-border-width-sm);
105
108
  --solaris-input-placeholder-color: var(--solaris-text-muted);
106
109
  --solaris-input-focus-ring-color: var(--solaris-primary-base);
107
110
  --solaris-input-invalid-border-color: var(--solaris-danger-base);
108
- --solaris-input-disabled-opacity: 0.5;
109
111
  --solaris-input-readonly-background: var(--solaris-surface-base);
110
112
  }
111
113
 
112
114
  input[solaris-input][data-appearance='filled'] {
113
- --solaris-input-background: var(--solaris-surface-muted);
114
- --solaris-input-color: var(--solaris-text-default);
115
115
  --solaris-input-border-color: transparent;
116
- --solaris-input-border-width: 0 0 var(--solaris-border-width-sm) 0;
116
+ --solaris-input-color: var(--solaris-text-default);
117
+ --solaris-input-background: var(--solaris-surface-muted);
118
+ --solaris-input-disabled-opacity: var(--solaris-opacity-50);
117
119
  --solaris-input-placeholder-color: var(--solaris-text-muted);
118
120
  --solaris-input-focus-ring-color: var(--solaris-primary-base);
119
121
  --solaris-input-invalid-border-color: var(--solaris-danger-base);
120
- --solaris-input-disabled-opacity: 0.5;
121
122
  --solaris-input-readonly-background: var(--solaris-surface-base);
123
+ --solaris-input-border-width: 0 0 var(--solaris-border-width-sm) 0;
122
124
  }
123
125
 
124
126
  input[solaris-input][data-size='sm'] {
@@ -147,13 +149,13 @@ input[solaris-input][data-size='lg'] {
147
149
 
148
150
  input[solaris-input][data-density='compact'] {
149
151
  --solaris-input-height: var(--solaris-density-min-height);
150
- --solaris-input-padding-y: var(--solaris-density-padding-xs);
151
152
  --solaris-input-line-height: var(--solaris-line-height-sm);
153
+ --solaris-input-padding-y: var(--solaris-density-padding-xs);
152
154
  }
153
155
 
154
156
  input[solaris-input][data-density='comfortable'] {
155
- --solaris-input-padding-y: var(--solaris-density-padding-sm);
156
157
  --solaris-input-line-height: var(--solaris-line-height-md);
158
+ --solaris-input-padding-y: var(--solaris-density-padding-sm);
157
159
  }
158
160
 
159
161
  input[solaris-input][data-radius='none'] {
@@ -189,27 +191,27 @@ input[solaris-input][data-full-width] {
189
191
  @media (prefers-color-scheme: dark) {
190
192
  input[solaris-input]:autofill,
191
193
  input[solaris-input]:-webkit-autofill {
192
- -webkit-text-fill-color: var(--solaris-input-color);
193
194
  // SOLARIS_TOKEN_EXCEPTION: WebKit autofill dark mode requires hardcoded box-shadow inset override.
195
+ -webkit-text-fill-color: var(--solaris-input-color);
194
196
  -webkit-box-shadow: 0 0 0 30px var(--solaris-input-background) inset;
195
197
  }
196
198
  }
197
199
 
198
200
  solaris-form-field input[solaris-input] {
199
- background: transparent;
201
+ // SOLARIS_TOKEN_EXCEPTION: Resetting box-shadow inside form-field context is intentional to inherit from parent.
200
202
  border: none;
201
- border-radius: 0;
202
203
  height: auto;
203
204
  padding-left: 0;
205
+ border-radius: 0;
204
206
  padding-right: 0;
205
- // SOLARIS_TOKEN_EXCEPTION: Resetting box-shadow inside form-field context is intentional to inherit from parent.
206
207
  box-shadow: none;
208
+ background: transparent;
207
209
  }
208
210
 
209
211
  solaris-form-field input[solaris-input]:focus-visible {
210
- border-color: transparent;
211
212
  // SOLARIS_TOKEN_EXCEPTION: Resetting box-shadow inside form-field context is intentional to inherit from parent.
212
213
  box-shadow: none;
214
+ border-color: transparent;
213
215
  }
214
216
 
215
217
  solaris-form-field input[solaris-input][data-invalid] {
@@ -217,9 +219,9 @@ solaris-form-field input[solaris-input][data-invalid] {
217
219
  }
218
220
 
219
221
  solaris-form-field input[solaris-input][data-invalid]:focus-visible {
220
- border-color: transparent;
221
222
  // SOLARIS_TOKEN_EXCEPTION: Resetting box-shadow inside form-field context is intentional to inherit from parent.
222
223
  box-shadow: none;
224
+ border-color: transparent;
223
225
  }
224
226
 
225
227
  solaris-form-field input[solaris-input][disabled] {
@@ -249,7 +251,7 @@ solaris-form-field input[solaris-input]::-webkit-search-results-decoration {
249
251
 
250
252
  solaris-form-field input[solaris-input]:autofill,
251
253
  solaris-form-field input[solaris-input]:-webkit-autofill {
252
- -webkit-text-fill-color: var(--solaris-input-color);
253
254
  // SOLARIS_TOKEN_EXCEPTION: WebKit autofill inside form-field requires hardcoded transparent box-shadow inset.
254
255
  -webkit-box-shadow: 0 0 0 30px transparent inset;
256
+ -webkit-text-fill-color: var(--solaris-input-color);
255
257
  }
@@ -1,47 +1,51 @@
1
1
  textarea[solaris-textarea] {
2
- --solaris-textarea-background: initial;
3
- --solaris-textarea-color: initial;
4
- --solaris-textarea-border-color: initial;
5
- --solaris-textarea-border-width: initial;
6
- --solaris-textarea-radius: initial;
7
- --solaris-textarea-padding-x: initial;
8
- --solaris-textarea-padding-y: initial;
9
- --solaris-textarea-min-height: initial;
10
- --solaris-textarea-font-size: initial;
11
- --solaris-textarea-line-height: initial;
12
- --solaris-textarea-placeholder-color: initial;
13
- --solaris-textarea-focus-ring-color: initial;
14
- --solaris-textarea-invalid-border-color: initial;
15
- --solaris-textarea-disabled-opacity: initial;
16
- --solaris-textarea-readonly-background: initial;
2
+ --solaris-textarea-radius: var(--solaris-radius-sm);
3
+ --solaris-textarea-color: var(--solaris-text-default);
4
+ --solaris-textarea-padding-x: var(--solaris-spacing-3);
5
+ --solaris-textarea-padding-y: var(--solaris-spacing-2);
6
+ --solaris-textarea-font-size: var(--solaris-font-size-md);
7
+ --solaris-textarea-background: var(--solaris-surface-base);
8
+ --solaris-textarea-line-height: var(--solaris-line-height-md);
9
+ --solaris-textarea-border-color: var(--solaris-border-default);
10
+ --solaris-textarea-disabled-opacity: var(--solaris-opacity-50);
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);
16
+ --solaris-textarea-min-height: calc(
17
+ var(--solaris-spacing-8) + var(--solaris-spacing-1)
18
+ );
17
19
 
18
- font-family: var(--solaris-font-family-sans), system-ui;
19
- box-sizing: border-box;
20
20
  margin: 0;
21
21
  width: 100%;
22
+ outline: none;
23
+ box-sizing: border-box;
22
24
  color: var(--solaris-textarea-color);
23
- background: var(--solaris-textarea-background);
24
- border: var(--solaris-textarea-border-width) solid
25
- var(--solaris-textarea-border-color);
25
+ font-size: var(--solaris-textarea-font-size);
26
26
  border-radius: var(--solaris-textarea-radius);
27
+ background: var(--solaris-textarea-background);
27
28
  min-height: var(--solaris-textarea-min-height);
28
- padding: var(--solaris-textarea-padding-y) var(--solaris-textarea-padding-x);
29
- font-size: var(--solaris-textarea-font-size);
30
29
  line-height: var(--solaris-textarea-line-height);
31
- outline: none;
30
+ font-family: var(--solaris-font-family-sans), system-ui;
31
+ padding: var(--solaris-textarea-padding-y) var(--solaris-textarea-padding-x);
32
+ border: var(--solaris-textarea-border-width) solid
33
+ var(--solaris-textarea-border-color);
32
34
  transition:
33
- border-color var(--solaris-motion-duration-fast, 150ms) ease,
34
- box-shadow var(--solaris-motion-duration-fast, 150ms) ease;
35
+ border-color var(--solaris-motion-duration-fast)
36
+ var(--solaris-motion-easing-standard),
37
+ box-shadow var(--solaris-motion-duration-fast)
38
+ var(--solaris-motion-easing-standard);
35
39
  }
36
40
 
37
41
  textarea[solaris-textarea]::placeholder {
38
- color: var(--solaris-textarea-placeholder-color);
39
42
  opacity: 1;
43
+ color: var(--solaris-textarea-placeholder-color);
40
44
  }
41
45
 
42
46
  textarea[solaris-textarea]:focus-visible {
43
- border-color: var(--solaris-textarea-focus-ring-color);
44
47
  // SOLARIS_TOKEN_EXCEPTION: Focus ring box-shadow uses CSS var with tokenized color. Hardcoded spread required by design.
48
+ border-color: var(--solaris-textarea-focus-ring-color);
45
49
  box-shadow: 0 0 0 2px var(--solaris-textarea-focus-ring-color);
46
50
  }
47
51
 
@@ -50,8 +54,8 @@ textarea[solaris-textarea][data-invalid] {
50
54
  }
51
55
 
52
56
  textarea[solaris-textarea][data-invalid]:focus-visible {
53
- border-color: var(--solaris-textarea-invalid-border-color);
54
57
  // SOLARIS_TOKEN_EXCEPTION: Invalid state focus ring box-shadow uses CSS var. Hardcoded spread required by design.
58
+ border-color: var(--solaris-textarea-invalid-border-color);
55
59
  box-shadow: 0 0 0 2px var(--solaris-textarea-invalid-border-color);
56
60
  }
57
61
 
@@ -61,82 +65,84 @@ textarea[solaris-textarea]:disabled {
61
65
  }
62
66
 
63
67
  textarea[solaris-textarea][readonly] {
64
- background: var(--solaris-textarea-readonly-background);
65
68
  cursor: default;
69
+ background: var(--solaris-textarea-readonly-background);
66
70
  }
67
71
 
68
72
  textarea[solaris-textarea][data-appearance='outline'] {
69
- --solaris-textarea-background: var(--solaris-surface-base);
70
73
  --solaris-textarea-color: var(--solaris-text-default);
74
+ --solaris-textarea-background: var(--solaris-surface-base);
71
75
  --solaris-textarea-border-color: var(--solaris-border-default);
72
- --solaris-textarea-border-width: 1px;
76
+ --solaris-textarea-disabled-opacity: var(--solaris-opacity-50);
77
+ --solaris-textarea-border-width: var(--solaris-border-width-sm);
73
78
  --solaris-textarea-placeholder-color: var(--solaris-text-muted);
74
79
  --solaris-textarea-focus-ring-color: var(--solaris-primary-base);
75
80
  --solaris-textarea-invalid-border-color: var(--solaris-danger-base);
76
- --solaris-textarea-disabled-opacity: 0.5;
77
81
  --solaris-textarea-readonly-background: var(--solaris-surface-muted);
78
82
  }
79
83
 
80
84
  textarea[solaris-textarea][data-appearance='surface'] {
81
- --solaris-textarea-background: var(--solaris-surface-muted);
82
85
  --solaris-textarea-color: var(--solaris-text-default);
86
+ --solaris-textarea-background: var(--solaris-surface-muted);
83
87
  --solaris-textarea-border-color: var(--solaris-border-subtle);
84
- --solaris-textarea-border-width: 1px;
88
+ --solaris-textarea-disabled-opacity: var(--solaris-opacity-50);
89
+ --solaris-textarea-border-width: var(--solaris-border-width-sm);
85
90
  --solaris-textarea-placeholder-color: var(--solaris-text-muted);
86
91
  --solaris-textarea-focus-ring-color: var(--solaris-primary-base);
87
92
  --solaris-textarea-invalid-border-color: var(--solaris-danger-base);
88
- --solaris-textarea-disabled-opacity: 0.5;
89
93
  --solaris-textarea-readonly-background: var(--solaris-surface-base);
90
94
  }
91
95
 
92
96
  textarea[solaris-textarea][data-appearance='filled'] {
93
- --solaris-textarea-background: var(--solaris-surface-muted);
94
- --solaris-textarea-color: var(--solaris-text-default);
95
97
  --solaris-textarea-border-color: transparent;
96
- --solaris-textarea-border-width: 0 0 1px 0;
98
+ --solaris-textarea-color: var(--solaris-text-default);
99
+ --solaris-textarea-background: var(--solaris-surface-muted);
100
+ --solaris-textarea-disabled-opacity: var(--solaris-opacity-50);
97
101
  --solaris-textarea-placeholder-color: var(--solaris-text-muted);
98
102
  --solaris-textarea-focus-ring-color: var(--solaris-primary-base);
99
103
  --solaris-textarea-invalid-border-color: var(--solaris-danger-base);
100
- --solaris-textarea-disabled-opacity: 0.5;
101
104
  --solaris-textarea-readonly-background: var(--solaris-surface-base);
105
+ --solaris-textarea-border-width: 0 0 var(--solaris-border-width-sm) 0;
102
106
  }
103
107
 
104
108
  textarea[solaris-textarea][data-size='sm'] {
105
109
  --solaris-textarea-padding-x: var(--solaris-spacing-2);
106
- --solaris-textarea-padding-y: 0.25rem;
107
- --solaris-textarea-min-height: 3rem;
110
+ --solaris-textarea-min-height: var(--solaris-spacing-8);
111
+ --solaris-textarea-padding-y: var(--solaris-spacing-half);
108
112
  --solaris-textarea-font-size: var(--solaris-font-size-sm);
109
113
  --solaris-textarea-line-height: var(--solaris-line-height-sm);
110
114
  }
111
115
 
112
116
  textarea[solaris-textarea][data-size='md'] {
113
117
  --solaris-textarea-padding-x: var(--solaris-spacing-3);
114
- --solaris-textarea-padding-y: 0.375rem;
115
- --solaris-textarea-min-height: 3.5rem;
118
+ --solaris-textarea-padding-y: var(--solaris-spacing-1);
116
119
  --solaris-textarea-font-size: var(--solaris-font-size-md);
117
120
  --solaris-textarea-line-height: var(--solaris-line-height-md);
121
+ --solaris-textarea-min-height: calc(
122
+ var(--solaris-spacing-8) + var(--solaris-spacing-1)
123
+ );
118
124
  }
119
125
 
120
126
  textarea[solaris-textarea][data-size='lg'] {
121
127
  --solaris-textarea-padding-x: var(--solaris-spacing-4);
122
- --solaris-textarea-padding-y: 0.5rem;
123
- --solaris-textarea-min-height: 4rem;
128
+ --solaris-textarea-padding-y: var(--solaris-spacing-1);
129
+ --solaris-textarea-min-height: var(--solaris-spacing-10);
124
130
  --solaris-textarea-font-size: var(--solaris-font-size-lg);
125
131
  --solaris-textarea-line-height: var(--solaris-line-height-lg);
126
132
  }
127
133
 
128
134
  textarea[solaris-textarea][data-density='compact'] {
129
- --solaris-textarea-padding-y: 0.1875rem;
130
135
  --solaris-textarea-line-height: var(--solaris-line-height-sm);
136
+ --solaris-textarea-padding-y: var(--solaris-spacing-half);
131
137
  }
132
138
 
133
139
  textarea[solaris-textarea][data-density='comfortable'] {
134
- --solaris-textarea-padding-y: 0.5rem;
140
+ --solaris-textarea-padding-y: var(--solaris-spacing-1);
135
141
  --solaris-textarea-line-height: var(--solaris-line-height-md);
136
142
  }
137
143
 
138
144
  textarea[solaris-textarea][data-radius='none'] {
139
- --solaris-textarea-radius: 0;
145
+ --solaris-textarea-radius: var(--solaris-radius-none);
140
146
  }
141
147
 
142
148
  textarea[solaris-textarea][data-radius='sm'] {
@@ -184,26 +190,26 @@ textarea[solaris-textarea][data-full-width] {
184
190
  @media (prefers-color-scheme: dark) {
185
191
  textarea[solaris-textarea]:autofill,
186
192
  textarea[solaris-textarea]:-webkit-autofill {
187
- -webkit-text-fill-color: var(--solaris-textarea-color);
188
193
  // SOLARIS_TOKEN_EXCEPTION: WebKit autofill dark mode requires hardcoded box-shadow inset to override browser default.
194
+ -webkit-text-fill-color: var(--solaris-textarea-color);
189
195
  -webkit-box-shadow: 0 0 0 30px var(--solaris-textarea-background) inset;
190
196
  }
191
197
  }
192
198
 
193
199
  solaris-form-field textarea[solaris-textarea] {
194
- background: transparent;
200
+ // SOLARIS_TOKEN_EXCEPTION: Resetting box-shadow inside form-field context is intentional to inherit from parent.
195
201
  border: none;
196
- border-radius: 0;
197
202
  padding-left: 0;
203
+ border-radius: 0;
198
204
  padding-right: 0;
199
- // SOLARIS_TOKEN_EXCEPTION: Resetting box-shadow inside form-field context is intentional to inherit from parent.
200
205
  box-shadow: none;
206
+ background: transparent;
201
207
  }
202
208
 
203
209
  solaris-form-field textarea[solaris-textarea]:focus-visible {
204
- border-color: transparent;
205
210
  // SOLARIS_TOKEN_EXCEPTION: Resetting box-shadow inside form-field context is intentional to inherit from parent.
206
211
  box-shadow: none;
212
+ border-color: transparent;
207
213
  }
208
214
 
209
215
  solaris-form-field textarea[solaris-textarea][data-invalid] {
@@ -211,9 +217,9 @@ solaris-form-field textarea[solaris-textarea][data-invalid] {
211
217
  }
212
218
 
213
219
  solaris-form-field textarea[solaris-textarea][data-invalid]:focus-visible {
214
- border-color: transparent;
215
220
  // SOLARIS_TOKEN_EXCEPTION: Resetting box-shadow inside form-field context is intentional to inherit from parent.
216
221
  box-shadow: none;
222
+ border-color: transparent;
217
223
  }
218
224
 
219
225
  solaris-form-field textarea[solaris-textarea][disabled] {
@@ -225,18 +231,18 @@ solaris-form-field textarea[solaris-textarea][readonly] {
225
231
  }
226
232
 
227
233
  solaris-form-field textarea[solaris-textarea][data-density='compact'] {
228
- padding-top: 0.1875rem;
229
- padding-bottom: 0.1875rem;
234
+ padding-top: var(--solaris-spacing-half);
235
+ padding-bottom: var(--solaris-spacing-half);
230
236
  }
231
237
 
232
238
  solaris-form-field textarea[solaris-textarea][data-density='comfortable'] {
233
- padding-top: 0.5rem;
234
- padding-bottom: 0.5rem;
239
+ padding-top: var(--solaris-spacing-1);
240
+ padding-bottom: var(--solaris-spacing-1);
235
241
  }
236
242
 
237
243
  solaris-form-field textarea[solaris-textarea]:autofill,
238
244
  solaris-form-field textarea[solaris-textarea]:-webkit-autofill {
239
- -webkit-text-fill-color: var(--solaris-textarea-color);
240
245
  // SOLARIS_TOKEN_EXCEPTION: WebKit autofill inside form-field requires hardcoded transparent box-shadow inset.
241
246
  -webkit-box-shadow: 0 0 0 30px transparent inset;
247
+ -webkit-text-fill-color: var(--solaris-textarea-color);
242
248
  }