@codefast/ui 0.3.16-canary.2 → 0.4.0-canary.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 (289) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/README.md +28 -17
  3. package/dist/components/accordion.d.mts +7 -22
  4. package/dist/components/accordion.mjs +26 -29
  5. package/dist/components/alert-dialog.d.mts +27 -26
  6. package/dist/components/alert-dialog.mjs +53 -45
  7. package/dist/components/alert.d.mts +14 -14
  8. package/dist/components/alert.mjs +17 -28
  9. package/dist/components/aspect-ratio.d.mts +2 -2
  10. package/dist/components/aspect-ratio.mjs +2 -3
  11. package/dist/components/avatar.d.mts +41 -5
  12. package/dist/components/avatar.mjs +40 -10
  13. package/dist/components/badge.d.mts +3 -15
  14. package/dist/components/badge.mjs +6 -48
  15. package/dist/components/breadcrumb.d.mts +1 -0
  16. package/dist/components/breadcrumb.mjs +11 -10
  17. package/dist/components/button-group.d.mts +3 -13
  18. package/dist/components/button-group.mjs +9 -31
  19. package/dist/components/button.d.mts +3 -26
  20. package/dist/components/button.mjs +9 -79
  21. package/dist/components/calendar.d.mts +6 -2
  22. package/dist/components/calendar.mjs +41 -44
  23. package/dist/components/card.d.mts +4 -2
  24. package/dist/components/card.mjs +9 -9
  25. package/dist/components/carousel.d.mts +16 -5
  26. package/dist/components/carousel.mjs +24 -11
  27. package/dist/components/chart.d.mts +9 -6
  28. package/dist/components/chart.mjs +21 -15
  29. package/dist/components/checkbox-cards.mjs +4 -4
  30. package/dist/components/checkbox-group.mjs +3 -4
  31. package/dist/components/checkbox.d.mts +2 -2
  32. package/dist/components/checkbox.mjs +6 -7
  33. package/dist/components/collapsible.d.mts +4 -4
  34. package/dist/components/collapsible.mjs +4 -5
  35. package/dist/components/command.d.mts +11 -1
  36. package/dist/components/command.mjs +35 -32
  37. package/dist/components/context-menu.d.mts +22 -15
  38. package/dist/components/context-menu.mjs +44 -39
  39. package/dist/components/dialog.d.mts +19 -23
  40. package/dist/components/dialog.mjs +48 -47
  41. package/dist/components/direction.d.mts +24 -0
  42. package/dist/components/direction.mjs +18 -0
  43. package/dist/components/drawer.d.mts +3 -21
  44. package/dist/components/drawer.mjs +19 -27
  45. package/dist/components/dropdown-menu.d.mts +22 -15
  46. package/dist/components/dropdown-menu.mjs +41 -37
  47. package/dist/components/empty.d.mts +3 -13
  48. package/dist/components/empty.mjs +8 -23
  49. package/dist/components/field.d.mts +3 -14
  50. package/dist/components/field.mjs +14 -44
  51. package/dist/components/form.d.mts +7 -10
  52. package/dist/components/form.mjs +6 -7
  53. package/dist/components/hover-card.d.mts +5 -5
  54. package/dist/components/hover-card.mjs +14 -12
  55. package/dist/components/input-group.d.mts +4 -31
  56. package/dist/components/input-group.mjs +14 -96
  57. package/dist/components/input-number.d.mts +3 -1
  58. package/dist/components/input-number.mjs +50 -28
  59. package/dist/components/input-otp.mjs +9 -7
  60. package/dist/components/input-password.mjs +1 -4
  61. package/dist/components/input-search.mjs +3 -5
  62. package/dist/components/input.mjs +1 -2
  63. package/dist/components/item.d.mts +4 -29
  64. package/dist/components/item.mjs +12 -65
  65. package/dist/components/kbd.mjs +1 -1
  66. package/dist/components/label.d.mts +2 -2
  67. package/dist/components/label.mjs +3 -4
  68. package/dist/components/menubar.d.mts +22 -16
  69. package/dist/components/menubar.mjs +54 -47
  70. package/dist/components/native-select.d.mts +5 -1
  71. package/dist/components/native-select.mjs +9 -6
  72. package/dist/components/navigation-menu.d.mts +30 -13
  73. package/dist/components/navigation-menu.mjs +35 -32
  74. package/dist/components/pagination.d.mts +7 -1
  75. package/dist/components/pagination.mjs +27 -12
  76. package/dist/components/popover.d.mts +40 -7
  77. package/dist/components/popover.mjs +46 -14
  78. package/dist/components/progress-circle.d.mts +3 -47
  79. package/dist/components/progress-circle.mjs +2 -48
  80. package/dist/components/progress.d.mts +2 -2
  81. package/dist/components/progress.mjs +5 -6
  82. package/dist/components/radio-cards.d.mts +3 -3
  83. package/dist/components/radio-cards.mjs +11 -11
  84. package/dist/components/radio-group.d.mts +3 -3
  85. package/dist/components/radio-group.mjs +9 -9
  86. package/dist/components/radio.mjs +2 -3
  87. package/dist/components/resizable.mjs +3 -8
  88. package/dist/components/scroll-area.d.mts +8 -24
  89. package/dist/components/scroll-area.mjs +16 -70
  90. package/dist/components/select.d.mts +14 -14
  91. package/dist/components/select.mjs +47 -47
  92. package/dist/components/separator.d.mts +4 -19
  93. package/dist/components/separator.mjs +6 -27
  94. package/dist/components/sheet.d.mts +18 -31
  95. package/dist/components/sheet.mjs +46 -87
  96. package/dist/components/sidebar.d.mts +3 -19
  97. package/dist/components/sidebar.mjs +48 -84
  98. package/dist/components/skeleton.mjs +1 -1
  99. package/dist/components/slider.d.mts +2 -2
  100. package/dist/components/slider.mjs +9 -11
  101. package/dist/components/sonner.mjs +11 -3
  102. package/dist/components/spinner.mjs +6 -7
  103. package/dist/components/switch.d.mts +5 -2
  104. package/dist/components/switch.mjs +7 -7
  105. package/dist/components/table.mjs +10 -10
  106. package/dist/components/tabs.d.mts +8 -5
  107. package/dist/components/tabs.mjs +18 -12
  108. package/dist/components/textarea.mjs +1 -1
  109. package/dist/components/toggle-group.d.mts +11 -7
  110. package/dist/components/toggle-group.mjs +20 -21
  111. package/dist/components/toggle.d.mts +4 -24
  112. package/dist/components/toggle.mjs +6 -45
  113. package/dist/components/tooltip.d.mts +7 -6
  114. package/dist/components/tooltip.mjs +19 -17
  115. package/dist/hooks/use-animated-value.mjs +0 -1
  116. package/dist/hooks/use-copy-to-clipboard.mjs +0 -1
  117. package/dist/hooks/use-is-mobile.mjs +0 -1
  118. package/dist/hooks/use-media-query.mjs +0 -1
  119. package/dist/hooks/use-mutation-observer.mjs +0 -1
  120. package/dist/hooks/use-pagination.mjs +0 -1
  121. package/dist/index.d.mts +38 -21
  122. package/dist/index.mjs +40 -23
  123. package/dist/lib/utils.d.mts +1 -12
  124. package/dist/lib/utils.mjs +1 -9
  125. package/dist/primitives/checkbox-group.d.mts +9 -11
  126. package/dist/primitives/checkbox-group.mjs +14 -19
  127. package/dist/primitives/input-number.d.mts +3 -4
  128. package/dist/primitives/input-number.mjs +3 -5
  129. package/dist/primitives/input.d.mts +4 -5
  130. package/dist/primitives/input.mjs +2 -3
  131. package/dist/primitives/progress-circle.d.mts +3 -4
  132. package/dist/primitives/progress-circle.mjs +2 -3
  133. package/dist/variants/alert.d.mts +18 -0
  134. package/dist/variants/alert.mjs +15 -0
  135. package/dist/variants/badge.d.mts +22 -0
  136. package/dist/variants/badge.mjs +19 -0
  137. package/dist/variants/button-group.d.mts +18 -0
  138. package/dist/variants/button-group.mjs +15 -0
  139. package/dist/variants/button.d.mts +32 -0
  140. package/dist/variants/button.mjs +34 -0
  141. package/dist/variants/empty.d.mts +18 -0
  142. package/dist/variants/empty.mjs +15 -0
  143. package/dist/variants/field.d.mts +19 -0
  144. package/dist/variants/field.mjs +16 -0
  145. package/dist/variants/input-group.d.mts +43 -0
  146. package/dist/variants/input-group.mjs +34 -0
  147. package/dist/variants/input-number.d.mts +45 -0
  148. package/dist/variants/input-number.mjs +40 -0
  149. package/dist/variants/item.d.mts +38 -0
  150. package/dist/variants/item.mjs +38 -0
  151. package/dist/variants/navigation-menu.d.mts +13 -0
  152. package/dist/variants/navigation-menu.mjs +8 -0
  153. package/dist/variants/progress-circle.d.mts +52 -0
  154. package/dist/variants/progress-circle.mjs +45 -0
  155. package/dist/variants/scroll-area.d.mts +24 -0
  156. package/dist/variants/scroll-area.mjs +58 -0
  157. package/dist/variants/separator.d.mts +23 -0
  158. package/dist/variants/separator.mjs +25 -0
  159. package/dist/variants/sheet.d.mts +20 -0
  160. package/dist/variants/sheet.mjs +17 -0
  161. package/dist/variants/sidebar.d.mts +23 -0
  162. package/dist/variants/sidebar.mjs +25 -0
  163. package/dist/variants/tabs.d.mts +18 -0
  164. package/dist/variants/tabs.mjs +15 -0
  165. package/dist/variants/toggle.d.mts +23 -0
  166. package/dist/variants/toggle.mjs +25 -0
  167. package/package.json +186 -55
  168. package/src/components/accordion.tsx +114 -0
  169. package/src/components/alert-dialog.tsx +298 -0
  170. package/src/components/alert.tsx +94 -0
  171. package/src/components/aspect-ratio.tsx +25 -0
  172. package/src/components/avatar.tsx +171 -0
  173. package/src/components/badge.tsx +35 -0
  174. package/src/components/breadcrumb.tsx +191 -0
  175. package/src/components/button-group.tsx +97 -0
  176. package/src/components/button.tsx +55 -0
  177. package/src/components/calendar.tsx +222 -0
  178. package/src/components/card.tsx +169 -0
  179. package/src/components/carousel.tsx +349 -0
  180. package/src/components/chart.tsx +536 -0
  181. package/src/components/checkbox-cards.tsx +72 -0
  182. package/src/components/checkbox-group.tsx +60 -0
  183. package/src/components/checkbox.tsx +44 -0
  184. package/src/components/collapsible.tsx +57 -0
  185. package/src/components/command.tsx +298 -0
  186. package/src/components/context-menu.tsx +410 -0
  187. package/src/components/dialog.tsx +243 -0
  188. package/src/components/direction.tsx +32 -0
  189. package/src/components/drawer.tsx +209 -0
  190. package/src/components/dropdown-menu.tsx +419 -0
  191. package/src/components/empty.tsx +155 -0
  192. package/src/components/field.tsx +329 -0
  193. package/src/components/form.tsx +258 -0
  194. package/src/components/hover-card.tsx +93 -0
  195. package/src/components/input-group.tsx +185 -0
  196. package/src/components/input-number.tsx +141 -0
  197. package/src/components/input-otp.tsx +132 -0
  198. package/src/components/input-password.tsx +50 -0
  199. package/src/components/input-search.tsx +81 -0
  200. package/src/components/input.tsx +36 -0
  201. package/src/components/item.tsx +266 -0
  202. package/src/components/kbd.tsx +47 -0
  203. package/src/components/label.tsx +36 -0
  204. package/src/components/menubar.tsx +440 -0
  205. package/src/components/native-select.tsx +87 -0
  206. package/src/components/navigation-menu.tsx +235 -0
  207. package/src/components/pagination.tsx +198 -0
  208. package/src/components/popover.tsx +170 -0
  209. package/src/components/progress-circle.tsx +185 -0
  210. package/src/components/progress.tsx +41 -0
  211. package/src/components/radio-cards.tsx +66 -0
  212. package/src/components/radio-group.tsx +59 -0
  213. package/src/components/radio.tsx +40 -0
  214. package/src/components/resizable.tsx +78 -0
  215. package/src/components/scroll-area.tsx +95 -0
  216. package/src/components/select.tsx +296 -0
  217. package/src/components/separator.tsx +60 -0
  218. package/src/components/sheet.tsx +241 -0
  219. package/src/components/sidebar.tsx +926 -0
  220. package/src/components/skeleton.tsx +35 -0
  221. package/src/components/slider.tsx +66 -0
  222. package/src/components/sonner.tsx +57 -0
  223. package/src/components/spinner.tsx +66 -0
  224. package/src/components/switch.tsx +44 -0
  225. package/src/components/table.tsx +183 -0
  226. package/src/components/tabs.tsx +110 -0
  227. package/src/components/textarea.tsx +35 -0
  228. package/src/components/toggle-group.tsx +137 -0
  229. package/src/components/toggle.tsx +30 -0
  230. package/src/components/tooltip.tsx +115 -0
  231. package/src/css/foundation/base.css +50 -0
  232. package/src/css/foundation/motion.css +36 -0
  233. package/src/css/foundation/source.css +3 -0
  234. package/src/css/foundation/tokens.css +71 -0
  235. package/src/css/foundation/variants.css +113 -0
  236. package/src/css/preset.css +5 -195
  237. package/src/css/style.css +1 -1
  238. package/src/css/{amber.css → themes/amber.css} +59 -22
  239. package/src/css/{blue.css → themes/blue.css} +59 -22
  240. package/src/css/{cyan.css → themes/cyan.css} +59 -22
  241. package/src/css/{emerald.css → themes/emerald.css} +59 -22
  242. package/src/css/{fuchsia.css → themes/fuchsia.css} +59 -22
  243. package/src/css/{gray.css → themes/gray.css} +59 -22
  244. package/src/css/{green.css → themes/green.css} +59 -22
  245. package/src/css/{indigo.css → themes/indigo.css} +59 -22
  246. package/src/css/{lime.css → themes/lime.css} +59 -22
  247. package/src/css/{neutral.css → themes/neutral.css} +59 -22
  248. package/src/css/{orange.css → themes/orange.css} +59 -22
  249. package/src/css/{pink.css → themes/pink.css} +59 -22
  250. package/src/css/{purple.css → themes/purple.css} +59 -22
  251. package/src/css/{red.css → themes/red.css} +59 -22
  252. package/src/css/{rose.css → themes/rose.css} +59 -22
  253. package/src/css/{sky.css → themes/sky.css} +59 -22
  254. package/src/css/{slate.css → themes/slate.css} +59 -22
  255. package/src/css/{stone.css → themes/stone.css} +59 -22
  256. package/src/css/{teal.css → themes/teal.css} +59 -22
  257. package/src/css/{violet.css → themes/violet.css} +59 -22
  258. package/src/css/{yellow.css → themes/yellow.css} +59 -22
  259. package/src/css/{zinc.css → themes/zinc.css} +59 -22
  260. package/src/hooks/use-animated-value.ts +91 -0
  261. package/src/hooks/use-copy-to-clipboard.ts +58 -0
  262. package/src/hooks/use-is-mobile.ts +25 -0
  263. package/src/hooks/use-media-query.ts +69 -0
  264. package/src/hooks/use-mutation-observer.ts +51 -0
  265. package/src/hooks/use-pagination.ts +164 -0
  266. package/src/index.ts +679 -0
  267. package/src/lib/utils.ts +5 -0
  268. package/src/primitives/checkbox-group.tsx +346 -0
  269. package/src/primitives/input-number.tsx +967 -0
  270. package/src/primitives/input.tsx +227 -0
  271. package/src/primitives/progress-circle.tsx +507 -0
  272. package/src/variants/alert.ts +34 -0
  273. package/src/variants/badge.ts +39 -0
  274. package/src/variants/button-group.ts +36 -0
  275. package/src/variants/button.ts +56 -0
  276. package/src/variants/empty.ts +34 -0
  277. package/src/variants/field.ts +37 -0
  278. package/src/variants/input-group.ts +80 -0
  279. package/src/variants/input-number.ts +65 -0
  280. package/src/variants/item.ts +68 -0
  281. package/src/variants/navigation-menu.ts +25 -0
  282. package/src/variants/progress-circle.ts +46 -0
  283. package/src/variants/scroll-area.ts +73 -0
  284. package/src/variants/separator.ts +40 -0
  285. package/src/variants/sheet.ts +37 -0
  286. package/src/variants/sidebar.ts +41 -0
  287. package/src/variants/tabs.ts +34 -0
  288. package/src/variants/toggle.ts +40 -0
  289. package/dist/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/clsx.d.mts +0 -6
