@codefast/ui 0.0.9 → 0.0.11

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 (434) hide show
  1. package/dist/accordion.d.mts +7 -7
  2. package/dist/accordion.d.ts +7 -7
  3. package/dist/accordion.js +42 -32
  4. package/dist/accordion.js.map +1 -1
  5. package/dist/accordion.mjs +42 -32
  6. package/dist/accordion.mjs.map +1 -1
  7. package/dist/alert-dialog.d.mts +12 -12
  8. package/dist/alert-dialog.d.ts +12 -12
  9. package/dist/alert-dialog.js +47 -75
  10. package/dist/alert-dialog.js.map +1 -1
  11. package/dist/alert-dialog.mjs +47 -75
  12. package/dist/alert-dialog.mjs.map +1 -1
  13. package/dist/alert.js +5 -30
  14. package/dist/alert.js.map +1 -1
  15. package/dist/alert.mjs +5 -30
  16. package/dist/alert.mjs.map +1 -1
  17. package/dist/aspect-ratio.d.mts +1 -1
  18. package/dist/aspect-ratio.d.ts +1 -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 +6 -6
  22. package/dist/avatar.d.ts +6 -6
  23. package/dist/avatar.js +3 -16
  24. package/dist/avatar.js.map +1 -1
  25. package/dist/avatar.mjs +3 -16
  26. package/dist/avatar.mjs.map +1 -1
  27. package/dist/badge.js +1 -5
  28. package/dist/badge.js.map +1 -1
  29. package/dist/badge.mjs +1 -5
  30. package/dist/badge.mjs.map +1 -1
  31. package/dist/blockquote.js +4 -6
  32. package/dist/blockquote.js.map +1 -1
  33. package/dist/blockquote.mjs +4 -6
  34. package/dist/blockquote.mjs.map +1 -1
  35. package/dist/box.js +4 -6
  36. package/dist/box.js.map +1 -1
  37. package/dist/box.mjs +4 -6
  38. package/dist/box.mjs.map +1 -1
  39. package/dist/breadcrumb.js +30 -67
  40. package/dist/breadcrumb.js.map +1 -1
  41. package/dist/breadcrumb.mjs +30 -67
  42. package/dist/breadcrumb.mjs.map +1 -1
  43. package/dist/button.d.mts +1 -0
  44. package/dist/button.d.ts +1 -0
  45. package/dist/button.js +3 -2
  46. package/dist/button.mjs +2 -1
  47. package/dist/calendar.js +7 -19
  48. package/dist/calendar.js.map +1 -1
  49. package/dist/calendar.mjs +6 -18
  50. package/dist/calendar.mjs.map +1 -1
  51. package/dist/card.js +8 -55
  52. package/dist/card.js.map +1 -1
  53. package/dist/card.mjs +8 -55
  54. package/dist/card.mjs.map +1 -1
  55. package/dist/carousel.js +58 -64
  56. package/dist/carousel.js.map +1 -1
  57. package/dist/carousel.mjs +57 -63
  58. package/dist/carousel.mjs.map +1 -1
  59. package/dist/checkbox-cards.d.mts +15 -0
  60. package/dist/checkbox-cards.d.ts +15 -0
  61. package/dist/checkbox-cards.js +56 -0
  62. package/dist/checkbox-cards.js.map +1 -0
  63. package/dist/checkbox-cards.mjs +56 -0
  64. package/dist/checkbox-cards.mjs.map +1 -0
  65. package/dist/checkbox-group.d.mts +13 -0
  66. package/dist/checkbox-group.d.ts +13 -0
  67. package/dist/checkbox-group.js +44 -0
  68. package/dist/checkbox-group.js.map +1 -0
  69. package/dist/checkbox-group.mjs +44 -0
  70. package/dist/checkbox-group.mjs.map +1 -0
  71. package/dist/checkbox-group.primitive.d.mts +38 -0
  72. package/dist/checkbox-group.primitive.d.ts +38 -0
  73. package/dist/checkbox-group.primitive.js +19 -0
  74. package/dist/checkbox-group.primitive.js.map +1 -0
  75. package/dist/checkbox-group.primitive.mjs +19 -0
  76. package/dist/checkbox-group.primitive.mjs.map +1 -0
  77. package/dist/checkbox.d.mts +2 -2
  78. package/dist/checkbox.d.ts +2 -2
  79. package/dist/checkbox.js +5 -1
  80. package/dist/checkbox.js.map +1 -1
  81. package/dist/checkbox.mjs +5 -1
  82. package/dist/checkbox.mjs.map +1 -1
  83. package/dist/chunk-3ZZ3SRTJ.js +148 -0
  84. package/dist/chunk-3ZZ3SRTJ.js.map +1 -0
  85. package/dist/{chunk-MJDKD2K4.mjs → chunk-6J6VPUBP.mjs} +9 -10
  86. package/dist/chunk-6J6VPUBP.mjs.map +1 -0
  87. package/dist/{chunk-PKB2G726.js → chunk-7S4DOWLB.js} +9 -10
  88. package/dist/chunk-7S4DOWLB.js.map +1 -0
  89. package/dist/{chunk-JOJW7BBY.js → chunk-BWCO2ZQQ.js} +29 -8
  90. package/dist/chunk-BWCO2ZQQ.js.map +1 -0
  91. package/dist/chunk-EWS3N4OZ.mjs +148 -0
  92. package/dist/chunk-EWS3N4OZ.mjs.map +1 -0
  93. package/dist/{chunk-PIU627A3.mjs → chunk-FGI3JA75.mjs} +1 -1
  94. package/dist/chunk-FGI3JA75.mjs.map +1 -0
  95. package/dist/{chunk-GRKABVK4.js → chunk-IVYGBU4G.js} +1 -1
  96. package/dist/chunk-IVYGBU4G.js.map +1 -0
  97. package/dist/chunk-IXEJO7ZP.js +86 -0
  98. package/dist/chunk-IXEJO7ZP.js.map +1 -0
  99. package/dist/chunk-JULVZPCS.mjs +120 -0
  100. package/dist/chunk-JULVZPCS.mjs.map +1 -0
  101. package/dist/chunk-LNSEYAPJ.js +121 -0
  102. package/dist/chunk-LNSEYAPJ.js.map +1 -0
  103. package/dist/chunk-MDSPK3M6.js +54 -0
  104. package/dist/chunk-MDSPK3M6.js.map +1 -0
  105. package/dist/chunk-MOJNV3XZ.js +120 -0
  106. package/dist/chunk-MOJNV3XZ.js.map +1 -0
  107. package/dist/chunk-OK63Q6EJ.mjs +121 -0
  108. package/dist/chunk-OK63Q6EJ.mjs.map +1 -0
  109. package/dist/chunk-V2254PQL.mjs +54 -0
  110. package/dist/chunk-V2254PQL.mjs.map +1 -0
  111. package/dist/chunk-WFXEFJRB.mjs +77 -0
  112. package/dist/chunk-WFXEFJRB.mjs.map +1 -0
  113. package/dist/chunk-XCKLBP2V.mjs +86 -0
  114. package/dist/chunk-XCKLBP2V.mjs.map +1 -0
  115. package/dist/code.js +4 -6
  116. package/dist/code.js.map +1 -1
  117. package/dist/code.mjs +4 -6
  118. package/dist/code.mjs.map +1 -1
  119. package/dist/collapsible.d.mts +3 -3
  120. package/dist/collapsible.d.ts +3 -3
  121. package/dist/collapsible.js.map +1 -1
  122. package/dist/collapsible.mjs.map +1 -1
  123. package/dist/command.d.mts +11 -10
  124. package/dist/command.d.ts +11 -10
  125. package/dist/command.js +10 -44
  126. package/dist/command.js.map +1 -1
  127. package/dist/command.mjs +10 -44
  128. package/dist/command.mjs.map +1 -1
  129. package/dist/container.js +4 -6
  130. package/dist/container.js.map +1 -1
  131. package/dist/container.mjs +4 -6
  132. package/dist/container.mjs.map +1 -1
  133. package/dist/context-menu.d.mts +18 -18
  134. package/dist/context-menu.d.ts +18 -18
  135. package/dist/context-menu.js +108 -124
  136. package/dist/context-menu.js.map +1 -1
  137. package/dist/context-menu.mjs +109 -125
  138. package/dist/context-menu.mjs.map +1 -1
  139. package/dist/data-table.d.mts +1 -1
  140. package/dist/data-table.d.ts +1 -1
  141. package/dist/data-table.js +131 -149
  142. package/dist/data-table.js.map +1 -1
  143. package/dist/data-table.mjs +120 -138
  144. package/dist/data-table.mjs.map +1 -1
  145. package/dist/dialog.d.mts +9 -9
  146. package/dist/dialog.d.ts +9 -9
  147. package/dist/dialog.js +2 -2
  148. package/dist/dialog.mjs +1 -1
  149. package/dist/drawer.d.mts +2 -2
  150. package/dist/drawer.d.ts +2 -2
  151. package/dist/drawer.js +30 -63
  152. package/dist/drawer.js.map +1 -1
  153. package/dist/drawer.mjs +30 -63
  154. package/dist/drawer.mjs.map +1 -1
  155. package/dist/dropdown-menu.d.mts +16 -16
  156. package/dist/dropdown-menu.d.ts +16 -16
  157. package/dist/dropdown-menu.js +2 -2
  158. package/dist/dropdown-menu.mjs +1 -1
  159. package/dist/em.js +4 -6
  160. package/dist/em.js.map +1 -1
  161. package/dist/em.mjs +4 -6
  162. package/dist/em.mjs.map +1 -1
  163. package/dist/form.js +23 -54
  164. package/dist/form.js.map +1 -1
  165. package/dist/form.mjs +23 -54
  166. package/dist/form.mjs.map +1 -1
  167. package/dist/heading.js +4 -6
  168. package/dist/heading.js.map +1 -1
  169. package/dist/heading.mjs +4 -6
  170. package/dist/heading.mjs.map +1 -1
  171. package/dist/hover-card.d.mts +4 -4
  172. package/dist/hover-card.d.ts +4 -4
  173. package/dist/hover-card.js +15 -13
  174. package/dist/hover-card.js.map +1 -1
  175. package/dist/hover-card.mjs +15 -13
  176. package/dist/hover-card.mjs.map +1 -1
  177. package/dist/input-otp.js +32 -37
  178. package/dist/input-otp.js.map +1 -1
  179. package/dist/input-otp.mjs +32 -37
  180. package/dist/input-otp.mjs.map +1 -1
  181. package/dist/input.js +10 -14
  182. package/dist/input.js.map +1 -1
  183. package/dist/input.mjs +10 -14
  184. package/dist/input.mjs.map +1 -1
  185. package/dist/kbd.js +14 -16
  186. package/dist/kbd.js.map +1 -1
  187. package/dist/kbd.mjs +14 -16
  188. package/dist/kbd.mjs.map +1 -1
  189. package/dist/label.d.mts +2 -2
  190. package/dist/label.d.ts +2 -2
  191. package/dist/label.js +2 -2
  192. package/dist/label.mjs +1 -1
  193. package/dist/menubar.d.mts +21 -21
  194. package/dist/menubar.d.ts +21 -21
  195. package/dist/menubar.js +73 -93
  196. package/dist/menubar.js.map +1 -1
  197. package/dist/menubar.mjs +74 -94
  198. package/dist/menubar.mjs.map +1 -1
  199. package/dist/navigation-menu.d.mts +16 -16
  200. package/dist/navigation-menu.d.ts +16 -16
  201. package/dist/navigation-menu.js +89 -93
  202. package/dist/navigation-menu.js.map +1 -1
  203. package/dist/navigation-menu.mjs +89 -93
  204. package/dist/navigation-menu.mjs.map +1 -1
  205. package/dist/pagination.js +19 -58
  206. package/dist/pagination.js.map +1 -1
  207. package/dist/pagination.mjs +19 -58
  208. package/dist/pagination.mjs.map +1 -1
  209. package/dist/popover.d.mts +7 -7
  210. package/dist/popover.d.ts +7 -7
  211. package/dist/popover.js +16 -21
  212. package/dist/popover.js.map +1 -1
  213. package/dist/popover.mjs +16 -21
  214. package/dist/popover.mjs.map +1 -1
  215. package/dist/pre.js +4 -6
  216. package/dist/pre.js.map +1 -1
  217. package/dist/pre.mjs +4 -6
  218. package/dist/pre.mjs.map +1 -1
  219. package/dist/progress.d.mts +2 -2
  220. package/dist/progress.d.ts +2 -2
  221. package/dist/progress.js +1 -4
  222. package/dist/progress.js.map +1 -1
  223. package/dist/progress.mjs +1 -4
  224. package/dist/progress.mjs.map +1 -1
  225. package/dist/quote.js +4 -6
  226. package/dist/quote.js.map +1 -1
  227. package/dist/quote.mjs +4 -6
  228. package/dist/quote.mjs.map +1 -1
  229. package/dist/radio-cards.d.mts +9 -0
  230. package/dist/radio-cards.d.ts +9 -0
  231. package/dist/radio-cards.js +36 -0
  232. package/dist/radio-cards.js.map +1 -0
  233. package/dist/radio-cards.mjs +36 -0
  234. package/dist/radio-cards.mjs.map +1 -0
  235. package/dist/radio-group.d.mts +4 -4
  236. package/dist/radio-group.d.ts +4 -4
  237. package/dist/radio-group.js +3 -9
  238. package/dist/radio-group.js.map +1 -1
  239. package/dist/radio-group.mjs +3 -9
  240. package/dist/radio-group.mjs.map +1 -1
  241. package/dist/radio.d.mts +8 -0
  242. package/dist/radio.d.ts +8 -0
  243. package/dist/radio.js +35 -0
  244. package/dist/radio.js.map +1 -0
  245. package/dist/radio.mjs +35 -0
  246. package/dist/radio.mjs.map +1 -0
  247. package/dist/resizable.d.mts +2 -2
  248. package/dist/resizable.d.ts +2 -2
  249. package/dist/resizable.js +3 -5
  250. package/dist/resizable.js.map +1 -1
  251. package/dist/resizable.mjs +3 -5
  252. package/dist/resizable.mjs.map +1 -1
  253. package/dist/scroll-area.d.mts +4 -4
  254. package/dist/scroll-area.d.ts +4 -4
  255. package/dist/scroll-area.js +23 -29
  256. package/dist/scroll-area.js.map +1 -1
  257. package/dist/scroll-area.mjs +23 -29
  258. package/dist/scroll-area.mjs.map +1 -1
  259. package/dist/section.js +4 -6
  260. package/dist/section.js.map +1 -1
  261. package/dist/section.mjs +4 -6
  262. package/dist/section.mjs.map +1 -1
  263. package/dist/segmented.d.mts +22 -0
  264. package/dist/segmented.d.ts +22 -0
  265. package/dist/segmented.js +126 -0
  266. package/dist/segmented.js.map +1 -0
  267. package/dist/segmented.mjs +126 -0
  268. package/dist/segmented.mjs.map +1 -0
  269. package/dist/select.d.mts +17 -17
  270. package/dist/select.d.ts +17 -17
  271. package/dist/select.js +2 -2
  272. package/dist/select.mjs +1 -1
  273. package/dist/separator.d.mts +2 -2
  274. package/dist/separator.d.ts +2 -2
  275. package/dist/separator.js +1 -5
  276. package/dist/separator.js.map +1 -1
  277. package/dist/separator.mjs +1 -5
  278. package/dist/separator.mjs.map +1 -1
  279. package/dist/sheet.d.mts +9 -9
  280. package/dist/sheet.d.ts +9 -9
  281. package/dist/sheet.js +35 -76
  282. package/dist/sheet.js.map +1 -1
  283. package/dist/sheet.mjs +35 -76
  284. package/dist/sheet.mjs.map +1 -1
  285. package/dist/skeleton.js +1 -7
  286. package/dist/skeleton.js.map +1 -1
  287. package/dist/skeleton.mjs +1 -7
  288. package/dist/skeleton.mjs.map +1 -1
  289. package/dist/slider.d.mts +2 -2
  290. package/dist/slider.d.ts +2 -2
  291. package/dist/slider.js +10 -5
  292. package/dist/slider.js.map +1 -1
  293. package/dist/slider.mjs +10 -5
  294. package/dist/slider.mjs.map +1 -1
  295. package/dist/sonner.js +1 -6
  296. package/dist/sonner.js.map +1 -1
  297. package/dist/sonner.mjs +1 -6
  298. package/dist/sonner.mjs.map +1 -1
  299. package/dist/spinner.d.mts +8 -0
  300. package/dist/spinner.d.ts +8 -0
  301. package/dist/spinner.js +8 -0
  302. package/dist/spinner.js.map +1 -0
  303. package/dist/spinner.mjs +8 -0
  304. package/dist/spinner.mjs.map +1 -0
  305. package/dist/strong.js +4 -6
  306. package/dist/strong.js.map +1 -1
  307. package/dist/strong.mjs +4 -6
  308. package/dist/strong.mjs.map +1 -1
  309. package/dist/styles.css +1 -1
  310. package/dist/styles.css.map +1 -1
  311. package/dist/switch.d.mts +2 -2
  312. package/dist/switch.d.ts +2 -2
  313. package/dist/switch.js +2 -1
  314. package/dist/switch.js.map +1 -1
  315. package/dist/switch.mjs +2 -1
  316. package/dist/switch.mjs.map +1 -1
  317. package/dist/table.js +22 -80
  318. package/dist/table.js.map +1 -1
  319. package/dist/table.mjs +22 -80
  320. package/dist/table.mjs.map +1 -1
  321. package/dist/tabs.d.mts +7 -7
  322. package/dist/tabs.d.ts +7 -7
  323. package/dist/tabs.js +4 -2
  324. package/dist/tabs.js.map +1 -1
  325. package/dist/tabs.mjs +4 -2
  326. package/dist/tabs.mjs.map +1 -1
  327. package/dist/text.js +4 -6
  328. package/dist/text.js.map +1 -1
  329. package/dist/text.mjs +4 -6
  330. package/dist/text.mjs.map +1 -1
  331. package/dist/textarea.js +14 -15
  332. package/dist/textarea.js.map +1 -1
  333. package/dist/textarea.mjs +14 -15
  334. package/dist/textarea.mjs.map +1 -1
  335. package/dist/toggle-group.d.mts +2 -2
  336. package/dist/toggle-group.d.ts +2 -2
  337. package/dist/toggle-group.js +41 -34
  338. package/dist/toggle-group.js.map +1 -1
  339. package/dist/toggle-group.mjs +40 -33
  340. package/dist/toggle-group.mjs.map +1 -1
  341. package/dist/toggle.d.mts +2 -2
  342. package/dist/toggle.d.ts +2 -2
  343. package/dist/toggle.js +2 -2
  344. package/dist/toggle.mjs +1 -1
  345. package/dist/tooltip.d.mts +7 -7
  346. package/dist/tooltip.d.ts +7 -7
  347. package/dist/tooltip.js +15 -20
  348. package/dist/tooltip.js.map +1 -1
  349. package/dist/tooltip.mjs +15 -20
  350. package/dist/tooltip.mjs.map +1 -1
  351. package/package.json +43 -6
  352. package/src/accordion.tsx +53 -43
  353. package/src/alert-dialog.tsx +73 -92
  354. package/src/alert.tsx +24 -41
  355. package/src/aspect-ratio.tsx +2 -1
  356. package/src/avatar.tsx +19 -36
  357. package/src/badge.tsx +3 -7
  358. package/src/blockquote.tsx +9 -8
  359. package/src/box.tsx +7 -6
  360. package/src/breadcrumb.tsx +54 -63
  361. package/src/button.tsx +42 -16
  362. package/src/calendar.tsx +6 -22
  363. package/src/card.tsx +40 -56
  364. package/src/carousel.tsx +95 -81
  365. package/src/checkbox-cards.tsx +68 -0
  366. package/src/checkbox-group.primitive.tsx +199 -0
  367. package/src/checkbox-group.tsx +57 -0
  368. package/src/checkbox.tsx +10 -6
  369. package/src/code.tsx +8 -6
  370. package/src/collapsible.tsx +4 -3
  371. package/src/command.tsx +53 -90
  372. package/src/container.tsx +8 -6
  373. package/src/context-menu.tsx +163 -175
  374. package/src/data-table.tsx +26 -43
  375. package/src/dialog.tsx +58 -77
  376. package/src/drawer.tsx +48 -78
  377. package/src/dropdown-menu.tsx +143 -154
  378. package/src/em.tsx +8 -6
  379. package/src/form.tsx +61 -86
  380. package/src/heading.tsx +8 -6
  381. package/src/hover-card.tsx +22 -20
  382. package/src/input-otp.tsx +50 -48
  383. package/src/input.tsx +14 -15
  384. package/src/kbd.tsx +18 -16
  385. package/src/label.tsx +5 -5
  386. package/src/menubar.tsx +133 -149
  387. package/src/navigation-menu.tsx +110 -114
  388. package/src/pagination.tsx +26 -48
  389. package/src/popover.tsx +29 -31
  390. package/src/pre.tsx +8 -6
  391. package/src/progress.tsx +6 -9
  392. package/src/quote.tsx +8 -6
  393. package/src/radio-cards.tsx +50 -0
  394. package/src/radio-group.tsx +14 -24
  395. package/src/radio.tsx +44 -0
  396. package/src/resizable.tsx +5 -7
  397. package/src/scroll-area.tsx +29 -40
  398. package/src/section.tsx +8 -6
  399. package/src/segmented.tsx +176 -0
  400. package/src/select.tsx +106 -115
  401. package/src/separator.tsx +7 -14
  402. package/src/sheet.tsx +50 -76
  403. package/src/skeleton.tsx +2 -6
  404. package/src/slider.tsx +12 -10
  405. package/src/sonner.tsx +3 -7
  406. package/src/spinner.tsx +71 -0
  407. package/src/strong.tsx +8 -6
  408. package/src/switch.tsx +7 -6
  409. package/src/table.tsx +60 -82
  410. package/src/tabs.tsx +20 -18
  411. package/src/text.tsx +8 -8
  412. package/src/textarea.tsx +16 -14
  413. package/src/toggle-group.tsx +59 -58
  414. package/src/toggle.tsx +14 -13
  415. package/src/tooltip.tsx +28 -30
  416. package/dist/chunk-3BDLWZ3W.js +0 -158
  417. package/dist/chunk-3BDLWZ3W.js.map +0 -1
  418. package/dist/chunk-43YGVOCO.js +0 -135
  419. package/dist/chunk-43YGVOCO.js.map +0 -1
  420. package/dist/chunk-AJLEALVP.mjs +0 -112
  421. package/dist/chunk-AJLEALVP.mjs.map +0 -1
  422. package/dist/chunk-D6NQEMTJ.js +0 -112
  423. package/dist/chunk-D6NQEMTJ.js.map +0 -1
  424. package/dist/chunk-FATZHRHR.mjs +0 -56
  425. package/dist/chunk-FATZHRHR.mjs.map +0 -1
  426. package/dist/chunk-GRKABVK4.js.map +0 -1
  427. package/dist/chunk-JOJW7BBY.js.map +0 -1
  428. package/dist/chunk-KV4VL2ZF.mjs +0 -135
  429. package/dist/chunk-KV4VL2ZF.mjs.map +0 -1
  430. package/dist/chunk-MJDKD2K4.mjs.map +0 -1
  431. package/dist/chunk-NCEN3XBK.mjs +0 -158
  432. package/dist/chunk-NCEN3XBK.mjs.map +0 -1
  433. package/dist/chunk-PIU627A3.mjs.map +0 -1
  434. package/dist/chunk-PKB2G726.js.map +0 -1
