react-public-components 1.2.3 → 1.2.5

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 (238) hide show
  1. package/README.md +5 -2
  2. package/dist/AnnouncementBar/index.cjs +3 -2
  3. package/dist/AnnouncementBar/index.css +102 -11
  4. package/dist/AnnouncementBar/index.css.map +1 -1
  5. package/dist/AnnouncementBar/index.d.ts +22 -3
  6. package/dist/AnnouncementBar/index.js +2 -1
  7. package/dist/AudioPlayer/index.cjs +3 -3
  8. package/dist/AudioPlayer/index.js +2 -2
  9. package/dist/CeilingBox/index.cjs +9 -0
  10. package/dist/CeilingBox/index.cjs.map +1 -0
  11. package/dist/CeilingBox/index.css +25 -0
  12. package/dist/CeilingBox/index.css.map +1 -0
  13. package/dist/CeilingBox/index.d.ts +28 -0
  14. package/dist/CeilingBox/index.js +3 -0
  15. package/dist/CeilingBox/index.js.map +1 -0
  16. package/dist/CodeSnippet/index.cjs +3 -2
  17. package/dist/CodeSnippet/index.css +157 -0
  18. package/dist/CodeSnippet/index.css.map +1 -1
  19. package/dist/CodeSnippet/index.d.ts +40 -4
  20. package/dist/CodeSnippet/index.js +2 -1
  21. package/dist/CodeSnippet/sandbox.d.ts +26 -0
  22. package/dist/CollapseBox/index.cjs +3 -3
  23. package/dist/CollapseBox/index.js +2 -2
  24. package/dist/ColorPicker/index.cjs +5 -5
  25. package/dist/ColorPicker/index.js +2 -2
  26. package/dist/ContextMenu/index.cjs +3 -3
  27. package/dist/ContextMenu/index.js +2 -2
  28. package/dist/CopyButton/index.cjs +3 -3
  29. package/dist/CopyButton/index.js +2 -2
  30. package/dist/CronPicker/index.cjs +4 -4
  31. package/dist/CronPicker/index.js +3 -3
  32. package/dist/DebounceSelect/index.cjs +3 -3
  33. package/dist/DebounceSelect/index.js +2 -2
  34. package/dist/DisabledBox/index.cjs +3 -3
  35. package/dist/DisabledBox/index.js +2 -2
  36. package/dist/DragSortList/index.cjs +3 -2
  37. package/dist/DragSortList/index.css +82 -13
  38. package/dist/DragSortList/index.css.map +1 -1
  39. package/dist/DragSortList/index.d.ts +8 -2
  40. package/dist/DragSortList/index.js +2 -1
  41. package/dist/FilePreviewer/index.cjs +4 -4
  42. package/dist/FilePreviewer/index.js +2 -2
  43. package/dist/Fullscreen/index.cjs +3 -3
  44. package/dist/Fullscreen/index.js +2 -2
  45. package/dist/GuidedTour/index.cjs +3 -3
  46. package/dist/GuidedTour/index.js +2 -2
  47. package/dist/ImageCropper/index.cjs +3 -3
  48. package/dist/ImageCropper/index.js +2 -2
  49. package/dist/InfiniteScrollList/index.cjs +3 -3
  50. package/dist/InfiniteScrollList/index.js +2 -2
  51. package/dist/JsonEditor/index.cjs +4 -4
  52. package/dist/JsonEditor/index.js +3 -3
  53. package/dist/KeyValEditor/index.cjs +3 -3
  54. package/dist/KeyValEditor/index.js +2 -2
  55. package/dist/LazyLoadBox/index.cjs +18 -0
  56. package/dist/LazyLoadBox/index.cjs.map +1 -0
  57. package/dist/LazyLoadBox/index.css +57 -0
  58. package/dist/LazyLoadBox/index.css.map +1 -0
  59. package/dist/LazyLoadBox/index.d.ts +104 -0
  60. package/dist/LazyLoadBox/index.js +3 -0
  61. package/dist/LazyLoadBox/index.js.map +1 -0
  62. package/dist/PasswordStrength/index.cjs +4 -4
  63. package/dist/PasswordStrength/index.js +2 -2
  64. package/dist/PdfViewer/index.cjs +3 -3
  65. package/dist/PdfViewer/index.js +2 -2
  66. package/dist/PeriodSelect/index.cjs +22 -0
  67. package/dist/PeriodSelect/index.cjs.map +1 -0
  68. package/dist/PeriodSelect/index.css +88 -0
  69. package/dist/PeriodSelect/index.css.map +1 -0
  70. package/dist/PeriodSelect/index.d.ts +36 -0
  71. package/dist/PeriodSelect/index.js +3 -0
  72. package/dist/PeriodSelect/index.js.map +1 -0
  73. package/dist/QrCodeCard/index.cjs +3 -3
  74. package/dist/QrCodeCard/index.css +122 -32
  75. package/dist/QrCodeCard/index.css.map +1 -1
  76. package/dist/QrCodeCard/index.d.ts +10 -2
  77. package/dist/QrCodeCard/index.js +2 -2
  78. package/dist/SensitiveMask/index.cjs +5 -5
  79. package/dist/SensitiveMask/index.js +3 -3
  80. package/dist/Splitter/index.cjs +3 -3
  81. package/dist/Splitter/index.js +2 -2
  82. package/dist/TagInput/index.cjs +3 -3
  83. package/dist/TagInput/index.js +2 -2
  84. package/dist/TextEllipsis/index.cjs +4 -4
  85. package/dist/TextEllipsis/index.js +3 -3
  86. package/dist/TreeTransfer/index.cjs +3 -3
  87. package/dist/TreeTransfer/index.js +2 -2
  88. package/dist/VideoPlayer/index.cjs +3 -3
  89. package/dist/VideoPlayer/index.js +2 -2
  90. package/dist/{chunk-GV2RRQ2S.cjs → chunk-2EIAWXFA.cjs} +5 -5
  91. package/dist/{chunk-GV2RRQ2S.cjs.map → chunk-2EIAWXFA.cjs.map} +1 -1
  92. package/dist/{chunk-ISUXPTLV.js → chunk-2IDVNTKR.js} +93 -3
  93. package/dist/chunk-2IDVNTKR.js.map +1 -0
  94. package/dist/{chunk-6FVAQECF.js → chunk-2INP6NM4.js} +3 -3
  95. package/dist/{chunk-6FVAQECF.js.map → chunk-2INP6NM4.js.map} +1 -1
  96. package/dist/chunk-4KMVABTM.js +419 -0
  97. package/dist/chunk-4KMVABTM.js.map +1 -0
  98. package/dist/{chunk-VS2YVJOB.cjs → chunk-4TMBGQQE.cjs} +5 -5
  99. package/dist/{chunk-VS2YVJOB.cjs.map → chunk-4TMBGQQE.cjs.map} +1 -1
  100. package/dist/{chunk-PJB7ADK6.js → chunk-56VELHCH.js} +3 -3
  101. package/dist/{chunk-PJB7ADK6.js.map → chunk-56VELHCH.js.map} +1 -1
  102. package/dist/chunk-5Q7THN6M.js +115 -0
  103. package/dist/chunk-5Q7THN6M.js.map +1 -0
  104. package/dist/{chunk-4BDO5TJH.cjs → chunk-77ANKL4K.cjs} +8 -8
  105. package/dist/{chunk-4BDO5TJH.cjs.map → chunk-77ANKL4K.cjs.map} +1 -1
  106. package/dist/{chunk-OCN7L2ID.cjs → chunk-7ZBA4NHH.cjs} +4 -4
  107. package/dist/{chunk-OCN7L2ID.cjs.map → chunk-7ZBA4NHH.cjs.map} +1 -1
  108. package/dist/{chunk-MY4M7HVW.cjs → chunk-AHTRLNYK.cjs} +5 -5
  109. package/dist/{chunk-MY4M7HVW.cjs.map → chunk-AHTRLNYK.cjs.map} +1 -1
  110. package/dist/{chunk-WEOMKZC6.js → chunk-ANTFNDH4.js} +3 -3
  111. package/dist/{chunk-WEOMKZC6.js.map → chunk-ANTFNDH4.js.map} +1 -1
  112. package/dist/{chunk-EGZSSZBX.js → chunk-AXPVN2OO.js} +3 -3
  113. package/dist/{chunk-EGZSSZBX.js.map → chunk-AXPVN2OO.js.map} +1 -1
  114. package/dist/{chunk-LLWK5VKA.js → chunk-CURWX7OY.js} +3 -3
  115. package/dist/{chunk-LLWK5VKA.js.map → chunk-CURWX7OY.js.map} +1 -1
  116. package/dist/{chunk-WZRUBHS3.cjs → chunk-ED3ZG2VX.cjs} +5 -5
  117. package/dist/{chunk-WZRUBHS3.cjs.map → chunk-ED3ZG2VX.cjs.map} +1 -1
  118. package/dist/{chunk-BZXMWKD2.js → chunk-EDNBPLUS.js} +3 -3
  119. package/dist/{chunk-BZXMWKD2.js.map → chunk-EDNBPLUS.js.map} +1 -1
  120. package/dist/{chunk-MC3NERDH.js → chunk-EJYTTSW6.js} +3 -3
  121. package/dist/{chunk-MC3NERDH.js.map → chunk-EJYTTSW6.js.map} +1 -1
  122. package/dist/{chunk-3UNZXPOT.cjs → chunk-EKDJPOA3.cjs} +5 -5
  123. package/dist/{chunk-3UNZXPOT.cjs.map → chunk-EKDJPOA3.cjs.map} +1 -1
  124. package/dist/{chunk-XWXFENGT.js → chunk-EMT4NUI5.js} +3 -3
  125. package/dist/{chunk-XWXFENGT.js.map → chunk-EMT4NUI5.js.map} +1 -1
  126. package/dist/{chunk-HFPWBZID.js → chunk-ETFLLRTO.js} +3 -3
  127. package/dist/{chunk-HFPWBZID.js.map → chunk-ETFLLRTO.js.map} +1 -1
  128. package/dist/chunk-FZH5FL7X.cjs +167 -0
  129. package/dist/chunk-FZH5FL7X.cjs.map +1 -0
  130. package/dist/{chunk-6UKUAYN3.cjs → chunk-HKALWFWZ.cjs} +5 -5
  131. package/dist/{chunk-6UKUAYN3.cjs.map → chunk-HKALWFWZ.cjs.map} +1 -1
  132. package/dist/{chunk-IBOCJ2ZS.js → chunk-IF4XAUV3.js} +3 -3
  133. package/dist/{chunk-IBOCJ2ZS.js.map → chunk-IF4XAUV3.js.map} +1 -1
  134. package/dist/{chunk-MNY5P5EG.cjs → chunk-IPS7PC3M.cjs} +13 -13
  135. package/dist/{chunk-MNY5P5EG.cjs.map → chunk-IPS7PC3M.cjs.map} +1 -1
  136. package/dist/{chunk-V4O325BX.cjs → chunk-JHVPDKBM.cjs} +6 -6
  137. package/dist/{chunk-V4O325BX.cjs.map → chunk-JHVPDKBM.cjs.map} +1 -1
  138. package/dist/{chunk-6IXVUD2M.js → chunk-JNA5AQ2K.js} +3 -3
  139. package/dist/{chunk-6IXVUD2M.js.map → chunk-JNA5AQ2K.js.map} +1 -1
  140. package/dist/{chunk-NJIYP6SC.cjs → chunk-LFGBZXQH.cjs} +4 -4
  141. package/dist/{chunk-NJIYP6SC.cjs.map → chunk-LFGBZXQH.cjs.map} +1 -1
  142. package/dist/{chunk-ZLWY7QS2.cjs → chunk-M3GQ7RCV.cjs} +4 -4
  143. package/dist/{chunk-ZLWY7QS2.cjs.map → chunk-M3GQ7RCV.cjs.map} +1 -1
  144. package/dist/{chunk-AFR7V4A4.js → chunk-M4FZJALR.js} +4 -4
  145. package/dist/{chunk-AFR7V4A4.js.map → chunk-M4FZJALR.js.map} +1 -1
  146. package/dist/{chunk-CT66HLZ5.js → chunk-MQJBUHDB.js} +3 -3
  147. package/dist/{chunk-CT66HLZ5.js.map → chunk-MQJBUHDB.js.map} +1 -1
  148. package/dist/chunk-O4EABET3.js +89 -0
  149. package/dist/chunk-O4EABET3.js.map +1 -0
  150. package/dist/{chunk-V7IUSCQS.js → chunk-OLLVIQPL.js} +3 -3
  151. package/dist/{chunk-V7IUSCQS.js.map → chunk-OLLVIQPL.js.map} +1 -1
  152. package/dist/{chunk-2DIU347W.cjs → chunk-OONBZRPV.cjs} +4 -4
  153. package/dist/{chunk-2DIU347W.cjs.map → chunk-OONBZRPV.cjs.map} +1 -1
  154. package/dist/{chunk-56TD4LDC.js → chunk-P5CS7V4W.js} +3 -3
  155. package/dist/{chunk-56TD4LDC.js.map → chunk-P5CS7V4W.js.map} +1 -1
  156. package/dist/{chunk-HUXPCMNP.js → chunk-PTFKE67K.js} +3 -3
  157. package/dist/{chunk-HUXPCMNP.js.map → chunk-PTFKE67K.js.map} +1 -1
  158. package/dist/{chunk-PUTAVQJZ.js → chunk-PUMVD7CP.js} +3 -3
  159. package/dist/{chunk-PUTAVQJZ.js.map → chunk-PUMVD7CP.js.map} +1 -1
  160. package/dist/{chunk-KXZM322K.cjs → chunk-PYCSRJSF.cjs} +7 -7
  161. package/dist/{chunk-KXZM322K.cjs.map → chunk-PYCSRJSF.cjs.map} +1 -1
  162. package/dist/{chunk-PUJJHD22.js → chunk-Q7OVUH5K.js} +3 -3
  163. package/dist/{chunk-PUJJHD22.js.map → chunk-Q7OVUH5K.js.map} +1 -1
  164. package/dist/{chunk-2UCTE6YN.cjs → chunk-QP3RKA4J.cjs} +4 -4
  165. package/dist/{chunk-2UCTE6YN.cjs.map → chunk-QP3RKA4J.cjs.map} +1 -1
  166. package/dist/{chunk-OKCQZO5E.js → chunk-QRZ2GVVJ.js} +3 -3
  167. package/dist/{chunk-OKCQZO5E.js.map → chunk-QRZ2GVVJ.js.map} +1 -1
  168. package/dist/chunk-QU33CY3M.cjs +83 -0
  169. package/dist/chunk-QU33CY3M.cjs.map +1 -0
  170. package/dist/{chunk-MBOWSS4B.cjs → chunk-R4V3EJVP.cjs} +98 -2
  171. package/dist/chunk-R4V3EJVP.cjs.map +1 -0
  172. package/dist/chunk-RFTYEXKU.js +79 -0
  173. package/dist/chunk-RFTYEXKU.js.map +1 -0
  174. package/dist/{chunk-4OXVTRYV.cjs → chunk-RN5WU7KA.cjs} +7 -7
  175. package/dist/{chunk-4OXVTRYV.cjs.map → chunk-RN5WU7KA.cjs.map} +1 -1
  176. package/dist/{chunk-WWXBH57R.cjs → chunk-TNZ2OLGW.cjs} +4 -4
  177. package/dist/{chunk-WWXBH57R.cjs.map → chunk-TNZ2OLGW.cjs.map} +1 -1
  178. package/dist/chunk-TUDLE3RT.cjs +429 -0
  179. package/dist/chunk-TUDLE3RT.cjs.map +1 -0
  180. package/dist/{chunk-B7NN6SZD.cjs → chunk-TUEVILTA.cjs} +5 -5
  181. package/dist/{chunk-B7NN6SZD.cjs.map → chunk-TUEVILTA.cjs.map} +1 -1
  182. package/dist/{chunk-ZUW3XLZQ.cjs → chunk-U2EBNBGK.cjs} +4 -4
  183. package/dist/{chunk-ZUW3XLZQ.cjs.map → chunk-U2EBNBGK.cjs.map} +1 -1
  184. package/dist/{chunk-JAW7Q2YC.cjs → chunk-UAUP5TJK.cjs} +5 -5
  185. package/dist/{chunk-JAW7Q2YC.cjs.map → chunk-UAUP5TJK.cjs.map} +1 -1
  186. package/dist/chunk-UIU6VCEQ.cjs +117 -0
  187. package/dist/chunk-UIU6VCEQ.cjs.map +1 -0
  188. package/dist/{chunk-2MDYHFLH.cjs → chunk-UZB7GOEI.cjs} +4 -4
  189. package/dist/{chunk-2MDYHFLH.cjs.map → chunk-UZB7GOEI.cjs.map} +1 -1
  190. package/dist/chunk-V55FEQYU.cjs +196 -0
  191. package/dist/chunk-V55FEQYU.cjs.map +1 -0
  192. package/dist/{chunk-ZNFW6L3E.cjs → chunk-VJOO2DG3.cjs} +8 -8
  193. package/dist/{chunk-ZNFW6L3E.cjs.map → chunk-VJOO2DG3.cjs.map} +1 -1
  194. package/dist/chunk-VYPIRVL4.js +193 -0
  195. package/dist/chunk-VYPIRVL4.js.map +1 -0
  196. package/dist/{chunk-JECYRODB.js → chunk-W5JA3YTT.js} +3 -3
  197. package/dist/{chunk-JECYRODB.js.map → chunk-W5JA3YTT.js.map} +1 -1
  198. package/dist/{chunk-QZZGBUW4.js → chunk-WKF4C6TJ.js} +3 -3
  199. package/dist/{chunk-QZZGBUW4.js.map → chunk-WKF4C6TJ.js.map} +1 -1
  200. package/dist/{chunk-64LBDDZU.js → chunk-XLOGMDAQ.js} +3 -3
  201. package/dist/{chunk-64LBDDZU.js.map → chunk-XLOGMDAQ.js.map} +1 -1
  202. package/dist/chunk-XUAHWX6B.js +153 -0
  203. package/dist/chunk-XUAHWX6B.js.map +1 -0
  204. package/dist/chunk-Y54KVULF.js +161 -0
  205. package/dist/chunk-Y54KVULF.js.map +1 -0
  206. package/dist/{chunk-NUTVJGVT.cjs → chunk-YP4XTMK3.cjs} +4 -4
  207. package/dist/{chunk-NUTVJGVT.cjs.map → chunk-YP4XTMK3.cjs.map} +1 -1
  208. package/dist/{chunk-MGUNFP6P.js → chunk-ZCBT56AG.js} +3 -3
  209. package/dist/{chunk-MGUNFP6P.js.map → chunk-ZCBT56AG.js.map} +1 -1
  210. package/dist/chunk-ZWKUHYTV.cjs +155 -0
  211. package/dist/chunk-ZWKUHYTV.cjs.map +1 -0
  212. package/dist/chunk-ZXMFWVE4.cjs +91 -0
  213. package/dist/chunk-ZXMFWVE4.cjs.map +1 -0
  214. package/dist/index.cjs +139 -104
  215. package/dist/index.css +633 -56
  216. package/dist/index.css.map +1 -1
  217. package/dist/index.js +40 -37
  218. package/dist/src/icons.d.ts +18 -0
  219. package/dist/src/index.d.ts +10 -2
  220. package/package.json +1 -1
  221. package/dist/chunk-5VSEUDVY.js +0 -45
  222. package/dist/chunk-5VSEUDVY.js.map +0 -1
  223. package/dist/chunk-5YQVSOHK.js +0 -44
  224. package/dist/chunk-5YQVSOHK.js.map +0 -1
  225. package/dist/chunk-B3HZIYQQ.cjs +0 -46
  226. package/dist/chunk-B3HZIYQQ.cjs.map +0 -1
  227. package/dist/chunk-EOGYWPX7.cjs +0 -47
  228. package/dist/chunk-EOGYWPX7.cjs.map +0 -1
  229. package/dist/chunk-EQ7S5SYM.js +0 -67
  230. package/dist/chunk-EQ7S5SYM.js.map +0 -1
  231. package/dist/chunk-FYFL4PFD.cjs +0 -69
  232. package/dist/chunk-FYFL4PFD.cjs.map +0 -1
  233. package/dist/chunk-ISUXPTLV.js.map +0 -1
  234. package/dist/chunk-JEDW76LI.cjs +0 -107
  235. package/dist/chunk-JEDW76LI.cjs.map +0 -1
  236. package/dist/chunk-MBOWSS4B.cjs.map +0 -1
  237. package/dist/chunk-XOMV26WS.js +0 -105
  238. package/dist/chunk-XOMV26WS.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../FilePreviewer/index.tsx"],"names":[],"mappings":";;;;;AAgDO,SAAS,cAAc,SAAA,EAA6B;AAC1D,EAAA,IAAI,CAAC,WAAW,OAAO,SAAA;AACvB,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,CAAE,WAAA,EAAY;AAChE,EAAA,MAAM,MAAM,KAAA,CAAM,SAAA,CAAU,MAAM,WAAA,CAAY,GAAG,IAAI,CAAC,CAAA;AAEtD,EAAA,IAAI,CAAC,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAO,KAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AAC7E,IAAA,OAAO,OAAA;AAAA,EACR;AACA,EAAA,IAAI,CAAC,OAAO,MAAA,EAAQ,KAAA,EAAO,OAAO,KAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AACvD,IAAA,OAAO,OAAA;AAAA,EACR;AACA,EAAA,IAAI,CAAC,OAAO,KAAA,EAAO,KAAA,EAAO,QAAQ,KAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AACvD,IAAA,OAAO,OAAA;AAAA,EACR;AACA,EAAA,IAAI,CAAC,KAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AAC1B,IAAA,OAAO,KAAA;AAAA,EACR;AACA,EAAA,IACC,CAAC,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAO,KAAK,CAAA,CAAE,QAAA;AAAA,IACpF;AAAA,GACD,EACC;AACD,IAAA,OAAO,MAAA;AAAA,EACR;AACA,EAAA,OAAO,SAAA;AACR;AAEA,IAAM,aAAA,GAEF,CAAC,EAAE,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,UAAA,EAAY,YAAA,EAAc,SAAA,GAAY,EAAA,EAAI,KAAA,EAAM,KAAM;AAElF,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAiB,CAAC,CAAA;AACtD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAiB,CAAC,CAAA;AAExD,EAAA,SAAA,CAAU,MAAM;AACf,IAAA,IAAI,IAAA,EAAM;AACT,MAAA,aAAA,CAAc,CAAC,CAAA;AACf,MAAA,cAAA,CAAe,CAAC,CAAA;AAAA,IACjB;AAAA,EACD,CAAA,EAAG,CAAC,IAAA,EAAM,IAAI,CAAC,CAAA;AAEf,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,IAAA,EAAM,OAAO,IAAA;AAE3B,EAAA,MAAM,cACL,OAAO,IAAA,KAAS,QAAA,GACb,EAAE,KAAK,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,KAAK,WAAA,CAAY,GAAG,CAAA,GAAI,CAAC,GAAE,GAC7D,IAAA;AAEJ,EAAA,MAAM,OAAiB,WAAA,CAAY,QAAA,IAAY,cAAc,WAAA,CAAY,IAAA,IAAQ,YAAY,GAAG,CAAA;AAGhG,EAAA,MAAM,wBAAwB,MAAM;AACnC,IAAA,IAAI,UAAA,EAAY;AACf,MAAA,UAAA,CAAW,WAAW,CAAA;AACtB,MAAA;AAAA,IACD;AACA,IAAA,MAAM,CAAA,GAAI,QAAA,CAAS,aAAA,CAAc,GAAG,CAAA;AACpC,IAAA,CAAA,CAAE,OAAO,WAAA,CAAY,GAAA;AACrB,IAAA,CAAA,CAAE,QAAA,GAAW,YAAY,IAAA,IAAQ,UAAA;AACjC,IAAA,CAAA,CAAE,MAAA,GAAS,QAAA;AACX,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,CAAC,CAAA;AAC3B,IAAA,CAAA,CAAE,KAAA,EAAM;AACR,IAAA,CAAA,CAAE,MAAA,EAAO;AAAA,EACV,CAAA;AAGA,EAAA,MAAM,iBAAiB,MAAM;AAC5B,IAAA,QAAQ,IAAA;AAAM,MACb,KAAK,OAAA;AACJ,QAAA,2BAAQ,iBAAA,EAAA,EAAkB,KAAA,EAAO,EAAE,KAAA,EAAO,WAAU,EAAG,CAAA;AAAA,MACxD,KAAK,KAAA;AACJ,QAAA,2BAAQ,eAAA,EAAA,EAAgB,KAAA,EAAO,EAAE,KAAA,EAAO,WAAU,EAAG,CAAA;AAAA,MACtD,KAAK,MAAA;AACJ,QAAA,2BAAQ,gBAAA,EAAA,EAAiB,KAAA,EAAO,EAAE,KAAA,EAAO,WAAU,EAAG,CAAA;AAAA,MACvD;AACC,QAAA,2BAAQ,YAAA,EAAA,EAAa,KAAA,EAAO,EAAE,KAAA,EAAO,WAAU,EAAG,CAAA;AAAA;AACpD,EACD,CAAA;AAGA,EAAA,MAAM,oBAAoB,MAAM;AAC/B,IAAA,QAAQ,IAAA;AAAM,MACb,KAAK,OAAA;AACJ,QAAA,uBACC,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,KAAK,WAAA,CAAY,GAAA;AAAA,YACjB,GAAA,EAAK,YAAY,IAAA,IAAQ,SAAA;AAAA,YACzB,SAAA,EAAU,gCAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACN,SAAA,EAAW,CAAA,MAAA,EAAS,UAAU,CAAA,SAAA,EAAY,WAAW,CAAA,IAAA;AAAA;AACtD;AAAA,SACD;AAAA,MAEF,KAAK,OAAA;AACJ,QAAA,uBACC,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACA,KAAK,WAAA,CAAY,GAAA;AAAA,YACjB,QAAA,EAAQ,IAAA;AAAA,YACR,QAAA,EAAQ,IAAA;AAAA,YACR,SAAA,EAAU;AAAA;AAAA,SACX;AAAA,MAEF,KAAK,OAAA;AACJ,QAAA,uBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACd,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,SAAI,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,IAAM,QAAA,EAAA,WAAA,EAAE,CAAA;AAAA,0BAChC,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAI,EAAI,QAAA,EAAA,WAAA,CAAY,IAAA,IAAQ,0BAAA,EAAO,CAAA;AAAA,0BAC3E,GAAA,CAAC,OAAA,EAAA,EAAM,GAAA,EAAK,WAAA,CAAY,GAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,QAAA,EAAQ,IAAA,EAAC,KAAA,EAAO,EAAE,KAAA,EAAO,KAAI,EAAG;AAAA,SAAA,EACvE,CAAA;AAAA,MAEF,KAAK,KAAA;AACJ,QAAA,uBACC,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,KAAK,WAAA,CAAY,GAAA;AAAA,YACjB,KAAA,EAAO,YAAY,IAAA,IAAQ,aAAA;AAAA,YAC3B,SAAA,EAAU;AAAA;AAAA,SACX;AAAA,MAEF,KAAK,MAAA;AACJ,QAAA,2BACE,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA,WAAA,CAAY,eAAe,qDAAA,EAC7B,CAAA;AAAA,MAEF;AACC,QAAA,uBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACd,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,QAAA,EAAU,IAAI,KAAA,EAAO,SAAA,IAAa,QAAA,EAAA,WAAA,EAAE,CAAA;AAAA,+BACjD,KAAA,EAAA,EACA,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,WAAA,EAAa,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,SAAA,EAAU,EAC/D,QAAA,EAAA,WAAA,CAAY,IAAA,IAAQ,0BAAA,EACtB,CAAA;AAAA,4BACA,IAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,MAAA,EAAQ,GAAG,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,EAAA,EAAG,EAAG,QAAA,EAAA;AAAA,cAAA,kJAAA;AAAA,cAEvD,WAAA,CAAY,IAAA,GAAO,CAAA,CAAA,EAAI,WAAA,CAAY,IAAI,CAAA,CAAA,CAAA,GAAM;AAAA,aAAA,EAC/C;AAAA,WAAA,EACD,CAAA;AAAA,0BACA,IAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACA,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,qBAAA;AAAA,cACT,KAAA,EAAO;AAAA,gBACN,OAAA,EAAS,aAAA;AAAA,gBACT,UAAA,EAAY,QAAA;AAAA,gBACZ,GAAA,EAAK,CAAA;AAAA,gBACL,OAAA,EAAS,UAAA;AAAA,gBACT,UAAA,EAAY,SAAA;AAAA,gBACZ,KAAA,EAAO,MAAA;AAAA,gBACP,MAAA,EAAQ,MAAA;AAAA,gBACR,YAAA,EAAc,CAAA;AAAA,gBACd,MAAA,EAAQ,SAAA;AAAA,gBACR,QAAA,EAAU;AAAA,eACX;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,gBAAE;AAAA;AAAA;AAAA;AACrB,SAAA,EACD,CAAA;AAAA;AAEH,EACD,CAAA;AAEA,EAAA,OAAO,QAAA,CAAS,YAAA;AAAA,wBACd,KAAA,EAAA,EAAI,SAAA,EAAW,4BAA4B,SAAS,CAAA,CAAA,EAAI,SAAS,QAAA,EAAU,KAAA,EAC3E,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+BAAA,EAAgC,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAgB,EAEhF,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iCAAA,EACd,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gCAAA,EACb,QAAA,EAAA;AAAA,UAAA,cAAA,EAAe;AAAA,0BAChB,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,WAAA,CAAY,IAAA,IAAQ,0BAAA,EAAO;AAAA,SAAA,EACnC,CAAA;AAAA,wBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,UAAA,IAAA,KAAS,2BACT,IAAA,CAAA,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACA,IAAA,EAAK,QAAA;AAAA,gBACL,SAAA,EAAU,qCAAA;AAAA,gBACV,OAAA,EAAS,MAAM,aAAA,CAAc,CAAC,CAAA,KAAM,KAAK,GAAA,CAAI,CAAA,GAAI,GAAA,EAAK,CAAC,CAAC,CAAA;AAAA,gBACxD,KAAA,EAAM,cAAA;AAAA,gBAEN,8BAAC,cAAA,EAAA,EAAe;AAAA;AAAA,aACjB;AAAA,4BACA,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACA,IAAA,EAAK,QAAA;AAAA,gBACL,SAAA,EAAU,qCAAA;AAAA,gBACV,OAAA,EAAS,MAAM,aAAA,CAAc,CAAC,CAAA,KAAM,KAAK,GAAA,CAAI,CAAA,GAAI,GAAA,EAAK,GAAG,CAAC,CAAA;AAAA,gBAC1D,KAAA,EAAM,cAAA;AAAA,gBAEN,8BAAC,eAAA,EAAA,EAAgB;AAAA;AAAA,aAClB;AAAA,4BACA,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACA,IAAA,EAAK,QAAA;AAAA,gBACL,SAAA,EAAU,qCAAA;AAAA,gBACV,SAAS,MAAM,cAAA,CAAe,CAAC,CAAA,KAAA,CAAO,CAAA,GAAI,MAAM,GAAG,CAAA;AAAA,gBACnD,KAAA,EAAM,sCAAA;AAAA,gBAEN,8BAAC,mBAAA,EAAA,EAAoB;AAAA;AAAA;AACtB,WAAA,EACD,CAAA;AAAA,0BAGD,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACA,IAAA,EAAK,QAAA;AAAA,cACL,SAAA,EAAU,qCAAA;AAAA,cACV,OAAA,EAAS,qBAAA;AAAA,cACT,KAAA,EAAM,0BAAA;AAAA,cAEN,8BAAC,gBAAA,EAAA,EAAiB;AAAA;AAAA,WACnB;AAAA,UAEC,YAAA;AAAA,0BAED,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACA,IAAA,EAAK,QAAA;AAAA,cACL,SAAA,EAAU,qCAAA;AAAA,cACV,OAAA,EAAS,QAAA;AAAA,cACT,KAAA,EAAM,gCAAA;AAAA,cAEN,8BAAC,aAAA,EAAA,EAAc;AAAA;AAAA;AAChB,SAAA,EACD;AAAA,OAAA,EACD,CAAA;AAAA,sBAGA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAiC,6BAAkB,EAAE;AAAA,KAAA,EACrE,CAAA,EACD,CAAA;AAAA,IACA,QAAA,CAAS;AAAA,GACV;AACD,CAAA;AAGA,aAAA,CAAc,OAAA,GAAU,CAAC,OAAA,KAAsB;AAC9C,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AACxC,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,GAAG,CAAA;AAE7B,EAAA,MAAM,QAAQ,MAAM;AACnB,IAAA,QAAA,CAAS,MAAA,iBAAO,GAAA,CAAA,QAAA,EAAA,EAAE,CAAA,EAAK,GAAG,CAAA;AAC1B,IAAA,GAAA,CAAI,MAAA,EAAO;AAAA,EACZ,CAAA;AAEA,EAAA,QAAA,CAAS,MAAA,iBAAO,GAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAM,IAAA,EAAM,MAAM,OAAA,EAAS,QAAA,EAAU,KAAA,EAAO,CAAA,EAAI,GAAG,CAAA;AAElF,EAAA,OAAO,EAAE,KAAA,EAAM;AAChB,CAAA;AAEA,IAAO,qBAAA,GAAQ","file":"chunk-PJB7ADK6.js","sourcesContent":["import React, { useState, useEffect, ReactNode, CSSProperties } from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n\tCloseOutlined,\n\tRotateRightOutlined,\n\tZoomInOutlined,\n\tZoomOutOutlined,\n\tDownloadOutlined,\n\tFilePdfOutlined,\n\tFileImageOutlined,\n\tFileTextOutlined,\n\tFileOutlined,\n} from '../src/icons';\nimport './index.less';\n\nexport type FileType = 'image' | 'video' | 'audio' | 'pdf' | 'text' | 'unknown';\n\nexport interface FileItem {\n\t/** 文件访问 URL 或 Base64 */\n\turl: string;\n\t/** 文件名称 */\n\tname?: string;\n\t/** 文件类型(如不传则根据文件名后缀或 URL 自动推断) */\n\tfileType?: FileType;\n\t/** 文件大小描述(如 '2.4 MB') */\n\tsize?: string;\n\t/** 纯文本内容(针对直接传入 text 字符串预览) */\n\ttextContent?: string;\n}\n\nexport interface FilePreviewerProps {\n\t/** 是否打开预览弹窗 */\n\topen: boolean;\n\t/** 当前预览的文件对象或 URL 字符串 */\n\tfile?: FileItem | string | null;\n\t/** 关闭弹窗回调 */\n\tonCancel?: () => void;\n\t/** 自定义下载行为(不传时使用默认浏览器下载) */\n\tonDownload?: (file: FileItem) => void;\n\t/** 自定义标题栏右侧额外操作按钮 */\n\textraActions?: ReactNode;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\n// 根据文件名或 URL 后缀推断文件类型\nexport function inferFileType(urlOrName: string): FileType {\n\tif (!urlOrName) return 'unknown';\n\tconst clean = urlOrName.split('?')[0].split('#')[0].toLowerCase();\n\tconst ext = clean.substring(clean.lastIndexOf('.') + 1);\n\n\tif (['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'bmp', 'ico'].includes(ext)) {\n\t\treturn 'image';\n\t}\n\tif (['mp4', 'webm', 'ogg', 'mov', 'mkv'].includes(ext)) {\n\t\treturn 'video';\n\t}\n\tif (['mp3', 'wav', 'aac', 'flac', 'm4a'].includes(ext)) {\n\t\treturn 'audio';\n\t}\n\tif (['pdf'].includes(ext)) {\n\t\treturn 'pdf';\n\t}\n\tif (\n\t\t['txt', 'json', 'js', 'ts', 'jsx', 'tsx', 'html', 'css', 'less', 'md', 'log', 'xml'].includes(\n\t\t\text,\n\t\t)\n\t) {\n\t\treturn 'text';\n\t}\n\treturn 'unknown';\n}\n\nconst FilePreviewer: React.FC<FilePreviewerProps> & {\n\tpreview: (options: FileItem) => { close: () => void };\n} = ({ open, file, onCancel, onDownload, extraActions, className = '', style }) => {\n\t// 图片控制状态\n\tconst [imageScale, setImageScale] = useState<number>(1);\n\tconst [imageRotate, setImageRotate] = useState<number>(0);\n\n\tuseEffect(() => {\n\t\tif (open) {\n\t\t\tsetImageScale(1);\n\t\t\tsetImageRotate(0);\n\t\t}\n\t}, [open, file]);\n\n\tif (!open || !file) return null;\n\n\tconst currentFile: FileItem =\n\t\ttypeof file === 'string'\n\t\t\t? { url: file, name: file.substring(file.lastIndexOf('/') + 1) }\n\t\t\t: file;\n\n\tconst type: FileType = currentFile.fileType || inferFileType(currentFile.name || currentFile.url);\n\n\t// 默认下载处理\n\tconst handleDefaultDownload = () => {\n\t\tif (onDownload) {\n\t\t\tonDownload(currentFile);\n\t\t\treturn;\n\t\t}\n\t\tconst a = document.createElement('a');\n\t\ta.href = currentFile.url;\n\t\ta.download = currentFile.name || 'download';\n\t\ta.target = '_blank';\n\t\tdocument.body.appendChild(a);\n\t\ta.click();\n\t\ta.remove();\n\t};\n\n\t// 渲染文件图标\n\tconst renderFileIcon = () => {\n\t\tswitch (type) {\n\t\t\tcase 'image':\n\t\t\t\treturn <FileImageOutlined style={{ color: '#1677ff' }} />;\n\t\t\tcase 'pdf':\n\t\t\t\treturn <FilePdfOutlined style={{ color: '#ff4d4f' }} />;\n\t\t\tcase 'text':\n\t\t\t\treturn <FileTextOutlined style={{ color: '#52c41a' }} />;\n\t\t\tdefault:\n\t\t\t\treturn <FileOutlined style={{ color: '#8c8c8c' }} />;\n\t\t}\n\t};\n\n\t// 渲染主体内容\n\tconst renderBodyContent = () => {\n\t\tswitch (type) {\n\t\t\tcase 'image':\n\t\t\t\treturn (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={currentFile.url}\n\t\t\t\t\t\talt={currentFile.name || 'Preview'}\n\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_image\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttransform: `scale(${imageScale}) rotate(${imageRotate}deg)`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\tcase 'video':\n\t\t\t\treturn (\n\t\t\t\t\t<video\n\t\t\t\t\t\tsrc={currentFile.url}\n\t\t\t\t\t\tcontrols\n\t\t\t\t\t\tautoPlay\n\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_media\"\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\tcase 'audio':\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_audio_wrap\">\n\t\t\t\t\t\t<div style={{ fontSize: 48 }}>🎵</div>\n\t\t\t\t\t\t<div style={{ fontSize: 16, fontWeight: 600 }}>{currentFile.name || '音频播放'}</div>\n\t\t\t\t\t\t<audio src={currentFile.url} controls autoPlay style={{ width: 320 }} />\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\tcase 'pdf':\n\t\t\t\treturn (\n\t\t\t\t\t<iframe\n\t\t\t\t\t\tsrc={currentFile.url}\n\t\t\t\t\t\ttitle={currentFile.name || 'PDF Preview'}\n\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_iframe\"\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\tcase 'text':\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_text_wrap\">\n\t\t\t\t\t\t{currentFile.textContent || '正在加载文件内容...'}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_fallback_card\">\n\t\t\t\t\t\t<div style={{ fontSize: 48, color: '#8c8c8c' }}>📦</div>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<h4 style={{ margin: '0 0 6px 0', fontSize: 16, color: '#1f1f1f' }}>\n\t\t\t\t\t\t\t\t{currentFile.name || '未知文件'}\n\t\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t\t<p style={{ margin: 0, color: '#8c8c8c', fontSize: 13 }}>\n\t\t\t\t\t\t\t\t该格式暂不支持直接在线预览,请下载后在本地查看。\n\t\t\t\t\t\t\t\t{currentFile.size ? `(${currentFile.size})` : ''}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={handleDefaultDownload}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tdisplay: 'inline-flex',\n\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\tgap: 6,\n\t\t\t\t\t\t\t\tpadding: '8px 20px',\n\t\t\t\t\t\t\t\tbackground: '#1677ff',\n\t\t\t\t\t\t\t\tcolor: '#fff',\n\t\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\t\tborderRadius: 6,\n\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\tfontSize: 14,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DownloadOutlined /> 立即下载\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t}\n\t};\n\n\treturn ReactDOM.createPortal(\n\t\t<div className={`rpc_file_previewer_modal ${className}`} onClick={onCancel} style={style}>\n\t\t\t<div className=\"rpc_file_previewer_modal_card\" onClick={(e) => e.stopPropagation()}>\n\t\t\t\t{/* 顶部标题栏与工具栏 */}\n\t\t\t\t<div className=\"rpc_file_previewer_modal_header\">\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_title\">\n\t\t\t\t\t\t{renderFileIcon()}\n\t\t\t\t\t\t<span>{currentFile.name || '文件预览'}</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_actions\">\n\t\t\t\t\t\t{type === 'image' && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\t\t\tonClick={() => setImageScale((s) => Math.min(s + 0.2, 3))}\n\t\t\t\t\t\t\t\t\ttitle=\"放大\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ZoomInOutlined />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\t\t\tonClick={() => setImageScale((s) => Math.max(s - 0.2, 0.4))}\n\t\t\t\t\t\t\t\t\ttitle=\"缩小\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ZoomOutOutlined />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\t\t\tonClick={() => setImageRotate((r) => (r + 90) % 360)}\n\t\t\t\t\t\t\t\t\ttitle=\"顺时针旋转90°\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<RotateRightOutlined />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\tonClick={handleDefaultDownload}\n\t\t\t\t\t\t\ttitle=\"下载文件\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DownloadOutlined />\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t{extraActions}\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\tonClick={onCancel}\n\t\t\t\t\t\t\ttitle=\"关闭预览 (ESC)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CloseOutlined />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* 预览主体内容区域 */}\n\t\t\t\t<div className=\"rpc_file_previewer_modal_body\">{renderBodyContent()}</div>\n\t\t\t</div>\n\t\t</div>,\n\t\tdocument.body,\n\t);\n};\n\n// 命令式调用方法\nFilePreviewer.preview = (options: FileItem) => {\n\tconst div = document.createElement('div');\n\tdocument.body.appendChild(div);\n\n\tconst close = () => {\n\t\tReactDOM.render(<></>, div);\n\t\tdiv.remove();\n\t};\n\n\tReactDOM.render(<FilePreviewer open={true} file={options} onCancel={close} />, div);\n\n\treturn { close };\n};\n\nexport default FilePreviewer;\n"]}
1
+ {"version":3,"sources":["../FilePreviewer/index.tsx"],"names":[],"mappings":"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","file":"chunk-56VELHCH.js","sourcesContent":["import React, { useState, useEffect, ReactNode, CSSProperties } from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n\tCloseOutlined,\n\tRotateRightOutlined,\n\tZoomInOutlined,\n\tZoomOutOutlined,\n\tDownloadOutlined,\n\tFilePdfOutlined,\n\tFileImageOutlined,\n\tFileTextOutlined,\n\tFileOutlined,\n} from '../src/icons';\nimport './index.less';\n\nexport type FileType = 'image' | 'video' | 'audio' | 'pdf' | 'text' | 'unknown';\n\nexport interface FileItem {\n\t/** 文件访问 URL 或 Base64 */\n\turl: string;\n\t/** 文件名称 */\n\tname?: string;\n\t/** 文件类型(如不传则根据文件名后缀或 URL 自动推断) */\n\tfileType?: FileType;\n\t/** 文件大小描述(如 '2.4 MB') */\n\tsize?: string;\n\t/** 纯文本内容(针对直接传入 text 字符串预览) */\n\ttextContent?: string;\n}\n\nexport interface FilePreviewerProps {\n\t/** 是否打开预览弹窗 */\n\topen: boolean;\n\t/** 当前预览的文件对象或 URL 字符串 */\n\tfile?: FileItem | string | null;\n\t/** 关闭弹窗回调 */\n\tonCancel?: () => void;\n\t/** 自定义下载行为(不传时使用默认浏览器下载) */\n\tonDownload?: (file: FileItem) => void;\n\t/** 自定义标题栏右侧额外操作按钮 */\n\textraActions?: ReactNode;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\n// 根据文件名或 URL 后缀推断文件类型\nexport function inferFileType(urlOrName: string): FileType {\n\tif (!urlOrName) return 'unknown';\n\tconst clean = urlOrName.split('?')[0].split('#')[0].toLowerCase();\n\tconst ext = clean.substring(clean.lastIndexOf('.') + 1);\n\n\tif (['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'bmp', 'ico'].includes(ext)) {\n\t\treturn 'image';\n\t}\n\tif (['mp4', 'webm', 'ogg', 'mov', 'mkv'].includes(ext)) {\n\t\treturn 'video';\n\t}\n\tif (['mp3', 'wav', 'aac', 'flac', 'm4a'].includes(ext)) {\n\t\treturn 'audio';\n\t}\n\tif (['pdf'].includes(ext)) {\n\t\treturn 'pdf';\n\t}\n\tif (\n\t\t['txt', 'json', 'js', 'ts', 'jsx', 'tsx', 'html', 'css', 'less', 'md', 'log', 'xml'].includes(\n\t\t\text,\n\t\t)\n\t) {\n\t\treturn 'text';\n\t}\n\treturn 'unknown';\n}\n\nconst FilePreviewer: React.FC<FilePreviewerProps> & {\n\tpreview: (options: FileItem) => { close: () => void };\n} = ({ open, file, onCancel, onDownload, extraActions, className = '', style }) => {\n\t// 图片控制状态\n\tconst [imageScale, setImageScale] = useState<number>(1);\n\tconst [imageRotate, setImageRotate] = useState<number>(0);\n\n\tuseEffect(() => {\n\t\tif (open) {\n\t\t\tsetImageScale(1);\n\t\t\tsetImageRotate(0);\n\t\t}\n\t}, [open, file]);\n\n\tif (!open || !file) return null;\n\n\tconst currentFile: FileItem =\n\t\ttypeof file === 'string'\n\t\t\t? { url: file, name: file.substring(file.lastIndexOf('/') + 1) }\n\t\t\t: file;\n\n\tconst type: FileType = currentFile.fileType || inferFileType(currentFile.name || currentFile.url);\n\n\t// 默认下载处理\n\tconst handleDefaultDownload = () => {\n\t\tif (onDownload) {\n\t\t\tonDownload(currentFile);\n\t\t\treturn;\n\t\t}\n\t\tconst a = document.createElement('a');\n\t\ta.href = currentFile.url;\n\t\ta.download = currentFile.name || 'download';\n\t\ta.target = '_blank';\n\t\tdocument.body.appendChild(a);\n\t\ta.click();\n\t\ta.remove();\n\t};\n\n\t// 渲染文件图标\n\tconst renderFileIcon = () => {\n\t\tswitch (type) {\n\t\t\tcase 'image':\n\t\t\t\treturn <FileImageOutlined style={{ color: '#1677ff' }} />;\n\t\t\tcase 'pdf':\n\t\t\t\treturn <FilePdfOutlined style={{ color: '#ff4d4f' }} />;\n\t\t\tcase 'text':\n\t\t\t\treturn <FileTextOutlined style={{ color: '#52c41a' }} />;\n\t\t\tdefault:\n\t\t\t\treturn <FileOutlined style={{ color: '#8c8c8c' }} />;\n\t\t}\n\t};\n\n\t// 渲染主体内容\n\tconst renderBodyContent = () => {\n\t\tswitch (type) {\n\t\t\tcase 'image':\n\t\t\t\treturn (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={currentFile.url}\n\t\t\t\t\t\talt={currentFile.name || 'Preview'}\n\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_image\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttransform: `scale(${imageScale}) rotate(${imageRotate}deg)`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\tcase 'video':\n\t\t\t\treturn (\n\t\t\t\t\t<video\n\t\t\t\t\t\tsrc={currentFile.url}\n\t\t\t\t\t\tcontrols\n\t\t\t\t\t\tautoPlay\n\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_media\"\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\tcase 'audio':\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_audio_wrap\">\n\t\t\t\t\t\t<div style={{ fontSize: 48 }}>🎵</div>\n\t\t\t\t\t\t<div style={{ fontSize: 16, fontWeight: 600 }}>{currentFile.name || '音频播放'}</div>\n\t\t\t\t\t\t<audio src={currentFile.url} controls autoPlay style={{ width: 320 }} />\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\tcase 'pdf':\n\t\t\t\treturn (\n\t\t\t\t\t<iframe\n\t\t\t\t\t\tsrc={currentFile.url}\n\t\t\t\t\t\ttitle={currentFile.name || 'PDF Preview'}\n\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_iframe\"\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\tcase 'text':\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_text_wrap\">\n\t\t\t\t\t\t{currentFile.textContent || '正在加载文件内容...'}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_fallback_card\">\n\t\t\t\t\t\t<div style={{ fontSize: 48, color: '#8c8c8c' }}>📦</div>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<h4 style={{ margin: '0 0 6px 0', fontSize: 16, color: '#1f1f1f' }}>\n\t\t\t\t\t\t\t\t{currentFile.name || '未知文件'}\n\t\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t\t<p style={{ margin: 0, color: '#8c8c8c', fontSize: 13 }}>\n\t\t\t\t\t\t\t\t该格式暂不支持直接在线预览,请下载后在本地查看。\n\t\t\t\t\t\t\t\t{currentFile.size ? `(${currentFile.size})` : ''}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={handleDefaultDownload}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tdisplay: 'inline-flex',\n\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\tgap: 6,\n\t\t\t\t\t\t\t\tpadding: '8px 20px',\n\t\t\t\t\t\t\t\tbackground: '#1677ff',\n\t\t\t\t\t\t\t\tcolor: '#fff',\n\t\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\t\tborderRadius: 6,\n\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\tfontSize: 14,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DownloadOutlined /> 立即下载\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t}\n\t};\n\n\treturn ReactDOM.createPortal(\n\t\t<div className={`rpc_file_previewer_modal ${className}`} onClick={onCancel} style={style}>\n\t\t\t<div className=\"rpc_file_previewer_modal_card\" onClick={(e) => e.stopPropagation()}>\n\t\t\t\t{/* 顶部标题栏与工具栏 */}\n\t\t\t\t<div className=\"rpc_file_previewer_modal_header\">\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_title\">\n\t\t\t\t\t\t{renderFileIcon()}\n\t\t\t\t\t\t<span>{currentFile.name || '文件预览'}</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_actions\">\n\t\t\t\t\t\t{type === 'image' && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\t\t\tonClick={() => setImageScale((s) => Math.min(s + 0.2, 3))}\n\t\t\t\t\t\t\t\t\ttitle=\"放大\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ZoomInOutlined />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\t\t\tonClick={() => setImageScale((s) => Math.max(s - 0.2, 0.4))}\n\t\t\t\t\t\t\t\t\ttitle=\"缩小\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ZoomOutOutlined />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\t\t\tonClick={() => setImageRotate((r) => (r + 90) % 360)}\n\t\t\t\t\t\t\t\t\ttitle=\"顺时针旋转90°\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<RotateRightOutlined />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\tonClick={handleDefaultDownload}\n\t\t\t\t\t\t\ttitle=\"下载文件\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DownloadOutlined />\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t{extraActions}\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\tonClick={onCancel}\n\t\t\t\t\t\t\ttitle=\"关闭预览 (ESC)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CloseOutlined />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* 预览主体内容区域 */}\n\t\t\t\t<div className=\"rpc_file_previewer_modal_body\">{renderBodyContent()}</div>\n\t\t\t</div>\n\t\t</div>,\n\t\tdocument.body,\n\t);\n};\n\n// 命令式调用方法\nFilePreviewer.preview = (options: FileItem) => {\n\tconst div = document.createElement('div');\n\tdocument.body.appendChild(div);\n\n\tconst close = () => {\n\t\tReactDOM.render(<></>, div);\n\t\tdiv.remove();\n\t};\n\n\tReactDOM.render(<FilePreviewer open={true} file={options} onCancel={close} />, div);\n\n\treturn { close };\n};\n\nexport default FilePreviewer;\n"]}
@@ -0,0 +1,115 @@
1
+ import { useState, useRef, useEffect } from 'react';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ // CeilingBox/index.tsx
5
+ var CeilingBox = ({
6
+ children,
7
+ offsetTop = 0,
8
+ offsetBottom,
9
+ target,
10
+ onChange,
11
+ blur = true,
12
+ zIndex = 1e3,
13
+ className = "",
14
+ style,
15
+ affixedClassName = "",
16
+ affixedStyle
17
+ }) => {
18
+ const [isAffixed, setIsAffixed] = useState(false);
19
+ const [boxRect, setBoxRect] = useState({ width: 0, height: 0 });
20
+ const placeholderRef = useRef(null);
21
+ const contentRef = useRef(null);
22
+ const isAffixedRef = useRef(false);
23
+ isAffixedRef.current = isAffixed;
24
+ useEffect(() => {
25
+ const getTargetElement = () => {
26
+ if (target) {
27
+ const el = target();
28
+ if (el) return el;
29
+ }
30
+ return window;
31
+ };
32
+ const handleScroll = () => {
33
+ if (!placeholderRef.current) return;
34
+ const targetEl = getTargetElement();
35
+ const placeholderRect = placeholderRef.current.getBoundingClientRect();
36
+ let targetTop = 0;
37
+ let targetBottom = window.innerHeight;
38
+ if (targetEl !== window && targetEl instanceof HTMLElement) {
39
+ const containerRect = targetEl.getBoundingClientRect();
40
+ targetTop = containerRect.top;
41
+ targetBottom = containerRect.bottom;
42
+ }
43
+ let shouldAffix = false;
44
+ if (offsetBottom !== void 0) {
45
+ shouldAffix = placeholderRect.bottom >= targetBottom - offsetBottom;
46
+ } else {
47
+ shouldAffix = placeholderRect.top <= targetTop + offsetTop;
48
+ }
49
+ if (shouldAffix !== isAffixedRef.current) {
50
+ if (shouldAffix && contentRef.current) {
51
+ const rect = contentRef.current.getBoundingClientRect();
52
+ setBoxRect({ width: rect.width, height: rect.height });
53
+ }
54
+ setIsAffixed(shouldAffix);
55
+ onChange == null ? void 0 : onChange(shouldAffix);
56
+ }
57
+ };
58
+ const targetNode = getTargetElement();
59
+ targetNode.addEventListener("scroll", handleScroll, { passive: true });
60
+ window.addEventListener("resize", handleScroll, { passive: true });
61
+ handleScroll();
62
+ return () => {
63
+ targetNode.removeEventListener("scroll", handleScroll);
64
+ window.removeEventListener("resize", handleScroll);
65
+ };
66
+ }, [offsetTop, offsetBottom, target, onChange]);
67
+ const computeFixedStyle = () => {
68
+ if (!isAffixed) return {};
69
+ const fixedStyle = {
70
+ position: "fixed",
71
+ zIndex,
72
+ width: boxRect.width ? `${boxRect.width}px` : "100%",
73
+ boxSizing: "border-box"
74
+ };
75
+ if (offsetBottom !== void 0) {
76
+ fixedStyle.bottom = `${offsetBottom}px`;
77
+ } else {
78
+ fixedStyle.top = `${offsetTop}px`;
79
+ }
80
+ if (placeholderRef.current) {
81
+ const rect = placeholderRef.current.getBoundingClientRect();
82
+ fixedStyle.left = `${rect.left}px`;
83
+ }
84
+ return fixedStyle;
85
+ };
86
+ const renderedContent = typeof children === "function" ? children(isAffixed) : children;
87
+ return /* @__PURE__ */ jsx(
88
+ "div",
89
+ {
90
+ ref: placeholderRef,
91
+ className: `rpc_ceiling_box_wrapper ${className}`,
92
+ style: {
93
+ ...style,
94
+ height: isAffixed && boxRect.height ? `${boxRect.height}px` : void 0
95
+ },
96
+ children: /* @__PURE__ */ jsx(
97
+ "div",
98
+ {
99
+ ref: contentRef,
100
+ className: `rpc_ceiling_box ${isAffixed ? "rpc_ceiling_box_affixed" : ""} ${isAffixed && blur ? "rpc_ceiling_box_blur" : ""} ${isAffixed ? affixedClassName : ""}`,
101
+ style: {
102
+ ...computeFixedStyle(),
103
+ ...isAffixed ? affixedStyle : {}
104
+ },
105
+ children: renderedContent
106
+ }
107
+ )
108
+ }
109
+ );
110
+ };
111
+ var CeilingBox_default = CeilingBox;
112
+
113
+ export { CeilingBox_default };
114
+ //# sourceMappingURL=chunk-5Q7THN6M.js.map
115
+ //# sourceMappingURL=chunk-5Q7THN6M.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../CeilingBox/index.tsx"],"names":[],"mappings":"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","file":"chunk-5Q7THN6M.js","sourcesContent":["import React, {\n\tuseState,\n\tuseEffect,\n\tuseRef,\n\tReactNode,\n\tCSSProperties,\n} from 'react';\nimport './index.less';\n\nexport interface CeilingBoxProps {\n\t/** 子元素内容,支持普通 ReactNode 或 Render Props 函数接收 isAffixed 状态 */\n\tchildren: ReactNode | ((isAffixed: boolean) => ReactNode);\n\t/** 距离视口/容器顶部的吸顶偏移距离(像素),默认为 0 */\n\toffsetTop?: number;\n\t/** 距离视口/容器底部的吸底偏移距离(像素,传值时开启吸底模式) */\n\toffsetBottom?: number;\n\t/** 监听滚动的目标 DOM 容器,不传时默认监听 window 全局滚动 */\n\ttarget?: () => HTMLElement | Window | null;\n\t/** 吸顶/吸底状态改变时的回调函数 */\n\tonChange?: (isAffixed: boolean) => void;\n\t/** 吸顶时是否自动启用毛玻璃磨砂与精致阴影滤镜,默认为 true */\n\tblur?: boolean;\n\t/** 吸顶/吸底状态下的图层层级 z-index,默认为 1000 */\n\tzIndex?: number;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义行内样式 */\n\tstyle?: CSSProperties;\n\t/** 吸顶激活状态下追加的自定义类名 */\n\taffixedClassName?: string;\n\t/** 吸顶激活状态下追加的自定义行内样式 */\n\taffixedStyle?: CSSProperties;\n}\n\nconst CeilingBox: React.FC<CeilingBoxProps> = ({\n\tchildren,\n\toffsetTop = 0,\n\toffsetBottom,\n\ttarget,\n\tonChange,\n\tblur = true,\n\tzIndex = 1000,\n\tclassName = '',\n\tstyle,\n\taffixedClassName = '',\n\taffixedStyle,\n}) => {\n\tconst [isAffixed, setIsAffixed] = useState<boolean>(false);\n\tconst [boxRect, setBoxRect] = useState<{ width: number; height: number }>({ width: 0, height: 0 });\n\n\tconst placeholderRef = useRef<HTMLDivElement>(null);\n\tconst contentRef = useRef<HTMLDivElement>(null);\n\tconst isAffixedRef = useRef<boolean>(false);\n\n\tisAffixedRef.current = isAffixed;\n\n\tuseEffect(() => {\n\t\tconst getTargetElement = (): HTMLElement | Window => {\n\t\t\tif (target) {\n\t\t\t\tconst el = target();\n\t\t\t\tif (el) return el;\n\t\t\t}\n\t\t\treturn window;\n\t\t};\n\n\t\tconst handleScroll = () => {\n\t\t\tif (!placeholderRef.current) return;\n\n\t\t\tconst targetEl = getTargetElement();\n\t\t\tconst placeholderRect = placeholderRef.current.getBoundingClientRect();\n\n\t\t\tlet targetTop = 0;\n\t\t\tlet targetBottom = window.innerHeight;\n\n\t\t\tif (targetEl !== window && targetEl instanceof HTMLElement) {\n\t\t\t\tconst containerRect = targetEl.getBoundingClientRect();\n\t\t\t\ttargetTop = containerRect.top;\n\t\t\t\ttargetBottom = containerRect.bottom;\n\t\t\t}\n\n\t\t\tlet shouldAffix = false;\n\n\t\t\tif (offsetBottom !== undefined) {\n\t\t\t\t// 吸底模式\n\t\t\t\tshouldAffix = placeholderRect.bottom >= targetBottom - offsetBottom;\n\t\t\t} else {\n\t\t\t\t// 吸顶模式 (默认)\n\t\t\t\tshouldAffix = placeholderRect.top <= targetTop + offsetTop;\n\t\t\t}\n\n\t\t\tif (shouldAffix !== isAffixedRef.current) {\n\t\t\t\t// 触发吸顶切换前记录原本的宽高\n\t\t\t\tif (shouldAffix && contentRef.current) {\n\t\t\t\t\tconst rect = contentRef.current.getBoundingClientRect();\n\t\t\t\t\tsetBoxRect({ width: rect.width, height: rect.height });\n\t\t\t\t}\n\n\t\t\t\tsetIsAffixed(shouldAffix);\n\t\t\t\tonChange?.(shouldAffix);\n\t\t\t}\n\t\t};\n\n\t\tconst targetNode = getTargetElement();\n\t\ttargetNode.addEventListener('scroll', handleScroll, { passive: true });\n\t\twindow.addEventListener('resize', handleScroll, { passive: true });\n\n\t\t// 初始检查一次\n\t\thandleScroll();\n\n\t\treturn () => {\n\t\t\ttargetNode.removeEventListener('scroll', handleScroll);\n\t\t\twindow.removeEventListener('resize', handleScroll);\n\t\t};\n\t}, [offsetTop, offsetBottom, target, onChange]);\n\n\t// 计算吸顶定位样式\n\tconst computeFixedStyle = (): CSSProperties => {\n\t\tif (!isAffixed) return {};\n\n\t\tconst fixedStyle: CSSProperties = {\n\t\t\tposition: 'fixed',\n\t\t\tzIndex,\n\t\t\twidth: boxRect.width ? `${boxRect.width}px` : '100%',\n\t\t\tboxSizing: 'border-box',\n\t\t};\n\n\t\tif (offsetBottom !== undefined) {\n\t\t\tfixedStyle.bottom = `${offsetBottom}px`;\n\t\t} else {\n\t\t\tfixedStyle.top = `${offsetTop}px`;\n\t\t}\n\n\t\tif (placeholderRef.current) {\n\t\t\tconst rect = placeholderRef.current.getBoundingClientRect();\n\t\t\tfixedStyle.left = `${rect.left}px`;\n\t\t}\n\n\t\treturn fixedStyle;\n\t};\n\n\tconst renderedContent =\n\t\ttypeof children === 'function' ? children(isAffixed) : children;\n\n\treturn (\n\t\t<div\n\t\t\tref={placeholderRef}\n\t\t\tclassName={`rpc_ceiling_box_wrapper ${className}`}\n\t\t\tstyle={{\n\t\t\t\t...style,\n\t\t\t\theight: isAffixed && boxRect.height ? `${boxRect.height}px` : undefined,\n\t\t\t}}\n\t\t>\n\t\t\t<div\n\t\t\t\tref={contentRef}\n\t\t\t\tclassName={`rpc_ceiling_box ${\n\t\t\t\t\tisAffixed ? 'rpc_ceiling_box_affixed' : ''\n\t\t\t\t} ${isAffixed && blur ? 'rpc_ceiling_box_blur' : ''} ${\n\t\t\t\t\tisAffixed ? affixedClassName : ''\n\t\t\t\t}`}\n\t\t\t\tstyle={{\n\t\t\t\t\t...computeFixedStyle(),\n\t\t\t\t\t...(isAffixed ? affixedStyle : {}),\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{renderedContent}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default CeilingBox;\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkMBOWSS4B_cjs = require('./chunk-MBOWSS4B.cjs');
3
+ var chunkR4V3EJVP_cjs = require('./chunk-R4V3EJVP.cjs');
4
4
  var react = require('react');
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
 
@@ -170,10 +170,10 @@ var DebounceSelect = ({
170
170
  }
171
171
  ),
172
172
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rpc_debounce_select_actions", children: [
173
- fetching && /* @__PURE__ */ jsxRuntime.jsx(chunkMBOWSS4B_cjs.LoadingOutlined, {}),
174
- !fetching && showClear && /* @__PURE__ */ jsxRuntime.jsx(chunkMBOWSS4B_cjs.CloseCircleFilled, { className: "rpc_debounce_select_clear_btn", onClick: handleClear }),
173
+ fetching && /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.LoadingOutlined, {}),
174
+ !fetching && showClear && /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.CloseCircleFilled, { className: "rpc_debounce_select_clear_btn", onClick: handleClear }),
175
175
  !fetching && !showClear && /* @__PURE__ */ jsxRuntime.jsx(
176
- chunkMBOWSS4B_cjs.DownOutlined,
176
+ chunkR4V3EJVP_cjs.DownOutlined,
177
177
  {
178
178
  style: {
179
179
  transform: isOpen ? "rotate(180deg)" : "rotate(0deg)",
@@ -187,7 +187,7 @@ var DebounceSelect = ({
187
187
  }
188
188
  ),
189
189
  isOpen && !disabled && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rpc_debounce_select_dropdown", children: fetching && options.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rpc_debounce_select_empty", children: [
190
- /* @__PURE__ */ jsxRuntime.jsx(chunkMBOWSS4B_cjs.LoadingOutlined, { style: { marginRight: 8 } }),
190
+ /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.LoadingOutlined, { style: { marginRight: 8 } }),
191
191
  "\u6B63\u5728\u641C\u7D22\u4E2D..."
192
192
  ] }) : options.length > 0 ? options.map((opt) => {
193
193
  const isSelected = selectedList.some((item) => item.value === opt.value);
@@ -198,7 +198,7 @@ var DebounceSelect = ({
198
198
  onClick: () => handleSelectOption(opt),
199
199
  children: [
200
200
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: opt.label }),
201
- isSelected && /* @__PURE__ */ jsxRuntime.jsx(chunkMBOWSS4B_cjs.CheckOutlined, { style: { fontSize: 12 } })
201
+ isSelected && /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.CheckOutlined, { style: { fontSize: 12 } })
202
202
  ]
203
203
  },
