@nationaldesignstudio/react 0.0.15 → 0.0.16

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 (164) hide show
  1. package/package.json +3 -2
  2. package/src/App.css +0 -0
  3. package/src/App.tsx +7 -0
  4. package/src/assets/fonts/PPNeueMontreal-Variable.woff2 +0 -0
  5. package/src/assets/react.svg +1 -0
  6. package/src/components/atoms/accordion/accordion.stories.tsx +228 -0
  7. package/src/components/atoms/accordion/accordion.tsx +219 -0
  8. package/src/components/atoms/accordion/index.ts +6 -0
  9. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-chromium-darwin.png +0 -0
  10. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-chromium-linux.png +0 -0
  11. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-outline-chromium-darwin.png +0 -0
  12. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-outline-chromium-linux.png +0 -0
  13. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-outline-quiet-chromium-darwin.png +0 -0
  14. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-outline-quiet-chromium-linux.png +0 -0
  15. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-disabled-chromium-darwin.png +0 -0
  16. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-disabled-chromium-linux.png +0 -0
  17. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-chromium-darwin.png +0 -0
  18. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-chromium-linux.png +0 -0
  19. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-outline-chromium-darwin.png +0 -0
  20. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-outline-chromium-linux.png +0 -0
  21. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-outline-quiet-chromium-darwin.png +0 -0
  22. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-outline-quiet-chromium-linux.png +0 -0
  23. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-large-chromium-darwin.png +0 -0
  24. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-large-chromium-linux.png +0 -0
  25. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-medium-chromium-darwin.png +0 -0
  26. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-medium-chromium-linux.png +0 -0
  27. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-small-chromium-darwin.png +0 -0
  28. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-small-chromium-linux.png +0 -0
  29. package/src/components/atoms/button/button.stories.tsx +102 -0
  30. package/src/components/atoms/button/button.test.tsx +135 -0
  31. package/src/components/atoms/button/button.tsx +139 -0
  32. package/src/components/atoms/button/button.visual.test.tsx +102 -0
  33. package/src/components/atoms/button/icon-button.stories.tsx +166 -0
  34. package/src/components/atoms/button/icon-button.tsx +120 -0
  35. package/src/components/atoms/button/index.ts +6 -0
  36. package/src/components/atoms/ndstudio-footer/index.ts +1 -0
  37. package/src/components/atoms/ndstudio-footer/ndstudio-footer.tsx +55 -0
  38. package/src/components/atoms/pager-control/index.ts +5 -0
  39. package/src/components/atoms/pager-control/pager-control.stories.tsx +209 -0
  40. package/src/components/atoms/pager-control/pager-control.test.tsx +130 -0
  41. package/src/components/atoms/pager-control/pager-control.tsx +329 -0
  42. package/src/components/dev-tools/dev-toolbar/dev-toolbar.stories.tsx +82 -0
  43. package/src/components/dev-tools/dev-toolbar/dev-toolbar.tsx +196 -0
  44. package/src/components/dev-tools/dev-toolbar/index.ts +1 -0
  45. package/src/components/dev-tools/grid-overlay/grid-overlay.tsx +41 -0
  46. package/src/components/dev-tools/grid-overlay/index.ts +1 -0
  47. package/src/components/dev-tools/index.ts +2 -0
  48. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-default-vertical-chromium-darwin.png +0 -0
  49. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-default-vertical-chromium-linux.png +0 -0
  50. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-horizontal-chromium-darwin.png +0 -0
  51. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-horizontal-chromium-linux.png +0 -0
  52. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-minimal-chromium-darwin.png +0 -0
  53. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-minimal-chromium-linux.png +0 -0
  54. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-actions-chromium-darwin.png +0 -0
  55. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-actions-chromium-linux.png +0 -0
  56. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-eyebrow-chromium-darwin.png +0 -0
  57. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-eyebrow-chromium-linux.png +0 -0
  58. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-image-chromium-darwin.png +0 -0
  59. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-image-chromium-linux.png +0 -0
  60. package/src/components/organisms/card/card.stories.tsx +293 -0
  61. package/src/components/organisms/card/card.test.tsx +245 -0
  62. package/src/components/organisms/card/card.tsx +225 -0
  63. package/src/components/organisms/card/card.visual.test.tsx +197 -0
  64. package/src/components/organisms/card/index.ts +19 -0
  65. package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-active-link-chromium-darwin.png +0 -0
  66. package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-active-link-chromium-linux.png +0 -0
  67. package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-brand-only-chromium-darwin.png +0 -0
  68. package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-brand-only-chromium-linux.png +0 -0
  69. package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-default-chromium-darwin.png +0 -0
  70. package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-default-chromium-linux.png +0 -0
  71. package/src/components/organisms/navbar/index.ts +18 -0
  72. package/src/components/organisms/navbar/navbar.stories.tsx +313 -0
  73. package/src/components/organisms/navbar/navbar.test.tsx +190 -0
  74. package/src/components/organisms/navbar/navbar.tsx +323 -0
  75. package/src/components/organisms/navbar/navbar.visual.test.tsx +85 -0
  76. package/src/components/organisms/us-gov-banner/__screenshots__/us-gov-banner.visual.test.tsx/us-gov-banner-custom-icon-chromium-darwin.png +0 -0
  77. package/src/components/organisms/us-gov-banner/__screenshots__/us-gov-banner.visual.test.tsx/us-gov-banner-custom-icon-chromium-linux.png +0 -0
  78. package/src/components/organisms/us-gov-banner/__screenshots__/us-gov-banner.visual.test.tsx/us-gov-banner-custom-text-chromium-darwin.png +0 -0
  79. package/src/components/organisms/us-gov-banner/__screenshots__/us-gov-banner.visual.test.tsx/us-gov-banner-custom-text-chromium-linux.png +0 -0
  80. package/src/components/organisms/us-gov-banner/__screenshots__/us-gov-banner.visual.test.tsx/us-gov-banner-default-chromium-darwin.png +0 -0
  81. package/src/components/organisms/us-gov-banner/__screenshots__/us-gov-banner.visual.test.tsx/us-gov-banner-default-chromium-linux.png +0 -0
  82. package/src/components/organisms/us-gov-banner/index.ts +1 -0
  83. package/src/components/organisms/us-gov-banner/us-gov-banner.stories.tsx +35 -0
  84. package/src/components/organisms/us-gov-banner/us-gov-banner.test.tsx +107 -0
  85. package/src/components/organisms/us-gov-banner/us-gov-banner.tsx +73 -0
  86. package/src/components/organisms/us-gov-banner/us-gov-banner.visual.test.tsx +46 -0
  87. package/src/components/sections/banner/banner.stories.tsx +150 -0
  88. package/src/components/sections/banner/banner.test.tsx +185 -0
  89. package/src/components/sections/banner/banner.tsx +130 -0
  90. package/src/components/sections/banner/index.ts +2 -0
  91. package/src/components/sections/card-grid/card-grid.stories.tsx +351 -0
  92. package/src/components/sections/card-grid/card-grid.tsx +116 -0
  93. package/src/components/sections/card-grid/index.ts +1 -0
  94. package/src/components/sections/faq-section/faq-section.stories.tsx +453 -0
  95. package/src/components/sections/faq-section/faq-section.tsx +84 -0
  96. package/src/components/sections/faq-section/index.ts +2 -0
  97. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-desktop-chromium-darwin.png +0 -0
  98. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-desktop-chromium-linux.png +0 -0
  99. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-mobile-chromium-darwin.png +0 -0
  100. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-mobile-chromium-linux.png +0 -0
  101. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-tablet-chromium-darwin.png +0 -0
  102. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-tablet-chromium-linux.png +0 -0
  103. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-desktop-chromium-darwin.png +0 -0
  104. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-desktop-chromium-linux.png +0 -0
  105. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-mobile-chromium-darwin.png +0 -0
  106. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-mobile-chromium-linux.png +0 -0
  107. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-tablet-chromium-darwin.png +0 -0
  108. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-tablet-chromium-linux.png +0 -0
  109. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-desktop-chromium-darwin.png +0 -0
  110. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-desktop-chromium-linux.png +0 -0
  111. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-mobile-chromium-darwin.png +0 -0
  112. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-mobile-chromium-linux.png +0 -0
  113. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-tablet-chromium-darwin.png +0 -0
  114. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-tablet-chromium-linux.png +0 -0
  115. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-custom-class-chromium-darwin.png +0 -0
  116. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-custom-class-chromium-linux.png +0 -0
  117. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-default-chromium-linux.png +0 -0
  118. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-long-title-chromium-darwin.png +0 -0
  119. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-long-title-chromium-linux.png +0 -0
  120. package/src/components/sections/hero/hero.stories.tsx +274 -0
  121. package/src/components/sections/hero/hero.test.tsx +135 -0
  122. package/src/components/sections/hero/hero.tsx +453 -0
  123. package/src/components/sections/hero/hero.visual.test.tsx +140 -0
  124. package/src/components/sections/hero/index.ts +10 -0
  125. package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-h3-heading-chromium-darwin.png +0 -0
  126. package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-h3-heading-chromium-linux.png +0 -0
  127. package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-multiple-paragraphs-chromium-darwin.png +0 -0
  128. package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-multiple-paragraphs-chromium-linux.png +0 -0
  129. package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-multiple-sections-chromium-darwin.png +0 -0
  130. package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-multiple-sections-chromium-linux.png +0 -0
  131. package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-single-section-chromium-darwin.png +0 -0
  132. package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-single-section-chromium-linux.png +0 -0
  133. package/src/components/sections/prose/index.ts +6 -0
  134. package/src/components/sections/prose/prose.stories.tsx +144 -0
  135. package/src/components/sections/prose/prose.test.tsx +178 -0
  136. package/src/components/sections/prose/prose.tsx +88 -0
  137. package/src/components/sections/prose/prose.visual.test.tsx +105 -0
  138. package/src/components/sections/river/index.ts +1 -0
  139. package/src/components/sections/river/river.stories.tsx +237 -0
  140. package/src/components/sections/river/river.test.tsx +268 -0
  141. package/src/components/sections/river/river.tsx +173 -0
  142. package/src/components/sections/tout/index.ts +1 -0
  143. package/src/components/sections/tout/tout.stories.tsx +171 -0
  144. package/src/components/sections/tout/tout.test.tsx +242 -0
  145. package/src/components/sections/tout/tout.tsx +270 -0
  146. package/src/components/sections/two-column-section/index.ts +5 -0
  147. package/src/components/sections/two-column-section/two-column-section.stories.tsx +285 -0
  148. package/src/components/sections/two-column-section/two-column-section.tsx +162 -0
  149. package/src/hooks/index.ts +1 -0
  150. package/src/hooks/use-event-listener.ts +73 -0
  151. package/src/index.ts +155 -0
  152. package/src/lib/theme.ts +1000 -0
  153. package/src/lib/utils.ts +6 -0
  154. package/src/main.tsx +13 -0
  155. package/src/stories/GridSystem.stories.tsx +84 -0
  156. package/src/stories/Introduction.mdx +114 -0
  157. package/src/stories/ThemeProvider.stories.tsx +357 -0
  158. package/src/stories/TokenShowcase.stories.tsx +92 -0
  159. package/src/stories/TokenShowcase.tsx +1429 -0
  160. package/src/styles.css +11 -0
  161. package/src/theme/ThemeProvider.tsx +297 -0
  162. package/src/theme/hooks.ts +40 -0
  163. package/src/theme/index.ts +43 -0
  164. package/src/theme/utils.ts +104 -0