@@ -2,83 +2,79 @@
2
2
 
3
3
  import * as React from "react";
4
4
  import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
5
- import {
6
- CheckIcon,
7
- ChevronRightIcon,
8
- DotFilledIcon,
9
- } from "@radix-ui/react-icons";
5
+ import { CheckIcon, ChevronRightIcon, DotFilledIcon } from "@radix-ui/react-icons";
10
6
  import { cn } from "./utils";
11
7
 
12
8
  /* -----------------------------------------------------------------------------
13
9
  * Component: DropdownMenu
14
10
  * -------------------------------------------------------------------------- */
15
11
 
16
- type DropdownMenuProps = DropdownMenuPrimitive.DropdownMenuProps;
12
+ type DropdownMenuProps = React.ComponentProps<typeof DropdownMenuPrimitive.Root>;
17
13
  const DropdownMenu = DropdownMenuPrimitive.Root;
18
14
 
19
15
  /* -----------------------------------------------------------------------------
20
16
  * Component: DropdownMenuTrigger
21
17
  * -------------------------------------------------------------------------- */
22
18
 
23
- type DropdownMenuTriggerProps = DropdownMenuPrimitive.DropdownMenuTriggerProps;
19
+ type DropdownMenuTriggerProps = React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Trigger>;
24
20
  const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