204
204
  opt.value
@@ -209,5 +209,5 @@ var DebounceSelect = ({
209
209
  var DebounceSelect_default = DebounceSelect;
210
210
 
211
211
  exports.DebounceSelect_default = DebounceSelect_default;
212
- //# sourceMappingURL=chunk-4BDO5TJH.cjs.map
213
- //# sourceMappingURL=chunk-4BDO5TJH.cjs.map
212
+ //# sourceMappingURL=chunk-77ANKL4K.cjs.map
213
+ //# sourceMappingURL=chunk-77ANKL4K.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../DebounceSelect/index.tsx"],"names":["useState","useRef","useMemo","useEffect","jsxs","jsx","LoadingOutlined","CloseCircleFilled","DownOutlined","CheckOutlined"],"mappings":"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","file":"chunk-4BDO5TJH.cjs","sourcesContent":["import React, { useState, useRef, useEffect, useMemo, ReactNode, CSSProperties } from 'react';\nimport {\n\tLoadingOutlined,\n\tSearchOutlined,\n\tCloseCircleFilled,\n\tDownOutlined,\n\tCheckOutlined,\n} from '../src/icons';\nimport './index.less';\n\nexport interface SelectOption {\n\tlabel: ReactNode;\n\tvalue: string | number;\n\tdisabled?: boolean;\n\t[key: string]: unknown;\n}\n\nexport type SelectValue =\n\tstring | number | SelectOption | (string | number | SelectOption)[] | undefined;\n\nexport interface DebounceSelectProps {\n\t/** 异步拉取选项列表的函数 */\n\tfetchOptions: (search: string) => Promise<SelectOption[]>;\n\t/** 防抖等待时间(毫秒),默认为 300ms */\n\tdebounceTimeout?: number;\n\t/** 选择模式:'single' 单选,'multiple' 多选(Tag标签形式) */\n\tmode?: 'single' | 'multiple';\n\t/** 当前选中值 */\n\tvalue?: SelectValue;\n\t/** 默认选中值 */\n\tdefaultValue?: SelectValue;\n\t/** 选中值变化回调 */\n\tonChange?: (value: SelectValue, option?: SelectOption | SelectOption[]) => void;\n\t/** 输入框占位符 */\n\tplaceholder?: string;\n\t/** 是否支持清空 */\n\tallowClear?: boolean;\n\t/** 是否禁用 */\n\tdisabled?: boolean;\n\t/** 空数据时的展示内容 */\n\tnotFoundContent?: ReactNode;\n\t/** 默认选项列表(搜索前展示) */\n\tdefaultOptions?: SelectOption[];\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst DebounceSelect: React.FC<DebounceSelectProps> = ({\n\tfetchOptions,\n\tdebounceTimeout = 300,\n\tmode = 'single',\n\tvalue: controlledValue,\n\tdefaultValue,\n\tonChange,\n\tplaceholder = '请输入搜索内容...',\n\tallowClear = true,\n\tdisabled = false,\n\tnotFoundContent = '暂无匹配数据',\n\tdefaultOptions = [],\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalValue, setInternalValue] = useState<SelectValue>(\n\t\tdefaultValue ?? (mode === 'multiple' ? [] : undefined),\n\t);\n\n\tconst currentValue = controlledValue !== undefined ? controlledValue : internalValue;\n\n\tconst [options, setOptions] = useState<SelectOption[]>(defaultOptions);\n\tconst [fetching, setFetching] = useState<boolean>(false);\n\tconst [searchValue, setSearchValue] = useState<string>('');\n\tconst [isOpen, setIsOpen] = useState<boolean>(false);\n\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst fetchRef = useRef<number>(0);\n\tconst debounceTimerRef = useRef<number | null>(null);\n\n\t// 解析格式化已选值,统一定位到数组格式\n\tconst selectedList: SelectOption[] = useMemo(() => {\n\t\tif (currentValue === undefined || currentValue === null) return [];\n\t\tconst rawArr = Array.isArray(currentValue) ? currentValue : [currentValue];\n\t\treturn rawArr.map((item) => {\n\t\t\tif (typeof item === 'object' && item !== null && 'value' in item) {\n\t\t\t\treturn item as SelectOption;\n\t\t\t}\n\t\t\tconst matched = options.find((opt) => opt.value === item);\n\t\t\treturn matched || { label: String(item), value: item as string | number };\n\t\t});\n\t}, [currentValue, options]);\n\n\t// 异步搜索逻辑(带时序竞态控制)\n\tconst performSearch = (kw: string) => {\n\t\tfetchRef.current += 1;\n\t\tconst fetchId = fetchRef.current;\n\n\t\tif (debounceTimerRef.current) {\n\t\t\twindow.clearTimeout(debounceTimerRef.current);\n\t\t}\n\n\t\tdebounceTimerRef.current = window.setTimeout(() => {\n\t\t\tsetFetching(true);\n\t\t\tfetchOptions(kw)\n\t\t\t\t.then((newOptions) => {\n\t\t\t\t\t// 仅当当前请求是最新一次发起的请求时才更新 options\n\t\t\t\t\tif (fetchId === fetchRef.current) {\n\t\t\t\t\t\tsetOptions(newOptions);\n\t\t\t\t\t\tsetFetching(false);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tif (fetchId === fetchRef.current) {\n\t\t\t\t\t\tsetOptions([]);\n\t\t\t\t\t\tsetFetching(false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}, debounceTimeout);\n\t};\n\n\t// 监听输入变化\n\tconst handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst val = e.target.value;\n\t\tsetSearchValue(val);\n\t\tif (!isOpen) setIsOpen(true);\n\t\tperformSearch(val);\n\t};\n\n\t// 点击外部关闭弹窗\n\tuseEffect(() => {\n\t\tconst handleClickOutside = (e: MouseEvent) => {\n\t\t\tif (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n\t\t\t\tsetIsOpen(false);\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener('mousedown', handleClickOutside);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('mousedown', handleClickOutside);\n\t\t\tif (debounceTimerRef.current) {\n\t\t\t\twindow.clearTimeout(debounceTimerRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\t// 选中项处理\n\tconst handleSelectOption = (option: SelectOption) => {\n\t\tif (option.disabled) return;\n\n\t\tif (mode === 'single') {\n\t\t\tif (controlledValue === undefined) {\n\t\t\t\tsetInternalValue(option.value);\n\t\t\t}\n\t\t\tonChange?.(option.value, option);\n\t\t\tsetIsOpen(false);\n\t\t\tsetSearchValue('');\n\t\t} else {\n\t\t\tconst exists = selectedList.some((item) => item.value === option.value);\n\t\t\tlet nextSelected: SelectOption[];\n\t\t\tif (exists) {\n\t\t\t\tnextSelected = selectedList.filter((item) => item.value !== option.value);\n\t\t\t} else {\n\t\t\t\tnextSelected = [...selectedList, option];\n\t\t\t}\n\t\t\tconst nextValues = nextSelected.map((item) => item.value);\n\t\t\tif (controlledValue === undefined) {\n\t\t\t\tsetInternalValue(nextValues);\n\t\t\t}\n\t\t\tonChange?.(nextValues, nextSelected);\n\t\t\tsetSearchValue('');\n\t\t\tinputRef.current?.focus();\n\t\t}\n\t};\n\n\t// 移除选中 Tag\n\tconst handleRemoveTag = (e: React.MouseEvent, val: string | number) => {\n\t\te.stopPropagation();\n\t\tconst nextSelected = selectedList.filter((item) => item.value !== val);\n\t\tconst nextValues = nextSelected.map((item) => item.value);\n\t\tif (controlledValue === undefined) {\n\t\t\tsetInternalValue(nextValues);\n\t\t}\n\t\tonChange?.(nextValues, nextSelected);\n\t};\n\n\t// 清空全部\n\tconst handleClear = (e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tconst emptyVal = mode === 'multiple' ? [] : undefined;\n\t\tif (controlledValue === undefined) {\n\t\t\tsetInternalValue(emptyVal);\n\t\t}\n\t\tonChange?.(emptyVal, mode === 'multiple' ? [] : undefined);\n\t\tsetSearchValue('');\n\t};\n\n\tconst showClear = allowClear && !disabled && (selectedList.length > 0 || searchValue.length > 0);\n\n\treturn (\n\t\t<div ref={containerRef} className={`rpc_debounce_select ${className}`} style={style}>\n\t\t\t<div\n\t\t\t\tclassName={`rpc_debounce_select_selector ${\n\t\t\t\t\tisOpen ? 'rpc_debounce_select_selector_focused' : ''\n\t\t\t\t} ${disabled ? 'rpc_debounce_select_selector_disabled' : ''}`}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tif (!disabled) {\n\t\t\t\t\t\tsetIsOpen(true);\n\t\t\t\t\t\tinputRef.current?.focus();\n\t\t\t\t\t\tif (options.length === 0 && !searchValue) {\n\t\t\t\t\t\t\tperformSearch('');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{/* 多选 Tags */}\n\t\t\t\t{mode === 'multiple' &&\n\t\t\t\t\tselectedList.map((item) => (\n\t\t\t\t\t\t<span key={item.value} className=\"rpc_debounce_select_tag\">\n\t\t\t\t\t\t\t<span>{item.label}</span>\n\t\t\t\t\t\t\t{!disabled && (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_debounce_select_tag_close\"\n\t\t\t\t\t\t\t\t\tonClick={(e) => handleRemoveTag(e, item.value)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t×\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t))}\n\n\t\t\t\t{/* 单选回显值或输入框 */}\n\t\t\t\t{mode === 'single' && selectedList.length > 0 && !searchValue && !isOpen && (\n\t\t\t\t\t<span style={{ color: '#262626', marginRight: 4 }}>{selectedList[0].label}</span>\n\t\t\t\t)}\n\n\t\t\t\t<input\n\t\t\t\t\tref={inputRef}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tclassName=\"rpc_debounce_select_input\"\n\t\t\t\t\tvalue={searchValue}\n\t\t\t\t\tonChange={handleInputChange}\n\t\t\t\t\tplaceholder={selectedList.length === 0 ? placeholder : ''}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t/>\n\n\t\t\t\t{/* 右侧动作按钮 */}\n\t\t\t\t<div className=\"rpc_debounce_select_actions\">\n\t\t\t\t\t{fetching && <LoadingOutlined />}\n\t\t\t\t\t{!fetching && showClear && (\n\t\t\t\t\t\t<CloseCircleFilled className=\"rpc_debounce_select_clear_btn\" onClick={handleClear} />\n\t\t\t\t\t)}\n\t\t\t\t\t{!fetching && !showClear && (\n\t\t\t\t\t\t<DownOutlined\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\ttransform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n\t\t\t\t\t\t\t\ttransition: 'transform 0.2s',\n\t\t\t\t\t\t\t\tfontSize: 10,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* 下拉浮层 */}\n\t\t\t{isOpen && !disabled && (\n\t\t\t\t<div className=\"rpc_debounce_select_dropdown\">\n\t\t\t\t\t{fetching && options.length === 0 ? (\n\t\t\t\t\t\t<div className=\"rpc_debounce_select_empty\">\n\t\t\t\t\t\t\t<LoadingOutlined style={{ marginRight: 8 }} />\n\t\t\t\t\t\t\t正在搜索中...\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : options.length > 0 ? (\n\t\t\t\t\t\toptions.map((opt) => {\n\t\t\t\t\t\t\tconst isSelected = selectedList.some((item) => item.value === opt.value);\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={opt.value}\n\t\t\t\t\t\t\t\t\tclassName={`rpc_debounce_select_item ${\n\t\t\t\t\t\t\t\t\t\tisSelected ? 'rpc_debounce_select_item_selected' : ''\n\t\t\t\t\t\t\t\t\t} ${opt.disabled ? 'rpc_debounce_select_item_disabled' : ''}`}\n\t\t\t\t\t\t\t\t\tonClick={() => handleSelectOption(opt)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span>{opt.label}</span>\n\t\t\t\t\t\t\t\t\t{isSelected && <CheckOutlined style={{ fontSize: 12 }} />}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"rpc_debounce_select_empty\">{notFoundContent}</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default DebounceSelect;\n"]}
1
+ {"version":3,"sources":["../DebounceSelect/index.tsx"],"names":["useState","useRef","useMemo","useEffect","jsxs","jsx","LoadingOutlined","CloseCircleFilled","DownOutlined","CheckOutlined"],"mappings":"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","file":"chunk-77ANKL4K.cjs","sourcesContent":["import React, { useState, useRef, useEffect, useMemo, ReactNode, CSSProperties } from 'react';\nimport {\n\tLoadingOutlined,\n\tSearchOutlined,\n\tCloseCircleFilled,\n\tDownOutlined,\n\tCheckOutlined,\n} from '../src/icons';\nimport './index.less';\n\nexport interface SelectOption {\n\tlabel: ReactNode;\n\tvalue: string | number;\n\tdisabled?: boolean;\n\t[key: string]: unknown;\n}\n\nexport type SelectValue =\n\tstring | number | SelectOption | (string | number | SelectOption)[] | undefined;\n\nexport interface DebounceSelectProps {\n\t/** 异步拉取选项列表的函数 */\n\tfetchOptions: (search: string) => Promise<SelectOption[]>;\n\t/** 防抖等待时间(毫秒),默认为 300ms */\n\tdebounceTimeout?: number;\n\t/** 选择模式:'single' 单选,'multiple' 多选(Tag标签形式) */\n\tmode?: 'single' | 'multiple';\n\t/** 当前选中值 */\n\tvalue?: SelectValue;\n\t/** 默认选中值 */\n\tdefaultValue?: SelectValue;\n\t/** 选中值变化回调 */\n\tonChange?: (value: SelectValue, option?: SelectOption | SelectOption[]) => void;\n\t/** 输入框占位符 */\n\tplaceholder?: string;\n\t/** 是否支持清空 */\n\tallowClear?: boolean;\n\t/** 是否禁用 */\n\tdisabled?: boolean;\n\t/** 空数据时的展示内容 */\n\tnotFoundContent?: ReactNode;\n\t/** 默认选项列表(搜索前展示) */\n\tdefaultOptions?: SelectOption[];\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst DebounceSelect: React.FC<DebounceSelectProps> = ({\n\tfetchOptions,\n\tdebounceTimeout = 300,\n\tmode = 'single',\n\tvalue: controlledValue,\n\tdefaultValue,\n\tonChange,\n\tplaceholder = '请输入搜索内容...',\n\tallowClear = true,\n\tdisabled = false,\n\tnotFoundContent = '暂无匹配数据',\n\tdefaultOptions = [],\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalValue, setInternalValue] = useState<SelectValue>(\n\t\tdefaultValue ?? (mode === 'multiple' ? [] : undefined),\n\t);\n\n\tconst currentValue = controlledValue !== undefined ? controlledValue : internalValue;\n\n\tconst [options, setOptions] = useState<SelectOption[]>(defaultOptions);\n\tconst [fetching, setFetching] = useState<boolean>(false);\n\tconst [searchValue, setSearchValue] = useState<string>('');\n\tconst [isOpen, setIsOpen] = useState<boolean>(false);\n\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst fetchRef = useRef<number>(0);\n\tconst debounceTimerRef = useRef<number | null>(null);\n\n\t// 解析格式化已选值,统一定位到数组格式\n\tconst selectedList: SelectOption[] = useMemo(() => {\n\t\tif (currentValue === undefined || currentValue === null) return [];\n\t\tconst rawArr = Array.isArray(currentValue) ? currentValue : [currentValue];\n\t\treturn rawArr.map((item) => {\n\t\t\tif (typeof item === 'object' && item !== null && 'value' in item) {\n\t\t\t\treturn item as SelectOption;\n\t\t\t}\n\t\t\tconst matched = options.find((opt) => opt.value === item);\n\t\t\treturn matched || { label: String(item), value: item as string | number };\n\t\t});\n\t}, [currentValue, options]);\n\n\t// 异步搜索逻辑(带时序竞态控制)\n\tconst performSearch = (kw: string) => {\n\t\tfetchRef.current += 1;\n\t\tconst fetchId = fetchRef.current;\n\n\t\tif (debounceTimerRef.current) {\n\t\t\twindow.clearTimeout(debounceTimerRef.current);\n\t\t}\n\n\t\tdebounceTimerRef.current = window.setTimeout(() => {\n\t\t\tsetFetching(true);\n\t\t\tfetchOptions(kw)\n\t\t\t\t.then((newOptions) => {\n\t\t\t\t\t// 仅当当前请求是最新一次发起的请求时才更新 options\n\t\t\t\t\tif (fetchId === fetchRef.current) {\n\t\t\t\t\t\tsetOptions(newOptions);\n\t\t\t\t\t\tsetFetching(false);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tif (fetchId === fetchRef.current) {\n\t\t\t\t\t\tsetOptions([]);\n\t\t\t\t\t\tsetFetching(false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}, debounceTimeout);\n\t};\n\n\t// 监听输入变化\n\tconst handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst val = e.target.value;\n\t\tsetSearchValue(val);\n\t\tif (!isOpen) setIsOpen(true);\n\t\tperformSearch(val);\n\t};\n\n\t// 点击外部关闭弹窗\n\tuseEffect(() => {\n\t\tconst handleClickOutside = (e: MouseEvent) => {\n\t\t\tif (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n\t\t\t\tsetIsOpen(false);\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener('mousedown', handleClickOutside);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('mousedown', handleClickOutside);\n\t\t\tif (debounceTimerRef.current) {\n\t\t\t\twindow.clearTimeout(debounceTimerRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\t// 选中项处理\n\tconst handleSelectOption = (option: SelectOption) => {\n\t\tif (option.disabled) return;\n\n\t\tif (mode === 'single') {\n\t\t\tif (controlledValue === undefined) {\n\t\t\t\tsetInternalValue(option.value);\n\t\t\t}\n\t\t\tonChange?.(option.value, option);\n\t\t\tsetIsOpen(false);\n\t\t\tsetSearchValue('');\n\t\t} else {\n\t\t\tconst exists = selectedList.some((item) => item.value === option.value);\n\t\t\tlet nextSelected: SelectOption[];\n\t\t\tif (exists) {\n\t\t\t\tnextSelected = selectedList.filter((item) => item.value !== option.value);\n\t\t\t} else {\n\t\t\t\tnextSelected = [...selectedList, option];\n\t\t\t}\n\t\t\tconst nextValues = nextSelected.map((item) => item.value);\n\t\t\tif (controlledValue === undefined) {\n\t\t\t\tsetInternalValue(nextValues);\n\t\t\t}\n\t\t\tonChange?.(nextValues, nextSelected);\n\t\t\tsetSearchValue('');\n\t\t\tinputRef.current?.focus();\n\t\t}\n\t};\n\n\t// 移除选中 Tag\n\tconst handleRemoveTag = (e: React.MouseEvent, val: string | number) => {\n\t\te.stopPropagation();\n\t\tconst nextSelected = selectedList.filter((item) => item.value !== val);\n\t\tconst nextValues = nextSelected.map((item) => item.value);\n\t\tif (controlledValue === undefined) {\n\t\t\tsetInternalValue(nextValues);\n\t\t}\n\t\tonChange?.(nextValues, nextSelected);\n\t};\n\n\t// 清空全部\n\tconst handleClear = (e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tconst emptyVal = mode === 'multiple' ? [] : undefined;\n\t\tif (controlledValue === undefined) {\n\t\t\tsetInternalValue(emptyVal);\n\t\t}\n\t\tonChange?.(emptyVal, mode === 'multiple' ? [] : undefined);\n\t\tsetSearchValue('');\n\t};\n\n\tconst showClear = allowClear && !disabled && (selectedList.length > 0 || searchValue.length > 0);\n\n\treturn (\n\t\t<div ref={containerRef} className={`rpc_debounce_select ${className}`} style={style}>\n\t\t\t<div\n\t\t\t\tclassName={`rpc_debounce_select_selector ${\n\t\t\t\t\tisOpen ? 'rpc_debounce_select_selector_focused' : ''\n\t\t\t\t} ${disabled ? 'rpc_debounce_select_selector_disabled' : ''}`}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tif (!disabled) {\n\t\t\t\t\t\tsetIsOpen(true);\n\t\t\t\t\t\tinputRef.current?.focus();\n\t\t\t\t\t\tif (options.length === 0 && !searchValue) {\n\t\t\t\t\t\t\tperformSearch('');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{/* 多选 Tags */}\n\t\t\t\t{mode === 'multiple' &&\n\t\t\t\t\tselectedList.map((item) => (\n\t\t\t\t\t\t<span key={item.value} className=\"rpc_debounce_select_tag\">\n\t\t\t\t\t\t\t<span>{item.label}</span>\n\t\t\t\t\t\t\t{!disabled && (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_debounce_select_tag_close\"\n\t\t\t\t\t\t\t\t\tonClick={(e) => handleRemoveTag(e, item.value)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t×\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t))}\n\n\t\t\t\t{/* 单选回显值或输入框 */}\n\t\t\t\t{mode === 'single' && selectedList.length > 0 && !searchValue && !isOpen && (\n\t\t\t\t\t<span style={{ color: '#262626', marginRight: 4 }}>{selectedList[0].label}</span>\n\t\t\t\t)}\n\n\t\t\t\t<input\n\t\t\t\t\tref={inputRef}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tclassName=\"rpc_debounce_select_input\"\n\t\t\t\t\tvalue={searchValue}\n\t\t\t\t\tonChange={handleInputChange}\n\t\t\t\t\tplaceholder={selectedList.length === 0 ? placeholder : ''}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t/>\n\n\t\t\t\t{/* 右侧动作按钮 */}\n\t\t\t\t<div className=\"rpc_debounce_select_actions\">\n\t\t\t\t\t{fetching && <LoadingOutlined />}\n\t\t\t\t\t{!fetching && showClear && (\n\t\t\t\t\t\t<CloseCircleFilled className=\"rpc_debounce_select_clear_btn\" onClick={handleClear} />\n\t\t\t\t\t)}\n\t\t\t\t\t{!fetching && !showClear && (\n\t\t\t\t\t\t<DownOutlined\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\ttransform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n\t\t\t\t\t\t\t\ttransition: 'transform 0.2s',\n\t\t\t\t\t\t\t\tfontSize: 10,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* 下拉浮层 */}\n\t\t\t{isOpen && !disabled && (\n\t\t\t\t<div className=\"rpc_debounce_select_dropdown\">\n\t\t\t\t\t{fetching && options.length === 0 ? (\n\t\t\t\t\t\t<div className=\"rpc_debounce_select_empty\">\n\t\t\t\t\t\t\t<LoadingOutlined style={{ marginRight: 8 }} />\n\t\t\t\t\t\t\t正在搜索中...\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : options.length > 0 ? (\n\t\t\t\t\t\toptions.map((opt) => {\n\t\t\t\t\t\t\tconst isSelected = selectedList.some((item) => item.value === opt.value);\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={opt.value}\n\t\t\t\t\t\t\t\t\tclassName={`rpc_debounce_select_item ${\n\t\t\t\t\t\t\t\t\t\tisSelected ? 'rpc_debounce_select_item_selected' : ''\n\t\t\t\t\t\t\t\t\t} ${opt.disabled ? 'rpc_debounce_select_item_disabled' : ''}`}\n\t\t\t\t\t\t\t\t\tonClick={() => handleSelectOption(opt)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span>{opt.label}</span>\n\t\t\t\t\t\t\t\t\t{isSelected && <CheckOutlined style={{ fontSize: 12 }} />}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"rpc_debounce_select_empty\">{notFoundContent}</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default DebounceSelect;\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkMBOWSS4B_cjs = require('./chunk-MBOWSS4B.cjs');
3
+ var chunkR4V3EJVP_cjs = require('./chunk-R4V3EJVP.cjs');
4
4
  var react = require('react');
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
 
@@ -89,7 +89,7 @@ var PasswordStrength = ({
89
89
  {
90
90
  className: `rpc_password_strength_rule_item ${isPassed ? "rpc_password_strength_rule_item_passed" : ""}`,
91
91
  children: [
92
- isPassed ? /* @__PURE__ */ jsxRuntime.jsx(chunkMBOWSS4B_cjs.CheckOutlined, { style: { fontSize: 11 } }) : /* @__PURE__ */ jsxRuntime.jsx(chunkMBOWSS4B_cjs.CloseOutlined, { style: { fontSize: 10, opacity: 0.5 } }),
92
+ isPassed ? /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.CheckOutlined, { style: { fontSize: 11 } }) : /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.CloseOutlined, { style: { fontSize: 10, opacity: 0.5 } }),
93
93
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: r.label })
94
94
  ]
95
95
  },
@@ -102,5 +102,5 @@ var PasswordStrength_default = PasswordStrength;
102
102
 
103
103
  exports.PasswordStrength_default = PasswordStrength_default;
104
104
  exports.evaluatePasswordStrength = evaluatePasswordStrength;
105
- //# sourceMappingURL=chunk-OCN7L2ID.cjs.map
106
- //# sourceMappingURL=chunk-OCN7L2ID.cjs.map
105
+ //# sourceMappingURL=chunk-7ZBA4NHH.cjs.map
106
+ //# sourceMappingURL=chunk-7ZBA4NHH.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../PasswordStrength/index.tsx"],"names":["useMemo","jsx","jsxs","CheckOutlined","CloseOutlined"],"mappings":"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","file":"chunk-OCN7L2ID.cjs","sourcesContent":["import React, { useMemo, ReactNode, CSSProperties } from 'react';\nimport { CheckOutlined, CloseOutlined } from '../src/icons';\nimport './index.less';\n\nexport type PasswordStrengthLevel = 0 | 1 | 2 | 3 | 4;\n\nexport interface PasswordRule {\n\tkey: string;\n\tlabel: ReactNode;\n\tvalidator: (password: string) => boolean;\n}\n\nexport interface PasswordStrengthProps {\n\t/** 当前输入的密码文本 */\n\tpassword?: string;\n\t/** 是否显示密码强度文字(弱/中/强/极强),默认为 true */\n\tshowText?: boolean;\n\t/** 是否显示密码规则校验清单,默认为 false */\n\tshowRules?: boolean;\n\t/** 自定义规则列表 */\n\trules?: PasswordRule[];\n\t/** 强度等级改变回调 */\n\tonLevelChange?: (level: PasswordStrengthLevel) => void;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst defaultRules: PasswordRule[] = [\n\t{\n\t\tkey: 'length',\n\t\tlabel: '长度至少 8 位',\n\t\tvalidator: (pwd) => pwd.length >= 8,\n\t},\n\t{\n\t\tkey: 'lowercase',\n\t\tlabel: '包含小写字母 (a-z)',\n\t\tvalidator: (pwd) => /[a-z]/.test(pwd),\n\t},\n\t{\n\t\tkey: 'uppercase',\n\t\tlabel: '包含大写字母 (A-Z)',\n\t\tvalidator: (pwd) => /[A-Z]/.test(pwd),\n\t},\n\t{\n\t\tkey: 'number',\n\t\tlabel: '包含数字 (0-9)',\n\t\tvalidator: (pwd) => /[0-9]/.test(pwd),\n\t},\n\t{\n\t\tkey: 'special',\n\t\tlabel: '包含特殊符号 (!@#$...)',\n\t\tvalidator: (pwd) => /[^A-Za-z0-9]/.test(pwd),\n\t},\n];\n\n// 计算密码强度得分 (0~4)\nexport function evaluatePasswordStrength(\n\tpwd: string = '',\n\trules: PasswordRule[] = defaultRules,\n): { level: PasswordStrengthLevel; score: number; passedKeys: string[] } {\n\tif (!pwd) {\n\t\treturn { level: 0, score: 0, passedKeys: [] };\n\t}\n\n\tconst passedKeys = rules.filter((r) => r.validator(pwd)).map((r) => r.key);\n\tlet score = passedKeys.length;\n\n\t// 如果长度过短(<6),强制判定为弱\n\tif (pwd.length < 6) {\n\t\treturn { level: 1, score: 1, passedKeys };\n\t}\n\n\tlet level: PasswordStrengthLevel = 1;\n\tif (score <= 1) level = 1;\n\telse if (score <= 3) level = 2;\n\telse if (score === 4) level = 3;\n\telse level = 4;\n\n\treturn { level, score, passedKeys };\n}\n\nconst levelConfig: Record<\n\tPasswordStrengthLevel,\n\t{ text: string; color: string; classSuffix: string }\n> = {\n\t0: { text: '', color: '#d9d9d9', classSuffix: '' },\n\t1: { text: '强度较弱', color: '#ff4d4f', classSuffix: 'weak' },\n\t2: { text: '强度中等', color: '#fa8c16', classSuffix: 'medium' },\n\t3: { text: '强度良好', color: '#1677ff', classSuffix: 'good' },\n\t4: { text: '强度极高', color: '#52c41a', classSuffix: 'strong' },\n};\n\nconst PasswordStrength: React.FC<PasswordStrengthProps> = ({\n\tpassword = '',\n\tshowText = true,\n\tshowRules = false,\n\trules = defaultRules,\n\tonLevelChange,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst { level, passedKeys } = useMemo(() => {\n\t\tconst res = evaluatePasswordStrength(password, rules);\n\t\tonLevelChange?.(res.level);\n\t\treturn res;\n\t}, [password, rules, onLevelChange]);\n\n\tconst currentInfo = levelConfig[level];\n\n\treturn (\n\t\t<div className={`rpc_password_strength ${className}`} style={style}>\n\t\t\t{/* 4 段彩色进度条 */}\n\t\t\t<div className=\"rpc_password_strength_bars\">\n\t\t\t\t{[1, 2, 3, 4].map((segIndex) => {\n\t\t\t\t\tconst isActive = level >= segIndex;\n\t\t\t\t\tconst segmentClass = [\n\t\t\t\t\t\t'rpc_password_strength_bar_segment',\n\t\t\t\t\t\tisActive && currentInfo.classSuffix\n\t\t\t\t\t\t\t? `rpc_password_strength_bar_segment_active_${currentInfo.classSuffix}`\n\t\t\t\t\t\t\t: '',\n\t\t\t\t\t]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(' ');\n\n\t\t\t\t\treturn <div key={segIndex} className={segmentClass} />;\n\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t{/* 文本说明 */}\n\t\t\t{showText && (\n\t\t\t\t<div className=\"rpc_password_strength_label\">\n\t\t\t\t\t<span>密码安全性</span>\n\t\t\t\t\t<span className=\"rpc_password_strength_level_text\" style={{ color: currentInfo.color }}>\n\t\t\t\t\t\t{password ? currentInfo.text : '未输入密码'}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* 规则校验列表 */}\n\t\t\t{showRules && (\n\t\t\t\t<div className=\"rpc_password_strength_rules\">\n\t\t\t\t\t{rules.map((r) => {\n\t\t\t\t\t\tconst isPassed = passedKeys.includes(r.key);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={r.key}\n\t\t\t\t\t\t\t\tclassName={`rpc_password_strength_rule_item ${\n\t\t\t\t\t\t\t\t\tisPassed ? 'rpc_password_strength_rule_item_passed' : ''\n\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{isPassed ? (\n\t\t\t\t\t\t\t\t\t<CheckOutlined style={{ fontSize: 11 }} />\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<CloseOutlined style={{ fontSize: 10, opacity: 0.5 }} />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<span>{r.label}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default PasswordStrength;\n"]}
1
+ {"version":3,"sources":["../PasswordStrength/index.tsx"],"names":["useMemo","jsx","jsxs","CheckOutlined","CloseOutlined"],"mappings":"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","file":"chunk-7ZBA4NHH.cjs","sourcesContent":["import React, { useMemo, ReactNode, CSSProperties } from 'react';\nimport { CheckOutlined, CloseOutlined } from '../src/icons';\nimport './index.less';\n\nexport type PasswordStrengthLevel = 0 | 1 | 2 | 3 | 4;\n\nexport interface PasswordRule {\n\tkey: string;\n\tlabel: ReactNode;\n\tvalidator: (password: string) => boolean;\n}\n\nexport interface PasswordStrengthProps {\n\t/** 当前输入的密码文本 */\n\tpassword?: string;\n\t/** 是否显示密码强度文字(弱/中/强/极强),默认为 true */\n\tshowText?: boolean;\n\t/** 是否显示密码规则校验清单,默认为 false */\n\tshowRules?: boolean;\n\t/** 自定义规则列表 */\n\trules?: PasswordRule[];\n\t/** 强度等级改变回调 */\n\tonLevelChange?: (level: PasswordStrengthLevel) => void;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst defaultRules: PasswordRule[] = [\n\t{\n\t\tkey: 'length',\n\t\tlabel: '长度至少 8 位',\n\t\tvalidator: (pwd) => pwd.length >= 8,\n\t},\n\t{\n\t\tkey: 'lowercase',\n\t\tlabel: '包含小写字母 (a-z)',\n\t\tvalidator: (pwd) => /[a-z]/.test(pwd),\n\t},\n\t{\n\t\tkey: 'uppercase',\n\t\tlabel: '包含大写字母 (A-Z)',\n\t\tvalidator: (pwd) => /[A-Z]/.test(pwd),\n\t},\n\t{\n\t\tkey: 'number',\n\t\tlabel: '包含数字 (0-9)',\n\t\tvalidator: (pwd) => /[0-9]/.test(pwd),\n\t},\n\t{\n\t\tkey: 'special',\n\t\tlabel: '包含特殊符号 (!@#$...)',\n\t\tvalidator: (pwd) => /[^A-Za-z0-9]/.test(pwd),\n\t},\n];\n\n// 计算密码强度得分 (0~4)\nexport function evaluatePasswordStrength(\n\tpwd: string = '',\n\trules: PasswordRule[] = defaultRules,\n): { level: PasswordStrengthLevel; score: number; passedKeys: string[] } {\n\tif (!pwd) {\n\t\treturn { level: 0, score: 0, passedKeys: [] };\n\t}\n\n\tconst passedKeys = rules.filter((r) => r.validator(pwd)).map((r) => r.key);\n\tlet score = passedKeys.length;\n\n\t// 如果长度过短(<6),强制判定为弱\n\tif (pwd.length < 6) {\n\t\treturn { level: 1, score: 1, passedKeys };\n\t}\n\n\tlet level: PasswordStrengthLevel = 1;\n\tif (score <= 1) level = 1;\n\telse if (score <= 3) level = 2;\n\telse if (score === 4) level = 3;\n\telse level = 4;\n\n\treturn { level, score, passedKeys };\n}\n\nconst levelConfig: Record<\n\tPasswordStrengthLevel,\n\t{ text: string; color: string; classSuffix: string }\n> = {\n\t0: { text: '', color: '#d9d9d9', classSuffix: '' },\n\t1: { text: '强度较弱', color: '#ff4d4f', classSuffix: 'weak' },\n\t2: { text: '强度中等', color: '#fa8c16', classSuffix: 'medium' },\n\t3: { text: '强度良好', color: '#1677ff', classSuffix: 'good' },\n\t4: { text: '强度极高', color: '#52c41a', classSuffix: 'strong' },\n};\n\nconst PasswordStrength: React.FC<PasswordStrengthProps> = ({\n\tpassword = '',\n\tshowText = true,\n\tshowRules = false,\n\trules = defaultRules,\n\tonLevelChange,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst { level, passedKeys } = useMemo(() => {\n\t\tconst res = evaluatePasswordStrength(password, rules);\n\t\tonLevelChange?.(res.level);\n\t\treturn res;\n\t}, [password, rules, onLevelChange]);\n\n\tconst currentInfo = levelConfig[level];\n\n\treturn (\n\t\t<div className={`rpc_password_strength ${className}`} style={style}>\n\t\t\t{/* 4 段彩色进度条 */}\n\t\t\t<div className=\"rpc_password_strength_bars\">\n\t\t\t\t{[1, 2, 3, 4].map((segIndex) => {\n\t\t\t\t\tconst isActive = level >= segIndex;\n\t\t\t\t\tconst segmentClass = [\n\t\t\t\t\t\t'rpc_password_strength_bar_segment',\n\t\t\t\t\t\tisActive && currentInfo.classSuffix\n\t\t\t\t\t\t\t? `rpc_password_strength_bar_segment_active_${currentInfo.classSuffix}`\n\t\t\t\t\t\t\t: '',\n\t\t\t\t\t]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(' ');\n\n\t\t\t\t\treturn <div key={segIndex} className={segmentClass} />;\n\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t{/* 文本说明 */}\n\t\t\t{showText && (\n\t\t\t\t<div className=\"rpc_password_strength_label\">\n\t\t\t\t\t<span>密码安全性</span>\n\t\t\t\t\t<span className=\"rpc_password_strength_level_text\" style={{ color: currentInfo.color }}>\n\t\t\t\t\t\t{password ? currentInfo.text : '未输入密码'}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* 规则校验列表 */}\n\t\t\t{showRules && (\n\t\t\t\t<div className=\"rpc_password_strength_rules\">\n\t\t\t\t\t{rules.map((r) => {\n\t\t\t\t\t\tconst isPassed = passedKeys.includes(r.key);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={r.key}\n\t\t\t\t\t\t\t\tclassName={`rpc_password_strength_rule_item ${\n\t\t\t\t\t\t\t\t\tisPassed ? 'rpc_password_strength_rule_item_passed' : ''\n\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{isPassed ? (\n\t\t\t\t\t\t\t\t\t<CheckOutlined style={{ fontSize: 11 }} />\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<CloseOutlined style={{ fontSize: 10, opacity: 0.5 }} />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<span>{r.label}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default PasswordStrength;\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkMBOWSS4B_cjs = require('./chunk-MBOWSS4B.cjs');
3
+ var chunkR4V3EJVP_cjs = require('./chunk-R4V3EJVP.cjs');
4
4
  var react = require('react');
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
 
@@ -120,8 +120,8 @@ var Fullscreen = react.forwardRef(
120
120
  }, [mode, isFullscreen, exit]);
121
121
  const positionClass = `rpc_fullscreen_container_action_btn_${buttonPosition.replace("-", "_")}`;
122
122
  const isWebFsActive = mode === "web" && isFullscreen;
123
- const currentEnterIcon = enterIcon != null ? enterIcon : /* @__PURE__ */ jsxRuntime.jsx(chunkMBOWSS4B_cjs.FullscreenOutlined, {});
124
- const currentExitIcon = exitIcon != null ? exitIcon : /* @__PURE__ */ jsxRuntime.jsx(chunkMBOWSS4B_cjs.FullscreenExitOutlined, {});
123
+ const currentEnterIcon = enterIcon != null ? enterIcon : /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.FullscreenOutlined, {});
124
+ const currentExitIcon = exitIcon != null ? exitIcon : /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.FullscreenExitOutlined, {});
125
125
  return /* @__PURE__ */ jsxRuntime.jsxs(
126
126
  "div",
127
127
  {
@@ -157,5 +157,5 @@ Fullscreen.displayName = "Fullscreen";
157
157
  var Fullscreen_default = Fullscreen;
158
158
 
159
159
  exports.Fullscreen_default = Fullscreen_default;
160
- //# sourceMappingURL=chunk-MY4M7HVW.cjs.map
161
- //# sourceMappingURL=chunk-MY4M7HVW.cjs.map
160
+ //# sourceMappingURL=chunk-AHTRLNYK.cjs.map
161
+ //# sourceMappingURL=chunk-AHTRLNYK.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../Fullscreen/index.tsx"],"names":["forwardRef","useRef","useState","useCallback","useImperativeHandle","useEffect","jsx","FullscreenOutlined","FullscreenExitOutlined","jsxs"],"mappings":"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","file":"chunk-MY4M7HVW.cjs","sourcesContent":["import React, {\n\tuseState,\n\tuseRef,\n\tuseEffect,\n\tuseCallback,\n\tuseImperativeHandle,\n\tforwardRef,\n\tReactNode,\n\tCSSProperties,\n} from 'react';\nimport { FullscreenOutlined, FullscreenExitOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface FullscreenRef {\n\t/** 进入全屏 */\n\tenter: () => Promise<void>;\n\t/** 退出全屏 */\n\texit: () => Promise<void>;\n\t/** 切换全屏状态 */\n\ttoggle: () => Promise<void>;\n\t/** 当前是否处于全屏状态 */\n\tisFullscreen: boolean;\n\t/** 当前目标容器 DOM 元素 */\n\tgetElement: () => HTMLElement | null;\n}\n\nexport type FullscreenMode = 'browser' | 'web';\nexport type FullscreenButtonPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n\nexport interface FullscreenRenderProps {\n\tisFullscreen: boolean;\n\tenter: () => Promise<void>;\n\texit: () => Promise<void>;\n\ttoggle: () => Promise<void>;\n}\n\nexport interface FullscreenProps {\n\t/** 子元素或 Render Props 函数 */\n\tchildren?: ReactNode | ((props: FullscreenRenderProps) => ReactNode);\n\t/** 全屏模式:'browser' 原生浏览器全屏,'web' 网页内最大化置顶 */\n\tmode?: FullscreenMode;\n\t/** 自定义目标全屏元素(不传时默认为当前包裹的容器元素,传 document.documentElement 时为整页全屏) */\n\ttarget?: HTMLElement | (() => HTMLElement | null) | null;\n\t/** 受控全屏状态 */\n\tfullscreen?: boolean;\n\t/** 默认全屏状态 */\n\tdefaultFullscreen?: boolean;\n\t/** 全屏状态变化回调 */\n\tonChange?: (isFullscreen: boolean) => void;\n\t/** 是否在容器角落展示快速全屏切换悬浮按钮,默认 false */\n\tshowButton?: boolean;\n\t/** 悬浮按钮对齐位置,默认 'top-right' */\n\tbuttonPosition?: FullscreenButtonPosition;\n\t/** 悬浮按钮的自定义 Tooltip 提示或图标 */\n\tenterIcon?: ReactNode;\n\texitIcon?: ReactNode;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst Fullscreen = forwardRef<FullscreenRef, FullscreenProps>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\tmode = 'browser',\n\t\t\ttarget,\n\t\t\tfullscreen: controlledFullscreen,\n\t\t\tdefaultFullscreen = false,\n\t\t\tonChange,\n\t\t\tshowButton = false,\n\t\t\tbuttonPosition = 'top-right',\n\t\t\tenterIcon,\n\t\t\texitIcon,\n\t\t\tclassName = '',\n\t\t\tstyle,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst containerRef = useRef<HTMLDivElement>(null);\n\t\tconst [internalFullscreen, setInternalFullscreen] = useState<boolean>(defaultFullscreen);\n\t\tconst isControlled = controlledFullscreen !== undefined;\n\t\tconst isFullscreen = isControlled ? controlledFullscreen : internalFullscreen;\n\n\t\tconst getTargetElement = useCallback((): HTMLElement | null => {\n\t\t\tif (typeof target === 'function') {\n\t\t\t\treturn target();\n\t\t\t}\n\t\t\tif (target) {\n\t\t\t\treturn target;\n\t\t\t}\n\t\t\treturn containerRef.current;\n\t\t}, [target]);\n\n\t\t// 进入全屏\n\t\tconst enter = useCallback(async () => {\n\t\t\tconst el = getTargetElement();\n\t\t\tif (!el) return;\n\n\t\t\tif (mode === 'browser') {\n\t\t\t\tif (el.requestFullscreen) {\n\t\t\t\t\tawait el.requestFullscreen();\n\t\t\t\t} else if ((el as any).webkitRequestFullscreen) {\n\t\t\t\t\tawait (el as any).webkitRequestFullscreen();\n\t\t\t\t} else if ((el as any).msRequestFullscreen) {\n\t\t\t\t\tawait (el as any).msRequestFullscreen();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!isControlled) {\n\t\t\t\t\tsetInternalFullscreen(true);\n\t\t\t\t}\n\t\t\t\tonChange?.(true);\n\t\t\t}\n\t\t}, [mode, getTargetElement, isControlled, onChange]);\n\n\t\t// 退出全屏\n\t\tconst exit = useCallback(async () => {\n\t\t\tif (mode === 'browser') {\n\t\t\t\tif (document.fullscreenElement || (document as any).webkitFullscreenElement) {\n\t\t\t\t\tif (document.exitFullscreen) {\n\t\t\t\t\t\tawait document.exitFullscreen();\n\t\t\t\t\t} else if ((document as any).webkitExitFullscreen) {\n\t\t\t\t\t\tawait (document as any).webkitExitFullscreen();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!isControlled) {\n\t\t\t\t\tsetInternalFullscreen(false);\n\t\t\t\t}\n\t\t\t\tonChange?.(false);\n\t\t\t}\n\t\t}, [mode, isControlled, onChange]);\n\n\t\t// 切换全屏\n\t\tconst toggle = useCallback(async () => {\n\t\t\tif (isFullscreen) {\n\t\t\t\tawait exit();\n\t\t\t} else {\n\t\t\t\tawait enter();\n\t\t\t}\n\t\t}, [isFullscreen, enter, exit]);\n\n\t\t// 暴露 Imperative Ref\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tenter,\n\t\t\t\texit,\n\t\t\t\ttoggle,\n\t\t\t\tisFullscreen,\n\t\t\t\tgetElement: getTargetElement,\n\t\t\t}),\n\t\t\t[enter, exit, toggle, isFullscreen, getTargetElement],\n\t\t);\n\n\t\t// 监听浏览器原生全屏事件\n\t\tuseEffect(() => {\n\t\t\tif (mode !== 'browser') return;\n\n\t\t\tconst handleFullscreenChange = () => {\n\t\t\t\tconst currentFsEl =\n\t\t\t\t\tdocument.fullscreenElement ||\n\t\t\t\t\t(document as any).webkitFullscreenElement ||\n\t\t\t\t\t(document as any).mozFullScreenElement ||\n\t\t\t\t\t(document as any).msFullscreenElement;\n\n\t\t\t\tconst targetEl = getTargetElement();\n\t\t\t\tconst isActive =\n\t\t\t\t\tcurrentFsEl !== null &&\n\t\t\t\t\t(currentFsEl === targetEl || targetEl === document.documentElement);\n\n\t\t\t\tif (!isControlled) {\n\t\t\t\t\tsetInternalFullscreen(isActive);\n\t\t\t\t}\n\t\t\t\tonChange?.(isActive);\n\t\t\t};\n\n\t\t\tdocument.addEventListener('fullscreenchange', handleFullscreenChange);\n\t\t\tdocument.addEventListener('webkitfullscreenchange', handleFullscreenChange);\n\t\t\tdocument.addEventListener('mozfullscreenchange', handleFullscreenChange);\n\t\t\tdocument.addEventListener('MSFullscreenChange', handleFullscreenChange);\n\n\t\t\treturn () => {\n\t\t\t\tdocument.removeEventListener('fullscreenchange', handleFullscreenChange);\n\t\t\t\tdocument.removeEventListener('webkitfullscreenchange', handleFullscreenChange);\n\t\t\t\tdocument.removeEventListener('mozfullscreenchange', handleFullscreenChange);\n\t\t\t\tdocument.removeEventListener('MSFullscreenChange', handleFullscreenChange);\n\t\t\t};\n\t\t}, [mode, getTargetElement, isControlled, onChange]);\n\n\t\t// Web 模拟全屏模式下的 ESC 监听\n\t\tuseEffect(() => {\n\t\t\tif (mode !== 'web' || !isFullscreen) return;\n\n\t\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\t\tif (e.key === 'Escape') {\n\t\t\t\t\texit();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\twindow.addEventListener('keydown', handleKeyDown);\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener('keydown', handleKeyDown);\n\t\t\t};\n\t\t}, [mode, isFullscreen, exit]);\n\n\t\tconst positionClass = `rpc_fullscreen_container_action_btn_${buttonPosition.replace('-', '_')}`;\n\t\tconst isWebFsActive = mode === 'web' && isFullscreen;\n\n\t\tconst currentEnterIcon = enterIcon ?? <FullscreenOutlined />;\n\t\tconst currentExitIcon = exitIcon ?? <FullscreenExitOutlined />;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={containerRef}\n\t\t\t\tclassName={`rpc_fullscreen_container ${\n\t\t\t\t\tisFullscreen ? 'rpc_fullscreen_container_fullscreen' : ''\n\t\t\t\t} ${isWebFsActive ? 'rpc_fullscreen_container_web_fullscreen' : ''} ${className}`}\n\t\t\t\tstyle={{\n\t\t\t\t\t...(isFullscreen ? { backgroundColor: '#ffffff' } : {}),\n\t\t\t\t\t...style,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{/* 右上角/指定角落的快捷切换按钮 */}\n\t\t\t\t{showButton && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={`rpc_fullscreen_container_action_btn ${positionClass}`}\n\t\t\t\t\t\tonClick={toggle}\n\t\t\t\t\t\ttitle={isFullscreen ? '退出全屏 (ESC)' : '全屏显示'}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isFullscreen ? currentExitIcon : currentEnterIcon}\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\n\t\t\t\t{typeof children === 'function'\n\t\t\t\t\t? children({\n\t\t\t\t\t\t\tisFullscreen,\n\t\t\t\t\t\t\tenter,\n\t\t\t\t\t\t\texit,\n\t\t\t\t\t\t\ttoggle,\n\t\t\t\t\t\t})\n\t\t\t\t\t: children}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nFullscreen.displayName = 'Fullscreen';\n\nexport default Fullscreen;\n"]}
1
+ {"version":3,"sources":["../Fullscreen/index.tsx"],"names":["forwardRef","useRef","useState","useCallback","useImperativeHandle","useEffect","jsx","FullscreenOutlined","FullscreenExitOutlined","jsxs"],"mappings":"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","file":"chunk-AHTRLNYK.cjs","sourcesContent":["import React, {\n\tuseState,\n\tuseRef,\n\tuseEffect,\n\tuseCallback,\n\tuseImperativeHandle,\n\tforwardRef,\n\tReactNode,\n\tCSSProperties,\n} from 'react';\nimport { FullscreenOutlined, FullscreenExitOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface FullscreenRef {\n\t/** 进入全屏 */\n\tenter: () => Promise<void>;\n\t/** 退出全屏 */\n\texit: () => Promise<void>;\n\t/** 切换全屏状态 */\n\ttoggle: () => Promise<void>;\n\t/** 当前是否处于全屏状态 */\n\tisFullscreen: boolean;\n\t/** 当前目标容器 DOM 元素 */\n\tgetElement: () => HTMLElement | null;\n}\n\nexport type FullscreenMode = 'browser' | 'web';\nexport type FullscreenButtonPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n\nexport interface FullscreenRenderProps {\n\tisFullscreen: boolean;\n\tenter: () => Promise<void>;\n\texit: () => Promise<void>;\n\ttoggle: () => Promise<void>;\n}\n\nexport interface FullscreenProps {\n\t/** 子元素或 Render Props 函数 */\n\tchildren?: ReactNode | ((props: FullscreenRenderProps) => ReactNode);\n\t/** 全屏模式:'browser' 原生浏览器全屏,'web' 网页内最大化置顶 */\n\tmode?: FullscreenMode;\n\t/** 自定义目标全屏元素(不传时默认为当前包裹的容器元素,传 document.documentElement 时为整页全屏) */\n\ttarget?: HTMLElement | (() => HTMLElement | null) | null;\n\t/** 受控全屏状态 */\n\tfullscreen?: boolean;\n\t/** 默认全屏状态 */\n\tdefaultFullscreen?: boolean;\n\t/** 全屏状态变化回调 */\n\tonChange?: (isFullscreen: boolean) => void;\n\t/** 是否在容器角落展示快速全屏切换悬浮按钮,默认 false */\n\tshowButton?: boolean;\n\t/** 悬浮按钮对齐位置,默认 'top-right' */\n\tbuttonPosition?: FullscreenButtonPosition;\n\t/** 悬浮按钮的自定义 Tooltip 提示或图标 */\n\tenterIcon?: ReactNode;\n\texitIcon?: ReactNode;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst Fullscreen = forwardRef<FullscreenRef, FullscreenProps>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\tmode = 'browser',\n\t\t\ttarget,\n\t\t\tfullscreen: controlledFullscreen,\n\t\t\tdefaultFullscreen = false,\n\t\t\tonChange,\n\t\t\tshowButton = false,\n\t\t\tbuttonPosition = 'top-right',\n\t\t\tenterIcon,\n\t\t\texitIcon,\n\t\t\tclassName = '',\n\t\t\tstyle,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst containerRef = useRef<HTMLDivElement>(null);\n\t\tconst [internalFullscreen, setInternalFullscreen] = useState<boolean>(defaultFullscreen);\n\t\tconst isControlled = controlledFullscreen !== undefined;\n\t\tconst isFullscreen = isControlled ? controlledFullscreen : internalFullscreen;\n\n\t\tconst getTargetElement = useCallback((): HTMLElement | null => {\n\t\t\tif (typeof target === 'function') {\n\t\t\t\treturn target();\n\t\t\t}\n\t\t\tif (target) {\n\t\t\t\treturn target;\n\t\t\t}\n\t\t\treturn containerRef.current;\n\t\t}, [target]);\n\n\t\t// 进入全屏\n\t\tconst enter = useCallback(async () => {\n\t\t\tconst el = getTargetElement();\n\t\t\tif (!el) return;\n\n\t\t\tif (mode === 'browser') {\n\t\t\t\tif (el.requestFullscreen) {\n\t\t\t\t\tawait el.requestFullscreen();\n\t\t\t\t} else if ((el as any).webkitRequestFullscreen) {\n\t\t\t\t\tawait (el as any).webkitRequestFullscreen();\n\t\t\t\t} else if ((el as any).msRequestFullscreen) {\n\t\t\t\t\tawait (el as any).msRequestFullscreen();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!isControlled) {\n\t\t\t\t\tsetInternalFullscreen(true);\n\t\t\t\t}\n\t\t\t\tonChange?.(true);\n\t\t\t}\n\t\t}, [mode, getTargetElement, isControlled, onChange]);\n\n\t\t// 退出全屏\n\t\tconst exit = useCallback(async () => {\n\t\t\tif (mode === 'browser') {\n\t\t\t\tif (document.fullscreenElement || (document as any).webkitFullscreenElement) {\n\t\t\t\t\tif (document.exitFullscreen) {\n\t\t\t\t\t\tawait document.exitFullscreen();\n\t\t\t\t\t} else if ((document as any).webkitExitFullscreen) {\n\t\t\t\t\t\tawait (document as any).webkitExitFullscreen();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!isControlled) {\n\t\t\t\t\tsetInternalFullscreen(false);\n\t\t\t\t}\n\t\t\t\tonChange?.(false);\n\t\t\t}\n\t\t}, [mode, isControlled, onChange]);\n\n\t\t// 切换全屏\n\t\tconst toggle = useCallback(async () => {\n\t\t\tif (isFullscreen) {\n\t\t\t\tawait exit();\n\t\t\t} else {\n\t\t\t\tawait enter();\n\t\t\t}\n\t\t}, [isFullscreen, enter, exit]);\n\n\t\t// 暴露 Imperative Ref\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tenter,\n\t\t\t\texit,\n\t\t\t\ttoggle,\n\t\t\t\tisFullscreen,\n\t\t\t\tgetElement: getTargetElement,\n\t\t\t}),\n\t\t\t[enter, exit, toggle, isFullscreen, getTargetElement],\n\t\t);\n\n\t\t// 监听浏览器原生全屏事件\n\t\tuseEffect(() => {\n\t\t\tif (mode !== 'browser') return;\n\n\t\t\tconst handleFullscreenChange = () => {\n\t\t\t\tconst currentFsEl =\n\t\t\t\t\tdocument.fullscreenElement ||\n\t\t\t\t\t(document as any).webkitFullscreenElement ||\n\t\t\t\t\t(document as any).mozFullScreenElement ||\n\t\t\t\t\t(document as any).msFullscreenElement;\n\n\t\t\t\tconst targetEl = getTargetElement();\n\t\t\t\tconst isActive =\n\t\t\t\t\tcurrentFsEl !== null &&\n\t\t\t\t\t(currentFsEl === targetEl || targetEl === document.documentElement);\n\n\t\t\t\tif (!isControlled) {\n\t\t\t\t\tsetInternalFullscreen(isActive);\n\t\t\t\t}\n\t\t\t\tonChange?.(isActive);\n\t\t\t};\n\n\t\t\tdocument.addEventListener('fullscreenchange', handleFullscreenChange);\n\t\t\tdocument.addEventListener('webkitfullscreenchange', handleFullscreenChange);\n\t\t\tdocument.addEventListener('mozfullscreenchange', handleFullscreenChange);\n\t\t\tdocument.addEventListener('MSFullscreenChange', handleFullscreenChange);\n\n\t\t\treturn () => {\n\t\t\t\tdocument.removeEventListener('fullscreenchange', handleFullscreenChange);\n\t\t\t\tdocument.removeEventListener('webkitfullscreenchange', handleFullscreenChange);\n\t\t\t\tdocument.removeEventListener('mozfullscreenchange', handleFullscreenChange);\n\t\t\t\tdocument.removeEventListener('MSFullscreenChange', handleFullscreenChange);\n\t\t\t};\n\t\t}, [mode, getTargetElement, isControlled, onChange]);\n\n\t\t// Web 模拟全屏模式下的 ESC 监听\n\t\tuseEffect(() => {\n\t\t\tif (mode !== 'web' || !isFullscreen) return;\n\n\t\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\t\tif (e.key === 'Escape') {\n\t\t\t\t\texit();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\twindow.addEventListener('keydown', handleKeyDown);\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener('keydown', handleKeyDown);\n\t\t\t};\n\t\t}, [mode, isFullscreen, exit]);\n\n\t\tconst positionClass = `rpc_fullscreen_container_action_btn_${buttonPosition.replace('-', '_')}`;\n\t\tconst isWebFsActive = mode === 'web' && isFullscreen;\n\n\t\tconst currentEnterIcon = enterIcon ?? <FullscreenOutlined />;\n\t\tconst currentExitIcon = exitIcon ?? <FullscreenExitOutlined />;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={containerRef}\n\t\t\t\tclassName={`rpc_fullscreen_container ${\n\t\t\t\t\tisFullscreen ? 'rpc_fullscreen_container_fullscreen' : ''\n\t\t\t\t} ${isWebFsActive ? 'rpc_fullscreen_container_web_fullscreen' : ''} ${className}`}\n\t\t\t\tstyle={{\n\t\t\t\t\t...(isFullscreen ? { backgroundColor: '#ffffff' } : {}),\n\t\t\t\t\t...style,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{/* 右上角/指定角落的快捷切换按钮 */}\n\t\t\t\t{showButton && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={`rpc_fullscreen_container_action_btn ${positionClass}`}\n\t\t\t\t\t\tonClick={toggle}\n\t\t\t\t\t\ttitle={isFullscreen ? '退出全屏 (ESC)' : '全屏显示'}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isFullscreen ? currentExitIcon : currentEnterIcon}\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\n\t\t\t\t{typeof children === 'function'\n\t\t\t\t\t? children({\n\t\t\t\t\t\t\tisFullscreen,\n\t\t\t\t\t\t\tenter,\n\t\t\t\t\t\t\texit,\n\t\t\t\t\t\t\ttoggle,\n\t\t\t\t\t\t})\n\t\t\t\t\t: children}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nFullscreen.displayName = 'Fullscreen';\n\nexport default Fullscreen;\n"]}
@@ -1,4 +1,4 @@
1
- import { CopyButton_default } from './chunk-56TD4LDC.js';
1
+ import { CopyButton_default } from './chunk-P5CS7V4W.js';
2
2
  import { useMemo, useState, useRef, useEffect } from 'react';
3
3
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
4
 
@@ -170,5 +170,5 @@ var JsonEditor = ({
170
170
  var JsonEditor_default = JsonEditor;
171
171
 
172
172
  export { JsonEditor_default };
173
- //# sourceMappingURL=chunk-WEOMKZC6.js.map
174
- //# sourceMappingURL=chunk-WEOMKZC6.js.map
173
+ //# sourceMappingURL=chunk-ANTFNDH4.js.map
174
+ //# sourceMappingURL=chunk-ANTFNDH4.js.map