@particle-academy/react-fancy 6.11.0 → 6.12.0

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 (280) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/accordion-panel.cjs +7 -7
  3. package/dist/accordion-panel.js +1 -1
  4. package/dist/accordion.cjs +3 -3
  5. package/dist/accordion.js +1 -1
  6. package/dist/autocomplete.cjs +2 -2
  7. package/dist/autocomplete.js +1 -1
  8. package/dist/avatar.cjs +2 -2
  9. package/dist/avatar.js +1 -1
  10. package/dist/breadcrumbs.cjs +2 -2
  11. package/dist/breadcrumbs.js +1 -1
  12. package/dist/calendar.cjs +2 -2
  13. package/dist/calendar.js +1 -1
  14. package/dist/carousel.cjs +7 -7
  15. package/dist/carousel.js +1 -1
  16. package/dist/chart.cjs +2 -2
  17. package/dist/chart.js +1 -1
  18. package/dist/chat-drawer.cjs +2 -2
  19. package/dist/chat-drawer.js +1 -1
  20. package/dist/chat-thread.cjs +4 -4
  21. package/dist/chat-thread.js +2 -2
  22. package/dist/{chunk-GB2EGMVQ.cjs → chunk-2JNOPH3B.cjs} +3 -3
  23. package/dist/chunk-2JNOPH3B.cjs.map +1 -0
  24. package/dist/{chunk-R3PCZSBQ.js → chunk-2OCWIAGS.js} +4 -4
  25. package/dist/chunk-2OCWIAGS.js.map +1 -0
  26. package/dist/{chunk-KRECSPD3.js → chunk-2PNQTEXK.js} +3 -3
  27. package/dist/chunk-2PNQTEXK.js.map +1 -0
  28. package/dist/{chunk-RVBA4LEB.cjs → chunk-2SO4WS2E.cjs} +4 -4
  29. package/dist/{chunk-RVBA4LEB.cjs.map → chunk-2SO4WS2E.cjs.map} +1 -1
  30. package/dist/{chunk-NWP5EGSR.cjs → chunk-2U2VQ2QF.cjs} +4 -4
  31. package/dist/{chunk-NWP5EGSR.cjs.map → chunk-2U2VQ2QF.cjs.map} +1 -1
  32. package/dist/{chunk-LXEOBSEZ.js → chunk-32542ZE6.js} +3 -3
  33. package/dist/{chunk-LXEOBSEZ.js.map → chunk-32542ZE6.js.map} +1 -1
  34. package/dist/{chunk-XQF4HCOV.cjs → chunk-3ISEBGRC.cjs} +14 -14
  35. package/dist/chunk-3ISEBGRC.cjs.map +1 -0
  36. package/dist/{chunk-ZHTK4IPQ.js → chunk-4676NOI6.js} +17 -13
  37. package/dist/chunk-4676NOI6.js.map +1 -0
  38. package/dist/{chunk-J57JSHDC.js → chunk-5EOVD46D.js} +5 -5
  39. package/dist/{chunk-J57JSHDC.js.map → chunk-5EOVD46D.js.map} +1 -1
  40. package/dist/{chunk-NFUKNVB7.cjs → chunk-7J7RHUGH.cjs} +5 -5
  41. package/dist/chunk-7J7RHUGH.cjs.map +1 -0
  42. package/dist/{chunk-NW2LQRUP.js → chunk-7YUXEZXU.js} +3 -3
  43. package/dist/{chunk-NW2LQRUP.js.map → chunk-7YUXEZXU.js.map} +1 -1
  44. package/dist/{chunk-AR5DLM4K.js → chunk-AADPWMZV.js} +3 -3
  45. package/dist/{chunk-AR5DLM4K.js.map → chunk-AADPWMZV.js.map} +1 -1
  46. package/dist/{chunk-5FA6V7JF.js → chunk-B4NXPUOF.js} +3 -3
  47. package/dist/{chunk-5FA6V7JF.js.map → chunk-B4NXPUOF.js.map} +1 -1
  48. package/dist/{chunk-FZQWFDUV.cjs → chunk-BDYIKGV5.cjs} +4 -4
  49. package/dist/chunk-BDYIKGV5.cjs.map +1 -0
  50. package/dist/{chunk-VOAC5OKY.cjs → chunk-BEKJQHOX.cjs} +3 -3
  51. package/dist/{chunk-VOAC5OKY.cjs.map → chunk-BEKJQHOX.cjs.map} +1 -1
  52. package/dist/{chunk-TBLKVTJC.cjs → chunk-CR3AZMQE.cjs} +3 -3
  53. package/dist/{chunk-TBLKVTJC.cjs.map → chunk-CR3AZMQE.cjs.map} +1 -1
  54. package/dist/{chunk-7K2C744H.cjs → chunk-CXR54P5L.cjs} +4 -4
  55. package/dist/chunk-CXR54P5L.cjs.map +1 -0
  56. package/dist/{chunk-5NJF7SQX.js → chunk-D4K666OI.js} +3 -3
  57. package/dist/{chunk-5NJF7SQX.js.map → chunk-D4K666OI.js.map} +1 -1
  58. package/dist/{chunk-C2VGO375.js → chunk-EVFWX2HA.js} +3 -3
  59. package/dist/{chunk-C2VGO375.js.map → chunk-EVFWX2HA.js.map} +1 -1
  60. package/dist/{chunk-UBLMYH6C.js → chunk-EXD56OPP.js} +4 -4
  61. package/dist/chunk-EXD56OPP.js.map +1 -0
  62. package/dist/{chunk-I65KXHYL.js → chunk-F6IRLWBS.js} +6 -6
  63. package/dist/{chunk-I65KXHYL.js.map → chunk-F6IRLWBS.js.map} +1 -1
  64. package/dist/{chunk-C6EVRWXZ.cjs → chunk-FUBGTLKL.cjs} +3 -3
  65. package/dist/{chunk-C6EVRWXZ.cjs.map → chunk-FUBGTLKL.cjs.map} +1 -1
  66. package/dist/{chunk-7N7XVBH7.cjs → chunk-GOIZT7CW.cjs} +6 -6
  67. package/dist/{chunk-7N7XVBH7.cjs.map → chunk-GOIZT7CW.cjs.map} +1 -1
  68. package/dist/{chunk-R4SANV3G.cjs → chunk-IHCG3EHP.cjs} +15 -15
  69. package/dist/chunk-IHCG3EHP.cjs.map +1 -0
  70. package/dist/{chunk-6B2GMKE4.cjs → chunk-IJIP6MWS.cjs} +9 -9
  71. package/dist/chunk-IJIP6MWS.cjs.map +1 -0
  72. package/dist/{chunk-TKGMH5PA.js → chunk-J6YPMR7E.js} +3 -3
  73. package/dist/{chunk-TKGMH5PA.js.map → chunk-J6YPMR7E.js.map} +1 -1
  74. package/dist/{chunk-NIFHAFKK.cjs → chunk-JFPBW5MO.cjs} +17 -13
  75. package/dist/chunk-JFPBW5MO.cjs.map +1 -0
  76. package/dist/{chunk-LG2O26CG.js → chunk-JI4AI3K4.js} +5 -5
  77. package/dist/chunk-JI4AI3K4.js.map +1 -0
  78. package/dist/{chunk-CO2NEUFK.js → chunk-JUQGTTED.js} +4 -4
  79. package/dist/chunk-JUQGTTED.js.map +1 -0
  80. package/dist/{chunk-CG3RCQVL.cjs → chunk-K3NIG7O4.cjs} +6 -6
  81. package/dist/{chunk-CG3RCQVL.cjs.map → chunk-K3NIG7O4.cjs.map} +1 -1
  82. package/dist/{chunk-LJCQI6ZS.js → chunk-KHHTTAKZ.js} +3 -3
  83. package/dist/{chunk-LJCQI6ZS.js.map → chunk-KHHTTAKZ.js.map} +1 -1
  84. package/dist/{chunk-EEFU5BVM.cjs → chunk-KJUUCMHH.cjs} +7 -7
  85. package/dist/{chunk-EEFU5BVM.cjs.map → chunk-KJUUCMHH.cjs.map} +1 -1
  86. package/dist/{chunk-LHHELLMT.cjs → chunk-KRQZGVN3.cjs} +4 -4
  87. package/dist/chunk-KRQZGVN3.cjs.map +1 -0
  88. package/dist/{chunk-KDRBUF5S.js → chunk-LCBMI4WO.js} +3 -3
  89. package/dist/{chunk-KDRBUF5S.js.map → chunk-LCBMI4WO.js.map} +1 -1
  90. package/dist/{chunk-AXW55PQG.js → chunk-M5EKV5PK.js} +3 -3
  91. package/dist/{chunk-AXW55PQG.js.map → chunk-M5EKV5PK.js.map} +1 -1
  92. package/dist/{chunk-D6NISIKV.js → chunk-MSLAK77J.js} +4 -4
  93. package/dist/chunk-MSLAK77J.js.map +1 -0
  94. package/dist/{chunk-26GRLVCQ.js → chunk-N2XFWVF7.js} +3 -3
  95. package/dist/chunk-N2XFWVF7.js.map +1 -0
  96. package/dist/{chunk-3O3ZWWLG.js → chunk-NBIRHOM6.js} +4 -4
  97. package/dist/{chunk-3O3ZWWLG.js.map → chunk-NBIRHOM6.js.map} +1 -1
  98. package/dist/{chunk-FY2WDVKF.cjs → chunk-ND2T3PMH.cjs} +3 -3
  99. package/dist/{chunk-FY2WDVKF.cjs.map → chunk-ND2T3PMH.cjs.map} +1 -1
  100. package/dist/{chunk-GE2ZGE3A.cjs → chunk-O23KGVXS.cjs} +6 -6
  101. package/dist/chunk-O23KGVXS.cjs.map +1 -0
  102. package/dist/{chunk-4EQ336PQ.js → chunk-OIX3DCKN.js} +3 -3
  103. package/dist/{chunk-4EQ336PQ.js.map → chunk-OIX3DCKN.js.map} +1 -1
  104. package/dist/{chunk-JJYMRV62.js → chunk-OIYZCYEY.js} +3 -3
  105. package/dist/chunk-OIYZCYEY.js.map +1 -0
  106. package/dist/{chunk-TH7VP4CL.cjs → chunk-OKHXAI75.cjs} +3 -3
  107. package/dist/{chunk-TH7VP4CL.cjs.map → chunk-OKHXAI75.cjs.map} +1 -1
  108. package/dist/{chunk-5SVZX6WF.cjs → chunk-OLIYEZ4C.cjs} +6 -6
  109. package/dist/{chunk-5SVZX6WF.cjs.map → chunk-OLIYEZ4C.cjs.map} +1 -1
  110. package/dist/{chunk-FX37P4KR.js → chunk-OSNDO2ZF.js} +4 -4
  111. package/dist/{chunk-FX37P4KR.js.map → chunk-OSNDO2ZF.js.map} +1 -1
  112. package/dist/{chunk-K6Q542VL.js → chunk-OUG3YE6E.js} +6 -6
  113. package/dist/{chunk-K6Q542VL.js.map → chunk-OUG3YE6E.js.map} +1 -1
  114. package/dist/{chunk-TXQT6S4D.cjs → chunk-OXR2FUEV.cjs} +3 -3
  115. package/dist/chunk-OXR2FUEV.cjs.map +1 -0
  116. package/dist/{chunk-SD6YAMDH.cjs → chunk-PDE63TMC.cjs} +3 -3
  117. package/dist/{chunk-SD6YAMDH.cjs.map → chunk-PDE63TMC.cjs.map} +1 -1
  118. package/dist/{chunk-HKLBCA5X.cjs → chunk-PIPF34XD.cjs} +4 -4
  119. package/dist/{chunk-HKLBCA5X.cjs.map → chunk-PIPF34XD.cjs.map} +1 -1
  120. package/dist/{chunk-CDW7MFPG.js → chunk-Q5P5WG6Q.js} +4 -4
  121. package/dist/{chunk-CDW7MFPG.js.map → chunk-Q5P5WG6Q.js.map} +1 -1
  122. package/dist/{chunk-ISAHWGMD.cjs → chunk-QJVQEGB7.cjs} +4 -4
  123. package/dist/{chunk-ISAHWGMD.cjs.map → chunk-QJVQEGB7.cjs.map} +1 -1
  124. package/dist/{chunk-6EPM5JG7.cjs → chunk-QLFV2KUQ.cjs} +3 -3
  125. package/dist/{chunk-6EPM5JG7.cjs.map → chunk-QLFV2KUQ.cjs.map} +1 -1
  126. package/dist/{chunk-GISORLGW.cjs → chunk-QMNDEIOJ.cjs} +3 -3
  127. package/dist/{chunk-GISORLGW.cjs.map → chunk-QMNDEIOJ.cjs.map} +1 -1
  128. package/dist/{chunk-OUPHLIXV.cjs → chunk-RBM5VYQG.cjs} +11 -11
  129. package/dist/{chunk-OUPHLIXV.cjs.map → chunk-RBM5VYQG.cjs.map} +1 -1
  130. package/dist/{chunk-24RWB7Q3.js → chunk-RC76D7FD.js} +5 -4
  131. package/dist/chunk-RC76D7FD.js.map +1 -0
  132. package/dist/{chunk-FSLEFL4U.cjs → chunk-RKDQ7RRL.cjs} +3 -3
  133. package/dist/{chunk-FSLEFL4U.cjs.map → chunk-RKDQ7RRL.cjs.map} +1 -1
  134. package/dist/{chunk-Z6M3UELD.js → chunk-S2I4QQBM.js} +3 -3
  135. package/dist/{chunk-Z6M3UELD.js.map → chunk-S2I4QQBM.js.map} +1 -1
  136. package/dist/{chunk-EW2N52FD.js → chunk-SUVSEI7N.js} +4 -4
  137. package/dist/{chunk-EW2N52FD.js.map → chunk-SUVSEI7N.js.map} +1 -1
  138. package/dist/{chunk-FR3V5IAJ.cjs → chunk-T6CBYOES.cjs} +5 -4
  139. package/dist/chunk-T6CBYOES.cjs.map +1 -0
  140. package/dist/{chunk-FECD3WKN.js → chunk-TDY5YPSU.js} +3 -3
  141. package/dist/{chunk-FECD3WKN.js.map → chunk-TDY5YPSU.js.map} +1 -1
  142. package/dist/{chunk-ZFXCZ2QO.cjs → chunk-TQIE25DE.cjs} +11 -11
  143. package/dist/{chunk-ZFXCZ2QO.cjs.map → chunk-TQIE25DE.cjs.map} +1 -1
  144. package/dist/{chunk-GE6TSA3M.cjs → chunk-TRXMF2NG.cjs} +3 -3
  145. package/dist/{chunk-GE6TSA3M.cjs.map → chunk-TRXMF2NG.cjs.map} +1 -1
  146. package/dist/{chunk-AF33UCTN.cjs → chunk-ULEJD5SQ.cjs} +3 -3
  147. package/dist/chunk-ULEJD5SQ.cjs.map +1 -0
  148. package/dist/{chunk-PIYQPXLT.js → chunk-VDD5SLBI.js} +3 -3
  149. package/dist/{chunk-PIYQPXLT.js.map → chunk-VDD5SLBI.js.map} +1 -1
  150. package/dist/{chunk-VOGI7GX3.js → chunk-VKNQ2BGO.js} +3 -3
  151. package/dist/{chunk-VOGI7GX3.js.map → chunk-VKNQ2BGO.js.map} +1 -1
  152. package/dist/{chunk-3BBEVHSP.cjs → chunk-VQHM3UUK.cjs} +3 -3
  153. package/dist/{chunk-3BBEVHSP.cjs.map → chunk-VQHM3UUK.cjs.map} +1 -1
  154. package/dist/{chunk-QMZK7SRS.cjs → chunk-VWZCUKV5.cjs} +3 -3
  155. package/dist/{chunk-QMZK7SRS.cjs.map → chunk-VWZCUKV5.cjs.map} +1 -1
  156. package/dist/{chunk-3W6BKQVZ.js → chunk-X4SUHI3G.js} +4 -4
  157. package/dist/{chunk-3W6BKQVZ.js.map → chunk-X4SUHI3G.js.map} +1 -1
  158. package/dist/{chunk-DQWAG7YY.cjs → chunk-X6XUEM2V.cjs} +4 -4
  159. package/dist/{chunk-DQWAG7YY.cjs.map → chunk-X6XUEM2V.cjs.map} +1 -1
  160. package/dist/{chunk-EDIB6V6Y.cjs → chunk-XIP2TPSX.cjs} +4 -4
  161. package/dist/{chunk-EDIB6V6Y.cjs.map → chunk-XIP2TPSX.cjs.map} +1 -1
  162. package/dist/{chunk-MD7HUHJB.js → chunk-XKUIPBJD.js} +10 -10
  163. package/dist/chunk-XKUIPBJD.js.map +1 -0
  164. package/dist/{chunk-SOIGBPK6.js → chunk-Y3CBLOD6.js} +6 -6
  165. package/dist/chunk-Y3CBLOD6.js.map +1 -0
  166. package/dist/{chunk-YZW7HQXH.js → chunk-YAZGTSKS.js} +14 -14
  167. package/dist/chunk-YAZGTSKS.js.map +1 -0
  168. package/dist/{chunk-MKDTXMCE.js → chunk-YFFW4E77.js} +4 -4
  169. package/dist/{chunk-MKDTXMCE.js.map → chunk-YFFW4E77.js.map} +1 -1
  170. package/dist/{chunk-YPYZZLZ5.js → chunk-YMDFLW47.js} +9 -9
  171. package/dist/chunk-YMDFLW47.js.map +1 -0
  172. package/dist/{chunk-LREJ7AV2.cjs → chunk-Z3IM25W7.cjs} +4 -4
  173. package/dist/{chunk-LREJ7AV2.cjs.map → chunk-Z3IM25W7.cjs.map} +1 -1
  174. package/dist/{chunk-AE6ICNJR.js → chunk-Z5DMAMVG.js} +3 -3
  175. package/dist/{chunk-AE6ICNJR.js.map → chunk-Z5DMAMVG.js.map} +1 -1
  176. package/dist/{chunk-JN5DHZ6I.js → chunk-ZC2H5GM2.js} +6 -6
  177. package/dist/{chunk-JN5DHZ6I.js.map → chunk-ZC2H5GM2.js.map} +1 -1
  178. package/dist/{chunk-DPPDZOMY.cjs → chunk-ZEQXMUXE.cjs} +4 -4
  179. package/dist/chunk-ZEQXMUXE.cjs.map +1 -0
  180. package/dist/{chunk-OP7A4SZZ.cjs → chunk-ZGSSUUK2.cjs} +4 -4
  181. package/dist/{chunk-OP7A4SZZ.cjs.map → chunk-ZGSSUUK2.cjs.map} +1 -1
  182. package/dist/{chunk-3T3LBIQA.cjs → chunk-ZQE2Q3R2.cjs} +4 -4
  183. package/dist/{chunk-3T3LBIQA.cjs.map → chunk-ZQE2Q3R2.cjs.map} +1 -1
  184. package/dist/{chunk-HCIEXBEB.js → chunk-ZRV5TRYW.js} +3 -3
  185. package/dist/{chunk-HCIEXBEB.js.map → chunk-ZRV5TRYW.js.map} +1 -1
  186. package/dist/command.cjs +3 -3
  187. package/dist/command.js +1 -1
  188. package/dist/composer.cjs +4 -4
  189. package/dist/composer.js +2 -2
  190. package/dist/drawer.cjs +3 -3
  191. package/dist/drawer.js +1 -1
  192. package/dist/editor.cjs +3 -3
  193. package/dist/editor.js +1 -1
  194. package/dist/emoji-select.cjs +2 -2
  195. package/dist/emoji-select.js +1 -1
  196. package/dist/file-browser.cjs +5 -5
  197. package/dist/file-browser.js +1 -1
  198. package/dist/file-upload.cjs +3 -3
  199. package/dist/file-upload.js +1 -1
  200. package/dist/index.cjs +129 -129
  201. package/dist/index.js +41 -41
  202. package/dist/input-tag.cjs +6 -6
  203. package/dist/input-tag.js +1 -1
  204. package/dist/input.cjs +3 -3
  205. package/dist/input.js +2 -2
  206. package/dist/inputs.cjs +7 -7
  207. package/dist/inputs.js +4 -4
  208. package/dist/json-editor.cjs +15 -15
  209. package/dist/json-editor.js +4 -4
  210. package/dist/magic-wand.cjs +2 -2
  211. package/dist/magic-wand.js +1 -1
  212. package/dist/media-viewer.cjs +3 -3
  213. package/dist/media-viewer.js +2 -2
  214. package/dist/mobile-menu.cjs +3 -3
  215. package/dist/mobile-menu.js +1 -1
  216. package/dist/modal.cjs +3 -3
  217. package/dist/modal.js +1 -1
  218. package/dist/mood-meter.cjs +2 -2
  219. package/dist/mood-meter.js +1 -1
  220. package/dist/navbar.cjs +3 -3
  221. package/dist/navbar.js +1 -1
  222. package/dist/number-field.cjs +4 -4
  223. package/dist/number-field.js +3 -3
  224. package/dist/pagination.cjs +2 -2
  225. package/dist/pagination.js +1 -1
  226. package/dist/paste-pills.cjs +14 -14
  227. package/dist/paste-pills.js +1 -1
  228. package/dist/phone-input.cjs +6 -6
  229. package/dist/phone-input.js +3 -3
  230. package/dist/pillbox.cjs +2 -2
  231. package/dist/pillbox.js +1 -1
  232. package/dist/profile.cjs +3 -3
  233. package/dist/profile.js +2 -2
  234. package/dist/prompt-input.cjs +5 -5
  235. package/dist/prompt-input.js +2 -2
  236. package/dist/reason-tag.cjs +2 -2
  237. package/dist/reason-tag.js +1 -1
  238. package/dist/select.cjs +2 -2
  239. package/dist/select.js +1 -1
  240. package/dist/sidebar.cjs +3 -3
  241. package/dist/sidebar.js +1 -1
  242. package/dist/table.cjs +11 -11
  243. package/dist/table.js +1 -1
  244. package/dist/time-grid.cjs +2 -2
  245. package/dist/time-grid.js +1 -1
  246. package/dist/time-picker.cjs +2 -2
  247. package/dist/time-picker.js +1 -1
  248. package/dist/toast.cjs +3 -3
  249. package/dist/toast.js +1 -1
  250. package/dist/video-viewer.cjs +2 -2
  251. package/dist/video-viewer.js +1 -1
  252. package/package.json +1 -1
  253. package/dist/chunk-24RWB7Q3.js.map +0 -1
  254. package/dist/chunk-26GRLVCQ.js.map +0 -1
  255. package/dist/chunk-6B2GMKE4.cjs.map +0 -1
  256. package/dist/chunk-7K2C744H.cjs.map +0 -1
  257. package/dist/chunk-AF33UCTN.cjs.map +0 -1
  258. package/dist/chunk-CO2NEUFK.js.map +0 -1
  259. package/dist/chunk-D6NISIKV.js.map +0 -1
  260. package/dist/chunk-DPPDZOMY.cjs.map +0 -1
  261. package/dist/chunk-FR3V5IAJ.cjs.map +0 -1
  262. package/dist/chunk-FZQWFDUV.cjs.map +0 -1
  263. package/dist/chunk-GB2EGMVQ.cjs.map +0 -1
  264. package/dist/chunk-GE2ZGE3A.cjs.map +0 -1
  265. package/dist/chunk-JJYMRV62.js.map +0 -1
  266. package/dist/chunk-KRECSPD3.js.map +0 -1
  267. package/dist/chunk-LG2O26CG.js.map +0 -1
  268. package/dist/chunk-LHHELLMT.cjs.map +0 -1
  269. package/dist/chunk-MD7HUHJB.js.map +0 -1
  270. package/dist/chunk-NFUKNVB7.cjs.map +0 -1
  271. package/dist/chunk-NIFHAFKK.cjs.map +0 -1
  272. package/dist/chunk-R3PCZSBQ.js.map +0 -1
  273. package/dist/chunk-R4SANV3G.cjs.map +0 -1
  274. package/dist/chunk-SOIGBPK6.js.map +0 -1
  275. package/dist/chunk-TXQT6S4D.cjs.map +0 -1
  276. package/dist/chunk-UBLMYH6C.js.map +0 -1
  277. package/dist/chunk-XQF4HCOV.cjs.map +0 -1
  278. package/dist/chunk-YPYZZLZ5.js.map +0 -1
  279. package/dist/chunk-YZW7HQXH.js.map +0 -1
  280. package/dist/chunk-ZHTK4IPQ.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Command/Command.context.ts","../src/components/Command/CommandInput.tsx","../src/components/Command/CommandList.tsx","../src/components/Command/CommandItem.tsx","../src/components/Command/CommandGroup.tsx","../src/components/Command/CommandEmpty.tsx","../src/components/Command/Command.tsx"],"names":["createContext","useContext","jsxs","jsx","Search","cn","useId","useControllableState","useState","useRef","useCallback","useEscapeKey","useEffect","isImeComposing","useLayoutEffect","useAnimation","useDialogFocusTrap","useMemo","Portal"],"mappings":"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","file":"chunk-7J7RHUGH.cjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { CommandContextValue } from \"./Command.types\";\n\nexport const CommandContext = createContext<CommandContextValue | null>(null);\n\nexport function useCommand(): CommandContextValue {\n const ctx = useContext(CommandContext);\n if (!ctx) {\n throw new Error(\n \"Command compound components must be used within <Command>\",\n );\n }\n return ctx;\n}\n","import { Search } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { useCommand } from \"./Command.context\";\nimport type { CommandInputProps } from \"./Command.types\";\n\nexport function CommandInput({\n placeholder = \"Type a command or search...\",\n className,\n}: CommandInputProps) {\n const { query, setQuery, listId } = useCommand();\n\n return (\n <div data-react-fancy-command-input=\"\" className=\"flex items-center border-b border-[color:var(--fancy-border,var(--color-zinc-200))] px-4 dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))]\">\n <Search size={16} aria-hidden=\"true\" className=\"shrink-0 text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\" />\n <input\n type=\"text\"\n // A combobox: focus stays here while the arrows move the active option,\n // which Command announces through aria-activedescendant.\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listId}\n aria-autocomplete=\"list\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={placeholder}\n className={cn(\n \"flex-1 bg-transparent px-3 py-3 text-sm outline-none placeholder:text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:placeholder:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\",\n className,\n )}\n autoFocus\n />\n </div>\n );\n}\n\nCommandInput.displayName = \"CommandInput\";\n","import { cn } from \"../../utils/cn\";\nimport { useCommand } from \"./Command.context\";\nimport type { CommandListProps } from \"./Command.types\";\n\nexport function CommandList({ children, className }: CommandListProps) {\n const { listId } = useCommand();\n\n return (\n <div\n id={listId}\n data-react-fancy-command-list=\"\"\n role=\"listbox\"\n className={cn(\"max-h-72 overflow-y-auto p-2\", className)}\n >\n {children}\n </div>\n );\n}\n\nCommandList.displayName = \"CommandList\";\n","import { useId } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useCommand } from \"./Command.context\";\nimport type { CommandItemProps } from \"./Command.types\";\n\nexport function CommandItem({\n children,\n value,\n onSelect,\n className,\n}: CommandItemProps) {\n const { query, close, shouldFilter, setActiveIndex } = useCommand();\n // Called before the filter's early return, so the hook order never changes.\n const id = useId();\n\n // Filter by query — unless the caller filters for itself (`shouldFilter={false}`).\n const text = value ?? (typeof children === \"string\" ? children : \"\");\n if (shouldFilter && query && !text.toLowerCase().includes(query.toLowerCase())) {\n return null;\n }\n\n return (\n <button\n id={id}\n data-react-fancy-command-item=\"\"\n type=\"button\"\n role=\"option\"\n // Marked active by Command itself (aria-selected + data-active), since an\n // item cannot know its own position among the rendered options.\n aria-selected={false}\n // Keyboard focus stays in the input; the items are reached with the arrows.\n tabIndex={-1}\n onMouseEnter={(e) => {\n const options = e.currentTarget\n .closest(\"[data-react-fancy-command]\")\n ?.querySelectorAll('[role=\"option\"]');\n if (options) setActiveIndex(Array.from(options).indexOf(e.currentTarget));\n }}\n className={cn(\n \"flex w-full items-center rounded-lg px-3 py-2 text-start text-sm transition-colors\",\n \"text-[color:var(--fancy-text-soft,var(--color-zinc-700))] hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] data-[active]:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))] dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:data-[active]:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n className,\n )}\n onClick={() => {\n onSelect?.();\n close();\n }}\n >\n {children}\n </button>\n );\n}\n\nCommandItem.displayName = \"CommandItem\";\n","import { cn } from \"../../utils/cn\";\nimport type { CommandGroupProps } from \"./Command.types\";\n\nexport function CommandGroup({\n children,\n heading,\n className,\n}: CommandGroupProps) {\n return (\n <div data-react-fancy-command-group=\"\" role=\"group\" className={cn(\"py-1\", className)}>\n {heading && (\n <div className=\"px-3 py-1.5 text-xs font-medium text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">\n {heading}\n </div>\n )}\n {children}\n </div>\n );\n}\n\nCommandGroup.displayName = \"CommandGroup\";\n","import { cn } from \"../../utils/cn\";\nimport type { CommandEmptyProps } from \"./Command.types\";\n\nexport function CommandEmpty({\n children = \"No results found.\",\n className,\n}: CommandEmptyProps) {\n return (\n <div\n data-react-fancy-command-empty=\"\"\n className={cn(\n \"py-6 text-center text-sm text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\",\n className,\n )}\n >\n {children}\n </div>\n );\n}\n\nCommandEmpty.displayName = \"CommandEmpty\";\n","import {\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { isImeComposing } from \"../../utils/ime\";\nimport { Portal } from \"../Portal\";\nimport { CommandContext } from \"./Command.context\";\nimport { CommandInput } from \"./CommandInput\";\nimport { CommandList } from \"./CommandList\";\nimport { CommandItem } from \"./CommandItem\";\nimport { CommandGroup } from \"./CommandGroup\";\nimport { CommandEmpty } from \"./CommandEmpty\";\nimport { useDialogFocusTrap } from \"../../hooks/use-dialog-focus-trap\";\nimport { useEscapeKey } from \"../../hooks/use-escape-key\";\nimport { useAnimation } from \"../../hooks/use-animation\";\nimport { useControllableState } from \"../../hooks/use-controllable-state\";\nimport type { CommandProps } from \"./Command.types\";\n\nfunction CommandRoot({\n children,\n open,\n onClose,\n className,\n shouldFilter = true,\n query: controlledQuery,\n onQueryChange,\n}: CommandProps) {\n const [query, setQuery] = useControllableState(controlledQuery, \"\", onQueryChange);\n const [activeIndex, setActiveIndex] = useState(-1);\n const panelRef = useRef<HTMLDivElement>(null);\n const listId = useId();\n\n const close = useCallback(() => {\n onClose();\n setQuery(\"\");\n setActiveIndex(-1);\n }, [onClose]);\n\n useEscapeKey(close, open);\n\n // Cmd+K global shortcut is handled by the consumer\n useEffect(() => {\n if (open) {\n const original = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = original;\n };\n }\n }, [open]);\n\n /*\n * Keyboard navigation, as a combobox: the arrows move the ACTIVE item while\n * focus stays in the input (announced through aria-activedescendant), and\n * Enter picks the active item — or the first visible one when none is active.\n *\n * Focus used to move onto the items, and Enter was handled nowhere, so typing\n * a query and pressing Enter did nothing: only a focused item took Enter, as a\n * native click. Found by Genie 2's real-window test.\n */\n useEffect(() => {\n if (!open) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const items = panelRef.current?.querySelectorAll<HTMLElement>(\n '[role=\"option\"]',\n );\n if (!items?.length) return;\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setActiveIndex(activeIndex < items.length - 1 ? activeIndex + 1 : 0);\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActiveIndex(activeIndex > 0 ? activeIndex - 1 : items.length - 1);\n } else if (e.key === \"Enter\") {\n if (isImeComposing(e)) return;\n // A focused item takes Enter natively, as a click; picking here as well\n // would select it twice.\n if ((e.target as HTMLElement | null)?.getAttribute(\"role\") === \"option\") return;\n const pick = items[activeIndex] ?? items[0];\n e.preventDefault();\n pick.click();\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [open, activeIndex]);\n\n /*\n * Mark the active item and point the input at it. Done on the DOM after each\n * render because an item cannot know its own index — that is its position\n * among the options currently rendered, which filtering changes.\n */\n useLayoutEffect(() => {\n const panel = panelRef.current;\n if (!panel) return;\n\n const items = Array.from(panel.querySelectorAll<HTMLElement>('[role=\"option\"]'));\n const active = items[activeIndex];\n items.forEach((item) => {\n const on = item === active;\n item.setAttribute(\"aria-selected\", on ? \"true\" : \"false\");\n if (on) item.setAttribute(\"data-active\", \"\");\n else item.removeAttribute(\"data-active\");\n });\n\n const input = panel.querySelector<HTMLInputElement>(\"[data-react-fancy-command-input] input\");\n if (active?.id) input?.setAttribute(\"aria-activedescendant\", active.id);\n else input?.removeAttribute(\"aria-activedescendant\");\n active?.scrollIntoView?.({ block: \"nearest\" });\n });\n\n // A new query is a new list: nothing in it is active yet, so Enter picks the first match.\n const changeQuery = useCallback(\n (next: string) => {\n setQuery(next);\n setActiveIndex(-1);\n },\n [setQuery],\n );\n\n const { mounted, className: animClass, ref: animRef } = useAnimation({\n open,\n enterClass: \"fancy-slide-up\",\n exitClass: \"fancy-fade-out\",\n });\n\n // The panel mounts renders after `open` flips; see useDialogFocusTrap.\n const attachTrap = useDialogFocusTrap(open);\n const attachPanel = useCallback(\n (node: HTMLDivElement | null) => {\n panelRef.current = node;\n (animRef as React.MutableRefObject<HTMLElement | null>).current = node;\n attachTrap(node);\n },\n [animRef, attachTrap],\n );\n\n const ctx = useMemo(\n () => ({\n open,\n close,\n query,\n setQuery: changeQuery,\n activeIndex,\n setActiveIndex,\n shouldFilter,\n listId,\n }),\n [open, close, query, changeQuery, activeIndex, shouldFilter, listId],\n );\n\n if (!mounted) return null;\n\n return (\n <CommandContext.Provider value={ctx}>\n <Portal>\n <div className=\"fixed inset-0 z-50 flex items-start justify-center pt-[20vh]\">\n <div\n className=\"absolute inset-0 bg-black/50 backdrop-blur-sm\"\n onClick={close}\n aria-hidden=\"true\"\n />\n <div\n ref={attachPanel}\n data-react-fancy-command=\"\"\n className={cn(\n \"relative w-full max-w-lg overflow-hidden rounded-2xl border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] shadow-2xl dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n animClass,\n className,\n )}\n >\n {children}\n </div>\n </div>\n </Portal>\n </CommandContext.Provider>\n );\n}\n\nexport const Command = Object.assign(CommandRoot, {\n Input: CommandInput,\n List: CommandList,\n Item: CommandItem,\n Group: CommandGroup,\n Empty: CommandEmpty,\n});\n"]}
