@codefast/ui 0.0.9 → 0.0.10

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 (427) 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 +29 -66
  40. package/dist/breadcrumb.js.map +1 -1
  41. package/dist/breadcrumb.mjs +29 -66
  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-5UHPKXF4.mjs +60 -0
  86. package/dist/chunk-5UHPKXF4.mjs.map +1 -0
  87. package/dist/chunk-EWS3N4OZ.mjs +148 -0
  88. package/dist/chunk-EWS3N4OZ.mjs.map +1 -0
  89. package/dist/{chunk-PIU627A3.mjs → chunk-FGI3JA75.mjs} +1 -1
  90. package/dist/chunk-FGI3JA75.mjs.map +1 -0
  91. package/dist/{chunk-GRKABVK4.js → chunk-IVYGBU4G.js} +1 -1
  92. package/dist/chunk-IVYGBU4G.js.map +1 -0
  93. package/dist/chunk-IXEJO7ZP.js +86 -0
  94. package/dist/chunk-IXEJO7ZP.js.map +1 -0
  95. package/dist/chunk-J6COVJTP.js +60 -0
  96. package/dist/chunk-J6COVJTP.js.map +1 -0
  97. package/dist/chunk-JULVZPCS.mjs +120 -0
  98. package/dist/chunk-JULVZPCS.mjs.map +1 -0
  99. package/dist/chunk-LNSEYAPJ.js +121 -0
  100. package/dist/chunk-LNSEYAPJ.js.map +1 -0
  101. package/dist/chunk-MOJNV3XZ.js +120 -0
  102. package/dist/chunk-MOJNV3XZ.js.map +1 -0
  103. package/dist/{chunk-JOJW7BBY.js → chunk-NEP3JDVQ.js} +31 -6
  104. package/dist/chunk-NEP3JDVQ.js.map +1 -0
  105. package/dist/chunk-OK63Q6EJ.mjs +121 -0
  106. package/dist/chunk-OK63Q6EJ.mjs.map +1 -0
  107. package/dist/{chunk-PKB2G726.js → chunk-ORAVN37L.js} +6 -10
  108. package/dist/chunk-ORAVN37L.js.map +1 -0
  109. package/dist/{chunk-MJDKD2K4.mjs → chunk-XCBBSHAK.mjs} +6 -10
  110. package/dist/chunk-XCBBSHAK.mjs.map +1 -0
  111. package/dist/chunk-XCKLBP2V.mjs +86 -0
  112. package/dist/chunk-XCKLBP2V.mjs.map +1 -0
  113. package/dist/chunk-XHZUPL2U.mjs +81 -0
  114. package/dist/chunk-XHZUPL2U.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/select.d.mts +17 -17
  264. package/dist/select.d.ts +17 -17
  265. package/dist/select.js +2 -2
  266. package/dist/select.mjs +1 -1
  267. package/dist/separator.d.mts +2 -2
  268. package/dist/separator.d.ts +2 -2
  269. package/dist/separator.js +1 -5
  270. package/dist/separator.js.map +1 -1
  271. package/dist/separator.mjs +1 -5
  272. package/dist/separator.mjs.map +1 -1
  273. package/dist/sheet.d.mts +9 -9
  274. package/dist/sheet.d.ts +9 -9
  275. package/dist/sheet.js +35 -76
  276. package/dist/sheet.js.map +1 -1
  277. package/dist/sheet.mjs +35 -76
  278. package/dist/sheet.mjs.map +1 -1
  279. package/dist/skeleton.js +1 -7
  280. package/dist/skeleton.js.map +1 -1
  281. package/dist/skeleton.mjs +1 -7
  282. package/dist/skeleton.mjs.map +1 -1
  283. package/dist/slider.d.mts +2 -2
  284. package/dist/slider.d.ts +2 -2
  285. package/dist/slider.js +10 -5
  286. package/dist/slider.js.map +1 -1
  287. package/dist/slider.mjs +10 -5
  288. package/dist/slider.mjs.map +1 -1
  289. package/dist/sonner.js +1 -6
  290. package/dist/sonner.js.map +1 -1
  291. package/dist/sonner.mjs +1 -6
  292. package/dist/sonner.mjs.map +1 -1
  293. package/dist/spinner.d.mts +8 -0
  294. package/dist/spinner.d.ts +8 -0
  295. package/dist/spinner.js +8 -0
  296. package/dist/spinner.js.map +1 -0
  297. package/dist/spinner.mjs +8 -0
  298. package/dist/spinner.mjs.map +1 -0
  299. package/dist/strong.js +4 -6
  300. package/dist/strong.js.map +1 -1
  301. package/dist/strong.mjs +4 -6
  302. package/dist/strong.mjs.map +1 -1
  303. package/dist/styles.css +1 -1
  304. package/dist/styles.css.map +1 -1
  305. package/dist/switch.d.mts +2 -2
  306. package/dist/switch.d.ts +2 -2
  307. package/dist/switch.js +2 -1
  308. package/dist/switch.js.map +1 -1
  309. package/dist/switch.mjs +2 -1
  310. package/dist/switch.mjs.map +1 -1
  311. package/dist/table.js +22 -80
  312. package/dist/table.js.map +1 -1
  313. package/dist/table.mjs +22 -80
  314. package/dist/table.mjs.map +1 -1
  315. package/dist/tabs.d.mts +7 -7
  316. package/dist/tabs.d.ts +7 -7
  317. package/dist/tabs.js +4 -2
  318. package/dist/tabs.js.map +1 -1
  319. package/dist/tabs.mjs +4 -2
  320. package/dist/tabs.mjs.map +1 -1
  321. package/dist/text.js +4 -6
  322. package/dist/text.js.map +1 -1
  323. package/dist/text.mjs +4 -6
  324. package/dist/text.mjs.map +1 -1
  325. package/dist/textarea.js +14 -15
  326. package/dist/textarea.js.map +1 -1
  327. package/dist/textarea.mjs +14 -15
  328. package/dist/textarea.mjs.map +1 -1
  329. package/dist/toggle-group.d.mts +2 -2
  330. package/dist/toggle-group.d.ts +2 -2
  331. package/dist/toggle-group.js +41 -34
  332. package/dist/toggle-group.js.map +1 -1
  333. package/dist/toggle-group.mjs +40 -33
  334. package/dist/toggle-group.mjs.map +1 -1
  335. package/dist/toggle.d.mts +2 -2
  336. package/dist/toggle.d.ts +2 -2
  337. package/dist/toggle.js +2 -2
  338. package/dist/toggle.mjs +1 -1
  339. package/dist/tooltip.d.mts +7 -7
  340. package/dist/tooltip.d.ts +7 -7
  341. package/dist/tooltip.js +15 -20
  342. package/dist/tooltip.js.map +1 -1
  343. package/dist/tooltip.mjs +15 -20
  344. package/dist/tooltip.mjs.map +1 -1
  345. package/package.json +36 -5
  346. package/src/accordion.tsx +53 -43
  347. package/src/alert-dialog.tsx +73 -92
  348. package/src/alert.tsx +24 -41
  349. package/src/aspect-ratio.tsx +2 -1
  350. package/src/avatar.tsx +19 -36
  351. package/src/badge.tsx +3 -7
  352. package/src/blockquote.tsx +9 -8
  353. package/src/box.tsx +7 -6
  354. package/src/breadcrumb.tsx +52 -61
  355. package/src/button.tsx +41 -14
  356. package/src/calendar.tsx +6 -22
  357. package/src/card.tsx +40 -56
  358. package/src/carousel.tsx +95 -81
  359. package/src/checkbox-cards.tsx +68 -0
  360. package/src/checkbox-group.primitive.tsx +199 -0
  361. package/src/checkbox-group.tsx +57 -0
  362. package/src/checkbox.tsx +10 -6
  363. package/src/code.tsx +8 -6
  364. package/src/collapsible.tsx +4 -3
  365. package/src/command.tsx +53 -90
  366. package/src/container.tsx +8 -6
  367. package/src/context-menu.tsx +163 -175
  368. package/src/data-table.tsx +26 -43
  369. package/src/dialog.tsx +58 -77
  370. package/src/drawer.tsx +48 -78
  371. package/src/dropdown-menu.tsx +143 -154
  372. package/src/em.tsx +8 -6
  373. package/src/form.tsx +61 -86
  374. package/src/heading.tsx +8 -6
  375. package/src/hover-card.tsx +22 -20
  376. package/src/input-otp.tsx +50 -48
  377. package/src/input.tsx +14 -15
  378. package/src/kbd.tsx +18 -16
  379. package/src/label.tsx +5 -5
  380. package/src/menubar.tsx +133 -149
  381. package/src/navigation-menu.tsx +110 -114
  382. package/src/pagination.tsx +26 -48
  383. package/src/popover.tsx +29 -31
  384. package/src/pre.tsx +8 -6
  385. package/src/progress.tsx +6 -9
  386. package/src/quote.tsx +8 -6
  387. package/src/radio-cards.tsx +50 -0
  388. package/src/radio-group.tsx +14 -24
  389. package/src/radio.tsx +44 -0
  390. package/src/resizable.tsx +5 -7
  391. package/src/scroll-area.tsx +29 -40
  392. package/src/section.tsx +8 -6
  393. package/src/select.tsx +106 -115
  394. package/src/separator.tsx +7 -14
  395. package/src/sheet.tsx +50 -76
  396. package/src/skeleton.tsx +2 -6
  397. package/src/slider.tsx +12 -10
  398. package/src/sonner.tsx +3 -7
  399. package/src/spinner.tsx +75 -0
  400. package/src/strong.tsx +8 -6
  401. package/src/switch.tsx +7 -6
  402. package/src/table.tsx +60 -82
  403. package/src/tabs.tsx +20 -18
  404. package/src/text.tsx +8 -8
  405. package/src/textarea.tsx +16 -14
  406. package/src/toggle-group.tsx +59 -58
  407. package/src/toggle.tsx +11 -13
  408. package/src/tooltip.tsx +28 -30
  409. package/dist/chunk-3BDLWZ3W.js +0 -158
  410. package/dist/chunk-3BDLWZ3W.js.map +0 -1
  411. package/dist/chunk-43YGVOCO.js +0 -135
  412. package/dist/chunk-43YGVOCO.js.map +0 -1
  413. package/dist/chunk-AJLEALVP.mjs +0 -112
  414. package/dist/chunk-AJLEALVP.mjs.map +0 -1
  415. package/dist/chunk-D6NQEMTJ.js +0 -112
  416. package/dist/chunk-D6NQEMTJ.js.map +0 -1
  417. package/dist/chunk-FATZHRHR.mjs +0 -56
  418. package/dist/chunk-FATZHRHR.mjs.map +0 -1
  419. package/dist/chunk-GRKABVK4.js.map +0 -1
  420. package/dist/chunk-JOJW7BBY.js.map +0 -1
  421. package/dist/chunk-KV4VL2ZF.mjs +0 -135
  422. package/dist/chunk-KV4VL2ZF.mjs.map +0 -1
  423. package/dist/chunk-MJDKD2K4.mjs.map +0 -1
  424. package/dist/chunk-NCEN3XBK.mjs +0 -158
  425. package/dist/chunk-NCEN3XBK.mjs.map +0 -1
  426. package/dist/chunk-PIU627A3.mjs.map +0 -1
  427. package/dist/chunk-PKB2G726.js.map +0 -1
