@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,147 +6,133 @@
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 AlertDialogPrimitive from "@radix-ui/react-alert-dialog"
11
13
 
12
14
  import { cn } from "../lib/utils"
13
15
  import { buttonVariants } from "./button"
14
16
 
15
- function AlertDialog({
16
- ...props
17
- }: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {
18
- return <AlertDialogPrimitive.Root data-slot="alert-dialog" {...props} />
19
- }
17
+ const AlertDialog = AlertDialogPrimitive.Root
20
18
 
21
- function AlertDialogTrigger({
22
- ...props
23
- }: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {
24
- return (
25
- <AlertDialogPrimitive.Trigger data-slot="alert-dialog-trigger" {...props} />
26
- )
27
- }
19
+ const AlertDialogTrigger = AlertDialogPrimitive.Trigger
28
20
 
29
- function AlertDialogPortal({
30
- ...props
31
- }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {
32
- return (
33
- <AlertDialogPrimitive.Portal data-slot="alert-dialog-portal" {...props} />
34
- )
35
- }
21
+ const AlertDialogPortal = AlertDialogPrimitive.Portal
36
22
 
37
- function AlertDialogOverlay({
38
- className,
39
- ...props
40
- }: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {
41
- return (
42
- <AlertDialogPrimitive.Overlay
43
- data-slot="alert-dialog-overlay"
23
+ const AlertDialogOverlay = React.forwardRef<
24
+ React.ElementRef<typeof AlertDialogPrimitive.Overlay>,
25
+ React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>
26
+ >(({ className, ...props }, ref) => (
27
+ <AlertDialogPrimitive.Overlay
28
+ className={cn(
29
+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
30
+ className
31
+ )}
32
+ {...props}
33
+ ref={ref}
34
+ />
35
+ ))
36
+ AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName
37
+
38
+ const AlertDialogContent = React.forwardRef<
39
+ React.ElementRef<typeof AlertDialogPrimitive.Content>,
40
+ React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>
41
+ >(({ className, ...props }, ref) => (
42
+ <AlertDialogPortal>
43
+ <AlertDialogOverlay />
44
+ <AlertDialogPrimitive.Content
45
+ ref={ref}
44
46
  className={cn(
45
- "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
47
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
46
48
  className
47
49
  )}
48
50
  {...props}
49
51
  />
50
- )
51
- }
52
+ </AlertDialogPortal>
53
+ ))
54
+ AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName
52
55
 
53
- function AlertDialogContent({
56
+ const AlertDialogHeader = ({
54
57
  className,
55
58
  ...props
56
- }: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {
57
- return (
58
- <AlertDialogPortal>
59
- <AlertDialogOverlay />
60
- <AlertDialogPrimitive.Content
61
- data-slot="alert-dialog-content"
62
- className={cn(
63
- "bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",
64
- className
65
- )}
66
- {...props}
67
- />
68
- </AlertDialogPortal>
69
- )
70
- }
59
+ }: React.HTMLAttributes<HTMLDivElement>) => (
60
+ <div
61
+ className={cn(
62
+ "flex flex-col space-y-2 text-center sm:text-left",
63
+ className
64
+ )}
65
+ {...props}
66
+ />
67
+ )
68
+ AlertDialogHeader.displayName = "AlertDialogHeader"
71
69
 
72
- function AlertDialogHeader({
70
+ const AlertDialogFooter = ({
73
71
  className,
74
72
  ...props
75
- }: React.ComponentProps<"div">) {
76
- return (
77
- <div
78
- data-slot="alert-dialog-header"
79
- className={cn("flex flex-col gap-2 text-center sm:text-left", className)}
80
- {...props}
81
- />
82
- )
83
- }
84
-
85
- function AlertDialogFooter({
86
- className,
87
- ...props
88
- }: React.ComponentProps<"div">) {
89
- return (
90
- <div
91
- data-slot="alert-dialog-footer"
92
- className={cn(
93
- "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
94
- className
95
- )}
96
- {...props}
97
- />
98
- )
99
- }
73
+ }: React.HTMLAttributes<HTMLDivElement>) => (
74
+ <div
75
+ className={cn(
76
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
77
+ className
78
+ )}
79
+ {...props}
80
+ />
81
+ )
82
+ AlertDialogFooter.displayName = "AlertDialogFooter"
100
83
 
101
- function AlertDialogTitle({
102
- className,
103
- ...props
104
- }: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {
105
- return (
106
- <AlertDialogPrimitive.Title
107
- data-slot="alert-dialog-title"
108
- className={cn("text-lg font-semibold", className)}
109
- {...props}
110
- />
111
- )
112
- }
84
+ const AlertDialogTitle = React.forwardRef<
85
+ React.ElementRef<typeof AlertDialogPrimitive.Title>,
86
+ React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>
87
+ >(({ className, ...props }, ref) => (
88
+ <AlertDialogPrimitive.Title
89
+ ref={ref}
90
+ className={cn("text-lg font-semibold", className)}
91
+ {...props}
92
+ />
93
+ ))
94
+ AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName
113
95
 
114
- function AlertDialogDescription({
115
- className,
116
- ...props
117
- }: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {
118
- return (
119
- <AlertDialogPrimitive.Description
120
- data-slot="alert-dialog-description"
121
- className={cn("text-muted-foreground text-sm", className)}
122
- {...props}
123
- />
124
- )
125
- }
96
+ const AlertDialogDescription = React.forwardRef<
97
+ React.ElementRef<typeof AlertDialogPrimitive.Description>,
98
+ React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>
99
+ >(({ className, ...props }, ref) => (
100
+ <AlertDialogPrimitive.Description
101
+ ref={ref}
102
+ className={cn("text-sm text-muted-foreground", className)}
103
+ {...props}
104
+ />
105
+ ))
106
+ AlertDialogDescription.displayName =
107
+ AlertDialogPrimitive.Description.displayName
126
108
 
127
- function AlertDialogAction({
128
- className,
129
- ...props
130
- }: React.ComponentProps<typeof AlertDialogPrimitive.Action>) {
131
- return (
132
- <AlertDialogPrimitive.Action
133
- className={cn(buttonVariants(), className)}
134
- {...props}
135
- />
136
- )
137
- }
109
+ const AlertDialogAction = React.forwardRef<
110
+ React.ElementRef<typeof AlertDialogPrimitive.Action>,
111
+ React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>
112
+ >(({ className, ...props }, ref) => (
113
+ <AlertDialogPrimitive.Action
114
+ ref={ref}
115
+ className={cn(buttonVariants(), className)}
116
+ {...props}
117
+ />
118
+ ))
119
+ AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName
138
120
 
139
- function AlertDialogCancel({
140
- className,
141
- ...props
142
- }: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {
143
- return (
144
- <AlertDialogPrimitive.Cancel
145
- className={cn(buttonVariants({ variant: "outline" }), className)}
146
- {...props}
147
- />
148
- )
149
- }
121
+ const AlertDialogCancel = React.forwardRef<
122
+ React.ElementRef<typeof AlertDialogPrimitive.Cancel>,
123
+ React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>
124
+ >(({ className, ...props }, ref) => (
125
+ <AlertDialogPrimitive.Cancel
126
+ ref={ref}
127
+ className={cn(
128
+ buttonVariants({ variant: "outline" }),
129
+ "mt-2 sm:mt-0",
130
+ className
131
+ )}
132
+ {...props}
133
+ />
134
+ ))
135
+ AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName
150
136
 
151
137
  export {
152
138
  AlertDialog,
package/src/ui/alert.tsx CHANGED
@@ -12,7 +12,7 @@ import { cva, type VariantProps } from "class-variance-authority"
12
12
  import { cn } from "../lib/utils"
13
13
 
14
14
  const alertVariants = cva(
15
- "relative w-full rounded-lg border px-4 py-4 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7",
15
+ "relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",
16
16
  {
17
17
  variants: {
18
18
  variant: {
@@ -27,42 +27,41 @@ const alertVariants = cva(
27
27
  }
28
28
  )
29
29
 
30
- function Alert({
31
- className,
32
- variant,
33
- ...props
34
- }: React.ComponentProps<"div"> & VariantProps<typeof alertVariants>) {
35
- return (
36
- <div
37
- data-slot="alert"
38
- role="alert"
39
- className={cn(alertVariants({ variant }), className)}
40
- {...props}
41
- />
42
- )
43
- }
30
+ const Alert = React.forwardRef<
31
+ HTMLDivElement,
32
+ React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>
33
+ >(({ className, variant, ...props }, ref) => (
34
+ <div
35
+ ref={ref}
36
+ role="alert"
37
+ className={cn(alertVariants({ variant }), className)}
38
+ {...props}
39
+ />
40
+ ))
41
+ Alert.displayName = "Alert"
44
42
 
45
- function AlertTitle({ className, ...props }: React.ComponentProps<"div">) {
46
- return (
47
- <div
48
- data-slot="alert-title"
49
- className={cn("mb-1 font-medium leading-none tracking-tight", className)}
50
- {...props}
51
- />
52
- )
53
- }
43
+ const AlertTitle = React.forwardRef<
44
+ HTMLParagraphElement,
45
+ React.HTMLAttributes<HTMLHeadingElement>
46
+ >(({ className, ...props }, ref) => (
47
+ <h5
48
+ ref={ref}
49
+ className={cn("mb-1 font-medium leading-none tracking-tight", className)}
50
+ {...props}
51
+ />
52
+ ))
53
+ AlertTitle.displayName = "AlertTitle"
54
54
 
55
- function AlertDescription({
56
- className,
57
- ...props
58
- }: React.ComponentProps<"div">) {
59
- return (
60
- <div
61
- data-slot="alert-description"
62
- className={cn("text-sm [&_p]:leading-relaxed", className)}
63
- {...props}
64
- />
65
- )
66
- }
55
+ const AlertDescription = React.forwardRef<
56
+ HTMLParagraphElement,
57
+ React.HTMLAttributes<HTMLParagraphElement>
58
+ >(({ className, ...props }, ref) => (
59
+ <div
60
+ ref={ref}
61
+ className={cn("text-sm [&_p]:leading-relaxed", className)}
62
+ {...props}
63
+ />
64
+ ))
65
+ AlertDescription.displayName = "AlertDescription"
67
66
 
68
67
  export { Alert, AlertTitle, AlertDescription }
@@ -10,10 +10,6 @@
10
10
 
11
11
  import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio"
12
12
 
13
- function AspectRatio({
14
- ...props
15
- }: React.ComponentProps<typeof AspectRatioPrimitive.Root>) {
16
- return <AspectRatioPrimitive.Root data-slot="aspect-ratio" {...props} />
17
- }
13
+ const AspectRatio = AspectRatioPrimitive.Root
18
14
 
19
15
  export { AspectRatio }
package/src/ui/avatar.tsx CHANGED
@@ -6,54 +6,53 @@
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 AvatarPrimitive from "@radix-ui/react-avatar"
11
13
 
12
14
  import { cn } from "../lib/utils"
13
15
 
14
- function Avatar({
15
- className,
16
- ...props
17
- }: React.ComponentProps<typeof AvatarPrimitive.Root>) {
18
- return (
19
- <AvatarPrimitive.Root
20
- data-slot="avatar"
21
- className={cn(
22
- "relative flex size-8 shrink-0 overflow-hidden rounded-full",
23
- className
24
- )}
25
- {...props}
26
- />
27
- )
28
- }
16
+ const Avatar = React.forwardRef<
17
+ React.ElementRef<typeof AvatarPrimitive.Root>,
18
+ React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>
19
+ >(({ className, ...props }, ref) => (
20
+ <AvatarPrimitive.Root
21
+ ref={ref}
22
+ className={cn(
23
+ "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
24
+ className
25
+ )}
26
+ {...props}
27
+ />
28
+ ))
29
+ Avatar.displayName = AvatarPrimitive.Root.displayName
29
30
 
30
- function AvatarImage({
31
- className,
32
- ...props
33
- }: React.ComponentProps<typeof AvatarPrimitive.Image>) {
34
- return (
35
- <AvatarPrimitive.Image
36
- data-slot="avatar-image"
37
- className={cn("aspect-square size-full", className)}
38
- {...props}
39
- />
40
- )
41
- }
31
+ const AvatarImage = React.forwardRef<
32
+ React.ElementRef<typeof AvatarPrimitive.Image>,
33
+ React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>
34
+ >(({ className, ...props }, ref) => (
35
+ <AvatarPrimitive.Image
36
+ ref={ref}
37
+ className={cn("aspect-square h-full w-full", className)}
38
+ {...props}
39
+ />
40
+ ))
41
+ AvatarImage.displayName = AvatarPrimitive.Image.displayName
42
42
 
43
- function AvatarFallback({
44
- className,
45
- ...props
46
- }: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {
47
- return (
48
- <AvatarPrimitive.Fallback
49
- data-slot="avatar-fallback"
50
- className={cn(
51
- "bg-muted flex size-full items-center justify-center rounded-full",
52
- className
53
- )}
54
- {...props}
55
- />
56
- )
57
- }
43
+ const AvatarFallback = React.forwardRef<
44
+ React.ElementRef<typeof AvatarPrimitive.Fallback>,
45
+ React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>
46
+ >(({ className, ...props }, ref) => (
47
+ <AvatarPrimitive.Fallback
48
+ ref={ref}
49
+ className={cn(
50
+ "flex h-full w-full items-center justify-center rounded-full bg-muted",
51
+ className
52
+ )}
53
+ {...props}
54
+ />
55
+ ))
56
+ AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName
58
57
 
59
58
  export { Avatar, AvatarImage, AvatarFallback }
package/src/ui/badge.tsx CHANGED
@@ -7,13 +7,12 @@
7
7
  */
8
8
 
9
9
  import * as React from "react"
10
- import { Slot } from "@radix-ui/react-slot"
11
10
  import { cva, type VariantProps } from "class-variance-authority"
12
11
 
13
12
  import { cn } from "../lib/utils"
14
13
 
15
14
  const badgeVariants = cva(
16
- "inline-flex items-center justify-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
15
+ "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
17
16
  {
18
17
  variants: {
19
18
  variant: {
@@ -32,21 +31,13 @@ const badgeVariants = cva(
32
31
  }
33
32
  )
34
33
 
35
- function Badge({
36
- className,
37
- variant,
38
- asChild = false,
39
- ...props
40
- }: React.ComponentProps<"span"> &
41
- VariantProps<typeof badgeVariants> & { asChild?: boolean }) {
42
- const Comp = asChild ? Slot : "span"
34
+ export interface BadgeProps
35
+ extends React.HTMLAttributes<HTMLDivElement>,
36
+ VariantProps<typeof badgeVariants> {}
43
37
 
38
+ function Badge({ className, variant, ...props }: BadgeProps) {
44
39
  return (
45
- <Comp
46
- data-slot="badge"
47
- className={cn(badgeVariants({ variant }), className)}
48
- {...props}
49
- />
40
+ <div className={cn(badgeVariants({ variant }), className)} {...props} />
50
41
  )
51
42
  }
52
43