25
21
 
26
22
  /* -----------------------------------------------------------------------------
27
23
  * Component: DropdownMenuGroup
28
24
  * -------------------------------------------------------------------------- */
29
25
 
30
- type DropdownMenuGroupProps = DropdownMenuPrimitive.DropdownMenuGroupProps;
26
+ type DropdownMenuGroupProps = React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Group>;
31
27
  const DropdownMenuGroup = DropdownMenuPrimitive.Group;
32
28
 
33
29
  /* -----------------------------------------------------------------------------
34
30
  * Component: DropdownMenuSub
35
31
  * -------------------------------------------------------------------------- */
36
32
 
37
- type DropdownMenuSubProps = DropdownMenuPrimitive.DropdownMenuSubProps;
33
+ type DropdownMenuSubProps = React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Sub>;
38
34
  const DropdownMenuSub = DropdownMenuPrimitive.Sub;
39
35
 
40
36
  /* -----------------------------------------------------------------------------
41
37
  * Component: DropdownMenuSubTrigger
42
38
  * -------------------------------------------------------------------------- */
43
39
 
44
- type DropdownMenuRadioGroupProps =
45
- DropdownMenuPrimitive.DropdownMenuRadioGroupProps;
40
+ type DropdownMenuRadioGroupProps = React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioGroup>;
46
41
  const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