package/src/carousel.tsx CHANGED
@@ -1,10 +1,9 @@
1
1
  "use client";
2
2
 
3
3
  import * as React from "react";
4
- import useEmblaCarousel, {
5
- type UseEmblaCarouselType,
6
- } from "embla-carousel-react";
4
+ import useEmblaCarousel, { type UseEmblaCarouselType } from "embla-carousel-react";
7
5
  import { ArrowLeftIcon, ArrowRightIcon } from "@radix-ui/react-icons";
6
+ import { createContextScope, type Scope } from "@radix-ui/react-context";
8
7
  import { cn } from "./utils";
9
8
  import { Button, type ButtonProps } from "./button";
10
9
 
@@ -12,6 +11,12 @@ import { Button, type ButtonProps } from "./button";
12
11
  * Context: Carousel
13
12
  * -------------------------------------------------------------------------- */
14
13
 
14
+ const CAROUSEL_NAME = "Carousel";
15
+
16
+ type ScopedProps<P> = P & { __scopeCarousel?: Scope };
17
+
18
+ const [createCarouselContext] = createContextScope(CAROUSEL_NAME);
19
+
15
20
  type CarouselApi = UseEmblaCarouselType[1];
16
21
  type UseCarouselParameters = Parameters<typeof useEmblaCarousel>;
