@gv-tech/design-system 1.0.0 → 1.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 (335) hide show
  1. package/.agent/skills/dogfood-components/SKILL.md +34 -0
  2. package/.agent/skills/maintain-component/SKILL.md +42 -0
  3. package/.prettierignore +2 -0
  4. package/CHANGELOG.md +24 -0
  5. package/dist/App.d.ts.map +1 -1
  6. package/dist/components/docs/Footer.d.ts.map +1 -1
  7. package/dist/components/docs/PropsTable.d.ts +13 -0
  8. package/dist/components/docs/PropsTable.d.ts.map +1 -0
  9. package/dist/components/docs/Sidebar.d.ts.map +1 -1
  10. package/dist/components/docs/index.d.ts +1 -0
  11. package/dist/components/docs/index.d.ts.map +1 -1
  12. package/dist/components/ui/accordion.test.d.ts +2 -0
  13. package/dist/components/ui/accordion.test.d.ts.map +1 -0
  14. package/dist/components/ui/alert-dialog.test.d.ts +2 -0
  15. package/dist/components/ui/alert-dialog.test.d.ts.map +1 -0
  16. package/dist/components/ui/alert.test.d.ts +2 -0
  17. package/dist/components/ui/alert.test.d.ts.map +1 -0
  18. package/dist/components/ui/aspect-ratio.test.d.ts +2 -0
  19. package/dist/components/ui/aspect-ratio.test.d.ts.map +1 -0
  20. package/dist/components/ui/avatar.test.d.ts +2 -0
  21. package/dist/components/ui/avatar.test.d.ts.map +1 -0
  22. package/dist/components/ui/badge.test.d.ts +2 -0
  23. package/dist/components/ui/badge.test.d.ts.map +1 -0
  24. package/dist/components/ui/breadcrumb.test.d.ts +2 -0
  25. package/dist/components/ui/breadcrumb.test.d.ts.map +1 -0
  26. package/dist/components/ui/button.test.d.ts +2 -0
  27. package/dist/components/ui/button.test.d.ts.map +1 -0
  28. package/dist/components/ui/calendar.d.ts.map +1 -1
  29. package/dist/components/ui/calendar.test.d.ts +2 -0
  30. package/dist/components/ui/calendar.test.d.ts.map +1 -0
  31. package/dist/components/ui/card.test.d.ts +2 -0
  32. package/dist/components/ui/card.test.d.ts.map +1 -0
  33. package/dist/components/ui/carousel.test.d.ts +2 -0
  34. package/dist/components/ui/carousel.test.d.ts.map +1 -0
  35. package/dist/components/ui/chart.test.d.ts +2 -0
  36. package/dist/components/ui/chart.test.d.ts.map +1 -0
  37. package/dist/components/ui/checkbox.test.d.ts +2 -0
  38. package/dist/components/ui/checkbox.test.d.ts.map +1 -0
  39. package/dist/components/ui/collapsible.test.d.ts +2 -0
  40. package/dist/components/ui/collapsible.test.d.ts.map +1 -0
  41. package/dist/components/ui/command.test.d.ts +2 -0
  42. package/dist/components/ui/command.test.d.ts.map +1 -0
  43. package/dist/components/ui/context-menu.test.d.ts +2 -0
  44. package/dist/components/ui/context-menu.test.d.ts.map +1 -0
  45. package/dist/components/ui/dialog.test.d.ts +2 -0
  46. package/dist/components/ui/dialog.test.d.ts.map +1 -0
  47. package/dist/components/ui/drawer.test.d.ts +2 -0
  48. package/dist/components/ui/drawer.test.d.ts.map +1 -0
  49. package/dist/components/ui/dropdown-menu.test.d.ts +2 -0
  50. package/dist/components/ui/dropdown-menu.test.d.ts.map +1 -0
  51. package/dist/components/ui/form.test.d.ts +2 -0
  52. package/dist/components/ui/form.test.d.ts.map +1 -0
  53. package/dist/components/ui/hover-card.test.d.ts +2 -0
  54. package/dist/components/ui/hover-card.test.d.ts.map +1 -0
  55. package/dist/components/ui/input.test.d.ts +2 -0
  56. package/dist/components/ui/input.test.d.ts.map +1 -0
  57. package/dist/components/ui/label.test.d.ts +2 -0
  58. package/dist/components/ui/label.test.d.ts.map +1 -0
  59. package/dist/components/ui/menubar.test.d.ts +2 -0
  60. package/dist/components/ui/menubar.test.d.ts.map +1 -0
  61. package/dist/components/ui/navigation-menu.test.d.ts +2 -0
  62. package/dist/components/ui/navigation-menu.test.d.ts.map +1 -0
  63. package/dist/components/ui/pagination.test.d.ts +2 -0
  64. package/dist/components/ui/pagination.test.d.ts.map +1 -0
  65. package/dist/components/ui/popover.test.d.ts +2 -0
  66. package/dist/components/ui/popover.test.d.ts.map +1 -0
  67. package/dist/components/ui/progress.d.ts.map +1 -1
  68. package/dist/components/ui/progress.test.d.ts +2 -0
  69. package/dist/components/ui/progress.test.d.ts.map +1 -0
  70. package/dist/components/ui/radio-group.test.d.ts +2 -0
  71. package/dist/components/ui/radio-group.test.d.ts.map +1 -0
  72. package/dist/components/ui/resizable.test.d.ts +2 -0
  73. package/dist/components/ui/resizable.test.d.ts.map +1 -0
  74. package/dist/components/ui/scroll-area.test.d.ts +2 -0
  75. package/dist/components/ui/scroll-area.test.d.ts.map +1 -0
  76. package/dist/components/ui/select.test.d.ts +2 -0
  77. package/dist/components/ui/select.test.d.ts.map +1 -0
  78. package/dist/components/ui/separator.test.d.ts +2 -0
  79. package/dist/components/ui/separator.test.d.ts.map +1 -0
  80. package/dist/components/ui/sheet.test.d.ts +2 -0
  81. package/dist/components/ui/sheet.test.d.ts.map +1 -0
  82. package/dist/components/ui/skeleton.test.d.ts +2 -0
  83. package/dist/components/ui/skeleton.test.d.ts.map +1 -0
  84. package/dist/components/ui/slider.test.d.ts +2 -0
  85. package/dist/components/ui/slider.test.d.ts.map +1 -0
  86. package/dist/components/ui/sonner.test.d.ts +2 -0
  87. package/dist/components/ui/sonner.test.d.ts.map +1 -0
  88. package/dist/components/ui/switch.test.d.ts +2 -0
  89. package/dist/components/ui/switch.test.d.ts.map +1 -0
  90. package/dist/components/ui/table.test.d.ts +2 -0
  91. package/dist/components/ui/table.test.d.ts.map +1 -0
  92. package/dist/components/ui/tabs.test.d.ts +2 -0
  93. package/dist/components/ui/tabs.test.d.ts.map +1 -0
  94. package/dist/components/ui/textarea.test.d.ts +2 -0
  95. package/dist/components/ui/textarea.test.d.ts.map +1 -0
  96. package/dist/components/ui/theme-toggle.d.ts +17 -0
  97. package/dist/components/ui/theme-toggle.d.ts.map +1 -0
  98. package/dist/components/ui/toast.test.d.ts +2 -0
  99. package/dist/components/ui/toast.test.d.ts.map +1 -0
  100. package/dist/components/ui/toggle-group.test.d.ts +2 -0
  101. package/dist/components/ui/toggle-group.test.d.ts.map +1 -0
  102. package/dist/components/ui/toggle.test.d.ts +2 -0
  103. package/dist/components/ui/toggle.test.d.ts.map +1 -0
  104. package/dist/components/ui/tooltip.test.d.ts +2 -0
  105. package/dist/components/ui/tooltip.test.d.ts.map +1 -0
  106. package/dist/index.cjs.js +3 -3
  107. package/dist/index.cjs.js.map +1 -1
  108. package/dist/index.d.ts +2 -0
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.es.js +978 -860
  111. package/dist/index.es.js.map +1 -1
  112. package/dist/lib/tokens.d.ts +54 -0
  113. package/dist/lib/tokens.d.ts.map +1 -0
  114. package/dist/pages/ColorTokensDocs.d.ts +2 -0
  115. package/dist/pages/ColorTokensDocs.d.ts.map +1 -0
  116. package/dist/pages/GettingStarted.d.ts.map +1 -1
  117. package/dist/pages/components/AccordionDocs.d.ts.map +1 -1
  118. package/dist/pages/components/AlertDialogDocs.d.ts.map +1 -1
  119. package/dist/pages/components/AlertDocs.d.ts.map +1 -1
  120. package/dist/pages/components/AspectRatioDocs.d.ts.map +1 -1
  121. package/dist/pages/components/AvatarDocs.d.ts.map +1 -1
  122. package/dist/pages/components/BadgeDocs.d.ts.map +1 -1
  123. package/dist/pages/components/BreadcrumbDocs.d.ts.map +1 -1
  124. package/dist/pages/components/ButtonDocs.d.ts.map +1 -1
  125. package/dist/pages/components/CalendarDocs.d.ts.map +1 -1
  126. package/dist/pages/components/CardDocs.d.ts.map +1 -1
  127. package/dist/pages/components/CarouselDocs.d.ts.map +1 -1
  128. package/dist/pages/components/ChartDocs.d.ts.map +1 -1
  129. package/dist/pages/components/CheckboxDocs.d.ts.map +1 -1
  130. package/dist/pages/components/CollapsibleDocs.d.ts.map +1 -1
  131. package/dist/pages/components/CommandDocs.d.ts.map +1 -1
  132. package/dist/pages/components/ContextMenuDocs.d.ts.map +1 -1
  133. package/dist/pages/components/DialogDocs.d.ts.map +1 -1
  134. package/dist/pages/components/DrawerDocs.d.ts.map +1 -1
  135. package/dist/pages/components/DropdownMenuDocs.d.ts.map +1 -1
  136. package/dist/pages/components/FormDocs.d.ts.map +1 -1
  137. package/dist/pages/components/HoverCardDocs.d.ts.map +1 -1
  138. package/dist/pages/components/InputDocs.d.ts.map +1 -1
  139. package/dist/pages/components/LabelDocs.d.ts.map +1 -1
  140. package/dist/pages/components/MenubarDocs.d.ts.map +1 -1
  141. package/dist/pages/components/NavigationMenuDocs.d.ts.map +1 -1
  142. package/dist/pages/components/PaginationDocs.d.ts.map +1 -1
  143. package/dist/pages/components/PopoverDocs.d.ts.map +1 -1
  144. package/dist/pages/components/ProgressDocs.d.ts.map +1 -1
  145. package/dist/pages/components/RadioGroupDocs.d.ts.map +1 -1
  146. package/dist/pages/components/ResizableDocs.d.ts.map +1 -1
  147. package/dist/pages/components/ScrollAreaDocs.d.ts.map +1 -1
  148. package/dist/pages/components/SelectDocs.d.ts.map +1 -1
  149. package/dist/pages/components/SeparatorDocs.d.ts.map +1 -1
  150. package/dist/pages/components/SheetDocs.d.ts.map +1 -1
  151. package/dist/pages/components/SkeletonDocs.d.ts.map +1 -1
  152. package/dist/pages/components/SliderDocs.d.ts.map +1 -1
  153. package/dist/pages/components/SonnerDocs.d.ts.map +1 -1
  154. package/dist/pages/components/SwitchDocs.d.ts.map +1 -1
  155. package/dist/pages/components/TableDocs.d.ts.map +1 -1
  156. package/dist/pages/components/TabsDocs.d.ts.map +1 -1
  157. package/dist/pages/components/TextareaDocs.d.ts.map +1 -1
  158. package/dist/pages/components/ThemeToggleDocs.d.ts +2 -0
  159. package/dist/pages/components/ThemeToggleDocs.d.ts.map +1 -0
  160. package/dist/pages/components/ToastDocs.d.ts.map +1 -1
  161. package/dist/pages/components/ToggleDocs.d.ts.map +1 -1
  162. package/dist/pages/components/ToggleGroupDocs.d.ts.map +1 -1
  163. package/dist/pages/components/TooltipDocs.d.ts.map +1 -1
  164. package/dist/pages/index.d.ts +2 -0
  165. package/dist/pages/index.d.ts.map +1 -1
  166. package/dist/registry/accordion.test.json +13 -0
  167. package/dist/registry/alert-dialog.test.json +13 -0
  168. package/dist/registry/alert.test.json +13 -0
  169. package/dist/registry/aspect-ratio.test.json +13 -0
  170. package/dist/registry/avatar.test.json +13 -0
  171. package/dist/registry/badge.test.json +13 -0
  172. package/dist/registry/breadcrumb.test.json +13 -0
  173. package/dist/registry/button.test.json +13 -0
  174. package/dist/registry/calendar.json +1 -1
  175. package/dist/registry/calendar.test.json +13 -0
  176. package/dist/registry/card.test.json +13 -0
  177. package/dist/registry/carousel.test.json +13 -0
  178. package/dist/registry/chart.test.json +13 -0
  179. package/dist/registry/checkbox.test.json +13 -0
  180. package/dist/registry/collapsible.test.json +13 -0
  181. package/dist/registry/command.test.json +13 -0
  182. package/dist/registry/context-menu.test.json +13 -0
  183. package/dist/registry/dialog.test.json +13 -0
  184. package/dist/registry/drawer.test.json +13 -0
  185. package/dist/registry/dropdown-menu.test.json +13 -0
  186. package/dist/registry/form.test.json +13 -0
  187. package/dist/registry/hover-card.test.json +13 -0
  188. package/dist/registry/index.json +322 -0
  189. package/dist/registry/input.test.json +13 -0
  190. package/dist/registry/label.test.json +13 -0
  191. package/dist/registry/menubar.test.json +13 -0
  192. package/dist/registry/navigation-menu.test.json +13 -0
  193. package/dist/registry/pagination.test.json +13 -0
  194. package/dist/registry/popover.test.json +13 -0
  195. package/dist/registry/progress.json +1 -1
  196. package/dist/registry/progress.test.json +13 -0
  197. package/dist/registry/radio-group.test.json +13 -0
  198. package/dist/registry/resizable.test.json +13 -0
  199. package/dist/registry/scroll-area.test.json +13 -0
  200. package/dist/registry/select.test.json +13 -0
  201. package/dist/registry/separator.test.json +13 -0
  202. package/dist/registry/sheet.test.json +13 -0
  203. package/dist/registry/skeleton.test.json +13 -0
  204. package/dist/registry/slider.test.json +13 -0
  205. package/dist/registry/sonner.test.json +13 -0
  206. package/dist/registry/switch.test.json +13 -0
  207. package/dist/registry/table.test.json +13 -0
  208. package/dist/registry/tabs.test.json +13 -0
  209. package/dist/registry/textarea.test.json +13 -0
  210. package/dist/registry/theme-toggle.json +13 -0
  211. package/dist/registry/toast.test.json +13 -0
  212. package/dist/registry/toggle-group.test.json +13 -0
  213. package/dist/registry/toggle.test.json +13 -0
  214. package/dist/registry/tooltip.test.json +13 -0
  215. package/dist/setupTests.d.ts +2 -0
  216. package/dist/setupTests.d.ts.map +1 -0
  217. package/dist/{vendor-ZhQmrf1h.mjs → vendor-CAF5bxO5.mjs} +2451 -2415
  218. package/dist/vendor-CAF5bxO5.mjs.map +1 -0
  219. package/dist/{vendor-CMSUBoIg.js → vendor-Hw1BQGd3.js} +17 -17
  220. package/dist/vendor-Hw1BQGd3.js.map +1 -0
  221. package/eslint.config.mjs +8 -81
  222. package/package.json +38 -41
  223. package/postcss.config.mjs +5 -0
  224. package/src/App.tsx +37 -7
  225. package/src/components/docs/Footer.tsx +51 -30
  226. package/src/components/docs/PropsTable.tsx +43 -0
  227. package/src/components/docs/Sidebar.tsx +44 -72
  228. package/src/components/docs/index.ts +1 -0
  229. package/src/components/ui/accordion.test.tsx +86 -0
  230. package/src/components/ui/alert-dialog.test.tsx +89 -0
  231. package/src/components/ui/alert.test.tsx +33 -0
  232. package/src/components/ui/aspect-ratio.test.tsx +34 -0
  233. package/src/components/ui/avatar.test.tsx +33 -0
  234. package/src/components/ui/badge.test.tsx +24 -0
  235. package/src/components/ui/breadcrumb.test.tsx +55 -0
  236. package/src/components/ui/button.test.tsx +62 -0
  237. package/src/components/ui/calendar.test.tsx +23 -0
  238. package/src/components/ui/calendar.tsx +14 -10
  239. package/src/components/ui/card.test.tsx +35 -0
  240. package/src/components/ui/carousel.test.tsx +37 -0
  241. package/src/components/ui/chart.test.tsx +62 -0
  242. package/src/components/ui/checkbox.test.tsx +30 -0
  243. package/src/components/ui/collapsible.test.tsx +51 -0
  244. package/src/components/ui/command.test.tsx +79 -0
  245. package/src/components/ui/context-menu.test.tsx +37 -0
  246. package/src/components/ui/dialog.test.tsx +66 -0
  247. package/src/components/ui/drawer.test.tsx +68 -0
  248. package/src/components/ui/dropdown-menu.test.tsx +93 -0
  249. package/src/components/ui/form.test.tsx +85 -0
  250. package/src/components/ui/hover-card.test.tsx +48 -0
  251. package/src/components/ui/input.test.tsx +33 -0
  252. package/src/components/ui/label.test.tsx +27 -0
  253. package/src/components/ui/menubar.test.tsx +92 -0
  254. package/src/components/ui/navigation-menu.test.tsx +53 -0
  255. package/src/components/ui/pagination.test.tsx +57 -0
  256. package/src/components/ui/popover.test.tsx +31 -0
  257. package/src/components/ui/progress.test.tsx +18 -0
  258. package/src/components/ui/progress.tsx +1 -0
  259. package/src/components/ui/radio-group.test.tsx +39 -0
  260. package/src/components/ui/resizable.test.tsx +23 -0
  261. package/src/components/ui/scroll-area.test.tsx +15 -0
  262. package/src/components/ui/select.test.tsx +42 -0
  263. package/src/components/ui/separator.test.tsx +16 -0
  264. package/src/components/ui/sheet.test.tsx +48 -0
  265. package/src/components/ui/skeleton.test.tsx +13 -0
  266. package/src/components/ui/slider.test.tsx +18 -0
  267. package/src/components/ui/sonner.test.tsx +13 -0
  268. package/src/components/ui/switch.test.tsx +22 -0
  269. package/src/components/ui/table.test.tsx +29 -0
  270. package/src/components/ui/tabs.test.tsx +43 -0
  271. package/src/components/ui/textarea.test.tsx +21 -0
  272. package/src/components/ui/theme-toggle.tsx +108 -0
  273. package/src/components/ui/toast.test.tsx +42 -0
  274. package/src/components/ui/toggle-group.test.tsx +40 -0
  275. package/src/components/ui/toggle.test.tsx +21 -0
  276. package/src/components/ui/tooltip.test.tsx +25 -0
  277. package/src/globals.css +94 -37
  278. package/src/index.ts +2 -0
  279. package/src/lib/tokens.ts +54 -0
  280. package/src/pages/ColorTokensDocs.tsx +181 -0
  281. package/src/pages/GettingStarted.tsx +55 -35
  282. package/src/pages/components/AccordionDocs.tsx +109 -0
  283. package/src/pages/components/AlertDialogDocs.tsx +88 -0
  284. package/src/pages/components/AlertDocs.tsx +20 -0
  285. package/src/pages/components/AspectRatioDocs.tsx +21 -0
  286. package/src/pages/components/AvatarDocs.tsx +48 -0
  287. package/src/pages/components/BadgeDocs.tsx +20 -0
  288. package/src/pages/components/BreadcrumbDocs.tsx +33 -0
  289. package/src/pages/components/ButtonDocs.tsx +43 -0
  290. package/src/pages/components/CalendarDocs.tsx +43 -0
  291. package/src/pages/components/CardDocs.tsx +20 -0
  292. package/src/pages/components/CarouselDocs.tsx +31 -0
  293. package/src/pages/components/ChartDocs.tsx +131 -101
  294. package/src/pages/components/CheckboxDocs.tsx +58 -0
  295. package/src/pages/components/CollapsibleDocs.tsx +51 -0
  296. package/src/pages/components/CommandDocs.tsx +109 -0
  297. package/src/pages/components/ContextMenuDocs.tsx +65 -0
  298. package/src/pages/components/DialogDocs.tsx +98 -11
  299. package/src/pages/components/DrawerDocs.tsx +210 -15
  300. package/src/pages/components/DropdownMenuDocs.tsx +273 -11
  301. package/src/pages/components/FormDocs.tsx +149 -70
  302. package/src/pages/components/HoverCardDocs.tsx +82 -5
  303. package/src/pages/components/InputDocs.tsx +51 -20
  304. package/src/pages/components/LabelDocs.tsx +40 -9
  305. package/src/pages/components/MenubarDocs.tsx +191 -18
  306. package/src/pages/components/NavigationMenuDocs.tsx +147 -49
  307. package/src/pages/components/PaginationDocs.tsx +27 -2
  308. package/src/pages/components/PopoverDocs.tsx +124 -2
  309. package/src/pages/components/ProgressDocs.tsx +54 -24
  310. package/src/pages/components/RadioGroupDocs.tsx +95 -1
  311. package/src/pages/components/ResizableDocs.tsx +102 -75
  312. package/src/pages/components/ScrollAreaDocs.tsx +64 -51
  313. package/src/pages/components/SelectDocs.tsx +119 -48
  314. package/src/pages/components/SeparatorDocs.tsx +37 -2
  315. package/src/pages/components/SheetDocs.tsx +112 -38
  316. package/src/pages/components/SkeletonDocs.tsx +16 -20
  317. package/src/pages/components/SliderDocs.tsx +96 -10
  318. package/src/pages/components/SonnerDocs.tsx +89 -61
  319. package/src/pages/components/SwitchDocs.tsx +65 -10
  320. package/src/pages/components/TableDocs.tsx +89 -14
  321. package/src/pages/components/TabsDocs.tsx +149 -37
  322. package/src/pages/components/TextareaDocs.tsx +38 -32
  323. package/src/pages/components/ThemeToggleDocs.tsx +50 -0
  324. package/src/pages/components/ToastDocs.tsx +104 -65
  325. package/src/pages/components/ToggleDocs.tsx +55 -38
  326. package/src/pages/components/ToggleGroupDocs.tsx +96 -58
  327. package/src/pages/components/TooltipDocs.tsx +112 -3
  328. package/src/pages/index.ts +2 -0
  329. package/src/setupTests.ts +47 -0
  330. package/temp.md +292 -0
  331. package/vitest.config.ts +4 -0
  332. package/dist/vendor-CMSUBoIg.js.map +0 -1
  333. package/dist/vendor-ZhQmrf1h.mjs.map +0 -1
  334. package/postcss.config.js +0 -6
  335. package/tailwind.config.js +0 -79
