@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,160 @@
1
+ import * as React from "react";
2
+ import {
3
+ ChevronLeftIcon,
4
+ ChevronRightIcon,
5
+ DotsHorizontalIcon,
6
+ } from "@radix-ui/react-icons";
7
+ import { cn } from "./utils";
8
+ import { type ButtonProps, buttonVariants } from "./button";
9
+
10
+ /* -----------------------------------------------------------------------------
11
+ * Component: Pagination
12
+ * -------------------------------------------------------------------------- */
13
+
14
+ function Pagination({
15
+ className,
16
+ ...props
17
+ }: React.ComponentProps<"nav">): React.JSX.Element {
18
+ return (
19
+ <nav
20
+ role="navigation"
21
+ aria-label="pagination"
22
+ className={cn("mx-auto flex w-full justify-center", className)}
23
+ {...props}
24
+ />
25
+ );
26
+ }
27
+
28
+ /* -----------------------------------------------------------------------------
29
+ * Component: PaginationContent
30
+ * -------------------------------------------------------------------------- */
31
+
32
+ const PaginationContent = React.forwardRef<
33
+ HTMLUListElement,
34
+ React.HTMLAttributes<HTMLUListElement>
35
+ >(({ className, ...props }, ref) => (
36
+ <ul
37
+ ref={ref}
38
+ className={cn("flex flex-row items-center gap-1", className)}
39
+ {...props}
40
+ />
41
+ ));
42
+ PaginationContent.displayName = "PaginationContent";
43
+
44
+ /* -----------------------------------------------------------------------------
45
+ * Component: PaginationItem
46
+ * -------------------------------------------------------------------------- */
47
+
48
+ const PaginationItem = React.forwardRef<
49
+ HTMLLIElement,
50
+ React.LiHTMLAttributes<HTMLLIElement>
51
+ >((props, ref) => <li ref={ref} {...props} />);
52
+ PaginationItem.displayName = "PaginationItem";
53
+
54
+ /* -----------------------------------------------------------------------------
55
+ * Component: PaginationLink
56
+ * -------------------------------------------------------------------------- */
57
+
58
+ interface PaginationLinkProps
59
+ extends React.AnchorHTMLAttributes<HTMLAnchorElement>,
60
+ Pick<ButtonProps, "size"> {
61
+ isActive?: boolean;
62
+ }
63
+
64
+ function PaginationLink({
65
+ className,
66
+ isActive,
67
+ size = "icon",
68
+ children,
69
+ ...props
70
+ }: PaginationLinkProps): React.JSX.Element {
71
+ return (
72
+ <a
73
+ aria-current={isActive ? "page" : undefined}
74
+ className={buttonVariants({
75
+ variant: isActive ? "outline" : "ghost",
76
+ size,
77
+ className,
78
+ })}
79
+ {...props}
80
+ >
81
+ {children}
82
+ </a>
83
+ );
84
+ }
85
+
86
+ /* -----------------------------------------------------------------------------
87
+ * Component: PaginationPrevious
88
+ * -------------------------------------------------------------------------- */
89
+
90
+ function PaginationPrevious({
91
+ className,
92
+ ...props
93
+ }: PaginationLinkProps): React.JSX.Element {
94
+ return (
95
+ <PaginationLink
96
+ aria-label="Go to previous page"
97
+ size="default"
98
+ className={cn("gap-1 pl-2.5", className)}
99
+ {...props}
100
+ >
101
+ <ChevronLeftIcon className="size-4" />
102
+ <span>Previous</span>
103
+ </PaginationLink>
104
+ );
105
+ }
106
+
107
+ /* -----------------------------------------------------------------------------
108
+ * Component: PaginationNext
109
+ * -------------------------------------------------------------------------- */
110
+
111
+ function PaginationNext({
112
+ className,
113
+ ...props
114
+ }: PaginationLinkProps): React.JSX.Element {
115
+ return (
116
+ <PaginationLink
117
+ aria-label="Go to next page"
118
+ size="default"
119
+ className={cn("gap-1 pr-2.5", className)}
120
+ {...props}
121
+ >
122
+ <span>Next</span>
123
+ <ChevronRightIcon className="size-4" />
124
+ </PaginationLink>
125
+ );
126
+ }
127
+
128
+ /* -----------------------------------------------------------------------------
129
+ * Component: PaginationEllipsis
130
+ * -------------------------------------------------------------------------- */
131
+
132
+ function PaginationEllipsis({
133
+ className,
134
+ ...props
135
+ }: React.HTMLAttributes<HTMLSpanElement>): React.JSX.Element {
136
+ return (
137
+ <span
138
+ aria-hidden
139
+ className={cn("flex size-10 items-center justify-center", className)}
140
+ {...props}
141
+ >
142
+ <DotsHorizontalIcon className="size-4" />
143
+ <span className="sr-only">More pages</span>
144
+ </span>
145
+ );
146
+ }
147
+
148
+ /* -----------------------------------------------------------------------------
149
+ * Exports
150
+ * -------------------------------------------------------------------------- */
151
+
152
+ export {
153
+ Pagination,
154
+ PaginationContent,
155
+ PaginationLink,
156
+ PaginationItem,
157
+ PaginationPrevious,
158
+ PaginationNext,
159
+ PaginationEllipsis,
160
+ };
@@ -0,0 +1,68 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
5
+ import { cn } from "./utils";
6
+
7
+ /* -----------------------------------------------------------------------------
8
+ * Component: Popover
9
+ * -------------------------------------------------------------------------- */
10
+
11
+ const Popover = PopoverPrimitive.Root;
12
+
13
+ /* -----------------------------------------------------------------------------
14
+ * Component: PopoverTrigger
15
+ * -------------------------------------------------------------------------- */
16
+
17
+ const PopoverTrigger = PopoverPrimitive.Trigger;
18
+
19
+ /* -----------------------------------------------------------------------------
20
+ * Component: PopoverAnchor
21
+ * -------------------------------------------------------------------------- */
22
+
23
+ const PopoverAnchor = PopoverPrimitive.Anchor;
24
+
25
+ /* -----------------------------------------------------------------------------
26
+ * Component: PopoverContent
27
+ * -------------------------------------------------------------------------- */
28
+
29
+ const PopoverContent = React.forwardRef<
30
+ React.ElementRef<typeof PopoverPrimitive.Content>,
31
+ PopoverPrimitive.PopoverContentProps
32
+ >(({ className, align = "center", sideOffset = 4, ...props }, ref) => (
33
+ <PopoverPrimitive.Portal>
34
+ <PopoverPrimitive.Content
35
+ ref={ref}
36
+ align={align}
37
+ sideOffset={sideOffset}
38
+ className={cn(
39
+ "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=left]:slide-out-to-right-2 data-[state=closed]:data-[side=bottom]:slide-out-to-top-2 data-[state=closed]:data-[side=right]:slide-out-to-left-2 z-50 min-w-[8rem] rounded-md border p-4 shadow-md focus:outline-none",
40
+ className,
41
+ )}
42
+ {...props}
43
+ />
44
+ </PopoverPrimitive.Portal>
45
+ ));
46
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
47
+
48
+ /* -----------------------------------------------------------------------------
49
+ * Component: PopoverArrow
50
+ * -------------------------------------------------------------------------- */
51
+
52
+ const PopoverArrow = React.forwardRef<
53
+ React.ElementRef<typeof PopoverPrimitive.Arrow>,
54
+ PopoverPrimitive.PopoverArrowProps
55
+ >(({ className, ...props }, ref) => (
56
+ <PopoverPrimitive.Arrow
57
+ ref={ref}
58
+ className={cn("fill-border", className)}
59
+ {...props}
60
+ />
61
+ ));
62
+ PopoverArrow.displayName = PopoverPrimitive.Arrow.displayName;
63
+
64
+ /* -----------------------------------------------------------------------------
65
+ * Exports
66
+ * -------------------------------------------------------------------------- */
67
+
68
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverArrow };
@@ -0,0 +1,37 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as ProgressPrimitive from "@radix-ui/react-progress";
5
+ import { cn } from "./utils";
6
+
7
+ /* -----------------------------------------------------------------------------
8
+ * Component: Progress
9
+ * -------------------------------------------------------------------------- */
10
+
11
+ const Progress = React.forwardRef<
12
+ React.ElementRef<typeof ProgressPrimitive.Root>,
13
+ ProgressPrimitive.ProgressProps
14
+ >(({ className, value, ...props }, ref) => (
15
+ <ProgressPrimitive.Root
16
+ ref={ref}
17
+ className={cn(
18
+ "bg-primary/20 relative h-2 w-full overflow-hidden rounded-full",
19
+ className,
20
+ )}
21
+ {...props}
22
+ >
23
+ <ProgressPrimitive.Indicator
24
+ className="bg-primary h-full w-full flex-1 transition-all"
25
+ style={{
26
+ transform: `translateX(-${100 - (value ?? 0)}%)`,
27
+ }}
28
+ />
29
+ </ProgressPrimitive.Root>
30
+ ));
31
+ Progress.displayName = ProgressPrimitive.Root.displayName;
32
+
33
+ /* -----------------------------------------------------------------------------
34
+ * Exports
35
+ * -------------------------------------------------------------------------- */
36
+
37
+ export { Progress };
@@ -0,0 +1,56 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
5
+ import { cn } from "./utils";
6
+
7
+ /* -----------------------------------------------------------------------------
8
+ * Component: RadioGroup
9
+ * -------------------------------------------------------------------------- */
10
+
11
+ const RadioGroup = React.forwardRef<
12
+ React.ElementRef<typeof RadioGroupPrimitive.Root>,
13
+ RadioGroupPrimitive.RadioGroupProps
14
+ >(({ className, ...props }, ref) => {
15
+ return (
16
+ <RadioGroupPrimitive.Root
17
+ className={cn("grid gap-2", className)}
18
+ {...props}
19
+ ref={ref}
20
+ />
21
+ );
22
+ });
23
+ RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
24
+
25
+ /* -----------------------------------------------------------------------------
26
+ * Component: RadioGroupItem
27
+ * -------------------------------------------------------------------------- */
28
+
29
+ const RadioGroupItem = React.forwardRef<
30
+ React.ElementRef<typeof RadioGroupPrimitive.Item>,
31
+ RadioGroupPrimitive.RadioGroupItemProps
32
+ >(({ className, ...props }, ref) => {
33
+ return (
34
+ <RadioGroupPrimitive.Item
35
+ ref={ref}
36
+ className={cn(
37
+ "border-compound text-compound-foreground focus-visible:ring-offset-background focus-visible:ring-ring aria-checked:border-primary group aspect-square size-4 rounded-full border focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
38
+ className,
39
+ )}
40
+ {...props}
41
+ >
42
+ <RadioGroupPrimitive.Indicator
43
+ className={cn(
44
+ "after:bg-primary relative flex h-full w-full items-center justify-center after:block after:size-2.5 after:rounded-full",
45
+ )}
46
+ />
47
+ </RadioGroupPrimitive.Item>
48
+ );
49
+ });
50
+ RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
51
+
52
+ /* -----------------------------------------------------------------------------
53
+ * Exports
54
+ * -------------------------------------------------------------------------- */
55
+
56
+ export { RadioGroup, RadioGroupItem };
@@ -0,0 +1,64 @@
1
+ "use client";
2
+
3
+ import { DragHandleDots2Icon } from "@radix-ui/react-icons";
4
+ import * as ResizablePrimitive from "react-resizable-panels";
5
+ import { cn } from "./utils";
6
+
7
+ /* -----------------------------------------------------------------------------
8
+ * Component: ResizablePanelGroup
9
+ * -------------------------------------------------------------------------- */
10
+
11
+ function ResizablePanelGroup({
12
+ className,
13
+ ...props
14
+ }: ResizablePrimitive.PanelGroupProps): React.JSX.Element {
15
+ return (
16
+ <ResizablePrimitive.PanelGroup
17
+ className={cn(
18
+ "flex h-full w-full data-[panel-group-direction=vertical]:flex-col",
19
+ className,
20
+ )}
21
+ {...props}
22
+ />
23
+ );
24
+ }
25
+
26
+ /* -----------------------------------------------------------------------------
27
+ * Component: ResizablePanel
28
+ * -------------------------------------------------------------------------- */
29
+
30
+ const ResizablePanel = ResizablePrimitive.Panel;
31
+
32
+ /* -----------------------------------------------------------------------------
33
+ * Component: ResizableHandle
34
+ * -------------------------------------------------------------------------- */
35
+
36
+ function ResizableHandle({
37
+ withHandle,
38
+ className,
39
+ ...props
40
+ }: ResizablePrimitive.PanelResizeHandleProps & {
41
+ withHandle?: boolean;
42
+ }): React.JSX.Element {
43
+ return (
44
+ <ResizablePrimitive.PanelResizeHandle
45
+ className={cn(
46
+ "bg-border focus-visible:ring-ring focus-visible:ring-offset-background relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 [&[data-panel-group-direction=vertical]>div]:rotate-90",
47
+ className,
48
+ )}
49
+ {...props}
50
+ >
51
+ {withHandle ? (
52
+ <div className="bg-border z-10 flex h-4 w-3 items-center justify-center rounded-sm border">
53
+ <DragHandleDots2Icon className="size-2.5" />
54
+ </div>
55
+ ) : null}
56
+ </ResizablePrimitive.PanelResizeHandle>
57
+ );
58
+ }
59
+
60
+ /* -----------------------------------------------------------------------------
61
+ * Exports
62
+ * -------------------------------------------------------------------------- */
63
+
64
+ export { ResizablePanelGroup, ResizablePanel, ResizableHandle };
@@ -0,0 +1,60 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
5
+ import { cn } from "./utils";
6
+
7
+ /* -----------------------------------------------------------------------------
8
+ * Component: ScrollArea
9
+ * -------------------------------------------------------------------------- */
10
+
11
+ const ScrollArea = React.forwardRef<
12
+ React.ElementRef<typeof ScrollAreaPrimitive.Root>,
13
+ ScrollAreaPrimitive.ScrollAreaProps
14
+ >(({ className, children, ...props }, ref) => (
15
+ <ScrollAreaPrimitive.Root
16
+ ref={ref}
17
+ className={cn("relative overflow-hidden", className)}
18
+ {...props}
19
+ >
20
+ <ScrollAreaPrimitive.Viewport className="size-full rounded-[inherit]">
21
+ {children}
22
+ </ScrollAreaPrimitive.Viewport>
23
+ <ScrollBar orientation="vertical" />
24
+ <ScrollBar orientation="horizontal" />
25
+ <ScrollAreaPrimitive.Corner />
26
+ </ScrollAreaPrimitive.Root>
27
+ ));
28
+ ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
29
+
30
+ /* -----------------------------------------------------------------------------
31
+ * Component: ScrollBar
32
+ * -------------------------------------------------------------------------- */
33
+
34
+ const ScrollBar = React.forwardRef<
35
+ React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,
36
+ ScrollAreaPrimitive.ScrollAreaScrollbarProps
37
+ >(({ className, orientation = "vertical", ...props }, ref) => (
38
+ <ScrollAreaPrimitive.ScrollAreaScrollbar
39
+ ref={ref}
40
+ orientation={orientation}
41
+ className={cn(
42
+ "flex touch-none select-none transition-colors",
43
+ orientation === "vertical" &&
44
+ "h-full w-2.5 border-l border-l-transparent p-px",
45
+ orientation === "horizontal" &&
46
+ "h-2.5 flex-col border-t border-t-transparent p-px",
47
+ className,
48
+ )}
49
+ {...props}
50
+ >
51
+ <ScrollAreaPrimitive.ScrollAreaThumb className="bg-border relative flex-1 rounded-full" />
52
+ </ScrollAreaPrimitive.ScrollAreaScrollbar>
53
+ ));
54
+ ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
55
+
56
+ /* -----------------------------------------------------------------------------
57
+ * Exports
58
+ * -------------------------------------------------------------------------- */
59
+
60
+ export { ScrollArea, ScrollBar };
package/src/select.tsx ADDED
@@ -0,0 +1,207 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import {
5
+ CaretSortIcon,
6
+ CheckIcon,
7
+ ChevronDownIcon,
8
+ ChevronUpIcon,
9
+ } from "@radix-ui/react-icons";
10
+ import * as SelectPrimitive from "@radix-ui/react-select";
11
+ import { cn } from "./utils";
12
+
13
+ /* -----------------------------------------------------------------------------
14
+ * Component: Select
15
+ * -------------------------------------------------------------------------- */
16
+
17
+ const Select = SelectPrimitive.Root;
18
+
19
+ /* -----------------------------------------------------------------------------
20
+ * Component: SelectGroup
21
+ * -------------------------------------------------------------------------- */
22
+
23
+ const SelectGroup = SelectPrimitive.Group;
24
+
25
+ /* -----------------------------------------------------------------------------
26
+ * Component: SelectValue
27
+ * -------------------------------------------------------------------------- */
28
+
29
+ const SelectValue = SelectPrimitive.Value;
30
+
31
+ /* -----------------------------------------------------------------------------
32
+ * Component: SelectTrigger
33
+ * -------------------------------------------------------------------------- */
34
+
35
+ const SelectTrigger = React.forwardRef<
36
+ React.ElementRef<typeof SelectPrimitive.Trigger>,
37
+ SelectPrimitive.SelectTriggerProps
38
+ >(({ className, children, ...props }, ref) => (
39
+ <SelectPrimitive.Trigger
40
+ ref={ref}
41
+ className={cn(
42
+ "border-input placeholder:text-muted-foreground focus:ring-offset-background focus:ring-ring flex h-10 w-full items-center justify-between whitespace-nowrap rounded-md border bg-transparent px-3 text-sm shadow-sm focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
43
+ className,
44
+ )}
45
+ {...props}
46
+ >
47
+ {children}
48
+ <SelectPrimitive.Icon asChild>
49
+ <CaretSortIcon className="size-4 opacity-50" />
50
+ </SelectPrimitive.Icon>
51
+ </SelectPrimitive.Trigger>
52
+ ));
53
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
54
+
55
+ /* -----------------------------------------------------------------------------
56
+ * Component: SelectScrollUpButton
57
+ * -------------------------------------------------------------------------- */
58
+
59
+ const SelectScrollUpButton = React.forwardRef<
60
+ React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,
61
+ SelectPrimitive.SelectScrollUpButtonProps
62
+ >(({ className, ...props }, ref) => (
63
+ <SelectPrimitive.ScrollUpButton
64
+ ref={ref}
65
+ className={cn(
66
+ "flex cursor-default items-center justify-center py-1",
67
+ className,
68
+ )}
69
+ {...props}
70
+ >
71
+ <ChevronUpIcon />
72
+ </SelectPrimitive.ScrollUpButton>
73
+ ));
74
+ SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
75
+
76
+ /* -----------------------------------------------------------------------------
77
+ * Component: SelectScrollDownButton
78
+ * -------------------------------------------------------------------------- */
79
+
80
+ const SelectScrollDownButton = React.forwardRef<
81
+ React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,
82
+ SelectPrimitive.SelectScrollDownButtonProps
83
+ >(({ className, ...props }, ref) => (
84
+ <SelectPrimitive.ScrollDownButton
85
+ ref={ref}
86
+ className={cn(
87
+ "flex cursor-default items-center justify-center py-1",
88
+ className,
89
+ )}
90
+ {...props}
91
+ >
92
+ <ChevronDownIcon />
93
+ </SelectPrimitive.ScrollDownButton>
94
+ ));
95
+ SelectScrollDownButton.displayName =
96
+ SelectPrimitive.ScrollDownButton.displayName;
97
+
98
+ /* -----------------------------------------------------------------------------
99
+ * Component: SelectContent
100
+ * -------------------------------------------------------------------------- */
101
+
102
+ const SelectContent = React.forwardRef<
103
+ React.ElementRef<typeof SelectPrimitive.Content>,
104
+ SelectPrimitive.SelectContentProps
105
+ >(({ className, children, position = "popper", ...props }, ref) => (
106
+ <SelectPrimitive.Portal>
107
+ <SelectPrimitive.Content
108
+ ref={ref}
109
+ className={cn(
110
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=open]:data-[side=bottom]:slide-in-from-top-2 data-[state=open]:data-[side=left]:slide-in-from-right-2 data-[state=open]:data-[side=right]:slide-in-from-left-2 data-[state=open]:data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:data-[side=bottom]:slide-out-to-top-2 data-[state=closed]:data-[side=left]:slide-out-to-right-2 data-[state=closed]:data-[side=right]:slide-out-to-left-2 data-[state=closed]:data-[side=top]:slide-out-to-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md",
111
+ position === "popper" &&
112
+ "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
113
+ className,
114
+ )}
115
+ position={position}
116
+ {...props}
117
+ >
118
+ <SelectScrollUpButton />
119
+ <SelectPrimitive.Viewport
120
+ className={cn(
121
+ "p-1",
122
+ position === "popper" &&
123
+ "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]",
124
+ )}
125
+ >
126
+ {children}
127
+ </SelectPrimitive.Viewport>
128
+ <SelectScrollDownButton />
129
+ </SelectPrimitive.Content>
130
+ </SelectPrimitive.Portal>
131
+ ));
132
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
133
+
134
+ /* -----------------------------------------------------------------------------
135
+ * Component: SelectLabel
136
+ * -------------------------------------------------------------------------- */
137
+
138
+ const SelectLabel = React.forwardRef<
139
+ React.ElementRef<typeof SelectPrimitive.Label>,
140
+ SelectPrimitive.SelectLabelProps
141
+ >(({ className, ...props }, ref) => (
142
+ <SelectPrimitive.Label
143
+ ref={ref}
144
+ className={cn("px-2 py-1.5 text-sm font-semibold", className)}
145
+ {...props}
146
+ />
147
+ ));
148
+ SelectLabel.displayName = SelectPrimitive.Label.displayName;
149
+
150
+ /* -----------------------------------------------------------------------------
151
+ * Component: SelectItem
152
+ * -------------------------------------------------------------------------- */
153
+
154
+ const SelectItem = React.forwardRef<
155
+ React.ElementRef<typeof SelectPrimitive.Item>,
156
+ SelectPrimitive.SelectItemProps
157
+ >(({ className, children, ...props }, ref) => (
158
+ <SelectPrimitive.Item
159
+ ref={ref}
160
+ className={cn(
161
+ "focus:bg-accent focus:text-accent-foreground relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm focus:outline-none aria-disabled:pointer-events-none aria-disabled:opacity-50",
162
+ className,
163
+ )}
164
+ {...props}
165
+ >
166
+ <span className="absolute right-2 flex size-3.5 items-center justify-center">
167
+ <SelectPrimitive.ItemIndicator>
168
+ <CheckIcon className="size-4" />
169
+ </SelectPrimitive.ItemIndicator>
170
+ </span>
171
+ <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
172
+ </SelectPrimitive.Item>
173
+ ));
174
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
175
+
176
+ /* -----------------------------------------------------------------------------
177
+ * Component: SelectSeparator
178
+ * -------------------------------------------------------------------------- */
179
+
180
+ const SelectSeparator = React.forwardRef<
181
+ React.ElementRef<typeof SelectPrimitive.Separator>,
182
+ SelectPrimitive.SelectSeparatorProps
183
+ >(({ className, ...props }, ref) => (
184
+ <SelectPrimitive.Separator
185
+ ref={ref}
186
+ className={cn("bg-muted -mx-1 my-1 h-px", className)}
187
+ {...props}
188
+ />
189
+ ));
190
+ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
191
+
192
+ /* -----------------------------------------------------------------------------
193
+ * Exports
194
+ * -------------------------------------------------------------------------- */
195
+
196
+ export {
197
+ Select,
198
+ SelectGroup,
199
+ SelectValue,
200
+ SelectTrigger,
201
+ SelectContent,
202
+ SelectLabel,
203
+ SelectItem,
204
+ SelectSeparator,
205
+ SelectScrollUpButton,
206
+ SelectScrollDownButton,
207
+ };
@@ -0,0 +1,38 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as SeparatorPrimitive from "@radix-ui/react-separator";
5
+ import { cn } from "./utils";
6
+
7
+ /* -----------------------------------------------------------------------------
8
+ * Component: Separator
9
+ * -------------------------------------------------------------------------- */
10
+
11
+ const Separator = React.forwardRef<
12
+ React.ElementRef<typeof SeparatorPrimitive.Root>,
13
+ SeparatorPrimitive.SeparatorProps
14
+ >(
15
+ (
16
+ { className, orientation = "horizontal", decorative = true, ...props },
17
+ ref,
18
+ ) => (
19
+ <SeparatorPrimitive.Root
20
+ ref={ref}
21
+ decorative={decorative}
22
+ orientation={orientation}
23
+ className={cn(
24
+ "bg-border shrink-0",
25
+ orientation === "horizontal" ? "h-px w-full" : "h-full w-px",
26
+ className,
27
+ )}
28
+ {...props}
29
+ />
30
+ ),
31
+ );
32
+ Separator.displayName = SeparatorPrimitive.Root.displayName;
33
+
34
+ /* -----------------------------------------------------------------------------
35
+ * Exports
36
+ * -------------------------------------------------------------------------- */
37
+
38
+ export { Separator };