@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,59 +6,36 @@
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"
12
+ import { type DialogProps } from "@radix-ui/react-dialog"
10
13
  import { Command as CommandPrimitive } from "cmdk"
11
- import { SearchIcon } from "lucide-react"
14
+ import { Search } from "lucide-react"
12
15
 
13
16
  import { cn } from "../lib/utils"
14
- import {
15
- Dialog,
16
- DialogContent,
17
- DialogDescription,
18
- DialogHeader,
19
- DialogTitle,
20
- } from "./dialog"
21
-
22
- function Command({
23
- className,
24
- ...props
25
- }: React.ComponentProps<typeof CommandPrimitive>) {
26
- return (
27
- <CommandPrimitive
28
- data-slot="command"
29
- className={cn(
30
- "bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md",
31
- className
32
- )}
33
- {...props}
34
- />
35
- )
36
- }
17
+ import { Dialog, DialogContent } from "./dialog"
37
18
 
38
- function CommandDialog({
39
- title = "Command Palette",
40
- description = "Search for a command to run...",
41
- children,
42
- className,
43
- showCloseButton = true,
44
- ...props
45
- }: React.ComponentProps<typeof Dialog> & {
46
- title?: string
47
- description?: string
48
- className?: string
49
- showCloseButton?: boolean
50
- }) {
19
+ const Command = React.forwardRef<
20
+ React.ElementRef<typeof CommandPrimitive>,
21
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive>
22
+ >(({ className, ...props }, ref) => (
23
+ <CommandPrimitive
24
+ ref={ref}
25
+ className={cn(
26
+ "flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",
27
+ className
28
+ )}
29
+ {...props}
30
+ />
31
+ ))
32
+ Command.displayName = CommandPrimitive.displayName
33
+
34
+ const CommandDialog = ({ children, ...props }: DialogProps) => {
51
35
  return (
52
36
  <Dialog {...props}>
53
- <DialogHeader className="sr-only">
54
- <DialogTitle>{title}</DialogTitle>
55
- <DialogDescription>{description}</DialogDescription>
56
- </DialogHeader>
57
- <DialogContent
58
- className={cn("overflow-hidden p-0", className)}
59
- showCloseButton={showCloseButton}
60
- >
61
- <Command className="[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5">
37
+ <DialogContent className="overflow-hidden p-0 shadow-lg">
38
+ <Command className="[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5">
62
39
  {children}
63
40
  </Command>
64
41
  </DialogContent>
@@ -66,116 +43,110 @@ function CommandDialog({
66
43
  )
67
44
  }
68
45
 
69
- function CommandInput({
70
- className,
71
- ...props
72
- }: React.ComponentProps<typeof CommandPrimitive.Input>) {
73
- return (
74
- <div
75
- data-slot="command-input-wrapper"
76
- className="flex h-9 items-center gap-2 border-b px-3"
77
- >
78
- <SearchIcon className="size-4 shrink-0 opacity-50" />
79
- <CommandPrimitive.Input
80
- data-slot="command-input"
81
- className={cn(
82
- "placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
83
- className
84
- )}
85
- {...props}
86
- />
87
- </div>
88
- )
89
- }
90
-
91
- function CommandList({
92
- className,
93
- ...props
94
- }: React.ComponentProps<typeof CommandPrimitive.List>) {
95
- return (
96
- <CommandPrimitive.List
97
- data-slot="command-list"
46
+ const CommandInput = React.forwardRef<
47
+ React.ElementRef<typeof CommandPrimitive.Input>,
48
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>
49
+ >(({ className, ...props }, ref) => (
50
+ <div className="flex items-center border-b px-3" cmdk-input-wrapper="">
51
+ <Search className="mr-2 h-4 w-4 shrink-0 opacity-50" />
52
+ <CommandPrimitive.Input
53
+ ref={ref}
98
54
  className={cn(
99
- "max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",
55
+ "flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
100
56
  className
101
57
  )}
102
58
  {...props}
103
59
  />
104
- )
105
- }
60
+ </div>
61
+ ))
106
62
 
107
- function CommandEmpty({
108
- ...props
109
- }: React.ComponentProps<typeof CommandPrimitive.Empty>) {
110
- return (
111
- <CommandPrimitive.Empty
112
- data-slot="command-empty"
113
- className="py-6 text-center text-sm"
114
- {...props}
115
- />
116
- )
117
- }
63
+ CommandInput.displayName = CommandPrimitive.Input.displayName
118
64
 
119
- function CommandGroup({
120
- className,
121
- ...props
122
- }: React.ComponentProps<typeof CommandPrimitive.Group>) {
123
- return (
124
- <CommandPrimitive.Group
125
- data-slot="command-group"
126
- className={cn(
127
- "text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium",
128
- className
129
- )}
130
- {...props}
131
- />
132
- )
133
- }
65
+ const CommandList = React.forwardRef<
66
+ React.ElementRef<typeof CommandPrimitive.List>,
67
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>
68
+ >(({ className, ...props }, ref) => (
69
+ <CommandPrimitive.List
70
+ ref={ref}
71
+ className={cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className)}
72
+ {...props}
73
+ />
74
+ ))
134
75
 
135
- function CommandSeparator({
136
- className,
137
- ...props
138
- }: React.ComponentProps<typeof CommandPrimitive.Separator>) {
139
- return (
140
- <CommandPrimitive.Separator
141
- data-slot="command-separator"
142
- className={cn("bg-border -mx-1 h-px", className)}
143
- {...props}
144
- />
145
- )
146
- }
76
+ CommandList.displayName = CommandPrimitive.List.displayName
147
77
 
148
- function CommandItem({
149
- className,
150
- ...props
151
- }: React.ComponentProps<typeof CommandPrimitive.Item>) {
152
- return (
153
- <CommandPrimitive.Item
154
- data-slot="command-item"
155
- className={cn(
156
- "data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_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=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
157
- className
158
- )}
159
- {...props}
160
- />
161
- )
162
- }
78
+ const CommandEmpty = React.forwardRef<
79
+ React.ElementRef<typeof CommandPrimitive.Empty>,
80
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>
81
+ >((props, ref) => (
82
+ <CommandPrimitive.Empty
83
+ ref={ref}
84
+ className="py-6 text-center text-sm"
85
+ {...props}
86
+ />
87
+ ))
88
+
89
+ CommandEmpty.displayName = CommandPrimitive.Empty.displayName
90
+
91
+ const CommandGroup = React.forwardRef<
92
+ React.ElementRef<typeof CommandPrimitive.Group>,
93
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>
94
+ >(({ className, ...props }, ref) => (
95
+ <CommandPrimitive.Group
96
+ ref={ref}
97
+ className={cn(
98
+ "overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",
99
+ className
100
+ )}
101
+ {...props}
102
+ />
103
+ ))
104
+
105
+ CommandGroup.displayName = CommandPrimitive.Group.displayName
106
+
107
+ const CommandSeparator = React.forwardRef<
108
+ React.ElementRef<typeof CommandPrimitive.Separator>,
109
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>
110
+ >(({ className, ...props }, ref) => (
111
+ <CommandPrimitive.Separator
112
+ ref={ref}
113
+ className={cn("-mx-1 h-px bg-border", className)}
114
+ {...props}
115
+ />
116
+ ))
117
+ CommandSeparator.displayName = CommandPrimitive.Separator.displayName
118
+
119
+ const CommandItem = React.forwardRef<
120
+ React.ElementRef<typeof CommandPrimitive.Item>,
121
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>
122
+ >(({ className, ...props }, ref) => (
123
+ <CommandPrimitive.Item
124
+ ref={ref}
125
+ className={cn(
126
+ "relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
127
+ className
128
+ )}
129
+ {...props}
130
+ />
131
+ ))
132
+
133
+ CommandItem.displayName = CommandPrimitive.Item.displayName
163
134
 
164
- function CommandShortcut({
135
+ const CommandShortcut = ({
165
136
  className,
166
137
  ...props
167
- }: React.ComponentProps<"span">) {
138
+ }: React.HTMLAttributes<HTMLSpanElement>) => {
168
139
  return (
169
140
  <span
170
- data-slot="command-shortcut"
171
141
  className={cn(
172
- "text-muted-foreground ml-auto text-xs tracking-widest",
142
+ "ml-auto text-xs tracking-widest text-muted-foreground",
173
143
  className
174
144
  )}
175
145
  {...props}
176
146
  />
177
147
  )
178
148
  }
149
+ CommandShortcut.displayName = "CommandShortcut"
179
150
 
180
151
  export {
181
152
  Command,
@@ -10,129 +10,86 @@
10
10
 
11
11
  import * as React from "react"
12
12
  import * as ContextMenuPrimitive from "@radix-ui/react-context-menu"
13
- import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react"
13
+ import { Check, ChevronRight, Circle } from "lucide-react"
14
14
 
15
15
  import { cn } from "../lib/utils"
16
16
 
17
- function ContextMenu({
18
- ...props
19
- }: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {
20
- return <ContextMenuPrimitive.Root data-slot="context-menu" {...props} />
21
- }
17
+ const ContextMenu = ContextMenuPrimitive.Root
22
18
 
23
- function ContextMenuTrigger({
24
- ...props
25
- }: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {
26
- return (
27
- <ContextMenuPrimitive.Trigger data-slot="context-menu-trigger" {...props} />
28
- )
29
- }
19
+ const ContextMenuTrigger = ContextMenuPrimitive.Trigger
30
20
 
31
- function ContextMenuGroup({
32
- ...props
33
- }: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {
34
- return (
35
- <ContextMenuPrimitive.Group data-slot="context-menu-group" {...props} />
36
- )
37
- }
21
+ const ContextMenuGroup = ContextMenuPrimitive.Group
38
22
 
39
- function ContextMenuPortal({
40
- ...props
41
- }: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {
42
- return (
43
- <ContextMenuPrimitive.Portal data-slot="context-menu-portal" {...props} />
44
- )
45
- }
23
+ const ContextMenuPortal = ContextMenuPrimitive.Portal
46
24
 
47
- function ContextMenuSub({
48
- ...props
49
- }: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {
50
- return <ContextMenuPrimitive.Sub data-slot="context-menu-sub" {...props} />
51
- }
25
+ const ContextMenuSub = ContextMenuPrimitive.Sub
52
26
 
53
- function ContextMenuRadioGroup({
54
- ...props
55
- }: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {
56
- return (
57
- <ContextMenuPrimitive.RadioGroup
58
- data-slot="context-menu-radio-group"
59
- {...props}
60
- />
61
- )
62
- }
27
+ const ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup
63
28
 
64
- function ContextMenuSubTrigger({
65
- className,
66
- inset,
67
- children,
68
- ...props
69
- }: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {
70
- inset?: boolean
71
- }) {
72
- return (
73
- <ContextMenuPrimitive.SubTrigger
74
- data-slot="context-menu-sub-trigger"
75
- data-inset={inset}
76
- className={cn(
77
- "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 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",
78
- className
79
- )}
80
- {...props}
81
- >
82
- {children}
83
- <ChevronRightIcon className="ml-auto" />
84
- </ContextMenuPrimitive.SubTrigger>
85
- )
86
- }
29
+ const ContextMenuSubTrigger = React.forwardRef<
30
+ React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>,
31
+ React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & {
32
+ inset?: boolean
33
+ }
34
+ >(({ className, inset, children, ...props }, ref) => (
35
+ <ContextMenuPrimitive.SubTrigger
36
+ ref={ref}
37
+ className={cn(
38
+ "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
39
+ inset && "pl-8",
40
+ className
41
+ )}
42
+ {...props}
43
+ >
44
+ {children}
45
+ <ChevronRight className="ml-auto h-4 w-4" />
46
+ </ContextMenuPrimitive.SubTrigger>
47
+ ))
48
+ ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName
87
49
 
88
- function ContextMenuSubContent({
89
- className,
90
- ...props
91
- }: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {
92
- return (
93
- <ContextMenuPrimitive.SubContent
94
- data-slot="context-menu-sub-content"
50
+ const ContextMenuSubContent = React.forwardRef<
51
+ React.ElementRef<typeof ContextMenuPrimitive.SubContent>,
52
+ React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>
53
+ >(({ className, ...props }, ref) => (
54
+ <ContextMenuPrimitive.SubContent
55
+ ref={ref}
56
+ className={cn(
57
+ "z-50 min-w-[8rem] overflow-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-context-menu-content-transform-origin]",
58
+ className
59
+ )}
60
+ {...props}
61
+ />
62
+ ))
63
+ ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName
64
+
65
+ const ContextMenuContent = React.forwardRef<
66
+ React.ElementRef<typeof ContextMenuPrimitive.Content>,
67
+ React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>
68
+ >(({ className, ...props }, ref) => (
69
+ <ContextMenuPrimitive.Portal>
70
+ <ContextMenuPrimitive.Content
71
+ ref={ref}
95
72
  className={cn(
96
- "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-context-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg",
73
+ "z-50 max-h-[--radix-context-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 animate-in fade-in-80 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-context-menu-content-transform-origin]",
97
74
  className
98
75
  )}
99
76
  {...props}
100
77
  />
101
- )
102
- }
103
-
104
- function ContextMenuContent({
105
- className,
106
- ...props
107
- }: React.ComponentProps<typeof ContextMenuPrimitive.Content>) {
108
- return (
109
- <ContextMenuPrimitive.Portal>
110
- <ContextMenuPrimitive.Content
111
- data-slot="context-menu-content"
112
- className={cn(
113
- "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-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",
114
- className
115
- )}
116
- {...props}
117
- />
118
- </ContextMenuPrimitive.Portal>
119
- )
120
- }
78
+ </ContextMenuPrimitive.Portal>
79
+ ))
80
+ ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName
121
81
 
122
82
  const ContextMenuItem = React.forwardRef<
123
83
  React.ElementRef<typeof ContextMenuPrimitive.Item>,
124
84
  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> & {
125
85
  inset?: boolean
126
- variant?: "default" | "destructive"
127
86
  }
128
- >(({ className, inset, variant = "default", ...props }, ref) => (
87
+ >(({ className, inset, ...props }, ref) => (
129
88
  <ContextMenuPrimitive.Item
130
89
  ref={ref}
131
- data-slot="context-menu-item"
132
- data-inset={inset}
133
- data-variant={variant}
134
90
  className={cn(
135
- "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",
91
+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
92
+ inset && "pl-8",
136
93
  className
137
94
  )}
138
95
  {...props}
@@ -146,17 +103,16 @@ const ContextMenuCheckboxItem = React.forwardRef<
146
103
  >(({ className, children, checked, ...props }, ref) => (
147
104
  <ContextMenuPrimitive.CheckboxItem
148
105
  ref={ref}
149
- data-slot="context-menu-checkbox-item"
150
106
  className={cn(
151
- "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",
107
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
152
108
  className
153
109
  )}
154
110
  checked={checked}
155
111
  {...props}
156
112
  >
157
- <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
113
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
158
114
  <ContextMenuPrimitive.ItemIndicator>
159
- <CheckIcon className="size-4" />
115
+ <Check className="h-4 w-4" />
160
116
  </ContextMenuPrimitive.ItemIndicator>
161
117
  </span>
162
118
  {children}
@@ -171,16 +127,15 @@ const ContextMenuRadioItem = React.forwardRef<
171
127
  >(({ className, children, ...props }, ref) => (
172
128
  <ContextMenuPrimitive.RadioItem
173
129
  ref={ref}
174
- data-slot="context-menu-radio-item"
175
130
  className={cn(
176
- "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",
131
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
177
132
  className
178
133
  )}
179
134
  {...props}
180
135
  >
181
- <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
136
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
182
137
  <ContextMenuPrimitive.ItemIndicator>
183
- <CircleIcon className="size-2 fill-current" />
138
+ <Circle className="h-2 w-2 fill-current" />
184
139
  </ContextMenuPrimitive.ItemIndicator>
185
140
  </span>
186
141
  {children}
@@ -196,10 +151,9 @@ const ContextMenuLabel = React.forwardRef<
196
151
  >(({ className, inset, ...props }, ref) => (
197
152
  <ContextMenuPrimitive.Label
198
153
  ref={ref}
199
- data-slot="context-menu-label"
200
- data-inset={inset}
201
154
  className={cn(
202
- "text-foreground px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
155
+ "px-2 py-1.5 text-sm font-semibold text-foreground",
156
+ inset && "pl-8",
203
157
  className
204
158
  )}
205
159
  {...props}
@@ -213,28 +167,27 @@ const ContextMenuSeparator = React.forwardRef<
213
167
  >(({ className, ...props }, ref) => (
214
168
  <ContextMenuPrimitive.Separator
215
169
  ref={ref}
216
- data-slot="context-menu-separator"
217
- className={cn("bg-border -mx-1 my-1 h-px", className)}
170
+ className={cn("-mx-1 my-1 h-px bg-border", className)}
218
171
  {...props}
219
172
  />
220
173
  ))
221
174
  ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName
222
175
 
223
- function ContextMenuShortcut({
176
+ const ContextMenuShortcut = ({
224
177
  className,
225
178
  ...props
226
- }: React.ComponentProps<"span">) {
179
+ }: React.HTMLAttributes<HTMLSpanElement>) => {
227
180
  return (
228
181
  <span
229
- data-slot="context-menu-shortcut"
230
182
  className={cn(
231
- "text-muted-foreground ml-auto text-xs tracking-widest",
183
+ "ml-auto text-xs tracking-widest text-muted-foreground",
232
184
  className
233
185
  )}
234
186
  {...props}
235
187
  />
236
188
  )
237
189
  }
190
+ ContextMenuShortcut.displayName = "ContextMenuShortcut"
238
191
 
239
192
  export {
240
193
  ContextMenu,