@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
@@ -0,0 +1,71 @@
1
+ import * as React from "react";
2
+ import { VisuallyHidden } from "@radix-ui/react-visually-hidden";
3
+ import { cn } from "./utils";
4
+
5
+ /* -----------------------------------------------------------------------------
6
+ * Component: Spinner
7
+ * -------------------------------------------------------------------------- */
8
+
9
+ const spinnerCount = 8;
10
+
11
+ type SpinnerElement = HTMLSpanElement;
12
+
13
+ interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {
14
+ loading?: boolean;
15
+ }
16
+
17
+ const Spinner = React.forwardRef<SpinnerElement, SpinnerProps>(
18
+ ({ className, loading = true, children, ...props }, ref) => {
19
+ if (!loading) {
20
+ return children;
21
+ }
22
+
23
+ const spinner = (
24
+ <span
25
+ ref={ref}
26
+ className={cn("relative flex size-4 items-center justify-center opacity-60", className)}
27
+ {...props}
28
+ >
29
+ {Array.from({ length: spinnerCount }, (_, i) => (
30
+ <span
31
+ key={i}
32
+ className={cn(
33
+ "absolute h-full rotate-[var(--spinner-rotate)]",
34
+ "before:fade-out-25 before:animate-out before:repeat-infinite before:block before:h-1/3 before:w-full before:rounded-full before:bg-current before:[animation-delay:var(--spinner-delay)] before:[animation-duration:var(--spinner-duration)]",
35
+ )}
36
+ style={
37
+ {
38
+ width: `${(100 / spinnerCount).toString()}%`,
39
+ "--spinner-delay": `-${((spinnerCount - i) * 100).toString()}ms`,
40
+ "--spinner-rotate": `${((360 / spinnerCount) * i).toString()}deg`,
41
+ "--spinner-duration": `${(spinnerCount * 100).toString()}ms`,
42
+ } as React.CSSProperties
43
+ }
44
+ />
45
+ ))}
46
+ </span>
47
+ );
48
+
49
+ if (children === undefined) {
50
+ return spinner;
51
+ }
52
+
53
+ return (
54
+ <span className="relative">
55
+ <span aria-hidden className="invisible contents">
56
+ {children}
57
+ </span>
58
+ <VisuallyHidden>{children}</VisuallyHidden>
59
+ <span className="absolute inset-0 flex items-center justify-center">{spinner}</span>
60
+ </span>
61
+ );
62
+ },
63
+ );
64
+
65
+ Spinner.displayName = "Spinner";
66
+
67
+ /* -----------------------------------------------------------------------------
68
+ * Exports
69
+ * -------------------------------------------------------------------------- */
70
+
71
+ export { Spinner, type SpinnerProps };
package/src/strong.tsx CHANGED
@@ -5,16 +5,18 @@ import { Slot } from "@radix-ui/react-slot";
5
5
  * Component: Strong
6
6
  * -------------------------------------------------------------------------- */
7
7
 
8
+ type StrongElement = HTMLElement;
9
+
8
10
  interface StrongProps extends React.HTMLAttributes<HTMLElement> {
9
11
  asChild?: boolean;
10
12
  }
11
- const Strong = React.forwardRef<HTMLElement, StrongProps>(
12
- ({ asChild, ...props }, ref) => {
13
- const Comp = asChild ? Slot : "strong";
14
13
 
15
- return <Comp ref={ref} {...props} />;
16
- },
17
- );
14
+ const Strong = React.forwardRef<StrongElement, StrongProps>(({ asChild, ...props }, ref) => {
15
+ const Component = asChild ? Slot : "strong";
16
+
17
+ return <Component ref={ref} {...props} />;
18
+ });
19
+
18
20
  Strong.displayName = "Strong";
19
21
 
20
22
  /* -----------------------------------------------------------------------------
package/src/switch.tsx CHANGED
@@ -8,14 +8,14 @@ import { cn } from "./utils";
8
8
  * Component: Switch
9
9
  * -------------------------------------------------------------------------- */
10
10
 
