@dtsports/design-system 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (340) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +156 -0
  3. package/dist/components/accordion.d.ts +19 -0
  4. package/dist/components/accordion.d.ts.map +1 -0
  5. package/dist/components/accordion.js +26 -0
  6. package/dist/components/accordion.js.map +1 -0
  7. package/dist/components/alert.d.ts +26 -0
  8. package/dist/components/alert.d.ts.map +1 -0
  9. package/dist/components/alert.js.map +1 -0
  10. package/dist/components/app-shell.d.ts +21 -0
  11. package/dist/components/app-shell.d.ts.map +1 -0
  12. package/dist/components/app-shell.js +25 -0
  13. package/dist/components/app-shell.js.map +1 -0
  14. package/dist/components/aspect-ratio.d.ts +16 -0
  15. package/dist/components/aspect-ratio.d.ts.map +1 -0
  16. package/dist/components/aspect-ratio.js +17 -0
  17. package/dist/components/aspect-ratio.js.map +1 -0
  18. package/dist/components/avatar-group.d.ts +31 -0
  19. package/dist/components/avatar-group.d.ts.map +1 -0
  20. package/dist/components/avatar.d.ts +15 -0
  21. package/dist/components/avatar.d.ts.map +1 -0
  22. package/dist/components/avatar.js +20 -0
  23. package/dist/components/avatar.js.map +1 -0
  24. package/dist/components/badge.d.ts +27 -0
  25. package/dist/components/badge.d.ts.map +1 -0
  26. package/dist/components/badge.js +51 -0
  27. package/dist/components/badge.js.map +1 -0
  28. package/dist/components/breadcrumb.js.map +1 -0
  29. package/dist/components/button.d.ts +33 -0
  30. package/dist/components/button.d.ts.map +1 -0
  31. package/dist/components/button.js +58 -0
  32. package/dist/components/button.js.map +1 -0
  33. package/dist/components/calendar.d.ts +15 -0
  34. package/dist/components/calendar.d.ts.map +1 -0
  35. package/dist/components/calendar.js +33 -0
  36. package/dist/components/calendar.js.map +1 -0
  37. package/dist/components/capacity-bar.d.ts +32 -0
  38. package/dist/components/capacity-bar.d.ts.map +1 -0
  39. package/dist/components/capacity-bar.js +29 -0
  40. package/dist/components/capacity-bar.js.map +1 -0
  41. package/dist/components/card.d.ts +26 -0
  42. package/dist/components/card.d.ts.map +1 -0
  43. package/dist/components/card.js +20 -0
  44. package/dist/components/checkbox.d.ts +11 -0
  45. package/dist/components/checkbox.d.ts.map +1 -0
  46. package/dist/components/checkbox.js +19 -0
  47. package/dist/components/chip.d.ts +23 -0
  48. package/dist/components/chip.d.ts.map +1 -0
  49. package/dist/components/chip.js +32 -0
  50. package/dist/components/chip.js.map +1 -0
  51. package/dist/components/collapsible.d.ts +16 -0
  52. package/dist/components/collapsible.js +22 -0
  53. package/dist/components/collapsible.js.map +1 -0
  54. package/dist/components/combobox.d.ts +38 -0
  55. package/dist/components/combobox.d.ts.map +1 -0
  56. package/dist/components/combobox.js +17 -0
  57. package/dist/components/combobox.js.map +1 -0
  58. package/dist/components/confirm-action.d.ts +36 -0
  59. package/dist/components/confirm-action.d.ts.map +1 -0
  60. package/dist/components/confirm-action.js +21 -0
  61. package/dist/components/confirm-action.js.map +1 -0
  62. package/dist/components/container.js.map +1 -0
  63. package/dist/components/date-picker.d.ts.map +1 -0
  64. package/dist/components/date-picker.js +22 -0
  65. package/dist/components/date-picker.js.map +1 -0
  66. package/dist/components/dialog.d.ts +28 -0
  67. package/dist/components/dialog.d.ts.map +1 -0
  68. package/dist/components/dialog.js.map +1 -0
  69. package/dist/components/drawer.js +55 -0
  70. package/dist/components/drawer.js.map +1 -0
  71. package/dist/components/dropdown-menu.d.ts +39 -0
  72. package/dist/components/dropdown-menu.d.ts.map +1 -0
  73. package/dist/components/dropdown-menu.js +47 -0
  74. package/dist/components/empty-state.d.ts +15 -0
  75. package/dist/components/empty-state.d.ts.map +1 -0
  76. package/dist/components/empty-state.js +6 -0
  77. package/dist/components/form-field.d.ts +32 -0
  78. package/dist/components/form-field.d.ts.map +1 -0
  79. package/dist/components/form-field.js +31 -0
  80. package/dist/components/form-field.js.map +1 -0
  81. package/dist/components/input.d.ts +10 -0
  82. package/dist/components/input.d.ts.map +1 -0
  83. package/dist/components/input.js +6 -0
  84. package/dist/components/input.js.map +1 -0
  85. package/dist/components/label.d.ts +11 -0
  86. package/dist/components/label.d.ts.map +1 -0
  87. package/dist/components/label.js +13 -0
  88. package/dist/components/label.js.map +1 -0
  89. package/dist/components/live-pill.d.ts +14 -0
  90. package/dist/components/live-pill.js +15 -0
  91. package/dist/components/live-pill.js.map +1 -0
  92. package/dist/components/metric-tile.d.ts +23 -0
  93. package/dist/components/metric-tile.d.ts.map +1 -0
  94. package/dist/components/money-breakdown.d.ts +36 -0
  95. package/dist/components/money-breakdown.d.ts.map +1 -0
  96. package/dist/components/money-breakdown.js +12 -0
  97. package/dist/components/money-breakdown.js.map +1 -0
  98. package/dist/components/number-input.d.ts +16 -0
  99. package/dist/components/number-input.d.ts.map +1 -0
  100. package/dist/components/number-input.js +30 -0
  101. package/dist/components/number-input.js.map +1 -0
  102. package/dist/components/pagination.d.ts +27 -0
  103. package/dist/components/pagination.d.ts.map +1 -0
  104. package/dist/components/pagination.js +52 -0
  105. package/dist/components/pagination.js.map +1 -0
  106. package/dist/components/popover.d.ts +24 -0
  107. package/dist/components/popover.d.ts.map +1 -0
  108. package/dist/components/popover.js +28 -0
  109. package/dist/components/popover.js.map +1 -0
  110. package/dist/components/progress.d.ts +13 -0
  111. package/dist/components/progress.d.ts.map +1 -0
  112. package/dist/components/progress.js +17 -0
  113. package/dist/components/radio-group.d.ts +10 -0
  114. package/dist/components/radio-group.d.ts.map +1 -0
  115. package/dist/components/radio-group.js +17 -0
  116. package/dist/components/radio-group.js.map +1 -0
  117. package/dist/components/scroll-area.d.ts.map +1 -0
  118. package/dist/components/scroll-area.js +22 -0
  119. package/dist/components/scroll-area.js.map +1 -0
  120. package/dist/components/select.d.ts +27 -0
  121. package/dist/components/select.d.ts.map +1 -0
  122. package/dist/components/select.js +40 -0
  123. package/dist/components/select.js.map +1 -0
  124. package/dist/components/separator.d.ts +10 -0
  125. package/dist/components/separator.d.ts.map +1 -0
  126. package/dist/components/separator.js +14 -0
  127. package/dist/components/separator.js.map +1 -0
  128. package/dist/components/sidebar.d.ts.map +1 -0
  129. package/dist/components/sidebar.js +48 -0
  130. package/dist/components/sidebar.js.map +1 -0
  131. package/dist/components/skeleton.d.ts +23 -0
  132. package/dist/components/skeleton.js +25 -0
  133. package/dist/components/skeleton.js.map +1 -0
  134. package/dist/components/slider.d.ts +14 -0
  135. package/dist/components/slider.d.ts.map +1 -0
  136. package/dist/components/slider.js +30 -0
  137. package/dist/components/slider.js.map +1 -0
  138. package/dist/components/spec.d.ts +35 -0
  139. package/dist/components/spec.js +31 -0
  140. package/dist/components/spec.js.map +1 -0
  141. package/dist/components/spinner.d.ts +20 -0
  142. package/dist/components/spinner.d.ts.map +1 -0
  143. package/dist/components/spinner.js +18 -0
  144. package/dist/components/spinner.js.map +1 -0
  145. package/dist/components/stack.d.ts +48 -0
  146. package/dist/components/stack.d.ts.map +1 -0
  147. package/dist/components/stack.js +43 -0
  148. package/dist/components/stack.js.map +1 -0
  149. package/dist/components/status-pill.js +34 -0
  150. package/dist/components/status-pill.js.map +1 -0
  151. package/dist/components/switch.d.ts +9 -0
  152. package/dist/components/switch.d.ts.map +1 -0
  153. package/dist/components/switch.js +15 -0
  154. package/dist/components/switch.js.map +1 -0
  155. package/dist/components/table.d.ts +31 -0
  156. package/dist/components/table.d.ts.map +1 -0
  157. package/dist/components/tabs.d.ts +22 -0
  158. package/dist/components/tabs.d.ts.map +1 -0
  159. package/dist/components/tabs.js +28 -0
  160. package/dist/components/tabs.js.map +1 -0
  161. package/dist/components/textarea.d.ts +8 -0
  162. package/dist/components/textarea.d.ts.map +1 -0
  163. package/dist/components/textarea.js +6 -0
  164. package/dist/components/textarea.js.map +1 -0
  165. package/dist/components/theme-provider.d.ts +35 -0
  166. package/dist/components/theme-provider.d.ts.map +1 -0
  167. package/dist/components/theme-provider.js.map +1 -0
  168. package/dist/components/theme-toggle.d.ts +10 -0
  169. package/dist/components/theme-toggle.d.ts.map +1 -0
  170. package/dist/components/theme-toggle.js.map +1 -0
  171. package/dist/components/three-state.d.ts +39 -0
  172. package/dist/components/three-state.d.ts.map +1 -0
  173. package/dist/components/three-state.js +24 -0
  174. package/dist/components/three-state.js.map +1 -0
  175. package/dist/components/timestamp.d.ts +24 -0
  176. package/dist/components/timestamp.js +64 -0
  177. package/dist/components/timestamp.js.map +1 -0
  178. package/dist/components/toaster.d.ts +27 -0
  179. package/dist/components/toaster.d.ts.map +1 -0
  180. package/dist/components/toaster.js +21 -0
  181. package/dist/components/toaster.js.map +1 -0
  182. package/dist/components/tooltip.d.ts +28 -0
  183. package/dist/components/tooltip.d.ts.map +1 -0
  184. package/dist/components/tooltip.js.map +1 -0
  185. package/dist/components/top-bar.d.ts +13 -0
  186. package/dist/components/top-bar.d.ts.map +1 -0
  187. package/dist/components/top-bar.js +16 -0
  188. package/dist/index.d.ts +76 -0
  189. package/dist/index.d.ts.map +1 -0
  190. package/dist/index.js +86 -0
  191. package/dist/index.js.map +1 -0
  192. package/dist/lib/utils.d.ts +7 -0
  193. package/dist/lib/utils.d.ts.map +1 -0
  194. package/dist/lib/utils.js +10 -0
  195. package/dist/lib/utils.js.map +1 -0
  196. package/dist/marketing/footer.d.ts +31 -0
  197. package/dist/marketing/footer.d.ts.map +1 -0
  198. package/dist/marketing/footer.js +9 -0
  199. package/dist/marketing/footer.js.map +1 -0
  200. package/dist/marketing/hero.d.ts +29 -0
  201. package/dist/marketing/hero.d.ts.map +1 -0
  202. package/dist/marketing/hero.js +7 -0
  203. package/dist/marketing/hero.js.map +1 -0
  204. package/dist/marketing/index.d.ts +21 -0
  205. package/dist/marketing/index.d.ts.map +1 -0
  206. package/dist/marketing/index.js +21 -0
  207. package/dist/marketing/index.js.map +1 -0
  208. package/dist/marketing/logo-cloud.d.ts +15 -0
  209. package/dist/marketing/logo-cloud.d.ts.map +1 -0
  210. package/dist/marketing/logo-cloud.js +6 -0
  211. package/dist/marketing/logo-cloud.js.map +1 -0
  212. package/dist/marketing/nav.d.ts +33 -0
  213. package/dist/marketing/nav.d.ts.map +1 -0
  214. package/dist/marketing/nav.js +14 -0
  215. package/dist/marketing/nav.js.map +1 -0
  216. package/dist/marketing/prose.d.ts +12 -0
  217. package/dist/marketing/prose.d.ts.map +1 -0
  218. package/dist/marketing/prose.js +18 -0
  219. package/dist/marketing/prose.js.map +1 -0
  220. package/dist/marketing/section.d.ts +22 -0
  221. package/dist/marketing/section.d.ts.map +1 -0
  222. package/dist/marketing/section.js +7 -0
  223. package/dist/marketing/section.js.map +1 -0
  224. package/dist/showcase/components/code-block.d.ts +11 -0
  225. package/dist/showcase/components/code-block.d.ts.map +1 -0
  226. package/dist/showcase/components/code-block.js +20 -0
  227. package/dist/showcase/components/code-block.js.map +1 -0
  228. package/dist/showcase/components/example.d.ts +16 -0
  229. package/dist/showcase/components/example.d.ts.map +1 -0
  230. package/dist/showcase/components/example.js +14 -0
  231. package/dist/showcase/components/example.js.map +1 -0
  232. package/dist/showcase/components/section.d.ts +21 -0
  233. package/dist/showcase/components/section.d.ts.map +1 -0
  234. package/dist/showcase/components/section.js +10 -0
  235. package/dist/showcase/components/section.js.map +1 -0
  236. package/dist/showcase/components/swatch.d.ts +17 -0
  237. package/dist/showcase/components/swatch.d.ts.map +1 -0
  238. package/dist/showcase/components/swatch.js +6 -0
  239. package/dist/showcase/components/swatch.js.map +1 -0
  240. package/dist/showcase/index.d.ts +17 -0
  241. package/dist/showcase/index.d.ts.map +1 -0
  242. package/dist/showcase/index.js +17 -0
  243. package/dist/showcase/index.js.map +1 -0
  244. package/dist/showcase/page.d.ts +2 -0
  245. package/dist/showcase/page.d.ts.map +1 -0
  246. package/dist/showcase/page.js +1085 -0
  247. package/dist/showcase/page.js.map +1 -0
  248. package/dist/styles/generated/tokens.d.ts +131 -0
  249. package/dist/styles/generated/tokens.d.ts.map +1 -0
  250. package/dist/styles/generated/tokens.js +107 -0
  251. package/dist/styles/generated/tokens.js.map +1 -0
  252. package/dist/styles/globals.css +131 -0
  253. package/dist/styles/tailwind.preset.d.ts +181 -0
  254. package/dist/styles/tailwind.preset.d.ts.map +1 -0
  255. package/dist/styles/tailwind.preset.js +114 -0
  256. package/dist/styles/tailwind.preset.js.map +1 -0
  257. package/dist/tokens/index.d.ts +176 -0
  258. package/dist/tokens/index.d.ts.map +1 -0
  259. package/dist/tokens/index.js +139 -0
  260. package/dist/tokens/index.js.map +1 -0
  261. package/dist/tokens/tokens.json +154 -0
  262. package/package.json +124 -0
  263. package/src/components/accordion.tsx +76 -0
  264. package/src/components/alert.tsx +113 -0
  265. package/src/components/app-shell.tsx +43 -0
  266. package/src/components/aspect-ratio.tsx +18 -0
  267. package/src/components/avatar-group.tsx +73 -0
  268. package/src/components/avatar.tsx +81 -0
  269. package/src/components/badge.tsx +77 -0
  270. package/src/components/breadcrumb.tsx +121 -0
  271. package/src/components/button.tsx +83 -0
  272. package/src/components/calendar.tsx +85 -0
  273. package/src/components/capacity-bar.tsx +80 -0
  274. package/src/components/card.tsx +104 -0
  275. package/src/components/checkbox.tsx +46 -0
  276. package/src/components/chip.tsx +74 -0
  277. package/src/components/collapsible.tsx +54 -0
  278. package/src/components/combobox.tsx +140 -0
  279. package/src/components/confirm-action.tsx +111 -0
  280. package/src/components/container.tsx +39 -0
  281. package/src/components/date-picker.tsx +98 -0
  282. package/src/components/dialog.tsx +174 -0
  283. package/src/components/drawer.tsx +157 -0
  284. package/src/components/dropdown-menu.tsx +200 -0
  285. package/src/components/empty-state.tsx +46 -0
  286. package/src/components/form-field.tsx +118 -0
  287. package/src/components/input.tsx +29 -0
  288. package/src/components/label.tsx +35 -0
  289. package/src/components/live-pill.tsx +35 -0
  290. package/src/components/metric-tile.tsx +83 -0
  291. package/src/components/money-breakdown.tsx +92 -0
  292. package/src/components/number-input.tsx +113 -0
  293. package/src/components/pagination.tsx +157 -0
  294. package/src/components/popover.tsx +46 -0
  295. package/src/components/progress.tsx +34 -0
  296. package/src/components/radio-group.tsx +46 -0
  297. package/src/components/scroll-area.tsx +55 -0
  298. package/src/components/select.tsx +169 -0
  299. package/src/components/separator.tsx +34 -0
  300. package/src/components/sidebar.tsx +168 -0
  301. package/src/components/skeleton.tsx +85 -0
  302. package/src/components/slider.tsx +58 -0
  303. package/src/components/spec.tsx +59 -0
  304. package/src/components/spinner.tsx +36 -0
  305. package/src/components/stack.tsx +80 -0
  306. package/src/components/status-pill.tsx +100 -0
  307. package/src/components/switch.tsx +37 -0
  308. package/src/components/table.tsx +129 -0
  309. package/src/components/tabs.tsx +72 -0
  310. package/src/components/textarea.tsx +27 -0
  311. package/src/components/theme-provider.tsx +131 -0
  312. package/src/components/theme-toggle.tsx +34 -0
  313. package/src/components/three-state.tsx +90 -0
  314. package/src/components/timestamp.tsx +107 -0
  315. package/src/components/toaster.tsx +55 -0
  316. package/src/components/tooltip.tsx +49 -0
  317. package/src/components/top-bar.tsx +29 -0
  318. package/src/index.ts +221 -0
  319. package/src/lib/utils.ts +10 -0
  320. package/src/marketing/footer.tsx +93 -0
  321. package/src/marketing/hero.tsx +92 -0
  322. package/src/marketing/index.ts +24 -0
  323. package/src/marketing/logo-cloud.tsx +35 -0
  324. package/src/marketing/nav.tsx +122 -0
  325. package/src/marketing/prose.tsx +45 -0
  326. package/src/marketing/section.tsx +77 -0
  327. package/src/showcase/components/code-block.tsx +66 -0
  328. package/src/showcase/components/example.tsx +47 -0
  329. package/src/showcase/components/section.tsx +70 -0
  330. package/src/showcase/components/swatch.tsx +52 -0
  331. package/src/showcase/index.tsx +16 -0
  332. package/src/showcase/page.tsx +4216 -0
  333. package/src/styles/generated/tokens.ts +119 -0
  334. package/src/styles/globals.css +131 -0
  335. package/src/styles/tailwind.preset.ts +134 -0
  336. package/src/test/a11y.test.tsx +638 -0
  337. package/src/test/marketing-a11y.test.tsx +138 -0
  338. package/src/test/setup.ts +47 -0
  339. package/src/tokens/index.ts +154 -0
  340. package/src/tokens/tokens.json +154 -0