@@ -0,0 +1,209 @@
1
+ import type { ComponentProps, JSX } from "react";
2
+ import { Drawer as DrawerPrimitive } from "vaul";
3
+
4
+ import type { VariantProps } from "#/lib/utils";
5
+ import { cn } from "#/lib/utils";
6
+ import { buttonVariants } from "#/variants/button";
7
+
8
+ /* -----------------------------------------------------------------------------
9
+ * Component: Drawer
10
+ * -------------------------------------------------------------------------- */
11
+
12
+ /**
13
+ * @since 0.3.16-canary.0
14
+ */
15
+ type DrawerProps = ComponentProps<typeof DrawerPrimitive.Root>;
16
+
17
+ /**
18
+ * @since 0.3.16-canary.0
19
+ */
20
+ function Drawer({ shouldScaleBackground = true, ...props }: DrawerProps): JSX.Element {
21
+ return <DrawerPrimitive.Root data-slot="drawer" shouldScaleBackground={shouldScaleBackground} {...props} />;
22
+ }
23
+
24
+ /* -----------------------------------------------------------------------------
25
+ * Component: DrawerTrigger
26
+ * -------------------------------------------------------------------------- */
27
+
28
+ /**
29
+ * @since 0.3.16-canary.0
30
+ */
31
+ type DrawerTriggerProps = ComponentProps<typeof DrawerPrimitive.Trigger>;
32
+
33
+ /**
34
+ * @since 0.3.16-canary.0
35
+ */
36
+ function DrawerTrigger({ ...props }: DrawerTriggerProps): JSX.Element {
37
+ return <DrawerPrimitive.Trigger data-slot="drawer-trigger" {...props} />;
38
+ }
39
+
40
+ /* -----------------------------------------------------------------------------
41
+ * Component: DrawerContent
42
+ * -------------------------------------------------------------------------- */
43
+
44
+ /**
45
+ * @since 0.3.16-canary.0
46
+ */
47
+ type DrawerContentProps = ComponentProps<typeof DrawerPrimitive.Content>;
48
+
49
+ /**
50
+ * @since 0.3.16-canary.0
51
+ */
52
+ function DrawerContent({ children, className, ...props }: DrawerContentProps): JSX.Element {
53
+ return (
54
+ <DrawerPrimitive.Portal data-slot="drawer-portal">
55
+ <DrawerPrimitive.Overlay
56
+ className={
57
+ "fixed inset-0 z-50 bg-black/10 ease-gentle supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:animation-duration-panel-in data-open:fade-in-0 data-closed:animate-out data-closed:ease-exit data-closed:animation-duration-panel-out data-closed:fade-out-0"
58
+ }
59
+ data-slot="drawer-overlay"
60
+ />
61
+ <DrawerPrimitive.Content
62
+ className={cn(
63
+ "group/drawer-content fixed z-50 flex h-auto flex-col bg-popover text-sm text-popover-foreground data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm",
64
+ className,
65
+ )}
66
+ data-slot="drawer-content"
67
+ {...props}
68
+ >
69
+ <div className="mx-auto mt-4 hidden h-1.5 w-25 shrink-0 rounded-full bg-muted group-data-[vaul-drawer-direction=bottom]/drawer-content:block" />
70
+ {children}
71
+ </DrawerPrimitive.Content>
72
+ </DrawerPrimitive.Portal>
73
+ );
74
+ }
75
+
76
+ /* -----------------------------------------------------------------------------
77
+ * Component: DrawerHeader
78
+ * -------------------------------------------------------------------------- */
79
+
80
+ /**
81
+ * @since 0.3.16-canary.0
82
+ */
83
+ type DrawerHeaderProps = ComponentProps<"div">;
84
+
85
+ /**
86
+ * @since 0.3.16-canary.0
87
+ */
88
+ function DrawerHeader({ className, ...props }: DrawerHeaderProps): JSX.Element {
89
+ return (
90
+ <div
91
+ className={cn(
92
+ "flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left",
93
+ className,
94
+ )}
95
+ data-slot="drawer-header"
96
+ {...props}
97
+ />
98
+ );
99
+ }
100
+
101
+ /* -----------------------------------------------------------------------------
102
+ * Component: DrawerFooter
103
+ * -------------------------------------------------------------------------- */
104
+
105
+ /**
106
+ * @since 0.3.16-canary.0
107
+ */
108
+ type DrawerFooterProps = ComponentProps<"div">;
109
+
110
+ /**
111
+ * @since 0.3.16-canary.0
112
+ */
113
+ function DrawerFooter({ className, ...props }: DrawerFooterProps): JSX.Element {
114
+ return <div className={cn("mt-auto flex flex-col gap-2 p-4", className)} data-slot="drawer-footer" {...props} />;
115
+ }
116
+
117
+ /* -----------------------------------------------------------------------------
118
+ * Component: DrawerTitle
119
+ * -------------------------------------------------------------------------- */
120
+
121
+ /**
122
+ * @since 0.3.16-canary.0
123
+ */
124
+ type DrawerTitleProps = ComponentProps<typeof DrawerPrimitive.Title>;
125
+
126
+ /**
127
+ * @since 0.3.16-canary.0
128
+ */
129
+ function DrawerTitle({ className, ...props }: DrawerTitleProps): JSX.Element {
130
+ return (
131
+ <DrawerPrimitive.Title
132
+ className={cn("font-heading font-medium text-foreground", className)}
133
+ data-slot="drawer-title"
134
+ {...props}
135
+ />
136
+ );
137
+ }
138
+
139
+ /* -----------------------------------------------------------------------------
140
+ * Component: DrawerDescription
141
+ * -------------------------------------------------------------------------- */
142
+
143
+ /**
144
+ * @since 0.3.16-canary.0
145
+ */
146
+ type DrawerDescriptionProps = ComponentProps<typeof DrawerPrimitive.Description>;
147
+
148
+ /**
149
+ * @since 0.3.16-canary.0
150
+ */
151
+ function DrawerDescription({ className, ...props }: DrawerDescriptionProps): JSX.Element {
152
+ return (
153
+ <DrawerPrimitive.Description
154
+ className={cn("text-sm text-muted-foreground", className)}
155
+ data-slot="drawer-description"
156
+ {...props}
157
+ />
158
+ );
159
+ }
160
+
161
+ /* -----------------------------------------------------------------------------
162
+ * Component: DrawerClose
163
+ * -------------------------------------------------------------------------- */
164
+
165
+ /**
166
+ * @since 0.3.16-canary.0
167
+ */
168
+ interface DrawerCloseProps extends ComponentProps<typeof DrawerPrimitive.Close> {
169
+ size?: VariantProps<typeof buttonVariants>["size"];
170
+ variant?: VariantProps<typeof buttonVariants>["variant"];
171
+ }
172
+
173
+ /**
174
+ * @since 0.3.16-canary.0
175
+ */
176
+ function DrawerClose({ className, size, variant, ...props }: DrawerCloseProps): JSX.Element {
177
+ return (
178
+ <DrawerPrimitive.Close
179
+ className={buttonVariants({ className, size, variant })}
180
+ data-slot="drawer-close"
181
+ {...props}
182
+ />
183
+ );
184
+ }
185
+
186
+ /* -----------------------------------------------------------------------------
187
+ * Exports
188
+ * -------------------------------------------------------------------------- */
189
+
190
+ export {
191
+ Drawer,
192
+ DrawerClose,
193
+ DrawerContent,
194
+ DrawerDescription,
195
+ DrawerFooter,
196
+ DrawerHeader,
197
+ DrawerTitle,
198
+ DrawerTrigger,
199
+ };
200
+ export type {
201
+ DrawerCloseProps,
202
+ DrawerContentProps,
203
+ DrawerDescriptionProps,
204
+ DrawerFooterProps,
205
+ DrawerHeaderProps,
206
+ DrawerProps,
207
+ DrawerTitleProps,
208
+ DrawerTriggerProps,
209
+ };
@@ -0,0 +1,419 @@
1
+ import { CheckIcon, ChevronRightIcon } from "lucide-react";
2
+ import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
3
+ import type { ComponentProps, JSX } from "react";
4
+
5
+ import { cn } from "#/lib/utils";
6
+
7
+ /* -----------------------------------------------------------------------------
8
+ * Component: DropdownMenu
9
+ * -------------------------------------------------------------------------- */
10
+
11
+ /**
12
+ * @since 0.3.16-canary.0
13
+ */
14
+ type DropdownMenuProps = ComponentProps<typeof DropdownMenuPrimitive.Root>;
15
+
16
+ /**
17
+ * @since 0.3.16-canary.0
18
+ */
19
+ function DropdownMenu({ ...props }: DropdownMenuProps): JSX.Element {
20
+ return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} />;
21
+ }
22
+
23
+ /* -----------------------------------------------------------------------------
24
+ * Component: DropdownMenuTrigger
25
+ * -------------------------------------------------------------------------- */
26
+
27
+ /**
28
+ * @since 0.3.16-canary.0
29
+ */
30
+ type DropdownMenuTriggerProps = ComponentProps<typeof DropdownMenuPrimitive.Trigger>;
31
+
32
+ /**
33
+ * @since 0.3.16-canary.0
34
+ */
35
+ function DropdownMenuTrigger({ ...props }: DropdownMenuTriggerProps): JSX.Element {
36
+ return <DropdownMenuPrimitive.Trigger data-slot="dropdown-menu-trigger" {...props} />;
37
+ }
38
+
39
+ /* -----------------------------------------------------------------------------
40
+ * Component: DropdownMenuGroup
41
+ * -------------------------------------------------------------------------- */
42
+
43
+ /**
44
+ * @since 0.3.16-canary.0
45
+ */
46
+ type DropdownMenuGroupProps = ComponentProps<typeof DropdownMenuPrimitive.Group>;
47
+
48
+ /**
49
+ * @since 0.3.16-canary.0
50
+ */
51
+ function DropdownMenuGroup({ ...props }: DropdownMenuGroupProps): JSX.Element {
52
+ return <DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />;
53
+ }
54
+
55
+ /* -----------------------------------------------------------------------------
56
+ * Component: DropdownMenuSub
57
+ * -------------------------------------------------------------------------- */
58
+
59
+ /**
60
+ * @since 0.3.16-canary.0
61
+ */
62
+ type DropdownMenuSubProps = ComponentProps<typeof DropdownMenuPrimitive.Sub>;
63
+
64
+ /**
65
+ * @since 0.3.16-canary.0
66
+ */
67
+ function DropdownMenuSub({ ...props }: DropdownMenuSubProps): JSX.Element {
68
+ return <DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} />;
69
+ }
70
+
71
+ /* -----------------------------------------------------------------------------
72
+ * Component: DropdownMenuRadioGroup
73
+ * -------------------------------------------------------------------------- */
74
+
75
+ /**
76
+ * @since 0.3.16-canary.0
77
+ */
78
+ type DropdownMenuRadioGroupProps = ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>;
79
+
80
+ /**
81
+ * @since 0.3.16-canary.0
82
+ */
83
+ function DropdownMenuRadioGroup({ ...props }: DropdownMenuRadioGroupProps): JSX.Element {
84
+ return <DropdownMenuPrimitive.RadioGroup data-slot="dropdown-menu-radio-group" {...props} />;
85
+ }
86
+
87
+ /* -----------------------------------------------------------------------------
88
+ * Component: DropdownMenuSubTrigger
89
+ * -------------------------------------------------------------------------- */
90
+
91
+ /**
92
+ * @since 0.3.16-canary.0
93
+ */
94
+ interface DropdownMenuSubTriggerProps extends ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> {
95
+ inset?: boolean;
96
+ }
97
+
98
+ /**
99
+ * @since 0.3.16-canary.0
100
+ */
101
+ function DropdownMenuSubTrigger({ children, className, inset, ...props }: DropdownMenuSubTriggerProps): JSX.Element {
102
+ return (
103
+ <DropdownMenuPrimitive.SubTrigger
104
+ className={cn(
105
+ "flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
106
+ className,
107
+ )}
108
+ data-inset={inset}
109
+ data-slot="dropdown-menu-sub-trigger"
110
+ {...props}
111
+ >
112
+ {children}
113
+ <ChevronRightIcon className="ml-auto rtl:rotate-180" />
114
+ </DropdownMenuPrimitive.SubTrigger>
115
+ );
116
+ }
117
+
118
+ /* -----------------------------------------------------------------------------
119
+ * Component: DropdownMenuSubContent
120
+ * -------------------------------------------------------------------------- */
121
+
122
+ /**
123
+ * @since 0.3.16-canary.0
124
+ */
125
+ type DropdownMenuSubContentProps = ComponentProps<typeof DropdownMenuPrimitive.SubContent>;
126
+
127
+ /**
128
+ * @since 0.3.16-canary.0
129
+ */
130
+ function DropdownMenuSubContent({ className, ...props }: DropdownMenuSubContentProps): JSX.Element {
131
+ return (
132
+ <DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal">
133
+ <DropdownMenuPrimitive.SubContent
134
+ className={cn(
135
+ "z-50 min-w-24 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 ease-snappy data-open:animate-in data-open:animation-duration-menu-in data-open:fade-in-0 data-open:zoom-in-95 data-open:data-side-top:slide-in-from-bottom-2 data-open:data-side-right:slide-in-from-left-2 data-open:data-side-bottom:slide-in-from-top-2 data-open:data-side-left:slide-in-from-right-2 data-closed:animate-out data-closed:ease-exit data-closed:animation-duration-menu-out data-closed:fade-out-0 data-closed:zoom-out-95 data-closed:data-side-top:slide-out-to-bottom-2 data-closed:data-side-right:slide-out-to-left-2 data-closed:data-side-bottom:slide-out-to-top-2 data-closed:data-side-left:slide-out-to-right-2",
136
+ className,
137
+ )}
138
+ data-slot="dropdown-menu-sub-content"
139
+ {...props}
140
+ />
141
+ </DropdownMenuPrimitive.Portal>
142
+ );
143
+ }
144
+
145
+ /* -----------------------------------------------------------------------------
146
+ * Component: DropdownMenuContent
147
+ * -------------------------------------------------------------------------- */
148
+
149
+ /**
150
+ * @since 0.3.16-canary.0
151
+ */
152
+ type DropdownMenuContentProps = ComponentProps<typeof DropdownMenuPrimitive.Content>;
153
+
154
+ /**
155
+ * @since 0.3.16-canary.0
156
+ */
157
+ function DropdownMenuContent({
158
+ align = "start",
159
+ className,
160
+ sideOffset = 4,
161
+ ...props
162
+ }: DropdownMenuContentProps): JSX.Element {
163
+ return (
164
+ <DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal">
165
+ <DropdownMenuPrimitive.Content
166
+ align={align}
167
+ className={cn(
168
+ "z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 ease-snappy data-open:animate-in data-open:animation-duration-menu-in data-open:fade-in-0 data-open:zoom-in-95 data-open:data-side-top:slide-in-from-bottom-2 data-open:data-side-right:slide-in-from-left-2 data-open:data-side-bottom:slide-in-from-top-2 data-open:data-side-left:slide-in-from-right-2 data-closed:animate-out data-closed:ease-exit data-closed:animation-duration-menu-out data-closed:fade-out-0 data-closed:zoom-out-95 data-closed:data-side-top:slide-out-to-bottom-2 data-closed:data-side-right:slide-out-to-left-2 data-closed:data-side-bottom:slide-out-to-top-2 data-closed:data-side-left:slide-out-to-right-2",
169
+ className,
170
+ )}
171
+ data-slot="dropdown-menu-content"
172
+ sideOffset={sideOffset}
173
+ {...props}
174
+ />
175
+ </DropdownMenuPrimitive.Portal>
176
+ );
177
+ }
178
+
179
+ /* -----------------------------------------------------------------------------
180
+ * Component: DropdownMenuItem
181
+ * -------------------------------------------------------------------------- */
182
+
183
+ /**
184
+ * @since 0.3.16-canary.0
185
+ */
186
+ interface DropdownMenuItemProps extends ComponentProps<typeof DropdownMenuPrimitive.Item> {
187
+ inset?: boolean;
188
+ variant?: "default" | "destructive";
189
+ }
190
+
191
+ /**
192
+ * @since 0.3.16-canary.0
193
+ */
194
+ function DropdownMenuItem({ className, inset, variant = "default", ...props }: DropdownMenuItemProps): JSX.Element {
195
+ return (
196
+ <DropdownMenuPrimitive.Item
197
+ className={cn(
198
+ "group/dropdown-menu-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive",
199
+ className,
200
+ )}
201
+ data-inset={inset}
202
+ data-slot="dropdown-menu-item"
203
+ data-variant={variant}
204
+ {...props}
205
+ />
206
+ );
207
+ }
208
+
209
+ /* -----------------------------------------------------------------------------
210
+ * Component: DropdownMenuCheckboxItem
211
+ * -------------------------------------------------------------------------- */
212
+
213
+ /**
214
+ * @since 0.3.16-canary.0
215
+ */
216
+ interface DropdownMenuCheckboxItemProps extends ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> {
217
+ inset?: boolean;
218
+ }
219
+
220
+ /**
221
+ * @since 0.3.16-canary.0
222
+ */
223
+ function DropdownMenuCheckboxItem({
224
+ checked,
225
+ children,
226
+ className,
227
+ inset,
228
+ ...props
229
+ }: DropdownMenuCheckboxItemProps): JSX.Element {
230
+ return (
231
+ <DropdownMenuPrimitive.CheckboxItem
232
+ checked={checked}
233
+ className={cn(
234
+ "relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
235
+ className,
236
+ )}
237
+ data-inset={inset}
238
+ data-slot="dropdown-menu-checkbox-item"
239
+ {...props}
240
+ >
241
+ <span
242
+ className="pointer-events-none absolute right-2 flex items-center justify-center"
243
+ data-slot="dropdown-menu-checkbox-item-indicator"
244
+ >
245
+ <DropdownMenuPrimitive.ItemIndicator>
246
+ <CheckIcon />
247
+ </DropdownMenuPrimitive.ItemIndicator>
248
+ </span>
249
+ {children}
250
+ </DropdownMenuPrimitive.CheckboxItem>
251
+ );
252
+ }
253
+
254
+ /* -----------------------------------------------------------------------------
255
+ * Component: DropdownMenuRadioItem
256
+ * -------------------------------------------------------------------------- */
257
+
258
+ /**
259
+ * @since 0.3.16-canary.0
260
+ */
261
+ interface DropdownMenuRadioItemProps extends ComponentProps<typeof DropdownMenuPrimitive.RadioItem> {
262
+ inset?: boolean;
263
+ }
264
+
265
+ /**
266
+ * @since 0.3.16-canary.0
267
+ */
268
+ function DropdownMenuRadioItem({ children, className, inset, ...props }: DropdownMenuRadioItemProps): JSX.Element {
269
+ return (
270
+ <DropdownMenuPrimitive.RadioItem
271
+ className={cn(
272
+ "relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
273
+ className,
274
+ )}
275
+ data-inset={inset}
276
+ data-slot="dropdown-menu-radio-item"
277
+ {...props}
278
+ >
279
+ <span
280
+ className="pointer-events-none absolute right-2 flex items-center justify-center"
281
+ data-slot="dropdown-menu-radio-item-indicator"
282
+ >
283
+ <DropdownMenuPrimitive.ItemIndicator>
284
+ <CheckIcon />
285
+ </DropdownMenuPrimitive.ItemIndicator>
286
+ </span>
287
+ {children}
288
+ </DropdownMenuPrimitive.RadioItem>
289
+ );
290
+ }
291
+
292
+ /* -----------------------------------------------------------------------------
293
+ * Component: DropdownMenuLabel
294
+ * -------------------------------------------------------------------------- */
295
+
296
+ /**
297
+ * @since 0.3.16-canary.0
298
+ */
299
+ interface DropdownMenuLabelProps extends ComponentProps<typeof DropdownMenuPrimitive.Label> {
300
+ inset?: boolean;
301
+ }
302
+
303
+ /**
304
+ * @since 0.3.16-canary.0
305
+ */
306
+ function DropdownMenuLabel({ className, inset, ...props }: DropdownMenuLabelProps): JSX.Element {
307
+ return (
308
+ <DropdownMenuPrimitive.Label
309
+ className={cn("px-2 py-1.5 text-xs font-medium text-muted-foreground data-inset:pl-8", className)}
310
+ data-inset={inset}
311
+ data-slot="dropdown-menu-label"
312
+ {...props}
313
+ />
314
+ );
315
+ }
316
+
317
+ /* -----------------------------------------------------------------------------
318
+ * Component: DropdownMenuSeparator
319
+ * -------------------------------------------------------------------------- */
320
+
321
+ /**
322
+ * @since 0.3.16-canary.0
323
+ */
324
+ type DropdownMenuSeparatorProps = ComponentProps<typeof DropdownMenuPrimitive.Separator>;
325
+
326
+ /**
327
+ * @since 0.3.16-canary.0
328
+ */
329
+ function DropdownMenuSeparator({ className, ...props }: DropdownMenuSeparatorProps): JSX.Element {
330
+ return (
331
+ <DropdownMenuPrimitive.Separator
332
+ className={cn("-mx-1 my-1 h-px bg-border", className)}
333
+ data-slot="dropdown-menu-separator"
334
+ {...props}
335
+ />
336
+ );
337
+ }
338
+
339
+ /* -----------------------------------------------------------------------------
340
+ * Component: DropdownMenuShortcut
341
+ * -------------------------------------------------------------------------- */
342
+
343
+ /**
344
+ * @since 0.3.16-canary.0
345
+ */
346
+ type DropdownMenuShortcutProps = ComponentProps<"span">;
347
+
348
+ /**
349
+ * @since 0.3.16-canary.0
350
+ */
351
+ function DropdownMenuShortcut({ className, ...props }: DropdownMenuShortcutProps): JSX.Element {
352
+ return (
353
+ <span
354
+ className={cn(
355
+ "ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground",
356
+ className,
357
+ )}
358
+ data-slot="dropdown-menu-shortcut"
359
+ {...props}
360
+ />
361
+ );
362
+ }
363
+
364
+ /* -----------------------------------------------------------------------------
365
+ * Component: DropdownMenuArrow
366
+ * -------------------------------------------------------------------------- */
367
+
368
+ /**
369
+ * @since 0.3.16-canary.0
370
+ */
371
+ type DropdownMenuArrowProps = ComponentProps<typeof DropdownMenuPrimitive.Arrow>;
372
+
373
+ /**
374
+ * @since 0.3.16-canary.0
375
+ */
376
+ function DropdownMenuArrow({ className, ...props }: DropdownMenuArrowProps): JSX.Element {
377
+ return (
378
+ <DropdownMenuPrimitive.Arrow className={cn("fill-popover", className)} data-slot="dropdown-menu-arrow" {...props} />
379
+ );
380
+ }
381
+
382
+ /* -----------------------------------------------------------------------------
383
+ * Exports
384
+ * -------------------------------------------------------------------------- */
385
+
386
+ export {
387
+ DropdownMenu,
388
+ DropdownMenuArrow,
389
+ DropdownMenuCheckboxItem,
390
+ DropdownMenuContent,
391
+ DropdownMenuGroup,
392
+ DropdownMenuItem,
393
+ DropdownMenuLabel,
394
+ DropdownMenuRadioGroup,
395
+ DropdownMenuRadioItem,
396
+ DropdownMenuSeparator,
397
+ DropdownMenuShortcut,
398
+ DropdownMenuSub,
399
+ DropdownMenuSubContent,
400
+ DropdownMenuSubTrigger,
401
+ DropdownMenuTrigger,
402
+ };
403
+ export type {
404
+ DropdownMenuArrowProps,
405
+ DropdownMenuCheckboxItemProps,
406
+ DropdownMenuContentProps,
407
+ DropdownMenuGroupProps,
408
+ DropdownMenuItemProps,
409
+ DropdownMenuLabelProps,
410
+ DropdownMenuProps,
411
+ DropdownMenuRadioGroupProps,
412
+ DropdownMenuRadioItemProps,
413
+ DropdownMenuSeparatorProps,
414
+ DropdownMenuShortcutProps,
415
+ DropdownMenuSubContentProps,
416
+ DropdownMenuSubProps,
417
+ DropdownMenuSubTriggerProps,
418
+ DropdownMenuTriggerProps,
419
+ };