package/eslint.config.mjs CHANGED
@@ -1,86 +1,13 @@
1
- import js from '@eslint/js';
2
- import ts from '@typescript-eslint/eslint-plugin';
3
- import tsParser from '@typescript-eslint/parser';
4
- import prettierConfig from 'eslint-config-prettier';
5
- import prettier from 'eslint-plugin-prettier';
6
- import globals from 'globals';
7
-
8
- // File patterns for JS/TS files only
9
- const jsFiles = ['**/*.js', '**/*.jsx', '**/*.mjs', '**/*.cjs'];
10
- const tsFiles = ['**/*.ts', '**/*.tsx', '**/*.mts', '**/*.cts'];
11
- const allJsTsFiles = [...jsFiles, ...tsFiles];
1
+ import { recommended } from '@gv-tech/eslint-config';
12
2
 
3
+ /**
4
+ * ESLint configuration for TypeScript projects. Uses @gv-tech/eslint-config for sensible defaults. For more information
5
+ * on configuration options, see: https://github.com/Garcia-Ventures/eslint-config
6
+ */
13
7
  export default [
8
+ ...recommended,
9
+ // Add project-specific overrides here
14
10
  {
15
- // Global ignores - at the top of the array
16
- ignores: [
17
- '**/node_modules/**',
18
- '**/.yarn/**',
19
- '**/dist/**',
20
- '**/dist-site/**',
21
- '**/storybook-static/**',
22
- '**/coverage/**',
23
- '**/public/**',
24
- '**/.github/**',
25
- '**/.vscode/**',
26
- '**/.husky/**',
27
- 'eslint.config.mjs',
28
- '**/.*', // Ignore all hidden files
29
- '**/*.json',
30
- '**/*.md',
31
- '**/*.yml',
32
- '**/*.log',
33
- ],
34
- },
35
- {
36
- // Base config for all JS/TS files
37
- files: allJsTsFiles,
38
- ...js.configs.recommended,
39
- linterOptions: {
40
- noInlineConfig: true,
41
- reportUnusedDisableDirectives: true,
42
- },
43
- languageOptions: {
44
- globals: {
45
- ...globals.node,
46
- ...globals.browser,
47
- },
48
- parserOptions: {
49
- ecmaVersion: 'latest',
50
- sourceType: 'module',
51
- },
52
- },
53
- },
54
- {
55
- // TypeScript-specific config
56
- files: tsFiles,
57
- languageOptions: {
58
- parser: tsParser,
59
- },
60
- plugins: {
61
- '@typescript-eslint': ts,
62
- },
63
- rules: {
64
- ...ts.configs.base.rules,
65
- ...ts.configs['eslint-recommended'].rules,
66
- ...ts.configs.recommended.rules,
67
- },
68
- },
69
- {
70
- files: jsFiles,
71
- rules: {
72
- ...js.configs.recommended.rules,
73
- },
74
- },
75
- {
76
- // Prettier config for all JS/TS files
77
- files: allJsTsFiles,
78
- plugins: {
79
- prettier: prettier,
80
- },
81
- rules: {
82
- ...prettierConfig.rules,
83
- 'prettier/prettier': 'error',
84
- },
11
+ ignores: ['**/eslint.config.mjs', '**/.yarn/**', 'dist-site/**'],
85
12
  },
86
13
  ];
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@gv-tech/design-system",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "Garcia Ventures react design system",
5
+ "repository": "git@github.com:Garcia-Ventures/gvtech-design.git",
5
6
  "license": "MIT",