47
42
 
48
43
  /* -----------------------------------------------------------------------------
49
44
  * Component: DropdownMenuSubTrigger
50
45
  * -------------------------------------------------------------------------- */
51
46
 
52
- interface DropdownMenuSubTriggerProps
53
- extends DropdownMenuPrimitive.DropdownMenuSubTriggerProps {
47
+ type DropdownMenuSubTriggerElement = React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>;
48
+
49
+ interface DropdownMenuSubTriggerProps extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> {
54
50
  inset?: boolean;
55
51
  }
56
- const DropdownMenuSubTrigger = React.forwardRef<
57
- React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,
58
- DropdownMenuSubTriggerProps
59
- >(({ className, inset, children, ...props }, ref) => (
60
- <DropdownMenuPrimitive.SubTrigger
61
- ref={ref}
62
- className={cn(
63
- "focus:bg-accent data-[state=open]:bg-accent flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm focus:outline-none",
64
- inset && "pl-8",
65
- className,
66
- )}
67
- {...props}
68
- >
69
- {children}
70
- <ChevronRightIcon className="ml-auto size-4" />
71
- </DropdownMenuPrimitive.SubTrigger>
72
- ));
73
- DropdownMenuSubTrigger.displayName =
74
- DropdownMenuPrimitive.SubTrigger.displayName;
52
+
53
+ const DropdownMenuSubTrigger = React.forwardRef<DropdownMenuSubTriggerElement, DropdownMenuSubTriggerProps>(
54
+ ({ className, inset, children, ...props }, ref) => (
55
+ <DropdownMenuPrimitive.SubTrigger
56
+ ref={ref}
57
+ className={cn(
58
+ "focus:bg-accent data-[state=open]:bg-accent flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm focus:outline-none",
59
+ inset && "pl-8",
60
+ className,
61
+ )}
62
+ {...props}
63
+ >
64
+ {children}
65
+ <ChevronRightIcon className="ml-auto size-4" />
66
+ </DropdownMenuPrimitive.SubTrigger>
67
+ ),
68
+ );
69
+
70
+ DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
75
71
 
76
72
  /* -----------------------------------------------------------------------------
77
73
  * Component: DropdownMenuSubContent
78
74
  * -------------------------------------------------------------------------- */
79
75
 
80
- type DropdownMenuSubContentProps =
81
- DropdownMenuPrimitive.DropdownMenuSubContentProps;
76
+ type DropdownMenuSubContentProps = DropdownMenuPrimitive.DropdownMenuSubContentProps;
77
+
82
78
  const DropdownMenuSubContent = React.forwardRef<
83
79
  React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
84
80
  DropdownMenuSubContentProps
@@ -94,154 +90,154 @@ const DropdownMenuSubContent = React.forwardRef<
94
90
  />
95
91
  </DropdownMenuPrimitive.Portal>
96
92
  ));
