@astryxdesign/theme-stone 0.7.3 → 0.7.4-canary.28b1cd4
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/README.md +42 -5
- package/dist/source.d.ts +1 -1
- package/dist/source.d.ts.map +1 -1
- package/dist/source.js +201 -235
- package/dist/source.mjs +201 -235
- package/dist/stone.d.ts +2 -2
- package/dist/stone.js +134 -134
- package/dist/stoneColorMapping.test.d.ts +2 -0
- package/dist/stoneColorMapping.test.d.ts.map +1 -0
- package/dist/stonePaletteRefs.generated.d.ts +158 -0
- package/dist/stonePaletteRefs.generated.d.ts.map +1 -0
- package/dist/stonePalettes.generated.d.ts +496 -0
- package/dist/stonePalettes.generated.d.ts.map +1 -0
- package/dist/stonePalettes.test.d.ts +2 -0
- package/dist/stonePalettes.test.d.ts.map +1 -0
- package/dist/stoneTheme.d.ts +5 -3
- package/dist/stoneTheme.d.ts.map +1 -1
- package/dist/theme.css +134 -134
- package/dist/theme.css.d.ts +2 -2
- package/package.json +6 -5
- package/palette.config.json +262 -0
- package/src/source.ts +1 -1
- package/src/stoneColorMapping.test.ts +44 -0
- package/src/stonePaletteRefs.generated.ts +51 -0
- package/src/stonePalettes.generated.receipt.json +840 -0
- package/src/stonePalettes.generated.ts +501 -0
- package/src/stonePalettes.test.ts +87 -0
- package/src/stoneTheme.test.ts +124 -1
- package/src/stoneTheme.ts +190 -207
package/src/stoneTheme.ts
CHANGED
|
@@ -4,65 +4,66 @@
|
|
|
4
4
|
* Stone Theme
|
|
5
5
|
*
|
|
6
6
|
* A warm, earthy neutral theme inspired by natural stone and sandstone.
|
|
7
|
-
*
|
|
7
|
+
* Colors reference the reviewed Stone palette generated from palette.config.json.
|
|
8
8
|
* Montserrat for headings, Figtree for body, JetBrains Mono for code.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import {defineTheme, defineSyntaxTheme} from '@astryxdesign/core/theme';
|
|
12
12
|
import {stoneIconRegistry} from './icons';
|
|
13
|
+
import {stonePaletteRefs} from './stonePaletteRefs.generated';
|
|
14
|
+
|
|
15
|
+
const {blue, cyan, green, neutral, orange, pink, purple, red, teal, yellow} =
|
|
16
|
+
stonePaletteRefs;
|
|
17
|
+
|
|
18
|
+
const lightDark = (light: string, dark: string): string =>
|
|
19
|
+
`light-dark(${light}, ${dark})`;
|
|
20
|
+
const withAlpha = (color: string, alpha: string): string => `${color}${alpha}`;
|
|
13
21
|
|
|
14
22
|
/**
|
|
15
|
-
* Input status
|
|
16
|
-
* components share
|
|
17
|
-
*
|
|
18
|
-
* tone). Stone redefines those vars inside each input's status scope to
|
|
19
|
-
* T60 light / T70 dark so the border (and the matching status icon) reads
|
|
20
|
-
* as a softer hue rim, in line with the gentle T90 status message bubble.
|
|
23
|
+
* Input status borders and icons use softer mid-ramp stops than status text.
|
|
24
|
+
* All supported input components share this one mapping so their status
|
|
25
|
+
* treatment remains consistent.
|
|
21
26
|
*/
|
|
22
27
|
const INPUT_STATUS_VARS = {
|
|
23
28
|
'status:success': {
|
|
24
|
-
'--color-success':
|
|
29
|
+
'--color-success': lightDark(green.light[55], green.dark[70]),
|
|
25
30
|
},
|
|
26
31
|
'status:warning': {
|
|
27
|
-
'--color-warning':
|
|
32
|
+
'--color-warning': lightDark(yellow.light[55], yellow.dark[70]),
|
|
28
33
|
},
|
|
29
34
|
'status:error': {
|
|
30
|
-
'--color-error':
|
|
35
|
+
'--color-error': lightDark(red.light[60], red.dark[70]),
|
|
31
36
|
},
|
|
32
37
|
} as const;
|
|
33
38
|
|
|
34
39
|
/**
|
|
35
|
-
* Stone syntax
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* `string` and `property` both land on Teal T40 — intentional; the audit
|
|
39
|
-
* unified them since green and teal are visually adjacent at T40 and
|
|
40
|
-
* the stone neutral palette doesn't carry a distinct green stop.
|
|
40
|
+
* Stone syntax uses mid-ramp colors in light mode and lighter stops in dark
|
|
41
|
+
* mode. Light strings and properties share Teal; dark strings use Green 70,
|
|
42
|
+
* while dark properties remain Teal.
|
|
41
43
|
*/
|
|
42
44
|
const stoneSyntax = defineSyntaxTheme({
|
|
43
45
|
name: 'astryx-stone',
|
|
44
46
|
tokens: {
|
|
45
|
-
keyword: [
|
|
46
|
-
string: [
|
|
47
|
-
comment: [
|
|
48
|
-
number: [
|
|
49
|
-
function: [
|
|
50
|
-
type: [
|
|
51
|
-
variable: [
|
|
52
|
-
operator: [
|
|
53
|
-
constant: [
|
|
54
|
-
tag: [
|
|
55
|
-
attribute: [
|
|
56
|
-
property: [
|
|
57
|
-
punctuation: [
|
|
58
|
-
background: [
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
'
|
|
65
|
-
'removed-marker': ['#58413e', '#f9dcd7'],
|
|
47
|
+
keyword: [purple.light[40], purple.dark[70]],
|
|
48
|
+
string: [teal.light[40], green.dark[70]],
|
|
49
|
+
comment: [neutral.light[40], neutral.dark[70]],
|
|
50
|
+
number: [red.light[40], orange.dark[70]],
|
|
51
|
+
function: [blue.light[40], blue.dark[70]],
|
|
52
|
+
type: [purple.light[40], purple.dark[70]],
|
|
53
|
+
variable: [neutral.light[40], neutral.dark[70]],
|
|
54
|
+
operator: [neutral.light[40], neutral.dark[70]],
|
|
55
|
+
constant: [red.light[40], orange.dark[70]],
|
|
56
|
+
tag: [red.light[40], red.dark[70]],
|
|
57
|
+
attribute: [yellow.light[40], yellow.dark[70]],
|
|
58
|
+
property: [teal.light[40], teal.dark[70]],
|
|
59
|
+
punctuation: [neutral.light[40], neutral.dark[70]],
|
|
60
|
+
background: [neutral.light[95], neutral.dark[5]],
|
|
61
|
+
// Translucent diff rows retain each token's contrast while the opaque
|
|
62
|
+
// markers carry the same Green and Red families as their row tint.
|
|
63
|
+
added: [withAlpha(green.light[90], '40'), withAlpha(green.dark[80], '33')],
|
|
64
|
+
removed: [withAlpha(red.light[90], '40'), withAlpha(red.dark[80], '33')],
|
|
65
|
+
'added-marker': [green.light[30], green.dark[90]],
|
|
66
|
+
'removed-marker': [red.light[30], red.dark[90]],
|
|
66
67
|
},
|
|
67
68
|
});
|
|
68
69
|
|
|
@@ -151,145 +152,135 @@ export const stoneTheme = defineTheme({
|
|
|
151
152
|
syntax: stoneSyntax,
|
|
152
153
|
|
|
153
154
|
tokens: {
|
|
154
|
-
//
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
'--color-background-surface': [
|
|
165
|
-
'--color-background-body': [
|
|
166
|
-
'--color-overlay': [
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
'--color-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
'--color-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
'--color-
|
|
188
|
-
'--color-
|
|
189
|
-
'--color-
|
|
190
|
-
'--color-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
'--color-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
'--color-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
'--color-
|
|
202
|
-
'--color-
|
|
203
|
-
'--color-
|
|
204
|
-
|
|
205
|
-
//
|
|
206
|
-
'--color-
|
|
207
|
-
'--color-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
'--color-
|
|
211
|
-
'--color-
|
|
212
|
-
|
|
155
|
+
// Core neutrals
|
|
156
|
+
'--color-accent': [neutral.light[15], neutral.dark[95]],
|
|
157
|
+
'--color-accent-muted': [
|
|
158
|
+
withAlpha(neutral.light[15], '14'),
|
|
159
|
+
withAlpha(neutral.dark[95], '20'),
|
|
160
|
+
],
|
|
161
|
+
'--color-neutral': [
|
|
162
|
+
withAlpha(neutral.light[15], '0f'),
|
|
163
|
+
withAlpha(neutral.dark[95], '1a'),
|
|
164
|
+
],
|
|
165
|
+
'--color-background-surface': [neutral.light[100], neutral.dark[10]],
|
|
166
|
+
'--color-background-body': [neutral.light[95], neutral.dark[5]],
|
|
167
|
+
'--color-overlay': [
|
|
168
|
+
withAlpha(neutral.light[15], '80'),
|
|
169
|
+
withAlpha(neutral.dark[15], 'cc'),
|
|
170
|
+
],
|
|
171
|
+
'--color-overlay-hover': [
|
|
172
|
+
withAlpha(neutral.light[15], '0d'),
|
|
173
|
+
withAlpha(neutral.dark[95], '0d'),
|
|
174
|
+
],
|
|
175
|
+
'--color-overlay-pressed': [
|
|
176
|
+
withAlpha(neutral.light[15], '1a'),
|
|
177
|
+
withAlpha(neutral.dark[95], '1a'),
|
|
178
|
+
],
|
|
179
|
+
'--color-background-muted': [neutral.light[90], neutral.dark[25]],
|
|
180
|
+
|
|
181
|
+
// Text
|
|
182
|
+
'--color-text-primary': [neutral.light[15], neutral.dark[95]],
|
|
183
|
+
// These stops keep normal secondary text readable on Stone's body,
|
|
184
|
+
// muted, and categorical surfaces.
|
|
185
|
+
'--color-text-secondary': [neutral.light[40], neutral.dark[70]],
|
|
186
|
+
'--color-text-disabled': [neutral.light[85], neutral.dark[40]],
|
|
187
|
+
'--color-text-accent': [neutral.light[15], neutral.dark[95]],
|
|
188
|
+
'--color-on-dark': neutral.light[100],
|
|
189
|
+
'--color-on-light': [neutral.light[15], neutral.dark[15]],
|
|
190
|
+
'--color-on-accent': [neutral.light[100], neutral.dark[15]],
|
|
191
|
+
'--color-on-success': [green.light[30], green.dark[90]],
|
|
192
|
+
'--color-on-error': [red.light[30], red.dark[90]],
|
|
193
|
+
'--color-on-warning': [yellow.light[30], yellow.dark[90]],
|
|
194
|
+
|
|
195
|
+
// Icon
|
|
196
|
+
'--color-icon-accent': [neutral.light[15], neutral.dark[95]],
|
|
197
|
+
'--color-icon-primary': [neutral.light[15], neutral.dark[95]],
|
|
198
|
+
'--color-icon-secondary': [neutral.light[55], neutral.dark[65]],
|
|
199
|
+
'--color-icon-disabled': [neutral.light[85], neutral.dark[40]],
|
|
200
|
+
|
|
201
|
+
// Surface variants
|
|
202
|
+
'--color-background-card': [neutral.light[100], neutral.dark[15]],
|
|
203
|
+
'--color-background-popover': [neutral.light[100], neutral.dark[20]],
|
|
204
|
+
'--color-background-inverted': [neutral.light[15], neutral.dark[95]],
|
|
205
|
+
|
|
206
|
+
// Status / sentiment
|
|
207
|
+
'--color-success': [green.light[30], green.dark[80]],
|
|
208
|
+
'--color-success-muted': [green.light[90], green.dark[80]],
|
|
209
|
+
'--color-error': [red.light[30], red.dark[80]],
|
|
210
|
+
'--color-error-muted': [red.light[90], red.dark[80]],
|
|
211
|
+
'--color-warning': [yellow.light[30], yellow.dark[80]],
|
|
212
|
+
'--color-warning-muted': [yellow.light[90], yellow.dark[80]],
|
|
213
|
+
|
|
214
|
+
// Border
|
|
215
|
+
'--color-border': [neutral.light[90], withAlpha(neutral.dark[95], '1a')],
|
|
216
|
+
'--color-border-emphasized': [neutral.light[55], neutral.dark[40]],
|
|
217
|
+
|
|
218
|
+
// Effects
|
|
219
|
+
'--color-skeleton': [neutral.light[85], neutral.dark[40]],
|
|
220
|
+
'--color-shadow': [
|
|
221
|
+
withAlpha(neutral.light[15], '1a'),
|
|
222
|
+
withAlpha(neutral.dark[0], '4d'),
|
|
223
|
+
],
|
|
224
|
+
'--color-tint-hover': [neutral.light[0], neutral.dark[100]],
|
|
213
225
|
|
|
214
226
|
// Typography override
|
|
215
227
|
'--text-supporting-size': '12px',
|
|
216
228
|
|
|
217
|
-
// Categorical
|
|
218
|
-
//
|
|
219
|
-
//
|
|
220
|
-
//
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
'--color-
|
|
228
|
-
'--color-
|
|
229
|
-
'--color-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
'--color-
|
|
234
|
-
'--color-
|
|
235
|
-
|
|
236
|
-
'--color-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
'--color-
|
|
242
|
-
'--color-
|
|
243
|
-
'--color-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
'--color-background-
|
|
247
|
-
'--color-border-
|
|
248
|
-
'--color-icon-
|
|
249
|
-
'--color-text-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
'--color-
|
|
253
|
-
'--color-
|
|
254
|
-
'--color-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
'--color-
|
|
259
|
-
'--color-
|
|
260
|
-
|
|
261
|
-
'--color-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
'--color-
|
|
265
|
-
|
|
266
|
-
'--color-
|
|
267
|
-
'--color-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
'--color-icon-red': ['#58413e', '#f9dcd7'],
|
|
273
|
-
'--color-text-red': ['#58413e', '#f9dcd7'],
|
|
274
|
-
|
|
275
|
-
// Categorical — Teal H=158 C=9
|
|
276
|
-
'--color-background-teal': ['#d4e7dc', '#46564d'],
|
|
277
|
-
'--color-border-teal': ['#c6d9ce', '#303f36'],
|
|
278
|
-
'--color-icon-teal': ['#3b4a41', '#d4e7dc'],
|
|
279
|
-
'--color-text-teal': ['#3b4a41', '#d4e7dc'],
|
|
280
|
-
|
|
281
|
-
// Categorical — Yellow H=90 C=23
|
|
282
|
-
'--color-background-yellow': ['#f4e1b7', '#5e512d'],
|
|
283
|
-
'--color-border-yellow': ['#e5d3a9', '#463a18'],
|
|
284
|
-
'--color-icon-yellow': ['#524622', '#f4e1b7'],
|
|
285
|
-
'--color-text-yellow': ['#524622', '#f4e1b7'],
|
|
286
|
-
|
|
287
|
-
// =========================================================================
|
|
288
|
-
// Radius — clean and subtle
|
|
289
|
-
// --radius-none and --radius-full are always fixed and must never be
|
|
290
|
-
// scaled by a theme (see defineTheme's radius config docs) — 0 and
|
|
291
|
-
// 9999px respectively, matching @astryxdesign/core's own defaults.
|
|
292
|
-
// =========================================================================
|
|
229
|
+
// Categorical
|
|
230
|
+
// Light mode pairs pastel stop 90 surfaces with stop 30 foregrounds.
|
|
231
|
+
// Dark mode pairs stop 35 surfaces with stop 90 foregrounds; borders move
|
|
232
|
+
// one step inward in both modes.
|
|
233
|
+
'--color-background-blue': [blue.light[90], blue.dark[35]],
|
|
234
|
+
'--color-border-blue': [blue.light[85], blue.dark[25]],
|
|
235
|
+
'--color-icon-blue': [blue.light[30], blue.dark[90]],
|
|
236
|
+
'--color-text-blue': [blue.light[30], blue.dark[90]],
|
|
237
|
+
|
|
238
|
+
'--color-background-cyan': [cyan.light[90], cyan.dark[35]],
|
|
239
|
+
'--color-border-cyan': [cyan.light[85], cyan.dark[25]],
|
|
240
|
+
'--color-icon-cyan': [cyan.light[30], cyan.dark[90]],
|
|
241
|
+
'--color-text-cyan': [cyan.light[30], cyan.dark[90]],
|
|
242
|
+
|
|
243
|
+
'--color-background-gray': [neutral.light[90], neutral.dark[35]],
|
|
244
|
+
'--color-border-gray': [neutral.light[85], neutral.dark[25]],
|
|
245
|
+
'--color-icon-gray': [neutral.light[30], neutral.dark[90]],
|
|
246
|
+
'--color-text-gray': [neutral.light[30], neutral.dark[90]],
|
|
247
|
+
|
|
248
|
+
'--color-background-green': [green.light[90], green.dark[35]],
|
|
249
|
+
'--color-border-green': [green.light[85], green.dark[25]],
|
|
250
|
+
'--color-icon-green': [green.light[30], green.dark[90]],
|
|
251
|
+
'--color-text-green': [green.light[30], green.dark[90]],
|
|
252
|
+
|
|
253
|
+
'--color-background-orange': [orange.light[90], orange.dark[35]],
|
|
254
|
+
'--color-border-orange': [orange.light[85], orange.dark[25]],
|
|
255
|
+
'--color-icon-orange': [orange.light[30], orange.dark[90]],
|
|
256
|
+
'--color-text-orange': [orange.light[30], orange.dark[90]],
|
|
257
|
+
|
|
258
|
+
'--color-background-pink': [pink.light[90], pink.dark[35]],
|
|
259
|
+
'--color-border-pink': [pink.light[85], pink.dark[25]],
|
|
260
|
+
'--color-icon-pink': [pink.light[30], pink.dark[90]],
|
|
261
|
+
'--color-text-pink': [pink.light[30], pink.dark[90]],
|
|
262
|
+
|
|
263
|
+
'--color-background-purple': [purple.light[90], purple.dark[35]],
|
|
264
|
+
'--color-border-purple': [purple.light[85], purple.dark[25]],
|
|
265
|
+
'--color-icon-purple': [purple.light[30], purple.dark[90]],
|
|
266
|
+
'--color-text-purple': [purple.light[30], purple.dark[90]],
|
|
267
|
+
|
|
268
|
+
'--color-background-red': [red.light[90], red.dark[35]],
|
|
269
|
+
'--color-border-red': [red.light[85], red.dark[25]],
|
|
270
|
+
'--color-icon-red': [red.light[30], red.dark[90]],
|
|
271
|
+
'--color-text-red': [red.light[30], red.dark[90]],
|
|
272
|
+
|
|
273
|
+
'--color-background-teal': [teal.light[90], teal.dark[35]],
|
|
274
|
+
'--color-border-teal': [teal.light[85], teal.dark[25]],
|
|
275
|
+
'--color-icon-teal': [teal.light[30], teal.dark[90]],
|
|
276
|
+
'--color-text-teal': [teal.light[30], teal.dark[90]],
|
|
277
|
+
|
|
278
|
+
'--color-background-yellow': [yellow.light[90], yellow.dark[35]],
|
|
279
|
+
'--color-border-yellow': [yellow.light[85], yellow.dark[25]],
|
|
280
|
+
'--color-icon-yellow': [yellow.light[30], yellow.dark[90]],
|
|
281
|
+
'--color-text-yellow': [yellow.light[30], yellow.dark[90]],
|
|
282
|
+
|
|
283
|
+
// Radius
|
|
293
284
|
'--radius-none': '0px',
|
|
294
285
|
'--radius-inner': '0.25rem',
|
|
295
286
|
'--radius-element': '0.5rem',
|
|
@@ -297,17 +288,15 @@ export const stoneTheme = defineTheme({
|
|
|
297
288
|
'--radius-page': '1.5rem',
|
|
298
289
|
'--radius-full': '9999px',
|
|
299
290
|
|
|
300
|
-
// =========================================================================
|
|
301
291
|
// Shadows
|
|
302
|
-
|
|
303
|
-
'--shadow-
|
|
304
|
-
'--shadow-
|
|
305
|
-
'--shadow-
|
|
306
|
-
'--shadow-inset-
|
|
307
|
-
'--shadow-inset-
|
|
308
|
-
'--shadow-inset-
|
|
309
|
-
'--shadow-inset-
|
|
310
|
-
'--shadow-inset-error': 'inset 0px 0px 0px 2px #83838a30',
|
|
292
|
+
'--shadow-low': `0 2px 4px ${withAlpha(neutral.light[15], '0d')}, 0 4px 8px ${withAlpha(neutral.light[15], '1a')}`,
|
|
293
|
+
'--shadow-med': `0 2px 4px ${withAlpha(neutral.light[15], '0d')}, 0 4px 12px ${withAlpha(neutral.light[15], '1a')}`,
|
|
294
|
+
'--shadow-high': `0 4px 6px ${withAlpha(neutral.light[15], '1a')}, 0 12px 24px ${withAlpha(neutral.light[15], '26')}`,
|
|
295
|
+
'--shadow-inset-hover': `inset 0 0 0 2px ${withAlpha(neutral.light[15], '30')}`,
|
|
296
|
+
'--shadow-inset-selected': `inset 0 0 0 2px ${withAlpha(neutral.light[15], '50')}`,
|
|
297
|
+
'--shadow-inset-success': `inset 0 0 0 2px ${withAlpha(neutral.light[55], '30')}`,
|
|
298
|
+
'--shadow-inset-warning': `inset 0 0 0 2px ${withAlpha(neutral.light[55], '30')}`,
|
|
299
|
+
'--shadow-inset-error': `inset 0 0 0 2px ${withAlpha(neutral.light[55], '30')}`,
|
|
311
300
|
},
|
|
312
301
|
|
|
313
302
|
components: {
|
|
@@ -322,7 +311,8 @@ export const stoneTheme = defineTheme({
|
|
|
322
311
|
},
|
|
323
312
|
},
|
|
324
313
|
|
|
325
|
-
//
|
|
314
|
+
// Badges, banners, and field status messages share the categorical
|
|
315
|
+
// surfaces and foregrounds so each semantic state has one visual source.
|
|
326
316
|
badge: {
|
|
327
317
|
'variant:info': {
|
|
328
318
|
backgroundColor: 'var(--color-background-blue)',
|
|
@@ -346,10 +336,8 @@ export const stoneTheme = defineTheme({
|
|
|
346
336
|
},
|
|
347
337
|
},
|
|
348
338
|
|
|
349
|
-
//
|
|
350
|
-
//
|
|
351
|
-
// cascade. Redefine the muted token instead so StyleX's var() resolves
|
|
352
|
-
// to the categorical bg in our scope.
|
|
339
|
+
// Banner surface declarations live above the theme layer, so redirect the
|
|
340
|
+
// semantic variables here instead of attempting a losing direct fill.
|
|
353
341
|
banner: {
|
|
354
342
|
'status:info': {
|
|
355
343
|
'--color-accent-muted': 'var(--color-background-blue)',
|
|
@@ -377,44 +365,38 @@ export const stoneTheme = defineTheme({
|
|
|
377
365
|
},
|
|
378
366
|
},
|
|
379
367
|
|
|
380
|
-
//
|
|
381
|
-
// the
|
|
382
|
-
// Hexes from the preview Tonal Palettes ramp. accent (default) +
|
|
383
|
-
// indeterminate both route to blue for the in-progress / loading look.
|
|
368
|
+
// Progress fills use the same family as their matching status surface;
|
|
369
|
+
// the darker stop in dark mode keeps the channel visible on dark tracks.
|
|
384
370
|
'progress-bar-fill': {
|
|
385
371
|
'variant:accent': {
|
|
386
|
-
backgroundColor:
|
|
372
|
+
backgroundColor: lightDark(blue.light[90], blue.dark[70]),
|
|
387
373
|
},
|
|
388
374
|
'variant:success': {
|
|
389
|
-
backgroundColor:
|
|
375
|
+
backgroundColor: lightDark(green.light[90], green.dark[70]),
|
|
390
376
|
},
|
|
391
377
|
'variant:warning': {
|
|
392
|
-
backgroundColor:
|
|
378
|
+
backgroundColor: lightDark(yellow.light[90], yellow.dark[70]),
|
|
393
379
|
},
|
|
394
380
|
'variant:error': {
|
|
395
|
-
backgroundColor:
|
|
381
|
+
backgroundColor: lightDark(red.light[90], red.dark[70]),
|
|
396
382
|
},
|
|
397
383
|
},
|
|
398
384
|
|
|
399
|
-
//
|
|
400
|
-
// redirect to --color-skeleton so the channel stays visible.
|
|
385
|
+
// The default muted track is too close to Stone's body surface.
|
|
401
386
|
'progress-bar-track': {
|
|
402
387
|
base: {
|
|
403
388
|
backgroundColor: 'var(--color-skeleton)',
|
|
404
389
|
},
|
|
405
390
|
},
|
|
406
391
|
|
|
407
|
-
// Switch off-state track
|
|
408
|
-
// Redefine it inside the switch scope to --color-skeleton, matching
|
|
409
|
-
// the ProgressBar track. The on-state reads --color-accent (unaffected);
|
|
410
|
-
// disabled-off also picks up --color-skeleton for consistency.
|
|
392
|
+
// Match the Switch off-state track to the visible ProgressBar track.
|
|
411
393
|
switch: {
|
|
412
394
|
base: {
|
|
413
395
|
'--color-background-gray': 'var(--color-skeleton)',
|
|
414
396
|
},
|
|
415
397
|
},
|
|
416
398
|
|
|
417
|
-
// FieldStatus
|
|
399
|
+
// FieldStatus surfaces match the corresponding badge and banner family.
|
|
418
400
|
'field-status': {
|
|
419
401
|
'type:success': {
|
|
420
402
|
backgroundColor: 'var(--color-background-green)',
|
|
@@ -427,8 +409,7 @@ export const stoneTheme = defineTheme({
|
|
|
427
409
|
},
|
|
428
410
|
},
|
|
429
411
|
|
|
430
|
-
//
|
|
431
|
-
// same softer T60/T70 redirection. See INPUT_STATUS_VARS above.
|
|
412
|
+
// Every input status border and icon uses INPUT_STATUS_VARS above.
|
|
432
413
|
'text-input': INPUT_STATUS_VARS,
|
|
433
414
|
'text-area': INPUT_STATUS_VARS,
|
|
434
415
|
'number-input': INPUT_STATUS_VARS,
|
|
@@ -460,9 +441,11 @@ export const stoneTheme = defineTheme({
|
|
|
460
441
|
});
|
|
461
442
|
|
|
462
443
|
/**
|
|
463
|
-
*
|
|
464
|
-
*
|
|
465
|
-
*
|
|
444
|
+
* Frozen released compatibility palettes. These values preserve the public
|
|
445
|
+
* `stonePalettes` numeric stops, `hue`, and `chroma` for existing consumers;
|
|
446
|
+
* the maintained theme renders selected stops from
|
|
447
|
+
* `stonePalettes.generated.ts` instead. Components should consume semantic
|
|
448
|
+
* theme tokens, and charts should use the data-visualization color API.
|
|
466
449
|
*/
|
|
467
450
|
export const stonePalettes = {
|
|
468
451
|
neutral: {
|