6
7
  "author": "Eric N. Garcia <eng618@garciaericn.com>",
7
8
  "main": "dist/index.cjs.js",
8
9
  "module": "dist/index.es.js",
9
10
  "types": "dist/index.d.ts",
10
- "repository": "git@github.com:Garcia-Ventures/gvtech-design.git",
11
11
  "scripts": {
12
12
  "build": "yarn build:registry && tsc -p tsconfig.build.json && VITE_LIB=true vite build",
13
13
  "build:registry": "tsx scripts/build-registry.ts",
@@ -22,11 +22,38 @@
22
22
  "setup:ui": "tsx scripts/import-all-shadcn.ts",
23
23
  "start": "vite",
24
24
  "test": "vitest",
25
- "test:ci": "CI=true vitest --run --reporter=dot --passWithNoTests",
25
+ "test:ci": "CI=true vitest --run --reporter=dot",
26
26
  "test:watch": "vitest --watch",
27
27
  "validate": "node ./scripts/validate.js",
28
28
  "validate:fix": "node ./scripts/validate.js --fix"
29
29
  },
30
+ "lint-staged": {
31
+ "*.(js|ts|mjs|cjs)?(x)": [
32
+ "prettier --write",
33
+ "eslint --cache --fix"
34
+ ],
35
+ "*.(md)?(x)": [
36
+ "prettier --write"
37
+ ]
38
+ },
39
+ "babel": {
40
+ "presets": [
41
+ "@babel/preset-env",
42
+ "@babel/preset-react"
43
+ ]
44
+ },
45
+ "browserslist": {
46
+ "development": [
47
+ "last 1 chrome version",
48
+ "last 1 firefox version",
49
+ "last 1 safari version"
50
+ ],
51
+ "production": [
52
+ ">0.2%",
53
+ "not dead"
54
+ ]
55
+ },
56
+ "prettier": "@eng618/prettier-config",
30
57
  "dependencies": {
31
58
  "@hookform/resolvers": "^5.2.2",
32
59
  "@radix-ui/react-accordion": "^1.2.12",
@@ -56,6 +83,7 @@
56
83
  "@radix-ui/react-toggle": "^1.1.10",
57
84
  "@radix-ui/react-toggle-group": "^1.1.11",
58
85
  "@radix-ui/react-tooltip": "^1.2.8",
86
+ "@tailwindcss/postcss": "4",
59
87
  "class-variance-authority": "^0.7.1",
60
88
  "clsx": "^2.1.1",
61
89
  "cmdk": "^1.1.1",
@@ -65,17 +93,17 @@
65
93
  "next-themes": "^0.4.6",
66
94
  "react-day-picker": "^9.13.0",
67
95
  "react-hook-form": "^7.71.1",
96
+ "react-icons": "^5.5.0",
68
97
  "react-resizable-panels": "^4.6.0",
69
98
  "recharts": "2.15.4",
70
99
  "sonner": "^2.0.7",
71
100
  "tailwind-merge": "^3.4.0",
72
- "tailwindcss-animate": "^1.0.7",
73
101
  "vaul": "^1.1.2",
74
102
  "zod": "^4.3.6"
75
103
  },
