@codefast/ui 0.0.7 → 0.0.9

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 (385) hide show
  1. package/dist/accordion.d.mts +5 -1
  2. package/dist/accordion.d.ts +5 -1
  3. package/dist/accordion.js.map +1 -1
  4. package/dist/accordion.mjs.map +1 -1
  5. package/dist/alert-dialog.d.mts +12 -3
  6. package/dist/alert-dialog.d.ts +12 -3
  7. package/dist/alert-dialog.js +3 -3
  8. package/dist/alert-dialog.js.map +1 -1
  9. package/dist/alert-dialog.mjs +1 -1
  10. package/dist/alert-dialog.mjs.map +1 -1
  11. package/dist/alert.d.mts +10 -5
  12. package/dist/alert.d.ts +10 -5
  13. package/dist/alert.js +22 -18
  14. package/dist/alert.js.map +1 -1
  15. package/dist/alert.mjs +22 -18
  16. package/dist/alert.mjs.map +1 -1
  17. package/dist/aspect-ratio.d.mts +2 -1
  18. package/dist/aspect-ratio.d.ts +2 -1
  19. package/dist/aspect-ratio.js.map +1 -1
  20. package/dist/aspect-ratio.mjs.map +1 -1
  21. package/dist/avatar.d.mts +4 -1
  22. package/dist/avatar.d.ts +4 -1
  23. package/dist/avatar.js.map +1 -1
  24. package/dist/avatar.mjs.map +1 -1
  25. package/dist/badge.d.mts +5 -2
  26. package/dist/badge.d.ts +5 -2
  27. package/dist/badge.js +4 -4
  28. package/dist/badge.js.map +1 -1
  29. package/dist/badge.mjs +4 -4
  30. package/dist/badge.mjs.map +1 -1
  31. package/dist/blockquote.d.mts +8 -0
  32. package/dist/blockquote.d.ts +8 -0
  33. package/dist/blockquote.js +15 -0
  34. package/dist/blockquote.js.map +1 -0
  35. package/dist/blockquote.mjs +15 -0
  36. package/dist/blockquote.mjs.map +1 -0
  37. package/dist/box.d.mts +14 -0
  38. package/dist/box.d.ts +14 -0
  39. package/dist/box.js +15 -0
  40. package/dist/box.js.map +1 -0
  41. package/dist/box.mjs +15 -0
  42. package/dist/box.mjs.map +1 -0
  43. package/dist/breadcrumb.d.mts +18 -11
  44. package/dist/breadcrumb.d.ts +18 -11
  45. package/dist/breadcrumb.js +49 -39
  46. package/dist/breadcrumb.js.map +1 -1
  47. package/dist/breadcrumb.mjs +49 -39
  48. package/dist/breadcrumb.mjs.map +1 -1
  49. package/dist/button.d.mts +4 -3
  50. package/dist/button.d.ts +4 -3
  51. package/dist/button.js +2 -2
  52. package/dist/button.mjs +1 -1
  53. package/dist/calendar.d.mts +3 -2
  54. package/dist/calendar.d.ts +3 -2
  55. package/dist/calendar.js +3 -3
  56. package/dist/calendar.js.map +1 -1
  57. package/dist/calendar.mjs +1 -1
  58. package/dist/calendar.mjs.map +1 -1
  59. package/dist/card.d.mts +13 -7
  60. package/dist/card.d.ts +13 -7
  61. package/dist/card.js +47 -37
  62. package/dist/card.js.map +1 -1
  63. package/dist/card.mjs +47 -37
  64. package/dist/card.mjs.map +1 -1
  65. package/dist/carousel.d.mts +13 -8
  66. package/dist/carousel.d.ts +13 -8
  67. package/dist/carousel.js +63 -57
  68. package/dist/carousel.js.map +1 -1
  69. package/dist/carousel.mjs +62 -56
  70. package/dist/carousel.mjs.map +1 -1
  71. package/dist/checkbox.d.mts +2 -1
  72. package/dist/checkbox.d.ts +2 -1
  73. package/dist/checkbox.js.map +1 -1
  74. package/dist/checkbox.mjs.map +1 -1
  75. package/dist/{chunk-OCLLX7EY.js → chunk-3BDLWZ3W.js} +1 -1
  76. package/dist/chunk-3BDLWZ3W.js.map +1 -0
  77. package/dist/{chunk-2D7SRYKN.js → chunk-43YGVOCO.js} +1 -1
  78. package/dist/chunk-43YGVOCO.js.map +1 -0
  79. package/dist/{chunk-EIHWTXQ4.mjs → chunk-AJLEALVP.mjs} +1 -1
  80. package/dist/chunk-AJLEALVP.mjs.map +1 -0
  81. package/dist/{chunk-LDYBRDAY.js → chunk-D6NQEMTJ.js} +1 -1
  82. package/dist/chunk-D6NQEMTJ.js.map +1 -0
  83. package/dist/{chunk-KW5FJ62U.mjs → chunk-FATZHRHR.mjs} +1 -1
  84. package/dist/chunk-FATZHRHR.mjs.map +1 -0
  85. package/dist/{chunk-RTKEO347.js → chunk-GRKABVK4.js} +1 -1
  86. package/dist/chunk-GRKABVK4.js.map +1 -0
  87. package/dist/{chunk-U2WDUCW3.js → chunk-JOJW7BBY.js} +1 -1
  88. package/dist/{chunk-U2WDUCW3.js.map → chunk-JOJW7BBY.js.map} +1 -1
  89. package/dist/{chunk-ESWGFN3R.mjs → chunk-KV4VL2ZF.mjs} +1 -1
  90. package/dist/chunk-KV4VL2ZF.mjs.map +1 -0
  91. package/dist/{chunk-T52N6ZBP.mjs → chunk-MJDKD2K4.mjs} +1 -1
  92. package/dist/{chunk-T52N6ZBP.mjs.map → chunk-MJDKD2K4.mjs.map} +1 -1
  93. package/dist/{chunk-EDVCMWDT.mjs → chunk-NCEN3XBK.mjs} +1 -1
  94. package/dist/chunk-NCEN3XBK.mjs.map +1 -0
  95. package/dist/{chunk-PTD4AMHI.mjs → chunk-PIU627A3.mjs} +1 -1
  96. package/dist/chunk-PIU627A3.mjs.map +1 -0
  97. package/dist/{chunk-5GHZ6EXI.js → chunk-PKB2G726.js} +1 -1
  98. package/dist/{chunk-5GHZ6EXI.js.map → chunk-PKB2G726.js.map} +1 -1
  99. package/dist/code.d.mts +8 -0
  100. package/dist/code.d.ts +8 -0
  101. package/dist/code.js +15 -0
  102. package/dist/code.js.map +1 -0
  103. package/dist/code.mjs +15 -0
  104. package/dist/code.mjs.map +1 -0
  105. package/dist/collapsible.d.mts +4 -1
  106. package/dist/collapsible.d.ts +4 -1
  107. package/dist/collapsible.js.map +1 -1
  108. package/dist/collapsible.mjs.map +1 -1
  109. package/dist/command.d.mts +29 -18
  110. package/dist/command.d.ts +29 -18
  111. package/dist/command.js +6 -3
  112. package/dist/command.js.map +1 -1
  113. package/dist/command.mjs +5 -2
  114. package/dist/command.mjs.map +1 -1
  115. package/dist/container.d.mts +8 -0
  116. package/dist/container.d.ts +8 -0
  117. package/dist/container.js +19 -0
  118. package/dist/container.js.map +1 -0
  119. package/dist/container.mjs +19 -0
  120. package/dist/container.mjs.map +1 -0
  121. package/dist/context-menu.d.mts +26 -11
  122. package/dist/context-menu.d.ts +26 -11
  123. package/dist/context-menu.js.map +1 -1
  124. package/dist/context-menu.mjs.map +1 -1
  125. package/dist/data-table.d.mts +10 -7
  126. package/dist/data-table.d.ts +10 -7
  127. package/dist/data-table.js +25 -25
  128. package/dist/data-table.js.map +1 -1
  129. package/dist/data-table.mjs +3 -3
  130. package/dist/data-table.mjs.map +1 -1
  131. package/dist/dialog.d.mts +11 -3
  132. package/dist/dialog.d.ts +11 -3
  133. package/dist/dialog.js +2 -2
  134. package/dist/dialog.mjs +1 -1
  135. package/dist/drawer.d.mts +12 -4
  136. package/dist/drawer.d.ts +12 -4
  137. package/dist/drawer.js.map +1 -1
  138. package/dist/drawer.mjs.map +1 -1
  139. package/dist/dropdown-menu.d.mts +25 -11
  140. package/dist/dropdown-menu.d.ts +25 -11
  141. package/dist/dropdown-menu.js +2 -2
  142. package/dist/dropdown-menu.mjs +1 -1
  143. package/dist/em.d.mts +8 -0
  144. package/dist/em.d.ts +8 -0
  145. package/dist/em.js +15 -0
  146. package/dist/em.js.map +1 -0
  147. package/dist/em.mjs +15 -0
  148. package/dist/em.mjs.map +1 -0
  149. package/dist/form.d.mts +14 -6
  150. package/dist/form.d.ts +14 -6
  151. package/dist/form.js +26 -22
  152. package/dist/form.js.map +1 -1
  153. package/dist/form.mjs +25 -21
  154. package/dist/form.mjs.map +1 -1
  155. package/dist/heading.d.mts +9 -0
  156. package/dist/heading.d.ts +9 -0
  157. package/dist/heading.js +15 -0
  158. package/dist/heading.js.map +1 -0
  159. package/dist/heading.mjs +15 -0
  160. package/dist/heading.mjs.map +1 -0
  161. package/dist/hover-card.d.mts +4 -1
  162. package/dist/hover-card.d.ts +4 -1
  163. package/dist/hover-card.js.map +1 -1
  164. package/dist/hover-card.mjs.map +1 -1
  165. package/dist/input-otp.d.mts +12 -32
  166. package/dist/input-otp.d.ts +12 -32
  167. package/dist/input-otp.js +30 -22
  168. package/dist/input-otp.js.map +1 -1
  169. package/dist/input-otp.mjs +29 -21
  170. package/dist/input-otp.mjs.map +1 -1
  171. package/dist/input.d.mts +6 -3
  172. package/dist/input.d.ts +6 -3
  173. package/dist/input.js +13 -11
  174. package/dist/input.js.map +1 -1
  175. package/dist/input.mjs +13 -11
  176. package/dist/input.mjs.map +1 -1
  177. package/dist/kbd.d.mts +8 -0
  178. package/dist/kbd.d.ts +8 -0
  179. package/dist/kbd.js +29 -0
  180. package/dist/kbd.js.map +1 -0
  181. package/dist/kbd.mjs +29 -0
  182. package/dist/kbd.mjs.map +1 -0
  183. package/dist/label.d.mts +2 -1
  184. package/dist/label.d.ts +2 -1
  185. package/dist/label.js +2 -2
  186. package/dist/label.mjs +1 -1
  187. package/dist/menubar.d.mts +27 -12
  188. package/dist/menubar.d.ts +27 -12
  189. package/dist/menubar.js.map +1 -1
  190. package/dist/menubar.mjs.map +1 -1
  191. package/dist/navigation-menu.d.mts +9 -1
  192. package/dist/navigation-menu.d.ts +9 -1
  193. package/dist/navigation-menu.js.map +1 -1
  194. package/dist/navigation-menu.mjs.map +1 -1
  195. package/dist/pagination.d.mts +13 -7
  196. package/dist/pagination.d.ts +13 -7
  197. package/dist/pagination.js +5 -3
  198. package/dist/pagination.js.map +1 -1
  199. package/dist/pagination.mjs +4 -2
  200. package/dist/pagination.mjs.map +1 -1
  201. package/dist/popover.d.mts +6 -1
  202. package/dist/popover.d.ts +6 -1
  203. package/dist/popover.js.map +1 -1
  204. package/dist/popover.mjs.map +1 -1
  205. package/dist/pre.d.mts +8 -0
  206. package/dist/pre.d.ts +8 -0
  207. package/dist/pre.js +15 -0
  208. package/dist/pre.js.map +1 -0
  209. package/dist/pre.mjs +15 -0
  210. package/dist/pre.mjs.map +1 -0
  211. package/dist/progress.d.mts +2 -1
  212. package/dist/progress.d.ts +2 -1
  213. package/dist/progress.js +1 -1
  214. package/dist/progress.js.map +1 -1
  215. package/dist/progress.mjs +1 -1
  216. package/dist/progress.mjs.map +1 -1
  217. package/dist/quote.d.mts +8 -0
  218. package/dist/quote.d.ts +8 -0
  219. package/dist/quote.js +15 -0
  220. package/dist/quote.js.map +1 -0
  221. package/dist/quote.mjs +15 -0
  222. package/dist/quote.mjs.map +1 -0
  223. package/dist/radio-group.d.mts +3 -1
  224. package/dist/radio-group.d.ts +3 -1
  225. package/dist/radio-group.js.map +1 -1
  226. package/dist/radio-group.mjs.map +1 -1
  227. package/dist/resizable.d.mts +4 -4
  228. package/dist/resizable.d.ts +4 -4
  229. package/dist/resizable.js +1 -1
  230. package/dist/resizable.js.map +1 -1
  231. package/dist/resizable.mjs +1 -1
  232. package/dist/resizable.mjs.map +1 -1
  233. package/dist/scroll-area.d.mts +4 -2
  234. package/dist/scroll-area.d.ts +4 -2
  235. package/dist/scroll-area.js +6 -6
  236. package/dist/scroll-area.js.map +1 -1
  237. package/dist/scroll-area.mjs +6 -6
  238. package/dist/scroll-area.mjs.map +1 -1
  239. package/dist/section.d.mts +8 -0
  240. package/dist/section.d.ts +8 -0
  241. package/dist/section.js +15 -0
  242. package/dist/section.js.map +1 -0
  243. package/dist/section.mjs +15 -0
  244. package/dist/section.mjs.map +1 -0
  245. package/dist/select.d.mts +11 -1
  246. package/dist/select.d.ts +11 -1
  247. package/dist/select.js +2 -2
  248. package/dist/select.mjs +1 -1
  249. package/dist/separator.d.mts +2 -1
  250. package/dist/separator.d.ts +2 -1
  251. package/dist/separator.js.map +1 -1
  252. package/dist/separator.mjs.map +1 -1
  253. package/dist/sheet.d.mts +18 -8
  254. package/dist/sheet.d.ts +18 -8
  255. package/dist/sheet.js.map +1 -1
  256. package/dist/sheet.mjs.map +1 -1
  257. package/dist/skeleton.d.mts +3 -2
  258. package/dist/skeleton.d.ts +3 -2
  259. package/dist/skeleton.js +1 -4
  260. package/dist/skeleton.js.map +1 -1
  261. package/dist/skeleton.mjs +1 -4
  262. package/dist/skeleton.mjs.map +1 -1
  263. package/dist/slider.d.mts +2 -1
  264. package/dist/slider.d.ts +2 -1
  265. package/dist/slider.js.map +1 -1
  266. package/dist/slider.mjs.map +1 -1
  267. package/dist/sonner.d.mts +1 -1
  268. package/dist/sonner.d.ts +1 -1
  269. package/dist/sonner.js.map +1 -1
  270. package/dist/sonner.mjs.map +1 -1
  271. package/dist/strong.d.mts +8 -0
  272. package/dist/strong.d.ts +8 -0
  273. package/dist/strong.js +15 -0
  274. package/dist/strong.js.map +1 -0
  275. package/dist/strong.mjs +15 -0
  276. package/dist/strong.mjs.map +1 -0
  277. package/dist/styles.css +1 -1
  278. package/dist/styles.css.map +1 -1
  279. package/dist/switch.d.mts +2 -1
  280. package/dist/switch.d.ts +2 -1
  281. package/dist/switch.js.map +1 -1
  282. package/dist/switch.mjs.map +1 -1
  283. package/dist/table.d.mts +17 -9
  284. package/dist/table.d.ts +17 -9
  285. package/dist/table.js +75 -58
  286. package/dist/table.js.map +1 -1
  287. package/dist/table.mjs +75 -58
  288. package/dist/table.mjs.map +1 -1
  289. package/dist/tabs.d.mts +5 -1
  290. package/dist/tabs.d.ts +5 -1
  291. package/dist/tabs.js.map +1 -1
  292. package/dist/tabs.mjs.map +1 -1
  293. package/dist/text.d.mts +14 -0
  294. package/dist/text.d.ts +14 -0
  295. package/dist/text.js +15 -0
  296. package/dist/text.js.map +1 -0
  297. package/dist/text.mjs +15 -0
  298. package/dist/text.mjs.map +1 -0
  299. package/dist/textarea.d.mts +3 -2
  300. package/dist/textarea.d.ts +3 -2
  301. package/dist/textarea.js +15 -13
  302. package/dist/textarea.js.map +1 -1
  303. package/dist/textarea.mjs +15 -13
  304. package/dist/textarea.mjs.map +1 -1
  305. package/dist/toggle-group.d.mts +4 -2
  306. package/dist/toggle-group.d.ts +4 -2
  307. package/dist/toggle-group.js +2 -2
  308. package/dist/toggle-group.js.map +1 -1
  309. package/dist/toggle-group.mjs +1 -1
  310. package/dist/toggle-group.mjs.map +1 -1
  311. package/dist/toggle.d.mts +2 -1
  312. package/dist/toggle.d.ts +2 -1
  313. package/dist/toggle.js +2 -2
  314. package/dist/toggle.mjs +1 -1
  315. package/dist/tooltip.d.mts +6 -1
  316. package/dist/tooltip.d.ts +6 -1
  317. package/dist/tooltip.js.map +1 -1
  318. package/dist/tooltip.mjs.map +1 -1
  319. package/package.json +67 -7
  320. package/src/accordion.tsx +17 -4
  321. package/src/alert-dialog.tsx +26 -7
  322. package/src/alert.tsx +35 -25
  323. package/src/aspect-ratio.tsx +2 -1
  324. package/src/avatar.tsx +13 -3
  325. package/src/badge.tsx +10 -9
  326. package/src/blockquote.tsx +25 -0
  327. package/src/box.tsx +33 -0
  328. package/src/breadcrumb.tsx +70 -60
  329. package/src/button.tsx +4 -2
  330. package/src/calendar.tsx +3 -2
  331. package/src/card.tsx +59 -52
  332. package/src/carousel.tsx +76 -72
  333. package/src/checkbox.tsx +3 -2
  334. package/src/code.tsx +24 -0
  335. package/src/collapsible.tsx +11 -1
  336. package/src/command.tsx +47 -10
  337. package/src/container.tsx +25 -0
  338. package/src/context-menu.tsx +52 -16
  339. package/src/data-table.tsx +23 -11
  340. package/src/dialog.tsx +21 -5
  341. package/src/drawer.tsx +28 -6
  342. package/src/dropdown-menu.tsx +51 -15
  343. package/src/em.tsx +24 -0
  344. package/src/form.tsx +55 -38
  345. package/src/heading.tsx +25 -0
  346. package/src/hover-card.tsx +12 -2
  347. package/src/input-otp.tsx +45 -33
  348. package/src/input.tsx +17 -15
  349. package/src/kbd.tsx +34 -0
  350. package/src/label.tsx +3 -2
  351. package/src/menubar.tsx +48 -17
  352. package/src/navigation-menu.tsx +25 -5
  353. package/src/pagination.tsx +21 -9
  354. package/src/popover.tsx +18 -2
  355. package/src/pre.tsx +24 -0
  356. package/src/progress.tsx +4 -3
  357. package/src/quote.tsx +24 -0
  358. package/src/radio-group.tsx +10 -3
  359. package/src/resizable.tsx +2 -1
  360. package/src/scroll-area.tsx +18 -11
  361. package/src/section.tsx +24 -0
  362. package/src/select.tsx +27 -7
  363. package/src/separator.tsx +3 -2
  364. package/src/sheet.tsx +23 -5
  365. package/src/skeleton.tsx +3 -5
  366. package/src/slider.tsx +3 -2
  367. package/src/sonner.tsx +1 -1
  368. package/src/strong.tsx +24 -0
  369. package/src/switch.tsx +3 -2
  370. package/src/table.tsx +90 -78
  371. package/src/tabs.tsx +17 -4
  372. package/src/text.tsx +34 -0
  373. package/src/textarea.tsx +16 -16
  374. package/src/toggle-group.tsx +14 -4
  375. package/src/toggle.tsx +3 -2
  376. package/src/tooltip.tsx +12 -2
  377. package/dist/chunk-2D7SRYKN.js.map +0 -1
  378. package/dist/chunk-EDVCMWDT.mjs.map +0 -1
  379. package/dist/chunk-EIHWTXQ4.mjs.map +0 -1
  380. package/dist/chunk-ESWGFN3R.mjs.map +0 -1
  381. package/dist/chunk-KW5FJ62U.mjs.map +0 -1
  382. package/dist/chunk-LDYBRDAY.js.map +0 -1
  383. package/dist/chunk-OCLLX7EY.js.map +0 -1
  384. package/dist/chunk-PTD4AMHI.mjs.map +0 -1
  385. package/dist/chunk-RTKEO347.js.map +0 -1
