@discourser/design-system 0.9.3 → 0.9.4

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 (268) hide show
  1. package/dist/components/AbsoluteCenter.d.ts +4 -0
  2. package/dist/components/AbsoluteCenter.d.ts.map +1 -0
  3. package/dist/components/Accordion.d.ts +12 -0
  4. package/dist/components/Accordion.d.ts.map +1 -0
  5. package/dist/components/Avatar.d.ts +17 -0
  6. package/dist/components/Avatar.d.ts.map +1 -0
  7. package/dist/components/Badge.d.ts +13 -0
  8. package/dist/components/Badge.d.ts.map +1 -0
  9. package/dist/components/Button.d.ts +39 -0
  10. package/dist/components/Button.d.ts.map +1 -0
  11. package/dist/components/Card.d.ts +17 -0
  12. package/dist/components/Card.d.ts.map +1 -0
  13. package/dist/components/Checkbox.d.ts +507 -0
  14. package/dist/components/Checkbox.d.ts.map +1 -0
  15. package/dist/components/CloseButton.d.ts +4 -0
  16. package/dist/components/CloseButton.d.ts.map +1 -0
  17. package/dist/components/Dialog.d.ts +16 -0
  18. package/dist/components/Dialog.d.ts.map +1 -0
  19. package/dist/components/Drawer.d.ts +17 -0
  20. package/dist/components/Drawer.d.ts.map +1 -0
  21. package/dist/components/Group.d.ts +4 -0
  22. package/dist/components/Group.d.ts.map +1 -0
  23. package/dist/components/Heading.d.ts +10 -0
  24. package/dist/components/Heading.d.ts.map +1 -0
  25. package/dist/components/Icon.d.ts +4 -0
  26. package/dist/components/Icon.d.ts.map +1 -0
  27. package/dist/components/IconButton.d.ts +5 -0
  28. package/dist/components/IconButton.d.ts.map +1 -0
  29. package/dist/components/Input.d.ts +5 -0
  30. package/dist/components/Input.d.ts.map +1 -0
  31. package/dist/components/InputAddon.d.ts +4 -0
  32. package/dist/components/InputAddon.d.ts.map +1 -0
  33. package/dist/components/InputGroup.d.ts +14 -0
  34. package/dist/components/InputGroup.d.ts.map +1 -0
  35. package/dist/components/Loader.d.ts +25 -0
  36. package/dist/components/Loader.d.ts.map +1 -0
  37. package/dist/components/Popover.d.ts +20 -0
  38. package/dist/components/Popover.d.ts.map +1 -0
  39. package/dist/components/Progress.d.ts +14 -0
  40. package/dist/components/Progress.d.ts.map +1 -0
  41. package/dist/components/RadioGroup.d.ts +14 -0
  42. package/dist/components/RadioGroup.d.ts.map +1 -0
  43. package/dist/components/Select.d.ts +26 -0
  44. package/dist/components/Select.d.ts.map +1 -0
  45. package/dist/components/Skeleton.d.ts +16 -0
  46. package/dist/components/Skeleton.d.ts.map +1 -0
  47. package/dist/components/Slider.d.ts +34 -0
  48. package/dist/components/Slider.d.ts.map +1 -0
  49. package/dist/components/Spinner.d.ts +4 -0
  50. package/dist/components/Spinner.d.ts.map +1 -0
  51. package/dist/components/Switch.d.ts +10 -0
  52. package/dist/components/Switch.d.ts.map +1 -0
  53. package/dist/components/Tabs.d.ts +11 -0
  54. package/dist/components/Tabs.d.ts.map +1 -0
  55. package/dist/components/Textarea.d.ts +5 -0
  56. package/dist/components/Textarea.d.ts.map +1 -0
  57. package/dist/components/Toast.d.ts +4 -0
  58. package/dist/components/Toast.d.ts.map +1 -0
  59. package/dist/components/Tooltip.d.ts +19 -0
  60. package/dist/components/Tooltip.d.ts.map +1 -0
  61. package/dist/components/index.d.ts +30 -0
  62. package/dist/components/index.d.ts.map +1 -0
  63. package/dist/contracts/design-language.contract.d.ts +175 -0
  64. package/dist/contracts/design-language.contract.d.ts.map +1 -0
  65. package/dist/index.d.ts +7 -21506
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/languages/index.d.ts +4 -0
  68. package/dist/languages/index.d.ts.map +1 -0
  69. package/dist/languages/material3.language.d.ts +9 -0
  70. package/dist/languages/material3.language.d.ts.map +1 -0
  71. package/dist/languages/transform.d.ts +98 -0
  72. package/dist/languages/transform.d.ts.map +1 -0
  73. package/dist/main.d.ts +2 -0
  74. package/dist/main.d.ts.map +1 -0
  75. package/dist/preset/colors/index.d.ts +1485 -0
  76. package/dist/preset/colors/index.d.ts.map +1 -0
  77. package/dist/preset/colors/m3-error.d.ts +295 -0
  78. package/dist/preset/colors/m3-error.d.ts.map +1 -0
  79. package/dist/preset/colors/m3-neutral.d.ts +301 -0
  80. package/dist/preset/colors/m3-neutral.d.ts.map +1 -0
  81. package/dist/preset/colors/m3-primary.d.ts +312 -0
  82. package/dist/preset/colors/m3-primary.d.ts.map +1 -0
  83. package/dist/preset/index.d.ts +3 -0
  84. package/dist/preset/index.d.ts.map +1 -0
  85. package/dist/preset/layer-styles.d.ts +6 -0
  86. package/dist/preset/layer-styles.d.ts.map +1 -0
  87. package/dist/preset/recipes/absolute-center.d.ts +2 -0
  88. package/dist/preset/recipes/absolute-center.d.ts.map +1 -0
  89. package/dist/preset/recipes/accordion.d.ts +2 -0
  90. package/dist/preset/recipes/accordion.d.ts.map +1 -0
  91. package/dist/preset/recipes/avatar.d.ts +2 -0
  92. package/dist/preset/recipes/avatar.d.ts.map +1 -0
  93. package/dist/preset/recipes/badge.d.ts +2 -0
  94. package/dist/preset/recipes/badge.d.ts.map +1 -0
  95. package/dist/preset/recipes/button.d.ts +2 -0
  96. package/dist/preset/recipes/button.d.ts.map +1 -0
  97. package/dist/preset/recipes/card.d.ts +2 -0
  98. package/dist/preset/recipes/card.d.ts.map +1 -0
  99. package/dist/preset/recipes/checkbox.d.ts +2 -0
  100. package/dist/preset/recipes/checkbox.d.ts.map +1 -0
  101. package/dist/preset/recipes/dialog.d.ts +2 -0
  102. package/dist/preset/recipes/dialog.d.ts.map +1 -0
  103. package/dist/preset/recipes/drawer.d.ts +2 -0
  104. package/dist/preset/recipes/drawer.d.ts.map +1 -0
  105. package/dist/preset/recipes/field.d.ts +2 -0
  106. package/dist/preset/recipes/field.d.ts.map +1 -0
  107. package/dist/preset/recipes/group.d.ts +2 -0
  108. package/dist/preset/recipes/group.d.ts.map +1 -0
  109. package/dist/preset/recipes/heading.d.ts +2 -0
  110. package/dist/preset/recipes/heading.d.ts.map +1 -0
  111. package/dist/preset/recipes/index.d.ts +28 -0
  112. package/dist/preset/recipes/index.d.ts.map +1 -0
  113. package/dist/preset/recipes/input-addon.d.ts +2 -0
  114. package/dist/preset/recipes/input-addon.d.ts.map +1 -0
  115. package/dist/preset/recipes/input-group.d.ts +2 -0
  116. package/dist/preset/recipes/input-group.d.ts.map +1 -0
  117. package/dist/preset/recipes/input.d.ts +114 -0
  118. package/dist/preset/recipes/input.d.ts.map +1 -0
  119. package/dist/preset/recipes/popover.d.ts +2 -0
  120. package/dist/preset/recipes/popover.d.ts.map +1 -0
  121. package/dist/preset/recipes/progress.d.ts +2 -0
  122. package/dist/preset/recipes/progress.d.ts.map +1 -0
  123. package/dist/preset/recipes/radio-group.d.ts +2 -0
  124. package/dist/preset/recipes/radio-group.d.ts.map +1 -0
  125. package/dist/preset/recipes/select.d.ts +2 -0
  126. package/dist/preset/recipes/select.d.ts.map +1 -0
  127. package/dist/preset/recipes/skeleton.d.ts +2 -0
  128. package/dist/preset/recipes/skeleton.d.ts.map +1 -0
  129. package/dist/preset/recipes/slider.d.ts +2 -0
  130. package/dist/preset/recipes/slider.d.ts.map +1 -0
  131. package/dist/preset/recipes/spinner.d.ts +2 -0
  132. package/dist/preset/recipes/spinner.d.ts.map +1 -0
  133. package/dist/preset/recipes/switch.d.ts +2 -0
  134. package/dist/preset/recipes/switch.d.ts.map +1 -0
  135. package/dist/preset/recipes/tabs.d.ts +2 -0
  136. package/dist/preset/recipes/tabs.d.ts.map +1 -0
  137. package/dist/preset/recipes/textarea.d.ts +2 -0
  138. package/dist/preset/recipes/textarea.d.ts.map +1 -0
  139. package/dist/preset/recipes/toast.d.ts +2 -0
  140. package/dist/preset/recipes/toast.d.ts.map +1 -0
  141. package/dist/preset/recipes/tooltip.d.ts +2 -0
  142. package/dist/preset/recipes/tooltip.d.ts.map +1 -0
  143. package/dist/preset/semantic-tokens.d.ts +197 -0
  144. package/dist/preset/semantic-tokens.d.ts.map +1 -0
  145. package/dist/preset/shadows.d.ts +49 -0
  146. package/dist/preset/shadows.d.ts.map +1 -0
  147. package/dist/preset/text-styles.d.ts +6 -0
  148. package/dist/preset/text-styles.d.ts.map +1 -0
  149. package/dist/recipes/button.recipe.d.ts +2 -0
  150. package/dist/recipes/button.recipe.d.ts.map +1 -0
  151. package/dist/recipes/card.recipe.d.ts +2 -0
  152. package/dist/recipes/card.recipe.d.ts.map +1 -0
  153. package/dist/recipes/dialog.recipe.d.ts +2 -0
  154. package/dist/recipes/dialog.recipe.d.ts.map +1 -0
  155. package/dist/recipes/icon-button.recipe.d.ts +2 -0
  156. package/dist/recipes/icon-button.recipe.d.ts.map +1 -0
  157. package/dist/recipes/index.d.ts +7 -0
  158. package/dist/recipes/index.d.ts.map +1 -0
  159. package/dist/recipes/input.recipe.d.ts +2 -0
  160. package/dist/recipes/input.recipe.d.ts.map +1 -0
  161. package/dist/recipes/switch.recipe.d.ts +2 -0
  162. package/dist/recipes/switch.recipe.d.ts.map +1 -0
  163. package/dist/stories/foundations/components/ColorSwatch.d.ts +21 -0
  164. package/dist/stories/foundations/components/ColorSwatch.d.ts.map +1 -0
  165. package/dist/stories/foundations/components/ElevationCard.d.ts +11 -0
  166. package/dist/stories/foundations/components/ElevationCard.d.ts.map +1 -0
  167. package/dist/stories/foundations/components/SpacingBox.d.ts +11 -0
  168. package/dist/stories/foundations/components/SpacingBox.d.ts.map +1 -0
  169. package/dist/stories/foundations/components/TypeSpecimen.d.ts +12 -0
  170. package/dist/stories/foundations/components/TypeSpecimen.d.ts.map +1 -0
  171. package/dist/utils/cn.d.ts +6 -0
  172. package/dist/utils/cn.d.ts.map +1 -0
  173. package/package.json +4 -2
  174. package/src/components/AbsoluteCenter.tsx +7 -0
  175. package/src/components/Accordion.tsx +27 -0
  176. package/src/components/Avatar.tsx +55 -0
  177. package/src/components/Badge.tsx +29 -0
  178. package/src/components/Button.tsx +116 -0
  179. package/src/components/Card.tsx +24 -0
  180. package/src/components/Checkbox.tsx +48 -0
  181. package/src/components/CloseButton.tsx +21 -0
  182. package/src/components/Dialog.tsx +25 -0
  183. package/src/components/Drawer.tsx +29 -0
  184. package/src/components/Group.tsx +7 -0
  185. package/src/components/Heading.tsx +9 -0
  186. package/src/components/Icon.tsx +6 -0
  187. package/src/components/IconButton.tsx +10 -0
  188. package/src/components/Input.tsx +7 -0
  189. package/src/components/InputAddon.tsx +7 -0
  190. package/src/components/InputGroup.tsx +44 -0
  191. package/src/components/Loader.tsx +71 -0
  192. package/src/components/Popover.tsx +34 -0
  193. package/src/components/Progress.tsx +19 -0
  194. package/src/components/RadioGroup.tsx +21 -0
  195. package/src/components/Select.tsx +70 -0
  196. package/src/components/Skeleton.tsx +37 -0
  197. package/src/components/Slider.tsx +156 -0
  198. package/src/components/Spinner.tsx +7 -0
  199. package/src/components/Switch.tsx +19 -0
  200. package/src/components/Tabs.tsx +17 -0
  201. package/src/components/Textarea.tsx +7 -0
  202. package/src/components/Toast.tsx +96 -0
  203. package/src/components/Tooltip.tsx +65 -0
  204. package/src/components/index.ts +48 -0
  205. package/src/contracts/design-language.contract.ts +198 -0
  206. package/src/global.css +4 -0
  207. package/src/index.ts +18 -0
  208. package/src/languages/index.ts +9 -0
  209. package/src/languages/material3.language.ts +379 -0
  210. package/src/languages/transform.ts +131 -0
  211. package/src/main.ts +33 -0
  212. package/src/preset/colors/index.ts +14 -0
  213. package/src/preset/colors/m3-error.ts +76 -0
  214. package/src/preset/colors/m3-neutral.ts +89 -0
  215. package/src/preset/colors/m3-primary.ts +107 -0
  216. package/src/preset/index.ts +189 -0
  217. package/src/preset/layer-styles.ts +14 -0
  218. package/src/preset/recipes/absolute-center.ts +37 -0
  219. package/src/preset/recipes/accordion.ts +92 -0
  220. package/src/preset/recipes/avatar.ts +152 -0
  221. package/src/preset/recipes/badge.ts +49 -0
  222. package/src/preset/recipes/button.ts +110 -0
  223. package/src/preset/recipes/card.ts +69 -0
  224. package/src/preset/recipes/checkbox.ts +109 -0
  225. package/src/preset/recipes/dialog.ts +157 -0
  226. package/src/preset/recipes/drawer.ts +203 -0
  227. package/src/preset/recipes/field.ts +40 -0
  228. package/src/preset/recipes/group.ts +77 -0
  229. package/src/preset/recipes/heading.ts +26 -0
  230. package/src/preset/recipes/index.ts +40 -0
  231. package/src/preset/recipes/input-addon.ts +42 -0
  232. package/src/preset/recipes/input-group.ts +66 -0
  233. package/src/preset/recipes/input.ts +87 -0
  234. package/src/preset/recipes/popover.ts +77 -0
  235. package/src/preset/recipes/progress.ts +120 -0
  236. package/src/preset/recipes/radio-group.ts +99 -0
  237. package/src/preset/recipes/select.ts +175 -0
  238. package/src/preset/recipes/skeleton.ts +64 -0
  239. package/src/preset/recipes/slider.ts +174 -0
  240. package/src/preset/recipes/spinner.ts +33 -0
  241. package/src/preset/recipes/switch.ts +136 -0
  242. package/src/preset/recipes/tabs.ts +177 -0
  243. package/src/preset/recipes/textarea.ts +82 -0
  244. package/src/preset/recipes/toast.ts +51 -0
  245. package/src/preset/recipes/tooltip.ts +38 -0
  246. package/src/preset/semantic-tokens.ts +75 -0
  247. package/src/preset/shadows.ts +50 -0
  248. package/src/preset/text-styles.ts +21 -0
  249. package/src/recipes/button.recipe.ts +120 -0
  250. package/src/recipes/card.recipe.ts +50 -0
  251. package/src/recipes/dialog.recipe.ts +130 -0
  252. package/src/recipes/icon-button.recipe.ts +96 -0
  253. package/src/recipes/index.ts +6 -0
  254. package/src/recipes/input.recipe.ts +93 -0
  255. package/src/recipes/switch.recipe.ts +117 -0
  256. package/src/stories/foundations/Colors.mdx +380 -0
  257. package/src/stories/foundations/Elevation.mdx +292 -0
  258. package/src/stories/foundations/Spacing.mdx +223 -0
  259. package/src/stories/foundations/Typography.mdx +264 -0
  260. package/src/stories/foundations/components/ColorSwatch.tsx +166 -0
  261. package/src/stories/foundations/components/ElevationCard.tsx +81 -0
  262. package/src/stories/foundations/components/SpacingBox.tsx +94 -0
  263. package/src/stories/foundations/components/TypeSpecimen.tsx +117 -0
  264. package/src/test/setup.ts +12 -0
  265. package/src/test/vitest.d.ts +29 -0
  266. package/src/utils/cn.ts +8 -0
  267. package/src/vite-env.d.ts +1 -0
  268. package/dist/index.d.cts +0 -21506