76
104
  "devDependencies": {
77
- "@eng618/prettier-config": "^2.5.3",
78
- "@eslint/js": "^9.39.2",
105
+ "@eng618/prettier-config": "^2.6.0",
106
+ "@gv-tech/eslint-config": "^0.1.8",
79
107
  "@testing-library/dom": "^10.4.1",
80
108
  "@testing-library/jest-dom": "^6.9.1",
81
109
  "@testing-library/react": "^16.3.2",
@@ -86,15 +114,11 @@
86
114
  "@typescript-eslint/eslint-plugin": "^8.54.0",
87
115
  "@typescript-eslint/parser": "^8.54.0",
88
116
  "@vitejs/plugin-react-swc": "^4.2.3",
89
- "autoprefixer": "^10.4.24",
90
117
  "axe-core": "^4.11.1",
91
- "eslint": "^9.39.2",
92
- "eslint-config-prettier": "^10.1.8",
118
+ "eslint": "^10.0.0",
93
119
  "eslint-plugin-jsx-a11y": "^6.10.2",
94
- "eslint-plugin-prettier": "^5.5.5",
95
120
  "eslint-plugin-react": "^7.37.5",
96
121
  "eslint-plugin-react-hooks": "^7.0.1",
97
- "globals": "^17.3.0",
98
122
  "husky": "^9.1.7",
99
123
  "jsdom": "^27.4.0",
100
124
  "lint-staged": "^16.2.7",
@@ -105,7 +129,7 @@
105
129
  "react": "^19.2.4",
106
130
  "react-dom": "^19.2.4",
107
131
  "react-is": "^19.2.4",
108
- "tailwindcss": "3",
132
+ "tailwindcss": "4",
109
133
  "tsx": "^4.21.0",
110
134
  "typescript": "^5.9.3",
111
135
  "vite": "7.3.1",
@@ -117,39 +141,12 @@
117
141
  "react-dom": "^18 || ^19",
118
142
  "react-is": "^16 || ^17 || ^18 || ^19"
119
143
  },
