@vinaverse/tokens 0.1.0-alpha.2 → 0.1.0-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -1
- package/dist/copy/index.cjs +240 -10
- package/dist/copy/index.cjs.map +1 -1
- package/dist/copy/index.d.cts +85 -3
- package/dist/copy/index.d.ts +85 -3
- package/dist/copy/index.js +238 -11
- package/dist/copy/index.js.map +1 -1
- package/dist/index.cjs +428 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +577 -4
- package/dist/index.d.ts +577 -4
- package/dist/index.js +427 -2
- package/dist/index.js.map +1 -1
- package/package.json +11 -3
- package/src/tokens.json +416 -1
package/dist/index.js
CHANGED
|
@@ -27,6 +27,10 @@ var tokens_default = {
|
|
|
27
27
|
$type: "color",
|
|
28
28
|
$value: "#545B67"
|
|
29
29
|
},
|
|
30
|
+
textSecondary: {
|
|
31
|
+
$type: "color",
|
|
32
|
+
$value: "#454B55"
|
|
33
|
+
},
|
|
30
34
|
primary: {
|
|
31
35
|
$type: "color",
|
|
32
36
|
$value: "#2B57CF"
|
|
@@ -86,6 +90,14 @@ var tokens_default = {
|
|
|
86
90
|
focus: {
|
|
87
91
|
$type: "color",
|
|
88
92
|
$value: "#2B57CF"
|
|
93
|
+
},
|
|
94
|
+
primarySubtle: {
|
|
95
|
+
$type: "color",
|
|
96
|
+
$value: "#F5F6F8"
|
|
97
|
+
},
|
|
98
|
+
rating: {
|
|
99
|
+
$type: "color",
|
|
100
|
+
$value: "#7A4F00"
|
|
89
101
|
}
|
|
90
102
|
},
|
|
91
103
|
dark: {
|
|
@@ -113,6 +125,10 @@ var tokens_default = {
|
|
|
113
125
|
$type: "color",
|
|
114
126
|
$value: "#A6ADBA"
|
|
115
127
|
},
|
|
128
|
+
textSecondary: {
|
|
129
|
+
$type: "color",
|
|
130
|
+
$value: "#BEC4CF"
|
|
131
|
+
},
|
|
116
132
|
primary: {
|
|
117
133
|
$type: "color",
|
|
118
134
|
$value: "#8DB0FF"
|
|
@@ -172,6 +188,14 @@ var tokens_default = {
|
|
|
172
188
|
focus: {
|
|
173
189
|
$type: "color",
|
|
174
190
|
$value: "#8DB0FF"
|
|
191
|
+
},
|
|
192
|
+
primarySubtle: {
|
|
193
|
+
$type: "color",
|
|
194
|
+
$value: "#181B21"
|
|
195
|
+
},
|
|
196
|
+
rating: {
|
|
197
|
+
$type: "color",
|
|
198
|
+
$value: "#E6B85C"
|
|
175
199
|
}
|
|
176
200
|
}
|
|
177
201
|
},
|
|
@@ -262,9 +286,13 @@ var tokens_default = {
|
|
|
262
286
|
}
|
|
263
287
|
},
|
|
264
288
|
motion: {
|
|
289
|
+
instant: {
|
|
290
|
+
$type: "duration",
|
|
291
|
+
$value: 80
|
|
292
|
+
},
|
|
265
293
|
fast: {
|
|
266
294
|
$type: "duration",
|
|
267
|
-
$value:
|
|
295
|
+
$value: 140
|
|
268
296
|
},
|
|
269
297
|
normal: {
|
|
270
298
|
$type: "duration",
|
|
@@ -274,6 +302,26 @@ var tokens_default = {
|
|
|
274
302
|
$type: "duration",
|
|
275
303
|
$value: 600,
|
|
276
304
|
$description: "how long a connecting banner waits before it shows, so a quick connection never flashes one"
|
|
305
|
+
},
|
|
306
|
+
base: {
|
|
307
|
+
$type: "duration",
|
|
308
|
+
$value: 220
|
|
309
|
+
},
|
|
310
|
+
slow: {
|
|
311
|
+
$type: "duration",
|
|
312
|
+
$value: 320
|
|
313
|
+
},
|
|
314
|
+
stagger: {
|
|
315
|
+
$type: "duration",
|
|
316
|
+
$value: 30
|
|
317
|
+
},
|
|
318
|
+
rise: {
|
|
319
|
+
$type: "dimension",
|
|
320
|
+
$value: 8
|
|
321
|
+
},
|
|
322
|
+
pressScale: {
|
|
323
|
+
$type: "number",
|
|
324
|
+
$value: 0.97
|
|
277
325
|
}
|
|
278
326
|
},
|
|
279
327
|
size: {
|
|
@@ -291,6 +339,333 @@ var tokens_default = {
|
|
|
291
339
|
$description: "the AI disclosure is never drawn smaller"
|
|
292
340
|
}
|
|
293
341
|
},
|
|
342
|
+
chat: {
|
|
343
|
+
$description: "The chat shell (spec 00), kit defaults a tenant overrides (ThemeOverrides.chat): elevation draws in light only.",
|
|
344
|
+
gutter: {
|
|
345
|
+
$type: "dimension",
|
|
346
|
+
$value: 16
|
|
347
|
+
},
|
|
348
|
+
gap: {
|
|
349
|
+
sameAuthor: {
|
|
350
|
+
$type: "dimension",
|
|
351
|
+
$value: 4
|
|
352
|
+
},
|
|
353
|
+
authorChange: {
|
|
354
|
+
$type: "dimension",
|
|
355
|
+
$value: 12
|
|
356
|
+
},
|
|
357
|
+
block: {
|
|
358
|
+
$type: "dimension",
|
|
359
|
+
$value: 8
|
|
360
|
+
}
|
|
361
|
+
},
|
|
362
|
+
bubble: {
|
|
363
|
+
padX: {
|
|
364
|
+
$type: "dimension",
|
|
365
|
+
$value: 14
|
|
366
|
+
},
|
|
367
|
+
padY: {
|
|
368
|
+
$type: "dimension",
|
|
369
|
+
$value: 10
|
|
370
|
+
},
|
|
371
|
+
maxWidth: {
|
|
372
|
+
$type: "number",
|
|
373
|
+
$value: 0.82
|
|
374
|
+
}
|
|
375
|
+
},
|
|
376
|
+
card: {
|
|
377
|
+
pad: {
|
|
378
|
+
$type: "dimension",
|
|
379
|
+
$value: 14
|
|
380
|
+
},
|
|
381
|
+
gap: {
|
|
382
|
+
$type: "dimension",
|
|
383
|
+
$value: 8
|
|
384
|
+
},
|
|
385
|
+
carouselGap: {
|
|
386
|
+
$type: "dimension",
|
|
387
|
+
$value: 10
|
|
388
|
+
},
|
|
389
|
+
carouselWidth: {
|
|
390
|
+
$type: "dimension",
|
|
391
|
+
$value: 214
|
|
392
|
+
}
|
|
393
|
+
},
|
|
394
|
+
chip: {
|
|
395
|
+
height: {
|
|
396
|
+
$type: "dimension",
|
|
397
|
+
$value: 38
|
|
398
|
+
},
|
|
399
|
+
gap: {
|
|
400
|
+
$type: "dimension",
|
|
401
|
+
$value: 8
|
|
402
|
+
}
|
|
403
|
+
},
|
|
404
|
+
header: {
|
|
405
|
+
height: {
|
|
406
|
+
$type: "dimension",
|
|
407
|
+
$value: 56
|
|
408
|
+
}
|
|
409
|
+
},
|
|
410
|
+
composer: {
|
|
411
|
+
minHeight: {
|
|
412
|
+
$type: "dimension",
|
|
413
|
+
$value: 48
|
|
414
|
+
}
|
|
415
|
+
},
|
|
416
|
+
input: {
|
|
417
|
+
gap: {
|
|
418
|
+
$type: "dimension",
|
|
419
|
+
$value: 12
|
|
420
|
+
}
|
|
421
|
+
},
|
|
422
|
+
radius: {
|
|
423
|
+
bubble: {
|
|
424
|
+
$type: "dimension",
|
|
425
|
+
$value: 20
|
|
426
|
+
},
|
|
427
|
+
bubbleTail: {
|
|
428
|
+
$type: "dimension",
|
|
429
|
+
$value: 6
|
|
430
|
+
},
|
|
431
|
+
card: {
|
|
432
|
+
$type: "dimension",
|
|
433
|
+
$value: 16
|
|
434
|
+
},
|
|
435
|
+
cardMedia: {
|
|
436
|
+
$type: "dimension",
|
|
437
|
+
$value: 12
|
|
438
|
+
},
|
|
439
|
+
chip: {
|
|
440
|
+
$type: "dimension",
|
|
441
|
+
$value: 999
|
|
442
|
+
},
|
|
443
|
+
slot: {
|
|
444
|
+
$type: "dimension",
|
|
445
|
+
$value: 12
|
|
446
|
+
},
|
|
447
|
+
field: {
|
|
448
|
+
$type: "dimension",
|
|
449
|
+
$value: 12
|
|
450
|
+
},
|
|
451
|
+
composer: {
|
|
452
|
+
$type: "dimension",
|
|
453
|
+
$value: 24
|
|
454
|
+
},
|
|
455
|
+
sheet: {
|
|
456
|
+
$type: "dimension",
|
|
457
|
+
$value: 28
|
|
458
|
+
}
|
|
459
|
+
},
|
|
460
|
+
elevation: {
|
|
461
|
+
card: {
|
|
462
|
+
$type: "shadow",
|
|
463
|
+
$value: {
|
|
464
|
+
offsetY: 1,
|
|
465
|
+
blur: 3,
|
|
466
|
+
opacity: 0.08
|
|
467
|
+
}
|
|
468
|
+
},
|
|
469
|
+
raised: {
|
|
470
|
+
$type: "shadow",
|
|
471
|
+
$value: {
|
|
472
|
+
offsetY: 4,
|
|
473
|
+
blur: 12,
|
|
474
|
+
opacity: 0.08
|
|
475
|
+
}
|
|
476
|
+
},
|
|
477
|
+
overlay: {
|
|
478
|
+
$type: "shadow",
|
|
479
|
+
$value: {
|
|
480
|
+
offsetY: 12,
|
|
481
|
+
blur: 28,
|
|
482
|
+
opacity: 0.12
|
|
483
|
+
}
|
|
484
|
+
},
|
|
485
|
+
sheet: {
|
|
486
|
+
$type: "shadow",
|
|
487
|
+
$value: {
|
|
488
|
+
offsetY: -4,
|
|
489
|
+
blur: 16,
|
|
490
|
+
opacity: 0.08
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
},
|
|
494
|
+
type: {
|
|
495
|
+
bubble: {
|
|
496
|
+
size: {
|
|
497
|
+
$type: "dimension",
|
|
498
|
+
$value: 16
|
|
499
|
+
},
|
|
500
|
+
line: {
|
|
501
|
+
$type: "dimension",
|
|
502
|
+
$value: 22
|
|
503
|
+
},
|
|
504
|
+
weight: {
|
|
505
|
+
$type: "fontWeight",
|
|
506
|
+
$value: 400
|
|
507
|
+
}
|
|
508
|
+
},
|
|
509
|
+
meta: {
|
|
510
|
+
size: {
|
|
511
|
+
$type: "dimension",
|
|
512
|
+
$value: 12
|
|
513
|
+
},
|
|
514
|
+
line: {
|
|
515
|
+
$type: "dimension",
|
|
516
|
+
$value: 16
|
|
517
|
+
},
|
|
518
|
+
weight: {
|
|
519
|
+
$type: "fontWeight",
|
|
520
|
+
$value: 400
|
|
521
|
+
}
|
|
522
|
+
},
|
|
523
|
+
cardTitle: {
|
|
524
|
+
size: {
|
|
525
|
+
$type: "dimension",
|
|
526
|
+
$value: 15
|
|
527
|
+
},
|
|
528
|
+
line: {
|
|
529
|
+
$type: "dimension",
|
|
530
|
+
$value: 20
|
|
531
|
+
},
|
|
532
|
+
weight: {
|
|
533
|
+
$type: "fontWeight",
|
|
534
|
+
$value: 600
|
|
535
|
+
}
|
|
536
|
+
},
|
|
537
|
+
cardBody: {
|
|
538
|
+
size: {
|
|
539
|
+
$type: "dimension",
|
|
540
|
+
$value: 13
|
|
541
|
+
},
|
|
542
|
+
line: {
|
|
543
|
+
$type: "dimension",
|
|
544
|
+
$value: 18
|
|
545
|
+
},
|
|
546
|
+
weight: {
|
|
547
|
+
$type: "fontWeight",
|
|
548
|
+
$value: 400
|
|
549
|
+
}
|
|
550
|
+
},
|
|
551
|
+
cardPrice: {
|
|
552
|
+
size: {
|
|
553
|
+
$type: "dimension",
|
|
554
|
+
$value: 15
|
|
555
|
+
},
|
|
556
|
+
line: {
|
|
557
|
+
$type: "dimension",
|
|
558
|
+
$value: 20
|
|
559
|
+
},
|
|
560
|
+
weight: {
|
|
561
|
+
$type: "fontWeight",
|
|
562
|
+
$value: 600
|
|
563
|
+
}
|
|
564
|
+
},
|
|
565
|
+
chip: {
|
|
566
|
+
size: {
|
|
567
|
+
$type: "dimension",
|
|
568
|
+
$value: 14
|
|
569
|
+
},
|
|
570
|
+
line: {
|
|
571
|
+
$type: "dimension",
|
|
572
|
+
$value: 20
|
|
573
|
+
},
|
|
574
|
+
weight: {
|
|
575
|
+
$type: "fontWeight",
|
|
576
|
+
$value: 500
|
|
577
|
+
}
|
|
578
|
+
},
|
|
579
|
+
working: {
|
|
580
|
+
size: {
|
|
581
|
+
$type: "dimension",
|
|
582
|
+
$value: 14
|
|
583
|
+
},
|
|
584
|
+
line: {
|
|
585
|
+
$type: "dimension",
|
|
586
|
+
$value: 19
|
|
587
|
+
},
|
|
588
|
+
weight: {
|
|
589
|
+
$type: "fontWeight",
|
|
590
|
+
$value: 400
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
},
|
|
594
|
+
thinking: {
|
|
595
|
+
dotSize: {
|
|
596
|
+
$type: "dimension",
|
|
597
|
+
$value: 6
|
|
598
|
+
},
|
|
599
|
+
dotGap: {
|
|
600
|
+
$type: "dimension",
|
|
601
|
+
$value: 4
|
|
602
|
+
},
|
|
603
|
+
rise: {
|
|
604
|
+
$type: "dimension",
|
|
605
|
+
$value: 3
|
|
606
|
+
},
|
|
607
|
+
cycle: {
|
|
608
|
+
$type: "duration",
|
|
609
|
+
$value: 900
|
|
610
|
+
},
|
|
611
|
+
delay: {
|
|
612
|
+
$type: "duration",
|
|
613
|
+
$value: 300
|
|
614
|
+
},
|
|
615
|
+
dotDelay: {
|
|
616
|
+
$type: "duration",
|
|
617
|
+
$value: 150
|
|
618
|
+
}
|
|
619
|
+
},
|
|
620
|
+
working: {
|
|
621
|
+
minStep: {
|
|
622
|
+
$type: "duration",
|
|
623
|
+
$value: 600
|
|
624
|
+
},
|
|
625
|
+
iconSize: {
|
|
626
|
+
$type: "dimension",
|
|
627
|
+
$value: 14
|
|
628
|
+
},
|
|
629
|
+
fontSize: {
|
|
630
|
+
$type: "dimension",
|
|
631
|
+
$value: 14
|
|
632
|
+
},
|
|
633
|
+
lineHeight: {
|
|
634
|
+
$type: "dimension",
|
|
635
|
+
$value: 19
|
|
636
|
+
}
|
|
637
|
+
},
|
|
638
|
+
caret: {
|
|
639
|
+
width: {
|
|
640
|
+
$type: "dimension",
|
|
641
|
+
$value: 2
|
|
642
|
+
},
|
|
643
|
+
height: {
|
|
644
|
+
$type: "dimension",
|
|
645
|
+
$value: 18
|
|
646
|
+
},
|
|
647
|
+
cycle: {
|
|
648
|
+
$type: "duration",
|
|
649
|
+
$value: 1e3
|
|
650
|
+
}
|
|
651
|
+
},
|
|
652
|
+
stream: {
|
|
653
|
+
flush: {
|
|
654
|
+
$type: "duration",
|
|
655
|
+
$value: 50
|
|
656
|
+
}
|
|
657
|
+
},
|
|
658
|
+
skeleton: {
|
|
659
|
+
pulse: {
|
|
660
|
+
$type: "duration",
|
|
661
|
+
$value: 1200
|
|
662
|
+
},
|
|
663
|
+
minOpacity: {
|
|
664
|
+
$type: "number",
|
|
665
|
+
$value: 0.55
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
},
|
|
294
669
|
contrast: {
|
|
295
670
|
$description: "The text and control pairs a theme must keep legible, in every mode: WCAG 2 ratio of fg on bg at least min (4.5 for text, 3 for controls and borders). divider is decorative and has none.",
|
|
296
671
|
pairs: [
|
|
@@ -314,6 +689,21 @@ var tokens_default = {
|
|
|
314
689
|
bg: "color.surface",
|
|
315
690
|
min: 4.5
|
|
316
691
|
},
|
|
692
|
+
{
|
|
693
|
+
fg: "color.textSecondary",
|
|
694
|
+
bg: "color.background",
|
|
695
|
+
min: 4.5
|
|
696
|
+
},
|
|
697
|
+
{
|
|
698
|
+
fg: "color.textSecondary",
|
|
699
|
+
bg: "color.surface",
|
|
700
|
+
min: 4.5
|
|
701
|
+
},
|
|
702
|
+
{
|
|
703
|
+
fg: "color.textSecondary",
|
|
704
|
+
bg: "color.agentBubble",
|
|
705
|
+
min: 4.5
|
|
706
|
+
},
|
|
317
707
|
{
|
|
318
708
|
fg: "color.agentText",
|
|
319
709
|
bg: "color.agentBubble",
|
|
@@ -359,6 +749,11 @@ var tokens_default = {
|
|
|
359
749
|
bg: "color.background",
|
|
360
750
|
min: 4.5
|
|
361
751
|
},
|
|
752
|
+
{
|
|
753
|
+
fg: "color.warning",
|
|
754
|
+
bg: "color.surface",
|
|
755
|
+
min: 4.5
|
|
756
|
+
},
|
|
362
757
|
{
|
|
363
758
|
fg: "color.success",
|
|
364
759
|
bg: "color.background",
|
|
@@ -373,8 +768,28 @@ var tokens_default = {
|
|
|
373
768
|
fg: "color.focus",
|
|
374
769
|
bg: "color.background",
|
|
375
770
|
min: 3
|
|
771
|
+
},
|
|
772
|
+
{
|
|
773
|
+
fg: "color.primary",
|
|
774
|
+
bg: "color.primarySubtle",
|
|
775
|
+
min: 4.5
|
|
376
776
|
}
|
|
377
777
|
]
|
|
778
|
+
},
|
|
779
|
+
ease: {
|
|
780
|
+
$description: "cubic-bezier control points: standard for what moves and stays, out for what enters, in for what leaves",
|
|
781
|
+
standard: {
|
|
782
|
+
$type: "cubicBezier",
|
|
783
|
+
$value: [0.2, 0, 0, 1]
|
|
784
|
+
},
|
|
785
|
+
out: {
|
|
786
|
+
$type: "cubicBezier",
|
|
787
|
+
$value: [0.16, 1, 0.3, 1]
|
|
788
|
+
},
|
|
789
|
+
in: {
|
|
790
|
+
$type: "cubicBezier",
|
|
791
|
+
$value: [0.4, 0, 1, 1]
|
|
792
|
+
}
|
|
378
793
|
}
|
|
379
794
|
};
|
|
380
795
|
|
|
@@ -394,6 +809,16 @@ var space = values(tokens_default.space);
|
|
|
394
809
|
var radius = values(tokens_default.radius);
|
|
395
810
|
var motion = values(tokens_default.motion);
|
|
396
811
|
var size = values(tokens_default.size);
|
|
812
|
+
var ease = values(
|
|
813
|
+
tokens_default.ease
|
|
814
|
+
);
|
|
815
|
+
function tree(node) {
|
|
816
|
+
const leaf = (n) => typeof n === "object" && n !== null && "$value" in n ? n.$value : Object.fromEntries(
|
|
817
|
+
Object.entries(n).filter(([k]) => !k.startsWith("$")).map(([k, v]) => [k, leaf(v)])
|
|
818
|
+
);
|
|
819
|
+
return leaf(node);
|
|
820
|
+
}
|
|
821
|
+
var chat = tree(tokens_default.chat);
|
|
397
822
|
var CONTRAST_PAIRS = tokens_default.contrast.pairs.map(
|
|
398
823
|
(p) => [
|
|
399
824
|
p.fg.replace("color.", ""),
|
|
@@ -442,6 +867,6 @@ function luminance(hex) {
|
|
|
442
867
|
return 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
443
868
|
}
|
|
444
869
|
|
|
445
|
-
export { CONTRAST_PAIRS, colors, contrastProblems, contrastRatio, cssVariable, font, motion, radius, size, space, tokenPaths };
|
|
870
|
+
export { CONTRAST_PAIRS, chat, colors, contrastProblems, contrastRatio, cssVariable, ease, font, motion, radius, size, space, tokenPaths };
|
|
446
871
|
//# sourceMappingURL=index.js.map
|
|
447
872
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tokens.json","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["{\n \"$description\": \"The Vinaverse design tokens, shared by every UI kit (React Native, Angular) so they look alike out of the box. Shape: W3C design-tokens style ($type, $value). Colors per mode with identical paths; sizes are numbers in a 16-based reference unit (16 = 1rem on the web, dp in React Native). The paths are public API: a CSS custom property is the path without the mode, kebab-cased (color.light.agentBubble -> --vv-color-agent-bubble), and a test freezes the list. With reduced motion asked for, every motion duration is 0: no fades, no animated scrolling.\",\n \"color\": {\n \"light\": {\n \"background\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"surface\": {\n \"$type\": \"color\",\n \"$value\": \"#F5F6F8\"\n },\n \"border\": {\n \"$type\": \"color\",\n \"$value\": \"#858C98\"\n },\n \"divider\": {\n \"$type\": \"color\",\n \"$value\": \"#E3E6EA\"\n },\n \"text\": {\n \"$type\": \"color\",\n \"$value\": \"#15171A\"\n },\n \"textMuted\": {\n \"$type\": \"color\",\n \"$value\": \"#545B67\"\n },\n \"primary\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n },\n \"onPrimary\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"agentBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#EEF1F5\"\n },\n \"agentText\": {\n \"$type\": \"color\",\n \"$value\": \"#15171A\"\n },\n \"personBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n },\n \"personText\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"staffBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#FFF3DC\"\n },\n \"staffText\": {\n \"$type\": \"color\",\n \"$value\": \"#3A2800\"\n },\n \"staffAccent\": {\n \"$type\": \"color\",\n \"$value\": \"#7A4F00\"\n },\n \"disclosureBackground\": {\n \"$type\": \"color\",\n \"$value\": \"#EEF1F5\"\n },\n \"disclosureText\": {\n \"$type\": \"color\",\n \"$value\": \"#3A414D\"\n },\n \"danger\": {\n \"$type\": \"color\",\n \"$value\": \"#B42318\"\n },\n \"warning\": {\n \"$type\": \"color\",\n \"$value\": \"#7A4F00\"\n },\n \"success\": {\n \"$type\": \"color\",\n \"$value\": \"#1C6E3F\"\n },\n \"focus\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n }\n },\n \"dark\": {\n \"background\": {\n \"$type\": \"color\",\n \"$value\": \"#0F1115\"\n },\n \"surface\": {\n \"$type\": \"color\",\n \"$value\": \"#181B21\"\n },\n \"border\": {\n \"$type\": \"color\",\n \"$value\": \"#6B7383\"\n },\n \"divider\": {\n \"$type\": \"color\",\n \"$value\": \"#262A31\"\n },\n \"text\": {\n \"$type\": \"color\",\n \"$value\": \"#ECEEF2\"\n },\n \"textMuted\": {\n \"$type\": \"color\",\n \"$value\": \"#A6ADBA\"\n },\n \"primary\": {\n \"$type\": \"color\",\n \"$value\": \"#8DB0FF\"\n },\n \"onPrimary\": {\n \"$type\": \"color\",\n \"$value\": \"#0F1115\"\n },\n \"agentBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#1E2229\"\n },\n \"agentText\": {\n \"$type\": \"color\",\n \"$value\": \"#ECEEF2\"\n },\n \"personBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#3A63D8\"\n },\n \"personText\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"staffBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#2B2416\"\n },\n \"staffText\": {\n \"$type\": \"color\",\n \"$value\": \"#F5E3C0\"\n },\n \"staffAccent\": {\n \"$type\": \"color\",\n \"$value\": \"#E6B85C\"\n },\n \"disclosureBackground\": {\n \"$type\": \"color\",\n \"$value\": \"#1A1D23\"\n },\n \"disclosureText\": {\n \"$type\": \"color\",\n \"$value\": \"#C3C8D2\"\n },\n \"danger\": {\n \"$type\": \"color\",\n \"$value\": \"#FF8F85\"\n },\n \"warning\": {\n \"$type\": \"color\",\n \"$value\": \"#E6B85C\"\n },\n \"success\": {\n \"$type\": \"color\",\n \"$value\": \"#72D49E\"\n },\n \"focus\": {\n \"$type\": \"color\",\n \"$value\": \"#8DB0FF\"\n }\n }\n },\n \"font\": {\n \"size\": {\n \"xs\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 14\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 16\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 18\n },\n \"xl\": {\n \"$type\": \"dimension\",\n \"$value\": 22\n }\n },\n \"weight\": {\n \"regular\": {\n \"$type\": \"fontWeight\",\n \"$value\": 400\n },\n \"medium\": {\n \"$type\": \"fontWeight\",\n \"$value\": 500\n },\n \"semibold\": {\n \"$type\": \"fontWeight\",\n \"$value\": 600\n }\n },\n \"lineHeight\": {\n \"$type\": \"number\",\n \"$value\": 1.4\n }\n },\n \"space\": {\n \"xxs\": {\n \"$type\": \"dimension\",\n \"$value\": 2\n },\n \"xs\": {\n \"$type\": \"dimension\",\n \"$value\": 4\n },\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 8\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 16\n },\n \"xl\": {\n \"$type\": \"dimension\",\n \"$value\": 24\n }\n },\n \"radius\": {\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 6\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 18\n },\n \"pill\": {\n \"$type\": \"dimension\",\n \"$value\": 999\n }\n },\n \"motion\": {\n \"fast\": {\n \"$type\": \"duration\",\n \"$value\": 120\n },\n \"normal\": {\n \"$type\": \"duration\",\n \"$value\": 200\n },\n \"bannerDelay\": {\n \"$type\": \"duration\",\n \"$value\": 600,\n \"$description\": \"how long a connecting banner waits before it shows, so a quick connection never flashes one\"\n }\n },\n \"size\": {\n \"touchTarget\": {\n \"$type\": \"dimension\",\n \"$value\": 44\n },\n \"avatar\": {\n \"$type\": \"dimension\",\n \"$value\": 32\n },\n \"disclosureFontMin\": {\n \"$type\": \"dimension\",\n \"$value\": 12,\n \"$description\": \"the AI disclosure is never drawn smaller\"\n }\n },\n \"contrast\": {\n \"$description\": \"The text and control pairs a theme must keep legible, in every mode: WCAG 2 ratio of fg on bg at least min (4.5 for text, 3 for controls and borders). divider is decorative and has none.\",\n \"pairs\": [\n {\n \"fg\": \"color.text\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textMuted\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.text\",\n \"bg\": \"color.surface\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textMuted\",\n \"bg\": \"color.surface\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.agentText\",\n \"bg\": \"color.agentBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.personText\",\n \"bg\": \"color.personBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.staffText\",\n \"bg\": \"color.staffBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.staffAccent\",\n \"bg\": \"color.staffBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.disclosureText\",\n \"bg\": \"color.disclosureBackground\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.onPrimary\",\n \"bg\": \"color.primary\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.primary\",\n \"bg\": \"color.background\",\n \"min\": 3\n },\n {\n \"fg\": \"color.danger\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.warning\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.success\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.border\",\n \"bg\": \"color.background\",\n \"min\": 3\n },\n {\n \"fg\": \"color.focus\",\n \"bg\": \"color.background\",\n \"min\": 3\n }\n ]\n }\n}\n","// @vinaverse/tokens: the design tokens every Vinaverse UI kit starts from, as one JSON (`@vinaverse/tokens/tokens.json`,\n// for build tools that emit CSS custom properties) and as typed values. No framework, no platform.\nimport json from './tokens.json';\n\nexport type ColorScheme = 'light' | 'dark';\nexport type ColorName = keyof (typeof json)['color']['light'];\nexport type Colors = Readonly<Record<ColorName, string>>;\n\ntype Leaf<T> = { readonly $value: T };\nconst values = <K extends string, T>(group: Record<K, Leaf<T>>) =>\n Object.fromEntries(\n Object.entries(group).map(([k, v]) => [k, (v as Leaf<T>).$value]),\n ) as Readonly<Record<K, T>>;\n\n/** The default colors of a scheme, by name. */\nexport function colors(scheme: ColorScheme): Colors {\n return values(json.color[scheme]) as Colors;\n}\n\n/** Type sizes, weights and line height; spacing, radii, motion durations (ms) and sizes, in density-independent px. */\nexport const font = {\n size: values(json.font.size),\n weight: values(json.font.weight),\n lineHeight: json.font.lineHeight.$value,\n} as const;\nexport const space = values(json.space);\nexport const radius = values(json.radius);\nexport const motion = values(json.motion);\nexport const size = values(json.size);\n\n/** The text and control pairs a theme must keep legible: [foreground, background, minimum WCAG contrast], from the JSON. */\nexport const CONTRAST_PAIRS: readonly (readonly [\n ColorName,\n ColorName,\n number,\n])[] = json.contrast.pairs.map(\n (p) =>\n [\n p.fg.replace('color.', '') as ColorName,\n p.bg.replace('color.', '') as ColorName,\n p.min,\n ] as const,\n);\n\n/**\n * Every token's path, modes included (`color.light.agentBubble`, `font.size.md`): the public names, frozen by a test.\n */\nexport function tokenPaths(): string[] {\n const out: string[] = [];\n const walk = (node: unknown, path: string[]) => {\n if (typeof node !== 'object' || node === null) return;\n if ('$value' in node) {\n out.push(path.join('.'));\n return;\n }\n for (const [key, child] of Object.entries(node))\n if (!key.startsWith('$') && key !== 'contrast')\n walk(child, [...path, key]);\n };\n walk(json, []);\n return out;\n}\n\n/** A token's CSS custom property: the path without its mode, kebab-cased (`--vv-color-agent-bubble`). */\nexport function cssVariable(path: string): string {\n const parts = path\n .split('.')\n .filter((_, i, all) => !(all[0] === 'color' && i === 1));\n return `--vv-${parts\n .map((p) => p.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`))\n .join('-')}`;\n}\n\n/** The WCAG 2 contrast ratio of two `#RRGGBB` colors (1 to 21); NaN when either is not one. */\nexport function contrastRatio(a: string, b: string): number {\n const la = luminance(a);\n const lb = luminance(b);\n return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);\n}\n\n/** The pairs of a set of colors below their minimum: a tenant theme to warn about. */\nexport function contrastProblems(palette: Colors): {\n foreground: ColorName;\n background: ColorName;\n ratio: number;\n minimum: number;\n}[] {\n return CONTRAST_PAIRS.flatMap(([foreground, background, minimum]) => {\n const ratio = contrastRatio(palette[foreground], palette[background]);\n return ratio >= minimum ? [] : [{ foreground, background, ratio, minimum }];\n });\n}\n\nfunction luminance(hex: string): number {\n const m = /^#([0-9a-f]{6})$/i.exec(hex);\n if (!m) return Number.NaN;\n const n = Number.parseInt(m[1] as string, 16);\n const [r, g, b] = [(n >> 16) & 255, (n >> 8) & 255, n & 255].map((c) => {\n const s = c / 255;\n return s <= 0.04045 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;\n }) as [number, number, number];\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/tokens.json","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["{\n \"$description\": \"The Vinaverse design tokens, shared by every UI kit (React Native, Angular) so they look alike out of the box. Shape: W3C design-tokens style ($type, $value). Colors per mode with identical paths; sizes are numbers in a 16-based reference unit (16 = 1rem on the web, dp in React Native). The paths are public API: a CSS custom property is the path without the mode, kebab-cased (color.light.agentBubble -> --vv-color-agent-bubble), and a test freezes the list. With reduced motion asked for, every motion duration is 0: no fades, no animated scrolling.\",\n \"color\": {\n \"light\": {\n \"background\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"surface\": {\n \"$type\": \"color\",\n \"$value\": \"#F5F6F8\"\n },\n \"border\": {\n \"$type\": \"color\",\n \"$value\": \"#858C98\"\n },\n \"divider\": {\n \"$type\": \"color\",\n \"$value\": \"#E3E6EA\"\n },\n \"text\": {\n \"$type\": \"color\",\n \"$value\": \"#15171A\"\n },\n \"textMuted\": {\n \"$type\": \"color\",\n \"$value\": \"#545B67\"\n },\n \"textSecondary\": {\n \"$type\": \"color\",\n \"$value\": \"#454B55\"\n },\n \"primary\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n },\n \"onPrimary\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"agentBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#EEF1F5\"\n },\n \"agentText\": {\n \"$type\": \"color\",\n \"$value\": \"#15171A\"\n },\n \"personBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n },\n \"personText\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"staffBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#FFF3DC\"\n },\n \"staffText\": {\n \"$type\": \"color\",\n \"$value\": \"#3A2800\"\n },\n \"staffAccent\": {\n \"$type\": \"color\",\n \"$value\": \"#7A4F00\"\n },\n \"disclosureBackground\": {\n \"$type\": \"color\",\n \"$value\": \"#EEF1F5\"\n },\n \"disclosureText\": {\n \"$type\": \"color\",\n \"$value\": \"#3A414D\"\n },\n \"danger\": {\n \"$type\": \"color\",\n \"$value\": \"#B42318\"\n },\n \"warning\": {\n \"$type\": \"color\",\n \"$value\": \"#7A4F00\"\n },\n \"success\": {\n \"$type\": \"color\",\n \"$value\": \"#1C6E3F\"\n },\n \"focus\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n },\n \"primarySubtle\": {\n \"$type\": \"color\",\n \"$value\": \"#F5F6F8\"\n },\n \"rating\": {\n \"$type\": \"color\",\n \"$value\": \"#7A4F00\"\n }\n },\n \"dark\": {\n \"background\": {\n \"$type\": \"color\",\n \"$value\": \"#0F1115\"\n },\n \"surface\": {\n \"$type\": \"color\",\n \"$value\": \"#181B21\"\n },\n \"border\": {\n \"$type\": \"color\",\n \"$value\": \"#6B7383\"\n },\n \"divider\": {\n \"$type\": \"color\",\n \"$value\": \"#262A31\"\n },\n \"text\": {\n \"$type\": \"color\",\n \"$value\": \"#ECEEF2\"\n },\n \"textMuted\": {\n \"$type\": \"color\",\n \"$value\": \"#A6ADBA\"\n },\n \"textSecondary\": {\n \"$type\": \"color\",\n \"$value\": \"#BEC4CF\"\n },\n \"primary\": {\n \"$type\": \"color\",\n \"$value\": \"#8DB0FF\"\n },\n \"onPrimary\": {\n \"$type\": \"color\",\n \"$value\": \"#0F1115\"\n },\n \"agentBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#1E2229\"\n },\n \"agentText\": {\n \"$type\": \"color\",\n \"$value\": \"#ECEEF2\"\n },\n \"personBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#3A63D8\"\n },\n \"personText\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"staffBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#2B2416\"\n },\n \"staffText\": {\n \"$type\": \"color\",\n \"$value\": \"#F5E3C0\"\n },\n \"staffAccent\": {\n \"$type\": \"color\",\n \"$value\": \"#E6B85C\"\n },\n \"disclosureBackground\": {\n \"$type\": \"color\",\n \"$value\": \"#1A1D23\"\n },\n \"disclosureText\": {\n \"$type\": \"color\",\n \"$value\": \"#C3C8D2\"\n },\n \"danger\": {\n \"$type\": \"color\",\n \"$value\": \"#FF8F85\"\n },\n \"warning\": {\n \"$type\": \"color\",\n \"$value\": \"#E6B85C\"\n },\n \"success\": {\n \"$type\": \"color\",\n \"$value\": \"#72D49E\"\n },\n \"focus\": {\n \"$type\": \"color\",\n \"$value\": \"#8DB0FF\"\n },\n \"primarySubtle\": {\n \"$type\": \"color\",\n \"$value\": \"#181B21\"\n },\n \"rating\": {\n \"$type\": \"color\",\n \"$value\": \"#E6B85C\"\n }\n }\n },\n \"font\": {\n \"size\": {\n \"xs\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 14\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 16\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 18\n },\n \"xl\": {\n \"$type\": \"dimension\",\n \"$value\": 22\n }\n },\n \"weight\": {\n \"regular\": {\n \"$type\": \"fontWeight\",\n \"$value\": 400\n },\n \"medium\": {\n \"$type\": \"fontWeight\",\n \"$value\": 500\n },\n \"semibold\": {\n \"$type\": \"fontWeight\",\n \"$value\": 600\n }\n },\n \"lineHeight\": {\n \"$type\": \"number\",\n \"$value\": 1.4\n }\n },\n \"space\": {\n \"xxs\": {\n \"$type\": \"dimension\",\n \"$value\": 2\n },\n \"xs\": {\n \"$type\": \"dimension\",\n \"$value\": 4\n },\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 8\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 16\n },\n \"xl\": {\n \"$type\": \"dimension\",\n \"$value\": 24\n }\n },\n \"radius\": {\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 6\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 18\n },\n \"pill\": {\n \"$type\": \"dimension\",\n \"$value\": 999\n }\n },\n \"motion\": {\n \"instant\": {\n \"$type\": \"duration\",\n \"$value\": 80\n },\n \"fast\": {\n \"$type\": \"duration\",\n \"$value\": 140\n },\n \"normal\": {\n \"$type\": \"duration\",\n \"$value\": 200\n },\n \"bannerDelay\": {\n \"$type\": \"duration\",\n \"$value\": 600,\n \"$description\": \"how long a connecting banner waits before it shows, so a quick connection never flashes one\"\n },\n \"base\": {\n \"$type\": \"duration\",\n \"$value\": 220\n },\n \"slow\": {\n \"$type\": \"duration\",\n \"$value\": 320\n },\n \"stagger\": {\n \"$type\": \"duration\",\n \"$value\": 30\n },\n \"rise\": {\n \"$type\": \"dimension\",\n \"$value\": 8\n },\n \"pressScale\": {\n \"$type\": \"number\",\n \"$value\": 0.97\n }\n },\n \"size\": {\n \"touchTarget\": {\n \"$type\": \"dimension\",\n \"$value\": 44\n },\n \"avatar\": {\n \"$type\": \"dimension\",\n \"$value\": 32\n },\n \"disclosureFontMin\": {\n \"$type\": \"dimension\",\n \"$value\": 12,\n \"$description\": \"the AI disclosure is never drawn smaller\"\n }\n },\n \"chat\": {\n \"$description\": \"The chat shell (spec 00), kit defaults a tenant overrides (ThemeOverrides.chat): elevation draws in light only.\",\n \"gutter\": {\n \"$type\": \"dimension\",\n \"$value\": 16\n },\n \"gap\": {\n \"sameAuthor\": {\n \"$type\": \"dimension\",\n \"$value\": 4\n },\n \"authorChange\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"block\": {\n \"$type\": \"dimension\",\n \"$value\": 8\n }\n },\n \"bubble\": {\n \"padX\": {\n \"$type\": \"dimension\",\n \"$value\": 14\n },\n \"padY\": {\n \"$type\": \"dimension\",\n \"$value\": 10\n },\n \"maxWidth\": {\n \"$type\": \"number\",\n \"$value\": 0.82\n }\n },\n \"card\": {\n \"pad\": {\n \"$type\": \"dimension\",\n \"$value\": 14\n },\n \"gap\": {\n \"$type\": \"dimension\",\n \"$value\": 8\n },\n \"carouselGap\": {\n \"$type\": \"dimension\",\n \"$value\": 10\n },\n \"carouselWidth\": {\n \"$type\": \"dimension\",\n \"$value\": 214\n }\n },\n \"chip\": {\n \"height\": {\n \"$type\": \"dimension\",\n \"$value\": 38\n },\n \"gap\": {\n \"$type\": \"dimension\",\n \"$value\": 8\n }\n },\n \"header\": {\n \"height\": {\n \"$type\": \"dimension\",\n \"$value\": 56\n }\n },\n \"composer\": {\n \"minHeight\": {\n \"$type\": \"dimension\",\n \"$value\": 48\n }\n },\n \"input\": {\n \"gap\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n }\n },\n \"radius\": {\n \"bubble\": {\n \"$type\": \"dimension\",\n \"$value\": 20\n },\n \"bubbleTail\": {\n \"$type\": \"dimension\",\n \"$value\": 6\n },\n \"card\": {\n \"$type\": \"dimension\",\n \"$value\": 16\n },\n \"cardMedia\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"chip\": {\n \"$type\": \"dimension\",\n \"$value\": 999\n },\n \"slot\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"field\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"composer\": {\n \"$type\": \"dimension\",\n \"$value\": 24\n },\n \"sheet\": {\n \"$type\": \"dimension\",\n \"$value\": 28\n }\n },\n \"elevation\": {\n \"card\": {\n \"$type\": \"shadow\",\n \"$value\": {\n \"offsetY\": 1,\n \"blur\": 3,\n \"opacity\": 0.08\n }\n },\n \"raised\": {\n \"$type\": \"shadow\",\n \"$value\": {\n \"offsetY\": 4,\n \"blur\": 12,\n \"opacity\": 0.08\n }\n },\n \"overlay\": {\n \"$type\": \"shadow\",\n \"$value\": {\n \"offsetY\": 12,\n \"blur\": 28,\n \"opacity\": 0.12\n }\n },\n \"sheet\": {\n \"$type\": \"shadow\",\n \"$value\": {\n \"offsetY\": -4,\n \"blur\": 16,\n \"opacity\": 0.08\n }\n }\n },\n \"type\": {\n \"bubble\": {\n \"size\": {\n \"$type\": \"dimension\",\n \"$value\": 16\n },\n \"line\": {\n \"$type\": \"dimension\",\n \"$value\": 22\n },\n \"weight\": {\n \"$type\": \"fontWeight\",\n \"$value\": 400\n }\n },\n \"meta\": {\n \"size\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"line\": {\n \"$type\": \"dimension\",\n \"$value\": 16\n },\n \"weight\": {\n \"$type\": \"fontWeight\",\n \"$value\": 400\n }\n },\n \"cardTitle\": {\n \"size\": {\n \"$type\": \"dimension\",\n \"$value\": 15\n },\n \"line\": {\n \"$type\": \"dimension\",\n \"$value\": 20\n },\n \"weight\": {\n \"$type\": \"fontWeight\",\n \"$value\": 600\n }\n },\n \"cardBody\": {\n \"size\": {\n \"$type\": \"dimension\",\n \"$value\": 13\n },\n \"line\": {\n \"$type\": \"dimension\",\n \"$value\": 18\n },\n \"weight\": {\n \"$type\": \"fontWeight\",\n \"$value\": 400\n }\n },\n \"cardPrice\": {\n \"size\": {\n \"$type\": \"dimension\",\n \"$value\": 15\n },\n \"line\": {\n \"$type\": \"dimension\",\n \"$value\": 20\n },\n \"weight\": {\n \"$type\": \"fontWeight\",\n \"$value\": 600\n }\n },\n \"chip\": {\n \"size\": {\n \"$type\": \"dimension\",\n \"$value\": 14\n },\n \"line\": {\n \"$type\": \"dimension\",\n \"$value\": 20\n },\n \"weight\": {\n \"$type\": \"fontWeight\",\n \"$value\": 500\n }\n },\n \"working\": {\n \"size\": {\n \"$type\": \"dimension\",\n \"$value\": 14\n },\n \"line\": {\n \"$type\": \"dimension\",\n \"$value\": 19\n },\n \"weight\": {\n \"$type\": \"fontWeight\",\n \"$value\": 400\n }\n }\n },\n \"thinking\": {\n \"dotSize\": {\n \"$type\": \"dimension\",\n \"$value\": 6\n },\n \"dotGap\": {\n \"$type\": \"dimension\",\n \"$value\": 4\n },\n \"rise\": {\n \"$type\": \"dimension\",\n \"$value\": 3\n },\n \"cycle\": {\n \"$type\": \"duration\",\n \"$value\": 900\n },\n \"delay\": {\n \"$type\": \"duration\",\n \"$value\": 300\n },\n \"dotDelay\": {\n \"$type\": \"duration\",\n \"$value\": 150\n }\n },\n \"working\": {\n \"minStep\": {\n \"$type\": \"duration\",\n \"$value\": 600\n },\n \"iconSize\": {\n \"$type\": \"dimension\",\n \"$value\": 14\n },\n \"fontSize\": {\n \"$type\": \"dimension\",\n \"$value\": 14\n },\n \"lineHeight\": {\n \"$type\": \"dimension\",\n \"$value\": 19\n }\n },\n \"caret\": {\n \"width\": {\n \"$type\": \"dimension\",\n \"$value\": 2\n },\n \"height\": {\n \"$type\": \"dimension\",\n \"$value\": 18\n },\n \"cycle\": {\n \"$type\": \"duration\",\n \"$value\": 1000\n }\n },\n \"stream\": {\n \"flush\": {\n \"$type\": \"duration\",\n \"$value\": 50\n }\n },\n \"skeleton\": {\n \"pulse\": {\n \"$type\": \"duration\",\n \"$value\": 1200\n },\n \"minOpacity\": {\n \"$type\": \"number\",\n \"$value\": 0.55\n }\n }\n },\n \"contrast\": {\n \"$description\": \"The text and control pairs a theme must keep legible, in every mode: WCAG 2 ratio of fg on bg at least min (4.5 for text, 3 for controls and borders). divider is decorative and has none.\",\n \"pairs\": [\n {\n \"fg\": \"color.text\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textMuted\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.text\",\n \"bg\": \"color.surface\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textMuted\",\n \"bg\": \"color.surface\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textSecondary\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textSecondary\",\n \"bg\": \"color.surface\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textSecondary\",\n \"bg\": \"color.agentBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.agentText\",\n \"bg\": \"color.agentBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.personText\",\n \"bg\": \"color.personBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.staffText\",\n \"bg\": \"color.staffBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.staffAccent\",\n \"bg\": \"color.staffBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.disclosureText\",\n \"bg\": \"color.disclosureBackground\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.onPrimary\",\n \"bg\": \"color.primary\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.primary\",\n \"bg\": \"color.background\",\n \"min\": 3\n },\n {\n \"fg\": \"color.danger\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.warning\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.warning\",\n \"bg\": \"color.surface\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.success\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.border\",\n \"bg\": \"color.background\",\n \"min\": 3\n },\n {\n \"fg\": \"color.focus\",\n \"bg\": \"color.background\",\n \"min\": 3\n },\n {\n \"fg\": \"color.primary\",\n \"bg\": \"color.primarySubtle\",\n \"min\": 4.5\n }\n ]\n },\n \"ease\": {\n \"$description\": \"cubic-bezier control points: standard for what moves and stays, out for what enters, in for what leaves\",\n \"standard\": {\n \"$type\": \"cubicBezier\",\n \"$value\": [0.2, 0, 0, 1]\n },\n \"out\": {\n \"$type\": \"cubicBezier\",\n \"$value\": [0.16, 1, 0.3, 1]\n },\n \"in\": {\n \"$type\": \"cubicBezier\",\n \"$value\": [0.4, 0, 1, 1]\n }\n }\n}\n","// @vinaverse/tokens: the design tokens every Vinaverse UI kit starts from, as one JSON (`@vinaverse/tokens/tokens.json`,\n// for build tools that emit CSS custom properties) and as typed values. No framework, no platform.\nimport json from './tokens.json';\n\nexport type ColorScheme = 'light' | 'dark';\nexport type ColorName = keyof (typeof json)['color']['light'];\nexport type Colors = Readonly<Record<ColorName, string>>;\n\ntype Leaf<T> = { readonly $value: T };\nconst values = <K extends string, T>(group: Record<K, Leaf<T>>) =>\n Object.fromEntries(\n Object.entries(group).map(([k, v]) => [k, (v as Leaf<T>).$value]),\n ) as Readonly<Record<K, T>>;\n\n/** The default colors of a scheme, by name. */\nexport function colors(scheme: ColorScheme): Colors {\n return values(json.color[scheme]) as Colors;\n}\n\n/** Type sizes, weights and line height; spacing, radii, motion durations (ms) and sizes, in density-independent px. */\nexport const font = {\n size: values(json.font.size),\n weight: values(json.font.weight),\n lineHeight: json.font.lineHeight.$value,\n} as const;\nexport const space = values(json.space);\nexport const radius = values(json.radius);\nexport const motion = values(json.motion);\nexport const size = values(json.size);\n/** Easing curves as cubic-bezier control points: `standard` moves, `out` enters, `in` leaves. */\nexport const ease = values(\n json.ease as unknown as Record<'standard' | 'out' | 'in', Leaf<number[]>>,\n);\n\n/** A token group's values, nested as in the JSON, `$` keys dropped. */\nexport type TokenTree<T> = T extends { readonly $value: infer V }\n ? V\n : {\n readonly [K in keyof T as K extends `$${string}` ? never : K]: TokenTree<\n T[K]\n >;\n };\nfunction tree<T>(node: T): TokenTree<T> {\n const leaf = (n: unknown): unknown =>\n typeof n === 'object' && n !== null && '$value' in n\n ? (n as Leaf<unknown>).$value\n : Object.fromEntries(\n Object.entries(n as object)\n .filter(([k]) => !k.startsWith('$'))\n .map(([k, v]) => [k, leaf(v)]),\n );\n return leaf(node) as TokenTree<T>;\n}\n\n/**\n * The chat shell (spec 00): spacing, radii, elevation (light only), type and the agent's state indicators, as a tenant\n * overrides them through the theme (`ThemeOverrides.chat`).\n */\nexport const chat = tree(json.chat);\nexport type ChatTokens = typeof chat;\n\n/** The text and control pairs a theme must keep legible: [foreground, background, minimum WCAG contrast], from the JSON. */\nexport const CONTRAST_PAIRS: readonly (readonly [\n ColorName,\n ColorName,\n number,\n])[] = json.contrast.pairs.map(\n (p) =>\n [\n p.fg.replace('color.', '') as ColorName,\n p.bg.replace('color.', '') as ColorName,\n p.min,\n ] as const,\n);\n\n/**\n * Every token's path, modes included (`color.light.agentBubble`, `font.size.md`): the public names, frozen by a test.\n */\nexport function tokenPaths(): string[] {\n const out: string[] = [];\n const walk = (node: unknown, path: string[]) => {\n if (typeof node !== 'object' || node === null) return;\n if ('$value' in node) {\n out.push(path.join('.'));\n return;\n }\n for (const [key, child] of Object.entries(node))\n if (!key.startsWith('$') && key !== 'contrast')\n walk(child, [...path, key]);\n };\n walk(json, []);\n return out;\n}\n\n/** A token's CSS custom property: the path without its mode, kebab-cased (`--vv-color-agent-bubble`). */\nexport function cssVariable(path: string): string {\n const parts = path\n .split('.')\n .filter((_, i, all) => !(all[0] === 'color' && i === 1));\n return `--vv-${parts\n .map((p) => p.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`))\n .join('-')}`;\n}\n\n/** The WCAG 2 contrast ratio of two `#RRGGBB` colors (1 to 21); NaN when either is not one. */\nexport function contrastRatio(a: string, b: string): number {\n const la = luminance(a);\n const lb = luminance(b);\n return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);\n}\n\n/** The pairs of a set of colors below their minimum: a tenant theme to warn about. */\nexport function contrastProblems(palette: Colors): {\n foreground: ColorName;\n background: ColorName;\n ratio: number;\n minimum: number;\n}[] {\n return CONTRAST_PAIRS.flatMap(([foreground, background, minimum]) => {\n const ratio = contrastRatio(palette[foreground], palette[background]);\n return ratio >= minimum ? [] : [{ foreground, background, ratio, minimum }];\n });\n}\n\nfunction luminance(hex: string): number {\n const m = /^#([0-9a-f]{6})$/i.exec(hex);\n if (!m) return Number.NaN;\n const n = Number.parseInt(m[1] as string, 16);\n const [r, g, b] = [(n >> 16) & 255, (n >> 8) & 255, n & 255].map((c) => {\n const s = c / 255;\n return s <= 0.04045 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;\n }) as [number, number, number];\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n"]}
|