@codefast/ui 0.0.3 → 0.0.5

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 (352) hide show
  1. package/dist/accordion.d.mts +9 -0
  2. package/dist/accordion.d.ts +9 -0
  3. package/dist/accordion.js +53 -0
  4. package/dist/accordion.js.map +1 -0
  5. package/dist/accordion.mjs +53 -0
  6. package/dist/accordion.mjs.map +1 -0
  7. package/dist/alert-dialog.d.mts +14 -0
  8. package/dist/alert-dialog.d.ts +14 -0
  9. package/dist/alert-dialog.js +107 -0
  10. package/dist/alert-dialog.js.map +1 -0
  11. package/dist/alert-dialog.mjs +107 -0
  12. package/dist/alert-dialog.mjs.map +1 -0
  13. package/dist/alert.d.mts +64 -0
  14. package/dist/alert.d.ts +64 -0
  15. package/dist/alert.js +55 -0
  16. package/dist/alert.js.map +1 -0
  17. package/dist/alert.mjs +55 -0
  18. package/dist/alert.mjs.map +1 -0
  19. package/dist/aspect-ratio.d.mts +6 -0
  20. package/dist/aspect-ratio.d.ts +6 -0
  21. package/dist/aspect-ratio.js +9 -0
  22. package/dist/aspect-ratio.js.map +1 -0
  23. package/dist/aspect-ratio.mjs +9 -0
  24. package/dist/aspect-ratio.mjs.map +1 -0
  25. package/dist/avatar.d.mts +8 -0
  26. package/dist/avatar.d.ts +8 -0
  27. package/dist/avatar.js +48 -0
  28. package/dist/avatar.js.map +1 -0
  29. package/dist/avatar.mjs +48 -0
  30. package/dist/avatar.mjs.map +1 -0
  31. package/dist/badge.d.mts +62 -0
  32. package/dist/badge.d.ts +62 -0
  33. package/dist/badge.js +31 -0
  34. package/dist/badge.js.map +1 -0
  35. package/dist/badge.mjs +31 -0
  36. package/dist/badge.mjs.map +1 -0
  37. package/dist/breadcrumb.d.mts +15 -0
  38. package/dist/breadcrumb.d.ts +15 -0
  39. package/dist/breadcrumb.js +100 -0
  40. package/dist/breadcrumb.js.map +1 -0
  41. package/dist/breadcrumb.mjs +100 -0
  42. package/dist/breadcrumb.mjs.map +1 -0
  43. package/dist/button.d.mts +1 -1
  44. package/dist/button.d.ts +1 -1
  45. package/dist/button.js +9 -1
  46. package/dist/button.js.map +1 -1
  47. package/dist/button.mjs +9 -1
  48. package/dist/button.mjs.map +1 -1
  49. package/dist/calendar.d.mts +7 -0
  50. package/dist/calendar.d.ts +7 -0
  51. package/dist/calendar.js +83 -0
  52. package/dist/calendar.js.map +1 -0
  53. package/dist/calendar.mjs +83 -0
  54. package/dist/calendar.mjs.map +1 -0
  55. package/dist/card.d.mts +9 -7
  56. package/dist/card.d.ts +9 -7
  57. package/dist/card.js +66 -1
  58. package/dist/card.js.map +1 -1
  59. package/dist/card.mjs +66 -1
  60. package/dist/card.mjs.map +1 -1
  61. package/dist/carousel.d.mts +22 -0
  62. package/dist/carousel.d.ts +22 -0
  63. package/dist/carousel.js +194 -0
  64. package/dist/carousel.js.map +1 -0
  65. package/dist/carousel.mjs +194 -0
  66. package/dist/carousel.mjs.map +1 -0
  67. package/dist/checkbox.d.mts +6 -0
  68. package/dist/checkbox.d.ts +6 -0
  69. package/dist/checkbox.js +27 -0
  70. package/dist/checkbox.js.map +1 -0
  71. package/dist/checkbox.mjs +27 -0
  72. package/dist/checkbox.mjs.map +1 -0
  73. package/dist/chunk-4K26QLS2.js +52 -0
  74. package/dist/chunk-4K26QLS2.js.map +1 -0
  75. package/dist/chunk-5GHZ6EXI.js +41 -0
  76. package/dist/chunk-5GHZ6EXI.js.map +1 -0
  77. package/dist/chunk-EIHWTXQ4.mjs +112 -0
  78. package/dist/chunk-EIHWTXQ4.mjs.map +1 -0
  79. package/dist/chunk-G3NP7M2N.js +19 -0
  80. package/dist/chunk-G3NP7M2N.js.map +1 -0
  81. package/dist/chunk-LDYBRDAY.js +112 -0
  82. package/dist/chunk-LDYBRDAY.js.map +1 -0
  83. package/dist/chunk-PTD4AMHI.mjs +25 -0
  84. package/dist/chunk-PTD4AMHI.mjs.map +1 -0
  85. package/dist/chunk-RTKEO347.js +25 -0
  86. package/dist/chunk-RTKEO347.js.map +1 -0
  87. package/dist/chunk-T52N6ZBP.mjs +41 -0
  88. package/dist/chunk-T52N6ZBP.mjs.map +1 -0
  89. package/dist/chunk-UG3URV2Z.mjs +19 -0
  90. package/dist/chunk-UG3URV2Z.mjs.map +1 -0
  91. package/dist/chunk-Z524G4RY.mjs +52 -0
  92. package/dist/chunk-Z524G4RY.mjs.map +1 -0
  93. package/dist/collapsible.d.mts +8 -0
  94. package/dist/collapsible.d.ts +8 -0
  95. package/dist/collapsible.js +13 -0
  96. package/dist/collapsible.js.map +1 -0
  97. package/dist/collapsible.mjs +13 -0
  98. package/dist/collapsible.mjs.map +1 -0
  99. package/dist/command.d.mts +89 -0
  100. package/dist/command.d.ts +89 -0
  101. package/dist/command.js +132 -0
  102. package/dist/command.js.map +1 -0
  103. package/dist/command.mjs +132 -0
  104. package/dist/command.mjs.map +1 -0
  105. package/dist/context-menu.d.mts +26 -0
  106. package/dist/context-menu.d.ts +26 -0
  107. package/dist/context-menu.js +170 -0
  108. package/dist/context-menu.js.map +1 -0
  109. package/dist/context-menu.mjs +170 -0
  110. package/dist/context-menu.mjs.map +1 -0
  111. package/dist/dialog.d.mts +13 -0
  112. package/dist/dialog.d.ts +13 -0
  113. package/dist/dialog.js +23 -0
  114. package/dist/dialog.mjs +23 -0
  115. package/dist/drawer.d.mts +16 -0
  116. package/dist/drawer.d.ts +16 -0
  117. package/dist/drawer.js +98 -0
  118. package/dist/drawer.js.map +1 -0
  119. package/dist/drawer.mjs +98 -0
  120. package/dist/drawer.mjs.map +1 -0
  121. package/dist/dropdown-menu.d.mts +25 -0
  122. package/dist/dropdown-menu.d.ts +25 -0
  123. package/dist/dropdown-menu.js +158 -0
  124. package/dist/dropdown-menu.js.map +1 -0
  125. package/dist/dropdown-menu.mjs +158 -0
  126. package/dist/dropdown-menu.mjs.map +1 -0
  127. package/dist/form.d.mts +27 -0
  128. package/dist/form.d.ts +27 -0
  129. package/dist/form.js +118 -0
  130. package/dist/form.js.map +1 -0
  131. package/dist/form.mjs +118 -0
  132. package/dist/form.mjs.map +1 -0
  133. package/dist/hover-card.d.mts +8 -0
  134. package/dist/hover-card.d.ts +8 -0
  135. package/dist/hover-card.js +31 -0
  136. package/dist/hover-card.js.map +1 -0
  137. package/dist/hover-card.mjs +31 -0
  138. package/dist/hover-card.mjs.map +1 -0
  139. package/dist/input-otp.d.mts +36 -0
  140. package/dist/input-otp.d.ts +36 -0
  141. package/dist/input-otp.js +60 -0
  142. package/dist/input-otp.js.map +1 -0
  143. package/dist/input-otp.mjs +60 -0
  144. package/dist/input-otp.mjs.map +1 -0
  145. package/dist/input.d.mts +5 -0
  146. package/dist/input.d.ts +5 -0
  147. package/dist/input.js +26 -0
  148. package/dist/input.js.map +1 -0
  149. package/dist/input.mjs +26 -0
  150. package/dist/input.mjs.map +1 -0
  151. package/dist/label.d.mts +6 -0
  152. package/dist/label.d.ts +6 -0
  153. package/dist/label.js +9 -0
  154. package/dist/label.js.map +1 -0
  155. package/dist/label.mjs +9 -0
  156. package/dist/label.mjs.map +1 -0
  157. package/dist/menubar.d.mts +29 -0
  158. package/dist/menubar.d.ts +29 -0
  159. package/dist/menubar.js +189 -0
  160. package/dist/menubar.js.map +1 -0
  161. package/dist/menubar.mjs +189 -0
  162. package/dist/menubar.mjs.map +1 -0
  163. package/dist/navigation-menu.d.mts +68 -0
  164. package/dist/navigation-menu.d.ts +68 -0
  165. package/dist/navigation-menu.js +125 -0
  166. package/dist/navigation-menu.js.map +1 -0
  167. package/dist/navigation-menu.mjs +125 -0
  168. package/dist/navigation-menu.mjs.map +1 -0
  169. package/dist/pagination.d.mts +16 -0
  170. package/dist/pagination.d.ts +16 -0
  171. package/dist/pagination.js +124 -0
  172. package/dist/pagination.js.map +1 -0
  173. package/dist/pagination.mjs +124 -0
  174. package/dist/pagination.mjs.map +1 -0
  175. package/dist/popover.d.mts +10 -0
  176. package/dist/popover.d.ts +10 -0
  177. package/dist/popover.js +43 -0
  178. package/dist/popover.js.map +1 -0
  179. package/dist/popover.mjs +43 -0
  180. package/dist/popover.mjs.map +1 -0
  181. package/dist/progress.d.mts +6 -0
  182. package/dist/progress.d.ts +6 -0
  183. package/dist/progress.js +34 -0
  184. package/dist/progress.js.map +1 -0
  185. package/dist/progress.mjs +34 -0
  186. package/dist/progress.mjs.map +1 -0
  187. package/dist/radio-group.d.mts +7 -0
  188. package/dist/radio-group.d.ts +7 -0
  189. package/dist/radio-group.js +47 -0
  190. package/dist/radio-group.js.map +1 -0
  191. package/dist/radio-group.mjs +47 -0
  192. package/dist/radio-group.mjs.map +1 -0
  193. package/dist/resizable.d.mts +26 -0
  194. package/dist/resizable.d.ts +26 -0
  195. package/dist/resizable.js +48 -0
  196. package/dist/resizable.js.map +1 -0
  197. package/dist/resizable.mjs +48 -0
  198. package/dist/resizable.mjs.map +1 -0
  199. package/dist/scroll-area.d.mts +7 -0
  200. package/dist/scroll-area.d.ts +7 -0
  201. package/dist/scroll-area.js +45 -0
  202. package/dist/scroll-area.js.map +1 -0
  203. package/dist/scroll-area.mjs +45 -0
  204. package/dist/scroll-area.mjs.map +1 -0
  205. package/dist/select.d.mts +15 -0
  206. package/dist/select.d.ts +15 -0
  207. package/dist/select.js +135 -0
  208. package/dist/select.js.map +1 -0
  209. package/dist/select.mjs +135 -0
  210. package/dist/select.mjs.map +1 -0
  211. package/dist/separator.d.mts +6 -0
  212. package/dist/separator.d.ts +6 -0
  213. package/dist/separator.js +30 -0
  214. package/dist/separator.js.map +1 -0
  215. package/dist/separator.mjs +30 -0
  216. package/dist/separator.mjs.map +1 -0
  217. package/dist/sheet.d.mts +73 -0
  218. package/dist/sheet.d.ts +73 -0
  219. package/dist/sheet.js +122 -0
  220. package/dist/sheet.js.map +1 -0
  221. package/dist/sheet.mjs +122 -0
  222. package/dist/sheet.mjs.map +1 -0
  223. package/dist/skeleton.d.mts +5 -0
  224. package/dist/skeleton.d.ts +5 -0
  225. package/dist/skeleton.js +22 -0
  226. package/dist/skeleton.js.map +1 -0
  227. package/dist/skeleton.mjs +22 -0
  228. package/dist/skeleton.mjs.map +1 -0
  229. package/dist/slider.d.mts +6 -0
  230. package/dist/slider.d.ts +6 -0
  231. package/dist/slider.js +29 -0
  232. package/dist/slider.js.map +1 -0
  233. package/dist/slider.mjs +29 -0
  234. package/dist/slider.mjs.map +1 -0
  235. package/dist/sonner.d.mts +8 -0
  236. package/dist/sonner.d.ts +8 -0
  237. package/dist/sonner.js +35 -0
  238. package/dist/sonner.js.map +1 -0
  239. package/dist/sonner.mjs +35 -0
  240. package/dist/sonner.mjs.map +1 -0
  241. package/dist/styles.css +1 -1
  242. package/dist/styles.css.map +1 -1
  243. package/dist/switch.d.mts +6 -0
  244. package/dist/switch.d.ts +6 -0
  245. package/dist/switch.js +26 -0
  246. package/dist/switch.js.map +1 -0
  247. package/dist/switch.mjs +26 -0
  248. package/dist/switch.mjs.map +1 -0
  249. package/dist/table.d.mts +12 -0
  250. package/dist/table.d.ts +12 -0
  251. package/dist/table.js +95 -0
  252. package/dist/table.js.map +1 -0
  253. package/dist/table.mjs +95 -0
  254. package/dist/table.mjs.map +1 -0
  255. package/dist/tabs.d.mts +9 -0
  256. package/dist/tabs.d.ts +9 -0
  257. package/dist/tabs.js +53 -0
  258. package/dist/tabs.js.map +1 -0
  259. package/dist/tabs.mjs +53 -0
  260. package/dist/tabs.mjs.map +1 -0
  261. package/dist/textarea.d.mts +5 -0
  262. package/dist/textarea.d.ts +5 -0
  263. package/dist/textarea.js +25 -0
  264. package/dist/textarea.js.map +1 -0
  265. package/dist/textarea.mjs +25 -0
  266. package/dist/textarea.mjs.map +1 -0
  267. package/dist/toggle-group.d.mts +10 -0
  268. package/dist/toggle-group.d.ts +10 -0
  269. package/dist/toggle-group.js +50 -0
  270. package/dist/toggle-group.js.map +1 -0
  271. package/dist/toggle-group.mjs +50 -0
  272. package/dist/toggle-group.mjs.map +1 -0
  273. package/dist/toggle.d.mts +66 -0
  274. package/dist/toggle.d.ts +66 -0
  275. package/dist/toggle.js +11 -0
  276. package/dist/toggle.js.map +1 -0
  277. package/dist/toggle.mjs +11 -0
  278. package/dist/toggle.mjs.map +1 -0
  279. package/dist/tooltip.d.mts +10 -0
  280. package/dist/tooltip.d.ts +10 -0
  281. package/dist/tooltip.js +42 -0
  282. package/dist/tooltip.js.map +1 -0
  283. package/dist/tooltip.mjs +42 -0
  284. package/dist/tooltip.mjs.map +1 -0
  285. package/dist/{cva.d.mts → utils.d.mts} +2 -2
  286. package/dist/{cva.d.ts → utils.d.ts} +2 -2
  287. package/dist/utils.js +11 -0
  288. package/dist/utils.js.map +1 -0
  289. package/dist/utils.mjs +11 -0
  290. package/dist/utils.mjs.map +1 -0
  291. package/package.json +260 -19
  292. package/src/accordion.tsx +76 -0
  293. package/src/alert-dialog.tsx +159 -0
  294. package/src/alert.tsx +78 -0
  295. package/src/aspect-ratio.tsx +15 -0
  296. package/src/avatar.tsx +65 -0
  297. package/src/badge.tsx +43 -0
  298. package/src/breadcrumb.tsx +148 -0
  299. package/src/button.tsx +7 -7
  300. package/src/calendar.tsx +94 -0
  301. package/src/card.tsx +112 -25
  302. package/src/carousel.tsx +281 -0
  303. package/src/checkbox.tsx +35 -0
  304. package/src/collapsible.tsx +27 -0
  305. package/src/command.tsx +203 -0
  306. package/src/context-menu.tsx +278 -0
  307. package/src/dialog.tsx +148 -0
  308. package/src/drawer.tsx +140 -0
  309. package/src/dropdown-menu.tsx +261 -0
  310. package/src/form.tsx +224 -0
  311. package/src/hover-card.tsx +46 -0
  312. package/src/input-otp.tsx +100 -0
  313. package/src/input.tsx +30 -0
  314. package/src/label.tsx +29 -0
  315. package/src/menubar.tsx +301 -0
  316. package/src/navigation-menu.tsx +176 -0
  317. package/src/pagination.tsx +160 -0
  318. package/src/popover.tsx +68 -0
  319. package/src/progress.tsx +37 -0
  320. package/src/radio-group.tsx +56 -0
  321. package/src/resizable.tsx +64 -0
  322. package/src/scroll-area.tsx +60 -0
  323. package/src/select.tsx +207 -0
  324. package/src/separator.tsx +38 -0
  325. package/src/sheet.tsx +165 -0
  326. package/src/skeleton.tsx +24 -0
  327. package/src/slider.tsx +35 -0
  328. package/src/sonner.tsx +43 -0
  329. package/src/switch.tsx +32 -0
  330. package/src/table.tsx +155 -0
  331. package/src/tabs.tsx +74 -0
  332. package/src/textarea.tsx +29 -0
  333. package/src/toggle-group.tsx +70 -0
  334. package/src/toggle.tsx +53 -0
  335. package/src/tooltip.tsx +73 -0
  336. package/src/{cva.ts → utils.ts} +5 -1
  337. package/tailwind.config.ts +39 -70
  338. package/dist/chunk-33V4YP7I.js +0 -2
  339. package/dist/chunk-33V4YP7I.js.map +0 -1
  340. package/dist/chunk-JVQ3OM5P.mjs +0 -2
  341. package/dist/chunk-JVQ3OM5P.mjs.map +0 -1
  342. package/dist/code.d.mts +0 -3
  343. package/dist/code.d.ts +0 -3
  344. package/dist/code.js +0 -2
  345. package/dist/code.js.map +0 -1
  346. package/dist/code.mjs +0 -2
  347. package/dist/code.mjs.map +0 -1
  348. package/dist/cva.js +0 -2
  349. package/dist/cva.mjs +0 -2
  350. package/src/code.tsx +0 -5
  351. /package/dist/{cva.js.map → dialog.js.map} +0 -0
  352. /package/dist/{cva.mjs.map → dialog.mjs.map} +0 -0
