@gv-tech/design-system 2.5.0 → 2.5.2

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 (440) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/package.json +5 -2
  3. package/.agent/skills/dogfood-components/SKILL.md +0 -34
  4. package/.agent/skills/maintain-component/SKILL.md +0 -77
  5. package/.agent/workflows/native-playground.md +0 -93
  6. package/.github/CODEOWNERS +0 -2
  7. package/.github/CONTRIBUTING.md +0 -42
  8. package/.github/FUNDING.yml +0 -4
  9. package/.github/PULL_REQUEST_TEMPLATE/build.md +0 -5
  10. package/.github/PULL_REQUEST_TEMPLATE/standard.md +0 -3
  11. package/.github/RELEASING.md +0 -37
  12. package/.github/copilot-instructions.md +0 -61
  13. package/.github/workflows/ci.yml +0 -91
  14. package/.github/workflows/codeql-analysis.yml +0 -34
  15. package/.github/workflows/release-please.yml +0 -79
  16. package/.husky/pre-commit +0 -1
  17. package/.prettierignore +0 -3
  18. package/.release-please-manifest.json +0 -9
  19. package/.tool-versions +0 -1
  20. package/.vscode/launch.json +0 -22
  21. package/.vscode/mcp.json +0 -8
  22. package/.vscode/settings.json +0 -30
  23. package/.yarnrc.yml +0 -7
  24. package/SECURITY.md +0 -9
  25. package/apps/.gitkeep +0 -0
  26. package/apps/native-playground/CHANGELOG.md +0 -8
  27. package/apps/native-playground/app.json +0 -37
  28. package/apps/native-playground/assets/fonts/.gitkeep +0 -0
  29. package/apps/native-playground/assets/images/adaptive-icon.png +0 -0
  30. package/apps/native-playground/assets/images/favicon.png +0 -0
  31. package/apps/native-playground/assets/images/icon.png +0 -0
  32. package/apps/native-playground/assets/images/splash-icon.png +0 -0
  33. package/apps/native-playground/babel.config.js +0 -6
  34. package/apps/native-playground/eas.json +0 -25
  35. package/apps/native-playground/index.js +0 -8
  36. package/apps/native-playground/metro.config.js +0 -26
  37. package/apps/native-playground/nativewind-env.d.ts +0 -1
  38. package/apps/native-playground/package.json +0 -23
  39. package/apps/native-playground/project.json +0 -15
  40. package/apps/native-playground/src/app/App.tsx +0 -842
  41. package/apps/native-playground/src/global.css +0 -49
  42. package/apps/native-playground/tailwind.config.js +0 -49
  43. package/apps/native-playground/tsconfig.app.json +0 -24
  44. package/apps/native-playground/tsconfig.json +0 -23
  45. package/apps/native-playground/tsconfig.spec.json +0 -24
  46. package/apps/playground-web/CHANGELOG.md +0 -8
  47. package/apps/playground-web/index.html +0 -13
  48. package/apps/playground-web/package.json +0 -31
  49. package/apps/playground-web/public/favicon.png +0 -0
  50. package/apps/playground-web/public/index.demo.html +0 -40
  51. package/apps/playground-web/public/logo192.png +0 -0
  52. package/apps/playground-web/public/logo512.png +0 -0
  53. package/apps/playground-web/public/manifest.json +0 -25
  54. package/apps/playground-web/public/robots.txt +0 -2
  55. package/apps/playground-web/src/App.tsx +0 -179
  56. package/apps/playground-web/src/components/docs/CodeBlock.tsx +0 -34
  57. package/apps/playground-web/src/components/docs/CombinedDocsLayout.tsx +0 -103
  58. package/apps/playground-web/src/components/docs/ComponentShowcase.tsx +0 -96
  59. package/apps/playground-web/src/components/docs/ErrorBoundary.tsx +0 -55
  60. package/apps/playground-web/src/components/docs/Footer.tsx +0 -146
  61. package/apps/playground-web/src/components/docs/PropsTable.tsx +0 -43
  62. package/apps/playground-web/src/components/docs/Search.tsx +0 -75
  63. package/apps/playground-web/src/components/docs/Sidebar.tsx +0 -77
  64. package/apps/playground-web/src/components/docs/ThemeToggle.tsx +0 -19
  65. package/apps/playground-web/src/components/docs/index.ts +0 -9
  66. package/apps/playground-web/src/config/docs.ts +0 -293
  67. package/apps/playground-web/src/globals.css +0 -148
  68. package/apps/playground-web/src/hooks/useDocMetadata.ts +0 -34
  69. package/apps/playground-web/src/hooks/usePackageManager.tsx +0 -42
  70. package/apps/playground-web/src/lib/react-native-shim.js +0 -34
  71. package/apps/playground-web/src/main.tsx +0 -11
  72. package/apps/playground-web/src/pages/index.ts +0 -4
  73. package/apps/playground-web/src/pages/native/AccordionDocs.tsx +0 -85
  74. package/apps/playground-web/src/pages/native/AlertDialogDocs.tsx +0 -128
  75. package/apps/playground-web/src/pages/native/AlertDocs.tsx +0 -89
  76. package/apps/playground-web/src/pages/native/AspectRatioDocs.tsx +0 -52
  77. package/apps/playground-web/src/pages/native/AvatarDocs.tsx +0 -92
  78. package/apps/playground-web/src/pages/native/BadgeDocs.tsx +0 -63
  79. package/apps/playground-web/src/pages/native/BreadcrumbDocs.tsx +0 -71
  80. package/apps/playground-web/src/pages/native/ButtonDocs.tsx +0 -103
  81. package/apps/playground-web/src/pages/native/CalendarDocs.tsx +0 -74
  82. package/apps/playground-web/src/pages/native/CardDocs.tsx +0 -75
  83. package/apps/playground-web/src/pages/native/CarouselDocs.tsx +0 -113
  84. package/apps/playground-web/src/pages/native/ChartDocs.tsx +0 -115
  85. package/apps/playground-web/src/pages/native/CheckboxDocs.tsx +0 -38
  86. package/apps/playground-web/src/pages/native/CollapsibleDocs.tsx +0 -89
  87. package/apps/playground-web/src/pages/native/CommandDocs.tsx +0 -170
  88. package/apps/playground-web/src/pages/native/ContextMenuDocs.tsx +0 -121
  89. package/apps/playground-web/src/pages/native/DialogDocs.tsx +0 -132
  90. package/apps/playground-web/src/pages/native/DrawerDocs.tsx +0 -158
  91. package/apps/playground-web/src/pages/native/DropdownMenuDocs.tsx +0 -168
  92. package/apps/playground-web/src/pages/native/HoverCardDocs.tsx +0 -119
  93. package/apps/playground-web/src/pages/native/InputDocs.tsx +0 -86
  94. package/apps/playground-web/src/pages/native/LabelDocs.tsx +0 -55
  95. package/apps/playground-web/src/pages/native/MenubarDocs.tsx +0 -197
  96. package/apps/playground-web/src/pages/native/NavigationMenuDocs.tsx +0 -190
  97. package/apps/playground-web/src/pages/native/PaginationDocs.tsx +0 -70
  98. package/apps/playground-web/src/pages/native/PopoverDocs.tsx +0 -156
  99. package/apps/playground-web/src/pages/native/ProgressDocs.tsx +0 -61
  100. package/apps/playground-web/src/pages/native/RadioGroupDocs.tsx +0 -125
  101. package/apps/playground-web/src/pages/native/ResizableDocs.tsx +0 -118
  102. package/apps/playground-web/src/pages/native/ScrollAreaDocs.tsx +0 -92
  103. package/apps/playground-web/src/pages/native/SearchDocs.tsx +0 -150
  104. package/apps/playground-web/src/pages/native/SelectDocs.tsx +0 -141
  105. package/apps/playground-web/src/pages/native/SeparatorDocs.tsx +0 -72
  106. package/apps/playground-web/src/pages/native/SheetDocs.tsx +0 -140
  107. package/apps/playground-web/src/pages/native/SkeletonDocs.tsx +0 -44
  108. package/apps/playground-web/src/pages/native/SliderDocs.tsx +0 -118
  109. package/apps/playground-web/src/pages/native/SonnerDocs.tsx +0 -111
  110. package/apps/playground-web/src/pages/native/SwitchDocs.tsx +0 -87
  111. package/apps/playground-web/src/pages/native/TableDocs.tsx +0 -67
  112. package/apps/playground-web/src/pages/native/TabsDocs.tsx +0 -175
  113. package/apps/playground-web/src/pages/native/TextareaDocs.tsx +0 -61
  114. package/apps/playground-web/src/pages/native/ThemeToggleDocs.tsx +0 -288
  115. package/apps/playground-web/src/pages/native/ToastDocs.tsx +0 -124
  116. package/apps/playground-web/src/pages/native/ToggleDocs.tsx +0 -81
  117. package/apps/playground-web/src/pages/native/ToggleGroupDocs.tsx +0 -128
  118. package/apps/playground-web/src/pages/native/TooltipDocs.tsx +0 -140
  119. package/apps/playground-web/src/pages/native/index.ts +0 -47
  120. package/apps/playground-web/src/pages/shared/ColorTokensDocs.tsx +0 -234
  121. package/apps/playground-web/src/pages/shared/GettingStarted.tsx +0 -413
  122. package/apps/playground-web/src/pages/web/AccordionDocs.tsx +0 -194
  123. package/apps/playground-web/src/pages/web/AlertDialogDocs.tsx +0 -157
  124. package/apps/playground-web/src/pages/web/AlertDocs.tsx +0 -110
  125. package/apps/playground-web/src/pages/web/AspectRatioDocs.tsx +0 -94
  126. package/apps/playground-web/src/pages/web/AvatarDocs.tsx +0 -81
  127. package/apps/playground-web/src/pages/web/BadgeDocs.tsx +0 -66
  128. package/apps/playground-web/src/pages/web/BreadcrumbDocs.tsx +0 -93
  129. package/apps/playground-web/src/pages/web/ButtonDocs.tsx +0 -129
  130. package/apps/playground-web/src/pages/web/CalendarDocs.tsx +0 -78
  131. package/apps/playground-web/src/pages/web/CardDocs.tsx +0 -115
  132. package/apps/playground-web/src/pages/web/CarouselDocs.tsx +0 -176
  133. package/apps/playground-web/src/pages/web/ChartDocs.tsx +0 -151
  134. package/apps/playground-web/src/pages/web/CheckboxDocs.tsx +0 -95
  135. package/apps/playground-web/src/pages/web/CollapsibleDocs.tsx +0 -111
  136. package/apps/playground-web/src/pages/web/CommandDocs.tsx +0 -219
  137. package/apps/playground-web/src/pages/web/ContextMenuDocs.tsx +0 -164
  138. package/apps/playground-web/src/pages/web/DialogDocs.tsx +0 -175
  139. package/apps/playground-web/src/pages/web/DrawerDocs.tsx +0 -283
  140. package/apps/playground-web/src/pages/web/DropdownMenuDocs.tsx +0 -319
  141. package/apps/playground-web/src/pages/web/FormDocs.tsx +0 -175
  142. package/apps/playground-web/src/pages/web/HoverCardDocs.tsx +0 -151
  143. package/apps/playground-web/src/pages/web/InputDocs.tsx +0 -118
  144. package/apps/playground-web/src/pages/web/LabelDocs.tsx +0 -59
  145. package/apps/playground-web/src/pages/web/MenubarDocs.tsx +0 -296
  146. package/apps/playground-web/src/pages/web/NavigationMenuDocs.tsx +0 -263
  147. package/apps/playground-web/src/pages/web/PaginationDocs.tsx +0 -102
  148. package/apps/playground-web/src/pages/web/PopoverDocs.tsx +0 -189
  149. package/apps/playground-web/src/pages/web/ProgressDocs.tsx +0 -70
  150. package/apps/playground-web/src/pages/web/RadioGroupDocs.tsx +0 -137
  151. package/apps/playground-web/src/pages/web/ResizableDocs.tsx +0 -143
  152. package/apps/playground-web/src/pages/web/ScrollAreaDocs.tsx +0 -107
  153. package/apps/playground-web/src/pages/web/SearchDocs.tsx +0 -203
  154. package/apps/playground-web/src/pages/web/SelectDocs.tsx +0 -164
  155. package/apps/playground-web/src/pages/web/SeparatorDocs.tsx +0 -88
  156. package/apps/playground-web/src/pages/web/SheetDocs.tsx +0 -186
  157. package/apps/playground-web/src/pages/web/SkeletonDocs.tsx +0 -53
  158. package/apps/playground-web/src/pages/web/SliderDocs.tsx +0 -119
  159. package/apps/playground-web/src/pages/web/SonnerDocs.tsx +0 -126
  160. package/apps/playground-web/src/pages/web/SwitchDocs.tsx +0 -91
  161. package/apps/playground-web/src/pages/web/TableDocs.tsx +0 -148
  162. package/apps/playground-web/src/pages/web/TabsDocs.tsx +0 -241
  163. package/apps/playground-web/src/pages/web/TextareaDocs.tsx +0 -65
  164. package/apps/playground-web/src/pages/web/ThemeToggleDocs.tsx +0 -303
  165. package/apps/playground-web/src/pages/web/ToastDocs.tsx +0 -149
  166. package/apps/playground-web/src/pages/web/ToggleDocs.tsx +0 -85
  167. package/apps/playground-web/src/pages/web/ToggleGroupDocs.tsx +0 -140
  168. package/apps/playground-web/src/pages/web/TooltipDocs.tsx +0 -150
  169. package/apps/playground-web/src/pages/web/index.ts +0 -47
  170. package/apps/playground-web/src/routes/doc-routes.tsx +0 -363
  171. package/apps/playground-web/tailwind.config.js +0 -47
  172. package/apps/playground-web/tsconfig.app.json +0 -16
  173. package/apps/playground-web/tsconfig.json +0 -4
  174. package/apps/playground-web/tsconfig.node.json +0 -13
  175. package/apps/playground-web/vite.config.ts +0 -41
  176. package/components.json +0 -20
  177. package/docs/architecture-pivot.md +0 -165
  178. package/docs/native-setup-decision.md +0 -57
  179. package/docs/phase-1-tracker.md +0 -144
  180. package/docs/release-tooling-evaluation.md +0 -67
  181. package/docs/universal-implementation.md +0 -195
  182. package/docs/update-plan.md +0 -268
  183. package/eslint.config.mjs +0 -13
  184. package/nx.json +0 -50
  185. package/packages/.gitkeep +0 -0
  186. package/packages/design-tokens/CHANGELOG.md +0 -8
  187. package/packages/design-tokens/package.json +0 -20
  188. package/packages/design-tokens/src/index.ts +0 -35
  189. package/packages/design-tokens/src/palette.ts +0 -36
  190. package/packages/design-tokens/src/radii.ts +0 -26
  191. package/packages/design-tokens/src/shadows.ts +0 -16
  192. package/packages/design-tokens/src/spacing.ts +0 -33
  193. package/packages/design-tokens/src/theme.ts +0 -54
  194. package/packages/design-tokens/src/typography.ts +0 -36
  195. package/packages/design-tokens/tsconfig.json +0 -17
  196. package/packages/ui-core/CHANGELOG.md +0 -8
  197. package/packages/ui-core/package.json +0 -40
  198. package/packages/ui-core/src/contracts/accordion.ts +0 -23
  199. package/packages/ui-core/src/contracts/alert-dialog.ts +0 -48
  200. package/packages/ui-core/src/contracts/alert.ts +0 -17
  201. package/packages/ui-core/src/contracts/aspect-ratio.ts +0 -7
  202. package/packages/ui-core/src/contracts/avatar.ts +0 -17
  203. package/packages/ui-core/src/contracts/badge.ts +0 -7
  204. package/packages/ui-core/src/contracts/breadcrumb.ts +0 -37
  205. package/packages/ui-core/src/contracts/button.ts +0 -17
  206. package/packages/ui-core/src/contracts/calendar.ts +0 -4
  207. package/packages/ui-core/src/contracts/card.ts +0 -11
  208. package/packages/ui-core/src/contracts/carousel.ts +0 -29
  209. package/packages/ui-core/src/contracts/chart.ts +0 -31
  210. package/packages/ui-core/src/contracts/checkbox.ts +0 -11
  211. package/packages/ui-core/src/contracts/collapsible.ts +0 -21
  212. package/packages/ui-core/src/contracts/command.ts +0 -43
  213. package/packages/ui-core/src/contracts/context-menu.ts +0 -78
  214. package/packages/ui-core/src/contracts/dialog.ts +0 -29
  215. package/packages/ui-core/src/contracts/drawer.ts +0 -39
  216. package/packages/ui-core/src/contracts/dropdown-menu.ts +0 -87
  217. package/packages/ui-core/src/contracts/form.ts +0 -29
  218. package/packages/ui-core/src/contracts/hover-card.ts +0 -21
  219. package/packages/ui-core/src/contracts/input.ts +0 -11
  220. package/packages/ui-core/src/contracts/label.ts +0 -7
  221. package/packages/ui-core/src/contracts/menubar.ts +0 -86
  222. package/packages/ui-core/src/contracts/navigation-menu.ts +0 -55
  223. package/packages/ui-core/src/contracts/pagination.ts +0 -38
  224. package/packages/ui-core/src/contracts/popover.ts +0 -28
  225. package/packages/ui-core/src/contracts/progress.ts +0 -4
  226. package/packages/ui-core/src/contracts/radio.ts +0 -16
  227. package/packages/ui-core/src/contracts/resizable.ts +0 -36
  228. package/packages/ui-core/src/contracts/scroll-area.ts +0 -15
  229. package/packages/ui-core/src/contracts/search.ts +0 -13
  230. package/packages/ui-core/src/contracts/select.ts +0 -64
  231. package/packages/ui-core/src/contracts/separator.ts +0 -5
  232. package/packages/ui-core/src/contracts/sheet.ts +0 -58
  233. package/packages/ui-core/src/contracts/skeleton.ts +0 -6
  234. package/packages/ui-core/src/contracts/slider.ts +0 -15
  235. package/packages/ui-core/src/contracts/sonner.ts +0 -15
  236. package/packages/ui-core/src/contracts/switch.ts +0 -11
  237. package/packages/ui-core/src/contracts/table.ts +0 -41
  238. package/packages/ui-core/src/contracts/tabs.ts +0 -31
  239. package/packages/ui-core/src/contracts/text.ts +0 -12
  240. package/packages/ui-core/src/contracts/textarea.ts +0 -7
  241. package/packages/ui-core/src/contracts/theme-provider.ts +0 -14
  242. package/packages/ui-core/src/contracts/theme-toggle.ts +0 -15
  243. package/packages/ui-core/src/contracts/toast.ts +0 -15
  244. package/packages/ui-core/src/contracts/toaster.ts +0 -3
  245. package/packages/ui-core/src/contracts/toggle-group.ts +0 -23
  246. package/packages/ui-core/src/contracts/toggle.ts +0 -49
  247. package/packages/ui-core/src/contracts/tooltip.ts +0 -28
  248. package/packages/ui-core/src/index.ts +0 -327
  249. package/packages/ui-core/tsconfig.json +0 -18
  250. package/packages/ui-native/CHANGELOG.md +0 -8
  251. package/packages/ui-native/package.json +0 -76
  252. package/packages/ui-native/src/accordion.tsx +0 -93
  253. package/packages/ui-native/src/alert-dialog.tsx +0 -123
  254. package/packages/ui-native/src/alert.tsx +0 -50
  255. package/packages/ui-native/src/aspect-ratio.tsx +0 -9
  256. package/packages/ui-native/src/avatar.tsx +0 -38
  257. package/packages/ui-native/src/badge.tsx +0 -51
  258. package/packages/ui-native/src/breadcrumb.tsx +0 -9
  259. package/packages/ui-native/src/button.test.tsx +0 -27
  260. package/packages/ui-native/src/button.tsx +0 -75
  261. package/packages/ui-native/src/calendar.tsx +0 -9
  262. package/packages/ui-native/src/card.test.tsx +0 -33
  263. package/packages/ui-native/src/card.tsx +0 -56
  264. package/packages/ui-native/src/carousel.tsx +0 -9
  265. package/packages/ui-native/src/chart.tsx +0 -9
  266. package/packages/ui-native/src/checkbox.test.tsx +0 -58
  267. package/packages/ui-native/src/checkbox.tsx +0 -31
  268. package/packages/ui-native/src/collapsible.test.tsx +0 -50
  269. package/packages/ui-native/src/collapsible.tsx +0 -15
  270. package/packages/ui-native/src/command.tsx +0 -9
  271. package/packages/ui-native/src/context-menu.tsx +0 -9
  272. package/packages/ui-native/src/dialog.test.tsx +0 -91
  273. package/packages/ui-native/src/dialog.tsx +0 -121
  274. package/packages/ui-native/src/drawer.tsx +0 -9
  275. package/packages/ui-native/src/dropdown-menu.tsx +0 -9
  276. package/packages/ui-native/src/form.tsx +0 -9
  277. package/packages/ui-native/src/hover-card.tsx +0 -9
  278. package/packages/ui-native/src/index.ts +0 -209
  279. package/packages/ui-native/src/input.test.tsx +0 -27
  280. package/packages/ui-native/src/input.tsx +0 -27
  281. package/packages/ui-native/src/label.tsx +0 -29
  282. package/packages/ui-native/src/lib/render-native.tsx +0 -17
  283. package/packages/ui-native/src/lib/utils.ts +0 -6
  284. package/packages/ui-native/src/menubar.tsx +0 -9
  285. package/packages/ui-native/src/nativewind-env.d.ts +0 -1
  286. package/packages/ui-native/src/navigation-menu.tsx +0 -9
  287. package/packages/ui-native/src/pagination.tsx +0 -9
  288. package/packages/ui-native/src/popover.tsx +0 -9
  289. package/packages/ui-native/src/progress.tsx +0 -9
  290. package/packages/ui-native/src/radio-group.test.tsx +0 -77
  291. package/packages/ui-native/src/radio-group.tsx +0 -42
  292. package/packages/ui-native/src/resizable.tsx +0 -25
  293. package/packages/ui-native/src/scroll-area.tsx +0 -9
  294. package/packages/ui-native/src/search.tsx +0 -17
  295. package/packages/ui-native/src/select.tsx +0 -229
  296. package/packages/ui-native/src/separator.tsx +0 -20
  297. package/packages/ui-native/src/sheet.test.tsx +0 -93
  298. package/packages/ui-native/src/sheet.tsx +0 -127
  299. package/packages/ui-native/src/skeleton.test.tsx +0 -29
  300. package/packages/ui-native/src/skeleton.tsx +0 -31
  301. package/packages/ui-native/src/slider.tsx +0 -9
  302. package/packages/ui-native/src/sonner.tsx +0 -9
  303. package/packages/ui-native/src/switch.tsx +0 -34
  304. package/packages/ui-native/src/table.tsx +0 -73
  305. package/packages/ui-native/src/tabs.tsx +0 -74
  306. package/packages/ui-native/src/text.test.tsx +0 -24
  307. package/packages/ui-native/src/text.tsx +0 -43
  308. package/packages/ui-native/src/textarea.test.tsx +0 -27
  309. package/packages/ui-native/src/textarea.tsx +0 -29
  310. package/packages/ui-native/src/theme-provider.tsx +0 -6
  311. package/packages/ui-native/src/theme-toggle.tsx +0 -11
  312. package/packages/ui-native/src/toast.test.tsx +0 -61
  313. package/packages/ui-native/src/toast.tsx +0 -88
  314. package/packages/ui-native/src/toaster.tsx +0 -9
  315. package/packages/ui-native/src/toggle-group.tsx +0 -78
  316. package/packages/ui-native/src/toggle.tsx +0 -35
  317. package/packages/ui-native/src/tooltip.tsx +0 -44
  318. package/packages/ui-native/tsconfig.json +0 -23
  319. package/packages/ui-native/vite.config.ts +0 -17
  320. package/packages/ui-web/CHANGELOG.md +0 -8
  321. package/packages/ui-web/package.json +0 -84
  322. package/packages/ui-web/src/accordion.test.tsx +0 -86
  323. package/packages/ui-web/src/accordion.tsx +0 -58
  324. package/packages/ui-web/src/alert-dialog.test.tsx +0 -91
  325. package/packages/ui-web/src/alert-dialog.tsx +0 -121
  326. package/packages/ui-web/src/alert.test.tsx +0 -47
  327. package/packages/ui-web/src/alert.tsx +0 -49
  328. package/packages/ui-web/src/aspect-ratio.test.tsx +0 -34
  329. package/packages/ui-web/src/aspect-ratio.tsx +0 -7
  330. package/packages/ui-web/src/avatar.test.tsx +0 -33
  331. package/packages/ui-web/src/avatar.tsx +0 -40
  332. package/packages/ui-web/src/badge.test.tsx +0 -24
  333. package/packages/ui-web/src/badge.tsx +0 -34
  334. package/packages/ui-web/src/breadcrumb.tsx +0 -105
  335. package/packages/ui-web/src/button.test.tsx +0 -62
  336. package/packages/ui-web/src/button.tsx +0 -47
  337. package/packages/ui-web/src/calendar.test.tsx +0 -23
  338. package/packages/ui-web/src/calendar.tsx +0 -163
  339. package/packages/ui-web/src/card.test.tsx +0 -35
  340. package/packages/ui-web/src/card.tsx +0 -46
  341. package/packages/ui-web/src/carousel.test.tsx +0 -37
  342. package/packages/ui-web/src/carousel.tsx +0 -234
  343. package/packages/ui-web/src/chart.test.tsx +0 -62
  344. package/packages/ui-web/src/chart.tsx +0 -296
  345. package/packages/ui-web/src/checkbox.test.tsx +0 -30
  346. package/packages/ui-web/src/checkbox.tsx +0 -31
  347. package/packages/ui-web/src/collapsible.test.tsx +0 -51
  348. package/packages/ui-web/src/collapsible.tsx +0 -15
  349. package/packages/ui-web/src/command.test.tsx +0 -79
  350. package/packages/ui-web/src/command.tsx +0 -154
  351. package/packages/ui-web/src/context-menu.test.tsx +0 -37
  352. package/packages/ui-web/src/context-menu.tsx +0 -208
  353. package/packages/ui-web/src/dialog.test.tsx +0 -66
  354. package/packages/ui-web/src/dialog.tsx +0 -95
  355. package/packages/ui-web/src/drawer.test.tsx +0 -68
  356. package/packages/ui-web/src/drawer.tsx +0 -110
  357. package/packages/ui-web/src/dropdown-menu.test.tsx +0 -93
  358. package/packages/ui-web/src/dropdown-menu.tsx +0 -212
  359. package/packages/ui-web/src/form.test.tsx +0 -84
  360. package/packages/ui-web/src/form.tsx +0 -160
  361. package/packages/ui-web/src/hooks/use-theme.ts +0 -15
  362. package/packages/ui-web/src/hooks/use-toast.ts +0 -189
  363. package/packages/ui-web/src/hover-card.test.tsx +0 -48
  364. package/packages/ui-web/src/hover-card.tsx +0 -35
  365. package/packages/ui-web/src/index.ts +0 -474
  366. package/packages/ui-web/src/input.test.tsx +0 -33
  367. package/packages/ui-web/src/input.tsx +0 -23
  368. package/packages/ui-web/src/label.test.tsx +0 -27
  369. package/packages/ui-web/src/label.tsx +0 -21
  370. package/packages/ui-web/src/lib/utils.ts +0 -6
  371. package/packages/ui-web/src/menubar.test.tsx +0 -92
  372. package/packages/ui-web/src/menubar.tsx +0 -244
  373. package/packages/ui-web/src/navigation-menu.test.tsx +0 -53
  374. package/packages/ui-web/src/navigation-menu.tsx +0 -143
  375. package/packages/ui-web/src/pagination.test.tsx +0 -57
  376. package/packages/ui-web/src/pagination.tsx +0 -107
  377. package/packages/ui-web/src/popover.test.tsx +0 -31
  378. package/packages/ui-web/src/popover.tsx +0 -45
  379. package/packages/ui-web/src/progress.test.tsx +0 -18
  380. package/packages/ui-web/src/progress.tsx +0 -28
  381. package/packages/ui-web/src/radio-group.test.tsx +0 -39
  382. package/packages/ui-web/src/radio-group.tsx +0 -41
  383. package/packages/ui-web/src/resizable.test.tsx +0 -23
  384. package/packages/ui-web/src/resizable.tsx +0 -59
  385. package/packages/ui-web/src/scroll-area.test.tsx +0 -15
  386. package/packages/ui-web/src/scroll-area.tsx +0 -42
  387. package/packages/ui-web/src/search.test.tsx +0 -81
  388. package/packages/ui-web/src/search.tsx +0 -87
  389. package/packages/ui-web/src/select.test.tsx +0 -42
  390. package/packages/ui-web/src/select.tsx +0 -169
  391. package/packages/ui-web/src/separator.test.tsx +0 -16
  392. package/packages/ui-web/src/separator.tsx +0 -24
  393. package/packages/ui-web/src/setupTests.ts +0 -114
  394. package/packages/ui-web/src/sheet.test.tsx +0 -48
  395. package/packages/ui-web/src/sheet.tsx +0 -136
  396. package/packages/ui-web/src/skeleton.test.tsx +0 -13
  397. package/packages/ui-web/src/skeleton.tsx +0 -10
  398. package/packages/ui-web/src/slider.test.tsx +0 -18
  399. package/packages/ui-web/src/slider.tsx +0 -27
  400. package/packages/ui-web/src/sonner.test.tsx +0 -13
  401. package/packages/ui-web/src/sonner.tsx +0 -32
  402. package/packages/ui-web/src/switch.test.tsx +0 -22
  403. package/packages/ui-web/src/switch.tsx +0 -31
  404. package/packages/ui-web/src/table.test.tsx +0 -29
  405. package/packages/ui-web/src/table.tsx +0 -104
  406. package/packages/ui-web/src/tabs.test.tsx +0 -43
  407. package/packages/ui-web/src/tabs.tsx +0 -62
  408. package/packages/ui-web/src/text.test.tsx +0 -34
  409. package/packages/ui-web/src/text.tsx +0 -55
  410. package/packages/ui-web/src/textarea.test.tsx +0 -21
  411. package/packages/ui-web/src/textarea.tsx +0 -25
  412. package/packages/ui-web/src/theme-provider.tsx +0 -15
  413. package/packages/ui-web/src/theme-toggle.test.tsx +0 -49
  414. package/packages/ui-web/src/theme-toggle.tsx +0 -92
  415. package/packages/ui-web/src/toast.test.tsx +0 -42
  416. package/packages/ui-web/src/toast.tsx +0 -111
  417. package/packages/ui-web/src/toaster.tsx +0 -27
  418. package/packages/ui-web/src/toggle-group.test.tsx +0 -40
  419. package/packages/ui-web/src/toggle-group.tsx +0 -55
  420. package/packages/ui-web/src/toggle.test.tsx +0 -21
  421. package/packages/ui-web/src/toggle.tsx +0 -24
  422. package/packages/ui-web/src/tooltip.tsx +0 -51
  423. package/packages/ui-web/tsconfig.json +0 -24
  424. package/packages/ui-web/vite.config.ts +0 -21
  425. package/postcss.config.mjs +0 -5
  426. package/release-please-config.json +0 -60
  427. package/scripts/build-registry.ts +0 -80
  428. package/scripts/sync-tokens.ts +0 -86
  429. package/scripts/validate.ts +0 -74
  430. package/src/globals.css +0 -146
  431. package/src/index.ts +0 -4
  432. package/src/setupTests.ts +0 -47
  433. package/src/types/nativewind.d.ts +0 -19
  434. package/tailwind.config.js +0 -48
  435. package/tsconfig.build.json +0 -22
  436. package/tsconfig.json +0 -30
  437. package/tsconfig.node.json +0 -11
  438. package/vite.config.ts +0 -106
  439. package/vitest.config.ts +0 -23
  440. package/wrangler.toml +0 -22
