@gv-tech/design-system 1.1.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 (332) 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 +16 -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 +36 -38
  223. package/src/App.tsx +37 -7
  224. package/src/components/docs/Footer.tsx +51 -30
  225. package/src/components/docs/PropsTable.tsx +43 -0
  226. package/src/components/docs/Sidebar.tsx +42 -71
  227. package/src/components/docs/index.ts +1 -0
  228. package/src/components/ui/accordion.test.tsx +86 -0
  229. package/src/components/ui/alert-dialog.test.tsx +89 -0
  230. package/src/components/ui/alert.test.tsx +33 -0
  231. package/src/components/ui/aspect-ratio.test.tsx +34 -0
  232. package/src/components/ui/avatar.test.tsx +33 -0
  233. package/src/components/ui/badge.test.tsx +24 -0
  234. package/src/components/ui/breadcrumb.test.tsx +55 -0
  235. package/src/components/ui/button.test.tsx +62 -0
  236. package/src/components/ui/calendar.test.tsx +23 -0
  237. package/src/components/ui/calendar.tsx +14 -10
  238. package/src/components/ui/card.test.tsx +35 -0
  239. package/src/components/ui/carousel.test.tsx +37 -0
  240. package/src/components/ui/chart.test.tsx +62 -0
  241. package/src/components/ui/checkbox.test.tsx +30 -0
  242. package/src/components/ui/collapsible.test.tsx +51 -0
  243. package/src/components/ui/command.test.tsx +79 -0
  244. package/src/components/ui/context-menu.test.tsx +37 -0
  245. package/src/components/ui/dialog.test.tsx +66 -0
  246. package/src/components/ui/drawer.test.tsx +68 -0
  247. package/src/components/ui/dropdown-menu.test.tsx +93 -0
  248. package/src/components/ui/form.test.tsx +85 -0
  249. package/src/components/ui/hover-card.test.tsx +48 -0
  250. package/src/components/ui/input.test.tsx +33 -0
  251. package/src/components/ui/label.test.tsx +27 -0
  252. package/src/components/ui/menubar.test.tsx +92 -0
  253. package/src/components/ui/navigation-menu.test.tsx +53 -0
  254. package/src/components/ui/pagination.test.tsx +57 -0
  255. package/src/components/ui/popover.test.tsx +31 -0
  256. package/src/components/ui/progress.test.tsx +18 -0
  257. package/src/components/ui/progress.tsx +1 -0
  258. package/src/components/ui/radio-group.test.tsx +39 -0
  259. package/src/components/ui/resizable.test.tsx +23 -0
  260. package/src/components/ui/scroll-area.test.tsx +15 -0
  261. package/src/components/ui/select.test.tsx +42 -0
  262. package/src/components/ui/separator.test.tsx +16 -0
  263. package/src/components/ui/sheet.test.tsx +48 -0
  264. package/src/components/ui/skeleton.test.tsx +13 -0
  265. package/src/components/ui/slider.test.tsx +18 -0
  266. package/src/components/ui/sonner.test.tsx +13 -0
  267. package/src/components/ui/switch.test.tsx +22 -0
  268. package/src/components/ui/table.test.tsx +29 -0
  269. package/src/components/ui/tabs.test.tsx +43 -0
  270. package/src/components/ui/textarea.test.tsx +21 -0
  271. package/src/components/ui/theme-toggle.tsx +108 -0
  272. package/src/components/ui/toast.test.tsx +42 -0
  273. package/src/components/ui/toggle-group.test.tsx +40 -0
  274. package/src/components/ui/toggle.test.tsx +21 -0
  275. package/src/components/ui/tooltip.test.tsx +25 -0
  276. package/src/globals.css +39 -34
  277. package/src/index.ts +2 -0
  278. package/src/lib/tokens.ts +54 -0
  279. package/src/pages/ColorTokensDocs.tsx +181 -0
  280. package/src/pages/GettingStarted.tsx +55 -35
  281. package/src/pages/components/AccordionDocs.tsx +109 -0
  282. package/src/pages/components/AlertDialogDocs.tsx +88 -0
  283. package/src/pages/components/AlertDocs.tsx +20 -0
  284. package/src/pages/components/AspectRatioDocs.tsx +21 -0
  285. package/src/pages/components/AvatarDocs.tsx +48 -0
  286. package/src/pages/components/BadgeDocs.tsx +20 -0
  287. package/src/pages/components/BreadcrumbDocs.tsx +33 -0
  288. package/src/pages/components/ButtonDocs.tsx +43 -0
  289. package/src/pages/components/CalendarDocs.tsx +43 -0
  290. package/src/pages/components/CardDocs.tsx +20 -0
  291. package/src/pages/components/CarouselDocs.tsx +31 -0
  292. package/src/pages/components/ChartDocs.tsx +131 -101
  293. package/src/pages/components/CheckboxDocs.tsx +58 -0
  294. package/src/pages/components/CollapsibleDocs.tsx +51 -0
  295. package/src/pages/components/CommandDocs.tsx +109 -0
  296. package/src/pages/components/ContextMenuDocs.tsx +65 -0
  297. package/src/pages/components/DialogDocs.tsx +98 -11
  298. package/src/pages/components/DrawerDocs.tsx +210 -15
  299. package/src/pages/components/DropdownMenuDocs.tsx +273 -11
  300. package/src/pages/components/FormDocs.tsx +149 -70
  301. package/src/pages/components/HoverCardDocs.tsx +82 -5
  302. package/src/pages/components/InputDocs.tsx +51 -20
  303. package/src/pages/components/LabelDocs.tsx +40 -9
  304. package/src/pages/components/MenubarDocs.tsx +191 -18
  305. package/src/pages/components/NavigationMenuDocs.tsx +147 -49
  306. package/src/pages/components/PaginationDocs.tsx +27 -2
  307. package/src/pages/components/PopoverDocs.tsx +124 -2
  308. package/src/pages/components/ProgressDocs.tsx +54 -24
  309. package/src/pages/components/RadioGroupDocs.tsx +95 -1
  310. package/src/pages/components/ResizableDocs.tsx +102 -75
  311. package/src/pages/components/ScrollAreaDocs.tsx +64 -51
  312. package/src/pages/components/SelectDocs.tsx +119 -48
  313. package/src/pages/components/SeparatorDocs.tsx +37 -2
  314. package/src/pages/components/SheetDocs.tsx +112 -38
  315. package/src/pages/components/SkeletonDocs.tsx +16 -20
  316. package/src/pages/components/SliderDocs.tsx +96 -10
  317. package/src/pages/components/SonnerDocs.tsx +89 -61
  318. package/src/pages/components/SwitchDocs.tsx +65 -10
  319. package/src/pages/components/TableDocs.tsx +89 -14
  320. package/src/pages/components/TabsDocs.tsx +149 -37
  321. package/src/pages/components/TextareaDocs.tsx +38 -32
  322. package/src/pages/components/ThemeToggleDocs.tsx +50 -0
  323. package/src/pages/components/ToastDocs.tsx +104 -65
  324. package/src/pages/components/ToggleDocs.tsx +55 -38
  325. package/src/pages/components/ToggleGroupDocs.tsx +96 -58
  326. package/src/pages/components/TooltipDocs.tsx +112 -3
  327. package/src/pages/index.ts +2 -0
  328. package/src/setupTests.ts +47 -0
  329. package/temp.md +292 -0
  330. package/vitest.config.ts +4 -0
  331. package/dist/vendor-CMSUBoIg.js.map +0 -1
  332. package/dist/vendor-ZhQmrf1h.mjs.map +0 -1
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.1.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",
@@ -66,6 +93,7 @@
66
93
  "next-themes": "^0.4.6",