@@ -0,0 +1,181 @@
1
+ /**
2
+ * DT Sports — Tailwind preset.
3
+ *
4
+ * All token values come from src/tokens/tokens.json via the generated
5
+ * ./generated/tokens module (run `npm run build:tokens` after editing the
6
+ * JSON). Only Tailwind-specific wiring lives in this file: dark-mode
7
+ * strategy, keyframes/animations, and the pointer-coarse variant.
8
+ *
9
+ * Consume from apps via:
10
+ *
11
+ * import preset from "@dtsports/design-system/tailwind-preset";
12
+ * const config: Config = {
13
+ * presets: [preset],
14
+ * content: [ ...your app + design-system source paths ],
15
+ * };
16
+ */
17
+ declare const preset: {
18
+ darkMode: ["class"];
19
+ content: never[];
20
+ theme: {
21
+ screens: {
22
+ readonly sm: "640px";
23
+ readonly md: "768px";
24
+ readonly lg: "1024px";
25
+ readonly xl: "1280px";
26
+ readonly "2xl": "1536px";
27
+ };
28
+ extend: {
29
+ colors: {
30
+ brand: {
31
+ lime: "hsl(var(--brand-lime))";
32
+ "lime-foreground": "hsl(var(--brand-lime-foreground))";
33
+ forest: "hsl(var(--brand-forest))";
34
+ "forest-foreground": "hsl(var(--brand-forest-foreground))";
35
+ };
36
+ background: "hsl(var(--background))";
37
+ "bg-subtle": "hsl(var(--bg-subtle))";
38
+ "bg-muted": "hsl(var(--bg-muted))";
39
+ border: "hsl(var(--border))";
40
+ "border-strong": "hsl(var(--border-strong))";
41
+ foreground: "hsl(var(--foreground))";
42
+ "text-muted": "hsl(var(--text-muted))";
43
+ "text-subtle": "hsl(var(--text-subtle))";
44
+ success: "hsl(var(--success))";
45
+ "success-foreground": "hsl(var(--success-foreground))";
46
+ warning: "hsl(var(--warning))";
47
+ "warning-foreground": "hsl(var(--warning-foreground))";
48
+ danger: "hsl(var(--danger))";
49
+ "danger-foreground": "hsl(var(--danger-foreground))";
50
+ info: "hsl(var(--info))";
51
+ "info-foreground": "hsl(var(--info-foreground))";
52
+ ring: "hsl(var(--ring))";
53
+ };
54
+ fontFamily: {
55
+ sans: ["\"Exo 2\"", "system-ui", "sans-serif"];
56
+ mono: ["ui-monospace", "SFMono-Regular", "\"JetBrains Mono\"", "Menlo", "monospace"];
57
+ };
58
+ fontSize: {
59
+ [x: string]: ["11px" | "13px" | "14px" | "20px" | "15px" | "17px" | "24px" | "30px", {
60
+ lineHeight: "16px";
61
+ } | {
62
+ lineHeight: "18px";
63
+ } | {
64
+ lineHeight: "20px";
65
+ } | {
66
+ lineHeight: "22px";
67
+ } | {
68
+ lineHeight: "24px";
69
+ } | {
70
+ lineHeight: "28px";
71
+ } | {
72
+ lineHeight: "32px";
73
+ } | {
74
+ lineHeight: "36px";
75
+ }] | ["clamp(32px, 24px + 2.5vw, 44px)" | "clamp(40px, 26px + 4vw, 64px)" | "clamp(48px, 28px + 6vw, 96px)", {
76
+ lineHeight: "1.1";
77
+ letterSpacing: "-0.02em";
78
+ } | {
79
+ lineHeight: "1.05";
80
+ letterSpacing: "-0.02em";
81
+ } | {
82
+ lineHeight: "1";
83
+ letterSpacing: "-0.025em";
84
+ }];
85
+ };
86
+ fontWeight: {
87
+ normal: "400";
88
+ medium: "500";
89
+ semibold: "600";
90
+ bold: "700";
91
+ };
92
+ spacing: {
93
+ "1": "4px";
94
+ "2": "8px";
95
+ "3": "12px";
96
+ "4": "16px";
97
+ "5": "20px";
98
+ "6": "24px";
99
+ "8": "32px";
100
+ "10": "40px";
101
+ "12": "48px";
102
+ "16": "64px";
103
+ "20": "80px";
104
+ "24": "96px";
105
+ "32": "128px";
106
+ "40": "160px";
107
+ "0.5": "2px";
108
+ "1.5": "6px";
109
+ "2.5": "10px";
110
+ };
111
+ borderRadius: {
112
+ none: "0";
113
+ sm: "var(--radius-sm)";
114
+ DEFAULT: "var(--radius)";
115
+ md: "var(--radius-md)";
116
+ full: "9999px";
117
+ };
118
+ boxShadow: {
119
+ none: "none";
120
+ sm: "0 1px 2px rgba(0,0,0,0.04), 0 1px 1px rgba(0,0,0,0.04)";
121
+ md: "0 4px 12px rgba(0,0,0,0.08), 0 1px 3px rgba(0,0,0,0.06)";
122
+ lg: "0 12px 32px rgba(0,0,0,0.12), 0 2px 6px rgba(0,0,0,0.08)";
123
+ };
124
+ backgroundImage: {
125
+ "gradient-brand": "linear-gradient(135deg, hsl(var(--brand-forest)) 0%, hsl(100 55% 38%) 55%, hsl(var(--brand-lime)) 100%)";
126
+ "gradient-forest-fade": "linear-gradient(180deg, hsl(var(--brand-forest) / 0.08) 0%, transparent 100%)";
127
+ };
128
+ transitionDuration: {
129
+ DEFAULT: "150ms";
130
+ slow: "200ms";
131
+ };
132
+ transitionTimingFunction: {
133
+ out: "cubic-bezier(0.2, 0, 0, 1)";
134
+ };
135
+ zIndex: {
136
+ sticky: "20";
137
+ overlay: "40";
138
+ modal: "50";
139
+ popover: "50";
140
+ toast: "60";
141
+ };
142
+ keyframes: {
143
+ "live-pulse": {
144
+ "0%, 100%": {
145
+ opacity: string;
146
+ };
147
+ "50%": {
148
+ opacity: string;
149
+ };
150
+ };
151
+ "fade-in": {
152
+ from: {
153
+ opacity: string;
154
+ };
155
+ to: {
156
+ opacity: string;
157
+ };
158
+ };
159
+ "fade-in-up": {
160
+ from: {
161
+ opacity: string;
162
+ };
163
+ to: {
164
+ opacity: string;
165
+ };
166
+ };
167
+ };
168
+ animation: {
169
+ "live-pulse": string;
170
+ "fade-in": string;
171
+ "fade-in-up": string;
172
+ };
173
+ };
174
+ };
175
+ plugins: {
176
+ handler: import("tailwindcss/types/config").PluginCreator;
177
+ config?: Partial<import("tailwindcss/types/config").Config>;
178
+ }[];
179
+ };
180
+ export default preset;
181
+ //# sourceMappingURL=tailwind.preset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind.preset.d.ts","sourceRoot":"","sources":["../../src/styles/tailwind.preset.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Fe,CAAC;AAE5B,eAAe,MAAM,CAAC"}
@@ -0,0 +1,114 @@
1
+ // Explicit ".js" — Tailwind v3 has no exports map, so strict Node ESM
2
+ // needs the extension (bundlers/jiti accept it too).
3
+ import plugin from "tailwindcss/plugin.js";
4
+ import { backgroundImage, borderRadius, boxShadow, colors, fontFamily, fontSize, fontSizeFluid, fontWeight, screens, spacing, transitionDuration, transitionTimingFunction, zIndex, } from "./generated/tokens.js";
5
+ /**
6
+ * DT Sports — Tailwind preset.
7
+ *
8
+ * All token values come from src/tokens/tokens.json via the generated
9
+ * ./generated/tokens module (run `npm run build:tokens` after editing the
10
+ * JSON). Only Tailwind-specific wiring lives in this file: dark-mode
11
+ * strategy, keyframes/animations, and the pointer-coarse variant.
12
+ *
13
+ * Consume from apps via:
14
+ *
15
+ * import preset from "@dtsports/design-system/tailwind-preset";
16
+ * const config: Config = {
17
+ * presets: [preset],
18
+ * content: [ ...your app + design-system source paths ],
19
+ * };
20
+ */
21
+ const preset = {
22
+ darkMode: ["class"],
23
+ // Empty content here — apps must declare their own paths so Tailwind
24
+ // can scan the design-system source AND the app's own files.
25
+ content: [],
26
+ theme: {
27
+ // Explicit (non-extend) so web and native share one breakpoint source.
28
+ screens,
29
+ extend: {
30
+ colors: {
31
+ brand: {
32
+ lime: colors["brand-lime"],
33
+ "lime-foreground": colors["brand-lime-foreground"],
34
+ forest: colors["brand-forest"],
35
+ "forest-foreground": colors["brand-forest-foreground"],
36
+ },
37
+ background: colors.background,
38
+ "bg-subtle": colors["bg-subtle"],
39
+ "bg-muted": colors["bg-muted"],
40
+ border: colors.border,
41
+ "border-strong": colors["border-strong"],
42
+ foreground: colors.foreground,
43
+ "text-muted": colors["text-muted"],
44
+ "text-subtle": colors["text-subtle"],
45
+ success: colors.success,
46
+ "success-foreground": colors["success-foreground"],
47
+ warning: colors.warning,
48
+ "warning-foreground": colors["warning-foreground"],
49
+ danger: colors.danger,
50
+ "danger-foreground": colors["danger-foreground"],
51
+ info: colors.info,
52
+ "info-foreground": colors["info-foreground"],
53
+ ring: colors.ring,
54
+ },
55
+ fontFamily: {
56
+ sans: [...fontFamily.sans],
57
+ mono: [...fontFamily.mono],
58
+ },
59
+ fontSize: {
60
+ ...Object.fromEntries(Object.entries(fontSize).map(([k, [size, opts]]) => [
61
+ k,
62
+ [size, { ...opts }],
63
+ ])),
64
+ // Marketing display scale — fluid clamp(), zero cost unless used.
65
+ ...Object.fromEntries(Object.entries(fontSizeFluid).map(([k, [size, opts]]) => [
66
+ k,
67
+ [size, { ...opts }],
68
+ ])),
69
+ },
70
+ fontWeight: { ...fontWeight },
71
+ spacing: { ...spacing },
72
+ borderRadius: { ...borderRadius },
73
+ boxShadow: { ...boxShadow },
74
+ backgroundImage: { ...backgroundImage },
75
+ transitionDuration: { ...transitionDuration },
76
+ transitionTimingFunction: { ...transitionTimingFunction },
77
+ zIndex: { ...zIndex },
78
+ keyframes: {
79
+ "live-pulse": {
80
+ "0%, 100%": { opacity: "1" },
81
+ "50%": { opacity: "0.4" },
82
+ },
83
+ "fade-in": {
84
+ from: { opacity: "0" },
85
+ to: { opacity: "1" },
86
+ },
87
+ // Opacity-only on purpose. A `transform: translateY(...)` here
88
+ // would override Tailwind's `-translate-x-1/2 -translate-y-1/2`
89
+ // centering on the desktop DialogContent (CSS `transform` is a
90
+ // single property — animation wins), shoving the modal off-
91
+ // screen to the bottom-right. Opacity is enough entrance polish
92
+ // and works for both the centered modal and the mobile sheet.
93
+ "fade-in-up": {
94
+ from: { opacity: "0" },
95
+ to: { opacity: "1" },
96
+ },
97
+ },
98
+ animation: {
99
+ "live-pulse": "live-pulse 1.5s ease-in-out infinite",
100
+ "fade-in": "fade-in 150ms cubic-bezier(0.2, 0, 0, 1)",
101
+ "fade-in-up": "fade-in-up 200ms cubic-bezier(0.2, 0, 0, 1)",
102
+ },
103
+ },
104
+ },
105
+ plugins: [
106
+ // `pointer-coarse:` targets touch-primary devices — used to grow tap
107
+ // targets to 44px without loosening the dense pointer/desktop layout.
108
+ plugin(({ addVariant }) => {
109
+ addVariant("pointer-coarse", "@media (pointer: coarse)");
110
+ }),
111
+ ],
112
+ };
113
+ export default preset;
114
+ //# sourceMappingURL=tailwind.preset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind.preset.js","sourceRoot":"","sources":["../../src/styles/tailwind.preset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ /** Resolved color palettes. Values are CSS hsl() strings (RN-compatible). */
2
+ export declare const palette: {
3
+ readonly light: {
4
+ readonly "brand-lime": "hsl(72 65% 52%)";
5
+ readonly "brand-lime-foreground": "hsl(0 0% 4%)";
6
+ readonly "brand-forest": "hsl(147 66% 26%)";
7
+ readonly "brand-forest-foreground": "hsl(0 0% 100%)";
8
+ readonly background: "hsl(0 0% 100%)";
9
+ readonly "bg-subtle": "hsl(0 0% 98%)";
10
+ readonly "bg-muted": "hsl(240 5% 96%)";
11
+ readonly border: "hsl(0 0% 90%)";
12
+ readonly "border-strong": "hsl(0 0% 83%)";
13
+ readonly foreground: "hsl(0 0% 4%)";
14
+ readonly "text-muted": "hsl(0 0% 32%)";
15
+ readonly "text-subtle": "hsl(0 0% 45%)";
16
+ readonly success: "hsl(142 72% 29%)";
17
+ readonly "success-foreground": "hsl(0 0% 100%)";
18
+ readonly warning: "hsl(35 90% 33%)";
19
+ readonly "warning-foreground": "hsl(0 0% 100%)";
20
+ readonly danger: "hsl(0 72% 49%)";
21
+ readonly "danger-foreground": "hsl(0 0% 100%)";
22
+ readonly info: "hsl(217 91% 50%)";
23
+ readonly "info-foreground": "hsl(0 0% 100%)";
24
+ readonly ring: "hsl(147 66% 26%)";
25
+ };
26
+ readonly dark: {
27
+ readonly "brand-lime": "hsl(72 65% 52%)";
28
+ readonly "brand-lime-foreground": "hsl(0 0% 4%)";
29
+ readonly "brand-forest": "hsl(147 66% 26%)";
30
+ readonly "brand-forest-foreground": "hsl(0 0% 100%)";
31
+ readonly background: "hsl(0 0% 4%)";
32
+ readonly "bg-subtle": "hsl(0 0% 8%)";
33
+ readonly "bg-muted": "hsl(0 0% 12%)";
34
+ readonly border: "hsl(0 0% 15%)";
35
+ readonly "border-strong": "hsl(240 5% 26%)";
36
+ readonly foreground: "hsl(0 0% 98%)";
37
+ readonly "text-muted": "hsl(240 5% 65%)";
38
+ readonly "text-subtle": "hsl(240 4% 52%)";
39
+ readonly success: "hsl(142 60% 45%)";
40
+ readonly "success-foreground": "hsl(0 0% 4%)";
41
+ readonly warning: "hsl(38 92% 50%)";
42
+ readonly "warning-foreground": "hsl(0 0% 4%)";
43
+ readonly danger: "hsl(0 84% 62%)";
44
+ readonly "danger-foreground": "hsl(0 0% 4%)";
45
+ readonly info: "hsl(217 91% 62%)";
46
+ readonly "info-foreground": "hsl(0 0% 4%)";
47
+ readonly ring: "hsl(72 65% 52%)";
48
+ };
49
+ };
50
+ export type ThemeName = keyof typeof palette;
51
+ export type ColorToken = keyof typeof palette.light;
52
+ /** Spacing scale in device pixels. */
53
+ export declare const spacing: {
54
+ readonly "1": 4;
55
+ readonly "2": 8;
56
+ readonly "3": 12;
57
+ readonly "4": 16;
58
+ readonly "5": 20;
59
+ readonly "6": 24;
60
+ readonly "8": 32;
61
+ readonly "10": 40;
62
+ readonly "12": 48;
63
+ readonly "16": 64;
64
+ readonly "20": 80;
65
+ readonly "24": 96;
66
+ readonly "32": 128;
67
+ readonly "40": 160;
68
+ readonly "0.5": 2;
69
+ readonly "1.5": 6;
70
+ readonly "2.5": 10;
71
+ };
72
+ /** Type scale in device pixels. */
73
+ export declare const fontSize: {
74
+ readonly xs: {
75
+ readonly size: 11;
76
+ readonly lineHeight: 16;
77
+ };
78
+ readonly sm: {
79
+ readonly size: 13;
80
+ readonly lineHeight: 18;
81
+ };
82
+ readonly base: {
83
+ readonly size: 14;
84
+ readonly lineHeight: 20;
85
+ };
86
+ readonly md: {
87
+ readonly size: 15;
88
+ readonly lineHeight: 22;
89
+ };
90
+ readonly lg: {
91
+ readonly size: 17;
92
+ readonly lineHeight: 24;
93
+ };
94
+ readonly xl: {
95
+ readonly size: 20;
96
+ readonly lineHeight: 28;
97
+ };
98
+ readonly "2xl": {
99
+ readonly size: 24;
100
+ readonly lineHeight: 32;
101
+ };
102
+ readonly "3xl": {
103
+ readonly size: 30;
104
+ readonly lineHeight: 36;
105
+ };
106
+ };
107
+ export declare const fontWeight: {
108
+ readonly normal: "400";
109
+ readonly medium: "500";
110
+ readonly semibold: "600";
111
+ readonly bold: "700";
112
+ };
113
+ /** Marketing display scale — RN gets the min/max bounds (no vw units). */
114
+ export declare const fontSizeFluid: {
115
+ readonly "display-sm": {
116
+ readonly min: 32;
117
+ readonly max: 44;
118
+ readonly lineHeight: 1.1;
119
+ };
120
+ readonly display: {
121
+ readonly min: 40;
122
+ readonly max: 64;
123
+ readonly lineHeight: 1.05;
124
+ };
125
+ readonly "display-lg": {
126
+ readonly min: 48;
127
+ readonly max: 96;
128
+ readonly lineHeight: 1;
129
+ };
130
+ };
131
+ /** CSS gradient strings (web); RN needs its own gradient impl. */
132
+ export declare const gradient: {
133
+ readonly brand: "linear-gradient(135deg, hsl(var(--brand-forest)) 0%, hsl(100 55% 38%) 55%, hsl(var(--brand-lime)) 100%)";
134
+ readonly "forest-fade": "linear-gradient(180deg, hsl(var(--brand-forest) / 0.08) 0%, transparent 100%)";
135
+ };
136
+ export declare const fontFamily: {
137
+ readonly sans: readonly ["Exo 2", "system-ui", "sans-serif"];
138
+ readonly mono: readonly ["ui-monospace", "SFMono-Regular", "JetBrains Mono", "Menlo", "monospace"];
139
+ };
140
+ /** Corner radii in device pixels. */
141
+ export declare const radius: {
142
+ readonly sm: 2;
143
+ readonly base: 4;
144
+ readonly md: 6;
145
+ };
146
+ /** CSS box-shadow strings — map to RN elevation/shadow* as needed. */
147
+ export declare const shadow: {
148
+ readonly sm: "0 1px 2px rgba(0,0,0,0.04), 0 1px 1px rgba(0,0,0,0.04)";
149
+ readonly md: "0 4px 12px rgba(0,0,0,0.08), 0 1px 3px rgba(0,0,0,0.06)";
150
+ readonly lg: "0 12px 32px rgba(0,0,0,0.12), 0 2px 6px rgba(0,0,0,0.08)";
151
+ };
152
+ /** Durations in ms. */
153
+ export declare const duration: {
154
+ readonly base: 150;
155
+ readonly slow: 200;
156
+ readonly pulse: 1500;
157
+ };
158
+ export declare const easing: {
159
+ readonly out: "cubic-bezier(0.2, 0, 0, 1)";
160
+ };
161
+ export declare const zIndex: {
162
+ readonly sticky: 20;
163
+ readonly overlay: 40;
164
+ readonly modal: 50;
165
+ readonly popover: 50;
166
+ readonly toast: 60;
167
+ };
168
+ /** Breakpoints in px (web); useful for RN tablet/phone splits too. */
169
+ export declare const breakpoint: {
170
+ readonly sm: 640;
171
+ readonly md: 768;
172
+ readonly lg: 1024;
173
+ readonly xl: 1280;
174
+ readonly "2xl": 1536;
175
+ };
176
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CV,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,OAAO,CAAC;AAC7C,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,OAAO,CAAC,KAAK,CAAC;AAEpD,sCAAsC;AACtC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;CAkBV,CAAC;AAEX,mCAAmC;AACnC,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CASX,CAAC;AAEX,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX,0EAA0E;AAC1E,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;CAIhB,CAAC;AAEX,kEAAkE;AAClE,eAAO,MAAM,QAAQ;;;CAGX,CAAC;AAEX,eAAO,MAAM,UAAU;;;CAGb,CAAC;AAEX,qCAAqC;AACrC,eAAO,MAAM,MAAM;;;;CAIT,CAAC;AAEX,sEAAsE;AACtE,eAAO,MAAM,MAAM;;;;CAIT,CAAC;AAEX,uBAAuB;AACvB,eAAO,MAAM,QAAQ;;;;CAIX,CAAC;AAEX,eAAO,MAAM,MAAM;;CAET,CAAC;AAEX,eAAO,MAAM,MAAM;;;;;;CAMT,CAAC;AAEX,sEAAsE;AACtE,eAAO,MAAM,UAAU;;;;;;CAMb,CAAC"}
@@ -0,0 +1,139 @@
1
+ // GENERATED by scripts/build-tokens.mjs from src/tokens/tokens.json — do not edit (platform-agnostic tokens for React Native / plain JS)
2
+ /** Resolved color palettes. Values are CSS hsl() strings (RN-compatible). */
3
+ export const palette = {
4
+ light: {
5
+ "brand-lime": "hsl(72 65% 52%)",
6
+ "brand-lime-foreground": "hsl(0 0% 4%)",
7
+ "brand-forest": "hsl(147 66% 26%)",
8
+ "brand-forest-foreground": "hsl(0 0% 100%)",
9
+ "background": "hsl(0 0% 100%)",
10
+ "bg-subtle": "hsl(0 0% 98%)",
11
+ "bg-muted": "hsl(240 5% 96%)",
12
+ "border": "hsl(0 0% 90%)",
13
+ "border-strong": "hsl(0 0% 83%)",
14
+ "foreground": "hsl(0 0% 4%)",
15
+ "text-muted": "hsl(0 0% 32%)",
16
+ "text-subtle": "hsl(0 0% 45%)",
17
+ "success": "hsl(142 72% 29%)",
18
+ "success-foreground": "hsl(0 0% 100%)",
19
+ "warning": "hsl(35 90% 33%)",
20
+ "warning-foreground": "hsl(0 0% 100%)",
21
+ "danger": "hsl(0 72% 49%)",
22
+ "danger-foreground": "hsl(0 0% 100%)",
23
+ "info": "hsl(217 91% 50%)",
24
+ "info-foreground": "hsl(0 0% 100%)",
25
+ "ring": "hsl(147 66% 26%)",
26
+ },
27
+ dark: {
28
+ "brand-lime": "hsl(72 65% 52%)",
29
+ "brand-lime-foreground": "hsl(0 0% 4%)",
30
+ "brand-forest": "hsl(147 66% 26%)",
31
+ "brand-forest-foreground": "hsl(0 0% 100%)",
32
+ "background": "hsl(0 0% 4%)",
33
+ "bg-subtle": "hsl(0 0% 8%)",
34
+ "bg-muted": "hsl(0 0% 12%)",
35
+ "border": "hsl(0 0% 15%)",
36
+ "border-strong": "hsl(240 5% 26%)",
37
+ "foreground": "hsl(0 0% 98%)",
38
+ "text-muted": "hsl(240 5% 65%)",
39
+ "text-subtle": "hsl(240 4% 52%)",
40
+ "success": "hsl(142 60% 45%)",
41
+ "success-foreground": "hsl(0 0% 4%)",
42
+ "warning": "hsl(38 92% 50%)",
43
+ "warning-foreground": "hsl(0 0% 4%)",
44
+ "danger": "hsl(0 84% 62%)",
45
+ "danger-foreground": "hsl(0 0% 4%)",
46
+ "info": "hsl(217 91% 62%)",
47
+ "info-foreground": "hsl(0 0% 4%)",
48
+ "ring": "hsl(72 65% 52%)",
49
+ },
50
+ };
51
+ /** Spacing scale in device pixels. */
52
+ export const spacing = {
53
+ "1": 4,
54
+ "2": 8,
55
+ "3": 12,
56
+ "4": 16,
57
+ "5": 20,
58
+ "6": 24,
59
+ "8": 32,
60
+ "10": 40,
61
+ "12": 48,
62
+ "16": 64,
63
+ "20": 80,
64
+ "24": 96,
65
+ "32": 128,
66
+ "40": 160,
67
+ "0.5": 2,
68
+ "1.5": 6,
69
+ "2.5": 10,
70
+ };
71
+ /** Type scale in device pixels. */
72
+ export const fontSize = {
73
+ "xs": { size: 11, lineHeight: 16 },
74
+ "sm": { size: 13, lineHeight: 18 },
75
+ "base": { size: 14, lineHeight: 20 },
76
+ "md": { size: 15, lineHeight: 22 },
77
+ "lg": { size: 17, lineHeight: 24 },
78
+ "xl": { size: 20, lineHeight: 28 },
79
+ "2xl": { size: 24, lineHeight: 32 },
80
+ "3xl": { size: 30, lineHeight: 36 },
81
+ };
82
+ export const fontWeight = {
83
+ normal: "400",
84
+ medium: "500",
85
+ semibold: "600",
86
+ bold: "700",
87
+ };
88
+ /** Marketing display scale — RN gets the min/max bounds (no vw units). */
89
+ export const fontSizeFluid = {
90
+ "display-sm": { min: 32, max: 44, lineHeight: 1.1 },
91
+ "display": { min: 40, max: 64, lineHeight: 1.05 },
92
+ "display-lg": { min: 48, max: 96, lineHeight: 1 },
93
+ };
94
+ /** CSS gradient strings (web); RN needs its own gradient impl. */
95
+ export const gradient = {
96
+ "brand": "linear-gradient(135deg, hsl(var(--brand-forest)) 0%, hsl(100 55% 38%) 55%, hsl(var(--brand-lime)) 100%)",
97
+ "forest-fade": "linear-gradient(180deg, hsl(var(--brand-forest) / 0.08) 0%, transparent 100%)",
98
+ };
99
+ export const fontFamily = {
100
+ sans: ['Exo 2', 'system-ui', 'sans-serif'],
101
+ mono: ['ui-monospace', 'SFMono-Regular', 'JetBrains Mono', 'Menlo', 'monospace'],
102
+ };
103
+ /** Corner radii in device pixels. */
104
+ export const radius = {
105
+ "sm": 2,
106
+ base: 4,
107
+ "md": 6,
108
+ };
109
+ /** CSS box-shadow strings — map to RN elevation/shadow* as needed. */
110
+ export const shadow = {
111
+ sm: "0 1px 2px rgba(0,0,0,0.04), 0 1px 1px rgba(0,0,0,0.04)",
112
+ md: "0 4px 12px rgba(0,0,0,0.08), 0 1px 3px rgba(0,0,0,0.06)",
113
+ lg: "0 12px 32px rgba(0,0,0,0.12), 0 2px 6px rgba(0,0,0,0.08)",
114
+ };
115
+ /** Durations in ms. */
116
+ export const duration = {
117
+ base: 150,
118
+ "slow": 200,
119
+ "pulse": 1500,
120
+ };
121
+ export const easing = {
122
+ out: "cubic-bezier(0.2, 0, 0, 1)",
123
+ };
124
+ export const zIndex = {
125
+ sticky: 20,
126
+ overlay: 40,
127
+ modal: 50,
128
+ popover: 50,
129
+ toast: 60,
130
+ };
131
+ /** Breakpoints in px (web); useful for RN tablet/phone splits too. */
132
+ export const breakpoint = {
133
+ "sm": 640,
134
+ "md": 768,
135
+ "lg": 1024,
136
+ "xl": 1280,
137
+ "2xl": 1536,
138
+ };
139
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA,yIAAyI;AAEzI,6EAA6E;AAC7E,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,KAAK,EAAE;QACL,YAAY,EAAE,iBAAiB;QAC/B,uBAAuB,EAAE,cAAc;QACvC,cAAc,EAAE,kBAAkB;QAClC,yBAAyB,EAAE,gBAAgB;QAC3C,YAAY,EAAE,gBAAgB;QAC9B,WAAW,EAAE,eAAe;QAC5B,UAAU,EAAE,iBAAiB;QAC7B,QAAQ,EAAE,eAAe;QACzB,eAAe,EAAE,eAAe;QAChC,YAAY,EAAE,cAAc;QAC5B,YAAY,EAAE,eAAe;QAC7B,aAAa,EAAE,eAAe;QAC9B,SAAS,EAAE,kBAAkB;QAC7B,oBAAoB,EAAE,gBAAgB;QACtC,SAAS,EAAE,iBAAiB;QAC5B,oBAAoB,EAAE,gBAAgB;QACtC,QAAQ,EAAE,gBAAgB;QAC1B,mBAAmB,EAAE,gBAAgB;QACrC,MAAM,EAAE,kBAAkB;QAC1B,iBAAiB,EAAE,gBAAgB;QACnC,MAAM,EAAE,kBAAkB;KAC3B;IACD,IAAI,EAAE;QACJ,YAAY,EAAE,iBAAiB;QAC/B,uBAAuB,EAAE,cAAc;QACvC,cAAc,EAAE,kBAAkB;QAClC,yBAAyB,EAAE,gBAAgB;QAC3C,YAAY,EAAE,cAAc;QAC5B,WAAW,EAAE,cAAc;QAC3B,UAAU,EAAE,eAAe;QAC3B,QAAQ,EAAE,eAAe;QACzB,eAAe,EAAE,iBAAiB;QAClC,YAAY,EAAE,eAAe;QAC7B,YAAY,EAAE,iBAAiB;QAC/B,aAAa,EAAE,iBAAiB;QAChC,SAAS,EAAE,kBAAkB;QAC7B,oBAAoB,EAAE,cAAc;QACpC,SAAS,EAAE,iBAAiB;QAC5B,oBAAoB,EAAE,cAAc;QACpC,QAAQ,EAAE,gBAAgB;QAC1B,mBAAmB,EAAE,cAAc;QACnC,MAAM,EAAE,kBAAkB;QAC1B,iBAAiB,EAAE,cAAc;QACjC,MAAM,EAAE,iBAAiB;KAC1B;CACO,CAAC;AAKX,sCAAsC;AACtC,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,EAAE;CACD,CAAC;AAEX,mCAAmC;AACnC,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;IAClC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;IAClC,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;IACpC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;IAClC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;IAClC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;IAClC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;IACnC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;CAC3B,CAAC;AAEX,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,QAAQ,EAAE,KAAK;IACf,IAAI,EAAE,KAAK;CACH,CAAC;AAEX,0EAA0E;AAC1E,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,YAAY,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;IACnD,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjD,YAAY,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;CACzC,CAAC;AAEX,kEAAkE;AAClE,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO,EAAE,yGAAyG;IAClH,aAAa,EAAE,+EAA+E;CACtF,CAAC;AAEX,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC;IAC1C,IAAI,EAAE,CAAC,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,CAAC;CACxE,CAAC;AAEX,qCAAqC;AACrC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;CACC,CAAC;AAEX,sEAAsE;AACtE,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,EAAE,EAAE,wDAAwD;IAC5D,EAAE,EAAE,yDAAyD;IAC7D,EAAE,EAAE,0DAA0D;CACtD,CAAC;AAEX,uBAAuB;AACvB,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,IAAI;CACL,CAAC;AAEX,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,GAAG,EAAE,4BAA4B;CACzB,CAAC;AAEX,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,EAAE;IACT,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,EAAE;CACD,CAAC;AAEX,sEAAsE;AACtE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;CACH,CAAC"}