@@ -1,212 +0,0 @@
1
- 'use client';
2
-
3
- import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
4
- import { Check, ChevronRight, Circle } from 'lucide-react';
5
- import * as React from 'react';
6
-
7
- import {
8
- DropdownMenuBaseProps,
9
- DropdownMenuCheckboxItemBaseProps,
10
- DropdownMenuContentBaseProps,
11
- DropdownMenuGroupBaseProps,
12
- DropdownMenuItemBaseProps,
13
- DropdownMenuLabelBaseProps,
14
- DropdownMenuRadioGroupBaseProps,
15
- DropdownMenuRadioItemBaseProps,
16
- DropdownMenuSeparatorBaseProps,
17
- DropdownMenuShortcutBaseProps,
18
- DropdownMenuSubBaseProps,
19
- DropdownMenuSubContentBaseProps,
20
- DropdownMenuSubTriggerBaseProps,
21
- DropdownMenuTriggerBaseProps,
22
- } from '@gv-tech/ui-core';
23
- import { cn } from './lib/utils';
24
-
25
- const DropdownMenu = DropdownMenuPrimitive.Root;
26
-
27
- const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
28
-
29
- const DropdownMenuGroup = DropdownMenuPrimitive.Group;
30
-
31
- const DropdownMenuPortal = DropdownMenuPrimitive.Portal;
32
-
33
- const DropdownMenuSub = DropdownMenuPrimitive.Sub;
34
-
35
- const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
36
-
37
- const DropdownMenuSubTrigger = React.forwardRef<
38
- React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,
39
- React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & DropdownMenuSubTriggerBaseProps
40
- >(({ className, inset, children, ...props }, ref) => (
41
- <DropdownMenuPrimitive.SubTrigger
42
- ref={ref}
43
- className={cn(
44
- 'flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
45
- inset && 'pl-8',
46
- className,
47
- )}
48
- {...props}
49
- >
50
- {children}
51
- <ChevronRight className="ml-auto" />
52
- </DropdownMenuPrimitive.SubTrigger>
53
- ));
54
- DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
55
-
56
- const DropdownMenuSubContent = React.forwardRef<
57
- React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
58
- React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent> & DropdownMenuSubContentBaseProps
59
- >(({ className, ...props }, ref) => (
60
- <DropdownMenuPrimitive.SubContent
61
- ref={ref}
62
- className={cn(
63
- 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]',
64
- className,
65
- )}
66
- {...props}
67
- />
68
- ));
69
- DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
70
-
71
- const DropdownMenuContent = React.forwardRef<
72
- React.ElementRef<typeof DropdownMenuPrimitive.Content>,
73
- React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content> & DropdownMenuContentBaseProps
74
- >(({ className, sideOffset = 4, ...props }, ref) => (
75
- <DropdownMenuPrimitive.Portal>
76
- <DropdownMenuPrimitive.Content
77
- ref={ref}
78
- sideOffset={sideOffset}
79
- className={cn(
80
- 'z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md',
81
- 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]',
82
- className,
83
- )}
84
- {...props}
85
- />
86
- </DropdownMenuPrimitive.Portal>
87
- ));
88
- DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
89
-
90
- const DropdownMenuItem = React.forwardRef<
91
- React.ElementRef<typeof DropdownMenuPrimitive.Item>,
92
- React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & DropdownMenuItemBaseProps
93
- >(({ className, inset, ...props }, ref) => (
94
- <DropdownMenuPrimitive.Item
95
- ref={ref}
96
- className={cn(
97
- 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0',
98
- inset && 'pl-8',
99
- className,
100
- )}
101
- {...props}
102
- />
103
- ));
104
- DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
105
-
106
- const DropdownMenuCheckboxItem = React.forwardRef<
107
- React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,
108
- React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem> & DropdownMenuCheckboxItemBaseProps
109
- >(({ className, children, checked, ...props }, ref) => (
110
- <DropdownMenuPrimitive.CheckboxItem
111
- ref={ref}
112
- className={cn(
113
- 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
114
- className,
115
- )}
116
- checked={checked}
117
- {...props}
118
- >
119
- <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
120
- <DropdownMenuPrimitive.ItemIndicator>
121
- <Check className="h-4 w-4" />
122
- </DropdownMenuPrimitive.ItemIndicator>
123
- </span>
124
- {children}
125
- </DropdownMenuPrimitive.CheckboxItem>
126
- ));
127
- DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
128
-
129
- const DropdownMenuRadioItem = React.forwardRef<
130
- React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,
131
- React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem> & DropdownMenuRadioItemBaseProps
132
- >(({ className, children, ...props }, ref) => (
133
- <DropdownMenuPrimitive.RadioItem
134
- ref={ref}
135
- className={cn(
136
- 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
137
- className,
138
- )}
139
- {...props}
140
- >
141
- <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
142
- <DropdownMenuPrimitive.ItemIndicator>
143
- <Circle className="h-2 w-2 fill-current" />
144
- </DropdownMenuPrimitive.ItemIndicator>
145
- </span>
146
- {children}
147
- </DropdownMenuPrimitive.RadioItem>
148
- ));
149
- DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
150
-
151
- const DropdownMenuLabel = React.forwardRef<
152
- React.ElementRef<typeof DropdownMenuPrimitive.Label>,
153
- React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & DropdownMenuLabelBaseProps
154
- >(({ className, inset, ...props }, ref) => (
155
- <DropdownMenuPrimitive.Label
156
- ref={ref}
157
- className={cn('px-2 py-1.5 text-sm font-semibold', inset && 'pl-8', className)}
158
- {...props}
159
- />
160
- ));
161
- DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
162
-
163
- const DropdownMenuSeparator = React.forwardRef<
164
- React.ElementRef<typeof DropdownMenuPrimitive.Separator>,
165
- React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator> & DropdownMenuSeparatorBaseProps
166
- >(({ className, ...props }, ref) => (
167
- <DropdownMenuPrimitive.Separator ref={ref} className={cn('-mx-1 my-1 h-px bg-muted', className)} {...props} />
168
- ));
169
- DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
170
-
171
- const DropdownMenuShortcut = ({
172
- className,
173
- ...props
174
- }: React.HTMLAttributes<HTMLSpanElement> & DropdownMenuShortcutBaseProps) => {
175
- return <span className={cn('ml-auto text-xs tracking-widest opacity-60', className)} {...props} />;
176
- };
177
- DropdownMenuShortcut.displayName = 'DropdownMenuShortcut';
178
-
179
- export {
180
- DropdownMenu,
181
- DropdownMenuCheckboxItem,
182
- DropdownMenuContent,
183
- DropdownMenuGroup,
184
- DropdownMenuItem,
185
- DropdownMenuLabel,
186
- DropdownMenuPortal,
187
- DropdownMenuRadioGroup,
188
- DropdownMenuRadioItem,
189
- DropdownMenuSeparator,
190
- DropdownMenuShortcut,
191
- DropdownMenuSub,
192
- DropdownMenuSubContent,
193
- DropdownMenuSubTrigger,
194
- DropdownMenuTrigger,
195
- };
196
-
197
- export type {
198
- DropdownMenuCheckboxItemBaseProps as DropdownMenuCheckboxItemProps,
199
- DropdownMenuContentBaseProps as DropdownMenuContentProps,
200
- DropdownMenuGroupBaseProps as DropdownMenuGroupProps,
201
- DropdownMenuItemBaseProps as DropdownMenuItemProps,
202
- DropdownMenuLabelBaseProps as DropdownMenuLabelProps,
203
- DropdownMenuBaseProps as DropdownMenuProps,
204
- DropdownMenuRadioGroupBaseProps as DropdownMenuRadioGroupProps,
205
- DropdownMenuRadioItemBaseProps as DropdownMenuRadioItemProps,
206
- DropdownMenuSeparatorBaseProps as DropdownMenuSeparatorProps,
207
- DropdownMenuShortcutBaseProps as DropdownMenuShortcutProps,
208
- DropdownMenuSubContentBaseProps as DropdownMenuSubContentProps,
209
- DropdownMenuSubBaseProps as DropdownMenuSubProps,
210
- DropdownMenuSubTriggerBaseProps as DropdownMenuSubTriggerProps,
211
- DropdownMenuTriggerBaseProps as DropdownMenuTriggerProps,
212
- };
@@ -1,84 +0,0 @@
1
- import { Button, Input } from '@gv-tech/ui-web';
2
- import { zodResolver } from '@hookform/resolvers/zod';
3
- import { render, screen, waitFor } from '@testing-library/react';
4
- import userEvent from '@testing-library/user-event';
5
- import { useForm } from 'react-hook-form';
6
- import { describe, expect, it } from 'vitest';
7
- import { z } from 'zod';
8
- import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '.';
9
-
10
- const formSchema = z.object({
11
- username: z.string().min(2, {
12
- message: 'Username must be at least 2 characters.',
13
- }),
14
- });
15
-
16
- function TestForm({ onSubmit }: { onSubmit: (values: z.infer<typeof formSchema>) => void }) {
17
- const form = useForm<z.infer<typeof formSchema>>({
18
- resolver: zodResolver(formSchema),
19
- defaultValues: {
20
- username: '',
21
- },
22
- });
23
-
24
- return (
25
- <Form {...form}>
26
- <form onSubmit={form.handleSubmit(onSubmit)} className="space-y-8">
27
- <FormField
28
- control={form.control}
29
- name="username"
30
- render={({ field }) => (
31
- <FormItem>
32
- <FormLabel>Username</FormLabel>
33
- <FormControl>
34
- <Input placeholder="shadcn" {...field} />
35
- </FormControl>
36
- <FormDescription>This is your public display name.</FormDescription>
37
- <FormMessage />
38
- </FormItem>
39
- )}
40
- />
41
- <Button type="submit">Submit</Button>
42
- </form>
43
- </Form>
44
- );
45
- }
46
-
47
- describe('Form', () => {
48
- it('renders form fields correctly', () => {
49
- render(<TestForm onSubmit={() => {}} />);
50
-
51
- expect(screen.getByLabelText('Username')).toBeInTheDocument();
52
- expect(screen.getByPlaceholderText('shadcn')).toBeInTheDocument();
53
- expect(screen.getByText('This is your public display name.')).toBeInTheDocument();
54
- expect(screen.getByRole('button', { name: 'Submit' })).toBeInTheDocument();
55
- });
56
-
57
- it('validates input and displays error message', async () => {
58
- const user = userEvent.setup();
59
- render(<TestForm onSubmit={() => {}} />);
60
-
61
- const submitButton = screen.getByRole('button', { name: 'Submit' });
62
- await user.click(submitButton);
63
-
64
- await waitFor(() => {
65
- expect(screen.getByText('Username must be at least 2 characters.')).toBeVisible();
66
- });
67
- });
68
-
69
- it('submits valid data', async () => {
70
- const user = userEvent.setup();
71
- const { vi } = await import('vitest');
72
- const mockSubmit = vi.fn();
73
-
74
- render(<TestForm onSubmit={mockSubmit} />);
75
-
76
- const input = screen.getByLabelText('Username');
77
- await user.type(input, 'johndoe');
78
- await user.click(screen.getByRole('button', { name: 'Submit' }));
79
-
80
- await waitFor(() => {
81
- expect(mockSubmit).toHaveBeenCalledWith({ username: 'johndoe' }, expect.anything());
82
- });
83
- });
84
- });
@@ -1,160 +0,0 @@
1
- 'use client';
2
-
3
- import * as LabelPrimitive from '@radix-ui/react-label';
4
- import { Slot } from '@radix-ui/react-slot';
5
- import * as React from 'react';
6
- import {
7
- Controller,
8
- FormProvider,
9
- useFormContext,
10
- type ControllerProps,
11
- type FieldPath,
12
- type FieldValues,
13
- } from 'react-hook-form';
14
-
15
- import {
16
- FormControlBaseProps,
17
- FormDescriptionBaseProps,
18
- FormItemBaseProps,
19
- FormLabelBaseProps,
20
- FormMessageBaseProps,
21
- } from '@gv-tech/ui-core';
22
- import { Label } from './label';
23
- import { cn } from './lib/utils';
24
-
25
- const Form = FormProvider;
26
-
27
- type FormFieldContextValue<
28
- TFieldValues extends FieldValues = FieldValues,
29
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
30
- > = {
31
- name: TName;
32
- };
33
-
34
- const FormFieldContext = React.createContext<FormFieldContextValue | null>(null);
35
-
36
- const FormField = <
37
- TFieldValues extends FieldValues = FieldValues,
38
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
39
- >({
40
- ...props
41
- }: ControllerProps<TFieldValues, TName>) => {
42
- return (
43
- <FormFieldContext.Provider value={{ name: props.name }}>
44
- <Controller {...props} />
45
- </FormFieldContext.Provider>
46
- );
47
- };
48
-
49
- const useFormField = () => {
50
- const fieldContext = React.useContext(FormFieldContext);
51
- const itemContext = React.useContext(FormItemContext);
52
- const { getFieldState, formState } = useFormContext();
53
-
54
- if (!fieldContext) {
55
- throw new Error('useFormField should be used within <FormField>');
56
- }
57
-
58
- if (!itemContext) {
59
- throw new Error('useFormField should be used within <FormItem>');
60
- }
61
-
62
- const fieldState = getFieldState(fieldContext.name, formState);
63
-
64
- const { id } = itemContext;
65
-
66
- return {
67
- id,
68
- name: fieldContext.name,
69
- formItemId: `${id}-form-item`,
70
- formDescriptionId: `${id}-form-item-description`,
71
- formMessageId: `${id}-form-item-message`,
72
- ...fieldState,
73
- };
74
- };
75
-
76
- type FormItemContextValue = {
77
- id: string;
78
- };
79
-
80
- const FormItemContext = React.createContext<FormItemContextValue | null>(null);
81
-
82
- const FormItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement> & FormItemBaseProps>(
83
- ({ className, ...props }, ref) => {
84
- const id = React.useId();
85
-
86
- return (
87
- <FormItemContext.Provider value={{ id }}>
88
- <div ref={ref} className={cn('space-y-2', className)} {...props} />
89
- </FormItemContext.Provider>
90
- );
91
- },
92
- );
93
- FormItem.displayName = 'FormItem';
94
-
95
- const FormLabel = React.forwardRef<
96
- React.ElementRef<typeof LabelPrimitive.Root>,
97
- React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & FormLabelBaseProps
98
- >(({ className, ...props }, ref) => {
99
- const { error, formItemId } = useFormField();
100
-
101
- return <Label ref={ref} className={cn(error && 'text-destructive', className)} htmlFor={formItemId} {...props} />;
102
- });
103
- FormLabel.displayName = 'FormLabel';
104
-
105
- const FormControl = React.forwardRef<React.ElementRef<typeof Slot>, React.ComponentPropsWithoutRef<typeof Slot>>(
106
- ({ ...props }, ref) => {
107
- const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
108
-
109
- return (
110
- <Slot
111
- ref={ref}
112
- id={formItemId}
113
- aria-describedby={!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`}
114
- aria-invalid={!!error}
115
- {...props}
116
- />
117
- );
118
- },
119
- );
120
- FormControl.displayName = 'FormControl';
121
-
122
- const FormDescription = React.forwardRef<
123
- HTMLParagraphElement,
124
- React.HTMLAttributes<HTMLParagraphElement> & FormDescriptionBaseProps
125
- >(({ className, ...props }, ref) => {
126
- const { formDescriptionId } = useFormField();
127
-
128
- return (
129
- <p ref={ref} id={formDescriptionId} className={cn('text-[0.8rem] text-muted-foreground', className)} {...props} />
130
- );
131
- });
132
- FormDescription.displayName = 'FormDescription';
133
-
134
- const FormMessage = React.forwardRef<
135
- HTMLParagraphElement,
136
- React.HTMLAttributes<HTMLParagraphElement> & FormMessageBaseProps
137
- >(({ className, children, ...props }, ref) => {
138
- const { error, formMessageId } = useFormField();
139
- const body = error ? String(error?.message ?? '') : children;
140
-
141
- if (!body) {
142
- return null;
143
- }
144
-
145
- return (
146
- <p ref={ref} id={formMessageId} className={cn('text-[0.8rem] font-medium text-destructive', className)} {...props}>
147
- {body}
148
- </p>
149
- );
150
- });
151
- FormMessage.displayName = 'FormMessage';
152
-
153
- export { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField };
154
- export type {
155
- FormControlBaseProps as FormControlProps,
156
- FormDescriptionBaseProps as FormDescriptionProps,
157
- FormItemBaseProps as FormItemProps,
158
- FormLabelBaseProps as FormLabelProps,
159
- FormMessageBaseProps as FormMessageProps,
160
- };
@@ -1,15 +0,0 @@
1
- import { theme } from '@gv-tech/design-tokens';
2
- import { useTheme as useNextTheme } from 'next-themes';
3
-
4
- export function useTheme() {
5
- const context = useNextTheme();
6
- const { resolvedTheme } = context;
7
-
8
- // Default to light theme tokens if resolvedTheme is undefined or invalid
9
- const activeTokens = resolvedTheme === 'dark' ? theme.dark : theme.light;
10
-
11
- return {
12
- ...context,
13
- tokens: activeTokens,
14
- };
15
- }
@@ -1,189 +0,0 @@
1
- 'use client';
2
-
3
- // Inspired by react-hot-toast library
4
- import * as React from 'react';
5
-
6
- import type { ToastActionElement, ToastProps } from '../index';
7
-
8
- const TOAST_LIMIT = 1;
9
- const TOAST_REMOVE_DELAY = 1000000;
10
-
11
- type ToasterToast = ToastProps & {
12
- id: string;
13
- title?: React.ReactNode;
14
- description?: React.ReactNode;
15
- action?: ToastActionElement;
16
- };
17
-
18
- const actionTypes = {
19
- ADD_TOAST: 'ADD_TOAST',
20
- UPDATE_TOAST: 'UPDATE_TOAST',
21
- DISMISS_TOAST: 'DISMISS_TOAST',
22
- REMOVE_TOAST: 'REMOVE_TOAST',
23
- } as const;
24
-
25
- let count = 0;
26
-
27
- function genId() {
28
- count = (count + 1) % Number.MAX_SAFE_INTEGER;
29
- return count.toString();
30
- }
31
-
32
- type ActionType = typeof actionTypes;
33
-
34
- type Action =
35
- | {
36
- type: ActionType['ADD_TOAST'];
37
- toast: ToasterToast;
38
- }
39
- | {
40
- type: ActionType['UPDATE_TOAST'];
41
- toast: Partial<ToasterToast>;
42
- }
43
- | {
44
- type: ActionType['DISMISS_TOAST'];
45
- toastId?: ToasterToast['id'];
46
- }
47
- | {
48
- type: ActionType['REMOVE_TOAST'];
49
- toastId?: ToasterToast['id'];
50
- };
51
-
52
- interface State {
53
- toasts: ToasterToast[];
54
- }
55
-
56
- const toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();
57
-
58
- const addToRemoveQueue = (toastId: string) => {
59
- if (toastTimeouts.has(toastId)) {
60
- return;
61
- }
62
-
63
- const timeout = setTimeout(() => {
64
- toastTimeouts.delete(toastId);
65
- dispatch({
66
- type: 'REMOVE_TOAST',
67
- toastId: toastId,
68
- });
69
- }, TOAST_REMOVE_DELAY);
70
-
71
- toastTimeouts.set(toastId, timeout);
72
- };
73
-
74
- export const reducer = (state: State, action: Action): State => {
75
- switch (action.type) {
76
- case actionTypes.ADD_TOAST:
77
- return {
78
- ...state,
79
- toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),
80
- };
81
-
82
- case actionTypes.UPDATE_TOAST:
83
- return {
84
- ...state,
85
- toasts: state.toasts.map((t) => (t.id === action.toast.id ? { ...t, ...action.toast } : t)),
86
- };
87
-
88
- case actionTypes.DISMISS_TOAST: {
89
- const { toastId } = action;
90
-
91
- // ! Side effects ! - This could be extracted into a dismissToast() action,
92
- // but I'll keep it here for simplicity
93
- if (toastId) {
94
- addToRemoveQueue(toastId);
95
- } else {
96
- state.toasts.forEach((toast) => {
97
- addToRemoveQueue(toast.id);
98
- });
99
- }
100
-
101
- return {
102
- ...state,
103
- toasts: state.toasts.map((t) =>
104
- t.id === toastId || toastId === undefined
105
- ? {
106
- ...t,
107
- open: false,
108
- }
109
- : t,
110
- ),
111
- };
112
- }
113
- case actionTypes.REMOVE_TOAST:
114
- if (action.toastId === undefined) {
115
- return {
116
- ...state,
117
- toasts: [],
118
- };
119
- }
120
- return {
121
- ...state,
122
- toasts: state.toasts.filter((t) => t.id !== action.toastId),
123
- };
124
- }
125
- };
126
-
127
- const listeners: Array<(state: State) => void> = [];
128
-
129
- let memoryState: State = { toasts: [] };
130
-
131
- function dispatch(action: Action) {
132
- memoryState = reducer(memoryState, action);
133
- listeners.forEach((listener) => {
134
- listener(memoryState);
135
- });
136
- }
137
-
138
- type Toast = Omit<ToasterToast, 'id'>;
139
-
140
- function toast({ ...props }: Toast) {
141
- const id = genId();
142
-
143
- const update = (props: ToasterToast) =>
144
- dispatch({
145
- type: 'UPDATE_TOAST',
146
- toast: { ...props, id },
147
- });
148
- const dismiss = () => dispatch({ type: 'DISMISS_TOAST', toastId: id });
149
-
150
- dispatch({
151
- type: 'ADD_TOAST',
152
- toast: {
153
- ...props,
154
- id,
155
- open: true,
156
- onOpenChange: (open) => {
157
- if (!open) dismiss();
158
- },
159
- },
160
- });
161
-
162
- return {
163
- id: id,
164
- dismiss,
165
- update,
166
- };
167
- }
168
-
169
- function useToast() {
170
- const [state, setState] = React.useState<State>(memoryState);
171
-
172
- React.useEffect(() => {
173
- listeners.push(setState);
174
- return () => {
175
- const index = listeners.indexOf(setState);
176
- if (index > -1) {
177
- listeners.splice(index, 1);
178
- }
179
- };
180
- }, [state]);
181
-
182
- return {
183
- ...state,
184
- toast,
185
- dismiss: (toastId?: string) => dispatch({ type: 'DISMISS_TOAST', toastId }),
186
- };
187
- }
188
-
189
- export { toast, useToast };