17
22
  type CarouselOptions = UseCarouselParameters[0];
@@ -24,7 +29,7 @@ interface BaseCarouselProps {
24
29
  setApi?: (api: CarouselApi) => void;
25
30
  }
26
31
 
27
- type CarouselContextProps = {
32
+ type CarouselContextValue = {
28
33
  carouselRef: ReturnType<typeof useEmblaCarousel>[0];
29
34
  api: ReturnType<typeof useEmblaCarousel>[1];
30
35
  scrollPrev: () => void;
@@ -33,26 +38,18 @@ type CarouselContextProps = {
33
38
  canScrollNext: boolean;
34
39
  } & BaseCarouselProps;
35
40
 
36
- const CarouselContext = React.createContext<CarouselContextProps | null>(null);
37
-
38
- function useCarousel(): CarouselContextProps {
39
- const context = React.useContext(CarouselContext);
40
-
41
- if (!context) {
42
- throw new Error("useCarousel must be used within a <Carousel />");
43
- }
44
-
45
- return context;
46
- }
41
+ const [CarouselProvider, useCarouselContext] = createCarouselContext<CarouselContextValue>(CAROUSEL_NAME);
47
42
 
48
43
  /* -----------------------------------------------------------------------------
49
44
  * Component: Carousel
50
45
  * -------------------------------------------------------------------------- */
51
46
 
47
+ type CarouselElement = HTMLDivElement;
52
48
  type CarouselProps = React.HTMLAttributes<HTMLDivElement> & BaseCarouselProps;
53
- const Carousel = React.forwardRef<HTMLDivElement, CarouselProps>(
49
+
50
+ const Carousel = React.forwardRef<CarouselElement, CarouselProps>(
54
51
  (
55
- { orientation, opts, setApi, plugins, className, children, ...props },
52
+ { __scopeCarousel, orientation, opts, setApi, plugins, className, children, ...props }: ScopedProps<CarouselProps>,
56
53
  ref,
57
54
  ) => {
58
55
  const [carouselRef, api] = useEmblaCarousel(
@@ -62,6 +59,7 @@ const Carousel = React.forwardRef<HTMLDivElement, CarouselProps>(
62
59
  },
63
60
  plugins,
64
61
  );
62
+
65
63
  const [canScrollPrev, setCanScrollPrev] = React.useState(false);
66
64
  const [canScrollNext, setCanScrollNext] = React.useState(false);
67
65
 
@@ -118,18 +116,16 @@ const Carousel = React.forwardRef<HTMLDivElement, CarouselProps>(
118
116
  }, [api, onSelect]);
119
117
 
120
118
  return (
121
- <CarouselContext.Provider
122
- value={{
123
- carouselRef,
124
- api,
125
- opts,
126
- orientation:
127
- orientation ?? (opts?.axis === "y" ? "vertical" : "horizontal"),
128
- scrollPrev,
129
- scrollNext,
130
- canScrollPrev,
131
- canScrollNext,
132
- }}
119
+ <CarouselProvider
120
+ scope={__scopeCarousel}
121
+ carouselRef={carouselRef}
122
+ api={api}
123
+ opts={opts}
124
+ orientation={orientation ?? (opts?.axis === "y" ? "vertical" : "horizontal")}
125
+ scrollPrev={scrollPrev}
126
+ scrollNext={scrollNext}
127
+ canScrollPrev={canScrollPrev}
128
+ canScrollNext={canScrollNext}
133
129
  >
134
130
  <div
135
131
  ref={ref}
@@ -141,106 +137,123 @@ const Carousel = React.forwardRef<HTMLDivElement, CarouselProps>(
141
137
  >
142
138
  {children}
143
139
  </div>
144
- </CarouselContext.Provider>
140
+ </CarouselProvider>
145
141
  );
146
142
  },
147
143
  );
148
- Carousel.displayName = "Carousel";
144
+
145
+ Carousel.displayName = CAROUSEL_NAME;
149
146
 
150
147
  /* -----------------------------------------------------------------------------
151
148
  * Component: CarouselContent
152
149
  * -------------------------------------------------------------------------- */
153
150
 
151
+ const CAROUSEL_CONTENT_NAME = "CarouselContent";
152
+
153
+ type CarouselContentElement = HTMLDivElement;
154
154
  type CarouselContentProps = React.HTMLAttributes<HTMLDivElement>;
155
- const CarouselContent = React.forwardRef<HTMLDivElement, CarouselContentProps>(
156
- ({ className, ...props }, ref) => {
157
- const { carouselRef, orientation } = useCarousel();
155
+
156
+ const CarouselContent = React.forwardRef<CarouselContentElement, CarouselContentProps>(
157
+ ({ __scopeCarousel, className, ...props }: ScopedProps<CarouselContentProps>, ref) => {
158
+ const { carouselRef, orientation } = useCarouselContext(CAROUSEL_CONTENT_NAME, __scopeCarousel);
158
159
 
159
160
  return (
160
161
  <div ref={carouselRef} className="overflow-hidden">
161
162
  <div
162
163
  ref={ref}
163
- className={cn(
164
- "flex",
165
- orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
166
- className,
167
- )}
164
+ className={cn("flex", orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col", className)}
168
165
  {...props}
169
166
  />
170
167
  </div>
171
168
  );
172
169
  },
173
170
  );
174
- CarouselContent.displayName = "CarouselContent";
171
+
172
+ CarouselContent.displayName = CAROUSEL_CONTENT_NAME;
175
173
 
176
174
  /* -----------------------------------------------------------------------------
177
175
  * Component: CarouselItem
178
176
  * -------------------------------------------------------------------------- */
179
177
 
178
+ const CAROUSEL_ITEM_NAME = "CarouselItem";
179
+
180
+ type CarouselItemElement = HTMLDivElement;
180
181
  type CarouselItemProps = React.HTMLAttributes<HTMLDivElement>;
181
- const CarouselItem = React.forwardRef<HTMLDivElement, CarouselItemProps>(
182
- ({ className, ...props }, ref) => {
183
- const { orientation } = useCarousel();
182
+
183
+ const CarouselItem = React.forwardRef<CarouselItemElement, CarouselItemProps>(
184
+ ({ __scopeCarousel, className, ...props }: ScopedProps<CarouselItemProps>, ref) => {
185
+ const { orientation } = useCarouselContext(CAROUSEL_ITEM_NAME, __scopeCarousel);
184
186
 
185
187
  return (
186
188
  <div
187
189
  ref={ref}
188
190
  role="group"
189
191
  aria-roledescription="slide"
190
- className={cn(
191
- "min-w-0 shrink-0 grow-0 basis-full",
192
- orientation === "horizontal" ? "pl-4" : "pt-4",
193
- className,
194
- )}
192
+ className={cn("min-w-0 shrink-0 grow-0 basis-full", orientation === "horizontal" ? "pl-4" : "pt-4", className)}
195
193
  {...props}
196
194
  />
197
195
  );
198
196
  },
199
197
  );
200
- CarouselItem.displayName = "CarouselItem";
198
+
199
+ CarouselItem.displayName = CAROUSEL_ITEM_NAME;
201
200
 
202
201
  /* -----------------------------------------------------------------------------
203
202
  * Component: CarouselPrevious
204
203
  * -------------------------------------------------------------------------- */
205
204
 
205
+ const CAROUSEL_PREVIOUS_NAME = "CarouselPrevious";
206
+
207
+ type CarouselPreviousElement = HTMLButtonElement;
206
208
  type CarouselPreviousProps = ButtonProps;
207
- const CarouselPrevious = React.forwardRef<
208
- HTMLButtonElement,
209
- CarouselPreviousProps
210
- >(({ className, variant = "outline", size = "icon", ...props }, ref) => {
211
- const { orientation, scrollPrev, canScrollPrev } = useCarousel();
212
-
213
- return (
214
- <Button
215
- ref={ref}
216
- variant={variant}
217
- size={size}
218
- className={cn(
219
- "absolute size-8 rounded-full",
220
- orientation === "horizontal"
221
- ? "-left-12 top-1/2 -translate-y-1/2"
222
- : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
223
- className,
224
- )}
225
- disabled={!canScrollPrev}
226
- onClick={scrollPrev}
227
- {...props}
228
- >
229
- <ArrowLeftIcon className="size-4" />
230
- <span className="sr-only">Previous slide</span>
231
- </Button>
232
- );
233
- });
234
- CarouselPrevious.displayName = "CarouselPrevious";
209
+
210
+ const CarouselPrevious = React.forwardRef<CarouselPreviousElement, CarouselPreviousProps>(
211
+ (
212
+ { __scopeCarousel, className, variant = "outline", size = "icon", ...props }: ScopedProps<CarouselPreviousProps>,
213
+ ref,
214
+ ) => {
215
+ const { orientation, scrollPrev, canScrollPrev } = useCarouselContext(CAROUSEL_PREVIOUS_NAME, __scopeCarousel);
216
+
217
+ return (
218
+ <Button
219
+ ref={ref}
220
+ variant={variant}
221
+ size={size}
222
+ className={cn(
223
+ "absolute size-8 rounded-full",
224
+ orientation === "horizontal"
225
+ ? "-left-12 top-1/2 -translate-y-1/2"
226
+ : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
227
+ className,
228
+ )}
229
+ disabled={!canScrollPrev}
230
+ onClick={scrollPrev}
231
+ {...props}
232
+ >
233
+ <ArrowLeftIcon className="size-4" />
234
+ <span className="sr-only">Previous slide</span>
235
+ </Button>
236
+ );
237
+ },
238
+ );
239
+
240
+ CarouselPrevious.displayName = CAROUSEL_PREVIOUS_NAME;
235
241
 
236
242
  /* -----------------------------------------------------------------------------
237
243
  * Component: CarouselNext
238
244
  * -------------------------------------------------------------------------- */
239
245
 
246
+ const CAROUSEL_NEXT_NAME = "CarouselNext";
247
+
248
+ type CarouselNextElement = HTMLButtonElement;
240
249
  type CarouselNextProps = ButtonProps;
241
- const CarouselNext = React.forwardRef<HTMLButtonElement, CarouselNextProps>(
242
- ({ className, variant = "outline", size = "icon", ...props }, ref) => {
243
- const { orientation, scrollNext, canScrollNext } = useCarousel();
250
+
251
+ const CarouselNext = React.forwardRef<CarouselNextElement, CarouselNextProps>(
252
+ (
253
+ { __scopeCarousel, className, variant = "outline", size = "icon", ...props }: ScopedProps<CarouselNextProps>,
254
+ ref,
255
+ ) => {
256
+ const { orientation, scrollNext, canScrollNext } = useCarouselContext(CAROUSEL_NEXT_NAME, __scopeCarousel);
244
257
 
245
258
  return (
246
259
  <Button
@@ -264,7 +277,8 @@ const CarouselNext = React.forwardRef<HTMLButtonElement, CarouselNextProps>(
264
277
  );
265
278
  },
266
279
  );
267
- CarouselNext.displayName = "CarouselNext";
280
+
281
+ CarouselNext.displayName = CAROUSEL_NEXT_NAME;
268
282
 
269
283
  /* -----------------------------------------------------------------------------
270
284
  * Exports
@@ -0,0 +1,68 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import { CheckIcon } from "@radix-ui/react-icons";
5
+ import * as CheckboxGroupPrimitive from "./checkbox-group.primitive";
6
+ import { cn } from "./utils";
7
+
8
+ /* -----------------------------------------------------------------------------
9
+ * Component: CheckboxCards
10
+ * -------------------------------------------------------------------------- */
11
+
12
+ type CheckboxCardsElement = React.ElementRef<typeof CheckboxGroupPrimitive.Root>;
13
+ type CheckboxCardsProps = React.ComponentPropsWithoutRef<typeof CheckboxGroupPrimitive.Root>;
14
+
15
+ const CheckboxCards = React.forwardRef<CheckboxCardsElement, CheckboxCardsProps>(({ className, ...props }, ref) => {
16
+ return <CheckboxGroupPrimitive.Root className={cn("grid gap-2", className)} {...props} ref={ref} />;
17
+ });
18
+
19
+ CheckboxCards.displayName = CheckboxGroupPrimitive.Root.displayName;
20
+
21
+ /* -----------------------------------------------------------------------------
22
+ * Component: CheckboxCardsItem
23
+ * -------------------------------------------------------------------------- */
24
+
25
+ type CheckboxCardsItemElement = React.ElementRef<typeof CheckboxGroupPrimitive.Item>;
26
+
27
+ interface CheckboxCardsItemProps extends React.ComponentPropsWithoutRef<typeof CheckboxGroupPrimitive.Item> {
28
+ checkboxClassName?: string;
29
+ }
30
+
31
+ const CheckboxCardsItem = React.forwardRef<CheckboxCardsItemElement, CheckboxCardsItemProps>(
32
+ ({ className, children, checkboxClassName, ...props }, ref) => {
33
+ return (
34
+ <label
35
+ className={cn(
36
+ "border-compound/70 flex items-center justify-center gap-4 rounded-md border p-4",
37
+ "hover:border-compound",
38
+ className,
39
+ )}
40
+ >
41
+ {children}
42
+ <CheckboxGroupPrimitive.Item
43
+ ref={ref}
44
+ className={cn(
45
+ "border-compound/70 peer size-4 shrink-0 cursor-default rounded-sm border shadow",
46
+ "aria-checked:border-primary aria-checked:bg-primary aria-checked:text-primary-foreground",
47
+ "disabled:cursor-not-allowed disabled:opacity-50",
48
+ "focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
49
+ checkboxClassName,
50
+ )}
51
+ {...props}
52
+ >
53
+ <CheckboxGroupPrimitive.CheckboxGroupIndicator className="flex size-full items-center justify-center text-current">
54
+ <CheckIcon className="size-3.5" />
55
+ </CheckboxGroupPrimitive.CheckboxGroupIndicator>
56
+ </CheckboxGroupPrimitive.Item>
57
+ </label>
58
+ );
59
+ },
60
+ );
61
+
62
+ CheckboxCardsItem.displayName = CheckboxGroupPrimitive.Item.displayName;
63
+
64
+ /* -----------------------------------------------------------------------------
65
+ * Exports
66
+ * -------------------------------------------------------------------------- */
67
+
68
+ export { CheckboxCards, CheckboxCardsItem, type CheckboxCardsProps, type CheckboxCardsItemProps };
@@ -0,0 +1,199 @@
1
+ import * as React from "react";
2
+ import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
3
+ import { createCheckboxScope } from "@radix-ui/react-checkbox";
4
+ import { createContextScope, type Scope } from "@radix-ui/react-context";
5
+ import * as RovingFocusGroup from "@radix-ui/react-roving-focus";
6
+ import { createRovingFocusGroupScope } from "@radix-ui/react-roving-focus";
7
+ import { useControllableState } from "@radix-ui/react-use-controllable-state";
8
+ import { useDirection } from "@radix-ui/react-direction";
9
+ import { Primitive } from "@radix-ui/react-primitive";
10
+
11
+ /* -------------------------------------------------------------------------------------------------
12
+ * Component: CheckboxGroup
13
+ * -----------------------------------------------------------------------------------------------*/
14
+
15
+ const CHECKBOX_GROUP_NAME = "CheckboxGroup";
16
+
17
+ type ScopedProps<P> = P & { __scopeCheckboxGroup?: Scope };
18
+
19
+ const [createCheckboxGroupContext, createCheckboxGroupScope] = createContextScope(CHECKBOX_GROUP_NAME, [
20
+ createRovingFocusGroupScope,
21
+ createCheckboxScope,
22
+ ]);
23
+
24
+ const useRovingFocusGroupScope = createRovingFocusGroupScope();
25
+ const useCheckboxScope = createCheckboxScope();
26
+
27
+ interface CheckboxGroupContextValue {
28
+ name?: string;
29
+ required: boolean;
30
+ disabled: boolean;
31
+ value?: string[];
32
+ onItemCheck: (value: string) => void;
33
+ onItemUncheck: (value: string) => void;
34
+ }
35
+
36
+ const [CheckboxGroupProvider, useCheckboxGroupContext] =
37
+ createCheckboxGroupContext<CheckboxGroupContextValue>(CHECKBOX_GROUP_NAME);
38
+
39
+ type CheckboxGroupElement = React.ElementRef<typeof Primitive.div>;
40
+
41
+ interface CheckboxGroupProps extends React.ComponentPropsWithoutRef<typeof Primitive.div> {
42
+ name?: CheckboxGroupContextValue["name"];
43
+ required?: React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>["required"];
44
+ disabled?: React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>["disabled"];
45
+ dir?: RovingFocusGroup.RovingFocusGroupProps["dir"];
46
+ orientation?: RovingFocusGroup.RovingFocusGroupProps["orientation"];
47
+ loop?: RovingFocusGroup.RovingFocusGroupProps["loop"];
48
+ defaultValue?: string[];
49
+ value?: CheckboxGroupContextValue["value"];
50
+ onValueChange?: (value: string[]) => void;
51
+ }
52
+
53
+ const CheckboxGroup = React.forwardRef<CheckboxGroupElement, CheckboxGroupProps>(
54
+ (
55
+ {
56
+ __scopeCheckboxGroup,
57
+ name,
58
+ defaultValue,
59
+ value: valueProp,
60
+ required = false,
61
+ disabled = false,
62
+ orientation,
63
+ dir,
64
+ loop = true,
65
+ onValueChange,
66
+ ...props
67
+ }: ScopedProps<CheckboxGroupProps>,
68
+ ref,
69
+ ) => {
70
+ const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeCheckboxGroup);
71
+ const direction = useDirection(dir);
72
+ const [value = [], setValue] = useControllableState({
73
+ prop: valueProp,
74
+ defaultProp: defaultValue,
75
+ onChange: onValueChange,
76
+ });
77
+
78
+ const handleItemCheck = React.useCallback(
79
+ (itemValue: string) => {
80
+ setValue((prevValue = []) => [...prevValue, itemValue]);
81
+ },
82
+ [setValue],
83
+ );
84
+
85
+ const handleItemUncheck = React.useCallback(
86
+ (itemValue: string) => {
87
+ setValue((prevValue = []) => prevValue.filter((val) => val !== itemValue));
88
+ },
89
+ [setValue],
90
+ );
91
+
92
+ return (
93
+ <CheckboxGroupProvider
94
+ scope={__scopeCheckboxGroup}
95
+ name={name}
96
+ required={required}
97
+ disabled={disabled}
98
+ value={value}
99
+ onItemCheck={handleItemCheck}
100
+ onItemUncheck={handleItemUncheck}
101
+ >
102
+ <RovingFocusGroup.Root asChild {...rovingFocusGroupScope} orientation={orientation} dir={direction} loop={loop}>
103
+ {/* eslint-disable-next-line react/jsx-pascal-case -- radix-ui */}
104
+ <Primitive.div ref={ref} role="group" data-disabled={disabled ? "" : undefined} dir={direction} {...props} />
105
+ </RovingFocusGroup.Root>
106
+ </CheckboxGroupProvider>
107
+ );
108
+ },
109
+ );
110
+
111
+ CheckboxGroup.displayName = CHECKBOX_GROUP_NAME;
112
+
113
+ /* -------------------------------------------------------------------------------------------------
114
+ * Component: CheckboxGroupItem
115
+ * -----------------------------------------------------------------------------------------------*/
116
+
117
+ const ITEM_NAME = `${CHECKBOX_GROUP_NAME}Item`;
118
+
119
+ type CheckboxGroupItemElement = React.ElementRef<typeof CheckboxPrimitive.Root>;
120
+
121
+ interface CheckboxGroupItemProps
122
+ extends Omit<
123
+ React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>,
124
+ "checked" | "defaultChecked" | "onCheckedChange" | "name"
125
+ > {
126
+ value: string;
127
+ }
128
+
129
+ const CheckboxGroupItem = React.forwardRef<CheckboxGroupItemElement, CheckboxGroupItemProps>(
130
+ ({ __scopeCheckboxGroup, disabled, ...props }: ScopedProps<CheckboxGroupItemProps>, ref) => {
131
+ const context = useCheckboxGroupContext(ITEM_NAME, __scopeCheckboxGroup);
132
+ const isDisabled = context.disabled || disabled;
133
+ const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeCheckboxGroup);
134
+ const checkboxScope = useCheckboxScope(__scopeCheckboxGroup);
135
+ const checked = context.value?.includes(props.value);
136
+
137
+ return (
138
+ <RovingFocusGroup.Item asChild {...rovingFocusGroupScope} focusable={!isDisabled} active={checked}>
139
+ <CheckboxPrimitive.Root
140
+ ref={ref}
141
+ name={context.name}
142
+ disabled={isDisabled}
143
+ required={context.required}
144
+ checked={checked}
145
+ {...checkboxScope}
146
+ {...props}
147
+ onCheckedChange={(checkedState) => {
148
+ if (checkedState) {
149
+ context.onItemCheck(props.value);
150
+ } else {
151
+ context.onItemUncheck(props.value);
152
+ }
153
+ }}
154
+ />
155
+ </RovingFocusGroup.Item>
156
+ );
157
+ },
158
+ );
159
+
160
+ CheckboxGroupItem.displayName = ITEM_NAME;
161
+
162
+ /* -------------------------------------------------------------------------------------------------
163
+ * Component: CheckboxGroupIndicator
164
+ * -----------------------------------------------------------------------------------------------*/
165
+
166
+ const INDICATOR_NAME = `${CHECKBOX_GROUP_NAME}Indicator`;
167
+
168
+ type CheckboxGroupIndicatorElement = React.ElementRef<typeof CheckboxPrimitive.Indicator>;
169
+ type CheckboxGroupIndicatorProps = React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Indicator>;
170
+
171
+ const CheckboxGroupIndicator = React.forwardRef<CheckboxGroupIndicatorElement, CheckboxGroupIndicatorProps>(
172
+ ({ __scopeCheckboxGroup, ...props }: ScopedProps<CheckboxGroupIndicatorProps>, ref) => {
173
+ const checkboxScope = useCheckboxScope(__scopeCheckboxGroup);
174
+ return <CheckboxPrimitive.Indicator ref={ref} {...checkboxScope} {...props} />;
175
+ },
176
+ );
177
+
178
+ CheckboxGroupIndicator.displayName = INDICATOR_NAME;
179
+
180
+ /* -----------------------------------------------------------------------------
181
+ * Exports
182
+ * -------------------------------------------------------------------------- */
183
+
184
+ const Root = CheckboxGroup;
185
+ const Item = CheckboxGroupItem;
186
+ const Indicator = CheckboxGroupIndicator;
187
+
188
+ export {
189
+ createCheckboxGroupScope,
190
+ CheckboxGroup,
191
+ CheckboxGroupItem,
192
+ CheckboxGroupIndicator,
193
+ Root,
194
+ Item,
195
+ Indicator,
196
+ type CheckboxGroupProps,
197
+ type CheckboxGroupItemProps,
198
+ type CheckboxGroupIndicatorProps,
199
+ };
@@ -0,0 +1,57 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import { CheckIcon } from "@radix-ui/react-icons";
5
+ import * as CheckboxGroupPrimitive from "./checkbox-group.primitive";
6
+ import { cn } from "./utils";
7
+
8
+ /* -----------------------------------------------------------------------------
9
+ * Component: CheckboxGroup
10
+ * -------------------------------------------------------------------------- */
11
+
12
+ type CheckboxGroupElement = React.ElementRef<typeof CheckboxGroupPrimitive.Root>;
13
+ type CheckboxGroupProps = React.ComponentPropsWithoutRef<typeof CheckboxGroupPrimitive.Root>;
14
+
15
+ const CheckboxGroup = React.forwardRef<CheckboxGroupElement, CheckboxGroupProps>(({ className, ...props }, ref) => {
16
+ return <CheckboxGroupPrimitive.Root ref={ref} className={cn("grid gap-2", className)} {...props} />;
17
+ });
18
+
19
+ CheckboxGroup.displayName = "CheckboxGroup";
20
+
21
+ /* -----------------------------------------------------------------------------
22
+ * Component: CheckboxGroupItem
23
+ * -------------------------------------------------------------------------- */
24
+
25
+ type CheckboxGroupItemElement = React.ElementRef<typeof CheckboxGroupPrimitive.Item>;
26
+ type CheckboxGroupItemProps = React.ComponentPropsWithoutRef<typeof CheckboxGroupPrimitive.Item>;
27
+
28
+ const CheckboxGroupItem = React.forwardRef<CheckboxGroupItemElement, CheckboxGroupItemProps>(
29
+ ({ className, ...props }, ref) => {
30
+ return (
31
+ <CheckboxGroupPrimitive.Item
32
+ ref={ref}
33
+ className={cn(
34
+ "border-compound/70 peer size-4 shrink-0 rounded-sm border shadow",
35
+ "hover:border-compound",
36
+ "aria-checked:border-primary aria-checked:bg-primary aria-checked:text-primary-foreground",
37
+ "disabled:cursor-not-allowed disabled:opacity-50",
38
+ "focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
39
+ className,
40
+ )}
41
+ {...props}
42
+ >
43
+ <CheckboxGroupPrimitive.CheckboxGroupIndicator className="flex size-full items-center justify-center text-current">
44
+ <CheckIcon className="size-3.5" />
45
+ </CheckboxGroupPrimitive.CheckboxGroupIndicator>
46
+ </CheckboxGroupPrimitive.Item>
47
+ );
48
+ },
49
+ );
50
+
51
+ CheckboxGroupItem.displayName = "CheckboxGroupItem";
52
+
53
+ /* -----------------------------------------------------------------------------
54
+ * Exports
55
+ * -------------------------------------------------------------------------- */
56
+
57
+ export { CheckboxGroup, CheckboxGroupItem, type CheckboxGroupProps, type CheckboxGroupItemProps };
package/src/checkbox.tsx CHANGED
@@ -9,15 +9,18 @@ import { cn } from "./utils";
9
9
  * Component: Checkbox
10
10
  * -------------------------------------------------------------------------- */
11
11
 
12
- type CheckboxProps = CheckboxPrimitive.CheckboxProps;
13
- const Checkbox = React.forwardRef<
14
- React.ElementRef<typeof CheckboxPrimitive.Root>,
15
- CheckboxProps
16
- >(({ className, ...props }, ref) => (
12
+ type CheckboxElement = React.ElementRef<typeof CheckboxPrimitive.Root>;
13
+ type CheckboxProps = React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>;
14
+
15
+ const Checkbox = React.forwardRef<CheckboxElement, CheckboxProps>(({ className, ...props }, ref) => (
17
16
  <CheckboxPrimitive.Root
18
17
  ref={ref}
19
18
  className={cn(
20
- "border-compound focus-visible:ring-ring aria-checked:border-primary aria-checked:bg-primary aria-checked:text-primary-foreground peer size-4 shrink-0 rounded-sm border shadow focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
19
+ "border-compound/70 peer size-4 shrink-0 rounded-sm border shadow",
20
+ "hover:border-compound",
21
+ "aria-checked:border-primary aria-checked:bg-primary aria-checked:text-primary-foreground",
22
+ "disabled:cursor-not-allowed disabled:opacity-50",
23
+ "focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
21
24
  className,
22
25
  )}
23
26
  {...props}
@@ -27,6 +30,7 @@ const Checkbox = React.forwardRef<
27
30
  </CheckboxPrimitive.Indicator>
28
31
  </CheckboxPrimitive.Root>
29
32
  ));
33
+
30
34
  Checkbox.displayName = CheckboxPrimitive.Root.displayName;
31
35
 
32
36
  /* -----------------------------------------------------------------------------
package/src/code.tsx CHANGED
@@ -5,16 +5,18 @@ import { Slot } from "@radix-ui/react-slot";
5
5
  * Component: Code
6
6
  * -------------------------------------------------------------------------- */
7
7
 
8
+ type CodeElement = HTMLElement;
9
+
8
10
  interface CodeProps extends React.HTMLAttributes<HTMLElement> {
9
11
  asChild?: boolean;
10
12
  }
11
- const Code = React.forwardRef<HTMLElement, CodeProps>(
12
- ({ asChild, ...props }, ref) => {
13
- const Comp = asChild ? Slot : "code";
14
13
 
15
- return <Comp ref={ref} {...props} />;
16
- },
17
- );
14
+ const Code = React.forwardRef<CodeElement, CodeProps>(({ asChild, ...props }, ref) => {
15
+ const Comp = asChild ? Slot : "code";
16
+
17
+ return <Comp ref={ref} {...props} />;
18
+ });
19
+
18
20
  Code.displayName = "Code";
19
21
 
20
22
  /* -----------------------------------------------------------------------------