97
- DropdownMenuSubContent.displayName =
98
- DropdownMenuPrimitive.SubContent.displayName;
93
+
94
+ DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
99
95
 
100
96
  /* -----------------------------------------------------------------------------
101
97
  * Component: DropdownMenuContent
102
98
  * -------------------------------------------------------------------------- */
103
99
 
104
- type DropdownMenuContentProps = DropdownMenuPrimitive.DropdownMenuContentProps;
105
- const DropdownMenuContent = React.forwardRef<
106
- React.ElementRef<typeof DropdownMenuPrimitive.Content>,
107
- DropdownMenuContentProps
108
- >(({ className, sideOffset = 4, ...props }, ref) => (
109
- <DropdownMenuPrimitive.Portal>
110
- <DropdownMenuPrimitive.Content
111
- ref={ref}
112
- sideOffset={sideOffset}
113
- className={cn(
114
- "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:data-[side=top]:slide-in-from-bottom-2 data-[state=open]:data-[side=right]:slide-in-from-left-2 data-[state=open]:data-[side=bottom]:slide-in-from-top-2 data-[state=open]:data-[side=left]:slide-in-from-right-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:data-[side=top]:slide-out-to-bottom-2 data-[state=closed]:data-[side=right]:slide-out-to-left-2 data-[state=closed]:data-[side=bottom]:slide-out-to-top-2 data-[state=closed]:data-[side=left]:slide-out-to-right-2 z-50 min-w-[8rem] rounded-md border p-1 shadow-md focus:outline-none",
115
- className,
116
- )}
117
- {...props}
118
- />
119
- </DropdownMenuPrimitive.Portal>
120
- ));
100
+ type DropdownMenuContentElement = React.ElementRef<typeof DropdownMenuPrimitive.Content>;
101
+ type DropdownMenuContentProps = React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>;
102
+
103
+ const DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, DropdownMenuContentProps>(
104
+ ({ className, sideOffset = 4, ...props }, ref) => (
105
+ <DropdownMenuPrimitive.Portal>
106
+ <DropdownMenuPrimitive.Content
107
+ ref={ref}
108
+ sideOffset={sideOffset}
109
+ className={cn(
110
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:data-[side=top]:slide-in-from-bottom-2 data-[state=open]:data-[side=right]:slide-in-from-left-2 data-[state=open]:data-[side=bottom]:slide-in-from-top-2 data-[state=open]:data-[side=left]:slide-in-from-right-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:data-[side=top]:slide-out-to-bottom-2 data-[state=closed]:data-[side=right]:slide-out-to-left-2 data-[state=closed]:data-[side=bottom]:slide-out-to-top-2 data-[state=closed]:data-[side=left]:slide-out-to-right-2 z-50 min-w-[8rem] rounded-md border p-1 shadow-md focus:outline-none",
111
+ className,
112
+ )}
113
+ {...props}
114
+ />
115
+ </DropdownMenuPrimitive.Portal>
116
+ ),
117
+ );
118
+
121
119
  DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
122
120
 