144
+ "packageManager": "yarn@4.12.0",
120
145
  "engines": {
121
146
  "node": ">=20"
122
147
  },
123
148
  "publishConfig": {
124
149
  "access": "public",
125
150
  "provenance": true
126
- },
127
- "lint-staged": {
128
- "*.(js|ts|mjs|cjs)?(x)": [
129
- "prettier --write",
130
- "eslint --cache --fix"
131
- ],
132
- "*.(md)?(x)": [
133
- "prettier --write"
134
- ]
135
- },
136
- "prettier": "@eng618/prettier-config",
137
- "babel": {
138
- "presets": [
139
- "@babel/preset-env",
140
- "@babel/preset-react"
141
- ]
142
- },
143
- "browserslist": {
144
- "development": [
145
- "last 1 chrome version",
146
- "last 1 firefox version",
147
- "last 1 safari version"
148
- ],
149
- "production": [
150
- ">0.2%",
151
- "not dead"
152
- ]
153
- },
154
- "packageManager": "yarn@4.12.0"
151
+ }
155
152
  }
@@ -0,0 +1,5 @@
1
+ export default {
2
+ plugins: {
3
+ '@tailwindcss/postcss': {},
4
+ },
5
+ };
package/src/App.tsx CHANGED
@@ -1,8 +1,19 @@
1
1
  import { ThemeProvider } from 'next-themes';
