@particle-academy/react-fancy 6.7.2 → 6.9.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 (576) hide show
  1. package/CHANGELOG.md +44 -1
  2. package/dist/{Card-CuRZivBz.d.cts → Card-D0sp2T1V.d.cts} +6 -1
  3. package/dist/{Card-CuRZivBz.d.ts → Card-D0sp2T1V.d.ts} +6 -1
  4. package/dist/accordion-panel.cjs +7 -7
  5. package/dist/accordion-panel.js +1 -1
  6. package/dist/accordion.cjs +3 -3
  7. package/dist/accordion.js +1 -1
  8. package/dist/autocomplete.cjs +4 -3
  9. package/dist/autocomplete.js +3 -2
  10. package/dist/avatar.cjs +2 -2
  11. package/dist/avatar.js +1 -1
  12. package/dist/breadcrumbs.cjs +2 -2
  13. package/dist/breadcrumbs.js +1 -1
  14. package/dist/button.cjs +3 -3
  15. package/dist/button.d.cts +1 -1
  16. package/dist/button.d.ts +1 -1
  17. package/dist/button.js +1 -1
  18. package/dist/calendar.cjs +2 -2
  19. package/dist/calendar.js +1 -1
  20. package/dist/callout.cjs +2 -2
  21. package/dist/callout.js +1 -1
  22. package/dist/card.cjs +7 -7
  23. package/dist/card.d.cts +2 -2
  24. package/dist/card.d.ts +2 -2
  25. package/dist/card.js +1 -1
  26. package/dist/carousel.cjs +7 -7
  27. package/dist/carousel.js +1 -1
  28. package/dist/chart.cjs +2 -2
  29. package/dist/chart.js +1 -1
  30. package/dist/chat-drawer.cjs +2 -2
  31. package/dist/chat-drawer.js +1 -1
  32. package/dist/chat-thread.cjs +7 -7
  33. package/dist/chat-thread.js +5 -5
  34. package/dist/checkbox-group.cjs +5 -5
  35. package/dist/checkbox-group.js +4 -4
  36. package/dist/checkbox.cjs +3 -3
  37. package/dist/checkbox.js +2 -2
  38. package/dist/{chunk-B4YV2V7G.cjs → chunk-2DX3PNXU.cjs} +3 -3
  39. package/dist/{chunk-B4YV2V7G.cjs.map → chunk-2DX3PNXU.cjs.map} +1 -1
  40. package/dist/{chunk-KPRSRWNM.js → chunk-2I7VNCBZ.js} +3 -3
  41. package/dist/{chunk-KPRSRWNM.js.map → chunk-2I7VNCBZ.js.map} +1 -1
  42. package/dist/{chunk-WMANILKC.cjs → chunk-2UYQ34RJ.cjs} +7 -7
  43. package/dist/chunk-2UYQ34RJ.cjs.map +1 -0
  44. package/dist/chunk-36IC3NDN.cjs +21 -0
  45. package/dist/chunk-36IC3NDN.cjs.map +1 -0
  46. package/dist/{chunk-LFC2DL6H.cjs → chunk-3BBEVHSP.cjs} +14 -9
  47. package/dist/chunk-3BBEVHSP.cjs.map +1 -0
  48. package/dist/{chunk-2O5UXH5R.cjs → chunk-3EZ6UPXS.cjs} +10 -10
  49. package/dist/chunk-3EZ6UPXS.cjs.map +1 -0
  50. package/dist/{chunk-XBFTO64U.cjs → chunk-3KJN3GTB.cjs} +4 -4
  51. package/dist/{chunk-XBFTO64U.cjs.map → chunk-3KJN3GTB.cjs.map} +1 -1
  52. package/dist/{chunk-37D5PYEF.js → chunk-3O3ZWWLG.js} +17 -4
  53. package/dist/chunk-3O3ZWWLG.js.map +1 -0
  54. package/dist/{chunk-5PHPJL7Z.js → chunk-4EQ336PQ.js} +4 -4
  55. package/dist/{chunk-5PHPJL7Z.js.map → chunk-4EQ336PQ.js.map} +1 -1
  56. package/dist/{chunk-EENHSMV2.js → chunk-4L3MGQAR.js} +6 -6
  57. package/dist/{chunk-EENHSMV2.js.map → chunk-4L3MGQAR.js.map} +1 -1
  58. package/dist/{chunk-QGY5FPVM.js → chunk-54NB3T3Q.js} +6 -4
  59. package/dist/chunk-54NB3T3Q.js.map +1 -0
  60. package/dist/{chunk-FRWOWDGX.js → chunk-5FA6V7JF.js} +3 -3
  61. package/dist/{chunk-FRWOWDGX.js.map → chunk-5FA6V7JF.js.map} +1 -1
  62. package/dist/{chunk-UUEAFG6V.js → chunk-5NJF7SQX.js} +6 -6
  63. package/dist/{chunk-UUEAFG6V.js.map → chunk-5NJF7SQX.js.map} +1 -1
  64. package/dist/{chunk-ZGDOWJKL.cjs → chunk-5NTFXQ4K.cjs} +6 -6
  65. package/dist/{chunk-ZGDOWJKL.cjs.map → chunk-5NTFXQ4K.cjs.map} +1 -1
  66. package/dist/{chunk-CQ7QXZLR.cjs → chunk-5SVZX6WF.cjs} +4 -4
  67. package/dist/chunk-5SVZX6WF.cjs.map +1 -0
  68. package/dist/{chunk-JY7HPFOE.cjs → chunk-6B2GMKE4.cjs} +5 -5
  69. package/dist/{chunk-JY7HPFOE.cjs.map → chunk-6B2GMKE4.cjs.map} +1 -1
  70. package/dist/{chunk-GSMD5NK5.js → chunk-6BCXGP2T.js} +7 -7
  71. package/dist/{chunk-GSMD5NK5.js.map → chunk-6BCXGP2T.js.map} +1 -1
  72. package/dist/{chunk-CVDL6C2O.cjs → chunk-6EPM5JG7.cjs} +3 -3
  73. package/dist/{chunk-CVDL6C2O.cjs.map → chunk-6EPM5JG7.cjs.map} +1 -1
  74. package/dist/{chunk-FVQO75KY.cjs → chunk-6GOPFKGC.cjs} +10 -4
  75. package/dist/chunk-6GOPFKGC.cjs.map +1 -0
  76. package/dist/{chunk-QTS4Q2NK.js → chunk-6RXEWM3V.js} +4 -3
  77. package/dist/chunk-6RXEWM3V.js.map +1 -0
  78. package/dist/{chunk-TLRFXSPA.cjs → chunk-73REG7KM.cjs} +13 -13
  79. package/dist/{chunk-TLRFXSPA.cjs.map → chunk-73REG7KM.cjs.map} +1 -1
  80. package/dist/{chunk-MI57NAKF.js → chunk-7B3Z4NVM.js} +6 -5
  81. package/dist/chunk-7B3Z4NVM.js.map +1 -0
  82. package/dist/{chunk-J2BWXCES.js → chunk-7GRIO5AZ.js} +3 -3
  83. package/dist/{chunk-J2BWXCES.js.map → chunk-7GRIO5AZ.js.map} +1 -1
  84. package/dist/{chunk-V5JTTLJP.cjs → chunk-7K2C744H.cjs} +3 -3
  85. package/dist/{chunk-V5JTTLJP.cjs.map → chunk-7K2C744H.cjs.map} +1 -1
  86. package/dist/{chunk-AJPYGRLA.cjs → chunk-7NRG77U5.cjs} +12 -4
  87. package/dist/chunk-7NRG77U5.cjs.map +1 -0
  88. package/dist/{chunk-GDF6XTHC.js → chunk-7OUBFO4D.js} +7 -5
  89. package/dist/chunk-7OUBFO4D.js.map +1 -0
  90. package/dist/{chunk-6H7ZN23X.cjs → chunk-7PK3OUKR.cjs} +6 -6
  91. package/dist/{chunk-6H7ZN23X.cjs.map → chunk-7PK3OUKR.cjs.map} +1 -1
  92. package/dist/{chunk-EUVWYDFN.js → chunk-AE6ICNJR.js} +14 -9
  93. package/dist/chunk-AE6ICNJR.js.map +1 -0
  94. package/dist/{chunk-YJXP6AOL.cjs → chunk-AF33UCTN.cjs} +4 -4
  95. package/dist/{chunk-YJXP6AOL.cjs.map → chunk-AF33UCTN.cjs.map} +1 -1
  96. package/dist/{chunk-PM5I5ZHK.cjs → chunk-AFFR7HHZ.cjs} +8 -7
  97. package/dist/chunk-AFFR7HHZ.cjs.map +1 -0
  98. package/dist/{chunk-F4OYQ2XZ.js → chunk-AR5DLM4K.js} +9 -6
  99. package/dist/chunk-AR5DLM4K.js.map +1 -0
  100. package/dist/{chunk-DJB3N4G3.cjs → chunk-AVGZ4PPC.cjs} +9 -9
  101. package/dist/{chunk-DJB3N4G3.cjs.map → chunk-AVGZ4PPC.cjs.map} +1 -1
  102. package/dist/{chunk-RANTYGKW.js → chunk-AXW55PQG.js} +3 -3
  103. package/dist/chunk-AXW55PQG.js.map +1 -0
  104. package/dist/{chunk-OASSZI6M.cjs → chunk-AZ5DWOQY.cjs} +5 -4
  105. package/dist/chunk-AZ5DWOQY.cjs.map +1 -0
  106. package/dist/{chunk-NSJBVV7R.js → chunk-BPTCMI3E.js} +21 -10
  107. package/dist/chunk-BPTCMI3E.js.map +1 -0
  108. package/dist/{chunk-PDVU2PXR.js → chunk-BQENLOEV.js} +10 -10
  109. package/dist/chunk-BQENLOEV.js.map +1 -0
  110. package/dist/{chunk-25HRO7HQ.cjs → chunk-BYMOPR7P.cjs} +7 -7
  111. package/dist/chunk-BYMOPR7P.cjs.map +1 -0
  112. package/dist/{chunk-FKZB27OM.cjs → chunk-C6EVRWXZ.cjs} +11 -8
  113. package/dist/chunk-C6EVRWXZ.cjs.map +1 -0
  114. package/dist/{chunk-GTS3QA7M.js → chunk-CO2NEUFK.js} +5 -5
  115. package/dist/chunk-CO2NEUFK.js.map +1 -0
  116. package/dist/{chunk-ESCIXKFT.js → chunk-D6NISIKV.js} +17 -7
  117. package/dist/chunk-D6NISIKV.js.map +1 -0
  118. package/dist/{chunk-MRZXTL46.cjs → chunk-DFROB5TW.cjs} +20 -20
  119. package/dist/{chunk-MRZXTL46.cjs.map → chunk-DFROB5TW.cjs.map} +1 -1
  120. package/dist/{chunk-KFA7B6WP.cjs → chunk-DPPDZOMY.cjs} +17 -7
  121. package/dist/chunk-DPPDZOMY.cjs.map +1 -0
  122. package/dist/{chunk-BXPLERIJ.js → chunk-DW2PHLOA.js} +5 -4
  123. package/dist/chunk-DW2PHLOA.js.map +1 -0
  124. package/dist/{chunk-BYO5RUDE.cjs → chunk-DXLPBLNC.cjs} +6 -5
  125. package/dist/chunk-DXLPBLNC.cjs.map +1 -0
  126. package/dist/{chunk-5WQ6FPSP.js → chunk-E2AEU5SP.js} +4 -4
  127. package/dist/{chunk-5WQ6FPSP.js.map → chunk-E2AEU5SP.js.map} +1 -1
  128. package/dist/{chunk-3QCAOD2W.cjs → chunk-EC4ZYZNK.cjs} +3 -3
  129. package/dist/{chunk-3QCAOD2W.cjs.map → chunk-EC4ZYZNK.cjs.map} +1 -1
  130. package/dist/{chunk-KXYMMNNV.js → chunk-EDIX6EXQ.js} +20 -20
  131. package/dist/{chunk-KXYMMNNV.js.map → chunk-EDIX6EXQ.js.map} +1 -1
  132. package/dist/{chunk-KOAMRCSC.cjs → chunk-ETUDUDSL.cjs} +14 -11
  133. package/dist/chunk-ETUDUDSL.cjs.map +1 -0
  134. package/dist/{chunk-LY3RQB3H.js → chunk-F3U4AVGF.js} +3 -3
  135. package/dist/{chunk-LY3RQB3H.js.map → chunk-F3U4AVGF.js.map} +1 -1
  136. package/dist/{chunk-AE53RKWR.cjs → chunk-FF5G3E76.cjs} +407 -22
  137. package/dist/chunk-FF5G3E76.cjs.map +1 -0
  138. package/dist/{chunk-WNWEC5OU.cjs → chunk-FKHYJ5IC.cjs} +3 -3
  139. package/dist/{chunk-WNWEC5OU.cjs.map → chunk-FKHYJ5IC.cjs.map} +1 -1
  140. package/dist/{chunk-QP6VNKLW.cjs → chunk-FNPII6TF.cjs} +9 -5
  141. package/dist/chunk-FNPII6TF.cjs.map +1 -0
  142. package/dist/{chunk-JY2RC6I4.js → chunk-FQCLJZZS.js} +13 -10
  143. package/dist/chunk-FQCLJZZS.js.map +1 -0
  144. package/dist/{chunk-EQ7G5F6K.js → chunk-FRUHEDZN.js} +3 -3
  145. package/dist/{chunk-EQ7G5F6K.js.map → chunk-FRUHEDZN.js.map} +1 -1
  146. package/dist/{chunk-BJL3VDRK.cjs → chunk-FY2WDVKF.cjs} +3 -3
  147. package/dist/{chunk-BJL3VDRK.cjs.map → chunk-FY2WDVKF.cjs.map} +1 -1
  148. package/dist/{chunk-SKMORSBO.cjs → chunk-FZQWFDUV.cjs} +5 -5
  149. package/dist/chunk-FZQWFDUV.cjs.map +1 -0
  150. package/dist/{chunk-HNJXBMHI.cjs → chunk-G5MDMQVQ.cjs} +40 -39
  151. package/dist/chunk-G5MDMQVQ.cjs.map +1 -0
  152. package/dist/{chunk-4DL2U23D.cjs → chunk-GE2ZGE3A.cjs} +21 -13
  153. package/dist/chunk-GE2ZGE3A.cjs.map +1 -0
  154. package/dist/{chunk-THMFLRDW.cjs → chunk-GE6TSA3M.cjs} +17 -17
  155. package/dist/{chunk-THMFLRDW.cjs.map → chunk-GE6TSA3M.cjs.map} +1 -1
  156. package/dist/{chunk-MQ6VGG62.js → chunk-GJWNZMJT.js} +14 -11
  157. package/dist/chunk-GJWNZMJT.js.map +1 -0
  158. package/dist/{chunk-5TP642UT.js → chunk-GODJVIIO.js} +12 -11
  159. package/dist/chunk-GODJVIIO.js.map +1 -0
  160. package/dist/{chunk-RLE5WYY6.js → chunk-GZSRKBYI.js} +406 -24
  161. package/dist/chunk-GZSRKBYI.js.map +1 -0
  162. package/dist/{chunk-FR4RHVPR.js → chunk-H7IQVCTX.js} +6 -4
  163. package/dist/chunk-H7IQVCTX.js.map +1 -0
  164. package/dist/{chunk-KOTUFZJ6.cjs → chunk-H7OTLGRD.cjs} +14 -11
  165. package/dist/chunk-H7OTLGRD.cjs.map +1 -0
  166. package/dist/{chunk-K5MQZTDW.cjs → chunk-HKLBCA5X.cjs} +4 -4
  167. package/dist/{chunk-K5MQZTDW.cjs.map → chunk-HKLBCA5X.cjs.map} +1 -1
  168. package/dist/{chunk-5QKQXM5V.cjs → chunk-HYU46SOE.cjs} +5 -5
  169. package/dist/{chunk-5QKQXM5V.cjs.map → chunk-HYU46SOE.cjs.map} +1 -1
  170. package/dist/{chunk-X2A3NAJW.js → chunk-I65KXHYL.js} +4 -4
  171. package/dist/chunk-I65KXHYL.js.map +1 -0
  172. package/dist/{chunk-USWQAMI3.js → chunk-IF6EITB5.js} +3 -3
  173. package/dist/{chunk-USWQAMI3.js.map → chunk-IF6EITB5.js.map} +1 -1
  174. package/dist/{chunk-DXZCKDYS.js → chunk-IG2UDCBA.js} +9 -9
  175. package/dist/chunk-IG2UDCBA.js.map +1 -0
  176. package/dist/{chunk-YQZB5Z7C.cjs → chunk-INC35VEE.cjs} +3 -2
  177. package/dist/chunk-INC35VEE.cjs.map +1 -0
  178. package/dist/{chunk-AQ4DZT4Y.cjs → chunk-ISAHWGMD.cjs} +6 -6
  179. package/dist/{chunk-AQ4DZT4Y.cjs.map → chunk-ISAHWGMD.cjs.map} +1 -1
  180. package/dist/{chunk-PJNUGSKI.js → chunk-IYG436ZY.js} +26 -25
  181. package/dist/chunk-IYG436ZY.js.map +1 -0
  182. package/dist/{chunk-Z4UXLQSK.cjs → chunk-JDFJK5GO.cjs} +16 -16
  183. package/dist/chunk-JDFJK5GO.cjs.map +1 -0
  184. package/dist/{chunk-MAZEX4EZ.cjs → chunk-JQIFCWNZ.cjs} +13 -13
  185. package/dist/{chunk-MAZEX4EZ.cjs.map → chunk-JQIFCWNZ.cjs.map} +1 -1
  186. package/dist/{chunk-MKGWHSNV.cjs → chunk-JV2HEOCB.cjs} +5 -4
  187. package/dist/chunk-JV2HEOCB.cjs.map +1 -0
  188. package/dist/{chunk-GDH43QH6.js → chunk-KAKKZDCE.js} +6 -6
  189. package/dist/{chunk-GDH43QH6.js.map → chunk-KAKKZDCE.js.map} +1 -1
  190. package/dist/{chunk-DJYG7DXS.js → chunk-KDRBUF5S.js} +4 -4
  191. package/dist/chunk-KDRBUF5S.js.map +1 -0
  192. package/dist/{chunk-ZVDW2VX5.cjs → chunk-KGSL6SVX.cjs} +3 -3
  193. package/dist/chunk-KGSL6SVX.cjs.map +1 -0
  194. package/dist/{chunk-YAPGHVBZ.js → chunk-KRECSPD3.js} +4 -4
  195. package/dist/{chunk-YAPGHVBZ.js.map → chunk-KRECSPD3.js.map} +1 -1
  196. package/dist/{chunk-NPSKZ7ZB.cjs → chunk-L5NDZEL6.cjs} +12 -12
  197. package/dist/{chunk-NPSKZ7ZB.cjs.map → chunk-L5NDZEL6.cjs.map} +1 -1
  198. package/dist/{chunk-UE3QO7R3.js → chunk-LAQT5FFV.js} +3 -3
  199. package/dist/{chunk-UE3QO7R3.js.map → chunk-LAQT5FFV.js.map} +1 -1
  200. package/dist/{chunk-YH75G6SP.cjs → chunk-LHHELLMT.cjs} +3 -3
  201. package/dist/{chunk-YH75G6SP.cjs.map → chunk-LHHELLMT.cjs.map} +1 -1
  202. package/dist/{chunk-UK6BGM74.cjs → chunk-LREJ7AV2.cjs} +17 -4
  203. package/dist/chunk-LREJ7AV2.cjs.map +1 -0
  204. package/dist/{chunk-Y3QAEF2P.cjs → chunk-LVNCNMKD.cjs} +9 -7
  205. package/dist/chunk-LVNCNMKD.cjs.map +1 -0
  206. package/dist/{chunk-UZCR7DK5.js → chunk-LXEOBSEZ.js} +3 -3
  207. package/dist/{chunk-UZCR7DK5.js.map → chunk-LXEOBSEZ.js.map} +1 -1
  208. package/dist/{chunk-HLI6RB5V.cjs → chunk-M5ER3Y5I.cjs} +32 -31
  209. package/dist/chunk-M5ER3Y5I.cjs.map +1 -0
  210. package/dist/{chunk-CEFK54WP.cjs → chunk-MDAI54AG.cjs} +7 -5
  211. package/dist/chunk-MDAI54AG.cjs.map +1 -0
  212. package/dist/{chunk-WE5WGVVX.js → chunk-MKDTXMCE.js} +3 -3
  213. package/dist/{chunk-WE5WGVVX.js.map → chunk-MKDTXMCE.js.map} +1 -1
  214. package/dist/{chunk-SXXDTW7S.js → chunk-NETUI353.js} +10 -4
  215. package/dist/chunk-NETUI353.js.map +1 -0
  216. package/dist/{chunk-XHUV3VSM.cjs → chunk-NIFHAFKK.cjs} +3 -3
  217. package/dist/{chunk-XHUV3VSM.cjs.map → chunk-NIFHAFKK.cjs.map} +1 -1
  218. package/dist/{chunk-LKN7FYW6.js → chunk-NW2LQRUP.js} +4 -4
  219. package/dist/chunk-NW2LQRUP.js.map +1 -0
  220. package/dist/{chunk-ONHT2PDW.cjs → chunk-NWP5EGSR.cjs} +3 -3
  221. package/dist/{chunk-ONHT2PDW.cjs.map → chunk-NWP5EGSR.cjs.map} +1 -1
  222. package/dist/{chunk-RSLZL6VP.js → chunk-OBA2LR4I.js} +3 -3
  223. package/dist/chunk-OBA2LR4I.js.map +1 -0
  224. package/dist/{chunk-VSTUGU7W.js → chunk-PIYQPXLT.js} +8 -8
  225. package/dist/{chunk-VSTUGU7W.js.map → chunk-PIYQPXLT.js.map} +1 -1
  226. package/dist/{chunk-WX5XYDVN.js → chunk-PZTFGPQJ.js} +3 -3
  227. package/dist/{chunk-WX5XYDVN.js.map → chunk-PZTFGPQJ.js.map} +1 -1
  228. package/dist/{chunk-4GPH7HOR.js → chunk-Q4CNEHVN.js} +3 -3
  229. package/dist/{chunk-4GPH7HOR.js.map → chunk-Q4CNEHVN.js.map} +1 -1
  230. package/dist/{chunk-I2VAGZXY.cjs → chunk-Q62RDKRA.cjs} +11 -11
  231. package/dist/{chunk-I2VAGZXY.cjs.map → chunk-Q62RDKRA.cjs.map} +1 -1
  232. package/dist/{chunk-QF7CD4JH.cjs → chunk-Q7XL37T3.cjs} +5 -5
  233. package/dist/{chunk-QF7CD4JH.cjs.map → chunk-Q7XL37T3.cjs.map} +1 -1
  234. package/dist/{chunk-XZOBGKZL.cjs → chunk-QAM6N3VG.cjs} +6 -5
  235. package/dist/chunk-QAM6N3VG.cjs.map +1 -0
  236. package/dist/{chunk-BLOX7MRO.js → chunk-QE7KXMUZ.js} +3 -3
  237. package/dist/{chunk-BLOX7MRO.js.map → chunk-QE7KXMUZ.js.map} +1 -1
  238. package/dist/{chunk-ZPBKRJMH.js → chunk-QEJBMXRQ.js} +7 -7
  239. package/dist/chunk-QEJBMXRQ.js.map +1 -0
  240. package/dist/{chunk-PCNJJVTF.cjs → chunk-QMZK7SRS.cjs} +3 -3
  241. package/dist/chunk-QMZK7SRS.cjs.map +1 -0
  242. package/dist/{chunk-TFX4LL7V.js → chunk-QSRYTWQN.js} +3 -2
  243. package/dist/chunk-QSRYTWQN.js.map +1 -0
  244. package/dist/{chunk-Z7SQMQTF.cjs → chunk-QU6HZH6V.cjs} +21 -10
  245. package/dist/chunk-QU6HZH6V.cjs.map +1 -0
  246. package/dist/{chunk-GR2WKBER.js → chunk-QUZOGRZS.js} +4 -3
  247. package/dist/chunk-QUZOGRZS.js.map +1 -0
  248. package/dist/{chunk-WGRLNXNB.js → chunk-R3PCZSBQ.js} +3 -3
  249. package/dist/{chunk-WGRLNXNB.js.map → chunk-R3PCZSBQ.js.map} +1 -1
  250. package/dist/{chunk-EZZKHMR4.js → chunk-R6O6SLXK.js} +3 -3
  251. package/dist/{chunk-EZZKHMR4.js.map → chunk-R6O6SLXK.js.map} +1 -1
  252. package/dist/{chunk-5EW47IH7.js → chunk-RCTPN5QK.js} +9 -7
  253. package/dist/chunk-RCTPN5QK.js.map +1 -0
  254. package/dist/{chunk-JSD6IEBW.js → chunk-RFTDMQ56.js} +3 -3
  255. package/dist/{chunk-JSD6IEBW.js.map → chunk-RFTDMQ56.js.map} +1 -1
  256. package/dist/{chunk-6PRXG7L6.js → chunk-RSB2P3JK.js} +4 -4
  257. package/dist/{chunk-6PRXG7L6.js.map → chunk-RSB2P3JK.js.map} +1 -1
  258. package/dist/{chunk-2G6TIX5Q.cjs → chunk-RVBA4LEB.cjs} +13 -13
  259. package/dist/{chunk-2G6TIX5Q.cjs.map → chunk-RVBA4LEB.cjs.map} +1 -1
  260. package/dist/{chunk-UVUBV4VZ.js → chunk-S2ID4NNQ.js} +6 -6
  261. package/dist/{chunk-UVUBV4VZ.js.map → chunk-S2ID4NNQ.js.map} +1 -1
  262. package/dist/{chunk-TMQF2CRN.js → chunk-S4JQPOBR.js} +7 -7
  263. package/dist/chunk-S4JQPOBR.js.map +1 -0
  264. package/dist/{chunk-ETNQ4AEQ.cjs → chunk-S6TVSQDT.cjs} +5 -5
  265. package/dist/{chunk-ETNQ4AEQ.cjs.map → chunk-S6TVSQDT.cjs.map} +1 -1
  266. package/dist/{chunk-SSCW67KA.cjs → chunk-SD6YAMDH.cjs} +4 -4
  267. package/dist/chunk-SD6YAMDH.cjs.map +1 -0
  268. package/dist/{chunk-MLZGGAXQ.js → chunk-SOIGBPK6.js} +21 -13
  269. package/dist/chunk-SOIGBPK6.js.map +1 -0
  270. package/dist/{chunk-7QENPLOP.cjs → chunk-TQDZZIOW.cjs} +5 -5
  271. package/dist/{chunk-7QENPLOP.cjs.map → chunk-TQDZZIOW.cjs.map} +1 -1
  272. package/dist/{chunk-MPCZUZ4O.cjs → chunk-U4KUW3RK.cjs} +19 -15
  273. package/dist/chunk-U4KUW3RK.cjs.map +1 -0
  274. package/dist/{chunk-AZQXPI5S.js → chunk-UBLMYH6C.js} +3 -3
  275. package/dist/{chunk-AZQXPI5S.js.map → chunk-UBLMYH6C.js.map} +1 -1
  276. package/dist/{chunk-P53432AK.cjs → chunk-UIBAIWUR.cjs} +4 -4
  277. package/dist/{chunk-P53432AK.cjs.map → chunk-UIBAIWUR.cjs.map} +1 -1
  278. package/dist/{chunk-KKYILQTG.cjs → chunk-UORN3Z7R.cjs} +7 -7
  279. package/dist/{chunk-KKYILQTG.cjs.map → chunk-UORN3Z7R.cjs.map} +1 -1
  280. package/dist/{chunk-UXYFM2XT.cjs → chunk-UQABXIQV.cjs} +6 -4
  281. package/dist/chunk-UQABXIQV.cjs.map +1 -0
  282. package/dist/chunk-US5R36TQ.js +17 -0
  283. package/dist/chunk-US5R36TQ.js.map +1 -0
  284. package/dist/{chunk-CS2ZYMYP.js → chunk-UZZJJ3HJ.js} +3 -3
  285. package/dist/{chunk-CS2ZYMYP.js.map → chunk-UZZJJ3HJ.js.map} +1 -1
  286. package/dist/{chunk-Y7RGUUTS.cjs → chunk-V3EKI3VV.cjs} +3 -3
  287. package/dist/{chunk-Y7RGUUTS.cjs.map → chunk-V3EKI3VV.cjs.map} +1 -1
  288. package/dist/{chunk-U4Y7ZXME.js → chunk-V64XIPYG.js} +6 -6
  289. package/dist/{chunk-U4Y7ZXME.js.map → chunk-V64XIPYG.js.map} +1 -1
  290. package/dist/{chunk-RWU2MFUL.js → chunk-VGUAIFGE.js} +5 -4
  291. package/dist/chunk-VGUAIFGE.js.map +1 -0
  292. package/dist/{chunk-LIVC3WUU.cjs → chunk-VH34IZ7R.cjs} +3 -3
  293. package/dist/{chunk-LIVC3WUU.cjs.map → chunk-VH34IZ7R.cjs.map} +1 -1
  294. package/dist/{chunk-WNUAGRQN.cjs → chunk-VOAC5OKY.cjs} +4 -4
  295. package/dist/chunk-VOAC5OKY.cjs.map +1 -0
  296. package/dist/{chunk-H7ELUIF6.cjs → chunk-W53SZTPX.cjs} +10 -10
  297. package/dist/{chunk-H7ELUIF6.cjs.map → chunk-W53SZTPX.cjs.map} +1 -1
  298. package/dist/{chunk-4FH2JHUY.js → chunk-WAEOIEDI.js} +5 -5
  299. package/dist/{chunk-4FH2JHUY.js.map → chunk-WAEOIEDI.js.map} +1 -1
  300. package/dist/{chunk-ICMLLZKZ.js → chunk-WJE7UX2G.js} +4 -4
  301. package/dist/{chunk-ICMLLZKZ.js.map → chunk-WJE7UX2G.js.map} +1 -1
  302. package/dist/{chunk-DTOIO42M.js → chunk-WLRKE4HC.js} +9 -5
  303. package/dist/chunk-WLRKE4HC.js.map +1 -0
  304. package/dist/{chunk-7ZCNZUZK.cjs → chunk-WOURDD4U.cjs} +4 -4
  305. package/dist/{chunk-7ZCNZUZK.cjs.map → chunk-WOURDD4U.cjs.map} +1 -1
  306. package/dist/{chunk-OTM7RL2L.js → chunk-WSU36HJM.js} +4 -4
  307. package/dist/{chunk-OTM7RL2L.js.map → chunk-WSU36HJM.js.map} +1 -1
  308. package/dist/{chunk-TAYJSIOP.js → chunk-X4NXS42J.js} +5 -5
  309. package/dist/{chunk-TAYJSIOP.js.map → chunk-X4NXS42J.js.map} +1 -1
  310. package/dist/{chunk-2UTN3EFK.js → chunk-XALAQZCD.js} +5 -5
  311. package/dist/{chunk-2UTN3EFK.js.map → chunk-XALAQZCD.js.map} +1 -1
  312. package/dist/{chunk-RZUYCZ5D.cjs → chunk-XCFBMHQD.cjs} +6 -4
  313. package/dist/chunk-XCFBMHQD.cjs.map +1 -0
  314. package/dist/{chunk-NZHVDWOM.cjs → chunk-XEI5JG7C.cjs} +3 -3
  315. package/dist/{chunk-NZHVDWOM.cjs.map → chunk-XEI5JG7C.cjs.map} +1 -1
  316. package/dist/{chunk-O3F6DYWR.cjs → chunk-XG6J5MOK.cjs} +3 -3
  317. package/dist/{chunk-O3F6DYWR.cjs.map → chunk-XG6J5MOK.cjs.map} +1 -1
  318. package/dist/{chunk-J2DI6RMR.cjs → chunk-XGGAAG74.cjs} +14 -11
  319. package/dist/chunk-XGGAAG74.cjs.map +1 -0
  320. package/dist/{chunk-GVMWJ4NI.js → chunk-XH24BGEK.js} +6 -6
  321. package/dist/{chunk-GVMWJ4NI.js.map → chunk-XH24BGEK.js.map} +1 -1
  322. package/dist/{chunk-3S5ED522.js → chunk-XO4GHRA2.js} +11 -8
  323. package/dist/chunk-XO4GHRA2.js.map +1 -0
  324. package/dist/{chunk-O5ORO2RX.cjs → chunk-XQF4HCOV.cjs} +13 -11
  325. package/dist/chunk-XQF4HCOV.cjs.map +1 -0
  326. package/dist/{chunk-VZTXUYPM.cjs → chunk-XT4WBBCD.cjs} +20 -20
  327. package/dist/chunk-XT4WBBCD.cjs.map +1 -0
  328. package/dist/{chunk-Z44A7NPD.cjs → chunk-YBBBX5H2.cjs} +40 -39
  329. package/dist/chunk-YBBBX5H2.cjs.map +1 -0
  330. package/dist/{chunk-IUCYRQ4J.js → chunk-YPYZZLZ5.js} +5 -5
  331. package/dist/{chunk-IUCYRQ4J.js.map → chunk-YPYZZLZ5.js.map} +1 -1
  332. package/dist/{chunk-NVXTHTJI.js → chunk-YTWMIVRI.js} +10 -10
  333. package/dist/chunk-YTWMIVRI.js.map +1 -0
  334. package/dist/{chunk-WZAKEJDL.js → chunk-YZW7HQXH.js} +13 -11
  335. package/dist/chunk-YZW7HQXH.js.map +1 -0
  336. package/dist/{chunk-AYBKPAI2.cjs → chunk-Z5MNYYUJ.cjs} +3 -3
  337. package/dist/{chunk-AYBKPAI2.cjs.map → chunk-Z5MNYYUJ.cjs.map} +1 -1
  338. package/dist/{chunk-GOE36IXL.js → chunk-Z6M3UELD.js} +3 -3
  339. package/dist/{chunk-GOE36IXL.js.map → chunk-Z6M3UELD.js.map} +1 -1
  340. package/dist/{chunk-PXZRYL5I.js → chunk-ZBXJDQXN.js} +12 -4
  341. package/dist/chunk-ZBXJDQXN.js.map +1 -0
  342. package/dist/{chunk-M5SEYDSS.cjs → chunk-ZDHLEHYR.cjs} +6 -6
  343. package/dist/{chunk-M5SEYDSS.cjs.map → chunk-ZDHLEHYR.cjs.map} +1 -1
  344. package/dist/{chunk-SCGTO3PX.js → chunk-ZHTK4IPQ.js} +3 -3
  345. package/dist/{chunk-SCGTO3PX.js.map → chunk-ZHTK4IPQ.js.map} +1 -1
  346. package/dist/{chunk-QF2FODTG.js → chunk-ZL5QVNKG.js} +10 -6
  347. package/dist/chunk-ZL5QVNKG.js.map +1 -0
  348. package/dist/{chunk-6GVOW3UL.js → chunk-ZUJVGHFW.js} +12 -11
  349. package/dist/chunk-ZUJVGHFW.js.map +1 -0
  350. package/dist/code-block.cjs +4 -4
  351. package/dist/code-block.js +3 -3
  352. package/dist/code-view.cjs +2 -2
  353. package/dist/code-view.js +1 -1
  354. package/dist/command.cjs +3 -3
  355. package/dist/command.js +1 -1
  356. package/dist/composer.cjs +7 -6
  357. package/dist/composer.js +5 -4
  358. package/dist/content-renderer.cjs +6 -6
  359. package/dist/content-renderer.js +3 -3
  360. package/dist/context-menu.cjs +4 -3
  361. package/dist/context-menu.d.cts +2 -0
  362. package/dist/context-menu.d.ts +2 -0
  363. package/dist/context-menu.js +2 -1
  364. package/dist/date-picker.cjs +5 -5
  365. package/dist/date-picker.js +4 -4
  366. package/dist/drawer.cjs +3 -3
  367. package/dist/drawer.d.cts +10 -4
  368. package/dist/drawer.d.ts +10 -4
  369. package/dist/drawer.js +1 -1
  370. package/dist/dropdown.cjs +5 -4
  371. package/dist/dropdown.js +3 -2
  372. package/dist/editor.cjs +9 -8
  373. package/dist/editor.js +7 -6
  374. package/dist/emoji-select.cjs +2 -2
  375. package/dist/emoji-select.js +1 -1
  376. package/dist/eyebrow.cjs +2 -2
  377. package/dist/eyebrow.js +1 -1
  378. package/dist/faux-client.cjs +2 -2
  379. package/dist/faux-client.js +1 -1
  380. package/dist/field.cjs +3 -3
  381. package/dist/field.js +2 -2
  382. package/dist/file-browser.cjs +6 -5
  383. package/dist/file-browser.js +2 -1
  384. package/dist/file-upload.cjs +3 -3
  385. package/dist/file-upload.js +1 -1
  386. package/dist/image-viewer.cjs +3 -3
  387. package/dist/image-viewer.js +2 -2
  388. package/dist/index-list.cjs +2 -2
  389. package/dist/index-list.js +1 -1
  390. package/dist/index.cjs +222 -209
  391. package/dist/index.cjs.map +1 -1
  392. package/dist/index.d.cts +20 -2
  393. package/dist/index.d.ts +20 -2
  394. package/dist/index.js +78 -77
  395. package/dist/index.js.map +1 -1
  396. package/dist/input-tag.cjs +7 -6
  397. package/dist/input-tag.d.cts +6 -2
  398. package/dist/input-tag.d.ts +6 -2
  399. package/dist/input-tag.js +2 -1
  400. package/dist/input.cjs +10 -9
  401. package/dist/input.js +9 -8
  402. package/dist/inputs.cjs +32 -31
  403. package/dist/inputs.js +19 -18
  404. package/dist/json-editor.cjs +27 -26
  405. package/dist/json-editor.js +16 -15
  406. package/dist/magic-wand.cjs +8 -8
  407. package/dist/magic-wand.js +7 -7
  408. package/dist/marquee.cjs +2 -2
  409. package/dist/marquee.js +1 -1
  410. package/dist/media-viewer.cjs +5 -5
  411. package/dist/media-viewer.js +4 -4
  412. package/dist/menu.cjs +3 -3
  413. package/dist/menu.js +1 -1
  414. package/dist/mobile-menu.cjs +5 -4
  415. package/dist/mobile-menu.d.cts +2 -1
  416. package/dist/mobile-menu.d.ts +2 -1
  417. package/dist/mobile-menu.js +3 -2
  418. package/dist/mode.cjs +3 -3
  419. package/dist/mode.js +2 -2
  420. package/dist/multi-switch.cjs +6 -5
  421. package/dist/multi-switch.js +5 -4
  422. package/dist/number-field.cjs +11 -10
  423. package/dist/number-field.js +10 -9
  424. package/dist/otp-input.cjs +3 -2
  425. package/dist/otp-input.js +2 -1
  426. package/dist/pagination.cjs +2 -2
  427. package/dist/pagination.js +1 -1
  428. package/dist/paste-pills.cjs +17 -16
  429. package/dist/paste-pills.js +4 -3
  430. package/dist/pdf-viewer.cjs +3 -3
  431. package/dist/pdf-viewer.js +2 -2
  432. package/dist/popover.cjs +5 -4
  433. package/dist/popover.js +3 -2
  434. package/dist/profile.cjs +3 -3
  435. package/dist/profile.js +2 -2
  436. package/dist/progress.cjs +2 -2
  437. package/dist/progress.js +1 -1
  438. package/dist/prompt-input.cjs +10 -9
  439. package/dist/prompt-input.js +7 -6
  440. package/dist/qr-code.cjs +19 -4
  441. package/dist/qr-code.d.cts +221 -2
  442. package/dist/qr-code.d.ts +221 -2
  443. package/dist/qr-code.js +4 -1
  444. package/dist/radio-group.cjs +5 -5
  445. package/dist/radio-group.js +4 -4
  446. package/dist/reason-tag.cjs +6 -5
  447. package/dist/reason-tag.js +5 -4
  448. package/dist/reorderable-grid.cjs +4 -3
  449. package/dist/reorderable-grid.js +2 -1
  450. package/dist/resizable-panels.cjs +3 -2
  451. package/dist/resizable-panels.js +2 -1
  452. package/dist/select.cjs +8 -7
  453. package/dist/select.js +7 -6
  454. package/dist/separator.cjs +2 -2
  455. package/dist/separator.js +1 -1
  456. package/dist/sidebar.cjs +6 -5
  457. package/dist/sidebar.js +4 -3
  458. package/dist/slider.cjs +5 -5
  459. package/dist/slider.js +4 -4
  460. package/dist/stat-list.cjs +2 -2
  461. package/dist/stat-list.d.cts +5 -2
  462. package/dist/stat-list.d.ts +5 -2
  463. package/dist/stat-list.js +1 -1
  464. package/dist/stepper.cjs +3 -2
  465. package/dist/stepper.js +2 -1
  466. package/dist/styles.css +24 -0
  467. package/dist/styles.css.map +1 -1
  468. package/dist/switch.cjs +3 -3
  469. package/dist/switch.js +2 -2
  470. package/dist/table.cjs +11 -11
  471. package/dist/table.js +1 -1
  472. package/dist/tabs.cjs +4 -3
  473. package/dist/tabs.js +2 -1
  474. package/dist/textarea.cjs +6 -6
  475. package/dist/textarea.js +5 -5
  476. package/dist/time-grid.cjs +3 -2
  477. package/dist/time-grid.js +2 -1
  478. package/dist/time-picker.cjs +2 -2
  479. package/dist/time-picker.js +1 -1
  480. package/dist/timeline.cjs +4 -4
  481. package/dist/timeline.js +1 -1
  482. package/dist/toast.cjs +4 -3
  483. package/dist/toast.d.cts +6 -2
  484. package/dist/toast.d.ts +6 -2
  485. package/dist/toast.js +2 -1
  486. package/dist/tooltip.cjs +4 -3
  487. package/dist/tooltip.js +3 -2
  488. package/dist/tree-nav.cjs +3 -3
  489. package/dist/tree-nav.js +1 -1
  490. package/docs/Dropdown.md +1 -1
  491. package/docs/InputTag.md +1 -1
  492. package/docs/MobileMenu.md +2 -2
  493. package/docs/Popover.md +1 -1
  494. package/docs/QrCode.md +108 -0
  495. package/docs/ReorderableGrid.md +2 -0
  496. package/docs/ResizablePanels.md +2 -0
  497. package/docs/Toast.md +2 -2
  498. package/package.json +1 -1
  499. package/dist/chunk-25HRO7HQ.cjs.map +0 -1
  500. package/dist/chunk-2O5UXH5R.cjs.map +0 -1
  501. package/dist/chunk-37D5PYEF.js.map +0 -1
  502. package/dist/chunk-3S5ED522.js.map +0 -1
  503. package/dist/chunk-4DL2U23D.cjs.map +0 -1
  504. package/dist/chunk-5EW47IH7.js.map +0 -1
  505. package/dist/chunk-5TP642UT.js.map +0 -1
  506. package/dist/chunk-6GVOW3UL.js.map +0 -1
  507. package/dist/chunk-AE53RKWR.cjs.map +0 -1
  508. package/dist/chunk-AJPYGRLA.cjs.map +0 -1
  509. package/dist/chunk-BXPLERIJ.js.map +0 -1
  510. package/dist/chunk-BYO5RUDE.cjs.map +0 -1
  511. package/dist/chunk-CEFK54WP.cjs.map +0 -1
  512. package/dist/chunk-CQ7QXZLR.cjs.map +0 -1
  513. package/dist/chunk-DJYG7DXS.js.map +0 -1
  514. package/dist/chunk-DTOIO42M.js.map +0 -1
  515. package/dist/chunk-DXZCKDYS.js.map +0 -1
  516. package/dist/chunk-ESCIXKFT.js.map +0 -1
  517. package/dist/chunk-EUVWYDFN.js.map +0 -1
  518. package/dist/chunk-F4OYQ2XZ.js.map +0 -1
  519. package/dist/chunk-FKZB27OM.cjs.map +0 -1
  520. package/dist/chunk-FR4RHVPR.js.map +0 -1
  521. package/dist/chunk-FVQO75KY.cjs.map +0 -1
  522. package/dist/chunk-GDF6XTHC.js.map +0 -1
  523. package/dist/chunk-GR2WKBER.js.map +0 -1
  524. package/dist/chunk-GTS3QA7M.js.map +0 -1
  525. package/dist/chunk-HLI6RB5V.cjs.map +0 -1
  526. package/dist/chunk-HNJXBMHI.cjs.map +0 -1
  527. package/dist/chunk-J2DI6RMR.cjs.map +0 -1
  528. package/dist/chunk-JY2RC6I4.js.map +0 -1
  529. package/dist/chunk-KFA7B6WP.cjs.map +0 -1
  530. package/dist/chunk-KOAMRCSC.cjs.map +0 -1
  531. package/dist/chunk-KOTUFZJ6.cjs.map +0 -1
  532. package/dist/chunk-LFC2DL6H.cjs.map +0 -1
  533. package/dist/chunk-LKN7FYW6.js.map +0 -1
  534. package/dist/chunk-MI57NAKF.js.map +0 -1
  535. package/dist/chunk-MKGWHSNV.cjs.map +0 -1
  536. package/dist/chunk-MLZGGAXQ.js.map +0 -1
  537. package/dist/chunk-MPCZUZ4O.cjs.map +0 -1
  538. package/dist/chunk-MQ6VGG62.js.map +0 -1
  539. package/dist/chunk-NSJBVV7R.js.map +0 -1
  540. package/dist/chunk-NVXTHTJI.js.map +0 -1
  541. package/dist/chunk-O5ORO2RX.cjs.map +0 -1
  542. package/dist/chunk-OASSZI6M.cjs.map +0 -1
  543. package/dist/chunk-PCNJJVTF.cjs.map +0 -1
  544. package/dist/chunk-PDVU2PXR.js.map +0 -1
  545. package/dist/chunk-PJNUGSKI.js.map +0 -1
  546. package/dist/chunk-PM5I5ZHK.cjs.map +0 -1
  547. package/dist/chunk-PXZRYL5I.js.map +0 -1
  548. package/dist/chunk-QF2FODTG.js.map +0 -1
  549. package/dist/chunk-QGY5FPVM.js.map +0 -1
  550. package/dist/chunk-QP6VNKLW.cjs.map +0 -1
  551. package/dist/chunk-QTS4Q2NK.js.map +0 -1
  552. package/dist/chunk-RANTYGKW.js.map +0 -1
  553. package/dist/chunk-RLE5WYY6.js.map +0 -1
  554. package/dist/chunk-RSLZL6VP.js.map +0 -1
  555. package/dist/chunk-RWU2MFUL.js.map +0 -1
  556. package/dist/chunk-RZUYCZ5D.cjs.map +0 -1
  557. package/dist/chunk-SKMORSBO.cjs.map +0 -1
  558. package/dist/chunk-SSCW67KA.cjs.map +0 -1
  559. package/dist/chunk-SXXDTW7S.js.map +0 -1
  560. package/dist/chunk-TFX4LL7V.js.map +0 -1
  561. package/dist/chunk-TMQF2CRN.js.map +0 -1
  562. package/dist/chunk-UK6BGM74.cjs.map +0 -1
  563. package/dist/chunk-UXYFM2XT.cjs.map +0 -1
  564. package/dist/chunk-VZTXUYPM.cjs.map +0 -1
  565. package/dist/chunk-WMANILKC.cjs.map +0 -1
  566. package/dist/chunk-WNUAGRQN.cjs.map +0 -1
  567. package/dist/chunk-WZAKEJDL.js.map +0 -1
  568. package/dist/chunk-X2A3NAJW.js.map +0 -1
  569. package/dist/chunk-XZOBGKZL.cjs.map +0 -1
  570. package/dist/chunk-Y3QAEF2P.cjs.map +0 -1
  571. package/dist/chunk-YQZB5Z7C.cjs.map +0 -1
  572. package/dist/chunk-Z44A7NPD.cjs.map +0 -1
  573. package/dist/chunk-Z4UXLQSK.cjs.map +0 -1
  574. package/dist/chunk-Z7SQMQTF.cjs.map +0 -1
  575. package/dist/chunk-ZPBKRJMH.js.map +0 -1
  576. package/dist/chunk-ZVDW2VX5.cjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkP53432AK_cjs = require('./chunk-P53432AK.cjs');