@@ -36,11 +36,12 @@ import { cn } from "./utils";
36
36
  * Component: DataTableViewOptions
37
37
  * -------------------------------------------------------------------------- */
38
38
 
39
+ interface DataTableViewOptionsProps<TData> {
40
+ table: ReactTable.Table<TData>;
41
+ }
39
42
  function DataTableViewOptions<TData>({
40
43
  table,
41
- }: {
42
- table: ReactTable.Table<TData>;
43
- }): React.JSX.Element {
44
+ }: DataTableViewOptionsProps<TData>): React.JSX.Element {
44
45
  return (
45
46
  <DropdownMenu>
46
47
  <DropdownMenuTrigger asChild>
@@ -85,13 +86,15 @@ function DataTableViewOptions<TData>({
85
86
  * Component: DataTablePagination
86
87
  * -------------------------------------------------------------------------- */
87
88
 
89
+ interface DataTablePaginationProps<TData>
90
+ extends React.HTMLAttributes<HTMLDivElement> {
91
+ table: ReactTable.Table<TData>;
92
+ }
88
93
  function DataTablePagination<TData>({
89
94
  table,
90
95
  className,
91
96
  ...props
92
- }: React.HTMLAttributes<HTMLDivElement> & {
93
- table: ReactTable.Table<TData>;
94
- }): React.JSX.Element {
97
+ }: DataTablePaginationProps<TData>): React.JSX.Element {
95
98
  return (
96
99
  <div
97
100
  className={cn("flex items-center justify-between px-2", className)}
@@ -183,14 +186,16 @@ function DataTablePagination<TData>({
183
186
  * Component: DataTableColumnHeader
184
187
  * -------------------------------------------------------------------------- */
185
188
 
189
+ interface DataTableColumnHeaderProps<TData, TValue>
190
+ extends React.HTMLAttributes<HTMLDivElement> {
191
+ column: ReactTable.Column<TData, TValue>;
192
+ title: string;
193
+ }
186
194
  function DataTableColumnHeader<TData, TValue>({
187
195
  column,
188
196
  title,
189
197
  className,
190
- }: React.HTMLAttributes<HTMLDivElement> & {
191
- column: ReactTable.Column<TData, TValue>;
192
- title: string;
193
- }): React.JSX.Element {
198
+ }: DataTableColumnHeaderProps<TData, TValue>): React.JSX.Element {
194
199
  if (!column.getCanSort()) {
195
200
  return <div className={cn(className)}>{title}</div>;
196
201
  }
@@ -250,6 +255,13 @@ function DataTableColumnHeader<TData, TValue>({
250
255
  * Exports
251
256
  * -------------------------------------------------------------------------- */
252
257
 
253
- export { DataTableViewOptions, DataTablePagination, DataTableColumnHeader };
258
+ export {
259
+ DataTableViewOptions,
260
+ DataTablePagination,
261
+ DataTableColumnHeader,
262
+ type DataTableViewOptionsProps,
263
+ type DataTablePaginationProps,
264
+ type DataTableColumnHeaderProps,
265
+ };
254
266
 
255
267
  export * from "@tanstack/react-table";
package/src/dialog.tsx CHANGED
@@ -9,27 +9,31 @@ import { cn } from "./utils";
9
9
  * Component: Dialog
10
10
  * -------------------------------------------------------------------------- */
11
11
 
12
+ type DialogProps = DialogPrimitive.DialogProps;
12
13
  const Dialog = DialogPrimitive.Root;
13
14
 
14
15
  /* -----------------------------------------------------------------------------
15
16
  * Component: DialogTrigger
16
17
  * -------------------------------------------------------------------------- */
17
18
 
19
+ type DialogTriggerProps = DialogPrimitive.DialogTriggerProps;
18
20
  const DialogTrigger = DialogPrimitive.Trigger;
19
21
 
20
22
  /* -----------------------------------------------------------------------------
21
23
  * Component: DialogClose
22
24
  * -------------------------------------------------------------------------- */
23
25
 
26
+ type DialogCloseProps = DialogPrimitive.DialogCloseProps;
24
27
  const DialogClose = DialogPrimitive.Close;
25
28
 
26
29
  /* -----------------------------------------------------------------------------
27
30
  * Component: DialogContent
28
31
  * -------------------------------------------------------------------------- */
29
32
 
33
+ type DialogContentProps = DialogPrimitive.DialogContentProps;
30
34
  const DialogContent = React.forwardRef<
31
35
  React.ElementRef<typeof DialogPrimitive.Content>,
32
- DialogPrimitive.DialogContentProps
36
+ DialogContentProps
33
37
  >(({ className, children, ...props }, ref) => (
34
38
  <DialogPrimitive.Portal>
35
39
  <DialogPrimitive.Overlay
@@ -63,10 +67,11 @@ DialogContent.displayName = DialogPrimitive.Content.displayName;
63
67
  * Component: DialogHeader
64
68
  * -------------------------------------------------------------------------- */
65
69
 
70
+ type DialogHeaderProps = React.HTMLAttributes<HTMLDivElement>;
66
71
  function DialogHeader({
67
72
  className,
68
73
  ...props
69
- }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
74
+ }: DialogHeaderProps): React.JSX.Element {
70
75
  return (
71
76
  <div
72
77
  className={cn(
@@ -82,10 +87,11 @@ function DialogHeader({
82
87
  * Component: DialogFooter
83
88
  * -------------------------------------------------------------------------- */
84
89
 
90
+ type DialogFooterProps = React.HTMLAttributes<HTMLDivElement>;
85
91
  function DialogFooter({
86
92
  className,
87
93
  ...props
88
- }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
94
+ }: DialogFooterProps): React.JSX.Element {
89
95
  return (
90
96
  <div
91
97
  className={cn(
@@ -101,9 +107,10 @@ function DialogFooter({
101
107
  * Component: DialogTitle
102
108
  * -------------------------------------------------------------------------- */
103
109
 
110
+ type DialogTitleProps = DialogPrimitive.DialogTitleProps;
104
111
  const DialogTitle = React.forwardRef<
105
112
  React.ElementRef<typeof DialogPrimitive.Title>,
106
- DialogPrimitive.DialogTitleProps
113
+ DialogTitleProps
107
114
  >(({ className, ...props }, ref) => (
108
115
  <DialogPrimitive.Title
109
116
  ref={ref}
@@ -120,9 +127,10 @@ DialogTitle.displayName = DialogPrimitive.Title.displayName;
120
127
  * Component: DialogDescription
121
128
  * -------------------------------------------------------------------------- */
122
129
 
130
+ type DialogDescriptionProps = DialogPrimitive.DialogDescriptionProps;
123
131
  const DialogDescription = React.forwardRef<
124
132
  React.ElementRef<typeof DialogPrimitive.Description>,
125
- DialogPrimitive.DialogDescriptionProps
133
+ DialogDescriptionProps
126
134
  >(({ className, ...props }, ref) => (
127
135
  <DialogPrimitive.Description
128
136
  ref={ref}
@@ -145,4 +153,12 @@ export {
145
153
  DialogFooter,
146
154
  DialogTitle,
147
155
  DialogDescription,
156
+ type DialogProps,
157
+ type DialogTriggerProps,
158
+ type DialogCloseProps,
159
+ type DialogContentProps,
160
+ type DialogHeaderProps,
161
+ type DialogFooterProps,
162
+ type DialogTitleProps,
163
+ type DialogDescriptionProps,
148
164
  };
package/src/drawer.tsx CHANGED
@@ -8,10 +8,11 @@ import { cn } from "./utils";
8
8
  * Component: Drawer
9
9
  * -------------------------------------------------------------------------- */
10
10
 
11
+ type DrawerProps = React.ComponentProps<typeof DrawerPrimitive.Root>;
11
12
  function Drawer({
12
13
  shouldScaleBackground = true,
13
14
  ...props
14
- }: React.ComponentProps<typeof DrawerPrimitive.Root>): React.JSX.Element {
15
+ }: DrawerProps): React.JSX.Element {
15
16
  return (
16
17
  <DrawerPrimitive.Root
17
18
  shouldScaleBackground={shouldScaleBackground}
@@ -24,21 +25,26 @@ function Drawer({
24
25
  * Component: DrawerTrigger
25
26
  * -------------------------------------------------------------------------- */
26
27
 
28
+ type DrawerTriggerProps = React.ComponentProps<typeof DrawerPrimitive.Trigger>;
27
29
  const DrawerTrigger = DrawerPrimitive.Trigger;
28
30
 
29
31
  /* -----------------------------------------------------------------------------
30
32
  * Component: DrawerClose
31
33
  * -------------------------------------------------------------------------- */
32
34
 
35
+ type DrawerCloseProps = React.ComponentProps<typeof DrawerPrimitive.Close>;
33
36
  const DrawerClose = DrawerPrimitive.Close;
34
37
 
35
38
  /* -----------------------------------------------------------------------------
36
39
  * Component: DrawerContent
37
40
  * -------------------------------------------------------------------------- */
38
41
 
42
+ type DrawerContentProps = React.ComponentPropsWithoutRef<
43
+ typeof DrawerPrimitive.Content
44
+ >;
39
45
  const DrawerContent = React.forwardRef<
40
46
  React.ElementRef<typeof DrawerPrimitive.Content>,
41
- React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>
47
+ DrawerContentProps
42
48
  >(({ className, children, ...props }, ref) => (
43
49
  <DrawerPrimitive.Portal>
44
50
  <DrawerPrimitive.Overlay className="fixed inset-0 z-50 bg-black/80" />
@@ -61,10 +67,11 @@ DrawerContent.displayName = "DrawerContent";
61
67
  * Component: DrawerHeader
62
68
  * -------------------------------------------------------------------------- */
63
69
 
70
+ type DrawerHeaderProps = React.HTMLAttributes<HTMLDivElement>;
64
71
  function DrawerHeader({
65
72
  className,
66
73
  ...props
67
- }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
74
+ }: DrawerHeaderProps): React.JSX.Element {
68
75
  return (
69
76
  <div
70
77
  className={cn("grid gap-1.5 p-4 text-center sm:text-left", className)}
@@ -77,10 +84,11 @@ function DrawerHeader({
77
84
  * Component: DrawerFooter
78
85
  * -------------------------------------------------------------------------- */
79
86
 
87
+ type DrawerFooterProps = React.HTMLAttributes<HTMLDivElement>;
80
88
  function DrawerFooter({
81
89
  className,
82
90
  ...props
83
- }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
91
+ }: DrawerFooterProps): React.JSX.Element {
84
92
  return (
85
93
  <div
86
94
  className={cn("mt-auto flex flex-col gap-2 p-4", className)}
@@ -93,9 +101,12 @@ function DrawerFooter({
93
101
  * Component: DrawerTitle
94
102
  * -------------------------------------------------------------------------- */
95
103
 
104
+ type DrawerTitleProps = React.ComponentPropsWithoutRef<
105
+ typeof DrawerPrimitive.Title
106
+ >;
96
107
  const DrawerTitle = React.forwardRef<
97
108
  React.ElementRef<typeof DrawerPrimitive.Title>,
98
- React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>
109
+ DrawerTitleProps
99
110
  >(({ className, ...props }, ref) => (
100
111
  <DrawerPrimitive.Title
101
112
  ref={ref}
@@ -112,9 +123,12 @@ DrawerTitle.displayName = DrawerPrimitive.Title.displayName;
112
123
  * Component: DrawerDescription
113
124
  * -------------------------------------------------------------------------- */
114
125
 
126
+ type DrawerDescriptionProps = React.ComponentPropsWithoutRef<
127
+ typeof DrawerPrimitive.Description
128
+ >;
115
129
  const DrawerDescription = React.forwardRef<
116
130
  React.ElementRef<typeof DrawerPrimitive.Description>,
117
- React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>
131
+ DrawerDescriptionProps
118
132
  >(({ className, ...props }, ref) => (
119
133
  <DrawerPrimitive.Description
120
134
  ref={ref}
@@ -137,4 +151,12 @@ export {
137
151
  DrawerFooter,
138
152
  DrawerTitle,
139
153
  DrawerDescription,
154
+ type DrawerProps,
155
+ type DrawerTriggerProps,
156
+ type DrawerCloseProps,
157
+ type DrawerContentProps,
158
+ type DrawerHeaderProps,
159
+ type DrawerFooterProps,
160
+ type DrawerTitleProps,
161
+ type DrawerDescriptionProps,
140
162
  };
@@ -13,41 +13,49 @@ import { cn } from "./utils";
13
13
  * Component: DropdownMenu
14
14
  * -------------------------------------------------------------------------- */
15
15
 
16
+ type DropdownMenuProps = DropdownMenuPrimitive.DropdownMenuProps;
16
17
  const DropdownMenu = DropdownMenuPrimitive.Root;
17
18
 
18
19
  /* -----------------------------------------------------------------------------
19
20
  * Component: DropdownMenuTrigger
20
21
  * -------------------------------------------------------------------------- */
21
22
 
23
+ type DropdownMenuTriggerProps = DropdownMenuPrimitive.DropdownMenuTriggerProps;
22
24
  const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
23
25
 
24
26
  /* -----------------------------------------------------------------------------
25
27
  * Component: DropdownMenuGroup
26
28
  * -------------------------------------------------------------------------- */
27
29
 
30
+ type DropdownMenuGroupProps = DropdownMenuPrimitive.DropdownMenuGroupProps;
28
31
  const DropdownMenuGroup = DropdownMenuPrimitive.Group;
29
32
 
30
33
  /* -----------------------------------------------------------------------------
31
34
  * Component: DropdownMenuSub
32
35
  * -------------------------------------------------------------------------- */
33
36
 
37
+ type DropdownMenuSubProps = DropdownMenuPrimitive.DropdownMenuSubProps;
34
38
  const DropdownMenuSub = DropdownMenuPrimitive.Sub;
35
39
 
36
40
  /* -----------------------------------------------------------------------------
37
41
  * Component: DropdownMenuSubTrigger
38
42
  * -------------------------------------------------------------------------- */
39
43
 
44
+ type DropdownMenuRadioGroupProps =
45
+ DropdownMenuPrimitive.DropdownMenuRadioGroupProps;
40
46
  const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
41
47
 
42
48
  /* -----------------------------------------------------------------------------
43
49
  * Component: DropdownMenuSubTrigger
44
50
  * -------------------------------------------------------------------------- */
45
51
 
52
+ interface DropdownMenuSubTriggerProps
53
+ extends DropdownMenuPrimitive.DropdownMenuSubTriggerProps {
54
+ inset?: boolean;
55
+ }
46
56
  const DropdownMenuSubTrigger = React.forwardRef<
47
57
  React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,
48
- DropdownMenuPrimitive.DropdownMenuSubTriggerProps & {
49
- inset?: boolean;
50
- }
58
+ DropdownMenuSubTriggerProps
51
59
  >(({ className, inset, children, ...props }, ref) => (
52
60
  <DropdownMenuPrimitive.SubTrigger
53
61
  ref={ref}
@@ -69,9 +77,11 @@ DropdownMenuSubTrigger.displayName =
69
77
  * Component: DropdownMenuSubContent
70
78
  * -------------------------------------------------------------------------- */
71
79
 
80
+ type DropdownMenuSubContentProps =
81
+ DropdownMenuPrimitive.DropdownMenuSubContentProps;
72
82
  const DropdownMenuSubContent = React.forwardRef<
73
83
  React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
74
- DropdownMenuPrimitive.DropdownMenuSubContentProps
84
+ DropdownMenuSubContentProps
75
85
  >(({ className, ...props }, ref) => (
76
86
  <DropdownMenuPrimitive.Portal>
77
87
  <DropdownMenuPrimitive.SubContent
@@ -91,9 +101,10 @@ DropdownMenuSubContent.displayName =
91
101
  * Component: DropdownMenuContent
92
102
  * -------------------------------------------------------------------------- */
93
103
 
104
+ type DropdownMenuContentProps = DropdownMenuPrimitive.DropdownMenuContentProps;
94
105
  const DropdownMenuContent = React.forwardRef<
95
106
  React.ElementRef<typeof DropdownMenuPrimitive.Content>,
96
- DropdownMenuPrimitive.DropdownMenuContentProps
107
+ DropdownMenuContentProps
97
108
  >(({ className, sideOffset = 4, ...props }, ref) => (
98
109
  <DropdownMenuPrimitive.Portal>
99
110
  <DropdownMenuPrimitive.Content
@@ -113,11 +124,13 @@ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
113
124
  * Component: DropdownMenuItem
114
125
  * -------------------------------------------------------------------------- */
115
126
 
127
+ interface DropdownMenuItemProps
128
+ extends DropdownMenuPrimitive.DropdownMenuItemProps {
129
+ inset?: boolean;
130
+ }
116
131
  const DropdownMenuItem = React.forwardRef<
117
132
  React.ElementRef<typeof DropdownMenuPrimitive.Item>,
118
- DropdownMenuPrimitive.DropdownMenuItemProps & {
119
- inset?: boolean;
120
- }
133
+ DropdownMenuItemProps
121
134
  >(({ className, inset, ...props }, ref) => (
122
135
  <DropdownMenuPrimitive.Item
123
136
  ref={ref}
@@ -135,9 +148,11 @@ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
135
148
  * Component: DropdownMenuCheckboxItem
136
149
  * -------------------------------------------------------------------------- */
137
150
 
151
+ type DropdownMenuCheckboxItemProps =
152
+ DropdownMenuPrimitive.DropdownMenuCheckboxItemProps;
138
153
  const DropdownMenuCheckboxItem = React.forwardRef<
139
154
  React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,
140
- DropdownMenuPrimitive.DropdownMenuCheckboxItemProps
155
+ DropdownMenuCheckboxItemProps
141
156
  >(({ className, children, checked, ...props }, ref) => (
142
157
  <DropdownMenuPrimitive.CheckboxItem
143
158
  ref={ref}
@@ -163,9 +178,11 @@ DropdownMenuCheckboxItem.displayName =
163
178
  * Component: DropdownMenuRadioItem
164
179
  * -------------------------------------------------------------------------- */
165
180
 
181
+ type DropdownMenuRadioItemProps =
182
+ DropdownMenuPrimitive.DropdownMenuRadioItemProps;
166
183
  const DropdownMenuRadioItem = React.forwardRef<
167
184
  React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,
168
- DropdownMenuPrimitive.DropdownMenuRadioItemProps
185
+ DropdownMenuRadioItemProps
169
186
  >(({ className, children, ...props }, ref) => (
170
187
  <DropdownMenuPrimitive.RadioItem
171
188
  ref={ref}
@@ -189,11 +206,13 @@ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
189
206
  * Component: DropdownMenuLabel
190
207
  * -------------------------------------------------------------------------- */
191
208
 
209
+ interface DropdownMenuLabelProps
210
+ extends DropdownMenuPrimitive.DropdownMenuLabelProps {
211
+ inset?: boolean;
212
+ }
192
213
  const DropdownMenuLabel = React.forwardRef<
193
214
  React.ElementRef<typeof DropdownMenuPrimitive.Label>,
194
- DropdownMenuPrimitive.DropdownMenuLabelProps & {
195
- inset?: boolean;
196
- }
215
+ DropdownMenuLabelProps
197
216
  >(({ className, inset, ...props }, ref) => (
198
217
  <DropdownMenuPrimitive.Label
199
218
  ref={ref}
@@ -211,9 +230,11 @@ DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
211
230
  * Component: DropdownMenuSeparator
212
231
  * -------------------------------------------------------------------------- */
213
232
 
233
+ type DropdownMenuSeparatorProps =
234
+ DropdownMenuPrimitive.DropdownMenuSeparatorProps;
214
235
  const DropdownMenuSeparator = React.forwardRef<
215
236
  React.ElementRef<typeof DropdownMenuPrimitive.Separator>,
216
- DropdownMenuPrimitive.DropdownMenuSeparatorProps
237
+ DropdownMenuSeparatorProps
217
238
  >(({ className, ...props }, ref) => (
218
239
  <DropdownMenuPrimitive.Separator
219
240
  ref={ref}
@@ -227,10 +248,11 @@ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
227
248
  * Component: DropdownMenuShortcut
228
249
  * -------------------------------------------------------------------------- */
229
250
 
251
+ type DropdownMenuShortcutProps = React.HTMLAttributes<HTMLSpanElement>;
230
252
  function DropdownMenuShortcut({
231
253
  className,
232
254
  ...props
233
- }: React.HTMLAttributes<HTMLSpanElement>): React.JSX.Element {
255
+ }: DropdownMenuShortcutProps): React.JSX.Element {
234
256
  return (
235
257
  <span
236
258
  className={cn("ml-auto text-xs tracking-widest opacity-60", className)}
@@ -258,4 +280,18 @@ export {
258
280
  DropdownMenuSubContent,
259
281
  DropdownMenuSubTrigger,
260
282
  DropdownMenuRadioGroup,
283
+ type DropdownMenuProps,
284
+ type DropdownMenuTriggerProps,
285
+ type DropdownMenuContentProps,
286
+ type DropdownMenuItemProps,
287
+ type DropdownMenuCheckboxItemProps,
288
+ type DropdownMenuRadioItemProps,
289
+ type DropdownMenuLabelProps,
290
+ type DropdownMenuSeparatorProps,
291
+ type DropdownMenuShortcutProps,
292
+ type DropdownMenuGroupProps,
293
+ type DropdownMenuSubProps,
294
+ type DropdownMenuSubContentProps,
295
+ type DropdownMenuSubTriggerProps,
296
+ type DropdownMenuRadioGroupProps,
261
297
  };
package/src/em.tsx ADDED
@@ -0,0 +1,24 @@
1
+ import * as React from "react";
2
+ import { Slot } from "@radix-ui/react-slot";
3
+
4
+ /* -----------------------------------------------------------------------------
5
+ * Component: Em
6
+ * -------------------------------------------------------------------------- */
7
+
8
+ interface EmProps extends React.HTMLAttributes<HTMLElement> {
9
+ asChild?: boolean;
10
+ }
11
+ const Em = React.forwardRef<HTMLElement, EmProps>(
12
+ ({ asChild, ...props }, ref) => {
13
+ const Comp = asChild ? Slot : "em";
14
+
15
+ return <Comp ref={ref} {...props} />;
16
+ },
17
+ );
18
+ Em.displayName = "Em";
19
+
20
+ /* -----------------------------------------------------------------------------
21
+ * Exports
22
+ * -------------------------------------------------------------------------- */
23
+
24
+ export { Em, type EmProps };
package/src/form.tsx CHANGED
@@ -78,16 +78,21 @@ const useFormField = (): {
78
78
  * Component: Form
79
79
  * -------------------------------------------------------------------------- */
80
80
 
81
+ type FormProps = React.ComponentProps<typeof FormProvider>;
81
82
  const Form = FormProvider;
82
83
 
83
84
  /* -----------------------------------------------------------------------------
84
85
  * Component: FormField
85
86
  * -------------------------------------------------------------------------- */
86
87
 
88
+ type FormFieldProps<
89
+ TFieldValues extends FieldValues = FieldValues,
90
+ TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
91
+ > = ControllerProps<TFieldValues, TName>;
87
92
  function FormField<
88
93
  TFieldValues extends FieldValues = FieldValues,
89
94
  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
90
- >({ ...props }: ControllerProps<TFieldValues, TName>): React.JSX.Element {
95
+ >({ ...props }: FormFieldProps<TFieldValues, TName>): React.JSX.Element {
91
96
  return (
92
97
  <FormFieldContext.Provider value={{ name: props.name }}>
93
98
  <Controller {...props} />
@@ -99,27 +104,30 @@ function FormField<
99
104
  * Component: FormItem
100
105
  * -------------------------------------------------------------------------- */
101
106
 
102
- const FormItem = React.forwardRef<
103
- HTMLDivElement,
104
- React.HTMLAttributes<HTMLDivElement>
105
- >(({ className, ...props }, ref) => {
106
- const id = React.useId();
107
-
108
- return (
109
- <FormItemContext.Provider value={{ id }}>
110
- <div ref={ref} className={cn("space-y-2", className)} {...props} />
111
- </FormItemContext.Provider>
112
- );
113
- });
107
+ type FormItemProps = React.HTMLAttributes<HTMLDivElement>;
108
+ const FormItem = React.forwardRef<HTMLDivElement, FormItemProps>(
109
+ ({ className, ...props }, ref) => {
110
+ const id = React.useId();
111
+
112
+ return (
113
+ <FormItemContext.Provider value={{ id }}>
114
+ <div ref={ref} className={cn("space-y-2", className)} {...props} />
115
+ </FormItemContext.Provider>
116
+ );
117
+ },
118
+ );
114
119
  FormItem.displayName = "FormItem";
115
120
 
116
121
  /* -----------------------------------------------------------------------------
117
122
  * Component: FormLabel
118
123
  * -------------------------------------------------------------------------- */
119
124
 
125
+ type FormLabelProps = React.ComponentPropsWithoutRef<
126
+ typeof LabelPrimitive.Root
127
+ >;
120
128
  const FormLabel = React.forwardRef<
121
129
  React.ElementRef<typeof LabelPrimitive.Root>,
122
- React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>
130
+ FormLabelProps
123
131
  >(({ className, ...props }, ref) => {
124
132
  const { error, formItemId } = useFormField();
125
133
 
@@ -138,9 +146,10 @@ FormLabel.displayName = "FormLabel";
138
146
  * Component: FormControl
139
147
  * -------------------------------------------------------------------------- */
140
148
 
149
+ type FormControlProps = React.ComponentPropsWithoutRef<typeof Slot>;
141
150
  const FormControl = React.forwardRef<
142
151
  React.ElementRef<typeof Slot>,
143
- React.ComponentPropsWithoutRef<typeof Slot>
152
+ FormControlProps
144
153
  >(({ ...props }, ref) => {
145
154
  const { error, formItemId, formDescriptionId, formMessageId } =
146
155
  useFormField();
@@ -163,9 +172,10 @@ FormControl.displayName = "FormControl";
163
172
  * Component: FormDescription
164
173
  * -------------------------------------------------------------------------- */
165
174
 
175
+ type FormDescriptionProps = React.HTMLAttributes<HTMLParagraphElement>;
166
176
  const FormDescription = React.forwardRef<
167
177
  HTMLParagraphElement,
168
- React.HTMLAttributes<HTMLParagraphElement>
178
+ FormDescriptionProps
169
179
  >(({ className, ...props }, ref) => {
170
180
  const { formDescriptionId } = useFormField();
171
181
 
@@ -184,28 +194,28 @@ FormDescription.displayName = "FormDescription";
184
194
  * Component: FormMessage
185
195
  * -------------------------------------------------------------------------- */
186
196
 
187
- const FormMessage = React.forwardRef<
188
- HTMLParagraphElement,
189
- React.HTMLAttributes<HTMLParagraphElement>
190
- >(({ className, children, ...props }, ref) => {
191
- const { error, formMessageId } = useFormField();
192
- const body = error ? String(error.message) : children;
193
-
194
- if (!body) {
195
- return null;
196
- }
197
-
198
- return (
199
- <p
200
- ref={ref}
201
- id={formMessageId}
202
- className={cn("text-destructive text-[0.8rem] font-medium", className)}
203
- {...props}
204
- >
205
- {body}
206
- </p>
207
- );
208
- });
197
+ type FormMessageProps = React.HTMLAttributes<HTMLParagraphElement>;
198
+ const FormMessage = React.forwardRef<HTMLParagraphElement, FormMessageProps>(
199
+ ({ className, children, ...props }, ref) => {
200
+ const { error, formMessageId } = useFormField();
201
+ const body = error ? String(error.message) : children;
202
+
203
+ if (!body) {
204
+ return null;
205
+ }
206
+
207
+ return (
208
+ <p
209
+ ref={ref}
210
+ id={formMessageId}
211
+ className={cn("text-destructive text-[0.8rem] font-medium", className)}
212
+ {...props}
213
+ >
214
+ {body}
215
+ </p>
216
+ );
217
+ },
218
+ );
209
219
  FormMessage.displayName = "FormMessage";
210
220
 
211
221
  /* -----------------------------------------------------------------------------
@@ -221,4 +231,11 @@ export {
221
231
  FormDescription,
222
232
  FormMessage,
223
233
  FormField,
234
+ type FormProps,
235
+ type FormItemProps,
236
+ type FormLabelProps,
237
+ type FormControlProps,
238
+ type FormDescriptionProps,
239
+ type FormMessageProps,
240
+ type FormFieldProps,
224
241
  };
@@ -0,0 +1,25 @@
1
+ import * as React from "react";
2
+ import { Slot } from "@radix-ui/react-slot";
3
+
4
+ /* -----------------------------------------------------------------------------
5
+ * Component: Heading
6
+ * -------------------------------------------------------------------------- */
7
+
8
+ interface HeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {
9
+ as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
10
+ asChild?: boolean;
11
+ }
12
+ const Heading = React.forwardRef<HTMLHeadingElement, HeadingProps>(
13
+ ({ asChild, as: Tag = "h1", ...props }, ref) => {
14
+ const Com = asChild ? Slot : Tag;
15
+
16
+ return <Com ref={ref} {...props} />;
17
+ },
18
+ );
19
+ Heading.displayName = "Heading";
20
+
21
+ /* -----------------------------------------------------------------------------
22
+ * Exports
23
+ * -------------------------------------------------------------------------- */
24
+
25
+ export { Heading, type HeadingProps };