2
2
  import * as React from 'react';
3
- import { Footer, Sidebar, ThemeToggle } from './components/docs';
3
+ import { Footer, Sidebar } from './components/docs';
4
+ import { navItems } from './components/docs/Sidebar';
5
+ import {
6
+ Breadcrumb,
7
+ BreadcrumbItem,
8
+ BreadcrumbLink,
9
+ BreadcrumbList,
10
+ BreadcrumbPage,
11
+ BreadcrumbSeparator,
12
+ } from './components/ui/breadcrumb';
4
13
  import { ScrollArea } from './components/ui/scroll-area';
5
- import { Toaster } from './components/ui/sonner';
14
+ import { Toaster as SonnerToaster } from './components/ui/sonner';
15
+ import { ThemeToggle } from './components/ui/theme-toggle';
16
+ import { Toaster } from './components/ui/toaster';
6
17
  import { TooltipProvider } from './components/ui/tooltip';
7
18
  import {
8
19
  AccordionDocs,
@@ -19,6 +30,7 @@ import {
19
30
  ChartDocs,
20
31
  CheckboxDocs,
21
32
  CollapsibleDocs,
33
+ ColorTokensDocs,
22
34
  CommandDocs,
23
35
  ContextMenuDocs,
24
36
  DialogDocs,
@@ -48,6 +60,7 @@ import {
48
60
  TableDocs,
49
61
  TabsDocs,
50
62
  TextareaDocs,
63
+ ThemeToggleDocs,
51
64
  ToastDocs,
52
65
  ToggleDocs,
53
66
  ToggleGroupDocs,
@@ -62,6 +75,8 @@ function App() {
62
75
  // Getting Started
63
76
  case 'getting-started':
64
77
  return <GettingStartedPage />;
78
+ case 'color-tokens':
79
+ return <ColorTokensDocs />;
65
80
  case 'installation':
66
81
  return <InstallationPage />;
67
82
 
@@ -168,6 +183,8 @@ function App() {
168
183
  return <ToggleDocs />;
169
184
  case 'toggle-group':
170
185
  return <ToggleGroupDocs />;
186
+ case 'theme-toggle':
187
+ return <ThemeToggleDocs />;
171
188
 
172
189
  default:
173
190
  return <GettingStartedPage />;
@@ -184,12 +201,24 @@ function App() {
184
201
  {/* Main Content */}
185
202
  <div className="flex-1 flex flex-col overflow-hidden">
186
203
  {/* Header */}
187
- <header className="h-14 border-b flex items-center justify-between px-6">
188
- <div className="flex items-center gap-4">
189
- <h1 className="text-sm font-medium text-muted-foreground">Components</h1>
190
- </div>
204
+ <header className="h-14 border-b flex items-center justify-between px-6 shrink-0 bg-background/50 backdrop-blur-sm sticky top-0 z-10">
205
+ <Breadcrumb>
206
+ <BreadcrumbList>
207
+ <BreadcrumbItem>
208
+ <BreadcrumbLink onClick={() => setActiveItem('getting-started')} className="cursor-pointer">
209
+ Components
210
+ </BreadcrumbLink>
211
+ </BreadcrumbItem>
212
+ <BreadcrumbSeparator />
213
+ <BreadcrumbItem>
214
+ <BreadcrumbPage>
215
+ {navItems.find((i) => i.id === activeItem)?.label || 'Introduction'}
216
+ </BreadcrumbPage>
217
+ </BreadcrumbItem>
218
+ </BreadcrumbList>
219
+ </Breadcrumb>
191
220
  <div className="flex items-center gap-2">
192
- <ThemeToggle />
221
+ <ThemeToggle variant="ternary" />
193
222
  </div>
194
223
  </header>
195
224
 
@@ -203,6 +232,7 @@ function App() {
203
232
  </div>
204
233
  </div>
205
234
  <Toaster />
235
+ <SonnerToaster />
206
236
  </TooltipProvider>
207
237
  </ThemeProvider>
208
238
  );
@@ -1,5 +1,7 @@
1
+ import { Button } from '@/components/ui/button';
1
2
  import { Separator } from '@/components/ui/separator';
2
- import { Github, Linkedin, Twitter } from 'lucide-react';
3
+ import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
4
+ import { SiGithub, SiLinkedin, SiX } from 'react-icons/si';
3
5
 
4
6
  export function Footer() {
5
7
  return (
@@ -51,37 +53,56 @@ export function Footer() {
51
53
  </ul>
52
54
  </div>
53
55
 
54
- {/* Social */}
55
56
  <div className="space-y-3">
56
57
  <h4 className="font-medium text-sm">Connect</h4>
57
- <div className="flex items-center space-x-4">
58
- <a
59
- href="https://github.com/Garcia-Ventures"
60
- target="_blank"
61
- rel="noopener noreferrer"
62
- className="text-muted-foreground hover:text-foreground transition-colors"
63
- aria-label="GitHub"
64
- >
65
- <Github className="h-5 w-5" />
66
- </a>
67
- <a
68
- href="https://twitter.com/gvtech"
69
- target="_blank"
70
- rel="noopener noreferrer"
71
- className="text-muted-foreground hover:text-foreground transition-colors"
72
- aria-label="Twitter"
73
- >
74
- <Twitter className="h-5 w-5" />
75
- </a>
76
- <a
77
- href="https://linkedin.com/company/gvtech"
78
- target="_blank"
79
- rel="noopener noreferrer"
80
- className="text-muted-foreground hover:text-foreground transition-colors"
81
- aria-label="LinkedIn"
82
- >
83
- <Linkedin className="h-5 w-5" />
84
- </a>
58
+ <div className="flex items-center space-x-2">
59
+ <Tooltip>
60
+ <TooltipTrigger asChild>
61
+ <Button variant="ghost" size="icon" className="text-muted-foreground hover:text-foreground" asChild>
62
+ <a
63
+ href="https://github.com/Garcia-Ventures"
64
+ target="_blank"
65
+ rel="noopener noreferrer"
66
+ aria-label="GitHub"
67
+ >
68
+ <SiGithub className="h-5 w-5" />
69
+ </a>
70
+ </Button>
71
+ </TooltipTrigger>
72
+ <TooltipContent>GitHub</TooltipContent>
73
+ </Tooltip>
74
+
75
+ <Tooltip>
76
+ <TooltipTrigger asChild>
77
+ <Button variant="ghost" size="icon" className="text-muted-foreground hover:text-foreground" asChild>
78
+ <a
79
+ href="https://twitter.com/gvtech"
80
+ target="_blank"
81
+ rel="noopener noreferrer"
82
+ aria-label="X (formerly Twitter)"
83
+ >
84
+ <SiX className="h-4 w-4" />
85
+ </a>
86
+ </Button>
87
+ </TooltipTrigger>
88
+ <TooltipContent>X (formerly Twitter)</TooltipContent>
89
+ </Tooltip>
90
+
91
+ <Tooltip>
92
+ <TooltipTrigger asChild>
93
+ <Button variant="ghost" size="icon" className="text-muted-foreground hover:text-foreground" asChild>
94
+ <a
95
+ href="https://linkedin.com/company/gvtech"
96
+ target="_blank"
97
+ rel="noopener noreferrer"
98
+ aria-label="LinkedIn"
99
+ >
100
+ <SiLinkedin className="h-5 w-5" />
101
+ </a>
102
+ </Button>
103
+ </TooltipTrigger>
104
+ <TooltipContent>LinkedIn</TooltipContent>
105
+ </Tooltip>
85
106
  </div>
86
107
  </div>
87
108
  </div>
@@ -0,0 +1,43 @@
1
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table';
2
+
3
+ export interface PropDefinition {
4
+ name: string;
5
+ type: string;
6
+ defaultValue?: string;
7
+ description: string;
8
+ required?: boolean;
9
+ }
10
+
11
+ interface PropsTableProps {
12
+ props: PropDefinition[];
13
+ }
14
+
15
+ export function PropsTable({ props }: PropsTableProps) {
16
+ return (
17
+ <div className="my-6 w-full overflow-y-auto">
18
+ <Table>
19
+ <TableHeader>
20
+ <TableRow>
21
+ <TableHead>Prop</TableHead>
22
+ <TableHead>Type</TableHead>
23
+ <TableHead>Default</TableHead>
24
+ <TableHead>Description</TableHead>
25
+ </TableRow>
26
+ </TableHeader>
27
+ <TableBody>
28
+ {props.map((prop) => (
29
+ <TableRow key={prop.name}>
30
+ <TableCell className="font-mono text-sm font-semibold">
31
+ {prop.name}
32
+ {prop.required && <span className="ml-1 text-destructive">*</span>}
33
+ </TableCell>
34
+ <TableCell className="font-mono text-xs text-muted-foreground">{prop.type}</TableCell>
35
+ <TableCell className="font-mono text-xs text-muted-foreground">{prop.defaultValue || '-'}</TableCell>
36
+ <TableCell className="text-sm text-muted-foreground">{prop.description}</TableCell>
37
+ </TableRow>
38
+ ))}
39
+ </TableBody>
40
+ </Table>
41
+ </div>
42
+ );
43
+ }
@@ -1,19 +1,10 @@
1
+ import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion';
1
2
  import { Button } from '@/components/ui/button';
2
3
  import { ScrollArea } from '@/components/ui/scroll-area';
3
4
  import { cn } from '@/lib/utils';
4
- import {
5
- ChevronDown,
6
- ChevronRight,
7
- FormInput,
8
- Home,
9
- Layers,
10
- LayoutGrid,
11
- MessageSquare,
12
- Navigation,
13
- Sparkles,
14
- Table2,
15
- } from 'lucide-react';
5
+ import { FormInput, Home, Layers, LayoutGrid, MessageSquare, Navigation, Sparkles, Table2 } from 'lucide-react';
16
6
  import * as React from 'react';
7
+ import { version } from '../../../package.json';
17
8
 
18
9
  export type ComponentCategory =
19
10
  | 'getting-started'
@@ -50,6 +41,7 @@ const categoryConfig: Record<ComponentCategory, { label: string; icon: React.Rea
50
41
  export const navItems: NavItem[] = [
51
42
  // Getting Started
52
43
  { id: 'getting-started', label: 'Introduction', category: 'getting-started' },
44
+ { id: 'color-tokens', label: 'Color Tokens', category: 'getting-started' },
53
45
  { id: 'installation', label: 'Installation', category: 'getting-started' },
54
46
 
55
47
  // Layout
@@ -110,77 +102,57 @@ export const navItems: NavItem[] = [
110
102
  { id: 'carousel', label: 'Carousel', category: 'advanced' },
111
103
  { id: 'toggle', label: 'Toggle', category: 'advanced' },
112
104
  { id: 'toggle-group', label: 'Toggle Group', category: 'advanced' },
105
+ { id: 'theme-toggle', label: 'Theme Toggle', category: 'advanced' },
113
106
  ];
114
107
 
115
108
  export function Sidebar({ activeItem, onItemSelect }: SidebarProps) {
116
- const [expandedCategories, setExpandedCategories] = React.useState<Set<ComponentCategory>>(
117
- new Set(['getting-started', 'forms']),
118
- );
119
-
120
- const toggleCategory = (category: ComponentCategory) => {
121
- setExpandedCategories((prev) => {
122
- const next = new Set(prev);
123
- if (next.has(category)) {
124
- next.delete(category);
125
- } else {
126
- next.add(category);
127
- }
128
- return next;
129
- });
130
- };
131
-
132
109
  const categories = Object.keys(categoryConfig) as ComponentCategory[];
133
110
 
134
111
  return (
135
- <div className="w-64 border-r bg-muted/30 flex flex-col h-full">
112
+ <div className="w-64 border-r bg-muted/50 flex flex-col h-full">
136
113
  <div className="p-4 border-b">
137
114
  <h2 className="font-semibold text-lg">GV Design System</h2>
138
- <p className="text-xs text-muted-foreground">v0.9.0</p>
115
+ <p className="text-xs text-muted-foreground">v{version}</p>
139
116
  </div>
140
117
  <ScrollArea className="flex-1">
141
118
  <nav className="p-2">
142
- {categories.map((category) => {
143
- const config = categoryConfig[category];
144
- const items = navItems.filter((item) => item.category === category);
145
- const isExpanded = expandedCategories.has(category);
146
-
147
- if (items.length === 0) return null;
148
-
149
- return (
150
- <div key={category} className="mb-1">
151
- <button
152
- onClick={() => toggleCategory(category)}
153
- className="w-full flex items-center gap-2 px-2 py-1.5 text-sm font-medium rounded-md hover:bg-accent/50 transition-colors"
154
- >
155
- {config.icon}
156
- <span className="flex-1 text-left">{config.label}</span>
157
- {isExpanded ? (
158
- <ChevronDown className="h-4 w-4 text-muted-foreground" />
159
- ) : (
160
- <ChevronRight className="h-4 w-4 text-muted-foreground" />
161
- )}
162
- </button>
163
- {isExpanded && (
164
- <div className="ml-4 mt-1 space-y-0.5">
165
- {items.map((item) => (
166
- <Button
167
- key={item.id}
168
- variant="ghost"
169
- size="sm"
170
- onClick={() => onItemSelect(item.id)}
171
- className={cn(
172
- 'w-full justify-start h-8 px-2 font-normal',
173
- activeItem === item.id && 'bg-accent text-accent-foreground',
174
- )}
175
- >
176
- {item.label}
177
- </Button>
178
- ))}
179
- </div>
180
- )}
181
- </div>
182
- );
183
- })}
119
+ <Accordion type="multiple" defaultValue={['getting-started', 'forms']} className="w-full space-y-1">
120
+ {categories.map((category) => {
121
+ const config = categoryConfig[category];
122
+ const items = navItems.filter((item) => item.category === category);
123
+
124
+ if (items.length === 0) return null;
125
+
126
+ return (
127
+ <AccordionItem key={category} value={category} className="border-none">
128
+ <AccordionTrigger className="flex items-center gap-2 px-2 py-1.5 text-sm font-medium rounded-md hover:bg-accent/50 transition-colors hover:no-underline [&>svg]:h-4 [&>svg]:w-4">
129
+ <div className="flex items-center gap-2 flex-1">
130
+ {config.icon}
131
+ <span className="text-left">{config.label}</span>
132
+ </div>
133
+ </AccordionTrigger>
134
+ <AccordionContent className="pb-1">
135
+ <div className="ml-4 mt-1 space-y-0.5 border-l pl-2">
136
+ {items.map((item) => (
137
+ <Button
138
+ key={item.id}
139
+ variant="ghost"
140
+ size="sm"
141
+ onClick={() => onItemSelect(item.id)}
142
+ className={cn(
143
+ 'w-full justify-start h-8 px-2 font-normal',
144
+ activeItem === item.id && 'bg-accent text-accent-foreground',
145
+ )}
146
+ >
147
+ {item.label}
148
+ </Button>
149
+ ))}
150
+ </div>
151
+ </AccordionContent>
152
+ </AccordionItem>
153
+ );
154
+ })}
155
+ </Accordion>
184
156
  </nav>
185
157
  </ScrollArea>
186
158
  </div>
@@ -1,5 +1,6 @@
1
1
  export { CodeBlock } from './CodeBlock';
2
2
  export { ComponentSection, ComponentShowcase } from './ComponentShowcase';
3
3
  export { Footer } from './Footer';
4
+ export { PropsTable, type PropDefinition } from './PropsTable';
4
5
  export { Sidebar, navItems, type ComponentCategory, type NavItem } from './Sidebar';
5
6
  export { ThemeToggle } from './ThemeToggle';