@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
@@ -1,17 +1,17 @@
1
1
  import { ComponentSection, ComponentShowcase } from '@/components/docs/ComponentShowcase';
2
+ import { PropsTable } from '@/components/docs/PropsTable';
2
3
  import { Label } from '@/components/ui/label';
3
4
  import { Switch } from '@/components/ui/switch';
4
5
 
5
6
  export function SwitchDocs() {
6
7
  return (
7
- <ComponentSection title="Switch" description="A control that allows the user to toggle between two states.">
8
- <ComponentShowcase title="Default" description="A basic switch component." code={`<Switch />`}>
9
- <Switch />
10
- </ComponentShowcase>
11
-
8
+ <ComponentSection
9
+ title="Switch"
10
+ description="A control that allows the user to toggle between checked and not checked."
11
+ >
12
12
  <ComponentShowcase
13
- title="With Label"
14
- description="A switch with a label."
13
+ title="Default"
14
+ description="A default switch."
15
15
  code={`<div className="flex items-center space-x-2">
16
16
  <Switch id="airplane-mode" />
17
17
  <Label htmlFor="airplane-mode">Airplane Mode</Label>
@@ -23,9 +23,64 @@ export function SwitchDocs() {
23
23
  </div>
24
24
  </ComponentShowcase>
25
25
 
26
- <ComponentShowcase title="Disabled" description="A disabled switch." code={`<Switch disabled />`}>
27
- <Switch disabled />
28
- </ComponentShowcase>
26
+ <div className="space-y-4">
27
+ <h3 className="text-xl font-semibold">Props</h3>
28
+ <p className="text-sm text-muted-foreground">
29
+ The Switch component is built on top of{' '}
30
+ <a
31
+ href="https://www.radix-ui.com/primitives/docs/components/switch"
32
+ className="underline"
33
+ target="_blank"
34
+ rel="noreferrer"
35
+ >
36
+ Radix UI Switch
37
+ </a>
38
+ .
39
+ </p>
40
+
41
+ <h4 className="text-lg font-medium mt-6">Switch (Root)</h4>
42
+ <PropsTable
43
+ props={[
44
+ {
45
+ name: 'defaultChecked',
46
+ type: 'boolean',
47
+ description: 'The value of the switch when initially rendered.',
48
+ },
49
+ {
50
+ name: 'checked',
51
+ type: 'boolean',
52
+ description: 'The controlled value of the switch.',
53
+ },
54
+ {
55
+ name: 'onCheckedChange',
56
+ type: '(checked: boolean) => void',
57
+ description: 'Event handler called when the value changes.',
58
+ },
59
+ {
60
+ name: 'disabled',
61
+ type: 'boolean',
62
+ description: 'When true, prevents the user from interacting with the switch.',
63
+ },
64
+ {
65
+ name: 'required',
66
+ type: 'boolean',
67
+ description:
68
+ 'When true, indicates that the user must toggle the switch before the owning form can be submitted.',
69
+ },
70
+ {
71
+ name: 'name',
72
+ type: 'string',
73
+ description: 'The name of the switch. Submitted with its owning form as part of a name/value pair.',
74
+ },
75
+ {
76
+ name: 'value',
77
+ type: 'string',
78
+ defaultValue: '"on"',
79
+ description: 'The value given as data when submitted with a name.',
80
+ },
81
+ ]}
82
+ />
83
+ </div>
29
84
  </ComponentSection>
30
85
  );
31
86
  }
@@ -1,20 +1,67 @@
1
1
  import { ComponentSection, ComponentShowcase } from '@/components/docs/ComponentShowcase';
2
- import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table';
2
+ import { PropsTable } from '@/components/docs/PropsTable';
3
+ import {
4
+ Table,
5
+ TableBody,
6
+ TableCaption,
7
+ TableCell,
8
+ TableFooter,
9
+ TableHead,
10
+ TableHeader,
11
+ TableRow,
12
+ } from '@/components/ui/table';
3
13
 
4
14
  const invoices = [
5
- { invoice: 'INV001', status: 'Paid', method: 'Credit Card', amount: '$250.00' },
6
- { invoice: 'INV002', status: 'Pending', method: 'PayPal', amount: '$150.00' },
7
- { invoice: 'INV003', status: 'Unpaid', method: 'Bank Transfer', amount: '$350.00' },
8
- { invoice: 'INV004', status: 'Paid', method: 'Credit Card', amount: '$450.00' },
9
- { invoice: 'INV005', status: 'Paid', method: 'PayPal', amount: '$550.00' },
15
+ {
16
+ invoice: 'INV001',
17
+ paymentStatus: 'Paid',
18
+ totalAmount: '$250.00',
19
+ paymentMethod: 'Credit Card',
20
+ },
21
+ {
22
+ invoice: 'INV002',
23
+ paymentStatus: 'Pending',
24
+ totalAmount: '$150.00',
25
+ paymentMethod: 'PayPal',
26
+ },
27
+ {
28
+ invoice: 'INV003',
29
+ paymentStatus: 'Unpaid',
30
+ totalAmount: '$350.00',
31
+ paymentMethod: 'Bank Transfer',
32
+ },
33
+ {
34
+ invoice: 'INV004',
35
+ paymentStatus: 'Paid',
36
+ totalAmount: '$450.00',
37
+ paymentMethod: 'Credit Card',
38
+ },
39
+ {
40
+ invoice: 'INV005',
41
+ paymentStatus: 'Paid',
42
+ totalAmount: '$550.00',
43
+ paymentMethod: 'PayPal',
44
+ },
45
+ {
46
+ invoice: 'INV006',
47
+ paymentStatus: 'Pending',
48
+ totalAmount: '$200.00',
49
+ paymentMethod: 'Bank Transfer',
50
+ },
51
+ {
52
+ invoice: 'INV007',
53
+ paymentStatus: 'Unpaid',
54
+ totalAmount: '$300.00',
55
+ paymentMethod: 'Credit Card',
56
+ },
10
57
  ];
11
58
 
12
59
  export function TableDocs() {
13
60
  return (
14
- <ComponentSection title="Table" description="A responsive table component for displaying tabular data.">
61
+ <ComponentSection title="Table" description="A responsive table component.">
15
62
  <ComponentShowcase
16
63
  title="Default"
17
- description="A basic table with headers and data rows."
64
+ description="A list of recent invoices."
18
65
  code={`<Table>
19
66
  <TableCaption>A list of your recent invoices.</TableCaption>
20
67
  <TableHeader>
@@ -29,12 +76,18 @@ export function TableDocs() {
29
76
  {invoices.map((invoice) => (
30
77
  <TableRow key={invoice.invoice}>
31
78
  <TableCell className="font-medium">{invoice.invoice}</TableCell>
32
- <TableCell>{invoice.status}</TableCell>
33
- <TableCell>{invoice.method}</TableCell>
34
- <TableCell className="text-right">{invoice.amount}</TableCell>
79
+ <TableCell>{invoice.paymentStatus}</TableCell>
80
+ <TableCell>{invoice.paymentMethod}</TableCell>
81
+ <TableCell className="text-right">{invoice.totalAmount}</TableCell>
35
82
  </TableRow>
36
83
  ))}
37
84
  </TableBody>
85
+ <TableFooter>
86
+ <TableRow>
87
+ <TableCell colSpan={3}>Total</TableCell>
88
+ <TableCell className="text-right">$2,500.00</TableCell>
89
+ </TableRow>
90
+ </TableFooter>
38
91
  </Table>`}
39
92
  >
40
93
  <Table>
@@ -51,14 +104,36 @@ export function TableDocs() {
51
104
  {invoices.map((invoice) => (
52
105
  <TableRow key={invoice.invoice}>
53
106
  <TableCell className="font-medium">{invoice.invoice}</TableCell>
54
- <TableCell>{invoice.status}</TableCell>
55
- <TableCell>{invoice.method}</TableCell>
56
- <TableCell className="text-right">{invoice.amount}</TableCell>
107
+ <TableCell>{invoice.paymentStatus}</TableCell>
108
+ <TableCell>{invoice.paymentMethod}</TableCell>
109
+ <TableCell className="text-right">{invoice.totalAmount}</TableCell>
57
110
  </TableRow>
58
111
  ))}
59
112
  </TableBody>
113
+ <TableFooter>
114
+ <TableRow>
115
+ <TableCell colSpan={3}>Total</TableCell>
116
+ <TableCell className="text-right">$2,500.00</TableCell>
117
+ </TableRow>
118
+ </TableFooter>
60
119
  </Table>
61
120
  </ComponentShowcase>
121
+
122
+ <div className="space-y-4">
123
+ <h3 className="text-xl font-semibold">Props</h3>
124
+ <p className="text-sm text-muted-foreground">The Table component uses standard HTML table elements.</p>
125
+
126
+ <h4 className="text-lg font-medium mt-6">Table</h4>
127
+ <PropsTable
128
+ props={[
129
+ {
130
+ name: 'className',
131
+ type: 'string',
132
+ description: 'Additional class names to apply.',
133
+ },
134
+ ]}
135
+ />
136
+ </div>
62
137
  </ComponentSection>
63
138
  );
64
139
  }
@@ -1,6 +1,7 @@
1
1
  import { ComponentSection, ComponentShowcase } from '@/components/docs/ComponentShowcase';
2
+ import { PropsTable } from '@/components/docs/PropsTable';
2
3
  import { Button } from '@/components/ui/button';
3
- import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
4
+ import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card';
4
5
  import { Input } from '@/components/ui/input';
5
6
  import { Label } from '@/components/ui/label';
6
7
  import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
@@ -13,37 +14,7 @@ export function TabsDocs() {
13
14
  >
14
15
  <ComponentShowcase
15
16
  title="Default"
16
- description="A basic tabs component."
17
- code={`<Tabs defaultValue="account" className="w-[400px]">
18
- <TabsList>
19
- <TabsTrigger value="account">Account</TabsTrigger>
20
- <TabsTrigger value="password">Password</TabsTrigger>
21
- </TabsList>
22
- <TabsContent value="account">
23
- Make changes to your account here.
24
- </TabsContent>
25
- <TabsContent value="password">
26
- Change your password here.
27
- </TabsContent>
28
- </Tabs>`}
29
- >
30
- <Tabs defaultValue="account" className="w-[400px]">
31
- <TabsList>
32
- <TabsTrigger value="account">Account</TabsTrigger>
33
- <TabsTrigger value="password">Password</TabsTrigger>
34
- </TabsList>
35
- <TabsContent value="account" className="p-4">
36
- Make changes to your account here.
37
- </TabsContent>
38
- <TabsContent value="password" className="p-4">
39
- Change your password here.
40
- </TabsContent>
41
- </Tabs>
42
- </ComponentShowcase>
43
-
44
- <ComponentShowcase
45
- title="With Cards"
46
- description="Tabs can contain any content, including cards."
17
+ description="A default tabs component."
47
18
  code={`<Tabs defaultValue="account" className="w-[400px]">
48
19
  <TabsList className="grid w-full grid-cols-2">
49
20
  <TabsTrigger value="account">Account</TabsTrigger>
@@ -53,14 +24,46 @@ export function TabsDocs() {
53
24
  <Card>
54
25
  <CardHeader>
55
26
  <CardTitle>Account</CardTitle>
56
- <CardDescription>Update your account settings.</CardDescription>
27
+ <CardDescription>
28
+ Make changes to your account here. Click save when you're done.
29
+ </CardDescription>
57
30
  </CardHeader>
58
31
  <CardContent className="space-y-2">
59
32
  <div className="space-y-1">
60
33
  <Label htmlFor="name">Name</Label>
61
34
  <Input id="name" defaultValue="Pedro Duarte" />
62
35
  </div>
36
+ <div className="space-y-1">
37
+ <Label htmlFor="username">Username</Label>
38
+ <Input id="username" defaultValue="@peduarte" />
39
+ </div>
63
40
  </CardContent>
41
+ <CardFooter>
42
+ <Button>Save changes</Button>
43
+ </CardFooter>
44
+ </Card>
45
+ </TabsContent>
46
+ <TabsContent value="password">
47
+ <Card>
48
+ <CardHeader>
49
+ <CardTitle>Password</CardTitle>
50
+ <CardDescription>
51
+ Change your password here. After saving, you'll be logged out.
52
+ </CardDescription>
53
+ </CardHeader>
54
+ <CardContent className="space-y-2">
55
+ <div className="space-y-1">
56
+ <Label htmlFor="current">Current password</Label>
57
+ <Input id="current" type="password" />
58
+ </div>
59
+ <div className="space-y-1">
60
+ <Label htmlFor="new">New password</Label>
61
+ <Input id="new" type="password" />
62
+ </div>
63
+ </CardContent>
64
+ <CardFooter>
65
+ <Button>Save password</Button>
66
+ </CardFooter>
64
67
  </Card>
65
68
  </TabsContent>
66
69
  </Tabs>`}
@@ -74,22 +77,28 @@ export function TabsDocs() {
74
77
  <Card>
75
78
  <CardHeader>
76
79
  <CardTitle>Account</CardTitle>
77
- <CardDescription>Update your account settings.</CardDescription>
80
+ <CardDescription>Make changes to your account here. Click save when you're done.</CardDescription>
78
81
  </CardHeader>
79
82
  <CardContent className="space-y-2">
80
83
  <div className="space-y-1">
81
84
  <Label htmlFor="name">Name</Label>
82
85
  <Input id="name" defaultValue="Pedro Duarte" />
83
86
  </div>
84
- <Button>Save changes</Button>
87
+ <div className="space-y-1">
88
+ <Label htmlFor="username">Username</Label>
89
+ <Input id="username" defaultValue="@peduarte" />
90
+ </div>
85
91
  </CardContent>
92
+ <CardFooter>
93
+ <Button>Save changes</Button>
94
+ </CardFooter>
86
95
  </Card>
87
96
  </TabsContent>
88
97
  <TabsContent value="password">
89
98
  <Card>
90
99
  <CardHeader>
91
100
  <CardTitle>Password</CardTitle>
92
- <CardDescription>Change your password.</CardDescription>
101
+ <CardDescription>Change your password here. After saving, you'll be logged out.</CardDescription>
93
102
  </CardHeader>
94
103
  <CardContent className="space-y-2">
95
104
  <div className="space-y-1">
@@ -100,12 +109,115 @@ export function TabsDocs() {
100
109
  <Label htmlFor="new">New password</Label>
101
110
  <Input id="new" type="password" />
102
111
  </div>
103
- <Button>Save password</Button>
104
112
  </CardContent>
113
+ <CardFooter>
114
+ <Button>Save password</Button>
115
+ </CardFooter>
105
116
  </Card>
106
117
  </TabsContent>
107
118
  </Tabs>
108
119
  </ComponentShowcase>
120
+
121
+ <div className="space-y-4">
122
+ <h3 className="text-xl font-semibold">Props</h3>
123
+ <p className="text-sm text-muted-foreground">
124
+ The Tabs component is built on top of{' '}
125
+ <a
126
+ href="https://www.radix-ui.com/primitives/docs/components/tabs"
127
+ className="underline"
128
+ target="_blank"
129
+ rel="noreferrer"
130
+ >
131
+ Radix UI Tabs
132
+ </a>
133
+ .
134
+ </p>
135
+
136
+ <h4 className="text-lg font-medium mt-6">Tabs (Root)</h4>
137
+ <PropsTable
138
+ props={[
139
+ {
140
+ name: 'defaultValue',
141
+ type: 'string',
142
+ description: 'The value of the tab that should be active when initially rendered.',
143
+ },
144
+ {
145
+ name: 'value',
146
+ type: 'string',
147
+ description: 'The controlled value of the tab to activate.',
148
+ },
149
+ {
150
+ name: 'onValueChange',
151
+ type: '(value: string) => void',
152
+ description: 'Event handler called when the value changes.',
153
+ },
154
+ {
155
+ name: 'orientation',
156
+ type: '"horizontal" | "vertical"',
157
+ defaultValue: '"horizontal"',
158
+ description: 'The orientation of the tabs.',
159
+ },
160
+ {
161
+ name: 'dir',
162
+ type: '"ltr" | "rtl"',
163
+ description: 'The reading direction of the tabs.',
164
+ },
165
+ {
166
+ name: 'activationMode',
167
+ type: '"automatic" | "manual"',
168
+ defaultValue: '"automatic"',
169
+ description:
170
+ 'When automatic, tabs are activated when receiving focus. When manual, tabs are activated when clicked.',
171
+ },
172
+ ]}
173
+ />
174
+
175
+ <h4 className="text-lg font-medium mt-6">TabsList</h4>
176
+ <PropsTable
177
+ props={[
178
+ {
179
+ name: 'loop',
180
+ type: 'boolean',
181
+ defaultValue: 'true',
182
+ description: 'When true, keyboard navigation will loop from last tab to first, and vice versa.',
183
+ },
184
+ ]}
185
+ />
186
+
187
+ <h4 className="text-lg font-medium mt-6">TabsTrigger</h4>
188
+ <PropsTable
189
+ props={[
190
+ {
191
+ name: 'value',
192
+ type: 'string',
193
+ required: true,
194
+ description: 'A unique value for the trigger.',
195
+ },
196
+ {
197
+ name: 'disabled',
198
+ type: 'boolean',
199
+ description: 'When true, prevents the user from interacting with the tab.',
200
+ },
201
+ ]}
202
+ />
203
+
204
+ <h4 className="text-lg font-medium mt-6">TabsContent</h4>
205
+ <PropsTable
206
+ props={[
207
+ {
208
+ name: 'value',
209
+ type: 'string',
210
+ required: true,
211
+ description: 'A unique value for the content.',
212
+ },
213
+ {
214
+ name: 'forceMount',
215
+ type: 'boolean',
216
+ description: 'Used to force mounting when more control is needed.',
217
+ },
218
+ ]}
219
+ />
220
+ </div>
109
221
  </ComponentSection>
110
222
  );
111
223
  }
@@ -1,54 +1,60 @@
1
1
  import { ComponentSection, ComponentShowcase } from '@/components/docs/ComponentShowcase';
2
- import { Button } from '@/components/ui/button';
2
+ import { PropsTable } from '@/components/docs/PropsTable';
3
3
  import { Label } from '@/components/ui/label';
4
4
  import { Textarea } from '@/components/ui/textarea';
5
5
 
6
6
  export function TextareaDocs() {
7
7
  return (
8
- <ComponentSection title="Textarea" description="Displays a form textarea for multi-line text input.">
8
+ <ComponentSection
9
+ title="Textarea"
10
+ description="Displays a form textarea or a component that looks like a textarea."
11
+ >
9
12
  <ComponentShowcase
10
13
  title="Default"
11
- description="A basic textarea."
12
- code={`<Textarea placeholder="Type your message here." />`}
13
- >
14
- <Textarea placeholder="Type your message here." className="max-w-md" />
15
- </ComponentShowcase>
16
-
17
- <ComponentShowcase
18
- title="With Label"
19
- description="A textarea with a label."
14
+ description="A default textarea."
20
15
  code={`<div className="grid w-full gap-1.5">
21
16
  <Label htmlFor="message">Your message</Label>
22
17
  <Textarea placeholder="Type your message here." id="message" />
23
18
  </div>`}
24
19
  >
25
- <div className="grid w-full max-w-md gap-1.5">
20
+ <div className="grid w-full gap-1.5">
26
21
  <Label htmlFor="message">Your message</Label>
27
22
  <Textarea placeholder="Type your message here." id="message" />
28
23
  </div>
29
24
  </ComponentShowcase>
30
25
 
31
- <ComponentShowcase
32
- title="With Button"
33
- description="A textarea with a submit button."
34
- code={`<div className="grid w-full gap-2">
35
- <Textarea placeholder="Type your message here." />
36
- <Button>Send message</Button>
37
- </div>`}
38
- >
39
- <div className="grid w-full max-w-md gap-2">
40
- <Textarea placeholder="Type your message here." />
41
- <Button>Send message</Button>
42
- </div>
43
- </ComponentShowcase>
26
+ <div className="space-y-4">
27
+ <h3 className="text-xl font-semibold">Props</h3>
28
+ <p className="text-sm text-muted-foreground">
29
+ The Textarea component accepts all standard HTML textarea attributes.
30
+ </p>
44
31
 
45
- <ComponentShowcase
46
- title="Disabled"
47
- description="A disabled textarea."
48
- code={`<Textarea placeholder="Type your message here." disabled />`}
49
- >
50
- <Textarea placeholder="Type your message here." disabled className="max-w-md" />
51
- </ComponentShowcase>
32
+ <h4 className="text-lg font-medium mt-6">Textarea</h4>
33
+ <PropsTable
34
+ props={[
35
+ {
36
+ name: 'className',
37
+ type: 'string',
38
+ description: 'Additional class names to apply.',
39
+ },
40
+ {
41
+ name: 'placeholder',
42
+ type: 'string',
43
+ description: 'The placeholder object.',
44
+ },
45
+ {
46
+ name: 'disabled',
47
+ type: 'boolean',
48
+ description: 'Whether the textarea is disabled.',
49
+ },
50
+ {
51
+ name: 'required',
52
+ type: 'boolean',
53
+ description: 'Whether the textarea is required.',
54
+ },
55
+ ]}
56
+ />
57
+ </div>
52
58
  </ComponentSection>
53
59
  );
54
60
  }
@@ -0,0 +1,50 @@
1
+ import { ComponentSection, ComponentShowcase } from '@/components/docs/ComponentShowcase';
2
+ import { ThemeToggle } from '@/components/ui/theme-toggle';
3
+ import { useState } from 'react';
4
+
5
+ export function ThemeToggleDocs() {
6
+ const [binaryTheme, setBinaryTheme] = useState('light');
7
+ const [ternaryTheme, setTernaryTheme] = useState('system');
8
+ const [customTheme, setCustomTheme] = useState('light');
9
+
10
+ return (
11
+ <ComponentSection
12
+ title="Theme Toggle"
13
+ description="A component that allows users to switch between light, dark, and system themes."
14
+ >
15
+ <ComponentShowcase
16
+ title="Binary Mode"
17
+ description="The default mode allows toggling between light and dark themes. (Controlled example shown to prevent site theme changes)"
18
+ code={`<ThemeToggle variant="binary" />`}
19
+ >
20
+ <ThemeToggle variant="binary" customTheme={binaryTheme} onThemeChange={setBinaryTheme} />
21
+ </ComponentShowcase>
22
+
23
+ <ComponentShowcase
24
+ title="Ternary Mode"
25
+ description="Ternary mode allows choosing between light, dark, and system themes using a dropdown menu. (Controlled example shown to prevent site theme changes)"
26
+ code={`<ThemeToggle variant="ternary" />`}
27
+ >
28
+ <ThemeToggle variant="ternary" customTheme={ternaryTheme} onThemeChange={setTernaryTheme} />
29
+ </ComponentShowcase>
30
+
31
+ <ComponentShowcase
32
+ title="Custom State Integration"
33
+ description="You can control the theme externally by passing customTheme and onThemeChange props."
34
+ code={`const [theme, setTheme] = useState('light');
35
+
36
+ <ThemeToggle
37
+ customTheme={theme}
38
+ onThemeChange={(newTheme) => setTheme(newTheme)}
39
+ />
40
+
41
+ <p>Current Theme: {theme}</p>`}
42
+ >
43
+ <div className="flex flex-col items-center gap-4">
44
+ <ThemeToggle customTheme={customTheme} onThemeChange={(newTheme) => setCustomTheme(newTheme)} />
45
+ <p className="text-sm font-medium">Current Selection: {customTheme}</p>
46
+ </div>
47
+ </ComponentShowcase>
48
+ </ComponentSection>
49
+ );
50
+ }