@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
package/src/ui/dialog.tsx CHANGED
@@ -6,144 +6,125 @@
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 DialogPrimitive from "@radix-ui/react-dialog"
11
- import { XIcon } from "lucide-react"
13
+ import { X } from "lucide-react"
12
14
 
13
15
  import { cn } from "../lib/utils"
14
16
 
15
- function Dialog({
16
- ...props
17
- }: React.ComponentProps<typeof DialogPrimitive.Root>) {
18
- return <DialogPrimitive.Root data-slot="dialog" {...props} />
19
- }
20
-
21
- function DialogTrigger({
22
- ...props
23
- }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {
24
- return <DialogPrimitive.Trigger data-slot="dialog-trigger" {...props} />
25
- }
26
-
27
- function DialogPortal({
28
- ...props
29
- }: React.ComponentProps<typeof DialogPrimitive.Portal>) {
30
- return <DialogPrimitive.Portal data-slot="dialog-portal" {...props} />
31
- }
17
+ const Dialog = DialogPrimitive.Root
32
18
 
33
- function DialogClose({
34
- ...props
35
- }: React.ComponentProps<typeof DialogPrimitive.Close>) {
36
- return <DialogPrimitive.Close data-slot="dialog-close" {...props} />
37
- }
19
+ const DialogTrigger = DialogPrimitive.Trigger
38
20
 
39
- function DialogOverlay({
40
- className,
41
- ...props
42
- }: React.ComponentProps<typeof DialogPrimitive.Overlay>) {
43
- return (
44
- <DialogPrimitive.Overlay
45
- data-slot="dialog-overlay"
46
- className={cn(
47
- "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",
48
- className
49
- )}
50
- {...props}
51
- />
52
- )
53
- }
21
+ const DialogPortal = DialogPrimitive.Portal
54
22
 
55
- function DialogContent({
56
- className,
57
- children,
58
- showCloseButton = true,
59
- ...props
60
- }: React.ComponentProps<typeof DialogPrimitive.Content> & {
61
- showCloseButton?: boolean
62
- }) {
63
- return (
64
- <DialogPortal data-slot="dialog-portal">
65
- <DialogOverlay />
66
- <DialogPrimitive.Content
67
- data-slot="dialog-content"
68
- className={cn(
69
- "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 outline-none sm:max-w-lg",
70
- className
71
- )}
72
- {...props}
73
- >
74
- {children}
75
- {showCloseButton && (
76
- <DialogPrimitive.Close
77
- data-slot="dialog-close"
78
- className="ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4"
79
- >
80
- <XIcon />
81
- <span className="sr-only">Close</span>
82
- </DialogPrimitive.Close>
83
- )}
84
- </DialogPrimitive.Content>
85
- </DialogPortal>
86
- )
87
- }
23
+ const DialogClose = DialogPrimitive.Close
88
24
 
89
- function DialogHeader({ className, ...props }: React.ComponentProps<"div">) {
90
- return (
91
- <div
92
- data-slot="dialog-header"
93
- className={cn("flex flex-col gap-2 text-center sm:text-left", className)}
94
- {...props}
95
- />
96
- )
97
- }
25
+ const DialogOverlay = React.forwardRef<
26
+ React.ElementRef<typeof DialogPrimitive.Overlay>,
27
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
28
+ >(({ className, ...props }, ref) => (
29
+ <DialogPrimitive.Overlay
30
+ ref={ref}
31
+ className={cn(
32
+ "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",
33
+ className
34
+ )}
35
+ {...props}
36
+ />
37
+ ))
38
+ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName
98
39
 
99
- function DialogFooter({ className, ...props }: React.ComponentProps<"div">) {
100
- return (
101
- <div
102
- data-slot="dialog-footer"
40
+ const DialogContent = React.forwardRef<
41
+ React.ElementRef<typeof DialogPrimitive.Content>,
42
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>
43
+ >(({ className, children, ...props }, ref) => (
44
+ <DialogPortal>
45
+ <DialogOverlay />
46
+ <DialogPrimitive.Content
47
+ ref={ref}
103
48
  className={cn(
104
- "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
49
+ "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",
105
50
  className
106
51
  )}
107
52
  {...props}
108
- />
109
- )
110
- }
53
+ >
54
+ {children}
55
+ <DialogPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
56
+ <X className="h-4 w-4" />
57
+ <span className="sr-only">Close</span>
58
+ </DialogPrimitive.Close>
59
+ </DialogPrimitive.Content>
60
+ </DialogPortal>
61
+ ))
62
+ DialogContent.displayName = DialogPrimitive.Content.displayName
111
63
 
112
- function DialogTitle({
64
+ const DialogHeader = ({
113
65
  className,
114
66
  ...props
115
- }: React.ComponentProps<typeof DialogPrimitive.Title>) {
116
- return (
117
- <DialogPrimitive.Title
118
- data-slot="dialog-title"
119
- className={cn("text-lg leading-none font-semibold", className)}
120
- {...props}
121
- />
122
- )
123
- }
67
+ }: React.HTMLAttributes<HTMLDivElement>) => (
68
+ <div
69
+ className={cn(
70
+ "flex flex-col space-y-1.5 text-center sm:text-left",
71
+ className
72
+ )}
73
+ {...props}
74
+ />
75
+ )
76
+ DialogHeader.displayName = "DialogHeader"
124
77
 
125
- function DialogDescription({
78
+ const DialogFooter = ({
126
79
  className,
127
80
  ...props
128
- }: React.ComponentProps<typeof DialogPrimitive.Description>) {
129
- return (
130
- <DialogPrimitive.Description
131
- data-slot="dialog-description"
132
- className={cn("text-muted-foreground text-sm", className)}
133
- {...props}
134
- />
135
- )
136
- }
81
+ }: React.HTMLAttributes<HTMLDivElement>) => (
82
+ <div
83
+ className={cn(
84
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
85
+ className
86
+ )}
87
+ {...props}
88
+ />
89
+ )
90
+ DialogFooter.displayName = "DialogFooter"
91
+
92
+ const DialogTitle = React.forwardRef<
93
+ React.ElementRef<typeof DialogPrimitive.Title>,
94
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>
95
+ >(({ className, ...props }, ref) => (
96
+ <DialogPrimitive.Title
97
+ ref={ref}
98
+ className={cn(
99
+ "text-lg font-semibold leading-none tracking-tight",
100
+ className
101
+ )}
102
+ {...props}
103
+ />
104
+ ))
105
+ DialogTitle.displayName = DialogPrimitive.Title.displayName
106
+
107
+ const DialogDescription = React.forwardRef<
108
+ React.ElementRef<typeof DialogPrimitive.Description>,
109
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>
110
+ >(({ className, ...props }, ref) => (
111
+ <DialogPrimitive.Description
112
+ ref={ref}
113
+ className={cn("text-sm text-muted-foreground", className)}
114
+ {...props}
115
+ />
116
+ ))
117
+ DialogDescription.displayName = DialogPrimitive.Description.displayName
137
118
 
138
119
  export {
139
120
  Dialog,
121
+ DialogPortal,
122
+ DialogOverlay,
140
123
  DialogClose,
124
+ DialogTrigger,
141
125
  DialogContent,
142
- DialogDescription,
143
- DialogFooter,
144
126
  DialogHeader,
145
- DialogOverlay,
146
- DialogPortal,
127
+ DialogFooter,
147
128
  DialogTitle,
148
- DialogTrigger,
129
+ DialogDescription,
149
130
  }
package/src/ui/drawer.tsx CHANGED
@@ -13,121 +13,104 @@ import { Drawer as DrawerPrimitive } from "vaul"
13
13
 
14
14
  import { cn } from "../lib/utils"
15
15
 
16
- function Drawer({
16
+ const Drawer = ({
17
+ shouldScaleBackground = true,
17
18
  ...props
18
- }: React.ComponentProps<typeof DrawerPrimitive.Root>) {
19
- return <DrawerPrimitive.Root data-slot="drawer" {...props} />
20
- }
19
+ }: React.ComponentProps<typeof DrawerPrimitive.Root>) => (
20
+ <DrawerPrimitive.Root
21
+ shouldScaleBackground={shouldScaleBackground}
22
+ {...props}
23
+ />
24
+ )
25
+ Drawer.displayName = "Drawer"
21
26
 
22
- function DrawerTrigger({
23
- ...props
24
- }: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {
25
- return <DrawerPrimitive.Trigger data-slot="drawer-trigger" {...props} />
26
- }
27
+ const DrawerTrigger = DrawerPrimitive.Trigger
27
28
 
28
- function DrawerPortal({
29
- ...props
30
- }: React.ComponentProps<typeof DrawerPrimitive.Portal>) {
31
- return <DrawerPrimitive.Portal data-slot="drawer-portal" {...props} />
32
- }
33
-
34
- function DrawerClose({
35
- ...props
36
- }: React.ComponentProps<typeof DrawerPrimitive.Close>) {
37
- return <DrawerPrimitive.Close data-slot="drawer-close" {...props} />
38
- }
29
+ const DrawerPortal = DrawerPrimitive.Portal
39
30
 
40
- function DrawerOverlay({
41
- className,
42
- ...props
43
- }: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {
44
- return (
45
- <DrawerPrimitive.Overlay
46
- data-slot="drawer-overlay"
47
- className={cn(
48
- "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",
49
- className
50
- )}
51
- {...props}
52
- />
53
- )
54
- }
31
+ const DrawerClose = DrawerPrimitive.Close
55
32
 
56
- function DrawerContent({
57
- className,
58
- children,
59
- ...props
60
- }: React.ComponentProps<typeof DrawerPrimitive.Content>) {
61
- return (
62
- <DrawerPortal data-slot="drawer-portal">
63
- <DrawerOverlay />
64
- <DrawerPrimitive.Content
65
- data-slot="drawer-content"
66
- className={cn(
67
- "group/drawer-content bg-background fixed z-50 flex h-auto flex-col",
68
- "data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b",
69
- "data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t",
70
- "data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm",
71
- "data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm",
72
- className
73
- )}
74
- {...props}
75
- >
76
- <div className="bg-muted mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block" />
77
- {children}
78
- </DrawerPrimitive.Content>
79
- </DrawerPortal>
80
- )
81
- }
33
+ const DrawerOverlay = React.forwardRef<
34
+ React.ElementRef<typeof DrawerPrimitive.Overlay>,
35
+ React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>
36
+ >(({ className, ...props }, ref) => (
37
+ <DrawerPrimitive.Overlay
38
+ ref={ref}
39
+ className={cn("fixed inset-0 z-50 bg-black/80", className)}
40
+ {...props}
41
+ />
42
+ ))
43
+ DrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName
82
44
 
83
- function DrawerHeader({ className, ...props }: React.ComponentProps<"div">) {
84
- return (
85
- <div
86
- data-slot="drawer-header"
45
+ const DrawerContent = React.forwardRef<
46
+ React.ElementRef<typeof DrawerPrimitive.Content>,
47
+ React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>
48
+ >(({ className, children, ...props }, ref) => (
49
+ <DrawerPortal>
50
+ <DrawerOverlay />
51
+ <DrawerPrimitive.Content
52
+ ref={ref}
87
53
  className={cn(
88
- "flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left",
54
+ "fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-background",
89
55
  className
90
56
  )}
91
57
  {...props}
92
- />
93
- )
94
- }
95
-
96
- function DrawerFooter({ className, ...props }: React.ComponentProps<"div">) {
97
- return (
98
- <div
99
- data-slot="drawer-footer"
100
- className={cn("mt-auto flex flex-col gap-2 p-4", className)}
101
- {...props}
102
- />
103
- )
104
- }
58
+ >
59
+ <div className="mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted" />
60
+ {children}
61
+ </DrawerPrimitive.Content>
62
+ </DrawerPortal>
63
+ ))
64
+ DrawerContent.displayName = "DrawerContent"
105
65
 
106
- function DrawerTitle({
66
+ const DrawerHeader = ({
107
67
  className,
108
68
  ...props
109
- }: React.ComponentProps<typeof DrawerPrimitive.Title>) {
110
- return (
111
- <DrawerPrimitive.Title
112
- data-slot="drawer-title"
113
- className={cn("text-foreground font-semibold", className)}
114
- {...props}
115
- />
116
- )
117
- }
69
+ }: React.HTMLAttributes<HTMLDivElement>) => (
70
+ <div
71
+ className={cn("grid gap-1.5 p-4 text-center sm:text-left", className)}
72
+ {...props}
73
+ />
74
+ )
75
+ DrawerHeader.displayName = "DrawerHeader"
118
76
 
119
- function DrawerDescription({
77
+ const DrawerFooter = ({
120
78
  className,
121
79
  ...props
122
- }: React.ComponentProps<typeof DrawerPrimitive.Description>) {
123
- return (
124
- <DrawerPrimitive.Description
125
- data-slot="drawer-description"
126
- className={cn("text-muted-foreground text-sm", className)}
127
- {...props}
128
- />
129
- )
130
- }
80
+ }: React.HTMLAttributes<HTMLDivElement>) => (
81
+ <div
82
+ className={cn("mt-auto flex flex-col gap-2 p-4", className)}
83
+ {...props}
84
+ />
85
+ )
86
+ DrawerFooter.displayName = "DrawerFooter"
87
+
88
+ const DrawerTitle = React.forwardRef<
89
+ React.ElementRef<typeof DrawerPrimitive.Title>,
90
+ React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>
91
+ >(({ className, ...props }, ref) => (
92
+ <DrawerPrimitive.Title
93
+ ref={ref}
94
+ className={cn(
95
+ "text-lg font-semibold leading-none tracking-tight",
96
+ className
97
+ )}
98
+ {...props}
99
+ />
100
+ ))
101
+ DrawerTitle.displayName = DrawerPrimitive.Title.displayName
102
+
103
+ const DrawerDescription = React.forwardRef<
104
+ React.ElementRef<typeof DrawerPrimitive.Description>,
105
+ React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>
106
+ >(({ className, ...props }, ref) => (
107
+ <DrawerPrimitive.Description
108
+ ref={ref}
109
+ className={cn("text-sm text-muted-foreground", className)}
110
+ {...props}
111
+ />
112
+ ))
113
+ DrawerDescription.displayName = DrawerPrimitive.Description.displayName
131
114
 
132
115
  export {
133
116
  Drawer,