@xanots/sdk 0.0.2 → 0.0.3-beta.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 (40) hide show
  1. package/README.md +10 -1
  2. package/dist/.build-fingerprint +1 -1
  3. package/dist/{agent-file-refresh-7XCACU34.js → agent-file-refresh-J3KY54E5.js} +3 -2
  4. package/dist/bin.js +7 -7
  5. package/dist/chunk-4HKZH6YK.js +307 -0
  6. package/dist/chunk-6DHJVLYP.js +2044 -0
  7. package/dist/{chunk-MUDLJG2O.js → chunk-CBL57QBQ.js} +25 -15
  8. package/dist/{chunk-5YTBTF25.js → chunk-EWFHDJY5.js} +2 -2
  9. package/dist/{chunk-IZW6MK3U.js → chunk-FY6LXRR6.js} +2 -2
  10. package/dist/{chunk-ZPEY5WE4.js → chunk-HKAX756N.js} +3 -3
  11. package/dist/{chunk-XLD4BUTF.js → chunk-MWLNBSTY.js} +2 -2
  12. package/dist/{chunk-YYRDLFSJ.js → chunk-QO4I5OYF.js} +40 -2
  13. package/dist/{chunk-UVLVQWWF.js → chunk-VVXPK6SE.js} +62 -20
  14. package/dist/{chunk-VKFQJEMW.js → chunk-WRYT2PAX.js} +14 -371
  15. package/dist/{chunk-ODNMVJ6H.js → chunk-YZ4GU6F5.js} +283 -252
  16. package/dist/cli.d.ts +22 -0
  17. package/dist/cli.js +5 -5
  18. package/dist/{codegen-command-RY2GWDLX.js → codegen-command-EXLKZ2ZI.js} +12 -10
  19. package/dist/{completion-TIPPZN7H.js → completion-2PVZK6YX.js} +2 -2
  20. package/dist/{deploy-command-DSISLUW5.js → deploy-command-SXX6RJWM.js} +13 -13
  21. package/dist/{env-target-7C2GKBCY.js → env-target-3EGIPR4D.js} +2 -2
  22. package/dist/{ephemeral-command-5K573ZSG.js → ephemeral-command-OGOYP7D6.js} +15 -15
  23. package/dist/{init-command-4AWL6CLW.js → init-command-6DGXEVZD.js} +10 -8
  24. package/dist/internal.js +1 -1
  25. package/dist/{lock-commands-7Q5LNZKL.js → lock-commands-R22J54XV.js} +9 -9
  26. package/dist/{marketplace-command-RATXTKXN.js → marketplace-command-XJIWL4YP.js} +6 -6
  27. package/dist/meta-client-OW5WKWW7.js +1 -1
  28. package/dist/node.js +8 -8
  29. package/dist/{release-command-QXLRJMY7.js → release-command-6PLMLGDK.js} +15 -15
  30. package/dist/sandbox-export-command-QCJY4GMV.js +1 -1
  31. package/dist/scaffold.d.ts +1896 -0
  32. package/dist/scaffold.js +101 -0
  33. package/dist/{test-command-BOLIU57E.js → test-command-LLPXKT35.js} +4 -4
  34. package/dist/{validate-command-SYCFEYZN.js → validate-command-WAT3ZJT3.js} +7 -7
  35. package/dist/{workspace-command-TOB2AJ6X.js → workspace-command-JKMI7RZ4.js} +13 -11
  36. package/dist/workspace-export-AJMGN3CQ.js +1 -1
  37. package/llms-full.txt +1 -1
  38. package/llms.txt +1 -1
  39. package/manifest.json +141 -1
  40. package/package.json +7 -1