@@ -0,0 +1,1429 @@
1
+ import type * as React from "react";
2
+
3
+ const ColorSwatch: React.FC<{
4
+ bgClass: string;
5
+ label: string;
6
+ }> = ({ bgClass, label }) => {
7
+ return (
8
+ <div className="flex flex-col">
9
+ <div
10
+ className={`w-full h-spacing-12 rounded-md border border-gray-200 ${bgClass}`}
11
+ />
12
+ <div className="mt-1 text-xs font-mono text-gray-600">{label}</div>
13
+ </div>
14
+ );
15
+ };
16
+
17
+ export const ColorTokens: React.FC = () => {
18
+ return (
19
+ <div className="space-y-8">
20
+ <div>
21
+ <h2 className="text-2xl font-bold mb-6">Color Palette</h2>
22
+
23
+ {/* Gray */}
24
+ <div className="mb-8">
25
+ <h3 className="text-lg font-semibold mb-3">Gray</h3>
26
+ <div className="grid grid-cols-13 gap-2">
27
+ <ColorSwatch bgClass="bg-gray-50" label="50" />
28
+ <ColorSwatch bgClass="bg-gray-100" label="100" />
29
+ <ColorSwatch bgClass="bg-gray-200" label="200" />
30
+ <ColorSwatch bgClass="bg-gray-300" label="300" />
31
+ <ColorSwatch bgClass="bg-gray-400" label="400" />
32
+ <ColorSwatch bgClass="bg-gray-500" label="500" />
33
+ <ColorSwatch bgClass="bg-gray-600" label="600" />
34
+ <ColorSwatch bgClass="bg-gray-700" label="700" />
35
+ <ColorSwatch bgClass="bg-gray-800" label="800" />
36
+ <ColorSwatch bgClass="bg-gray-900" label="900" />
37
+ <ColorSwatch bgClass="bg-gray-1000" label="1000" />
38
+ <ColorSwatch bgClass="bg-gray-1100" label="1100" />
39
+ <ColorSwatch bgClass="bg-gray-1200" label="1200" />
40
+ </div>
41
+ </div>
42
+
43
+ {/* Brown */}
44
+ <div className="mb-8">
45
+ <h3 className="text-lg font-semibold mb-3">Brown</h3>
46
+ <div className="grid grid-cols-13 gap-2">
47
+ <ColorSwatch bgClass="bg-brown-50" label="50" />
48
+ <ColorSwatch bgClass="bg-brown-100" label="100" />
49
+ <ColorSwatch bgClass="bg-brown-200" label="200" />
50
+ <ColorSwatch bgClass="bg-brown-300" label="300" />
51
+ <ColorSwatch bgClass="bg-brown-400" label="400" />
52
+ <ColorSwatch bgClass="bg-brown-500" label="500" />
53
+ <ColorSwatch bgClass="bg-brown-600" label="600" />
54
+ <ColorSwatch bgClass="bg-brown-700" label="700" />
55
+ <ColorSwatch bgClass="bg-brown-800" label="800" />
56
+ <ColorSwatch bgClass="bg-brown-900" label="900" />
57
+ <ColorSwatch bgClass="bg-brown-1000" label="1000" />
58
+ <ColorSwatch bgClass="bg-brown-1100" label="1100" />
59
+ <ColorSwatch bgClass="bg-brown-1200" label="1200" />
60
+ </div>
61
+ </div>
62
+
63
+ {/* Steel */}
64
+ <div className="mb-8">
65
+ <h3 className="text-lg font-semibold mb-3">Steel</h3>
66
+ <div className="grid grid-cols-13 gap-2">
67
+ <ColorSwatch bgClass="bg-steel-50" label="50" />
68
+ <ColorSwatch bgClass="bg-steel-100" label="100" />
69
+ <ColorSwatch bgClass="bg-steel-200" label="200" />
70
+ <ColorSwatch bgClass="bg-steel-300" label="300" />
71
+ <ColorSwatch bgClass="bg-steel-400" label="400" />
72
+ <ColorSwatch bgClass="bg-steel-500" label="500" />
73
+ <ColorSwatch bgClass="bg-steel-600" label="600" />
74
+ <ColorSwatch bgClass="bg-steel-700" label="700" />
75
+ <ColorSwatch bgClass="bg-steel-800" label="800" />
76
+ <ColorSwatch bgClass="bg-steel-900" label="900" />
77
+ <ColorSwatch bgClass="bg-steel-1000" label="1000" />
78
+ <ColorSwatch bgClass="bg-steel-1100" label="1100" />
79
+ <ColorSwatch bgClass="bg-steel-1200" label="1200" />
80
+ </div>
81
+ </div>
82
+
83
+ {/* Red */}
84
+ <div className="mb-8">
85
+ <h3 className="text-lg font-semibold mb-3">Red</h3>
86
+ <div className="grid grid-cols-10 gap-2 mb-2">
87
+ <ColorSwatch bgClass="bg-red-50" label="50" />
88
+ <ColorSwatch bgClass="bg-red-100" label="100" />
89
+ <ColorSwatch bgClass="bg-red-200" label="200" />
90
+ <ColorSwatch bgClass="bg-red-300" label="300" />
91
+ <ColorSwatch bgClass="bg-red-400" label="400" />
92
+ <ColorSwatch bgClass="bg-red-500" label="500" />
93
+ <ColorSwatch bgClass="bg-red-600" label="600" />
94
+ <ColorSwatch bgClass="bg-red-700" label="700" />
95
+ <ColorSwatch bgClass="bg-red-800" label="800" />
96
+ <ColorSwatch bgClass="bg-red-900" label="900" />
97
+ </div>
98
+ <div className="mt-3">
99
+ <div className="text-sm text-gray-500 mb-2">Vibrant</div>
100
+ <div className="grid grid-cols-4 gap-2 max-w-xs">
101
+ <ColorSwatch bgClass="bg-red-v100" label="v100" />
102
+ <ColorSwatch bgClass="bg-red-v200" label="v200" />
103
+ <ColorSwatch bgClass="bg-red-v300" label="v300" />
104
+ <ColorSwatch bgClass="bg-red-v400" label="v400" />
105
+ </div>
106
+ </div>
107
+ </div>
108
+
109
+ {/* Pink */}
110
+ <div className="mb-8">
111
+ <h3 className="text-lg font-semibold mb-3">Pink</h3>
112
+ <div className="grid grid-cols-10 gap-2 mb-2">
113
+ <ColorSwatch bgClass="bg-pink-50" label="50" />
114
+ <ColorSwatch bgClass="bg-pink-100" label="100" />
115
+ <ColorSwatch bgClass="bg-pink-200" label="200" />
116
+ <ColorSwatch bgClass="bg-pink-300" label="300" />
117
+ <ColorSwatch bgClass="bg-pink-400" label="400" />
118
+ <ColorSwatch bgClass="bg-pink-500" label="500" />
119
+ <ColorSwatch bgClass="bg-pink-600" label="600" />
120
+ <ColorSwatch bgClass="bg-pink-700" label="700" />
121
+ <ColorSwatch bgClass="bg-pink-800" label="800" />
122
+ <ColorSwatch bgClass="bg-pink-900" label="900" />
123
+ </div>
124
+ <div className="mt-3">
125
+ <div className="text-sm text-gray-500 mb-2">Vibrant</div>
126
+ <div className="grid grid-cols-4 gap-2 max-w-xs">
127
+ <ColorSwatch bgClass="bg-pink-v100" label="v100" />
128
+ <ColorSwatch bgClass="bg-pink-v200" label="v200" />
129
+ <ColorSwatch bgClass="bg-pink-v300" label="v300" />
130
+ <ColorSwatch bgClass="bg-pink-v400" label="v400" />
131
+ </div>
132
+ </div>
133
+ </div>
134
+
135
+ {/* Purple */}
136
+ <div className="mb-8">
137
+ <h3 className="text-lg font-semibold mb-3">Purple</h3>
138
+ <div className="grid grid-cols-10 gap-2 mb-2">
139
+ <ColorSwatch bgClass="bg-purple-50" label="50" />
140
+ <ColorSwatch bgClass="bg-purple-100" label="100" />
141
+ <ColorSwatch bgClass="bg-purple-200" label="200" />
142
+ <ColorSwatch bgClass="bg-purple-300" label="300" />
143
+ <ColorSwatch bgClass="bg-purple-400" label="400" />
144
+ <ColorSwatch bgClass="bg-purple-500" label="500" />
145
+ <ColorSwatch bgClass="bg-purple-600" label="600" />
146
+ <ColorSwatch bgClass="bg-purple-700" label="700" />
147
+ <ColorSwatch bgClass="bg-purple-800" label="800" />
148
+ <ColorSwatch bgClass="bg-purple-900" label="900" />
149
+ </div>
150
+ <div className="mt-3">
151
+ <div className="text-sm text-gray-500 mb-2">Vibrant</div>
152
+ <div className="grid grid-cols-4 gap-2 max-w-xs">
153
+ <ColorSwatch bgClass="bg-purple-v100" label="v100" />
154
+ <ColorSwatch bgClass="bg-purple-v200" label="v200" />
155
+ <ColorSwatch bgClass="bg-purple-v300" label="v300" />
156
+ <ColorSwatch bgClass="bg-purple-v400" label="v400" />
157
+ </div>
158
+ </div>
159
+ </div>
160
+
161
+ {/* Iris */}
162
+ <div className="mb-8">
163
+ <h3 className="text-lg font-semibold mb-3">Iris</h3>
164
+ <div className="grid grid-cols-10 gap-2 mb-2">
165
+ <ColorSwatch bgClass="bg-iris-50" label="50" />
166
+ <ColorSwatch bgClass="bg-iris-100" label="100" />
167
+ <ColorSwatch bgClass="bg-iris-200" label="200" />
168
+ <ColorSwatch bgClass="bg-iris-300" label="300" />
169
+ <ColorSwatch bgClass="bg-iris-400" label="400" />
170
+ <ColorSwatch bgClass="bg-iris-500" label="500" />
171
+ <ColorSwatch bgClass="bg-iris-600" label="600" />
172
+ <ColorSwatch bgClass="bg-iris-700" label="700" />
173
+ <ColorSwatch bgClass="bg-iris-800" label="800" />
174
+ <ColorSwatch bgClass="bg-iris-900" label="900" />
175
+ </div>
176
+ <div className="mt-3">
177
+ <div className="text-sm text-gray-500 mb-2">Vibrant</div>
178
+ <div className="grid grid-cols-4 gap-2 max-w-xs">
179
+ <ColorSwatch bgClass="bg-iris-v100" label="v100" />
180
+ <ColorSwatch bgClass="bg-iris-v200" label="v200" />
181
+ <ColorSwatch bgClass="bg-iris-v300" label="v300" />
182
+ <ColorSwatch bgClass="bg-iris-v400" label="v400" />
183
+ </div>
184
+ </div>
185
+ </div>
186
+
187
+ {/* Indigo */}
188
+ <div className="mb-8">
189
+ <h3 className="text-lg font-semibold mb-3">Indigo</h3>
190
+ <div className="grid grid-cols-10 gap-2 mb-2">
191
+ <ColorSwatch bgClass="bg-indigo-50" label="50" />
192
+ <ColorSwatch bgClass="bg-indigo-100" label="100" />
193
+ <ColorSwatch bgClass="bg-indigo-200" label="200" />
194
+ <ColorSwatch bgClass="bg-indigo-300" label="300" />
195
+ <ColorSwatch bgClass="bg-indigo-400" label="400" />
196
+ <ColorSwatch bgClass="bg-indigo-500" label="500" />
197
+ <ColorSwatch bgClass="bg-indigo-600" label="600" />
198
+ <ColorSwatch bgClass="bg-indigo-700" label="700" />
199
+ <ColorSwatch bgClass="bg-indigo-800" label="800" />
200
+ <ColorSwatch bgClass="bg-indigo-900" label="900" />
201
+ </div>
202
+ <div className="mt-3">
203
+ <div className="text-sm text-gray-500 mb-2">Vibrant</div>
204
+ <div className="grid grid-cols-4 gap-2 max-w-xs">
205
+ <ColorSwatch bgClass="bg-indigo-v100" label="v100" />
206
+ <ColorSwatch bgClass="bg-indigo-v200" label="v200" />
207
+ <ColorSwatch bgClass="bg-indigo-v300" label="v300" />
208
+ <ColorSwatch bgClass="bg-indigo-v400" label="v400" />
209
+ </div>
210
+ </div>
211
+ </div>
212
+
213
+ {/* Blue */}
214
+ <div className="mb-8">
215
+ <h3 className="text-lg font-semibold mb-3">Blue</h3>
216
+ <div className="grid grid-cols-10 gap-2 mb-2">
217
+ <ColorSwatch bgClass="bg-blue-50" label="50" />
218
+ <ColorSwatch bgClass="bg-blue-100" label="100" />
219
+ <ColorSwatch bgClass="bg-blue-200" label="200" />
220
+ <ColorSwatch bgClass="bg-blue-300" label="300" />
221
+ <ColorSwatch bgClass="bg-blue-400" label="400" />
222
+ <ColorSwatch bgClass="bg-blue-500" label="500" />
223
+ <ColorSwatch bgClass="bg-blue-600" label="600" />
224
+ <ColorSwatch bgClass="bg-blue-700" label="700" />
225
+ <ColorSwatch bgClass="bg-blue-800" label="800" />
226
+ <ColorSwatch bgClass="bg-blue-900" label="900" />
227
+ </div>
228
+ <div className="mt-3">
229
+ <div className="text-sm text-gray-500 mb-2">Vibrant</div>
230
+ <div className="grid grid-cols-4 gap-2 max-w-xs">
231
+ <ColorSwatch bgClass="bg-blue-v100" label="v100" />
232
+ <ColorSwatch bgClass="bg-blue-v200" label="v200" />
233
+ <ColorSwatch bgClass="bg-blue-v300" label="v300" />
234
+ <ColorSwatch bgClass="bg-blue-v400" label="v400" />
235
+ </div>
236
+ </div>
237
+ </div>
238
+
239
+ {/* Ice */}
240
+ <div className="mb-8">
241
+ <h3 className="text-lg font-semibold mb-3">Ice</h3>
242
+ <div className="grid grid-cols-10 gap-2 mb-2">
243
+ <ColorSwatch bgClass="bg-ice-50" label="50" />
244
+ <ColorSwatch bgClass="bg-ice-100" label="100" />
245
+ <ColorSwatch bgClass="bg-ice-200" label="200" />
246
+ <ColorSwatch bgClass="bg-ice-300" label="300" />
247
+ <ColorSwatch bgClass="bg-ice-400" label="400" />
248
+ <ColorSwatch bgClass="bg-ice-500" label="500" />
249
+ <ColorSwatch bgClass="bg-ice-600" label="600" />
250
+ <ColorSwatch bgClass="bg-ice-700" label="700" />
251
+ <ColorSwatch bgClass="bg-ice-800" label="800" />
252
+ <ColorSwatch bgClass="bg-ice-900" label="900" />
253
+ </div>
254
+ <div className="mt-3">
255
+ <div className="text-sm text-gray-500 mb-2">Vibrant</div>
256
+ <div className="grid grid-cols-4 gap-2 max-w-xs">
257
+ <ColorSwatch bgClass="bg-ice-v100" label="v100" />
258
+ <ColorSwatch bgClass="bg-ice-v200" label="v200" />
259
+ <ColorSwatch bgClass="bg-ice-v300" label="v300" />
260
+ <ColorSwatch bgClass="bg-ice-v400" label="v400" />
261
+ </div>
262
+ </div>
263
+ </div>
264
+
265
+ {/* Cyan */}
266
+ <div className="mb-8">
267
+ <h3 className="text-lg font-semibold mb-3">Cyan</h3>
268
+ <div className="grid grid-cols-10 gap-2 mb-2">
269
+ <ColorSwatch bgClass="bg-cyan-50" label="50" />
270
+ <ColorSwatch bgClass="bg-cyan-100" label="100" />
271
+ <ColorSwatch bgClass="bg-cyan-200" label="200" />
272
+ <ColorSwatch bgClass="bg-cyan-300" label="300" />
273
+ <ColorSwatch bgClass="bg-cyan-400" label="400" />
274
+ <ColorSwatch bgClass="bg-cyan-500" label="500" />
275
+ <ColorSwatch bgClass="bg-cyan-600" label="600" />
276
+ <ColorSwatch bgClass="bg-cyan-700" label="700" />
277
+ <ColorSwatch bgClass="bg-cyan-800" label="800" />
278
+ <ColorSwatch bgClass="bg-cyan-900" label="900" />
279
+ </div>
280
+ <div className="mt-3">
281
+ <div className="text-sm text-gray-500 mb-2">Vibrant</div>
282
+ <div className="grid grid-cols-4 gap-2 max-w-xs">
283
+ <ColorSwatch bgClass="bg-cyan-v100" label="v100" />
284
+ <ColorSwatch bgClass="bg-cyan-v200" label="v200" />
285
+ <ColorSwatch bgClass="bg-cyan-v300" label="v300" />
286
+ <ColorSwatch bgClass="bg-cyan-v400" label="v400" />
287
+ </div>
288
+ </div>
289
+ </div>
290
+
291
+ {/* Teal */}
292
+ <div className="mb-8">
293
+ <h3 className="text-lg font-semibold mb-3">Teal</h3>
294
+ <div className="grid grid-cols-10 gap-2 mb-2">
295
+ <ColorSwatch bgClass="bg-teal-50" label="50" />
296
+ <ColorSwatch bgClass="bg-teal-100" label="100" />
297
+ <ColorSwatch bgClass="bg-teal-200" label="200" />
298
+ <ColorSwatch bgClass="bg-teal-300" label="300" />
299
+ <ColorSwatch bgClass="bg-teal-400" label="400" />
300
+ <ColorSwatch bgClass="bg-teal-500" label="500" />
301
+ <ColorSwatch bgClass="bg-teal-600" label="600" />
302
+ <ColorSwatch bgClass="bg-teal-700" label="700" />
303
+ <ColorSwatch bgClass="bg-teal-800" label="800" />
304
+ <ColorSwatch bgClass="bg-teal-900" label="900" />
305
+ </div>
306
+ <div className="mt-3">
307
+ <div className="text-sm text-gray-500 mb-2">Vibrant</div>
308
+ <div className="grid grid-cols-4 gap-2 max-w-xs">
309
+ <ColorSwatch bgClass="bg-teal-v100" label="v100" />
310
+ <ColorSwatch bgClass="bg-teal-v200" label="v200" />
311
+ <ColorSwatch bgClass="bg-teal-v300" label="v300" />
312
+ <ColorSwatch bgClass="bg-teal-v400" label="v400" />
313
+ </div>
314
+ </div>
315
+ </div>
316
+
317
+ {/* Green */}
318
+ <div className="mb-8">
319
+ <h3 className="text-lg font-semibold mb-3">Green</h3>
320
+ <div className="grid grid-cols-10 gap-2 mb-2">
321
+ <ColorSwatch bgClass="bg-green-50" label="50" />
322
+ <ColorSwatch bgClass="bg-green-100" label="100" />
323
+ <ColorSwatch bgClass="bg-green-200" label="200" />
324
+ <ColorSwatch bgClass="bg-green-300" label="300" />
325
+ <ColorSwatch bgClass="bg-green-400" label="400" />
326
+ <ColorSwatch bgClass="bg-green-500" label="500" />
327
+ <ColorSwatch bgClass="bg-green-600" label="600" />
328
+ <ColorSwatch bgClass="bg-green-700" label="700" />
329
+ <ColorSwatch bgClass="bg-green-800" label="800" />
330
+ <ColorSwatch bgClass="bg-green-900" label="900" />
331
+ </div>
332
+ <div className="mt-3">
333
+ <div className="text-sm text-gray-500 mb-2">Vibrant</div>
334
+ <div className="grid grid-cols-4 gap-2 max-w-xs">
335
+ <ColorSwatch bgClass="bg-green-v100" label="v100" />
336
+ <ColorSwatch bgClass="bg-green-v200" label="v200" />
337
+ <ColorSwatch bgClass="bg-green-v300" label="v300" />
338
+ <ColorSwatch bgClass="bg-green-v400" label="v400" />
339
+ </div>
340
+ </div>
341
+ </div>
342
+
343
+ {/* Sage */}
344
+ <div className="mb-8">
345
+ <h3 className="text-lg font-semibold mb-3">Sage</h3>
346
+ <div className="grid grid-cols-10 gap-2 mb-2">
347
+ <ColorSwatch bgClass="bg-sage-50" label="50" />
348
+ <ColorSwatch bgClass="bg-sage-100" label="100" />
349
+ <ColorSwatch bgClass="bg-sage-200" label="200" />
350
+ <ColorSwatch bgClass="bg-sage-300" label="300" />
351
+ <ColorSwatch bgClass="bg-sage-400" label="400" />
352
+ <ColorSwatch bgClass="bg-sage-500" label="500" />
353
+ <ColorSwatch bgClass="bg-sage-600" label="600" />
354
+ <ColorSwatch bgClass="bg-sage-700" label="700" />
355
+ <ColorSwatch bgClass="bg-sage-800" label="800" />
356
+ <ColorSwatch bgClass="bg-sage-900" label="900" />
357
+ </div>
358
+ <div className="mt-3">
359
+ <div className="text-sm text-gray-500 mb-2">Vibrant</div>
360
+ <div className="grid grid-cols-4 gap-2 max-w-xs">
361
+ <ColorSwatch bgClass="bg-sage-v100" label="v100" />
362
+ <ColorSwatch bgClass="bg-sage-v200" label="v200" />
363
+ <ColorSwatch bgClass="bg-sage-v300" label="v300" />
364
+ <ColorSwatch bgClass="bg-sage-v400" label="v400" />
365
+ </div>
366
+ </div>
367
+ </div>
368
+
369
+ {/* Lime */}
370
+ <div className="mb-8">
371
+ <h3 className="text-lg font-semibold mb-3">Lime</h3>
372
+ <div className="grid grid-cols-10 gap-2 mb-2">
373
+ <ColorSwatch bgClass="bg-lime-50" label="50" />
374
+ <ColorSwatch bgClass="bg-lime-100" label="100" />
375
+ <ColorSwatch bgClass="bg-lime-200" label="200" />
376
+ <ColorSwatch bgClass="bg-lime-300" label="300" />
377
+ <ColorSwatch bgClass="bg-lime-400" label="400" />
378
+ <ColorSwatch bgClass="bg-lime-500" label="500" />
379
+ <ColorSwatch bgClass="bg-lime-600" label="600" />
380
+ <ColorSwatch bgClass="bg-lime-700" label="700" />
381
+ <ColorSwatch bgClass="bg-lime-800" label="800" />
382
+ <ColorSwatch bgClass="bg-lime-900" label="900" />
383
+ </div>
384
+ <div className="mt-3">
385
+ <div className="text-sm text-gray-500 mb-2">Vibrant</div>
386
+ <div className="grid grid-cols-4 gap-2 max-w-xs">
387
+ <ColorSwatch bgClass="bg-lime-v100" label="v100" />
388
+ <ColorSwatch bgClass="bg-lime-v200" label="v200" />
389
+ <ColorSwatch bgClass="bg-lime-v300" label="v300" />
390
+ <ColorSwatch bgClass="bg-lime-v400" label="v400" />
391
+ </div>
392
+ </div>
393
+ </div>
394
+
395
+ {/* Yellow */}
396
+ <div className="mb-8">
397
+ <h3 className="text-lg font-semibold mb-3">Yellow</h3>
398
+ <div className="grid grid-cols-10 gap-2 mb-2">
399
+ <ColorSwatch bgClass="bg-yellow-50" label="50" />
400
+ <ColorSwatch bgClass="bg-yellow-100" label="100" />
401
+ <ColorSwatch bgClass="bg-yellow-200" label="200" />
402
+ <ColorSwatch bgClass="bg-yellow-300" label="300" />
403
+ <ColorSwatch bgClass="bg-yellow-400" label="400" />
404
+ <ColorSwatch bgClass="bg-yellow-500" label="500" />
405
+ <ColorSwatch bgClass="bg-yellow-600" label="600" />
406
+ <ColorSwatch bgClass="bg-yellow-700" label="700" />
407
+ <ColorSwatch bgClass="bg-yellow-800" label="800" />
408
+ <ColorSwatch bgClass="bg-yellow-900" label="900" />
409
+ </div>
410
+ <div className="mt-3">
411
+ <div className="text-sm text-gray-500 mb-2">Vibrant</div>
412
+ <div className="grid grid-cols-4 gap-2 max-w-xs">
413
+ <ColorSwatch bgClass="bg-yellow-v100" label="v100" />
414
+ <ColorSwatch bgClass="bg-yellow-v200" label="v200" />
415
+ <ColorSwatch bgClass="bg-yellow-v300" label="v300" />
416
+ <ColorSwatch bgClass="bg-yellow-v400" label="v400" />
417
+ </div>
418
+ </div>
419
+ </div>
420
+
421
+ {/* Amber */}
422
+ <div className="mb-8">
423
+ <h3 className="text-lg font-semibold mb-3">Amber</h3>
424
+ <div className="grid grid-cols-10 gap-2 mb-2">
425
+ <ColorSwatch bgClass="bg-amber-50" label="50" />
426
+ <ColorSwatch bgClass="bg-amber-100" label="100" />
427
+ <ColorSwatch bgClass="bg-amber-200" label="200" />
428
+ <ColorSwatch bgClass="bg-amber-300" label="300" />
429
+ <ColorSwatch bgClass="bg-amber-400" label="400" />
430
+ <ColorSwatch bgClass="bg-amber-500" label="500" />
431
+ <ColorSwatch bgClass="bg-amber-600" label="600" />
432
+ <ColorSwatch bgClass="bg-amber-700" label="700" />
433
+ <ColorSwatch bgClass="bg-amber-800" label="800" />
434
+ <ColorSwatch bgClass="bg-amber-900" label="900" />
435
+ </div>
436
+ <div className="mt-3">
437
+ <div className="text-sm text-gray-500 mb-2">Vibrant</div>
438
+ <div className="grid grid-cols-4 gap-2 max-w-xs">
439
+ <ColorSwatch bgClass="bg-amber-v100" label="v100" />
440
+ <ColorSwatch bgClass="bg-amber-v200" label="v200" />
441
+ <ColorSwatch bgClass="bg-amber-v300" label="v300" />
442
+ <ColorSwatch bgClass="bg-amber-v400" label="v400" />
443
+ </div>
444
+ </div>
445
+ </div>
446
+
447
+ {/* Orange */}
448
+ <div className="mb-8">
449
+ <h3 className="text-lg font-semibold mb-3">Orange</h3>
450
+ <div className="grid grid-cols-10 gap-2 mb-2">
451
+ <ColorSwatch bgClass="bg-orange-50" label="50" />
452
+ <ColorSwatch bgClass="bg-orange-100" label="100" />
453
+ <ColorSwatch bgClass="bg-orange-200" label="200" />
454
+ <ColorSwatch bgClass="bg-orange-300" label="300" />
455
+ <ColorSwatch bgClass="bg-orange-400" label="400" />
456
+ <ColorSwatch bgClass="bg-orange-500" label="500" />
457
+ <ColorSwatch bgClass="bg-orange-600" label="600" />
458
+ <ColorSwatch bgClass="bg-orange-700" label="700" />
459
+ <ColorSwatch bgClass="bg-orange-800" label="800" />
460
+ <ColorSwatch bgClass="bg-orange-900" label="900" />
461
+ </div>
462
+ <div className="mt-3">
463
+ <div className="text-sm text-gray-500 mb-2">Vibrant</div>
464
+ <div className="grid grid-cols-4 gap-2 max-w-xs">
465
+ <ColorSwatch bgClass="bg-orange-v100" label="v100" />
466
+ <ColorSwatch bgClass="bg-orange-v200" label="v200" />
467
+ <ColorSwatch bgClass="bg-orange-v300" label="v300" />
468
+ <ColorSwatch bgClass="bg-orange-v400" label="v400" />
469
+ </div>
470
+ </div>
471
+ </div>
472
+
473
+ {/* Ember */}
474
+ <div className="mb-8">
475
+ <h3 className="text-lg font-semibold mb-3">Ember</h3>
476
+ <div className="grid grid-cols-10 gap-2 mb-2">
477
+ <ColorSwatch bgClass="bg-ember-50" label="50" />
478
+ <ColorSwatch bgClass="bg-ember-100" label="100" />
479
+ <ColorSwatch bgClass="bg-ember-200" label="200" />
480
+ <ColorSwatch bgClass="bg-ember-300" label="300" />
481
+ <ColorSwatch bgClass="bg-ember-400" label="400" />
482
+ <ColorSwatch bgClass="bg-ember-500" label="500" />
483
+ <ColorSwatch bgClass="bg-ember-600" label="600" />
484
+ <ColorSwatch bgClass="bg-ember-700" label="700" />
485
+ <ColorSwatch bgClass="bg-ember-800" label="800" />
486
+ <ColorSwatch bgClass="bg-ember-900" label="900" />
487
+ </div>
488
+ <div className="mt-3">
489
+ <div className="text-sm text-gray-500 mb-2">Vibrant</div>
490
+ <div className="grid grid-cols-4 gap-2 max-w-xs">
491
+ <ColorSwatch bgClass="bg-ember-v100" label="v100" />
492
+ <ColorSwatch bgClass="bg-ember-v200" label="v200" />
493
+ <ColorSwatch bgClass="bg-ember-v300" label="v300" />
494
+ <ColorSwatch bgClass="bg-ember-v400" label="v400" />
495
+ </div>
496
+ </div>
497
+ </div>
498
+ </div>
499
+
500
+ {/* Alpha Colors */}
501
+ <div>
502
+ <h2 className="text-2xl font-bold mb-6">Alpha Colors</h2>
503
+
504
+ {/* Alpha Black */}
505
+ <div className="mb-8">
506
+ <h3 className="text-lg font-semibold mb-3">Alpha Black</h3>
507
+ <div className="grid grid-cols-11 gap-2 p-4 rounded-lg bg-gray-50">
508
+ <ColorSwatch bgClass="bg-alpha-black-5" label="5" />
509
+ <ColorSwatch bgClass="bg-alpha-black-10" label="10" />
510
+ <ColorSwatch bgClass="bg-alpha-black-20" label="20" />
511
+ <ColorSwatch bgClass="bg-alpha-black-30" label="30" />
512
+ <ColorSwatch bgClass="bg-alpha-black-40" label="40" />
513
+ <ColorSwatch bgClass="bg-alpha-black-50" label="50" />
514
+ <ColorSwatch bgClass="bg-alpha-black-60" label="60" />
515
+ <ColorSwatch bgClass="bg-alpha-black-70" label="70" />
516
+ <ColorSwatch bgClass="bg-alpha-black-80" label="80" />
517
+ <ColorSwatch bgClass="bg-alpha-black-90" label="90" />
518
+ <ColorSwatch bgClass="bg-alpha-black-95" label="95" />
519
+ </div>
520
+ </div>
521
+
522
+ {/* Alpha White */}
523
+ <div className="mb-8">
524
+ <h3 className="text-lg font-semibold mb-3">Alpha White</h3>
525
+ <div className="grid grid-cols-11 gap-2 p-4 rounded-lg bg-gray-900">
526
+ <ColorSwatch bgClass="bg-alpha-white-5" label="5" />
527
+ <ColorSwatch bgClass="bg-alpha-white-10" label="10" />
528
+ <ColorSwatch bgClass="bg-alpha-white-20" label="20" />
529
+ <ColorSwatch bgClass="bg-alpha-white-30" label="30" />
530
+ <ColorSwatch bgClass="bg-alpha-white-40" label="40" />
531
+ <ColorSwatch bgClass="bg-alpha-white-50" label="50" />
532
+ <ColorSwatch bgClass="bg-alpha-white-60" label="60" />
533
+ <ColorSwatch bgClass="bg-alpha-white-70" label="70" />
534
+ <ColorSwatch bgClass="bg-alpha-white-80" label="80" />
535
+ <ColorSwatch bgClass="bg-alpha-white-90" label="90" />
536
+ <ColorSwatch bgClass="bg-alpha-white-95" label="95" />
537
+ </div>
538
+ </div>
539
+ </div>
540
+ </div>
541
+ );
542
+ };
543
+
544
+ // Primitive spacing tokens with hardcoded Tailwind classes
545
+ type PrimitiveSpacingToken = {
546
+ token: string;
547
+ value: string;
548
+ widthClass: string;
549
+ };
550
+
551
+ // Primitive spacing tokens - widthClass uses generated @utility classes
552
+ const primitiveSpacingTokens: PrimitiveSpacingToken[] = [
553
+ { token: "spacing-2", value: "2px", widthClass: "w-spacing-2" },
554
+ { token: "spacing-4", value: "4px", widthClass: "w-spacing-4" },
555
+ { token: "spacing-6", value: "6px", widthClass: "w-spacing-6" },
556
+ { token: "spacing-8", value: "8px", widthClass: "w-spacing-8" },
557
+ { token: "spacing-10", value: "10px", widthClass: "w-spacing-10" },
558
+ { token: "spacing-12", value: "12px", widthClass: "w-spacing-12" },
559
+ { token: "spacing-16", value: "16px", widthClass: "w-spacing-16" },
560
+ { token: "spacing-20", value: "20px", widthClass: "w-spacing-20" },
561
+ { token: "spacing-24", value: "24px", widthClass: "w-spacing-24" },
562
+ { token: "spacing-28", value: "28px", widthClass: "w-spacing-28" },
563
+ { token: "spacing-32", value: "32px", widthClass: "w-spacing-32" },
564
+ { token: "spacing-36", value: "36px", widthClass: "w-spacing-36" },
565
+ { token: "spacing-40", value: "40px", widthClass: "w-spacing-40" },
566
+ { token: "spacing-48", value: "48px", widthClass: "w-spacing-48" },
567
+ { token: "spacing-56", value: "56px", widthClass: "w-spacing-56" },
568
+ { token: "spacing-64", value: "64px", widthClass: "w-spacing-64" },
569
+ { token: "spacing-72", value: "72px", widthClass: "w-spacing-72" },
570
+ { token: "spacing-80", value: "80px", widthClass: "w-spacing-80" },
571
+ { token: "spacing-96", value: "96px", widthClass: "w-spacing-96" },
572
+ { token: "spacing-112", value: "112px", widthClass: "w-spacing-112" },
573
+ { token: "spacing-128", value: "128px", widthClass: "w-spacing-128" },
574
+ { token: "spacing-144", value: "144px", widthClass: "w-spacing-144" },
575
+ { token: "spacing-160", value: "160px", widthClass: "w-spacing-160" },
576
+ { token: "spacing-176", value: "176px", widthClass: "w-spacing-176" },
577
+ { token: "spacing-192", value: "192px", widthClass: "w-spacing-192" },
578
+ { token: "spacing-208", value: "208px", widthClass: "w-spacing-208" },
579
+ { token: "spacing-224", value: "224px", widthClass: "w-spacing-224" },
580
+ { token: "spacing-240", value: "240px", widthClass: "w-spacing-240" },
581
+ { token: "spacing-256", value: "256px", widthClass: "w-spacing-256" },
582
+ { token: "spacing-288", value: "288px", widthClass: "w-spacing-288" },
583
+ { token: "spacing-320", value: "320px", widthClass: "w-spacing-320" },
584
+ { token: "spacing-352", value: "352px", widthClass: "w-spacing-352" },
585
+ { token: "spacing-384", value: "384px", widthClass: "w-spacing-384" },
586
+ { token: "spacing-400", value: "400px", widthClass: "w-spacing-400" },
587
+ ];
588
+
589
+ const PrimitiveSpacingSwatch: React.FC<{
590
+ token: string;
591
+ value: string;
592
+ widthClass: string;
593
+ }> = ({ token, value, widthClass }) => {
594
+ return (
595
+ <div className="flex items-center gap-32 py-2 border-b border-gray-100">
596
+ <div className="w-16 text-sm font-mono text-gray-600">{value}</div>
597
+ <div className="flex-1 flex items-center justify-between gap-3">
598
+ <div className="flex-1">
599
+ <div className={`h-4 bg-blue-500 rounded max-w-400 ${widthClass}`} />
600
+ </div>
601
+ <div className="text-xs text-gray-400 font-mono whitespace-nowrap">
602
+ {token}
603
+ </div>
604
+ </div>
605
+ </div>
606
+ );
607
+ };
608
+
609
+ export const SpacingTokens: React.FC = () => {
610
+ return (
611
+ <div className="space-y-8">
612
+ <div>
613
+ <h2 className="text-2xl font-bold mb-6">Spacing Scale</h2>
614
+ <p className="text-gray-600 mb-6">
615
+ Consistent spacing values used for margins, padding, and gaps
616
+ throughout the design system.
617
+ </p>
618
+
619
+ <div className="bg-white rounded-lg border border-gray-200 p-6">
620
+ {primitiveSpacingTokens.map((t) => (
621
+ <PrimitiveSpacingSwatch
622
+ key={t.token}
623
+ token={t.token}
624
+ value={t.value}
625
+ widthClass={t.widthClass}
626
+ />
627
+ ))}
628
+ </div>
629
+ </div>
630
+ </div>
631
+ );
632
+ };
633
+
634
+ // Semantic Typography tokens with hardcoded Tailwind classes
635
+ // Each token includes the full class name for Tailwind to pick up statically
636
+ type SemanticTypographyToken = {
637
+ token: string;
638
+ textClass: string;
639
+ desc: string;
640
+ };
641
+
642
+ type SemanticTypographyGroup = {
643
+ label: string;
644
+ tokens: SemanticTypographyToken[];
645
+ };
646
+
647
+ const semanticTypographyTokens: SemanticTypographyGroup[] = [
648
+ {
649
+ label: "Display",
650
+ tokens: [
651
+ {
652
+ token: "brand-large-display-hero",
653
+ textClass: "typography-brand-large-display-hero",
654
+ desc: "Hero - 280px",
655
+ },
656
+ {
657
+ token: "brand-large-display-xl",
658
+ textClass: "typography-brand-large-display-xl",
659
+ desc: "XL - 224px",
660
+ },
661
+ {
662
+ token: "brand-large-display-large",
663
+ textClass: "typography-brand-large-display-large",
664
+ desc: "Large - 192px",
665
+ },
666
+ {
667
+ token: "brand-large-display-medium",
668
+ textClass: "typography-brand-large-display-medium",
669
+ desc: "Medium - 168px",
670
+ },
671
+ {
672
+ token: "brand-large-display-small",
673
+ textClass: "typography-brand-large-display-small",
674
+ desc: "Small - 148px",
675
+ },
676
+ ],
677
+ },
678
+ {
679
+ label: "Headline",
680
+ tokens: [
681
+ {
682
+ token: "brand-large-headline-xl",
683
+ textClass: "typography-brand-large-headline-xl",
684
+ desc: "XL - 112px",
685
+ },
686
+ {
687
+ token: "brand-large-headline-large",
688
+ textClass: "typography-brand-large-headline-large",
689
+ desc: "Large - 96px",
690
+ },
691
+ {
692
+ token: "brand-large-headline-medium",
693
+ textClass: "typography-brand-large-headline-medium",
694
+ desc: "Medium - 72px",
695
+ },
696
+ {
697
+ token: "brand-large-headline-small",
698
+ textClass: "typography-brand-large-headline-small",
699
+ desc: "Small - 56px",
700
+ },
701
+ ],
702
+ },
703
+ {
704
+ label: "Subheading",
705
+ tokens: [
706
+ {
707
+ token: "brand-large-subheading-large",
708
+ textClass: "typography-brand-large-subheading-large",
709
+ desc: "Large - 42px",
710
+ },
711
+ {
712
+ token: "brand-large-subheading-medium",
713
+ textClass: "typography-brand-large-subheading-medium",
714
+ desc: "Medium - 32px",
715
+ },
716
+ {
717
+ token: "brand-large-subheading-small",
718
+ textClass: "typography-brand-large-subheading-small",
719
+ desc: "Small - 24px",
720
+ },
721
+ {
722
+ token: "brand-large-subheading-xs",
723
+ textClass: "typography-brand-large-subheading-xs",
724
+ desc: "XS - 18px",
725
+ },
726
+ {
727
+ token: "brand-large-subheading-xss",
728
+ textClass: "typography-brand-large-subheading-xss",
729
+ desc: "XSS - 16px",
730
+ },
731
+ ],
732
+ },
733
+ {
734
+ label: "Body",
735
+ tokens: [
736
+ {
737
+ token: "brand-large-body-large",
738
+ textClass: "typography-brand-large-body-large",
739
+ desc: "Large - 21px",
740
+ },
741
+ {
742
+ token: "brand-large-body-medium",
743
+ textClass: "typography-brand-large-body-medium",
744
+ desc: "Medium - 18px",
745
+ },
746
+ {
747
+ token: "brand-large-body-small",
748
+ textClass: "typography-brand-large-body-small",
749
+ desc: "Small - 16px",
750
+ },
751
+ ],
752
+ },
753
+ {
754
+ label: "Button",
755
+ tokens: [
756
+ {
757
+ token: "brand-large-button-xl",
758
+ textClass: "typography-brand-large-button-xl",
759
+ desc: "XL - 24px",
760
+ },
761
+ {
762
+ token: "brand-large-button-large",
763
+ textClass: "typography-brand-large-button-large",
764
+ desc: "Large - 18px",
765
+ },
766
+ {
767
+ token: "brand-large-button-medium",
768
+ textClass: "typography-brand-large-button-medium",
769
+ desc: "Medium - 16px",
770
+ },
771
+ {
772
+ token: "brand-large-button-small",
773
+ textClass: "typography-brand-large-button-small",
774
+ desc: "Small - 14px",
775
+ },
776
+ ],
777
+ },
778
+ {
779
+ label: "Link",
780
+ tokens: [
781
+ {
782
+ token: "brand-large-link-large",
783
+ textClass: "typography-brand-large-link-large",
784
+ desc: "Large - 18px",
785
+ },
786
+ {
787
+ token: "brand-large-link-medium",
788
+ textClass: "typography-brand-large-link-medium",
789
+ desc: "Medium - 16px",
790
+ },
791
+ {
792
+ token: "brand-large-link-small",
793
+ textClass: "typography-brand-large-link-small",
794
+ desc: "Small - 14px",
795
+ },
796
+ ],
797
+ },
798
+ {
799
+ label: "Label",
800
+ tokens: [
801
+ {
802
+ token: "brand-large-label-large",
803
+ textClass: "typography-brand-large-label-large",
804
+ desc: "Large - 16px",
805
+ },
806
+ {
807
+ token: "brand-large-label-medium",
808
+ textClass: "typography-brand-large-label-medium",
809
+ desc: "Medium - 14px",
810
+ },
811
+ {
812
+ token: "brand-large-label-small",
813
+ textClass: "typography-brand-large-label-small",
814
+ desc: "Small - 12px",
815
+ },
816
+ ],
817
+ },
818
+ {
819
+ label: "Caption",
820
+ tokens: [
821
+ {
822
+ token: "brand-large-caption-large",
823
+ textClass: "typography-brand-large-caption-large",
824
+ desc: "Large - 14px",
825
+ },
826
+ {
827
+ token: "brand-large-caption-small",
828
+ textClass: "typography-brand-large-caption-small",
829
+ desc: "Small - 12px",
830
+ },
831
+ ],
832
+ },
833
+ ];
834
+
835
+ // Semantic Spacing tokens with hardcoded Tailwind classes
836
+ // Each token includes the full class name for Tailwind to pick up statically
837
+ type SemanticSpacingToken = {
838
+ token: string;
839
+ value: string;
840
+ widthClass: string;
841
+ };
842
+
843
+ type SemanticSpacingGroup = {
844
+ label: string;
845
+ tokens: SemanticSpacingToken[];
846
+ };
847
+
848
+ const semanticSpacingTokens: {
849
+ component: SemanticSpacingGroup[];
850
+ layout: SemanticSpacingGroup[];
851
+ content: SemanticSpacingGroup[];
852
+ } = {
853
+ component: [
854
+ {
855
+ label: "Button",
856
+ tokens: [
857
+ {
858
+ token: "spacing-component-button-padding-x-large",
859
+ value: "32px",
860
+ widthClass: "w-spacing-component-button-padding-x-large",
861
+ },
862
+ {
863
+ token: "spacing-component-button-padding-x-medium",
864
+ value: "20px",
865
+ widthClass: "w-spacing-component-button-padding-x-medium",
866
+ },
867
+ {
868
+ token: "spacing-component-button-padding-x-small",
869
+ value: "12px",
870
+ widthClass: "w-spacing-component-button-padding-x-small",
871
+ },
872
+ {
873
+ token: "spacing-component-button-padding-y-large",
874
+ value: "20px",
875
+ widthClass: "w-spacing-component-button-padding-y-large",
876
+ },
877
+ {
878
+ token: "spacing-component-button-padding-y-medium",
879
+ value: "12px",
880
+ widthClass: "w-spacing-component-button-padding-y-medium",
881
+ },
882
+ {
883
+ token: "spacing-component-button-padding-y-small",
884
+ value: "8px",
885
+ widthClass: "w-spacing-component-button-padding-y-small",
886
+ },
887
+ {
888
+ token: "spacing-component-button-height-large",
889
+ value: "56px",
890
+ widthClass: "w-spacing-component-button-height-large",
891
+ },
892
+ {
893
+ token: "spacing-component-button-height-medium",
894
+ value: "40px",
895
+ widthClass: "w-spacing-component-button-height-medium",
896
+ },
897
+ {
898
+ token: "spacing-component-button-height-small",
899
+ value: "28px",
900
+ widthClass: "w-spacing-component-button-height-small",
901
+ },
902
+ {
903
+ token: "spacing-component-button-radius-large",
904
+ value: "10px",
905
+ widthClass: "w-spacing-component-button-radius-large",
906
+ },
907
+ {
908
+ token: "spacing-component-button-radius-medium",
909
+ value: "6px",
910
+ widthClass: "w-spacing-component-button-radius-medium",
911
+ },
912
+ {
913
+ token: "spacing-component-button-radius-small",
914
+ value: "4px",
915
+ widthClass: "w-spacing-component-button-radius-small",
916
+ },
917
+ {
918
+ token: "spacing-component-button-gap-icon-text",
919
+ value: "6px",
920
+ widthClass: "w-spacing-component-button-gap-icon-text",
921
+ },
922
+ {
923
+ token: "spacing-component-button-gap-button-group",
924
+ value: "12px",
925
+ widthClass: "w-spacing-component-button-gap-button-group",
926
+ },
927
+ ],
928
+ },
929
+ {
930
+ label: "Card",
931
+ tokens: [
932
+ {
933
+ token: "spacing-component-card-padding-large",
934
+ value: "40px",
935
+ widthClass: "w-spacing-component-card-padding-large",
936
+ },
937
+ {
938
+ token: "spacing-component-card-padding-medium",
939
+ value: "32px",
940
+ widthClass: "w-spacing-component-card-padding-medium",
941
+ },
942
+ {
943
+ token: "spacing-component-card-padding-small",
944
+ value: "24px",
945
+ widthClass: "w-spacing-component-card-padding-small",
946
+ },
947
+ {
948
+ token: "spacing-component-card-gap-internal",
949
+ value: "24px",
950
+ widthClass: "w-spacing-component-card-gap-internal",
951
+ },
952
+ ],
953
+ },
954
+ {
955
+ label: "Feature Section",
956
+ tokens: [
957
+ {
958
+ token: "spacing-component-feature-padding-large",
959
+ value: "48px",
960
+ widthClass: "w-spacing-component-feature-padding-large",
961
+ },
962
+ {
963
+ token: "spacing-component-feature-padding-medium",
964
+ value: "40px",
965
+ widthClass: "w-spacing-component-feature-padding-medium",
966
+ },
967
+ {
968
+ token: "spacing-component-feature-padding-small",
969
+ value: "32px",
970
+ widthClass: "w-spacing-component-feature-padding-small",
971
+ },
972
+ {
973
+ token: "spacing-component-feature-gap-icon-content",
974
+ value: "24px",
975
+ widthClass: "w-spacing-component-feature-gap-icon-content",
976
+ },
977
+ ],
978
+ },
979
+ {
980
+ label: "Form",
981
+ tokens: [
982
+ {
983
+ token: "spacing-component-form-gap-field-field",
984
+ value: "20px",
985
+ widthClass: "w-spacing-component-form-gap-field-field",
986
+ },
987
+ {
988
+ token: "spacing-component-form-gap-label-field",
989
+ value: "8px",
990
+ widthClass: "w-spacing-component-form-gap-label-field",
991
+ },
992
+ {
993
+ token: "spacing-component-form-gap-field-button",
994
+ value: "24px",
995
+ widthClass: "w-spacing-component-form-gap-field-button",
996
+ },
997
+ ],
998
+ },
999
+ {
1000
+ label: "Testimonial",
1001
+ tokens: [
1002
+ {
1003
+ token: "spacing-component-testimonial-padding",
1004
+ value: "40px",
1005
+ widthClass: "w-spacing-component-testimonial-padding",
1006
+ },
1007
+ {
1008
+ token: "spacing-component-testimonial-gap-quote-attribution",
1009
+ value: "24px",
1010
+ widthClass: "w-spacing-component-testimonial-gap-quote-attribution",
1011
+ },
1012
+ ],
1013
+ },
1014
+ {
1015
+ label: "Accordion",
1016
+ tokens: [
1017
+ {
1018
+ token: "spacing-component-accordion-padding-y",
1019
+ value: "28px",
1020
+ widthClass: "w-spacing-component-accordion-padding-y",
1021
+ },
1022
+ ],
1023
+ },
1024
+ {
1025
+ label: "Navbar",
1026
+ tokens: [
1027
+ {
1028
+ token: "spacing-component-navbar-padding-x-mobile",
1029
+ value: "20px",
1030
+ widthClass: "w-spacing-component-navbar-padding-x-mobile",
1031
+ },
1032
+ {
1033
+ token: "spacing-component-navbar-padding-x-tablet",
1034
+ value: "32px",
1035
+ widthClass: "w-spacing-component-navbar-padding-x-tablet",
1036
+ },
1037
+ {
1038
+ token: "spacing-component-navbar-padding-y-mobile",
1039
+ value: "8px",
1040
+ widthClass: "w-spacing-component-navbar-padding-y-mobile",
1041
+ },
1042
+ {
1043
+ token: "spacing-component-navbar-padding-y-tablet",
1044
+ value: "16px",
1045
+ widthClass: "w-spacing-component-navbar-padding-y-tablet",
1046
+ },
1047
+ {
1048
+ token: "spacing-component-navbar-padding-y-desktop",
1049
+ value: "24px",
1050
+ widthClass: "w-spacing-component-navbar-padding-y-desktop",
1051
+ },
1052
+ {
1053
+ token: "spacing-component-navbar-gap-links",
1054
+ value: "40px",
1055
+ widthClass: "w-spacing-component-navbar-gap-links",
1056
+ },
1057
+ {
1058
+ token: "spacing-component-navbar-gap-actions",
1059
+ value: "8px",
1060
+ widthClass: "w-spacing-component-navbar-gap-actions",
1061
+ },
1062
+ ],
1063
+ },
1064
+ ],
1065
+ layout: [
1066
+ {
1067
+ label: "Hero Section",
1068
+ tokens: [
1069
+ {
1070
+ token: "spacing-brand-large-layout-hero-padding-y-large",
1071
+ value: "112px",
1072
+ widthClass: "w-spacing-brand-large-layout-hero-padding-y-large",
1073
+ },
1074
+ {
1075
+ token: "spacing-brand-large-layout-hero-padding-y-medium",
1076
+ value: "96px",
1077
+ widthClass: "w-spacing-brand-large-layout-hero-padding-y-medium",
1078
+ },
1079
+ {
1080
+ token: "spacing-brand-large-layout-hero-padding-y-small",
1081
+ value: "80px",
1082
+ widthClass: "w-spacing-brand-large-layout-hero-padding-y-small",
1083
+ },
1084
+ {
1085
+ token: "spacing-brand-large-layout-hero-gap-content-cta",
1086
+ value: "40px",
1087
+ widthClass: "w-spacing-brand-large-layout-hero-gap-content-cta",
1088
+ },
1089
+ ],
1090
+ },
1091
+ {
1092
+ label: "Section",
1093
+ tokens: [
1094
+ {
1095
+ token: "spacing-brand-large-layout-section-gap-xlarge",
1096
+ value: "224px",
1097
+ widthClass: "w-spacing-brand-large-layout-section-gap-xlarge",
1098
+ },
1099
+ {
1100
+ token: "spacing-brand-large-layout-section-gap-large",
1101
+ value: "160px",
1102
+ widthClass: "w-spacing-brand-large-layout-section-gap-large",
1103
+ },
1104
+ {
1105
+ token: "spacing-brand-large-layout-section-gap-medium",
1106
+ value: "112px",
1107
+ widthClass: "w-spacing-brand-large-layout-section-gap-medium",
1108
+ },
1109
+ {
1110
+ token: "spacing-brand-large-layout-section-gap-small",
1111
+ value: "80px",
1112
+ widthClass: "w-spacing-brand-large-layout-section-gap-small",
1113
+ },
1114
+ {
1115
+ token: "spacing-brand-large-layout-section-gap-default",
1116
+ value: "160px",
1117
+ widthClass: "w-spacing-brand-large-layout-section-gap-default",
1118
+ },
1119
+ {
1120
+ token: "spacing-brand-large-layout-section-padding-y-large",
1121
+ value: "128px",
1122
+ widthClass: "w-spacing-brand-large-layout-section-padding-y-large",
1123
+ },
1124
+ {
1125
+ token: "spacing-brand-large-layout-section-padding-y-medium",
1126
+ value: "96px",
1127
+ widthClass: "w-spacing-brand-large-layout-section-padding-y-medium",
1128
+ },
1129
+ {
1130
+ token: "spacing-brand-large-layout-section-padding-y-small",
1131
+ value: "64px",
1132
+ widthClass: "w-spacing-brand-large-layout-section-padding-y-small",
1133
+ },
1134
+ ],
1135
+ },
1136
+ {
1137
+ label: "Container",
1138
+ tokens: [
1139
+ {
1140
+ token: "spacing-brand-large-layout-container-padding-x-large",
1141
+ value: "48px",
1142
+ widthClass: "w-spacing-brand-large-layout-container-padding-x-large",
1143
+ },
1144
+ {
1145
+ token: "spacing-brand-large-layout-container-padding-x-medium",
1146
+ value: "32px",
1147
+ widthClass: "w-spacing-brand-large-layout-container-padding-x-medium",
1148
+ },
1149
+ {
1150
+ token: "spacing-brand-large-layout-container-padding-x-small",
1151
+ value: "20px",
1152
+ widthClass: "w-spacing-brand-large-layout-container-padding-x-small",
1153
+ },
1154
+ ],
1155
+ },
1156
+ {
1157
+ label: "Grid",
1158
+ tokens: [
1159
+ {
1160
+ token: "spacing-brand-large-layout-grid-gap-large",
1161
+ value: "48px",
1162
+ widthClass: "w-spacing-brand-large-layout-grid-gap-large",
1163
+ },
1164
+ {
1165
+ token: "spacing-brand-large-layout-grid-gap-medium",
1166
+ value: "32px",
1167
+ widthClass: "w-spacing-brand-large-layout-grid-gap-medium",
1168
+ },
1169
+ {
1170
+ token: "spacing-brand-large-layout-grid-gap-small",
1171
+ value: "24px",
1172
+ widthClass: "w-spacing-brand-large-layout-grid-gap-small",
1173
+ },
1174
+ ],
1175
+ },
1176
+ ],
1177
+ content: [
1178
+ {
1179
+ label: "Content Stack",
1180
+ tokens: [
1181
+ {
1182
+ token: "spacing-brand-large-content-stack-display-body-tight",
1183
+ value: "16px",
1184
+ widthClass: "w-spacing-brand-large-content-stack-display-body-tight",
1185
+ },
1186
+ {
1187
+ token: "spacing-brand-large-content-stack-display-body-normal",
1188
+ value: "24px",
1189
+ widthClass: "w-spacing-brand-large-content-stack-display-body-normal",
1190
+ },
1191
+ {
1192
+ token: "spacing-brand-large-content-stack-display-body-relaxed",
1193
+ value: "32px",
1194
+ widthClass:
1195
+ "w-spacing-brand-large-content-stack-display-body-relaxed",
1196
+ },
1197
+ {
1198
+ token: "spacing-brand-large-content-stack-headline-subheading",
1199
+ value: "16px",
1200
+ widthClass: "w-spacing-brand-large-content-stack-headline-subheading",
1201
+ },
1202
+ {
1203
+ token: "spacing-brand-large-content-stack-subheading-body",
1204
+ value: "12px",
1205
+ widthClass: "w-spacing-brand-large-content-stack-subheading-body",
1206
+ },
1207
+ {
1208
+ token: "spacing-brand-large-content-stack-body-cta",
1209
+ value: "32px",
1210
+ widthClass: "w-spacing-brand-large-content-stack-body-cta",
1211
+ },
1212
+ {
1213
+ token: "spacing-brand-large-content-stack-eyebrow-headline",
1214
+ value: "12px",
1215
+ widthClass: "w-spacing-brand-large-content-stack-eyebrow-headline",
1216
+ },
1217
+ {
1218
+ token: "spacing-brand-large-content-stack-body-body",
1219
+ value: "20px",
1220
+ widthClass: "w-spacing-brand-large-content-stack-body-body",
1221
+ },
1222
+ ],
1223
+ },
1224
+ ],
1225
+ };
1226
+
1227
+ // Typography sample component using hardcoded classes
1228
+ const SemanticTypographySwatch: React.FC<{
1229
+ token: string;
1230
+ textClass: string;
1231
+ desc: string;
1232
+ }> = ({ token, textClass, desc }) => {
1233
+ const isLargeType = token.includes("display") || token.includes("headline");
1234
+ const sampleText = isLargeType
1235
+ ? "Aa"
1236
+ : "The quick brown fox jumps over the lazy dog";
1237
+
1238
+ return (
1239
+ <div className="py-4 border-b border-gray-100">
1240
+ <div className="flex justify-between items-start mb-2">
1241
+ <span className="text-xs font-mono text-blue-600 bg-blue-50 px-2 py-1 rounded">
1242
+ {token}
1243
+ </span>
1244
+ <span className="text-xs text-gray-500">{desc}</span>
1245
+ </div>
1246
+ <p className={textClass}>{sampleText}</p>
1247
+ </div>
1248
+ );
1249
+ };
1250
+
1251
+ export const TypographyTokens: React.FC = () => {
1252
+ return (
1253
+ <div className="space-y-8">
1254
+ <div>
1255
+ <h2 className="text-2xl font-bold mb-6">Semantic Typography</h2>
1256
+ <p className="text-gray-600 mb-6">
1257
+ Typography tokens for marketing pages, landing pages, and promotional
1258
+ content.
1259
+ </p>
1260
+
1261
+ {semanticTypographyTokens.map((group) => (
1262
+ <div key={group.label} className="mb-8">
1263
+ <h3 className="text-lg font-semibold mb-3">{group.label}</h3>
1264
+ <div className="bg-white rounded-lg border border-gray-200 p-6 overflow-x-auto">
1265
+ {group.tokens.map((t) => (
1266
+ <SemanticTypographySwatch
1267
+ key={t.token}
1268
+ token={t.token}
1269
+ textClass={t.textClass}
1270
+ desc={t.desc}
1271
+ />
1272
+ ))}
1273
+ </div>
1274
+ </div>
1275
+ ))}
1276
+ </div>
1277
+ </div>
1278
+ );
1279
+ };
1280
+
1281
+ // Semantic Spacing Component - Individual row for each token
1282
+ // Uses hardcoded Tailwind classes for static analysis
1283
+ const SemanticSpacingSwatch: React.FC<{
1284
+ token: string;
1285
+ value: string;
1286
+ widthClass: string;
1287
+ }> = ({ token, value, widthClass }) => {
1288
+ return (
1289
+ <div className="flex items-center gap-32 py-2 border-b border-gray-100">
1290
+ <div className="w-16 text-sm font-mono text-gray-600">{value}</div>
1291
+ <div className="flex-1 flex items-center justify-between gap-3">
1292
+ <div className="flex-1">
1293
+ <div className={`h-4 bg-green-500 rounded max-w-400 ${widthClass}`} />
1294
+ </div>
1295
+ <div className="text-xs text-gray-400 font-mono whitespace-nowrap">
1296
+ {token}
1297
+ </div>
1298
+ </div>
1299
+ </div>
1300
+ );
1301
+ };
1302
+
1303
+ export const SemanticSpacingTokens: React.FC = () => {
1304
+ return (
1305
+ <div className="space-y-8">
1306
+ <div>
1307
+ <h2 className="text-2xl font-bold mb-6">Semantic Spacing</h2>
1308
+ <p className="text-gray-600 mb-6">
1309
+ Purpose-driven spacing tokens for components, layouts, and content
1310
+ stacks. These provide consistent spacing across the design system.
1311
+ </p>
1312
+
1313
+ {/* Component Spacing */}
1314
+ <div className="mb-8">
1315
+ <h3 className="text-lg font-semibold mb-3">Component Spacing</h3>
1316
+ <div className="bg-white rounded-lg border border-gray-200 p-6">
1317
+ {semanticSpacingTokens.component.map((group) => (
1318
+ <div key={group.label} className="mb-6 last:mb-0">
1319
+ <div className="text-sm text-gray-500 mb-2">{group.label}</div>
1320
+ {group.tokens.map((t) => (
1321
+ <SemanticSpacingSwatch
1322
+ key={t.token}
1323
+ token={t.token}
1324
+ value={t.value}
1325
+ widthClass={t.widthClass}
1326
+ />
1327
+ ))}
1328
+ </div>
1329
+ ))}
1330
+ </div>
1331
+ </div>
1332
+
1333
+ {/* Layout Spacing */}
1334
+ <div className="mb-8">
1335
+ <h3 className="text-lg font-semibold mb-3">Layout Spacing</h3>
1336
+ <div className="bg-white rounded-lg border border-gray-200 p-6">
1337
+ {semanticSpacingTokens.layout.map((group) => (
1338
+ <div key={group.label} className="mb-6 last:mb-0">
1339
+ <div className="text-sm text-gray-500 mb-2">{group.label}</div>
1340
+ {group.tokens.map((t) => (
1341
+ <SemanticSpacingSwatch
1342
+ key={t.token}
1343
+ token={t.token}
1344
+ value={t.value}
1345
+ widthClass={t.widthClass}
1346
+ />
1347
+ ))}
1348
+ </div>
1349
+ ))}
1350
+ </div>
1351
+ </div>
1352
+
1353
+ {/* Content Spacing */}
1354
+ <div className="mb-8">
1355
+ <h3 className="text-lg font-semibold mb-3">Content Stack Spacing</h3>
1356
+ <div className="bg-white rounded-lg border border-gray-200 p-6">
1357
+ {semanticSpacingTokens.content.map((group) => (
1358
+ <div key={group.label} className="mb-6 last:mb-0">
1359
+ <div className="text-sm text-gray-500 mb-2">{group.label}</div>
1360
+ {group.tokens.map((t) => (
1361
+ <SemanticSpacingSwatch
1362
+ key={t.token}
1363
+ token={t.token}
1364
+ value={t.value}
1365
+ widthClass={t.widthClass}
1366
+ />
1367
+ ))}
1368
+ </div>
1369
+ ))}
1370
+ </div>
1371
+ </div>
1372
+ </div>
1373
+ </div>
1374
+ );
1375
+ };
1376
+
1377
+ export const ResponsiveTypography: React.FC = () => {
1378
+ return (
1379
+ <div className="space-y-12">
1380
+ {/* Headline example */}
1381
+ <div>
1382
+ <p className="text-sm text-gray-500 mb-2 font-mono">
1383
+ sm: headline-small → md: headline-medium → lg: headline-large
1384
+ </p>
1385
+ <h1 className="typography-brand-small-headline-small md:typography-brand-medium-headline-medium lg:typography-brand-large-headline-large">
1386
+ Responsive Headline
1387
+ </h1>
1388
+ </div>
1389
+
1390
+ {/* Subheading example */}
1391
+ <div>
1392
+ <p className="text-sm text-gray-500 mb-2 font-mono">
1393
+ sm: subheading-small → md: subheading-medium → lg: subheading-large
1394
+ </p>
1395
+ <h2 className="typography-brand-small-subheading-small md:typography-brand-medium-subheading-medium lg:typography-brand-large-subheading-large">
1396
+ Responsive Subheading
1397
+ </h2>
1398
+ </div>
1399
+
1400
+ {/* Body example */}
1401
+ <div>
1402
+ <p className="text-sm text-gray-500 mb-2 font-mono">
1403
+ sm: body-small → md: body-medium → lg: body-large
1404
+ </p>
1405
+ <p className="typography-brand-small-body-small md:typography-brand-medium-body-medium lg:typography-brand-large-body-large">
1406
+ This body text adapts to the screen size. On mobile it uses the small
1407
+ variant, on tablet the medium variant, and on desktop the large
1408
+ variant. Resize the viewport to see it change.
1409
+ </p>
1410
+ </div>
1411
+ </div>
1412
+ );
1413
+ };
1414
+
1415
+ export const TokenShowcase: React.FC = () => {
1416
+ return (
1417
+ <div className="p-8 bg-gray-50 min-h-screen">
1418
+ <div className="max-w-7xl mx-auto">
1419
+ <div className="mb-8">
1420
+ <h1 className="text-3xl font-bold mb-2">Design Tokens</h1>
1421
+ <p className="text-lg text-gray-600">
1422
+ Primitive color tokens available in the design system
1423
+ </p>
1424
+ </div>
1425
+ <ColorTokens />
1426
+ </div>
1427
+ </div>
1428
+ );
1429
+ };