@particle-academy/react-fancy 6.8.0 → 6.10.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 (583) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +1 -0
  3. package/dist/{Card-CuRZivBz.d.cts → Card-D0sp2T1V.d.cts} +6 -1
  4. package/dist/{Card-CuRZivBz.d.ts → Card-D0sp2T1V.d.ts} +6 -1
  5. package/dist/accordion-panel.cjs +7 -7
  6. package/dist/accordion-panel.js +1 -1
  7. package/dist/accordion.cjs +3 -3
  8. package/dist/accordion.js +1 -1
  9. package/dist/autocomplete.cjs +4 -3
  10. package/dist/autocomplete.js +3 -2
  11. package/dist/avatar.cjs +2 -2
  12. package/dist/avatar.js +1 -1
  13. package/dist/breadcrumbs.cjs +2 -2
  14. package/dist/breadcrumbs.js +1 -1
  15. package/dist/button.cjs +3 -3
  16. package/dist/button.d.cts +1 -1
  17. package/dist/button.d.ts +1 -1
  18. package/dist/button.js +1 -1
  19. package/dist/calendar.cjs +2 -2
  20. package/dist/calendar.js +1 -1
  21. package/dist/callout.cjs +2 -2
  22. package/dist/callout.js +1 -1
  23. package/dist/card.cjs +7 -7
  24. package/dist/card.d.cts +2 -2
  25. package/dist/card.d.ts +2 -2
  26. package/dist/card.js +1 -1
  27. package/dist/carousel.cjs +7 -7
  28. package/dist/carousel.js +1 -1
  29. package/dist/chart.cjs +2 -2
  30. package/dist/chart.js +1 -1
  31. package/dist/chat-drawer.cjs +2 -2
  32. package/dist/chat-drawer.js +1 -1
  33. package/dist/chat-thread.cjs +7 -7
  34. package/dist/chat-thread.js +5 -5
  35. package/dist/checkbox-group.cjs +5 -5
  36. package/dist/checkbox-group.js +4 -4
  37. package/dist/checkbox.cjs +3 -3
  38. package/dist/checkbox.js +2 -2
  39. package/dist/{chunk-6GVOW3UL.js → chunk-24RWB7Q3.js} +12 -11
  40. package/dist/chunk-24RWB7Q3.js.map +1 -0
  41. package/dist/{chunk-B4YV2V7G.cjs → chunk-2DX3PNXU.cjs} +3 -3
  42. package/dist/{chunk-B4YV2V7G.cjs.map → chunk-2DX3PNXU.cjs.map} +1 -1
  43. package/dist/{chunk-KPRSRWNM.js → chunk-2I7VNCBZ.js} +3 -3
  44. package/dist/{chunk-KPRSRWNM.js.map → chunk-2I7VNCBZ.js.map} +1 -1
  45. package/dist/{chunk-WMANILKC.cjs → chunk-2UYQ34RJ.cjs} +7 -7
  46. package/dist/chunk-2UYQ34RJ.cjs.map +1 -0
  47. package/dist/chunk-36IC3NDN.cjs +21 -0
  48. package/dist/chunk-36IC3NDN.cjs.map +1 -0
  49. package/dist/{chunk-LFC2DL6H.cjs → chunk-3BBEVHSP.cjs} +14 -9
  50. package/dist/chunk-3BBEVHSP.cjs.map +1 -0
  51. package/dist/{chunk-2O5UXH5R.cjs → chunk-3EZ6UPXS.cjs} +10 -10
  52. package/dist/chunk-3EZ6UPXS.cjs.map +1 -0
  53. package/dist/{chunk-37D5PYEF.js → chunk-3O3ZWWLG.js} +17 -4
  54. package/dist/chunk-3O3ZWWLG.js.map +1 -0
  55. package/dist/{chunk-5TP642UT.js → chunk-3W6BKQVZ.js} +12 -11
  56. package/dist/chunk-3W6BKQVZ.js.map +1 -0
  57. package/dist/{chunk-5PHPJL7Z.js → chunk-4EQ336PQ.js} +4 -4
  58. package/dist/{chunk-5PHPJL7Z.js.map → chunk-4EQ336PQ.js.map} +1 -1
  59. package/dist/{chunk-EENHSMV2.js → chunk-4L3MGQAR.js} +6 -6
  60. package/dist/{chunk-EENHSMV2.js.map → chunk-4L3MGQAR.js.map} +1 -1
  61. package/dist/{chunk-QGY5FPVM.js → chunk-54NB3T3Q.js} +6 -4
  62. package/dist/chunk-54NB3T3Q.js.map +1 -0
  63. package/dist/{chunk-FRWOWDGX.js → chunk-5FA6V7JF.js} +3 -3
  64. package/dist/{chunk-FRWOWDGX.js.map → chunk-5FA6V7JF.js.map} +1 -1
  65. package/dist/{chunk-UUEAFG6V.js → chunk-5NJF7SQX.js} +6 -6
  66. package/dist/{chunk-UUEAFG6V.js.map → chunk-5NJF7SQX.js.map} +1 -1
  67. package/dist/{chunk-ZGDOWJKL.cjs → chunk-5NTFXQ4K.cjs} +6 -6
  68. package/dist/{chunk-ZGDOWJKL.cjs.map → chunk-5NTFXQ4K.cjs.map} +1 -1
  69. package/dist/{chunk-CQ7QXZLR.cjs → chunk-5SVZX6WF.cjs} +4 -4
  70. package/dist/chunk-5SVZX6WF.cjs.map +1 -0
  71. package/dist/{chunk-JY7HPFOE.cjs → chunk-6B2GMKE4.cjs} +5 -5
  72. package/dist/{chunk-JY7HPFOE.cjs.map → chunk-6B2GMKE4.cjs.map} +1 -1
  73. package/dist/{chunk-OASSZI6M.cjs → chunk-6B43ARGW.cjs} +5 -4
  74. package/dist/chunk-6B43ARGW.cjs.map +1 -0
  75. package/dist/{chunk-CVDL6C2O.cjs → chunk-6EPM5JG7.cjs} +3 -3
  76. package/dist/{chunk-CVDL6C2O.cjs.map → chunk-6EPM5JG7.cjs.map} +1 -1
  77. package/dist/{chunk-FVQO75KY.cjs → chunk-6GOPFKGC.cjs} +10 -4
  78. package/dist/chunk-6GOPFKGC.cjs.map +1 -0
  79. package/dist/{chunk-TLRFXSPA.cjs → chunk-73REG7KM.cjs} +13 -13
  80. package/dist/{chunk-TLRFXSPA.cjs.map → chunk-73REG7KM.cjs.map} +1 -1
  81. package/dist/{chunk-MI57NAKF.js → chunk-7B3Z4NVM.js} +6 -5
  82. package/dist/chunk-7B3Z4NVM.js.map +1 -0
  83. package/dist/{chunk-J2BWXCES.js → chunk-7GRIO5AZ.js} +3 -3
  84. package/dist/{chunk-J2BWXCES.js.map → chunk-7GRIO5AZ.js.map} +1 -1
  85. package/dist/{chunk-V5JTTLJP.cjs → chunk-7K2C744H.cjs} +3 -3
  86. package/dist/{chunk-V5JTTLJP.cjs.map → chunk-7K2C744H.cjs.map} +1 -1
  87. package/dist/{chunk-I2VAGZXY.cjs → chunk-7N7XVBH7.cjs} +11 -11
  88. package/dist/{chunk-I2VAGZXY.cjs.map → chunk-7N7XVBH7.cjs.map} +1 -1
  89. package/dist/{chunk-AJPYGRLA.cjs → chunk-7NRG77U5.cjs} +12 -4
  90. package/dist/chunk-7NRG77U5.cjs.map +1 -0
  91. package/dist/{chunk-GDF6XTHC.js → chunk-7OUBFO4D.js} +7 -5
  92. package/dist/chunk-7OUBFO4D.js.map +1 -0
  93. package/dist/{chunk-6H7ZN23X.cjs → chunk-7PK3OUKR.cjs} +6 -6
  94. package/dist/{chunk-6H7ZN23X.cjs.map → chunk-7PK3OUKR.cjs.map} +1 -1
  95. package/dist/{chunk-EUVWYDFN.js → chunk-AE6ICNJR.js} +14 -9
  96. package/dist/chunk-AE6ICNJR.js.map +1 -0
  97. package/dist/{chunk-YJXP6AOL.cjs → chunk-AF33UCTN.cjs} +4 -4
  98. package/dist/{chunk-YJXP6AOL.cjs.map → chunk-AF33UCTN.cjs.map} +1 -1
  99. package/dist/{chunk-PM5I5ZHK.cjs → chunk-AFFR7HHZ.cjs} +8 -7
  100. package/dist/chunk-AFFR7HHZ.cjs.map +1 -0
  101. package/dist/{chunk-F4OYQ2XZ.js → chunk-AR5DLM4K.js} +9 -6
  102. package/dist/chunk-AR5DLM4K.js.map +1 -0
  103. package/dist/{chunk-DJB3N4G3.cjs → chunk-AVGZ4PPC.cjs} +9 -9
  104. package/dist/{chunk-DJB3N4G3.cjs.map → chunk-AVGZ4PPC.cjs.map} +1 -1
  105. package/dist/{chunk-RANTYGKW.js → chunk-AXW55PQG.js} +3 -3
  106. package/dist/chunk-AXW55PQG.js.map +1 -0
  107. package/dist/{chunk-NSJBVV7R.js → chunk-BPTCMI3E.js} +21 -10
  108. package/dist/chunk-BPTCMI3E.js.map +1 -0
  109. package/dist/{chunk-25HRO7HQ.cjs → chunk-BYMOPR7P.cjs} +7 -7
  110. package/dist/chunk-BYMOPR7P.cjs.map +1 -0
  111. package/dist/{chunk-RWU2MFUL.js → chunk-C2VGO375.js} +5 -4
  112. package/dist/chunk-C2VGO375.js.map +1 -0
  113. package/dist/{chunk-FKZB27OM.cjs → chunk-C6EVRWXZ.cjs} +11 -8
  114. package/dist/chunk-C6EVRWXZ.cjs.map +1 -0
  115. package/dist/{chunk-GTS3QA7M.js → chunk-CO2NEUFK.js} +5 -5
  116. package/dist/chunk-CO2NEUFK.js.map +1 -0
  117. package/dist/{chunk-ESCIXKFT.js → chunk-D6NISIKV.js} +17 -7
  118. package/dist/chunk-D6NISIKV.js.map +1 -0
  119. package/dist/{chunk-MRZXTL46.cjs → chunk-DFROB5TW.cjs} +20 -20
  120. package/dist/{chunk-MRZXTL46.cjs.map → chunk-DFROB5TW.cjs.map} +1 -1
  121. package/dist/{chunk-KFA7B6WP.cjs → chunk-DPPDZOMY.cjs} +17 -7
  122. package/dist/chunk-DPPDZOMY.cjs.map +1 -0
  123. package/dist/{chunk-KOTUFZJ6.cjs → chunk-DQWAG7YY.cjs} +14 -11
  124. package/dist/chunk-DQWAG7YY.cjs.map +1 -0
  125. package/dist/{chunk-5WQ6FPSP.js → chunk-E2AEU5SP.js} +4 -4
  126. package/dist/{chunk-5WQ6FPSP.js.map → chunk-E2AEU5SP.js.map} +1 -1
  127. package/dist/{chunk-3QCAOD2W.cjs → chunk-EC4ZYZNK.cjs} +3 -3
  128. package/dist/{chunk-3QCAOD2W.cjs.map → chunk-EC4ZYZNK.cjs.map} +1 -1
  129. package/dist/{chunk-XBFTO64U.cjs → chunk-EDIB6V6Y.cjs} +4 -4
  130. package/dist/{chunk-XBFTO64U.cjs.map → chunk-EDIB6V6Y.cjs.map} +1 -1
  131. package/dist/{chunk-KXYMMNNV.js → chunk-EDIX6EXQ.js} +20 -20
  132. package/dist/{chunk-KXYMMNNV.js.map → chunk-EDIX6EXQ.js.map} +1 -1
  133. package/dist/{chunk-HNJXBMHI.cjs → chunk-EEFU5BVM.cjs} +40 -39
  134. package/dist/chunk-EEFU5BVM.cjs.map +1 -0
  135. package/dist/{chunk-KOAMRCSC.cjs → chunk-ETUDUDSL.cjs} +14 -11
  136. package/dist/chunk-ETUDUDSL.cjs.map +1 -0
  137. package/dist/{chunk-PJNUGSKI.js → chunk-EW2N52FD.js} +26 -25
  138. package/dist/chunk-EW2N52FD.js.map +1 -0
  139. package/dist/{chunk-6PRXG7L6.js → chunk-FECD3WKN.js} +4 -4
  140. package/dist/{chunk-6PRXG7L6.js.map → chunk-FECD3WKN.js.map} +1 -1
  141. package/dist/{chunk-CNWTYRZC.cjs → chunk-FF5G3E76.cjs} +4 -4
  142. package/dist/{chunk-CNWTYRZC.cjs.map → chunk-FF5G3E76.cjs.map} +1 -1
  143. package/dist/{chunk-WNWEC5OU.cjs → chunk-FKHYJ5IC.cjs} +3 -3
  144. package/dist/{chunk-WNWEC5OU.cjs.map → chunk-FKHYJ5IC.cjs.map} +1 -1
  145. package/dist/{chunk-QTS4Q2NK.js → chunk-FNHKZMMI.js} +4 -3
  146. package/dist/chunk-FNHKZMMI.js.map +1 -0
  147. package/dist/{chunk-QP6VNKLW.cjs → chunk-FNPII6TF.cjs} +9 -5
  148. package/dist/chunk-FNPII6TF.cjs.map +1 -0
  149. package/dist/{chunk-HLI6RB5V.cjs → chunk-FR3V5IAJ.cjs} +32 -31
  150. package/dist/chunk-FR3V5IAJ.cjs.map +1 -0
  151. package/dist/{chunk-EQ7G5F6K.js → chunk-FRUHEDZN.js} +3 -3
  152. package/dist/{chunk-EQ7G5F6K.js.map → chunk-FRUHEDZN.js.map} +1 -1
  153. package/dist/{chunk-BYO5RUDE.cjs → chunk-FSLEFL4U.cjs} +6 -5
  154. package/dist/chunk-FSLEFL4U.cjs.map +1 -0
  155. package/dist/{chunk-JY2RC6I4.js → chunk-FX37P4KR.js} +13 -10
  156. package/dist/chunk-FX37P4KR.js.map +1 -0
  157. package/dist/{chunk-BJL3VDRK.cjs → chunk-FY2WDVKF.cjs} +3 -3
  158. package/dist/{chunk-BJL3VDRK.cjs.map → chunk-FY2WDVKF.cjs.map} +1 -1
  159. package/dist/{chunk-SKMORSBO.cjs → chunk-FZQWFDUV.cjs} +5 -5
  160. package/dist/chunk-FZQWFDUV.cjs.map +1 -0
  161. package/dist/{chunk-4DL2U23D.cjs → chunk-GE2ZGE3A.cjs} +21 -13
  162. package/dist/chunk-GE2ZGE3A.cjs.map +1 -0
  163. package/dist/{chunk-THMFLRDW.cjs → chunk-GE6TSA3M.cjs} +17 -17
  164. package/dist/{chunk-THMFLRDW.cjs.map → chunk-GE6TSA3M.cjs.map} +1 -1
  165. package/dist/{chunk-PIG3UTHU.js → chunk-GZSRKBYI.js} +3 -3
  166. package/dist/{chunk-PIG3UTHU.js.map → chunk-GZSRKBYI.js.map} +1 -1
  167. package/dist/{chunk-BXPLERIJ.js → chunk-H5LJFN7D.js} +5 -4
  168. package/dist/chunk-H5LJFN7D.js.map +1 -0
  169. package/dist/{chunk-FR4RHVPR.js → chunk-H7IQVCTX.js} +6 -4
  170. package/dist/chunk-H7IQVCTX.js.map +1 -0
  171. package/dist/{chunk-LY3RQB3H.js → chunk-HCIEXBEB.js} +3 -3
  172. package/dist/{chunk-LY3RQB3H.js.map → chunk-HCIEXBEB.js.map} +1 -1
  173. package/dist/{chunk-XZOBGKZL.cjs → chunk-HEGM5LMZ.cjs} +6 -5
  174. package/dist/chunk-HEGM5LMZ.cjs.map +1 -0
  175. package/dist/{chunk-K5MQZTDW.cjs → chunk-HKLBCA5X.cjs} +4 -4
  176. package/dist/{chunk-K5MQZTDW.cjs.map → chunk-HKLBCA5X.cjs.map} +1 -1
  177. package/dist/{chunk-5QKQXM5V.cjs → chunk-HYU46SOE.cjs} +5 -5
  178. package/dist/{chunk-5QKQXM5V.cjs.map → chunk-HYU46SOE.cjs.map} +1 -1
  179. package/dist/{chunk-X2A3NAJW.js → chunk-I65KXHYL.js} +4 -4
  180. package/dist/chunk-I65KXHYL.js.map +1 -0
  181. package/dist/{chunk-USWQAMI3.js → chunk-IF6EITB5.js} +3 -3
  182. package/dist/{chunk-USWQAMI3.js.map → chunk-IF6EITB5.js.map} +1 -1
  183. package/dist/{chunk-DXZCKDYS.js → chunk-IG2UDCBA.js} +9 -9
  184. package/dist/chunk-IG2UDCBA.js.map +1 -0
  185. package/dist/{chunk-YQZB5Z7C.cjs → chunk-INC35VEE.cjs} +3 -2
  186. package/dist/chunk-INC35VEE.cjs.map +1 -0
  187. package/dist/{chunk-AQ4DZT4Y.cjs → chunk-ISAHWGMD.cjs} +6 -6
  188. package/dist/{chunk-AQ4DZT4Y.cjs.map → chunk-ISAHWGMD.cjs.map} +1 -1
  189. package/dist/{chunk-GDH43QH6.js → chunk-J57JSHDC.js} +6 -6
  190. package/dist/{chunk-GDH43QH6.js.map → chunk-J57JSHDC.js.map} +1 -1
  191. package/dist/{chunk-Z4UXLQSK.cjs → chunk-JDFJK5GO.cjs} +16 -16
  192. package/dist/chunk-JDFJK5GO.cjs.map +1 -0
  193. package/dist/{chunk-GSMD5NK5.js → chunk-JN5DHZ6I.js} +7 -7
  194. package/dist/{chunk-GSMD5NK5.js.map → chunk-JN5DHZ6I.js.map} +1 -1
  195. package/dist/{chunk-MAZEX4EZ.cjs → chunk-JQIFCWNZ.cjs} +13 -13
  196. package/dist/{chunk-MAZEX4EZ.cjs.map → chunk-JQIFCWNZ.cjs.map} +1 -1
  197. package/dist/{chunk-DJYG7DXS.js → chunk-KDRBUF5S.js} +4 -4
  198. package/dist/chunk-KDRBUF5S.js.map +1 -0
  199. package/dist/{chunk-ZVDW2VX5.cjs → chunk-KGSL6SVX.cjs} +3 -3
  200. package/dist/chunk-KGSL6SVX.cjs.map +1 -0
  201. package/dist/{chunk-YAPGHVBZ.js → chunk-KRECSPD3.js} +4 -4
  202. package/dist/{chunk-YAPGHVBZ.js.map → chunk-KRECSPD3.js.map} +1 -1
  203. package/dist/{chunk-UE3QO7R3.js → chunk-LAQT5FFV.js} +3 -3
  204. package/dist/{chunk-UE3QO7R3.js.map → chunk-LAQT5FFV.js.map} +1 -1
  205. package/dist/{chunk-YH75G6SP.cjs → chunk-LHHELLMT.cjs} +3 -3
  206. package/dist/{chunk-YH75G6SP.cjs.map → chunk-LHHELLMT.cjs.map} +1 -1
  207. package/dist/chunk-LJCQI6ZS.js +1212 -0
  208. package/dist/chunk-LJCQI6ZS.js.map +1 -0
  209. package/dist/{chunk-UK6BGM74.cjs → chunk-LREJ7AV2.cjs} +17 -4
  210. package/dist/chunk-LREJ7AV2.cjs.map +1 -0
  211. package/dist/{chunk-Y3QAEF2P.cjs → chunk-LVNCNMKD.cjs} +9 -7
  212. package/dist/chunk-LVNCNMKD.cjs.map +1 -0
  213. package/dist/{chunk-UZCR7DK5.js → chunk-LXEOBSEZ.js} +3 -3
  214. package/dist/{chunk-UZCR7DK5.js.map → chunk-LXEOBSEZ.js.map} +1 -1
  215. package/dist/{chunk-MKGWHSNV.cjs → chunk-MAY4NMRI.cjs} +5 -4
  216. package/dist/chunk-MAY4NMRI.cjs.map +1 -0
  217. package/dist/{chunk-PDVU2PXR.js → chunk-MD7HUHJB.js} +10 -10
  218. package/dist/chunk-MD7HUHJB.js.map +1 -0
  219. package/dist/{chunk-CEFK54WP.cjs → chunk-MDAI54AG.cjs} +7 -5
  220. package/dist/chunk-MDAI54AG.cjs.map +1 -0
  221. package/dist/{chunk-WE5WGVVX.js → chunk-MKDTXMCE.js} +3 -3
  222. package/dist/{chunk-WE5WGVVX.js.map → chunk-MKDTXMCE.js.map} +1 -1
  223. package/dist/{chunk-SXXDTW7S.js → chunk-NETUI353.js} +10 -4
  224. package/dist/chunk-NETUI353.js.map +1 -0
  225. package/dist/{chunk-XHUV3VSM.cjs → chunk-NIFHAFKK.cjs} +3 -3
  226. package/dist/{chunk-XHUV3VSM.cjs.map → chunk-NIFHAFKK.cjs.map} +1 -1
  227. package/dist/{chunk-LKN7FYW6.js → chunk-NW2LQRUP.js} +4 -4
  228. package/dist/chunk-NW2LQRUP.js.map +1 -0
  229. package/dist/{chunk-ONHT2PDW.cjs → chunk-NWP5EGSR.cjs} +3 -3
  230. package/dist/{chunk-ONHT2PDW.cjs.map → chunk-NWP5EGSR.cjs.map} +1 -1
  231. package/dist/{chunk-RSLZL6VP.js → chunk-OBA2LR4I.js} +3 -3
  232. package/dist/chunk-OBA2LR4I.js.map +1 -0
  233. package/dist/{chunk-GR2WKBER.js → chunk-OE4AIUAN.js} +4 -3
  234. package/dist/chunk-OE4AIUAN.js.map +1 -0
  235. package/dist/chunk-OP7A4SZZ.cjs +1216 -0
  236. package/dist/chunk-OP7A4SZZ.cjs.map +1 -0
  237. package/dist/{chunk-Z44A7NPD.cjs → chunk-OUPHLIXV.cjs} +40 -39
  238. package/dist/chunk-OUPHLIXV.cjs.map +1 -0
  239. package/dist/{chunk-VSTUGU7W.js → chunk-PIYQPXLT.js} +8 -8
  240. package/dist/{chunk-VSTUGU7W.js.map → chunk-PIYQPXLT.js.map} +1 -1
  241. package/dist/{chunk-WX5XYDVN.js → chunk-PZTFGPQJ.js} +3 -3
  242. package/dist/{chunk-WX5XYDVN.js.map → chunk-PZTFGPQJ.js.map} +1 -1
  243. package/dist/{chunk-4GPH7HOR.js → chunk-Q4CNEHVN.js} +3 -3
  244. package/dist/{chunk-4GPH7HOR.js.map → chunk-Q4CNEHVN.js.map} +1 -1
  245. package/dist/{chunk-QF7CD4JH.cjs → chunk-Q7XL37T3.cjs} +5 -5
  246. package/dist/{chunk-QF7CD4JH.cjs.map → chunk-Q7XL37T3.cjs.map} +1 -1
  247. package/dist/{chunk-BLOX7MRO.js → chunk-QE7KXMUZ.js} +3 -3
  248. package/dist/{chunk-BLOX7MRO.js.map → chunk-QE7KXMUZ.js.map} +1 -1
  249. package/dist/{chunk-ZPBKRJMH.js → chunk-QEJBMXRQ.js} +7 -7
  250. package/dist/chunk-QEJBMXRQ.js.map +1 -0
  251. package/dist/{chunk-PCNJJVTF.cjs → chunk-QMZK7SRS.cjs} +3 -3
  252. package/dist/chunk-QMZK7SRS.cjs.map +1 -0
  253. package/dist/{chunk-J2DI6RMR.cjs → chunk-QQKWI7QP.cjs} +19 -12
  254. package/dist/chunk-QQKWI7QP.cjs.map +1 -0
  255. package/dist/{chunk-TFX4LL7V.js → chunk-QSRYTWQN.js} +3 -2
  256. package/dist/chunk-QSRYTWQN.js.map +1 -0
  257. package/dist/{chunk-Z7SQMQTF.cjs → chunk-QU6HZH6V.cjs} +21 -10
  258. package/dist/chunk-QU6HZH6V.cjs.map +1 -0
  259. package/dist/{chunk-WGRLNXNB.js → chunk-R3PCZSBQ.js} +3 -3
  260. package/dist/{chunk-WGRLNXNB.js.map → chunk-R3PCZSBQ.js.map} +1 -1
  261. package/dist/{chunk-VZTXUYPM.cjs → chunk-R4SANV3G.cjs} +20 -20
  262. package/dist/chunk-R4SANV3G.cjs.map +1 -0
  263. package/dist/{chunk-EZZKHMR4.js → chunk-R6O6SLXK.js} +3 -3
  264. package/dist/{chunk-EZZKHMR4.js.map → chunk-R6O6SLXK.js.map} +1 -1
  265. package/dist/{chunk-5EW47IH7.js → chunk-RCTPN5QK.js} +9 -7
  266. package/dist/chunk-RCTPN5QK.js.map +1 -0
  267. package/dist/{chunk-JSD6IEBW.js → chunk-RFTDMQ56.js} +3 -3
  268. package/dist/{chunk-JSD6IEBW.js.map → chunk-RFTDMQ56.js.map} +1 -1
  269. package/dist/{chunk-MQ6VGG62.js → chunk-RUEDMYBF.js} +19 -12
  270. package/dist/chunk-RUEDMYBF.js.map +1 -0
  271. package/dist/{chunk-2G6TIX5Q.cjs → chunk-RVBA4LEB.cjs} +13 -13
  272. package/dist/{chunk-2G6TIX5Q.cjs.map → chunk-RVBA4LEB.cjs.map} +1 -1
  273. package/dist/{chunk-UVUBV4VZ.js → chunk-S2ID4NNQ.js} +6 -6
  274. package/dist/{chunk-UVUBV4VZ.js.map → chunk-S2ID4NNQ.js.map} +1 -1
  275. package/dist/{chunk-TMQF2CRN.js → chunk-S4JQPOBR.js} +7 -7
  276. package/dist/chunk-S4JQPOBR.js.map +1 -0
  277. package/dist/{chunk-ETNQ4AEQ.cjs → chunk-S6TVSQDT.cjs} +5 -5
  278. package/dist/{chunk-ETNQ4AEQ.cjs.map → chunk-S6TVSQDT.cjs.map} +1 -1
  279. package/dist/{chunk-SSCW67KA.cjs → chunk-SD6YAMDH.cjs} +4 -4
  280. package/dist/chunk-SD6YAMDH.cjs.map +1 -0
  281. package/dist/{chunk-MLZGGAXQ.js → chunk-SOIGBPK6.js} +21 -13
  282. package/dist/chunk-SOIGBPK6.js.map +1 -0
  283. package/dist/{chunk-KKYILQTG.cjs → chunk-TBLKVTJC.cjs} +7 -7
  284. package/dist/{chunk-KKYILQTG.cjs.map → chunk-TBLKVTJC.cjs.map} +1 -1
  285. package/dist/{chunk-7QENPLOP.cjs → chunk-TQDZZIOW.cjs} +5 -5
  286. package/dist/{chunk-7QENPLOP.cjs.map → chunk-TQDZZIOW.cjs.map} +1 -1
  287. package/dist/{chunk-MPCZUZ4O.cjs → chunk-U4KUW3RK.cjs} +19 -15
  288. package/dist/chunk-U4KUW3RK.cjs.map +1 -0
  289. package/dist/{chunk-AZQXPI5S.js → chunk-UBLMYH6C.js} +3 -3
  290. package/dist/{chunk-AZQXPI5S.js.map → chunk-UBLMYH6C.js.map} +1 -1
  291. package/dist/{chunk-P53432AK.cjs → chunk-UIBAIWUR.cjs} +4 -4
  292. package/dist/{chunk-P53432AK.cjs.map → chunk-UIBAIWUR.cjs.map} +1 -1
  293. package/dist/{chunk-UXYFM2XT.cjs → chunk-UQABXIQV.cjs} +6 -4
  294. package/dist/chunk-UQABXIQV.cjs.map +1 -0
  295. package/dist/chunk-US5R36TQ.js +17 -0
  296. package/dist/chunk-US5R36TQ.js.map +1 -0
  297. package/dist/{chunk-CS2ZYMYP.js → chunk-UZZJJ3HJ.js} +3 -3
  298. package/dist/{chunk-CS2ZYMYP.js.map → chunk-UZZJJ3HJ.js.map} +1 -1
  299. package/dist/{chunk-Y7RGUUTS.cjs → chunk-V3EKI3VV.cjs} +3 -3
  300. package/dist/{chunk-Y7RGUUTS.cjs.map → chunk-V3EKI3VV.cjs.map} +1 -1
  301. package/dist/{chunk-U4Y7ZXME.js → chunk-V64XIPYG.js} +6 -6
  302. package/dist/{chunk-U4Y7ZXME.js.map → chunk-V64XIPYG.js.map} +1 -1
  303. package/dist/{chunk-LIVC3WUU.cjs → chunk-VH34IZ7R.cjs} +3 -3
  304. package/dist/{chunk-LIVC3WUU.cjs.map → chunk-VH34IZ7R.cjs.map} +1 -1
  305. package/dist/{chunk-WNUAGRQN.cjs → chunk-VOAC5OKY.cjs} +4 -4
  306. package/dist/chunk-VOAC5OKY.cjs.map +1 -0
  307. package/dist/{chunk-H7ELUIF6.cjs → chunk-W53SZTPX.cjs} +10 -10
  308. package/dist/{chunk-H7ELUIF6.cjs.map → chunk-W53SZTPX.cjs.map} +1 -1
  309. package/dist/{chunk-4FH2JHUY.js → chunk-WAEOIEDI.js} +5 -5
  310. package/dist/{chunk-4FH2JHUY.js.map → chunk-WAEOIEDI.js.map} +1 -1
  311. package/dist/{chunk-ICMLLZKZ.js → chunk-WJE7UX2G.js} +4 -4
  312. package/dist/{chunk-ICMLLZKZ.js.map → chunk-WJE7UX2G.js.map} +1 -1
  313. package/dist/{chunk-DTOIO42M.js → chunk-WLRKE4HC.js} +9 -5
  314. package/dist/chunk-WLRKE4HC.js.map +1 -0
  315. package/dist/{chunk-7ZCNZUZK.cjs → chunk-WOURDD4U.cjs} +4 -4
  316. package/dist/{chunk-7ZCNZUZK.cjs.map → chunk-WOURDD4U.cjs.map} +1 -1
  317. package/dist/{chunk-OTM7RL2L.js → chunk-WSU36HJM.js} +4 -4
  318. package/dist/{chunk-OTM7RL2L.js.map → chunk-WSU36HJM.js.map} +1 -1
  319. package/dist/{chunk-TAYJSIOP.js → chunk-X4NXS42J.js} +5 -5
  320. package/dist/{chunk-TAYJSIOP.js.map → chunk-X4NXS42J.js.map} +1 -1
  321. package/dist/{chunk-2UTN3EFK.js → chunk-XALAQZCD.js} +5 -5
  322. package/dist/{chunk-2UTN3EFK.js.map → chunk-XALAQZCD.js.map} +1 -1
  323. package/dist/{chunk-RZUYCZ5D.cjs → chunk-XCFBMHQD.cjs} +6 -4
  324. package/dist/chunk-XCFBMHQD.cjs.map +1 -0
  325. package/dist/{chunk-NZHVDWOM.cjs → chunk-XEI5JG7C.cjs} +3 -3
  326. package/dist/{chunk-NZHVDWOM.cjs.map → chunk-XEI5JG7C.cjs.map} +1 -1
  327. package/dist/{chunk-O3F6DYWR.cjs → chunk-XG6J5MOK.cjs} +3 -3
  328. package/dist/{chunk-O3F6DYWR.cjs.map → chunk-XG6J5MOK.cjs.map} +1 -1
  329. package/dist/{chunk-GVMWJ4NI.js → chunk-XH24BGEK.js} +6 -6
  330. package/dist/{chunk-GVMWJ4NI.js.map → chunk-XH24BGEK.js.map} +1 -1
  331. package/dist/{chunk-3S5ED522.js → chunk-XO4GHRA2.js} +11 -8
  332. package/dist/chunk-XO4GHRA2.js.map +1 -0
  333. package/dist/{chunk-O5ORO2RX.cjs → chunk-XQF4HCOV.cjs} +13 -11
  334. package/dist/chunk-XQF4HCOV.cjs.map +1 -0
  335. package/dist/{chunk-IUCYRQ4J.js → chunk-YPYZZLZ5.js} +5 -5
  336. package/dist/{chunk-IUCYRQ4J.js.map → chunk-YPYZZLZ5.js.map} +1 -1
  337. package/dist/{chunk-NVXTHTJI.js → chunk-YTWMIVRI.js} +10 -10
  338. package/dist/chunk-YTWMIVRI.js.map +1 -0
  339. package/dist/{chunk-WZAKEJDL.js → chunk-YZW7HQXH.js} +13 -11
  340. package/dist/chunk-YZW7HQXH.js.map +1 -0
  341. package/dist/{chunk-AYBKPAI2.cjs → chunk-Z5MNYYUJ.cjs} +3 -3
  342. package/dist/{chunk-AYBKPAI2.cjs.map → chunk-Z5MNYYUJ.cjs.map} +1 -1
  343. package/dist/{chunk-GOE36IXL.js → chunk-Z6M3UELD.js} +3 -3
  344. package/dist/{chunk-GOE36IXL.js.map → chunk-Z6M3UELD.js.map} +1 -1
  345. package/dist/{chunk-PXZRYL5I.js → chunk-ZBXJDQXN.js} +12 -4
  346. package/dist/chunk-ZBXJDQXN.js.map +1 -0
  347. package/dist/{chunk-M5SEYDSS.cjs → chunk-ZDHLEHYR.cjs} +6 -6
  348. package/dist/{chunk-M5SEYDSS.cjs.map → chunk-ZDHLEHYR.cjs.map} +1 -1
  349. package/dist/{chunk-NPSKZ7ZB.cjs → chunk-ZFXCZ2QO.cjs} +12 -12
  350. package/dist/{chunk-NPSKZ7ZB.cjs.map → chunk-ZFXCZ2QO.cjs.map} +1 -1
  351. package/dist/{chunk-SCGTO3PX.js → chunk-ZHTK4IPQ.js} +3 -3
  352. package/dist/{chunk-SCGTO3PX.js.map → chunk-ZHTK4IPQ.js.map} +1 -1
  353. package/dist/{chunk-QF2FODTG.js → chunk-ZL5QVNKG.js} +10 -6
  354. package/dist/chunk-ZL5QVNKG.js.map +1 -0
  355. package/dist/code-block.cjs +4 -4
  356. package/dist/code-block.js +3 -3
  357. package/dist/code-view.cjs +2 -2
  358. package/dist/code-view.js +1 -1
  359. package/dist/command.cjs +3 -3
  360. package/dist/command.js +1 -1
  361. package/dist/composer.cjs +7 -6
  362. package/dist/composer.js +5 -4
  363. package/dist/content-renderer.cjs +6 -6
  364. package/dist/content-renderer.js +3 -3
  365. package/dist/context-menu.cjs +4 -3
  366. package/dist/context-menu.d.cts +2 -0
  367. package/dist/context-menu.d.ts +2 -0
  368. package/dist/context-menu.js +2 -1
  369. package/dist/date-picker.cjs +5 -5
  370. package/dist/date-picker.js +4 -4
  371. package/dist/drawer.cjs +3 -3
  372. package/dist/drawer.d.cts +10 -4
  373. package/dist/drawer.d.ts +10 -4
  374. package/dist/drawer.js +1 -1
  375. package/dist/dropdown.cjs +5 -4
  376. package/dist/dropdown.js +3 -2
  377. package/dist/editor.cjs +9 -8
  378. package/dist/editor.js +7 -6
  379. package/dist/emoji-select.cjs +2 -2
  380. package/dist/emoji-select.js +1 -1
  381. package/dist/eyebrow.cjs +2 -2
  382. package/dist/eyebrow.js +1 -1
  383. package/dist/faux-client.cjs +2 -2
  384. package/dist/faux-client.js +1 -1
  385. package/dist/field.cjs +3 -3
  386. package/dist/field.js +2 -2
  387. package/dist/file-browser.cjs +6 -5
  388. package/dist/file-browser.js +2 -1
  389. package/dist/file-upload.cjs +3 -3
  390. package/dist/file-upload.js +1 -1
  391. package/dist/image-viewer.cjs +3 -3
  392. package/dist/image-viewer.js +2 -2
  393. package/dist/index-list.cjs +2 -2
  394. package/dist/index-list.js +1 -1
  395. package/dist/index.cjs +252 -238
  396. package/dist/index.cjs.map +1 -1
  397. package/dist/index.d.cts +20 -1
  398. package/dist/index.d.ts +20 -1
  399. package/dist/index.js +83 -81
  400. package/dist/index.js.map +1 -1
  401. package/dist/input-tag.cjs +7 -6
  402. package/dist/input-tag.d.cts +6 -2
  403. package/dist/input-tag.d.ts +6 -2
  404. package/dist/input-tag.js +2 -1
  405. package/dist/input.cjs +10 -9
  406. package/dist/input.js +9 -8
  407. package/dist/inputs.cjs +42 -41
  408. package/dist/inputs.js +21 -20
  409. package/dist/json-editor.cjs +27 -26
  410. package/dist/json-editor.js +16 -15
  411. package/dist/magic-wand.cjs +8 -8
  412. package/dist/magic-wand.js +7 -7
  413. package/dist/marquee.cjs +2 -2
  414. package/dist/marquee.js +1 -1
  415. package/dist/media-viewer.cjs +5 -5
  416. package/dist/media-viewer.js +4 -4
  417. package/dist/menu.cjs +3 -3
  418. package/dist/menu.js +1 -1
  419. package/dist/mobile-menu.cjs +5 -4
  420. package/dist/mobile-menu.d.cts +2 -1
  421. package/dist/mobile-menu.d.ts +2 -1
  422. package/dist/mobile-menu.js +3 -2
  423. package/dist/mode.cjs +3 -3
  424. package/dist/mode.js +2 -2
  425. package/dist/multi-switch.cjs +6 -5
  426. package/dist/multi-switch.js +5 -4
  427. package/dist/number-field.cjs +11 -10
  428. package/dist/number-field.js +10 -9
  429. package/dist/otp-input.cjs +3 -2
  430. package/dist/otp-input.js +2 -1
  431. package/dist/pagination.cjs +2 -2
  432. package/dist/pagination.js +1 -1
  433. package/dist/paste-pills.cjs +17 -16
  434. package/dist/paste-pills.js +4 -3
  435. package/dist/pdf-viewer.cjs +3 -3
  436. package/dist/pdf-viewer.js +2 -2
  437. package/dist/phone-input.cjs +39 -0
  438. package/dist/phone-input.cjs.map +1 -0
  439. package/dist/phone-input.d.cts +139 -0
  440. package/dist/phone-input.d.ts +139 -0
  441. package/dist/phone-input.js +22 -0
  442. package/dist/phone-input.js.map +1 -0
  443. package/dist/popover.cjs +5 -4
  444. package/dist/popover.js +3 -2
  445. package/dist/profile.cjs +3 -3
  446. package/dist/profile.js +2 -2
  447. package/dist/progress.cjs +2 -2
  448. package/dist/progress.js +1 -1
  449. package/dist/prompt-input.cjs +10 -9
  450. package/dist/prompt-input.js +7 -6
  451. package/dist/qr-code.cjs +8 -8
  452. package/dist/qr-code.js +2 -2
  453. package/dist/radio-group.cjs +5 -5
  454. package/dist/radio-group.js +4 -4
  455. package/dist/reason-tag.cjs +6 -5
  456. package/dist/reason-tag.js +5 -4
  457. package/dist/reorderable-grid.cjs +4 -3
  458. package/dist/reorderable-grid.js +2 -1
  459. package/dist/resizable-panels.cjs +3 -2
  460. package/dist/resizable-panels.js +2 -1
  461. package/dist/select.cjs +8 -7
  462. package/dist/select.js +7 -6
  463. package/dist/separator.cjs +2 -2
  464. package/dist/separator.js +1 -1
  465. package/dist/sidebar.cjs +6 -5
  466. package/dist/sidebar.js +4 -3
  467. package/dist/slider.cjs +5 -5
  468. package/dist/slider.js +4 -4
  469. package/dist/stat-list.cjs +2 -2
  470. package/dist/stat-list.d.cts +5 -2
  471. package/dist/stat-list.d.ts +5 -2
  472. package/dist/stat-list.js +1 -1
  473. package/dist/stepper.cjs +3 -2
  474. package/dist/stepper.js +2 -1
  475. package/dist/styles.css +24 -0
  476. package/dist/styles.css.map +1 -1
  477. package/dist/switch.cjs +3 -3
  478. package/dist/switch.js +2 -2
  479. package/dist/table.cjs +11 -11
  480. package/dist/table.js +1 -1
  481. package/dist/tabs.cjs +4 -3
  482. package/dist/tabs.js +2 -1
  483. package/dist/textarea.cjs +6 -6
  484. package/dist/textarea.js +5 -5
  485. package/dist/time-grid.cjs +3 -2
  486. package/dist/time-grid.js +2 -1
  487. package/dist/time-picker.cjs +2 -2
  488. package/dist/time-picker.js +1 -1
  489. package/dist/timeline.cjs +4 -4
  490. package/dist/timeline.js +1 -1
  491. package/dist/toast.cjs +4 -3
  492. package/dist/toast.d.cts +6 -2
  493. package/dist/toast.d.ts +6 -2
  494. package/dist/toast.js +2 -1
  495. package/dist/tooltip.cjs +4 -3
  496. package/dist/tooltip.js +3 -2
  497. package/dist/tree-nav.cjs +3 -3
  498. package/dist/tree-nav.js +1 -1
  499. package/docs/Dropdown.md +1 -1
  500. package/docs/InputTag.md +1 -1
  501. package/docs/MobileMenu.md +2 -2
  502. package/docs/PhoneInput.md +104 -0
  503. package/docs/Popover.md +1 -1
  504. package/docs/ReorderableGrid.md +2 -0
  505. package/docs/ResizablePanels.md +2 -0
  506. package/docs/Toast.md +2 -2
  507. package/package.json +11 -1
  508. package/dist/chunk-25HRO7HQ.cjs.map +0 -1
  509. package/dist/chunk-2O5UXH5R.cjs.map +0 -1
  510. package/dist/chunk-37D5PYEF.js.map +0 -1
  511. package/dist/chunk-3S5ED522.js.map +0 -1
  512. package/dist/chunk-4DL2U23D.cjs.map +0 -1
  513. package/dist/chunk-5EW47IH7.js.map +0 -1
  514. package/dist/chunk-5TP642UT.js.map +0 -1
  515. package/dist/chunk-6GVOW3UL.js.map +0 -1
  516. package/dist/chunk-AJPYGRLA.cjs.map +0 -1
  517. package/dist/chunk-BXPLERIJ.js.map +0 -1
  518. package/dist/chunk-BYO5RUDE.cjs.map +0 -1
  519. package/dist/chunk-CEFK54WP.cjs.map +0 -1
  520. package/dist/chunk-CQ7QXZLR.cjs.map +0 -1
  521. package/dist/chunk-DJYG7DXS.js.map +0 -1
  522. package/dist/chunk-DTOIO42M.js.map +0 -1
  523. package/dist/chunk-DXZCKDYS.js.map +0 -1
  524. package/dist/chunk-ESCIXKFT.js.map +0 -1
  525. package/dist/chunk-EUVWYDFN.js.map +0 -1
  526. package/dist/chunk-F4OYQ2XZ.js.map +0 -1
  527. package/dist/chunk-FKZB27OM.cjs.map +0 -1
  528. package/dist/chunk-FR4RHVPR.js.map +0 -1
  529. package/dist/chunk-FVQO75KY.cjs.map +0 -1
  530. package/dist/chunk-GDF6XTHC.js.map +0 -1
  531. package/dist/chunk-GR2WKBER.js.map +0 -1
  532. package/dist/chunk-GTS3QA7M.js.map +0 -1
  533. package/dist/chunk-HLI6RB5V.cjs.map +0 -1
  534. package/dist/chunk-HNJXBMHI.cjs.map +0 -1
  535. package/dist/chunk-J2DI6RMR.cjs.map +0 -1
  536. package/dist/chunk-JY2RC6I4.js.map +0 -1
  537. package/dist/chunk-KFA7B6WP.cjs.map +0 -1
  538. package/dist/chunk-KOAMRCSC.cjs.map +0 -1
  539. package/dist/chunk-KOTUFZJ6.cjs.map +0 -1
  540. package/dist/chunk-LFC2DL6H.cjs.map +0 -1
  541. package/dist/chunk-LKN7FYW6.js.map +0 -1
  542. package/dist/chunk-MI57NAKF.js.map +0 -1
  543. package/dist/chunk-MKGWHSNV.cjs.map +0 -1
  544. package/dist/chunk-MLZGGAXQ.js.map +0 -1
  545. package/dist/chunk-MPCZUZ4O.cjs.map +0 -1
  546. package/dist/chunk-MQ6VGG62.js.map +0 -1
  547. package/dist/chunk-NSJBVV7R.js.map +0 -1
  548. package/dist/chunk-NVXTHTJI.js.map +0 -1
  549. package/dist/chunk-O5ORO2RX.cjs.map +0 -1
  550. package/dist/chunk-OASSZI6M.cjs.map +0 -1
  551. package/dist/chunk-PCNJJVTF.cjs.map +0 -1
  552. package/dist/chunk-PDVU2PXR.js.map +0 -1
  553. package/dist/chunk-PJNUGSKI.js.map +0 -1
  554. package/dist/chunk-PM5I5ZHK.cjs.map +0 -1
  555. package/dist/chunk-PXZRYL5I.js.map +0 -1
  556. package/dist/chunk-QF2FODTG.js.map +0 -1
  557. package/dist/chunk-QGY5FPVM.js.map +0 -1
  558. package/dist/chunk-QP6VNKLW.cjs.map +0 -1
  559. package/dist/chunk-QTS4Q2NK.js.map +0 -1
  560. package/dist/chunk-RANTYGKW.js.map +0 -1
  561. package/dist/chunk-RSLZL6VP.js.map +0 -1
  562. package/dist/chunk-RWU2MFUL.js.map +0 -1
  563. package/dist/chunk-RZUYCZ5D.cjs.map +0 -1
  564. package/dist/chunk-SKMORSBO.cjs.map +0 -1
  565. package/dist/chunk-SSCW67KA.cjs.map +0 -1
  566. package/dist/chunk-SXXDTW7S.js.map +0 -1
  567. package/dist/chunk-TFX4LL7V.js.map +0 -1
  568. package/dist/chunk-TMQF2CRN.js.map +0 -1
  569. package/dist/chunk-UK6BGM74.cjs.map +0 -1
  570. package/dist/chunk-UXYFM2XT.cjs.map +0 -1
  571. package/dist/chunk-VZTXUYPM.cjs.map +0 -1
  572. package/dist/chunk-WMANILKC.cjs.map +0 -1
  573. package/dist/chunk-WNUAGRQN.cjs.map +0 -1
  574. package/dist/chunk-WZAKEJDL.js.map +0 -1
  575. package/dist/chunk-X2A3NAJW.js.map +0 -1
  576. package/dist/chunk-XZOBGKZL.cjs.map +0 -1
  577. package/dist/chunk-Y3QAEF2P.cjs.map +0 -1
  578. package/dist/chunk-YQZB5Z7C.cjs.map +0 -1
  579. package/dist/chunk-Z44A7NPD.cjs.map +0 -1
  580. package/dist/chunk-Z4UXLQSK.cjs.map +0 -1
  581. package/dist/chunk-Z7SQMQTF.cjs.map +0 -1
  582. package/dist/chunk-ZPBKRJMH.js.map +0 -1
  583. package/dist/chunk-ZVDW2VX5.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Sidebar/Sidebar.context.ts","../src/components/Sidebar/Sidebar.keyboard.ts","../src/components/Sidebar/SidebarItem.tsx","../src/components/Sidebar/SidebarGroup.tsx","../src/components/Sidebar/SidebarSubmenu.tsx","../src/components/Sidebar/SidebarToggle.tsx","../src/components/Sidebar/Sidebar.tsx"],"names":["jsxs","jsx","getLetters"],"mappings":"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","file":"chunk-JY2RC6I4.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { SidebarContextValue } from \"./Sidebar.types\";\n\nexport const SidebarContext = createContext<SidebarContextValue | null>(null);\n\nexport function useSidebar(): SidebarContextValue {\n const ctx = useContext(SidebarContext);\n if (!ctx) {\n throw new Error(\"useSidebar must be used within a <Sidebar> component\");\n }\n return ctx;\n}\n","import { useCallback, useEffect, type KeyboardEvent, type RefObject } from \"react\";\n\n/**\n * What arrow keys move between: every `Sidebar.Item`, plus an EXPANDED\n * `Sidebar.Submenu`'s trigger button. (A collapsed submenu renders a plain\n * `<div>`, which is not focusable, so there is nothing to move to.)\n *\n * Selected by the handles the components already render, so `keyboardNav`\n * adds no markup to a Sidebar that does not use it.\n */\nconst ITEM_SELECTOR =\n \"[data-react-fancy-sidebar-item], [data-react-fancy-sidebar-submenu] > button\";\n\nconst NAV_KEYS = new Set([\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"]);\n\n/**\n * Inside a closed submenu — the panel is collapsed to zero height but its\n * items are still mounted, so without this they would be focusable while\n * invisible. `SidebarSubmenu` sets `aria-expanded` on its trigger only when\n * `keyboardNav` is on; a submenu's OWN trigger is not inside its panel.\n */\nfunction inClosedSubmenu(el: HTMLElement, root: HTMLElement): boolean {\n let sub = el.parentElement?.closest<HTMLElement>(\"[data-react-fancy-sidebar-submenu]\");\n while (sub && root.contains(sub)) {\n const trigger = sub.querySelector<HTMLElement>(\":scope > button\");\n if (trigger && trigger !== el && trigger.getAttribute(\"aria-expanded\") === \"false\") {\n return true;\n }\n sub = sub.parentElement?.closest<HTMLElement>(\"[data-react-fancy-sidebar-submenu]\");\n }\n return false;\n}\n\nfunction isNavigable(el: HTMLElement, root: HTMLElement): boolean {\n if (el.getAttribute(\"aria-disabled\") === \"true\") return false;\n if ((el as HTMLButtonElement).disabled) return false;\n return !inClosedSubmenu(el, root);\n}\n\nfunction allItems(root: HTMLElement): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(ITEM_SELECTOR));\n}\n\n/**\n * Roving tabindex + ArrowUp / ArrowDown / Home / End for `Sidebar keyboardNav`.\n *\n * The tab stop is kept on the DOM rather than in React state because items\n * can mount from anywhere below the root (a consumer's own component, a\n * submenu opening) without the root re-rendering. A MutationObserver re-applies\n * it when the set of items, or their disabled / expanded / current state,\n * changes; focus moving onto an item (by click, Tab or arrow) makes that item\n * the stop. Turning `keyboardNav` off removes every tabindex it set.\n *\n * React never renders a `tabIndex` on these items itself, so writing the\n * attribute does not fight reconciliation. (A consumer who passes `tabIndex`\n * to an item while `keyboardNav` is on is overriding the roving stop, and\n * React will reassert theirs on its next render of that item.)\n */\nexport function useSidebarKeyboardNav(\n rootRef: RefObject<HTMLElement | null>,\n enabled: boolean,\n): ((event: KeyboardEvent<HTMLElement>) => void) | undefined {\n useEffect(() => {\n const root = rootRef.current;\n if (!enabled || !root) return;\n\n const touched = new Set<HTMLElement>();\n let current: HTMLElement | null = null;\n\n const apply = () => {\n const items = allItems(root);\n const navigable = items.filter((el) => isNavigable(el, root));\n if (!current || !navigable.includes(current)) {\n current =\n navigable.find((el) => el.getAttribute(\"aria-current\") === \"page\") ??\n navigable[0] ??\n null;\n }\n for (const el of items) {\n const want = el === current ? \"0\" : \"-1\";\n if (el.getAttribute(\"tabindex\") !== want) el.setAttribute(\"tabindex\", want);\n touched.add(el);\n }\n };\n\n const onFocusIn = (event: FocusEvent) => {\n const target = event.target as HTMLElement | null;\n if (!target || !target.matches(ITEM_SELECTOR) || !root.contains(target)) return;\n if (!isNavigable(target, root)) return;\n current = target;\n apply();\n };\n\n apply();\n root.addEventListener(\"focusin\", onFocusIn);\n const observer = new MutationObserver(apply);\n observer.observe(root, {\n childList: true,\n subtree: true,\n attributes: true,\n // NOT tabindex: that is what `apply` writes.\n attributeFilter: [\"aria-disabled\", \"aria-expanded\", \"aria-current\", \"disabled\"],\n });\n\n return () => {\n observer.disconnect();\n root.removeEventListener(\"focusin\", onFocusIn);\n for (const el of touched) el.removeAttribute(\"tabindex\");\n };\n }, [rootRef, enabled]);\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n const root = rootRef.current;\n if (!root || !NAV_KEYS.has(event.key)) return;\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return;\n // Only when an ITEM has focus. An input, textarea, select or\n // contenteditable inside the sidebar (a filter box, say) keeps its keys:\n // it does not match the item selector, so it never gets here.\n const target = event.target as HTMLElement;\n if (!target.matches(ITEM_SELECTOR)) return;\n\n const items = allItems(root);\n const navigable = items.filter((el) => isNavigable(el, root));\n if (navigable.length === 0) return;\n\n let next: HTMLElement | undefined;\n if (event.key === \"Home\") next = navigable[0];\n else if (event.key === \"End\") next = navigable[navigable.length - 1];\n else {\n // Walk from the target's position among ALL items, so a focused item\n // that is itself not navigable (disabled while focused) still moves.\n const from = items.indexOf(target);\n const step = event.key === \"ArrowDown\" ? 1 : -1;\n for (let i = from + step; i >= 0 && i < items.length; i += step) {\n if (navigable.includes(items[i])) {\n next = items[i];\n break;\n }\n }\n }\n\n // Handled either way: an arrow at the end of the list must not scroll\n // the page instead. No wrap, matching a list rather than a menu.\n event.preventDefault();\n next?.focus();\n },\n [rootRef],\n );\n\n return enabled ? onKeyDown : undefined;\n}\n","import type { ElementType, ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { badgeDot } from \"../Badge/Badge.colors\";\nimport { Tooltip } from \"../Tooltip\";\nimport { useSidebar } from \"./Sidebar.context\";\nimport type { SidebarDotColor, SidebarItemProps } from \"./Sidebar.types\";\n\n/**\n * The surface-coloured ring separates the dot from whatever it sits on (an\n * icon, the active-row fill) in both modes.\n */\nconst DOT_BASE =\n \"pointer-events-none absolute h-2 w-2 rounded-full ring-2 ring-[color:var(--fancy-surface,var(--color-white))] dark:ring-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\";\n\n/** Extract first 3 characters from a ReactNode if it's a string. */\nfunction getLetters(children: React.ReactNode): string {\n if (typeof children === \"string\") return children.slice(0, 3);\n return \"...\";\n}\n\nexport function SidebarItem({\n children,\n href,\n as: As,\n icon,\n active = false,\n disabled = false,\n badge,\n badgeLabel,\n collapsedBadge = false,\n dot,\n dotLabel,\n dotTooltip = false,\n onClick,\n className,\n ...rest\n}: SidebarItemProps) {\n const { collapsed, collapseMode } = useSidebar();\n\n // Link mode engages on `href` OR `as` — a `to`-based router (TanStack Router,\n // React Router) passes no href, and would otherwise render a <button> that\n // navigates nowhere. `onClick` now rides along in link mode instead of being\n // dropped: an item that both navigates and closes a drawer is the common case.\n const isLink = Boolean(href || As);\n const Tag = isLink ? ((As ?? \"a\") as ElementType) : \"button\";\n const tagProps = isLink\n ? { ...(href ? { href } : {}), onClick }\n : { type: \"button\" as const, onClick };\n\n const showIconOnly = collapsed && collapseMode === \"icons\" && icon;\n const showLetters = collapsed && (collapseMode === \"letters\" || (collapseMode === \"icons\" && !icon));\n\n const title = typeof children === \"string\" ? children : undefined;\n\n // --- Attention marks (6.1.0). All of this is inert unless `dot` or\n // `collapsedBadge` is passed, so an item without them renders exactly the\n // markup it always did.\n const dotColor: SidebarDotColor | null = dot === true ? \"red\" : dot || null;\n const showCollapsedBadge = collapsed && collapsedBadge && Boolean(badge);\n const hasMarks = dotColor !== null || showCollapsedBadge;\n // `badgeLabel` (6.2.0) is read in place of the visible badge, so it only\n // exists while the badge is actually rendered: always expanded, and\n // collapsed only with `collapsedBadge`.\n const badgeShown = Boolean(badge) && (!collapsed || showCollapsedBadge);\n const badgeLabelEl =\n badgeShown && badgeLabel ? (\n // The comma is the separator, so whatever renders before this must not\n // end in a space (\"tynn , 2 agents\"); see the two trailing spaces below.\n <span className=\"sr-only\" data-react-fancy-sidebar-badge-label=\"\">\n {`, ${badgeLabel}`}\n </span>\n ) : null;\n const dotLabelEl =\n dotColor && dotLabel ? (\n // The spaces are load-bearing: adjacent inline elements concatenate in\n // the accessible name, so without them it reads \"Inbox3 unread\".\n <span className=\"sr-only\" data-react-fancy-sidebar-dot-label=\"\">\n {\" \"}\n {dotLabel}\n {badgeLabelEl ? null : \" \"}\n </span>\n ) : null;\n // Collapsed, the item's visible content is only an icon (or an\n // abbreviation), and its name came from `title`. But accname takes CONTENT\n // over `title`, so a dot label or a badge count would become the item's\n // whole name (\"3 unread\" instead of \"Inbox\"). A visually hidden copy of the\n // label keeps the name first.\n const needsHiddenLabel = collapsed && (dotLabelEl !== null || showCollapsedBadge);\n\n const renderMarks = (anchoredToItem: boolean): ReactNode => (\n <>\n {showCollapsedBadge && (\n <span\n data-react-fancy-sidebar-badge=\"\"\n aria-hidden={badgeLabelEl ? \"true\" : undefined}\n className=\"pointer-events-none absolute -right-3 -top-2.5 whitespace-nowrap\"\n >\n {badge}\n </span>\n )}\n {dotColor && (\n <span\n aria-hidden=\"true\"\n data-react-fancy-sidebar-dot=\"\"\n data-color={dotColor}\n // A collapsed badge takes the top corner; the dot moves to the\n // bottom one rather than hiding under it.\n data-position={showCollapsedBadge ? \"bottom\" : \"top\"}\n className={cn(\n DOT_BASE,\n badgeDot[dotColor],\n anchoredToItem\n ? \"right-1.5 top-1.5\"\n : showCollapsedBadge\n ? \"-bottom-0.5 -right-0.5\"\n : \"-right-0.5 -top-0.5\",\n )}\n />\n )}\n </>\n );\n // Marks sit at the icon's corner when there is an icon, at the letters'\n // corner on a lettered rail, and at the item's own corner otherwise.\n const iconClass = cn(\n \"flex h-5 w-5 shrink-0 items-center justify-center\",\n hasMarks && \"relative\",\n );\n\n // `dotTooltip` (6.2.0) shows the dot's words to sighted users too. It needs\n // words to show, so it is inert without both `dot` and `dotLabel`.\n const showDotTooltip = dotTooltip && dotLabelEl !== null;\n\n const node = (\n <Tag\n {...tagProps}\n {...rest}\n data-react-fancy-sidebar-item=\"\"\n data-active={active || undefined}\n aria-current={active ? \"page\" : undefined}\n aria-disabled={disabled || undefined}\n // With a dot tooltip the native `title` would be a second bubble over\n // the first, so the tooltip takes over and carries the label itself.\n // The name does not depend on it: a collapsed item with a dot label\n // already has the visually hidden label copy.\n title={collapsed && !showDotTooltip ? title : undefined}\n className={cn(\n // `w-full` matters when the Tag is a <button>: form controls size to\n // FIT-CONTENT, not to their parent, so a long label made the item wider\n // than the sidebar and an ancestor clipped the overflow — which reads as\n // a label cut off mid-word rather than an ellipsis. Without this,\n // `min-w-0` on the label below can never engage, because the item is\n // never under width pressure in the first place.\n \"flex w-full items-center rounded-md text-sm font-medium transition-colors\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-blue-500\",\n collapsed ? \"justify-center px-2 py-2\" : \"gap-2 px-3 py-2\",\n active\n ? \"bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] text-[color:var(--fancy-text,var(--color-zinc-900))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\"\n : \"text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] hover:bg-[color:var(--fancy-surface-hover,var(--color-zinc-50))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))] dark:hover:bg-[color:var(--fancy-surface-hover-dark,color-mix(in_oklab,var(--color-zinc-800)_50%,transparent))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\",\n disabled && \"pointer-events-none opacity-50\",\n // Containing block for the visually hidden labels, and for a dot that\n // has no icon to sit on.\n hasMarks && \"relative\",\n className,\n )}\n >\n {needsHiddenLabel && (\n <span className=\"sr-only\" data-react-fancy-sidebar-label=\"\">\n {children}\n {badgeLabelEl && !dotLabelEl ? null : \" \"}\n </span>\n )}\n {collapsed && dotLabelEl}\n {collapsed && badgeLabelEl}\n {showIconOnly && (\n <span className={iconClass}>\n {icon}\n {renderMarks(false)}\n </span>\n )}\n {showLetters && (\n <span\n className={cn(\"text-xs font-semibold uppercase\", hasMarks && \"relative\")}\n // The abbreviation would otherwise read as part of the name (\"Inb\").\n aria-hidden={needsHiddenLabel || undefined}\n >\n {getLetters(children)}\n {renderMarks(false)}\n </span>\n )}\n {!collapsed && (\n <>\n {icon && (\n <span className={iconClass}>\n {icon}\n {renderMarks(false)}\n </span>\n )}\n {!icon && renderMarks(true)}\n {/*\n `min-w-0` is load-bearing, not tidiness. A flex item defaults to\n `min-width: auto`, which resolves to its MIN-CONTENT width — so with\n `truncate` alone the span refuses to shrink below the full label,\n and the item grows wider than the sidebar instead of ellipsing.\n The overflow then gets clipped by an ancestor, which looks like a\n mid-word cut rather than a truncation.\n\n Only shows up with labels longer than the sidebar is wide, which is\n why it survived: short nav labels never trigger it.\n */}\n <span className=\"min-w-0 flex-1 truncate text-left\">{children}</span>\n {dotLabelEl}\n {/*\n Label and badge are adjacent elements, and adjacent elements\n concatenate in a layout-unaware accessible name: \"tynn2\". A visually\n hidden space separates them (6.2.0); with `badgeLabel`, the label is\n read instead and the badge itself is hidden from assistive tech.\n */}\n {badge && (badgeLabelEl ?? <span className=\"sr-only\"> </span>)}\n {badge && (\n <span className=\"shrink-0\" aria-hidden={badgeLabelEl ? \"true\" : undefined}>\n {badge}\n </span>\n )}\n </>\n )}\n </Tag>\n );\n\n if (!showDotTooltip) return node;\n\n return (\n <Tooltip\n placement=\"right\"\n content={\n // aria-hidden, and deliberately NOT linked with aria-describedby:\n // the same words are already in the item's accessible name via\n // `dotLabel`, so exposing the bubble would read them twice.\n <span aria-hidden=\"true\" data-react-fancy-sidebar-tooltip=\"\">\n {collapsed && (\n <span className=\"block font-medium\" data-react-fancy-sidebar-tooltip-label=\"\">\n {children}\n </span>\n )}\n {dotLabel}\n </span>\n }\n >\n {node}\n </Tooltip>\n );\n}\n\nSidebarItem.displayName = \"SidebarItem\";\n","import { cn } from \"../../utils/cn\";\nimport { useSidebar } from \"./Sidebar.context\";\nimport type { SidebarGroupProps } from \"./Sidebar.types\";\n\nexport function SidebarGroup({ children, label, className }: SidebarGroupProps) {\n const { collapsed } = useSidebar();\n\n return (\n <div data-react-fancy-sidebar-group=\"\" className={cn(\"py-1\", className)}>\n {label && !collapsed && (\n <p className=\"mb-1 px-3 text-xs font-semibold uppercase tracking-wider text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\">\n {label}\n </p>\n )}\n {label && collapsed && (\n <div className=\"mx-auto mb-1 h-px w-6 bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]\" />\n )}\n {children}\n </div>\n );\n}\n\nSidebarGroup.displayName = \"SidebarGroup\";\n","import { useState } from \"react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { useSidebar } from \"./Sidebar.context\";\nimport type { SidebarSubmenuProps } from \"./Sidebar.types\";\n\n/** Extract first 3 characters from a string. */\nfunction getLetters(label: string): string {\n return label.slice(0, 3);\n}\n\nexport function SidebarSubmenu({\n children,\n label,\n icon,\n defaultOpen = false,\n className,\n}: SidebarSubmenuProps) {\n const [open, setOpen] = useState(defaultOpen);\n const { collapsed, collapseMode, keyboardNav } = useSidebar();\n\n const showIconOnly = collapsed && collapseMode === \"icons\" && icon;\n const showLetters = collapsed && (collapseMode === \"letters\" || (collapseMode === \"icons\" && !icon));\n\n // When collapsed, just show the icon/letters as a simple item (no expand)\n if (collapsed) {\n return (\n <div\n data-react-fancy-sidebar-submenu=\"\"\n title={label}\n className={cn(\n \"flex items-center justify-center rounded-md px-2 py-2 text-sm font-medium transition-colors\",\n \"text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] hover:bg-[color:var(--fancy-surface-hover,var(--color-zinc-50))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))]\",\n \"dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))] dark:hover:bg-[color:var(--fancy-surface-hover-dark,color-mix(in_oklab,var(--color-zinc-800)_50%,transparent))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\",\n className,\n )}\n >\n {showIconOnly && (\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center\">{icon}</span>\n )}\n {showLetters && (\n <span className=\"text-xs font-semibold uppercase\">{getLetters(label)}</span>\n )}\n </div>\n );\n }\n\n return (\n <div data-react-fancy-sidebar-submenu=\"\" className={className}>\n <button\n type=\"button\"\n // Only with `keyboardNav`, which reads it to skip a closed panel's\n // still-mounted items; without it the markup is unchanged from 6.0.\n aria-expanded={keyboardNav ? open : undefined}\n onClick={() => setOpen((v) => !v)}\n className={cn(\n \"flex w-full items-center gap-2 rounded-md px-3 py-2 text-sm font-medium transition-colors\",\n \"text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] hover:bg-[color:var(--fancy-surface-hover,var(--color-zinc-50))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))]\",\n \"dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))] dark:hover:bg-[color:var(--fancy-surface-hover-dark,color-mix(in_oklab,var(--color-zinc-800)_50%,transparent))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\",\n )}\n >\n {icon && <span className=\"flex h-5 w-5 shrink-0 items-center justify-center\">{icon}</span>}\n <span className=\"flex-1 text-left\">{label}</span>\n <ChevronDown\n className={cn(\n \"h-3.5 w-3.5 opacity-60 transition-transform duration-200\",\n open && \"rotate-180\",\n )}\n />\n </button>\n <div\n className={cn(\n \"grid transition-[grid-template-rows] duration-200\",\n open ? \"grid-rows-[1fr]\" : \"grid-rows-[0fr]\",\n )}\n >\n <div className=\"overflow-hidden\">\n <div className=\"ml-4 border-l border-[color:var(--fancy-border,var(--color-zinc-200))] pl-2 pt-1 dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))]\">\n {children}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nSidebarSubmenu.displayName = \"SidebarSubmenu\";\n","import { PanelLeftClose, PanelLeftOpen } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { useSidebar } from \"./Sidebar.context\";\nimport type { SidebarToggleProps } from \"./Sidebar.types\";\n\nexport function SidebarToggle({ className }: SidebarToggleProps) {\n const { collapsed, setCollapsed } = useSidebar();\n\n return (\n <button\n type=\"button\"\n data-react-fancy-sidebar-toggle=\"\"\n onClick={() => setCollapsed(!collapsed)}\n title={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n className={cn(\n \"flex items-center justify-center rounded-md p-1.5 text-zinc-400 transition-colors\",\n \"hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] hover:text-zinc-600 dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:hover:text-zinc-300\",\n className,\n )}\n >\n {collapsed ? (\n <PanelLeftOpen className=\"h-4 w-4\" />\n ) : (\n <PanelLeftClose className=\"h-4 w-4\" />\n )}\n </button>\n );\n}\n\nSidebarToggle.displayName = \"SidebarToggle\";\n","import { useRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useControllableState } from \"../../hooks\";\nimport { SidebarContext } from \"./Sidebar.context\";\nimport { useSidebarKeyboardNav } from \"./Sidebar.keyboard\";\nimport { SidebarItem } from \"./SidebarItem\";\nimport { SidebarGroup } from \"./SidebarGroup\";\nimport { SidebarSubmenu } from \"./SidebarSubmenu\";\nimport { SidebarToggle } from \"./SidebarToggle\";\nimport type { SidebarProps } from \"./Sidebar.types\";\n\nfunction SidebarRoot({\n children,\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n collapseMode = \"icons\",\n embedded = false,\n navLabel,\n keyboardNav = false,\n className,\n}: SidebarProps) {\n const [collapsed, setCollapsed] = useControllableState(\n controlledCollapsed,\n defaultCollapsed,\n onCollapsedChange,\n );\n const rootRef = useRef<HTMLElement>(null);\n const onKeyDown = useSidebarKeyboardNav(rootRef, keyboardNav);\n\n return (\n <SidebarContext.Provider value={{ collapsed, collapseMode, setCollapsed, keyboardNav }}>\n <aside\n ref={rootRef}\n onKeyDown={onKeyDown}\n data-react-fancy-sidebar=\"\"\n data-collapsed={collapsed || undefined}\n data-embedded={embedded || undefined}\n className={cn(\n \"flex flex-col gap-0.5 transition-[width] duration-200\",\n // The app-shell chrome. Correct for the rail this is usually used as,\n // and actively wrong inside a container that already draws its own —\n // a 240px rail in a 300px card puts its right border 240px in, which\n // reads as a stray line slicing the panel rather than an edge.\n !embedded && \"border-r border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n // Collapsed is a fixed icon rail either way; only the expanded width\n // defers to the container.\n collapsed ? \"w-16\" : embedded ? \"w-full\" : \"w-60\",\n className,\n )}\n >\n {navLabel ? (\n // The <aside> is a complementary landmark, not a navigation one, so\n // without this a screen reader's landmark list shows no navigation.\n // Opt-in: an element between the <aside> and its children is a DOM\n // change a consumer's CSS (`aside > a`) or tests may depend on. The\n // <nav> takes over the column layout and fills the rail, so a footer\n // pushed down with `mt-auto` still reaches the bottom.\n <nav\n data-react-fancy-sidebar-nav=\"\"\n aria-label={navLabel}\n className=\"flex min-h-0 flex-1 flex-col gap-0.5\"\n >\n {children}\n </nav>\n ) : (\n children\n )}\n </aside>\n </SidebarContext.Provider>\n );\n}\n\nexport const Sidebar = Object.assign(SidebarRoot, {\n Item: SidebarItem,\n Group: SidebarGroup,\n Submenu: SidebarSubmenu,\n Toggle: SidebarToggle,\n});\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Toast/Toast.context.ts","../src/components/Toast/ToastItem.tsx","../src/components/Toast/ToastStack.tsx","../src/components/Toast/Toast.tsx"],"names":["createContext","useContext","useEffect","jsx","cn","jsxs","Check","XCircle","AlertTriangle","Info","X","useControllableState","useRef","Badge","Portal","POSITION_STYLES","useState","useCallback","useMemo"],"mappings":"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","file":"chunk-KFA7B6WP.cjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { ToastContextValue } from \"./Toast.types\";\n\nexport const ToastContext = createContext<ToastContextValue | null>(null);\n\nexport function useToast(): ToastContextValue {\n const ctx = useContext(ToastContext);\n if (!ctx) {\n throw new Error(\"useToast must be used within a <Toast.Provider>\");\n }\n return ctx;\n}\n","import { useEffect } from \"react\";\nimport { AlertTriangle, Check, Info, X, XCircle } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport type { ToastItemProps } from \"./Toast.types\";\n\nconst VARIANT_STYLES = {\n default:\n \"border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n success:\n \"border-emerald-200 bg-emerald-50 dark:border-emerald-800 dark:bg-emerald-950\",\n error:\n \"border-red-200 bg-red-50 dark:border-red-800 dark:bg-red-950\",\n warning:\n \"border-amber-200 bg-amber-50 dark:border-amber-800 dark:bg-amber-950\",\n info: \"border-blue-200 bg-blue-50 dark:border-blue-800 dark:bg-blue-950\",\n} as const;\n\nconst VARIANT_ICON_COLORS = {\n default: \"text-zinc-400\",\n success: \"text-emerald-500\",\n error: \"text-red-500\",\n warning: \"text-amber-500\",\n info: \"text-blue-500\",\n} as const;\n\nexport function ToastItem({ data, onDismiss }: ToastItemProps) {\n const { id, title, description, variant = \"default\", action } = data;\n // An action toast does not expire by default.\n const duration = data.duration ?? (action ? 0 : 5000);\n\n useEffect(() => {\n if (duration <= 0) return;\n const timer = setTimeout(() => onDismiss(id), duration);\n return () => clearTimeout(timer);\n }, [id, duration, onDismiss]);\n\n return (\n <div\n data-react-fancy-toast-item=\"\"\n role=\"alert\"\n // Scoped to the toast rather than the document: a global Escape handler\n // would fight whatever modal or drawer is already listening.\n onKeyDown={(e) => {\n if (e.key === \"Escape\") onDismiss(id);\n }}\n className={cn(\n \"fancy-toast-in pointer-events-auto w-80 rounded-xl border p-4 shadow-lg\",\n VARIANT_STYLES[variant],\n )}\n >\n <div className=\"flex items-start gap-3\">\n <div className={cn(\"mt-0.5 shrink-0\", VARIANT_ICON_COLORS[variant])}>\n {variant === \"success\" && <Check size={16} />}\n {variant === \"error\" && <XCircle size={16} />}\n {variant === \"warning\" && <AlertTriangle size={16} />}\n {variant === \"info\" && <Info size={16} />}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\">{title}</p>\n {description && (\n <p className=\"mt-1 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 {description}\n </p>\n )}\n </div>\n {action && (\n <button\n type=\"button\"\n onClick={() => {\n action.onClick();\n // The offer is consumed; leaving it up invites undoing an\n // already-undone action.\n onDismiss(id);\n }}\n className=\"shrink-0 self-center rounded-md px-2 py-1 text-xs font-medium text-zinc-700 underline-offset-2 transition-colors hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] hover:underline dark:text-zinc-200 dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\"\n >\n {action.label}\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => onDismiss(id)}\n className=\"shrink-0 rounded p-0.5 text-zinc-400 transition-colors hover:text-zinc-600 dark:hover:text-zinc-300\"\n aria-label=\"Dismiss\"\n >\n <X size={14} />\n </button>\n </div>\n </div>\n );\n}\n\nToastItem.displayName = \"ToastItem\";\n","import { useEffect, useRef, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useControllableState } from \"../../hooks/use-controllable-state\";\nimport { Portal } from \"../Portal\";\nimport { Badge } from \"../Badge\";\nimport type { ToastPosition } from \"./Toast.types\";\n\nexport interface ToastStackProps<T> {\n /**\n * Everything to show — the stack is a VIEW of this list and owns none of it.\n * There is no limit and no timer: an item leaves only when you remove it.\n */\n items: readonly T[];\n /** One card's content, actions included. Only the front card is interactive. */\n renderItem: (item: T, state: { index: number; isFront: boolean }) => ReactNode;\n /** A stable key per item. Defaults to `item.id`, then the index. */\n getKey?: (item: T, index: number) => string;\n /** How many cards show behind the front one. Default 2. */\n depth?: number;\n /** How far each card behind peeks out above the one in front, in px. Default 8. */\n offset?: number;\n /** How much smaller each card behind is than the one in front. Default 0.05. */\n scaleStep?: number;\n /** Which item is in front, if you want to own it. Wraps; out-of-range values are clamped. */\n frontIndex?: number;\n defaultFrontIndex?: number;\n onFrontIndexChange?: (index: number) => void;\n /** A screen corner, or `\"inline\"` to render where it is placed. Default `\"bottom-right\"`. */\n position?: ToastPosition | \"inline\";\n /** The stack's accessible name. Default \"Notifications\". */\n label?: string;\n /** Classes for each card's shell, merged onto the defaults. */\n cardClassName?: string;\n className?: string;\n}\n\nconst POSITION_STYLES: Record<ToastPosition, string> = {\n \"top-right\": \"top-4 right-4\",\n \"top-left\": \"top-4 left-4\",\n \"bottom-right\": \"bottom-4 right-4\",\n \"bottom-left\": \"bottom-4 left-4\",\n};\n\n/** Pixels of wheel travel that count as one step. A mouse notch is ~100; a trackpad sends many small ones. */\nconst WHEEL_STEP = 50;\n\nconst CARD =\n \"rounded-xl border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-4 shadow-lg dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\";\n\nfunction defaultKey(item: unknown, index: number): string {\n const id = (item as { id?: unknown } | null)?.id;\n return typeof id === \"string\" || typeof id === \"number\" ? String(id) : String(index);\n}\n\nfunction isTextField(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n return (\n target.isContentEditable ||\n target.getAttribute(\"contenteditable\") === \"true\" ||\n /^(INPUT|TEXTAREA|SELECT)$/.test(target.tagName)\n );\n}\n\n/**\n * A controlled stack of actionable toasts — approval requests, say — that the\n * person walks through rather than races.\n *\n * Built for react-fancy#33. The owner's requirements were that requests stack\n * behind each other with a slight top offset, that scrolling over the stack\n * walks through them, and that a pending request NEVER expires or disappears.\n * The last is why this is a view of the caller's list rather than a queue it\n * keeps: there is nothing here that can drop an item, because nothing here owns\n * one. (The imperative provider's `maxToasts` silently drops the oldest.)\n */\nexport function ToastStack<T>({\n items,\n renderItem,\n getKey = defaultKey,\n depth = 2,\n offset = 8,\n scaleStep = 0.05,\n frontIndex: controlledFront,\n defaultFrontIndex = 0,\n onFrontIndexChange,\n position = \"bottom-right\",\n label = \"Notifications\",\n cardClassName,\n className,\n}: ToastStackProps<T>) {\n const [rawFront, setFront] = useControllableState(\n controlledFront,\n defaultFrontIndex,\n onFrontIndexChange,\n );\n const count = items.length;\n // Clamped for display rather than corrected through onChange: a list that\n // shrinks under a far-forward index must not make render report a change.\n const front = count === 0 ? 0 : ((rawFront % count) + count) % count;\n\n const stackRef = useRef<HTMLDivElement>(null);\n const wheelTravel = useRef(0);\n const live = useRef({ front, count });\n live.current = { front, count };\n\n const step = (by: number) => {\n const { front: current, count: n } = live.current;\n if (n < 2) return;\n setFront((((current + by) % n) + n) % n);\n };\n const stepRef = useRef(step);\n stepRef.current = step;\n\n /*\n * A native listener, because React's wheel listener is passive and cannot stop\n * the page scrolling underneath — and a stack that cycles AND scrolls the page\n * moves two things at once under the person's hand.\n */\n useEffect(() => {\n const el = stackRef.current;\n if (!el) return;\n\n const onWheel = (e: WheelEvent) => {\n if (live.current.count < 2 || e.deltaY === 0) return;\n e.preventDefault();\n\n // Line or page mode: every event is a notch.\n if (e.deltaMode !== 0) {\n wheelTravel.current = 0;\n stepRef.current(Math.sign(e.deltaY));\n return;\n }\n // A notch-sized event steps at once; small trackpad deltas add up first.\n if (Math.abs(e.deltaY) >= WHEEL_STEP) {\n wheelTravel.current = 0;\n stepRef.current(Math.sign(e.deltaY));\n return;\n }\n wheelTravel.current += e.deltaY;\n if (Math.abs(wheelTravel.current) >= WHEEL_STEP) {\n stepRef.current(Math.sign(wheelTravel.current));\n wheelTravel.current = 0;\n }\n };\n\n el.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => el.removeEventListener(\"wheel\", onWheel);\n // Re-bound when the element can change: it appears with the first item, and\n // moving between a corner and inline remounts it.\n }, [count > 0, position]);\n\n if (count === 0) return null;\n\n const visibleBehind = Math.min(Math.max(0, depth), count - 1);\n const hidden = count - 1 - visibleBehind;\n\n const card = (index: number, k: number) => {\n const item = items[index];\n const isFront = k === 0;\n return (\n <div\n key={getKey(item, index)}\n data-react-fancy-toast-stack-card={isFront ? \"front\" : \"behind\"}\n aria-hidden={isFront ? undefined : true}\n inert={isFront ? undefined : true}\n className={cn(\n CARD,\n \"origin-top transition-transform duration-200\",\n isFront ? \"relative\" : \"pointer-events-none absolute inset-0 overflow-hidden\",\n cardClassName,\n )}\n style={{\n zIndex: depth + 1 - k,\n transform: isFront ? undefined : `translateY(-${k * offset}px) scale(${1 - k * scaleStep})`,\n }}\n >\n {renderItem(item, { index, isFront })}\n </div>\n );\n };\n\n const stackEl = (\n <div\n ref={stackRef}\n data-react-fancy-toast-stack=\"\"\n role=\"region\"\n aria-label={label}\n tabIndex={0}\n onKeyDown={(e) => {\n if (isTextField(e.target)) return;\n if (e.key === \"ArrowDown\" || e.key === \"ArrowRight\") {\n e.preventDefault();\n step(1);\n } else if (e.key === \"ArrowUp\" || e.key === \"ArrowLeft\") {\n e.preventDefault();\n step(-1);\n }\n }}\n className={cn(\n \"pointer-events-auto relative w-80 rounded-xl outline-none focus-visible:ring-2 focus-visible:ring-violet-500 focus-visible:ring-offset-2\",\n className,\n )}\n style={{ paddingTop: visibleBehind * offset }}\n >\n <div className=\"relative\">\n {/*\n * z-index decides what paints on top; the front card sizes the box.\n * The front card comes FIRST in the DOM, then the cards behind in walk\n * order: the ones behind are absolutely positioned against this box, so\n * their place in the source changes nothing visible -- but it is what\n * a DOM query, `textContent` and copy-paste read.\n */}\n {card(front, 0)}\n {Array.from({ length: visibleBehind }, (_, i) => i + 1).map((k) =>\n card((front + k) % count, k),\n )}\n </div>\n {hidden > 0 && (\n /*\n * Opaque in BOTH themes, because it sits over the cards peeking out\n * behind the front one -- often a light image header. The soft zinc\n * Badge is `dark:bg-zinc-900/30`, which let that image through and left\n * zinc-300 text on a light screenshot (fancy-app-update#1). The dark\n * pair is overridden here, not in Badge, so every other soft badge\n * keeps its look; the ring separates it from a zinc-900 card edge.\n */\n <Badge\n data-react-fancy-toast-stack-more=\"\"\n size=\"sm\"\n variant=\"soft\"\n color=\"zinc\"\n className=\"absolute -top-2 right-2 z-20 shadow-sm ring-1 ring-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-zinc-800 dark:text-zinc-100 dark:ring-[color:var(--fancy-border-dark,var(--color-zinc-700))]\"\n >\n +{hidden}\n </Badge>\n )}\n <span data-react-fancy-toast-stack-status=\"\" aria-live=\"polite\" className=\"sr-only\">\n {count > 1 ? `${front + 1} of ${count}` : \"\"}\n </span>\n </div>\n );\n\n if (position === \"inline\") return stackEl;\n\n return (\n <Portal>\n <div\n data-react-fancy-toast-stack-position={position}\n className={cn(\"pointer-events-none fixed z-[100]\", POSITION_STYLES[position])}\n >\n {stackEl}\n </div>\n </Portal>\n );\n}\n\nToastStack.displayName = \"ToastStack\";\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Portal } from \"../Portal\";\nimport { ToastContext } from \"./Toast.context\";\nimport { ToastItem } from \"./ToastItem\";\nimport { ToastStack } from \"./ToastStack\";\nimport type { ToastData, ToastProviderProps } from \"./Toast.types\";\n\nconst POSITION_STYLES = {\n \"top-right\": \"top-4 right-4\",\n \"top-left\": \"top-4 left-4\",\n \"bottom-right\": \"bottom-4 right-4\",\n \"bottom-left\": \"bottom-4 left-4\",\n} as const;\n\nfunction ToastProvider({\n children,\n position = \"bottom-right\",\n maxToasts = 5,\n}: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastData[]>([]);\n const idCounter = useRef(0);\n\n const toast = useCallback(\n (data: Omit<ToastData, \"id\">) => {\n const id = `toast-${++idCounter.current}`;\n setToasts((prev) => [...prev.slice(-(maxToasts - 1)), { ...data, id }]);\n return id;\n },\n [maxToasts],\n );\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const ctx = useMemo(() => ({ toasts, toast, dismiss }), [toasts, toast, dismiss]);\n\n return (\n <ToastContext.Provider value={ctx}>\n {children}\n <Portal>\n <div\n data-react-fancy-toast=\"\"\n className={cn(\n \"fixed z-[100] flex flex-col gap-2 pointer-events-none\",\n POSITION_STYLES[position],\n )}\n >\n {toasts.map((t) => (\n <ToastItem key={t.id} data={t} onDismiss={dismiss} />\n ))}\n </div>\n </Portal>\n </ToastContext.Provider>\n );\n}\n\nexport const Toast = {\n Provider: ToastProvider,\n Stack: ToastStack,\n Item: ToastItem,\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/inputs/MultiSwitch/MultiSwitch.colors.ts","../src/components/inputs/MultiSwitch/MultiSwitch.tsx"],"names":["useId","resolveOption","useFieldMode","useInlineEdit","useControllableState","useRef","useMemo","composeRefs","useState","useCallback","useEffect","DisplayValue","jsxs","cn","jsx","Field"],"mappings":"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","file":"chunk-KOAMRCSC.cjs","sourcesContent":["// Literal Tailwind class strings for every color in the v4 palette so the\n// scanner can detect them in the published dist (template-built names are\n// invisible to Tailwind's JIT). Shades follow badgeSolid: 600 / dark 500 for\n// the thumb, with dark label text on the light hues (amber, yellow, lime).\nimport type { Color } from \"../../../utils/types\";\n\nexport type MultiSwitchColorClasses = {\n /** The selected thumb's fill. */\n thumb: string;\n /** The selected option's label, readable on the thumb. */\n text: string;\n /** The container border while this option is selected. */\n border: string;\n};\n\nexport const multiSwitchColorClasses: Record<Color, MultiSwitchColorClasses> = {\n // The host's colour, from CSS variables -- no dark: variant, because a\n // host that themes per mode scopes the variables themselves.\n brand: { thumb: \"bg-brand\", text: \"text-brand-contrast\", border: \"border-brand\" },\n slate: { thumb: \"bg-slate-600 dark:bg-slate-500\", text: \"text-white\", border: \"border-slate-500 dark:border-slate-400\" },\n gray: { thumb: \"bg-gray-600 dark:bg-gray-500\", text: \"text-white\", border: \"border-gray-500 dark:border-gray-400\" },\n zinc: { thumb: \"bg-zinc-600 dark:bg-zinc-500\", text: \"text-white\", border: \"border-zinc-500 dark:border-zinc-400\" },\n neutral: { thumb: \"bg-neutral-600 dark:bg-neutral-500\", text: \"text-white\", border: \"border-neutral-500 dark:border-neutral-400\" },\n stone: { thumb: \"bg-stone-600 dark:bg-stone-500\", text: \"text-white\", border: \"border-stone-500 dark:border-stone-400\" },\n red: { thumb: \"bg-red-600 dark:bg-red-500\", text: \"text-white\", border: \"border-red-500 dark:border-red-400\" },\n orange: { thumb: \"bg-orange-600 dark:bg-orange-500\", text: \"text-white\", border: \"border-orange-500 dark:border-orange-400\" },\n amber: { thumb: \"bg-amber-400 dark:bg-amber-300\", text: \"text-amber-950\", border: \"border-amber-500 dark:border-amber-400\" },\n yellow: { thumb: \"bg-yellow-400 dark:bg-yellow-300\", text: \"text-yellow-950\", border: \"border-yellow-500 dark:border-yellow-400\" },\n lime: { thumb: \"bg-lime-400 dark:bg-lime-300\", text: \"text-lime-950\", border: \"border-lime-500 dark:border-lime-400\" },\n green: { thumb: \"bg-green-600 dark:bg-green-500\", text: \"text-white\", border: \"border-green-500 dark:border-green-400\" },\n emerald: { thumb: \"bg-emerald-600 dark:bg-emerald-500\", text: \"text-white\", border: \"border-emerald-500 dark:border-emerald-400\" },\n teal: { thumb: \"bg-teal-600 dark:bg-teal-500\", text: \"text-white\", border: \"border-teal-500 dark:border-teal-400\" },\n cyan: { thumb: \"bg-cyan-600 dark:bg-cyan-500\", text: \"text-white\", border: \"border-cyan-500 dark:border-cyan-400\" },\n sky: { thumb: \"bg-sky-600 dark:bg-sky-500\", text: \"text-white\", border: \"border-sky-500 dark:border-sky-400\" },\n blue: { thumb: \"bg-blue-600 dark:bg-blue-500\", text: \"text-white\", border: \"border-blue-500 dark:border-blue-400\" },\n indigo: { thumb: \"bg-indigo-600 dark:bg-indigo-500\", text: \"text-white\", border: \"border-indigo-500 dark:border-indigo-400\" },\n violet: { thumb: \"bg-violet-600 dark:bg-violet-500\", text: \"text-white\", border: \"border-violet-500 dark:border-violet-400\" },\n purple: { thumb: \"bg-purple-600 dark:bg-purple-500\", text: \"text-white\", border: \"border-purple-500 dark:border-purple-400\" },\n fuchsia: { thumb: \"bg-fuchsia-600 dark:bg-fuchsia-500\", text: \"text-white\", border: \"border-fuchsia-500 dark:border-fuchsia-400\" },\n pink: { thumb: \"bg-pink-600 dark:bg-pink-500\", text: \"text-white\", border: \"border-pink-500 dark:border-pink-400\" },\n rose: { thumb: \"bg-rose-600 dark:bg-rose-500\", text: \"text-white\", border: \"border-rose-500 dark:border-rose-400\" },\n};\n","import { useRef, useState, useEffect, useCallback, useId, useMemo, type Ref } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { composeRefs } from \"../../../utils/compose-refs\";\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 { resolveOption } from \"../inputs.utils\";\nimport type { Color, Size } from \"../../../utils/types\";\nimport type { MultiSwitchProps } from \"./MultiSwitch.types\";\nimport { multiSwitchColorClasses } from \"./MultiSwitch.colors\";\n\nconst BORDER_DEFAULT =\n \"border-[color:var(--fancy-border-strong,var(--color-zinc-300))] dark:border-[color:var(--fancy-border-strong-dark,var(--color-zinc-700))]\";\n\nconst sizeClasses: Record<Size, string> = {\n xs: \"px-2 py-1 text-xs\",\n sm: \"px-2.5 py-1.5 text-sm\",\n md: \"px-3 py-2 text-sm\",\n lg: \"px-4 py-2.5 text-base\",\n xl: \"px-5 py-3 text-lg\",\n};\n\nexport function MultiSwitch<V = string>({\n size = \"md\",\n dirty,\n error,\n label,\n labelHidden,\n description,\n required,\n disabled,\n className,\n id,\n name,\n list,\n value: controlledValue,\n defaultValue,\n onValueChange,\n linear,\n mode,\n ...rest\n}: MultiSwitchProps<V>) {\n const reactId = useId();\n // A `<label for>` cannot name a div[role=\"radiogroup\"], so the group points at\n // the label instead. Needs an id the label and the group both agree on.\n const labelId = label ? `${id ?? reactId}-label` : undefined;\n\n // resolveOption hands an object option back as-is, so `color` survives it.\n const resolvedOptions = list.map(resolveOption) as Array<\n ReturnType<typeof resolveOption<V>> & { color?: Color }\n >;\n const fallback = defaultValue ?? resolvedOptions[0]?.value;\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n const [value, setValue] = useControllableState(controlledValue, fallback as V, onValueChange);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const externalRef = (rest as { ref?: Ref<HTMLDivElement> }).ref;\n const containerSetRef = useMemo(() => composeRefs(externalRef, containerRef), [externalRef]);\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const [indicator, setIndicator] = useState<{ left: number; width: number } | null>(null);\n\n const selectedIndex = resolvedOptions.findIndex(\n (o) => o.value === value,\n );\n const selectedColor = resolvedOptions[selectedIndex]?.color;\n const colorClasses = selectedColor ? multiSwitchColorClasses[selectedColor] : undefined;\n\n const updateIndicator = useCallback(() => {\n const container = containerRef.current;\n const activeItem = itemRefs.current[selectedIndex];\n if (!container || !activeItem) {\n setIndicator(null);\n return;\n }\n const containerRect = container.getBoundingClientRect();\n const itemRect = activeItem.getBoundingClientRect();\n setIndicator({\n left: itemRect.left - containerRect.left,\n width: itemRect.width,\n });\n }, [selectedIndex]);\n\n useEffect(() => {\n updateIndicator();\n }, [updateIndicator]);\n\n // The selected option can change size without the selection changing: a\n // label carrying a live count (\"Changed 4\" -> \"Changed 12\"), a font loading\n // late, the container reflowing. Watch the selected option and the container\n // and re-measure. Without ResizeObserver (SSR, older jsdom) the thumb is\n // measured on selection only, as it always was.\n useEffect(() => {\n if (typeof ResizeObserver === \"undefined\") return;\n const container = containerRef.current;\n const activeItem = itemRefs.current[selectedIndex];\n if (!container || !activeItem) return;\n const observer = new ResizeObserver(() => updateIndicator());\n observer.observe(container);\n observer.observe(activeItem);\n return () => observer.disconnect();\n }, [updateIndicator, selectedIndex, showControl]);\n\n const control = !showControl ? (\n <DisplayValue size={size} interactive={interactive} onActivate={enterEdit}>\n {resolvedOptions.find((o) => o.value === value)?.label}\n </DisplayValue>\n ) : (\n <div\n {...rest}\n // React 19 passes `ref` to a function component as a plain prop, so a\n // caller's ref (Tooltip's anchor, or anyone's) arrives in `rest`. Spread\n // after `ref={containerRef}` it REPLACED the ref the thumb is measured\n // from, and the selected thumb never rendered. Feed both instead.\n ref={containerSetRef}\n data-react-fancy-multi-switch=\"\"\n role=\"radiogroup\"\n id={id}\n aria-labelledby={labelId}\n onBlur={(e) => {\n if (interactive && !e.currentTarget.contains(e.relatedTarget as Node)) exitEdit();\n }}\n className={cn(\n \"relative inline-flex rounded-lg border bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n colorClasses ? colorClasses.border : BORDER_DEFAULT,\n dirty && \"ring-2 ring-amber-400/50\",\n error && \"ring-2 ring-red-500/50\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className,\n )}\n >\n {indicator && (\n <span\n data-react-fancy-multi-switch-thumb=\"\"\n data-color={selectedColor}\n className={\n colorClasses\n ? `absolute top-0 bottom-0 rounded-lg ${colorClasses.thumb} transition-all duration-200 ease-out`\n : \"absolute top-0 bottom-0 rounded-lg bg-blue-600 transition-all duration-200 ease-out\"\n }\n style={{ left: indicator.left, width: indicator.width }}\n />\n )}\n {resolvedOptions.map((option, index) => {\n const isSelected = option.value === value;\n return (\n <button\n key={String(option.value)}\n ref={(el) => { itemRefs.current[index] = el; }}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n disabled={disabled || option.disabled}\n autoFocus={interactive && (selectedIndex === -1 ? index === 0 : isSelected)}\n onClick={() => {\n if (linear) {\n const nextIndex = (selectedIndex + 1) % resolvedOptions.length;\n setValue(resolvedOptions[nextIndex].value as V);\n } else {\n setValue(option.value as V);\n }\n }}\n className={cn(\n \"relative z-10 font-medium transition-colors duration-200\",\n sizeClasses[size],\n isSelected\n ? (colorClasses?.text ?? \"text-white\")\n : \"text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\",\n (disabled || option.disabled) && \"cursor-not-allowed\",\n )}\n >\n {option.label}\n </button>\n );\n })}\n {name && <input type=\"hidden\" name={name} value={String(value)} />}\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 htmlFor={id}\n size={size}\n >\n {control}\n </Field>\n );\n }\n\n return control;\n}\n\nMultiSwitch.displayName = \"MultiSwitch\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Sidebar/Sidebar.context.ts","../src/components/Sidebar/Sidebar.keyboard.ts","../src/components/Sidebar/SidebarItem.tsx","../src/components/Sidebar/SidebarGroup.tsx","../src/components/Sidebar/SidebarSubmenu.tsx","../src/components/Sidebar/SidebarToggle.tsx","../src/components/Sidebar/Sidebar.tsx"],"names":["createContext","useContext","useEffect","useCallback","jsx","jsxs","Fragment","cn","badgeDot","Tooltip","getLetters","useState","ChevronDown","PanelLeftOpen","PanelLeftClose","useControllableState","useRef"],"mappings":"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","file":"chunk-KOTUFZJ6.cjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { SidebarContextValue } from \"./Sidebar.types\";\n\nexport const SidebarContext = createContext<SidebarContextValue | null>(null);\n\nexport function useSidebar(): SidebarContextValue {\n const ctx = useContext(SidebarContext);\n if (!ctx) {\n throw new Error(\"useSidebar must be used within a <Sidebar> component\");\n }\n return ctx;\n}\n","import { useCallback, useEffect, type KeyboardEvent, type RefObject } from \"react\";\n\n/**\n * What arrow keys move between: every `Sidebar.Item`, plus an EXPANDED\n * `Sidebar.Submenu`'s trigger button. (A collapsed submenu renders a plain\n * `<div>`, which is not focusable, so there is nothing to move to.)\n *\n * Selected by the handles the components already render, so `keyboardNav`\n * adds no markup to a Sidebar that does not use it.\n */\nconst ITEM_SELECTOR =\n \"[data-react-fancy-sidebar-item], [data-react-fancy-sidebar-submenu] > button\";\n\nconst NAV_KEYS = new Set([\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"]);\n\n/**\n * Inside a closed submenu — the panel is collapsed to zero height but its\n * items are still mounted, so without this they would be focusable while\n * invisible. `SidebarSubmenu` sets `aria-expanded` on its trigger only when\n * `keyboardNav` is on; a submenu's OWN trigger is not inside its panel.\n */\nfunction inClosedSubmenu(el: HTMLElement, root: HTMLElement): boolean {\n let sub = el.parentElement?.closest<HTMLElement>(\"[data-react-fancy-sidebar-submenu]\");\n while (sub && root.contains(sub)) {\n const trigger = sub.querySelector<HTMLElement>(\":scope > button\");\n if (trigger && trigger !== el && trigger.getAttribute(\"aria-expanded\") === \"false\") {\n return true;\n }\n sub = sub.parentElement?.closest<HTMLElement>(\"[data-react-fancy-sidebar-submenu]\");\n }\n return false;\n}\n\nfunction isNavigable(el: HTMLElement, root: HTMLElement): boolean {\n if (el.getAttribute(\"aria-disabled\") === \"true\") return false;\n if ((el as HTMLButtonElement).disabled) return false;\n return !inClosedSubmenu(el, root);\n}\n\nfunction allItems(root: HTMLElement): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(ITEM_SELECTOR));\n}\n\n/**\n * Roving tabindex + ArrowUp / ArrowDown / Home / End for `Sidebar keyboardNav`.\n *\n * The tab stop is kept on the DOM rather than in React state because items\n * can mount from anywhere below the root (a consumer's own component, a\n * submenu opening) without the root re-rendering. A MutationObserver re-applies\n * it when the set of items, or their disabled / expanded / current state,\n * changes; focus moving onto an item (by click, Tab or arrow) makes that item\n * the stop. Turning `keyboardNav` off removes every tabindex it set.\n *\n * React never renders a `tabIndex` on these items itself, so writing the\n * attribute does not fight reconciliation. (A consumer who passes `tabIndex`\n * to an item while `keyboardNav` is on is overriding the roving stop, and\n * React will reassert theirs on its next render of that item.)\n */\nexport function useSidebarKeyboardNav(\n rootRef: RefObject<HTMLElement | null>,\n enabled: boolean,\n): ((event: KeyboardEvent<HTMLElement>) => void) | undefined {\n useEffect(() => {\n const root = rootRef.current;\n if (!enabled || !root) return;\n\n const touched = new Set<HTMLElement>();\n let current: HTMLElement | null = null;\n\n const apply = () => {\n const items = allItems(root);\n const navigable = items.filter((el) => isNavigable(el, root));\n if (!current || !navigable.includes(current)) {\n current =\n navigable.find((el) => el.getAttribute(\"aria-current\") === \"page\") ??\n navigable[0] ??\n null;\n }\n for (const el of items) {\n const want = el === current ? \"0\" : \"-1\";\n if (el.getAttribute(\"tabindex\") !== want) el.setAttribute(\"tabindex\", want);\n touched.add(el);\n }\n };\n\n const onFocusIn = (event: FocusEvent) => {\n const target = event.target as HTMLElement | null;\n if (!target || !target.matches(ITEM_SELECTOR) || !root.contains(target)) return;\n if (!isNavigable(target, root)) return;\n current = target;\n apply();\n };\n\n apply();\n root.addEventListener(\"focusin\", onFocusIn);\n const observer = new MutationObserver(apply);\n observer.observe(root, {\n childList: true,\n subtree: true,\n attributes: true,\n // NOT tabindex: that is what `apply` writes.\n attributeFilter: [\"aria-disabled\", \"aria-expanded\", \"aria-current\", \"disabled\"],\n });\n\n return () => {\n observer.disconnect();\n root.removeEventListener(\"focusin\", onFocusIn);\n for (const el of touched) el.removeAttribute(\"tabindex\");\n };\n }, [rootRef, enabled]);\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n const root = rootRef.current;\n if (!root || !NAV_KEYS.has(event.key)) return;\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return;\n // Only when an ITEM has focus. An input, textarea, select or\n // contenteditable inside the sidebar (a filter box, say) keeps its keys:\n // it does not match the item selector, so it never gets here.\n const target = event.target as HTMLElement;\n if (!target.matches(ITEM_SELECTOR)) return;\n\n const items = allItems(root);\n const navigable = items.filter((el) => isNavigable(el, root));\n if (navigable.length === 0) return;\n\n let next: HTMLElement | undefined;\n if (event.key === \"Home\") next = navigable[0];\n else if (event.key === \"End\") next = navigable[navigable.length - 1];\n else {\n // Walk from the target's position among ALL items, so a focused item\n // that is itself not navigable (disabled while focused) still moves.\n const from = items.indexOf(target);\n const step = event.key === \"ArrowDown\" ? 1 : -1;\n for (let i = from + step; i >= 0 && i < items.length; i += step) {\n if (navigable.includes(items[i])) {\n next = items[i];\n break;\n }\n }\n }\n\n // Handled either way: an arrow at the end of the list must not scroll\n // the page instead. No wrap, matching a list rather than a menu.\n event.preventDefault();\n next?.focus();\n },\n [rootRef],\n );\n\n return enabled ? onKeyDown : undefined;\n}\n","import type { ElementType, ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { badgeDot } from \"../Badge/Badge.colors\";\nimport { Tooltip } from \"../Tooltip\";\nimport { useSidebar } from \"./Sidebar.context\";\nimport type { SidebarDotColor, SidebarItemProps } from \"./Sidebar.types\";\n\n/**\n * The surface-coloured ring separates the dot from whatever it sits on (an\n * icon, the active-row fill) in both modes.\n */\nconst DOT_BASE =\n \"pointer-events-none absolute h-2 w-2 rounded-full ring-2 ring-[color:var(--fancy-surface,var(--color-white))] dark:ring-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\";\n\n/** Extract first 3 characters from a ReactNode if it's a string. */\nfunction getLetters(children: React.ReactNode): string {\n if (typeof children === \"string\") return children.slice(0, 3);\n return \"...\";\n}\n\nexport function SidebarItem({\n children,\n href,\n as: As,\n icon,\n active = false,\n disabled = false,\n badge,\n badgeLabel,\n collapsedBadge = false,\n dot,\n dotLabel,\n dotTooltip = false,\n onClick,\n className,\n ...rest\n}: SidebarItemProps) {\n const { collapsed, collapseMode } = useSidebar();\n\n // Link mode engages on `href` OR `as` — a `to`-based router (TanStack Router,\n // React Router) passes no href, and would otherwise render a <button> that\n // navigates nowhere. `onClick` now rides along in link mode instead of being\n // dropped: an item that both navigates and closes a drawer is the common case.\n const isLink = Boolean(href || As);\n const Tag = isLink ? ((As ?? \"a\") as ElementType) : \"button\";\n const tagProps = isLink\n ? { ...(href ? { href } : {}), onClick }\n : { type: \"button\" as const, onClick };\n\n const showIconOnly = collapsed && collapseMode === \"icons\" && icon;\n const showLetters = collapsed && (collapseMode === \"letters\" || (collapseMode === \"icons\" && !icon));\n\n const title = typeof children === \"string\" ? children : undefined;\n\n // --- Attention marks (6.1.0). All of this is inert unless `dot` or\n // `collapsedBadge` is passed, so an item without them renders exactly the\n // markup it always did.\n const dotColor: SidebarDotColor | null = dot === true ? \"red\" : dot || null;\n const showCollapsedBadge = collapsed && collapsedBadge && Boolean(badge);\n const hasMarks = dotColor !== null || showCollapsedBadge;\n // `badgeLabel` (6.2.0) is read in place of the visible badge, so it only\n // exists while the badge is actually rendered: always expanded, and\n // collapsed only with `collapsedBadge`.\n const badgeShown = Boolean(badge) && (!collapsed || showCollapsedBadge);\n const badgeLabelEl =\n badgeShown && badgeLabel ? (\n // The comma is the separator, so whatever renders before this must not\n // end in a space (\"tynn , 2 agents\"); see the two trailing spaces below.\n <span className=\"sr-only\" data-react-fancy-sidebar-badge-label=\"\">\n {`, ${badgeLabel}`}\n </span>\n ) : null;\n const dotLabelEl =\n dotColor && dotLabel ? (\n // The spaces are load-bearing: adjacent inline elements concatenate in\n // the accessible name, so without them it reads \"Inbox3 unread\".\n <span className=\"sr-only\" data-react-fancy-sidebar-dot-label=\"\">\n {\" \"}\n {dotLabel}\n {badgeLabelEl ? null : \" \"}\n </span>\n ) : null;\n // Collapsed, the item's visible content is only an icon (or an\n // abbreviation), and its name came from `title`. But accname takes CONTENT\n // over `title`, so a dot label or a badge count would become the item's\n // whole name (\"3 unread\" instead of \"Inbox\"). A visually hidden copy of the\n // label keeps the name first.\n const needsHiddenLabel = collapsed && (dotLabelEl !== null || showCollapsedBadge);\n\n const renderMarks = (anchoredToItem: boolean): ReactNode => (\n <>\n {showCollapsedBadge && (\n <span\n data-react-fancy-sidebar-badge=\"\"\n aria-hidden={badgeLabelEl ? \"true\" : undefined}\n className=\"pointer-events-none absolute -right-3 -top-2.5 whitespace-nowrap\"\n >\n {badge}\n </span>\n )}\n {dotColor && (\n <span\n aria-hidden=\"true\"\n data-react-fancy-sidebar-dot=\"\"\n data-color={dotColor}\n // A collapsed badge takes the top corner; the dot moves to the\n // bottom one rather than hiding under it.\n data-position={showCollapsedBadge ? \"bottom\" : \"top\"}\n className={cn(\n DOT_BASE,\n badgeDot[dotColor],\n anchoredToItem\n ? \"right-1.5 top-1.5\"\n : showCollapsedBadge\n ? \"-bottom-0.5 -right-0.5\"\n : \"-right-0.5 -top-0.5\",\n )}\n />\n )}\n </>\n );\n // Marks sit at the icon's corner when there is an icon, at the letters'\n // corner on a lettered rail, and at the item's own corner otherwise.\n const iconClass = cn(\n \"flex h-5 w-5 shrink-0 items-center justify-center\",\n hasMarks && \"relative\",\n );\n\n // `dotTooltip` (6.2.0) shows the dot's words to sighted users too. It needs\n // words to show, so it is inert without both `dot` and `dotLabel`.\n const showDotTooltip = dotTooltip && dotLabelEl !== null;\n\n const node = (\n <Tag\n {...tagProps}\n {...rest}\n data-react-fancy-sidebar-item=\"\"\n data-active={active || undefined}\n aria-current={active ? \"page\" : undefined}\n aria-disabled={disabled || undefined}\n // With a dot tooltip the native `title` would be a second bubble over\n // the first, so the tooltip takes over and carries the label itself.\n // The name does not depend on it: a collapsed item with a dot label\n // already has the visually hidden label copy.\n title={collapsed && !showDotTooltip ? title : undefined}\n className={cn(\n // `w-full` matters when the Tag is a <button>: form controls size to\n // FIT-CONTENT, not to their parent, so a long label made the item wider\n // than the sidebar and an ancestor clipped the overflow — which reads as\n // a label cut off mid-word rather than an ellipsis. Without this,\n // `min-w-0` on the label below can never engage, because the item is\n // never under width pressure in the first place.\n \"flex w-full items-center rounded-md text-sm font-medium transition-colors\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-blue-500\",\n collapsed ? \"justify-center px-2 py-2\" : \"gap-2 px-3 py-2\",\n active\n ? \"bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] text-[color:var(--fancy-text,var(--color-zinc-900))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\"\n : \"text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] hover:bg-[color:var(--fancy-surface-hover,var(--color-zinc-50))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))] dark:hover:bg-[color:var(--fancy-surface-hover-dark,color-mix(in_oklab,var(--color-zinc-800)_50%,transparent))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\",\n disabled && \"pointer-events-none opacity-50\",\n // Containing block for the visually hidden labels, and for a dot that\n // has no icon to sit on.\n hasMarks && \"relative\",\n className,\n )}\n >\n {needsHiddenLabel && (\n <span className=\"sr-only\" data-react-fancy-sidebar-label=\"\">\n {children}\n {badgeLabelEl && !dotLabelEl ? null : \" \"}\n </span>\n )}\n {collapsed && dotLabelEl}\n {collapsed && badgeLabelEl}\n {showIconOnly && (\n <span className={iconClass}>\n {icon}\n {renderMarks(false)}\n </span>\n )}\n {showLetters && (\n <span\n className={cn(\"text-xs font-semibold uppercase\", hasMarks && \"relative\")}\n // The abbreviation would otherwise read as part of the name (\"Inb\").\n aria-hidden={needsHiddenLabel || undefined}\n >\n {getLetters(children)}\n {renderMarks(false)}\n </span>\n )}\n {!collapsed && (\n <>\n {icon && (\n <span className={iconClass}>\n {icon}\n {renderMarks(false)}\n </span>\n )}\n {!icon && renderMarks(true)}\n {/*\n `min-w-0` is load-bearing, not tidiness. A flex item defaults to\n `min-width: auto`, which resolves to its MIN-CONTENT width — so with\n `truncate` alone the span refuses to shrink below the full label,\n and the item grows wider than the sidebar instead of ellipsing.\n The overflow then gets clipped by an ancestor, which looks like a\n mid-word cut rather than a truncation.\n\n Only shows up with labels longer than the sidebar is wide, which is\n why it survived: short nav labels never trigger it.\n */}\n <span className=\"min-w-0 flex-1 truncate text-left\">{children}</span>\n {dotLabelEl}\n {/*\n Label and badge are adjacent elements, and adjacent elements\n concatenate in a layout-unaware accessible name: \"tynn2\". A visually\n hidden space separates them (6.2.0); with `badgeLabel`, the label is\n read instead and the badge itself is hidden from assistive tech.\n */}\n {badge && (badgeLabelEl ?? <span className=\"sr-only\"> </span>)}\n {badge && (\n <span className=\"shrink-0\" aria-hidden={badgeLabelEl ? \"true\" : undefined}>\n {badge}\n </span>\n )}\n </>\n )}\n </Tag>\n );\n\n if (!showDotTooltip) return node;\n\n return (\n <Tooltip\n placement=\"right\"\n content={\n // aria-hidden, and deliberately NOT linked with aria-describedby:\n // the same words are already in the item's accessible name via\n // `dotLabel`, so exposing the bubble would read them twice.\n <span aria-hidden=\"true\" data-react-fancy-sidebar-tooltip=\"\">\n {collapsed && (\n <span className=\"block font-medium\" data-react-fancy-sidebar-tooltip-label=\"\">\n {children}\n </span>\n )}\n {dotLabel}\n </span>\n }\n >\n {node}\n </Tooltip>\n );\n}\n\nSidebarItem.displayName = \"SidebarItem\";\n","import { cn } from \"../../utils/cn\";\nimport { useSidebar } from \"./Sidebar.context\";\nimport type { SidebarGroupProps } from \"./Sidebar.types\";\n\nexport function SidebarGroup({ children, label, className }: SidebarGroupProps) {\n const { collapsed } = useSidebar();\n\n return (\n <div data-react-fancy-sidebar-group=\"\" className={cn(\"py-1\", className)}>\n {label && !collapsed && (\n <p className=\"mb-1 px-3 text-xs font-semibold uppercase tracking-wider text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\">\n {label}\n </p>\n )}\n {label && collapsed && (\n <div className=\"mx-auto mb-1 h-px w-6 bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]\" />\n )}\n {children}\n </div>\n );\n}\n\nSidebarGroup.displayName = \"SidebarGroup\";\n","import { useState } from \"react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { useSidebar } from \"./Sidebar.context\";\nimport type { SidebarSubmenuProps } from \"./Sidebar.types\";\n\n/** Extract first 3 characters from a string. */\nfunction getLetters(label: string): string {\n return label.slice(0, 3);\n}\n\nexport function SidebarSubmenu({\n children,\n label,\n icon,\n defaultOpen = false,\n className,\n}: SidebarSubmenuProps) {\n const [open, setOpen] = useState(defaultOpen);\n const { collapsed, collapseMode, keyboardNav } = useSidebar();\n\n const showIconOnly = collapsed && collapseMode === \"icons\" && icon;\n const showLetters = collapsed && (collapseMode === \"letters\" || (collapseMode === \"icons\" && !icon));\n\n // When collapsed, just show the icon/letters as a simple item (no expand)\n if (collapsed) {\n return (\n <div\n data-react-fancy-sidebar-submenu=\"\"\n title={label}\n className={cn(\n \"flex items-center justify-center rounded-md px-2 py-2 text-sm font-medium transition-colors\",\n \"text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] hover:bg-[color:var(--fancy-surface-hover,var(--color-zinc-50))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))]\",\n \"dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))] dark:hover:bg-[color:var(--fancy-surface-hover-dark,color-mix(in_oklab,var(--color-zinc-800)_50%,transparent))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\",\n className,\n )}\n >\n {showIconOnly && (\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center\">{icon}</span>\n )}\n {showLetters && (\n <span className=\"text-xs font-semibold uppercase\">{getLetters(label)}</span>\n )}\n </div>\n );\n }\n\n return (\n <div data-react-fancy-sidebar-submenu=\"\" className={className}>\n <button\n type=\"button\"\n // Only with `keyboardNav`, which reads it to skip a closed panel's\n // still-mounted items; without it the markup is unchanged from 6.0.\n aria-expanded={keyboardNav ? open : undefined}\n onClick={() => setOpen((v) => !v)}\n className={cn(\n \"flex w-full items-center gap-2 rounded-md px-3 py-2 text-sm font-medium transition-colors\",\n \"text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] hover:bg-[color:var(--fancy-surface-hover,var(--color-zinc-50))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))]\",\n \"dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))] dark:hover:bg-[color:var(--fancy-surface-hover-dark,color-mix(in_oklab,var(--color-zinc-800)_50%,transparent))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\",\n )}\n >\n {icon && <span className=\"flex h-5 w-5 shrink-0 items-center justify-center\">{icon}</span>}\n <span className=\"flex-1 text-left\">{label}</span>\n <ChevronDown\n className={cn(\n \"h-3.5 w-3.5 opacity-60 transition-transform duration-200\",\n open && \"rotate-180\",\n )}\n />\n </button>\n <div\n className={cn(\n \"grid transition-[grid-template-rows] duration-200\",\n open ? \"grid-rows-[1fr]\" : \"grid-rows-[0fr]\",\n )}\n >\n <div className=\"overflow-hidden\">\n <div className=\"ml-4 border-l border-[color:var(--fancy-border,var(--color-zinc-200))] pl-2 pt-1 dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))]\">\n {children}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nSidebarSubmenu.displayName = \"SidebarSubmenu\";\n","import { PanelLeftClose, PanelLeftOpen } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { useSidebar } from \"./Sidebar.context\";\nimport type { SidebarToggleProps } from \"./Sidebar.types\";\n\nexport function SidebarToggle({ className }: SidebarToggleProps) {\n const { collapsed, setCollapsed } = useSidebar();\n\n return (\n <button\n type=\"button\"\n data-react-fancy-sidebar-toggle=\"\"\n onClick={() => setCollapsed(!collapsed)}\n title={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n className={cn(\n \"flex items-center justify-center rounded-md p-1.5 text-zinc-400 transition-colors\",\n \"hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] hover:text-zinc-600 dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:hover:text-zinc-300\",\n className,\n )}\n >\n {collapsed ? (\n <PanelLeftOpen className=\"h-4 w-4\" />\n ) : (\n <PanelLeftClose className=\"h-4 w-4\" />\n )}\n </button>\n );\n}\n\nSidebarToggle.displayName = \"SidebarToggle\";\n","import { useRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useControllableState } from \"../../hooks\";\nimport { SidebarContext } from \"./Sidebar.context\";\nimport { useSidebarKeyboardNav } from \"./Sidebar.keyboard\";\nimport { SidebarItem } from \"./SidebarItem\";\nimport { SidebarGroup } from \"./SidebarGroup\";\nimport { SidebarSubmenu } from \"./SidebarSubmenu\";\nimport { SidebarToggle } from \"./SidebarToggle\";\nimport type { SidebarProps } from \"./Sidebar.types\";\n\nfunction SidebarRoot({\n children,\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n collapseMode = \"icons\",\n embedded = false,\n navLabel,\n keyboardNav = false,\n className,\n}: SidebarProps) {\n const [collapsed, setCollapsed] = useControllableState(\n controlledCollapsed,\n defaultCollapsed,\n onCollapsedChange,\n );\n const rootRef = useRef<HTMLElement>(null);\n const onKeyDown = useSidebarKeyboardNav(rootRef, keyboardNav);\n\n return (\n <SidebarContext.Provider value={{ collapsed, collapseMode, setCollapsed, keyboardNav }}>\n <aside\n ref={rootRef}\n onKeyDown={onKeyDown}\n data-react-fancy-sidebar=\"\"\n data-collapsed={collapsed || undefined}\n data-embedded={embedded || undefined}\n className={cn(\n \"flex flex-col gap-0.5 transition-[width] duration-200\",\n // The app-shell chrome. Correct for the rail this is usually used as,\n // and actively wrong inside a container that already draws its own —\n // a 240px rail in a 300px card puts its right border 240px in, which\n // reads as a stray line slicing the panel rather than an edge.\n !embedded && \"border-r border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n // Collapsed is a fixed icon rail either way; only the expanded width\n // defers to the container.\n collapsed ? \"w-16\" : embedded ? \"w-full\" : \"w-60\",\n className,\n )}\n >\n {navLabel ? (\n // The <aside> is a complementary landmark, not a navigation one, so\n // without this a screen reader's landmark list shows no navigation.\n // Opt-in: an element between the <aside> and its children is a DOM\n // change a consumer's CSS (`aside > a`) or tests may depend on. The\n // <nav> takes over the column layout and fills the rail, so a footer\n // pushed down with `mt-auto` still reaches the bottom.\n <nav\n data-react-fancy-sidebar-nav=\"\"\n aria-label={navLabel}\n className=\"flex min-h-0 flex-1 flex-col gap-0.5\"\n >\n {children}\n </nav>\n ) : (\n children\n )}\n </aside>\n </SidebarContext.Provider>\n );\n}\n\nexport const Sidebar = Object.assign(SidebarRoot, {\n Item: SidebarItem,\n Group: SidebarGroup,\n Submenu: SidebarSubmenu,\n Toggle: SidebarToggle,\n});\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/MobileMenu/MobileMenu.context.ts","../src/components/MobileMenu/MobileMenuFlyout.tsx","../src/components/MobileMenu/MobileMenuBottomBar.tsx","../src/components/MobileMenu/MobileMenuItem.tsx","../src/components/MobileMenu/MobileMenu.tsx"],"names":["createContext","useContext","useAnimation","useEscapeKey","useEffect","Portal","jsx","jsxs","cn","X"],"mappings":"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","file":"chunk-LFC2DL6H.cjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { MobileMenuContextValue } from \"./MobileMenu.types\";\n\nexport const MobileMenuContext = createContext<MobileMenuContextValue | null>(null);\n\nexport function useMobileMenu(): MobileMenuContextValue {\n const ctx = useContext(MobileMenuContext);\n if (!ctx) {\n throw new Error(\"useMobileMenu must be used within a <MobileMenu> component\");\n }\n return ctx;\n}\n","import { useEffect } from \"react\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { useEscapeKey } from \"../../hooks\";\nimport { useAnimation } from \"../../hooks\";\nimport { Portal } from \"../Portal\";\nimport { MobileMenuContext } from \"./MobileMenu.context\";\nimport type { MobileMenuFlyoutProps } from \"./MobileMenu.types\";\n\nexport function MobileMenuFlyout({\n children,\n open,\n onClose,\n side = \"left\",\n title,\n className,\n}: MobileMenuFlyoutProps) {\n const isLeft = side === \"left\";\n\n const { mounted, className: animClass, ref } = useAnimation({\n open,\n enterClass: isLeft ? \"fancy-slide-in-left\" : \"fancy-slide-in-right\",\n exitClass: isLeft ? \"fancy-slide-out-left\" : \"fancy-slide-out-right\",\n });\n\n useEscapeKey(onClose, open);\n\n // Lock body scroll\n useEffect(() => {\n if (open) {\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = prev;\n };\n }\n }, [open]);\n\n if (!mounted) return null;\n\n return (\n <Portal>\n <MobileMenuContext.Provider value={{ variant: \"flyout\" }}>\n <div data-react-fancy-mobile-menu-flyout=\"\" className=\"fixed inset-0 z-50\">\n {/* Backdrop */}\n <div\n className={cn(\n \"absolute inset-0 bg-black/40 transition-opacity\",\n open ? \"opacity-100\" : \"opacity-0\",\n )}\n onClick={onClose}\n />\n\n {/* Panel */}\n <div\n ref={ref as React.RefObject<HTMLDivElement>}\n className={cn(\n \"absolute top-0 flex h-full w-72 max-w-[80vw] flex-col bg-[color:var(--fancy-surface,var(--color-white))] shadow-xl dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n isLeft ? \"left-0\" : \"right-0\",\n animClass,\n className,\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between border-b border-[color:var(--fancy-border,var(--color-zinc-200))] px-4 py-3 dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))]\">\n {title && (\n <span className=\"text-sm font-semibold text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\">\n {title}\n </span>\n )}\n {!title && <span />}\n <button\n type=\"button\"\n onClick={onClose}\n className=\"flex h-8 w-8 items-center justify-center rounded-md text-zinc-400 transition-colors hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] hover:text-zinc-600 dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:hover:text-zinc-300\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto p-2\">\n {children}\n </div>\n </div>\n </div>\n </MobileMenuContext.Provider>\n </Portal>\n );\n}\n\nMobileMenuFlyout.displayName = \"MobileMenuFlyout\";\n","import { cn } from \"../../utils/cn\";\nimport { MobileMenuContext } from \"./MobileMenu.context\";\nimport type { MobileMenuBottomBarProps } from \"./MobileMenu.types\";\n\nexport function MobileMenuBottomBar({ children, className }: MobileMenuBottomBarProps) {\n return (\n <MobileMenuContext.Provider value={{ variant: \"bottom-bar\" }}>\n <nav\n data-react-fancy-mobile-menu-bottom-bar=\"\"\n className={cn(\n \"fixed inset-x-0 bottom-0 z-40 flex items-stretch border-t border-[color:var(--fancy-border,var(--color-zinc-200))] bg-white/95 backdrop-blur-sm dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-zinc-900/95\",\n \"pb-[env(safe-area-inset-bottom)]\",\n className,\n )}\n >\n {children}\n </nav>\n </MobileMenuContext.Provider>\n );\n}\n\nMobileMenuBottomBar.displayName = \"MobileMenuBottomBar\";\n","import type { ElementType } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useMobileMenu } from \"./MobileMenu.context\";\nimport type { MobileMenuItemProps } from \"./MobileMenu.types\";\n\nexport function MobileMenuItem({\n children,\n href,\n as: As,\n icon,\n active = false,\n disabled = false,\n badge,\n onClick,\n className,\n ...rest\n}: MobileMenuItemProps) {\n const { variant } = useMobileMenu();\n const isBottomBar = variant === \"bottom-bar\";\n\n // See NavigableProps: link mode engages on `href` OR `as`. Keeping `onClick`\n // in link mode matters most here — a mobile item usually has to close the menu\n // as well as navigate, and it was silently dropped.\n const isLink = Boolean(href || As);\n const Tag = isLink ? ((As ?? \"a\") as ElementType) : \"button\";\n const tagProps = isLink\n ? { ...(href ? { href } : {}), onClick }\n : { type: \"button\" as const, onClick };\n\n if (isBottomBar) {\n return (\n <Tag\n {...tagProps}\n {...rest}\n data-react-fancy-mobile-menu-item=\"\"\n data-active={active || undefined}\n aria-current={active ? \"page\" : undefined}\n aria-disabled={disabled || undefined}\n className={cn(\n \"flex flex-1 flex-col items-center justify-center gap-0.5 py-1.5 text-xs font-medium transition-colors\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-inset\",\n active\n ? \"text-blue-600 dark:text-blue-400\"\n : \"text-[color:var(--fancy-text-muted,var(--color-zinc-500))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\",\n disabled && \"pointer-events-none opacity-50\",\n className,\n )}\n >\n {icon && <span className=\"flex h-5 w-5 items-center justify-center\">{icon}</span>}\n <span className=\"truncate\">{children}</span>\n {badge && <span className=\"absolute right-1 top-0.5\">{badge}</span>}\n </Tag>\n );\n }\n\n // Flyout variant — same as a vertical menu item\n return (\n <Tag\n {...tagProps}\n {...rest}\n data-react-fancy-mobile-menu-item=\"\"\n data-active={active || undefined}\n aria-current={active ? \"page\" : undefined}\n aria-disabled={disabled || undefined}\n className={cn(\n \"flex w-full items-center gap-3 rounded-md px-3 py-2.5 text-sm font-medium transition-colors\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-blue-500\",\n active\n ? \"bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] text-[color:var(--fancy-text,var(--color-zinc-900))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\"\n : \"text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] hover:bg-[color:var(--fancy-surface-hover,var(--color-zinc-50))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))] dark:hover:bg-[color:var(--fancy-surface-hover-dark,color-mix(in_oklab,var(--color-zinc-800)_50%,transparent))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\",\n disabled && \"pointer-events-none opacity-50\",\n className,\n )}\n >\n {icon && <span className=\"flex h-5 w-5 shrink-0 items-center justify-center\">{icon}</span>}\n <span className=\"flex-1 truncate text-left\">{children}</span>\n {badge && <span className=\"shrink-0\">{badge}</span>}\n </Tag>\n );\n}\n\nMobileMenuItem.displayName = \"MobileMenuItem\";\n","import { MobileMenuFlyout } from \"./MobileMenuFlyout\";\nimport { MobileMenuBottomBar } from \"./MobileMenuBottomBar\";\nimport { MobileMenuItem } from \"./MobileMenuItem\";\n\nexport const MobileMenu = {\n Flyout: MobileMenuFlyout,\n BottomBar: MobileMenuBottomBar,\n Item: MobileMenuItem,\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Pagination/Pagination.tsx"],"names":[],"mappings":";;;;;AAKA,SAAS,KAAA,CAAM,OAAe,GAAA,EAAuB;AACnD,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,GAAA,GAAM,KAAA,GAAQ,CAAA,EAAE,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,KAAA,GAAQ,CAAC,CAAA;AACpE;AAEA,SAAS,QAAA,CACP,IAAA,EACA,UAAA,EACA,QAAA,EACyB;AACzB,EAAA,MAAM,UAAA,GAAa,WAAW,CAAA,GAAI,CAAA;AAClC,EAAA,IAAI,UAAA,IAAc,UAAA,EAAY,OAAO,KAAA,CAAM,GAAG,UAAU,CAAA;AAExD,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,IAAA,GAAO,UAAU,CAAC,CAAA;AAC/C,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,IAAA,GAAO,UAAU,UAAU,CAAA;AAEzD,EAAA,MAAM,mBAAmB,WAAA,GAAc,CAAA;AACvC,EAAA,MAAM,iBAAA,GAAoB,eAAe,UAAA,GAAa,CAAA;AAEtD,EAAA,IAAI,CAAC,oBAAoB,iBAAA,EAAmB;AAC1C,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,WAAW,CAAC,CAAA;AAC3C,IAAA,OAAO,CAAC,GAAG,SAAA,EAAW,UAAA,EAAY,UAAU,CAAA;AAAA,EAC9C;AAEA,EAAA,IAAI,gBAAA,IAAoB,CAAC,iBAAA,EAAmB;AAC1C,IAAA,MAAM,aAAa,KAAA,CAAM,UAAA,IAAc,CAAA,GAAI,QAAA,GAAW,IAAI,UAAU,CAAA;AACpE,IAAA,OAAO,CAAC,CAAA,EAAG,UAAA,EAAY,GAAG,UAAU,CAAA;AAAA,EACtC;AAEA,EAAA,OAAO;AAAA,IACL,CAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAG,KAAA,CAAM,WAAA,EAAa,YAAY,CAAA;AAAA,IAClC,UAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,UAAA,CAAW;AAAA,EACzB,IAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA,GAAe,CAAA;AAAA,EACf;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,KAAA,GAAQ,OAAA;AAAA,IACZ,MAAM,QAAA,CAAS,IAAA,EAAM,UAAA,EAAY,YAAY,CAAA;AAAA,IAC7C,CAAC,IAAA,EAAM,UAAA,EAAY,YAAY;AAAA,GACjC;AAEA,EAAA,IAAI,UAAA,IAAc,GAAG,OAAO,IAAA;AAE5B,EAAA,MAAM,OAAA,GACJ,iGAAA;AACF,EAAA,MAAM,UAAA,GACJ,wRAAA;AACF,EAAA,MAAM,SAAA,GACJ,2FAAA;AACF,EAAA,MAAM,WAAA,GAAc,+BAAA;AAEpB,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,YAAA,EAAW,YAAA,EAAa,6BAAA,EAA4B,IAAG,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA,EAC5G,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,UAAU,IAAA,IAAQ,CAAA;AAAA,QAClB,OAAA,EAAS,MAAM,YAAA,CAAa,IAAA,GAAO,CAAC,CAAA;AAAA,QACpC,WAAW,EAAA,CAAG,OAAA,EAAS,YAAY,IAAA,IAAQ,CAAA,IAAK,aAAa,MAAM,CAAA;AAAA,QACnE,YAAA,EAAW,eAAA;AAAA,QAEX,QAAA,kBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,KACzB;AAAA,IAEC,KAAA,CAAM,GAAA;AAAA,MAAI,CAAC,CAAA,EAAG,CAAA,KACb,CAAA,KAAM,UAAA,mBACJ,GAAA,CAAC,MAAA,EAAA,EAAoB,SAAA,EAAU,oBAAA,EAAqB,QAAA,EAAA,KAAA,EAAA,EAAzC,CAAA,EAAA,EAAK,CAAC,EAEjB,CAAA,mBAEA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,MAAM,YAAA,CAAa,CAAC,CAAA;AAAA,UAC7B,cAAA,EAAc,CAAA,KAAM,IAAA,GAAO,MAAA,GAAS,MAAA;AAAA,UACpC,SAAA,EAAW,EAAA;AAAA,YACT,OAAA;AAAA,YACA,CAAA,KAAM,OAAO,SAAA,GAAY,UAAA;AAAA,YACzB;AAAA,WACF;AAAA,UAEC,QAAA,EAAA;AAAA,SAAA;AAAA,QAVI;AAAA;AAWP,KAEJ;AAAA,oBAEA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,UAAU,IAAA,IAAQ,UAAA;AAAA,QAClB,OAAA,EAAS,MAAM,YAAA,CAAa,IAAA,GAAO,CAAC,CAAA;AAAA,QACpC,SAAA,EAAW,EAAA;AAAA,UACT,OAAA;AAAA,UACA,UAAA;AAAA,UACA,QAAQ,UAAA,IAAc,WAAA;AAAA,UACtB;AAAA,SACF;AAAA,QACA,YAAA,EAAW,WAAA;AAAA,QAEX,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA;AAC1B,GAAA,EACF,CAAA;AAEJ;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA","file":"chunk-LKN7FYW6.js","sourcesContent":["import { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { useMemo } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { PaginationProps } from \"./Pagination.types\";\n\nfunction range(start: number, end: number): number[] {\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n}\n\nfunction getPages(\n page: number,\n totalPages: number,\n siblings: number,\n): (number | \"ellipsis\")[] {\n const totalSlots = siblings * 2 + 5; // siblings + boundaries + ellipses + current\n if (totalPages <= totalSlots) return range(1, totalPages);\n\n const leftSibling = Math.max(page - siblings, 1);\n const rightSibling = Math.min(page + siblings, totalPages);\n\n const showLeftEllipsis = leftSibling > 2;\n const showRightEllipsis = rightSibling < totalPages - 1;\n\n if (!showLeftEllipsis && showRightEllipsis) {\n const leftRange = range(1, 3 + siblings * 2);\n return [...leftRange, \"ellipsis\", totalPages];\n }\n\n if (showLeftEllipsis && !showRightEllipsis) {\n const rightRange = range(totalPages - (2 + siblings * 2), totalPages);\n return [1, \"ellipsis\", ...rightRange];\n }\n\n return [\n 1,\n \"ellipsis\",\n ...range(leftSibling, rightSibling),\n \"ellipsis\",\n totalPages,\n ];\n}\n\nexport function Pagination({\n page,\n onPageChange,\n totalPages,\n siblingCount = 1,\n className,\n}: PaginationProps) {\n const pages = useMemo(\n () => getPages(page, totalPages, siblingCount),\n [page, totalPages, siblingCount],\n );\n\n if (totalPages <= 1) return null;\n\n const btnBase =\n \"inline-flex h-9 min-w-9 items-center justify-center rounded-lg border text-sm transition-colors\";\n const btnDefault =\n \"border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] hover:bg-zinc-50 dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))] dark:hover:bg-zinc-800\";\n const btnActive =\n \"border-zinc-900 bg-zinc-900 text-white dark:border-white dark:bg-white dark:text-zinc-900\";\n const btnDisabled = \"cursor-not-allowed opacity-50\";\n\n return (\n <nav aria-label=\"Pagination\" data-react-fancy-pagination=\"\" className={cn(\"flex items-center gap-1\", className)}>\n <button\n type=\"button\"\n disabled={page <= 1}\n onClick={() => onPageChange(page - 1)}\n className={cn(btnBase, btnDefault, page <= 1 && btnDisabled, \"px-2\")}\n aria-label=\"Previous page\"\n >\n <ChevronLeft size={16} />\n </button>\n\n {pages.map((p, i) =>\n p === \"ellipsis\" ? (\n <span key={`e-${i}`} className=\"px-1 text-zinc-400\">\n ...\n </span>\n ) : (\n <button\n key={p}\n type=\"button\"\n onClick={() => onPageChange(p)}\n aria-current={p === page ? \"page\" : undefined}\n className={cn(\n btnBase,\n p === page ? btnActive : btnDefault,\n \"px-2\",\n )}\n >\n {p}\n </button>\n ),\n )}\n\n <button\n type=\"button\"\n disabled={page >= totalPages}\n onClick={() => onPageChange(page + 1)}\n className={cn(\n btnBase,\n btnDefault,\n page >= totalPages && btnDisabled,\n \"px-2\",\n )}\n aria-label=\"Next page\"\n >\n <ChevronRight size={16} />\n </button>\n </nav>\n );\n}\n\nPagination.displayName = \"Pagination\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/CodeBlock/CodeBlock.tsx"],"names":["CodeBlock"],"mappings":"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","file":"chunk-MI57NAKF.js","sourcesContent":["import { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n highlightCodeWithVariables,\n tokenize,\n type Token,\n} from \"@particle-academy/fancy-file-commons\";\nimport { cn } from \"../../utils/cn\";\nimport { visuallyHidden } from \"../../utils/visually-hidden\";\nimport { Button } from \"../Button/Button\";\nimport { defaultClipboardWriter, runWriter } from \"../ContentRenderer/copy\";\nimport {\n CODE_PALETTE_ATTR,\n CODE_PALETTE_DARK_CLASS,\n CODE_PALETTE_STYLE,\n paletteColor,\n} from \"../CodeView/code-palette\";\nimport type { CodeBlockProps } from \"./CodeBlock.types\";\n\n/** How long \"Copied\" / \"Copy failed\" stays before the button resets. */\nconst FEEDBACK_MS = 2000;\n\n/**\n * Tokens for any language fancy-file-commons can highlight (aliases included,\n * case-insensitive); none for anything else, which renders as plain text.\n * `snippet: true` because a code block shows documentation snippets: PHP\n * without an opening `<?php` is read as PHP, not inline HTML. `tokenize`\n * returns sorted, non-overlapping, in-bounds tokens, which `highlightLines`\n * relies on.\n */\nfunction tokensFor(code: string, language: string): Token[] {\n return tokenize(code, language, { snippet: true }) ?? [];\n}\n\n/**\n * Highlight one line at a time, clipping each token to the line it falls on, so\n * a token that spans lines (an HTML comment) keeps its colour on every line.\n * `highlightCodeWithVariables` escapes every slice it emits, highlighted or not,\n * and writes no colour value: spans read the palette variables on the root.\n */\nfunction highlightLines(code: string, tokens: Token[]): string[] {\n const out: string[] = [];\n let start = 0;\n let ti = 0;\n for (const line of code.split(\"\\n\")) {\n const end = start + line.length;\n while (ti < tokens.length && tokens[ti].end <= start) ti++;\n const clipped: Token[] = [];\n for (let j = ti; j < tokens.length && tokens[j].start < end; j++) {\n const s = Math.max(tokens[j].start, start) - start;\n const e = Math.min(tokens[j].end, end) - start;\n if (e > s) clipped.push({ type: tokens[j].type, start: s, end: e });\n }\n out.push(highlightCodeWithVariables(line, clipped));\n start = end + 1;\n }\n return out;\n}\n\ntype CopyState = \"idle\" | \"copied\" | \"failed\";\n\n// Matches CodeView's text metrics so the two sit together.\nconst TEXT_METRICS = \"m-0 p-3 font-mono text-xs leading-relaxed\";\n\n/**\n * A display-only code block: `<pre><code>`, syntax-highlighted where a grammar\n * exists, with an optional copy button. It contains no textarea, input, select\n * or contenteditable element, so it is safe on pages that must not accept\n * input. For an editable or selectable source surface, use `CodeView`.\n */\nexport const CodeBlock = forwardRef<HTMLDivElement, CodeBlockProps>(function CodeBlock(\n {\n code,\n language = \"plaintext\",\n copyable = true,\n title,\n showLineNumbers = false,\n wrap = false,\n copyLabels,\n onCopyCode,\n className,\n style,\n ...rest\n },\n ref,\n) {\n const tokens = useMemo(() => tokensFor(code, language), [code, language]);\n const html = useMemo(\n () => (showLineNumbers ? null : highlightCodeWithVariables(code, tokens)),\n [code, tokens, showLineNumbers],\n );\n const lines = useMemo(() => {\n if (!showLineNumbers) return null;\n const all = highlightLines(code, tokens);\n // A trailing newline ends the last line; it does not start a new one.\n if (all.length > 1 && code.endsWith(\"\\n\")) all.pop();\n return all;\n }, [code, tokens, showLineNumbers]);\n\n const [copyState, setCopyState] = useState<CopyState>(\"idle\");\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n useEffect(() => () => clearTimeout(timer.current), []);\n\n // Latest props at click time, without re-creating the handler.\n const latest = useRef({ code, onCopyCode });\n latest.current = { code, onCopyCode };\n\n const onCopyClick = useCallback(async () => {\n const { code: text, onCopyCode: report } = latest.current;\n // Raw `code`, never the highlighted HTML. `defaultClipboardWriter` throws\n // when `navigator.clipboard` is absent (SSR, insecure context), and\n // `runWriter` turns a throw, rejection or hang into `false`.\n const ok = await runWriter(defaultClipboardWriter, { kind: \"code\", text, html: \"\" });\n setCopyState(ok ? \"copied\" : \"failed\");\n clearTimeout(timer.current);\n timer.current = setTimeout(() => setCopyState(\"idle\"), FEEDBACK_MS);\n report?.({ text, ok });\n }, []);\n\n const labels = {\n copy: copyLabels?.copy ?? \"Copy code\",\n copied: copyLabels?.copied ?? \"Copied\",\n failed: copyLabels?.failed ?? \"Copy failed\",\n };\n const label = copyState === \"copied\" ? labels.copied : copyState === \"failed\" ? labels.failed : labels.copy;\n const hasHeader = title != null && title !== false;\n const floating = copyable && !hasHeader;\n\n const copyButton = copyable ? (\n <Button\n type=\"button\"\n size=\"xs\"\n variant=\"ghost\"\n icon={copyState === \"copied\" ? \"check\" : copyState === \"failed\" ? \"x\" : \"copy\"}\n aria-label={label}\n title={label}\n data-react-fancy-code-block-copy=\"\"\n data-copy-state={copyState}\n onClick={onCopyClick}\n className={cn(\n floating && \"opacity-80 group-hover:opacity-100 focus-visible:opacity-100\",\n )}\n style={floating ? { backgroundColor: paletteColor(\"background\") } : undefined}\n >\n {/* Visible feedback; idle is icon-only when floating over the code. */}\n {copyState !== \"idle\" ? label : hasHeader ? \"Copy\" : undefined}\n </Button>\n ) : null;\n\n const gutterWidth = lines ? `${String(lines.length).length}ch` : undefined;\n\n return (\n <div\n ref={ref}\n data-react-fancy-code-block=\"\"\n data-language={language}\n data-wrap={wrap ? \"true\" : \"false\"}\n {...{ [CODE_PALETTE_ATTR]: \"\" }}\n className={cn(\n \"group relative overflow-hidden rounded-lg border\",\n CODE_PALETTE_DARK_CLASS,\n className,\n )}\n style={{\n // Both palettes; the dark one applies under the consumer's `dark`\n // variant or a `.dark` / `[data-theme=\"dark\"]` ancestor (code-palette).\n ...CODE_PALETTE_STYLE,\n backgroundColor: paletteColor(\"background\"),\n color: paletteColor(\"foreground\"),\n borderColor: paletteColor(\"gutterBorder\"),\n // `relative` inline too: the floating button and the live region are\n // absolute, and must not escape a host whose Tailwind lacks the class.\n position: \"relative\",\n ...style,\n }}\n {...rest}\n >\n {hasHeader && (\n <div\n data-react-fancy-code-block-header=\"\"\n className=\"flex items-center justify-between gap-2 border-b py-1 pl-3 pr-1 text-xs\"\n style={{\n backgroundColor: paletteColor(\"gutterBackground\"),\n color: paletteColor(\"gutterForeground\"),\n borderColor: paletteColor(\"gutterBorder\"),\n }}\n >\n <span data-react-fancy-code-block-title=\"\" className=\"min-w-0 truncate font-mono\">\n {title}\n </span>\n {copyButton}\n </div>\n )}\n\n <pre\n data-react-fancy-code-block-pre=\"\"\n className={cn(TEXT_METRICS, \"border-none\", wrap ? \"overflow-x-hidden\" : \"overflow-x-auto\", floating && \"pr-12\")}\n style={{\n whiteSpace: wrap ? \"pre-wrap\" : \"pre\",\n overflowWrap: wrap ? \"break-word\" : \"normal\",\n backgroundColor: \"transparent\",\n color: \"inherit\",\n }}\n >\n {lines ? (\n <code\n data-react-fancy-code-block-code=\"\"\n style={{ display: wrap ? \"block\" : \"inline-block\", minWidth: \"100%\" }}\n >\n {lines.map((lineHtml, i) => (\n <span key={i} data-react-fancy-code-block-line={i + 1} style={{ display: \"flex\" }}>\n <span\n data-react-fancy-code-block-line-number=\"\"\n aria-hidden=\"true\"\n className=\"select-none\"\n style={{\n flex: \"none\",\n width: gutterWidth,\n marginRight: \"1.5ch\",\n textAlign: \"right\",\n color: paletteColor(\"gutterForeground\"),\n userSelect: \"none\",\n }}\n >\n {i + 1}\n </span>\n <span\n data-react-fancy-code-block-line-content=\"\"\n style={{ flex: \"1 1 auto\", minWidth: 0 }}\n dangerouslySetInnerHTML={{ __html: lineHtml }}\n />\n </span>\n ))}\n </code>\n ) : (\n <code data-react-fancy-code-block-code=\"\" dangerouslySetInnerHTML={{ __html: html ?? \"\" }} />\n )}\n </pre>\n\n {floating && (\n <div\n data-react-fancy-code-block-actions=\"\"\n className=\"absolute right-2 top-2\"\n style={{ position: \"absolute\", right: \"0.5rem\", top: \"0.5rem\" }}\n >\n {copyButton}\n </div>\n )}\n\n {copyable && (\n <span role=\"status\" aria-live=\"polite\" className=\"sr-only\" style={visuallyHidden}>\n {copyState === \"idle\" ? \"\" : label}\n </span>\n )}\n </div>\n );\n});\n\nCodeBlock.displayName = \"CodeBlock\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Popover/Popover.context.ts","../src/components/Popover/PopoverTrigger.tsx","../src/components/Popover/PopoverContent.tsx","../src/components/Popover/Popover.tsx"],"names":["createContext","useContext","jsx","cn","useRef","useFloatingPosition","useCallback","useOutsideClick","useEscapeKey","Portal","useState","useMemo"],"mappings":"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","file":"chunk-MKGWHSNV.cjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { PopoverContextValue } from \"./Popover.types\";\n\nexport const PopoverContext = createContext<PopoverContextValue | null>(null);\n\nexport function usePopover(): PopoverContextValue {\n const ctx = useContext(PopoverContext);\n if (!ctx) {\n throw new Error(\"Popover compound components must be used within <Popover>\");\n }\n return ctx;\n}\n","import { cn } from \"../../utils/cn\";\nimport { usePopover } from \"./Popover.context\";\nimport type { PopoverTriggerProps } from \"./Popover.types\";\n\nexport function PopoverTrigger({ children, className, ...rest }: PopoverTriggerProps) {\n const { setOpen, open, anchorRef, hover, onHoverEnter, onHoverLeave } = usePopover();\n\n return (\n <span\n {...rest}\n ref={anchorRef as React.RefObject<HTMLSpanElement>}\n data-react-fancy-popover-trigger=\"\"\n className={cn(\"inline-flex\", className)}\n onClick={hover ? undefined : () => setOpen(!open)}\n onMouseEnter={hover ? onHoverEnter : undefined}\n onMouseLeave={hover ? onHoverLeave : undefined}\n aria-expanded={open}\n aria-haspopup\n >\n {children}\n </span>\n );\n}\n\nPopoverTrigger.displayName = \"PopoverTrigger\";\n","import { useCallback, useRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Portal } from \"../Portal\";\nimport { usePopover } from \"./Popover.context\";\nimport { useFloatingPosition } from \"../../hooks/use-floating-position\";\nimport { useOutsideClick } from \"../../hooks/use-outside-click\";\nimport { useEscapeKey } from \"../../hooks/use-escape-key\";\nimport type { PopoverContentProps } from \"./Popover.types\";\n\nexport function PopoverContent({ children, className, style, ...rest }: PopoverContentProps) {\n const { open, setOpen, anchorRef, floatingRef, placement, offset, hover, onHoverEnter, onHoverLeave } = usePopover();\n const outsideRef = useRef<HTMLDivElement>(null);\n\n const position = useFloatingPosition(anchorRef, floatingRef, {\n placement,\n offset,\n enabled: open,\n });\n\n const close = useCallback(() => setOpen(false), [setOpen]);\n useOutsideClick(outsideRef, close, open && !hover, anchorRef);\n useEscapeKey(close, open);\n\n // Hide until position is calculated to prevent flash at (-9999, -9999)\n const positioned = position.x !== -9999 && position.y !== -9999;\n\n if (!open) return null;\n\n return (\n <Portal>\n <div\n {...rest}\n ref={(node) => {\n outsideRef.current = node;\n (floatingRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n data-react-fancy-popover=\"\"\n className={cn(\n \"fixed z-50 rounded-xl border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-4 text-zinc-700 shadow-lg dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))] dark:text-zinc-200 dark:shadow-zinc-950/50\",\n positioned ? \"fancy-scale-in\" : \"invisible\",\n className,\n )}\n style={{ ...style, left: position.x, top: position.y }}\n onMouseEnter={hover ? onHoverEnter : undefined}\n onMouseLeave={hover ? onHoverLeave : undefined}\n >\n {children}\n </div>\n </Portal>\n );\n}\n\nPopoverContent.displayName = \"PopoverContent\";\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { PopoverContext } from \"./Popover.context\";\nimport { PopoverTrigger } from \"./PopoverTrigger\";\nimport { PopoverContent } from \"./PopoverContent\";\nimport type { PopoverProps } from \"./Popover.types\";\n\nfunction PopoverRoot({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n placement = \"bottom\",\n offset = 8,\n hover = false,\n hoverDelay = 200,\n hoverCloseDelay = 300,\n}: PopoverProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n\n const anchorRef = useRef<HTMLElement>(null);\n const floatingRef = useRef<HTMLDivElement>(null);\n const hoverTimeoutRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const onHoverEnter = useCallback(() => {\n if (!hover) return;\n clearTimeout(hoverTimeoutRef.current);\n hoverTimeoutRef.current = setTimeout(() => setOpen(true), hoverDelay);\n }, [hover, hoverDelay, setOpen]);\n\n const onHoverLeave = useCallback(() => {\n if (!hover) return;\n clearTimeout(hoverTimeoutRef.current);\n hoverTimeoutRef.current = setTimeout(() => setOpen(false), hoverCloseDelay);\n }, [hover, hoverCloseDelay, setOpen]);\n\n const ctx = useMemo(\n () => ({ open, setOpen, anchorRef, floatingRef, placement, offset, hover, onHoverEnter, onHoverLeave }),\n [open, setOpen, placement, offset, hover, onHoverEnter, onHoverLeave],\n );\n\n return (\n <PopoverContext.Provider value={ctx}>{children}</PopoverContext.Provider>\n );\n}\n\nexport const Popover = Object.assign(PopoverRoot, {\n Trigger: PopoverTrigger,\n Content: PopoverContent,\n});\n"]}