67
94
  "react-day-picker": "^9.13.0",
68
95
  "react-hook-form": "^7.71.1",
96
+ "react-icons": "^5.5.0",
69
97
  "react-resizable-panels": "^4.6.0",
70
98
  "recharts": "2.15.4",
71
99
  "sonner": "^2.0.7",
@@ -74,8 +102,8 @@
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",
@@ -87,13 +115,10 @@
87
115
  "@typescript-eslint/parser": "^8.54.0",
88
116
  "@vitejs/plugin-react-swc": "^4.2.3",
89
117
  "axe-core": "^4.11.1",
90
- "eslint": "^9.39.2",
91
- "eslint-config-prettier": "^10.1.8",
118
+ "eslint": "^10.0.0",
92
119
  "eslint-plugin-jsx-a11y": "^6.10.2",
93
- "eslint-plugin-prettier": "^5.5.5",
94
120
  "eslint-plugin-react": "^7.37.5",
95
121
  "eslint-plugin-react-hooks": "^7.0.1",
96
- "globals": "^17.3.0",
97
122
  "husky": "^9.1.7",
98
123
  "jsdom": "^27.4.0",
99
124
  "lint-staged": "^16.2.7",
@@ -116,39 +141,12 @@
116
141
  "react-dom": "^18 || ^19",
117
142
  "react-is": "^16 || ^17 || ^18 || ^19"
118
143
  },