@@ -0,0 +1,203 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import { type DialogProps } from "@radix-ui/react-dialog";
5
+ import { MagnifyingGlassIcon } from "@radix-ui/react-icons";
6
+ import { Command as CommandPrimitive } from "cmdk";
7
+ import { cn } from "./utils";
8
+ import { Dialog, DialogContent } from "./dialog";
9
+
10
+ /* -----------------------------------------------------------------------------
11
+ * Component: Command
12
+ * -------------------------------------------------------------------------- */
13
+
14
+ const Command = React.forwardRef<
15
+ React.ElementRef<typeof CommandPrimitive>,
16
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive>
17
+ >(({ className, ...props }, ref) => (
18
+ <CommandPrimitive
19
+ ref={ref}
20
+ className={cn(
21
+ "bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md",
22
+ className,
23
+ )}
24
+ {...props}
25
+ />
26
+ ));
27
+ Command.displayName = CommandPrimitive.displayName;
28
+
29
+ /* -----------------------------------------------------------------------------
30
+ * Component: CommandDialog
31
+ * -------------------------------------------------------------------------- */
32
+
33
+ function CommandDialog({ children, ...props }: DialogProps): React.JSX.Element {
34
+ return (
35
+ <Dialog {...props}>
36
+ <DialogContent className="overflow-hidden p-0">
37
+ <Command className="[&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:size-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:size-5">
38
+ {children}
39
+ </Command>
40
+ </DialogContent>
41
+ </Dialog>
42
+ );
43
+ }
44
+
45
+ /* -----------------------------------------------------------------------------
46
+ * Component: CommandInput
47
+ * -------------------------------------------------------------------------- */
48
+
49
+ const CommandInput = React.forwardRef<
50
+ React.ElementRef<typeof CommandPrimitive.Input>,
51
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>
52
+ >(({ className, ...props }, ref) => (
53
+ <div className="flex items-center gap-2 border-b px-3" cmdk-input-wrapper="">
54
+ <MagnifyingGlassIcon className="size-4 shrink-0 opacity-50" />
55
+ <CommandPrimitive.Input
56
+ ref={ref}
57
+ className={cn(
58
+ "placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent text-sm focus:outline-none disabled:cursor-not-allowed disabled:opacity-50",
59
+ className,
60
+ )}
61
+ {...props}
62
+ />
63
+ </div>
64
+ ));
65
+ CommandInput.displayName = CommandPrimitive.Input.displayName;
66
+
67
+ /* -----------------------------------------------------------------------------
68
+ * Component: CommandList
69
+ * -------------------------------------------------------------------------- */
70
+
71
+ const CommandList = React.forwardRef<
72
+ React.ElementRef<typeof CommandPrimitive.List>,
73
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>
74
+ >(({ className, ...props }, ref) => (
75
+ <CommandPrimitive.List
76
+ ref={ref}
77
+ className={cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className)}
78
+ {...props}
79
+ />
80
+ ));
81
+ CommandList.displayName = CommandPrimitive.List.displayName;
82
+
83
+ /* -----------------------------------------------------------------------------
84
+ * Component: CommandEmpty
85
+ * -------------------------------------------------------------------------- */
86
+
87
+ const CommandEmpty = React.forwardRef<
88
+ React.ElementRef<typeof CommandPrimitive.Empty>,
89
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>
90
+ >((props, ref) => (
91
+ <CommandPrimitive.Empty
92
+ ref={ref}
93
+ className="py-6 text-center text-sm"
94
+ {...props}
95
+ />
96
+ ));
97
+ CommandEmpty.displayName = CommandPrimitive.Empty.displayName;
98
+
99
+ /* -----------------------------------------------------------------------------
100
+ * Component: CommandGroup
101
+ * -------------------------------------------------------------------------- */
102
+
103
+ const CommandGroup = React.forwardRef<
104
+ React.ElementRef<typeof CommandPrimitive.Group>,
105
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>
106
+ >(({ className, ...props }, ref) => (
107
+ <CommandPrimitive.Group
108
+ ref={ref}
109
+ className={cn(
110
+ "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",
111
+ className,
112
+ )}
113
+ {...props}
114
+ />
115
+ ));
116
+ CommandGroup.displayName = CommandPrimitive.Group.displayName;
117
+
118
+ /* -----------------------------------------------------------------------------
119
+ * Component: CommandSeparator
120
+ * -------------------------------------------------------------------------- */
121
+
122
+ const CommandSeparator = React.forwardRef<
123
+ React.ElementRef<typeof CommandPrimitive.Separator>,
124
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>
125
+ >(({ className, ...props }, ref) => (
126
+ <CommandPrimitive.Separator
127
+ ref={ref}
128
+ className={cn("bg-border -mx-1 h-px", className)}
129
+ {...props}
130
+ />
131
+ ));
132
+ CommandSeparator.displayName = CommandPrimitive.Separator.displayName;
133
+
134
+ /* -----------------------------------------------------------------------------
135
+ * Component: CommandItem
136
+ * -------------------------------------------------------------------------- */
137
+
138
+ const CommandItem = React.forwardRef<
139
+ React.ElementRef<typeof CommandPrimitive.Item>,
140
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>
141
+ >(({ className, ...props }, ref) => (
142
+ <CommandPrimitive.Item
143
+ ref={ref}
144
+ className={cn(
145
+ "aria-selected:bg-accent aria-selected:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm focus:outline-none aria-disabled:pointer-events-none aria-disabled:opacity-50",
146
+ className,
147
+ )}
148
+ {...props}
149
+ />
150
+ ));
151
+ CommandItem.displayName = CommandPrimitive.Item.displayName;
152
+
153
+ /* -----------------------------------------------------------------------------
154
+ * Component: CommandLoading
155
+ * -------------------------------------------------------------------------- */
156
+
157
+ const CommandLoading = React.forwardRef<
158
+ React.ElementRef<typeof CommandPrimitive.Loading>,
159
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.Loading>
160
+ >(({ className, ...props }, ref) => (
161
+ <CommandPrimitive.Loading
162
+ ref={ref}
163
+ className={cn("flex justify-center p-2", className)}
164
+ {...props}
165
+ />
166
+ ));
167
+ CommandLoading.displayName = CommandPrimitive.Loading.displayName;
168
+
169
+ /* -----------------------------------------------------------------------------
170
+ * Component: CommandShortcut
171
+ * -------------------------------------------------------------------------- */
172
+
173
+ function CommandShortcut({
174
+ className,
175
+ ...props
176
+ }: React.HTMLAttributes<HTMLSpanElement>): React.JSX.Element {
177
+ return (
178
+ <span
179
+ className={cn(
180
+ "text-muted-foreground ml-auto text-xs tracking-widest",
181
+ className,
182
+ )}
183
+ {...props}
184
+ />
185
+ );
186
+ }
187
+
188
+ /* -----------------------------------------------------------------------------
189
+ * Exports
190
+ * -------------------------------------------------------------------------- */
191
+
192
+ export {
193
+ Command,
194
+ CommandDialog,
195
+ CommandInput,
196
+ CommandList,
197
+ CommandEmpty,
198
+ CommandGroup,
199
+ CommandItem,
200
+ CommandLoading,
201
+ CommandShortcut,
202
+ CommandSeparator,
203
+ };
@@ -0,0 +1,278 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
5
+ import {
6
+ CheckIcon,
7
+ ChevronRightIcon,
8
+ DotFilledIcon,
9
+ } from "@radix-ui/react-icons";
10
+ import { cn } from "./utils";
11
+
12
+ /* -----------------------------------------------------------------------------
13
+ * Component: ContextMenu
14
+ * -------------------------------------------------------------------------- */
15
+
16
+ const ContextMenu = ContextMenuPrimitive.Root;
17
+
18
+ /* -----------------------------------------------------------------------------
19
+ * Component: ContextMenuTrigger
20
+ * -------------------------------------------------------------------------- */
21
+
22
+ const ContextMenuTrigger = ContextMenuPrimitive.Trigger;
23
+
24
+ /* -----------------------------------------------------------------------------
25
+ * Component: ContextMenuGroup
26
+ * -------------------------------------------------------------------------- */
27
+
28
+ const ContextMenuGroup = ContextMenuPrimitive.Group;
29
+
30
+ /* -----------------------------------------------------------------------------
31
+ * Component: ContextMenuSub
32
+ * -------------------------------------------------------------------------- */
33
+
34
+ const ContextMenuSub = ContextMenuPrimitive.Sub;
35
+
36
+ /* -----------------------------------------------------------------------------
37
+ * Component: ContextMenuRadioGroup
38
+ * -------------------------------------------------------------------------- */
39
+
40
+ const ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;
41
+
42
+ /* -----------------------------------------------------------------------------
43
+ * Component: ContextMenuSubTrigger
44
+ * -------------------------------------------------------------------------- */
45
+
46
+ const ContextMenuSubTrigger = React.forwardRef<
47
+ React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>,
48
+ ContextMenuPrimitive.ContextMenuSubTriggerProps & {
49
+ inset?: boolean;
50
+ }
51
+ >(({ className, inset, children, ...props }, ref) => (
52
+ <ContextMenuPrimitive.SubTrigger
53
+ ref={ref}
54
+ className={cn(
55
+ "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm focus:outline-none",
56
+ inset && "pl-8",
57
+ className,
58
+ )}
59
+ {...props}
60
+ >
61
+ {children}
62
+ <ChevronRightIcon className="ml-auto size-4" />
63
+ </ContextMenuPrimitive.SubTrigger>
64
+ ));
65
+ ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName;
66
+
67
+ /* -----------------------------------------------------------------------------
68
+ * Component: ContextMenuSubContent
69
+ * -------------------------------------------------------------------------- */
70
+
71
+ const ContextMenuSubContent = React.forwardRef<
72
+ React.ElementRef<typeof ContextMenuPrimitive.SubContent>,
73
+ ContextMenuPrimitive.ContextMenuSubContentProps
74
+ >(({ className, ...props }, ref) => (
75
+ <ContextMenuPrimitive.Portal>
76
+ <ContextMenuPrimitive.SubContent
77
+ ref={ref}
78
+ className={cn(
79
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:data-[side=top]:slide-in-from-bottom-2 data-[state=open]:data-[side=right]:slide-in-from-left-2 data-[state=open]:data-[side=bottom]:slide-in-from-top-2 data-[state=open]:data-[side=left]:slide-in-from-right-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:data-[side=top]:slide-out-to-bottom-2 data-[state=closed]:data-[side=right]:slide-out-to-left-2 data-[state=closed]:data-[side=bottom]:slide-out-to-top-2 data-[state=closed]:data-[side=left]:slide-out-to-right-2 z-50 min-w-[8rem] rounded-md border p-1 shadow-md focus:outline-none",
80
+ className,
81
+ )}
82
+ {...props}
83
+ />
84
+ </ContextMenuPrimitive.Portal>
85
+ ));
86
+ ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName;
87
+
88
+ /* -----------------------------------------------------------------------------
89
+ * Component: ContextMenuContent
90
+ * -------------------------------------------------------------------------- */
91
+
92
+ const ContextMenuContent = React.forwardRef<
93
+ React.ElementRef<typeof ContextMenuPrimitive.Content>,
94
+ ContextMenuPrimitive.ContextMenuContentProps
95
+ >(({ className, ...props }, ref) => (
96
+ <ContextMenuPrimitive.Portal>
97
+ <ContextMenuPrimitive.Content
98
+ ref={ref}
99
+ className={cn(
100
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:data-[side=top]:slide-in-from-bottom-2 data-[state=open]:data-[side=right]:slide-in-from-left-2 data-[state=open]:data-[side=bottom]:slide-in-from-top-2 data-[state=open]:data-[side=left]:slide-in-from-right-2 z-50 min-w-[8rem] rounded-md border p-1 shadow-md focus:outline-none",
101
+ className,
102
+ )}
103
+ {...props}
104
+ />
105
+ </ContextMenuPrimitive.Portal>
106
+ ));
107
+ ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName;
108
+
109
+ /* -----------------------------------------------------------------------------
110
+ * Component: ContextMenuItem
111
+ * -------------------------------------------------------------------------- */
112
+
113
+ const ContextMenuItem = React.forwardRef<
114
+ React.ElementRef<typeof ContextMenuPrimitive.Item>,
115
+ ContextMenuPrimitive.ContextMenuItemProps & {
116
+ inset?: boolean;
117
+ }
118
+ >(({ className, inset, ...props }, ref) => (
119
+ <ContextMenuPrimitive.Item
120
+ ref={ref}
121
+ className={cn(
122
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm focus:outline-none aria-disabled:pointer-events-none aria-disabled:opacity-50",
123
+ inset && "pl-8",
124
+ className,
125
+ )}
126
+ {...props}
127
+ />
128
+ ));
129
+ ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName;
130
+
131
+ /* -----------------------------------------------------------------------------
132
+ * Component: ContextMenuCheckboxItem
133
+ * -------------------------------------------------------------------------- */
134
+
135
+ const ContextMenuCheckboxItem = React.forwardRef<
136
+ React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>,
137
+ ContextMenuPrimitive.ContextMenuCheckboxItemProps
138
+ >(({ className, children, checked, ...props }, ref) => (
139
+ <ContextMenuPrimitive.CheckboxItem
140
+ ref={ref}
141
+ className={cn(
142
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm focus:outline-none aria-disabled:pointer-events-none aria-disabled:opacity-50",
143
+ className,
144
+ )}
145
+ checked={checked}
146
+ {...props}
147
+ >
148
+ <span className="absolute left-2 flex size-3.5 items-center justify-center">
149
+ <ContextMenuPrimitive.ItemIndicator>
150
+ <CheckIcon className="size-4" />
151
+ </ContextMenuPrimitive.ItemIndicator>
152
+ </span>
153
+ {children}
154
+ </ContextMenuPrimitive.CheckboxItem>
155
+ ));
156
+ ContextMenuCheckboxItem.displayName =
157
+ ContextMenuPrimitive.CheckboxItem.displayName;
158
+
159
+ /* -----------------------------------------------------------------------------
160
+ * Component: ContextMenuRadioItem
161
+ * -------------------------------------------------------------------------- */
162
+
163
+ const ContextMenuRadioItem = React.forwardRef<
164
+ React.ElementRef<typeof ContextMenuPrimitive.RadioItem>,
165
+ ContextMenuPrimitive.ContextMenuRadioItemProps
166
+ >(({ className, children, ...props }, ref) => (
167
+ <ContextMenuPrimitive.RadioItem
168
+ ref={ref}
169
+ className={cn(
170
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm focus:outline-none aria-disabled:pointer-events-none aria-disabled:opacity-50",
171
+ className,
172
+ )}
173
+ {...props}
174
+ >
175
+ <span className="absolute left-2 flex size-3.5 items-center justify-center">
176
+ <ContextMenuPrimitive.ItemIndicator>
177
+ <DotFilledIcon className="size-4 fill-current" />
178
+ </ContextMenuPrimitive.ItemIndicator>
179
+ </span>
180
+ {children}
181
+ </ContextMenuPrimitive.RadioItem>
182
+ ));
183
+ ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName;
184
+
185
+ /* -----------------------------------------------------------------------------
186
+ * Component: ContextMenuLabel
187
+ * -------------------------------------------------------------------------- */
188
+
189
+ const ContextMenuLabel = React.forwardRef<
190
+ React.ElementRef<typeof ContextMenuPrimitive.Label>,
191
+ ContextMenuPrimitive.ContextMenuLabelProps & {
192
+ inset?: boolean;
193
+ }
194
+ >(({ className, inset, ...props }, ref) => (
195
+ <ContextMenuPrimitive.Label
196
+ ref={ref}
197
+ className={cn(
198
+ "text-foreground px-2 py-1.5 text-sm font-semibold",
199
+ inset && "pl-8",
200
+ className,
201
+ )}
202
+ {...props}
203
+ />
204
+ ));
205
+ ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName;
206
+
207
+ /* -----------------------------------------------------------------------------
208
+ * Component: ContextMenuSeparator
209
+ * -------------------------------------------------------------------------- */
210
+
211
+ const ContextMenuSeparator = React.forwardRef<
212
+ React.ElementRef<typeof ContextMenuPrimitive.Separator>,
213
+ ContextMenuPrimitive.ContextMenuSeparatorProps
214
+ >(({ className, ...props }, ref) => (
215
+ <ContextMenuPrimitive.Separator
216
+ ref={ref}
217
+ className={cn("bg-border -mx-1 my-1 h-px", className)}
218
+ {...props}
219
+ />
220
+ ));
221
+ ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName;
222
+
223
+ /* -----------------------------------------------------------------------------
224
+ * Component: ContextMenuShortcut
225
+ * -------------------------------------------------------------------------- */
226
+
227
+ function ContextMenuShortcut({
228
+ className,
229
+ ...props
230
+ }: React.HTMLAttributes<HTMLSpanElement>): React.JSX.Element {
231
+ return (
232
+ <span
233
+ className={cn(
234
+ "text-muted-foreground ml-auto text-xs tracking-widest",
235
+ className,
236
+ )}
237
+ {...props}
238
+ />
239
+ );
240
+ }
241
+
242
+ /* -----------------------------------------------------------------------------
243
+ * Component: ContextMenuArrow
244
+ * -------------------------------------------------------------------------- */
245
+
246
+ const ContextMenuArrow = React.forwardRef<
247
+ React.ElementRef<typeof ContextMenuPrimitive.Arrow>,
248
+ ContextMenuPrimitive.ContextMenuArrowProps
249
+ >(({ className, ...props }, ref) => (
250
+ <ContextMenuPrimitive.Arrow
251
+ ref={ref}
252
+ className={cn("fill-border", className)}
253
+ {...props}
254
+ />
255
+ ));
256
+ ContextMenuArrow.displayName = ContextMenuPrimitive.Arrow.displayName;
257
+
258
+ /* -----------------------------------------------------------------------------
259
+ * Exports
260
+ * -------------------------------------------------------------------------- */
261
+
262
+ export {
263
+ ContextMenu,
264
+ ContextMenuTrigger,
265
+ ContextMenuContent,
266
+ ContextMenuItem,
267
+ ContextMenuCheckboxItem,
268
+ ContextMenuRadioItem,
269
+ ContextMenuLabel,
270
+ ContextMenuSeparator,
271
+ ContextMenuShortcut,
272
+ ContextMenuGroup,
273
+ ContextMenuSub,
274
+ ContextMenuSubContent,
275
+ ContextMenuSubTrigger,
276
+ ContextMenuRadioGroup,
277
+ ContextMenuArrow,
278
+ };
package/src/dialog.tsx ADDED
@@ -0,0 +1,148 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
5
+ import { Cross2Icon } from "@radix-ui/react-icons";
6
+ import { cn } from "./utils";
7
+
8
+ /* -----------------------------------------------------------------------------
9
+ * Component: Dialog
10
+ * -------------------------------------------------------------------------- */
11
+
12
+ const Dialog = DialogPrimitive.Root;
13
+
14
+ /* -----------------------------------------------------------------------------
15
+ * Component: DialogTrigger
16
+ * -------------------------------------------------------------------------- */
17
+
18
+ const DialogTrigger = DialogPrimitive.Trigger;
19
+
20
+ /* -----------------------------------------------------------------------------
21
+ * Component: DialogClose
22
+ * -------------------------------------------------------------------------- */
23
+
24
+ const DialogClose = DialogPrimitive.Close;
25
+
26
+ /* -----------------------------------------------------------------------------
27
+ * Component: DialogContent
28
+ * -------------------------------------------------------------------------- */
29
+
30
+ const DialogContent = React.forwardRef<
31
+ React.ElementRef<typeof DialogPrimitive.Content>,
32
+ DialogPrimitive.DialogContentProps
33
+ >(({ className, children, ...props }, ref) => (
34
+ <DialogPrimitive.Portal>
35
+ <DialogPrimitive.Overlay
36
+ className={cn(
37
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 fixed inset-0 z-50 bg-black/80",
38
+ )}
39
+ />
40
+ <DialogPrimitive.Content
41
+ ref={ref}
42
+ className={cn(
43
+ "bg-background data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-1/3 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-1/3 fixed left-1/2 top-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 border p-6 shadow-lg duration-200 focus:outline-none sm:rounded-lg",
44
+ className,
45
+ )}
46
+ {...props}
47
+ >
48
+ {children}
49
+ <DialogPrimitive.Close
50
+ className={cn(
51
+ "focus:ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:pointer-events-none",
52
+ )}
53
+ >
54
+ <Cross2Icon className="size-4" />
55
+ <span className="sr-only">Close</span>
56
+ </DialogPrimitive.Close>
57
+ </DialogPrimitive.Content>
58
+ </DialogPrimitive.Portal>
59
+ ));
60
+ DialogContent.displayName = DialogPrimitive.Content.displayName;
61
+
62
+ /* -----------------------------------------------------------------------------
63
+ * Component: DialogHeader
64
+ * -------------------------------------------------------------------------- */
65
+
66
+ function DialogHeader({
67
+ className,
68
+ ...props
69
+ }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
70
+ return (
71
+ <div
72
+ className={cn(
73
+ "flex flex-col space-y-1.5 text-center sm:text-left",
74
+ className,
75
+ )}
76
+ {...props}
77
+ />
78
+ );
79
+ }
80
+
81
+ /* -----------------------------------------------------------------------------
82
+ * Component: DialogFooter
83
+ * -------------------------------------------------------------------------- */
84
+
85
+ function DialogFooter({
86
+ className,
87
+ ...props
88
+ }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
89
+ return (
90
+ <div
91
+ className={cn(
92
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
93
+ className,
94
+ )}
95
+ {...props}
96
+ />
97
+ );
98
+ }
99
+
100
+ /* -----------------------------------------------------------------------------
101
+ * Component: DialogTitle
102
+ * -------------------------------------------------------------------------- */
103
+
104
+ const DialogTitle = React.forwardRef<
105
+ React.ElementRef<typeof DialogPrimitive.Title>,
106
+ DialogPrimitive.DialogTitleProps
107
+ >(({ className, ...props }, ref) => (
108
+ <DialogPrimitive.Title
109
+ ref={ref}
110
+ className={cn(
111
+ "text-lg font-semibold leading-none tracking-tight",
112
+ className,
113
+ )}
114
+ {...props}
115
+ />
116
+ ));
117
+ DialogTitle.displayName = DialogPrimitive.Title.displayName;
118
+
119
+ /* -----------------------------------------------------------------------------
120
+ * Component: DialogDescription
121
+ * -------------------------------------------------------------------------- */
122
+
123
+ const DialogDescription = React.forwardRef<
124
+ React.ElementRef<typeof DialogPrimitive.Description>,
125
+ DialogPrimitive.DialogDescriptionProps
126
+ >(({ className, ...props }, ref) => (
127
+ <DialogPrimitive.Description
128
+ ref={ref}
129
+ className={cn("text-muted-foreground text-sm", className)}
130
+ {...props}
131
+ />
132
+ ));
133
+ DialogDescription.displayName = DialogPrimitive.Description.displayName;
134
+
135
+ /* -----------------------------------------------------------------------------
136
+ * Exports
137
+ * -------------------------------------------------------------------------- */
138
+
139
+ export {
140
+ Dialog,
141
+ DialogTrigger,
142
+ DialogClose,
143
+ DialogContent,
144
+ DialogHeader,
145
+ DialogFooter,
146
+ DialogTitle,
147
+ DialogDescription,
148
+ };