@codefast/ui 0.0.2 → 0.0.4

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