open-ds 0.0.0-stage → 0.1.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 (201) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +66 -2
  3. package/assets/schemes/accessible-first.json +3093 -0
  4. package/assets/schemes/brand-expressive.json +3124 -0
  5. package/assets/schemes/content-first.json +3110 -0
  6. package/assets/schemes/dense-data.json +3489 -0
  7. package/assets/schemes/grammar.json +3903 -0
  8. package/assets/schemes/multi-brand.json +4359 -0
  9. package/assets/skills/open-ds/SKILL.md +50 -0
  10. package/assets/skills/open-ds-build/SKILL.md +19 -0
  11. package/assets/skills/open-ds-change/SKILL.md +19 -0
  12. package/assets/skills/open-ds-choose/SKILL.md +18 -0
  13. package/assets/skills/open-ds-review/SKILL.md +22 -0
  14. package/assets/skills/open-ds-write/SKILL.md +13 -0
  15. package/assets/stories/accordion.stories.tsx +46 -0
  16. package/assets/stories/alert-dialog.stories.tsx +65 -0
  17. package/assets/stories/alert.stories.tsx +44 -0
  18. package/assets/stories/aspect-ratio.stories.tsx +37 -0
  19. package/assets/stories/avatar.stories.tsx +42 -0
  20. package/assets/stories/badge.stories.tsx +39 -0
  21. package/assets/stories/breadcrumb.stories.tsx +54 -0
  22. package/assets/stories/button.stories.tsx +46 -0
  23. package/assets/stories/calendar.stories.tsx +30 -0
  24. package/assets/stories/card.stories.tsx +50 -0
  25. package/assets/stories/carousel.stories.tsx +64 -0
  26. package/assets/stories/chart.stories.tsx +61 -0
  27. package/assets/stories/checkbox.stories.tsx +29 -0
  28. package/assets/stories/collapsible.stories.tsx +39 -0
  29. package/assets/stories/combobox.stories.tsx +57 -0
  30. package/assets/stories/command.stories.tsx +60 -0
  31. package/assets/stories/context-menu.stories.tsx +55 -0
  32. package/assets/stories/data-table.stories.tsx +93 -0
  33. package/assets/stories/date-picker.stories.tsx +27 -0
  34. package/assets/stories/dialog.stories.tsx +70 -0
  35. package/assets/stories/drawer.stories.tsx +62 -0
  36. package/assets/stories/dropdown-menu.stories.tsx +65 -0
  37. package/assets/stories/empty.stories.tsx +39 -0
  38. package/assets/stories/field.stories.tsx +42 -0
  39. package/assets/stories/form.stories.tsx +56 -0
  40. package/assets/stories/input-group.stories.tsx +41 -0
  41. package/assets/stories/input-otp.stories.tsx +48 -0
  42. package/assets/stories/input.stories.tsx +32 -0
  43. package/assets/stories/kbd.stories.tsx +30 -0
  44. package/assets/stories/label.stories.tsx +26 -0
  45. package/assets/stories/native-select.stories.tsx +39 -0
  46. package/assets/stories/navigation-menu.stories.tsx +41 -0
  47. package/assets/stories/pagination.stories.tsx +61 -0
  48. package/assets/stories/popover.stories.tsx +37 -0
  49. package/assets/stories/progress.stories.tsx +30 -0
  50. package/assets/stories/radio-group.stories.tsx +45 -0
  51. package/assets/stories/resizable.stories.tsx +54 -0
  52. package/assets/stories/scroll-area.stories.tsx +47 -0
  53. package/assets/stories/select.stories.tsx +57 -0
  54. package/assets/stories/separator.stories.tsx +28 -0
  55. package/assets/stories/sheet.stories.tsx +46 -0
  56. package/assets/stories/sidebar.stories.tsx +62 -0
  57. package/assets/stories/skeleton.stories.tsx +27 -0
  58. package/assets/stories/slider.stories.tsx +44 -0
  59. package/assets/stories/spinner.stories.tsx +25 -0
  60. package/assets/stories/switch.stories.tsx +29 -0
  61. package/assets/stories/table.stories.tsx +97 -0
  62. package/assets/stories/tabs.stories.tsx +55 -0
  63. package/assets/stories/textarea.stories.tsx +28 -0
  64. package/assets/stories/toast.stories.tsx +30 -0
  65. package/assets/stories/toggle-group.stories.tsx +41 -0
  66. package/assets/stories/toggle.stories.tsx +20 -0
  67. package/assets/stories/tooltip.stories.tsx +49 -0
  68. package/assets/tokens/accessible-first/content.json +32 -0
  69. package/assets/tokens/accessible-first/dark.tokens.json +581 -0
  70. package/assets/tokens/accessible-first/light.tokens.json +581 -0
  71. package/assets/tokens/accessible-first/shadcn.css +21 -0
  72. package/assets/tokens/accessible-first/theme.css +101 -0
  73. package/assets/tokens/accessible-first/tokens.css +331 -0
  74. package/assets/tokens/accessible-first/tokens.json +1616 -0
  75. package/assets/tokens/accessible-first/tokens.scoped.css +333 -0
  76. package/assets/tokens/brand-expressive/content.json +32 -0
  77. package/assets/tokens/brand-expressive/dark.tokens.json +585 -0
  78. package/assets/tokens/brand-expressive/light.tokens.json +585 -0
  79. package/assets/tokens/brand-expressive/shadcn.css +21 -0
  80. package/assets/tokens/brand-expressive/theme.css +101 -0
  81. package/assets/tokens/brand-expressive/tokens.css +331 -0
  82. package/assets/tokens/brand-expressive/tokens.json +1651 -0
  83. package/assets/tokens/brand-expressive/tokens.scoped.css +333 -0
  84. package/assets/tokens/content-first/content.json +32 -0
  85. package/assets/tokens/content-first/dark.tokens.json +582 -0
  86. package/assets/tokens/content-first/light.tokens.json +582 -0
  87. package/assets/tokens/content-first/shadcn.css +21 -0
  88. package/assets/tokens/content-first/theme.css +101 -0
  89. package/assets/tokens/content-first/tokens.css +331 -0
  90. package/assets/tokens/content-first/tokens.json +1631 -0
  91. package/assets/tokens/content-first/tokens.scoped.css +333 -0
  92. package/assets/tokens/dense-data/content.json +32 -0
  93. package/assets/tokens/dense-data/dark.tokens.json +580 -0
  94. package/assets/tokens/dense-data/light.tokens.json +580 -0
  95. package/assets/tokens/dense-data/shadcn.css +21 -0
  96. package/assets/tokens/dense-data/theme.css +101 -0
  97. package/assets/tokens/dense-data/tokens.css +331 -0
  98. package/assets/tokens/dense-data/tokens.json +1623 -0
  99. package/assets/tokens/dense-data/tokens.scoped.css +333 -0
  100. package/assets/tokens/index.json +143 -0
  101. package/assets/tokens/multi-brand/aster-dark.tokens.json +625 -0
  102. package/assets/tokens/multi-brand/aster-light.tokens.json +625 -0
  103. package/assets/tokens/multi-brand/birch-dark.tokens.json +625 -0
  104. package/assets/tokens/multi-brand/birch-light.tokens.json +625 -0
  105. package/assets/tokens/multi-brand/content.json +32 -0
  106. package/assets/tokens/multi-brand/coral-dark.tokens.json +625 -0
  107. package/assets/tokens/multi-brand/coral-light.tokens.json +625 -0
  108. package/assets/tokens/multi-brand/shadcn.css +21 -0
  109. package/assets/tokens/multi-brand/theme.css +101 -0
  110. package/assets/tokens/multi-brand/tokens.css +1002 -0
  111. package/assets/tokens/multi-brand/tokens.json +1754 -0
  112. package/assets/tokens/multi-brand/tokens.scoped.css +1022 -0
  113. package/assets/tokens/shadcn-map.json +34 -0
  114. package/assets/ui/components/accordion.tsx +60 -0
  115. package/assets/ui/components/alert-dialog.tsx +171 -0
  116. package/assets/ui/components/alert.tsx +56 -0
  117. package/assets/ui/components/aspect-ratio.tsx +17 -0
  118. package/assets/ui/components/avatar.tsx +96 -0
  119. package/assets/ui/components/badge.tsx +36 -0
  120. package/assets/ui/components/breadcrumb.tsx +99 -0
  121. package/assets/ui/components/button.tsx +53 -0
  122. package/assets/ui/components/calendar.tsx +169 -0
  123. package/assets/ui/components/card.tsx +72 -0
  124. package/assets/ui/components/carousel.tsx +224 -0
  125. package/assets/ui/components/chart.tsx +315 -0
  126. package/assets/ui/components/checkbox.tsx +29 -0
  127. package/assets/ui/components/collapsible.tsx +25 -0
  128. package/assets/ui/components/combobox.tsx +275 -0
  129. package/assets/ui/components/command.tsx +145 -0
  130. package/assets/ui/components/context-menu.tsx +218 -0
  131. package/assets/ui/components/data-table.tsx +307 -0
  132. package/assets/ui/components/date-picker.tsx +79 -0
  133. package/assets/ui/components/dialog.tsx +68 -0
  134. package/assets/ui/components/drawer.tsx +115 -0
  135. package/assets/ui/components/dropdown-menu.tsx +58 -0
  136. package/assets/ui/components/empty.tsx +92 -0
  137. package/assets/ui/components/field.tsx +234 -0
  138. package/assets/ui/components/form.tsx +146 -0
  139. package/assets/ui/components/input-group.tsx +154 -0
  140. package/assets/ui/components/input-otp.tsx +75 -0
  141. package/assets/ui/components/input.tsx +25 -0
  142. package/assets/ui/components/kbd.tsx +30 -0
  143. package/assets/ui/components/label.tsx +22 -0
  144. package/assets/ui/components/native-select.tsx +59 -0
  145. package/assets/ui/components/navigation-menu.tsx +149 -0
  146. package/assets/ui/components/pagination.tsx +108 -0
  147. package/assets/ui/components/popover.tsx +61 -0
  148. package/assets/ui/components/progress.tsx +31 -0
  149. package/assets/ui/components/radio-group.tsx +40 -0
  150. package/assets/ui/components/resizable.tsx +54 -0
  151. package/assets/ui/components/scroll-area.tsx +55 -0
  152. package/assets/ui/components/select.tsx +81 -0
  153. package/assets/ui/components/separator.tsx +35 -0
  154. package/assets/ui/components/sheet.tsx +114 -0
  155. package/assets/ui/components/sidebar.tsx +685 -0
  156. package/assets/ui/components/skeleton.tsx +15 -0
  157. package/assets/ui/components/slider.tsx +70 -0
  158. package/assets/ui/components/spinner.tsx +16 -0
  159. package/assets/ui/components/switch.tsx +32 -0
  160. package/assets/ui/components/table.tsx +78 -0
  161. package/assets/ui/components/tabs.tsx +49 -0
  162. package/assets/ui/components/textarea.tsx +25 -0
  163. package/assets/ui/components/toast.tsx +54 -0
  164. package/assets/ui/components/toggle-group.tsx +88 -0
  165. package/assets/ui/components/toggle.tsx +48 -0
  166. package/assets/ui/components/tooltip.tsx +34 -0
  167. package/assets/ui/lib/use-mobile.ts +20 -0
  168. package/assets/ui/lib/utils.ts +7 -0
  169. package/assets/ui/styles.css +27 -0
  170. package/bin/open-ds.js +6 -0
  171. package/package.json +56 -4
  172. package/src/agents.mjs +150 -0
  173. package/src/cli.mjs +445 -0
  174. package/src/components.mjs +69 -0
  175. package/src/context.mjs +143 -0
  176. package/src/create.mjs +377 -0
  177. package/src/docs.mjs +570 -0
  178. package/src/guidance.mjs +63 -0
  179. package/src/index.mjs +20 -0
  180. package/src/mcp.mjs +660 -0
  181. package/src/readmes.mjs +106 -0
  182. package/src/schemes.mjs +188 -0
  183. package/src/tokens.mjs +127 -0
  184. package/templates/project/.github/workflows/ci.yml +15 -0
  185. package/templates/project/.storybook/component-docs.mdx +26 -0
  186. package/templates/project/.storybook/main.ts +17 -0
  187. package/templates/project/.storybook/manager-head.html +3 -0
  188. package/templates/project/.storybook/manager.ts +37 -0
  189. package/templates/project/.storybook/preview-head.html +3 -0
  190. package/templates/project/.storybook/preview.tsx +82 -0
  191. package/templates/project/docs/docusaurus.config.ts +64 -0
  192. package/templates/project/docs/sidebars.ts +8 -0
  193. package/templates/project/docs/src/css/custom.css +275 -0
  194. package/templates/project/gitignore +6 -0
  195. package/templates/project/src/styles/index.css +16 -0
  196. package/templates/project/src/vite-env.d.ts +7 -0
  197. package/templates/project/stories/docs-blocks.tsx +190 -0
  198. package/templates/project/stories/samples.tsx +102 -0
  199. package/templates/project/stories/usage.tsx +31 -0
  200. package/templates/project/tokens/build.mjs +468 -0
  201. package/templates/project/tsconfig.json +15 -0