@@ -58,7 +58,7 @@ function Pagination({
58
58
  }
59
59
  ),
60
60
  pages.map(
61
- (p, i) => p === "ellipsis" ? /* @__PURE__ */ jsx("span", { className: "px-1 text-zinc-400", children: "..." }, `e-${i}`) : /* @__PURE__ */ jsx(
61
+ (p, i) => p === "ellipsis" ? /* @__PURE__ */ jsx("span", { className: "px-1 text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]", children: "..." }, `e-${i}`) : /* @__PURE__ */ jsx(
62
62
  "button",
63
63
  {
64
64
  type: "button",
@@ -95,5 +95,5 @@ function Pagination({
95
95
  Pagination.displayName = "Pagination";
96
96
 
97
97
  export { Pagination };
98
- //# sourceMappingURL=chunk-NW2LQRUP.js.map
99
- //# sourceMappingURL=chunk-NW2LQRUP.js.map
98
+ //# sourceMappingURL=chunk-7YUXEZXU.js.map
99
+ //# sourceMappingURL=chunk-7YUXEZXU.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Pagination/Pagination.tsx"],"names":[],"mappings":"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","file":"chunk-NW2LQRUP.js","sourcesContent":["import { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { useMemo } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { PaginationProps } from \"./Pagination.types\";\n\nfunction range(start: number, end: number): number[] {\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n}\n\nfunction getPages(\n page: number,\n totalPages: number,\n siblings: number,\n): (number | \"ellipsis\")[] {\n const totalSlots = siblings * 2 + 5; // siblings + boundaries + ellipses + current\n if (totalPages <= totalSlots) return range(1, totalPages);\n\n const leftSibling = Math.max(page - siblings, 1);\n const rightSibling = Math.min(page + siblings, totalPages);\n\n const showLeftEllipsis = leftSibling > 2;\n const showRightEllipsis = rightSibling < totalPages - 1;\n\n if (!showLeftEllipsis && showRightEllipsis) {\n const leftRange = range(1, 3 + siblings * 2);\n return [...leftRange, \"ellipsis\", totalPages];\n }\n\n if (showLeftEllipsis && !showRightEllipsis) {\n const rightRange = range(totalPages - (2 + siblings * 2), totalPages);\n return [1, \"ellipsis\", ...rightRange];\n }\n\n return [\n 1,\n \"ellipsis\",\n ...range(leftSibling, rightSibling),\n \"ellipsis\",\n totalPages,\n ];\n}\n\nexport function Pagination({\n page,\n onPageChange,\n totalPages,\n siblingCount = 1,\n className,\n}: PaginationProps) {\n const pages = useMemo(\n () => getPages(page, totalPages, siblingCount),\n [page, totalPages, siblingCount],\n );\n\n if (totalPages <= 1) return null;\n\n const btnBase =\n \"inline-flex h-9 min-w-9 items-center justify-center rounded-lg border text-sm transition-colors\";\n const btnDefault =\n \"border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] hover:bg-zinc-50 dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))] dark:hover:bg-zinc-800\";\n const btnActive =\n \"border-zinc-900 bg-zinc-900 text-white dark:border-white dark:bg-white dark:text-zinc-900\";\n const btnDisabled = \"cursor-not-allowed opacity-50\";\n\n return (\n <nav aria-label=\"Pagination\" data-react-fancy-pagination=\"\" className={cn(\"flex items-center gap-1\", className)}>\n <button\n type=\"button\"\n disabled={page <= 1}\n onClick={() => onPageChange(page - 1)}\n className={cn(btnBase, btnDefault, page <= 1 && btnDisabled, \"px-2\")}\n aria-label=\"Previous page\"\n >\n <ChevronLeft size={16} className=\"rtl:-scale-x-100\" />\n </button>\n\n {pages.map((p, i) =>\n p === \"ellipsis\" ? (\n <span key={`e-${i}`} className=\"px-1 text-zinc-400\">\n ...\n </span>\n ) : (\n <button\n key={p}\n type=\"button\"\n onClick={() => onPageChange(p)}\n aria-current={p === page ? \"page\" : undefined}\n className={cn(\n btnBase,\n p === page ? btnActive : btnDefault,\n \"px-2\",\n )}\n >\n {p}\n </button>\n ),\n )}\n\n <button\n type=\"button\"\n disabled={page >= totalPages}\n onClick={() => onPageChange(page + 1)}\n className={cn(\n btnBase,\n btnDefault,\n page >= totalPages && btnDisabled,\n \"px-2\",\n )}\n aria-label=\"Next page\"\n >\n <ChevronRight size={16} className=\"rtl:-scale-x-100\" />\n </button>\n </nav>\n );\n}\n\nPagination.displayName = \"Pagination\";\n"]}
1
+ {"version":3,"sources":["../src/components/Pagination/Pagination.tsx"],"names":[],"mappings":"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","file":"chunk-7YUXEZXU.js","sourcesContent":["import { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { useMemo } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { PaginationProps } from \"./Pagination.types\";\n\nfunction range(start: number, end: number): number[] {\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n}\n\nfunction getPages(\n page: number,\n totalPages: number,\n siblings: number,\n): (number | \"ellipsis\")[] {\n const totalSlots = siblings * 2 + 5; // siblings + boundaries + ellipses + current\n if (totalPages <= totalSlots) return range(1, totalPages);\n\n const leftSibling = Math.max(page - siblings, 1);\n const rightSibling = Math.min(page + siblings, totalPages);\n\n const showLeftEllipsis = leftSibling > 2;\n const showRightEllipsis = rightSibling < totalPages - 1;\n\n if (!showLeftEllipsis && showRightEllipsis) {\n const leftRange = range(1, 3 + siblings * 2);\n return [...leftRange, \"ellipsis\", totalPages];\n }\n\n if (showLeftEllipsis && !showRightEllipsis) {\n const rightRange = range(totalPages - (2 + siblings * 2), totalPages);\n return [1, \"ellipsis\", ...rightRange];\n }\n\n return [\n 1,\n \"ellipsis\",\n ...range(leftSibling, rightSibling),\n \"ellipsis\",\n totalPages,\n ];\n}\n\nexport function Pagination({\n page,\n onPageChange,\n totalPages,\n siblingCount = 1,\n className,\n}: PaginationProps) {\n const pages = useMemo(\n () => getPages(page, totalPages, siblingCount),\n [page, totalPages, siblingCount],\n );\n\n if (totalPages <= 1) return null;\n\n const btnBase =\n \"inline-flex h-9 min-w-9 items-center justify-center rounded-lg border text-sm transition-colors\";\n const btnDefault =\n \"border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] hover:bg-zinc-50 dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))] dark:hover:bg-zinc-800\";\n const btnActive =\n \"border-zinc-900 bg-zinc-900 text-white dark:border-white dark:bg-white dark:text-zinc-900\";\n const btnDisabled = \"cursor-not-allowed opacity-50\";\n\n return (\n <nav aria-label=\"Pagination\" data-react-fancy-pagination=\"\" className={cn(\"flex items-center gap-1\", className)}>\n <button\n type=\"button\"\n disabled={page <= 1}\n onClick={() => onPageChange(page - 1)}\n className={cn(btnBase, btnDefault, page <= 1 && btnDisabled, \"px-2\")}\n aria-label=\"Previous page\"\n >\n <ChevronLeft size={16} className=\"rtl:-scale-x-100\" />\n </button>\n\n {pages.map((p, i) =>\n p === \"ellipsis\" ? (\n <span key={`e-${i}`} className=\"px-1 text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">\n ...\n </span>\n ) : (\n <button\n key={p}\n type=\"button\"\n onClick={() => onPageChange(p)}\n aria-current={p === page ? \"page\" : undefined}\n className={cn(\n btnBase,\n p === page ? btnActive : btnDefault,\n \"px-2\",\n )}\n >\n {p}\n </button>\n ),\n )}\n\n <button\n type=\"button\"\n disabled={page >= totalPages}\n onClick={() => onPageChange(page + 1)}\n className={cn(\n btnBase,\n btnDefault,\n page >= totalPages && btnDisabled,\n \"px-2\",\n )}\n aria-label=\"Next page\"\n >\n <ChevronRight size={16} className=\"rtl:-scale-x-100\" />\n </button>\n </nav>\n );\n}\n\nPagination.displayName = \"Pagination\";\n"]}
@@ -192,7 +192,7 @@ function Wand({
192
192
  title: a.hint,
193
193
  children: [
194
194
  busy === a.id ? "\u2026" : appearance === "pill" ? a.label[0] : a.label,
195
- appearance === "floating" && a.tag && /* @__PURE__ */ jsx("span", { className: "ms-1 rounded-full bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] px-1 text-[9px] font-medium text-zinc-500 dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]", children: a.tag })
195
+ appearance === "floating" && a.tag && /* @__PURE__ */ jsx("span", { className: "ms-1 rounded-full bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] px-1 text-[9px] font-medium dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))]", children: a.tag })
196
196
  ]
197
197
  },
198
198
  a.id
@@ -263,5 +263,5 @@ function selectionPoint(ta, start, end) {
263
263
  }
264
264
 
265
265
  export { MagicWand };
266
- //# sourceMappingURL=chunk-AR5DLM4K.js.map
267
- //# sourceMappingURL=chunk-AR5DLM4K.js.map
266
+ //# sourceMappingURL=chunk-AADPWMZV.js.map
267
+ //# sourceMappingURL=chunk-AADPWMZV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/MagicWand/MagicWand.tsx"],"names":[],"mappings":"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","file":"chunk-AR5DLM4K.js","sourcesContent":["import { useCallback, useEffect, useRef, useState, type RefObject } from \"react\";\nimport { Button } from \"../Button\";\nimport { Badge } from \"../Badge\";\nimport { Portal } from \"../Portal\";\nimport { Textarea } from \"../inputs/Textarea/Textarea\";\n\n/**\n * MagicWand — selection-anchored floating toolbar for text inputs.\n *\n * When the user highlights text inside the wrapped <Textarea>, a small\n * pill of AI quick-actions floats above the selection. Clicking an\n * action invokes the host callback with the selected substring + range;\n * the host returns a replacement string and MagicWand swaps it in-place.\n *\n * <MagicWand\n * value={body}\n * onValueChange={setBody}\n * actions={[\n * { id: \"rephrase\", label: \"Rephrase\", hint: \"same meaning, different words\",\n * run: async (s) => await ai.rephrase(s) },\n * …\n * ]}\n * />\n *\n * Pass `target` to act on a textarea, input or editor the HOST renders instead:\n * MagicWand then renders no textarea of its own, only the floating wand.\n *\n * <textarea ref={ref} value={body} onChange={(e) => setBody(e.target.value)} />\n * <MagicWand target={ref} value={body} onValueChange={setBody} actions={…} />\n *\n * Two appearances: `\"floating\"` (default — full labels) and `\"pill\"`\n * (icon-only, compact). Auto-hides on click-away or scroll by default.\n */\nexport type MagicWandSelection = { start: number; end: number; text: string };\n\nexport type MagicWandAction = {\n /** Stable id, also shown as the busy-state key. */\n id: string;\n /** Display label (first character used in `pill` mode). */\n label: string;\n /** Tooltip body. */\n hint?: string;\n /** Optional kind chip rendered next to the label. */\n tag?: string;\n /** Returns the replacement text for the selection. */\n run: (selection: string, range: MagicWandSelection) => Promise<string> | string;\n};\n\nexport type MagicWandAppearance = \"pill\" | \"floating\";\n\n/** A viewport rectangle, the shape `getBoundingClientRect()` returns. */\nexport type MagicWandRect = { left: number; top: number; width: number; height: number };\n\n/**\n * How MagicWand reads a selection out of an editor it does not own — a code\n * editor, a contenteditable, anything that is not a plain textarea.\n *\n * Read-only on purpose. The write goes through `onValueChange`, like every other\n * edit, so the host's `value` stays the one source of truth and the editor is\n * updated the way it always is: from that value.\n */\nexport interface MagicWandTargetAdapter {\n /**\n * The editor's element. MagicWand listens on it for `mouseup` / `keyup` /\n * `select` to know the selection may have changed, and treats a click inside\n * it as \"not away\" for `autoHide`.\n */\n element: RefObject<HTMLElement | null> | HTMLElement | null;\n /** The selection as offsets into `value`. `null` or `start === end` hides the wand. */\n getSelection: () => { start: number; end: number } | null;\n /** Where the selection is on screen. Default: the top-centre of `element`. */\n getSelectionRect?: () => MagicWandRect | null;\n}\n\n/** A host-owned textarea / input by ref, or an adapter for anything else. */\nexport type MagicWandTarget =\n | RefObject<HTMLTextAreaElement | HTMLInputElement | null>\n | MagicWandTargetAdapter;\n\nexport interface MagicWandProps {\n /** Controlled value — of the built-in textarea, or of `target`. */\n value: string;\n /** Called on every edit, and with the result of an action. */\n onValueChange: (v: string) => void;\n /** Action list. */\n actions: MagicWandAction[];\n /**\n * Act on a textarea / input / editor the host renders, instead of rendering\n * one. A ref to a textarea or input works as is; anything else takes a\n * `MagicWandTargetAdapter`. `value` must still be the target's current value.\n */\n target?: MagicWandTarget;\n /** Visual treatment. Defaults to \"floating\". */\n appearance?: MagicWandAppearance;\n /** Auto-hide the wand on click-away or scroll. Defaults to true. */\n autoHide?: boolean;\n /** Textarea rows (built-in textarea only). */\n rows?: number;\n /** Placeholder (built-in textarea only). */\n placeholder?: string;\n /** Called after an action runs successfully. */\n onAction?: (action: MagicWandAction, selection: MagicWandSelection, replacement: string) => void;\n}\n\nfunction isAdapter(target: MagicWandTarget): target is MagicWandTargetAdapter {\n return typeof (target as MagicWandTargetAdapter).getSelection === \"function\";\n}\n\nfunction targetElement(target: MagicWandTarget | undefined): HTMLElement | null {\n if (!target) return null;\n if (!isAdapter(target)) return target.current;\n const el = target.element;\n if (!el) return null;\n return el instanceof HTMLElement ? el : el.current;\n}\n\ntype TextField = HTMLTextAreaElement | HTMLInputElement;\n\n/** The selection and the viewport point the wand should sit above, or null. */\nfunction readTarget(\n target: MagicWandTarget,\n): { start: number; end: number; point: { x: number; y: number } } | null {\n if (!isAdapter(target)) {\n const field = target.current as TextField | null;\n if (!field) return null;\n const start = field.selectionStart ?? 0;\n const end = field.selectionEnd ?? 0;\n if (start === end) return null;\n return { start, end, point: selectionPoint(field, start, end) };\n }\n\n const range = target.getSelection();\n if (!range || range.start === range.end) return null;\n const rect = target.getSelectionRect?.() ?? targetElement(target)?.getBoundingClientRect() ?? null;\n const point = rect ? { x: rect.left + rect.width / 2, y: rect.top } : { x: 0, y: 0 };\n return { start: Math.min(range.start, range.end), end: Math.max(range.start, range.end), point };\n}\n\nexport function MagicWand({\n value,\n onValueChange,\n actions,\n target,\n appearance = \"floating\",\n autoHide = true,\n rows = 6,\n placeholder,\n onAction,\n}: MagicWandProps) {\n const taRef = useRef<HTMLTextAreaElement>(null);\n const wandRef = useRef<HTMLDivElement>(null);\n const [sel, setSel] = useState<MagicWandSelection | null>(null);\n const [pos, setPos] = useState<{ x: number; y: number } | null>(null);\n const [busy, setBusy] = useState<string | null>(null);\n\n const external = target !== undefined;\n // Latest value + target for the listeners, which attach once per element.\n const latest = useRef({ value, target });\n latest.current = { value, target };\n\n const hide = useCallback(() => {\n setSel(null);\n setPos(null);\n }, []);\n\n const measureSelection = useCallback(() => {\n const ta = taRef.current;\n if (!ta) return;\n const start = ta.selectionStart ?? 0;\n const end = ta.selectionEnd ?? 0;\n if (start === end) {\n hide();\n return;\n }\n const text = ta.value.slice(start, end);\n setSel({ start, end, text });\n // The built-in wand is positioned inside this component's `relative` box.\n const point = selectionPoint(ta, start, end);\n const box = (ta.offsetParent as HTMLElement | null)?.getBoundingClientRect() ?? ta.getBoundingClientRect();\n setPos({ x: point.x - box.left, y: point.y - box.top });\n }, [hide]);\n\n const measureTarget = useCallback(() => {\n const { target: t, value: v } = latest.current;\n if (!t) return;\n const read = readTarget(t);\n if (!read) {\n hide();\n return;\n }\n setSel({ start: read.start, end: read.end, text: v.slice(read.start, read.end) });\n setPos(read.point);\n }, [hide]);\n\n // The target's element is only known after the host renders it, so it is\n // re-resolved after every render and the listeners move if it changes.\n const [targetEl, setTargetEl] = useState<HTMLElement | null>(null);\n useEffect(() => {\n const next = targetElement(target);\n if (next !== targetEl) setTargetEl(next);\n });\n\n useEffect(() => {\n if (!targetEl) return;\n const events = [\"mouseup\", \"keyup\", \"select\"] as const;\n for (const e of events) targetEl.addEventListener(e, measureTarget);\n return () => {\n for (const e of events) targetEl.removeEventListener(e, measureTarget);\n };\n }, [targetEl, measureTarget]);\n\n useEffect(() => {\n if (!autoHide) return;\n window.addEventListener(\"scroll\", hide, true);\n return () => window.removeEventListener(\"scroll\", hide, true);\n }, [autoHide, hide]);\n\n useEffect(() => {\n if (!autoHide) return;\n const onDocMouseDown = (e: MouseEvent) => {\n const node = e.target as Node;\n if (wandRef.current?.contains(node)) return;\n if (taRef.current?.contains(node)) return;\n if (targetElement(latest.current.target)?.contains(node)) return;\n hide();\n };\n document.addEventListener(\"mousedown\", onDocMouseDown);\n return () => document.removeEventListener(\"mousedown\", onDocMouseDown);\n }, [autoHide, hide]);\n\n const handleAction = async (action: MagicWandAction) => {\n if (!sel) return;\n setBusy(action.id);\n try {\n const replacement = await action.run(sel.text, sel);\n const next = value.slice(0, sel.start) + replacement + value.slice(sel.end);\n onValueChange(next);\n onAction?.(action, sel, replacement);\n } finally {\n setBusy(null);\n hide();\n }\n };\n\n const wand =\n sel && pos ? (\n <Wand\n ref={wandRef}\n pos={pos}\n fixed={external}\n actions={actions}\n appearance={appearance}\n busy={busy}\n onAction={handleAction}\n selectionLength={sel.text.length}\n />\n ) : null;\n\n if (external) {\n return wand ? <Portal>{wand}</Portal> : null;\n }\n\n return (\n <div className=\"relative\">\n <Textarea\n ref={taRef as unknown as React.Ref<HTMLTextAreaElement>}\n value={value}\n onValueChange={onValueChange}\n onSelect={measureSelection}\n onKeyUp={measureSelection}\n onMouseUp={measureSelection}\n rows={rows}\n placeholder={placeholder}\n />\n {wand}\n </div>\n );\n}\n\nfunction Wand({\n ref,\n pos,\n fixed,\n actions,\n appearance,\n busy,\n onAction,\n selectionLength,\n}: {\n ref: React.RefObject<HTMLDivElement | null>;\n pos: { x: number; y: number };\n /** Viewport-positioned (portalled, for an external target) rather than inside the wrapper. */\n fixed: boolean;\n actions: MagicWandAction[];\n appearance: MagicWandAppearance;\n busy: string | null;\n onAction: (a: MagicWandAction) => void;\n selectionLength: number;\n}) {\n return (\n <div\n ref={ref}\n data-react-fancy-magic-wand=\"\"\n className={`${fixed ? \"fixed z-50\" : \"absolute z-20\"} -translate-x-1/2 -translate-y-full`}\n style={{ left: pos.x, top: pos.y - 6 }}\n >\n <div className=\"flex items-center gap-1 rounded-full border border-violet-300 bg-[color:var(--fancy-surface,var(--color-white))] px-1.5 py-1 shadow-lg ring-1 ring-violet-200 dark:border-violet-700 dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))] dark:ring-violet-900\">\n <span className=\"ms-1 me-0.5 inline-flex items-center gap-1 text-[10px] font-medium text-violet-700 dark:text-violet-300\">\n <span aria-hidden>✦</span>\n {appearance === \"floating\" && (\n <Badge color=\"violet\">{selectionLength} chars</Badge>\n )}\n </span>\n {actions.map((a) => (\n <Button\n key={a.id}\n size=\"sm\"\n variant=\"ghost\"\n data-react-fancy-magic-wand-action={a.id}\n onClick={() => onAction(a)}\n disabled={busy !== null}\n title={a.hint}\n >\n {busy === a.id ? \"…\" : appearance === \"pill\" ? a.label[0] : a.label}\n {appearance === \"floating\" && a.tag && (\n <span className=\"ms-1 rounded-full bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] px-1 text-[9px] font-medium text-zinc-500 dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\">\n {a.tag}\n </span>\n )}\n </Button>\n ))}\n </div>\n <div className=\"absolute left-1/2 top-full -translate-x-1/2 -translate-y-px\">\n <div className=\"h-2 w-2 rotate-45 border-b border-r border-violet-300 bg-[color:var(--fancy-surface,var(--color-white))] dark:border-violet-700 dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\" />\n </div>\n </div>\n );\n}\n\n/**\n * Caret/selection geometry: mirror the field into a hidden div and measure the\n * selected substring's bounding rect. Returns the VIEWPORT point at the top\n * centre of the selection. Not perfect for resized textareas, but works for\n * typical chat composers.\n */\nfunction selectionPoint(ta: TextField, start: number, end: number): { x: number; y: number } {\n const div = document.createElement(\"div\");\n const style = getComputedStyle(ta);\n const props = [\n \"boxSizing\",\n \"width\",\n \"height\",\n \"overflowX\",\n \"overflowY\",\n \"borderTopWidth\",\n \"borderRightWidth\",\n \"borderBottomWidth\",\n \"borderLeftWidth\",\n \"paddingTop\",\n \"paddingRight\",\n \"paddingBottom\",\n \"paddingLeft\",\n \"fontStyle\",\n \"fontVariant\",\n \"fontWeight\",\n \"fontStretch\",\n \"fontSize\",\n \"fontSizeAdjust\",\n \"lineHeight\",\n \"fontFamily\",\n \"textAlign\",\n // An RTL textarea lays its lines out from the right; without this the\n // mirror measures the caret as if it were LTR.\n \"direction\",\n \"textTransform\",\n \"textIndent\",\n \"letterSpacing\",\n \"wordSpacing\",\n \"tabSize\",\n ] as const;\n for (const p of props) (div.style as any)[p] = (style as any)[p];\n div.style.position = \"absolute\";\n div.style.top = \"-9999px\";\n div.style.left = \"-9999px\";\n div.style.whiteSpace = \"pre-wrap\";\n div.style.wordWrap = \"break-word\";\n\n const value = ta.value;\n div.textContent = value.substring(0, start);\n const startSpan = document.createElement(\"span\");\n startSpan.textContent = value.substring(start, end) || \".\";\n div.appendChild(startSpan);\n\n document.body.appendChild(div);\n const taRect = ta.getBoundingClientRect();\n const spanRect = startSpan.getBoundingClientRect();\n const divRect = div.getBoundingClientRect();\n const offsetX = spanRect.left - divRect.left;\n const offsetY = spanRect.top - divRect.top;\n document.body.removeChild(div);\n\n return {\n x: taRect.left + offsetX + spanRect.width / 2,\n y: taRect.top + offsetY - ta.scrollTop,\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/components/MagicWand/MagicWand.tsx"],"names":[],"mappings":"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","file":"chunk-AADPWMZV.js","sourcesContent":["import { useCallback, useEffect, useRef, useState, type RefObject } from \"react\";\nimport { Button } from \"../Button\";\nimport { Badge } from \"../Badge\";\nimport { Portal } from \"../Portal\";\nimport { Textarea } from \"../inputs/Textarea/Textarea\";\n\n/**\n * MagicWand — selection-anchored floating toolbar for text inputs.\n *\n * When the user highlights text inside the wrapped <Textarea>, a small\n * pill of AI quick-actions floats above the selection. Clicking an\n * action invokes the host callback with the selected substring + range;\n * the host returns a replacement string and MagicWand swaps it in-place.\n *\n * <MagicWand\n * value={body}\n * onValueChange={setBody}\n * actions={[\n * { id: \"rephrase\", label: \"Rephrase\", hint: \"same meaning, different words\",\n * run: async (s) => await ai.rephrase(s) },\n * …\n * ]}\n * />\n *\n * Pass `target` to act on a textarea, input or editor the HOST renders instead:\n * MagicWand then renders no textarea of its own, only the floating wand.\n *\n * <textarea ref={ref} value={body} onChange={(e) => setBody(e.target.value)} />\n * <MagicWand target={ref} value={body} onValueChange={setBody} actions={…} />\n *\n * Two appearances: `\"floating\"` (default — full labels) and `\"pill\"`\n * (icon-only, compact). Auto-hides on click-away or scroll by default.\n */\nexport type MagicWandSelection = { start: number; end: number; text: string };\n\nexport type MagicWandAction = {\n /** Stable id, also shown as the busy-state key. */\n id: string;\n /** Display label (first character used in `pill` mode). */\n label: string;\n /** Tooltip body. */\n hint?: string;\n /** Optional kind chip rendered next to the label. */\n tag?: string;\n /** Returns the replacement text for the selection. */\n run: (selection: string, range: MagicWandSelection) => Promise<string> | string;\n};\n\nexport type MagicWandAppearance = \"pill\" | \"floating\";\n\n/** A viewport rectangle, the shape `getBoundingClientRect()` returns. */\nexport type MagicWandRect = { left: number; top: number; width: number; height: number };\n\n/**\n * How MagicWand reads a selection out of an editor it does not own — a code\n * editor, a contenteditable, anything that is not a plain textarea.\n *\n * Read-only on purpose. The write goes through `onValueChange`, like every other\n * edit, so the host's `value` stays the one source of truth and the editor is\n * updated the way it always is: from that value.\n */\nexport interface MagicWandTargetAdapter {\n /**\n * The editor's element. MagicWand listens on it for `mouseup` / `keyup` /\n * `select` to know the selection may have changed, and treats a click inside\n * it as \"not away\" for `autoHide`.\n */\n element: RefObject<HTMLElement | null> | HTMLElement | null;\n /** The selection as offsets into `value`. `null` or `start === end` hides the wand. */\n getSelection: () => { start: number; end: number } | null;\n /** Where the selection is on screen. Default: the top-centre of `element`. */\n getSelectionRect?: () => MagicWandRect | null;\n}\n\n/** A host-owned textarea / input by ref, or an adapter for anything else. */\nexport type MagicWandTarget =\n | RefObject<HTMLTextAreaElement | HTMLInputElement | null>\n | MagicWandTargetAdapter;\n\nexport interface MagicWandProps {\n /** Controlled value — of the built-in textarea, or of `target`. */\n value: string;\n /** Called on every edit, and with the result of an action. */\n onValueChange: (v: string) => void;\n /** Action list. */\n actions: MagicWandAction[];\n /**\n * Act on a textarea / input / editor the host renders, instead of rendering\n * one. A ref to a textarea or input works as is; anything else takes a\n * `MagicWandTargetAdapter`. `value` must still be the target's current value.\n */\n target?: MagicWandTarget;\n /** Visual treatment. Defaults to \"floating\". */\n appearance?: MagicWandAppearance;\n /** Auto-hide the wand on click-away or scroll. Defaults to true. */\n autoHide?: boolean;\n /** Textarea rows (built-in textarea only). */\n rows?: number;\n /** Placeholder (built-in textarea only). */\n placeholder?: string;\n /** Called after an action runs successfully. */\n onAction?: (action: MagicWandAction, selection: MagicWandSelection, replacement: string) => void;\n}\n\nfunction isAdapter(target: MagicWandTarget): target is MagicWandTargetAdapter {\n return typeof (target as MagicWandTargetAdapter).getSelection === \"function\";\n}\n\nfunction targetElement(target: MagicWandTarget | undefined): HTMLElement | null {\n if (!target) return null;\n if (!isAdapter(target)) return target.current;\n const el = target.element;\n if (!el) return null;\n return el instanceof HTMLElement ? el : el.current;\n}\n\ntype TextField = HTMLTextAreaElement | HTMLInputElement;\n\n/** The selection and the viewport point the wand should sit above, or null. */\nfunction readTarget(\n target: MagicWandTarget,\n): { start: number; end: number; point: { x: number; y: number } } | null {\n if (!isAdapter(target)) {\n const field = target.current as TextField | null;\n if (!field) return null;\n const start = field.selectionStart ?? 0;\n const end = field.selectionEnd ?? 0;\n if (start === end) return null;\n return { start, end, point: selectionPoint(field, start, end) };\n }\n\n const range = target.getSelection();\n if (!range || range.start === range.end) return null;\n const rect = target.getSelectionRect?.() ?? targetElement(target)?.getBoundingClientRect() ?? null;\n const point = rect ? { x: rect.left + rect.width / 2, y: rect.top } : { x: 0, y: 0 };\n return { start: Math.min(range.start, range.end), end: Math.max(range.start, range.end), point };\n}\n\nexport function MagicWand({\n value,\n onValueChange,\n actions,\n target,\n appearance = \"floating\",\n autoHide = true,\n rows = 6,\n placeholder,\n onAction,\n}: MagicWandProps) {\n const taRef = useRef<HTMLTextAreaElement>(null);\n const wandRef = useRef<HTMLDivElement>(null);\n const [sel, setSel] = useState<MagicWandSelection | null>(null);\n const [pos, setPos] = useState<{ x: number; y: number } | null>(null);\n const [busy, setBusy] = useState<string | null>(null);\n\n const external = target !== undefined;\n // Latest value + target for the listeners, which attach once per element.\n const latest = useRef({ value, target });\n latest.current = { value, target };\n\n const hide = useCallback(() => {\n setSel(null);\n setPos(null);\n }, []);\n\n const measureSelection = useCallback(() => {\n const ta = taRef.current;\n if (!ta) return;\n const start = ta.selectionStart ?? 0;\n const end = ta.selectionEnd ?? 0;\n if (start === end) {\n hide();\n return;\n }\n const text = ta.value.slice(start, end);\n setSel({ start, end, text });\n // The built-in wand is positioned inside this component's `relative` box.\n const point = selectionPoint(ta, start, end);\n const box = (ta.offsetParent as HTMLElement | null)?.getBoundingClientRect() ?? ta.getBoundingClientRect();\n setPos({ x: point.x - box.left, y: point.y - box.top });\n }, [hide]);\n\n const measureTarget = useCallback(() => {\n const { target: t, value: v } = latest.current;\n if (!t) return;\n const read = readTarget(t);\n if (!read) {\n hide();\n return;\n }\n setSel({ start: read.start, end: read.end, text: v.slice(read.start, read.end) });\n setPos(read.point);\n }, [hide]);\n\n // The target's element is only known after the host renders it, so it is\n // re-resolved after every render and the listeners move if it changes.\n const [targetEl, setTargetEl] = useState<HTMLElement | null>(null);\n useEffect(() => {\n const next = targetElement(target);\n if (next !== targetEl) setTargetEl(next);\n });\n\n useEffect(() => {\n if (!targetEl) return;\n const events = [\"mouseup\", \"keyup\", \"select\"] as const;\n for (const e of events) targetEl.addEventListener(e, measureTarget);\n return () => {\n for (const e of events) targetEl.removeEventListener(e, measureTarget);\n };\n }, [targetEl, measureTarget]);\n\n useEffect(() => {\n if (!autoHide) return;\n window.addEventListener(\"scroll\", hide, true);\n return () => window.removeEventListener(\"scroll\", hide, true);\n }, [autoHide, hide]);\n\n useEffect(() => {\n if (!autoHide) return;\n const onDocMouseDown = (e: MouseEvent) => {\n const node = e.target as Node;\n if (wandRef.current?.contains(node)) return;\n if (taRef.current?.contains(node)) return;\n if (targetElement(latest.current.target)?.contains(node)) return;\n hide();\n };\n document.addEventListener(\"mousedown\", onDocMouseDown);\n return () => document.removeEventListener(\"mousedown\", onDocMouseDown);\n }, [autoHide, hide]);\n\n const handleAction = async (action: MagicWandAction) => {\n if (!sel) return;\n setBusy(action.id);\n try {\n const replacement = await action.run(sel.text, sel);\n const next = value.slice(0, sel.start) + replacement + value.slice(sel.end);\n onValueChange(next);\n onAction?.(action, sel, replacement);\n } finally {\n setBusy(null);\n hide();\n }\n };\n\n const wand =\n sel && pos ? (\n <Wand\n ref={wandRef}\n pos={pos}\n fixed={external}\n actions={actions}\n appearance={appearance}\n busy={busy}\n onAction={handleAction}\n selectionLength={sel.text.length}\n />\n ) : null;\n\n if (external) {\n return wand ? <Portal>{wand}</Portal> : null;\n }\n\n return (\n <div className=\"relative\">\n <Textarea\n ref={taRef as unknown as React.Ref<HTMLTextAreaElement>}\n value={value}\n onValueChange={onValueChange}\n onSelect={measureSelection}\n onKeyUp={measureSelection}\n onMouseUp={measureSelection}\n rows={rows}\n placeholder={placeholder}\n />\n {wand}\n </div>\n );\n}\n\nfunction Wand({\n ref,\n pos,\n fixed,\n actions,\n appearance,\n busy,\n onAction,\n selectionLength,\n}: {\n ref: React.RefObject<HTMLDivElement | null>;\n pos: { x: number; y: number };\n /** Viewport-positioned (portalled, for an external target) rather than inside the wrapper. */\n fixed: boolean;\n actions: MagicWandAction[];\n appearance: MagicWandAppearance;\n busy: string | null;\n onAction: (a: MagicWandAction) => void;\n selectionLength: number;\n}) {\n return (\n <div\n ref={ref}\n data-react-fancy-magic-wand=\"\"\n className={`${fixed ? \"fixed z-50\" : \"absolute z-20\"} -translate-x-1/2 -translate-y-full`}\n style={{ left: pos.x, top: pos.y - 6 }}\n >\n <div className=\"flex items-center gap-1 rounded-full border border-violet-300 bg-[color:var(--fancy-surface,var(--color-white))] px-1.5 py-1 shadow-lg ring-1 ring-violet-200 dark:border-violet-700 dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))] dark:ring-violet-900\">\n <span className=\"ms-1 me-0.5 inline-flex items-center gap-1 text-[10px] font-medium text-violet-700 dark:text-violet-300\">\n <span aria-hidden>✦</span>\n {appearance === \"floating\" && (\n <Badge color=\"violet\">{selectionLength} chars</Badge>\n )}\n </span>\n {actions.map((a) => (\n <Button\n key={a.id}\n size=\"sm\"\n variant=\"ghost\"\n data-react-fancy-magic-wand-action={a.id}\n onClick={() => onAction(a)}\n disabled={busy !== null}\n title={a.hint}\n >\n {busy === a.id ? \"…\" : appearance === \"pill\" ? a.label[0] : a.label}\n {appearance === \"floating\" && a.tag && (\n <span className=\"ms-1 rounded-full bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] px-1 text-[9px] font-medium dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))]\">\n {a.tag}\n </span>\n )}\n </Button>\n ))}\n </div>\n <div className=\"absolute left-1/2 top-full -translate-x-1/2 -translate-y-px\">\n <div className=\"h-2 w-2 rotate-45 border-b border-r border-violet-300 bg-[color:var(--fancy-surface,var(--color-white))] dark:border-violet-700 dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\" />\n </div>\n </div>\n );\n}\n\n/**\n * Caret/selection geometry: mirror the field into a hidden div and measure the\n * selected substring's bounding rect. Returns the VIEWPORT point at the top\n * centre of the selection. Not perfect for resized textareas, but works for\n * typical chat composers.\n */\nfunction selectionPoint(ta: TextField, start: number, end: number): { x: number; y: number } {\n const div = document.createElement(\"div\");\n const style = getComputedStyle(ta);\n const props = [\n \"boxSizing\",\n \"width\",\n \"height\",\n \"overflowX\",\n \"overflowY\",\n \"borderTopWidth\",\n \"borderRightWidth\",\n \"borderBottomWidth\",\n \"borderLeftWidth\",\n \"paddingTop\",\n \"paddingRight\",\n \"paddingBottom\",\n \"paddingLeft\",\n \"fontStyle\",\n \"fontVariant\",\n \"fontWeight\",\n \"fontStretch\",\n \"fontSize\",\n \"fontSizeAdjust\",\n \"lineHeight\",\n \"fontFamily\",\n \"textAlign\",\n // An RTL textarea lays its lines out from the right; without this the\n // mirror measures the caret as if it were LTR.\n \"direction\",\n \"textTransform\",\n \"textIndent\",\n \"letterSpacing\",\n \"wordSpacing\",\n \"tabSize\",\n ] as const;\n for (const p of props) (div.style as any)[p] = (style as any)[p];\n div.style.position = \"absolute\";\n div.style.top = \"-9999px\";\n div.style.left = \"-9999px\";\n div.style.whiteSpace = \"pre-wrap\";\n div.style.wordWrap = \"break-word\";\n\n const value = ta.value;\n div.textContent = value.substring(0, start);\n const startSpan = document.createElement(\"span\");\n startSpan.textContent = value.substring(start, end) || \".\";\n div.appendChild(startSpan);\n\n document.body.appendChild(div);\n const taRect = ta.getBoundingClientRect();\n const spanRect = startSpan.getBoundingClientRect();\n const divRect = div.getBoundingClientRect();\n const offsetX = spanRect.left - divRect.left;\n const offsetY = spanRect.top - divRect.top;\n document.body.removeChild(div);\n\n return {\n x: taRect.left + offsetX + spanRect.width / 2,\n y: taRect.top + offsetY - ta.scrollTop,\n };\n}\n"]}
@@ -52,7 +52,7 @@ function AccordionTrigger({
52
52
  onClick: () => toggle(value),
53
53
  "aria-expanded": isOpen,
54
54
  className: cn(
55
- "flex w-full items-center justify-between py-4 text-start text-sm font-medium transition-colors hover:text-zinc-600 dark:hover:text-zinc-300",
55
+ "flex w-full items-center justify-between py-4 text-start text-sm font-medium transition-colors hover:text-[color:var(--fancy-text-soft,var(--color-zinc-700))] dark:hover:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))]",
56
56
  className
57
57
  ),
58
58
  children: [
@@ -115,5 +115,5 @@ var Accordion = Object.assign(AccordionRoot, {
115
115
  });
116
116
 
117
117
  export { Accordion, useAccordion };
118
- //# sourceMappingURL=chunk-5FA6V7JF.js.map
119
- //# sourceMappingURL=chunk-5FA6V7JF.js.map
118
+ //# sourceMappingURL=chunk-B4NXPUOF.js.map
119
+ //# sourceMappingURL=chunk-B4NXPUOF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Accordion/Accordion.context.ts","../src/components/Accordion/AccordionItem.tsx","../src/components/Accordion/AccordionTrigger.tsx","../src/components/Accordion/AccordionContent.tsx","../src/components/Accordion/Accordion.tsx"],"names":["jsx"],"mappings":"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","file":"chunk-5FA6V7JF.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { AccordionContextValue } from \"./Accordion.types\";\n\nexport const AccordionContext = createContext<AccordionContextValue | null>(\n null,\n);\n\nexport function useAccordion(): AccordionContextValue {\n const ctx = useContext(AccordionContext);\n if (!ctx) {\n throw new Error(\n \"Accordion compound components must be used within <Accordion>\",\n );\n }\n return ctx;\n}\n\nexport const AccordionItemContext = createContext<string>(\"\");\n\nexport function useAccordionItem(): string {\n return useContext(AccordionItemContext);\n}\n","import { cn } from \"../../utils/cn\";\nimport { AccordionItemContext } from \"./Accordion.context\";\nimport type { AccordionItemProps } from \"./Accordion.types\";\n\nexport function AccordionItem({\n children,\n value,\n className,\n}: AccordionItemProps) {\n return (\n <AccordionItemContext.Provider value={value}>\n <div\n data-react-fancy-accordion-item=\"\"\n className={cn(\n \"border-b border-[color:var(--fancy-border,var(--color-zinc-200))] dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))]\",\n className,\n )}\n >\n {children}\n </div>\n </AccordionItemContext.Provider>\n );\n}\n\nAccordionItem.displayName = \"AccordionItem\";\n","import { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { useAccordion, useAccordionItem } from \"./Accordion.context\";\nimport type { AccordionTriggerProps } from \"./Accordion.types\";\n\nexport function AccordionTrigger({\n children,\n className,\n}: AccordionTriggerProps) {\n const { openItems, toggle } = useAccordion();\n const value = useAccordionItem();\n const isOpen = openItems.includes(value);\n\n return (\n <button\n data-react-fancy-accordion-trigger=\"\"\n type=\"button\"\n onClick={() => toggle(value)}\n aria-expanded={isOpen}\n className={cn(\n \"flex w-full items-center justify-between py-4 text-start text-sm font-medium transition-colors hover:text-zinc-600 dark:hover:text-zinc-300\",\n className,\n )}\n >\n {children}\n <ChevronDown size={16} className={cn(\"shrink-0 transition-transform duration-200\", isOpen && \"rotate-180\")} />\n </button>\n );\n}\n\nAccordionTrigger.displayName = \"AccordionTrigger\";\n","import { cn } from \"../../utils/cn\";\nimport { useAccordion, useAccordionItem } from \"./Accordion.context\";\nimport type { AccordionContentProps } from \"./Accordion.types\";\n\nexport function AccordionContent({\n children,\n className,\n}: AccordionContentProps) {\n const { openItems } = useAccordion();\n const value = useAccordionItem();\n const isOpen = openItems.includes(value);\n\n return (\n <div\n data-react-fancy-accordion-content=\"\"\n className={cn(\n \"grid transition-all duration-200\",\n isOpen ? \"grid-rows-[1fr]\" : \"grid-rows-[0fr]\",\n )}\n >\n <div className=\"overflow-hidden\">\n <div className={cn(\"pb-4 text-sm text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))]\", className)}>\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nAccordionContent.displayName = \"AccordionContent\";\n","import { useCallback, useMemo, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { AccordionContext } from \"./Accordion.context\";\nimport { AccordionItem } from \"./AccordionItem\";\nimport { AccordionTrigger } from \"./AccordionTrigger\";\nimport { AccordionContent } from \"./AccordionContent\";\nimport type { AccordionProps } from \"./Accordion.types\";\n\nfunction AccordionRoot({\n children,\n type = \"single\",\n defaultOpen = [],\n className,\n}: AccordionProps) {\n const [openItems, setOpenItems] = useState<string[]>(defaultOpen);\n const multiple = type === \"multiple\";\n\n const toggle = useCallback(\n (value: string) => {\n setOpenItems((prev) => {\n if (prev.includes(value)) {\n return prev.filter((v) => v !== value);\n }\n return multiple ? [...prev, value] : [value];\n });\n },\n [multiple],\n );\n\n const ctx = useMemo(\n () => ({ openItems, toggle, multiple }),\n [openItems, toggle, multiple],\n );\n\n return (\n <AccordionContext.Provider value={ctx}>\n <div data-react-fancy-accordion=\"\" className={cn(className)}>{children}</div>\n </AccordionContext.Provider>\n );\n}\n\nexport const Accordion = Object.assign(AccordionRoot, {\n Item: AccordionItem,\n Trigger: AccordionTrigger,\n Content: AccordionContent,\n});\n"]}
1
+ {"version":3,"sources":["../src/components/Accordion/Accordion.context.ts","../src/components/Accordion/AccordionItem.tsx","../src/components/Accordion/AccordionTrigger.tsx","../src/components/Accordion/AccordionContent.tsx","../src/components/Accordion/Accordion.tsx"],"names":["jsx"],"mappings":"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","file":"chunk-B4NXPUOF.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { AccordionContextValue } from \"./Accordion.types\";\n\nexport const AccordionContext = createContext<AccordionContextValue | null>(\n null,\n);\n\nexport function useAccordion(): AccordionContextValue {\n const ctx = useContext(AccordionContext);\n if (!ctx) {\n throw new Error(\n \"Accordion compound components must be used within <Accordion>\",\n );\n }\n return ctx;\n}\n\nexport const AccordionItemContext = createContext<string>(\"\");\n\nexport function useAccordionItem(): string {\n return useContext(AccordionItemContext);\n}\n","import { cn } from \"../../utils/cn\";\nimport { AccordionItemContext } from \"./Accordion.context\";\nimport type { AccordionItemProps } from \"./Accordion.types\";\n\nexport function AccordionItem({\n children,\n value,\n className,\n}: AccordionItemProps) {\n return (\n <AccordionItemContext.Provider value={value}>\n <div\n data-react-fancy-accordion-item=\"\"\n className={cn(\n \"border-b border-[color:var(--fancy-border,var(--color-zinc-200))] dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))]\",\n className,\n )}\n >\n {children}\n </div>\n </AccordionItemContext.Provider>\n );\n}\n\nAccordionItem.displayName = \"AccordionItem\";\n","import { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { useAccordion, useAccordionItem } from \"./Accordion.context\";\nimport type { AccordionTriggerProps } from \"./Accordion.types\";\n\nexport function AccordionTrigger({\n children,\n className,\n}: AccordionTriggerProps) {\n const { openItems, toggle } = useAccordion();\n const value = useAccordionItem();\n const isOpen = openItems.includes(value);\n\n return (\n <button\n data-react-fancy-accordion-trigger=\"\"\n type=\"button\"\n onClick={() => toggle(value)}\n aria-expanded={isOpen}\n className={cn(\n \"flex w-full items-center justify-between py-4 text-start text-sm font-medium transition-colors hover:text-[color:var(--fancy-text-soft,var(--color-zinc-700))] dark:hover:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))]\",\n className,\n )}\n >\n {children}\n <ChevronDown size={16} className={cn(\"shrink-0 transition-transform duration-200\", isOpen && \"rotate-180\")} />\n </button>\n );\n}\n\nAccordionTrigger.displayName = \"AccordionTrigger\";\n","import { cn } from \"../../utils/cn\";\nimport { useAccordion, useAccordionItem } from \"./Accordion.context\";\nimport type { AccordionContentProps } from \"./Accordion.types\";\n\nexport function AccordionContent({\n children,\n className,\n}: AccordionContentProps) {\n const { openItems } = useAccordion();\n const value = useAccordionItem();\n const isOpen = openItems.includes(value);\n\n return (\n <div\n data-react-fancy-accordion-content=\"\"\n className={cn(\n \"grid transition-all duration-200\",\n isOpen ? \"grid-rows-[1fr]\" : \"grid-rows-[0fr]\",\n )}\n >\n <div className=\"overflow-hidden\">\n <div className={cn(\"pb-4 text-sm text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))]\", className)}>\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nAccordionContent.displayName = \"AccordionContent\";\n","import { useCallback, useMemo, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { AccordionContext } from \"./Accordion.context\";\nimport { AccordionItem } from \"./AccordionItem\";\nimport { AccordionTrigger } from \"./AccordionTrigger\";\nimport { AccordionContent } from \"./AccordionContent\";\nimport type { AccordionProps } from \"./Accordion.types\";\n\nfunction AccordionRoot({\n children,\n type = \"single\",\n defaultOpen = [],\n className,\n}: AccordionProps) {\n const [openItems, setOpenItems] = useState<string[]>(defaultOpen);\n const multiple = type === \"multiple\";\n\n const toggle = useCallback(\n (value: string) => {\n setOpenItems((prev) => {\n if (prev.includes(value)) {\n return prev.filter((v) => v !== value);\n }\n return multiple ? [...prev, value] : [value];\n });\n },\n [multiple],\n );\n\n const ctx = useMemo(\n () => ({ openItems, toggle, multiple }),\n [openItems, toggle, multiple],\n );\n\n return (\n <AccordionContext.Provider value={ctx}>\n <div data-react-fancy-accordion=\"\" className={cn(className)}>{children}</div>\n </AccordionContext.Provider>\n );\n}\n\nexport const Accordion = Object.assign(AccordionRoot, {\n Item: AccordionItem,\n Trigger: AccordionTrigger,\n Content: AccordionContent,\n});\n"]}
@@ -121,7 +121,7 @@ function BreadcrumbsRoot({
121
121
  }) {
122
122
  const items = react.Children.toArray(children);
123
123
  const [expanded, setExpanded] = react.useState(false);
124
- const sep = separator ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { size: 12, className: "text-zinc-400 rtl:-scale-x-100" });
124
+ const sep = separator ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { size: 12, "aria-hidden": "true", className: "text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))] rtl:-scale-x-100" });
125
125
  const lastItem = items[items.length - 1];
126
126
  const dropdownItems = items.map((child) => {
127
127
  const el = child;
@@ -155,7 +155,7 @@ function BreadcrumbsRoot({
155
155
  type: "button",
156
156
  onClick: () => setExpanded(true),
157
157
  onMouseEnter: () => setExpanded(true),
158
- className: "text-sm text-zinc-400 hover:text-zinc-600 dark:hover:text-zinc-300",
158
+ className: "text-sm text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))] hover:text-[color:var(--fancy-text-soft,var(--color-zinc-700))] dark:hover:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))]",
159
159
  children: "..."
160
160
  }
161
161
  ),
@@ -175,5 +175,5 @@ var Breadcrumbs = Object.assign(BreadcrumbsRoot, {
175
175
  });
176
176
 
177
177
  exports.Breadcrumbs = Breadcrumbs;
178
- //# sourceMappingURL=chunk-FZQWFDUV.cjs.map
179
- //# sourceMappingURL=chunk-FZQWFDUV.cjs.map
178
+ //# sourceMappingURL=chunk-BDYIKGV5.cjs.map
179
+ //# sourceMappingURL=chunk-BDYIKGV5.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Breadcrumbs/BreadcrumbsItem.tsx","../src/components/Breadcrumbs/BreadcrumbsDropdown.tsx","../src/components/Breadcrumbs/Breadcrumbs.tsx"],"names":["cn","jsx","useState","useRef","useOutsideClick","useEscapeKey","jsxs","ChevronDown","Children","ChevronRight","Fragment"],"mappings":"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","file":"chunk-BDYIKGV5.cjs","sourcesContent":["import type { ElementType } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { BreadcrumbsItemProps } from \"./Breadcrumbs.types\";\n\nexport function BreadcrumbsItem({\n children,\n href,\n as: As,\n active = false,\n onClick,\n className,\n ...rest\n}: BreadcrumbsItemProps) {\n const baseClass = cn(\n \"text-sm\",\n active\n ? \"font-medium text-zinc-900 dark:text-white\"\n : \"text-[color:var(--fancy-text-muted,var(--color-zinc-500))] hover:text-[color:var(--fancy-text-soft,var(--color-zinc-700))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))] dark:hover:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))]\",\n className,\n );\n\n // The CURRENT crumb stays a <span> even with `as`: it is the page you are on,\n // so a link to it is a link to nowhere, and `aria-current=\"page\"` is the point.\n if ((href || As) && !active) {\n const Link = (As ?? \"a\") as ElementType;\n\n return (\n <Link\n data-react-fancy-breadcrumbs-item=\"\"\n {...(href ? { href } : {})}\n onClick={onClick}\n className={baseClass}\n {...rest}\n >\n {children}\n </Link>\n );\n }\n\n // A crumb that navigates through a callback rather than a URL. Controlled\n // components own their navigation and have no href to give — a repository\n // browser walking directories, a wizard stepping back — and until this\n // existed the only way to make such a crumb clickable was to nest a button\n // inside the span below, which is interactive content inside a non-\n // interactive element.\n if (onClick && !active) {\n return (\n <button\n type=\"button\"\n data-react-fancy-breadcrumbs-item=\"\"\n onClick={onClick}\n className={cn(baseClass, \"cursor-pointer border-0 bg-transparent p-0\")}\n {...rest}\n >\n {children}\n </button>\n );\n }\n\n return (\n <span data-react-fancy-breadcrumbs-item=\"\" className={baseClass} aria-current={active ? \"page\" : undefined} {...rest}>\n {children}\n </span>\n );\n}\n\nBreadcrumbsItem.displayName = \"BreadcrumbsItem\";\n","import { useState, useRef, type ElementType, type ReactNode } from \"react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { useOutsideClick } from \"../../hooks/use-outside-click\";\nimport { useEscapeKey } from \"../../hooks/use-escape-key\";\n\ninterface BreadcrumbsDropdownItem {\n label: ReactNode;\n href?: string;\n as?: ElementType;\n onClick?: () => void;\n active?: boolean;\n title?: string;\n}\n\ninterface BreadcrumbsDropdownProps {\n items: BreadcrumbsDropdownItem[];\n activeLabel: ReactNode;\n}\n\nexport function BreadcrumbsDropdown({ items, activeLabel }: BreadcrumbsDropdownProps) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useOutsideClick(ref, () => setOpen(false), open);\n useEscapeKey(() => setOpen(false), open);\n\n return (\n <div ref={ref} data-react-fancy-breadcrumbs-dropdown=\"\" className=\"relative flex md:hidden\">\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"flex items-center gap-1 rounded-lg px-2 py-1 text-sm font-medium text-zinc-900 hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:text-white dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\"\n >\n {activeLabel}\n <ChevronDown size={14} className={cn(\"transition-transform\", open && \"rotate-180\")} />\n </button>\n {open && (\n <div className=\"absolute top-full start-0 z-50 mt-1 min-w-[180px] rounded-lg border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] py-1 shadow-lg dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\">\n {items.map((item, i) => {\n const cls = cn(\n \"block w-full px-3 py-1.5 text-start text-sm\",\n item.active\n ? \"font-medium text-zinc-900 dark:text-white\"\n : \"text-[color:var(--fancy-text-muted,var(--color-zinc-500))] hover:bg-zinc-50 hover:text-[color:var(--fancy-text-soft,var(--color-zinc-700))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))] dark:hover:bg-zinc-800 dark:hover:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))]\",\n );\n\n // Mirrors BreadcrumbsItem: href / `as` wins, then onClick, and the\n // active crumb stays inert whatever it carries.\n if ((item.href || item.as) && !item.active) {\n const Link = (item.as ?? \"a\") as ElementType;\n return (\n <Link\n key={i}\n {...(item.href ? { href: item.href } : {})}\n title={item.title}\n className={cls}\n onClick={() => {\n item.onClick?.();\n setOpen(false);\n }}\n >\n {item.label}\n </Link>\n );\n }\n\n if (item.onClick && !item.active) {\n const onClick = item.onClick;\n return (\n <button\n key={i}\n type=\"button\"\n title={item.title}\n className={cn(cls, \"cursor-pointer border-0 bg-transparent\")}\n onClick={() => {\n onClick();\n setOpen(false);\n }}\n >\n {item.label}\n </button>\n );\n }\n\n return (\n <span key={i} title={item.title} className={cls}>\n {item.label}\n </span>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\nBreadcrumbsDropdown.displayName = \"BreadcrumbsDropdown\";\n","import { Children, Fragment, useState, type ReactElement } from \"react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { BreadcrumbsItem } from \"./BreadcrumbsItem\";\nimport { BreadcrumbsDropdown } from \"./BreadcrumbsDropdown\";\nimport type { BreadcrumbsProps, BreadcrumbsItemProps } from \"./Breadcrumbs.types\";\n\nfunction BreadcrumbsRoot({\n children,\n separator,\n shrink,\n className,\n}: BreadcrumbsProps) {\n const items = Children.toArray(children);\n const [expanded, setExpanded] = useState(false);\n\n const sep = separator ?? (\n <ChevronRight size={12} aria-hidden=\"true\" className=\"text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))] rtl:-scale-x-100\" />\n );\n\n const lastItem = items[items.length - 1];\n\n // Extract info from children for mobile dropdown\n const dropdownItems = items.map((child) => {\n const el = child as ReactElement<BreadcrumbsItemProps>;\n return {\n label: el.props?.children,\n href: el.props?.href,\n as: el.props?.as,\n onClick: el.props?.onClick,\n active: el.props?.active,\n // Only `title` crosses into the menu. It is the full text of a crumb the\n // consumer truncated, and the narrow menu is where labels get cut. Other\n // attributes stay on the trail: both trails are in the DOM at once (CSS\n // hides one), so an `id` or a `data-*` handle would be duplicated.\n title: el.props?.title,\n };\n });\n\n const activeLabel = dropdownItems[dropdownItems.length - 1]?.label ?? \"Menu\";\n\n const showShrunk = shrink && !expanded && items.length > 1;\n\n return (\n <>\n {/* Desktop trail */}\n <nav\n data-react-fancy-breadcrumbs=\"\"\n aria-label=\"Breadcrumb\"\n className={cn(\"hidden items-center gap-2 md:flex\", className)}\n onMouseLeave={() => shrink && setExpanded(false)}\n >\n {showShrunk ? (\n <>\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n onMouseEnter={() => setExpanded(true)}\n className=\"text-sm text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))] hover:text-[color:var(--fancy-text-soft,var(--color-zinc-700))] dark:hover:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))]\"\n >\n ...\n </button>\n <span aria-hidden=\"true\">{sep}</span>\n {lastItem}\n </>\n ) : (\n items.map((child, i) => (\n <Fragment key={i}>\n {i > 0 && <span aria-hidden=\"true\">{sep}</span>}\n {child}\n </Fragment>\n ))\n )}\n </nav>\n\n {/* Mobile dropdown */}\n <BreadcrumbsDropdown items={dropdownItems} activeLabel={activeLabel} />\n </>\n );\n}\n\nexport const Breadcrumbs = Object.assign(BreadcrumbsRoot, {\n Item: BreadcrumbsItem,\n});\n"]}
@@ -173,7 +173,7 @@ var CarouselSteps = react.forwardRef(
173
173
  "flex h-6 w-6 items-center justify-center rounded-full text-xs",
174
174
  isActive && "bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300",
175
175
  isCompleted && "bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-300",
176
- !isActive && !isCompleted && "bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] text-zinc-500 dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:text-zinc-500"
176
+ !isActive && !isCompleted && "bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))]"
177
177
  ),
178
178
  children: isCompleted ? "\u2713" : i + 1
179
179
  }
@@ -331,5 +331,5 @@ exports.CarouselPanels = CarouselPanels;
331
331
  exports.CarouselSlide = CarouselSlide;
332
332
  exports.CarouselSteps = CarouselSteps;
333
333
  exports.useCarousel = useCarousel;
334
- //# sourceMappingURL=chunk-VOAC5OKY.cjs.map
335
- //# sourceMappingURL=chunk-VOAC5OKY.cjs.map
334
+ //# sourceMappingURL=chunk-BEKJQHOX.cjs.map
335
+ //# sourceMappingURL=chunk-BEKJQHOX.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Carousel/Carousel.context.ts","../src/components/Carousel/CarouselPanels.tsx","../src/components/Carousel/CarouselSlide.tsx","../src/components/Carousel/CarouselControls.tsx","../src/components/Carousel/CarouselSteps.tsx","../src/components/Carousel/Carousel.tsx"],"names":["createContext","useContext","forwardRef","Children","useRef","useState","useEffect","isValidElement","jsx","cn","jsxs","useControllableState","useCallback","useMemo"],"mappings":"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","file":"chunk-VOAC5OKY.cjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { CarouselContextValue } from \"./Carousel.types\";\n\nexport const CarouselContext = createContext<CarouselContextValue | null>(null);\nCarouselContext.displayName = \"CarouselContext\";\n\nexport function useCarousel(): CarouselContextValue {\n const ctx = useContext(CarouselContext);\n if (!ctx) {\n throw new Error(\"Carousel compound components must be used within <Carousel>\");\n }\n return ctx;\n}\n","import { Children, forwardRef, isValidElement, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useCarousel } from \"./Carousel.context\";\nimport type { CarouselPanelsProps, CarouselSlideProps } from \"./Carousel.types\";\n\nexport const CarouselPanels = forwardRef<HTMLDivElement, CarouselPanelsProps>(\n ({ children, className, transition = \"none\" }, ref) => {\n const { activeIndex, registerSlides, registerSlideNames } = useCarousel();\n const slides = Children.toArray(children);\n const prevIndexRef = useRef(activeIndex);\n const [transitionState, setTransitionState] = useState<\"enter\" | \"idle\">(\"idle\");\n\n // Register slide count\n useEffect(() => {\n registerSlides(slides.length);\n }, [slides.length, registerSlides]);\n\n // Register slide names from the `name` prop on each Carousel.Slide\n useEffect(() => {\n const names = slides.map((slide) => {\n if (isValidElement<CarouselSlideProps>(slide) && slide.props.name) {\n return slide.props.name;\n }\n return \"\";\n });\n registerSlideNames(names);\n }, [slides.length, registerSlideNames]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Handle fade transition when activeIndex changes\n useEffect(() => {\n if (transition !== \"fade\") {\n return;\n }\n\n if (prevIndexRef.current !== activeIndex) {\n setTransitionState(\"enter\");\n const timer = setTimeout(() => {\n setTransitionState(\"idle\");\n }, 300);\n prevIndexRef.current = activeIndex;\n return () => clearTimeout(timer);\n }\n }, [activeIndex, transition]);\n\n if (transition === \"fade\") {\n return (\n <div ref={ref} data-react-fancy-carousel-panels=\"\" className={cn(\"relative overflow-hidden\", className)}>\n <div\n key={activeIndex}\n className={cn(\n transitionState === \"enter\" && \"fancy-fade-in\",\n )}\n style={{\n animationDuration: transitionState === \"enter\" ? \"300ms\" : undefined,\n }}\n >\n {slides[activeIndex]}\n </div>\n </div>\n );\n }\n\n return (\n <div ref={ref} data-react-fancy-carousel-panels=\"\" className={cn(\"relative overflow-hidden\", className)}>\n {slides[activeIndex]}\n </div>\n );\n },\n);\n\nCarouselPanels.displayName = \"CarouselPanels\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { CarouselSlideProps } from \"./Carousel.types\";\n\nexport const CarouselSlide = forwardRef<HTMLDivElement, CarouselSlideProps>(\n ({ children, className, name: _name }, ref) => {\n return (\n <div ref={ref} data-react-fancy-carousel-slide=\"\" className={cn(\"w-full\", className)}>\n {children}\n </div>\n );\n },\n);\n\nCarouselSlide.displayName = \"CarouselSlide\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useCarousel } from \"./Carousel.context\";\nimport type { CarouselControlsProps } from \"./Carousel.types\";\n\nexport const CarouselControls = forwardRef<HTMLDivElement, CarouselControlsProps>(\n (\n {\n className,\n prevLabel,\n nextLabel,\n finishLabel,\n },\n ref,\n ) => {\n const { prev, next, activeIndex, totalSlides, variant, loop, onFinish, headless } = useCarousel();\n\n if (headless) {\n return null;\n }\n\n const isFirst = activeIndex === 0;\n const isLast = activeIndex === totalSlides - 1;\n\n if (variant === \"wizard\") {\n return (\n <div ref={ref} data-react-fancy-carousel-controls=\"\" className={cn(\"flex items-center gap-2\", className)}>\n <button\n type=\"button\"\n onClick={prev}\n disabled={isFirst}\n className=\"rounded-lg border px-3 py-1 text-sm disabled:opacity-50 dark:border-zinc-600\"\n >\n {prevLabel ?? \"Back\"}\n </button>\n {isLast ? (\n <button\n type=\"button\"\n onClick={onFinish}\n className=\"rounded-lg border border-blue-500 bg-blue-500 px-3 py-1 text-sm text-white hover:bg-blue-600\"\n >\n {finishLabel ?? \"Finish\"}\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={next}\n className=\"rounded-lg border px-3 py-1 text-sm disabled:opacity-50 dark:border-zinc-600\"\n >\n {nextLabel ?? \"Next\"}\n </button>\n )}\n </div>\n );\n }\n\n // Directional variant (default)\n const prevDisabled = !loop && isFirst;\n const nextDisabled = !loop && isLast;\n\n return (\n <div ref={ref} data-react-fancy-carousel-controls=\"\" className={cn(\"flex items-center gap-2\", className)}>\n <button\n type=\"button\"\n onClick={prev}\n disabled={prevDisabled}\n // The default glyphs are arrows, which Unicode does not mirror: flip\n // them in RTL so \"previous\" points to the inline start. A label the\n // consumer supplies is text and is left alone.\n className={cn(\"rounded-lg border px-3 py-1 text-sm disabled:opacity-50 dark:border-zinc-600\", prevLabel == null && \"rtl:-scale-x-100\")}\n >\n {prevLabel ?? \"\\u2190\"}\n </button>\n <button\n type=\"button\"\n onClick={next}\n disabled={nextDisabled}\n className={cn(\"rounded-lg border px-3 py-1 text-sm disabled:opacity-50 dark:border-zinc-600\", nextLabel == null && \"rtl:-scale-x-100\")}\n >\n {nextLabel ?? \"\\u2192\"}\n </button>\n </div>\n );\n },\n);\n\nCarouselControls.displayName = \"CarouselControls\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useCarousel } from \"./Carousel.context\";\nimport type { CarouselStepsProps } from \"./Carousel.types\";\n\nexport const CarouselSteps = forwardRef<HTMLDivElement, CarouselStepsProps>(\n ({ className }, ref) => {\n const { activeIndex, totalSlides, goTo, variant, slideNames, headless } = useCarousel();\n\n if (headless) {\n return null;\n }\n\n if (variant === \"wizard\") {\n return (\n <div ref={ref} data-react-fancy-carousel-steps=\"\" className={cn(\"flex items-center gap-3\", className)}>\n {Array.from({ length: totalSlides }, (_, i) => {\n const isActive = i === activeIndex;\n const isCompleted = i < activeIndex;\n const name = slideNames[i];\n\n return (\n <button\n key={i}\n type=\"button\"\n onClick={() => goTo(i)}\n className={cn(\n \"flex items-center gap-1.5 text-sm font-medium transition-colors\",\n isActive && \"text-blue-600 dark:text-blue-400\",\n isCompleted && \"text-green-600 dark:text-green-400\",\n !isActive && !isCompleted && \"text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\",\n )}\n aria-label={name || `Step ${i + 1}`}\n aria-current={isActive ? \"step\" : undefined}\n >\n <span\n className={cn(\n \"flex h-6 w-6 items-center justify-center rounded-full text-xs\",\n isActive && \"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300\",\n isCompleted && \"bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-300\",\n !isActive && !isCompleted && \"bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] text-zinc-500 dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:text-zinc-500\",\n )}\n >\n {isCompleted ? \"\\u2713\" : i + 1}\n </span>\n {name && <span>{name}</span>}\n </button>\n );\n })}\n </div>\n );\n }\n\n // Directional variant: dot indicators (default)\n return (\n <div ref={ref} data-react-fancy-carousel-steps=\"\" className={cn(\"flex items-center gap-1.5\", className)}>\n {Array.from({ length: totalSlides }, (_, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => goTo(i)}\n className={cn(\n \"h-2 w-2 rounded-full transition-colors\",\n i === activeIndex ? \"bg-zinc-800 dark:bg-white\" : \"bg-zinc-300 dark:bg-zinc-600\",\n )}\n aria-label={`Go to slide ${i + 1}`}\n />\n ))}\n </div>\n );\n },\n);\n\nCarouselSteps.displayName = \"CarouselSteps\";\n","import { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useControllableState } from \"../../hooks/use-controllable-state\";\nimport { CarouselContext } from \"./Carousel.context\";\nimport { CarouselPanels } from \"./CarouselPanels\";\nimport { CarouselSlide } from \"./CarouselSlide\";\nimport { CarouselControls } from \"./CarouselControls\";\nimport { CarouselSteps } from \"./CarouselSteps\";\nimport type { CarouselProps, CarouselContextValue } from \"./Carousel.types\";\n\nconst CarouselRoot = forwardRef<HTMLDivElement, CarouselProps>(\n (\n {\n children,\n defaultIndex = 0,\n activeIndex: controlledIndex,\n onIndexChange,\n className,\n autoPlay = false,\n interval = 5000,\n loop = false,\n variant = \"directional\",\n headless = false,\n onFinish,\n },\n ref,\n ) => {\n const [activeIndex, setActiveIndex] = useControllableState<number>(\n controlledIndex,\n defaultIndex,\n onIndexChange,\n );\n const [totalSlides, setTotalSlides] = useState(0);\n const [slideNames, setSlideNames] = useState<string[]>([]);\n const [isPaused, setIsPaused] = useState(false);\n const onFinishRef = useRef(onFinish);\n onFinishRef.current = onFinish;\n\n const registerSlides = useCallback((count: number) => {\n setTotalSlides(count);\n }, []);\n\n const registerSlideNames = useCallback((names: string[]) => {\n setSlideNames(names);\n }, []);\n\n const next = useCallback(() => {\n setActiveIndex((i: number) => {\n if (i >= totalSlides - 1) {\n return loop ? 0 : i;\n }\n return i + 1;\n });\n }, [totalSlides, loop, setActiveIndex]);\n\n const prev = useCallback(() => {\n setActiveIndex((i: number) => {\n if (i <= 0) {\n return loop ? totalSlides - 1 : i;\n }\n return i - 1;\n });\n }, [totalSlides, loop, setActiveIndex]);\n\n const goTo = useCallback(\n (index: number) => setActiveIndex(index),\n [setActiveIndex],\n );\n\n // AutoPlay\n useEffect(() => {\n if (!autoPlay || isPaused || totalSlides <= 1) {\n return;\n }\n\n const id = setInterval(() => {\n setActiveIndex((i: number) => {\n if (i >= totalSlides - 1) {\n return loop ? 0 : i;\n }\n return i + 1;\n });\n }, interval);\n\n return () => clearInterval(id);\n }, [autoPlay, interval, isPaused, totalSlides, loop, setActiveIndex]);\n\n const ctx = useMemo<CarouselContextValue>(\n () => ({\n activeIndex,\n totalSlides,\n next,\n prev,\n goTo,\n registerSlides,\n variant,\n loop,\n slideNames,\n registerSlideNames,\n onFinish: onFinishRef.current,\n headless,\n }),\n [\n activeIndex,\n totalSlides,\n next,\n prev,\n goTo,\n registerSlides,\n variant,\n loop,\n slideNames,\n registerSlideNames,\n headless,\n ],\n );\n\n const handleMouseEnter = useCallback(() => {\n if (autoPlay) {\n setIsPaused(true);\n }\n }, [autoPlay]);\n\n const handleMouseLeave = useCallback(() => {\n if (autoPlay) {\n setIsPaused(false);\n }\n }, [autoPlay]);\n\n return (\n <CarouselContext.Provider value={ctx}>\n <div\n data-react-fancy-carousel=\"\"\n ref={ref}\n className={cn(\"relative\", className)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n },\n);\n\nCarouselRoot.displayName = \"Carousel\";\n\nexport const Carousel = Object.assign(CarouselRoot, {\n Panels: CarouselPanels,\n Slide: CarouselSlide,\n Controls: CarouselControls,\n Steps: CarouselSteps,\n});\n"]}
1
+ {"version":3,"sources":["../src/components/Carousel/Carousel.context.ts","../src/components/Carousel/CarouselPanels.tsx","../src/components/Carousel/CarouselSlide.tsx","../src/components/Carousel/CarouselControls.tsx","../src/components/Carousel/CarouselSteps.tsx","../src/components/Carousel/Carousel.tsx"],"names":["createContext","useContext","forwardRef","Children","useRef","useState","useEffect","isValidElement","jsx","cn","jsxs","useControllableState","useCallback","useMemo"],"mappings":"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","file":"chunk-BEKJQHOX.cjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { CarouselContextValue } from \"./Carousel.types\";\n\nexport const CarouselContext = createContext<CarouselContextValue | null>(null);\nCarouselContext.displayName = \"CarouselContext\";\n\nexport function useCarousel(): CarouselContextValue {\n const ctx = useContext(CarouselContext);\n if (!ctx) {\n throw new Error(\"Carousel compound components must be used within <Carousel>\");\n }\n return ctx;\n}\n","import { Children, forwardRef, isValidElement, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useCarousel } from \"./Carousel.context\";\nimport type { CarouselPanelsProps, CarouselSlideProps } from \"./Carousel.types\";\n\nexport const CarouselPanels = forwardRef<HTMLDivElement, CarouselPanelsProps>(\n ({ children, className, transition = \"none\" }, ref) => {\n const { activeIndex, registerSlides, registerSlideNames } = useCarousel();\n const slides = Children.toArray(children);\n const prevIndexRef = useRef(activeIndex);\n const [transitionState, setTransitionState] = useState<\"enter\" | \"idle\">(\"idle\");\n\n // Register slide count\n useEffect(() => {\n registerSlides(slides.length);\n }, [slides.length, registerSlides]);\n\n // Register slide names from the `name` prop on each Carousel.Slide\n useEffect(() => {\n const names = slides.map((slide) => {\n if (isValidElement<CarouselSlideProps>(slide) && slide.props.name) {\n return slide.props.name;\n }\n return \"\";\n });\n registerSlideNames(names);\n }, [slides.length, registerSlideNames]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Handle fade transition when activeIndex changes\n useEffect(() => {\n if (transition !== \"fade\") {\n return;\n }\n\n if (prevIndexRef.current !== activeIndex) {\n setTransitionState(\"enter\");\n const timer = setTimeout(() => {\n setTransitionState(\"idle\");\n }, 300);\n prevIndexRef.current = activeIndex;\n return () => clearTimeout(timer);\n }\n }, [activeIndex, transition]);\n\n if (transition === \"fade\") {\n return (\n <div ref={ref} data-react-fancy-carousel-panels=\"\" className={cn(\"relative overflow-hidden\", className)}>\n <div\n key={activeIndex}\n className={cn(\n transitionState === \"enter\" && \"fancy-fade-in\",\n )}\n style={{\n animationDuration: transitionState === \"enter\" ? \"300ms\" : undefined,\n }}\n >\n {slides[activeIndex]}\n </div>\n </div>\n );\n }\n\n return (\n <div ref={ref} data-react-fancy-carousel-panels=\"\" className={cn(\"relative overflow-hidden\", className)}>\n {slides[activeIndex]}\n </div>\n );\n },\n);\n\nCarouselPanels.displayName = \"CarouselPanels\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { CarouselSlideProps } from \"./Carousel.types\";\n\nexport const CarouselSlide = forwardRef<HTMLDivElement, CarouselSlideProps>(\n ({ children, className, name: _name }, ref) => {\n return (\n <div ref={ref} data-react-fancy-carousel-slide=\"\" className={cn(\"w-full\", className)}>\n {children}\n </div>\n );\n },\n);\n\nCarouselSlide.displayName = \"CarouselSlide\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useCarousel } from \"./Carousel.context\";\nimport type { CarouselControlsProps } from \"./Carousel.types\";\n\nexport const CarouselControls = forwardRef<HTMLDivElement, CarouselControlsProps>(\n (\n {\n className,\n prevLabel,\n nextLabel,\n finishLabel,\n },\n ref,\n ) => {\n const { prev, next, activeIndex, totalSlides, variant, loop, onFinish, headless } = useCarousel();\n\n if (headless) {\n return null;\n }\n\n const isFirst = activeIndex === 0;\n const isLast = activeIndex === totalSlides - 1;\n\n if (variant === \"wizard\") {\n return (\n <div ref={ref} data-react-fancy-carousel-controls=\"\" className={cn(\"flex items-center gap-2\", className)}>\n <button\n type=\"button\"\n onClick={prev}\n disabled={isFirst}\n className=\"rounded-lg border px-3 py-1 text-sm disabled:opacity-50 dark:border-zinc-600\"\n >\n {prevLabel ?? \"Back\"}\n </button>\n {isLast ? (\n <button\n type=\"button\"\n onClick={onFinish}\n className=\"rounded-lg border border-blue-500 bg-blue-500 px-3 py-1 text-sm text-white hover:bg-blue-600\"\n >\n {finishLabel ?? \"Finish\"}\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={next}\n className=\"rounded-lg border px-3 py-1 text-sm disabled:opacity-50 dark:border-zinc-600\"\n >\n {nextLabel ?? \"Next\"}\n </button>\n )}\n </div>\n );\n }\n\n // Directional variant (default)\n const prevDisabled = !loop && isFirst;\n const nextDisabled = !loop && isLast;\n\n return (\n <div ref={ref} data-react-fancy-carousel-controls=\"\" className={cn(\"flex items-center gap-2\", className)}>\n <button\n type=\"button\"\n onClick={prev}\n disabled={prevDisabled}\n // The default glyphs are arrows, which Unicode does not mirror: flip\n // them in RTL so \"previous\" points to the inline start. A label the\n // consumer supplies is text and is left alone.\n className={cn(\"rounded-lg border px-3 py-1 text-sm disabled:opacity-50 dark:border-zinc-600\", prevLabel == null && \"rtl:-scale-x-100\")}\n >\n {prevLabel ?? \"\\u2190\"}\n </button>\n <button\n type=\"button\"\n onClick={next}\n disabled={nextDisabled}\n className={cn(\"rounded-lg border px-3 py-1 text-sm disabled:opacity-50 dark:border-zinc-600\", nextLabel == null && \"rtl:-scale-x-100\")}\n >\n {nextLabel ?? \"\\u2192\"}\n </button>\n </div>\n );\n },\n);\n\nCarouselControls.displayName = \"CarouselControls\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useCarousel } from \"./Carousel.context\";\nimport type { CarouselStepsProps } from \"./Carousel.types\";\n\nexport const CarouselSteps = forwardRef<HTMLDivElement, CarouselStepsProps>(\n ({ className }, ref) => {\n const { activeIndex, totalSlides, goTo, variant, slideNames, headless } = useCarousel();\n\n if (headless) {\n return null;\n }\n\n if (variant === \"wizard\") {\n return (\n <div ref={ref} data-react-fancy-carousel-steps=\"\" className={cn(\"flex items-center gap-3\", className)}>\n {Array.from({ length: totalSlides }, (_, i) => {\n const isActive = i === activeIndex;\n const isCompleted = i < activeIndex;\n const name = slideNames[i];\n\n return (\n <button\n key={i}\n type=\"button\"\n onClick={() => goTo(i)}\n className={cn(\n \"flex items-center gap-1.5 text-sm font-medium transition-colors\",\n isActive && \"text-blue-600 dark:text-blue-400\",\n isCompleted && \"text-green-600 dark:text-green-400\",\n !isActive && !isCompleted && \"text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\",\n )}\n aria-label={name || `Step ${i + 1}`}\n aria-current={isActive ? \"step\" : undefined}\n >\n <span\n className={cn(\n \"flex h-6 w-6 items-center justify-center rounded-full text-xs\",\n isActive && \"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300\",\n isCompleted && \"bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-300\",\n !isActive && !isCompleted && \"bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))]\",\n )}\n >\n {isCompleted ? \"\\u2713\" : i + 1}\n </span>\n {name && <span>{name}</span>}\n </button>\n );\n })}\n </div>\n );\n }\n\n // Directional variant: dot indicators (default)\n return (\n <div ref={ref} data-react-fancy-carousel-steps=\"\" className={cn(\"flex items-center gap-1.5\", className)}>\n {Array.from({ length: totalSlides }, (_, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => goTo(i)}\n className={cn(\n \"h-2 w-2 rounded-full transition-colors\",\n i === activeIndex ? \"bg-zinc-800 dark:bg-white\" : \"bg-zinc-300 dark:bg-zinc-600\",\n )}\n aria-label={`Go to slide ${i + 1}`}\n />\n ))}\n </div>\n );\n },\n);\n\nCarouselSteps.displayName = \"CarouselSteps\";\n","import { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useControllableState } from \"../../hooks/use-controllable-state\";\nimport { CarouselContext } from \"./Carousel.context\";\nimport { CarouselPanels } from \"./CarouselPanels\";\nimport { CarouselSlide } from \"./CarouselSlide\";\nimport { CarouselControls } from \"./CarouselControls\";\nimport { CarouselSteps } from \"./CarouselSteps\";\nimport type { CarouselProps, CarouselContextValue } from \"./Carousel.types\";\n\nconst CarouselRoot = forwardRef<HTMLDivElement, CarouselProps>(\n (\n {\n children,\n defaultIndex = 0,\n activeIndex: controlledIndex,\n onIndexChange,\n className,\n autoPlay = false,\n interval = 5000,\n loop = false,\n variant = \"directional\",\n headless = false,\n onFinish,\n },\n ref,\n ) => {\n const [activeIndex, setActiveIndex] = useControllableState<number>(\n controlledIndex,\n defaultIndex,\n onIndexChange,\n );\n const [totalSlides, setTotalSlides] = useState(0);\n const [slideNames, setSlideNames] = useState<string[]>([]);\n const [isPaused, setIsPaused] = useState(false);\n const onFinishRef = useRef(onFinish);\n onFinishRef.current = onFinish;\n\n const registerSlides = useCallback((count: number) => {\n setTotalSlides(count);\n }, []);\n\n const registerSlideNames = useCallback((names: string[]) => {\n setSlideNames(names);\n }, []);\n\n const next = useCallback(() => {\n setActiveIndex((i: number) => {\n if (i >= totalSlides - 1) {\n return loop ? 0 : i;\n }\n return i + 1;\n });\n }, [totalSlides, loop, setActiveIndex]);\n\n const prev = useCallback(() => {\n setActiveIndex((i: number) => {\n if (i <= 0) {\n return loop ? totalSlides - 1 : i;\n }\n return i - 1;\n });\n }, [totalSlides, loop, setActiveIndex]);\n\n const goTo = useCallback(\n (index: number) => setActiveIndex(index),\n [setActiveIndex],\n );\n\n // AutoPlay\n useEffect(() => {\n if (!autoPlay || isPaused || totalSlides <= 1) {\n return;\n }\n\n const id = setInterval(() => {\n setActiveIndex((i: number) => {\n if (i >= totalSlides - 1) {\n return loop ? 0 : i;\n }\n return i + 1;\n });\n }, interval);\n\n return () => clearInterval(id);\n }, [autoPlay, interval, isPaused, totalSlides, loop, setActiveIndex]);\n\n const ctx = useMemo<CarouselContextValue>(\n () => ({\n activeIndex,\n totalSlides,\n next,\n prev,\n goTo,\n registerSlides,\n variant,\n loop,\n slideNames,\n registerSlideNames,\n onFinish: onFinishRef.current,\n headless,\n }),\n [\n activeIndex,\n totalSlides,\n next,\n prev,\n goTo,\n registerSlides,\n variant,\n loop,\n slideNames,\n registerSlideNames,\n headless,\n ],\n );\n\n const handleMouseEnter = useCallback(() => {\n if (autoPlay) {\n setIsPaused(true);\n }\n }, [autoPlay]);\n\n const handleMouseLeave = useCallback(() => {\n if (autoPlay) {\n setIsPaused(false);\n }\n }, [autoPlay]);\n\n return (\n <CarouselContext.Provider value={ctx}>\n <div\n data-react-fancy-carousel=\"\"\n ref={ref}\n className={cn(\"relative\", className)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n },\n);\n\nCarouselRoot.displayName = \"Carousel\";\n\nexport const Carousel = Object.assign(CarouselRoot, {\n Panels: CarouselPanels,\n Slide: CarouselSlide,\n Controls: CarouselControls,\n Steps: CarouselSteps,\n});\n"]}
@@ -620,7 +620,7 @@ var InlinePasteEditor = react.forwardRef(
620
620
  {
621
621
  "aria-hidden": "true",
622
622
  className: chunkZU5Q77OT_cjs.cn(
623
- "pointer-events-none absolute start-4 top-3 text-sm text-zinc-400",
623
+ "pointer-events-none absolute start-4 top-3 text-sm text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]",
624
624
  placeholderClassName
625
625
  ),
626
626
  children: placeholder
@@ -690,5 +690,5 @@ exports.segmentValue = segmentValue;
690
690
  exports.useInlinePaste = useInlinePaste;
691
691
  exports.usePastePills = usePastePills;
692
692
  exports.withSeparators = withSeparators;
693
- //# sourceMappingURL=chunk-TBLKVTJC.cjs.map
694
- //# sourceMappingURL=chunk-TBLKVTJC.cjs.map
693
+ //# sourceMappingURL=chunk-CR3AZMQE.cjs.map
694
+ //# sourceMappingURL=chunk-CR3AZMQE.cjs.map