11
- type SwitchProps = SwitchPrimitives.SwitchProps;
12
- const Switch = React.forwardRef<
13
- React.ElementRef<typeof SwitchPrimitives.Root>,
14
- SwitchProps
15
- >(({ className, ...props }, ref) => (
11
+ type SwitchElement = React.ElementRef<typeof SwitchPrimitives.Root>;
12
+ type SwitchProps = React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>;
13
+
14
+ const Switch = React.forwardRef<SwitchElement, SwitchProps>(({ className, ...props }, ref) => (
16
15
  <SwitchPrimitives.Root
17
16
  className={cn(
18
- "focus-visible:ring-ring focus-visible:ring-offset-background data-[state=checked]:bg-primary data-[state=unchecked]:bg-input peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
17
+ "data-[state=checked]:bg-primary data-[state=unchecked]:bg-input peer inline-flex h-5 w-9 shrink-0 items-center rounded-full border-2 border-transparent shadow-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50",
18
+ "focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
19
19
  className,
20
20
  )}
21
21
  {...props}
@@ -24,6 +24,7 @@ const Switch = React.forwardRef<
24
24
  <SwitchPrimitives.Thumb className="bg-background pointer-events-none block size-4 rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0" />
25
25
  </SwitchPrimitives.Root>
26
26
  ));
27
+
27
28
  Switch.displayName = SwitchPrimitives.Root.displayName;
28
29
 
29
30
  /* -----------------------------------------------------------------------------
package/src/table.tsx CHANGED
@@ -5,139 +5,117 @@ import { cn } from "./utils";
5
5
  * Component: Table
6
6
  * -------------------------------------------------------------------------- */
7
7
 
8
+ type TableElement = HTMLTableElement;
8
9
  type TableProps = React.HTMLAttributes<HTMLTableElement>;
9
- const Table = React.forwardRef<HTMLTableElement, TableProps>(
10
- ({ className, ...props }, ref) => (
11
- <div className="relative w-full overflow-auto">
12
- <table
13
- ref={ref}
14
- className={cn("w-full caption-bottom text-sm", className)}
15
- {...props}
16
- />
17
- </div>
18
- ),
19
- );
10
+
11
+ const Table = React.forwardRef<TableElement, TableProps>(({ className, ...props }, ref) => (
12
+ <div className="relative w-full overflow-auto">
13
+ <table ref={ref} className={cn("w-full caption-bottom text-sm", className)} {...props} />
14
+ </div>
15
+ ));
16
+
20
17
  Table.displayName = "Table";
21
18
 
22
19
  /* -----------------------------------------------------------------------------
23
20
  * Component: TableHeader
24
21
  * -------------------------------------------------------------------------- */
25
22
 
23
+ type TableHeaderElement = HTMLTableSectionElement;
26
24
  type TableHeaderProps = React.HTMLAttributes<HTMLTableSectionElement>;
27
- const TableHeader = React.forwardRef<HTMLTableSectionElement, TableHeaderProps>(
28
- ({ className, ...props }, ref) => (
29
- <thead ref={ref} className={cn("[&_tr]:border-b", className)} {...props} />
30
- ),
31
- );
25
+
26
+ const TableHeader = React.forwardRef<TableHeaderElement, TableHeaderProps>(({ className, ...props }, ref) => (
27
+ <thead ref={ref} className={cn("[&_tr]:border-b", className)} {...props} />
28
+ ));
29
+
32
30
  TableHeader.displayName = "TableHeader";
33
31
 
34
32
  /* -----------------------------------------------------------------------------
35
33
  * Component: TableBody
36
34
  * -------------------------------------------------------------------------- */
37
35
 
36
+ type TableBodyElement = HTMLTableSectionElement;
38
37
  type TableBodyProps = React.HTMLAttributes<HTMLTableSectionElement>;
39
- const TableBody = React.forwardRef<HTMLTableSectionElement, TableBodyProps>(
40
- ({ className, ...props }, ref) => (
41
- <tbody
42
- ref={ref}
43
- className={cn("[&_tr:last-child]:border-0", className)}
44
- {...props}
45
- />
46
- ),
47
- );
38
+
39
+ const TableBody = React.forwardRef<TableBodyElement, TableBodyProps>(({ className, ...props }, ref) => (
40
+ <tbody ref={ref} className={cn("[&_tr:last-child]:border-0", className)} {...props} />
41
+ ));
42
+
48
43
  TableBody.displayName = "TableBody";
49
44
 
50
45
  /* -----------------------------------------------------------------------------
51
46
  * Component: TableFooter
52
47
  * -------------------------------------------------------------------------- */
53
48
 
49
+ type TableFooterElement = HTMLTableSectionElement;
54
50
  type TableFooterProps = React.HTMLAttributes<HTMLTableSectionElement>;
55
- const TableFooter = React.forwardRef<HTMLTableSectionElement, TableFooterProps>(
56
- ({ className, ...props }, ref) => (
57
- <tfoot
58
- ref={ref}
59
- className={cn(
60
- "bg-muted/50 border-t font-medium [&>tr]:last:border-b-0",
61
- className,
62
- )}
63
- {...props}
64
- />
65
- ),
66
- );
51
+
52
+ const TableFooter = React.forwardRef<TableFooterElement, TableFooterProps>(({ className, ...props }, ref) => (
53
+ <tfoot ref={ref} className={cn("bg-muted/50 border-t font-medium [&>tr]:last:border-b-0", className)} {...props} />
54
+ ));
55
+
67
56
  TableFooter.displayName = "TableFooter";
68
57
 
69
58
  /* -----------------------------------------------------------------------------
70
59
  * Component: TableRow
71
60
  * -------------------------------------------------------------------------- */
72
61
 
62
+ type TableRowElement = HTMLTableRowElement;
73
63
  type TableRowProps = React.HTMLAttributes<HTMLTableRowElement>;
74
- const TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(
75
- ({ className, ...props }, ref) => (
76
- <tr
77
- ref={ref}
78
- className={cn(
79
- "hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",
80
- className,
81
- )}
82
- {...props}
83
- />
84
- ),
85
- );
64
+
65
+ const TableRow = React.forwardRef<TableRowElement, TableRowProps>(({ className, ...props }, ref) => (
66
+ <tr
67
+ ref={ref}
68
+ className={cn("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors", className)}
69
+ {...props}
70
+ />
71
+ ));
72
+
86
73
  TableRow.displayName = "TableRow";
87
74
 
88
75
  /* -----------------------------------------------------------------------------
89
76
  * Component: TableHead
90
77
  * -------------------------------------------------------------------------- */
91
78
 
79
+ type TableHeadElement = HTMLTableCellElement;
92
80
  type TableHeadProps = React.ThHTMLAttributes<HTMLTableCellElement>;
93
- const TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(
94
- ({ className, ...props }, ref) => (
95
- <th
96
- ref={ref}
97
- className={cn(
98
- "text-muted-foreground h-12 px-4 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0",
99
- className,
100
- )}
101
- {...props}
102
- />
103
- ),
104
- );
81
+
82
+ const TableHead = React.forwardRef<TableHeadElement, TableHeadProps>(({ className, ...props }, ref) => (
83
+ <th
84
+ ref={ref}
85
+ className={cn(
86
+ "text-muted-foreground h-12 px-4 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0",
87
+ className,
88
+ )}
89
+ {...props}
90
+ />
91
+ ));
92
+
105
93
  TableHead.displayName = "TableHead";
106
94
 
107
95
  /* -----------------------------------------------------------------------------
108
96
  * Component: TableCell
109
97
  * -------------------------------------------------------------------------- */
110
98
 
99
+ type TableCellElement = HTMLTableCellElement;
111
100
  type TableCellProps = React.TdHTMLAttributes<HTMLTableCellElement>;
112
- const TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(
113
- ({ className, ...props }, ref) => (
114
- <td
115
- ref={ref}
116
- className={cn(
117
- "p-4 align-middle [&:has([role=checkbox])]:pr-0",
118
- className,
119
- )}
120
- {...props}
121
- />
122
- ),
123
- );
101
+
102
+ const TableCell = React.forwardRef<TableCellElement, TableCellProps>(({ className, ...props }, ref) => (
103
+ <td ref={ref} className={cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className)} {...props} />
104
+ ));
105
+
124
106
  TableCell.displayName = "TableCell";
125
107
 
126
108
  /* -----------------------------------------------------------------------------
127
109
  * Component: TableCaption
128
110
  * -------------------------------------------------------------------------- */
129
111
 
112
+ type TableCaptionElement = HTMLTableCaptionElement;
130
113
  type TableCaptionProps = React.HTMLAttributes<HTMLTableCaptionElement>;
131
- const TableCaption = React.forwardRef<
132
- HTMLTableCaptionElement,
133
- TableCaptionProps
134
- >(({ className, ...props }, ref) => (
135
- <caption
136
- ref={ref}
137
- className={cn("text-muted-foreground mt-4 text-sm", className)}
138
- {...props}
139
- />
114
+
115
+ const TableCaption = React.forwardRef<TableCaptionElement, TableCaptionProps>(({ className, ...props }, ref) => (
116
+ <caption ref={ref} className={cn("text-muted-foreground mt-4 text-sm", className)} {...props} />
140
117
  ));
118
+
141
119
  TableCaption.displayName = "TableCaption";
142
120
 
143
121
  /* -----------------------------------------------------------------------------
package/src/tabs.tsx CHANGED
@@ -8,18 +8,17 @@ import { cn } from "./utils";
8
8
  * Component: Tabs
9
9
  * -------------------------------------------------------------------------- */
10
10
 
11
- type TabsProps = TabsPrimitive.TabsProps;
11
+ type TabsProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root>;
12
12
  const Tabs = TabsPrimitive.Root;
13
13
 
14
14
  /* -----------------------------------------------------------------------------
15
15
  * Component: TabsList
16
16
  * -------------------------------------------------------------------------- */
17
17
 
18
- type TabsListProps = TabsPrimitive.TabsListProps;
19
- const TabsList = React.forwardRef<
20
- React.ElementRef<typeof TabsPrimitive.List>,
21
- TabsListProps
22
- >(({ className, ...props }, ref) => (
18
+ type TabsListElement = React.ElementRef<typeof TabsPrimitive.List>;
19
+ type TabsListProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>;
20
+
21
+ const TabsList = React.forwardRef<TabsListElement, TabsListProps>(({ className, ...props }, ref) => (
23
22
  <TabsPrimitive.List
24
23
  ref={ref}
25
24
  className={cn(
@@ -29,46 +28,49 @@ const TabsList = React.forwardRef<
29
28
  {...props}
30
29
  />
31
30
  ));
31
+
32
32
  TabsList.displayName = TabsPrimitive.List.displayName;
33
33
 
34
34
  /* -----------------------------------------------------------------------------
35
35
  * Component: TabsTrigger
36
36
  * -------------------------------------------------------------------------- */
37
37
 
38
- type TabsTriggerProps = TabsPrimitive.TabsTriggerProps;
39
- const TabsTrigger = React.forwardRef<
40
- React.ElementRef<typeof TabsPrimitive.Trigger>,
41
- TabsTriggerProps
42
- >(({ className, ...props }, ref) => (
38
+ type TabsTriggerElement = React.ElementRef<typeof TabsPrimitive.Trigger>;
39
+ type TabsTriggerProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>;
40
+
41
+ const TabsTrigger = React.forwardRef<TabsTriggerElement, TabsTriggerProps>(({ className, ...props }, ref) => (
43
42
  <TabsPrimitive.Trigger
44
43
  ref={ref}
45
44
  className={cn(
46
- "focus-visible:ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm",
45
+ "data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm",
46
+ "focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
47
47
  className,
48
48
  )}
49
49
  {...props}
50
50
  />
51
51
  ));
52
+
52
53
  TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
53
54
 
54
55
  /* -----------------------------------------------------------------------------
55
56
  * Component: TabsContent
56
57
  * -------------------------------------------------------------------------- */
57
58
 
58
- type TabsContentProps = TabsPrimitive.TabsContentProps;
59
- const TabsContent = React.forwardRef<
60
- React.ElementRef<typeof TabsPrimitive.Content>,
61
- TabsContentProps
62
- >(({ className, ...props }, ref) => (
59
+ type TabsContentElement = React.ElementRef<typeof TabsPrimitive.Content>;
60
+ type TabsContentProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>;
61
+
62
+ const TabsContent = React.forwardRef<TabsContentElement, TabsContentProps>(({ className, ...props }, ref) => (
63
63
  <TabsPrimitive.Content
64
64
  ref={ref}
65
65
  className={cn(
66
- "focus-visible:ring-offset-background focus-visible:ring-ring mt-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
66
+ "mt-2",
67
+ "focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
67
68
  className,
68
69
  )}
69
70
  {...props}
70
71
  />
71
72
  ));
73
+
72
74
  TabsContent.displayName = TabsPrimitive.Content.displayName;
73
75
 
74
76
  /* -----------------------------------------------------------------------------
package/src/text.tsx CHANGED
@@ -5,8 +5,9 @@ import { Slot } from "@radix-ui/react-slot";
5
5
  * Component: Text
6
6
  * -------------------------------------------------------------------------- */
7
7
 
8
- interface TextParagraphProps
9
- extends React.HTMLAttributes<HTMLParagraphElement> {
8
+ type TextElement = HTMLParagraphElement;
9
+
10
+ interface TextParagraphProps extends React.HTMLAttributes<HTMLParagraphElement> {
10
11
  as?: "p";
11
12
  }
12
13
 
@@ -18,13 +19,12 @@ type TextProps = (TextParagraphProps | TextSpanProps) & {
18
19
  asChild?: boolean;
19
20
  };
20
21
 
21
- const Text = React.forwardRef<HTMLParagraphElement, TextProps>(
22
- ({ as: Tag = "p", asChild, ...props }, ref) => {
23
- const Comp = asChild ? Slot : Tag;
22
+ const Text = React.forwardRef<TextElement, TextProps>(({ as: Tag = "p", asChild, ...props }, ref) => {
23
+ const Component = asChild ? Slot : Tag;
24
+
25
+ return <Component ref={ref} {...props} />;
26
+ });
24
27
 
25
- return <Comp ref={ref} {...props} />;
26
- },
27
- );
28
28
  Text.displayName = "Text";
29
29
 
30
30
  /* -----------------------------------------------------------------------------
package/src/textarea.tsx CHANGED
@@ -5,21 +5,23 @@ import { cn } from "./utils";
5
5
  * Component: Textarea
6
6
  * -------------------------------------------------------------------------- */
7
7
 
8
+ type TextareaElement = HTMLTextAreaElement;
8
9
  type TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>;
9
- const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
10
- ({ className, ...props }, ref) => {
11
- return (
12
- <textarea
13
- className={cn(
14
- "border-input placeholder:text-muted-foreground focus-visible:ring-ring focus-visible:ring-offset-background flex min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
15
- className,
16
- )}
17
- ref={ref}
18
- {...props}
19
- />
20
- );
21
- },
22
- );
10
+
11
+ const Textarea = React.forwardRef<TextareaElement, TextareaProps>(({ className, ...props }, ref) => {
12
+ return (
13
+ <textarea
14
+ className={cn(
15
+ "border-input placeholder:text-muted-foreground flex min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-sm shadow-sm disabled:cursor-not-allowed disabled:opacity-50",
16
+ "focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
17
+ className,
18
+ )}
19
+ ref={ref}
20
+ {...props}
21
+ />
22
+ );
23
+ });
24
+
23
25
  Textarea.displayName = "Textarea";
24
26
 
25
27
  /* -----------------------------------------------------------------------------
@@ -2,79 +2,80 @@
2
2
 
3
3
  import * as React from "react";
4
4
  import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
5
+ import { createToggleGroupScope } from "@radix-ui/react-toggle-group";
6
+ import { createContextScope, type Scope } from "@radix-ui/react-context";
5
7
  import { toggleVariants, type ToggleVariantsProps } from "./toggle";
6
8
  import { cn } from "./utils";
7
9
 
8
10
  /* -----------------------------------------------------------------------------
9
- * Context: ToggleGroup
11
+ * Component: ToggleGroup
10
12
  * -------------------------------------------------------------------------- */
11
13
 
12
- const ToggleGroupContext = React.createContext<ToggleVariantsProps>({
13
- size: "default",
14
- variant: "default",
15
- });
14
+ const TOGGLE_GROUP_NAME = "ToggleGroup";
16
15
 
17
- /* -----------------------------------------------------------------------------
18
- * Component: ToggleGroup
19
- * -------------------------------------------------------------------------- */
16
+ type ScopedProps<P> = P & { __scopeToggleGroup?: Scope };
17
+
18
+ const [createToggleGroupContext] = createContextScope(TOGGLE_GROUP_NAME, [createToggleGroupScope]);
19
+
20
+ const useToggleGroupScope = createToggleGroupScope();
21
+
22
+ const [ToggleGroupProvider, useToggleGroupContext] = createToggleGroupContext<ToggleVariantsProps>(TOGGLE_GROUP_NAME);
20
23
 
21
- type ToggleGroupProps = React.ComponentPropsWithoutRef<
22
- typeof ToggleGroupPrimitive.Root
23
- > &
24
- ToggleVariantsProps;
25
- const ToggleGroup = React.forwardRef<
26
- React.ElementRef<typeof ToggleGroupPrimitive.Root>,
27
- ToggleGroupProps
28
- >(({ className, variant, size, children, ...props }, ref) => (
29
- <ToggleGroupPrimitive.Root
30
- ref={ref}
31
- className={cn("flex items-center justify-center gap-1", className)}
32
- {...props}
33
- >
34
- <ToggleGroupContext.Provider value={{ variant, size }}>
35
- {children}
36
- </ToggleGroupContext.Provider>
37
- </ToggleGroupPrimitive.Root>
38
- ));
39
- ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;
24
+ type ToggleGroupElement = React.ElementRef<typeof ToggleGroupPrimitive.Root>;
25
+ type ToggleGroupProps = React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> & ToggleVariantsProps;
26
+
27
+ const ToggleGroup = React.forwardRef<ToggleGroupElement, ToggleGroupProps>(
28
+ ({ __scopeToggleGroup, className, variant, size, children, ...props }: ScopedProps<ToggleGroupProps>, ref) => {
29
+ const toggleGroupScope = useToggleGroupScope(__scopeToggleGroup);
30
+
31
+ return (
32
+ <ToggleGroupProvider scope={__scopeToggleGroup} size={size} variant={variant}>
33
+ <ToggleGroupPrimitive.Root
34
+ ref={ref}
35
+ className={cn("flex items-center justify-center gap-1", className)}
36
+ {...toggleGroupScope}
37
+ {...props}
38
+ >
39
+ {children}
40
+ </ToggleGroupPrimitive.Root>
41
+ </ToggleGroupProvider>
42
+ );
43
+ },
44
+ );
45
+
46
+ ToggleGroup.displayName = TOGGLE_GROUP_NAME;
40
47
 
41
48
  /* -----------------------------------------------------------------------------
42
49
  * Component: ToggleGroupItem
43
50
  * -------------------------------------------------------------------------- */
44
51
 
45
- type ToggleGroupItemProps = ToggleGroupPrimitive.ToggleGroupItemProps &
46
- ToggleVariantsProps;
47
- const ToggleGroupItem = React.forwardRef<
48
- React.ElementRef<typeof ToggleGroupPrimitive.Item>,
49
- ToggleGroupItemProps
50
- >(({ className, children, variant, size, ...props }, ref) => {
51
- const context = React.useContext(ToggleGroupContext);
52
-
53
- return (
54
- <ToggleGroupPrimitive.Item
55
- ref={ref}
56
- className={cn(
57
- toggleVariants({
58
- variant: context.variant ?? variant,
59
- size: context.size ?? size,
60
- }),
61
- className,
62
- )}
63
- {...props}
64
- >
65
- {children}
66
- </ToggleGroupPrimitive.Item>
67
- );
68
- });
69
- ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;
52
+ const TOGGLE_GROUP_ITEM_NAME = "ToggleGroupItem";
53
+
54
+ type ToggleGroupItemElement = React.ElementRef<typeof ToggleGroupPrimitive.Item>;
55
+ type ToggleGroupItemProps = React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item>;
56
+
57
+ const ToggleGroupItem = React.forwardRef<ToggleGroupItemElement, ToggleGroupItemProps>(
58
+ ({ __scopeToggleGroup, className, children, ...props }: ScopedProps<ToggleGroupItemProps>, ref) => {
59
+ const context = useToggleGroupContext(TOGGLE_GROUP_ITEM_NAME, __scopeToggleGroup);
60
+ const toggleGroupScope = useToggleGroupScope(__scopeToggleGroup);
61
+
62
+ return (
63
+ <ToggleGroupPrimitive.Item
64
+ ref={ref}
65
+ className={toggleVariants({ ...context, className })}
66
+ {...toggleGroupScope}
67
+ {...props}
68
+ >
69
+ {children}
70
+ </ToggleGroupPrimitive.Item>
71
+ );
72
+ },
73
+ );
74
+
75
+ ToggleGroupItem.displayName = TOGGLE_GROUP_ITEM_NAME;
70
76
 
71
77
  /* -----------------------------------------------------------------------------
72
78
  * Exports
73
79
  * -------------------------------------------------------------------------- */
74
80
 
75
- export {
76
- ToggleGroup,
77
- ToggleGroupItem,
78
- type ToggleGroupProps,
79
- type ToggleGroupItemProps,
80
- };
81
+ export { ToggleGroup, ToggleGroupItem, type ToggleGroupProps, type ToggleGroupItemProps };