123
121
  /* -----------------------------------------------------------------------------
124
122
  * Component: DropdownMenuItem
125
123
  * -------------------------------------------------------------------------- */
126
124
 
127
- interface DropdownMenuItemProps
128
- extends DropdownMenuPrimitive.DropdownMenuItemProps {
125
+ type DropdownMenuItemElement = React.ElementRef<typeof DropdownMenuPrimitive.Item>;
126
+
127
+ interface DropdownMenuItemProps extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> {
129
128
  inset?: boolean;
130
129
  }
131
- const DropdownMenuItem = React.forwardRef<
132
- React.ElementRef<typeof DropdownMenuPrimitive.Item>,
133
- DropdownMenuItemProps
134
- >(({ className, inset, ...props }, ref) => (
135
- <DropdownMenuPrimitive.Item
136
- ref={ref}
137
- className={cn(
138
- "focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm transition-colors focus:outline-none aria-disabled:pointer-events-none aria-disabled:opacity-50",
139
- inset && "pl-8",
140
- className,
141
- )}
142
- {...props}
143
- />
144
- ));
130
+
131
+ const DropdownMenuItem = React.forwardRef<DropdownMenuItemElement, DropdownMenuItemProps>(
132
+ ({ className, inset, ...props }, ref) => (
133
+ <DropdownMenuPrimitive.Item
134
+ ref={ref}
135
+ className={cn(
136
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm transition-colors focus:outline-none aria-disabled:pointer-events-none aria-disabled:opacity-50",
137
+ inset && "pl-8",
138
+ className,
139
+ )}
140
+ {...props}
141
+ />
142
+ ),
143
+ );
144
+
145
145
  DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
146
146
 
147
147
  /* -----------------------------------------------------------------------------
148
148
  * Component: DropdownMenuCheckboxItem
149
149
  * -------------------------------------------------------------------------- */
150
150
 
151
- type DropdownMenuCheckboxItemProps =
152
- DropdownMenuPrimitive.DropdownMenuCheckboxItemProps;
153
- const DropdownMenuCheckboxItem = React.forwardRef<
154
- React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,
155
- DropdownMenuCheckboxItemProps
156
- >(({ className, children, checked, ...props }, ref) => (
157
- <DropdownMenuPrimitive.CheckboxItem
158
- ref={ref}
159
- className={cn(
160
- "focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm transition-colors focus:outline-none aria-disabled:pointer-events-none aria-disabled:opacity-50",
161
- className,
162
- )}
163
- checked={checked}
164
- {...props}
165
- >
166
- <span className="absolute left-2 flex size-3.5 items-center justify-center">
167
- <DropdownMenuPrimitive.ItemIndicator>
168
- <CheckIcon className="size-4" />
169
- </DropdownMenuPrimitive.ItemIndicator>
170
- </span>
171
- {children}
172
- </DropdownMenuPrimitive.CheckboxItem>
173
- ));
174
- DropdownMenuCheckboxItem.displayName =
175
- DropdownMenuPrimitive.CheckboxItem.displayName;
151
+ type DropdownMenuCheckboxItemElement = React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>;
152
+ type DropdownMenuCheckboxItemProps = React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>;
153
+
154
+ const DropdownMenuCheckboxItem = React.forwardRef<DropdownMenuCheckboxItemElement, DropdownMenuCheckboxItemProps>(
155
+ ({ className, children, checked, ...props }, ref) => (
156
+ <DropdownMenuPrimitive.CheckboxItem
157
+ ref={ref}
158
+ className={cn(
159
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm transition-colors focus:outline-none aria-disabled:pointer-events-none aria-disabled:opacity-50",
160
+ className,
161
+ )}
162
+ checked={checked}
163
+ {...props}
164
+ >
165
+ <span className="absolute left-2 flex size-3.5 items-center justify-center">
166
+ <DropdownMenuPrimitive.ItemIndicator>
167
+ <CheckIcon className="size-4" />
168
+ </DropdownMenuPrimitive.ItemIndicator>
169
+ </span>
170
+ {children}
171
+ </DropdownMenuPrimitive.CheckboxItem>
172
+ ),
173
+ );
174
+
175
+ DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
176
176
 
177
177
  /* -----------------------------------------------------------------------------
178
178
  * Component: DropdownMenuRadioItem
179
179
  * -------------------------------------------------------------------------- */
180
180
 
181
- type DropdownMenuRadioItemProps =
182
- DropdownMenuPrimitive.DropdownMenuRadioItemProps;
183
- const DropdownMenuRadioItem = React.forwardRef<
184
- React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,
185
- DropdownMenuRadioItemProps
186
- >(({ className, children, ...props }, ref) => (
187
- <DropdownMenuPrimitive.RadioItem
188
- ref={ref}
189
- className={cn(
190
- "focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm transition-colors focus:outline-none aria-disabled:pointer-events-none aria-disabled:opacity-50",
191
- className,
192
- )}
193
- {...props}
194
- >
195
- <span className="absolute left-2 flex size-3.5 items-center justify-center">
196
- <DropdownMenuPrimitive.ItemIndicator>
197
- <DotFilledIcon className="size-4 fill-current" />
198
- </DropdownMenuPrimitive.ItemIndicator>
199
- </span>
200
- {children}
201
- </DropdownMenuPrimitive.RadioItem>
202
- ));
181
+ type DropdownMenuRadioItemElement = React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>;
182
+ type DropdownMenuRadioItemProps = React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>;
183
+
184
+ const DropdownMenuRadioItem = React.forwardRef<DropdownMenuRadioItemElement, DropdownMenuRadioItemProps>(
185
+ ({ className, children, ...props }, ref) => (
186
+ <DropdownMenuPrimitive.RadioItem
187
+ ref={ref}
188
+ className={cn(
189
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm transition-colors focus:outline-none aria-disabled:pointer-events-none aria-disabled:opacity-50",
190
+ className,
191
+ )}
192
+ {...props}
193
+ >
194
+ <span className="absolute left-2 flex size-3.5 items-center justify-center">
195
+ <DropdownMenuPrimitive.ItemIndicator>
196
+ <DotFilledIcon className="size-4 fill-current" />
197
+ </DropdownMenuPrimitive.ItemIndicator>
198
+ </span>
199
+ {children}
200
+ </DropdownMenuPrimitive.RadioItem>
201
+ ),
202
+ );
203
+
203
204
  DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
204
205
 
205
206
  /* -----------------------------------------------------------------------------
206
207
  * Component: DropdownMenuLabel
207
208
  * -------------------------------------------------------------------------- */
208
209
 
209
- interface DropdownMenuLabelProps
210
- extends DropdownMenuPrimitive.DropdownMenuLabelProps {
210
+ type DropdownMenuLabelElement = React.ElementRef<typeof DropdownMenuPrimitive.Label>;
211
+
212
+ interface DropdownMenuLabelProps extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> {
211
213
  inset?: boolean;
212
214
  }
213
- const DropdownMenuLabel = React.forwardRef<
214
- React.ElementRef<typeof DropdownMenuPrimitive.Label>,
215
- DropdownMenuLabelProps
216
- >(({ className, inset, ...props }, ref) => (
217
- <DropdownMenuPrimitive.Label
218
- ref={ref}
219
- className={cn(
220
- "px-2 py-1.5 text-sm font-semibold",
221
- inset && "pl-8",
222
- className,
223
- )}
224
- {...props}
225
- />
226
- ));
215
+
216
+ const DropdownMenuLabel = React.forwardRef<DropdownMenuLabelElement, DropdownMenuLabelProps>(
217
+ ({ className, inset, ...props }, ref) => (
218
+ <DropdownMenuPrimitive.Label
219
+ ref={ref}
220
+ className={cn("px-2 py-1.5 text-sm font-semibold", inset && "pl-8", className)}
221
+ {...props}
222
+ />
223
+ ),
224
+ );
225
+
227
226
  DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
228
227
 
229
228
  /* -----------------------------------------------------------------------------
230
229
  * Component: DropdownMenuSeparator
231
230
  * -------------------------------------------------------------------------- */
232
231
 
233
- type DropdownMenuSeparatorProps =
234
- DropdownMenuPrimitive.DropdownMenuSeparatorProps;
235
- const DropdownMenuSeparator = React.forwardRef<
236
- React.ElementRef<typeof DropdownMenuPrimitive.Separator>,
237
- DropdownMenuSeparatorProps
238
- >(({ className, ...props }, ref) => (
239
- <DropdownMenuPrimitive.Separator
240
- ref={ref}
241
- className={cn("bg-muted -mx-1 my-1 h-px", className)}
242
- {...props}
243
- />
244
- ));
232
+ type DropdownMenuSeparatorElement = React.ElementRef<typeof DropdownMenuPrimitive.Separator>;
233
+ type DropdownMenuSeparatorProps = React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>;
234
+
235
+ const DropdownMenuSeparator = React.forwardRef<DropdownMenuSeparatorElement, DropdownMenuSeparatorProps>(
236
+ ({ className, ...props }, ref) => (
237
+ <DropdownMenuPrimitive.Separator ref={ref} className={cn("bg-muted -mx-1 my-1 h-px", className)} {...props} />
238
+ ),
239
+ );
240
+
245
241
  DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
246
242
 
247
243
  /* -----------------------------------------------------------------------------
@@ -249,16 +245,9 @@ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
249
245
  * -------------------------------------------------------------------------- */
250
246
 
251
247
  type DropdownMenuShortcutProps = React.HTMLAttributes<HTMLSpanElement>;
252
- function DropdownMenuShortcut({
253
- className,
254
- ...props
255
- }: DropdownMenuShortcutProps): React.JSX.Element {
256
- return (
257
- <span
258
- className={cn("ml-auto text-xs tracking-widest opacity-60", className)}
259
- {...props}
260
- />
261
- );
248
+
249
+ function DropdownMenuShortcut({ className, ...props }: DropdownMenuShortcutProps): React.JSX.Element {
250
+ return <span className={cn("ml-auto text-xs tracking-widest opacity-60", className)} {...props} />;
262
251
  }
263
252
 
264
253
  /* -----------------------------------------------------------------------------
package/src/em.tsx CHANGED
@@ -5,16 +5,18 @@ import { Slot } from "@radix-ui/react-slot";
5
5
  * Component: Em
6
6
  * -------------------------------------------------------------------------- */
7
7
 
8
+ type EmElement = HTMLElement;
9
+
8
10
  interface EmProps extends React.HTMLAttributes<HTMLElement> {
9
11
  asChild?: boolean;
10
12
  }
11
- const Em = React.forwardRef<HTMLElement, EmProps>(
12
- ({ asChild, ...props }, ref) => {
13
- const Comp = asChild ? Slot : "em";
14
13
 
15
- return <Comp ref={ref} {...props} />;
16
- },
17
- );
14
+ const Em = React.forwardRef<EmElement, EmProps>(({ asChild, ...props }, ref) => {
15
+ const Component = asChild ? Slot : "em";
16
+
17
+ return <Component ref={ref} {...props} />;
18
+ });
19
+
18
20
  Em.displayName = "Em";
19
21
 
20
22
  /* -----------------------------------------------------------------------------
package/src/form.tsx CHANGED
@@ -14,19 +14,7 @@ import { cn } from "./utils";
14
14
  import { Label } from "./label";
15
15
 
16
16
  /* -----------------------------------------------------------------------------
17
- * Context: FormItemContext
18
- * -------------------------------------------------------------------------- */
19
-
20
- interface FormItemContextValue {
21
- id: string;
22
- }
23
-
24
- const FormItemContext = React.createContext<FormItemContextValue>(
25
- {} as FormItemContextValue,
26
- );
27
-
28
- /* -----------------------------------------------------------------------------
29
- * Context: FormFieldContext
17
+ * Context: Form
30
18
  * -------------------------------------------------------------------------- */
31
19
 
32
20
  interface FormFieldContextValue<
@@ -36,9 +24,13 @@ interface FormFieldContextValue<
36
24
  name: TName;
37
25
  }
38
26
 
39
- const FormFieldContext = React.createContext<FormFieldContextValue>(
40
- {} as FormFieldContextValue,
41
- );
27
+ interface FormItemContextValue {
28
+ id: string;
29
+ }
30
+
31
+ const FormFieldContext = React.createContext<FormFieldContextValue | null>(null);
32
+
33
+ const FormItemContext = React.createContext<FormItemContextValue | null>(null);
42
34
 
43
35
  const useFormField = (): {
44
36
  invalid: boolean;
@@ -56,12 +48,12 @@ const useFormField = (): {
56
48
  const itemContext = React.useContext(FormItemContext);
57
49
  const { getFieldState, formState } = useFormContext();
58
50
 
59
- const fieldState = getFieldState(fieldContext.name, formState);
60
-
61
- if (!fieldContext) {
51
+ if (!fieldContext || !itemContext) {
62
52
  throw new Error("useFormField should be used within <FormField>");
63
53
  }
64
54
 
55
+ const fieldState = getFieldState(fieldContext.name, formState);
56
+
65
57
  const { id } = itemContext;
66
58
 
67
59
  return {
@@ -89,6 +81,7 @@ type FormFieldProps<
89
81
  TFieldValues extends FieldValues = FieldValues,
90
82
  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
91
83
  > = ControllerProps<TFieldValues, TName>;
84
+
92
85
  function FormField<
93
86
  TFieldValues extends FieldValues = FieldValues,
94
87
  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
@@ -104,118 +97,100 @@ function FormField<
104
97
  * Component: FormItem
105
98
  * -------------------------------------------------------------------------- */
106
99
 
100
+ type FormItemElement = HTMLDivElement;
107
101
  type FormItemProps = React.HTMLAttributes<HTMLDivElement>;
108
- const FormItem = React.forwardRef<HTMLDivElement, FormItemProps>(
109
- ({ className, ...props }, ref) => {
110
- const id = React.useId();
111
102
 
112
- return (
113
- <FormItemContext.Provider value={{ id }}>
114
- <div ref={ref} className={cn("space-y-2", className)} {...props} />
115
- </FormItemContext.Provider>
116
- );
117
- },
118
- );
103
+ const FormItem = React.forwardRef<FormItemElement, FormItemProps>(({ className, ...props }, ref) => {
104
+ const id = React.useId();
105
+
106
+ return (
107
+ <FormItemContext.Provider value={{ id }}>
108
+ <div ref={ref} className={cn("space-y-2", className)} {...props} />
109
+ </FormItemContext.Provider>
110
+ );
111
+ });
112
+
119
113
  FormItem.displayName = "FormItem";
120
114
 
121
115
  /* -----------------------------------------------------------------------------
122
116
  * Component: FormLabel
123
117
  * -------------------------------------------------------------------------- */
124
118
 
125
- type FormLabelProps = React.ComponentPropsWithoutRef<
126
- typeof LabelPrimitive.Root
127
- >;
128
- const FormLabel = React.forwardRef<
129
- React.ElementRef<typeof LabelPrimitive.Root>,
130
- FormLabelProps
131
- >(({ className, ...props }, ref) => {
119
+ type FormFieldElement = React.ElementRef<typeof LabelPrimitive.Root>;
120
+ type FormLabelProps = React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>;
121
+
122
+ const FormLabel = React.forwardRef<FormFieldElement, FormLabelProps>(({ className, ...props }, ref) => {
132
123
  const { error, formItemId } = useFormField();
133
124
 
134
- return (
135
- <Label
136
- ref={ref}
137
- className={cn(error && "text-destructive", className)}
138
- htmlFor={formItemId}
139
- {...props}
140
- />
141
- );
125
+ return <Label ref={ref} className={cn(error && "text-destructive", className)} htmlFor={formItemId} {...props} />;
142
126
  });
127
+
143
128
  FormLabel.displayName = "FormLabel";
144
129
 
145
130
  /* -----------------------------------------------------------------------------
146
131
  * Component: FormControl
147
132
  * -------------------------------------------------------------------------- */
148
133
 
134
+ type FormControlElement = React.ElementRef<typeof Slot>;
149
135
  type FormControlProps = React.ComponentPropsWithoutRef<typeof Slot>;
150
- const FormControl = React.forwardRef<
151
- React.ElementRef<typeof Slot>,
152
- FormControlProps
153
- >(({ ...props }, ref) => {
154
- const { error, formItemId, formDescriptionId, formMessageId } =
155
- useFormField();
136
+
137
+ const FormControl = React.forwardRef<FormControlElement, FormControlProps>(({ ...props }, ref) => {
138
+ const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
156
139
 
157
140
  return (
158
141
  <Slot
159
142
  ref={ref}
160
143
  id={formItemId}
161
- aria-describedby={
162
- !error ? formDescriptionId : `${formDescriptionId} ${formMessageId}`
163
- }
144
+ aria-describedby={!error ? formDescriptionId : `${formDescriptionId} ${formMessageId}`}
164
145
  aria-invalid={Boolean(error)}
165
146
  {...props}
166
147
  />
167
148
  );
168
149
  });
150
+
169
151
  FormControl.displayName = "FormControl";
170
152
 
171
153
  /* -----------------------------------------------------------------------------
172
154
  * Component: FormDescription
173
155
  * -------------------------------------------------------------------------- */
174
156
 
157
+ type FormDescriptionElement = HTMLParagraphElement;
175
158
  type FormDescriptionProps = React.HTMLAttributes<HTMLParagraphElement>;
176
- const FormDescription = React.forwardRef<
177
- HTMLParagraphElement,
178
- FormDescriptionProps
179
- >(({ className, ...props }, ref) => {
180
- const { formDescriptionId } = useFormField();
181
159
 
182
- return (
183
- <p
184
- ref={ref}
185
- id={formDescriptionId}
186
- className={cn("text-muted-foreground text-[0.8rem]", className)}
187
- {...props}
188
- />
189
- );
190
- });
160
+ const FormDescription = React.forwardRef<FormDescriptionElement, FormDescriptionProps>(
161
+ ({ className, ...props }, ref) => {
162
+ const { formDescriptionId } = useFormField();
163
+
164
+ return (
165
+ <p ref={ref} id={formDescriptionId} className={cn("text-muted-foreground text-[0.8rem]", className)} {...props} />
166
+ );
167
+ },
168
+ );
169
+
191
170
  FormDescription.displayName = "FormDescription";
192
171
 
193
172
  /* -----------------------------------------------------------------------------
194
173
  * Component: FormMessage
195
174
  * -------------------------------------------------------------------------- */
196
175
 
176
+ type FormMessageElement = HTMLParagraphElement;
197
177
  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
178
 
203
- if (!body) {
204
- return null;
205
- }
179
+ const FormMessage = React.forwardRef<FormMessageElement, FormMessageProps>(({ className, children, ...props }, ref) => {
180
+ const { error, formMessageId } = useFormField();
181
+ const body = error ? String(error.message) : children;
182
+
183
+ if (!body) {
184
+ return null;
185
+ }
186
+
187
+ return (
188
+ <p ref={ref} id={formMessageId} className={cn("text-destructive text-[0.8rem] font-medium", className)} {...props}>
189
+ {body}
190
+ </p>
191
+ );
192
+ });
206
193
 
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
- );
219
194
  FormMessage.displayName = "FormMessage";
220
195
 
221
196
  /* -----------------------------------------------------------------------------