@@ -0,0 +1,2044 @@
1
+ // src/emit/generated/shadcn-themes.generated.ts
2
+ var BASE_TOKENS = {
3
+ "neutral": {
4
+ label: "Neutral",
5
+ light: {
6
+ "background": "oklch(1 0 0)",
7
+ "foreground": "oklch(0.145 0 0)",
8
+ "card": "oklch(1 0 0)",
9
+ "card-foreground": "oklch(0.145 0 0)",
10
+ "popover": "oklch(1 0 0)",
11
+ "popover-foreground": "oklch(0.145 0 0)",
12
+ "primary": "oklch(0.205 0 0)",
13
+ "primary-foreground": "oklch(0.985 0 0)",
14
+ "secondary": "oklch(0.97 0 0)",
15
+ "secondary-foreground": "oklch(0.205 0 0)",
16
+ "muted": "oklch(0.97 0 0)",
17
+ "muted-foreground": "oklch(0.556 0 0)",
18
+ "accent": "oklch(0.97 0 0)",
19
+ "accent-foreground": "oklch(0.205 0 0)",
20
+ "destructive": "oklch(0.577 0.245 27.325)",
21
+ "border": "oklch(0.922 0 0)",
22
+ "input": "oklch(0.922 0 0)",
23
+ "ring": "oklch(0.708 0 0)",
24
+ "chart-1": "oklch(0.87 0 0)",
25
+ "chart-2": "oklch(0.556 0 0)",
26
+ "chart-3": "oklch(0.439 0 0)",
27
+ "chart-4": "oklch(0.371 0 0)",
28
+ "chart-5": "oklch(0.269 0 0)",
29
+ "radius": "0.625rem",
30
+ "sidebar": "oklch(0.985 0 0)",
31
+ "sidebar-foreground": "oklch(0.145 0 0)",
32
+ "sidebar-primary": "oklch(0.205 0 0)",
33
+ "sidebar-primary-foreground": "oklch(0.985 0 0)",
34
+ "sidebar-accent": "oklch(0.97 0 0)",
35
+ "sidebar-accent-foreground": "oklch(0.205 0 0)",
36
+ "sidebar-border": "oklch(0.922 0 0)",
37
+ "sidebar-ring": "oklch(0.708 0 0)"
38
+ },
39
+ dark: {
40
+ "background": "oklch(0.145 0 0)",
41
+ "foreground": "oklch(0.985 0 0)",
42
+ "card": "oklch(0.205 0 0)",
43
+ "card-foreground": "oklch(0.985 0 0)",
44
+ "popover": "oklch(0.205 0 0)",
45
+ "popover-foreground": "oklch(0.985 0 0)",
46
+ "primary": "oklch(0.922 0 0)",
47
+ "primary-foreground": "oklch(0.205 0 0)",
48
+ "secondary": "oklch(0.269 0 0)",
49
+ "secondary-foreground": "oklch(0.985 0 0)",
50
+ "muted": "oklch(0.269 0 0)",
51
+ "muted-foreground": "oklch(0.708 0 0)",
52
+ "accent": "oklch(0.269 0 0)",
53
+ "accent-foreground": "oklch(0.985 0 0)",
54
+ "destructive": "oklch(0.704 0.191 22.216)",
55
+ "border": "oklch(1 0 0 / 10%)",
56
+ "input": "oklch(1 0 0 / 15%)",
57
+ "ring": "oklch(0.556 0 0)",
58
+ "chart-1": "oklch(0.87 0 0)",
59
+ "chart-2": "oklch(0.556 0 0)",
60
+ "chart-3": "oklch(0.439 0 0)",
61
+ "chart-4": "oklch(0.371 0 0)",
62
+ "chart-5": "oklch(0.269 0 0)",
63
+ "sidebar": "oklch(0.205 0 0)",
64
+ "sidebar-foreground": "oklch(0.985 0 0)",
65
+ "sidebar-primary": "oklch(0.488 0.243 264.376)",
66
+ "sidebar-primary-foreground": "oklch(0.985 0 0)",
67
+ "sidebar-accent": "oklch(0.269 0 0)",
68
+ "sidebar-accent-foreground": "oklch(0.985 0 0)",
69
+ "sidebar-border": "oklch(1 0 0 / 10%)",
70
+ "sidebar-ring": "oklch(0.556 0 0)"
71
+ }
72
+ },
73
+ "stone": {
74
+ label: "Stone",
75
+ light: {
76
+ "background": "oklch(1 0 0)",
77
+ "foreground": "oklch(0.147 0.004 49.25)",
78
+ "card": "oklch(1 0 0)",
79
+ "card-foreground": "oklch(0.147 0.004 49.25)",
80
+ "popover": "oklch(1 0 0)",
81
+ "popover-foreground": "oklch(0.147 0.004 49.25)",
82
+ "primary": "oklch(0.216 0.006 56.043)",
83
+ "primary-foreground": "oklch(0.985 0.001 106.423)",
84
+ "secondary": "oklch(0.97 0.001 106.424)",
85
+ "secondary-foreground": "oklch(0.216 0.006 56.043)",
86
+ "muted": "oklch(0.97 0.001 106.424)",
87
+ "muted-foreground": "oklch(0.553 0.013 58.071)",
88
+ "accent": "oklch(0.97 0.001 106.424)",
89
+ "accent-foreground": "oklch(0.216 0.006 56.043)",
90
+ "destructive": "oklch(0.577 0.245 27.325)",
91
+ "border": "oklch(0.923 0.003 48.717)",
92
+ "input": "oklch(0.923 0.003 48.717)",
93
+ "ring": "oklch(0.709 0.01 56.259)",
94
+ "chart-1": "oklch(0.869 0.005 56.366)",
95
+ "chart-2": "oklch(0.553 0.013 58.071)",
96
+ "chart-3": "oklch(0.444 0.011 73.639)",
97
+ "chart-4": "oklch(0.374 0.01 67.558)",
98
+ "chart-5": "oklch(0.268 0.007 34.298)",
99
+ "radius": "0.625rem",
100
+ "sidebar": "oklch(0.985 0.001 106.423)",
101
+ "sidebar-foreground": "oklch(0.147 0.004 49.25)",
102
+ "sidebar-primary": "oklch(0.216 0.006 56.043)",
103
+ "sidebar-primary-foreground": "oklch(0.985 0.001 106.423)",
104
+ "sidebar-accent": "oklch(0.97 0.001 106.424)",
105
+ "sidebar-accent-foreground": "oklch(0.216 0.006 56.043)",
106
+ "sidebar-border": "oklch(0.923 0.003 48.717)",
107
+ "sidebar-ring": "oklch(0.709 0.01 56.259)"
108
+ },
109
+ dark: {
110
+ "background": "oklch(0.147 0.004 49.25)",
111
+ "foreground": "oklch(0.985 0.001 106.423)",
112
+ "card": "oklch(0.216 0.006 56.043)",
113
+ "card-foreground": "oklch(0.985 0.001 106.423)",
114
+ "popover": "oklch(0.216 0.006 56.043)",
115
+ "popover-foreground": "oklch(0.985 0.001 106.423)",
116
+ "primary": "oklch(0.923 0.003 48.717)",
117
+ "primary-foreground": "oklch(0.216 0.006 56.043)",
118
+ "secondary": "oklch(0.268 0.007 34.298)",
119
+ "secondary-foreground": "oklch(0.985 0.001 106.423)",
120
+ "muted": "oklch(0.268 0.007 34.298)",
121
+ "muted-foreground": "oklch(0.709 0.01 56.259)",
122
+ "accent": "oklch(0.268 0.007 34.298)",
123
+ "accent-foreground": "oklch(0.985 0.001 106.423)",
124
+ "destructive": "oklch(0.704 0.191 22.216)",
125
+ "border": "oklch(1 0 0 / 10%)",
126
+ "input": "oklch(1 0 0 / 15%)",
127
+ "ring": "oklch(0.553 0.013 58.071)",
128
+ "chart-1": "oklch(0.869 0.005 56.366)",
129
+ "chart-2": "oklch(0.553 0.013 58.071)",
130
+ "chart-3": "oklch(0.444 0.011 73.639)",
131
+ "chart-4": "oklch(0.374 0.01 67.558)",
132
+ "chart-5": "oklch(0.268 0.007 34.298)",
133
+ "sidebar": "oklch(0.216 0.006 56.043)",
134
+ "sidebar-foreground": "oklch(0.985 0.001 106.423)",
135
+ "sidebar-primary": "oklch(0.488 0.243 264.376)",
136
+ "sidebar-primary-foreground": "oklch(0.985 0.001 106.423)",
137
+ "sidebar-accent": "oklch(0.268 0.007 34.298)",
138
+ "sidebar-accent-foreground": "oklch(0.985 0.001 106.423)",
139
+ "sidebar-border": "oklch(1 0 0 / 10%)",
140
+ "sidebar-ring": "oklch(0.553 0.013 58.071)"
141
+ }
142
+ },
143
+ "zinc": {
144
+ label: "Zinc",
145
+ light: {
146
+ "background": "oklch(1 0 0)",
147
+ "foreground": "oklch(0.141 0.005 285.823)",
148
+ "card": "oklch(1 0 0)",
149
+ "card-foreground": "oklch(0.141 0.005 285.823)",
150
+ "popover": "oklch(1 0 0)",
151
+ "popover-foreground": "oklch(0.141 0.005 285.823)",
152
+ "primary": "oklch(0.21 0.006 285.885)",
153
+ "primary-foreground": "oklch(0.985 0 0)",
154
+ "secondary": "oklch(0.967 0.001 286.375)",
155
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
156
+ "muted": "oklch(0.967 0.001 286.375)",
157
+ "muted-foreground": "oklch(0.552 0.016 285.938)",
158
+ "accent": "oklch(0.967 0.001 286.375)",
159
+ "accent-foreground": "oklch(0.21 0.006 285.885)",
160
+ "destructive": "oklch(0.577 0.245 27.325)",
161
+ "border": "oklch(0.92 0.004 286.32)",
162
+ "input": "oklch(0.92 0.004 286.32)",
163
+ "ring": "oklch(0.705 0.015 286.067)",
164
+ "chart-1": "oklch(0.871 0.006 286.286)",
165
+ "chart-2": "oklch(0.552 0.016 285.938)",
166
+ "chart-3": "oklch(0.442 0.017 285.786)",
167
+ "chart-4": "oklch(0.37 0.013 285.805)",
168
+ "chart-5": "oklch(0.274 0.006 286.033)",
169
+ "radius": "0.625rem",
170
+ "sidebar": "oklch(0.985 0 0)",
171
+ "sidebar-foreground": "oklch(0.141 0.005 285.823)",
172
+ "sidebar-primary": "oklch(0.21 0.006 285.885)",
173
+ "sidebar-primary-foreground": "oklch(0.985 0 0)",
174
+ "sidebar-accent": "oklch(0.967 0.001 286.375)",
175
+ "sidebar-accent-foreground": "oklch(0.21 0.006 285.885)",
176
+ "sidebar-border": "oklch(0.92 0.004 286.32)",
177
+ "sidebar-ring": "oklch(0.705 0.015 286.067)"
178
+ },
179
+ dark: {
180
+ "background": "oklch(0.141 0.005 285.823)",
181
+ "foreground": "oklch(0.985 0 0)",
182
+ "card": "oklch(0.21 0.006 285.885)",
183
+ "card-foreground": "oklch(0.985 0 0)",
184
+ "popover": "oklch(0.21 0.006 285.885)",
185
+ "popover-foreground": "oklch(0.985 0 0)",
186
+ "primary": "oklch(0.92 0.004 286.32)",
187
+ "primary-foreground": "oklch(0.21 0.006 285.885)",
188
+ "secondary": "oklch(0.274 0.006 286.033)",
189
+ "secondary-foreground": "oklch(0.985 0 0)",
190
+ "muted": "oklch(0.274 0.006 286.033)",
191
+ "muted-foreground": "oklch(0.705 0.015 286.067)",
192
+ "accent": "oklch(0.274 0.006 286.033)",
193
+ "accent-foreground": "oklch(0.985 0 0)",
194
+ "destructive": "oklch(0.704 0.191 22.216)",
195
+ "border": "oklch(1 0 0 / 10%)",
196
+ "input": "oklch(1 0 0 / 15%)",
197
+ "ring": "oklch(0.552 0.016 285.938)",
198
+ "chart-1": "oklch(0.871 0.006 286.286)",
199
+ "chart-2": "oklch(0.552 0.016 285.938)",
200
+ "chart-3": "oklch(0.442 0.017 285.786)",
201
+ "chart-4": "oklch(0.37 0.013 285.805)",
202
+ "chart-5": "oklch(0.274 0.006 286.033)",
203
+ "sidebar": "oklch(0.21 0.006 285.885)",
204
+ "sidebar-foreground": "oklch(0.985 0 0)",
205
+ "sidebar-primary": "oklch(0.488 0.243 264.376)",
206
+ "sidebar-primary-foreground": "oklch(0.985 0 0)",
207
+ "sidebar-accent": "oklch(0.274 0.006 286.033)",
208
+ "sidebar-accent-foreground": "oklch(0.985 0 0)",
209
+ "sidebar-border": "oklch(1 0 0 / 10%)",
210
+ "sidebar-ring": "oklch(0.552 0.016 285.938)"
211
+ }
212
+ },
213
+ "mauve": {
214
+ label: "Mauve",
215
+ light: {
216
+ "background": "oklch(1 0 0)",
217
+ "foreground": "oklch(0.145 0.008 326)",
218
+ "card": "oklch(1 0 0)",
219
+ "card-foreground": "oklch(0.145 0.008 326)",
220
+ "popover": "oklch(1 0 0)",
221
+ "popover-foreground": "oklch(0.145 0.008 326)",
222
+ "primary": "oklch(0.212 0.019 322.12)",
223
+ "primary-foreground": "oklch(0.985 0 0)",
224
+ "secondary": "oklch(0.96 0.003 325.6)",
225
+ "secondary-foreground": "oklch(0.212 0.019 322.12)",
226
+ "muted": "oklch(0.96 0.003 325.6)",
227
+ "muted-foreground": "oklch(0.542 0.034 322.5)",
228
+ "accent": "oklch(0.96 0.003 325.6)",
229
+ "accent-foreground": "oklch(0.212 0.019 322.12)",
230
+ "destructive": "oklch(0.577 0.245 27.325)",
231
+ "border": "oklch(0.922 0.005 325.62)",
232
+ "input": "oklch(0.922 0.005 325.62)",
233
+ "ring": "oklch(0.711 0.019 323.02)",
234
+ "chart-1": "oklch(0.865 0.012 325.68)",
235
+ "chart-2": "oklch(0.542 0.034 322.5)",
236
+ "chart-3": "oklch(0.435 0.029 321.78)",
237
+ "chart-4": "oklch(0.364 0.029 323.89)",
238
+ "chart-5": "oklch(0.263 0.024 320.12)",
239
+ "radius": "0.625rem",
240
+ "sidebar": "oklch(0.985 0 0)",
241
+ "sidebar-foreground": "oklch(0.145 0.008 326)",
242
+ "sidebar-primary": "oklch(0.212 0.019 322.12)",
243
+ "sidebar-primary-foreground": "oklch(0.985 0 0)",
244
+ "sidebar-accent": "oklch(0.96 0.003 325.6)",
245
+ "sidebar-accent-foreground": "oklch(0.212 0.019 322.12)",
246
+ "sidebar-border": "oklch(0.922 0.005 325.62)",
247
+ "sidebar-ring": "oklch(0.711 0.019 323.02)"
248
+ },
249
+ dark: {
250
+ "background": "oklch(0.145 0.008 326)",
251
+ "foreground": "oklch(0.985 0 0)",
252
+ "card": "oklch(0.212 0.019 322.12)",
253
+ "card-foreground": "oklch(0.985 0 0)",
254
+ "popover": "oklch(0.212 0.019 322.12)",
255
+ "popover-foreground": "oklch(0.985 0 0)",
256
+ "primary": "oklch(0.922 0.005 325.62)",
257
+ "primary-foreground": "oklch(0.212 0.019 322.12)",
258
+ "secondary": "oklch(0.263 0.024 320.12)",
259
+ "secondary-foreground": "oklch(0.985 0 0)",
260
+ "muted": "oklch(0.263 0.024 320.12)",
261
+ "muted-foreground": "oklch(0.711 0.019 323.02)",
262
+ "accent": "oklch(0.263 0.024 320.12)",
263
+ "accent-foreground": "oklch(0.985 0 0)",
264
+ "destructive": "oklch(0.704 0.191 22.216)",
265
+ "border": "oklch(1 0 0 / 10%)",
266
+ "input": "oklch(1 0 0 / 15%)",
267
+ "ring": "oklch(0.542 0.034 322.5)",
268
+ "chart-1": "oklch(0.865 0.012 325.68)",
269
+ "chart-2": "oklch(0.542 0.034 322.5)",
270
+ "chart-3": "oklch(0.435 0.029 321.78)",
271
+ "chart-4": "oklch(0.364 0.029 323.89)",
272
+ "chart-5": "oklch(0.263 0.024 320.12)",
273
+ "sidebar": "oklch(0.212 0.019 322.12)",
274
+ "sidebar-foreground": "oklch(0.985 0 0)",
275
+ "sidebar-primary": "oklch(0.488 0.243 264.376)",
276
+ "sidebar-primary-foreground": "oklch(0.985 0 0)",
277
+ "sidebar-accent": "oklch(0.263 0.024 320.12)",
278
+ "sidebar-accent-foreground": "oklch(0.985 0 0)",
279
+ "sidebar-border": "oklch(1 0 0 / 10%)",
280
+ "sidebar-ring": "oklch(0.542 0.034 322.5)"
281
+ }
282
+ },
283
+ "olive": {
284
+ label: "Olive",
285
+ light: {
286
+ "background": "oklch(1 0 0)",
287
+ "foreground": "oklch(0.153 0.006 107.1)",
288
+ "card": "oklch(1 0 0)",
289
+ "card-foreground": "oklch(0.153 0.006 107.1)",
290
+ "popover": "oklch(1 0 0)",
291
+ "popover-foreground": "oklch(0.153 0.006 107.1)",
292
+ "primary": "oklch(0.228 0.013 107.4)",
293
+ "primary-foreground": "oklch(0.988 0.003 106.5)",
294
+ "secondary": "oklch(0.966 0.005 106.5)",
295
+ "secondary-foreground": "oklch(0.228 0.013 107.4)",
296
+ "muted": "oklch(0.966 0.005 106.5)",
297
+ "muted-foreground": "oklch(0.58 0.031 107.3)",
298
+ "accent": "oklch(0.966 0.005 106.5)",
299
+ "accent-foreground": "oklch(0.228 0.013 107.4)",
300
+ "destructive": "oklch(0.577 0.245 27.325)",
301
+ "border": "oklch(0.93 0.007 106.5)",
302
+ "input": "oklch(0.93 0.007 106.5)",
303
+ "ring": "oklch(0.737 0.021 106.9)",
304
+ "chart-1": "oklch(0.88 0.011 106.6)",
305
+ "chart-2": "oklch(0.58 0.031 107.3)",
306
+ "chart-3": "oklch(0.466 0.025 107.3)",
307
+ "chart-4": "oklch(0.394 0.023 107.4)",
308
+ "chart-5": "oklch(0.286 0.016 107.4)",
309
+ "radius": "0.625rem",
310
+ "sidebar": "oklch(0.988 0.003 106.5)",
311
+ "sidebar-foreground": "oklch(0.153 0.006 107.1)",
312
+ "sidebar-primary": "oklch(0.228 0.013 107.4)",
313
+ "sidebar-primary-foreground": "oklch(0.988 0.003 106.5)",
314
+ "sidebar-accent": "oklch(0.966 0.005 106.5)",
315
+ "sidebar-accent-foreground": "oklch(0.228 0.013 107.4)",
316
+ "sidebar-border": "oklch(0.93 0.007 106.5)",
317
+ "sidebar-ring": "oklch(0.737 0.021 106.9)"
318
+ },
319
+ dark: {
320
+ "background": "oklch(0.153 0.006 107.1)",
321
+ "foreground": "oklch(0.988 0.003 106.5)",
322
+ "card": "oklch(0.228 0.013 107.4)",
323
+ "card-foreground": "oklch(0.988 0.003 106.5)",
324
+ "popover": "oklch(0.228 0.013 107.4)",
325
+ "popover-foreground": "oklch(0.988 0.003 106.5)",
326
+ "primary": "oklch(0.93 0.007 106.5)",
327
+ "primary-foreground": "oklch(0.228 0.013 107.4)",
328
+ "secondary": "oklch(0.286 0.016 107.4)",
329
+ "secondary-foreground": "oklch(0.988 0.003 106.5)",
330
+ "muted": "oklch(0.286 0.016 107.4)",
331
+ "muted-foreground": "oklch(0.737 0.021 106.9)",
332
+ "accent": "oklch(0.286 0.016 107.4)",
333
+ "accent-foreground": "oklch(0.988 0.003 106.5)",
334
+ "destructive": "oklch(0.704 0.191 22.216)",
335
+ "border": "oklch(1 0 0 / 10%)",
336
+ "input": "oklch(1 0 0 / 15%)",
337
+ "ring": "oklch(0.58 0.031 107.3)",
338
+ "chart-1": "oklch(0.88 0.011 106.6)",
339
+ "chart-2": "oklch(0.58 0.031 107.3)",
340
+ "chart-3": "oklch(0.466 0.025 107.3)",
341
+ "chart-4": "oklch(0.394 0.023 107.4)",
342
+ "chart-5": "oklch(0.286 0.016 107.4)",
343
+ "sidebar": "oklch(0.228 0.013 107.4)",
344
+ "sidebar-foreground": "oklch(0.988 0.003 106.5)",
345
+ "sidebar-primary": "oklch(0.488 0.243 264.376)",
346
+ "sidebar-primary-foreground": "oklch(0.988 0.003 106.5)",
347
+ "sidebar-accent": "oklch(0.286 0.016 107.4)",
348
+ "sidebar-accent-foreground": "oklch(0.988 0.003 106.5)",
349
+ "sidebar-border": "oklch(1 0 0 / 10%)",
350
+ "sidebar-ring": "oklch(0.58 0.031 107.3)"
351
+ }
352
+ },
353
+ "mist": {
354
+ label: "Mist",
355
+ light: {
356
+ "background": "oklch(1 0 0)",
357
+ "foreground": "oklch(0.148 0.004 228.8)",
358
+ "card": "oklch(1 0 0)",
359
+ "card-foreground": "oklch(0.148 0.004 228.8)",
360
+ "popover": "oklch(1 0 0)",
361
+ "popover-foreground": "oklch(0.148 0.004 228.8)",
362
+ "primary": "oklch(0.218 0.008 223.9)",
363
+ "primary-foreground": "oklch(0.987 0.002 197.1)",
364
+ "secondary": "oklch(0.963 0.002 197.1)",
365
+ "secondary-foreground": "oklch(0.218 0.008 223.9)",
366
+ "muted": "oklch(0.963 0.002 197.1)",
367
+ "muted-foreground": "oklch(0.56 0.021 213.5)",
368
+ "accent": "oklch(0.963 0.002 197.1)",
369
+ "accent-foreground": "oklch(0.218 0.008 223.9)",
370
+ "destructive": "oklch(0.577 0.245 27.325)",
371
+ "border": "oklch(0.925 0.005 214.3)",
372
+ "input": "oklch(0.925 0.005 214.3)",
373
+ "ring": "oklch(0.723 0.014 214.4)",
374
+ "chart-1": "oklch(0.872 0.007 219.6)",
375
+ "chart-2": "oklch(0.56 0.021 213.5)",
376
+ "chart-3": "oklch(0.45 0.017 213.2)",
377
+ "chart-4": "oklch(0.378 0.015 216)",
378
+ "chart-5": "oklch(0.275 0.011 216.9)",
379
+ "radius": "0.625rem",
380
+ "sidebar": "oklch(0.987 0.002 197.1)",
381
+ "sidebar-foreground": "oklch(0.148 0.004 228.8)",
382
+ "sidebar-primary": "oklch(0.218 0.008 223.9)",
383
+ "sidebar-primary-foreground": "oklch(0.987 0.002 197.1)",
384
+ "sidebar-accent": "oklch(0.963 0.002 197.1)",
385
+ "sidebar-accent-foreground": "oklch(0.218 0.008 223.9)",
386
+ "sidebar-border": "oklch(0.925 0.005 214.3)",
387
+ "sidebar-ring": "oklch(0.723 0.014 214.4)"
388
+ },
389
+ dark: {
390
+ "background": "oklch(0.148 0.004 228.8)",
391
+ "foreground": "oklch(0.987 0.002 197.1)",
392
+ "card": "oklch(0.218 0.008 223.9)",
393
+ "card-foreground": "oklch(0.987 0.002 197.1)",
394
+ "popover": "oklch(0.218 0.008 223.9)",
395
+ "popover-foreground": "oklch(0.987 0.002 197.1)",
396
+ "primary": "oklch(0.925 0.005 214.3)",
397
+ "primary-foreground": "oklch(0.218 0.008 223.9)",
398
+ "secondary": "oklch(0.275 0.011 216.9)",
399
+ "secondary-foreground": "oklch(0.987 0.002 197.1)",
400
+ "muted": "oklch(0.275 0.011 216.9)",
401
+ "muted-foreground": "oklch(0.723 0.014 214.4)",
402
+ "accent": "oklch(0.275 0.011 216.9)",
403
+ "accent-foreground": "oklch(0.987 0.002 197.1)",
404
+ "destructive": "oklch(0.704 0.191 22.216)",
405
+ "border": "oklch(1 0 0 / 10%)",
406
+ "input": "oklch(1 0 0 / 15%)",
407
+ "ring": "oklch(0.56 0.021 213.5)",
408
+ "chart-1": "oklch(0.872 0.007 219.6)",
409
+ "chart-2": "oklch(0.56 0.021 213.5)",
410
+ "chart-3": "oklch(0.45 0.017 213.2)",
411
+ "chart-4": "oklch(0.378 0.015 216)",
412
+ "chart-5": "oklch(0.275 0.011 216.9)",
413
+ "sidebar": "oklch(0.218 0.008 223.9)",
414
+ "sidebar-foreground": "oklch(0.987 0.002 197.1)",
415
+ "sidebar-primary": "oklch(0.488 0.243 264.376)",
416
+ "sidebar-primary-foreground": "oklch(0.987 0.002 197.1)",
417
+ "sidebar-accent": "oklch(0.275 0.011 216.9)",
418
+ "sidebar-accent-foreground": "oklch(0.987 0.002 197.1)",
419
+ "sidebar-border": "oklch(1 0 0 / 10%)",
420
+ "sidebar-ring": "oklch(0.56 0.021 213.5)"
421
+ }
422
+ },
423
+ "taupe": {
424
+ label: "Taupe",
425
+ light: {
426
+ "background": "oklch(1 0 0)",
427
+ "foreground": "oklch(0.147 0.004 49.3)",
428
+ "card": "oklch(1 0 0)",
429
+ "card-foreground": "oklch(0.147 0.004 49.3)",
430
+ "popover": "oklch(1 0 0)",
431
+ "popover-foreground": "oklch(0.147 0.004 49.3)",
432
+ "primary": "oklch(0.214 0.009 43.1)",
433
+ "primary-foreground": "oklch(0.986 0.002 67.8)",
434
+ "secondary": "oklch(0.96 0.002 17.2)",
435
+ "secondary-foreground": "oklch(0.214 0.009 43.1)",
436
+ "muted": "oklch(0.96 0.002 17.2)",
437
+ "muted-foreground": "oklch(0.547 0.021 43.1)",
438
+ "accent": "oklch(0.96 0.002 17.2)",
439
+ "accent-foreground": "oklch(0.214 0.009 43.1)",
440
+ "destructive": "oklch(0.577 0.245 27.325)",
441
+ "border": "oklch(0.922 0.005 34.3)",
442
+ "input": "oklch(0.922 0.005 34.3)",
443
+ "ring": "oklch(0.714 0.014 41.2)",
444
+ "chart-1": "oklch(0.868 0.007 39.5)",
445
+ "chart-2": "oklch(0.547 0.021 43.1)",
446
+ "chart-3": "oklch(0.438 0.017 39.3)",
447
+ "chart-4": "oklch(0.367 0.016 35.7)",
448
+ "chart-5": "oklch(0.268 0.011 36.5)",
449
+ "radius": "0.625rem",
450
+ "sidebar": "oklch(0.986 0.002 67.8)",
451
+ "sidebar-foreground": "oklch(0.147 0.004 49.3)",
452
+ "sidebar-primary": "oklch(0.214 0.009 43.1)",
453
+ "sidebar-primary-foreground": "oklch(0.986 0.002 67.8)",
454
+ "sidebar-accent": "oklch(0.96 0.002 17.2)",
455
+ "sidebar-accent-foreground": "oklch(0.214 0.009 43.1)",
456
+ "sidebar-border": "oklch(0.922 0.005 34.3)",
457
+ "sidebar-ring": "oklch(0.714 0.014 41.2)"
458
+ },
459
+ dark: {
460
+ "background": "oklch(0.147 0.004 49.3)",
461
+ "foreground": "oklch(0.986 0.002 67.8)",
462
+ "card": "oklch(0.214 0.009 43.1)",
463
+ "card-foreground": "oklch(0.986 0.002 67.8)",
464
+ "popover": "oklch(0.214 0.009 43.1)",
465
+ "popover-foreground": "oklch(0.986 0.002 67.8)",
466
+ "primary": "oklch(0.922 0.005 34.3)",
467
+ "primary-foreground": "oklch(0.214 0.009 43.1)",
468
+ "secondary": "oklch(0.268 0.011 36.5)",
469
+ "secondary-foreground": "oklch(0.986 0.002 67.8)",
470
+ "muted": "oklch(0.268 0.011 36.5)",
471
+ "muted-foreground": "oklch(0.714 0.014 41.2)",
472
+ "accent": "oklch(0.268 0.011 36.5)",
473
+ "accent-foreground": "oklch(0.986 0.002 67.8)",
474
+ "destructive": "oklch(0.704 0.191 22.216)",
475
+ "border": "oklch(1 0 0 / 10%)",
476
+ "input": "oklch(1 0 0 / 15%)",
477
+ "ring": "oklch(0.547 0.021 43.1)",
478
+ "chart-1": "oklch(0.868 0.007 39.5)",
479
+ "chart-2": "oklch(0.547 0.021 43.1)",
480
+ "chart-3": "oklch(0.438 0.017 39.3)",
481
+ "chart-4": "oklch(0.367 0.016 35.7)",
482
+ "chart-5": "oklch(0.268 0.011 36.5)",
483
+ "sidebar": "oklch(0.214 0.009 43.1)",
484
+ "sidebar-foreground": "oklch(0.986 0.002 67.8)",
485
+ "sidebar-primary": "oklch(0.488 0.243 264.376)",
486
+ "sidebar-primary-foreground": "oklch(0.986 0.002 67.8)",
487
+ "sidebar-accent": "oklch(0.268 0.011 36.5)",
488
+ "sidebar-accent-foreground": "oklch(0.986 0.002 67.8)",
489
+ "sidebar-border": "oklch(1 0 0 / 10%)",
490
+ "sidebar-ring": "oklch(0.547 0.021 43.1)"
491
+ }
492
+ }
493
+ };
494
+ var ACCENT_TOKENS = {
495
+ "amber": {
496
+ label: "Amber",
497
+ light: {
498
+ "primary": "oklch(0.555 0.163 48.998)",
499
+ "primary-foreground": "oklch(0.987 0.022 95.277)",
500
+ "secondary": "oklch(0.967 0.001 286.375)",
501
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
502
+ "chart-1": "oklch(0.879 0.169 91.605)",
503
+ "chart-2": "oklch(0.769 0.188 70.08)",
504
+ "chart-3": "oklch(0.666 0.179 58.318)",
505
+ "chart-4": "oklch(0.555 0.163 48.998)",
506
+ "chart-5": "oklch(0.473 0.137 46.201)",
507
+ "sidebar-primary": "oklch(0.666 0.179 58.318)",
508
+ "sidebar-primary-foreground": "oklch(0.987 0.022 95.277)"
509
+ },
510
+ dark: {
511
+ "primary": "oklch(0.473 0.137 46.201)",
512
+ "primary-foreground": "oklch(0.987 0.022 95.277)",
513
+ "secondary": "oklch(0.274 0.006 286.033)",
514
+ "secondary-foreground": "oklch(0.985 0 0)",
515
+ "chart-1": "oklch(0.879 0.169 91.605)",
516
+ "chart-2": "oklch(0.769 0.188 70.08)",
517
+ "chart-3": "oklch(0.666 0.179 58.318)",
518
+ "chart-4": "oklch(0.555 0.163 48.998)",
519
+ "chart-5": "oklch(0.473 0.137 46.201)",
520
+ "sidebar-primary": "oklch(0.769 0.188 70.08)",
521
+ "sidebar-primary-foreground": "oklch(0.279 0.077 45.635)"
522
+ }
523
+ },
524
+ "blue": {
525
+ label: "Blue",
526
+ light: {
527
+ "primary": "oklch(0.488 0.243 264.376)",
528
+ "primary-foreground": "oklch(0.97 0.014 254.604)",
529
+ "secondary": "oklch(0.967 0.001 286.375)",
530
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
531
+ "chart-1": "oklch(0.809 0.105 251.813)",
532
+ "chart-2": "oklch(0.623 0.214 259.815)",
533
+ "chart-3": "oklch(0.546 0.245 262.881)",
534
+ "chart-4": "oklch(0.488 0.243 264.376)",
535
+ "chart-5": "oklch(0.424 0.199 265.638)",
536
+ "sidebar-primary": "oklch(0.546 0.245 262.881)",
537
+ "sidebar-primary-foreground": "oklch(0.97 0.014 254.604)"
538
+ },
539
+ dark: {
540
+ "primary": "oklch(0.424 0.199 265.638)",
541
+ "primary-foreground": "oklch(0.97 0.014 254.604)",
542
+ "secondary": "oklch(0.274 0.006 286.033)",
543
+ "secondary-foreground": "oklch(0.985 0 0)",
544
+ "chart-1": "oklch(0.809 0.105 251.813)",
545
+ "chart-2": "oklch(0.623 0.214 259.815)",
546
+ "chart-3": "oklch(0.546 0.245 262.881)",
547
+ "chart-4": "oklch(0.488 0.243 264.376)",
548
+ "chart-5": "oklch(0.424 0.199 265.638)",
549
+ "sidebar-primary": "oklch(0.623 0.214 259.815)",
550
+ "sidebar-primary-foreground": "oklch(0.97 0.014 254.604)"
551
+ }
552
+ },
553
+ "cyan": {
554
+ label: "Cyan",
555
+ light: {
556
+ "primary": "oklch(0.52 0.105 223.128)",
557
+ "primary-foreground": "oklch(0.984 0.019 200.873)",
558
+ "secondary": "oklch(0.967 0.001 286.375)",
559
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
560
+ "chart-1": "oklch(0.865 0.127 207.078)",
561
+ "chart-2": "oklch(0.715 0.143 215.221)",
562
+ "chart-3": "oklch(0.609 0.126 221.723)",
563
+ "chart-4": "oklch(0.52 0.105 223.128)",
564
+ "chart-5": "oklch(0.45 0.085 224.283)",
565
+ "sidebar-primary": "oklch(0.609 0.126 221.723)",
566
+ "sidebar-primary-foreground": "oklch(0.984 0.019 200.873)"
567
+ },
568
+ dark: {
569
+ "primary": "oklch(0.45 0.085 224.283)",
570
+ "primary-foreground": "oklch(0.984 0.019 200.873)",
571
+ "secondary": "oklch(0.274 0.006 286.033)",
572
+ "secondary-foreground": "oklch(0.985 0 0)",
573
+ "chart-1": "oklch(0.865 0.127 207.078)",
574
+ "chart-2": "oklch(0.715 0.143 215.221)",
575
+ "chart-3": "oklch(0.609 0.126 221.723)",
576
+ "chart-4": "oklch(0.52 0.105 223.128)",
577
+ "chart-5": "oklch(0.45 0.085 224.283)",
578
+ "sidebar-primary": "oklch(0.715 0.143 215.221)",
579
+ "sidebar-primary-foreground": "oklch(0.302 0.056 229.695)"
580
+ }
581
+ },
582
+ "emerald": {
583
+ label: "Emerald",
584
+ light: {
585
+ "primary": "oklch(0.508 0.118 165.612)",
586
+ "primary-foreground": "oklch(0.979 0.021 166.113)",
587
+ "secondary": "oklch(0.967 0.001 286.375)",
588
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
589
+ "chart-1": "oklch(0.845 0.143 164.978)",
590
+ "chart-2": "oklch(0.696 0.17 162.48)",
591
+ "chart-3": "oklch(0.596 0.145 163.225)",
592
+ "chart-4": "oklch(0.508 0.118 165.612)",
593
+ "chart-5": "oklch(0.432 0.095 166.913)",
594
+ "sidebar-primary": "oklch(0.596 0.145 163.225)",
595
+ "sidebar-primary-foreground": "oklch(0.979 0.021 166.113)"
596
+ },
597
+ dark: {
598
+ "primary": "oklch(0.432 0.095 166.913)",
599
+ "primary-foreground": "oklch(0.979 0.021 166.113)",
600
+ "secondary": "oklch(0.274 0.006 286.033)",
601
+ "secondary-foreground": "oklch(0.985 0 0)",
602
+ "chart-1": "oklch(0.845 0.143 164.978)",
603
+ "chart-2": "oklch(0.696 0.17 162.48)",
604
+ "chart-3": "oklch(0.596 0.145 163.225)",
605
+ "chart-4": "oklch(0.508 0.118 165.612)",
606
+ "chart-5": "oklch(0.432 0.095 166.913)",
607
+ "sidebar-primary": "oklch(0.696 0.17 162.48)",
608
+ "sidebar-primary-foreground": "oklch(0.262 0.051 172.552)"
609
+ }
610
+ },
611
+ "fuchsia": {
612
+ label: "Fuchsia",
613
+ light: {
614
+ "primary": "oklch(0.518 0.253 323.949)",
615
+ "primary-foreground": "oklch(0.977 0.017 320.058)",
616
+ "secondary": "oklch(0.967 0.001 286.375)",
617
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
618
+ "chart-1": "oklch(0.833 0.145 321.434)",
619
+ "chart-2": "oklch(0.667 0.295 322.15)",
620
+ "chart-3": "oklch(0.591 0.293 322.896)",
621
+ "chart-4": "oklch(0.518 0.253 323.949)",
622
+ "chart-5": "oklch(0.452 0.211 324.591)",
623
+ "sidebar-primary": "oklch(0.591 0.293 322.896)",
624
+ "sidebar-primary-foreground": "oklch(0.977 0.017 320.058)"
625
+ },
626
+ dark: {
627
+ "primary": "oklch(0.452 0.211 324.591)",
628
+ "primary-foreground": "oklch(0.977 0.017 320.058)",
629
+ "secondary": "oklch(0.274 0.006 286.033)",
630
+ "secondary-foreground": "oklch(0.985 0 0)",
631
+ "chart-1": "oklch(0.833 0.145 321.434)",
632
+ "chart-2": "oklch(0.667 0.295 322.15)",
633
+ "chart-3": "oklch(0.591 0.293 322.896)",
634
+ "chart-4": "oklch(0.518 0.253 323.949)",
635
+ "chart-5": "oklch(0.452 0.211 324.591)",
636
+ "sidebar-primary": "oklch(0.667 0.295 322.15)",
637
+ "sidebar-primary-foreground": "oklch(0.977 0.017 320.058)"
638
+ }
639
+ },
640
+ "green": {
641
+ label: "Green",
642
+ light: {
643
+ "primary": "oklch(0.527 0.154 150.069)",
644
+ "primary-foreground": "oklch(0.982 0.018 155.826)",
645
+ "secondary": "oklch(0.967 0.001 286.375)",
646
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
647
+ "chart-1": "oklch(0.871 0.15 154.449)",
648
+ "chart-2": "oklch(0.723 0.219 149.579)",
649
+ "chart-3": "oklch(0.627 0.194 149.214)",
650
+ "chart-4": "oklch(0.527 0.154 150.069)",
651
+ "chart-5": "oklch(0.448 0.119 151.328)",
652
+ "sidebar-primary": "oklch(0.627 0.194 149.214)",
653
+ "sidebar-primary-foreground": "oklch(0.982 0.018 155.826)"
654
+ },
655
+ dark: {
656
+ "primary": "oklch(0.448 0.119 151.328)",
657
+ "primary-foreground": "oklch(0.982 0.018 155.826)",
658
+ "secondary": "oklch(0.274 0.006 286.033)",
659
+ "secondary-foreground": "oklch(0.985 0 0)",
660
+ "chart-1": "oklch(0.871 0.15 154.449)",
661
+ "chart-2": "oklch(0.723 0.219 149.579)",
662
+ "chart-3": "oklch(0.627 0.194 149.214)",
663
+ "chart-4": "oklch(0.527 0.154 150.069)",
664
+ "chart-5": "oklch(0.448 0.119 151.328)",
665
+ "sidebar-primary": "oklch(0.723 0.219 149.579)",
666
+ "sidebar-primary-foreground": "oklch(0.982 0.018 155.826)"
667
+ }
668
+ },
669
+ "indigo": {
670
+ label: "Indigo",
671
+ light: {
672
+ "primary": "oklch(0.457 0.24 277.023)",
673
+ "primary-foreground": "oklch(0.962 0.018 272.314)",
674
+ "secondary": "oklch(0.967 0.001 286.375)",
675
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
676
+ "chart-1": "oklch(0.785 0.115 274.713)",
677
+ "chart-2": "oklch(0.585 0.233 277.117)",
678
+ "chart-3": "oklch(0.511 0.262 276.966)",
679
+ "chart-4": "oklch(0.457 0.24 277.023)",
680
+ "chart-5": "oklch(0.398 0.195 277.366)",
681
+ "sidebar-primary": "oklch(0.511 0.262 276.966)",
682
+ "sidebar-primary-foreground": "oklch(0.962 0.018 272.314)"
683
+ },
684
+ dark: {
685
+ "primary": "oklch(0.398 0.195 277.366)",
686
+ "primary-foreground": "oklch(0.962 0.018 272.314)",
687
+ "secondary": "oklch(0.274 0.006 286.033)",
688
+ "secondary-foreground": "oklch(0.985 0 0)",
689
+ "chart-1": "oklch(0.785 0.115 274.713)",
690
+ "chart-2": "oklch(0.585 0.233 277.117)",
691
+ "chart-3": "oklch(0.511 0.262 276.966)",
692
+ "chart-4": "oklch(0.457 0.24 277.023)",
693
+ "chart-5": "oklch(0.398 0.195 277.366)",
694
+ "sidebar-primary": "oklch(0.585 0.233 277.117)",
695
+ "sidebar-primary-foreground": "oklch(0.962 0.018 272.314)"
696
+ }
697
+ },
698
+ "lime": {
699
+ label: "Lime",
700
+ light: {
701
+ "primary": "oklch(0.841 0.238 128.85)",
702
+ "primary-foreground": "oklch(0.405 0.101 131.063)",
703
+ "secondary": "oklch(0.967 0.001 286.375)",
704
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
705
+ "chart-1": "oklch(0.897 0.196 126.665)",
706
+ "chart-2": "oklch(0.768 0.233 130.85)",
707
+ "chart-3": "oklch(0.648 0.2 131.684)",
708
+ "chart-4": "oklch(0.532 0.157 131.589)",
709
+ "chart-5": "oklch(0.453 0.124 130.933)",
710
+ "sidebar-primary": "oklch(0.648 0.2 131.684)",
711
+ "sidebar-primary-foreground": "oklch(0.986 0.031 120.757)"
712
+ },
713
+ dark: {
714
+ "primary": "oklch(0.768 0.233 130.85)",
715
+ "primary-foreground": "oklch(0.405 0.101 131.063)",
716
+ "secondary": "oklch(0.274 0.006 286.033)",
717
+ "secondary-foreground": "oklch(0.985 0 0)",
718
+ "chart-1": "oklch(0.897 0.196 126.665)",
719
+ "chart-2": "oklch(0.768 0.233 130.85)",
720
+ "chart-3": "oklch(0.648 0.2 131.684)",
721
+ "chart-4": "oklch(0.532 0.157 131.589)",
722
+ "chart-5": "oklch(0.453 0.124 130.933)",
723
+ "sidebar-primary": "oklch(0.768 0.233 130.85)",
724
+ "sidebar-primary-foreground": "oklch(0.274 0.072 132.109)"
725
+ }
726
+ },
727
+ "orange": {
728
+ label: "Orange",
729
+ light: {
730
+ "primary": "oklch(0.553 0.195 38.402)",
731
+ "primary-foreground": "oklch(0.98 0.016 73.684)",
732
+ "secondary": "oklch(0.967 0.001 286.375)",
733
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
734
+ "chart-1": "oklch(0.837 0.128 66.29)",
735
+ "chart-2": "oklch(0.705 0.213 47.604)",
736
+ "chart-3": "oklch(0.646 0.222 41.116)",
737
+ "chart-4": "oklch(0.553 0.195 38.402)",
738
+ "chart-5": "oklch(0.47 0.157 37.304)",
739
+ "sidebar-primary": "oklch(0.646 0.222 41.116)",
740
+ "sidebar-primary-foreground": "oklch(0.98 0.016 73.684)"
741
+ },
742
+ dark: {
743
+ "primary": "oklch(0.47 0.157 37.304)",
744
+ "primary-foreground": "oklch(0.98 0.016 73.684)",
745
+ "secondary": "oklch(0.274 0.006 286.033)",
746
+ "secondary-foreground": "oklch(0.985 0 0)",
747
+ "chart-1": "oklch(0.837 0.128 66.29)",
748
+ "chart-2": "oklch(0.705 0.213 47.604)",
749
+ "chart-3": "oklch(0.646 0.222 41.116)",
750
+ "chart-4": "oklch(0.553 0.195 38.402)",
751
+ "chart-5": "oklch(0.47 0.157 37.304)",
752
+ "sidebar-primary": "oklch(0.705 0.213 47.604)",
753
+ "sidebar-primary-foreground": "oklch(0.98 0.016 73.684)"
754
+ }
755
+ },
756
+ "pink": {
757
+ label: "Pink",
758
+ light: {
759
+ "primary": "oklch(0.525 0.223 3.958)",
760
+ "primary-foreground": "oklch(0.971 0.014 343.198)",
761
+ "secondary": "oklch(0.967 0.001 286.375)",
762
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
763
+ "chart-1": "oklch(0.823 0.12 346.018)",
764
+ "chart-2": "oklch(0.656 0.241 354.308)",
765
+ "chart-3": "oklch(0.592 0.249 0.584)",
766
+ "chart-4": "oklch(0.525 0.223 3.958)",
767
+ "chart-5": "oklch(0.459 0.187 3.815)",
768
+ "sidebar-primary": "oklch(0.592 0.249 0.584)",
769
+ "sidebar-primary-foreground": "oklch(0.971 0.014 343.198)"
770
+ },
771
+ dark: {
772
+ "primary": "oklch(0.459 0.187 3.815)",
773
+ "primary-foreground": "oklch(0.971 0.014 343.198)",
774
+ "secondary": "oklch(0.274 0.006 286.033)",
775
+ "secondary-foreground": "oklch(0.985 0 0)",
776
+ "chart-1": "oklch(0.823 0.12 346.018)",
777
+ "chart-2": "oklch(0.656 0.241 354.308)",
778
+ "chart-3": "oklch(0.592 0.249 0.584)",
779
+ "chart-4": "oklch(0.525 0.223 3.958)",
780
+ "chart-5": "oklch(0.459 0.187 3.815)",
781
+ "sidebar-primary": "oklch(0.656 0.241 354.308)",
782
+ "sidebar-primary-foreground": "oklch(0.971 0.014 343.198)"
783
+ }
784
+ },
785
+ "purple": {
786
+ label: "Purple",
787
+ light: {
788
+ "primary": "oklch(0.496 0.265 301.924)",
789
+ "primary-foreground": "oklch(0.977 0.014 308.299)",
790
+ "secondary": "oklch(0.967 0.001 286.375)",
791
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
792
+ "chart-1": "oklch(0.827 0.119 306.383)",
793
+ "chart-2": "oklch(0.627 0.265 303.9)",
794
+ "chart-3": "oklch(0.558 0.288 302.321)",
795
+ "chart-4": "oklch(0.496 0.265 301.924)",
796
+ "chart-5": "oklch(0.438 0.218 303.724)",
797
+ "sidebar-primary": "oklch(0.558 0.288 302.321)",
798
+ "sidebar-primary-foreground": "oklch(0.977 0.014 308.299)"
799
+ },
800
+ dark: {
801
+ "primary": "oklch(0.438 0.218 303.724)",
802
+ "primary-foreground": "oklch(0.977 0.014 308.299)",
803
+ "secondary": "oklch(0.274 0.006 286.033)",
804
+ "secondary-foreground": "oklch(0.985 0 0)",
805
+ "chart-1": "oklch(0.827 0.119 306.383)",
806
+ "chart-2": "oklch(0.627 0.265 303.9)",
807
+ "chart-3": "oklch(0.558 0.288 302.321)",
808
+ "chart-4": "oklch(0.496 0.265 301.924)",
809
+ "chart-5": "oklch(0.438 0.218 303.724)",
810
+ "sidebar-primary": "oklch(0.627 0.265 303.9)",
811
+ "sidebar-primary-foreground": "oklch(0.977 0.014 308.299)"
812
+ }
813
+ },
814
+ "red": {
815
+ label: "Red",
816
+ light: {
817
+ "primary": "oklch(0.505 0.213 27.518)",
818
+ "primary-foreground": "oklch(0.971 0.013 17.38)",
819
+ "secondary": "oklch(0.967 0.001 286.375)",
820
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
821
+ "chart-1": "oklch(0.808 0.114 19.571)",
822
+ "chart-2": "oklch(0.637 0.237 25.331)",
823
+ "chart-3": "oklch(0.577 0.245 27.325)",
824
+ "chart-4": "oklch(0.505 0.213 27.518)",
825
+ "chart-5": "oklch(0.444 0.177 26.899)",
826
+ "sidebar-primary": "oklch(0.577 0.245 27.325)",
827
+ "sidebar-primary-foreground": "oklch(0.971 0.013 17.38)"
828
+ },
829
+ dark: {
830
+ "primary": "oklch(0.444 0.177 26.899)",
831
+ "primary-foreground": "oklch(0.971 0.013 17.38)",
832
+ "secondary": "oklch(0.274 0.006 286.033)",
833
+ "secondary-foreground": "oklch(0.985 0 0)",
834
+ "chart-1": "oklch(0.808 0.114 19.571)",
835
+ "chart-2": "oklch(0.637 0.237 25.331)",
836
+ "chart-3": "oklch(0.577 0.245 27.325)",
837
+ "chart-4": "oklch(0.505 0.213 27.518)",
838
+ "chart-5": "oklch(0.444 0.177 26.899)",
839
+ "sidebar-primary": "oklch(0.637 0.237 25.331)",
840
+ "sidebar-primary-foreground": "oklch(0.971 0.013 17.38)"
841
+ }
842
+ },
843
+ "rose": {
844
+ label: "Rose",
845
+ light: {
846
+ "primary": "oklch(0.514 0.222 16.935)",
847
+ "primary-foreground": "oklch(0.969 0.015 12.422)",
848
+ "secondary": "oklch(0.967 0.001 286.375)",
849
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
850
+ "chart-1": "oklch(0.81 0.117 11.638)",
851
+ "chart-2": "oklch(0.645 0.246 16.439)",
852
+ "chart-3": "oklch(0.586 0.253 17.585)",
853
+ "chart-4": "oklch(0.514 0.222 16.935)",
854
+ "chart-5": "oklch(0.455 0.188 13.697)",
855
+ "sidebar-primary": "oklch(0.586 0.253 17.585)",
856
+ "sidebar-primary-foreground": "oklch(0.969 0.015 12.422)"
857
+ },
858
+ dark: {
859
+ "primary": "oklch(0.455 0.188 13.697)",
860
+ "primary-foreground": "oklch(0.969 0.015 12.422)",
861
+ "secondary": "oklch(0.274 0.006 286.033)",
862
+ "secondary-foreground": "oklch(0.985 0 0)",
863
+ "chart-1": "oklch(0.81 0.117 11.638)",
864
+ "chart-2": "oklch(0.645 0.246 16.439)",
865
+ "chart-3": "oklch(0.586 0.253 17.585)",
866
+ "chart-4": "oklch(0.514 0.222 16.935)",
867
+ "chart-5": "oklch(0.455 0.188 13.697)",
868
+ "sidebar": "oklch(0.21 0.006 285.885)",
869
+ "sidebar-primary": "oklch(0.645 0.246 16.439)",
870
+ "sidebar-primary-foreground": "oklch(0.969 0.015 12.422)"
871
+ }
872
+ },
873
+ "sky": {
874
+ label: "Sky",
875
+ light: {
876
+ "primary": "oklch(0.5 0.134 242.749)",
877
+ "primary-foreground": "oklch(0.977 0.013 236.62)",
878
+ "secondary": "oklch(0.967 0.001 286.375)",
879
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
880
+ "chart-1": "oklch(0.828 0.111 230.318)",
881
+ "chart-2": "oklch(0.685 0.169 237.323)",
882
+ "chart-3": "oklch(0.588 0.158 241.966)",
883
+ "chart-4": "oklch(0.5 0.134 242.749)",
884
+ "chart-5": "oklch(0.443 0.11 240.79)",
885
+ "sidebar-primary": "oklch(0.588 0.158 241.966)",
886
+ "sidebar-primary-foreground": "oklch(0.977 0.013 236.62)"
887
+ },
888
+ dark: {
889
+ "primary": "oklch(0.443 0.11 240.79)",
890
+ "primary-foreground": "oklch(0.977 0.013 236.62)",
891
+ "secondary": "oklch(0.274 0.006 286.033)",
892
+ "secondary-foreground": "oklch(0.985 0 0)",
893
+ "chart-1": "oklch(0.828 0.111 230.318)",
894
+ "chart-2": "oklch(0.685 0.169 237.323)",
895
+ "chart-3": "oklch(0.588 0.158 241.966)",
896
+ "chart-4": "oklch(0.5 0.134 242.749)",
897
+ "chart-5": "oklch(0.443 0.11 240.79)",
898
+ "sidebar-primary": "oklch(0.685 0.169 237.323)",
899
+ "sidebar-primary-foreground": "oklch(0.293 0.066 243.157)"
900
+ }
901
+ },
902
+ "teal": {
903
+ label: "Teal",
904
+ light: {
905
+ "primary": "oklch(0.511 0.096 186.391)",
906
+ "primary-foreground": "oklch(0.984 0.014 180.72)",
907
+ "secondary": "oklch(0.967 0.001 286.375)",
908
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
909
+ "chart-1": "oklch(0.855 0.138 181.071)",
910
+ "chart-2": "oklch(0.704 0.14 182.503)",
911
+ "chart-3": "oklch(0.6 0.118 184.704)",
912
+ "chart-4": "oklch(0.511 0.096 186.391)",
913
+ "chart-5": "oklch(0.437 0.078 188.216)",
914
+ "sidebar-primary": "oklch(0.6 0.118 184.704)",
915
+ "sidebar-primary-foreground": "oklch(0.984 0.014 180.72)"
916
+ },
917
+ dark: {
918
+ "primary": "oklch(0.437 0.078 188.216)",
919
+ "primary-foreground": "oklch(0.984 0.014 180.72)",
920
+ "secondary": "oklch(0.274 0.006 286.033)",
921
+ "secondary-foreground": "oklch(0.985 0 0)",
922
+ "chart-1": "oklch(0.855 0.138 181.071)",
923
+ "chart-2": "oklch(0.704 0.14 182.503)",
924
+ "chart-3": "oklch(0.6 0.118 184.704)",
925
+ "chart-4": "oklch(0.511 0.096 186.391)",
926
+ "chart-5": "oklch(0.437 0.078 188.216)",
927
+ "sidebar-primary": "oklch(0.704 0.14 182.503)",
928
+ "sidebar-primary-foreground": "oklch(0.277 0.046 192.524)"
929
+ }
930
+ },
931
+ "violet": {
932
+ label: "Violet",
933
+ light: {
934
+ "primary": "oklch(0.491 0.27 292.581)",
935
+ "primary-foreground": "oklch(0.969 0.016 293.756)",
936
+ "secondary": "oklch(0.967 0.001 286.375)",
937
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
938
+ "chart-1": "oklch(0.811 0.111 293.571)",
939
+ "chart-2": "oklch(0.606 0.25 292.717)",
940
+ "chart-3": "oklch(0.541 0.281 293.009)",
941
+ "chart-4": "oklch(0.491 0.27 292.581)",
942
+ "chart-5": "oklch(0.432 0.232 292.759)",
943
+ "sidebar-primary": "oklch(0.541 0.281 293.009)",
944
+ "sidebar-primary-foreground": "oklch(0.969 0.016 293.756)"
945
+ },
946
+ dark: {
947
+ "primary": "oklch(0.432 0.232 292.759)",
948
+ "primary-foreground": "oklch(0.969 0.016 293.756)",
949
+ "secondary": "oklch(0.274 0.006 286.033)",
950
+ "secondary-foreground": "oklch(0.985 0 0)",
951
+ "chart-1": "oklch(0.811 0.111 293.571)",
952
+ "chart-2": "oklch(0.606 0.25 292.717)",
953
+ "chart-3": "oklch(0.541 0.281 293.009)",
954
+ "chart-4": "oklch(0.491 0.27 292.581)",
955
+ "chart-5": "oklch(0.432 0.232 292.759)",
956
+ "sidebar-primary": "oklch(0.606 0.25 292.717)",
957
+ "sidebar-primary-foreground": "oklch(0.969 0.016 293.756)"
958
+ }
959
+ },
960
+ "yellow": {
961
+ label: "Yellow",
962
+ light: {
963
+ "primary": "oklch(0.852 0.199 91.936)",
964
+ "primary-foreground": "oklch(0.421 0.095 57.708)",
965
+ "secondary": "oklch(0.967 0.001 286.375)",
966
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
967
+ "chart-1": "oklch(0.905 0.182 98.111)",
968
+ "chart-2": "oklch(0.795 0.184 86.047)",
969
+ "chart-3": "oklch(0.681 0.162 75.834)",
970
+ "chart-4": "oklch(0.554 0.135 66.442)",
971
+ "chart-5": "oklch(0.476 0.114 61.907)",
972
+ "sidebar-primary": "oklch(0.681 0.162 75.834)",
973
+ "sidebar-primary-foreground": "oklch(0.987 0.026 102.212)"
974
+ },
975
+ dark: {
976
+ "primary": "oklch(0.795 0.184 86.047)",
977
+ "primary-foreground": "oklch(0.421 0.095 57.708)",
978
+ "secondary": "oklch(0.274 0.006 286.033)",
979
+ "secondary-foreground": "oklch(0.985 0 0)",
980
+ "chart-1": "oklch(0.905 0.182 98.111)",
981
+ "chart-2": "oklch(0.795 0.184 86.047)",
982
+ "chart-3": "oklch(0.681 0.162 75.834)",
983
+ "chart-4": "oklch(0.554 0.135 66.442)",
984
+ "chart-5": "oklch(0.476 0.114 61.907)",
985
+ "sidebar-primary": "oklch(0.795 0.184 86.047)",
986
+ "sidebar-primary-foreground": "oklch(0.987 0.026 102.212)"
987
+ }
988
+ }
989
+ };
990
+ var TOKEN_ORDER = [
991
+ "background",
992
+ "foreground",
993
+ "card",
994
+ "card-foreground",
995
+ "popover",
996
+ "popover-foreground",
997
+ "primary",
998
+ "primary-foreground",
999
+ "secondary",
1000
+ "secondary-foreground",
1001
+ "muted",
1002
+ "muted-foreground",
1003
+ "accent",
1004
+ "accent-foreground",
1005
+ "destructive",
1006
+ "border",
1007
+ "input",
1008
+ "ring",
1009
+ "chart-1",
1010
+ "chart-2",
1011
+ "chart-3",
1012
+ "chart-4",
1013
+ "chart-5",
1014
+ "radius",
1015
+ "sidebar",
1016
+ "sidebar-foreground",
1017
+ "sidebar-primary",
1018
+ "sidebar-primary-foreground",
1019
+ "sidebar-accent",
1020
+ "sidebar-accent-foreground",
1021
+ "sidebar-border",
1022
+ "sidebar-ring"
1023
+ ];
1024
+
1025
+ // src/emit/generated/shadcn-fonts.generated.ts
1026
+ var FONTS = {
1027
+ "geist": {
1028
+ label: "Geist",
1029
+ type: "sans",
1030
+ family: "'Geist Variable', sans-serif",
1031
+ dependency: "@fontsource-variable/geist"
1032
+ },
1033
+ "inter": {
1034
+ label: "Inter",
1035
+ type: "sans",
1036
+ family: "'Inter Variable', sans-serif",
1037
+ dependency: "@fontsource-variable/inter"
1038
+ },
1039
+ "noto-sans": {
1040
+ label: "Noto Sans",
1041
+ type: "sans",
1042
+ family: "'Noto Sans Variable', sans-serif",
1043
+ dependency: "@fontsource-variable/noto-sans"
1044
+ },
1045
+ "nunito-sans": {
1046
+ label: "Nunito Sans",
1047
+ type: "sans",
1048
+ family: "'Nunito Sans Variable', sans-serif",
1049
+ dependency: "@fontsource-variable/nunito-sans"
1050
+ },
1051
+ "figtree": {
1052
+ label: "Figtree",
1053
+ type: "sans",
1054
+ family: "'Figtree Variable', sans-serif",
1055
+ dependency: "@fontsource-variable/figtree"
1056
+ },
1057
+ "roboto": {
1058
+ label: "Roboto",
1059
+ type: "sans",
1060
+ family: "'Roboto Variable', sans-serif",
1061
+ dependency: "@fontsource-variable/roboto"
1062
+ },
1063
+ "raleway": {
1064
+ label: "Raleway",
1065
+ type: "sans",
1066
+ family: "'Raleway Variable', sans-serif",
1067
+ dependency: "@fontsource-variable/raleway"
1068
+ },
1069
+ "dm-sans": {
1070
+ label: "DM Sans",
1071
+ type: "sans",
1072
+ family: "'DM Sans Variable', sans-serif",
1073
+ dependency: "@fontsource-variable/dm-sans"
1074
+ },
1075
+ "public-sans": {
1076
+ label: "Public Sans",
1077
+ type: "sans",
1078
+ family: "'Public Sans Variable', sans-serif",
1079
+ dependency: "@fontsource-variable/public-sans"
1080
+ },
1081
+ "outfit": {
1082
+ label: "Outfit",
1083
+ type: "sans",
1084
+ family: "'Outfit Variable', sans-serif",
1085
+ dependency: "@fontsource-variable/outfit"
1086
+ },
1087
+ "oxanium": {
1088
+ label: "Oxanium",
1089
+ type: "sans",
1090
+ family: "'Oxanium Variable', sans-serif",
1091
+ dependency: "@fontsource-variable/oxanium"
1092
+ },
1093
+ "manrope": {
1094
+ label: "Manrope",
1095
+ type: "sans",
1096
+ family: "'Manrope Variable', sans-serif",
1097
+ dependency: "@fontsource-variable/manrope"
1098
+ },
1099
+ "space-grotesk": {
1100
+ label: "Space Grotesk",
1101
+ type: "sans",
1102
+ family: "'Space Grotesk Variable', sans-serif",
1103
+ dependency: "@fontsource-variable/space-grotesk"
1104
+ },
1105
+ "montserrat": {
1106
+ label: "Montserrat",
1107
+ type: "sans",
1108
+ family: "'Montserrat Variable', sans-serif",
1109
+ dependency: "@fontsource-variable/montserrat"
1110
+ },
1111
+ "ibm-plex-sans": {
1112
+ label: "IBM Plex Sans",
1113
+ type: "sans",
1114
+ family: "'IBM Plex Sans Variable', sans-serif",
1115
+ dependency: "@fontsource-variable/ibm-plex-sans"
1116
+ },
1117
+ "source-sans-3": {
1118
+ label: "Source Sans 3",
1119
+ type: "sans",
1120
+ family: "'Source Sans 3 Variable', sans-serif",
1121
+ dependency: "@fontsource-variable/source-sans-3"
1122
+ },
1123
+ "instrument-sans": {
1124
+ label: "Instrument Sans",
1125
+ type: "sans",
1126
+ family: "'Instrument Sans Variable', sans-serif",
1127
+ dependency: "@fontsource-variable/instrument-sans"
1128
+ },
1129
+ "jetbrains-mono": {
1130
+ label: "JetBrains Mono",
1131
+ type: "mono",
1132
+ family: "'JetBrains Mono Variable', monospace",
1133
+ dependency: "@fontsource-variable/jetbrains-mono"
1134
+ },
1135
+ "geist-mono": {
1136
+ label: "Geist Mono",
1137
+ type: "mono",
1138
+ family: "'Geist Mono Variable', monospace",
1139
+ dependency: "@fontsource-variable/geist-mono"
1140
+ },
1141
+ "noto-serif": {
1142
+ label: "Noto Serif",
1143
+ type: "serif",
1144
+ family: "'Noto Serif Variable', serif",
1145
+ dependency: "@fontsource-variable/noto-serif"
1146
+ },
1147
+ "roboto-slab": {
1148
+ label: "Roboto Slab",
1149
+ type: "serif",
1150
+ family: "'Roboto Slab Variable', serif",
1151
+ dependency: "@fontsource-variable/roboto-slab"
1152
+ },
1153
+ "merriweather": {
1154
+ label: "Merriweather",
1155
+ type: "serif",
1156
+ family: "'Merriweather Variable', serif",
1157
+ dependency: "@fontsource-variable/merriweather"
1158
+ },
1159
+ "lora": {
1160
+ label: "Lora",
1161
+ type: "serif",
1162
+ family: "'Lora Variable', serif",
1163
+ dependency: "@fontsource-variable/lora"
1164
+ },
1165
+ "playfair-display": {
1166
+ label: "Playfair Display",
1167
+ type: "serif",
1168
+ family: "'Playfair Display Variable', serif",
1169
+ dependency: "@fontsource-variable/playfair-display"
1170
+ },
1171
+ "eb-garamond": {
1172
+ label: "EB Garamond",
1173
+ type: "serif",
1174
+ family: "'EB Garamond Variable', serif",
1175
+ dependency: "@fontsource-variable/eb-garamond"
1176
+ },
1177
+ "instrument-serif": {
1178
+ label: "Instrument Serif",
1179
+ type: "serif",
1180
+ family: "'Instrument Serif', serif",
1181
+ dependency: "@fontsource/instrument-serif"
1182
+ }
1183
+ };
1184
+
1185
+ // src/emit/theme-presets.ts
1186
+ var BASE_COLORS = Object.keys(BASE_TOKENS);
1187
+ var ACCENTS = Object.keys(ACCENT_TOKENS);
1188
+ var DEFAULT_BASE_COLOR = "neutral";
1189
+ var DARK_MODES = ["system", "toggle", "off"];
1190
+ var DEFAULT_RADIUS = BASE_TOKENS[DEFAULT_BASE_COLOR].light.radius ?? "0.625rem";
1191
+ var DEFAULT_DARK_MODE = "system";
1192
+ var FONT_IDS = Object.keys(FONTS);
1193
+ function findFont(id) {
1194
+ const normalized = id.trim().toLowerCase();
1195
+ return Object.prototype.hasOwnProperty.call(FONTS, normalized) ? normalized : void 0;
1196
+ }
1197
+ function resolveFontFlag(raw, slot) {
1198
+ const id = findFont(raw);
1199
+ if (id === void 0) {
1200
+ throw new Error(
1201
+ `Unknown font "${raw}". Valid fonts: ${FONT_IDS.join(", ")}.`
1202
+ );
1203
+ }
1204
+ if (slot !== "heading" && FONTS[id].type !== slot) {
1205
+ const usable = FONT_IDS.filter((f) => FONTS[f].type === slot);
1206
+ throw new Error(
1207
+ `"${raw}" is a ${FONTS[id].type} face, so it cannot fill the ${slot} slot. Valid ${slot} fonts: ${usable.join(", ")}.`
1208
+ );
1209
+ }
1210
+ return id;
1211
+ }
1212
+ function fontDependencies(fonts) {
1213
+ const deps = {};
1214
+ for (const id of [fonts?.sans, fonts?.mono, fonts?.heading]) {
1215
+ if (id !== void 0) deps[FONTS[id].dependency] = "*";
1216
+ }
1217
+ return deps;
1218
+ }
1219
+ function fontImports(fonts) {
1220
+ return Object.keys(fontDependencies(fonts)).map((pkg) => `@import "${pkg}";`);
1221
+ }
1222
+ function fontThemeVars(fonts) {
1223
+ const rows = [];
1224
+ if (fonts?.sans !== void 0) rows.push(["--font-sans", FONTS[fonts.sans].family]);
1225
+ if (fonts?.mono !== void 0) rows.push(["--font-mono", FONTS[fonts.mono].family]);
1226
+ if (fonts?.heading !== void 0) rows.push(["--font-heading", FONTS[fonts.heading].family]);
1227
+ return rows;
1228
+ }
1229
+ function describeFonts(fonts) {
1230
+ const parts = [];
1231
+ if (fonts?.sans !== void 0) parts.push(FONTS[fonts.sans].label);
1232
+ if (fonts?.heading !== void 0) parts.push(`${FONTS[fonts.heading].label} headings`);
1233
+ if (fonts?.mono !== void 0) parts.push(`${FONTS[fonts.mono].label} mono`);
1234
+ return parts.length === 0 ? "system" : parts.join(" / ");
1235
+ }
1236
+ function buildTheme(base, accent) {
1237
+ const b = BASE_TOKENS[base];
1238
+ if (accent === null) {
1239
+ return { id: base, label: b.label, baseColor: base, light: b.light, dark: b.dark };
1240
+ }
1241
+ const a = ACCENT_TOKENS[accent];
1242
+ return {
1243
+ id: `${base}-${accent}`,
1244
+ label: `${b.label} ${a.label}`,
1245
+ baseColor: base,
1246
+ light: { ...b.light, ...a.light },
1247
+ dark: { ...b.dark, ...a.dark }
1248
+ };
1249
+ }
1250
+ function defaultTheme() {
1251
+ return buildTheme(DEFAULT_BASE_COLOR, null);
1252
+ }
1253
+ function defaultThemeChoice() {
1254
+ return { theme: defaultTheme(), dark: DEFAULT_DARK_MODE };
1255
+ }
1256
+ function withRadius(theme, radius) {
1257
+ return { ...theme, light: { ...theme.light, radius } };
1258
+ }
1259
+ function normalizeRadius(raw) {
1260
+ const value = raw.trim();
1261
+ if (/^\d+(\.\d+)?$/.test(value)) return `${value}rem`;
1262
+ if (/^\d+(\.\d+)?(rem|px|em)$/.test(value)) return value;
1263
+ throw new Error(
1264
+ `Invalid --radius "${raw}". Pass a number of rem (e.g. 0, 0.5, 1) or a CSS length (e.g. 8px).`
1265
+ );
1266
+ }
1267
+ function resolveThemeFlag(raw) {
1268
+ const value = raw.trim().toLowerCase();
1269
+ const cut = value.lastIndexOf("-");
1270
+ if (cut > 0) {
1271
+ const base = value.slice(0, cut);
1272
+ const accent = value.slice(cut + 1);
1273
+ if (isBaseColor(base) && isAccent(accent)) return buildTheme(base, accent);
1274
+ }
1275
+ if (isBaseColor(value)) return buildTheme(value, null);
1276
+ throw new Error(
1277
+ `Unknown --theme "${raw}". Pass <base> or <base>-<accent>, a registry theme URL, or a path to a registry item JSON file.
1278
+ Base colors: ${BASE_COLORS.join(", ")}
1279
+ Accents: ${ACCENTS.join(", ")}`
1280
+ );
1281
+ }
1282
+ function isBaseColor(id) {
1283
+ return Object.prototype.hasOwnProperty.call(BASE_TOKENS, id);
1284
+ }
1285
+ function isAccent(id) {
1286
+ return Object.prototype.hasOwnProperty.call(ACCENT_TOKENS, id);
1287
+ }
1288
+ function resolveDarkModeFlag(raw) {
1289
+ const value = raw.trim().toLowerCase();
1290
+ if (DARK_MODES.includes(value)) return value;
1291
+ throw new Error(`Unknown --dark "${raw}". Valid modes: ${DARK_MODES.join(", ")}.`);
1292
+ }
1293
+ var CURATED_THEMES = [
1294
+ "neutral",
1295
+ "zinc-blue",
1296
+ "neutral-violet",
1297
+ "stone-orange",
1298
+ "mist-teal",
1299
+ "olive-green",
1300
+ "taupe-rose",
1301
+ "mauve-purple"
1302
+ ];
1303
+ function curatedThemes() {
1304
+ return CURATED_THEMES.map(resolveThemeFlag);
1305
+ }
1306
+ function themeFromRegistryItem(raw, source) {
1307
+ const item = raw;
1308
+ const vars = item?.cssVars;
1309
+ if (vars === void 0 || vars === null || typeof vars !== "object") {
1310
+ throw new Error(
1311
+ `${source} is not a shadcn registry theme: no "cssVars" object. Expected a registry item with cssVars.light / cssVars.dark (see https://ui.shadcn.com/schema/registry-item.json).`
1312
+ );
1313
+ }
1314
+ const shared = normalizeVars(vars.theme);
1315
+ const light = { ...shared, ...normalizeVars(vars.light) };
1316
+ const dark = { ...shared, ...normalizeVars(vars.dark) };
1317
+ if (Object.keys(light).length === 0 && Object.keys(dark).length === 0) {
1318
+ throw new Error(`${source} defines no CSS variables under cssVars.`);
1319
+ }
1320
+ light["radius"] ??= DEFAULT_RADIUS;
1321
+ const name = typeof item.name === "string" && item.name !== "" ? item.name : "custom";
1322
+ const title = typeof item.title === "string" && item.title !== "" ? item.title : name;
1323
+ return { id: name, label: title, baseColor: null, light, dark };
1324
+ }
1325
+ var HSL_TRIPLE = /^-?\d*\.?\d+\s+-?\d*\.?\d+%\s+-?\d*\.?\d+%$/;
1326
+ function normalizeVars(vars) {
1327
+ const out = {};
1328
+ for (const [key, value] of Object.entries(vars ?? {})) {
1329
+ if (typeof value !== "string") continue;
1330
+ const name = key.replace(/^--/, "");
1331
+ out[name] = HSL_TRIPLE.test(value.trim()) ? `hsl(${value.trim()})` : value;
1332
+ }
1333
+ return out;
1334
+ }
1335
+ function orderedTokens(vars) {
1336
+ const order = ["radius", ...TOKEN_ORDER.filter((k) => k !== "radius")];
1337
+ const known = order.filter((k) => k in vars).map((k) => [k, vars[k]]);
1338
+ const extra = Object.keys(vars).filter((k) => !TOKEN_ORDER.includes(k)).sort().map((k) => [k, vars[k]]);
1339
+ return [...known, ...extra];
1340
+ }
1341
+ function colorTokens(vars) {
1342
+ return orderedTokens(vars).map(([k]) => k).filter((k) => k !== "radius");
1343
+ }
1344
+ function themeGuidanceSection(choice) {
1345
+ const { theme, dark } = choice;
1346
+ const darkBullet = {
1347
+ system: ` - Dark mode follows the OS: an inline script in the HTML entry sets the
1348
+ \`dark\` class before first paint. There is no in-app switcher \u2014 if you are
1349
+ asked for one, add a control that toggles that class on
1350
+ \`document.documentElement\` and persists the choice; do not install a theming
1351
+ library for it.`,
1352
+ toggle: ` - Dark mode is already wired: \`frontend/src/lib/theme.ts\` holds the mode
1353
+ (\`getMode\`/\`setMode\`/\`watchMode\`), an inline script in the HTML entry applies
1354
+ it before first paint, and the mode toggle on the landing page cycles
1355
+ system \u2192 light \u2192 dark. Use that module \u2014 do not add \`next-themes\` or a second
1356
+ class-toggling implementation.`,
1357
+ off: ` - This project has no dark-mode switch (scaffolded with \`--dark off\`), but
1358
+ the \`.dark\` palette in the stylesheet is complete. To turn it on, apply the
1359
+ \`dark\` class to \`document.documentElement\` \u2014 do not install a theming library.`
1360
+ }[dark];
1361
+ return ` - Theme: **${theme.label}**, defined as CSS custom properties at the top of
1362
+ \`frontend/src/index.css\`. That file is the entire theme \u2014 Tailwind v4 has no
1363
+ \`tailwind.config.js\`.
1364
+ - Use the semantic token classes only: \`bg-background\`, \`text-foreground\`,
1365
+ \`bg-primary\`, \`text-muted-foreground\`, \`border-input\`, \`bg-card\`,
1366
+ \`bg-destructive\`, and the \`chart-1..5\` / \`sidebar-*\` sets.
1367
+ NEVER raw palette classes (\`bg-gray-100\`, \`text-slate-500\`) \u2014 they ignore the
1368
+ theme and are unreadable in dark mode, and nothing will report it.
1369
+ - Rebranding means editing token VALUES in that stylesheet, never editing
1370
+ components to hard-code a color.
1371
+ ${darkBullet}`;
1372
+ }
1373
+ function themeSwatch(theme) {
1374
+ return ["primary", "accent", "muted-foreground"].map((token) => theme.light[token]).map((value) => value === void 0 ? null : parseColor(value)).filter((rgb) => rgb !== null);
1375
+ }
1376
+ function parseColor(value) {
1377
+ const v = value.trim().toLowerCase();
1378
+ const oklch = /^oklch\(\s*([\d.]+%?)\s+([\d.]+)\s+([\d.]+)/.exec(v);
1379
+ if (oklch) {
1380
+ const l = oklch[1].endsWith("%") ? Number.parseFloat(oklch[1]) / 100 : Number.parseFloat(oklch[1]);
1381
+ return oklchToRgb(l, Number.parseFloat(oklch[2]), Number.parseFloat(oklch[3]));
1382
+ }
1383
+ const hsl = /^hsl\(\s*([-\d.]+)\s*,?\s*([\d.]+)%\s*,?\s*([\d.]+)%/.exec(v);
1384
+ if (hsl) {
1385
+ return hslToRgb(
1386
+ Number.parseFloat(hsl[1]),
1387
+ Number.parseFloat(hsl[2]) / 100,
1388
+ Number.parseFloat(hsl[3]) / 100
1389
+ );
1390
+ }
1391
+ const hex = /^#([0-9a-f]{3}|[0-9a-f]{6})$/.exec(v);
1392
+ if (hex) {
1393
+ const h = hex[1];
1394
+ const full = h.length === 3 ? [...h].map((c) => c + c).join("") : h;
1395
+ return {
1396
+ r: Number.parseInt(full.slice(0, 2), 16),
1397
+ g: Number.parseInt(full.slice(2, 4), 16),
1398
+ b: Number.parseInt(full.slice(4, 6), 16)
1399
+ };
1400
+ }
1401
+ return null;
1402
+ }
1403
+ function byte(x) {
1404
+ return Math.max(0, Math.min(255, Math.round(x * 255)));
1405
+ }
1406
+ function gamma(c) {
1407
+ return c <= 31308e-7 ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - 0.055;
1408
+ }
1409
+ function oklchToRgb(L, C, hDeg) {
1410
+ const h = hDeg * Math.PI / 180;
1411
+ const a = C * Math.cos(h);
1412
+ const bb = C * Math.sin(h);
1413
+ const l = (L + 0.3963377774 * a + 0.2158037573 * bb) ** 3;
1414
+ const m = (L - 0.1055613458 * a - 0.0638541728 * bb) ** 3;
1415
+ const s = (L - 0.0894841775 * a - 1.291485548 * bb) ** 3;
1416
+ return {
1417
+ r: byte(gamma(4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s)),
1418
+ g: byte(gamma(-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s)),
1419
+ b: byte(gamma(-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s))
1420
+ };
1421
+ }
1422
+ function hslToRgb(hDeg, s, l) {
1423
+ const c = (1 - Math.abs(2 * l - 1)) * s;
1424
+ const hp = (hDeg % 360 + 360) % 360 / 60;
1425
+ const x = c * (1 - Math.abs(hp % 2 - 1));
1426
+ const [r, g, b] = hp < 1 ? [c, x, 0] : hp < 2 ? [x, c, 0] : hp < 3 ? [0, c, x] : hp < 4 ? [0, x, c] : hp < 5 ? [x, 0, c] : [c, 0, x];
1427
+ const m = l - c / 2;
1428
+ return { r: byte(r + m), g: byte(g + m), b: byte(b + m) };
1429
+ }
1430
+
1431
+ // src/emit/icon-presets.ts
1432
+ var ICON_LIBRARIES = ["lucide", "tabler", "phosphor"];
1433
+ var DEFAULT_ICON_LIBRARY = "lucide";
1434
+ var LIBRARIES = {
1435
+ lucide: {
1436
+ id: "lucide",
1437
+ label: "Lucide",
1438
+ componentsJson: "lucide",
1439
+ react: {
1440
+ dependency: { "lucide-react": "^0.475.0" },
1441
+ arrowImport: `import { ArrowRight } from "lucide-react";`,
1442
+ arrowComponent: "ArrowRight",
1443
+ modeImports: [`import { Monitor, Moon, Sun } from "lucide-react";`],
1444
+ modeComponents: { system: "Monitor", light: "Sun", dark: "Moon" }
1445
+ },
1446
+ svelte: {
1447
+ // Not the same version line as `lucide-react`: the Svelte icons ship from
1448
+ // a separate package on their own 1.x.
1449
+ dependency: { "@lucide/svelte": "^1.31.0" },
1450
+ arrowImport: `import ArrowRight from "@lucide/svelte/icons/arrow-right";`,
1451
+ arrowComponent: "ArrowRight",
1452
+ modeImports: [
1453
+ `import Monitor from "@lucide/svelte/icons/monitor";`,
1454
+ `import Moon from "@lucide/svelte/icons/moon";`,
1455
+ `import Sun from "@lucide/svelte/icons/sun";`
1456
+ ],
1457
+ modeComponents: { system: "Monitor", light: "Sun", dark: "Moon" }
1458
+ },
1459
+ guidance: {
1460
+ react: `Icons are [Lucide](https://lucide.dev/icons), installed as \`lucide-react\` and
1461
+ imported by name from the package root \u2014
1462
+ \`import { ArrowRight } from "lucide-react";\`.`,
1463
+ svelte: `Icons are [Lucide](https://lucide.dev/icons), installed as \`@lucide/svelte\` \u2014
1464
+ **not** \`lucide-react\`, which is the wrong package here in the same way the
1465
+ plain \`shadcn\` CLI is. Import them one per module, and kebab-case the name into
1466
+ the path: the icon is that module's DEFAULT export, and \`ArrowRight\` lives at
1467
+ \`arrow-right\` \u2014 \`import ArrowRight from "@lucide/svelte/icons/arrow-right";\`.
1468
+ Never from the package root, which pulls the whole set into the bundle.`
1469
+ }
1470
+ },
1471
+ tabler: {
1472
+ id: "tabler",
1473
+ label: "Tabler",
1474
+ componentsJson: "tabler",
1475
+ react: {
1476
+ dependency: { "@tabler/icons-react": "^3.31.0" },
1477
+ // Every Tabler component is prefixed `Icon`, so the name in markup is not
1478
+ // the name on the website — the single most common mistake with this set.
1479
+ arrowImport: `import { IconArrowRight } from "@tabler/icons-react";`,
1480
+ arrowComponent: "IconArrowRight",
1481
+ modeImports: [
1482
+ `import { IconDeviceDesktop, IconMoon, IconSun } from "@tabler/icons-react";`
1483
+ ],
1484
+ modeComponents: {
1485
+ system: "IconDeviceDesktop",
1486
+ light: "IconSun",
1487
+ dark: "IconMoon"
1488
+ }
1489
+ },
1490
+ svelte: {
1491
+ dependency: { "@tabler/icons-svelte": "^3.31.0" },
1492
+ arrowImport: `import { IconArrowRight } from "@tabler/icons-svelte";`,
1493
+ arrowComponent: "IconArrowRight",
1494
+ modeImports: [
1495
+ `import { IconDeviceDesktop, IconMoon, IconSun } from "@tabler/icons-svelte";`
1496
+ ],
1497
+ modeComponents: {
1498
+ system: "IconDeviceDesktop",
1499
+ light: "IconSun",
1500
+ dark: "IconMoon"
1501
+ }
1502
+ },
1503
+ guidance: {
1504
+ react: `Icons are [Tabler](https://tabler.io/icons), installed as \`@tabler/icons-react\`.
1505
+ Every component is prefixed \`Icon\` \u2014 the site lists \`arrow-right\`, the import is
1506
+ \`import { IconArrowRight } from "@tabler/icons-react";\`.`,
1507
+ svelte: `Icons are [Tabler](https://tabler.io/icons), installed as \`@tabler/icons-svelte\` \u2014
1508
+ **not** \`@tabler/icons-react\`, which is the wrong package here in the same way
1509
+ the plain \`shadcn\` CLI is. Every component is prefixed \`Icon\`, so the name in
1510
+ markup is not the name on the site: \`arrow-right\` is
1511
+ \`import { IconArrowRight } from "@tabler/icons-svelte";\`.`
1512
+ }
1513
+ },
1514
+ phosphor: {
1515
+ id: "phosphor",
1516
+ label: "Phosphor",
1517
+ // shadcn/ui's CLI does not know this set. Left off components.json rather
1518
+ // than guessed — see IconLibrary.componentsJson.
1519
+ componentsJson: void 0,
1520
+ react: {
1521
+ dependency: { "@phosphor-icons/react": "^2.1.7" },
1522
+ arrowImport: `import { ArrowRight } from "@phosphor-icons/react";`,
1523
+ arrowComponent: "ArrowRight",
1524
+ modeImports: [`import { Desktop, Moon, Sun } from "@phosphor-icons/react";`],
1525
+ modeComponents: { system: "Desktop", light: "Sun", dark: "Moon" }
1526
+ },
1527
+ svelte: {
1528
+ dependency: { "phosphor-svelte": "^3.0.1" },
1529
+ arrowImport: `import ArrowRight from "phosphor-svelte/lib/ArrowRight";`,
1530
+ arrowComponent: "ArrowRight",
1531
+ modeImports: [
1532
+ `import Desktop from "phosphor-svelte/lib/Desktop";`,
1533
+ `import Moon from "phosphor-svelte/lib/Moon";`,
1534
+ `import Sun from "phosphor-svelte/lib/Sun";`
1535
+ ],
1536
+ modeComponents: { system: "Desktop", light: "Sun", dark: "Moon" }
1537
+ },
1538
+ guidance: {
1539
+ react: `Icons are [Phosphor](https://phosphoricons.com), installed as
1540
+ \`@phosphor-icons/react\` and imported by name \u2014
1541
+ \`import { ArrowRight } from "@phosphor-icons/react";\`. Each takes a \`weight\` prop
1542
+ (\`regular\`, \`bold\`, \`duotone\`, \u2026) rather than only a stroke width.`,
1543
+ svelte: `Icons are [Phosphor](https://phosphoricons.com), installed as \`phosphor-svelte\` \u2014
1544
+ **not** \`@phosphor-icons/react\`, which is the wrong package here in the same way
1545
+ the plain \`shadcn\` CLI is. Import them one per module, and PascalCase the name
1546
+ into the path: \`import ArrowRight from "phosphor-svelte/lib/ArrowRight";\`.
1547
+ Never from the package root, which pulls the whole set into the bundle.`
1548
+ }
1549
+ }
1550
+ };
1551
+ function findIconLibrary(id) {
1552
+ const normalized = id.trim().toLowerCase();
1553
+ return ICON_LIBRARIES.includes(normalized) ? LIBRARIES[normalized] : void 0;
1554
+ }
1555
+ function allIconLibraries() {
1556
+ return ICON_LIBRARIES.map((id) => LIBRARIES[id]);
1557
+ }
1558
+ function defaultIconLibrary() {
1559
+ return LIBRARIES[DEFAULT_ICON_LIBRARY];
1560
+ }
1561
+ function resolveIconsFlag(raw) {
1562
+ const library = findIconLibrary(raw);
1563
+ if (library === void 0) {
1564
+ throw new Error(
1565
+ `Unknown --icons "${raw}". Valid icon libraries: ${ICON_LIBRARIES.join(", ")}.`
1566
+ );
1567
+ }
1568
+ return library;
1569
+ }
1570
+ function iconLibraryOf(id) {
1571
+ return id === void 0 ? defaultIconLibrary() : LIBRARIES[id];
1572
+ }
1573
+
1574
+ // src/emit/frontend-react.ts
1575
+ var CODE_CLASS = "bg-muted rounded px-1.5 py-0.5 font-mono text-sm";
1576
+ function jsxText(s) {
1577
+ return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\{/g, "&#123;").replace(/\}/g, "&#125;");
1578
+ }
1579
+ function renderNode(node) {
1580
+ return "code" in node ? `<code className="${CODE_CLASS}">${jsxText(node.code)}</code>` : jsxText(node.text);
1581
+ }
1582
+ function renderNodes(nodes) {
1583
+ return nodes.map(renderNode).join("");
1584
+ }
1585
+ function renderApp(landing, choice) {
1586
+ const steps = landing.steps.map((step) => ` <li>${renderNodes(step)}</li>`).join("\n");
1587
+ const toggle = choice.dark === "toggle";
1588
+ const icons = iconLibraryOf(choice.icons).react;
1589
+ return `${icons.arrowImport}
1590
+
1591
+ import { Button } from "@/components/ui/button";${toggle ? `
1592
+ import { ModeToggle } from "@/components/mode-toggle";` : ""}
1593
+ import {
1594
+ Card,
1595
+ CardContent,
1596
+ CardDescription,
1597
+ CardFooter,
1598
+ CardHeader,
1599
+ CardTitle,
1600
+ } from "@/components/ui/card";
1601
+
1602
+ export default function App() {
1603
+ return (
1604
+ <main className="mx-auto flex min-h-screen max-w-2xl flex-col justify-center p-8">${toggle ? `
1605
+ <div className="mb-4 flex justify-end">
1606
+ <ModeToggle />
1607
+ </div>` : ""}
1608
+ <Card>
1609
+ <CardHeader>
1610
+ <CardTitle className="text-3xl tracking-tight">${jsxText(landing.title)}</CardTitle>
1611
+ <CardDescription className="text-base">
1612
+ ${renderNodes(landing.lead)}
1613
+ </CardDescription>
1614
+ </CardHeader>
1615
+ <CardContent>
1616
+ <ol className="text-muted-foreground list-inside list-decimal space-y-2">
1617
+ ${steps}
1618
+ </ol>
1619
+ </CardContent>
1620
+ <CardFooter>
1621
+ {/* asChild renders the Button's styles onto the anchor. Components come
1622
+ from shadcn/ui \u2014 add more with \`npx shadcn@latest add <name>\`. */}
1623
+ <Button asChild>
1624
+ <a href="${landing.cta.href}" target="_blank" rel="noreferrer">
1625
+ ${jsxText(landing.cta.label)} <${icons.arrowComponent} />
1626
+ </a>
1627
+ </Button>
1628
+ </CardFooter>
1629
+ </Card>
1630
+ </main>
1631
+ );
1632
+ }
1633
+ `;
1634
+ }
1635
+ function renderMainTsx() {
1636
+ return `import { StrictMode } from "react";
1637
+ import { createRoot } from "react-dom/client";
1638
+ import App from "./App.js";
1639
+ import "./index.css";
1640
+
1641
+ createRoot(document.getElementById("root")!).render(
1642
+ <StrictMode>
1643
+ <App />
1644
+ </StrictMode>,
1645
+ );
1646
+ `;
1647
+ }
1648
+ function renderComponentsJson(choice) {
1649
+ const config = {
1650
+ $schema: "https://ui.shadcn.com/schema.json",
1651
+ style: "new-york",
1652
+ rsc: false,
1653
+ tsx: true,
1654
+ tailwind: {
1655
+ // v4 has no config file; the theme lives in the stylesheet.
1656
+ config: "",
1657
+ css: "frontend/src/index.css",
1658
+ // The base color the scaffold's stylesheet was rendered from. The CLI
1659
+ // reads it for the few colors a generated component hard-codes rather
1660
+ // than tokenises, so a value that disagrees with index.css produces
1661
+ // components that clash with everything already there. An imported
1662
+ // registry theme belongs to no upstream base and falls back to neutral.
1663
+ baseColor: choice.theme.baseColor ?? "neutral",
1664
+ cssVariables: true,
1665
+ prefix: ""
1666
+ },
1667
+ aliases: {
1668
+ components: "@/components",
1669
+ utils: "@/lib/utils",
1670
+ ui: "@/components/ui",
1671
+ lib: "@/lib",
1672
+ hooks: "@/hooks"
1673
+ },
1674
+ // Omitted entirely for a set the CLI does not know — writing an
1675
+ // unrecognised value would break `add` for every component, which is worse
1676
+ // than icons defaulting to lucide. See IconLibrary.componentsJson.
1677
+ ...iconLibraryOf(choice.icons).componentsJson === void 0 ? {} : { iconLibrary: iconLibraryOf(choice.icons).componentsJson }
1678
+ };
1679
+ return JSON.stringify(config, null, 2) + "\n";
1680
+ }
1681
+ function renderButtonTsx() {
1682
+ return `import * as React from "react"
1683
+ import { cva, type VariantProps } from "class-variance-authority"
1684
+ import { Slot } from "radix-ui"
1685
+
1686
+ import { cn } from "@/lib/utils"
1687
+
1688
+ const buttonVariants = cva(
1689
+ "inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1690
+ {
1691
+ variants: {
1692
+ variant: {
1693
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
1694
+ destructive:
1695
+ "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
1696
+ outline:
1697
+ "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
1698
+ secondary:
1699
+ "bg-secondary text-secondary-foreground hover:bg-secondary/80",
1700
+ ghost:
1701
+ "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
1702
+ link: "text-primary underline-offset-4 hover:underline",
1703
+ },
1704
+ size: {
1705
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
1706
+ xs: "h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
1707
+ sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
1708
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
1709
+ icon: "size-9",
1710
+ "icon-xs": "size-6 rounded-md [&_svg:not([class*='size-'])]:size-3",
1711
+ "icon-sm": "size-8",
1712
+ "icon-lg": "size-10",
1713
+ },
1714
+ },
1715
+ defaultVariants: {
1716
+ variant: "default",
1717
+ size: "default",
1718
+ },
1719
+ }
1720
+ )
1721
+
1722
+ function Button({
1723
+ className,
1724
+ variant = "default",
1725
+ size = "default",
1726
+ asChild = false,
1727
+ ...props
1728
+ }: React.ComponentProps<"button"> &
1729
+ VariantProps<typeof buttonVariants> & {
1730
+ asChild?: boolean
1731
+ }) {
1732
+ const Comp = asChild ? Slot.Root : "button"
1733
+
1734
+ return (
1735
+ <Comp
1736
+ data-slot="button"
1737
+ data-variant={variant}
1738
+ data-size={size}
1739
+ className={cn(buttonVariants({ variant, size, className }))}
1740
+ {...props}
1741
+ />
1742
+ )
1743
+ }
1744
+
1745
+ export { Button, buttonVariants }
1746
+ `;
1747
+ }
1748
+ function renderModeToggleTsx(icons) {
1749
+ return `import { useEffect, useState } from "react";
1750
+ ${icons.modeImports.join("\n")}
1751
+
1752
+ import { Button } from "@/components/ui/button";
1753
+ import { getMode, setMode, watchMode, type Mode } from "@/lib/theme";
1754
+
1755
+ /** system \u2192 light \u2192 dark \u2192 system. */
1756
+ const NEXT: Record<Mode, Mode> = { system: "light", light: "dark", dark: "system" };
1757
+
1758
+ const ICON = {
1759
+ system: ${icons.modeComponents.system},
1760
+ light: ${icons.modeComponents.light},
1761
+ dark: ${icons.modeComponents.dark},
1762
+ };
1763
+
1764
+ export function ModeToggle() {
1765
+ // Read on mount, not during render: the inline script in index.html has
1766
+ // already applied the class, and touching localStorage while rendering would
1767
+ // break if this component is ever server-rendered.
1768
+ const [mode, setLocal] = useState<Mode>("system");
1769
+ useEffect(() => {
1770
+ setLocal(getMode());
1771
+ return watchMode(setLocal);
1772
+ }, []);
1773
+
1774
+ const Icon = ICON[mode];
1775
+ const change = () => {
1776
+ const next = NEXT[mode];
1777
+ setMode(next);
1778
+ setLocal(next);
1779
+ };
1780
+
1781
+ return (
1782
+ <Button variant="ghost" size="icon" onClick={change} aria-label={\`Switch to \${NEXT[mode]} theme\`}>
1783
+ <Icon />
1784
+ </Button>
1785
+ );
1786
+ }
1787
+ `;
1788
+ }
1789
+ function renderCardTsx() {
1790
+ return `import * as React from "react"
1791
+
1792
+ import { cn } from "@/lib/utils"
1793
+
1794
+ function Card({ className, ...props }: React.ComponentProps<"div">) {
1795
+ return (
1796
+ <div
1797
+ data-slot="card"
1798
+ className={cn(
1799
+ "flex flex-col gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-sm",
1800
+ className
1801
+ )}
1802
+ {...props}
1803
+ />
1804
+ )
1805
+ }
1806
+
1807
+ function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
1808
+ return (
1809
+ <div
1810
+ data-slot="card-header"
1811
+ className={cn(
1812
+ "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",
1813
+ className
1814
+ )}
1815
+ {...props}
1816
+ />
1817
+ )
1818
+ }
1819
+
1820
+ function CardTitle({ className, ...props }: React.ComponentProps<"div">) {
1821
+ return (
1822
+ <div
1823
+ data-slot="card-title"
1824
+ className={cn("leading-none font-semibold", className)}
1825
+ {...props}
1826
+ />
1827
+ )
1828
+ }
1829
+
1830
+ function CardDescription({ className, ...props }: React.ComponentProps<"div">) {
1831
+ return (
1832
+ <div
1833
+ data-slot="card-description"
1834
+ className={cn("text-sm text-muted-foreground", className)}
1835
+ {...props}
1836
+ />
1837
+ )
1838
+ }
1839
+
1840
+ function CardAction({ className, ...props }: React.ComponentProps<"div">) {
1841
+ return (
1842
+ <div
1843
+ data-slot="card-action"
1844
+ className={cn(
1845
+ "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
1846
+ className
1847
+ )}
1848
+ {...props}
1849
+ />
1850
+ )
1851
+ }
1852
+
1853
+ function CardContent({ className, ...props }: React.ComponentProps<"div">) {
1854
+ return (
1855
+ <div
1856
+ data-slot="card-content"
1857
+ className={cn("px-6", className)}
1858
+ {...props}
1859
+ />
1860
+ )
1861
+ }
1862
+
1863
+ function CardFooter({ className, ...props }: React.ComponentProps<"div">) {
1864
+ return (
1865
+ <div
1866
+ data-slot="card-footer"
1867
+ className={cn("flex items-center px-6 [.border-t]:pt-6", className)}
1868
+ {...props}
1869
+ />
1870
+ )
1871
+ }
1872
+
1873
+ export {
1874
+ Card,
1875
+ CardHeader,
1876
+ CardFooter,
1877
+ CardTitle,
1878
+ CardAction,
1879
+ CardDescription,
1880
+ CardContent,
1881
+ }
1882
+ `;
1883
+ }
1884
+ var reactPreset = {
1885
+ id: "react",
1886
+ label: "React + Vite",
1887
+ dependencies: {
1888
+ // shadcn/ui's runtime surface. `radix-ui` is the unified primitives
1889
+ // package current components import (`Slot.Root` powers `asChild`) — not
1890
+ // the per-primitive `@radix-ui/react-*` packages, which it superseded.
1891
+ // cva types the variants, clsx + tailwind-merge back `cn()`. Pre-installed
1892
+ // so `npx shadcn@latest add <component>` works without a separate npm i.
1893
+ //
1894
+ // The icon package is deliberately absent: it is `--icons`, merged in by
1895
+ // renderPackageJson from `iconBinding` below. Naming lucide here too would
1896
+ // install it alongside whatever the user actually chose.
1897
+ "class-variance-authority": "^0.7.1",
1898
+ clsx: "^2.1.1",
1899
+ "radix-ui": "^1.6.7",
1900
+ react: "^19.1.0",
1901
+ "react-dom": "^19.1.0",
1902
+ "tailwind-merge": "^3.0.1"
1903
+ },
1904
+ devDependencies: {
1905
+ "@tailwindcss/vite": "^4.1.5",
1906
+ "@types/node": "^20.19.43",
1907
+ "@types/react": "^19.1.0",
1908
+ "@types/react-dom": "^19.1.0",
1909
+ // 6.x, which peer-requires vite ^8 — the same constraint the Svelte
1910
+ // preset's plugin has, which is why both presets share one Vite major.
1911
+ // Its `@rolldown/plugin-babel` and `babel-plugin-react-compiler` peers are
1912
+ // OPTIONAL (they back the React Compiler path, which this scaffold does
1913
+ // not enable), so neither is shipped: verified by a clean install with no
1914
+ // unmet-peer warnings.
1915
+ "@vitejs/plugin-react": "^6.0.5",
1916
+ tailwindcss: "^4.1.5",
1917
+ "tw-animate-css": "^1.2.4",
1918
+ tsx: "^4.19.2",
1919
+ // Kept in step with the Svelte preset — the major `sv create` pins. 7 is
1920
+ // out, but svelte-check's peer range stops at 6 and the two presets track
1921
+ // one TypeScript major so the shared tsconfig means the same thing in both.
1922
+ typescript: "^6.0.3",
1923
+ vite: "^8.0.16"
1924
+ },
1925
+ // `tsc` checks .tsx natively, so React needs nothing beyond it.
1926
+ checkCmd: "tsc --noEmit",
1927
+ aliasName: "@",
1928
+ aliasTarget: "frontend/src",
1929
+ // `./`-rooted: with no `baseUrl` (deprecated in TypeScript 6), a `paths`
1930
+ // target resolves against tsconfig.json's own directory.
1931
+ tsconfigPaths: { "@/*": ["./frontend/src/*"] },
1932
+ tsconfigOptions: { jsx: "react-jsx" },
1933
+ viteImports: [
1934
+ `import react from "@vitejs/plugin-react";`,
1935
+ `import tailwindcss from "@tailwindcss/vite";`
1936
+ ],
1937
+ vitePlugins: ["react()", "tailwindcss()"],
1938
+ entryScript: "/src/main.tsx",
1939
+ files(_vars, landing, choice = defaultThemeChoice()) {
1940
+ return [
1941
+ // The shadcn/ui CLI's config — lets `npx shadcn@latest add <component>`
1942
+ // work in a fresh scaffold without a separate `shadcn init`.
1943
+ { path: "components.json", content: renderComponentsJson(choice) },
1944
+ { path: "frontend/src/main.tsx", content: renderMainTsx() },
1945
+ { path: "frontend/src/App.tsx", content: renderApp(landing, choice) },
1946
+ // Only for `--dark toggle`. `system` needs no component: the inline
1947
+ // script in index.html is the whole implementation.
1948
+ ...choice.dark === "toggle" ? [
1949
+ {
1950
+ path: "frontend/src/components/mode-toggle.tsx",
1951
+ content: renderModeToggleTsx(iconLibraryOf(choice.icons).react)
1952
+ }
1953
+ ] : [],
1954
+ // The two components the landing page uses. Every other shadcn component
1955
+ // is one `npx shadcn@latest add` away and lands beside these.
1956
+ { path: "frontend/src/components/ui/button.tsx", content: renderButtonTsx() },
1957
+ { path: "frontend/src/components/ui/card.tsx", content: renderCardTsx() }
1958
+ ];
1959
+ },
1960
+ iconBinding(id) {
1961
+ return iconLibraryOf(id).react;
1962
+ },
1963
+ readmeFrontendSection(icons) {
1964
+ return `React + Vite, styled with [Tailwind CSS](https://tailwindcss.com) v4 and
1965
+ [shadcn/ui](https://ui.shadcn.com). shadcn is not a dependency \u2014 its components
1966
+ are copied into [\`frontend/src/components/ui/\`](frontend/src/components/ui/) and
1967
+ owned by this project, so edit them freely. \`Button\` and \`Card\` are already
1968
+ there; add more with:
1969
+
1970
+ \`\`\`bash
1971
+ npx shadcn@latest add dialog input form
1972
+ \`\`\`
1973
+
1974
+ [\`components.json\`](components.json) is pre-configured, so that works with no
1975
+ \`shadcn init\` step. ${iconLibraryOf(icons).guidance.react}
1976
+ [\`frontend/src/App.tsx\`](frontend/src/App.tsx) already uses one.
1977
+
1978
+ Components import through the \`@/\` alias
1979
+ (\`@/components/ui/button\`, \`@/lib/utils\`), which maps to \`frontend/src/\` in both
1980
+ \`tsconfig.json\` and \`vite.config.ts\` \u2014 change one and change the other.
1981
+
1982
+ Colors come from the theme tokens in
1983
+ [\`frontend/src/index.css\`](frontend/src/index.css) \u2014 see **Theming** below.`;
1984
+ },
1985
+ agentGuidanceSection(icons) {
1986
+ return `- \`frontend/src/\` \u2014 the React app. Tailwind v4 + shadcn/ui.
1987
+ - \`frontend/src/components/ui/\` \u2014 shadcn components, **copied in and owned by
1988
+ this project**. Edit them directly; there is no library to configure around.
1989
+ - Need one that isn't there? \`npx shadcn@latest add <name>\` \u2014 do not hand-roll
1990
+ it, and do not add a different component library.
1991
+ - ${iconLibraryOf(icons).guidance.react.replace(/\n/g, "\n ")}
1992
+ \`frontend/src/App.tsx\` already uses one. Do not add another icon library and
1993
+ do not paste raw inline \`<svg>\` markup \u2014 search the set before concluding an
1994
+ icon is missing.
1995
+ - Import via the \`@/\` alias (\`@/components/ui/button\`, \`@/lib/utils\`), declared
1996
+ in both \`tsconfig.json\` and \`vite.config.ts\`.`;
1997
+ }
1998
+ };
1999
+
2000
+ export {
2001
+ BASE_TOKENS,
2002
+ ACCENT_TOKENS,
2003
+ TOKEN_ORDER,
2004
+ FONTS,
2005
+ BASE_COLORS,
2006
+ ACCENTS,
2007
+ DEFAULT_BASE_COLOR,
2008
+ DARK_MODES,
2009
+ DEFAULT_RADIUS,
2010
+ DEFAULT_DARK_MODE,
2011
+ FONT_IDS,
2012
+ findFont,
2013
+ resolveFontFlag,
2014
+ fontDependencies,
2015
+ fontImports,
2016
+ fontThemeVars,
2017
+ describeFonts,
2018
+ buildTheme,
2019
+ defaultTheme,
2020
+ defaultThemeChoice,
2021
+ withRadius,
2022
+ normalizeRadius,
2023
+ resolveThemeFlag,
2024
+ isBaseColor,
2025
+ isAccent,
2026
+ resolveDarkModeFlag,
2027
+ CURATED_THEMES,
2028
+ curatedThemes,
2029
+ themeFromRegistryItem,
2030
+ orderedTokens,
2031
+ colorTokens,
2032
+ themeGuidanceSection,
2033
+ themeSwatch,
2034
+ parseColor,
2035
+ ICON_LIBRARIES,
2036
+ DEFAULT_ICON_LIBRARY,
2037
+ findIconLibrary,
2038
+ allIconLibraries,
2039
+ defaultIconLibrary,
2040
+ resolveIconsFlag,
2041
+ iconLibraryOf,
2042
+ reactPreset
2043
+ };
2044
+ //# sourceMappingURL=chunk-6DHJVLYP.js.map