@synapsly/tokens 0.1.0 → 0.2.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.
@@ -0,0 +1,951 @@
1
+ // src/createThemeTokens.ts
2
+ function createThemeTokens(base, overrides = {}) {
3
+ return mergeTokens(base, overrides);
4
+ }
5
+ function mergeTokens(base, overrides) {
6
+ if (!isRecord(base) || !isRecord(overrides)) {
7
+ return overrides ?? base;
8
+ }
9
+ const merged = { ...base };
10
+ for (const key of Reflect.ownKeys(overrides)) {
11
+ merged[key] = mergeTokens(base[key], overrides[key]);
12
+ }
13
+ return merged;
14
+ }
15
+ function isRecord(value) {
16
+ return typeof value === "object" && value !== null && !Array.isArray(value);
17
+ }
18
+
19
+ // src/primitiveTokens.ts
20
+ var primitiveTokens = {
21
+ color: {
22
+ white: "#ffffff",
23
+ black: "#000000",
24
+ transparent: "transparent",
25
+ neutral: {
26
+ 25: "#fcfbfb",
27
+ 50: "#f8f7f6",
28
+ 100: "#efedea",
29
+ 200: "#dedad5",
30
+ 300: "#ccc5be",
31
+ 400: "#beb6ad",
32
+ 500: "#b4aba3",
33
+ 600: "#9d9389",
34
+ 700: "#7e756e",
35
+ 800: "#645d57",
36
+ 900: "#514c47",
37
+ 950: "#2a2624",
38
+ 975: "#161413"
39
+ },
40
+ brand: {
41
+ 25: "#fdfbf8",
42
+ 50: "#fbf7f1",
43
+ 100: "#f5ecdf",
44
+ 200: "#ead8bf",
45
+ 300: "#dec29d",
46
+ 400: "#d5b186",
47
+ 500: "#cca67b",
48
+ 600: "#b88c5d",
49
+ 700: "#966f49",
50
+ 800: "#76583b",
51
+ 900: "#604832",
52
+ 950: "#332419",
53
+ 975: "#1c130d"
54
+ },
55
+ blue: {
56
+ 50: "#eff6ff",
57
+ 100: "#dbeafe",
58
+ 200: "#bfdbfe",
59
+ 300: "#93c5fd",
60
+ 400: "#60a5fa",
61
+ 500: "#3b82f6",
62
+ 600: "#2563eb",
63
+ 700: "#1d4ed8",
64
+ 800: "#1e40af",
65
+ 900: "#1e3a8a",
66
+ 950: "#172554"
67
+ },
68
+ green: {
69
+ 50: "#f0fdf4",
70
+ 100: "#dcfce7",
71
+ 200: "#bbf7d0",
72
+ 300: "#86efac",
73
+ 400: "#4ade80",
74
+ 500: "#22c55e",
75
+ 600: "#16a34a",
76
+ 700: "#15803d",
77
+ 800: "#166534",
78
+ 900: "#14532d",
79
+ 950: "#052e16"
80
+ },
81
+ yellow: {
82
+ 50: "#fefce8",
83
+ 100: "#fef9c3",
84
+ 200: "#fef08a",
85
+ 300: "#fde047",
86
+ 400: "#facc15",
87
+ 500: "#eab308",
88
+ 600: "#ca8a04",
89
+ 700: "#a16207",
90
+ 800: "#854d0e",
91
+ 900: "#713f12",
92
+ 950: "#422006"
93
+ },
94
+ orange: {
95
+ 50: "#fff7ed",
96
+ 100: "#ffedd5",
97
+ 200: "#fed7aa",
98
+ 300: "#fdba74",
99
+ 400: "#fb923c",
100
+ 500: "#f97316",
101
+ 600: "#ea580c",
102
+ 700: "#c2410c",
103
+ 800: "#9a3412",
104
+ 900: "#7c2d12",
105
+ 950: "#431407"
106
+ },
107
+ red: {
108
+ 50: "#fef2f2",
109
+ 100: "#fee2e2",
110
+ 200: "#fecaca",
111
+ 300: "#fca5a5",
112
+ 400: "#f87171",
113
+ 500: "#ef4444",
114
+ 600: "#dc2626",
115
+ 700: "#b91c1c",
116
+ 800: "#991b1b",
117
+ 900: "#7f1d1d",
118
+ 950: "#450a0a"
119
+ },
120
+ purple: {
121
+ 50: "#faf5ff",
122
+ 100: "#f3e8ff",
123
+ 200: "#e9d5ff",
124
+ 300: "#d8b4fe",
125
+ 400: "#c084fc",
126
+ 500: "#a855f7",
127
+ 600: "#9333ea",
128
+ 700: "#7e22ce",
129
+ 800: "#6b21a8",
130
+ 900: "#581c87",
131
+ 950: "#3b0764"
132
+ },
133
+ cyan: {
134
+ 50: "#ecfeff",
135
+ 100: "#cffafe",
136
+ 200: "#a5f3fc",
137
+ 300: "#67e8f9",
138
+ 400: "#22d3ee",
139
+ 500: "#06b6d4",
140
+ 600: "#0891b2",
141
+ 700: "#0e7490",
142
+ 800: "#155e75",
143
+ 900: "#164e63",
144
+ 950: "#083344"
145
+ },
146
+ pink: {
147
+ 50: "#fdf2f8",
148
+ 100: "#fce7f3",
149
+ 200: "#fbcfe8",
150
+ 300: "#f9a8d4",
151
+ 400: "#f472b6",
152
+ 500: "#ec4899",
153
+ 600: "#db2777",
154
+ 700: "#be185d",
155
+ 800: "#9d174d",
156
+ 900: "#831843",
157
+ 950: "#500724"
158
+ }
159
+ },
160
+ fontFamily: {
161
+ sans: 'Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',
162
+ serif: 'ui-serif, Georgia, Cambria, "Times New Roman", Times, serif',
163
+ mono: '"SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace'
164
+ },
165
+ fontSize: {
166
+ 75: "0.75rem",
167
+ 87: "0.875rem",
168
+ 100: "1rem",
169
+ 112: "1.125rem",
170
+ 125: "1.25rem",
171
+ 150: "1.5rem",
172
+ 187: "1.875rem",
173
+ 225: "2.25rem",
174
+ 300: "3rem"
175
+ },
176
+ fontWeight: {
177
+ 400: "400",
178
+ 500: "500",
179
+ 600: "600",
180
+ 700: "700"
181
+ },
182
+ lineHeight: {
183
+ 100: "1",
184
+ 120: "1.2",
185
+ 150: "1.5",
186
+ 175: "1.75"
187
+ },
188
+ letterSpacing: {
189
+ "-2": "-0.02em",
190
+ "-1": "-0.01em",
191
+ 0: "0",
192
+ 1: "0.01em",
193
+ 2: "0.02em",
194
+ 4: "0.04em"
195
+ },
196
+ space: {
197
+ 0: "0",
198
+ 1: "0.25rem",
199
+ 2: "0.5rem",
200
+ 3: "0.75rem",
201
+ 4: "1rem",
202
+ 5: "1.25rem",
203
+ 6: "1.5rem",
204
+ 8: "2rem",
205
+ 10: "2.5rem",
206
+ 12: "3rem",
207
+ 16: "4rem",
208
+ 20: "5rem",
209
+ 24: "6rem",
210
+ 32: "8rem",
211
+ 64: "16rem"
212
+ },
213
+ radius: {
214
+ 0: "0",
215
+ 2: "0.125rem",
216
+ 4: "0.25rem",
217
+ 8: "0.5rem",
218
+ 12: "0.75rem",
219
+ 9999: "9999px"
220
+ },
221
+ shadow: {
222
+ 0: "none",
223
+ 1: "0 1px 2px rgb(17 24 39 / 8%)",
224
+ 2: "0 2px 8px rgb(17 24 39 / 10%)",
225
+ 3: "0 8px 24px rgb(17 24 39 / 12%)",
226
+ 4: "0 16px 40px rgb(17 24 39 / 16%)",
227
+ 5: "0 24px 64px rgb(17 24 39 / 20%)",
228
+ inner: "inset 0 1px 2px rgb(17 24 39 / 8%)",
229
+ focus: "0 0 0 3px rgb(184 140 93 / 28%)"
230
+ },
231
+ zIndex: {
232
+ 0: "0",
233
+ 10: "10",
234
+ 100: "100",
235
+ 1e3: "1000",
236
+ 1100: "1100",
237
+ 1200: "1200"
238
+ },
239
+ duration: {
240
+ 0: "0ms",
241
+ 120: "120ms",
242
+ 200: "200ms",
243
+ 320: "320ms"
244
+ },
245
+ easing: {
246
+ standard: "cubic-bezier(0.2, 0, 0, 1)",
247
+ emphasized: "cubic-bezier(0.2, 0, 0, 1)",
248
+ entrance: "cubic-bezier(0, 0, 0.2, 1)",
249
+ exit: "cubic-bezier(0.4, 0, 1, 1)"
250
+ },
251
+ breakpoint: {
252
+ 360: "360px",
253
+ 640: "640px",
254
+ 768: "768px",
255
+ 1024: "1024px",
256
+ 1280: "1280px"
257
+ },
258
+ opacity: {
259
+ 0: "0",
260
+ 40: "0.4",
261
+ 60: "0.6",
262
+ 64: "0.64",
263
+ 100: "1"
264
+ },
265
+ borderWidth: {
266
+ 0: "0",
267
+ 1: "1px",
268
+ 2: "2px",
269
+ 4: "4px"
270
+ },
271
+ borderStyle: {
272
+ solid: "solid",
273
+ dashed: "dashed"
274
+ },
275
+ iconSize: {
276
+ 12: "0.75rem",
277
+ 16: "1rem",
278
+ 20: "1.25rem",
279
+ 24: "1.5rem",
280
+ 32: "2rem"
281
+ }
282
+ };
283
+
284
+ // src/resolveTokenReferences.ts
285
+ function resolveTokenReferences(value, source) {
286
+ if (typeof value === "string") {
287
+ const match = value.match(/^\{(.+)\}$/);
288
+ if (!match) {
289
+ return value;
290
+ }
291
+ const referencePath = match[1];
292
+ if (!referencePath) {
293
+ return value;
294
+ }
295
+ return getPath(source, referencePath);
296
+ }
297
+ if (Array.isArray(value)) {
298
+ return value.map((item) => resolveTokenReferences(item, source));
299
+ }
300
+ if (typeof value === "object" && value !== null) {
301
+ return Object.fromEntries(
302
+ Object.entries(value).map(([key, childValue]) => [
303
+ key,
304
+ resolveTokenReferences(childValue, source)
305
+ ])
306
+ );
307
+ }
308
+ return value;
309
+ }
310
+ function getPath(source, path) {
311
+ return path.split(".").reduce((current, segment) => {
312
+ if (typeof current !== "object" || current === null || !(segment in current)) {
313
+ throw new Error(`Unable to resolve token reference: {${path}}`);
314
+ }
315
+ return current[segment];
316
+ }, source);
317
+ }
318
+
319
+ // src/semanticTokenReferences.ts
320
+ var defaultLightSemanticTokenReferences = {
321
+ color: {
322
+ bg: {
323
+ canvas: "{primitive.color.white}",
324
+ surface: "{primitive.color.neutral.50}",
325
+ elevated: "{primitive.color.white}",
326
+ inverse: "{primitive.color.neutral.950}",
327
+ disabled: "{primitive.color.neutral.100}",
328
+ overlay: "rgb(3 7 18 / 60%)"
329
+ },
330
+ fg: {
331
+ primary: "{primitive.color.neutral.950}",
332
+ secondary: "{primitive.color.neutral.600}",
333
+ tertiary: "{primitive.color.neutral.500}",
334
+ inverse: "{primitive.color.white}",
335
+ disabled: "{primitive.color.neutral.400}",
336
+ brand: "{primitive.color.brand.700}",
337
+ success: "{primitive.color.green.700}",
338
+ warning: "{primitive.color.yellow.700}",
339
+ danger: "{primitive.color.red.700}",
340
+ info: "{primitive.color.cyan.700}"
341
+ },
342
+ border: {
343
+ subtle: "{primitive.color.neutral.100}",
344
+ default: "{primitive.color.neutral.200}",
345
+ strong: "{primitive.color.neutral.400}",
346
+ focus: "{primitive.color.brand.600}",
347
+ disabled: "{primitive.color.neutral.200}",
348
+ success: "{primitive.color.green.300}",
349
+ warning: "{primitive.color.yellow.300}",
350
+ danger: "{primitive.color.red.300}"
351
+ },
352
+ action: {
353
+ primary: {
354
+ bg: "{primitive.color.brand.500}",
355
+ bgHover: "{primitive.color.brand.600}",
356
+ bgActive: "{primitive.color.brand.700}",
357
+ border: "{primitive.color.brand.500}",
358
+ icon: "{primitive.color.white}",
359
+ fg: "{primitive.color.white}"
360
+ },
361
+ secondary: {
362
+ bg: "{primitive.color.brand.50}",
363
+ bgHover: "{primitive.color.brand.100}",
364
+ bgActive: "{primitive.color.brand.200}",
365
+ border: "{primitive.color.brand.200}",
366
+ icon: "{primitive.color.brand.800}",
367
+ fg: "{primitive.color.brand.800}"
368
+ },
369
+ danger: {
370
+ bg: "{primitive.color.red.600}",
371
+ bgHover: "{primitive.color.red.700}",
372
+ bgActive: "{primitive.color.red.800}",
373
+ border: "{primitive.color.red.600}",
374
+ icon: "{primitive.color.white}",
375
+ fg: "{primitive.color.white}"
376
+ },
377
+ disabled: {
378
+ bg: "{primitive.color.neutral.200}",
379
+ border: "{primitive.color.neutral.200}",
380
+ icon: "{primitive.color.neutral.400}",
381
+ fg: "{primitive.color.neutral.400}"
382
+ }
383
+ },
384
+ state: {
385
+ hover: {
386
+ bg: "{primitive.color.neutral.100}"
387
+ },
388
+ pressed: {
389
+ bg: "{primitive.color.neutral.200}"
390
+ },
391
+ selected: {
392
+ bg: "{primitive.color.brand.50}",
393
+ border: "{primitive.color.brand.500}",
394
+ fg: "{primitive.color.brand.800}"
395
+ },
396
+ focus: {
397
+ ring: "{primitive.color.brand.600}"
398
+ },
399
+ loading: {
400
+ bg: "{primitive.color.neutral.100}",
401
+ fg: "{primitive.color.neutral.500}"
402
+ },
403
+ visited: {
404
+ fg: "{primitive.color.purple.700}"
405
+ },
406
+ readonly: {
407
+ bg: "{primitive.color.neutral.50}",
408
+ border: "{primitive.color.neutral.200}",
409
+ fg: "{primitive.color.neutral.700}"
410
+ }
411
+ },
412
+ form: {
413
+ bg: "{primitive.color.white}",
414
+ bgHover: "{primitive.color.neutral.50}",
415
+ border: "{primitive.color.neutral.300}",
416
+ borderHover: "{primitive.color.neutral.400}",
417
+ borderFocus: "{primitive.color.brand.600}",
418
+ borderInvalid: "{primitive.color.red.600}",
419
+ fg: "{primitive.color.neutral.950}",
420
+ placeholder: "{primitive.color.neutral.500}",
421
+ caret: "{primitive.color.brand.700}",
422
+ disabled: {
423
+ bg: "{primitive.color.neutral.100}",
424
+ border: "{primitive.color.neutral.200}",
425
+ fg: "{primitive.color.neutral.400}"
426
+ },
427
+ readonly: {
428
+ bg: "{primitive.color.neutral.50}",
429
+ border: "{primitive.color.neutral.200}",
430
+ fg: "{primitive.color.neutral.700}"
431
+ }
432
+ },
433
+ feedback: {
434
+ success: {
435
+ bg: "{primitive.color.green.50}",
436
+ fg: "{primitive.color.green.700}"
437
+ },
438
+ warning: {
439
+ bg: "{primitive.color.yellow.50}",
440
+ fg: "{primitive.color.yellow.700}"
441
+ },
442
+ danger: {
443
+ bg: "{primitive.color.red.50}",
444
+ fg: "{primitive.color.red.700}"
445
+ },
446
+ info: {
447
+ bg: "{primitive.color.cyan.50}",
448
+ fg: "{primitive.color.cyan.700}"
449
+ }
450
+ }
451
+ },
452
+ typography: {
453
+ fontFamily: {
454
+ body: "{primitive.fontFamily.sans}",
455
+ heading: "{primitive.fontFamily.sans}",
456
+ code: "{primitive.fontFamily.mono}"
457
+ },
458
+ fontSize: {
459
+ xs: "{primitive.fontSize.75}",
460
+ sm: "{primitive.fontSize.87}",
461
+ md: "{primitive.fontSize.100}",
462
+ lg: "{primitive.fontSize.112}",
463
+ xl: "{primitive.fontSize.125}",
464
+ "2xl": "{primitive.fontSize.150}",
465
+ "3xl": "{primitive.fontSize.187}",
466
+ "4xl": "{primitive.fontSize.225}"
467
+ },
468
+ fontWeight: {
469
+ regular: "{primitive.fontWeight.400}",
470
+ medium: "{primitive.fontWeight.500}",
471
+ semibold: "{primitive.fontWeight.600}",
472
+ bold: "{primitive.fontWeight.700}"
473
+ },
474
+ lineHeight: {
475
+ tight: "{primitive.lineHeight.120}",
476
+ normal: "{primitive.lineHeight.150}",
477
+ relaxed: "{primitive.lineHeight.175}"
478
+ },
479
+ letterSpacing: {
480
+ tighter: "{primitive.letterSpacing.-2}",
481
+ tight: "{primitive.letterSpacing.-1}",
482
+ normal: "{primitive.letterSpacing.0}",
483
+ wide: "{primitive.letterSpacing.1}",
484
+ wider: "{primitive.letterSpacing.2}",
485
+ widest: "{primitive.letterSpacing.4}"
486
+ },
487
+ text: {
488
+ display: {
489
+ fontFamily: "{primitive.fontFamily.sans}",
490
+ fontSize: "{primitive.fontSize.225}",
491
+ fontWeight: "{primitive.fontWeight.700}",
492
+ lineHeight: "{primitive.lineHeight.120}",
493
+ letterSpacing: "{primitive.letterSpacing.-1}"
494
+ },
495
+ heading: {
496
+ lg: {
497
+ fontFamily: "{primitive.fontFamily.sans}",
498
+ fontSize: "{primitive.fontSize.187}",
499
+ fontWeight: "{primitive.fontWeight.700}",
500
+ lineHeight: "{primitive.lineHeight.120}",
501
+ letterSpacing: "{primitive.letterSpacing.-1}"
502
+ },
503
+ md: {
504
+ fontFamily: "{primitive.fontFamily.sans}",
505
+ fontSize: "{primitive.fontSize.150}",
506
+ fontWeight: "{primitive.fontWeight.600}",
507
+ lineHeight: "{primitive.lineHeight.120}",
508
+ letterSpacing: "{primitive.letterSpacing.0}"
509
+ },
510
+ sm: {
511
+ fontFamily: "{primitive.fontFamily.sans}",
512
+ fontSize: "{primitive.fontSize.125}",
513
+ fontWeight: "{primitive.fontWeight.600}",
514
+ lineHeight: "{primitive.lineHeight.120}",
515
+ letterSpacing: "{primitive.letterSpacing.0}"
516
+ }
517
+ },
518
+ body: {
519
+ lg: {
520
+ fontFamily: "{primitive.fontFamily.sans}",
521
+ fontSize: "{primitive.fontSize.112}",
522
+ fontWeight: "{primitive.fontWeight.400}",
523
+ lineHeight: "{primitive.lineHeight.150}",
524
+ letterSpacing: "{primitive.letterSpacing.0}"
525
+ },
526
+ md: {
527
+ fontFamily: "{primitive.fontFamily.sans}",
528
+ fontSize: "{primitive.fontSize.100}",
529
+ fontWeight: "{primitive.fontWeight.400}",
530
+ lineHeight: "{primitive.lineHeight.150}",
531
+ letterSpacing: "{primitive.letterSpacing.0}"
532
+ },
533
+ sm: {
534
+ fontFamily: "{primitive.fontFamily.sans}",
535
+ fontSize: "{primitive.fontSize.87}",
536
+ fontWeight: "{primitive.fontWeight.400}",
537
+ lineHeight: "{primitive.lineHeight.150}",
538
+ letterSpacing: "{primitive.letterSpacing.0}"
539
+ }
540
+ },
541
+ label: {
542
+ md: {
543
+ fontFamily: "{primitive.fontFamily.sans}",
544
+ fontSize: "{primitive.fontSize.87}",
545
+ fontWeight: "{primitive.fontWeight.500}",
546
+ lineHeight: "{primitive.lineHeight.120}",
547
+ letterSpacing: "{primitive.letterSpacing.0}"
548
+ },
549
+ sm: {
550
+ fontFamily: "{primitive.fontFamily.sans}",
551
+ fontSize: "{primitive.fontSize.75}",
552
+ fontWeight: "{primitive.fontWeight.500}",
553
+ lineHeight: "{primitive.lineHeight.120}",
554
+ letterSpacing: "{primitive.letterSpacing.1}"
555
+ }
556
+ },
557
+ caption: {
558
+ fontFamily: "{primitive.fontFamily.sans}",
559
+ fontSize: "{primitive.fontSize.75}",
560
+ fontWeight: "{primitive.fontWeight.400}",
561
+ lineHeight: "{primitive.lineHeight.150}",
562
+ letterSpacing: "{primitive.letterSpacing.0}"
563
+ },
564
+ code: {
565
+ fontFamily: "{primitive.fontFamily.mono}",
566
+ fontSize: "{primitive.fontSize.87}",
567
+ fontWeight: "{primitive.fontWeight.400}",
568
+ lineHeight: "{primitive.lineHeight.150}",
569
+ letterSpacing: "{primitive.letterSpacing.0}"
570
+ }
571
+ }
572
+ },
573
+ spacing: {
574
+ none: "{primitive.space.0}",
575
+ "2xs": "{primitive.space.1}",
576
+ xs: "{primitive.space.2}",
577
+ sm: "{primitive.space.3}",
578
+ md: "{primitive.space.4}",
579
+ lg: "{primitive.space.6}",
580
+ xl: "{primitive.space.8}",
581
+ "2xl": "{primitive.space.12}",
582
+ "3xl": "{primitive.space.16}",
583
+ "4xl": "{primitive.space.32}"
584
+ },
585
+ radius: {
586
+ none: "{primitive.radius.0}",
587
+ xs: "{primitive.radius.2}",
588
+ sm: "{primitive.radius.4}",
589
+ md: "{primitive.radius.8}",
590
+ lg: "{primitive.radius.12}",
591
+ full: "{primitive.radius.9999}"
592
+ },
593
+ shadow: {
594
+ none: "{primitive.shadow.0}",
595
+ sm: "{primitive.shadow.1}",
596
+ md: "{primitive.shadow.3}",
597
+ lg: "{primitive.shadow.4}",
598
+ focus: "{primitive.shadow.focus}"
599
+ },
600
+ zIndex: {
601
+ base: "{primitive.zIndex.0}",
602
+ raised: "{primitive.zIndex.10}",
603
+ sticky: "{primitive.zIndex.100}",
604
+ overlay: "{primitive.zIndex.1000}",
605
+ modal: "{primitive.zIndex.1100}",
606
+ toast: "{primitive.zIndex.1200}"
607
+ },
608
+ motion: {
609
+ duration: {
610
+ instant: "{primitive.duration.0}",
611
+ fast: "{primitive.duration.120}",
612
+ normal: "{primitive.duration.200}",
613
+ slow: "{primitive.duration.320}"
614
+ },
615
+ easing: {
616
+ standard: "{primitive.easing.standard}",
617
+ emphasized: "{primitive.easing.emphasized}",
618
+ entrance: "{primitive.easing.entrance}",
619
+ exit: "{primitive.easing.exit}"
620
+ }
621
+ },
622
+ breakpoint: {
623
+ xs: "{primitive.breakpoint.360}",
624
+ sm: "{primitive.breakpoint.640}",
625
+ md: "{primitive.breakpoint.768}",
626
+ lg: "{primitive.breakpoint.1024}",
627
+ xl: "{primitive.breakpoint.1280}"
628
+ },
629
+ opacity: {
630
+ disabled: "{primitive.opacity.40}",
631
+ muted: "{primitive.opacity.64}",
632
+ overlay: "{primitive.opacity.60}"
633
+ },
634
+ border: {
635
+ width: {
636
+ none: "{primitive.borderWidth.0}",
637
+ thin: "{primitive.borderWidth.1}",
638
+ medium: "{primitive.borderWidth.2}",
639
+ thick: "{primitive.borderWidth.4}"
640
+ },
641
+ style: {
642
+ solid: "{primitive.borderStyle.solid}",
643
+ dashed: "{primitive.borderStyle.dashed}"
644
+ }
645
+ },
646
+ iconSize: {
647
+ xs: "{primitive.iconSize.12}",
648
+ sm: "{primitive.iconSize.16}",
649
+ md: "{primitive.iconSize.20}",
650
+ lg: "{primitive.iconSize.24}",
651
+ xl: "{primitive.iconSize.32}"
652
+ },
653
+ size: {
654
+ control: {
655
+ sm: "{primitive.space.8}",
656
+ md: "{primitive.space.10}",
657
+ lg: "{primitive.space.12}"
658
+ },
659
+ iconButton: {
660
+ sm: "{primitive.space.8}",
661
+ md: "{primitive.space.10}",
662
+ lg: "{primitive.space.12}"
663
+ }
664
+ },
665
+ padding: {
666
+ control: {
667
+ x: {
668
+ sm: "{primitive.space.3}",
669
+ md: "{primitive.space.4}",
670
+ lg: "{primitive.space.5}"
671
+ },
672
+ y: {
673
+ sm: "{primitive.space.1}",
674
+ md: "{primitive.space.2}",
675
+ lg: "{primitive.space.3}"
676
+ }
677
+ },
678
+ page: {
679
+ xMobile: "{primitive.space.4}",
680
+ xDesktop: "{primitive.space.8}"
681
+ }
682
+ },
683
+ gap: {
684
+ inline: {
685
+ sm: "{primitive.space.1}",
686
+ md: "{primitive.space.2}",
687
+ lg: "{primitive.space.3}"
688
+ },
689
+ stack: {
690
+ sm: "{primitive.space.2}",
691
+ md: "{primitive.space.4}",
692
+ lg: "{primitive.space.6}"
693
+ },
694
+ section: {
695
+ sm: "{primitive.space.8}",
696
+ md: "{primitive.space.12}",
697
+ lg: "{primitive.space.16}"
698
+ }
699
+ },
700
+ layout: {
701
+ container: {
702
+ sm: "{primitive.breakpoint.640}",
703
+ md: "{primitive.breakpoint.768}",
704
+ lg: "{primitive.breakpoint.1024}",
705
+ xl: "{primitive.breakpoint.1280}"
706
+ },
707
+ gutter: {
708
+ mobile: "{primitive.space.4}",
709
+ desktop: "{primitive.space.8}"
710
+ },
711
+ sidebar: {
712
+ width: "{primitive.space.64}",
713
+ collapsedWidth: "{primitive.space.16}"
714
+ }
715
+ }
716
+ };
717
+ var defaultDarkSemanticTokenReferences = {
718
+ ...defaultLightSemanticTokenReferences,
719
+ color: {
720
+ bg: {
721
+ canvas: "{primitive.color.neutral.975}",
722
+ surface: "{primitive.color.neutral.950}",
723
+ elevated: "{primitive.color.neutral.950}",
724
+ inverse: "{primitive.color.white}",
725
+ disabled: "{primitive.color.neutral.900}",
726
+ overlay: "rgb(0 0 0 / 70%)"
727
+ },
728
+ fg: {
729
+ primary: "{primitive.color.neutral.50}",
730
+ secondary: "{primitive.color.neutral.300}",
731
+ tertiary: "{primitive.color.neutral.400}",
732
+ inverse: "{primitive.color.neutral.950}",
733
+ disabled: "{primitive.color.neutral.500}",
734
+ brand: "{primitive.color.brand.300}",
735
+ success: "{primitive.color.green.300}",
736
+ warning: "{primitive.color.yellow.300}",
737
+ danger: "{primitive.color.red.300}",
738
+ info: "{primitive.color.cyan.300}"
739
+ },
740
+ border: {
741
+ subtle: "{primitive.color.neutral.800}",
742
+ default: "{primitive.color.neutral.700}",
743
+ strong: "{primitive.color.neutral.500}",
744
+ focus: "{primitive.color.brand.400}",
745
+ disabled: "{primitive.color.neutral.800}",
746
+ success: "{primitive.color.green.700}",
747
+ warning: "{primitive.color.yellow.700}",
748
+ danger: "{primitive.color.red.700}"
749
+ },
750
+ action: {
751
+ primary: {
752
+ bg: "{primitive.color.brand.400}",
753
+ bgHover: "{primitive.color.brand.300}",
754
+ bgActive: "{primitive.color.brand.200}",
755
+ border: "{primitive.color.brand.400}",
756
+ icon: "{primitive.color.neutral.950}",
757
+ fg: "{primitive.color.neutral.950}"
758
+ },
759
+ secondary: {
760
+ bg: "{primitive.color.neutral.800}",
761
+ bgHover: "{primitive.color.neutral.700}",
762
+ bgActive: "{primitive.color.neutral.600}",
763
+ border: "{primitive.color.neutral.700}",
764
+ icon: "{primitive.color.brand.200}",
765
+ fg: "{primitive.color.brand.200}"
766
+ },
767
+ danger: {
768
+ bg: "{primitive.color.red.500}",
769
+ bgHover: "{primitive.color.red.400}",
770
+ bgActive: "{primitive.color.red.300}",
771
+ border: "{primitive.color.red.500}",
772
+ icon: "{primitive.color.white}",
773
+ fg: "{primitive.color.white}"
774
+ },
775
+ disabled: {
776
+ bg: "{primitive.color.neutral.800}",
777
+ border: "{primitive.color.neutral.800}",
778
+ icon: "{primitive.color.neutral.500}",
779
+ fg: "{primitive.color.neutral.500}"
780
+ }
781
+ },
782
+ state: {
783
+ hover: {
784
+ bg: "{primitive.color.neutral.800}"
785
+ },
786
+ pressed: {
787
+ bg: "{primitive.color.neutral.700}"
788
+ },
789
+ selected: {
790
+ bg: "{primitive.color.brand.950}",
791
+ border: "{primitive.color.brand.400}",
792
+ fg: "{primitive.color.brand.200}"
793
+ },
794
+ focus: {
795
+ ring: "{primitive.color.brand.400}"
796
+ },
797
+ loading: {
798
+ bg: "{primitive.color.neutral.800}",
799
+ fg: "{primitive.color.neutral.400}"
800
+ },
801
+ visited: {
802
+ fg: "{primitive.color.purple.300}"
803
+ },
804
+ readonly: {
805
+ bg: "{primitive.color.neutral.900}",
806
+ border: "{primitive.color.neutral.700}",
807
+ fg: "{primitive.color.neutral.300}"
808
+ }
809
+ },
810
+ form: {
811
+ bg: "{primitive.color.neutral.900}",
812
+ bgHover: "{primitive.color.neutral.800}",
813
+ border: "{primitive.color.neutral.700}",
814
+ borderHover: "{primitive.color.neutral.600}",
815
+ borderFocus: "{primitive.color.brand.400}",
816
+ borderInvalid: "{primitive.color.red.400}",
817
+ fg: "{primitive.color.neutral.50}",
818
+ placeholder: "{primitive.color.neutral.500}",
819
+ caret: "{primitive.color.brand.300}",
820
+ disabled: {
821
+ bg: "{primitive.color.neutral.800}",
822
+ border: "{primitive.color.neutral.800}",
823
+ fg: "{primitive.color.neutral.500}"
824
+ },
825
+ readonly: {
826
+ bg: "{primitive.color.neutral.900}",
827
+ border: "{primitive.color.neutral.700}",
828
+ fg: "{primitive.color.neutral.300}"
829
+ }
830
+ },
831
+ feedback: {
832
+ success: {
833
+ bg: "{primitive.color.green.950}",
834
+ fg: "{primitive.color.green.300}"
835
+ },
836
+ warning: {
837
+ bg: "{primitive.color.yellow.950}",
838
+ fg: "{primitive.color.yellow.300}"
839
+ },
840
+ danger: {
841
+ bg: "{primitive.color.red.950}",
842
+ fg: "{primitive.color.red.300}"
843
+ },
844
+ info: {
845
+ bg: "{primitive.color.cyan.950}",
846
+ fg: "{primitive.color.cyan.300}"
847
+ }
848
+ }
849
+ }
850
+ };
851
+
852
+ // src/themeNames.ts
853
+ var themeNames = {
854
+ light: "light",
855
+ dark: "dark"
856
+ };
857
+ var themeAttribute = "data-theme";
858
+ function getThemeSelector(name) {
859
+ return `[${themeAttribute}="${name}"]`;
860
+ }
861
+
862
+ // src/cssVars.ts
863
+ var cssVarPrefix = "synapsly";
864
+ var defaultResolvedLightCssTokens = resolveTokenReferences(
865
+ defaultLightSemanticTokenReferences,
866
+ {
867
+ primitive: primitiveTokens
868
+ }
869
+ );
870
+ var defaultResolvedDarkCssTokens = resolveTokenReferences(
871
+ defaultDarkSemanticTokenReferences,
872
+ {
873
+ primitive: primitiveTokens
874
+ }
875
+ );
876
+ var defaultResolvedCssTokens = defaultResolvedLightCssTokens;
877
+ var cssVars = createCssVarReferences(defaultResolvedLightCssTokens);
878
+ function createCssThemeTokens(base, overrides = {}) {
879
+ return createThemeTokens(base, overrides);
880
+ }
881
+ function createCssTheme(options) {
882
+ const tokens = createCssThemeTokens(
883
+ options.tokens ?? defaultResolvedLightCssTokens,
884
+ options.overrides ?? {}
885
+ );
886
+ const selector = options.selector ?? getThemeSelector(options.name);
887
+ return {
888
+ attributes: {
889
+ [themeAttribute]: options.name
890
+ },
891
+ cssText: createCssThemeRule(selector, tokens),
892
+ name: options.name,
893
+ selector
894
+ };
895
+ }
896
+ function createCssThemeRule(selector, tokens) {
897
+ const declarations = flattenTokenEntries(tokens).map(([path, value]) => ` ${getCssVarName(path)}: ${value};`).join("\n");
898
+ return `${selector} {
899
+ ${declarations}
900
+ }`;
901
+ }
902
+ function createDefaultCssThemes() {
903
+ return [
904
+ createCssThemeRule(
905
+ `:root, ${getThemeSelector(themeNames.light)}`,
906
+ defaultResolvedLightCssTokens
907
+ ),
908
+ createCssThemeRule(getThemeSelector(themeNames.dark), defaultResolvedDarkCssTokens)
909
+ ].join("\n\n");
910
+ }
911
+ function getCssVarName(path) {
912
+ return `--${[cssVarPrefix, ...path.map(toKebabCase)].join("-")}`;
913
+ }
914
+ function createCssVarReferences(tokens) {
915
+ return mapTokenLeaves(tokens, (path) => `var(${getCssVarName(path)})`);
916
+ }
917
+ function mapTokenLeaves(value, mapper, path = []) {
918
+ if (typeof value === "string") {
919
+ return mapper(path);
920
+ }
921
+ if (isRecord2(value)) {
922
+ return Object.fromEntries(
923
+ Object.entries(value).map(([key, childValue]) => [
924
+ key,
925
+ mapTokenLeaves(childValue, mapper, [...path, key])
926
+ ])
927
+ );
928
+ }
929
+ return value;
930
+ }
931
+ function flattenTokenEntries(value, path = []) {
932
+ if (typeof value === "string") {
933
+ return [[path, value]];
934
+ }
935
+ if (isRecord2(value)) {
936
+ return Object.entries(value).flatMap(
937
+ ([key, childValue]) => flattenTokenEntries(childValue, [...path, key])
938
+ );
939
+ }
940
+ return [];
941
+ }
942
+ function toKebabCase(value) {
943
+ return value.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/[^a-zA-Z0-9-]+/g, "-").replace(/^-+|-+$/g, "").toLowerCase();
944
+ }
945
+ function isRecord2(value) {
946
+ return typeof value === "object" && value !== null && !Array.isArray(value);
947
+ }
948
+
949
+ export { createCssTheme, createCssThemeRule, createCssThemeTokens, createDefaultCssThemes, cssVarPrefix, cssVars, defaultResolvedCssTokens, defaultResolvedDarkCssTokens, defaultResolvedLightCssTokens, getCssVarName, primitiveTokens };
950
+ //# sourceMappingURL=cssVars.js.map
951
+ //# sourceMappingURL=cssVars.js.map