@object-ui/components 0.3.1 → 0.5.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 (299) hide show
  1. package/.turbo/turbo-build.log +47 -0
  2. package/README.md +13 -0
  3. package/dist/index.css +1 -1
  4. package/dist/index.js +34610 -24854
  5. package/dist/index.umd.cjs +53 -32
  6. package/dist/src/SchemaRenderer.d.ts +3 -0
  7. package/dist/src/{ui → custom}/button-group.d.ts +1 -1
  8. package/dist/src/custom/field.d.ts +19 -0
  9. package/dist/src/custom/index.d.ts +12 -0
  10. package/dist/src/custom/input-group.d.ts +14 -0
  11. package/dist/src/{ui → custom}/item.d.ts +1 -1
  12. package/dist/src/custom/native-select.d.ts +12 -0
  13. package/dist/src/custom/sort-builder.d.ts +22 -0
  14. package/dist/src/index.d.ts +1 -0
  15. package/dist/src/renderers/data-display/table.d.ts +1 -1
  16. package/dist/src/renderers/layout/page.d.ts +1 -1
  17. package/dist/src/renderers/placeholders.d.ts +1 -1
  18. package/dist/src/ui/accordion.d.ts +4 -4
  19. package/dist/src/ui/alert-dialog.d.ts +17 -11
  20. package/dist/src/ui/alert.d.ts +4 -5
  21. package/dist/src/ui/aspect-ratio.d.ts +1 -1
  22. package/dist/src/ui/avatar.d.ts +3 -3
  23. package/dist/src/ui/badge.d.ts +3 -3
  24. package/dist/src/ui/breadcrumb.d.ts +16 -8
  25. package/dist/src/ui/calendar.d.ts +7 -7
  26. package/dist/src/ui/card.d.ts +7 -8
  27. package/dist/src/ui/carousel.d.ts +5 -6
  28. package/dist/src/ui/chart.d.ts +62 -0
  29. package/dist/src/ui/checkbox.d.ts +1 -1
  30. package/dist/src/ui/collapsible.d.ts +3 -3
  31. package/dist/src/ui/command.d.ts +78 -16
  32. package/dist/src/ui/context-menu.d.ts +14 -12
  33. package/dist/src/ui/dialog.d.ts +17 -13
  34. package/dist/src/ui/drawer.d.ts +19 -10
  35. package/dist/src/ui/dropdown-menu.d.ts +20 -18
  36. package/dist/src/ui/form.d.ts +6 -7
  37. package/dist/src/ui/hover-card.d.ts +3 -3
  38. package/dist/src/ui/index.d.ts +2 -8
  39. package/dist/src/ui/input-otp.d.ts +30 -7
  40. package/dist/src/ui/label.d.ts +2 -1
  41. package/dist/src/ui/menubar.d.ts +19 -17
  42. package/dist/src/ui/navigation-menu.d.ts +9 -11
  43. package/dist/src/ui/pagination.d.ts +25 -10
  44. package/dist/src/ui/popover.d.ts +4 -5
  45. package/dist/src/ui/progress.d.ts +1 -1
  46. package/dist/src/ui/radio-group.d.ts +2 -2
  47. package/dist/src/ui/resizable.d.ts +5 -8
  48. package/dist/src/ui/scroll-area.d.ts +2 -2
  49. package/dist/src/ui/select.d.ts +11 -13
  50. package/dist/src/ui/sheet.d.ts +23 -11
  51. package/dist/src/ui/sidebar.d.ts +27 -29
  52. package/dist/src/ui/skeleton.d.ts +1 -1
  53. package/dist/src/ui/slider.d.ts +1 -1
  54. package/dist/src/ui/sonner.d.ts +2 -1
  55. package/dist/src/ui/switch.d.ts +2 -2
  56. package/dist/src/ui/tabs.d.ts +1 -1
  57. package/dist/src/ui/textarea.d.ts +1 -1
  58. package/dist/src/ui/toast.d.ts +22 -0
  59. package/dist/src/ui/toggle-group.d.ts +8 -3
  60. package/dist/src/ui/toggle.d.ts +4 -1
  61. package/dist/src/ui/tooltip.d.ts +4 -4
  62. package/dist/src/ui/typography.d.ts +21 -0
  63. package/package.json +17 -7
  64. package/shadcn-components.json +52 -47
  65. package/src/SchemaRenderer.tsx +28 -0
  66. package/src/__tests__/PageRendererRegions.test.tsx +59 -0
  67. package/src/__tests__/Registry.test.ts +21 -0
  68. package/src/__tests__/basic-renderers.test.tsx +1 -1
  69. package/src/__tests__/complex-disclosure-renderers.test.tsx +3 -2
  70. package/src/__tests__/feedback-overlay-renderers.test.tsx +1 -1
  71. package/src/__tests__/form-renderers.test.tsx +1 -1
  72. package/src/__tests__/layout-data-renderers.test.tsx +1 -1
  73. package/src/{ui → custom}/button-group.tsx +1 -1
  74. package/src/{ui → custom}/combobox.tsx +3 -3
  75. package/src/{ui → custom}/date-picker.tsx +3 -3
  76. package/src/custom/field.tsx +81 -0
  77. package/src/{ui → custom}/filter-builder.tsx +3 -3
  78. package/src/custom/index.ts +12 -0
  79. package/src/custom/input-group.tsx +53 -0
  80. package/src/{ui → custom}/item.tsx +1 -1
  81. package/src/custom/native-select.tsx +33 -0
  82. package/src/custom/sort-builder.tsx +129 -0
  83. package/src/index.css +20 -1
  84. package/src/index.ts +1 -0
  85. package/src/renderers/basic/button-group.tsx +1 -0
  86. package/src/renderers/basic/div.tsx +12 -1
  87. package/src/renderers/basic/html.tsx +1 -0
  88. package/src/renderers/basic/icon.tsx +1 -0
  89. package/src/renderers/basic/image.tsx +1 -0
  90. package/src/renderers/basic/navigation-menu.tsx +1 -0
  91. package/src/renderers/basic/pagination.tsx +31 -4
  92. package/src/renderers/basic/separator.tsx +1 -0
  93. package/src/renderers/basic/span.tsx +12 -1
  94. package/src/renderers/basic/text.tsx +4 -2
  95. package/src/renderers/complex/carousel.tsx +1 -0
  96. package/src/renderers/complex/data-table.tsx +134 -95
  97. package/src/renderers/complex/filter-builder.tsx +2 -1
  98. package/src/renderers/complex/resizable.tsx +2 -1
  99. package/src/renderers/complex/scroll-area.tsx +25 -7
  100. package/src/renderers/complex/table.tsx +1 -0
  101. package/src/renderers/data-display/alert.tsx +1 -0
  102. package/src/renderers/data-display/avatar.tsx +1 -0
  103. package/src/renderers/data-display/badge.tsx +1 -0
  104. package/src/renderers/data-display/breadcrumb.tsx +1 -0
  105. package/src/renderers/data-display/kbd.tsx +1 -0
  106. package/src/renderers/data-display/list.tsx +21 -49
  107. package/src/renderers/data-display/statistic.tsx +21 -5
  108. package/src/renderers/data-display/table.tsx +21 -11
  109. package/src/renderers/data-display/tree-view.tsx +7 -1
  110. package/src/renderers/disclosure/accordion.tsx +1 -0
  111. package/src/renderers/disclosure/collapsible.tsx +1 -0
  112. package/src/renderers/disclosure/toggle-group.tsx +2 -0
  113. package/src/renderers/feedback/empty.tsx +1 -0
  114. package/src/renderers/feedback/loading.tsx +2 -1
  115. package/src/renderers/feedback/progress.tsx +1 -0
  116. package/src/renderers/feedback/skeleton.tsx +1 -0
  117. package/src/renderers/feedback/sonner.tsx +1 -0
  118. package/src/renderers/feedback/spinner.tsx +1 -0
  119. package/src/renderers/feedback/toast.tsx +1 -0
  120. package/src/renderers/feedback/toaster.tsx +1 -0
  121. package/src/renderers/form/button.tsx +35 -1
  122. package/src/renderers/form/calendar.tsx +1 -0
  123. package/src/renderers/form/checkbox.tsx +38 -16
  124. package/src/renderers/form/combobox.tsx +2 -1
  125. package/src/renderers/form/command.tsx +1 -0
  126. package/src/renderers/form/date-picker.tsx +1 -0
  127. package/src/renderers/form/file-upload.tsx +1 -0
  128. package/src/renderers/form/form.tsx +92 -15
  129. package/src/renderers/form/input-otp.tsx +1 -0
  130. package/src/renderers/form/input.tsx +3 -0
  131. package/src/renderers/form/label.tsx +1 -0
  132. package/src/renderers/form/radio-group.tsx +1 -0
  133. package/src/renderers/form/select.tsx +35 -15
  134. package/src/renderers/form/slider.tsx +1 -0
  135. package/src/renderers/form/switch.tsx +1 -0
  136. package/src/renderers/form/textarea.tsx +50 -27
  137. package/src/renderers/form/toggle.tsx +3 -45
  138. package/src/renderers/layout/aspect-ratio.tsx +2 -1
  139. package/src/renderers/layout/card.tsx +10 -2
  140. package/src/renderers/layout/container.tsx +1 -0
  141. package/src/renderers/layout/flex.tsx +1 -0
  142. package/src/renderers/layout/grid.tsx +23 -8
  143. package/src/renderers/layout/page.tsx +35 -23
  144. package/src/renderers/layout/semantic.tsx +1 -0
  145. package/src/renderers/layout/stack.tsx +2 -1
  146. package/src/renderers/layout/tabs.tsx +43 -17
  147. package/src/renderers/navigation/header-bar.tsx +1 -0
  148. package/src/renderers/navigation/sidebar.tsx +5 -0
  149. package/src/renderers/overlay/alert-dialog.tsx +1 -0
  150. package/src/renderers/overlay/context-menu.tsx +1 -0
  151. package/src/renderers/overlay/dialog.tsx +1 -0
  152. package/src/renderers/overlay/drawer.tsx +1 -0
  153. package/src/renderers/overlay/dropdown-menu.tsx +1 -0
  154. package/src/renderers/overlay/hover-card.tsx +1 -0
  155. package/src/renderers/overlay/menubar.tsx +1 -0
  156. package/src/renderers/overlay/popover.tsx +1 -0
  157. package/src/renderers/overlay/sheet.tsx +1 -0
  158. package/src/renderers/overlay/tooltip.tsx +1 -0
  159. package/src/renderers/placeholders.tsx +2 -2
  160. package/src/stories/CRMApp.stories.tsx +706 -0
  161. package/src/stories/Guide.mdx +55 -0
  162. package/src/stories/Introduction.mdx +34 -0
  163. package/src/stories/MockedData.stories.tsx +71 -0
  164. package/src/stories/assets/accessibility.png +0 -0
  165. package/src/stories/assets/accessibility.svg +1 -0
  166. package/src/stories/assets/addon-library.png +0 -0
  167. package/src/stories/assets/assets.png +0 -0
  168. package/src/stories/assets/avif-test-image.avif +0 -0
  169. package/src/stories/assets/context.png +0 -0
  170. package/src/stories/assets/discord.svg +1 -0
  171. package/src/stories/assets/docs.png +0 -0
  172. package/src/stories/assets/figma-plugin.png +0 -0
  173. package/src/stories/assets/github.svg +1 -0
  174. package/src/stories/assets/share.png +0 -0
  175. package/src/stories/assets/styling.png +0 -0
  176. package/src/stories/assets/testing.png +0 -0
  177. package/src/stories/assets/theming.png +0 -0
  178. package/src/stories/assets/tutorials.svg +1 -0
  179. package/src/stories/assets/youtube.svg +1 -0
  180. package/src/stories/button.css +30 -0
  181. package/src/stories/header.css +32 -0
  182. package/src/stories/page.css +68 -0
  183. package/src/stories-json/accordion.stories.tsx +43 -0
  184. package/src/stories-json/aggrid.stories.tsx +103 -0
  185. package/src/stories-json/alert.stories.tsx +39 -0
  186. package/src/stories-json/aspect-ratio.stories.tsx +34 -0
  187. package/src/stories-json/avatar.stories.tsx +38 -0
  188. package/src/stories-json/badge.stories.tsx +53 -0
  189. package/src/stories-json/breadcrumb.stories.tsx +30 -0
  190. package/src/stories-json/button-group.stories.tsx +43 -0
  191. package/src/stories-json/button.stories.tsx +73 -0
  192. package/src/stories-json/calendar.stories.tsx +85 -0
  193. package/src/stories-json/card.stories.tsx +48 -0
  194. package/src/stories-json/carousel.stories.tsx +33 -0
  195. package/src/stories-json/charts.stories.tsx +195 -0
  196. package/src/stories-json/chatbot.stories.tsx +248 -0
  197. package/src/stories-json/code-editor.stories.tsx +92 -0
  198. package/src/stories-json/collapsible.stories.tsx +40 -0
  199. package/src/stories-json/controls.stories.tsx +36 -0
  200. package/src/stories-json/dashboard.stories.tsx +318 -0
  201. package/src/stories-json/data-table.stories.tsx +60 -0
  202. package/src/stories-json/data_display_extras.stories.tsx +102 -0
  203. package/src/stories-json/date-picker.stories.tsx +28 -0
  204. package/src/stories-json/detail-view.stories.tsx +258 -0
  205. package/src/stories-json/dialog.stories.tsx +43 -0
  206. package/src/stories-json/feedback_extras.stories.tsx +40 -0
  207. package/src/stories-json/feedback_others.stories.tsx +46 -0
  208. package/src/stories-json/form_advanced.stories.tsx +117 -0
  209. package/src/stories-json/form_extras.stories.tsx +123 -0
  210. package/src/stories-json/grid.stories.tsx +56 -0
  211. package/src/stories-json/icon.stories.tsx +36 -0
  212. package/src/stories-json/input.stories.tsx +52 -0
  213. package/src/stories-json/kanban.stories.tsx +295 -0
  214. package/src/stories-json/layout_extended.stories.tsx +76 -0
  215. package/src/stories-json/layout_flex.stories.tsx +107 -0
  216. package/src/stories-json/list-view.stories.tsx +97 -0
  217. package/src/stories-json/markdown.stories.tsx +129 -0
  218. package/src/stories-json/menus.stories.tsx +63 -0
  219. package/src/stories-json/metric-card.stories.tsx +143 -0
  220. package/src/stories-json/navigation-menu.stories.tsx +37 -0
  221. package/src/stories-json/object-aggrid.stories.tsx +252 -0
  222. package/src/stories-json/object-form.stories.tsx +130 -0
  223. package/src/stories-json/object-gantt.stories.tsx +114 -0
  224. package/src/stories-json/object-grid.stories.tsx +157 -0
  225. package/src/stories-json/object-map.stories.tsx +116 -0
  226. package/src/stories-json/object-view.stories.tsx +118 -0
  227. package/src/stories-json/overlay_extras.stories.tsx +113 -0
  228. package/src/stories-json/overlay_others.stories.tsx +76 -0
  229. package/src/stories-json/page.stories.tsx +55 -0
  230. package/src/stories-json/reports.stories.tsx +163 -0
  231. package/src/stories-json/resizable.stories.tsx +44 -0
  232. package/src/stories-json/select.stories.tsx +34 -0
  233. package/src/stories-json/separator.stories.tsx +41 -0
  234. package/src/stories-json/sidebar.stories.tsx +147 -0
  235. package/src/stories-json/statistic.stories.tsx +44 -0
  236. package/src/stories-json/tabs.stories.tsx +51 -0
  237. package/src/stories-json/timeline.stories.tsx +188 -0
  238. package/src/stories-json/typography.stories.tsx +45 -0
  239. package/src/ui/accordion.tsx +47 -53
  240. package/src/ui/alert-dialog.tsx +103 -117
  241. package/src/ui/alert.tsx +35 -36
  242. package/src/ui/aspect-ratio.tsx +1 -5
  243. package/src/ui/avatar.tsx +41 -42
  244. package/src/ui/badge.tsx +6 -15
  245. package/src/ui/breadcrumb.tsx +81 -75
  246. package/src/ui/button.tsx +10 -11
  247. package/src/ui/calendar.tsx +178 -51
  248. package/src/ui/card.tsx +51 -110
  249. package/src/ui/carousel.tsx +136 -113
  250. package/src/ui/chart.tsx +367 -0
  251. package/src/ui/checkbox.tsx +20 -22
  252. package/src/ui/collapsible.tsx +5 -25
  253. package/src/ui/command.tsx +106 -135
  254. package/src/ui/context-menu.tsx +69 -116
  255. package/src/ui/dialog.tsx +94 -113
  256. package/src/ui/drawer.tsx +82 -99
  257. package/src/ui/dropdown-menu.tsx +134 -188
  258. package/src/ui/form.tsx +51 -40
  259. package/src/ui/hover-card.tsx +18 -33
  260. package/src/ui/index.ts +2 -8
  261. package/src/ui/input-otp.tsx +42 -52
  262. package/src/ui/input.tsx +13 -15
  263. package/src/ui/label.tsx +17 -15
  264. package/src/ui/menubar.tsx +188 -206
  265. package/src/ui/navigation-menu.tsx +96 -136
  266. package/src/ui/pagination.tsx +86 -96
  267. package/src/ui/popover.tsx +24 -41
  268. package/src/ui/progress.tsx +21 -22
  269. package/src/ui/radio-group.tsx +19 -20
  270. package/src/ui/resizable.tsx +32 -42
  271. package/src/ui/scroll-area.tsx +38 -48
  272. package/src/ui/select.tsx +129 -157
  273. package/src/ui/separator.tsx +2 -2
  274. package/src/ui/sheet.tsx +110 -107
  275. package/src/ui/sidebar.tsx +442 -408
  276. package/src/ui/skeleton.tsx +6 -11
  277. package/src/ui/slider.tsx +19 -54
  278. package/src/ui/sonner.tsx +19 -1
  279. package/src/ui/switch.tsx +19 -21
  280. package/src/ui/tabs.tsx +6 -37
  281. package/src/ui/textarea.tsx +8 -4
  282. package/src/ui/toast.tsx +137 -0
  283. package/src/ui/toggle-group.tsx +28 -37
  284. package/src/ui/toggle.tsx +19 -19
  285. package/src/ui/tooltip.tsx +21 -52
  286. package/src/ui/typography.tsx +85 -0
  287. package/tsconfig.json +1 -1
  288. package/vite.config.ts +9 -1
  289. package/vitest.config.ts +5 -0
  290. package/ISSUES_FOUND.md +0 -128
  291. /package/dist/src/{ui → custom}/combobox.d.ts +0 -0
  292. /package/dist/src/{ui → custom}/date-picker.d.ts +0 -0
  293. /package/dist/src/{ui → custom}/empty.d.ts +0 -0
  294. /package/dist/src/{ui → custom}/filter-builder.d.ts +0 -0
  295. /package/dist/src/{ui → custom}/kbd.d.ts +0 -0
  296. /package/dist/src/{ui → custom}/spinner.d.ts +0 -0
  297. /package/src/{ui → custom}/empty.tsx +0 -0
  298. /package/src/{ui → custom}/kbd.tsx +0 -0
  299. /package/src/{ui → custom}/spinner.tsx +0 -0