144
+ "packageManager": "yarn@4.12.0",
119
145
  "engines": {
120
146
  "node": ">=20"
121
147
  },
122
148
  "publishConfig": {
123
149
  "access": "public",
124
150
  "provenance": true
125
- },
126
- "lint-staged": {
127
- "*.(js|ts|mjs|cjs)?(x)": [
128
- "prettier --write",
129
- "eslint --cache --fix"
130
- ],
131
- "*.(md)?(x)": [
132
- "prettier --write"
133
- ]
134
- },
135
- "prettier": "@eng618/prettier-config",
136
- "babel": {
137
- "presets": [
138
- "@babel/preset-env",
139
- "@babel/preset-react"
140
- ]
141
- },
142
- "browserslist": {
143
- "development": [
144
- "last 1 chrome version",
145
- "last 1 firefox version",
146
- "last 1 safari version"
147
- ],
148
- "production": [
149
- ">0.2%",
150
- "not dead"
151
- ]
152
- },
153
- "packageManager": "yarn@4.12.0"
151
+ }
154
152
  }
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,18 +1,8 @@
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';
17
7
  import { version } from '../../../package.json';
18
8
 
@@ -51,6 +41,7 @@ const categoryConfig: Record<ComponentCategory, { label: string; icon: React.Rea
51
41
  export const navItems: NavItem[] = [
52
42
  // Getting Started
53
43
  { id: 'getting-started', label: 'Introduction', category: 'getting-started' },
44
+ { id: 'color-tokens', label: 'Color Tokens', category: 'getting-started' },
54
45
  { id: 'installation', label: 'Installation', category: 'getting-started' },
55
46
 
56
47
  // Layout
@@ -111,77 +102,57 @@ export const navItems: NavItem[] = [
111
102
  { id: 'carousel', label: 'Carousel', category: 'advanced' },
112
103
  { id: 'toggle', label: 'Toggle', category: 'advanced' },
113
104
  { id: 'toggle-group', label: 'Toggle Group', category: 'advanced' },
105
+ { id: 'theme-toggle', label: 'Theme Toggle', category: 'advanced' },
114
106
  ];
115
107
 
116
108
  export function Sidebar({ activeItem, onItemSelect }: SidebarProps) {
117
- const [expandedCategories, setExpandedCategories] = React.useState<Set<ComponentCategory>>(
118
- new Set(['getting-started', 'forms']),
119
- );
120
-
121
- const toggleCategory = (category: ComponentCategory) => {
122
- setExpandedCategories((prev) => {
123
- const next = new Set(prev);
124
- if (next.has(category)) {
125
- next.delete(category);
126
- } else {
127
- next.add(category);
128
- }
129
- return next;
130
- });
131
- };
132
-
133
109
  const categories = Object.keys(categoryConfig) as ComponentCategory[];
134
110
 
135
111
  return (
136
- <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">
137
113
  <div className="p-4 border-b">
138
114
  <h2 className="font-semibold text-lg">GV Design System</h2>
139
115
  <p className="text-xs text-muted-foreground">v{version}</p>
140
116
  </div>
141
117
  <ScrollArea className="flex-1">
142
118
  <nav className="p-2">
143
- {categories.map((category) => {
144
- const config = categoryConfig[category];
145
- const items = navItems.filter((item) => item.category === category);
146
- const isExpanded = expandedCategories.has(category);
147
-
148
- if (items.length === 0) return null;
149
-
150
- return (
151
- <div key={category} className="mb-1">
152
- <button
153
- onClick={() => toggleCategory(category)}
154
- 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"
155
- >
156
- {config.icon}
157
- <span className="flex-1 text-left">{config.label}</span>
158
- {isExpanded ? (
159
- <ChevronDown className="h-4 w-4 text-muted-foreground" />
160
- ) : (
161
- <ChevronRight className="h-4 w-4 text-muted-foreground" />
162
- )}
163
- </button>
164
- {isExpanded && (
165
- <div className="ml-4 mt-1 space-y-0.5">
166
- {items.map((item) => (
167
- <Button
168
- key={item.id}
169
- variant="ghost"
170
- size="sm"
171
- onClick={() => onItemSelect(item.id)}
172
- className={cn(
173
- 'w-full justify-start h-8 px-2 font-normal',
174
- activeItem === item.id && 'bg-accent text-accent-foreground',
175
- )}
176
- >
177
- {item.label}
178
- </Button>
179
- ))}
180
- </div>
181
- )}
182
- </div>
183
- );
184
- })}
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>
185
156
  </nav>
186
157
  </ScrollArea>
187
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';