4
- var chunkQF7CD4JH_cjs = require('./chunk-QF7CD4JH.cjs');
5
- var chunkO3F6DYWR_cjs = require('./chunk-O3F6DYWR.cjs');
3
+ var chunkUIBAIWUR_cjs = require('./chunk-UIBAIWUR.cjs');
4
+ var chunkQ7XL37T3_cjs = require('./chunk-Q7XL37T3.cjs');
5
+ var chunkXG6J5MOK_cjs = require('./chunk-XG6J5MOK.cjs');
6
6
  var chunkKJ22KE56_cjs = require('./chunk-KJ22KE56.cjs');
7
7
  var chunkL3V3BYVS_cjs = require('./chunk-L3V3BYVS.cjs');
8
8
  var chunkSNHU2AI4_cjs = require('./chunk-SNHU2AI4.cjs');
@@ -46,8 +46,8 @@ function RadioGroup({
46
46
  lg: "h-5 w-5",
47
47
  xl: "h-6 w-6"
48
48
  }[size];
49
- const selectedIndex = list.map(chunkO3F6DYWR_cjs.resolveOption).findIndex((o) => o.value === value);
50
- const content = !showControl ? /* @__PURE__ */ jsxRuntime.jsx(chunkP53432AK_cjs.DisplayValue, { size, interactive, onActivate: enterEdit, children: list.map(chunkO3F6DYWR_cjs.resolveOption).find((o) => o.value === value)?.label }) : /* @__PURE__ */ jsxRuntime.jsx(
49
+ const selectedIndex = list.map(chunkXG6J5MOK_cjs.resolveOption).findIndex((o) => o.value === value);
50
+ const content = !showControl ? /* @__PURE__ */ jsxRuntime.jsx(chunkUIBAIWUR_cjs.DisplayValue, { size, interactive, onActivate: enterEdit, children: list.map(chunkXG6J5MOK_cjs.resolveOption).find((o) => o.value === value)?.label }) : /* @__PURE__ */ jsxRuntime.jsx(
51
51
  "div",
52
52
  {
53
53
  ...rest,
@@ -63,7 +63,7 @@ function RadioGroup({
63
63
  className
64
64
  ),
65
65
  children: list.map((option, index) => {
66
- const resolved = chunkO3F6DYWR_cjs.resolveOption(option);
66
+ const resolved = chunkXG6J5MOK_cjs.resolveOption(option);
67
67
  const optionId = `${groupId}-${index}`;
68
68
  const isSelected = value === resolved.value;
69
69
  const shouldAutoFocus = interactive && (selectedIndex === -1 ? index === 0 : isSelected);
@@ -82,7 +82,7 @@ function RadioGroup({
82
82
  className: chunkZU5Q77OT_cjs.cn(
83
83
  sizeClasses,
84
84
  "cursor-pointer border border-[color:var(--fancy-border-strong,var(--color-zinc-300))] bg-[color:var(--fancy-input,var(--color-white))] text-blue-600 transition-[border-color,box-shadow] duration-150 focus:ring-2 focus:ring-blue-500/40 focus:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50 dark:border-[color:var(--fancy-border-strong-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-input-dark,#1e1e24)]",
85
- chunkO3F6DYWR_cjs.dirtyRingClasses(dirty),
85
+ chunkXG6J5MOK_cjs.dirtyRingClasses(dirty),
86
86
  error && "border-red-500"
87
87
  )
88
88
  }
@@ -107,7 +107,7 @@ function RadioGroup({
107
107
  );
108
108
  if (label || error || description) {
109
109
  return /* @__PURE__ */ jsxRuntime.jsx(
110
- chunkQF7CD4JH_cjs.Field,
110
+ chunkQ7XL37T3_cjs.Field,
111
111
  {
112
112
  label,
113
113
  labelHidden,
@@ -125,5 +125,5 @@ function RadioGroup({
125
125
  RadioGroup.displayName = "RadioGroup";
126
126
 
127
127
  exports.RadioGroup = RadioGroup;
128
- //# sourceMappingURL=chunk-H7ELUIF6.cjs.map
129
- //# sourceMappingURL=chunk-H7ELUIF6.cjs.map
128
+ //# sourceMappingURL=chunk-W53SZTPX.cjs.map
129
+ //# sourceMappingURL=chunk-W53SZTPX.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/inputs/RadioGroup/RadioGroup.tsx"],"names":["useId","useFieldMode","useInlineEdit","useControllableState","resolveOption","jsx","DisplayValue","cn","jsxs","dirtyRingClasses","Field"],"mappings":"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","file":"chunk-H7ELUIF6.cjs","sourcesContent":["import { useId } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { useControllableState } from \"../../../hooks/use-controllable-state\";\nimport { Field } from \"../Field\";\nimport { useFieldMode } from \"../mode/FieldMode.context\";\nimport { DisplayValue } from \"../mode/DisplayValue\";\nimport { useInlineEdit } from \"../mode/useInlineEdit\";\nimport { dirtyRingClasses, resolveOption } from \"../inputs.utils\";\nimport type { RadioGroupProps } from \"./RadioGroup.types\";\n\nexport function RadioGroup<V = string>({\n size = \"md\",\n dirty,\n error,\n label,\n labelHidden,\n description,\n required,\n disabled,\n className,\n name,\n list,\n value: controlledValue,\n defaultValue,\n onValueChange,\n orientation = \"vertical\",\n mode,\n ...rest\n}: RadioGroupProps<V>) {\n const groupId = useId();\n const radioName = name ?? groupId;\n // Same reason as MultiSwitch: a `<label>` cannot name a div[role=\"radiogroup\"].\n // This one did not even pass `htmlFor`, so its label named nothing at all.\n const labelId = label ? `${groupId}-label` : undefined;\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n const [value, setValue] = useControllableState(\n controlledValue,\n defaultValue as V,\n onValueChange,\n );\n\n const sizeClasses = {\n xs: \"h-3.5 w-3.5\",\n sm: \"h-4 w-4\",\n md: \"h-[18px] w-[18px]\",\n lg: \"h-5 w-5\",\n xl: \"h-6 w-6\",\n }[size];\n\n const selectedIndex = list.map(resolveOption).findIndex((o) => o.value === value);\n\n const content = !showControl ? (\n <DisplayValue size={size} interactive={interactive} onActivate={enterEdit}>\n {list.map(resolveOption).find((o) => o.value === value)?.label}\n </DisplayValue>\n ) : (\n <div\n {...rest}\n data-react-fancy-radio-group=\"\"\n role=\"radiogroup\"\n aria-labelledby={labelId}\n onBlur={(e) => {\n if (interactive && !e.currentTarget.contains(e.relatedTarget as Node)) exitEdit();\n }}\n className={cn(\n \"flex gap-3\",\n orientation === \"vertical\" ? \"flex-col\" : \"flex-row flex-wrap\",\n className,\n )}\n >\n {list.map((option, index) => {\n const resolved = resolveOption(option);\n const optionId = `${groupId}-${index}`;\n const isSelected = value === resolved.value;\n // Focus the selected radio on entering edit (or the first if none).\n const shouldAutoFocus =\n interactive && (selectedIndex === -1 ? index === 0 : isSelected);\n\n return (\n <div key={optionId} className=\"flex items-start gap-2\">\n <input\n id={optionId}\n type=\"radio\"\n name={radioName}\n value={String(resolved.value)}\n checked={isSelected}\n disabled={disabled || resolved.disabled}\n autoFocus={shouldAutoFocus}\n onChange={() => setValue(resolved.value)}\n className={cn(\n sizeClasses,\n \"cursor-pointer border border-[color:var(--fancy-border-strong,var(--color-zinc-300))] bg-[color:var(--fancy-input,var(--color-white))] text-blue-600 transition-[border-color,box-shadow] duration-150 focus:ring-2 focus:ring-blue-500/40 focus:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50 dark:border-[color:var(--fancy-border-strong-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-input-dark,#1e1e24)]\",\n dirtyRingClasses(dirty),\n error && \"border-red-500\",\n )}\n />\n <div className=\"flex flex-col\">\n <label\n htmlFor={optionId}\n className={cn(\n \"cursor-pointer text-sm text-zinc-700 dark:text-zinc-100\",\n (disabled || resolved.disabled) &&\n \"cursor-not-allowed opacity-50\",\n )}\n >\n {resolved.label}\n </label>\n {resolved.description && (\n <span className=\"text-xs text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">\n {resolved.description}\n </span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n labelId={labelId}\n description={description}\n error={error}\n required={required}\n size={size}\n >\n {content}\n </Field>\n );\n }\n\n return content;\n}\n\nRadioGroup.displayName = \"RadioGroup\";\n"]}
1
+ {"version":3,"sources":["../src/components/inputs/RadioGroup/RadioGroup.tsx"],"names":["useId","useFieldMode","useInlineEdit","useControllableState","resolveOption","jsx","DisplayValue","cn","jsxs","dirtyRingClasses","Field"],"mappings":"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","file":"chunk-W53SZTPX.cjs","sourcesContent":["import { useId } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { useControllableState } from \"../../../hooks/use-controllable-state\";\nimport { Field } from \"../Field\";\nimport { useFieldMode } from \"../mode/FieldMode.context\";\nimport { DisplayValue } from \"../mode/DisplayValue\";\nimport { useInlineEdit } from \"../mode/useInlineEdit\";\nimport { dirtyRingClasses, resolveOption } from \"../inputs.utils\";\nimport type { RadioGroupProps } from \"./RadioGroup.types\";\n\nexport function RadioGroup<V = string>({\n size = \"md\",\n dirty,\n error,\n label,\n labelHidden,\n description,\n required,\n disabled,\n className,\n name,\n list,\n value: controlledValue,\n defaultValue,\n onValueChange,\n orientation = \"vertical\",\n mode,\n ...rest\n}: RadioGroupProps<V>) {\n const groupId = useId();\n const radioName = name ?? groupId;\n // Same reason as MultiSwitch: a `<label>` cannot name a div[role=\"radiogroup\"].\n // This one did not even pass `htmlFor`, so its label named nothing at all.\n const labelId = label ? `${groupId}-label` : undefined;\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n const [value, setValue] = useControllableState(\n controlledValue,\n defaultValue as V,\n onValueChange,\n );\n\n const sizeClasses = {\n xs: \"h-3.5 w-3.5\",\n sm: \"h-4 w-4\",\n md: \"h-[18px] w-[18px]\",\n lg: \"h-5 w-5\",\n xl: \"h-6 w-6\",\n }[size];\n\n const selectedIndex = list.map(resolveOption).findIndex((o) => o.value === value);\n\n const content = !showControl ? (\n <DisplayValue size={size} interactive={interactive} onActivate={enterEdit}>\n {list.map(resolveOption).find((o) => o.value === value)?.label}\n </DisplayValue>\n ) : (\n <div\n {...rest}\n data-react-fancy-radio-group=\"\"\n role=\"radiogroup\"\n aria-labelledby={labelId}\n onBlur={(e) => {\n if (interactive && !e.currentTarget.contains(e.relatedTarget as Node)) exitEdit();\n }}\n className={cn(\n \"flex gap-3\",\n orientation === \"vertical\" ? \"flex-col\" : \"flex-row flex-wrap\",\n className,\n )}\n >\n {list.map((option, index) => {\n const resolved = resolveOption(option);\n const optionId = `${groupId}-${index}`;\n const isSelected = value === resolved.value;\n // Focus the selected radio on entering edit (or the first if none).\n const shouldAutoFocus =\n interactive && (selectedIndex === -1 ? index === 0 : isSelected);\n\n return (\n <div key={optionId} className=\"flex items-start gap-2\">\n <input\n id={optionId}\n type=\"radio\"\n name={radioName}\n value={String(resolved.value)}\n checked={isSelected}\n disabled={disabled || resolved.disabled}\n autoFocus={shouldAutoFocus}\n onChange={() => setValue(resolved.value)}\n className={cn(\n sizeClasses,\n \"cursor-pointer border border-[color:var(--fancy-border-strong,var(--color-zinc-300))] bg-[color:var(--fancy-input,var(--color-white))] text-blue-600 transition-[border-color,box-shadow] duration-150 focus:ring-2 focus:ring-blue-500/40 focus:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50 dark:border-[color:var(--fancy-border-strong-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-input-dark,#1e1e24)]\",\n dirtyRingClasses(dirty),\n error && \"border-red-500\",\n )}\n />\n <div className=\"flex flex-col\">\n <label\n htmlFor={optionId}\n className={cn(\n \"cursor-pointer text-sm text-zinc-700 dark:text-zinc-100\",\n (disabled || resolved.disabled) &&\n \"cursor-not-allowed opacity-50\",\n )}\n >\n {resolved.label}\n </label>\n {resolved.description && (\n <span className=\"text-xs text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">\n {resolved.description}\n </span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n labelId={labelId}\n description={description}\n error={error}\n required={required}\n size={size}\n >\n {content}\n </Field>\n );\n }\n\n return content;\n}\n\nRadioGroup.displayName = \"RadioGroup\";\n"]}
@@ -1,6 +1,6 @@
1
- import { DisplayValue } from './chunk-WX5XYDVN.js';
2
- import { Field } from './chunk-5WQ6FPSP.js';
3
- import { resolveOption, dirtyRingClasses } from './chunk-USWQAMI3.js';
1
+ import { DisplayValue } from './chunk-PZTFGPQJ.js';
2
+ import { Field } from './chunk-E2AEU5SP.js';
3
+ import { resolveOption, dirtyRingClasses } from './chunk-IF6EITB5.js';
4
4
  import { useInlineEdit } from './chunk-OL53XYHF.js';
5
5
  import { useFieldMode } from './chunk-NRXK42LO.js';
6
6
  import { useControllableState } from './chunk-EDYAXGUM.js';
@@ -123,5 +123,5 @@ function RadioGroup({
123
123
  RadioGroup.displayName = "RadioGroup";
124
124
 
125
125
  export { RadioGroup };
126
- //# sourceMappingURL=chunk-4FH2JHUY.js.map
127
- //# sourceMappingURL=chunk-4FH2JHUY.js.map
126
+ //# sourceMappingURL=chunk-WAEOIEDI.js.map
127
+ //# sourceMappingURL=chunk-WAEOIEDI.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/inputs/RadioGroup/RadioGroup.tsx"],"names":[],"mappings":"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","file":"chunk-4FH2JHUY.js","sourcesContent":["import { useId } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { useControllableState } from \"../../../hooks/use-controllable-state\";\nimport { Field } from \"../Field\";\nimport { useFieldMode } from \"../mode/FieldMode.context\";\nimport { DisplayValue } from \"../mode/DisplayValue\";\nimport { useInlineEdit } from \"../mode/useInlineEdit\";\nimport { dirtyRingClasses, resolveOption } from \"../inputs.utils\";\nimport type { RadioGroupProps } from \"./RadioGroup.types\";\n\nexport function RadioGroup<V = string>({\n size = \"md\",\n dirty,\n error,\n label,\n labelHidden,\n description,\n required,\n disabled,\n className,\n name,\n list,\n value: controlledValue,\n defaultValue,\n onValueChange,\n orientation = \"vertical\",\n mode,\n ...rest\n}: RadioGroupProps<V>) {\n const groupId = useId();\n const radioName = name ?? groupId;\n // Same reason as MultiSwitch: a `<label>` cannot name a div[role=\"radiogroup\"].\n // This one did not even pass `htmlFor`, so its label named nothing at all.\n const labelId = label ? `${groupId}-label` : undefined;\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n const [value, setValue] = useControllableState(\n controlledValue,\n defaultValue as V,\n onValueChange,\n );\n\n const sizeClasses = {\n xs: \"h-3.5 w-3.5\",\n sm: \"h-4 w-4\",\n md: \"h-[18px] w-[18px]\",\n lg: \"h-5 w-5\",\n xl: \"h-6 w-6\",\n }[size];\n\n const selectedIndex = list.map(resolveOption).findIndex((o) => o.value === value);\n\n const content = !showControl ? (\n <DisplayValue size={size} interactive={interactive} onActivate={enterEdit}>\n {list.map(resolveOption).find((o) => o.value === value)?.label}\n </DisplayValue>\n ) : (\n <div\n {...rest}\n data-react-fancy-radio-group=\"\"\n role=\"radiogroup\"\n aria-labelledby={labelId}\n onBlur={(e) => {\n if (interactive && !e.currentTarget.contains(e.relatedTarget as Node)) exitEdit();\n }}\n className={cn(\n \"flex gap-3\",\n orientation === \"vertical\" ? \"flex-col\" : \"flex-row flex-wrap\",\n className,\n )}\n >\n {list.map((option, index) => {\n const resolved = resolveOption(option);\n const optionId = `${groupId}-${index}`;\n const isSelected = value === resolved.value;\n // Focus the selected radio on entering edit (or the first if none).\n const shouldAutoFocus =\n interactive && (selectedIndex === -1 ? index === 0 : isSelected);\n\n return (\n <div key={optionId} className=\"flex items-start gap-2\">\n <input\n id={optionId}\n type=\"radio\"\n name={radioName}\n value={String(resolved.value)}\n checked={isSelected}\n disabled={disabled || resolved.disabled}\n autoFocus={shouldAutoFocus}\n onChange={() => setValue(resolved.value)}\n className={cn(\n sizeClasses,\n \"cursor-pointer border border-[color:var(--fancy-border-strong,var(--color-zinc-300))] bg-[color:var(--fancy-input,var(--color-white))] text-blue-600 transition-[border-color,box-shadow] duration-150 focus:ring-2 focus:ring-blue-500/40 focus:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50 dark:border-[color:var(--fancy-border-strong-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-input-dark,#1e1e24)]\",\n dirtyRingClasses(dirty),\n error && \"border-red-500\",\n )}\n />\n <div className=\"flex flex-col\">\n <label\n htmlFor={optionId}\n className={cn(\n \"cursor-pointer text-sm text-zinc-700 dark:text-zinc-100\",\n (disabled || resolved.disabled) &&\n \"cursor-not-allowed opacity-50\",\n )}\n >\n {resolved.label}\n </label>\n {resolved.description && (\n <span className=\"text-xs text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">\n {resolved.description}\n </span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n labelId={labelId}\n description={description}\n error={error}\n required={required}\n size={size}\n >\n {content}\n </Field>\n );\n }\n\n return content;\n}\n\nRadioGroup.displayName = \"RadioGroup\";\n"]}
1
+ {"version":3,"sources":["../src/components/inputs/RadioGroup/RadioGroup.tsx"],"names":[],"mappings":"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","file":"chunk-WAEOIEDI.js","sourcesContent":["import { useId } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { useControllableState } from \"../../../hooks/use-controllable-state\";\nimport { Field } from \"../Field\";\nimport { useFieldMode } from \"../mode/FieldMode.context\";\nimport { DisplayValue } from \"../mode/DisplayValue\";\nimport { useInlineEdit } from \"../mode/useInlineEdit\";\nimport { dirtyRingClasses, resolveOption } from \"../inputs.utils\";\nimport type { RadioGroupProps } from \"./RadioGroup.types\";\n\nexport function RadioGroup<V = string>({\n size = \"md\",\n dirty,\n error,\n label,\n labelHidden,\n description,\n required,\n disabled,\n className,\n name,\n list,\n value: controlledValue,\n defaultValue,\n onValueChange,\n orientation = \"vertical\",\n mode,\n ...rest\n}: RadioGroupProps<V>) {\n const groupId = useId();\n const radioName = name ?? groupId;\n // Same reason as MultiSwitch: a `<label>` cannot name a div[role=\"radiogroup\"].\n // This one did not even pass `htmlFor`, so its label named nothing at all.\n const labelId = label ? `${groupId}-label` : undefined;\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n const [value, setValue] = useControllableState(\n controlledValue,\n defaultValue as V,\n onValueChange,\n );\n\n const sizeClasses = {\n xs: \"h-3.5 w-3.5\",\n sm: \"h-4 w-4\",\n md: \"h-[18px] w-[18px]\",\n lg: \"h-5 w-5\",\n xl: \"h-6 w-6\",\n }[size];\n\n const selectedIndex = list.map(resolveOption).findIndex((o) => o.value === value);\n\n const content = !showControl ? (\n <DisplayValue size={size} interactive={interactive} onActivate={enterEdit}>\n {list.map(resolveOption).find((o) => o.value === value)?.label}\n </DisplayValue>\n ) : (\n <div\n {...rest}\n data-react-fancy-radio-group=\"\"\n role=\"radiogroup\"\n aria-labelledby={labelId}\n onBlur={(e) => {\n if (interactive && !e.currentTarget.contains(e.relatedTarget as Node)) exitEdit();\n }}\n className={cn(\n \"flex gap-3\",\n orientation === \"vertical\" ? \"flex-col\" : \"flex-row flex-wrap\",\n className,\n )}\n >\n {list.map((option, index) => {\n const resolved = resolveOption(option);\n const optionId = `${groupId}-${index}`;\n const isSelected = value === resolved.value;\n // Focus the selected radio on entering edit (or the first if none).\n const shouldAutoFocus =\n interactive && (selectedIndex === -1 ? index === 0 : isSelected);\n\n return (\n <div key={optionId} className=\"flex items-start gap-2\">\n <input\n id={optionId}\n type=\"radio\"\n name={radioName}\n value={String(resolved.value)}\n checked={isSelected}\n disabled={disabled || resolved.disabled}\n autoFocus={shouldAutoFocus}\n onChange={() => setValue(resolved.value)}\n className={cn(\n sizeClasses,\n \"cursor-pointer border border-[color:var(--fancy-border-strong,var(--color-zinc-300))] bg-[color:var(--fancy-input,var(--color-white))] text-blue-600 transition-[border-color,box-shadow] duration-150 focus:ring-2 focus:ring-blue-500/40 focus:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50 dark:border-[color:var(--fancy-border-strong-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-input-dark,#1e1e24)]\",\n dirtyRingClasses(dirty),\n error && \"border-red-500\",\n )}\n />\n <div className=\"flex flex-col\">\n <label\n htmlFor={optionId}\n className={cn(\n \"cursor-pointer text-sm text-zinc-700 dark:text-zinc-100\",\n (disabled || resolved.disabled) &&\n \"cursor-not-allowed opacity-50\",\n )}\n >\n {resolved.label}\n </label>\n {resolved.description && (\n <span className=\"text-xs text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">\n {resolved.description}\n </span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n labelId={labelId}\n description={description}\n error={error}\n required={required}\n size={size}\n >\n {content}\n </Field>\n );\n }\n\n return content;\n}\n\nRadioGroup.displayName = \"RadioGroup\";\n"]}
@@ -1,4 +1,4 @@
1
- import { FauxClient } from './chunk-GVMWJ4NI.js';
1
+ import { FauxClient } from './chunk-XH24BGEK.js';
2
2
  import { usePanZoom } from './chunk-CPY7NHXM.js';
3
3
  import { cn } from './chunk-MMW2JGKZ.js';
4
4
  import { forwardRef, useRef, useState, useCallback } from 'react';
@@ -152,7 +152,7 @@ var ImageViewer = forwardRef(
152
152
  "div",
153
153
  {
154
154
  "data-react-fancy-image-viewer-controls": "",
155
- className: "absolute bottom-2 right-2 flex items-center gap-0.5 rounded-md border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-white/90 p-0.5 text-zinc-700 shadow-sm backdrop-blur dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-zinc-900/90 dark:text-zinc-200",
155
+ className: "absolute bottom-2 end-2 flex items-center gap-0.5 rounded-md border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-white/90 p-0.5 text-zinc-700 shadow-sm backdrop-blur dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-zinc-900/90 dark:text-zinc-200",
156
156
  children: [
157
157
  /* @__PURE__ */ jsx(
158
158
  "button",
@@ -214,5 +214,5 @@ var ImageViewer = forwardRef(
214
214
  ImageViewer.displayName = "ImageViewer";
215
215
 
216
216
  export { ImageViewer };
217
- //# sourceMappingURL=chunk-ICMLLZKZ.js.map
218
- //# sourceMappingURL=chunk-ICMLLZKZ.js.map
217
+ //# sourceMappingURL=chunk-WJE7UX2G.js.map
218
+ //# sourceMappingURL=chunk-WJE7UX2G.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ImageViewer/ImageViewer.tsx"],"names":[],"mappings":"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","file":"chunk-ICMLLZKZ.js","sourcesContent":["import { FauxClient } from \"../FauxClient\";\nimport {\n forwardRef,\n useCallback,\n useRef,\n useState,\n type CSSProperties,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { usePanZoom } from \"../../hooks/use-pan-zoom\";\nimport type { ImageViewerProps, ImageViewerViewport } from \"./ImageViewer.types\";\n\nconst DEFAULT_VIEWPORT: ImageViewerViewport = { panX: 0, panY: 0, zoom: 1 };\n\nconst fitClasses: Record<NonNullable<ImageViewerProps[\"fit\"]>, string> = {\n contain: \"h-full w-full object-contain\",\n cover: \"h-full w-full object-cover\",\n none: \"max-w-none object-none\",\n};\n\nfunction clamp(n: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, n));\n}\n\n/**\n * A standalone image viewer: fits the image to its container, with optional\n * Ctrl/⌘+wheel zoom, click-drag panning, and a transparency checkerboard. Works\n * anywhere on its own and is also what `<MediaViewer>` renders for images.\n *\n * The pan/zoom viewport is controllable (`viewport` + `onViewportChange`) so an\n * agent bridge can drive it; it's uncontrolled by default.\n *\n * ```tsx\n * <ImageViewer src=\"/logo.png\" alt=\"logo.png\" style={{ height: 320 }} />\n * ```\n */\nexport const ImageViewer = forwardRef<HTMLDivElement, ImageViewerProps>(\n (\n {\n src,\n alt = \"\",\n fit = \"contain\",\n zoomable = true,\n pannable = true,\n controls,\n minZoom = 0.25,\n maxZoom = 8,\n checkerboard = true,\n viewport,\n defaultViewport,\n onViewportChange,\n onLoad,\n onError,\n className,\n style,\n frame = false,\n frameProps,\n },\n ref,\n ) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [status, setStatus] = useState<\"loading\" | \"loaded\" | \"error\">(\"loading\");\n\n // Controllable viewport supporting functional updates (usePanZoom needs them).\n const isControlled = viewport !== undefined;\n const [internal, setInternal] = useState<ImageViewerViewport>(\n defaultViewport ?? DEFAULT_VIEWPORT,\n );\n const current = isControlled ? viewport! : internal;\n const currentRef = useRef(current);\n currentRef.current = current;\n\n const setViewport = useCallback(\n (\n next:\n | ImageViewerViewport\n | ((prev: ImageViewerViewport) => ImageViewerViewport),\n ) => {\n const resolved =\n typeof next === \"function\" ? next(currentRef.current) : next;\n if (!isControlled) setInternal(resolved);\n onViewportChange?.(resolved);\n },\n [isControlled, onViewportChange],\n );\n\n const interactive = status === \"loaded\";\n const { containerProps, isPanning } = usePanZoom({\n viewport: current,\n setViewport,\n minZoom,\n maxZoom,\n pannable: pannable && interactive,\n zoomable: zoomable && interactive,\n containerRef,\n });\n\n // Zoom about the container centre — used by the +/− buttons.\n const zoomBy = useCallback(\n (factor: number) => {\n const el = containerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n const cx = rect.width / 2;\n const cy = rect.height / 2;\n setViewport((prev) => {\n const newZoom = clamp(prev.zoom * factor, minZoom, maxZoom);\n const ratio = newZoom / prev.zoom;\n return {\n zoom: newZoom,\n panX: cx - (cx - prev.panX) * ratio,\n panY: cy - (cy - prev.panY) * ratio,\n };\n });\n },\n [setViewport, minZoom, maxZoom],\n );\n\n const reset = useCallback(() => setViewport(DEFAULT_VIEWPORT), [setViewport]);\n\n const showControls = !frame && (controls ?? zoomable) && interactive;\n const transform = `translate(${current.panX}px, ${current.panY}px) scale(${current.zoom})`;\n\n const viewer = (\n <div\n ref={ref}\n data-react-fancy-image-viewer=\"\"\n className={cn(\n \"relative isolate overflow-hidden rounded-md select-none\",\n // In the frame it fills the frame's body; standalone, the caller sizes it.\n frame && \"h-full w-full rounded-none\",\n checkerboard\n ? \"fancy-checkerboard\"\n : \"bg-zinc-100 dark:bg-zinc-900\",\n className,\n )}\n style={style}\n >\n <div\n ref={containerRef}\n data-canvas-bg=\"\"\n className={cn(\n \"absolute inset-0 flex items-center justify-center\",\n isPanning\n ? \"cursor-grabbing\"\n : pannable && interactive\n ? \"cursor-grab\"\n : \"\",\n )}\n style={\n {\n transform,\n transformOrigin: \"0 0\",\n willChange: \"transform\",\n touchAction: zoomable || pannable ? \"none\" : undefined,\n } as CSSProperties\n }\n onDoubleClick={zoomable ? reset : undefined}\n {...containerProps}\n >\n <img\n src={src}\n alt={alt}\n draggable={false}\n onLoad={() => {\n setStatus(\"loaded\");\n onLoad?.();\n }}\n onError={() => {\n setStatus(\"error\");\n onError?.();\n }}\n className={cn(\n \"pointer-events-none block\",\n status === \"error\" && \"hidden\",\n fitClasses[fit],\n )}\n />\n </div>\n\n {status === \"error\" && (\n <div\n data-react-fancy-image-viewer-error=\"\"\n className=\"absolute inset-0 flex flex-col items-center justify-center gap-1 p-4 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 >\n <span className=\"font-medium\">Couldn&apos;t load image</span>\n <span className=\"max-w-full truncate text-xs opacity-70\">{alt || src}</span>\n </div>\n )}\n\n {showControls && (\n <div\n data-react-fancy-image-viewer-controls=\"\"\n className=\"absolute bottom-2 right-2 flex items-center gap-0.5 rounded-md border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-white/90 p-0.5 text-zinc-700 shadow-sm backdrop-blur dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-zinc-900/90 dark:text-zinc-200\"\n >\n <button\n type=\"button\"\n aria-label=\"Zoom out\"\n onClick={() => zoomBy(1 / 1.25)}\n className=\"flex h-6 w-6 items-center justify-center rounded text-base leading-none hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\"\n >\n −\n </button>\n <button\n type=\"button\"\n aria-label=\"Reset zoom\"\n onClick={reset}\n className=\"min-w-[3rem] rounded px-1 text-center text-xs tabular-nums hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\"\n >\n {Math.round(current.zoom * 100)}%\n </button>\n <button\n type=\"button\"\n aria-label=\"Zoom in\"\n onClick={() => zoomBy(1.25)}\n className=\"flex h-6 w-6 items-center justify-center rounded text-base leading-none hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\"\n >\n +\n </button>\n </div>\n )}\n </div>\n );\n\n if (!frame) return viewer;\n\n // The frame's bar drives the image's own zoom (about the centre), and the\n // image's boxed bar steps aside: one set of controls, revealed on hover.\n return (\n <FauxClient\n variant=\"device\"\n controls\n fill\n applyZoom={false}\n zoom={current.zoom}\n onZoomChange={(z) => (z === 1 ? reset() : zoomBy(z / current.zoom))}\n minZoom={minZoom}\n maxZoom={maxZoom}\n {...frameProps}\n >\n {viewer}\n </FauxClient>\n );\n },\n);\n\nImageViewer.displayName = \"ImageViewer\";\n"]}
1
+ {"version":3,"sources":["../src/components/ImageViewer/ImageViewer.tsx"],"names":[],"mappings":"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","file":"chunk-WJE7UX2G.js","sourcesContent":["import { FauxClient } from \"../FauxClient\";\nimport {\n forwardRef,\n useCallback,\n useRef,\n useState,\n type CSSProperties,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { usePanZoom } from \"../../hooks/use-pan-zoom\";\nimport type { ImageViewerProps, ImageViewerViewport } from \"./ImageViewer.types\";\n\nconst DEFAULT_VIEWPORT: ImageViewerViewport = { panX: 0, panY: 0, zoom: 1 };\n\nconst fitClasses: Record<NonNullable<ImageViewerProps[\"fit\"]>, string> = {\n contain: \"h-full w-full object-contain\",\n cover: \"h-full w-full object-cover\",\n none: \"max-w-none object-none\",\n};\n\nfunction clamp(n: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, n));\n}\n\n/**\n * A standalone image viewer: fits the image to its container, with optional\n * Ctrl/⌘+wheel zoom, click-drag panning, and a transparency checkerboard. Works\n * anywhere on its own and is also what `<MediaViewer>` renders for images.\n *\n * The pan/zoom viewport is controllable (`viewport` + `onViewportChange`) so an\n * agent bridge can drive it; it's uncontrolled by default.\n *\n * ```tsx\n * <ImageViewer src=\"/logo.png\" alt=\"logo.png\" style={{ height: 320 }} />\n * ```\n */\nexport const ImageViewer = forwardRef<HTMLDivElement, ImageViewerProps>(\n (\n {\n src,\n alt = \"\",\n fit = \"contain\",\n zoomable = true,\n pannable = true,\n controls,\n minZoom = 0.25,\n maxZoom = 8,\n checkerboard = true,\n viewport,\n defaultViewport,\n onViewportChange,\n onLoad,\n onError,\n className,\n style,\n frame = false,\n frameProps,\n },\n ref,\n ) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [status, setStatus] = useState<\"loading\" | \"loaded\" | \"error\">(\"loading\");\n\n // Controllable viewport supporting functional updates (usePanZoom needs them).\n const isControlled = viewport !== undefined;\n const [internal, setInternal] = useState<ImageViewerViewport>(\n defaultViewport ?? DEFAULT_VIEWPORT,\n );\n const current = isControlled ? viewport! : internal;\n const currentRef = useRef(current);\n currentRef.current = current;\n\n const setViewport = useCallback(\n (\n next:\n | ImageViewerViewport\n | ((prev: ImageViewerViewport) => ImageViewerViewport),\n ) => {\n const resolved =\n typeof next === \"function\" ? next(currentRef.current) : next;\n if (!isControlled) setInternal(resolved);\n onViewportChange?.(resolved);\n },\n [isControlled, onViewportChange],\n );\n\n const interactive = status === \"loaded\";\n const { containerProps, isPanning } = usePanZoom({\n viewport: current,\n setViewport,\n minZoom,\n maxZoom,\n pannable: pannable && interactive,\n zoomable: zoomable && interactive,\n containerRef,\n });\n\n // Zoom about the container centre — used by the +/− buttons.\n const zoomBy = useCallback(\n (factor: number) => {\n const el = containerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n const cx = rect.width / 2;\n const cy = rect.height / 2;\n setViewport((prev) => {\n const newZoom = clamp(prev.zoom * factor, minZoom, maxZoom);\n const ratio = newZoom / prev.zoom;\n return {\n zoom: newZoom,\n panX: cx - (cx - prev.panX) * ratio,\n panY: cy - (cy - prev.panY) * ratio,\n };\n });\n },\n [setViewport, minZoom, maxZoom],\n );\n\n const reset = useCallback(() => setViewport(DEFAULT_VIEWPORT), [setViewport]);\n\n const showControls = !frame && (controls ?? zoomable) && interactive;\n const transform = `translate(${current.panX}px, ${current.panY}px) scale(${current.zoom})`;\n\n const viewer = (\n <div\n ref={ref}\n data-react-fancy-image-viewer=\"\"\n className={cn(\n \"relative isolate overflow-hidden rounded-md select-none\",\n // In the frame it fills the frame's body; standalone, the caller sizes it.\n frame && \"h-full w-full rounded-none\",\n checkerboard\n ? \"fancy-checkerboard\"\n : \"bg-zinc-100 dark:bg-zinc-900\",\n className,\n )}\n style={style}\n >\n <div\n ref={containerRef}\n data-canvas-bg=\"\"\n className={cn(\n \"absolute inset-0 flex items-center justify-center\",\n isPanning\n ? \"cursor-grabbing\"\n : pannable && interactive\n ? \"cursor-grab\"\n : \"\",\n )}\n style={\n {\n transform,\n transformOrigin: \"0 0\",\n willChange: \"transform\",\n touchAction: zoomable || pannable ? \"none\" : undefined,\n } as CSSProperties\n }\n onDoubleClick={zoomable ? reset : undefined}\n {...containerProps}\n >\n <img\n src={src}\n alt={alt}\n draggable={false}\n onLoad={() => {\n setStatus(\"loaded\");\n onLoad?.();\n }}\n onError={() => {\n setStatus(\"error\");\n onError?.();\n }}\n className={cn(\n \"pointer-events-none block\",\n status === \"error\" && \"hidden\",\n fitClasses[fit],\n )}\n />\n </div>\n\n {status === \"error\" && (\n <div\n data-react-fancy-image-viewer-error=\"\"\n className=\"absolute inset-0 flex flex-col items-center justify-center gap-1 p-4 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 >\n <span className=\"font-medium\">Couldn&apos;t load image</span>\n <span className=\"max-w-full truncate text-xs opacity-70\">{alt || src}</span>\n </div>\n )}\n\n {showControls && (\n <div\n data-react-fancy-image-viewer-controls=\"\"\n className=\"absolute bottom-2 end-2 flex items-center gap-0.5 rounded-md border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-white/90 p-0.5 text-zinc-700 shadow-sm backdrop-blur dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-zinc-900/90 dark:text-zinc-200\"\n >\n <button\n type=\"button\"\n aria-label=\"Zoom out\"\n onClick={() => zoomBy(1 / 1.25)}\n className=\"flex h-6 w-6 items-center justify-center rounded text-base leading-none hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\"\n >\n −\n </button>\n <button\n type=\"button\"\n aria-label=\"Reset zoom\"\n onClick={reset}\n className=\"min-w-[3rem] rounded px-1 text-center text-xs tabular-nums hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\"\n >\n {Math.round(current.zoom * 100)}%\n </button>\n <button\n type=\"button\"\n aria-label=\"Zoom in\"\n onClick={() => zoomBy(1.25)}\n className=\"flex h-6 w-6 items-center justify-center rounded text-base leading-none hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\"\n >\n +\n </button>\n </div>\n )}\n </div>\n );\n\n if (!frame) return viewer;\n\n // The frame's bar drives the image's own zoom (about the centre), and the\n // image's boxed bar steps aside: one set of controls, revealed on hover.\n return (\n <FauxClient\n variant=\"device\"\n controls\n fill\n applyZoom={false}\n zoom={current.zoom}\n onZoomChange={(z) => (z === 1 ? reset() : zoomBy(z / current.zoom))}\n minZoom={minZoom}\n maxZoom={maxZoom}\n {...frameProps}\n >\n {viewer}\n </FauxClient>\n );\n },\n);\n\nImageViewer.displayName = \"ImageViewer\";\n"]}
@@ -1,4 +1,5 @@
1
1
  import { composeRefs } from './chunk-SV5BW3IA.js';
2
+ import { inlineStep, isRtl } from './chunk-US5R36TQ.js';
2
3
  import { useEscapeKey } from './chunk-YX6FTJ6N.js';
3
4
  import { useControllableState } from './chunk-EDYAXGUM.js';
4
5
  import { cn } from './chunk-MMW2JGKZ.js';
@@ -307,15 +308,16 @@ function ReorderableGridInner({
307
308
  }
308
309
  if (!["ArrowRight", "ArrowLeft", "ArrowDown", "ArrowUp", "Home", "End"].includes(e.key)) return;
309
310
  e.preventDefault();
311
+ const key = e.key === "ArrowLeft" || e.key === "ArrowRight" ? inlineStep(e.key, e.currentTarget) === 1 ? "ArrowRight" : "ArrowLeft" : e.key;
310
312
  if (s?.mode === "keyboard") {
311
313
  if (s.target === null) return;
312
- const t2 = step(shownRef.current, s.target, e.key, true);
314
+ const t2 = step(shownRef.current, s.target, key, true);
313
315
  if (t2 !== null) retarget(t2);
314
316
  return;
315
317
  }
316
318
  if (s) return;
317
319
  const order = shownRef.current;
318
- const t = step(order, order.indexOf(id), e.key, false);
320
+ const t = step(order, order.indexOf(id), key, false);
319
321
  if (t === null) return;
320
322
  const next = order[t];
321
323
  setActiveId(next);
@@ -381,7 +383,9 @@ function ReorderableGridInner({
381
383
  let vy = speed(d.clientY - box.top) ? -speed(d.clientY - box.top) : speed(box.bottom - d.clientY);
382
384
  let vx = speed(d.clientX - box.left) ? -speed(d.clientX - box.left) : speed(box.right - d.clientX);
383
385
  if (vy < 0 && sc.scrollTop <= 0 || vy > 0 && sc.scrollTop + sc.clientHeight >= sc.scrollHeight) vy = 0;
384
- if (vx < 0 && sc.scrollLeft <= 0 || vx > 0 && sc.scrollLeft + sc.clientWidth >= sc.scrollWidth) vx = 0;
386
+ const span = sc.scrollWidth - sc.clientWidth;
387
+ const minLeft = isRtl(sc) ? -span : 0;
388
+ if (vx < 0 && sc.scrollLeft <= minLeft || vx > 0 && sc.scrollLeft >= minLeft + span) vx = 0;
385
389
  if (!vx && !vy) {
386
390
  scrollFrame.current = null;
387
391
  return;
@@ -601,5 +605,5 @@ var ReorderableGrid = forwardRef(ReorderableGridInner);
601
605
  ReorderableGrid.displayName = "ReorderableGrid";
602
606
 
603
607
  export { ReorderableGrid, moveItem };
604
- //# sourceMappingURL=chunk-DTOIO42M.js.map
605
- //# sourceMappingURL=chunk-DTOIO42M.js.map
608
+ //# sourceMappingURL=chunk-WLRKE4HC.js.map
609
+ //# sourceMappingURL=chunk-WLRKE4HC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ReorderableGrid/move-item.ts","../src/components/ReorderableGrid/ReorderableGrid.tsx"],"names":["moved","total","t"],"mappings":"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","file":"chunk-WLRKE4HC.js","sourcesContent":["export interface MoveItemOptions<T> {\n /**\n * Pinned entries. A locked entry keeps its absolute index: it cannot be\n * moved, nothing can be dropped onto its slot, and the other entries flow\n * around it. Either the locked ids themselves or a predicate.\n */\n locked?: Iterable<T> | ((id: T) => boolean);\n}\n\nfunction lockPredicate<T>(locked: MoveItemOptions<T>[\"locked\"]): ((id: T) => boolean) | null {\n if (!locked) return null;\n if (typeof locked === \"function\") return locked;\n const set = new Set(locked);\n return set.size ? (id: T) => set.has(id) : null;\n}\n\n/**\n * Move the entry at `fromIndex` so that it ends up at `toIndex`, row-major,\n * and return a NEW array. The input is never mutated.\n *\n * This is the whole reorder rule of `ReorderableGrid`, with no DOM: the grid's\n * pointer drags and arrow keys both go through it, and an agent bridge can call\n * it directly to reorder from a tool call.\n *\n * - `toIndex` is the entry's index in the RESULT, so `moveItem(ids, 0, ids.length - 1)`\n * moves the first entry to the end.\n * - An index outside the list (or not an integer) throws `RangeError`. That is\n * a caller bug, and a silent no-op would hide it.\n * - With `locked`: a locked entry keeps its absolute index and the move happens\n * among the free slots only. Moving a locked entry, or onto a locked slot,\n * returns the order unchanged: that is the rule doing its job, not an error.\n */\nexport function moveItem<T>(\n ids: readonly T[],\n fromIndex: number,\n toIndex: number,\n options: MoveItemOptions<T> = {},\n): T[] {\n const n = ids.length;\n for (const [name, i] of [\n [\"fromIndex\", fromIndex],\n [\"toIndex\", toIndex],\n ] as const) {\n if (!Number.isInteger(i) || i < 0 || i >= n) {\n throw new RangeError(`moveItem: ${name} ${i} is outside 0..${n - 1}`);\n }\n }\n\n const out = ids.slice();\n if (fromIndex === toIndex) return out;\n\n const isLocked = lockPredicate(options.locked);\n if (!isLocked) {\n const [moved] = out.splice(fromIndex, 1);\n out.splice(toIndex, 0, moved as T);\n return out;\n }\n\n if (isLocked(ids[fromIndex] as T) || isLocked(ids[toIndex] as T)) return out;\n\n // Move within the free slots only; locked entries never leave theirs.\n const slots: number[] = [];\n for (let i = 0; i < n; i++) if (!isLocked(ids[i] as T)) slots.push(i);\n const free = slots.map((i) => ids[i] as T);\n const [moved] = free.splice(slots.indexOf(fromIndex), 1);\n free.splice(slots.indexOf(toIndex), 0, moved as T);\n slots.forEach((slot, k) => {\n out[slot] = free[k] as T;\n });\n return out;\n}\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n KeyboardEvent as ReactKeyboardEvent,\n PointerEvent as ReactPointerEvent,\n ReactElement,\n Ref,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { composeRefs } from \"../../utils/compose-refs\";\nimport { inlineStep, isRtl } from \"../../utils/direction\";\nimport { useControllableState } from \"../../hooks/use-controllable-state\";\nimport { useEscapeKey } from \"../../hooks/use-escape-key\";\nimport { moveItem } from \"./move-item\";\nimport type {\n ReorderableGridAnnouncementContext,\n ReorderableGridItem,\n ReorderableGridLabels,\n ReorderableGridProps,\n} from \"./ReorderableGrid.types\";\n\n/*\n * Literal class names, not `grid-cols-${n}`: Tailwind only generates classes it\n * can read in source, and the consumer's build scans this file's dist. That is\n * also why the column count is not an inline style, as Grid's is.\n */\nconst COLUMN_CLASSES = [\n \"grid-cols-1\",\n \"grid-cols-2\",\n \"grid-cols-3\",\n \"grid-cols-4\",\n \"grid-cols-5\",\n \"grid-cols-6\",\n \"grid-cols-7\",\n \"grid-cols-8\",\n \"grid-cols-9\",\n \"grid-cols-10\",\n \"grid-cols-11\",\n \"grid-cols-12\",\n] as const;\n\nconst GAP_CLASSES = { none: \"gap-0\", sm: \"gap-3\", md: \"gap-6\", lg: \"gap-10\" } as const;\n\nconst FOCUS_RING =\n \"ring-[color:var(--fancy-focus,var(--color-blue-500))] dark:ring-[color:var(--fancy-focus-dark,var(--color-blue-400))]\";\n\nconst CELL_BASE =\n \"relative min-w-0 select-none touch-none outline-none \" +\n \"focus-visible:ring-2 focus-visible:ring-[color:var(--fancy-focus,var(--color-blue-500))] dark:focus-visible:ring-[color:var(--fancy-focus-dark,var(--color-blue-400))]\";\n\nconst CELL_STYLED =\n \"rounded-lg border p-3 text-sm \" +\n \"border-[color:var(--fancy-border,var(--color-zinc-200))] dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] \" +\n \"bg-[color:var(--fancy-surface,var(--color-white))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))] \" +\n \"text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\";\n\nconst CELL_LOCKED_STYLED =\n \"border-dashed bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\";\n\n/** Movement before a press becomes a drag, so clicks inside a cell still click. */\nconst DRAG_THRESHOLD = 4;\n/** Distance from a scroll container's edge at which a drag starts scrolling it. */\nconst EDGE = 48;\nconst MAX_SCROLL_STEP = 18;\nconst SHIFT_MS = 150;\n\n/** A press on one of these inside a cell is the element's, not a drag (unless it is the handle). */\nconst INTERACTIVE = \"input, textarea, select, button, a[href], [contenteditable=''], [contenteditable='true']\";\n\nconst DEFAULT_LABELS: ReorderableGridLabels = {\n instructions:\n \"Press Space or Enter to pick up. Use the arrow keys to move, Space or Enter to drop, Escape to cancel.\",\n roleDescription: \"reorderable item\",\n pickedUp: (c) =>\n `Picked up ${c.label} at position ${c.position} of ${c.total}, row ${c.row} column ${c.column}. ` +\n \"Arrow keys move it, Space or Enter drops it, Escape cancels\",\n moved: (c) => `Moved to position ${c.position} of ${c.total}, row ${c.row} column ${c.column}`,\n dropped: (c) => `Dropped ${c.label} at position ${c.position} of ${c.total}, row ${c.row} column ${c.column}`,\n cancelled: (c) =>\n `Cancelled. ${c.label} returned to position ${c.position} of ${c.total}, row ${c.row} column ${c.column}`,\n locked: (c) => `${c.label} is locked and cannot be moved`,\n};\n\n/**\n * The order to show: `order`'s known ids first, then any item it does not\n * mention, in `items` order. A stale or partial order can never hide a cell.\n */\nfunction resolveOrder(order: readonly string[] | undefined, items: readonly ReorderableGridItem[]): string[] {\n const ids = items.map((i) => i.id);\n const known = new Set(ids);\n const seen = new Set<string>();\n const out: string[] = [];\n for (const id of order ?? []) {\n if (known.has(id) && !seen.has(id)) {\n seen.add(id);\n out.push(id);\n }\n }\n for (const id of ids) {\n if (!seen.has(id)) {\n seen.add(id);\n out.push(id);\n }\n }\n return out;\n}\n\nfunction sameOrder(a: readonly string[], b: readonly string[]): boolean {\n return a.length === b.length && a.every((id, i) => id === b[i]);\n}\n\nfunction prefersReducedMotion(): boolean {\n return typeof matchMedia === \"function\" && matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\ntype Mode = \"pointer\" | \"keyboard\";\n\ninterface Session {\n id: string;\n mode: Mode;\n /** The committed order when the interaction began. Cancel returns here. */\n origin: string[];\n originIndex: number;\n /** Where the item would land. `null`: the pointer is outside the grid, and a release cancels. */\n target: number | null;\n}\n\ninterface PointerDrag {\n id: string;\n pointerId: number;\n /** The cell's layout offset when the drag began. */\n startOffset: { x: number; y: number };\n /** Pointer, in the grid's coordinates, when the drag began. */\n startPos: { x: number; y: number };\n clientX: number;\n clientY: number;\n scroller: HTMLElement | null;\n}\n\n/** Nearest ancestor that can scroll, else the document's scroller. */\nfunction scrollParent(el: HTMLElement): HTMLElement | null {\n for (let p = el.parentElement; p; p = p.parentElement) {\n const s = getComputedStyle(p);\n if (/(auto|scroll)/.test(s.overflowY + s.overflowX)) {\n if (p.scrollHeight > p.clientHeight || p.scrollWidth > p.clientWidth) return p;\n }\n }\n return (document.scrollingElement as HTMLElement | null) ?? null;\n}\n\nfunction ReorderableGridInner<T extends ReorderableGridItem>(\n {\n items,\n value,\n defaultValue,\n onReorder,\n renderItem,\n columns = 2,\n gap = \"sm\",\n disabled = false,\n label,\n getItemLabel,\n labels: labelOverrides,\n unstyled = false,\n cellClassName,\n className,\n ...props\n }: ReorderableGridProps<T>,\n forwardedRef: Ref<HTMLDivElement>,\n) {\n const cols = Math.min(12, Math.max(1, Math.round(columns) || 1));\n const labels = useMemo(() => ({ ...DEFAULT_LABELS, ...labelOverrides }), [labelOverrides]);\n\n // ── order ────────────────────────────────────────────────────────────────\n const [stored, setStored] = useControllableState<string[] | undefined>(value, defaultValue, (next) => {\n if (next) onReorder?.(next);\n });\n const committed = useMemo(() => resolveOrder(stored, items), [stored, items]);\n\n const byId = useMemo(() => new Map(items.map((i) => [i.id, i])), [items]);\n const lockedIds = useMemo(() => items.filter((i) => i.locked).map((i) => i.id), [items]);\n const isLocked = useCallback((id: string) => byId.get(id)?.locked === true, [byId]);\n\n const [session, setSessionState] = useState<Session | null>(null);\n const sessionRef = useRef<Session | null>(null);\n const setSession = useCallback((s: Session | null) => {\n sessionRef.current = s;\n setSessionState(s);\n }, []);\n\n const previewOf = useCallback(\n (s: Session): string[] =>\n s.target === null || s.target === s.originIndex\n ? s.origin\n : moveItem(s.origin, s.originIndex, s.target, { locked: lockedIds }),\n [lockedIds],\n );\n\n const shown = useMemo(\n () => (session ? resolveOrder(previewOf(session), items) : committed),\n [session, previewOf, items, committed],\n );\n const shownRef = useRef(shown);\n shownRef.current = shown;\n\n // ── announcements ────────────────────────────────────────────────────────\n const [announcement, setAnnouncement] = useState(\"\");\n const labelOf = useCallback(\n (id: string) => {\n const item = byId.get(id);\n if (!item) return id;\n if (getItemLabel) return getItemLabel(item);\n const l = (item as { label?: unknown }).label;\n return typeof l === \"string\" ? l : id;\n },\n [byId, getItemLabel],\n );\n const ctxAt = useCallback(\n (id: string, index: number, total: number): ReorderableGridAnnouncementContext => ({\n id,\n label: labelOf(id),\n position: index + 1,\n total,\n row: Math.floor(index / cols) + 1,\n column: (index % cols) + 1,\n }),\n [labelOf, cols],\n );\n\n // ── elements ─────────────────────────────────────────────────────────────\n const rootRef = useRef<HTMLDivElement | null>(null);\n const cellRefs = useRef(new Map<string, HTMLDivElement>());\n const cellRef = useCallback(\n (id: string) => (el: HTMLDivElement | null) => {\n if (el) cellRefs.current.set(id, el);\n else cellRefs.current.delete(id);\n },\n [],\n );\n\n const instructionsId = useId();\n const [activeId, setActiveId] = useState<string | null>(null);\n const tabStop = activeId !== null && shown.includes(activeId) ? activeId : shown[0];\n /** Focus to put back after a drop or cancel moves the focused node. */\n const refocus = useRef<string | null>(null);\n\n // ── commit / cancel ──────────────────────────────────────────────────────\n const drag = useRef<PointerDrag | null>(null);\n const pending = useRef<{ id: string; pointerId: number; clientX: number; clientY: number } | null>(null);\n const scrollFrame = useRef<number | null>(null);\n\n const settle = useCallback((id: string) => {\n const el = cellRefs.current.get(id);\n if (!el) return;\n if (el.style.transform && !prefersReducedMotion()) {\n el.style.transition = `transform ${SHIFT_MS}ms ease`;\n window.setTimeout(() => {\n if (!el.style.transform) el.style.transition = \"\";\n }, SHIFT_MS + 50);\n }\n el.style.transform = \"\";\n }, []);\n\n const endPointer = useCallback(() => {\n const d = drag.current;\n drag.current = null;\n pending.current = null;\n if (scrollFrame.current !== null) {\n cancelAnimationFrame(scrollFrame.current);\n scrollFrame.current = null;\n }\n if (!d) return;\n const root = rootRef.current;\n if (root?.hasPointerCapture?.(d.pointerId)) root.releasePointerCapture?.(d.pointerId);\n settle(d.id);\n }, [settle]);\n\n const cancel = useCallback(() => {\n const s = sessionRef.current;\n if (!s) return;\n endPointer();\n setSession(null);\n if (s.mode === \"keyboard\") refocus.current = s.id;\n setAnnouncement(labels.cancelled(ctxAt(s.id, s.originIndex, s.origin.length)));\n }, [ctxAt, endPointer, labels, setSession]);\n\n const drop = useCallback(() => {\n const s = sessionRef.current;\n if (!s) return;\n if (s.target === null) {\n cancel();\n return;\n }\n const final = previewOf(s);\n endPointer();\n setSession(null);\n if (s.mode === \"keyboard\") refocus.current = s.id;\n setAnnouncement(labels.dropped(ctxAt(s.id, s.target, final.length)));\n if (!sameOrder(final, s.origin)) setStored(final);\n }, [cancel, ctxAt, endPointer, labels, previewOf, setSession, setStored]);\n\n // Escape joins the kit's layer stack, so inside a Modal or a full-screen\n // surface it cancels the pick-up before it closes anything else.\n useEscapeKey(cancel, session !== null);\n\n useEffect(() => {\n if (disabled) cancel();\n }, [disabled, cancel]);\n\n useEffect(() => () => endPointer(), [endPointer]);\n\n const begin = useCallback(\n (id: string, mode: Mode): boolean => {\n const origin = shownRef.current;\n const index = origin.indexOf(id);\n if (index < 0) return false;\n if (isLocked(id)) {\n setAnnouncement(labels.locked(ctxAt(id, index, origin.length)));\n return false;\n }\n setSession({ id, mode, origin, originIndex: index, target: index });\n setAnnouncement(labels.pickedUp(ctxAt(id, index, origin.length)));\n return true;\n },\n [ctxAt, isLocked, labels, setSession],\n );\n\n const retarget = useCallback(\n (target: number | null) => {\n const s = sessionRef.current;\n if (!s || target === s.target) return;\n setSession({ ...s, target });\n if (target !== null) setAnnouncement(labels.moved(ctxAt(s.id, target, s.origin.length)));\n },\n [ctxAt, labels, setSession],\n );\n\n // ── keyboard ─────────────────────────────────────────────────────────────\n\n /**\n * The slot an arrow key leads to from `from`, or null for none. Left/Right\n * step one slot, Up/Down one row. When `skipLocked`, a pinned slot is passed\n * over: Left/Right go on to the next free slot that way; Up/Down take the\n * nearest free slot after the pinned one in reading order (forward for Down,\n * backward for Up). Down from a row above a short last row lands on the last\n * slot.\n */\n const step = useCallback(\n (order: string[], from: number, key: string, skipLocked: boolean): number | null => {\n const n = order.length;\n const free = (i: number) => !skipLocked || !isLocked(order[i] as string);\n const scan = (start: number, dir: 1 | -1) => {\n for (let i = start; i >= 0 && i < n; i += dir) if (free(i)) return i;\n return null;\n };\n switch (key) {\n case \"ArrowRight\":\n return scan(from + 1, 1);\n case \"ArrowLeft\":\n return scan(from - 1, -1);\n case \"ArrowDown\": {\n let t = from + cols;\n if (t > n - 1) {\n if (Math.floor(from / cols) >= Math.floor((n - 1) / cols)) return null;\n t = n - 1;\n }\n return scan(t, 1);\n }\n case \"ArrowUp\":\n return from - cols < 0 ? null : scan(from - cols, -1);\n case \"Home\":\n return scan(0, 1);\n case \"End\":\n return scan(n - 1, -1);\n default:\n return null;\n }\n },\n [cols, isLocked],\n );\n\n const onCellKeyDown = (e: ReactKeyboardEvent<HTMLDivElement>, id: string) => {\n // Keys typed into a field inside the cell belong to the field.\n if (disabled || e.target !== e.currentTarget) return;\n const s = sessionRef.current;\n\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n if (s?.mode === \"keyboard\") drop();\n else if (!s) begin(id, \"keyboard\");\n return;\n }\n\n if (![\"ArrowRight\", \"ArrowLeft\", \"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(e.key)) return;\n e.preventDefault();\n // `step` speaks in reading order. The grid flows right-to-left in RTL, so\n // a visual ArrowLeft there is the NEXT slot.\n const key = e.key === \"ArrowLeft\" || e.key === \"ArrowRight\"\n ? (inlineStep(e.key, e.currentTarget) === 1 ? \"ArrowRight\" : \"ArrowLeft\")\n : e.key;\n\n if (s?.mode === \"keyboard\") {\n if (s.target === null) return;\n const t = step(shownRef.current, s.target, key, true);\n if (t !== null) retarget(t);\n return;\n }\n if (s) return;\n\n const order = shownRef.current;\n const t = step(order, order.indexOf(id), key, false);\n if (t === null) return;\n const next = order[t] as string;\n setActiveId(next);\n cellRefs.current.get(next)?.focus();\n };\n\n // ── pointer ──────────────────────────────────────────────────────────────\n\n /** Client point to the grid's own coordinates (the space cell offsets are in). */\n const toLocal = (clientX: number, clientY: number) => {\n const root = rootRef.current!;\n const r = root.getBoundingClientRect();\n return { x: clientX - r.left - root.clientLeft, y: clientY - r.top - root.clientTop, rect: r };\n };\n\n /**\n * The slot under the pointer. Kanban's rule (compare the pointer with each\n * card's box) extended to two dimensions: the nearest cell box wins, so a\n * point in a gutter belongs to the closer neighbour. Boxes are layout\n * offsets, which ignore transforms, so cells mid-animation do not move the\n * target. Outside the grid is `null`: a release there cancels. A pinned cell\n * is not a target; the current target stands.\n */\n const hitTest = (clientX: number, clientY: number): number | null => {\n const s = sessionRef.current;\n if (!s) return null;\n const { x, y, rect } = toLocal(clientX, clientY);\n if (clientX < rect.left || clientX > rect.right || clientY < rect.top || clientY > rect.bottom) return null;\n\n const order = shownRef.current;\n let best = -1;\n let bestDist = Infinity;\n order.forEach((id, i) => {\n const el = cellRefs.current.get(id);\n if (!el) return;\n const l = el.offsetLeft;\n const t = el.offsetTop;\n const dx = Math.max(l - x, 0, x - (l + el.offsetWidth));\n const dy = Math.max(t - y, 0, y - (t + el.offsetHeight));\n const dist = dx * dx + dy * dy;\n if (dist < bestDist) {\n bestDist = dist;\n best = i;\n }\n });\n if (best < 0) return s.target;\n if (isLocked(order[best] as string)) return s.target ?? s.originIndex;\n return best;\n };\n\n /** The dragged cell follows the pointer from where it STARTED, whatever slot it now has. */\n const applyDragTransform = useCallback(() => {\n const d = drag.current;\n const root = rootRef.current;\n if (!d || !root) return;\n const el = cellRefs.current.get(d.id);\n if (!el) return;\n const r = root.getBoundingClientRect();\n const px = d.clientX - r.left - root.clientLeft;\n const py = d.clientY - r.top - root.clientTop;\n const tx = d.startOffset.x + (px - d.startPos.x) - el.offsetLeft;\n const ty = d.startOffset.y + (py - d.startPos.y) - el.offsetTop;\n el.style.transition = \"\";\n el.style.transform = `translate3d(${tx}px, ${ty}px, 0)`;\n }, []);\n\n const track = () => {\n const d = drag.current;\n if (!d) return;\n retarget(hitTest(d.clientX, d.clientY));\n applyDragTransform();\n };\n\n /** Scroll the nearest scroller while the pointer is near its edge. */\n const autoScroll = () => {\n const d = drag.current;\n if (!d?.scroller || typeof requestAnimationFrame !== \"function\") return;\n const sc = d.scroller;\n const isDoc = sc === document.scrollingElement;\n const box = isDoc\n ? { top: 0, left: 0, bottom: window.innerHeight, right: window.innerWidth }\n : sc.getBoundingClientRect();\n const speed = (dist: number) => (dist < EDGE ? Math.ceil(((EDGE - dist) / EDGE) * MAX_SCROLL_STEP) : 0);\n let vy = speed(d.clientY - box.top) ? -speed(d.clientY - box.top) : speed(box.bottom - d.clientY);\n let vx = speed(d.clientX - box.left) ? -speed(d.clientX - box.left) : speed(box.right - d.clientX);\n // Only where it can actually go.\n if ((vy < 0 && sc.scrollTop <= 0) || (vy > 0 && sc.scrollTop + sc.clientHeight >= sc.scrollHeight)) vy = 0;\n // An RTL scroller's `scrollLeft` runs from 0 (the right end) down to\n // negative values, so its range is shifted, not mirrored.\n const span = sc.scrollWidth - sc.clientWidth;\n const minLeft = isRtl(sc) ? -span : 0;\n if ((vx < 0 && sc.scrollLeft <= minLeft) || (vx > 0 && sc.scrollLeft >= minLeft + span)) vx = 0;\n if (!vx && !vy) {\n scrollFrame.current = null;\n return;\n }\n if (scrollFrame.current !== null) return;\n scrollFrame.current = requestAnimationFrame(() => {\n scrollFrame.current = null;\n if (!drag.current) return;\n sc.scrollTop += vy;\n sc.scrollLeft += vx;\n track();\n autoScroll();\n });\n };\n\n const onCellPointerDown = (e: ReactPointerEvent<HTMLDivElement>, id: string) => {\n if (disabled || e.button !== 0 || sessionRef.current || isLocked(id)) return;\n const cellEl = e.currentTarget;\n const target = e.target as Element;\n const handle = target.closest(\"[data-reorderable-handle]\");\n if (handle && cellEl.contains(handle)) {\n // The handle: always a drag.\n } else if (cellEl.querySelector(\"[data-reorderable-handle]\")) {\n return; // This cell has a handle and the press was elsewhere.\n } else {\n const interactive = target.closest(INTERACTIVE);\n if (interactive && interactive !== cellEl && cellEl.contains(interactive)) return;\n }\n pending.current = { id, pointerId: e.pointerId, clientX: e.clientX, clientY: e.clientY };\n };\n\n const onRootPointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n const p = pending.current;\n if (p && p.pointerId === e.pointerId && !drag.current) {\n if (Math.hypot(e.clientX - p.clientX, e.clientY - p.clientY) < DRAG_THRESHOLD) return;\n const root = rootRef.current;\n const el = cellRefs.current.get(p.id);\n pending.current = null;\n if (!root || !el || !begin(p.id, \"pointer\")) return;\n // Capture on the ROOT, never the cell: the live preview moves the cell's\n // DOM node, and moving a node can drop a capture held on it.\n root.setPointerCapture?.(e.pointerId);\n window.getSelection?.()?.removeAllRanges();\n const start = toLocal(p.clientX, p.clientY);\n drag.current = {\n id: p.id,\n pointerId: e.pointerId,\n startOffset: { x: el.offsetLeft, y: el.offsetTop },\n startPos: { x: start.x, y: start.y },\n clientX: e.clientX,\n clientY: e.clientY,\n scroller: scrollParent(root),\n };\n }\n const d = drag.current;\n if (!d || d.pointerId !== e.pointerId) return;\n d.clientX = e.clientX;\n d.clientY = e.clientY;\n track();\n autoScroll();\n };\n\n const onRootPointerUp = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (pending.current?.pointerId === e.pointerId) {\n pending.current = null;\n return;\n }\n const d = drag.current;\n if (!d || d.pointerId !== e.pointerId) return;\n d.clientX = e.clientX;\n d.clientY = e.clientY;\n const target = hitTest(e.clientX, e.clientY);\n const s = sessionRef.current;\n if (s && target !== s.target) {\n // Commit what the release point says, not the last move event.\n sessionRef.current = { ...s, target };\n }\n drop();\n };\n\n const onRootPointerCancel = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (pending.current?.pointerId === e.pointerId) pending.current = null;\n if (drag.current?.pointerId === e.pointerId) cancel();\n };\n\n // ── layout effects: follow the pointer, shift the others, keep focus ──────\n\n const offsets = useRef(new Map<string, { x: number; y: number }>());\n const shiftTimers = useRef(new Map<string, number>());\n const shownKey = shown.join(\"\\u0000\");\n\n useLayoutEffect(() => {\n const prev = offsets.current;\n const next = new Map<string, { x: number; y: number }>();\n for (const [id, el] of cellRefs.current) next.set(id, { x: el.offsetLeft, y: el.offsetTop });\n offsets.current = next;\n\n // FLIP: cells the preview displaced slide from where they were.\n if (prev.size && !prefersReducedMotion()) {\n for (const [id, el] of cellRefs.current) {\n if (id === drag.current?.id) continue;\n const a = prev.get(id);\n const b = next.get(id);\n if (!a || !b || (a.x === b.x && a.y === b.y)) continue;\n el.style.transition = \"none\";\n el.style.transform = `translate3d(${a.x - b.x}px, ${a.y - b.y}px, 0)`;\n void el.offsetWidth;\n el.style.transition = `transform ${SHIFT_MS}ms ease`;\n el.style.transform = \"\";\n const old = shiftTimers.current.get(id);\n if (old !== undefined) window.clearTimeout(old);\n shiftTimers.current.set(\n id,\n window.setTimeout(() => {\n shiftTimers.current.delete(id);\n if (!el.style.transform) el.style.transition = \"\";\n }, SHIFT_MS + 50),\n );\n }\n }\n\n applyDragTransform();\n\n // React moves DOM nodes to reorder them, and a moved node can lose focus.\n const s = sessionRef.current;\n const keep = s?.mode === \"keyboard\" ? s.id : refocus.current;\n refocus.current = null;\n if (keep) {\n const el = cellRefs.current.get(keep);\n if (el && document.activeElement !== el) el.focus();\n }\n }, [shownKey, session, applyDragTransform]);\n\n useEffect(() => {\n const timers = shiftTimers.current;\n return () => {\n for (const t of timers.values()) window.clearTimeout(t);\n };\n }, []);\n\n // ── render ───────────────────────────────────────────────────────────────\n\n const state = session ? (session.mode === \"pointer\" ? \"dragging\" : \"picked-up\") : \"idle\";\n const dropIndex = session && session.target !== null ? session.target : undefined;\n const total = shown.length;\n\n return (\n <div\n {...props}\n ref={composeRefs(rootRef, forwardedRef)}\n data-react-fancy-reorderable-grid=\"\"\n data-columns={cols}\n data-state={state}\n data-drop-index={dropIndex}\n data-disabled={disabled ? \"\" : undefined}\n role=\"group\"\n aria-label={label}\n aria-disabled={disabled || undefined}\n onPointerMove={onRootPointerMove}\n onPointerUp={onRootPointerUp}\n onPointerCancel={onRootPointerCancel}\n onLostPointerCapture={(e) => {\n if (drag.current?.pointerId === e.pointerId) cancel();\n }}\n className={cn(\n \"relative grid\",\n COLUMN_CLASSES[cols - 1],\n GAP_CLASSES[gap],\n session?.mode === \"pointer\" && \"cursor-grabbing select-none\",\n disabled && \"opacity-60\",\n className,\n )}\n >\n {shown.map((id, index) => {\n const item = byId.get(id);\n if (!item) return null;\n const locked = item.locked === true;\n const active = session?.id === id;\n const dragging = active && session?.mode === \"pointer\";\n const pickedUp = active && session?.mode === \"keyboard\";\n const dropTarget = active && dropIndex === index;\n const outside = active && session?.target === null;\n const itemState = {\n index,\n position: index + 1,\n row: Math.floor(index / cols) + 1,\n column: (index % cols) + 1,\n total,\n dragging,\n pickedUp,\n dropTarget,\n locked,\n disabled,\n handleProps: { \"data-reorderable-handle\": \"\" as const },\n };\n return (\n <div\n key={id}\n ref={cellRef(id)}\n data-react-fancy-reorderable-grid-item=\"\"\n data-reorderable-id={id}\n data-index={index}\n data-state={dragging ? \"dragging\" : pickedUp ? \"picked-up\" : \"idle\"}\n data-locked={locked ? \"true\" : undefined}\n data-drop-target={dropTarget ? \"\" : undefined}\n role=\"button\"\n aria-roledescription={labels.roleDescription}\n aria-describedby={instructionsId}\n aria-pressed={active}\n aria-disabled={disabled || locked || undefined}\n tabIndex={disabled ? -1 : id === tabStop ? 0 : -1}\n onFocus={(e) => {\n if (e.target === e.currentTarget) setActiveId(id);\n }}\n onKeyDown={(e) => onCellKeyDown(e, id)}\n onPointerDown={(e) => onCellPointerDown(e, id)}\n className={cn(\n CELL_BASE,\n !unstyled && CELL_STYLED,\n !unstyled && locked && CELL_LOCKED_STYLED,\n locked || disabled ? \"cursor-default\" : \"cursor-grab\",\n dragging && cn(\"z-10 cursor-grabbing shadow-lg ring-2\", FOCUS_RING),\n pickedUp && cn(\"z-10 shadow-md ring-2\", FOCUS_RING),\n outside && \"opacity-60\",\n cellClassName,\n )}\n >\n {renderItem ? renderItem(item, itemState) : labelOf(id)}\n </div>\n );\n })}\n <div id={instructionsId} className=\"sr-only\">\n {labels.instructions}\n </div>\n <div data-react-fancy-reorderable-grid-live=\"\" aria-live=\"assertive\" aria-atomic=\"true\" className=\"sr-only\">\n {announcement}\n </div>\n </div>\n );\n}\n\n/**\n * A grid of cells reordered in place, row-major, by pointer or keyboard.\n *\n * Built for field-order designers: the grid looks like the grid it designs.\n * Order is a list of ids (`value` / `defaultValue` / `onReorder`); the pure\n * `moveItem(ids, from, to, { locked })` is the same rule without a DOM, for\n * agents.\n */\nexport const ReorderableGrid = forwardRef(ReorderableGridInner) as (<T extends ReorderableGridItem>(\n props: ReorderableGridProps<T> & { ref?: Ref<HTMLDivElement> },\n) => ReactElement) & { displayName?: string };\n\nReorderableGrid.displayName = \"ReorderableGrid\";\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkNZHVDWOM_cjs = require('./chunk-NZHVDWOM.cjs');
3
+ var chunkXEI5JG7C_cjs = require('./chunk-XEI5JG7C.cjs');
4
4
  var react = require('react');
5
5
  var reactDom = require('react-dom');
6
6
  var jsxRuntime = require('react/jsx-runtime');
@@ -137,7 +137,7 @@ function CopyButton({
137
137
  const idleLabel = kind === "code" ? "Copy code" : "Copy table";
138
138
  const label = state === "copied" ? "Copied" : state === "failed" ? "Copy failed" : idleLabel;
139
139
  return /* @__PURE__ */ jsxRuntime.jsx(
140
- chunkNZHVDWOM_cjs.Button,
140
+ chunkXEI5JG7C_cjs.Button,
141
141
  {
142
142
  ref: btn,
143
143
  type: "button",
@@ -179,5 +179,5 @@ exports.HtmlChunk = HtmlChunk;
179
179
  exports.defaultClipboardWriter = defaultClipboardWriter;
180
180
  exports.runWriter = runWriter;
181
181
  exports.useCopyPipeline = useCopyPipeline;
182
- //# sourceMappingURL=chunk-7ZCNZUZK.cjs.map
183
- //# sourceMappingURL=chunk-7ZCNZUZK.cjs.map
182
+ //# sourceMappingURL=chunk-WOURDD4U.cjs.map
183
+ //# sourceMappingURL=chunk-WOURDD4U.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ContentRenderer/copy.tsx"],"names":["createContext","useRef","useContext","useState","useMemo","useLayoutEffect","jsxs","Fragment","jsx","createPortal","useEffect","useCallback","Button"],"mappings":"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","file":"chunk-7ZCNZUZK.cjs","sourcesContent":["import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type RefObject,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Button } from \"../Button/Button\";\nimport type {\n ContentClipboardPayload,\n ContentClipboardWriter,\n ContentCopyEvent,\n ContentCopyKind,\n} from \"./ContentRenderer.types\";\n\n/** How long the check icon stays after a copy. */\nconst FEEDBACK_MS = 2000;\n/** A clipboard write that never settles is a silent failure; give up after this. */\nconst WRITE_TIMEOUT_MS = 5000;\n\nexport interface CopyContextValue {\n code: boolean;\n table: boolean;\n /** Write, announce, and report one copy. Resolves to whether it worked. */\n copy: (payload: ContentClipboardPayload, button: HTMLElement) => Promise<boolean>;\n /**\n * Progressive streaming closed an open code fence: the last code block of\n * the tail chunk is still arriving and gets no copy button until it closes.\n */\n holdTailCode?: boolean;\n}\n\nexport const CopyContext = createContext<CopyContextValue | null>(null);\n\n/**\n * Default clipboard writer: text/html + text/plain via `ClipboardItem` where\n * the browser has it, else (or if that write rejects) plain `writeText`.\n * Throws when nothing could be written, so the caller can say so.\n */\nexport async function defaultClipboardWriter(payload: ContentClipboardPayload): Promise<void> {\n const clip = typeof navigator !== \"undefined\" ? navigator.clipboard : undefined;\n if (!clip) throw new Error(\"Clipboard API unavailable\");\n\n const Item = (globalThis as { ClipboardItem?: typeof ClipboardItem }).ClipboardItem;\n if (payload.html && Item && typeof clip.write === \"function\") {\n try {\n await clip.write([\n new Item({\n \"text/html\": new Blob([payload.html], { type: \"text/html\" }),\n \"text/plain\": new Blob([payload.text], { type: \"text/plain\" }),\n }),\n ]);\n return;\n } catch {\n // Rich write refused (permissions, unsupported type): fall back to text.\n }\n }\n if (typeof clip.writeText !== \"function\") throw new Error(\"Clipboard writeText unavailable\");\n await clip.writeText(payload.text);\n}\n\n/** Run a writer, treating a throw, a rejection, `false`, or a hang as failure. */\nexport async function runWriter(\n writer: ContentClipboardWriter,\n payload: ContentClipboardPayload,\n): Promise<boolean> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n const result = await Promise.race([\n Promise.resolve().then(() => writer(payload)),\n new Promise<false>((resolve) => {\n timer = setTimeout(() => resolve(false), WRITE_TIMEOUT_MS);\n }),\n ]);\n return result !== false;\n } catch {\n return false;\n } finally {\n if (timer) clearTimeout(timer);\n }\n}\n\n/** Code exactly as written: the `<code>` text, minus the newline marked appends. */\nexport function codeText(pre: HTMLElement, fromMarkdown: boolean): string {\n const text = (pre.querySelector(\"code\") ?? pre).textContent ?? \"\";\n return fromMarkdown && text.endsWith(\"\\n\") ? text.slice(0, -1) : text;\n}\n\n/** A table as TSV: tab between cells, newline between rows, no trailing newline. */\nexport function tableTsv(table: HTMLTableElement): string {\n const rows: string[] = [];\n for (const tr of Array.from(table.querySelectorAll(\"tr\"))) {\n // Only this table's own cells, not those of a table nested in a cell.\n if (tr.closest(\"table\") !== table) continue;\n const cells = Array.from(tr.children).filter((c) => c.tagName === \"TD\" || c.tagName === \"TH\");\n rows.push(cells.map((c) => cellText(c)).join(\"\\t\"));\n }\n return rows.join(\"\\n\");\n}\n\nfunction cellText(cell: Element): string {\n const clone = cell.cloneNode(true) as Element;\n for (const br of Array.from(clone.querySelectorAll(\"br\"))) br.replaceWith(\" \");\n return (clone.textContent ?? \"\").replace(/[\\t\\r\\n]+/g, \" \").replace(/ {2,}/g, \" \").trim();\n}\n\ninterface Target {\n kind: ContentCopyKind;\n el: HTMLElement;\n host: HTMLElement;\n}\n\n/**\n * Sanitised HTML rendered with `dangerouslySetInnerHTML`, plus a react-fancy\n * copy `Button` portalled next to every `<pre>` and `<table>` in it.\n *\n * Each block is wrapped in a `data-react-fancy-content-copy-block` element and\n * the button lives beside the block, never inside it, so the button's own text\n * can never end up in what is copied.\n */\nexport function HtmlChunk({\n html,\n fromMarkdown,\n tail = false,\n}: {\n html: string;\n fromMarkdown: boolean;\n /** This chunk is the last thing rendered, so it holds any block still arriving. */\n tail?: boolean;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const ctx = useContext(CopyContext);\n const [targets, setTargets] = useState<Target[]>([]);\n const code = ctx?.code ?? false;\n const table = ctx?.table ?? false;\n const holdLastCode = tail && (ctx?.holdTailCode ?? false);\n // React 19 re-assigns innerHTML whenever this prop is a NEW object, even\n // with the same string, which would wipe the wrappers on every re-render\n // (including the one that mounts the buttons). One object per string.\n const inner = useMemo(() => ({ __html: html }), [html]);\n\n useLayoutEffect(() => {\n const root = ref.current;\n if (!root || (!code && !table)) {\n setTargets([]);\n return;\n }\n const found: Target[] = [];\n const selector = [code && \"pre\", table && \"table\"].filter(Boolean).join(\",\");\n const inProgress = holdLastCode ? Array.from(root.querySelectorAll(\"pre\")).pop() : undefined;\n for (const el of Array.from(root.querySelectorAll<HTMLElement>(selector))) {\n if (el === inProgress) continue;\n const kind: ContentCopyKind = el.tagName === \"PRE\" ? \"code\" : \"table\";\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"data-react-fancy-content-copy-block\", kind);\n wrapper.className = kind === \"code\" ? \"group relative\" : \"group relative flex flex-col\";\n // Inline too: the code button is absolute, and a host whose Tailwind\n // never generated `relative` would let it escape the block (genie#1290).\n wrapper.style.position = \"relative\";\n const host = document.createElement(\"div\");\n host.setAttribute(\"data-react-fancy-content-copy-host\", \"\");\n host.className =\n kind === \"code\" ? \"absolute right-2 top-2 z-10\" : \"flex justify-end\";\n el.replaceWith(wrapper);\n if (kind === \"table\") wrapper.append(host, el);\n else wrapper.append(el, host);\n found.push({ kind, el, host });\n }\n setTargets(found);\n return () => {\n for (const t of found) {\n const wrapper = t.host.parentElement;\n if (wrapper?.parentNode) wrapper.replaceWith(t.el);\n }\n };\n }, [html, code, table, holdLastCode]);\n\n return (\n <>\n <div ref={ref} dangerouslySetInnerHTML={inner} />\n {targets.map((t, i) =>\n createPortal(\n <CopyButton kind={t.kind} target={t.el} fromMarkdown={fromMarkdown} />,\n t.host,\n `${i}`,\n ),\n )}\n </>\n );\n}\n\ntype CopyState = \"idle\" | \"copied\" | \"failed\";\n\nfunction CopyButton({\n kind,\n target,\n fromMarkdown,\n}: {\n kind: ContentCopyKind;\n target: HTMLElement;\n fromMarkdown: boolean;\n}) {\n const ctx = useContext(CopyContext);\n const [state, setState] = useState<CopyState>(\"idle\");\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const btn = useRef<HTMLButtonElement>(null);\n\n useEffect(() => () => clearTimeout(timer.current), []);\n\n const onClick = useCallback(async () => {\n if (!ctx || !btn.current) return;\n const text =\n kind === \"code\" ? codeText(target, fromMarkdown) : tableTsv(target as HTMLTableElement);\n const ok = await ctx.copy({ kind, text, html: target.outerHTML }, btn.current);\n setState(ok ? \"copied\" : \"failed\");\n clearTimeout(timer.current);\n timer.current = setTimeout(() => setState(\"idle\"), FEEDBACK_MS);\n }, [ctx, kind, target, fromMarkdown]);\n\n const idleLabel = kind === \"code\" ? \"Copy code\" : \"Copy table\";\n const label = state === \"copied\" ? \"Copied\" : state === \"failed\" ? \"Copy failed\" : idleLabel;\n\n return (\n <Button\n ref={btn}\n type=\"button\"\n size=\"xs\"\n variant=\"ghost\"\n icon={state === \"copied\" ? \"check\" : state === \"failed\" ? \"x\" : \"copy\"}\n aria-label={label}\n title={label}\n data-react-fancy-content-copy={kind}\n data-copy-state={state}\n onClick={onClick}\n className={\n kind === \"code\"\n ? \"text-zinc-300 hover:bg-zinc-800 hover:text-white opacity-70 group-hover:opacity-100 focus-visible:opacity-100\"\n : \"opacity-70 group-hover:opacity-100 focus-visible:opacity-100\"\n }\n />\n );\n}\n\n/** Build the copy pipeline a ContentRenderer root shares with its chunks. */\nexport function useCopyPipeline({\n writer,\n onCopy,\n rootRef,\n announce,\n}: {\n writer: ContentClipboardWriter | undefined;\n onCopy: ((event: ContentCopyEvent) => void) | undefined;\n rootRef: RefObject<HTMLElement | null>;\n announce: (message: string) => void;\n}) {\n // Read the latest props at click time without re-creating the context.\n const latest = useRef({ writer, onCopy, announce });\n latest.current = { writer, onCopy, announce };\n\n return useCallback(\n async (payload: ContentClipboardPayload, button: HTMLElement) => {\n const { writer: w, onCopy: report, announce: say } = latest.current;\n const ok = await runWriter(w ?? defaultClipboardWriter, payload);\n say(ok ? \"Copied\" : \"Copy failed\");\n const all = rootRef.current\n ? Array.from(rootRef.current.querySelectorAll(\"[data-react-fancy-content-copy]\"))\n : [];\n report?.({ ...payload, index: all.indexOf(button), ok });\n return ok;\n },\n [rootRef],\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/ContentRenderer/copy.tsx"],"names":["createContext","useRef","useContext","useState","useMemo","useLayoutEffect","jsxs","Fragment","jsx","createPortal","useEffect","useCallback","Button"],"mappings":";;;;;;;AAqBA,IAAM,WAAA,GAAc,GAAA;AAEpB,IAAM,gBAAA,GAAmB,GAAA;AAclB,IAAM,WAAA,GAAcA,oBAAuC,IAAI;AAOtE,eAAsB,uBAAuB,OAAA,EAAiD;AAC5F,EAAA,MAAM,IAAA,GAAO,OAAO,SAAA,KAAc,WAAA,GAAc,UAAU,SAAA,GAAY,MAAA;AACtE,EAAA,IAAI,CAAC,IAAA,EAAM,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAEtD,EAAA,MAAM,OAAQ,UAAA,CAAwD,aAAA;AACtE,EAAA,IAAI,QAAQ,IAAA,IAAQ,IAAA,IAAQ,OAAO,IAAA,CAAK,UAAU,UAAA,EAAY;AAC5D,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,KAAA,CAAM;AAAA,QACf,IAAI,IAAA,CAAK;AAAA,UACP,WAAA,EAAa,IAAI,IAAA,CAAK,CAAC,OAAA,CAAQ,IAAI,CAAA,EAAG,EAAE,IAAA,EAAM,WAAA,EAAa,CAAA;AAAA,UAC3D,YAAA,EAAc,IAAI,IAAA,CAAK,CAAC,OAAA,CAAQ,IAAI,CAAA,EAAG,EAAE,IAAA,EAAM,YAAA,EAAc;AAAA,SAC9D;AAAA,OACF,CAAA;AACD,MAAA;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,IAAI,OAAO,IAAA,CAAK,SAAA,KAAc,YAAY,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAC3F,EAAA,MAAM,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAA;AACnC;AAGA,eAAsB,SAAA,CACpB,QACA,OAAA,EACkB;AAClB,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,IAAA,CAAK;AAAA,MAChC,QAAQ,OAAA,EAAQ,CAAE,KAAK,MAAM,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,MAC5C,IAAI,OAAA,CAAe,CAAC,OAAA,KAAY;AAC9B,QAAA,KAAA,GAAQ,UAAA,CAAW,MAAM,OAAA,CAAQ,KAAK,GAAG,gBAAgB,CAAA;AAAA,MAC3D,CAAC;AAAA,KACF,CAAA;AACD,IAAA,OAAO,MAAA,KAAW,KAAA;AAAA,EACpB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,SAAE;AACA,IAAA,IAAI,KAAA,eAAoB,KAAK,CAAA;AAAA,EAC/B;AACF;AAGO,SAAS,QAAA,CAAS,KAAkB,YAAA,EAA+B;AACxE,EAAA,MAAM,QAAQ,GAAA,CAAI,aAAA,CAAc,MAAM,CAAA,IAAK,KAAK,WAAA,IAAe,EAAA;AAC/D,EAAA,OAAO,YAAA,IAAgB,KAAK,QAAA,CAAS,IAAI,IAAI,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,IAAA;AACnE;AAGO,SAAS,SAAS,KAAA,EAAiC;AACxD,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,MAAM,KAAA,CAAM,IAAA,CAAK,MAAM,gBAAA,CAAiB,IAAI,CAAC,CAAA,EAAG;AAEzD,IAAA,IAAI,EAAA,CAAG,OAAA,CAAQ,OAAO,CAAA,KAAM,KAAA,EAAO;AACnC,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,EAAA,CAAG,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY,IAAA,IAAQ,CAAA,CAAE,YAAY,IAAI,CAAA;AAC5F,IAAA,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,QAAA,CAAS,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,GAAI,CAAC,CAAA;AAAA,EACpD;AACA,EAAA,OAAO,IAAA,CAAK,KAAK,IAAI,CAAA;AACvB;AAEA,SAAS,SAAS,IAAA,EAAuB;AACvC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AACjC,EAAA,KAAA,MAAW,EAAA,IAAM,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,gBAAA,CAAiB,IAAI,CAAC,CAAA,EAAG,EAAA,CAAG,WAAA,CAAY,GAAG,CAAA;AAC7E,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,IAAe,EAAA,EAAI,OAAA,CAAQ,YAAA,EAAc,GAAG,CAAA,CAAE,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,CAAE,IAAA,EAAK;AAC1F;AAgBO,SAAS,SAAA,CAAU;AAAA,EACxB,IAAA;AAAA,EACA,YAAA;AAAA,EACA,IAAA,GAAO;AACT,CAAA,EAKG;AACD,EAAA,MAAM,GAAA,GAAMC,aAAuB,IAAI,CAAA;AACvC,EAAA,MAAM,GAAA,GAAMC,iBAAW,WAAW,CAAA;AAClC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIC,cAAA,CAAmB,EAAE,CAAA;AACnD,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,KAAA;AAC1B,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,KAAA;AAC5B,EAAA,MAAM,YAAA,GAAe,IAAA,KAAS,GAAA,EAAK,YAAA,IAAgB,KAAA,CAAA;AAInD,EAAA,MAAM,KAAA,GAAQC,cAAQ,OAAO,EAAE,QAAQ,IAAA,EAAK,CAAA,EAAI,CAAC,IAAI,CAAC,CAAA;AAEtD,EAAAC,qBAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,OAAO,GAAA,CAAI,OAAA;AACjB,IAAA,IAAI,CAAC,IAAA,IAAS,CAAC,IAAA,IAAQ,CAAC,KAAA,EAAQ;AAC9B,MAAA,UAAA,CAAW,EAAE,CAAA;AACb,MAAA;AAAA,IACF;AACA,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,MAAM,QAAA,GAAW,CAAC,IAAA,IAAQ,KAAA,EAAO,KAAA,IAAS,OAAO,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC3E,IAAA,MAAM,UAAA,GAAa,YAAA,GAAe,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,iBAAiB,KAAK,CAAC,CAAA,CAAE,GAAA,EAAI,GAAI,MAAA;AACnF,IAAA,KAAA,MAAW,MAAM,KAAA,CAAM,IAAA,CAAK,KAAK,gBAAA,CAA8B,QAAQ,CAAC,CAAA,EAAG;AACzE,MAAA,IAAI,OAAO,UAAA,EAAY;AACvB,MAAA,MAAM,IAAA,GAAwB,EAAA,CAAG,OAAA,KAAY,KAAA,GAAQ,MAAA,GAAS,OAAA;AAC9D,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC5C,MAAA,OAAA,CAAQ,YAAA,CAAa,uCAAuC,IAAI,CAAA;AAChE,MAAA,OAAA,CAAQ,SAAA,GAAY,IAAA,KAAS,MAAA,GAAS,gBAAA,GAAmB,8BAAA;AAGzD,MAAA,OAAA,CAAQ,MAAM,QAAA,GAAW,UAAA;AACzB,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AACzC,MAAA,IAAA,CAAK,YAAA,CAAa,sCAAsC,EAAE,CAAA;AAC1D,MAAA,IAAA,CAAK,SAAA,GACH,IAAA,KAAS,MAAA,GAAS,6BAAA,GAAgC,kBAAA;AACpD,MAAA,EAAA,CAAG,YAAY,OAAO,CAAA;AACtB,MAAA,IAAI,IAAA,KAAS,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAO,MAAM,EAAE,CAAA;AAAA,WACxC,OAAA,CAAQ,MAAA,CAAO,EAAA,EAAI,IAAI,CAAA;AAC5B,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,EAAA,EAAI,MAAM,CAAA;AAAA,IAC/B;AACA,IAAA,UAAA,CAAW,KAAK,CAAA;AAChB,IAAA,OAAO,MAAM;AACX,MAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,QAAA,MAAM,OAAA,GAAU,EAAE,IAAA,CAAK,aAAA;AACvB,QAAA,IAAI,OAAA,EAAS,UAAA,EAAY,OAAA,CAAQ,WAAA,CAAY,EAAE,EAAE,CAAA;AAAA,MACnD;AAAA,IACF,CAAA;AAAA,EACF,GAAG,CAAC,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,YAAY,CAAC,CAAA;AAEpC,EAAA,uBACEC,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,uBAAA,EAAyB,KAAA,EAAO,CAAA;AAAA,IAC9C,OAAA,CAAQ,GAAA;AAAA,MAAI,CAAC,GAAG,CAAA,KACfC,qBAAA;AAAA,wBACED,cAAA,CAAC,cAAW,IAAA,EAAM,CAAA,CAAE,MAAM,MAAA,EAAQ,CAAA,CAAE,IAAI,YAAA,EAA4B,CAAA;AAAA,QACpE,CAAA,CAAE,IAAA;AAAA,QACF,GAAG,CAAC,CAAA;AAAA;AACN;AACF,GAAA,EACF,CAAA;AAEJ;AAIA,SAAS,UAAA,CAAW;AAAA,EAClB,IAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,GAAA,GAAMN,iBAAW,WAAW,CAAA;AAClC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,eAAoB,MAAM,CAAA;AACpD,EAAA,MAAM,KAAA,GAAQF,aAAkD,MAAS,CAAA;AACzE,EAAA,MAAM,GAAA,GAAMA,aAA0B,IAAI,CAAA;AAE1C,EAAAS,eAAA,CAAU,MAAM,MAAM,YAAA,CAAa,MAAM,OAAO,CAAA,EAAG,EAAE,CAAA;AAErD,EAAA,MAAM,OAAA,GAAUC,kBAAY,YAAY;AACtC,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,GAAA,CAAI,OAAA,EAAS;AAC1B,IAAA,MAAM,IAAA,GACJ,SAAS,MAAA,GAAS,QAAA,CAAS,QAAQ,YAAY,CAAA,GAAI,SAAS,MAA0B,CAAA;AACxF,IAAA,MAAM,EAAA,GAAK,MAAM,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,MAAA,CAAO,SAAA,EAAU,EAAG,GAAA,CAAI,OAAO,CAAA;AAC7E,IAAA,QAAA,CAAS,EAAA,GAAK,WAAW,QAAQ,CAAA;AACjC,IAAA,YAAA,CAAa,MAAM,OAAO,CAAA;AAC1B,IAAA,KAAA,CAAM,UAAU,UAAA,CAAW,MAAM,QAAA,CAAS,MAAM,GAAG,WAAW,CAAA;AAAA,EAChE,GAAG,CAAC,GAAA,EAAK,IAAA,EAAM,MAAA,EAAQ,YAAY,CAAC,CAAA;AAEpC,EAAA,MAAM,SAAA,GAAY,IAAA,KAAS,MAAA,GAAS,WAAA,GAAc,YAAA;AAClD,EAAA,MAAM,QAAQ,KAAA,KAAU,QAAA,GAAW,QAAA,GAAW,KAAA,KAAU,WAAW,aAAA,GAAgB,SAAA;AAEnF,EAAA,uBACEH,cAAA;AAAA,IAACI,wBAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,GAAA;AAAA,MACL,IAAA,EAAK,QAAA;AAAA,MACL,IAAA,EAAK,IAAA;AAAA,MACL,OAAA,EAAQ,OAAA;AAAA,MACR,MAAM,KAAA,KAAU,QAAA,GAAW,OAAA,GAAU,KAAA,KAAU,WAAW,GAAA,GAAM,MAAA;AAAA,MAChE,YAAA,EAAY,KAAA;AAAA,MACZ,KAAA,EAAO,KAAA;AAAA,MACP,+BAAA,EAA+B,IAAA;AAAA,MAC/B,iBAAA,EAAiB,KAAA;AAAA,MACjB,OAAA;AAAA,MACA,SAAA,EACE,IAAA,KAAS,MAAA,GACL,+GAAA,GACA;AAAA;AAAA,GAER;AAEJ;AAGO,SAAS,eAAA,CAAgB;AAAA,EAC9B,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAKG;AAED,EAAA,MAAM,SAASX,YAAA,CAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,UAAU,CAAA;AAClD,EAAA,MAAA,CAAO,OAAA,GAAU,EAAE,MAAA,EAAQ,MAAA,EAAQ,QAAA,EAAS;AAE5C,EAAA,OAAOU,iBAAA;AAAA,IACL,OAAO,SAAkC,MAAA,KAAwB;AAC/D,MAAA,MAAM,EAAE,QAAQ,CAAA,EAAG,MAAA,EAAQ,QAAQ,QAAA,EAAU,GAAA,KAAQ,MAAA,CAAO,OAAA;AAC5D,MAAA,MAAM,EAAA,GAAK,MAAM,SAAA,CAAU,CAAA,IAAK,wBAAwB,OAAO,CAAA;AAC/D,MAAA,GAAA,CAAI,EAAA,GAAK,WAAW,aAAa,CAAA;AACjC,MAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAA,GAChB,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,gBAAA,CAAiB,iCAAiC,CAAC,CAAA,GAC9E,EAAC;AACL,MAAA,MAAA,GAAS,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,IAAI,OAAA,CAAQ,MAAM,CAAA,EAAG,EAAA,EAAI,CAAA;AACvD,MAAA,OAAO,EAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AACF","file":"chunk-WOURDD4U.cjs","sourcesContent":["import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type RefObject,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Button } from \"../Button/Button\";\nimport type {\n ContentClipboardPayload,\n ContentClipboardWriter,\n ContentCopyEvent,\n ContentCopyKind,\n} from \"./ContentRenderer.types\";\n\n/** How long the check icon stays after a copy. */\nconst FEEDBACK_MS = 2000;\n/** A clipboard write that never settles is a silent failure; give up after this. */\nconst WRITE_TIMEOUT_MS = 5000;\n\nexport interface CopyContextValue {\n code: boolean;\n table: boolean;\n /** Write, announce, and report one copy. Resolves to whether it worked. */\n copy: (payload: ContentClipboardPayload, button: HTMLElement) => Promise<boolean>;\n /**\n * Progressive streaming closed an open code fence: the last code block of\n * the tail chunk is still arriving and gets no copy button until it closes.\n */\n holdTailCode?: boolean;\n}\n\nexport const CopyContext = createContext<CopyContextValue | null>(null);\n\n/**\n * Default clipboard writer: text/html + text/plain via `ClipboardItem` where\n * the browser has it, else (or if that write rejects) plain `writeText`.\n * Throws when nothing could be written, so the caller can say so.\n */\nexport async function defaultClipboardWriter(payload: ContentClipboardPayload): Promise<void> {\n const clip = typeof navigator !== \"undefined\" ? navigator.clipboard : undefined;\n if (!clip) throw new Error(\"Clipboard API unavailable\");\n\n const Item = (globalThis as { ClipboardItem?: typeof ClipboardItem }).ClipboardItem;\n if (payload.html && Item && typeof clip.write === \"function\") {\n try {\n await clip.write([\n new Item({\n \"text/html\": new Blob([payload.html], { type: \"text/html\" }),\n \"text/plain\": new Blob([payload.text], { type: \"text/plain\" }),\n }),\n ]);\n return;\n } catch {\n // Rich write refused (permissions, unsupported type): fall back to text.\n }\n }\n if (typeof clip.writeText !== \"function\") throw new Error(\"Clipboard writeText unavailable\");\n await clip.writeText(payload.text);\n}\n\n/** Run a writer, treating a throw, a rejection, `false`, or a hang as failure. */\nexport async function runWriter(\n writer: ContentClipboardWriter,\n payload: ContentClipboardPayload,\n): Promise<boolean> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n const result = await Promise.race([\n Promise.resolve().then(() => writer(payload)),\n new Promise<false>((resolve) => {\n timer = setTimeout(() => resolve(false), WRITE_TIMEOUT_MS);\n }),\n ]);\n return result !== false;\n } catch {\n return false;\n } finally {\n if (timer) clearTimeout(timer);\n }\n}\n\n/** Code exactly as written: the `<code>` text, minus the newline marked appends. */\nexport function codeText(pre: HTMLElement, fromMarkdown: boolean): string {\n const text = (pre.querySelector(\"code\") ?? pre).textContent ?? \"\";\n return fromMarkdown && text.endsWith(\"\\n\") ? text.slice(0, -1) : text;\n}\n\n/** A table as TSV: tab between cells, newline between rows, no trailing newline. */\nexport function tableTsv(table: HTMLTableElement): string {\n const rows: string[] = [];\n for (const tr of Array.from(table.querySelectorAll(\"tr\"))) {\n // Only this table's own cells, not those of a table nested in a cell.\n if (tr.closest(\"table\") !== table) continue;\n const cells = Array.from(tr.children).filter((c) => c.tagName === \"TD\" || c.tagName === \"TH\");\n rows.push(cells.map((c) => cellText(c)).join(\"\\t\"));\n }\n return rows.join(\"\\n\");\n}\n\nfunction cellText(cell: Element): string {\n const clone = cell.cloneNode(true) as Element;\n for (const br of Array.from(clone.querySelectorAll(\"br\"))) br.replaceWith(\" \");\n return (clone.textContent ?? \"\").replace(/[\\t\\r\\n]+/g, \" \").replace(/ {2,}/g, \" \").trim();\n}\n\ninterface Target {\n kind: ContentCopyKind;\n el: HTMLElement;\n host: HTMLElement;\n}\n\n/**\n * Sanitised HTML rendered with `dangerouslySetInnerHTML`, plus a react-fancy\n * copy `Button` portalled next to every `<pre>` and `<table>` in it.\n *\n * Each block is wrapped in a `data-react-fancy-content-copy-block` element and\n * the button lives beside the block, never inside it, so the button's own text\n * can never end up in what is copied.\n */\nexport function HtmlChunk({\n html,\n fromMarkdown,\n tail = false,\n}: {\n html: string;\n fromMarkdown: boolean;\n /** This chunk is the last thing rendered, so it holds any block still arriving. */\n tail?: boolean;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const ctx = useContext(CopyContext);\n const [targets, setTargets] = useState<Target[]>([]);\n const code = ctx?.code ?? false;\n const table = ctx?.table ?? false;\n const holdLastCode = tail && (ctx?.holdTailCode ?? false);\n // React 19 re-assigns innerHTML whenever this prop is a NEW object, even\n // with the same string, which would wipe the wrappers on every re-render\n // (including the one that mounts the buttons). One object per string.\n const inner = useMemo(() => ({ __html: html }), [html]);\n\n useLayoutEffect(() => {\n const root = ref.current;\n if (!root || (!code && !table)) {\n setTargets([]);\n return;\n }\n const found: Target[] = [];\n const selector = [code && \"pre\", table && \"table\"].filter(Boolean).join(\",\");\n const inProgress = holdLastCode ? Array.from(root.querySelectorAll(\"pre\")).pop() : undefined;\n for (const el of Array.from(root.querySelectorAll<HTMLElement>(selector))) {\n if (el === inProgress) continue;\n const kind: ContentCopyKind = el.tagName === \"PRE\" ? \"code\" : \"table\";\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"data-react-fancy-content-copy-block\", kind);\n wrapper.className = kind === \"code\" ? \"group relative\" : \"group relative flex flex-col\";\n // Inline too: the code button is absolute, and a host whose Tailwind\n // never generated `relative` would let it escape the block (genie#1290).\n wrapper.style.position = \"relative\";\n const host = document.createElement(\"div\");\n host.setAttribute(\"data-react-fancy-content-copy-host\", \"\");\n host.className =\n kind === \"code\" ? \"absolute right-2 top-2 z-10\" : \"flex justify-end\";\n el.replaceWith(wrapper);\n if (kind === \"table\") wrapper.append(host, el);\n else wrapper.append(el, host);\n found.push({ kind, el, host });\n }\n setTargets(found);\n return () => {\n for (const t of found) {\n const wrapper = t.host.parentElement;\n if (wrapper?.parentNode) wrapper.replaceWith(t.el);\n }\n };\n }, [html, code, table, holdLastCode]);\n\n return (\n <>\n <div ref={ref} dangerouslySetInnerHTML={inner} />\n {targets.map((t, i) =>\n createPortal(\n <CopyButton kind={t.kind} target={t.el} fromMarkdown={fromMarkdown} />,\n t.host,\n `${i}`,\n ),\n )}\n </>\n );\n}\n\ntype CopyState = \"idle\" | \"copied\" | \"failed\";\n\nfunction CopyButton({\n kind,\n target,\n fromMarkdown,\n}: {\n kind: ContentCopyKind;\n target: HTMLElement;\n fromMarkdown: boolean;\n}) {\n const ctx = useContext(CopyContext);\n const [state, setState] = useState<CopyState>(\"idle\");\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const btn = useRef<HTMLButtonElement>(null);\n\n useEffect(() => () => clearTimeout(timer.current), []);\n\n const onClick = useCallback(async () => {\n if (!ctx || !btn.current) return;\n const text =\n kind === \"code\" ? codeText(target, fromMarkdown) : tableTsv(target as HTMLTableElement);\n const ok = await ctx.copy({ kind, text, html: target.outerHTML }, btn.current);\n setState(ok ? \"copied\" : \"failed\");\n clearTimeout(timer.current);\n timer.current = setTimeout(() => setState(\"idle\"), FEEDBACK_MS);\n }, [ctx, kind, target, fromMarkdown]);\n\n const idleLabel = kind === \"code\" ? \"Copy code\" : \"Copy table\";\n const label = state === \"copied\" ? \"Copied\" : state === \"failed\" ? \"Copy failed\" : idleLabel;\n\n return (\n <Button\n ref={btn}\n type=\"button\"\n size=\"xs\"\n variant=\"ghost\"\n icon={state === \"copied\" ? \"check\" : state === \"failed\" ? \"x\" : \"copy\"}\n aria-label={label}\n title={label}\n data-react-fancy-content-copy={kind}\n data-copy-state={state}\n onClick={onClick}\n className={\n kind === \"code\"\n ? \"text-zinc-300 hover:bg-zinc-800 hover:text-white opacity-70 group-hover:opacity-100 focus-visible:opacity-100\"\n : \"opacity-70 group-hover:opacity-100 focus-visible:opacity-100\"\n }\n />\n );\n}\n\n/** Build the copy pipeline a ContentRenderer root shares with its chunks. */\nexport function useCopyPipeline({\n writer,\n onCopy,\n rootRef,\n announce,\n}: {\n writer: ContentClipboardWriter | undefined;\n onCopy: ((event: ContentCopyEvent) => void) | undefined;\n rootRef: RefObject<HTMLElement | null>;\n announce: (message: string) => void;\n}) {\n // Read the latest props at click time without re-creating the context.\n const latest = useRef({ writer, onCopy, announce });\n latest.current = { writer, onCopy, announce };\n\n return useCallback(\n async (payload: ContentClipboardPayload, button: HTMLElement) => {\n const { writer: w, onCopy: report, announce: say } = latest.current;\n const ok = await runWriter(w ?? defaultClipboardWriter, payload);\n say(ok ? \"Copied\" : \"Copy failed\");\n const all = rootRef.current\n ? Array.from(rootRef.current.querySelectorAll(\"[data-react-fancy-content-copy]\"))\n : [];\n report?.({ ...payload, index: all.indexOf(button), ok });\n return ok;\n },\n [rootRef],\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { dirtyRingClasses } from './chunk-USWQAMI3.js';
1
+ import { dirtyRingClasses } from './chunk-IF6EITB5.js';
2
2
  import { useInlineEdit } from './chunk-OL53XYHF.js';
3
3
  import { useFieldMode } from './chunk-NRXK42LO.js';
4
4
  import { useControllableState } from './chunk-EDYAXGUM.js';
@@ -114,7 +114,7 @@ var Checkbox = forwardRef(
114
114
  ),
115
115
  children: [
116
116
  label,
117
- required && /* @__PURE__ */ jsx("span", { className: "ml-0.5 text-red-500", children: "*" })
117
+ required && /* @__PURE__ */ jsx("span", { className: "ms-0.5 text-red-500", children: "*" })
118
118
  ]
119
119
  }
120
120
  ),
@@ -127,5 +127,5 @@ var Checkbox = forwardRef(
127
127
  Checkbox.displayName = "Checkbox";
128
128
 
129
129
  export { Checkbox };
130
- //# sourceMappingURL=chunk-OTM7RL2L.js.map
131
- //# sourceMappingURL=chunk-OTM7RL2L.js.map
130
+ //# sourceMappingURL=chunk-WSU36HJM.js.map
131
+ //# sourceMappingURL=chunk-WSU36HJM.js.map