@cloudgrid-io/ui 0.23.0 → 0.25.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.
- package/dist/blocks/avatar.d.ts +92 -0
- package/dist/blocks/avatar.d.ts.map +1 -0
- package/dist/blocks/avatar.js +107 -0
- package/dist/blocks/avatar.js.map +1 -0
- package/dist/blocks/entity-card.d.ts +50 -4
- package/dist/blocks/entity-card.d.ts.map +1 -1
- package/dist/blocks/entity-card.js +55 -7
- package/dist/blocks/entity-card.js.map +1 -1
- package/dist/blocks/feed-post.d.ts +98 -0
- package/dist/blocks/feed-post.d.ts.map +1 -0
- package/dist/blocks/feed-post.js +88 -0
- package/dist/blocks/feed-post.js.map +1 -0
- package/dist/blocks/icons.d.ts +78 -18
- package/dist/blocks/icons.d.ts.map +1 -1
- package/dist/blocks/icons.js +78 -18
- package/dist/blocks/icons.js.map +1 -1
- package/dist/blocks/phosphor-marks.d.ts +12 -8
- package/dist/blocks/phosphor-marks.d.ts.map +1 -1
- package/dist/blocks/phosphor-marks.js +18 -12
- package/dist/blocks/phosphor-marks.js.map +1 -1
- package/dist/fonts.css +17 -10
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/prose.css +7 -2
- package/dist/theme.css +9 -0
- package/dist/tokens/base.json +49 -21
- package/dist/tokens/surface-panel.json +4 -2
- package/dist/tokens.css +165 -31
- package/dist/tokens.json +12 -10
- package/package.json +1 -2
package/dist/tokens.css
CHANGED
|
@@ -44,6 +44,39 @@
|
|
|
44
44
|
--cg-primary: #5a47f0;
|
|
45
45
|
--cg-secondary: #b6de68;
|
|
46
46
|
--cg-tertiary: #60e9f0;
|
|
47
|
+
/*
|
|
48
|
+
SOURCE: the founder's 2026-09-10 draft, "Accent", RETUNED. The draft value is
|
|
49
|
+
#086FFF and this is #0061f0.
|
|
50
|
+
|
|
51
|
+
The blue is the fourth brand hue and it has one job the other three do not: the
|
|
52
|
+
draft spends it on WORDS. "View All", "Explore All", "+ New" are 15px links, so
|
|
53
|
+
the bar is 4.5:1 (WCAG 1.4.3) and not the 3:1 an indicator gets.
|
|
54
|
+
|
|
55
|
+
#086FFF on the page ground #f1f1f6 : 3.94:1 <-- under the text floor
|
|
56
|
+
#086FFF on the card #ffffff : 4.44:1 <-- also under it
|
|
57
|
+
#0061f0 on the page ground : 4.70:1
|
|
58
|
+
#0061f0 on the card : 5.29:1
|
|
59
|
+
white on #0061f0 : 5.29:1
|
|
60
|
+
|
|
61
|
+
Derived rather than picked: the draft value in OKLCH is L 0.581 C 0.230 h -1.749,
|
|
62
|
+
and this is the same hue and chroma walked down in lightness until the page
|
|
63
|
+
ground clears the floor. The nearest passing value on that ray is #0064f4 at
|
|
64
|
+
4.5089:1, which clears by 0.009 — a margin a later ground retune would erase in
|
|
65
|
+
silence — so it is taken one step further to 4.70:1. That margin practice is
|
|
66
|
+
--cg-neutral-500's, which holds 3.27:1 against a 3:1 bar for the same reason.
|
|
67
|
+
|
|
68
|
+
DECLARED AT :root ONLY, like every other value in this group. A brand hue is not
|
|
69
|
+
a semantic and does not flip; the semantics that SPEND it do. Measured, so the
|
|
70
|
+
next person does not have to:
|
|
71
|
+
|
|
72
|
+
#0061f0 on the purple panel #5a47f0 : 1.10:1 invisible
|
|
73
|
+
#0061f0 on ink #222222 : 3.00:1 an indicator, never a word
|
|
74
|
+
|
|
75
|
+
which is why --cg-link is #ffffff inside both surface scopes rather than this
|
|
76
|
+
value. On the ink surface --cg-text-accent is already the lime, and on the panel
|
|
77
|
+
it is white; the accent role has an on-surface answer in both places and none of
|
|
78
|
+
them is this blue. Do not "fix" that by copying this value into a dark scope. */
|
|
79
|
+
--cg-accent: #0061f0;
|
|
47
80
|
|
|
48
81
|
/* ---- danger ----
|
|
49
82
|
danger (PLACEHOLDER, not a brand value)
|
|
@@ -356,6 +389,16 @@
|
|
|
356
389
|
--cg-primary-tint: #eeecfe;
|
|
357
390
|
--cg-secondary-press: #a6cf57;
|
|
358
391
|
--cg-tertiary-press: #4dd8e0;
|
|
392
|
+
/*
|
|
393
|
+
The pressed and hovered rung of the accent, and --cg-link-hover.
|
|
394
|
+
|
|
395
|
+
Derived with the step --cg-primary-press takes from --cg-primary rather than
|
|
396
|
+
chosen: OKLCH L -0.0494, C -0.0078, hue held. One recipe for all four brand
|
|
397
|
+
hues means a retune of any one of them moves its press with it.
|
|
398
|
+
|
|
399
|
+
5.79:1 on the page ground and 6.52:1 on the card, so a link that darkens on
|
|
400
|
+
hover never crosses a floor on the way. */
|
|
401
|
+
--cg-accent-press: #0052da;
|
|
359
402
|
|
|
360
403
|
/* ---- neutrals ---- */
|
|
361
404
|
--cg-neutral-0: #ffffff;
|
|
@@ -448,24 +491,70 @@
|
|
|
448
491
|
--cg-focus-ring: rgba(90, 71, 240, 0.28);
|
|
449
492
|
|
|
450
493
|
/* ---- link ---- */
|
|
451
|
-
|
|
452
|
-
|
|
494
|
+
/*
|
|
495
|
+
The blue, not the ink. The founder's 2026-09-10 draft paints "View All",
|
|
496
|
+
"Explore All" and "+ New" in the accent, which is the role the fourth brand hue
|
|
497
|
+
was added for.
|
|
498
|
+
|
|
499
|
+
Was {semantic-text.text-primary}: an ink link with a purple hover, which is a
|
|
500
|
+
link that is invisible as a link until the pointer is over it. 4.70:1 on the
|
|
501
|
+
page ground.
|
|
502
|
+
|
|
503
|
+
Both surface scopes override it to #ffffff and keep the lime hover, unchanged by
|
|
504
|
+
this. The accent is a light-surface value and says so in its own note. */
|
|
505
|
+
--cg-link: var(--cg-accent);
|
|
506
|
+
/*
|
|
507
|
+
A darkening of the link's own hue rather than a jump to another one. Was
|
|
508
|
+
{brand.primary}, which read as a visited-link colour change once the resting
|
|
509
|
+
state stopped being ink. */
|
|
510
|
+
--cg-link-hover: var(--cg-accent-press);
|
|
453
511
|
|
|
454
512
|
/* ---- type-families ----
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
513
|
+
One face. The founder's 2026-09-10 draft (#197) is set in Manrope throughout —
|
|
514
|
+
its only text styles are Manrope Medium 22, SemiBold 15 and Regular 13 — so the
|
|
515
|
+
display rung is Manrope too and the condensed face is retired.
|
|
516
|
+
|
|
517
|
+
What that replaced: Futura Condensed Extra Bold where it was installed, with
|
|
518
|
+
Saira Semi Condensed 800 self-hosted as the stand-in everywhere else. Neither is
|
|
519
|
+
loaded any more. --cg-font-display is still its OWN stack rather than an alias of
|
|
520
|
+
the body one, so a future display face is a one-value edit here and not a
|
|
521
|
+
re-plumbing.
|
|
522
|
+
|
|
523
|
+
The mono face is untouched: it is used only inside prompt and terminal surfaces
|
|
524
|
+
and the draft says nothing about it. */
|
|
525
|
+
/*
|
|
526
|
+
The display rung, now Manrope (#197). Identical to --cg-font-body today and
|
|
527
|
+
deliberately still a separate token.
|
|
528
|
+
|
|
529
|
+
A consumer that wants the licensed Futura back puts it in front of this stack in
|
|
530
|
+
its own :root and changes nothing else. Note that the blocks reading this rung
|
|
531
|
+
also set `uppercase` and --cg-display-tracking, which were tuned for a condensed
|
|
532
|
+
800; they still render, in Manrope, and whether the lockups keep the uppercase is
|
|
533
|
+
a block decision rather than a token one (#203). */
|
|
534
|
+
--cg-font-display: 'Manrope Variable', 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
460
535
|
--cg-font-body: 'Manrope Variable', 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
461
536
|
--cg-font-mono: 'JetBrains Mono Variable', 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
462
537
|
|
|
463
538
|
/* ---- weights ----
|
|
464
|
-
weights
|
|
539
|
+
weights. Manrope Variable carries the whole 200-800 axis; the brand uses four of
|
|
540
|
+
them — 400 / 500 / 600 / 700 (#197). */
|
|
465
541
|
--cg-weight-regular: 400;
|
|
466
542
|
--cg-weight-medium: 500;
|
|
467
|
-
|
|
468
|
-
|
|
543
|
+
/*
|
|
544
|
+
SemiBold, not Bold. The draft's "Body Bold" style is Manrope SemiBold 600 at
|
|
545
|
+
15/1.46, and 600 is what this rung has to be for `font-bold` to render it (#197).
|
|
546
|
+
|
|
547
|
+
Was 700. Manrope at 700 next to the draft's 600 reads a weight heavier than the
|
|
548
|
+
design everywhere the token is spent, and the alternative — a new
|
|
549
|
+
--cg-weight-semibold that no component reads, beside a --cg-weight-bold that is
|
|
550
|
+
now wrong — would have left the wrong value reachable under the obvious name. */
|
|
551
|
+
--cg-weight-bold: 600;
|
|
552
|
+
/*
|
|
553
|
+
The display rung, reachable as `font-heavy` (`font-display` is the family; see
|
|
554
|
+
theme.css). 700 rather than 800 since the face became Manrope (#197): the brand
|
|
555
|
+
loads 400/500/600/700 and the 800 end of the axis belonged to the condensed
|
|
556
|
+
face's own weight. */
|
|
557
|
+
--cg-weight-display: 700;
|
|
469
558
|
|
|
470
559
|
/* ---- h1-display-ramp ----
|
|
471
560
|
H1 display ramp: uppercase, condensed, Primary or white
|
|
@@ -481,12 +570,25 @@
|
|
|
481
570
|
--cg-display-tracking: 0.012em;
|
|
482
571
|
|
|
483
572
|
/* ---- manrope-ramp ---- */
|
|
484
|
-
|
|
573
|
+
/*
|
|
574
|
+
SOURCE: the founder's 2026-09-10 draft, "H4" — Manrope Medium 22/1.2 (#197).
|
|
575
|
+
|
|
576
|
+
Was 24px. This is the section-heading rung: CardGrid, Carousel and PricingTiers
|
|
577
|
+
each render an h2 as `text-heading-lg font-medium text-ink`, which is the draft's
|
|
578
|
+
H4 exactly ("My Creations", "Most Popular", "On the Grid"). */
|
|
579
|
+
--cg-heading-lg: 22px;
|
|
485
580
|
/* SOURCE: card title */
|
|
486
581
|
--cg-heading-md: 20px;
|
|
487
582
|
/* SOURCE: step title */
|
|
488
583
|
--cg-heading-sm: 17px;
|
|
489
|
-
|
|
584
|
+
/*
|
|
585
|
+
SOURCE: the draft's H4 line height (#197). Was 1.3.
|
|
586
|
+
|
|
587
|
+
One leading serves all three heading rungs, so the 17px and 20px rungs tighten
|
|
588
|
+
with the 22px one. That is the draft's own proportion rather than an
|
|
589
|
+
extrapolation, and a heading is short enough that 1.2 does not cost a line its
|
|
590
|
+
descenders. */
|
|
591
|
+
--cg-heading-line: 1.2;
|
|
490
592
|
/* SOURCE: H1 subline */
|
|
491
593
|
--cg-body-lg: 19px;
|
|
492
594
|
/* SOURCE: default UI text */
|
|
@@ -495,7 +597,13 @@
|
|
|
495
597
|
--cg-body-sm: 15px;
|
|
496
598
|
/* SOURCE: footer, helper */
|
|
497
599
|
--cg-caption: 13px;
|
|
498
|
-
|
|
600
|
+
/*
|
|
601
|
+
SOURCE: the draft's "Body Bold" and "Small" both carry 1.46 (#197). Was 1.5.
|
|
602
|
+
|
|
603
|
+
It serves every body rung and the caption, which is what makes the draft's two
|
|
604
|
+
body styles land whole: Body Bold is --cg-body-sm at 15/1.46 and Small is
|
|
605
|
+
--cg-caption at 13/1.46, both already the right size. */
|
|
606
|
+
--cg-body-line: 1.46;
|
|
499
607
|
--cg-body-tracking: 0em;
|
|
500
608
|
--cg-mono-size: 14px;
|
|
501
609
|
--cg-mono-line: 1.7;
|
|
@@ -611,26 +719,38 @@
|
|
|
611
719
|
The live/current INDICATOR — the dot in its halo, and the brand mark. Never
|
|
612
720
|
decorative, never a fill.
|
|
613
721
|
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
722
|
+
AN ALIAS of --cg-secondary as of the 2026-09-10 re-skin (#197), which is the
|
|
723
|
+
answer to the question this note used to hold open. It was #b6ff2e, a SECOND
|
|
724
|
+
lime 36 dE from the brand's own, and the note asked which one the brand owns.
|
|
725
|
+
The founder's draft carries exactly one lime, #b6de68, and it is --cg-secondary:
|
|
726
|
+
the Most Popular bars are painted in it and #b6ff2e appears nowhere.
|
|
727
|
+
|
|
728
|
+
So the hue is retired and the NAME is kept. Every surface that draws a live mark
|
|
729
|
+
keeps writing --cg-volt, --cg-live-halo follows through the color-mix it already
|
|
730
|
+
had, and nothing downstream has to know the value moved. The alias is deliberate
|
|
731
|
+
in the same way --cg-pending's is: one value today, two names, so the mark and
|
|
732
|
+
the brand hue can part later with a one-line edit here.
|
|
619
733
|
|
|
620
|
-
|
|
621
|
-
the brand owns is the open question here.
|
|
734
|
+
Measured, on both sides of the move:
|
|
622
735
|
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
and
|
|
629
|
-
|
|
630
|
-
|
|
736
|
+
#b6ff2e on white : 1.21:1 #b6de68 on white : 1.53:1
|
|
737
|
+
--cg-volt-ink on it : 9.94:1 --cg-volt-ink on it : 7.82:1
|
|
738
|
+
|
|
739
|
+
Still below every text bar on white, and still recorded rather than corrected:
|
|
740
|
+
it reads because it is paired with --cg-volt-ink in a pill, it works on the panel
|
|
741
|
+
and on ink, and darkening it would be a design decision rather than a contrast
|
|
742
|
+
fix. The halo lightens with it, from #e8ffbc to #e8f4cf composited over white.
|
|
743
|
+
|
|
744
|
+
It is still a second LIVE beside state.online (#00a05c), and they are still not
|
|
745
|
+
interchangeable — online is 3.40:1 on white and this is 1.53:1. volt is the
|
|
746
|
+
brand mark; online is the entity's state. */
|
|
747
|
+
--cg-volt: var(--cg-secondary);
|
|
631
748
|
/*
|
|
632
|
-
Text and glyphs ON volt.
|
|
633
|
-
|
|
749
|
+
Text and glyphs ON volt. 7.82:1 against it, re-measured for the 2026-09-10
|
|
750
|
+
re-skin (#197) when volt became an alias of --cg-secondary: it was 9.94:1
|
|
751
|
+
against the old #b6ff2e. Unchanged in value, because 7.82:1 is comfortably over
|
|
752
|
+
the 4.5:1 text floor and re-deriving a value that still holds would move a
|
|
753
|
+
colour for arithmetic's sake.
|
|
634
754
|
|
|
635
755
|
This is NOT the state -ink that EntityStatus (#116) says the library lacks. That
|
|
636
756
|
note wants a foreground for the WORD on a state chip, and the arrangement it
|
|
@@ -734,7 +854,21 @@
|
|
|
734
854
|
|
|
735
855
|
/* ---- link ---- */
|
|
736
856
|
--cg-link: #ffffff;
|
|
737
|
-
|
|
857
|
+
/*
|
|
858
|
+
A lightened lime, not the brand one. #197 extended the contrast guardrail to the
|
|
859
|
+
link rungs and the panel is where it went red:
|
|
860
|
+
|
|
861
|
+
{brand.secondary} #b6de68 on the panel #5a47f0 : 3.79:1 <-- under AA
|
|
862
|
+
#caf37d on the panel : 4.62:1
|
|
863
|
+
|
|
864
|
+
Same hue and chroma in OKLCH, lifted in lightness until a hovered link on purple
|
|
865
|
+
is readable. A hover state is still normal text and gets no exemption, and the
|
|
866
|
+
panel is the one surface where the lime is a foreground rather than a mark.
|
|
867
|
+
|
|
868
|
+
The rest rung above stays #ffffff, so hovering still moves the colour rather than
|
|
869
|
+
only adding the underline the block draws. On ink the brand lime is left alone:
|
|
870
|
+
it measures 10.33:1 there and needs nothing. */
|
|
871
|
+
--cg-link-hover: #caf37d;
|
|
738
872
|
|
|
739
873
|
/* ---- semantic-surfaces ---- */
|
|
740
874
|
--cg-surface-card: transparent;
|
package/dist/tokens.json
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
"--cg-primary": "#5a47f0",
|
|
8
8
|
"--cg-secondary": "#b6de68",
|
|
9
9
|
"--cg-tertiary": "#60e9f0",
|
|
10
|
+
"--cg-accent": "#0061f0",
|
|
10
11
|
"--cg-danger": "#E53935",
|
|
11
12
|
"--cg-online": "#00a05c",
|
|
12
13
|
"--cg-offline": "var(--cg-neutral-500)",
|
|
@@ -32,6 +33,7 @@
|
|
|
32
33
|
"--cg-primary-tint": "#eeecfe",
|
|
33
34
|
"--cg-secondary-press": "#a6cf57",
|
|
34
35
|
"--cg-tertiary-press": "#4dd8e0",
|
|
36
|
+
"--cg-accent-press": "#0052da",
|
|
35
37
|
"--cg-neutral-0": "#ffffff",
|
|
36
38
|
"--cg-neutral-25": "#f1f1f6",
|
|
37
39
|
"--cg-lavender-50": "#f2f1f7",
|
|
@@ -64,30 +66,30 @@
|
|
|
64
66
|
"--cg-border-strong": "var(--cg-ink)",
|
|
65
67
|
"--cg-border-accent": "var(--cg-primary)",
|
|
66
68
|
"--cg-focus-ring": "rgba(90, 71, 240, 0.28)",
|
|
67
|
-
"--cg-link": "var(--cg-
|
|
68
|
-
"--cg-link-hover": "var(--cg-
|
|
69
|
-
"--cg-font-display": "'
|
|
69
|
+
"--cg-link": "var(--cg-accent)",
|
|
70
|
+
"--cg-link-hover": "var(--cg-accent-press)",
|
|
71
|
+
"--cg-font-display": "'Manrope Variable', 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
70
72
|
"--cg-font-body": "'Manrope Variable', 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
71
73
|
"--cg-font-mono": "'JetBrains Mono Variable', 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace",
|
|
72
74
|
"--cg-weight-regular": "400",
|
|
73
75
|
"--cg-weight-medium": "500",
|
|
74
|
-
"--cg-weight-bold": "
|
|
75
|
-
"--cg-weight-display": "
|
|
76
|
+
"--cg-weight-bold": "600",
|
|
77
|
+
"--cg-weight-display": "700",
|
|
76
78
|
"--cg-display-xl": "56px",
|
|
77
79
|
"--cg-display-lg": "44px",
|
|
78
80
|
"--cg-display-md": "38px",
|
|
79
81
|
"--cg-display-sm": "30px",
|
|
80
82
|
"--cg-display-line": "1.06",
|
|
81
83
|
"--cg-display-tracking": "0.012em",
|
|
82
|
-
"--cg-heading-lg": "
|
|
84
|
+
"--cg-heading-lg": "22px",
|
|
83
85
|
"--cg-heading-md": "20px",
|
|
84
86
|
"--cg-heading-sm": "17px",
|
|
85
|
-
"--cg-heading-line": "1.
|
|
87
|
+
"--cg-heading-line": "1.2",
|
|
86
88
|
"--cg-body-lg": "19px",
|
|
87
89
|
"--cg-body-md": "16px",
|
|
88
90
|
"--cg-body-sm": "15px",
|
|
89
91
|
"--cg-caption": "13px",
|
|
90
|
-
"--cg-body-line": "1.
|
|
92
|
+
"--cg-body-line": "1.46",
|
|
91
93
|
"--cg-body-tracking": "0em",
|
|
92
94
|
"--cg-mono-size": "14px",
|
|
93
95
|
"--cg-mono-line": "1.7",
|
|
@@ -142,7 +144,7 @@
|
|
|
142
144
|
"--cg-transition-control": "background-color var(--cg-duration) var(--cg-ease-out), border-color var(--cg-duration) var(--cg-ease-out), color var(--cg-duration) var(--cg-ease-out), box-shadow var(--cg-duration) var(--cg-ease-out)",
|
|
143
145
|
"--cg-lift-hover": "translateY(-1px)",
|
|
144
146
|
"--cg-press-scale": "0.985",
|
|
145
|
-
"--cg-volt": "
|
|
147
|
+
"--cg-volt": "var(--cg-secondary)",
|
|
146
148
|
"--cg-volt-ink": "#243d00",
|
|
147
149
|
"--cg-live-halo": "color-mix(in srgb, var(--cg-volt) 32%, transparent)",
|
|
148
150
|
"--cg-scrim": "rgba(34, 34, 34, 0.4)",
|
|
@@ -162,7 +164,7 @@
|
|
|
162
164
|
"--cg-border-strong": "#ffffff",
|
|
163
165
|
"--cg-focus-ring": "rgba(255, 255, 255, 0.5)",
|
|
164
166
|
"--cg-link": "#ffffff",
|
|
165
|
-
"--cg-link-hover": "
|
|
167
|
+
"--cg-link-hover": "#caf37d",
|
|
166
168
|
"--cg-surface-card": "transparent",
|
|
167
169
|
"--cg-danger": "#FFDAD6",
|
|
168
170
|
"--cg-online": "#C8F5DC",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudgrid-io/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.0",
|
|
4
4
|
"description": "CloudGrid design system: React components, brand design tokens, Tailwind theme, self-hosted fonts.",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/",
|
|
@@ -32,7 +32,6 @@
|
|
|
32
32
|
"@base-ui/react": "^1.7.0",
|
|
33
33
|
"@fontsource-variable/jetbrains-mono": "^5.3.0",
|
|
34
34
|
"@fontsource-variable/manrope": "^5.3.0",
|
|
35
|
-
"@fontsource/saira-semi-condensed": "^5.3.0",
|
|
36
35
|
"class-variance-authority": "^0.7.1",
|
|
37
36
|
"clsx": "^2.1.1",
|
|
38
37
|
"sonner": "^2.0.8",
|