@@ -6,148 +6,145 @@
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
8
 
9
+ "use client"
10
+
9
11
  import * as React from "react"
10
12
  import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"
11
- import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react"
13
+ import { Check, ChevronRight, Circle } from "lucide-react"
12
14
 
13
15
  import { cn } from "../lib/utils"
14
16
 
15
- function DropdownMenu({
16
- ...props
17
- }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {
18
- return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} />
19
- }
17
+ const DropdownMenu = DropdownMenuPrimitive.Root
20
18
 
21
- function DropdownMenuPortal({
22
- ...props
23
- }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {
24
- return (
25
- <DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />
26
- )
27
- }
19
+ const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger
28
20
 
29
- function DropdownMenuTrigger({
30
- ...props
31
- }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {
32
- return (
33
- <DropdownMenuPrimitive.Trigger
34
- data-slot="dropdown-menu-trigger"
35
- {...props}
36
- />
37
- )
38
- }
21
+ const DropdownMenuGroup = DropdownMenuPrimitive.Group
39
22
 
40
- function DropdownMenuContent({
41
- className,
42
- sideOffset = 4,
43
- ...props
44
- }: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {
45
- return (
46
- <DropdownMenuPrimitive.Portal>
47
- <DropdownMenuPrimitive.Content
48
- data-slot="dropdown-menu-content"
49
- sideOffset={sideOffset}
50
- className={cn(
51
- "bg-popover text-popover-foreground 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 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",
52
- className
53
- )}
54
- {...props}
55
- />
56
- </DropdownMenuPrimitive.Portal>
57
- )
58
- }
23
+ const DropdownMenuPortal = DropdownMenuPrimitive.Portal
59
24
 
60
- function DropdownMenuGroup({
61
- ...props
62
- }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {
63
- return (
64
- <DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />
65
- )
66
- }
25
+ const DropdownMenuSub = DropdownMenuPrimitive.Sub
67
26
 
68
- function DropdownMenuItem({
69
- className,
70
- inset,
71
- variant = "default",
72
- ...props
73
- }: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
74
- inset?: boolean
75
- variant?: "default" | "destructive"
76
- }) {
77
- return (
78
- <DropdownMenuPrimitive.Item
79
- data-slot="dropdown-menu-item"
80
- data-inset={inset}
81
- data-variant={variant}
82
- className={cn(
83
- "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
84
- className
85
- )}
86
- {...props}
87
- />
88
- )
89
- }
27
+ const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup
90
28
 
91
- function DropdownMenuCheckboxItem({
92
- className,
93
- children,
94
- checked,
95
- ...props
96
- }: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {
97
- return (
98
- <DropdownMenuPrimitive.CheckboxItem
99
- data-slot="dropdown-menu-checkbox-item"
29
+ const DropdownMenuSubTrigger = React.forwardRef<
30
+ React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,
31
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {
32
+ inset?: boolean
33
+ }
34
+ >(({ className, inset, children, ...props }, ref) => (
35
+ <DropdownMenuPrimitive.SubTrigger
36
+ ref={ref}
37
+ className={cn(
38
+ "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",
39
+ inset && "pl-8",
40
+ className
41
+ )}
42
+ {...props}
43
+ >
44
+ {children}
45
+ <ChevronRight className="ml-auto" />
46
+ </DropdownMenuPrimitive.SubTrigger>
47
+ ))
48
+ DropdownMenuSubTrigger.displayName =
49
+ DropdownMenuPrimitive.SubTrigger.displayName
50
+
51
+ const DropdownMenuSubContent = React.forwardRef<
52
+ React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
53
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>
54
+ >(({ className, ...props }, ref) => (
55
+ <DropdownMenuPrimitive.SubContent
56
+ ref={ref}
57
+ className={cn(
58
+ "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]",
59
+ className
60
+ )}
61
+ {...props}
62
+ />
63
+ ))
64
+ DropdownMenuSubContent.displayName =
65
+ DropdownMenuPrimitive.SubContent.displayName
66
+
67
+ const DropdownMenuContent = React.forwardRef<
68
+ React.ElementRef<typeof DropdownMenuPrimitive.Content>,
69
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>
70
+ >(({ className, sideOffset = 4, ...props }, ref) => (
71
+ <DropdownMenuPrimitive.Portal>
72
+ <DropdownMenuPrimitive.Content
73
+ ref={ref}
74
+ sideOffset={sideOffset}
100
75
  className={cn(
101
- "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
76
+ "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 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]",
102
77
  className
103
78
  )}
104
- checked={checked}
105
- {...props}
106
- >
107
- <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
108
- <DropdownMenuPrimitive.ItemIndicator>
109
- <CheckIcon className="size-4" />
110
- </DropdownMenuPrimitive.ItemIndicator>
111
- </span>
112
- {children}
113
- </DropdownMenuPrimitive.CheckboxItem>
114
- )
115
- }
116
-
117
- function DropdownMenuRadioGroup({
118
- ...props
119
- }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {
120
- return (
121
- <DropdownMenuPrimitive.RadioGroup
122
- data-slot="dropdown-menu-radio-group"
123
79
  {...props}
124
80
  />
125
- )
126
- }
81
+ </DropdownMenuPrimitive.Portal>
82
+ ))
83
+ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName
127
84
 
128
- function DropdownMenuRadioItem({
129
- className,
130
- children,
131
- ...props
132
- }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {
133
- return (
134
- <DropdownMenuPrimitive.RadioItem
135
- data-slot="dropdown-menu-radio-item"
136
- className={cn(
137
- "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
138
- className
139
- )}
140
- {...props}
141
- >
142
- <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
143
- <DropdownMenuPrimitive.ItemIndicator>
144
- <CircleIcon className="size-2 fill-current" />
145
- </DropdownMenuPrimitive.ItemIndicator>
146
- </span>
147
- {children}
148
- </DropdownMenuPrimitive.RadioItem>
149
- )
150
- }
85
+ const DropdownMenuItem = React.forwardRef<
86
+ React.ElementRef<typeof DropdownMenuPrimitive.Item>,
87
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
88
+ inset?: boolean
89
+ }
90
+ >(({ className, inset, ...props }, ref) => (
91
+ <DropdownMenuPrimitive.Item
92
+ ref={ref}
93
+ className={cn(
94
+ "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]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
95
+ inset && "pl-8",
96
+ className
97
+ )}
98
+ {...props}
99
+ />
100
+ ))
101
+ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName
102
+
103
+ const DropdownMenuCheckboxItem = React.forwardRef<
104
+ React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,
105
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>
106
+ >(({ className, children, checked, ...props }, ref) => (
107
+ <DropdownMenuPrimitive.CheckboxItem
108
+ ref={ref}
109
+ className={cn(
110
+ "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",
111
+ className
112
+ )}
113
+ checked={checked}
114
+ {...props}
115
+ >
116
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
117
+ <DropdownMenuPrimitive.ItemIndicator>
118
+ <Check className="h-4 w-4" />
119
+ </DropdownMenuPrimitive.ItemIndicator>
120
+ </span>
121
+ {children}
122
+ </DropdownMenuPrimitive.CheckboxItem>
123
+ ))
124
+ DropdownMenuCheckboxItem.displayName =
125
+ DropdownMenuPrimitive.CheckboxItem.displayName
126
+
127
+ const DropdownMenuRadioItem = React.forwardRef<
128
+ React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,
129
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>
130
+ >(({ className, children, ...props }, ref) => (
131
+ <DropdownMenuPrimitive.RadioItem
132
+ ref={ref}
133
+ className={cn(
134
+ "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",
135
+ className
136
+ )}
137
+ {...props}
138
+ >
139
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
140
+ <DropdownMenuPrimitive.ItemIndicator>
141
+ <Circle className="h-2 w-2 fill-current" />
142
+ </DropdownMenuPrimitive.ItemIndicator>
143
+ </span>
144
+ {children}
145
+ </DropdownMenuPrimitive.RadioItem>
146
+ ))
147
+ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName
151
148
 
152
149
  const DropdownMenuLabel = React.forwardRef<
153
150
  React.ElementRef<typeof DropdownMenuPrimitive.Label>,
@@ -157,10 +154,9 @@ const DropdownMenuLabel = React.forwardRef<
157
154
  >(({ className, inset, ...props }, ref) => (
158
155
  <DropdownMenuPrimitive.Label
159
156
  ref={ref}
160
- data-slot="dropdown-menu-label"
161
- data-inset={inset}
162
157
  className={cn(
163
- "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
158
+ "px-2 py-1.5 text-sm font-semibold",
159
+ inset && "pl-8",
164
160
  className
165
161
  )}
166
162
  {...props}
@@ -174,89 +170,39 @@ const DropdownMenuSeparator = React.forwardRef<
174
170
  >(({ className, ...props }, ref) => (
175
171
  <DropdownMenuPrimitive.Separator
176
172
  ref={ref}
177
- data-slot="dropdown-menu-separator"
178
- className={cn("bg-border -mx-1 my-1 h-px", className)}
173
+ className={cn("-mx-1 my-1 h-px bg-muted", className)}
179
174
  {...props}
180
175
  />
181
176
  ))
182
177
  DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName
183
178
 
184
- function DropdownMenuShortcut({
179
+ const DropdownMenuShortcut = ({
185
180
  className,
186
181
  ...props
187
- }: React.ComponentProps<"span">) {
182
+ }: React.HTMLAttributes<HTMLSpanElement>) => {
188
183
  return (
189
184
  <span
190
- data-slot="dropdown-menu-shortcut"
191
- className={cn(
192
- "text-muted-foreground ml-auto text-xs tracking-widest",
193
- className
194
- )}
195
- {...props}
196
- />
197
- )
198
- }
199
-
200
- function DropdownMenuSub({
201
- ...props
202
- }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {
203
- return <DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} />
204
- }
205
-
206
- function DropdownMenuSubTrigger({
207
- className,
208
- inset,
209
- children,
210
- ...props
211
- }: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
212
- inset?: boolean
213
- }) {
214
- return (
215
- <DropdownMenuPrimitive.SubTrigger
216
- data-slot="dropdown-menu-sub-trigger"
217
- data-inset={inset}
218
- className={cn(
219
- "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
220
- className
221
- )}
222
- {...props}
223
- >
224
- {children}
225
- <ChevronRightIcon className="ml-auto size-4" />
226
- </DropdownMenuPrimitive.SubTrigger>
227
- )
228
- }
229
-
230
- function DropdownMenuSubContent({
231
- className,
232
- ...props
233
- }: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {
234
- return (
235
- <DropdownMenuPrimitive.SubContent
236
- data-slot="dropdown-menu-sub-content"
237
- className={cn(
238
- "bg-popover text-popover-foreground 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 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg",
239
- className
240
- )}
185
+ className={cn("ml-auto text-xs tracking-widest opacity-60", className)}
241
186
  {...props}
242
187
  />
243
188
  )
244
189
  }
190
+ DropdownMenuShortcut.displayName = "DropdownMenuShortcut"
245
191
 
246
192
  export {
247
193
  DropdownMenu,
248
- DropdownMenuPortal,
249
194
  DropdownMenuTrigger,
250
195
  DropdownMenuContent,
251
- DropdownMenuGroup,
252
- DropdownMenuLabel,
253
196
  DropdownMenuItem,
254
197
  DropdownMenuCheckboxItem,
255
- DropdownMenuRadioGroup,
256
198
  DropdownMenuRadioItem,
199
+ DropdownMenuLabel,
257
200
  DropdownMenuSeparator,
258
201
  DropdownMenuShortcut,
202
+ DropdownMenuGroup,
203
+ DropdownMenuPortal,
259
204
  DropdownMenuSub,
260
- DropdownMenuSubTrigger,
261
205
  DropdownMenuSubContent,
206
+ DropdownMenuSubTrigger,
207
+ DropdownMenuRadioGroup,
262
208
  }
package/src/ui/form.tsx CHANGED
@@ -9,13 +9,12 @@
9
9
  "use client"
10
10
 
11
11
  import * as React from "react"
12
- import type * as LabelPrimitive from "@radix-ui/react-label"
12
+ import * as LabelPrimitive from "@radix-ui/react-label"
13
13
  import { Slot } from "@radix-ui/react-slot"
14
14
  import {
15
15
  Controller,
16
16
  FormProvider,
17
17
  useFormContext,
18
- useFormState,
19
18
  type ControllerProps,
20
19
  type FieldPath,
21
20
  type FieldValues,
@@ -28,18 +27,16 @@ const Form = FormProvider
28
27
 
29
28
  type FormFieldContextValue<
30
29
  TFieldValues extends FieldValues = FieldValues,
31
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
30
+ TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>
32
31
  > = {
33
32
  name: TName
34
33
  }
35
34
 
36
- const FormFieldContext = React.createContext<FormFieldContextValue>(
37
- {} as FormFieldContextValue
38
- )
35
+ const FormFieldContext = React.createContext<FormFieldContextValue | null>(null)
39
36
 
40
37
  const FormField = <
41
38
  TFieldValues extends FieldValues = FieldValues,
42
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
39
+ TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>
43
40
  >({
44
41
  ...props
45
42
  }: ControllerProps<TFieldValues, TName>) => {
@@ -53,14 +50,18 @@ const FormField = <
53
50
  const useFormField = () => {
54
51
  const fieldContext = React.useContext(FormFieldContext)
55
52
  const itemContext = React.useContext(FormItemContext)
56
- const { getFieldState } = useFormContext()
57
- const formState = useFormState({ name: fieldContext.name })
58
- const fieldState = getFieldState(fieldContext.name, formState)
53
+ const { getFieldState, formState } = useFormContext()
59
54
 
60
55
  if (!fieldContext) {
61
56
  throw new Error("useFormField should be used within <FormField>")
62
57
  }
63
58
 
59
+ if (!itemContext) {
60
+ throw new Error("useFormField should be used within <FormItem>")
61
+ }
62
+
63
+ const fieldState = getFieldState(fieldContext.name, formState)
64
+
64
65
  const { id } = itemContext
65
66
 
66
67
  return {
@@ -77,47 +78,48 @@ type FormItemContextValue = {
77
78
  id: string
78
79
  }
79
80
 
80
- const FormItemContext = React.createContext<FormItemContextValue>(
81
- {} as FormItemContextValue
82
- )
81
+ const FormItemContext = React.createContext<FormItemContextValue | null>(null)
83
82
 
84
- function FormItem({ className, ...props }: React.ComponentProps<"div">) {
83
+ const FormItem = React.forwardRef<
84
+ HTMLDivElement,
85
+ React.HTMLAttributes<HTMLDivElement>
86
+ >(({ className, ...props }, ref) => {
85
87
  const id = React.useId()
86
88
 
87
89
  return (
88
90
  <FormItemContext.Provider value={{ id }}>
89
- <div
90
- data-slot="form-item"
91
- className={cn("grid gap-2", className)}
92
- {...props}
93
- />
91
+ <div ref={ref} className={cn("space-y-2", className)} {...props} />
94
92
  </FormItemContext.Provider>
95
93
  )
96
- }
94
+ })
95
+ FormItem.displayName = "FormItem"
97
96
 
98
- function FormLabel({
99
- className,
100
- ...props
101
- }: React.ComponentProps<typeof LabelPrimitive.Root>) {
97
+ const FormLabel = React.forwardRef<
98
+ React.ElementRef<typeof LabelPrimitive.Root>,
99
+ React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>
100
+ >(({ className, ...props }, ref) => {
102
101
  const { error, formItemId } = useFormField()
103
102
 
104
103
  return (
105
104
  <Label
106
- data-slot="form-label"
107
- data-error={!!error}
108
- className={cn("data-[error=true]:text-destructive", className)}
105
+ ref={ref}
106
+ className={cn(error && "text-destructive", className)}
109
107
  htmlFor={formItemId}
110
108
  {...props}
111
109
  />
112
110
  )
113
- }
111
+ })
112
+ FormLabel.displayName = "FormLabel"
114
113
 
115
- function FormControl({ ...props }: React.ComponentProps<typeof Slot>) {
114
+ const FormControl = React.forwardRef<
115
+ React.ElementRef<typeof Slot>,
116
+ React.ComponentPropsWithoutRef<typeof Slot>
117
+ >(({ ...props }, ref) => {
116
118
  const { error, formItemId, formDescriptionId, formMessageId } = useFormField()
117
119
 
118
120
  return (
119
121
  <Slot
120
- data-slot="form-control"
122
+ ref={ref}
121
123
  id={formItemId}
122
124
  aria-describedby={
123
125
  !error
@@ -128,24 +130,32 @@ function FormControl({ ...props }: React.ComponentProps<typeof Slot>) {
128
130
  {...props}
129
131
  />
130
132
  )
131
- }
133
+ })
134
+ FormControl.displayName = "FormControl"
132
135
 
133
- function FormDescription({ className, ...props }: React.ComponentProps<"p">) {
136
+ const FormDescription = React.forwardRef<
137
+ HTMLParagraphElement,
138
+ React.HTMLAttributes<HTMLParagraphElement>
139
+ >(({ className, ...props }, ref) => {
134
140
  const { formDescriptionId } = useFormField()
135
141
 
136
142
  return (
137
143
  <p
138
- data-slot="form-description"
144
+ ref={ref}
139
145
  id={formDescriptionId}
140
- className={cn("text-muted-foreground text-sm", className)}
146
+ className={cn("text-sm text-muted-foreground", className)}
141
147
  {...props}
142
148
  />
143
149
  )
144
- }
150
+ })
151
+ FormDescription.displayName = "FormDescription"
145
152
 
146
- function FormMessage({ className, ...props }: React.ComponentProps<"p">) {
153
+ const FormMessage = React.forwardRef<
154
+ HTMLParagraphElement,
155
+ React.HTMLAttributes<HTMLParagraphElement>
156
+ >(({ className, children, ...props }, ref) => {
147
157
  const { error, formMessageId } = useFormField()
148
- const body = error ? String(error?.message ?? "") : props.children
158
+ const body = error ? String(error?.message ?? "") : children
149
159
 
150
160
  if (!body) {
151
161
  return null
@@ -153,15 +163,16 @@ function FormMessage({ className, ...props }: React.ComponentProps<"p">) {
153
163
 
154
164
  return (
155
165
  <p
156
- data-slot="form-message"
166
+ ref={ref}
157
167
  id={formMessageId}
158
- className={cn("text-destructive text-sm", className)}
168
+ className={cn("text-sm font-medium text-destructive", className)}
159
169
  {...props}
160
170
  >
161
171
  {body}
162
172
  </p>
163
173
  )
164
- }
174
+ })
175
+ FormMessage.displayName = "FormMessage"
165
176
 
166
177
  export {
167
178
  useFormField,
@@ -13,40 +13,25 @@ import * as HoverCardPrimitive from "@radix-ui/react-hover-card"
13
13
 
14
14
  import { cn } from "../lib/utils"
15
15
 
16
- function HoverCard({
17
- ...props
18
- }: React.ComponentProps<typeof HoverCardPrimitive.Root>) {
19
- return <HoverCardPrimitive.Root data-slot="hover-card" {...props} />
20
- }
16
+ const HoverCard = HoverCardPrimitive.Root
21
17
 
22
- function HoverCardTrigger({
23
- ...props
24
- }: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {
25
- return (
26
- <HoverCardPrimitive.Trigger data-slot="hover-card-trigger" {...props} />
27
- )
28
- }
18
+ const HoverCardTrigger = HoverCardPrimitive.Trigger
29
19
 
30
- function HoverCardContent({
31
- className,
32
- align = "center",
33
- sideOffset = 4,
34
- ...props
35
- }: React.ComponentProps<typeof HoverCardPrimitive.Content>) {
36
- return (
37
- <HoverCardPrimitive.Portal data-slot="hover-card-portal">
38
- <HoverCardPrimitive.Content
39
- data-slot="hover-card-content"
40
- align={align}
41
- sideOffset={sideOffset}
42
- className={cn(
43
- "bg-popover text-popover-foreground 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 z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",
44
- className
45
- )}
46
- {...props}
47
- />
48
- </HoverCardPrimitive.Portal>
49
- )
50
- }
20
+ const HoverCardContent = React.forwardRef<
21
+ React.ElementRef<typeof HoverCardPrimitive.Content>,
22
+ React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>
23
+ >(({ className, align = "center", sideOffset = 4, ...props }, ref) => (
24
+ <HoverCardPrimitive.Content
25
+ ref={ref}
26
+ align={align}
27
+ sideOffset={sideOffset}
28
+ className={cn(
29
+ "z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none 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-hover-card-content-transform-origin]",
30
+ className
31
+ )}
32
+ {...props}
33
+ />
34
+ ))
35
+ HoverCardContent.displayName = HoverCardPrimitive.Content.displayName
51
36
 
52
37
  export { HoverCard, HoverCardTrigger, HoverCardContent }
package/src/ui/index.ts CHANGED
@@ -13,28 +13,22 @@ export * from './aspect-ratio';
13
13
  export * from './avatar';
14
14
  export * from './badge';
15
15
  export * from './breadcrumb';
16
- export * from './button-group';
17
16
  export * from './button';
18
17
  export * from './calendar';
19
18
  export * from './card';
20
19
  export * from './carousel';
20
+ export * from './chart';
21
21
  export * from './checkbox';
22
22
  export * from './collapsible';
23
- export * from './combobox';
24
23
  export * from './command';
25
24
  export * from './context-menu';
26
- export * from './date-picker';
27
25
  export * from './dialog';
28
26
  export * from './drawer';
29
27
  export * from './dropdown-menu';
30
- export * from './empty';
31
- export * from './filter-builder';
32
28
  export * from './form';
33
29
  export * from './hover-card';
34
30
  export * from './input-otp';
35
31
  export * from './input';
36
- export * from './item';
37
- export * from './kbd';
38
32
  export * from './label';
39
33
  export * from './menubar';
40
34
  export * from './navigation-menu';
@@ -52,7 +46,6 @@ export * from './skeleton';
52
46
  export * from './slider';
53
47
  export * from './sonner';
54
48
  export { Toaster } from './sonner';
55
- export * from './spinner';
56
49
  export * from './switch';
57
50
  export * from './table';
58
51
  export * from './tabs';
@@ -60,3 +53,4 @@ export * from './textarea';
60
53
  export * from './toggle-group';
61
54
  export * from './toggle';
62
55
  export * from './tooltip';
56
+ export * from './typography';