@@ -0,0 +1,379 @@
1
+ import type { DesignLanguageContract } from '../contracts/design-language.contract';
2
+
3
+ /**
4
+ * Material Design 3 Language Implementation
5
+ *
6
+ * Source color: #63A002 (TastyMakers green)
7
+ * Generated via Material Theme Builder plugin 2024-12-24
8
+ */
9
+ export const material3Language: DesignLanguageContract = {
10
+ name: 'material3',
11
+ version: '1.0.0',
12
+
13
+ colors: {
14
+ // From Material Theme Builder export
15
+ primary: {
16
+ 0: '#000000',
17
+ 10: '#102000',
18
+ 20: '#1F3700',
19
+ 30: '#2F4F00',
20
+ 40: '#3F6900',
21
+ 50: '#518500',
22
+ 60: '#64A104',
23
+ 70: '#7DBD2A',
24
+ 80: '#97D945',
25
+ 90: '#B2F65F',
26
+ 95: '#D2FF9B',
27
+ 99: '#F9FFE9',
28
+ 100: '#FFFFFF'
29
+ },
30
+ secondary: {
31
+ 0: '#000000',
32
+ 10: '#121F04',
33
+ 20: '#263515',
34
+ 30: '#3C4C2A',
35
+ 40: '#54643F',
36
+ 50: '#6C7D56',
37
+ 60: '#85976E',
38
+ 70: '#A0B187',
39
+ 80: '#BBCDA1',
40
+ 90: '#D7E9BB',
41
+ 95: '#E5F7C9',
42
+ 99: '#F9FFE9',
43
+ 100: '#FFFFFF'
44
+ },
45
+ tertiary: {
46
+ 0: '#000000',
47
+ 10: '#00201E',
48
+ 20: '#003735',
49
+ 30: '#00504C',
50
+ 40: '#046A66',
51
+ 50: '#30837F',
52
+ 60: '#4D9D98',
53
+ 70: '#69B8B3',
54
+ 80: '#85D4CF',
55
+ 90: '#A1F1EB',
56
+ 95: '#B0FFF9',
57
+ 99: '#F2FFFD',
58
+ 100: '#FFFFFF'
59
+ },
60
+ neutral: {
61
+ 0: '#000000',
62
+ 10: '#1B1C18',
63
+ 20: '#30312C',
64
+ 30: '#464742',
65
+ 40: '#5E5F59',
66
+ 50: '#777771',
67
+ 60: '#91918B',
68
+ 70: '#ABACA5',
69
+ 80: '#C7C7C0',
70
+ 90: '#E3E3DB',
71
+ 95: '#F2F1E9',
72
+ 99: '#FDFCF5',
73
+ 100: '#FFFFFF'
74
+ },
75
+ neutralVariant: {
76
+ 0: '#000000',
77
+ 10: '#191D14',
78
+ 20: '#2E3228',
79
+ 30: '#44483D',
80
+ 40: '#5C6054',
81
+ 50: '#75796C',
82
+ 60: '#8F9285',
83
+ 70: '#A9AD9F',
84
+ 80: '#C5C8BA',
85
+ 90: '#E1E4D5',
86
+ 95: '#EFF2E3',
87
+ 99: '#FBFEEE',
88
+ 100: '#FFFFFF'
89
+ },
90
+ error: {
91
+ 0: '#000000',
92
+ 10: '#410E0B',
93
+ 20: '#601410',
94
+ 30: '#8C1D18',
95
+ 40: '#B3261E',
96
+ 50: '#DC362E',
97
+ 60: '#E46962',
98
+ 70: '#EC928E',
99
+ 80: '#F2B8B5',
100
+ 90: '#F9DEDC',
101
+ 95: '#FCEEEE',
102
+ 99: '#FFFBF9',
103
+ 100: '#FFFFFF'
104
+ }
105
+ },
106
+
107
+ semantic: {
108
+ // Light theme from Material Theme Builder
109
+ primary: '#4C662B',
110
+ onPrimary: '#FFFFFF',
111
+ primaryContainer: '#CDEDA3',
112
+ onPrimaryContainer: '#354E16',
113
+
114
+ secondary: '#586249',
115
+ onSecondary: '#FFFFFF',
116
+ secondaryContainer: '#DCE7C8',
117
+ onSecondaryContainer: '#404A33',
118
+
119
+ tertiary: '#386663',
120
+ onTertiary: '#FFFFFF',
121
+ tertiaryContainer: '#BCECE7',
122
+ onTertiaryContainer: '#1F4E4B',
123
+
124
+ error: '#BA1A1A',
125
+ onError: '#FFFFFF',
126
+ errorContainer: '#FFDAD6',
127
+ onErrorContainer: '#93000A',
128
+
129
+ surface: '#F9FAEF',
130
+ onSurface: '#1A1C16',
131
+ surfaceVariant: '#E1E4D5',
132
+ onSurfaceVariant: '#44483D',
133
+
134
+ surfaceContainerLowest: '#FFFFFF',
135
+ surfaceContainerLow: '#F3F4E9',
136
+ surfaceContainer: '#EEEFE3',
137
+ surfaceContainerHigh: '#E8E9DE',
138
+ surfaceContainerHighest: '#E2E3D8',
139
+
140
+ outline: '#75796C',
141
+ outlineVariant: '#C5C8BA',
142
+
143
+ inverseSurface: '#2F312A',
144
+ inverseOnSurface: '#F1F2E6',
145
+ inversePrimary: '#B1D18A',
146
+
147
+ background: '#F9FAEF',
148
+ onBackground: '#1A1C16',
149
+
150
+ scrim: '#000000',
151
+ shadow: '#000000'
152
+ },
153
+
154
+ // Dark theme semantic colors (for reference/dark mode implementation)
155
+ semanticDark: {
156
+ primary: '#B1D18A',
157
+ onPrimary: '#1F3701',
158
+ primaryContainer: '#354E16',
159
+ onPrimaryContainer: '#CDEDA3',
160
+
161
+ secondary: '#BFCBAD',
162
+ onSecondary: '#2A331E',
163
+ secondaryContainer: '#404A33',
164
+ onSecondaryContainer: '#DCE7C8',
165
+
166
+ tertiary: '#A0D0CB',
167
+ onTertiary: '#003735',
168
+ tertiaryContainer: '#1F4E4B',
169
+ onTertiaryContainer: '#BCECE7',
170
+
171
+ error: '#FFB4AB',
172
+ onError: '#690005',
173
+ errorContainer: '#93000A',
174
+ onErrorContainer: '#FFDAD6',
175
+
176
+ surface: '#12140E',
177
+ onSurface: '#E2E3D8',
178
+ surfaceVariant: '#44483D',
179
+ onSurfaceVariant: '#C5C8BA',
180
+
181
+ surfaceContainerLowest: '#0C0F09',
182
+ surfaceContainerLow: '#1A1C16',
183
+ surfaceContainer: '#1E201A',
184
+ surfaceContainerHigh: '#282B24',
185
+ surfaceContainerHighest: '#33362E',
186
+
187
+ outline: '#8F9285',
188
+ outlineVariant: '#44483D',
189
+
190
+ inverseSurface: '#E2E3D8',
191
+ inverseOnSurface: '#2F312A',
192
+ inversePrimary: '#4C662B',
193
+
194
+ background: '#12140E',
195
+ onBackground: '#E2E3D8',
196
+
197
+ scrim: '#000000',
198
+ shadow: '#000000'
199
+ },
200
+
201
+ typography: {
202
+ fonts: {
203
+ display: '"Fraunces", Georgia, serif',
204
+ body: '"Poppins", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
205
+ mono: '"JetBrains Mono", "Fira Code", Consolas, monospace'
206
+ },
207
+ scale: {
208
+ displayLarge: {
209
+ fontSize: '57px',
210
+ lineHeight: '64px',
211
+ fontWeight: '400',
212
+ letterSpacing: '-0.25px',
213
+ fontFamily: 'display'
214
+ },
215
+ displayMedium: {
216
+ fontSize: '45px',
217
+ lineHeight: '52px',
218
+ fontWeight: '400',
219
+ letterSpacing: '0px',
220
+ fontFamily: 'display'
221
+ },
222
+ displaySmall: {
223
+ fontSize: '36px',
224
+ lineHeight: '44px',
225
+ fontWeight: '400',
226
+ letterSpacing: '0px',
227
+ fontFamily: 'display'
228
+ },
229
+ headlineLarge: {
230
+ fontSize: '32px',
231
+ lineHeight: '40px',
232
+ fontWeight: '400',
233
+ letterSpacing: '0px',
234
+ fontFamily: 'display'
235
+ },
236
+ headlineMedium: {
237
+ fontSize: '28px',
238
+ lineHeight: '36px',
239
+ fontWeight: '400',
240
+ letterSpacing: '0px',
241
+ fontFamily: 'display'
242
+ },
243
+ headlineSmall: {
244
+ fontSize: '24px',
245
+ lineHeight: '32px',
246
+ fontWeight: '400',
247
+ letterSpacing: '0px',
248
+ fontFamily: 'display'
249
+ },
250
+ titleLarge: {
251
+ fontSize: '22px',
252
+ lineHeight: '28px',
253
+ fontWeight: '500',
254
+ letterSpacing: '0px',
255
+ fontFamily: 'body'
256
+ },
257
+ titleMedium: {
258
+ fontSize: '16px',
259
+ lineHeight: '24px',
260
+ fontWeight: '500',
261
+ letterSpacing: '0.15px',
262
+ fontFamily: 'body'
263
+ },
264
+ titleSmall: {
265
+ fontSize: '14px',
266
+ lineHeight: '20px',
267
+ fontWeight: '500',
268
+ letterSpacing: '0.1px',
269
+ fontFamily: 'body'
270
+ },
271
+ bodyLarge: {
272
+ fontSize: '16px',
273
+ lineHeight: '24px',
274
+ fontWeight: '400',
275
+ letterSpacing: '0.5px',
276
+ fontFamily: 'body'
277
+ },
278
+ bodyMedium: {
279
+ fontSize: '14px',
280
+ lineHeight: '20px',
281
+ fontWeight: '400',
282
+ letterSpacing: '0.25px',
283
+ fontFamily: 'body'
284
+ },
285
+ bodySmall: {
286
+ fontSize: '12px',
287
+ lineHeight: '16px',
288
+ fontWeight: '400',
289
+ letterSpacing: '0.4px',
290
+ fontFamily: 'body'
291
+ },
292
+ labelLarge: {
293
+ fontSize: '14px',
294
+ lineHeight: '20px',
295
+ fontWeight: '500',
296
+ letterSpacing: '0.1px',
297
+ fontFamily: 'body'
298
+ },
299
+ labelMedium: {
300
+ fontSize: '12px',
301
+ lineHeight: '16px',
302
+ fontWeight: '500',
303
+ letterSpacing: '0.5px',
304
+ fontFamily: 'body'
305
+ },
306
+ labelSmall: {
307
+ fontSize: '11px',
308
+ lineHeight: '16px',
309
+ fontWeight: '500',
310
+ letterSpacing: '0.5px',
311
+ fontFamily: 'body'
312
+ }
313
+ }
314
+ },
315
+
316
+ spacing: {
317
+ none: '0px',
318
+ xxs: '2px',
319
+ xs: '4px',
320
+ sm: '8px',
321
+ md: '16px',
322
+ lg: '24px',
323
+ xl: '32px',
324
+ xxl: '48px',
325
+ xxxl: '64px'
326
+ },
327
+
328
+ shape: {
329
+ radii: {
330
+ none: '0px',
331
+ extraSmall: '4px',
332
+ small: '8px',
333
+ medium: '12px',
334
+ large: '16px',
335
+ extraLarge: '28px',
336
+ full: '9999px'
337
+ },
338
+ style: 'rounded'
339
+ },
340
+
341
+ elevation: {
342
+ levels: {
343
+ level0: 'none',
344
+ level1: '0px 1px 2px rgba(0, 0, 0, 0.3), 0px 1px 3px 1px rgba(0, 0, 0, 0.15)',
345
+ level2: '0px 1px 2px rgba(0, 0, 0, 0.3), 0px 2px 6px 2px rgba(0, 0, 0, 0.15)',
346
+ level3: '0px 4px 8px 3px rgba(0, 0, 0, 0.15), 0px 1px 3px rgba(0, 0, 0, 0.3)',
347
+ level4: '0px 6px 10px 4px rgba(0, 0, 0, 0.15), 0px 2px 3px rgba(0, 0, 0, 0.3)',
348
+ level5: '0px 8px 12px 6px rgba(0, 0, 0, 0.15), 0px 4px 4px rgba(0, 0, 0, 0.3)'
349
+ },
350
+ style: 'shadow'
351
+ },
352
+
353
+ motion: {
354
+ durations: {
355
+ instant: '0ms',
356
+ fast: '100ms',
357
+ normal: '200ms',
358
+ slow: '300ms',
359
+ slower: '500ms'
360
+ },
361
+ easings: {
362
+ standard: 'cubic-bezier(0.2, 0, 0, 1)',
363
+ standardDecelerate: 'cubic-bezier(0, 0, 0, 1)',
364
+ standardAccelerate: 'cubic-bezier(0.3, 0, 1, 1)',
365
+ emphasized: 'cubic-bezier(0.2, 0, 0, 1)',
366
+ emphasizedDecelerate: 'cubic-bezier(0.05, 0.7, 0.1, 1)',
367
+ emphasizedAccelerate: 'cubic-bezier(0.3, 0, 0.8, 0.15)'
368
+ },
369
+ style: 'expressive'
370
+ },
371
+
372
+ border: {
373
+ widths: {
374
+ thin: '1px',
375
+ medium: '2px',
376
+ thick: '4px'
377
+ }
378
+ }
379
+ };
@@ -0,0 +1,131 @@
1
+ import type { DesignLanguageContract, TonalPalette, SemanticColors } from '../contracts/design-language.contract';
2
+
3
+ /**
4
+ * Transforms a DesignLanguageContract into Panda CSS theme configuration
5
+ */
6
+ export function transformToPandaTheme(language: DesignLanguageContract) {
7
+ return {
8
+ tokens: transformTokens(language),
9
+ semanticTokens: transformSemanticTokens(language),
10
+ textStyles: transformTextStyles(language)
11
+ };
12
+ }
13
+
14
+ function transformTokens(language: DesignLanguageContract) {
15
+ return {
16
+ colors: transformColorPalettes(language.colors as unknown as Record<string, TonalPalette>),
17
+ fonts: {
18
+ display: { value: language.typography.fonts.display },
19
+ body: { value: language.typography.fonts.body },
20
+ mono: { value: language.typography.fonts.mono }
21
+ },
22
+ fontSizes: extractFontSizes(language.typography.scale as unknown as Record<string, { fontSize: string }>),
23
+ lineHeights: extractLineHeights(language.typography.scale as unknown as Record<string, { lineHeight: string }>),
24
+ fontWeights: extractFontWeights(language.typography.scale as unknown as Record<string, { fontWeight: string }>),
25
+ letterSpacings: extractLetterSpacings(language.typography.scale as unknown as Record<string, { letterSpacing: string }>),
26
+ spacing: objectToTokens(language.spacing as unknown as Record<string, string>),
27
+ radii: objectToTokens(language.shape.radii as unknown as Record<string, string>),
28
+ shadows: objectToTokens(language.elevation.levels as unknown as Record<string, string>),
29
+ durations: objectToTokens(language.motion.durations as unknown as Record<string, string>),
30
+ easings: objectToTokens(language.motion.easings as unknown as Record<string, string>),
31
+ borderWidths: objectToTokens(language.border.widths as unknown as Record<string, string>)
32
+ };
33
+ }
34
+
35
+ function transformSemanticTokens(language: DesignLanguageContract) {
36
+ const light = language.semantic;
37
+ const dark = language.semanticDark || light; // Fallback to light if no dark
38
+
39
+ return {
40
+ colors: Object.fromEntries(
41
+ Object.entries(light).map(([key, lightValue]) => [
42
+ key,
43
+ {
44
+ value: {
45
+ base: lightValue,
46
+ _dark: dark[key as keyof SemanticColors] || lightValue
47
+ }
48
+ }
49
+ ])
50
+ )
51
+ };
52
+ }
53
+
54
+ function transformTextStyles(language: DesignLanguageContract) {
55
+ const scale = language.typography.scale;
56
+
57
+ return Object.fromEntries(
58
+ Object.entries(scale).map(([name, style]) => [
59
+ name,
60
+ {
61
+ value: {
62
+ fontFamily: style.fontFamily || 'body',
63
+ fontSize: style.fontSize,
64
+ lineHeight: style.lineHeight,
65
+ fontWeight: style.fontWeight,
66
+ letterSpacing: style.letterSpacing
67
+ }
68
+ }
69
+ ])
70
+ );
71
+ }
72
+
73
+ function transformColorPalettes(palettes: Record<string, TonalPalette>) {
74
+ return Object.fromEntries(
75
+ Object.entries(palettes).map(([name, palette]) => [
76
+ name,
77
+ Object.fromEntries(
78
+ Object.entries(palette).map(([tone, value]) => [
79
+ tone,
80
+ { value }
81
+ ])
82
+ )
83
+ ])
84
+ );
85
+ }
86
+
87
+ function objectToTokens<T extends Record<string, string>>(obj: T) {
88
+ return Object.fromEntries(
89
+ Object.entries(obj).map(([key, value]) => [key, { value }])
90
+ );
91
+ }
92
+
93
+ function extractFontSizes(scale: Record<string, { fontSize: string }>) {
94
+ return Object.fromEntries(
95
+ Object.entries(scale).map(([name, style]) => [
96
+ name,
97
+ { value: style.fontSize }
98
+ ])
99
+ );
100
+ }
101
+
102
+ function extractLineHeights(scale: Record<string, { lineHeight: string }>) {
103
+ return Object.fromEntries(
104
+ Object.entries(scale).map(([name, style]) => [
105
+ name,
106
+ { value: style.lineHeight }
107
+ ])
108
+ );
109
+ }
110
+
111
+ function extractFontWeights(scale: Record<string, { fontWeight: string }>) {
112
+ const weights = new Map<string, string>();
113
+ Object.values(scale).forEach(style => {
114
+ weights.set(style.fontWeight, style.fontWeight);
115
+ });
116
+ return Object.fromEntries(
117
+ Array.from(weights.entries()).map(([key, value]) => [
118
+ key,
119
+ { value }
120
+ ])
121
+ );
122
+ }
123
+
124
+ function extractLetterSpacings(scale: Record<string, { letterSpacing: string }>) {
125
+ return Object.fromEntries(
126
+ Object.entries(scale).map(([name, style]) => [
127
+ name,
128
+ { value: style.letterSpacing }
129
+ ])
130
+ );
131
+ }
package/src/main.ts ADDED
@@ -0,0 +1,33 @@
1
+ //TIP With Search Everywhere, you can find any action, file, or symbol in your project. Press <shortcut actionId="Shift"/> <shortcut actionId="Shift"/>, type in <b>terminal</b>, and press <shortcut actionId="EditorEnter"/>. Then run <shortcut raw="npm run dev"/> in the terminal and click the link in its output to open the app in the browser.
2
+ export function setupCounter(element: HTMLElement) {
3
+ //TIP Try <shortcut actionId="GotoDeclaration"/> on <shortcut raw="counter"/> to see its usages. You can also use this shortcut to jump to a declaration – try it on <shortcut raw="counter"/> on line 13.
4
+ let counter = 0;
5
+
6
+ const adjustCounterValue = (value: number) => {
7
+ if (value >= 100) return value - 100;
8
+ if (value <= -100) return value + 100;
9
+ return value;
10
+ };
11
+
12
+ const setCounter = (value: number) => {
13
+ counter = adjustCounterValue(value);
14
+ //TIP WebStorm has lots of inspections to help you catch issues in your project. It also has quick fixes to help you resolve them. Press <shortcut actionId="ShowIntentionActions"/> on <shortcut raw="text"/> and choose <b>Inline variable</b> to clean up the redundant code.
15
+ const text = `${counter}`;
16
+ element.innerHTML = text;
17
+ };
18
+
19
+ document.getElementById('increaseByOne')?.addEventListener('click', () => setCounter(counter + 1));
20
+ document.getElementById('decreaseByOne')?.addEventListener('click', () => setCounter(counter - 1));
21
+ document.getElementById('increaseByTwo')?.addEventListener('click', () => setCounter(counter + 2));
22
+
23
+ //TIP In the app running in the browser, you’ll find that clicking <b>-2</b> doesn't work. To fix that, rewrite it using the code from lines 19 - 21 as examples of the logic.
24
+ document.getElementById('decreaseByTwo')
25
+
26
+ //TIP Let’s see how to review and commit your changes. Press <shortcut actionId="GotoAction"/> and look for <b>commit</b>. Try checking the diff for a file – double-click main.ts to do that.
27
+ setCounter(0);
28
+ }
29
+
30
+ //TIP To find text strings in your project, you can use the <shortcut actionId="FindInPath"/> shortcut. Press it and type in <b>counter</b> – you’ll get all matches in one place.
31
+ setupCounter(document.getElementById('counter-value') as HTMLElement);
32
+
33
+ //TIP There's much more in WebStorm to help you be more productive. Press <shortcut actionId="Shift"/> <shortcut actionId="Shift"/> and search for <b>Learn WebStorm</b> to open our learning hub with more things for you to try.
@@ -0,0 +1,14 @@
1
+ import { primary } from './m3-primary';
2
+ import { neutral } from './m3-neutral';
3
+ import { error } from './m3-error';
4
+
5
+ // Export all M3 colors mapped to Park UI structure
6
+ export const colors = {
7
+ primary,
8
+ neutral,
9
+ error,
10
+ // Alias gray to neutral (Park UI expects this)
11
+ gray: neutral,
12
+ // Map red to error for Park UI compatibility
13
+ red: error,
14
+ };
@@ -0,0 +1,76 @@
1
+ import { defineSemanticTokens } from '@pandacss/dev';
2
+ import { material3Language } from '../../languages/material3.language';
3
+
4
+ const m3 = material3Language.colors.error;
5
+
6
+ export const error = defineSemanticTokens.colors({
7
+ '1': { value: { base: m3[99], _dark: m3[10] } },
8
+ '2': { value: { base: m3[95], _dark: m3[20] } },
9
+ '3': { value: { base: m3[90], _dark: m3[30] } },
10
+ '4': { value: { base: m3[80], _dark: m3[30] } },
11
+ '5': { value: { base: m3[70], _dark: m3[40] } },
12
+ '6': { value: { base: m3[60], _dark: m3[40] } },
13
+ '7': { value: { base: m3[50], _dark: m3[50] } },
14
+ '8': { value: { base: m3[40], _dark: m3[60] } },
15
+ '9': { value: { base: m3[40], _dark: m3[80] } },
16
+ '10': { value: { base: m3[30], _dark: m3[70] } },
17
+ '11': { value: { base: m3[30], _dark: m3[90] } },
18
+ '12': { value: { base: m3[10], _dark: m3[95] } },
19
+
20
+ // Alpha variants
21
+ a1: { value: { base: `${m3[40]}08`, _dark: `${m3[80]}08` } },
22
+ a2: { value: { base: `${m3[40]}10`, _dark: `${m3[80]}10` } },
23
+ a3: { value: { base: `${m3[40]}18`, _dark: `${m3[80]}18` } },
24
+ a4: { value: { base: `${m3[40]}24`, _dark: `${m3[80]}24` } },
25
+ a5: { value: { base: `${m3[40]}32`, _dark: `${m3[80]}32` } },
26
+ a6: { value: { base: `${m3[40]}48`, _dark: `${m3[80]}48` } },
27
+ a7: { value: { base: `${m3[40]}64`, _dark: `${m3[80]}64` } },
28
+ a8: { value: { base: `${m3[40]}80`, _dark: `${m3[80]}80` } },
29
+ a9: { value: { base: `${m3[40]}96`, _dark: `${m3[80]}96` } },
30
+ a10: { value: { base: `${m3[40]}AA`, _dark: `${m3[80]}AA` } },
31
+ a11: { value: { base: `${m3[40]}CC`, _dark: `${m3[80]}CC` } },
32
+ a12: { value: { base: `${m3[40]}EE`, _dark: `${m3[80]}EE` } },
33
+
34
+ // Semantic variants
35
+ solid: {
36
+ bg: {
37
+ DEFAULT: { value: { base: '{colors.error.9}', _dark: '{colors.error.9}' } },
38
+ hover: { value: { base: '{colors.error.10}', _dark: '{colors.error.10}' } },
39
+ },
40
+ fg: { DEFAULT: { value: { base: 'white', _dark: 'white' } } },
41
+ },
42
+ subtle: {
43
+ bg: {
44
+ DEFAULT: { value: { base: '{colors.error.a3}', _dark: '{colors.error.a3}' } },
45
+ hover: { value: { base: '{colors.error.a4}', _dark: '{colors.error.a4}' } },
46
+ active: { value: { base: '{colors.error.a5}', _dark: '{colors.error.a5}' } },
47
+ },
48
+ fg: { DEFAULT: { value: { base: '{colors.error.a11}', _dark: '{colors.error.a11}' } } },
49
+ },
50
+ surface: {
51
+ bg: {
52
+ DEFAULT: { value: { base: '{colors.error.a2}', _dark: '{colors.error.a2}' } },
53
+ active: { value: { base: '{colors.error.a3}', _dark: '{colors.error.a3}' } },
54
+ },
55
+ border: {
56
+ DEFAULT: { value: { base: '{colors.error.a6}', _dark: '{colors.error.a6}' } },
57
+ hover: { value: { base: '{colors.error.a7}', _dark: '{colors.error.a7}' } },
58
+ },
59
+ fg: { DEFAULT: { value: { base: '{colors.error.a11}', _dark: '{colors.error.a11}' } } },
60
+ },
61
+ outline: {
62
+ bg: {
63
+ hover: { value: { base: '{colors.error.a2}', _dark: '{colors.error.a2}' } },
64
+ active: { value: { base: '{colors.error.a3}', _dark: '{colors.error.a3}' } },
65
+ },
66
+ border: { DEFAULT: { value: { base: '{colors.error.a7}', _dark: '{colors.error.a7}' } } },
67
+ fg: { DEFAULT: { value: { base: '{colors.error.a11}', _dark: '{colors.error.a11}' } } },
68
+ },
69
+ plain: {
70
+ bg: {
71
+ hover: { value: { base: '{colors.error.a3}', _dark: '{colors.error.a3}' } },
72
+ active: { value: { base: '{colors.error.a4}', _dark: '{colors.error.a4}' } },
73
+ },
74
+ fg: { DEFAULT: { value: { base: '{colors.error.a11}', _dark: '{colors.error.a11}' } } },
75
+ },
76
+ });