@calliopelabs/ui 0.13.0 → 0.14.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 (73) hide show
  1. package/README.md +50 -3
  2. package/dist/agent/AgentChat.d.ts +56 -0
  3. package/dist/agent/AgentChat.js +76 -0
  4. package/dist/agent/AgentLauncher.d.ts +25 -0
  5. package/dist/agent/AgentLauncher.js +25 -0
  6. package/dist/agent/AgentProvider.d.ts +82 -0
  7. package/dist/agent/AgentProvider.js +176 -0
  8. package/dist/agent/CalliopeAgent.d.ts +43 -0
  9. package/dist/agent/CalliopeAgent.js +111 -0
  10. package/dist/agent/controller.d.ts +148 -0
  11. package/dist/agent/controller.js +463 -0
  12. package/dist/agent/copilotkit/CopilotKitAgentProvider.d.ts +41 -0
  13. package/dist/agent/copilotkit/CopilotKitAgentProvider.js +145 -0
  14. package/dist/agent/copilotkit/index.d.ts +6 -0
  15. package/dist/agent/copilotkit/index.js +6 -0
  16. package/dist/agent/engine.d.ts +41 -0
  17. package/dist/agent/engine.js +93 -0
  18. package/dist/agent/index.d.ts +15 -0
  19. package/dist/agent/index.js +15 -0
  20. package/dist/agent/mock.d.ts +34 -0
  21. package/dist/agent/mock.js +112 -0
  22. package/dist/agent/surface.d.ts +30 -0
  23. package/dist/agent/surface.js +90 -0
  24. package/dist/agent/tool.d.ts +98 -0
  25. package/dist/agent/tool.js +81 -0
  26. package/dist/appearance/brands.d.ts +14 -12
  27. package/dist/appearance/brands.js +18 -51
  28. package/dist/chat/AgentProgress.d.ts +19 -0
  29. package/dist/chat/AgentProgress.js +34 -0
  30. package/dist/chat/Composer.d.ts +31 -0
  31. package/dist/chat/Composer.js +44 -0
  32. package/dist/chat/MessageBubble.d.ts +23 -0
  33. package/dist/chat/MessageBubble.js +26 -0
  34. package/dist/chat/MessageList.d.ts +36 -0
  35. package/dist/chat/MessageList.js +68 -0
  36. package/dist/chat/ModelPicker.d.ts +17 -0
  37. package/dist/chat/ModelPicker.js +13 -0
  38. package/dist/chat/ToolCallCard.d.ts +27 -0
  39. package/dist/chat/ToolCallCard.js +52 -0
  40. package/dist/chat/model.d.ts +123 -0
  41. package/dist/chat/model.js +337 -0
  42. package/dist/chat/patch.d.ts +12 -0
  43. package/dist/chat/patch.js +149 -0
  44. package/dist/chat/useAgUiRun.d.ts +52 -0
  45. package/dist/chat/useAgUiRun.js +137 -0
  46. package/dist/index.d.ts +9 -0
  47. package/dist/index.js +10 -0
  48. package/dist/primitives/Button.d.ts +1 -1
  49. package/dist/provider/messages.d.ts +66 -0
  50. package/dist/provider/messages.js +71 -0
  51. package/dist/theme/mappings/palette.d.ts +52 -0
  52. package/dist/theme/mappings/palette.js +208 -0
  53. package/dist/theme/mappings/render.d.ts +9 -0
  54. package/dist/theme/mappings/render.js +520 -0
  55. package/dist/theme/mappings/targets.d.ts +43 -0
  56. package/dist/theme/mappings/targets.js +222 -0
  57. package/dist/theme/tokens.d.ts +10 -9
  58. package/dist/theme/tokens.generated.d.ts +353 -0
  59. package/dist/theme/tokens.generated.js +357 -0
  60. package/dist/theme/tokens.js +20 -264
  61. package/dist/tokens/README.jupyterlab.md +125 -0
  62. package/dist/tokens/README.md +15 -0
  63. package/dist/tokens/README.native.md +29 -0
  64. package/dist/tokens/README.plain.md +84 -0
  65. package/dist/tokens/README.python.md +33 -0
  66. package/dist/tokens/README.vscode.md +114 -0
  67. package/dist/tokens/jupyterlab.css +1710 -0
  68. package/dist/tokens/plain.css +930 -0
  69. package/dist/tokens/tokens.native.d.ts +85 -0
  70. package/dist/tokens/tokens.native.js +773 -0
  71. package/dist/tokens/tokens.py +1043 -0
  72. package/dist/tokens/vscode.css +1138 -0
  73. package/package.json +35 -2