@@ -0,0 +1,1754 @@
1
+ {
2
+ "color": {
3
+ "$description": "Colour options: raw hue ramps. Each hue has a light ramp and a dark ramp (the same steps tuned for dark backgrounds). Steps only: each theme decides its own base (@). Themes pick from these; components never read them.",
4
+ "slate": {
5
+ "$type": "color",
6
+ "$description": "The slate hue: a light ramp, a dark ramp and its base value.",
7
+ "light": {
8
+ "0": {
9
+ "$value": "#FFFFFF"
10
+ },
11
+ "50": {
12
+ "$value": "#F8FAFC"
13
+ },
14
+ "100": {
15
+ "$value": "#F1F5F9"
16
+ },
17
+ "200": {
18
+ "$value": "#E2E8F0"
19
+ },
20
+ "300": {
21
+ "$value": "#CBD5E1"
22
+ },
23
+ "400": {
24
+ "$value": "#96A3B5",
25
+ "$description": "Derived: the OKLab midpoint of 300 and 500. Added so muted text can pass 4.5:1 and stay quieter than secondary."
26
+ },
27
+ "500": {
28
+ "$value": "#64748B"
29
+ },
30
+ "600": {
31
+ "$value": "#4B5A6F",
32
+ "$description": "Derived: the OKLab midpoint of 500 and 700. Added so muted text can pass 4.5:1 and stay quieter than secondary."
33
+ },
34
+ "700": {
35
+ "$value": "#334155"
36
+ },
37
+ "800": {
38
+ "$value": "#1E293B"
39
+ },
40
+ "900": {
41
+ "$value": "#0F172A"
42
+ },
43
+ "950": {
44
+ "$value": "#020617"
45
+ }
46
+ },
47
+ "dark": {
48
+ "0": {
49
+ "$value": "#020617"
50
+ },
51
+ "50": {
52
+ "$value": "#0F172A"
53
+ },
54
+ "100": {
55
+ "$value": "#1E293B"
56
+ },
57
+ "200": {
58
+ "$value": "#334155"
59
+ },
60
+ "300": {
61
+ "$value": "#64748B"
62
+ },
63
+ "400": {
64
+ "$value": "#96A3B5",
65
+ "$description": "Derived: the OKLab midpoint of 300 and 500. Added so muted text can pass 4.5:1 and stay quieter than secondary."
66
+ },
67
+ "500": {
68
+ "$value": "#CBD5E1"
69
+ },
70
+ "600": {
71
+ "$value": "#D6DEE8",
72
+ "$description": "Derived: the OKLab midpoint of 500 and 700. Added so muted text can pass 4.5:1 and stay quieter than secondary."
73
+ },
74
+ "700": {
75
+ "$value": "#E2E8F0"
76
+ },
77
+ "800": {
78
+ "$value": "#F1F5F9"
79
+ },
80
+ "900": {
81
+ "$value": "#F8FAFC"
82
+ },
83
+ "950": {
84
+ "$value": "#FFFFFF"
85
+ }
86
+ }
87
+ },
88
+ "teal": {
89
+ "$type": "color",
90
+ "$description": "The teal hue: a light ramp, a dark ramp and its base value.",
91
+ "light": {
92
+ "100": {
93
+ "$value": "#E0F2F1"
94
+ },
95
+ "300": {
96
+ "$value": "#7FCFC6"
97
+ },
98
+ "500": {
99
+ "$value": "#14918A"
100
+ },
101
+ "600": {
102
+ "$value": "#0F766E"
103
+ },
104
+ "700": {
105
+ "$value": "#0B5B55"
106
+ },
107
+ "800": {
108
+ "$value": "#08423E"
109
+ }
110
+ },
111
+ "dark": {
112
+ "100": {
113
+ "$value": "#08423E"
114
+ },
115
+ "300": {
116
+ "$value": "#0B5B55"
117
+ },
118
+ "500": {
119
+ "$value": "#0F766E"
120
+ },
121
+ "600": {
122
+ "$value": "#14918A"
123
+ },
124
+ "700": {
125
+ "$value": "#7FCFC6"
126
+ },
127
+ "800": {
128
+ "$value": "#E0F2F1"
129
+ }
130
+ }
131
+ },
132
+ "purple": {
133
+ "$type": "color",
134
+ "$description": "The purple hue: a light ramp, a dark ramp and its base value.",
135
+ "light": {
136
+ "100": {
137
+ "$value": "#EDE7FE"
138
+ },
139
+ "300": {
140
+ "$value": "#B79DF7"
141
+ },
142
+ "500": {
143
+ "$value": "#7C4DEB"
144
+ },
145
+ "600": {
146
+ "$value": "#6D28D9"
147
+ },
148
+ "700": {
149
+ "$value": "#5520AA"
150
+ },
151
+ "800": {
152
+ "$value": "#3E177D"
153
+ }
154
+ },
155
+ "dark": {
156
+ "100": {
157
+ "$value": "#3E177D"
158
+ },
159
+ "300": {
160
+ "$value": "#5520AA"
161
+ },
162
+ "500": {
163
+ "$value": "#6D28D9"
164
+ },
165
+ "600": {
166
+ "$value": "#7C4DEB"
167
+ },
168
+ "700": {
169
+ "$value": "#B79DF7"
170
+ },
171
+ "800": {
172
+ "$value": "#EDE7FE"
173
+ }
174
+ }
175
+ },
176
+ "orange": {
177
+ "$type": "color",
178
+ "$description": "The orange hue: a light ramp, a dark ramp and its base value.",
179
+ "light": {
180
+ "100": {
181
+ "$value": "#FFEDE5"
182
+ },
183
+ "300": {
184
+ "$value": "#F7A67F"
185
+ },
186
+ "500": {
187
+ "$value": "#E2571D"
188
+ },
189
+ "600": {
190
+ "$value": "#C2410C"
191
+ },
192
+ "700": {
193
+ "$value": "#9A330A"
194
+ },
195
+ "800": {
196
+ "$value": "#732607"
197
+ }
198
+ },
199
+ "dark": {
200
+ "100": {
201
+ "$value": "#732607"
202
+ },
203
+ "300": {
204
+ "$value": "#9A330A"
205
+ },
206
+ "500": {
207
+ "$value": "#C2410C"
208
+ },
209
+ "600": {
210
+ "$value": "#E2571D"
211
+ },
212
+ "700": {
213
+ "$value": "#F7A67F"
214
+ },
215
+ "800": {
216
+ "$value": "#FFEDE5"
217
+ }
218
+ }
219
+ },
220
+ "green": {
221
+ "$type": "color",
222
+ "$description": "The green hue: a light ramp, a dark ramp and its base value.",
223
+ "light": {
224
+ "100": {
225
+ "$value": "#E3F4EA"
226
+ },
227
+ "300": {
228
+ "$value": "#5CC283"
229
+ },
230
+ "700": {
231
+ "$value": "#1F7A3A"
232
+ },
233
+ "900": {
234
+ "$value": "#123322"
235
+ }
236
+ },
237
+ "dark": {
238
+ "100": {
239
+ "$value": "#123322"
240
+ },
241
+ "300": {
242
+ "$value": "#1F7A3A"
243
+ },
244
+ "700": {
245
+ "$value": "#5CC283"
246
+ },
247
+ "900": {
248
+ "$value": "#E3F4EA"
249
+ }
250
+ }
251
+ },
252
+ "amber": {
253
+ "$type": "color",
254
+ "$description": "The amber hue: a light ramp, a dark ramp and its base value.",
255
+ "light": {
256
+ "100": {
257
+ "$value": "#FFF3D6"
258
+ },
259
+ "300": {
260
+ "$value": "#F2B84B"
261
+ },
262
+ "700": {
263
+ "$value": "#8A5600"
264
+ },
265
+ "900": {
266
+ "$value": "#3A2A05"
267
+ }
268
+ },
269
+ "dark": {
270
+ "100": {
271
+ "$value": "#3A2A05"
272
+ },
273
+ "300": {
274
+ "$value": "#8A5600"
275
+ },
276
+ "700": {
277
+ "$value": "#F2B84B"
278
+ },
279
+ "900": {
280
+ "$value": "#FFF3D6"
281
+ }
282
+ }
283
+ },
284
+ "red": {
285
+ "$type": "color",
286
+ "$description": "The red hue: a light ramp, a dark ramp and its base value.",
287
+ "light": {
288
+ "100": {
289
+ "$value": "#FDE7E7"
290
+ },
291
+ "300": {
292
+ "$value": "#F28B8B"
293
+ },
294
+ "700": {
295
+ "$value": "#C42B2B"
296
+ },
297
+ "900": {
298
+ "$value": "#3D1414"
299
+ }
300
+ },
301
+ "dark": {
302
+ "100": {
303
+ "$value": "#3D1414"
304
+ },
305
+ "300": {
306
+ "$value": "#C42B2B"
307
+ },
308
+ "700": {
309
+ "$value": "#F28B8B"
310
+ },
311
+ "900": {
312
+ "$value": "#FDE7E7"
313
+ }
314
+ }
315
+ },
316
+ "black": {
317
+ "$type": "color",
318
+ "$description": "See-through black for scrims behind dialogs, light and dark.",
319
+ "light": {
320
+ "scrim": {
321
+ "$value": "#0000008C"
322
+ }
323
+ },
324
+ "dark": {
325
+ "scrim": {
326
+ "$value": "#000000B3"
327
+ }
328
+ }
329
+ },
330
+ "blue": {
331
+ "$type": "color",
332
+ "$description": "Blue ramp for the info status and categories. Same values as the accessible-first blue ramp: borrowed, not invented.",
333
+ "light": {
334
+ "100": {
335
+ "$value": "#E1ECFF"
336
+ },
337
+ "300": {
338
+ "$value": "#8AB4F8"
339
+ },
340
+ "500": {
341
+ "$value": "#1A5DD0"
342
+ },
343
+ "600": {
344
+ "$value": "#0B4FC0"
345
+ },
346
+ "700": {
347
+ "$value": "#083C93"
348
+ },
349
+ "800": {
350
+ "$value": "#062C6E"
351
+ }
352
+ },
353
+ "dark": {
354
+ "100": {
355
+ "$value": "#062C6E"
356
+ },
357
+ "300": {
358
+ "$value": "#083C93"
359
+ },
360
+ "500": {
361
+ "$value": "#0B4FC0"
362
+ },
363
+ "600": {
364
+ "$value": "#1A5DD0"
365
+ },
366
+ "700": {
367
+ "$value": "#8AB4F8"
368
+ },
369
+ "800": {
370
+ "$value": "#E1ECFF"
371
+ }
372
+ }
373
+ },
374
+ "surface": {
375
+ "canvas": {
376
+ "$type": "color",
377
+ "$description": "The page background behind everything.",
378
+ "$value": "{aster.theme.light.color.surface.canvas}"
379
+ },
380
+ "default": {
381
+ "$type": "color",
382
+ "$description": "The base fill for content.",
383
+ "$value": "{aster.theme.light.color.surface.default}"
384
+ },
385
+ "raised": {
386
+ "$type": "color",
387
+ "$description": "Fills that float above content.",
388
+ "$value": "{aster.theme.light.color.surface.raised}"
389
+ },
390
+ "sunken": {
391
+ "$type": "color",
392
+ "$description": "A recessed fill, a step below content.",
393
+ "$value": "{aster.theme.light.color.surface.sunken}"
394
+ },
395
+ "selected": {
396
+ "$type": "color",
397
+ "$description": "The fill of a selected or current item.",
398
+ "$value": "{aster.theme.light.color.surface.selected}"
399
+ },
400
+ "inverse": {
401
+ "$type": "color",
402
+ "$description": "A reversed fill for small, short-lived messages.",
403
+ "$value": "{aster.theme.light.color.surface.inverse}"
404
+ },
405
+ "scrim": {
406
+ "$type": "color",
407
+ "$description": "The see-through layer behind a modal.",
408
+ "$value": "{aster.theme.light.color.surface.scrim}"
409
+ }
410
+ },
411
+ "text": {
412
+ "primary": {
413
+ "$type": "color",
414
+ "$description": "Body text and headings.",
415
+ "$value": "{aster.theme.light.color.text.primary}"
416
+ },
417
+ "secondary": {
418
+ "$type": "color",
419
+ "$description": "Supporting text.",
420
+ "$value": "{aster.theme.light.color.text.secondary}"
421
+ },
422
+ "muted": {
423
+ "$type": "color",
424
+ "$description": "The quietest text.",
425
+ "$value": "{aster.theme.light.color.text.muted}"
426
+ },
427
+ "inverse": {
428
+ "$type": "color",
429
+ "$description": "Text on an inverse fill.",
430
+ "$value": "{aster.theme.light.color.text.inverse}"
431
+ },
432
+ "on-action": {
433
+ "$type": "color",
434
+ "$description": "Text and icons on the main action's fill.",
435
+ "$value": "{aster.theme.light.color.text.on-action}"
436
+ },
437
+ "link": {
438
+ "$type": "color",
439
+ "$description": "Links in running text.",
440
+ "$value": "{aster.theme.light.color.text.link}"
441
+ }
442
+ },
443
+ "border": {
444
+ "default": {
445
+ "$type": "color",
446
+ "$description": "Quiet edges and dividers. Decorative, so it has no contrast minimum.",
447
+ "$value": "{aster.theme.light.color.border.default}"
448
+ },
449
+ "strong": {
450
+ "$type": "color",
451
+ "$description": "The edge of a control people must find.",
452
+ "$value": "{aster.theme.light.color.border.strong}"
453
+ },
454
+ "focus": {
455
+ "$type": "color",
456
+ "$description": "The focus ring.",
457
+ "$value": "{aster.theme.light.color.border.focus}"
458
+ }
459
+ },
460
+ "action": {
461
+ "primary": {
462
+ "@": {
463
+ "$type": "color",
464
+ "$description": "The one main action in a view.",
465
+ "$value": "{aster.theme.light.color.action.primary.@}"
466
+ },
467
+ "hover": {
468
+ "$type": "color",
469
+ "$description": "The main action under the pointer.",
470
+ "$value": "{aster.theme.light.color.action.primary.hover}"
471
+ }
472
+ },
473
+ "secondary": {
474
+ "@": {
475
+ "$type": "color",
476
+ "$description": "The fill of other actions.",
477
+ "$value": "{aster.theme.light.color.action.secondary.@}"
478
+ },
479
+ "hover": {
480
+ "$type": "color",
481
+ "$description": "Other actions under the pointer.",
482
+ "$value": "{aster.theme.light.color.action.secondary.hover}"
483
+ }
484
+ }
485
+ },
486
+ "status": {
487
+ "info": {
488
+ "@": {
489
+ "$type": "color",
490
+ "$description": "Neutral news: something changed and no action is needed. The lowest level of the urgency order.",
491
+ "$value": "{aster.theme.light.color.status.info.@}"
492
+ },
493
+ "subtle": {
494
+ "$type": "color",
495
+ "$description": "The fill behind info status.",
496
+ "$value": "{aster.theme.light.color.status.info.subtle}"
497
+ }
498
+ },
499
+ "success": {
500
+ "@": {
501
+ "$type": "color",
502
+ "$description": "Confirmation that something worked. It sits outside the urgency order.",
503
+ "$value": "{aster.theme.light.color.status.success.@}"
504
+ },
505
+ "subtle": {
506
+ "$type": "color",
507
+ "$description": "The fill behind success status.",
508
+ "$value": "{aster.theme.light.color.status.success.subtle}"
509
+ }
510
+ },
511
+ "warning": {
512
+ "@": {
513
+ "$type": "color",
514
+ "$description": "Caution: something may go wrong or needs a check, and it can be fixed.",
515
+ "$value": "{aster.theme.light.color.status.warning.@}"
516
+ },
517
+ "subtle": {
518
+ "$type": "color",
519
+ "$description": "The fill behind warning status.",
520
+ "$value": "{aster.theme.light.color.status.warning.subtle}"
521
+ }
522
+ },
523
+ "danger": {
524
+ "@": {
525
+ "$type": "color",
526
+ "$description": "Real risk: errors, failed checks, actions that cannot be undone. The top of the urgency order. Overuse wears it out.",
527
+ "$value": "{aster.theme.light.color.status.danger.@}"
528
+ },
529
+ "subtle": {
530
+ "$type": "color",
531
+ "$description": "The fill behind danger status.",
532
+ "$value": "{aster.theme.light.color.status.danger.subtle}"
533
+ }
534
+ }
535
+ },
536
+ "category": {
537
+ "1": {
538
+ "@": {
539
+ "$type": "color",
540
+ "$description": "Category 1: tells one item or series from another. It carries no meaning.",
541
+ "$value": "{aster.theme.light.color.category.1.@}"
542
+ },
543
+ "subtle": {
544
+ "$type": "color",
545
+ "$description": "Category 1: the fill of a tag.",
546
+ "$value": "{aster.theme.light.color.category.1.subtle}"
547
+ }
548
+ },
549
+ "2": {
550
+ "@": {
551
+ "$type": "color",
552
+ "$description": "Category 2: tells one item or series from another. It carries no meaning.",
553
+ "$value": "{aster.theme.light.color.category.2.@}"
554
+ },
555
+ "subtle": {
556
+ "$type": "color",
557
+ "$description": "Category 2: the fill of a tag.",
558
+ "$value": "{aster.theme.light.color.category.2.subtle}"
559
+ }
560
+ },
561
+ "3": {
562
+ "@": {
563
+ "$type": "color",
564
+ "$description": "Category 3: tells one item or series from another. It carries no meaning.",
565
+ "$value": "{aster.theme.light.color.category.3.@}"
566
+ },
567
+ "subtle": {
568
+ "$type": "color",
569
+ "$description": "Category 3: the fill of a tag.",
570
+ "$value": "{aster.theme.light.color.category.3.subtle}"
571
+ }
572
+ },
573
+ "4": {
574
+ "@": {
575
+ "$type": "color",
576
+ "$description": "Category 4: tells one item or series from another. It carries no meaning.",
577
+ "$value": "{aster.theme.light.color.category.4.@}"
578
+ },
579
+ "subtle": {
580
+ "$type": "color",
581
+ "$description": "Category 4: the fill of a tag.",
582
+ "$value": "{aster.theme.light.color.category.4.subtle}"
583
+ }
584
+ },
585
+ "5": {
586
+ "@": {
587
+ "$type": "color",
588
+ "$description": "Category 5: tells one item or series from another. It carries no meaning.",
589
+ "$value": "{aster.theme.light.color.category.5.@}"
590
+ },
591
+ "subtle": {
592
+ "$type": "color",
593
+ "$description": "Category 5: the fill of a tag.",
594
+ "$value": "{aster.theme.light.color.category.5.subtle}"
595
+ }
596
+ },
597
+ "$description": "Identity colours for tags, labels and chart series. They tell items apart and carry no meaning."
598
+ },
599
+ "disabled": {
600
+ "$description": "The shared look of controls that cannot be used right now.",
601
+ "text": {
602
+ "$type": "color",
603
+ "$description": "Text and icons of a control that cannot be used right now.",
604
+ "$value": "{aster.theme.light.color.disabled.text}"
605
+ },
606
+ "surface": {
607
+ "$type": "color",
608
+ "$description": "The fill of a control that cannot be used right now.",
609
+ "$value": "{aster.theme.light.color.disabled.surface}"
610
+ },
611
+ "border": {
612
+ "$type": "color",
613
+ "$description": "The edge of a control that cannot be used right now.",
614
+ "$value": "{aster.theme.light.color.disabled.border}"
615
+ }
616
+ }
617
+ },
618
+ "space": {
619
+ "8": {
620
+ "$type": "dimension",
621
+ "$value": "0.5rem"
622
+ },
623
+ "12": {
624
+ "$type": "dimension",
625
+ "$value": "0.75rem"
626
+ },
627
+ "16": {
628
+ "$type": "dimension",
629
+ "$value": "1rem"
630
+ },
631
+ "24": {
632
+ "$type": "dimension",
633
+ "$value": "1.5rem"
634
+ },
635
+ "48": {
636
+ "$type": "dimension",
637
+ "$value": "3rem"
638
+ },
639
+ "$description": "Space options. Names give the size in pixels at the default text size; values are rem.",
640
+ "gap": {
641
+ "tight": {
642
+ "$type": "dimension",
643
+ "$value": "{space.8}",
644
+ "$description": "Between things that belong together."
645
+ },
646
+ "default": {
647
+ "$type": "dimension",
648
+ "$value": "{space.12}",
649
+ "$description": "Between items in one group."
650
+ },
651
+ "group": {
652
+ "$type": "dimension",
653
+ "$value": "{space.24}",
654
+ "$description": "Between groups."
655
+ },
656
+ "section": {
657
+ "$type": "dimension",
658
+ "$value": "{space.48}",
659
+ "$description": "Between page sections."
660
+ }
661
+ },
662
+ "inset": {
663
+ "control-x": {
664
+ "$type": "dimension",
665
+ "$value": "{space.16}",
666
+ "$description": "Horizontal padding inside controls."
667
+ },
668
+ "container": {
669
+ "$type": "dimension",
670
+ "$value": "{space.24}",
671
+ "$description": "Padding inside cards and dialogs."
672
+ },
673
+ "cell-x": {
674
+ "$type": "dimension",
675
+ "$value": "{space.16}",
676
+ "$description": "Horizontal padding inside table cells."
677
+ }
678
+ }
679
+ },
680
+ "size": {
681
+ "16": {
682
+ "$type": "dimension",
683
+ "$value": "1rem"
684
+ },
685
+ "20": {
686
+ "$type": "dimension",
687
+ "$value": "1.25rem"
688
+ },
689
+ "24": {
690
+ "$type": "dimension",
691
+ "$value": "1.5rem"
692
+ },
693
+ "36": {
694
+ "$type": "dimension",
695
+ "$value": "2.25rem"
696
+ },
697
+ "44": {
698
+ "$type": "dimension",
699
+ "$value": "2.75rem"
700
+ },
701
+ "48": {
702
+ "$type": "dimension",
703
+ "$value": "3rem"
704
+ },
705
+ "$description": "Size options for controls, rows and icons.",
706
+ "control": {
707
+ "default": {
708
+ "$type": "dimension",
709
+ "$value": "{size.44}",
710
+ "$description": "Height of buttons and inputs, and the smallest target."
711
+ },
712
+ "compact": {
713
+ "$type": "dimension",
714
+ "$value": "{size.36}",
715
+ "$description": "Height of compact controls."
716
+ }
717
+ },
718
+ "row": {
719
+ "$type": "dimension",
720
+ "$value": "{size.48}",
721
+ "$description": "Height of one table row."
722
+ },
723
+ "icon": {
724
+ "$type": "dimension",
725
+ "$value": "{size.16}",
726
+ "$description": "Icon size next to text."
727
+ }
728
+ },
729
+ "radius": {
730
+ "0": {
731
+ "$type": "dimension",
732
+ "$value": "0rem"
733
+ },
734
+ "4": {
735
+ "$type": "dimension",
736
+ "$value": "0.25rem"
737
+ },
738
+ "8": {
739
+ "$type": "dimension",
740
+ "$value": "0.5rem"
741
+ },
742
+ "12": {
743
+ "$type": "dimension",
744
+ "$value": "0.75rem"
745
+ },
746
+ "16": {
747
+ "$type": "dimension",
748
+ "$value": "1rem"
749
+ },
750
+ "20": {
751
+ "$type": "dimension",
752
+ "$value": "1.25rem"
753
+ },
754
+ "999": {
755
+ "$type": "dimension",
756
+ "$value": "9999px"
757
+ },
758
+ "$description": "Corner options.",
759
+ "full": {
760
+ "$type": "dimension",
761
+ "$value": "9999px",
762
+ "$description": "Fully round."
763
+ },
764
+ "control": {
765
+ "$type": "dimension",
766
+ "$value": "{aster.theme.base.radius.control}",
767
+ "$description": "Corner of buttons and inputs."
768
+ },
769
+ "badge": {
770
+ "$type": "dimension",
771
+ "$value": "{aster.theme.base.radius.badge}",
772
+ "$description": "Corner of badges and checkboxes."
773
+ },
774
+ "container": {
775
+ "$type": "dimension",
776
+ "$value": "{aster.theme.base.radius.container}",
777
+ "$description": "Corner of cards, menus and dialogs."
778
+ },
779
+ "round": {
780
+ "$type": "dimension",
781
+ "$value": "{radius.full}",
782
+ "$description": "Fully round: avatars and dots."
783
+ }
784
+ },
785
+ "border-width": {
786
+ "1": {
787
+ "$type": "dimension",
788
+ "$value": "1px"
789
+ },
790
+ "2": {
791
+ "$type": "dimension",
792
+ "$value": "2px"
793
+ },
794
+ "$description": "Border width options.",
795
+ "default": {
796
+ "$type": "dimension",
797
+ "$value": "{border-width.1}",
798
+ "$description": "Every border."
799
+ },
800
+ "focus": {
801
+ "$type": "dimension",
802
+ "$value": "{border-width.2}",
803
+ "$description": "The focus ring."
804
+ }
805
+ },
806
+ "font": {
807
+ "size": {
808
+ "13": {
809
+ "$type": "dimension",
810
+ "$value": "0.8125rem"
811
+ },
812
+ "14": {
813
+ "$type": "dimension",
814
+ "$value": "0.875rem"
815
+ },
816
+ "16": {
817
+ "$type": "dimension",
818
+ "$value": "1rem"
819
+ },
820
+ "20": {
821
+ "$type": "dimension",
822
+ "$value": "1.25rem"
823
+ },
824
+ "24": {
825
+ "$type": "dimension",
826
+ "$value": "1.5rem"
827
+ },
828
+ "32": {
829
+ "$type": "dimension",
830
+ "$value": "2rem"
831
+ },
832
+ "$description": "Type size options. Names are pixels at the default text size; values are rem, so text grows with the user's setting."
833
+ },
834
+ "weight": {
835
+ "400": {
836
+ "$type": "fontWeight",
837
+ "$value": 400
838
+ },
839
+ "600": {
840
+ "$type": "fontWeight",
841
+ "$value": 600
842
+ },
843
+ "700": {
844
+ "$type": "fontWeight",
845
+ "$value": 700
846
+ }
847
+ },
848
+ "line-height": {
849
+ "1_2": {
850
+ "$type": "number",
851
+ "$value": 1.2,
852
+ "$description": "A ratio of the text size."
853
+ },
854
+ "1_25": {
855
+ "$type": "number",
856
+ "$value": 1.25,
857
+ "$description": "A ratio of the text size."
858
+ },
859
+ "1_3": {
860
+ "$type": "number",
861
+ "$value": 1.3,
862
+ "$description": "A ratio of the text size."
863
+ },
864
+ "1_4": {
865
+ "$type": "number",
866
+ "$value": 1.4,
867
+ "$description": "A ratio of the text size."
868
+ },
869
+ "1_5": {
870
+ "$type": "number",
871
+ "$value": 1.5,
872
+ "$description": "A ratio of the text size."
873
+ }
874
+ },
875
+ "family": {
876
+ "$description": "Font family options. Each brand's theme picks its display, body, interface and data fonts from these.",
877
+ "inter": {
878
+ "$type": "fontFamily",
879
+ "$value": "Inter, system-ui, sans-serif"
880
+ },
881
+ "ibm-plex-mono": {
882
+ "$type": "fontFamily",
883
+ "$value": "\"IBM Plex Mono\", ui-monospace, monospace"
884
+ },
885
+ "plus-jakarta-sans": {
886
+ "$type": "fontFamily",
887
+ "$value": "\"Plus Jakarta Sans\", system-ui, sans-serif"
888
+ },
889
+ "poppins": {
890
+ "$type": "fontFamily",
891
+ "$value": "Poppins, system-ui, sans-serif"
892
+ }
893
+ }
894
+ },
895
+ "duration": {
896
+ "fast": {
897
+ "$type": "duration",
898
+ "$value": "120ms",
899
+ "$description": "Fast: the usual convention for feedback, about 120ms."
900
+ },
901
+ "moderate": {
902
+ "$type": "duration",
903
+ "$value": "200ms",
904
+ "$description": "Moderate: a calm, easy-to-follow speed, about 200ms."
905
+ },
906
+ "relaxed": {
907
+ "$type": "duration",
908
+ "$value": "320ms",
909
+ "$description": "Relaxed: a slower, springy speed for expressive motion, about 320ms."
910
+ }
911
+ },
912
+ "easing": {
913
+ "standard": {
914
+ "$type": "cubicBezier",
915
+ "$value": [
916
+ 0.2,
917
+ 0,
918
+ 0,
919
+ 1
920
+ ],
921
+ "$description": "The easing for feedback transitions."
922
+ }
923
+ },
924
+ "opacity": {
925
+ "40": {
926
+ "$type": "number",
927
+ "$value": 0.4,
928
+ "$description": "An opacity option."
929
+ },
930
+ "disabled": {
931
+ "$type": "number",
932
+ "$value": "{opacity.40}",
933
+ "$description": "Disabled controls."
934
+ }
935
+ },
936
+ "shadow": {
937
+ "$description": "Raw shadows. Elevation semantics point at these.",
938
+ "card": {
939
+ "$type": "shadow",
940
+ "$value": {
941
+ "color": "#0F172A14",
942
+ "offsetX": "0px",
943
+ "offsetY": "2px",
944
+ "blur": "8px",
945
+ "spread": "0px"
946
+ },
947
+ "$description": "Raw shadow for card in light mode."
948
+ },
949
+ "overlay": {
950
+ "$type": "shadow",
951
+ "$value": {
952
+ "color": "#0F172A29",
953
+ "offsetX": "0px",
954
+ "offsetY": "12px",
955
+ "blur": "32px",
956
+ "spread": "0px"
957
+ },
958
+ "$description": "Raw shadow for overlay in light mode."
959
+ },
960
+ "card-dark": {
961
+ "$type": "shadow",
962
+ "$value": {
963
+ "color": "#00000066",
964
+ "offsetX": "0px",
965
+ "offsetY": "2px",
966
+ "blur": "8px",
967
+ "spread": "0px"
968
+ },
969
+ "$description": "Raw shadow for card in dark mode."
970
+ },
971
+ "overlay-dark": {
972
+ "$type": "shadow",
973
+ "$value": {
974
+ "color": "#00000080",
975
+ "offsetX": "0px",
976
+ "offsetY": "12px",
977
+ "blur": "32px",
978
+ "spread": "0px"
979
+ },
980
+ "$description": "Raw shadow for overlay in dark mode."
981
+ }
982
+ },
983
+ "aster": {
984
+ "theme": {
985
+ "base": {
986
+ "radius": {
987
+ "control": {
988
+ "$type": "dimension",
989
+ "$value": "{radius.4}"
990
+ },
991
+ "badge": {
992
+ "$type": "dimension",
993
+ "$value": "{radius.4}"
994
+ },
995
+ "container": {
996
+ "$type": "dimension",
997
+ "$value": "{radius.8}"
998
+ }
999
+ },
1000
+ "type": {
1001
+ "display": {
1002
+ "font-family": {
1003
+ "$type": "fontFamily",
1004
+ "$value": "{font.family.inter}"
1005
+ }
1006
+ },
1007
+ "title": {
1008
+ "font-family": {
1009
+ "$type": "fontFamily",
1010
+ "$value": "{font.family.inter}"
1011
+ }
1012
+ },
1013
+ "heading": {
1014
+ "font-family": {
1015
+ "$type": "fontFamily",
1016
+ "$value": "{font.family.inter}"
1017
+ }
1018
+ },
1019
+ "body": {
1020
+ "font-family": {
1021
+ "$type": "fontFamily",
1022
+ "$value": "{font.family.inter}"
1023
+ }
1024
+ },
1025
+ "label": {
1026
+ "font-family": {
1027
+ "$type": "fontFamily",
1028
+ "$value": "{font.family.inter}"
1029
+ }
1030
+ },
1031
+ "caption": {
1032
+ "font-family": {
1033
+ "$type": "fontFamily",
1034
+ "$value": "{font.family.inter}"
1035
+ }
1036
+ },
1037
+ "data": {
1038
+ "font-family": {
1039
+ "$type": "fontFamily",
1040
+ "$value": "{font.family.inter}"
1041
+ }
1042
+ }
1043
+ }
1044
+ },
1045
+ "light": {
1046
+ "color": {
1047
+ "surface": {
1048
+ "canvas": {
1049
+ "$type": "color",
1050
+ "$value": "{color.slate.light.50}"
1051
+ },
1052
+ "default": {
1053
+ "$type": "color",
1054
+ "$value": "{color.slate.light.0}"
1055
+ },
1056
+ "raised": {
1057
+ "$type": "color",
1058
+ "$value": "{color.slate.light.0}"
1059
+ },
1060
+ "sunken": {
1061
+ "$type": "color",
1062
+ "$value": "{color.slate.light.100}"
1063
+ },
1064
+ "selected": {
1065
+ "$type": "color",
1066
+ "$value": "{color.teal.light.100}"
1067
+ },
1068
+ "inverse": {
1069
+ "$type": "color",
1070
+ "$value": "{color.slate.light.900}"
1071
+ },
1072
+ "scrim": {
1073
+ "$type": "color",
1074
+ "$value": "{color.black.light.scrim}"
1075
+ }
1076
+ },
1077
+ "text": {
1078
+ "primary": {
1079
+ "$type": "color",
1080
+ "$value": "{color.slate.light.900}"
1081
+ },
1082
+ "secondary": {
1083
+ "$type": "color",
1084
+ "$value": "{color.slate.light.700}"
1085
+ },
1086
+ "muted": {
1087
+ "$type": "color",
1088
+ "$value": "{color.slate.light.600}"
1089
+ },
1090
+ "inverse": {
1091
+ "$type": "color",
1092
+ "$value": "{color.slate.light.0}"
1093
+ },
1094
+ "on-action": {
1095
+ "$type": "color",
1096
+ "$value": "{color.slate.light.0}"
1097
+ },
1098
+ "link": {
1099
+ "$type": "color",
1100
+ "$value": "{color.teal.light.700}"
1101
+ }
1102
+ },
1103
+ "border": {
1104
+ "default": {
1105
+ "$type": "color",
1106
+ "$value": "{color.slate.light.200}"
1107
+ },
1108
+ "strong": {
1109
+ "$type": "color",
1110
+ "$value": "{color.slate.light.500}"
1111
+ },
1112
+ "focus": {
1113
+ "$type": "color",
1114
+ "$value": "{color.teal.light.600}"
1115
+ }
1116
+ },
1117
+ "action": {
1118
+ "primary": {
1119
+ "@": {
1120
+ "$type": "color",
1121
+ "$value": "{color.teal.light.600}"
1122
+ },
1123
+ "hover": {
1124
+ "$type": "color",
1125
+ "$value": "{color.teal.light.700}"
1126
+ }
1127
+ },
1128
+ "secondary": {
1129
+ "@": {
1130
+ "$type": "color",
1131
+ "$value": "{color.slate.light.0}"
1132
+ },
1133
+ "hover": {
1134
+ "$type": "color",
1135
+ "$value": "{color.slate.light.100}"
1136
+ }
1137
+ }
1138
+ },
1139
+ "status": {
1140
+ "info": {
1141
+ "@": {
1142
+ "$type": "color",
1143
+ "$value": "{color.blue.light.700}"
1144
+ },
1145
+ "subtle": {
1146
+ "$type": "color",
1147
+ "$value": "{color.blue.light.100}"
1148
+ }
1149
+ },
1150
+ "success": {
1151
+ "@": {
1152
+ "$type": "color",
1153
+ "$value": "{color.green.light.700}"
1154
+ },
1155
+ "subtle": {
1156
+ "$type": "color",
1157
+ "$value": "{color.green.light.100}"
1158
+ }
1159
+ },
1160
+ "warning": {
1161
+ "@": {
1162
+ "$type": "color",
1163
+ "$value": "{color.amber.light.700}"
1164
+ },
1165
+ "subtle": {
1166
+ "$type": "color",
1167
+ "$value": "{color.amber.light.100}"
1168
+ }
1169
+ },
1170
+ "danger": {
1171
+ "@": {
1172
+ "$type": "color",
1173
+ "$value": "{color.red.light.700}"
1174
+ },
1175
+ "subtle": {
1176
+ "$type": "color",
1177
+ "$value": "{color.red.light.100}"
1178
+ }
1179
+ }
1180
+ },
1181
+ "category": {
1182
+ "1": {
1183
+ "@": {
1184
+ "$type": "color",
1185
+ "$value": "{color.teal.light.600}"
1186
+ },
1187
+ "subtle": {
1188
+ "$type": "color",
1189
+ "$value": "{color.teal.light.100}"
1190
+ }
1191
+ },
1192
+ "2": {
1193
+ "@": {
1194
+ "$type": "color",
1195
+ "$value": "{color.purple.light.600}"
1196
+ },
1197
+ "subtle": {
1198
+ "$type": "color",
1199
+ "$value": "{color.purple.light.100}"
1200
+ }
1201
+ },
1202
+ "3": {
1203
+ "@": {
1204
+ "$type": "color",
1205
+ "$value": "{color.orange.light.600}"
1206
+ },
1207
+ "subtle": {
1208
+ "$type": "color",
1209
+ "$value": "{color.orange.light.100}"
1210
+ }
1211
+ },
1212
+ "4": {
1213
+ "@": {
1214
+ "$type": "color",
1215
+ "$value": "{color.blue.light.600}"
1216
+ },
1217
+ "subtle": {
1218
+ "$type": "color",
1219
+ "$value": "{color.blue.light.100}"
1220
+ }
1221
+ },
1222
+ "5": {
1223
+ "@": {
1224
+ "$type": "color",
1225
+ "$value": "{color.green.light.700}"
1226
+ },
1227
+ "subtle": {
1228
+ "$type": "color",
1229
+ "$value": "{color.green.light.100}"
1230
+ }
1231
+ }
1232
+ },
1233
+ "disabled": {
1234
+ "text": {
1235
+ "$type": "color",
1236
+ "$value": "{color.slate.light.500}"
1237
+ },
1238
+ "surface": {
1239
+ "$type": "color",
1240
+ "$value": "{color.slate.light.100}"
1241
+ },
1242
+ "border": {
1243
+ "$type": "color",
1244
+ "$value": "{color.slate.light.200}"
1245
+ }
1246
+ }
1247
+ },
1248
+ "elevation": {
1249
+ "card": {
1250
+ "$type": "shadow",
1251
+ "$value": "{shadow.card}"
1252
+ },
1253
+ "overlay": {
1254
+ "$type": "shadow",
1255
+ "$value": "{shadow.overlay}"
1256
+ }
1257
+ }
1258
+ }
1259
+ }
1260
+ },
1261
+ "type": {
1262
+ "display": {
1263
+ "font-family": {
1264
+ "$type": "fontFamily",
1265
+ "$value": "{aster.theme.base.type.display.font-family}"
1266
+ },
1267
+ "font-size": {
1268
+ "$type": "dimension",
1269
+ "$value": "{font.size.32}"
1270
+ },
1271
+ "line-height": {
1272
+ "$type": "number",
1273
+ "$value": "{font.line-height.1_2}"
1274
+ },
1275
+ "font-weight": {
1276
+ "$type": "fontWeight",
1277
+ "$value": "{font.weight.700}"
1278
+ },
1279
+ "$description": "The display text role."
1280
+ },
1281
+ "title": {
1282
+ "font-family": {
1283
+ "$type": "fontFamily",
1284
+ "$value": "{aster.theme.base.type.title.font-family}"
1285
+ },
1286
+ "font-size": {
1287
+ "$type": "dimension",
1288
+ "$value": "{font.size.24}"
1289
+ },
1290
+ "line-height": {
1291
+ "$type": "number",
1292
+ "$value": "{font.line-height.1_25}"
1293
+ },
1294
+ "font-weight": {
1295
+ "$type": "fontWeight",
1296
+ "$value": "{font.weight.600}"
1297
+ },
1298
+ "$description": "The title text role."
1299
+ },
1300
+ "heading": {
1301
+ "font-family": {
1302
+ "$type": "fontFamily",
1303
+ "$value": "{aster.theme.base.type.heading.font-family}"
1304
+ },
1305
+ "font-size": {
1306
+ "$type": "dimension",
1307
+ "$value": "{font.size.20}"
1308
+ },
1309
+ "line-height": {
1310
+ "$type": "number",
1311
+ "$value": "{font.line-height.1_3}"
1312
+ },
1313
+ "font-weight": {
1314
+ "$type": "fontWeight",
1315
+ "$value": "{font.weight.600}"
1316
+ },
1317
+ "$description": "The heading text role."
1318
+ },
1319
+ "body": {
1320
+ "font-family": {
1321
+ "$type": "fontFamily",
1322
+ "$value": "{aster.theme.base.type.body.font-family}"
1323
+ },
1324
+ "font-size": {
1325
+ "$type": "dimension",
1326
+ "$value": "{font.size.16}"
1327
+ },
1328
+ "line-height": {
1329
+ "$type": "number",
1330
+ "$value": "{font.line-height.1_5}"
1331
+ },
1332
+ "font-weight": {
1333
+ "$type": "fontWeight",
1334
+ "$value": "{font.weight.400}"
1335
+ },
1336
+ "$description": "The body text role."
1337
+ },
1338
+ "label": {
1339
+ "font-family": {
1340
+ "$type": "fontFamily",
1341
+ "$value": "{aster.theme.base.type.label.font-family}"
1342
+ },
1343
+ "font-size": {
1344
+ "$type": "dimension",
1345
+ "$value": "{font.size.14}"
1346
+ },
1347
+ "line-height": {
1348
+ "$type": "number",
1349
+ "$value": "{font.line-height.1_4}"
1350
+ },
1351
+ "font-weight": {
1352
+ "$type": "fontWeight",
1353
+ "$value": "{font.weight.600}"
1354
+ },
1355
+ "$description": "The label text role."
1356
+ },
1357
+ "caption": {
1358
+ "font-family": {
1359
+ "$type": "fontFamily",
1360
+ "$value": "{aster.theme.base.type.caption.font-family}"
1361
+ },
1362
+ "font-size": {
1363
+ "$type": "dimension",
1364
+ "$value": "{font.size.13}"
1365
+ },
1366
+ "line-height": {
1367
+ "$type": "number",
1368
+ "$value": "{font.line-height.1_4}"
1369
+ },
1370
+ "font-weight": {
1371
+ "$type": "fontWeight",
1372
+ "$value": "{font.weight.400}"
1373
+ },
1374
+ "$description": "The caption text role."
1375
+ },
1376
+ "data": {
1377
+ "font-family": {
1378
+ "$type": "fontFamily",
1379
+ "$value": "{aster.theme.base.type.data.font-family}"
1380
+ },
1381
+ "font-size": {
1382
+ "$type": "dimension",
1383
+ "$value": "{font.size.16}"
1384
+ },
1385
+ "line-height": {
1386
+ "$type": "number",
1387
+ "$value": "{font.line-height.1_5}"
1388
+ },
1389
+ "font-weight": {
1390
+ "$type": "fontWeight",
1391
+ "$value": "{font.weight.400}"
1392
+ },
1393
+ "$description": "The data text role."
1394
+ }
1395
+ },
1396
+ "motion": {
1397
+ "duration": {
1398
+ "feedback": {
1399
+ "$type": "duration",
1400
+ "$value": "{duration.moderate}",
1401
+ "$description": "Feedback speed: moderate."
1402
+ }
1403
+ },
1404
+ "easing": {
1405
+ "standard": {
1406
+ "$type": "cubicBezier",
1407
+ "$value": "{easing.standard}",
1408
+ "$description": "Feedback easing."
1409
+ }
1410
+ }
1411
+ },
1412
+ "elevation": {
1413
+ "card": {
1414
+ "$type": "shadow",
1415
+ "$value": "{aster.theme.light.elevation.card}"
1416
+ },
1417
+ "overlay": {
1418
+ "$type": "shadow",
1419
+ "$value": "{aster.theme.light.elevation.overlay}"
1420
+ }
1421
+ },
1422
+ "button": {
1423
+ "primary": {
1424
+ "background": {
1425
+ "@": {
1426
+ "$value": "{color.action.primary.@}",
1427
+ "$description": "Primary button fill."
1428
+ },
1429
+ "hover": {
1430
+ "$value": "{color.action.primary.hover}",
1431
+ "$description": "Primary button fill on hover."
1432
+ }
1433
+ },
1434
+ "label": {
1435
+ "$value": "{color.text.on-action}",
1436
+ "$description": "Primary button label color."
1437
+ }
1438
+ },
1439
+ "secondary": {
1440
+ "background": {
1441
+ "@": {
1442
+ "$value": "{color.action.secondary.@}",
1443
+ "$description": "Secondary button fill."
1444
+ },
1445
+ "hover": {
1446
+ "$value": "{color.action.secondary.hover}",
1447
+ "$description": "Secondary button fill on hover."
1448
+ }
1449
+ },
1450
+ "label": {
1451
+ "$value": "{color.text.primary}",
1452
+ "$description": "Secondary button label color."
1453
+ },
1454
+ "border": {
1455
+ "$value": "{color.border.strong}",
1456
+ "$description": "Secondary button border."
1457
+ }
1458
+ },
1459
+ "ghost": {
1460
+ "background-hover": {
1461
+ "$value": "{color.surface.sunken}",
1462
+ "$description": "Ghost button fill on hover."
1463
+ },
1464
+ "label": {
1465
+ "$value": "{color.text.link}",
1466
+ "$description": "Ghost button label color."
1467
+ }
1468
+ },
1469
+ "height": {
1470
+ "$value": "{size.control.default}",
1471
+ "$description": "Button height."
1472
+ },
1473
+ "padding-x": {
1474
+ "$value": "{space.inset.control-x}",
1475
+ "$description": "Horizontal padding inside a button."
1476
+ },
1477
+ "radius": {
1478
+ "$value": "{radius.control}",
1479
+ "$description": "Button corner radius."
1480
+ },
1481
+ "font-size": {
1482
+ "$value": "{type.label.font-size}",
1483
+ "$description": "Button label size."
1484
+ },
1485
+ "font-weight": {
1486
+ "$value": "{type.label.font-weight}",
1487
+ "$description": "Button label weight."
1488
+ },
1489
+ "focus-ring": {
1490
+ "$value": "{color.border.focus}",
1491
+ "$description": "Focus ring color on any button."
1492
+ },
1493
+ "icon-size": {
1494
+ "$value": "{size.icon}",
1495
+ "$description": "Size of an icon inside a button."
1496
+ },
1497
+ "disabled": {
1498
+ "background": {
1499
+ "$value": "{color.disabled.surface}",
1500
+ "$description": "Fill of a disabled button."
1501
+ },
1502
+ "label": {
1503
+ "$value": "{color.disabled.text}",
1504
+ "$description": "Label of a disabled button."
1505
+ },
1506
+ "border": {
1507
+ "$value": "{color.disabled.border}",
1508
+ "$description": "Border of a disabled secondary button."
1509
+ }
1510
+ }
1511
+ },
1512
+ "input": {
1513
+ "background": {
1514
+ "$value": "{color.surface.default}",
1515
+ "$description": "Input fill."
1516
+ },
1517
+ "border": {
1518
+ "@": {
1519
+ "$value": "{color.border.strong}",
1520
+ "$description": "Input border at rest."
1521
+ },
1522
+ "focus": {
1523
+ "$value": "{color.border.focus}",
1524
+ "$description": "Input border when focused."
1525
+ }
1526
+ },
1527
+ "text": {
1528
+ "$value": "{color.text.primary}",
1529
+ "$description": "Typed text color."
1530
+ },
1531
+ "placeholder": {
1532
+ "$value": "{color.text.muted}",
1533
+ "$description": "Placeholder text color."
1534
+ },
1535
+ "height": {
1536
+ "$value": "{size.control.default}",
1537
+ "$description": "Input height."
1538
+ },
1539
+ "padding-x": {
1540
+ "$value": "{space.inset.control-x}",
1541
+ "$description": "Horizontal padding inside an input."
1542
+ },
1543
+ "radius": {
1544
+ "$value": "{radius.control}",
1545
+ "$description": "Input corner radius."
1546
+ },
1547
+ "font-size": {
1548
+ "$value": "{type.body.font-size}",
1549
+ "$description": "Typed text size."
1550
+ },
1551
+ "disabled": {
1552
+ "background": {
1553
+ "$value": "{color.disabled.surface}",
1554
+ "$description": "Fill of a disabled input."
1555
+ },
1556
+ "border": {
1557
+ "$value": "{color.disabled.border}",
1558
+ "$description": "Border of a disabled input."
1559
+ },
1560
+ "text": {
1561
+ "$value": "{color.disabled.text}",
1562
+ "$description": "Text in a disabled input."
1563
+ }
1564
+ }
1565
+ },
1566
+ "control": {
1567
+ "checked": {
1568
+ "$value": "{color.action.primary.@}",
1569
+ "$description": "Fill of a checked checkbox or an on switch."
1570
+ },
1571
+ "track": {
1572
+ "$value": "{color.border.strong}",
1573
+ "$description": "Track of an off switch."
1574
+ },
1575
+ "thumb": {
1576
+ "$value": "{color.surface.default}",
1577
+ "$description": "Switch thumb and checkmark color."
1578
+ },
1579
+ "radius": {
1580
+ "$value": "{radius.badge}",
1581
+ "$description": "Checkbox corner radius."
1582
+ }
1583
+ },
1584
+ "badge": {
1585
+ "radius": {
1586
+ "$value": "{radius.badge}",
1587
+ "$description": "Badge corner radius."
1588
+ },
1589
+ "padding-x": {
1590
+ "$value": "{space.gap.tight}",
1591
+ "$description": "Horizontal padding inside a badge."
1592
+ },
1593
+ "font-size": {
1594
+ "$value": "{type.caption.font-size}",
1595
+ "$description": "Badge label size."
1596
+ },
1597
+ "neutral": {
1598
+ "background": {
1599
+ "$value": "{color.surface.sunken}",
1600
+ "$description": "Neutral badge fill."
1601
+ },
1602
+ "label": {
1603
+ "$value": "{color.text.secondary}",
1604
+ "$description": "Neutral badge label."
1605
+ }
1606
+ },
1607
+ "success": {
1608
+ "background": {
1609
+ "$value": "{color.status.success.subtle}",
1610
+ "$description": "Success badge fill."
1611
+ },
1612
+ "label": {
1613
+ "$value": "{color.status.success.@}",
1614
+ "$description": "Success badge label."
1615
+ }
1616
+ },
1617
+ "warning": {
1618
+ "background": {
1619
+ "$value": "{color.status.warning.subtle}",
1620
+ "$description": "Warning badge fill."
1621
+ },
1622
+ "label": {
1623
+ "$value": "{color.status.warning.@}",
1624
+ "$description": "Warning badge label."
1625
+ }
1626
+ },
1627
+ "danger": {
1628
+ "background": {
1629
+ "$value": "{color.status.danger.subtle}",
1630
+ "$description": "Danger badge fill."
1631
+ },
1632
+ "label": {
1633
+ "$value": "{color.status.danger.@}",
1634
+ "$description": "Danger badge label."
1635
+ }
1636
+ },
1637
+ "info": {
1638
+ "background": {
1639
+ "$value": "{color.status.info.subtle}",
1640
+ "$description": "Info badge fill."
1641
+ },
1642
+ "label": {
1643
+ "$value": "{color.status.info.@}",
1644
+ "$description": "Info badge label."
1645
+ }
1646
+ }
1647
+ },
1648
+ "card": {
1649
+ "background": {
1650
+ "$value": "{color.surface.default}",
1651
+ "$description": "Card fill."
1652
+ },
1653
+ "border": {
1654
+ "$value": "{color.border.default}",
1655
+ "$description": "Card border."
1656
+ },
1657
+ "radius": {
1658
+ "$value": "{radius.container}",
1659
+ "$description": "Card corner radius."
1660
+ },
1661
+ "padding": {
1662
+ "$value": "{space.inset.container}",
1663
+ "$description": "Padding inside a card."
1664
+ },
1665
+ "shadow": {
1666
+ "$value": "{elevation.card}",
1667
+ "$description": "Card shadow."
1668
+ }
1669
+ },
1670
+ "table": {
1671
+ "header-background": {
1672
+ "$value": "{color.surface.sunken}",
1673
+ "$description": "Header row fill."
1674
+ },
1675
+ "row-height": {
1676
+ "$value": "{size.row}",
1677
+ "$description": "Height of one data row."
1678
+ },
1679
+ "cell-padding-x": {
1680
+ "$value": "{space.inset.cell-x}",
1681
+ "$description": "Horizontal padding inside a cell."
1682
+ },
1683
+ "row-border": {
1684
+ "$value": "{color.border.default}",
1685
+ "$description": "Line between rows."
1686
+ },
1687
+ "row-selected": {
1688
+ "$value": "{color.surface.selected}",
1689
+ "$description": "Fill of a selected row."
1690
+ },
1691
+ "font-size": {
1692
+ "$value": "{type.data.font-size}",
1693
+ "$description": "Cell text size."
1694
+ }
1695
+ },
1696
+ "tabs": {
1697
+ "indicator": {
1698
+ "$value": "{color.action.primary.@}",
1699
+ "$description": "Active tab indicator."
1700
+ },
1701
+ "label": {
1702
+ "@": {
1703
+ "$value": "{color.text.secondary}",
1704
+ "$description": "Inactive tab label."
1705
+ },
1706
+ "active": {
1707
+ "$value": "{color.text.primary}",
1708
+ "$description": "Active tab label."
1709
+ }
1710
+ }
1711
+ },
1712
+ "overlay": {
1713
+ "background": {
1714
+ "$value": "{color.surface.raised}",
1715
+ "$description": "Fill of a dialog, menu or toast."
1716
+ },
1717
+ "radius": {
1718
+ "$value": "{radius.container}",
1719
+ "$description": "Corner radius of overlays."
1720
+ },
1721
+ "shadow": {
1722
+ "$value": "{elevation.overlay}",
1723
+ "$description": "Shadow of overlays."
1724
+ },
1725
+ "scrim": {
1726
+ "$value": "{color.surface.scrim}",
1727
+ "$description": "Color that dims the page behind a dialog."
1728
+ },
1729
+ "item-height": {
1730
+ "$value": "{size.control.default}",
1731
+ "$description": "Height of a menu item."
1732
+ }
1733
+ },
1734
+ "tooltip": {
1735
+ "background": {
1736
+ "$value": "{color.surface.inverse}",
1737
+ "$description": "Tooltip fill."
1738
+ },
1739
+ "label": {
1740
+ "$value": "{color.text.inverse}",
1741
+ "$description": "Tooltip text."
1742
+ }
1743
+ },
1744
+ "transition": {
1745
+ "duration": {
1746
+ "$value": "{motion.duration.feedback}",
1747
+ "$description": "Duration of feedback transitions."
1748
+ },
1749
+ "easing": {
1750
+ "$value": "{motion.easing.standard}",
1751
+ "$description": "Easing of feedback transitions."
1752
+ }
1753
+ }
1754
+ }