@@ -0,0 +1,1043 @@
1
+ """@calliopelabs/ui tokens for Python, as RGB triplets.
2
+
3
+ Generated by `npm run theme` from the design tokens (tokens/*.json). Do not edit by hand.
4
+
5
+ Every colour token of every ground and family accent, as the preset paints it
6
+ with no product brand. Translucent tokens (hairlines, tints) are given two
7
+ ways: rgb() lays them on their surface (sidebar-* on the sidebar, the rest on
8
+ the background) for targets with no alpha, and rgba() keeps the alpha.
9
+
10
+ from calliope_tokens import rgb, triplet, palette
11
+
12
+ rgb("background", "charcoal") # (14, 15, 16)
13
+ triplet("primary", "paper", "copper") # "156 87 48", for rgb(var(--x) / 0.2)
14
+ palette("emerald") # {"background": (5, 11, 8), ...}
15
+
16
+ See README.python.md.
17
+ """
18
+
19
+ from __future__ import annotations
20
+
21
+ GROUNDS: dict[str, str] = {
22
+ "black": "dark",
23
+ "charcoal": "dark",
24
+ "graphite": "dark",
25
+ "emerald": "dark",
26
+ "navy": "dark",
27
+ "paper": "light",
28
+ "mist": "light",
29
+ }
30
+ """Every ground and its mode ("dark" or "light")."""
31
+
32
+ ACCENTS: tuple[str, ...] = ("green", "copper", "ice", "periwinkle", "amber")
33
+ """The family accents."""
34
+
35
+ TOKENS: tuple[str, ...] = (
36
+ "background",
37
+ "foreground",
38
+ "card",
39
+ "card-foreground",
40
+ "popover",
41
+ "popover-foreground",
42
+ "primary",
43
+ "primary-foreground",
44
+ "secondary",
45
+ "secondary-foreground",
46
+ "muted",
47
+ "muted-foreground",
48
+ "accent",
49
+ "accent-foreground",
50
+ "destructive",
51
+ "border",
52
+ "input",
53
+ "ring",
54
+ "chart-1",
55
+ "chart-2",
56
+ "chart-3",
57
+ "chart-4",
58
+ "chart-5",
59
+ "sidebar",
60
+ "sidebar-foreground",
61
+ "sidebar-primary",
62
+ "sidebar-primary-foreground",
63
+ "sidebar-accent",
64
+ "sidebar-accent-foreground",
65
+ "sidebar-border",
66
+ "sidebar-ring",
67
+ "sidebar-muted-foreground",
68
+ "surface-0",
69
+ "surface-1",
70
+ "surface-2",
71
+ "success",
72
+ "success-fg",
73
+ "success-bg",
74
+ "success-border",
75
+ "warning",
76
+ "warning-fg",
77
+ "warning-bg",
78
+ "warning-border",
79
+ "info",
80
+ "info-fg",
81
+ "info-bg",
82
+ "info-border",
83
+ "danger",
84
+ "danger-fg",
85
+ "danger-bg",
86
+ "danger-border",
87
+ )
88
+ """Every colour token, by its CSS name without the leading dashes."""
89
+
90
+ DEFAULT_GROUND = "black"
91
+ DEFAULT_ACCENT = "green"
92
+
93
+ RADIUS_PX = 2
94
+ MOTION_MS: dict[str, int] = {
95
+ "fast": 120,
96
+ "base": 200,
97
+ "slow": 320,
98
+ }
99
+ FONTS: dict[str, str] = {
100
+ "sans": "var(--font-plex-sans, \"IBM Plex Sans\"), system-ui, sans-serif",
101
+ "mono": "var(--font-plex-mono, \"IBM Plex Mono\"), ui-monospace, SFMono-Regular, Menlo, monospace",
102
+ "head": "var(--font-dm-sans, \"DM Sans\"), system-ui, sans-serif",
103
+ }
104
+ """CSS font stacks, as the preset sets --font-sans, --font-mono and --font-head."""
105
+
106
+ Triplet = tuple[int, int, int]
107
+ Rgba = tuple[int, int, int, float]
108
+
109
+ # Per ground: what every accent agrees on. Per ground and accent: the rest.
110
+ _GROUND_RGB: dict[str, dict[str, Triplet]] = {
111
+ "black": {
112
+ "background": (0, 0, 0),
113
+ "foreground": (240, 242, 241),
114
+ "card": (10, 10, 10),
115
+ "card-foreground": (240, 242, 241),
116
+ "popover": (20, 20, 20),
117
+ "popover-foreground": (240, 242, 241),
118
+ "secondary": (22, 22, 22),
119
+ "secondary-foreground": (240, 242, 241),
120
+ "muted": (17, 17, 17),
121
+ "muted-foreground": (132, 139, 136),
122
+ "accent": (27, 27, 27),
123
+ "accent-foreground": (240, 242, 241),
124
+ "destructive": (255, 107, 107),
125
+ "border": (26, 26, 26),
126
+ "input": (26, 26, 26),
127
+ "chart-2": (143, 216, 42),
128
+ "sidebar": (10, 10, 10),
129
+ "sidebar-foreground": (240, 242, 241),
130
+ "sidebar-accent-foreground": (240, 242, 241),
131
+ "sidebar-border": (30, 30, 30),
132
+ "sidebar-muted-foreground": (132, 139, 136),
133
+ "surface-0": (0, 0, 0),
134
+ "surface-1": (10, 10, 10),
135
+ "surface-2": (20, 20, 20),
136
+ "success": (143, 216, 42),
137
+ "success-fg": (166, 227, 77),
138
+ "success-bg": (14, 22, 4),
139
+ "success-border": (50, 76, 15),
140
+ "warning": (240, 195, 78),
141
+ "warning-fg": (240, 195, 78),
142
+ "warning-bg": (24, 20, 8),
143
+ "warning-border": (84, 68, 27),
144
+ "info": (47, 158, 82),
145
+ "info-fg": (92, 187, 121),
146
+ "info-bg": (7, 22, 11),
147
+ "info-border": (19, 63, 33),
148
+ "danger": (255, 107, 107),
149
+ "danger-fg": (255, 138, 138),
150
+ "danger-bg": (26, 11, 11),
151
+ "danger-border": (89, 37, 37),
152
+ },
153
+ "charcoal": {
154
+ "background": (14, 15, 16),
155
+ "foreground": (240, 242, 241),
156
+ "card": (22, 24, 25),
157
+ "card-foreground": (240, 242, 241),
158
+ "popover": (30, 32, 34),
159
+ "popover-foreground": (240, 242, 241),
160
+ "secondary": (32, 35, 37),
161
+ "secondary-foreground": (240, 242, 241),
162
+ "muted": (25, 27, 28),
163
+ "muted-foreground": (139, 145, 148),
164
+ "accent": (35, 38, 40),
165
+ "accent-foreground": (240, 242, 241),
166
+ "destructive": (255, 107, 107),
167
+ "border": (38, 39, 40),
168
+ "input": (38, 39, 40),
169
+ "chart-2": (143, 216, 42),
170
+ "sidebar": (22, 24, 25),
171
+ "sidebar-foreground": (240, 242, 241),
172
+ "sidebar-accent-foreground": (240, 242, 241),
173
+ "sidebar-border": (41, 42, 43),
174
+ "sidebar-muted-foreground": (139, 145, 148),
175
+ "surface-0": (14, 15, 16),
176
+ "surface-1": (22, 24, 25),
177
+ "surface-2": (30, 32, 34),
178
+ "success": (143, 216, 42),
179
+ "success-fg": (166, 227, 77),
180
+ "success-bg": (27, 35, 19),
181
+ "success-border": (59, 85, 25),
182
+ "warning": (240, 195, 78),
183
+ "warning-fg": (240, 195, 78),
184
+ "warning-bg": (37, 33, 22),
185
+ "warning-border": (93, 78, 38),
186
+ "info": (47, 158, 82),
187
+ "info-fg": (92, 187, 121),
188
+ "info-bg": (19, 35, 25),
189
+ "info-border": (27, 72, 42),
190
+ "danger": (255, 107, 107),
191
+ "danger-fg": (255, 138, 138),
192
+ "danger-bg": (38, 24, 25),
193
+ "danger-border": (98, 47, 48),
194
+ },
195
+ "graphite": {
196
+ "background": (17, 18, 20),
197
+ "foreground": (240, 242, 241),
198
+ "card": (24, 25, 27),
199
+ "card-foreground": (240, 242, 241),
200
+ "popover": (32, 33, 36),
201
+ "popover-foreground": (240, 242, 241),
202
+ "secondary": (34, 35, 38),
203
+ "secondary-foreground": (240, 242, 241),
204
+ "muted": (27, 28, 30),
205
+ "muted-foreground": (142, 146, 150),
206
+ "accent": (38, 39, 42),
207
+ "accent-foreground": (240, 242, 241),
208
+ "destructive": (255, 107, 107),
209
+ "border": (38, 39, 41),
210
+ "input": (41, 42, 44),
211
+ "chart-2": (143, 216, 42),
212
+ "sidebar": (22, 23, 25),
213
+ "sidebar-foreground": (240, 242, 241),
214
+ "sidebar-accent-foreground": (240, 242, 241),
215
+ "sidebar-border": (38, 39, 41),
216
+ "sidebar-muted-foreground": (142, 146, 150),
217
+ "surface-0": (17, 18, 20),
218
+ "surface-1": (24, 25, 27),
219
+ "surface-2": (32, 33, 36),
220
+ "success": (143, 216, 42),
221
+ "success-fg": (166, 227, 77),
222
+ "success-bg": (30, 38, 22),
223
+ "success-border": (61, 87, 28),
224
+ "warning": (240, 195, 78),
225
+ "warning-fg": (240, 195, 78),
226
+ "warning-bg": (39, 36, 26),
227
+ "warning-border": (95, 80, 40),
228
+ "info": (47, 158, 82),
229
+ "info-fg": (92, 187, 121),
230
+ "info-bg": (21, 38, 29),
231
+ "info-border": (29, 74, 45),
232
+ "danger": (255, 107, 107),
233
+ "danger-fg": (255, 138, 138),
234
+ "danger-bg": (41, 27, 29),
235
+ "danger-border": (100, 49, 50),
236
+ },
237
+ "emerald": {
238
+ "background": (5, 11, 8),
239
+ "foreground": (240, 242, 241),
240
+ "card": (10, 19, 16),
241
+ "card-foreground": (240, 242, 241),
242
+ "popover": (13, 24, 20),
243
+ "popover-foreground": (240, 242, 241),
244
+ "secondary": (18, 29, 24),
245
+ "secondary-foreground": (240, 242, 241),
246
+ "muted": (16, 26, 21),
247
+ "muted-foreground": (139, 161, 153),
248
+ "accent": (22, 38, 31),
249
+ "accent-foreground": (240, 242, 241),
250
+ "destructive": (255, 107, 107),
251
+ "border": (30, 35, 33),
252
+ "input": (30, 35, 33),
253
+ "chart-2": (143, 216, 42),
254
+ "sidebar": (10, 19, 16),
255
+ "sidebar-foreground": (240, 242, 241),
256
+ "sidebar-accent-foreground": (240, 242, 241),
257
+ "sidebar-border": (30, 38, 35),
258
+ "sidebar-muted-foreground": (139, 161, 153),
259
+ "surface-0": (5, 11, 8),
260
+ "surface-1": (10, 19, 16),
261
+ "surface-2": (13, 24, 20),
262
+ "success": (143, 216, 42),
263
+ "success-fg": (166, 227, 77),
264
+ "success-bg": (19, 32, 11),
265
+ "success-border": (53, 83, 20),
266
+ "warning": (240, 195, 78),
267
+ "warning-fg": (240, 195, 78),
268
+ "warning-bg": (29, 29, 15),
269
+ "warning-border": (87, 75, 33),
270
+ "info": (47, 158, 82),
271
+ "info-fg": (92, 187, 121),
272
+ "info-bg": (11, 32, 18),
273
+ "info-border": (22, 70, 38),
274
+ "danger": (255, 107, 107),
275
+ "danger-fg": (255, 138, 138),
276
+ "danger-bg": (30, 21, 18),
277
+ "danger-border": (93, 45, 43),
278
+ },
279
+ "navy": {
280
+ "background": (11, 17, 32),
281
+ "foreground": (240, 242, 241),
282
+ "card": (21, 33, 65),
283
+ "card-foreground": (240, 242, 241),
284
+ "popover": (26, 40, 74),
285
+ "popover-foreground": (240, 242, 241),
286
+ "secondary": (29, 43, 80),
287
+ "secondary-foreground": (240, 242, 241),
288
+ "muted": (24, 37, 69),
289
+ "muted-foreground": (151, 166, 194),
290
+ "accent": (33, 49, 87),
291
+ "accent-foreground": (240, 242, 241),
292
+ "destructive": (255, 107, 107),
293
+ "border": (35, 41, 54),
294
+ "input": (35, 41, 54),
295
+ "chart-2": (143, 216, 42),
296
+ "sidebar": (21, 33, 65),
297
+ "sidebar-foreground": (240, 242, 241),
298
+ "sidebar-accent-foreground": (240, 242, 241),
299
+ "sidebar-border": (40, 51, 80),
300
+ "sidebar-muted-foreground": (151, 166, 194),
301
+ "surface-0": (11, 17, 32),
302
+ "surface-1": (21, 33, 65),
303
+ "surface-2": (26, 40, 74),
304
+ "success": (143, 216, 42),
305
+ "success-fg": (166, 227, 77),
306
+ "success-bg": (24, 37, 33),
307
+ "success-border": (57, 87, 36),
308
+ "warning": (240, 195, 78),
309
+ "warning-fg": (240, 195, 78),
310
+ "warning-bg": (34, 35, 37),
311
+ "warning-border": (91, 79, 48),
312
+ "info": (47, 158, 82),
313
+ "info-fg": (92, 187, 121),
314
+ "info-bg": (16, 37, 39),
315
+ "info-border": (25, 73, 52),
316
+ "danger": (255, 107, 107),
317
+ "danger-fg": (255, 138, 138),
318
+ "danger-bg": (35, 26, 40),
319
+ "danger-border": (96, 49, 58),
320
+ },
321
+ "paper": {
322
+ "background": (250, 246, 238),
323
+ "foreground": (30, 29, 27),
324
+ "card": (255, 253, 249),
325
+ "card-foreground": (30, 29, 27),
326
+ "popover": (255, 253, 249),
327
+ "popover-foreground": (30, 29, 27),
328
+ "primary-foreground": (243, 251, 247),
329
+ "secondary": (243, 238, 228),
330
+ "secondary-foreground": (30, 29, 27),
331
+ "muted": (243, 238, 228),
332
+ "muted-foreground": (92, 91, 88),
333
+ "accent": (240, 230, 218),
334
+ "accent-foreground": (30, 29, 27),
335
+ "destructive": (212, 12, 26),
336
+ "border": (222, 218, 210),
337
+ "input": (222, 218, 210),
338
+ "chart-2": (92, 156, 26),
339
+ "chart-3": (138, 122, 92),
340
+ "chart-4": (184, 134, 11),
341
+ "chart-5": (38, 128, 63),
342
+ "sidebar": (245, 240, 228),
343
+ "sidebar-foreground": (30, 29, 27),
344
+ "sidebar-primary-foreground": (243, 251, 247),
345
+ "sidebar-accent": (240, 230, 218),
346
+ "sidebar-accent-foreground": (30, 29, 27),
347
+ "sidebar-border": (222, 218, 210),
348
+ "sidebar-muted-foreground": (92, 91, 88),
349
+ "surface-0": (250, 246, 238),
350
+ "surface-1": (255, 253, 249),
351
+ "surface-2": (255, 253, 249),
352
+ "success": (80, 141, 35),
353
+ "success-fg": (48, 90, 18),
354
+ "success-bg": (227, 245, 218),
355
+ "success-border": (180, 215, 162),
356
+ "warning": (203, 122, 0),
357
+ "warning-fg": (130, 76, 18),
358
+ "warning-bg": (254, 240, 212),
359
+ "warning-border": (232, 193, 132),
360
+ "info": (47, 133, 67),
361
+ "info-fg": (27, 98, 45),
362
+ "info-bg": (226, 244, 227),
363
+ "info-border": (172, 216, 177),
364
+ "danger": (223, 34, 37),
365
+ "danger-fg": (187, 9, 22),
366
+ "danger-bg": (255, 234, 233),
367
+ "danger-border": (255, 177, 170),
368
+ },
369
+ "mist": {
370
+ "background": (242, 247, 249),
371
+ "foreground": (30, 29, 27),
372
+ "card": (255, 255, 255),
373
+ "card-foreground": (30, 29, 27),
374
+ "popover": (255, 255, 255),
375
+ "popover-foreground": (30, 29, 27),
376
+ "primary-foreground": (243, 251, 247),
377
+ "secondary": (233, 239, 242),
378
+ "secondary-foreground": (30, 29, 27),
379
+ "muted": (233, 239, 242),
380
+ "muted-foreground": (92, 91, 88),
381
+ "accent": (223, 234, 240),
382
+ "accent-foreground": (30, 29, 27),
383
+ "destructive": (212, 12, 26),
384
+ "border": (214, 220, 223),
385
+ "input": (214, 220, 223),
386
+ "chart-2": (92, 156, 26),
387
+ "chart-3": (138, 122, 92),
388
+ "chart-4": (184, 134, 11),
389
+ "chart-5": (38, 128, 63),
390
+ "sidebar": (233, 241, 245),
391
+ "sidebar-foreground": (30, 29, 27),
392
+ "sidebar-primary-foreground": (243, 251, 247),
393
+ "sidebar-accent": (223, 234, 240),
394
+ "sidebar-accent-foreground": (30, 29, 27),
395
+ "sidebar-border": (214, 220, 223),
396
+ "sidebar-muted-foreground": (92, 91, 88),
397
+ "surface-0": (242, 247, 249),
398
+ "surface-1": (255, 255, 255),
399
+ "surface-2": (255, 255, 255),
400
+ "success": (80, 141, 35),
401
+ "success-fg": (48, 90, 18),
402
+ "success-bg": (227, 245, 218),
403
+ "success-border": (180, 215, 162),
404
+ "warning": (203, 122, 0),
405
+ "warning-fg": (130, 76, 18),
406
+ "warning-bg": (254, 240, 212),
407
+ "warning-border": (232, 193, 132),
408
+ "info": (47, 133, 67),
409
+ "info-fg": (27, 98, 45),
410
+ "info-bg": (226, 244, 227),
411
+ "info-border": (172, 216, 177),
412
+ "danger": (223, 34, 37),
413
+ "danger-fg": (187, 9, 22),
414
+ "danger-bg": (255, 234, 233),
415
+ "danger-border": (255, 177, 170),
416
+ },
417
+ }
418
+
419
+ _ACCENT_RGB: dict[str, dict[str, dict[str, Triplet]]] = {
420
+ "black": {
421
+ "green": {
422
+ "primary": (47, 158, 82),
423
+ "primary-foreground": (4, 36, 27),
424
+ "ring": (47, 158, 82),
425
+ "chart-1": (47, 158, 82),
426
+ "chart-3": (203, 243, 157),
427
+ "chart-4": (224, 179, 74),
428
+ "chart-5": (11, 102, 68),
429
+ "sidebar-primary": (47, 158, 82),
430
+ "sidebar-primary-foreground": (4, 36, 27),
431
+ "sidebar-accent": (16, 34, 22),
432
+ "sidebar-ring": (47, 158, 82),
433
+ },
434
+ "copper": {
435
+ "primary": (201, 123, 74),
436
+ "primary-foreground": (20, 10, 4),
437
+ "ring": (201, 123, 74),
438
+ "chart-1": (201, 123, 74),
439
+ "chart-3": (217, 199, 163),
440
+ "chart-4": (224, 179, 74),
441
+ "chart-5": (47, 158, 82),
442
+ "sidebar-primary": (201, 123, 74),
443
+ "sidebar-primary-foreground": (20, 10, 4),
444
+ "sidebar-accent": (41, 28, 20),
445
+ "sidebar-ring": (201, 123, 74),
446
+ },
447
+ "ice": {
448
+ "primary": (110, 159, 196),
449
+ "primary-foreground": (6, 19, 28),
450
+ "ring": (110, 159, 196),
451
+ "chart-1": (110, 159, 196),
452
+ "chart-3": (185, 212, 228),
453
+ "chart-4": (224, 179, 74),
454
+ "chart-5": (47, 158, 82),
455
+ "sidebar-primary": (110, 159, 196),
456
+ "sidebar-primary-foreground": (6, 19, 28),
457
+ "sidebar-accent": (26, 34, 40),
458
+ "sidebar-ring": (110, 159, 196),
459
+ },
460
+ "periwinkle": {
461
+ "primary": (139, 143, 217),
462
+ "primary-foreground": (11, 12, 26),
463
+ "ring": (139, 143, 217),
464
+ "chart-1": (139, 143, 217),
465
+ "chart-3": (195, 197, 236),
466
+ "chart-4": (224, 179, 74),
467
+ "chart-5": (47, 158, 82),
468
+ "sidebar-primary": (139, 143, 217),
469
+ "sidebar-primary-foreground": (11, 12, 26),
470
+ "sidebar-accent": (31, 31, 43),
471
+ "sidebar-ring": (139, 143, 217),
472
+ },
473
+ "amber": {
474
+ "primary": (224, 179, 74),
475
+ "primary-foreground": (26, 18, 4),
476
+ "ring": (224, 179, 74),
477
+ "chart-1": (224, 179, 74),
478
+ "chart-3": (203, 243, 157),
479
+ "chart-4": (201, 123, 74),
480
+ "chart-5": (11, 102, 68),
481
+ "sidebar-primary": (224, 179, 74),
482
+ "sidebar-primary-foreground": (26, 18, 4),
483
+ "sidebar-accent": (44, 37, 20),
484
+ "sidebar-ring": (224, 179, 74),
485
+ },
486
+ },
487
+ "charcoal": {
488
+ "green": {
489
+ "primary": (47, 158, 82),
490
+ "primary-foreground": (4, 36, 27),
491
+ "ring": (47, 158, 82),
492
+ "chart-1": (47, 158, 82),
493
+ "chart-3": (203, 243, 157),
494
+ "chart-4": (224, 179, 74),
495
+ "chart-5": (11, 102, 68),
496
+ "sidebar-primary": (47, 158, 82),
497
+ "sidebar-primary-foreground": (4, 36, 27),
498
+ "sidebar-accent": (26, 45, 34),
499
+ "sidebar-ring": (47, 158, 82),
500
+ },
501
+ "copper": {
502
+ "primary": (201, 123, 74),
503
+ "primary-foreground": (20, 10, 4),
504
+ "ring": (201, 123, 74),
505
+ "chart-1": (201, 123, 74),
506
+ "chart-3": (217, 199, 163),
507
+ "chart-4": (224, 179, 74),
508
+ "chart-5": (47, 158, 82),
509
+ "sidebar-primary": (201, 123, 74),
510
+ "sidebar-primary-foreground": (20, 10, 4),
511
+ "sidebar-accent": (51, 40, 33),
512
+ "sidebar-ring": (201, 123, 74),
513
+ },
514
+ "ice": {
515
+ "primary": (110, 159, 196),
516
+ "primary-foreground": (6, 19, 28),
517
+ "ring": (110, 159, 196),
518
+ "chart-1": (110, 159, 196),
519
+ "chart-3": (185, 212, 228),
520
+ "chart-4": (224, 179, 74),
521
+ "chart-5": (47, 158, 82),
522
+ "sidebar-primary": (110, 159, 196),
523
+ "sidebar-primary-foreground": (6, 19, 28),
524
+ "sidebar-accent": (36, 46, 52),
525
+ "sidebar-ring": (110, 159, 196),
526
+ },
527
+ "periwinkle": {
528
+ "primary": (139, 143, 217),
529
+ "primary-foreground": (11, 12, 26),
530
+ "ring": (139, 143, 217),
531
+ "chart-1": (139, 143, 217),
532
+ "chart-3": (195, 197, 236),
533
+ "chart-4": (224, 179, 74),
534
+ "chart-5": (47, 158, 82),
535
+ "sidebar-primary": (139, 143, 217),
536
+ "sidebar-primary-foreground": (11, 12, 26),
537
+ "sidebar-accent": (41, 43, 56),
538
+ "sidebar-ring": (139, 143, 217),
539
+ },
540
+ "amber": {
541
+ "primary": (224, 179, 74),
542
+ "primary-foreground": (26, 18, 4),
543
+ "ring": (224, 179, 74),
544
+ "chart-1": (224, 179, 74),
545
+ "chart-3": (203, 243, 157),
546
+ "chart-4": (201, 123, 74),
547
+ "chart-5": (11, 102, 68),
548
+ "sidebar-primary": (224, 179, 74),
549
+ "sidebar-primary-foreground": (26, 18, 4),
550
+ "sidebar-accent": (54, 49, 33),
551
+ "sidebar-ring": (224, 179, 74),
552
+ },
553
+ },
554
+ "graphite": {
555
+ "green": {
556
+ "primary": (47, 158, 82),
557
+ "primary-foreground": (4, 36, 27),
558
+ "ring": (47, 158, 82),
559
+ "chart-1": (47, 158, 82),
560
+ "chart-3": (203, 243, 157),
561
+ "chart-4": (224, 179, 74),
562
+ "chart-5": (11, 102, 68),
563
+ "sidebar-primary": (47, 158, 82),
564
+ "sidebar-primary-foreground": (4, 36, 27),
565
+ "sidebar-accent": (26, 42, 33),
566
+ "sidebar-ring": (47, 158, 82),
567
+ },
568
+ "copper": {
569
+ "primary": (201, 123, 74),
570
+ "primary-foreground": (20, 10, 4),
571
+ "ring": (201, 123, 74),
572
+ "chart-1": (201, 123, 74),
573
+ "chart-3": (217, 199, 163),
574
+ "chart-4": (224, 179, 74),
575
+ "chart-5": (47, 158, 82),
576
+ "sidebar-primary": (201, 123, 74),
577
+ "sidebar-primary-foreground": (20, 10, 4),
578
+ "sidebar-accent": (47, 37, 32),
579
+ "sidebar-ring": (201, 123, 74),
580
+ },
581
+ "ice": {
582
+ "primary": (110, 159, 196),
583
+ "primary-foreground": (6, 19, 28),
584
+ "ring": (110, 159, 196),
585
+ "chart-1": (110, 159, 196),
586
+ "chart-3": (185, 212, 228),
587
+ "chart-4": (224, 179, 74),
588
+ "chart-5": (47, 158, 82),
589
+ "sidebar-primary": (110, 159, 196),
590
+ "sidebar-primary-foreground": (6, 19, 28),
591
+ "sidebar-accent": (34, 42, 49),
592
+ "sidebar-ring": (110, 159, 196),
593
+ },
594
+ "periwinkle": {
595
+ "primary": (139, 143, 217),
596
+ "primary-foreground": (11, 12, 26),
597
+ "ring": (139, 143, 217),
598
+ "chart-1": (139, 143, 217),
599
+ "chart-3": (195, 197, 236),
600
+ "chart-4": (224, 179, 74),
601
+ "chart-5": (47, 158, 82),
602
+ "sidebar-primary": (139, 143, 217),
603
+ "sidebar-primary-foreground": (11, 12, 26),
604
+ "sidebar-accent": (38, 40, 52),
605
+ "sidebar-ring": (139, 143, 217),
606
+ },
607
+ "amber": {
608
+ "primary": (224, 179, 74),
609
+ "primary-foreground": (26, 18, 4),
610
+ "ring": (224, 179, 74),
611
+ "chart-1": (224, 179, 74),
612
+ "chart-3": (203, 243, 157),
613
+ "chart-4": (201, 123, 74),
614
+ "chart-5": (11, 102, 68),
615
+ "sidebar-primary": (224, 179, 74),
616
+ "sidebar-primary-foreground": (26, 18, 4),
617
+ "sidebar-accent": (50, 45, 32),
618
+ "sidebar-ring": (224, 179, 74),
619
+ },
620
+ },
621
+ "emerald": {
622
+ "green": {
623
+ "primary": (47, 158, 82),
624
+ "primary-foreground": (4, 36, 27),
625
+ "ring": (47, 158, 82),
626
+ "chart-1": (47, 158, 82),
627
+ "chart-3": (203, 243, 157),
628
+ "chart-4": (224, 179, 74),
629
+ "chart-5": (11, 102, 68),
630
+ "sidebar-primary": (47, 158, 82),
631
+ "sidebar-primary-foreground": (4, 36, 27),
632
+ "sidebar-accent": (16, 41, 27),
633
+ "sidebar-ring": (47, 158, 82),
634
+ },
635
+ "copper": {
636
+ "primary": (201, 123, 74),
637
+ "primary-foreground": (20, 10, 4),
638
+ "ring": (201, 123, 74),
639
+ "chart-1": (201, 123, 74),
640
+ "chart-3": (217, 199, 163),
641
+ "chart-4": (224, 179, 74),
642
+ "chart-5": (47, 158, 82),
643
+ "sidebar-primary": (201, 123, 74),
644
+ "sidebar-primary-foreground": (20, 10, 4),
645
+ "sidebar-accent": (41, 36, 25),
646
+ "sidebar-ring": (201, 123, 74),
647
+ },
648
+ "ice": {
649
+ "primary": (110, 159, 196),
650
+ "primary-foreground": (6, 19, 28),
651
+ "ring": (110, 159, 196),
652
+ "chart-1": (110, 159, 196),
653
+ "chart-3": (185, 212, 228),
654
+ "chart-4": (224, 179, 74),
655
+ "chart-5": (47, 158, 82),
656
+ "sidebar-primary": (110, 159, 196),
657
+ "sidebar-primary-foreground": (6, 19, 28),
658
+ "sidebar-accent": (26, 41, 45),
659
+ "sidebar-ring": (110, 159, 196),
660
+ },
661
+ "periwinkle": {
662
+ "primary": (139, 143, 217),
663
+ "primary-foreground": (11, 12, 26),
664
+ "ring": (139, 143, 217),
665
+ "chart-1": (139, 143, 217),
666
+ "chart-3": (195, 197, 236),
667
+ "chart-4": (224, 179, 74),
668
+ "chart-5": (47, 158, 82),
669
+ "sidebar-primary": (139, 143, 217),
670
+ "sidebar-primary-foreground": (11, 12, 26),
671
+ "sidebar-accent": (31, 39, 48),
672
+ "sidebar-ring": (139, 143, 217),
673
+ },
674
+ "amber": {
675
+ "primary": (224, 179, 74),
676
+ "primary-foreground": (26, 18, 4),
677
+ "ring": (224, 179, 74),
678
+ "chart-1": (224, 179, 74),
679
+ "chart-3": (203, 243, 157),
680
+ "chart-4": (201, 123, 74),
681
+ "chart-5": (11, 102, 68),
682
+ "sidebar-primary": (224, 179, 74),
683
+ "sidebar-primary-foreground": (26, 18, 4),
684
+ "sidebar-accent": (44, 45, 25),
685
+ "sidebar-ring": (224, 179, 74),
686
+ },
687
+ },
688
+ "navy": {
689
+ "green": {
690
+ "primary": (47, 158, 82),
691
+ "primary-foreground": (4, 36, 27),
692
+ "ring": (47, 158, 82),
693
+ "chart-1": (47, 158, 82),
694
+ "chart-3": (203, 243, 157),
695
+ "chart-4": (224, 179, 74),
696
+ "chart-5": (11, 102, 68),
697
+ "sidebar-primary": (47, 158, 82),
698
+ "sidebar-primary-foreground": (4, 36, 27),
699
+ "sidebar-accent": (25, 53, 68),
700
+ "sidebar-ring": (47, 158, 82),
701
+ },
702
+ "copper": {
703
+ "primary": (201, 123, 74),
704
+ "primary-foreground": (20, 10, 4),
705
+ "ring": (201, 123, 74),
706
+ "chart-1": (201, 123, 74),
707
+ "chart-3": (217, 199, 163),
708
+ "chart-4": (224, 179, 74),
709
+ "chart-5": (47, 158, 82),
710
+ "sidebar-primary": (201, 123, 74),
711
+ "sidebar-primary-foreground": (20, 10, 4),
712
+ "sidebar-accent": (50, 47, 66),
713
+ "sidebar-ring": (201, 123, 74),
714
+ },
715
+ "ice": {
716
+ "primary": (110, 159, 196),
717
+ "primary-foreground": (6, 19, 28),
718
+ "ring": (110, 159, 196),
719
+ "chart-1": (110, 159, 196),
720
+ "chart-3": (185, 212, 228),
721
+ "chart-4": (224, 179, 74),
722
+ "chart-5": (47, 158, 82),
723
+ "sidebar-primary": (110, 159, 196),
724
+ "sidebar-primary-foreground": (6, 19, 28),
725
+ "sidebar-accent": (35, 53, 86),
726
+ "sidebar-ring": (110, 159, 196),
727
+ },
728
+ "periwinkle": {
729
+ "primary": (139, 143, 217),
730
+ "primary-foreground": (11, 12, 26),
731
+ "ring": (139, 143, 217),
732
+ "chart-1": (139, 143, 217),
733
+ "chart-3": (195, 197, 236),
734
+ "chart-4": (224, 179, 74),
735
+ "chart-5": (47, 158, 82),
736
+ "sidebar-primary": (139, 143, 217),
737
+ "sidebar-primary-foreground": (11, 12, 26),
738
+ "sidebar-accent": (40, 51, 89),
739
+ "sidebar-ring": (139, 143, 217),
740
+ },
741
+ "amber": {
742
+ "primary": (224, 179, 74),
743
+ "primary-foreground": (26, 18, 4),
744
+ "ring": (224, 179, 74),
745
+ "chart-1": (224, 179, 74),
746
+ "chart-3": (203, 243, 157),
747
+ "chart-4": (201, 123, 74),
748
+ "chart-5": (11, 102, 68),
749
+ "sidebar-primary": (224, 179, 74),
750
+ "sidebar-primary-foreground": (26, 18, 4),
751
+ "sidebar-accent": (53, 56, 66),
752
+ "sidebar-ring": (224, 179, 74),
753
+ },
754
+ },
755
+ "paper": {
756
+ "green": {
757
+ "primary": (38, 128, 63),
758
+ "ring": (38, 128, 63),
759
+ "chart-1": (38, 128, 63),
760
+ "sidebar-primary": (38, 128, 63),
761
+ "sidebar-ring": (38, 128, 63),
762
+ },
763
+ "copper": {
764
+ "primary": (156, 87, 48),
765
+ "ring": (156, 87, 48),
766
+ "chart-1": (156, 87, 48),
767
+ "sidebar-primary": (156, 87, 48),
768
+ "sidebar-ring": (156, 87, 48),
769
+ },
770
+ "ice": {
771
+ "primary": (61, 111, 149),
772
+ "ring": (61, 111, 149),
773
+ "chart-1": (61, 111, 149),
774
+ "sidebar-primary": (61, 111, 149),
775
+ "sidebar-ring": (61, 111, 149),
776
+ },
777
+ "periwinkle": {
778
+ "primary": (90, 95, 174),
779
+ "ring": (90, 95, 174),
780
+ "chart-1": (90, 95, 174),
781
+ "sidebar-primary": (90, 95, 174),
782
+ "sidebar-ring": (90, 95, 174),
783
+ },
784
+ "amber": {
785
+ "primary": (138, 100, 16),
786
+ "ring": (138, 100, 16),
787
+ "chart-1": (138, 100, 16),
788
+ "sidebar-primary": (138, 100, 16),
789
+ "sidebar-ring": (138, 100, 16),
790
+ },
791
+ },
792
+ "mist": {
793
+ "green": {
794
+ "primary": (38, 128, 63),
795
+ "ring": (38, 128, 63),
796
+ "chart-1": (38, 128, 63),
797
+ "sidebar-primary": (38, 128, 63),
798
+ "sidebar-ring": (38, 128, 63),
799
+ },
800
+ "copper": {
801
+ "primary": (156, 87, 48),
802
+ "ring": (156, 87, 48),
803
+ "chart-1": (156, 87, 48),
804
+ "sidebar-primary": (156, 87, 48),
805
+ "sidebar-ring": (156, 87, 48),
806
+ },
807
+ "ice": {
808
+ "primary": (61, 111, 149),
809
+ "ring": (61, 111, 149),
810
+ "chart-1": (61, 111, 149),
811
+ "sidebar-primary": (61, 111, 149),
812
+ "sidebar-ring": (61, 111, 149),
813
+ },
814
+ "periwinkle": {
815
+ "primary": (90, 95, 174),
816
+ "ring": (90, 95, 174),
817
+ "chart-1": (90, 95, 174),
818
+ "sidebar-primary": (90, 95, 174),
819
+ "sidebar-ring": (90, 95, 174),
820
+ },
821
+ "amber": {
822
+ "primary": (138, 100, 16),
823
+ "ring": (138, 100, 16),
824
+ "chart-1": (138, 100, 16),
825
+ "sidebar-primary": (138, 100, 16),
826
+ "sidebar-ring": (138, 100, 16),
827
+ },
828
+ },
829
+ }
830
+
831
+ # Translucent tokens only, with their alpha.
832
+ _GROUND_RGBA: dict[str, dict[str, Rgba]] = {
833
+ "black": {
834
+ "border": (255, 255, 255, 0.1),
835
+ "input": (255, 255, 255, 0.1),
836
+ "sidebar-border": (255, 255, 255, 0.08),
837
+ "success-bg": (143, 216, 42, 0.1),
838
+ "success-border": (143, 216, 42, 0.35),
839
+ "warning-bg": (240, 195, 78, 0.1),
840
+ "warning-border": (240, 195, 78, 0.35),
841
+ "info-bg": (47, 158, 82, 0.14),
842
+ "info-border": (47, 158, 82, 0.4),
843
+ "danger-bg": (255, 107, 107, 0.1),
844
+ "danger-border": (255, 107, 107, 0.35),
845
+ },
846
+ "charcoal": {
847
+ "border": (255, 255, 255, 0.1),
848
+ "input": (255, 255, 255, 0.1),
849
+ "sidebar-border": (255, 255, 255, 0.08),
850
+ "success-bg": (143, 216, 42, 0.1),
851
+ "success-border": (143, 216, 42, 0.35),
852
+ "warning-bg": (240, 195, 78, 0.1),
853
+ "warning-border": (240, 195, 78, 0.35),
854
+ "info-bg": (47, 158, 82, 0.14),
855
+ "info-border": (47, 158, 82, 0.4),
856
+ "danger-bg": (255, 107, 107, 0.1),
857
+ "danger-border": (255, 107, 107, 0.35),
858
+ },
859
+ "graphite": {
860
+ "border": (255, 255, 255, 0.09),
861
+ "input": (255, 255, 255, 0.1),
862
+ "sidebar-border": (255, 255, 255, 0.07),
863
+ "success-bg": (143, 216, 42, 0.1),
864
+ "success-border": (143, 216, 42, 0.35),
865
+ "warning-bg": (240, 195, 78, 0.1),
866
+ "warning-border": (240, 195, 78, 0.35),
867
+ "info-bg": (47, 158, 82, 0.14),
868
+ "info-border": (47, 158, 82, 0.4),
869
+ "danger-bg": (255, 107, 107, 0.1),
870
+ "danger-border": (255, 107, 107, 0.35),
871
+ },
872
+ "emerald": {
873
+ "border": (255, 255, 255, 0.1),
874
+ "input": (255, 255, 255, 0.1),
875
+ "sidebar-border": (255, 255, 255, 0.08),
876
+ "success-bg": (143, 216, 42, 0.1),
877
+ "success-border": (143, 216, 42, 0.35),
878
+ "warning-bg": (240, 195, 78, 0.1),
879
+ "warning-border": (240, 195, 78, 0.35),
880
+ "info-bg": (47, 158, 82, 0.14),
881
+ "info-border": (47, 158, 82, 0.4),
882
+ "danger-bg": (255, 107, 107, 0.1),
883
+ "danger-border": (255, 107, 107, 0.35),
884
+ },
885
+ "navy": {
886
+ "border": (255, 255, 255, 0.1),
887
+ "input": (255, 255, 255, 0.1),
888
+ "sidebar-border": (255, 255, 255, 0.08),
889
+ "success-bg": (143, 216, 42, 0.1),
890
+ "success-border": (143, 216, 42, 0.35),
891
+ "warning-bg": (240, 195, 78, 0.1),
892
+ "warning-border": (240, 195, 78, 0.35),
893
+ "info-bg": (47, 158, 82, 0.14),
894
+ "info-border": (47, 158, 82, 0.4),
895
+ "danger-bg": (255, 107, 107, 0.1),
896
+ "danger-border": (255, 107, 107, 0.35),
897
+ },
898
+ "paper": {},
899
+ "mist": {},
900
+ }
901
+
902
+ _ACCENT_RGBA: dict[str, dict[str, dict[str, Rgba]]] = {
903
+ "black": {
904
+ "green": {
905
+ "sidebar-accent": (47, 158, 82, 0.16),
906
+ },
907
+ "copper": {
908
+ "sidebar-accent": (201, 123, 74, 0.16),
909
+ },
910
+ "ice": {
911
+ "sidebar-accent": (110, 159, 196, 0.16),
912
+ },
913
+ "periwinkle": {
914
+ "sidebar-accent": (139, 143, 217, 0.16),
915
+ },
916
+ "amber": {
917
+ "sidebar-accent": (224, 179, 74, 0.16),
918
+ },
919
+ },
920
+ "charcoal": {
921
+ "green": {
922
+ "sidebar-accent": (47, 158, 82, 0.16),
923
+ },
924
+ "copper": {
925
+ "sidebar-accent": (201, 123, 74, 0.16),
926
+ },
927
+ "ice": {
928
+ "sidebar-accent": (110, 159, 196, 0.16),
929
+ },
930
+ "periwinkle": {
931
+ "sidebar-accent": (139, 143, 217, 0.16),
932
+ },
933
+ "amber": {
934
+ "sidebar-accent": (224, 179, 74, 0.16),
935
+ },
936
+ },
937
+ "graphite": {
938
+ "green": {
939
+ "sidebar-accent": (47, 158, 82, 0.14),
940
+ },
941
+ "copper": {
942
+ "sidebar-accent": (201, 123, 74, 0.14),
943
+ },
944
+ "ice": {
945
+ "sidebar-accent": (110, 159, 196, 0.14),
946
+ },
947
+ "periwinkle": {
948
+ "sidebar-accent": (139, 143, 217, 0.14),
949
+ },
950
+ "amber": {
951
+ "sidebar-accent": (224, 179, 74, 0.14),
952
+ },
953
+ },
954
+ "emerald": {
955
+ "green": {
956
+ "sidebar-accent": (47, 158, 82, 0.16),
957
+ },
958
+ "copper": {
959
+ "sidebar-accent": (201, 123, 74, 0.16),
960
+ },
961
+ "ice": {
962
+ "sidebar-accent": (110, 159, 196, 0.16),
963
+ },
964
+ "periwinkle": {
965
+ "sidebar-accent": (139, 143, 217, 0.16),
966
+ },
967
+ "amber": {
968
+ "sidebar-accent": (224, 179, 74, 0.16),
969
+ },
970
+ },
971
+ "navy": {
972
+ "green": {
973
+ "sidebar-accent": (47, 158, 82, 0.16),
974
+ },
975
+ "copper": {
976
+ "sidebar-accent": (201, 123, 74, 0.16),
977
+ },
978
+ "ice": {
979
+ "sidebar-accent": (110, 159, 196, 0.16),
980
+ },
981
+ "periwinkle": {
982
+ "sidebar-accent": (139, 143, 217, 0.16),
983
+ },
984
+ "amber": {
985
+ "sidebar-accent": (224, 179, 74, 0.16),
986
+ },
987
+ },
988
+ "paper": {
989
+ "green": {},
990
+ "copper": {},
991
+ "ice": {},
992
+ "periwinkle": {},
993
+ "amber": {},
994
+ },
995
+ "mist": {
996
+ "green": {},
997
+ "copper": {},
998
+ "ice": {},
999
+ "periwinkle": {},
1000
+ "amber": {},
1001
+ },
1002
+ }
1003
+
1004
+
1005
+ def _check(ground: str, accent: str) -> None:
1006
+ if ground not in GROUNDS:
1007
+ raise KeyError(f"unknown ground {ground!r}; one of {', '.join(GROUNDS)}")
1008
+ if accent not in ACCENTS:
1009
+ raise KeyError(f"unknown accent {accent!r}; one of {', '.join(ACCENTS)}")
1010
+
1011
+
1012
+ def palette(ground: str = DEFAULT_GROUND, accent: str = DEFAULT_ACCENT) -> dict[str, Triplet]:
1013
+ """Every token of a ground and accent, as opaque RGB triplets."""
1014
+ _check(ground, accent)
1015
+ return {**_GROUND_RGB[ground], **_ACCENT_RGB[ground][accent]}
1016
+
1017
+
1018
+ def rgb(token: str, ground: str = DEFAULT_GROUND, accent: str = DEFAULT_ACCENT) -> Triplet:
1019
+ """One token as an opaque (r, g, b), translucent ones laid on their surface."""
1020
+ values = palette(ground, accent)
1021
+ if token not in values:
1022
+ raise KeyError(f"unknown token {token!r}")
1023
+ return values[token]
1024
+
1025
+
1026
+ def rgba(token: str, ground: str = DEFAULT_GROUND, accent: str = DEFAULT_ACCENT) -> Rgba:
1027
+ """One token as (r, g, b, alpha), keeping a translucent token's alpha."""
1028
+ _check(ground, accent)
1029
+ translucent = {**_GROUND_RGBA[ground], **_ACCENT_RGBA[ground][accent]}
1030
+ if token in translucent:
1031
+ return translucent[token]
1032
+ r, g, b = rgb(token, ground, accent)
1033
+ return (r, g, b, 1.0)
1034
+
1035
+
1036
+ def triplet(token: str, ground: str = DEFAULT_GROUND, accent: str = DEFAULT_ACCENT) -> str:
1037
+ """One token as "R G B", the channel form CSS reads in rgb(var(--x) / alpha)."""
1038
+ return " ".join(str(c) for c in rgb(token, ground, accent))
1039
+
1040
+
1041
+ def hex(token: str, ground: str = DEFAULT_GROUND, accent: str = DEFAULT_ACCENT) -> str: # noqa: A001
1042
+ """One token as opaque "#rrggbb"."""
1043
+ return "#" + "".join(f"{c:02x}" for c in rgb(token, ground, accent))