react-public-components 1.2.8 → 1.2.9

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 (204) hide show
  1. package/README.md +181 -109
  2. package/dist/AnnouncementBar/index.cjs +3 -3
  3. package/dist/AnnouncementBar/index.js +2 -2
  4. package/dist/AudioPlayer/index.cjs +3 -3
  5. package/dist/AudioPlayer/index.js +2 -2
  6. package/dist/CeilingBox/index.cjs +2 -2
  7. package/dist/CeilingBox/index.js +1 -1
  8. package/dist/CodeSnippet/index.cjs +3 -3
  9. package/dist/CodeSnippet/index.js +2 -2
  10. package/dist/CollapseBox/index.cjs +3 -3
  11. package/dist/CollapseBox/index.js +2 -2
  12. package/dist/ColorPicker/index.cjs +5 -5
  13. package/dist/ColorPicker/index.js +2 -2
  14. package/dist/ContextMenu/index.cjs +3 -3
  15. package/dist/ContextMenu/index.js +2 -2
  16. package/dist/CopyButton/index.cjs +3 -3
  17. package/dist/CopyButton/index.js +2 -2
  18. package/dist/CronPicker/index.cjs +4 -4
  19. package/dist/CronPicker/index.js +3 -3
  20. package/dist/DebounceSelect/index.cjs +3 -3
  21. package/dist/DebounceSelect/index.js +2 -2
  22. package/dist/DisabledBox/index.cjs +3 -3
  23. package/dist/DisabledBox/index.js +2 -2
  24. package/dist/DragSortList/index.cjs +3 -3
  25. package/dist/DragSortList/index.js +2 -2
  26. package/dist/FilePreviewer/index.cjs +4 -4
  27. package/dist/FilePreviewer/index.js +2 -2
  28. package/dist/Fullscreen/index.cjs +3 -3
  29. package/dist/Fullscreen/index.js +2 -2
  30. package/dist/GuidedTour/index.cjs +3 -3
  31. package/dist/GuidedTour/index.js +2 -2
  32. package/dist/ImageCropper/index.cjs +3 -3
  33. package/dist/ImageCropper/index.js +2 -2
  34. package/dist/InfiniteScrollList/index.cjs +3 -3
  35. package/dist/InfiniteScrollList/index.js +2 -2
  36. package/dist/JsonEditor/index.cjs +4 -4
  37. package/dist/JsonEditor/index.js +3 -3
  38. package/dist/KeyValEditor/index.cjs +3 -3
  39. package/dist/KeyValEditor/index.js +2 -2
  40. package/dist/LazyLoadBox/index.cjs +3 -3
  41. package/dist/LazyLoadBox/index.js +1 -1
  42. package/dist/PasswordStrength/index.cjs +4 -4
  43. package/dist/PasswordStrength/index.js +2 -2
  44. package/dist/PdfViewer/index.cjs +3 -3
  45. package/dist/PdfViewer/index.js +2 -2
  46. package/dist/PeriodSelect/index.cjs +4 -4
  47. package/dist/PeriodSelect/index.js +1 -1
  48. package/dist/QrCodeCard/index.cjs +3 -3
  49. package/dist/QrCodeCard/index.js +2 -2
  50. package/dist/SensitiveMask/index.cjs +5 -5
  51. package/dist/SensitiveMask/index.js +3 -3
  52. package/dist/Splitter/index.cjs +3 -3
  53. package/dist/Splitter/index.js +2 -2
  54. package/dist/TagInput/index.cjs +3 -3
  55. package/dist/TagInput/index.js +2 -2
  56. package/dist/TextEllipsis/index.cjs +4 -4
  57. package/dist/TextEllipsis/index.js +3 -3
  58. package/dist/TreeTransfer/index.cjs +3 -3
  59. package/dist/TreeTransfer/index.js +2 -2
  60. package/dist/VideoPlayer/index.cjs +3 -3
  61. package/dist/VideoPlayer/index.js +2 -2
  62. package/dist/{chunk-56VELHCH.js → chunk-2SEHUMQH.js} +3 -3
  63. package/dist/{chunk-56VELHCH.js.map → chunk-2SEHUMQH.js.map} +1 -1
  64. package/dist/{chunk-2INP6NM4.js → chunk-3WLGM74R.js} +3 -3
  65. package/dist/{chunk-2INP6NM4.js.map → chunk-3WLGM74R.js.map} +1 -1
  66. package/dist/{chunk-2IDVNTKR.js → chunk-537T6BR3.js} +32 -8
  67. package/dist/chunk-537T6BR3.js.map +1 -0
  68. package/dist/{chunk-XUAHWX6B.js → chunk-5QEXX32M.js} +3 -3
  69. package/dist/{chunk-XUAHWX6B.js.map → chunk-5QEXX32M.js.map} +1 -1
  70. package/dist/{chunk-ETFLLRTO.js → chunk-5XTIASJH.js} +3 -3
  71. package/dist/{chunk-ETFLLRTO.js.map → chunk-5XTIASJH.js.map} +1 -1
  72. package/dist/{chunk-TNZ2OLGW.cjs → chunk-6KODABJW.cjs} +4 -4
  73. package/dist/{chunk-TNZ2OLGW.cjs.map → chunk-6KODABJW.cjs.map} +1 -1
  74. package/dist/{chunk-ZWKUHYTV.cjs → chunk-6WCWYSFU.cjs} +6 -6
  75. package/dist/{chunk-ZWKUHYTV.cjs.map → chunk-6WCWYSFU.cjs.map} +1 -1
  76. package/dist/{chunk-Y54KVULF.js → chunk-7FGE7NRH.js} +11 -4
  77. package/dist/chunk-7FGE7NRH.js.map +1 -0
  78. package/dist/{chunk-VJOO2DG3.cjs → chunk-7NXCDDBT.cjs} +8 -8
  79. package/dist/{chunk-VJOO2DG3.cjs.map → chunk-7NXCDDBT.cjs.map} +1 -1
  80. package/dist/{chunk-VYPIRVL4.js → chunk-7W7PCWMM.js} +2 -2
  81. package/dist/chunk-7W7PCWMM.js.map +1 -0
  82. package/dist/{chunk-TUEVILTA.cjs → chunk-BKHKPZ6O.cjs} +5 -5
  83. package/dist/{chunk-TUEVILTA.cjs.map → chunk-BKHKPZ6O.cjs.map} +1 -1
  84. package/dist/{chunk-AXPVN2OO.js → chunk-BXLUH6FE.js} +3 -3
  85. package/dist/{chunk-AXPVN2OO.js.map → chunk-BXLUH6FE.js.map} +1 -1
  86. package/dist/{chunk-PYCSRJSF.cjs → chunk-CWG7A5DS.cjs} +7 -7
  87. package/dist/{chunk-PYCSRJSF.cjs.map → chunk-CWG7A5DS.cjs.map} +1 -1
  88. package/dist/{chunk-YP4XTMK3.cjs → chunk-DTJEY3BC.cjs} +4 -4
  89. package/dist/{chunk-YP4XTMK3.cjs.map → chunk-DTJEY3BC.cjs.map} +1 -1
  90. package/dist/{chunk-2EIAWXFA.cjs → chunk-DWG4FUDX.cjs} +5 -5
  91. package/dist/{chunk-2EIAWXFA.cjs.map → chunk-DWG4FUDX.cjs.map} +1 -1
  92. package/dist/{chunk-IF4XAUV3.js → chunk-E6EJLQL7.js} +3 -3
  93. package/dist/{chunk-IF4XAUV3.js.map → chunk-E6EJLQL7.js.map} +1 -1
  94. package/dist/{chunk-RFTYEXKU.js → chunk-EMQHYD3G.js} +6 -14
  95. package/dist/chunk-EMQHYD3G.js.map +1 -0
  96. package/dist/{chunk-O4EABET3.js → chunk-ERPKXNWM.js} +10 -4
  97. package/dist/chunk-ERPKXNWM.js.map +1 -0
  98. package/dist/{chunk-QRZ2GVVJ.js → chunk-FJ33L5D7.js} +3 -3
  99. package/dist/{chunk-QRZ2GVVJ.js.map → chunk-FJ33L5D7.js.map} +1 -1
  100. package/dist/{chunk-4KMVABTM.js → chunk-FQHPCK3S.js} +4 -6
  101. package/dist/chunk-FQHPCK3S.js.map +1 -0
  102. package/dist/{chunk-OLLVIQPL.js → chunk-FT2XGH4D.js} +3 -3
  103. package/dist/{chunk-OLLVIQPL.js.map → chunk-FT2XGH4D.js.map} +1 -1
  104. package/dist/{chunk-EMT4NUI5.js → chunk-G76ELHWZ.js} +3 -3
  105. package/dist/{chunk-EMT4NUI5.js.map → chunk-G76ELHWZ.js.map} +1 -1
  106. package/dist/{chunk-QU33CY3M.cjs → chunk-IHUBENM6.cjs} +6 -14
  107. package/dist/chunk-IHUBENM6.cjs.map +1 -0
  108. package/dist/{chunk-M4FZJALR.js → chunk-J3C46E6G.js} +4 -4
  109. package/dist/{chunk-M4FZJALR.js.map → chunk-J3C46E6G.js.map} +1 -1
  110. package/dist/{chunk-UIU6VCEQ.cjs → chunk-JLW5ISIR.cjs} +6 -3
  111. package/dist/chunk-JLW5ISIR.cjs.map +1 -0
  112. package/dist/{chunk-UAUP5TJK.cjs → chunk-K4LVWWEE.cjs} +5 -5
  113. package/dist/{chunk-UAUP5TJK.cjs.map → chunk-K4LVWWEE.cjs.map} +1 -1
  114. package/dist/{chunk-P5CS7V4W.js → chunk-KJ537QZS.js} +3 -3
  115. package/dist/{chunk-P5CS7V4W.js.map → chunk-KJ537QZS.js.map} +1 -1
  116. package/dist/{chunk-U2EBNBGK.cjs → chunk-KSXCVQU3.cjs} +4 -4
  117. package/dist/{chunk-U2EBNBGK.cjs.map → chunk-KSXCVQU3.cjs.map} +1 -1
  118. package/dist/{chunk-LFGBZXQH.cjs → chunk-KWL5465Y.cjs} +4 -4
  119. package/dist/{chunk-LFGBZXQH.cjs.map → chunk-KWL5465Y.cjs.map} +1 -1
  120. package/dist/{chunk-TUDLE3RT.cjs → chunk-KYM35LPD.cjs} +13 -15
  121. package/dist/chunk-KYM35LPD.cjs.map +1 -0
  122. package/dist/{chunk-RN5WU7KA.cjs → chunk-L76JMQUH.cjs} +7 -7
  123. package/dist/{chunk-RN5WU7KA.cjs.map → chunk-L76JMQUH.cjs.map} +1 -1
  124. package/dist/{chunk-AHTRLNYK.cjs → chunk-LPDHDZTA.cjs} +5 -5
  125. package/dist/{chunk-AHTRLNYK.cjs.map → chunk-LPDHDZTA.cjs.map} +1 -1
  126. package/dist/{chunk-JHVPDKBM.cjs → chunk-LRUSUUPJ.cjs} +6 -6
  127. package/dist/{chunk-JHVPDKBM.cjs.map → chunk-LRUSUUPJ.cjs.map} +1 -1
  128. package/dist/{chunk-MQJBUHDB.js → chunk-MWVME3UR.js} +3 -3
  129. package/dist/{chunk-MQJBUHDB.js.map → chunk-MWVME3UR.js.map} +1 -1
  130. package/dist/{chunk-OONBZRPV.cjs → chunk-N4UF72SJ.cjs} +4 -4
  131. package/dist/{chunk-OONBZRPV.cjs.map → chunk-N4UF72SJ.cjs.map} +1 -1
  132. package/dist/{chunk-EKDJPOA3.cjs → chunk-NKLHMUGB.cjs} +5 -5
  133. package/dist/{chunk-EKDJPOA3.cjs.map → chunk-NKLHMUGB.cjs.map} +1 -1
  134. package/dist/{chunk-M3GQ7RCV.cjs → chunk-NZNNDZW4.cjs} +4 -4
  135. package/dist/{chunk-M3GQ7RCV.cjs.map → chunk-NZNNDZW4.cjs.map} +1 -1
  136. package/dist/{chunk-UZB7GOEI.cjs → chunk-OLIPC6HC.cjs} +4 -4
  137. package/dist/{chunk-UZB7GOEI.cjs.map → chunk-OLIPC6HC.cjs.map} +1 -1
  138. package/dist/{chunk-PTFKE67K.js → chunk-OOH3YSNC.js} +3 -3
  139. package/dist/{chunk-PTFKE67K.js.map → chunk-OOH3YSNC.js.map} +1 -1
  140. package/dist/{chunk-Q7OVUH5K.js → chunk-OXBOWSLR.js} +3 -3
  141. package/dist/{chunk-Q7OVUH5K.js.map → chunk-OXBOWSLR.js.map} +1 -1
  142. package/dist/{chunk-EDNBPLUS.js → chunk-P7P3UVGN.js} +3 -3
  143. package/dist/{chunk-EDNBPLUS.js.map → chunk-P7P3UVGN.js.map} +1 -1
  144. package/dist/{chunk-ANTFNDH4.js → chunk-Q2M3ZE7E.js} +3 -3
  145. package/dist/{chunk-ANTFNDH4.js.map → chunk-Q2M3ZE7E.js.map} +1 -1
  146. package/dist/{chunk-W5JA3YTT.js → chunk-Q3Z6OWKR.js} +3 -3
  147. package/dist/{chunk-W5JA3YTT.js.map → chunk-Q3Z6OWKR.js.map} +1 -1
  148. package/dist/{chunk-R4V3EJVP.cjs → chunk-QMLDK2DL.cjs} +32 -8
  149. package/dist/chunk-QMLDK2DL.cjs.map +1 -0
  150. package/dist/{chunk-PUMVD7CP.js → chunk-QVTQQB6M.js} +3 -3
  151. package/dist/{chunk-PUMVD7CP.js.map → chunk-QVTQQB6M.js.map} +1 -1
  152. package/dist/{chunk-ZCBT56AG.js → chunk-RBX6VEKI.js} +3 -3
  153. package/dist/{chunk-ZCBT56AG.js.map → chunk-RBX6VEKI.js.map} +1 -1
  154. package/dist/{chunk-4TMBGQQE.cjs → chunk-S35SIDXQ.cjs} +5 -5
  155. package/dist/{chunk-4TMBGQQE.cjs.map → chunk-S35SIDXQ.cjs.map} +1 -1
  156. package/dist/{chunk-CURWX7OY.js → chunk-SCVOSNWF.js} +3 -3
  157. package/dist/{chunk-CURWX7OY.js.map → chunk-SCVOSNWF.js.map} +1 -1
  158. package/dist/{chunk-ZXMFWVE4.cjs → chunk-SG7Z432O.cjs} +11 -5
  159. package/dist/chunk-SG7Z432O.cjs.map +1 -0
  160. package/dist/{chunk-FZH5FL7X.cjs → chunk-THZFDBJM.cjs} +12 -5
  161. package/dist/chunk-THZFDBJM.cjs.map +1 -0
  162. package/dist/{chunk-HKALWFWZ.cjs → chunk-TWL3QEFV.cjs} +5 -5
  163. package/dist/{chunk-HKALWFWZ.cjs.map → chunk-TWL3QEFV.cjs.map} +1 -1
  164. package/dist/{chunk-XLOGMDAQ.js → chunk-U4VZGKQV.js} +3 -3
  165. package/dist/{chunk-XLOGMDAQ.js.map → chunk-U4VZGKQV.js.map} +1 -1
  166. package/dist/{chunk-EJYTTSW6.js → chunk-VAU4USHW.js} +3 -3
  167. package/dist/{chunk-EJYTTSW6.js.map → chunk-VAU4USHW.js.map} +1 -1
  168. package/dist/{chunk-JNA5AQ2K.js → chunk-VY4XERM4.js} +3 -3
  169. package/dist/{chunk-JNA5AQ2K.js.map → chunk-VY4XERM4.js.map} +1 -1
  170. package/dist/{chunk-V55FEQYU.cjs → chunk-W52O3Y2I.cjs} +2 -2
  171. package/dist/chunk-W52O3Y2I.cjs.map +1 -0
  172. package/dist/{chunk-7ZBA4NHH.cjs → chunk-W7LZVHTA.cjs} +4 -4
  173. package/dist/{chunk-7ZBA4NHH.cjs.map → chunk-W7LZVHTA.cjs.map} +1 -1
  174. package/dist/{chunk-5Q7THN6M.js → chunk-WLAHW5RF.js} +6 -3
  175. package/dist/chunk-WLAHW5RF.js.map +1 -0
  176. package/dist/{chunk-IPS7PC3M.cjs → chunk-X5X4YABT.cjs} +13 -13
  177. package/dist/{chunk-IPS7PC3M.cjs.map → chunk-X5X4YABT.cjs.map} +1 -1
  178. package/dist/{chunk-WKF4C6TJ.js → chunk-XLPOXPOV.js} +3 -3
  179. package/dist/{chunk-WKF4C6TJ.js.map → chunk-XLPOXPOV.js.map} +1 -1
  180. package/dist/{chunk-QP3RKA4J.cjs → chunk-XM6J7F5X.cjs} +4 -4
  181. package/dist/{chunk-QP3RKA4J.cjs.map → chunk-XM6J7F5X.cjs.map} +1 -1
  182. package/dist/{chunk-ED3ZG2VX.cjs → chunk-ZR56U55S.cjs} +5 -5
  183. package/dist/{chunk-ED3ZG2VX.cjs.map → chunk-ZR56U55S.cjs.map} +1 -1
  184. package/dist/{chunk-77ANKL4K.cjs → chunk-ZRNAJCZI.cjs} +8 -8
  185. package/dist/{chunk-77ANKL4K.cjs.map → chunk-ZRNAJCZI.cjs.map} +1 -1
  186. package/dist/index.cjs +71 -71
  187. package/dist/index.js +31 -31
  188. package/dist/src/icons.d.ts +6 -6
  189. package/dist/src/index.d.ts +2 -2
  190. package/package.json +1 -1
  191. package/dist/chunk-2IDVNTKR.js.map +0 -1
  192. package/dist/chunk-4KMVABTM.js.map +0 -1
  193. package/dist/chunk-5Q7THN6M.js.map +0 -1
  194. package/dist/chunk-FZH5FL7X.cjs.map +0 -1
  195. package/dist/chunk-O4EABET3.js.map +0 -1
  196. package/dist/chunk-QU33CY3M.cjs.map +0 -1
  197. package/dist/chunk-R4V3EJVP.cjs.map +0 -1
  198. package/dist/chunk-RFTYEXKU.js.map +0 -1
  199. package/dist/chunk-TUDLE3RT.cjs.map +0 -1
  200. package/dist/chunk-UIU6VCEQ.cjs.map +0 -1
  201. package/dist/chunk-V55FEQYU.cjs.map +0 -1
  202. package/dist/chunk-VYPIRVL4.js.map +0 -1
  203. package/dist/chunk-Y54KVULF.js.map +0 -1
  204. package/dist/chunk-ZXMFWVE4.cjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkR4V3EJVP_cjs = require('./chunk-R4V3EJVP.cjs');
3
+ var chunkQMLDK2DL_cjs = require('./chunk-QMLDK2DL.cjs');
4
4
  var react = require('react');
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
 
@@ -28,12 +28,12 @@ var PdfViewer = ({
28
28
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rpc_pdf_viewer_toolbar", children: [
29
29
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rpc_pdf_viewer_title", children: title }),
30
30
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rpc_pdf_viewer_actions", children: [
31
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "rpc_pdf_viewer_btn", onClick: handleZoomOut, title: "\u7F29\u5C0F", children: /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.ZoomOutOutlined, {}) }),
31
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "rpc_pdf_viewer_btn", onClick: handleZoomOut, title: "\u7F29\u5C0F", children: /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.ZoomOutOutlined, {}) }),
32
32
  /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: 12, minWidth: 40, textAlign: "center" }, children: [
33
33
  zoom,
34
34
  "%"
35
35
  ] }),
36
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "rpc_pdf_viewer_btn", onClick: handleZoomIn, title: "\u653E\u5927", children: /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.ZoomInOutlined, {}) }),
36
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "rpc_pdf_viewer_btn", onClick: handleZoomIn, title: "\u653E\u5927", children: /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.ZoomInOutlined, {}) }),
37
37
  /* @__PURE__ */ jsxRuntime.jsx(
38
38
  "button",
39
39
  {
@@ -41,11 +41,11 @@ var PdfViewer = ({
41
41
  className: "rpc_pdf_viewer_btn",
42
42
  onClick: handleRotate,
43
43
  title: "\u987A\u65F6\u9488\u65CB\u8F6C 90\xB0",
44
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.RotateRightOutlined, {})
44
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.RotateRightOutlined, {})
45
45
  }
46
46
  ),
47
47
  showDownload && /* @__PURE__ */ jsxRuntime.jsxs("a", { href: src, download: true, className: "rpc_pdf_viewer_btn", title: "\u4E0B\u8F7D PDF", children: [
48
- /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.DownloadOutlined, {}),
48
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.DownloadOutlined, {}),
49
49
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u4E0B\u8F7D" })
50
50
  ] })
51
51
  ] })
@@ -66,5 +66,5 @@ var PdfViewer = ({
66
66
  var PdfViewer_default = PdfViewer;
67
67
 
68
68
  exports.PdfViewer_default = PdfViewer_default;
69
- //# sourceMappingURL=chunk-PYCSRJSF.cjs.map
70
- //# sourceMappingURL=chunk-PYCSRJSF.cjs.map
69
+ //# sourceMappingURL=chunk-CWG7A5DS.cjs.map
70
+ //# sourceMappingURL=chunk-CWG7A5DS.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../PdfViewer/index.tsx"],"names":["useState","jsxs","jsx","ZoomOutOutlined","ZoomInOutlined","RotateRightOutlined","DownloadOutlined"],"mappings":";;;;;;AA0BA,IAAM,YAAsC,CAAC;AAAA,EAC5C,GAAA;AAAA,EACA,KAAA,GAAQ,sBAAA;AAAA,EACR,KAAA,GAAQ,MAAA;AAAA,EACR,MAAA,GAAS,GAAA;AAAA,EACT,YAAA,GAAe,IAAA;AAAA,EACf,SAAA,GAAY,EAAA;AAAA,EACZ;AACD,CAAA,KAAM;AACL,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAAiB,GAAG,CAAA;AAC5C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAiB,CAAC,CAAA;AAElD,EAAA,MAAM,eAAe,MAAM;AAC1B,IAAA,OAAA,CAAQ,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI,GAAA,EAAK,IAAA,GAAO,EAAE,CAAC,CAAA;AAAA,EAC3C,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC3B,IAAA,OAAA,CAAQ,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI,EAAA,EAAI,IAAA,GAAO,EAAE,CAAC,CAAA;AAAA,EAC1C,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AAC1B,IAAA,WAAA,CAAY,CAAC,IAAA,KAAA,CAAU,IAAA,GAAO,EAAA,IAAM,GAAG,CAAA;AAAA,EACxC,CAAA;AAEA,EAAA,uBACCC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,eAAA,EAAkB,SAAS,CAAA,CAAA,EAAI,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,GAAG,KAAA,EAAM,EAE/E,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wBAAA,EACd,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAA,EAAwB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAE9CD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACd,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,oBAAA,EAAqB,OAAA,EAAS,aAAA,EAAe,KAAA,EAAM,cAAA,EAClF,QAAA,kBAAAA,cAAA,CAACC,iCAAA,EAAA,EAAgB,CAAA,EAClB,CAAA;AAAA,wBAEAF,eAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,IAAI,QAAA,EAAU,EAAA,EAAI,SAAA,EAAW,QAAA,EAAS,EAAI,QAAA,EAAA;AAAA,UAAA,IAAA;AAAA,UAAK;AAAA,SAAA,EAAC,CAAA;AAAA,wBAEzEC,cAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,oBAAA,EAAqB,OAAA,EAAS,YAAA,EAAc,KAAA,EAAM,cAAA,EACjF,QAAA,kBAAAA,cAAA,CAACE,gCAAA,EAAA,EAAe,CAAA,EACjB,CAAA;AAAA,wBAEAF,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAU,oBAAA;AAAA,YACV,OAAA,EAAS,YAAA;AAAA,YACT,KAAA,EAAM,uCAAA;AAAA,YAEN,yCAACG,qCAAA,EAAA,EAAoB;AAAA;AAAA,SACtB;AAAA,QAEC,YAAA,oBACAJ,eAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,GAAA,EAAK,UAAQ,IAAA,EAAC,SAAA,EAAU,oBAAA,EAAqB,KAAA,EAAM,kBAAA,EAC3D,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAACI,kCAAA,EAAA,EAAiB,CAAA;AAAA,0BAClBJ,cAAA,CAAC,UAAK,QAAA,EAAA,cAAA,EAAE;AAAA,SAAA,EACT;AAAA,OAAA,EAEF;AAAA,KAAA,EACD,CAAA;AAAA,oBAGAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACd,QAAA,kBAAAA,cAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACA,GAAA,EAAK,GAAG,GAAG,CAAA,qBAAA,CAAA;AAAA,QACX,KAAA,EAAM,mBAAA;AAAA,QACN,SAAA,EAAU,sBAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACN,SAAA,EAAW,CAAA,MAAA,EAAS,IAAA,GAAO,GAAG,YAAY,QAAQ,CAAA,IAAA;AAAA;AACnD;AAAA,KACD,EACD;AAAA,GAAA,EACD,CAAA;AAEF,CAAA;AAEA,IAAO,iBAAA,GAAQ","file":"chunk-PYCSRJSF.cjs","sourcesContent":["import React, { useState, ReactNode, CSSProperties } from 'react';\nimport {\n\tZoomInOutlined,\n\tZoomOutOutlined,\n\tRotateRightOutlined,\n\tDownloadOutlined,\n} from '../src/icons';\nimport './index.less';\n\nexport interface PdfViewerProps {\n\t/** PDF 文件 URL 地址 */\n\tsrc: string;\n\t/** 文档标题 */\n\ttitle?: ReactNode;\n\t/** 宽度,默认为 '100%' */\n\twidth?: number | string;\n\t/** 高度,默认为 500 */\n\theight?: number | string;\n\t/** 是否显示下载按钮,默认为 true */\n\tshowDownload?: boolean;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst PdfViewer: React.FC<PdfViewerProps> = ({\n\tsrc,\n\ttitle = 'PDF Document Preview',\n\twidth = '100%',\n\theight = 500,\n\tshowDownload = true,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [zoom, setZoom] = useState<number>(100);\n\tconst [rotation, setRotation] = useState<number>(0);\n\n\tconst handleZoomIn = () => {\n\t\tsetZoom((prev) => Math.min(200, prev + 15));\n\t};\n\n\tconst handleZoomOut = () => {\n\t\tsetZoom((prev) => Math.max(50, prev - 15));\n\t};\n\n\tconst handleRotate = () => {\n\t\tsetRotation((prev) => (prev + 90) % 360);\n\t};\n\n\treturn (\n\t\t<div className={`rpc_pdf_viewer ${className}`} style={{ width, height, ...style }}>\n\t\t\t{/* 顶部工具栏 */}\n\t\t\t<div className=\"rpc_pdf_viewer_toolbar\">\n\t\t\t\t<span className=\"rpc_pdf_viewer_title\">{title}</span>\n\n\t\t\t\t<div className=\"rpc_pdf_viewer_actions\">\n\t\t\t\t\t<button type=\"button\" className=\"rpc_pdf_viewer_btn\" onClick={handleZoomOut} title=\"缩小\">\n\t\t\t\t\t\t<ZoomOutOutlined />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<span style={{ fontSize: 12, minWidth: 40, textAlign: 'center' }}>{zoom}%</span>\n\n\t\t\t\t\t<button type=\"button\" className=\"rpc_pdf_viewer_btn\" onClick={handleZoomIn} title=\"放大\">\n\t\t\t\t\t\t<ZoomInOutlined />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"rpc_pdf_viewer_btn\"\n\t\t\t\t\t\tonClick={handleRotate}\n\t\t\t\t\t\ttitle=\"顺时针旋转 90°\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<RotateRightOutlined />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t{showDownload && (\n\t\t\t\t\t\t<a href={src} download className=\"rpc_pdf_viewer_btn\" title=\"下载 PDF\">\n\t\t\t\t\t\t\t<DownloadOutlined />\n\t\t\t\t\t\t\t<span>下载</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* PDF 内容嵌入容器 */}\n\t\t\t<div className=\"rpc_pdf_viewer_body\">\n\t\t\t\t<iframe\n\t\t\t\t\tsrc={`${src}#toolbar=0&navpanes=0`}\n\t\t\t\t\ttitle=\"PDF Preview Frame\"\n\t\t\t\t\tclassName=\"rpc_pdf_viewer_frame\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\ttransform: `scale(${zoom / 100}) rotate(${rotation}deg)`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default PdfViewer;\n"]}
1
+ {"version":3,"sources":["../PdfViewer/index.tsx"],"names":["useState","jsxs","jsx","ZoomOutOutlined","ZoomInOutlined","RotateRightOutlined","DownloadOutlined"],"mappings":"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","file":"chunk-CWG7A5DS.cjs","sourcesContent":["import React, { useState, ReactNode, CSSProperties } from 'react';\nimport {\n\tZoomInOutlined,\n\tZoomOutOutlined,\n\tRotateRightOutlined,\n\tDownloadOutlined,\n} from '../src/icons';\nimport './index.less';\n\nexport interface PdfViewerProps {\n\t/** PDF 文件 URL 地址 */\n\tsrc: string;\n\t/** 文档标题 */\n\ttitle?: ReactNode;\n\t/** 宽度,默认为 '100%' */\n\twidth?: number | string;\n\t/** 高度,默认为 500 */\n\theight?: number | string;\n\t/** 是否显示下载按钮,默认为 true */\n\tshowDownload?: boolean;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst PdfViewer: React.FC<PdfViewerProps> = ({\n\tsrc,\n\ttitle = 'PDF Document Preview',\n\twidth = '100%',\n\theight = 500,\n\tshowDownload = true,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [zoom, setZoom] = useState<number>(100);\n\tconst [rotation, setRotation] = useState<number>(0);\n\n\tconst handleZoomIn = () => {\n\t\tsetZoom((prev) => Math.min(200, prev + 15));\n\t};\n\n\tconst handleZoomOut = () => {\n\t\tsetZoom((prev) => Math.max(50, prev - 15));\n\t};\n\n\tconst handleRotate = () => {\n\t\tsetRotation((prev) => (prev + 90) % 360);\n\t};\n\n\treturn (\n\t\t<div className={`rpc_pdf_viewer ${className}`} style={{ width, height, ...style }}>\n\t\t\t{/* 顶部工具栏 */}\n\t\t\t<div className=\"rpc_pdf_viewer_toolbar\">\n\t\t\t\t<span className=\"rpc_pdf_viewer_title\">{title}</span>\n\n\t\t\t\t<div className=\"rpc_pdf_viewer_actions\">\n\t\t\t\t\t<button type=\"button\" className=\"rpc_pdf_viewer_btn\" onClick={handleZoomOut} title=\"缩小\">\n\t\t\t\t\t\t<ZoomOutOutlined />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<span style={{ fontSize: 12, minWidth: 40, textAlign: 'center' }}>{zoom}%</span>\n\n\t\t\t\t\t<button type=\"button\" className=\"rpc_pdf_viewer_btn\" onClick={handleZoomIn} title=\"放大\">\n\t\t\t\t\t\t<ZoomInOutlined />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"rpc_pdf_viewer_btn\"\n\t\t\t\t\t\tonClick={handleRotate}\n\t\t\t\t\t\ttitle=\"顺时针旋转 90°\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<RotateRightOutlined />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t{showDownload && (\n\t\t\t\t\t\t<a href={src} download className=\"rpc_pdf_viewer_btn\" title=\"下载 PDF\">\n\t\t\t\t\t\t\t<DownloadOutlined />\n\t\t\t\t\t\t\t<span>下载</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* PDF 内容嵌入容器 */}\n\t\t\t<div className=\"rpc_pdf_viewer_body\">\n\t\t\t\t<iframe\n\t\t\t\t\tsrc={`${src}#toolbar=0&navpanes=0`}\n\t\t\t\t\ttitle=\"PDF Preview Frame\"\n\t\t\t\t\tclassName=\"rpc_pdf_viewer_frame\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\ttransform: `scale(${zoom / 100}) rotate(${rotation}deg)`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default PdfViewer;\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkR4V3EJVP_cjs = require('./chunk-R4V3EJVP.cjs');
3
+ var chunkQMLDK2DL_cjs = require('./chunk-QMLDK2DL.cjs');
4
4
  var react = require('react');
5
5
  var ReactDOM = require('react-dom');
6
6
  var jsxRuntime = require('react/jsx-runtime');
@@ -117,7 +117,7 @@ var GuidedTour = ({
117
117
  children: [
118
118
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rpc_guided_tour_header", children: [
119
119
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rpc_guided_tour_title", children: currentStep.title }),
120
- /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.CloseOutlined, { style: { cursor: "pointer", color: "#8c8c8c" }, onClick: handleSkip })
120
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.CloseOutlined, { style: { cursor: "pointer", color: "#8c8c8c" }, onClick: handleSkip })
121
121
  ] }),
122
122
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rpc_guided_tour_description", children: currentStep.description }),
123
123
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rpc_guided_tour_footer", children: [
@@ -149,5 +149,5 @@ var GuidedTour = ({
149
149
  var GuidedTour_default = GuidedTour;
150
150
 
151
151
  exports.GuidedTour_default = GuidedTour_default;
152
- //# sourceMappingURL=chunk-YP4XTMK3.cjs.map
153
- //# sourceMappingURL=chunk-YP4XTMK3.cjs.map
152
+ //# sourceMappingURL=chunk-DTJEY3BC.cjs.map
153
+ //# sourceMappingURL=chunk-DTJEY3BC.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../GuidedTour/index.tsx"],"names":["useState","useEffect","currentStep","ReactDOM","jsx","jsxs","CloseOutlined"],"mappings":"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","file":"chunk-YP4XTMK3.cjs","sourcesContent":["import React, { useState, useEffect, ReactNode, CSSProperties } from 'react';\nimport ReactDOM from 'react-dom';\nimport { CloseOutlined } from '../src/icons';\nimport './index.less';\n\nexport type TourPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface TourStep {\n\t/** 目标 DOM 节点选择器、DOM 对象或获取函数 */\n\ttarget: string | HTMLElement | (() => HTMLElement | null) | null;\n\t/** 引导步骤标题 */\n\ttitle: ReactNode;\n\t/** 引导步骤详细说明 */\n\tdescription: ReactNode;\n\t/** 气泡对齐方向,默认为 'bottom' */\n\tplacement?: TourPlacement;\n}\n\nexport interface GuidedTourProps {\n\t/** 引导步骤列表 */\n\tsteps: TourStep[];\n\t/** 是否开启引导 */\n\topen: boolean;\n\t/** 当前步数(受控,可选) */\n\tcurrent?: number;\n\t/** 步数改变回调 */\n\tonChange?: (current: number) => void;\n\t/** 关闭/跳过引导回调 */\n\tonClose?: () => void;\n\t/** 全部引导完成回调 */\n\tonFinish?: () => void;\n\t/** LocalStorage 存储已完成状态的 Key(若提供则完成或跳过后自动持久化记录) */\n\tstorageKey?: string;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst GuidedTour: React.FC<GuidedTourProps> = ({\n\tsteps = [],\n\topen,\n\tcurrent: controlledCurrent,\n\tonChange,\n\tonClose,\n\tonFinish,\n\tstorageKey,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalCurrent, setInternalCurrent] = useState<number>(0);\n\tconst currentStepIndex = controlledCurrent !== undefined ? controlledCurrent : internalCurrent;\n\n\tconst [targetRect, setTargetRect] = useState<DOMRect | null>(null);\n\n\t// 获取当前步骤的目标 DOM\n\tconst getTargetElement = (step: TourStep): HTMLElement | null => {\n\t\tif (!step || !step.target) return null;\n\t\tif (typeof step.target === 'function') {\n\t\t\treturn step.target();\n\t\t}\n\t\tif (typeof step.target === 'string') {\n\t\t\treturn document.querySelector(step.target);\n\t\t}\n\t\treturn step.target;\n\t};\n\n\t// 计算目标节点坐标\n\tuseEffect(() => {\n\t\tif (!open || steps.length === 0) return;\n\n\t\tconst currentStep = steps[currentStepIndex];\n\t\tif (!currentStep) return;\n\n\t\tconst el = getTargetElement(currentStep);\n\t\tif (el) {\n\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\tsetTargetRect(rect);\n\t\t\t// 自动平滑滚动到可见区域\n\t\t\tel.scrollIntoView({ behavior: 'smooth', block: 'center' });\n\t\t} else {\n\t\t\tsetTargetRect(null);\n\t\t}\n\t}, [open, steps, currentStepIndex]);\n\n\tif (!open || steps.length === 0) return null;\n\n\tconst currentStep = steps[currentStepIndex];\n\tif (!currentStep) return null;\n\n\tconst handleNext = () => {\n\t\tif (currentStepIndex < steps.length - 1) {\n\t\t\tconst next = currentStepIndex + 1;\n\t\t\tif (controlledCurrent === undefined) setInternalCurrent(next);\n\t\t\tonChange?.(next);\n\t\t} else {\n\t\t\tif (storageKey) localStorage.setItem(storageKey, 'true');\n\t\t\tonFinish?.();\n\t\t\tonClose?.();\n\t\t}\n\t};\n\n\tconst handlePrev = () => {\n\t\tif (currentStepIndex > 0) {\n\t\t\tconst prev = currentStepIndex - 1;\n\t\t\tif (controlledCurrent === undefined) setInternalCurrent(prev);\n\t\t\tonChange?.(prev);\n\t\t}\n\t};\n\n\tconst handleSkip = () => {\n\t\tif (storageKey) localStorage.setItem(storageKey, 'true');\n\t\tonClose?.();\n\t};\n\n\t// 气泡卡片定位计算\n\tlet popoverTop = 100;\n\tlet popoverLeft = 100;\n\n\tif (targetRect) {\n\t\tconst placement = currentStep.placement || 'bottom';\n\t\tconst padding = 12;\n\n\t\tif (placement === 'bottom') {\n\t\t\tpopoverTop = targetRect.bottom + padding;\n\t\t\tpopoverLeft = targetRect.left;\n\t\t} else if (placement === 'top') {\n\t\t\tpopoverTop = targetRect.top - 180 - padding;\n\t\t\tpopoverLeft = targetRect.left;\n\t\t} else if (placement === 'left') {\n\t\t\tpopoverTop = targetRect.top;\n\t\t\tpopoverLeft = targetRect.left - 320 - padding;\n\t\t} else if (placement === 'right') {\n\t\t\tpopoverTop = targetRect.top;\n\t\t\tpopoverLeft = targetRect.right + padding;\n\t\t}\n\n\t\t// 视口防溢出修正\n\t\tpopoverLeft = Math.max(16, Math.min(window.innerWidth - 340, popoverLeft));\n\t\tpopoverTop = Math.max(16, Math.min(window.innerHeight - 200, popoverTop));\n\t}\n\n\treturn ReactDOM.createPortal(\n\t\t<div className={`rpc_guided_tour ${className}`} style={style}>\n\t\t\t{/* 镂空高亮遮罩层 */}\n\t\t\t{targetRect && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"rpc_guided_tour_highlight_box\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tleft: `${targetRect.left - 4}px`,\n\t\t\t\t\t\ttop: `${targetRect.top - 4}px`,\n\t\t\t\t\t\twidth: `${targetRect.width + 8}px`,\n\t\t\t\t\t\theight: `${targetRect.height + 8}px`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{/* 引导卡片 */}\n\t\t\t<div\n\t\t\t\tclassName=\"rpc_guided_tour_popover\"\n\t\t\t\tstyle={{\n\t\t\t\t\tleft: `${popoverLeft}px`,\n\t\t\t\t\ttop: `${popoverTop}px`,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div className=\"rpc_guided_tour_header\">\n\t\t\t\t\t<span className=\"rpc_guided_tour_title\">{currentStep.title}</span>\n\t\t\t\t\t<CloseOutlined style={{ cursor: 'pointer', color: '#8c8c8c' }} onClick={handleSkip} />\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"rpc_guided_tour_description\">{currentStep.description}</div>\n\n\t\t\t\t<div className=\"rpc_guided_tour_footer\">\n\t\t\t\t\t<span className=\"rpc_guided_tour_progress\">\n\t\t\t\t\t\t{currentStepIndex + 1} / {steps.length}\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<div className=\"rpc_guided_tour_actions\">\n\t\t\t\t\t\t{currentStepIndex > 0 && (\n\t\t\t\t\t\t\t<button type=\"button\" className=\"rpc_guided_tour_btn\" onClick={handlePrev}>\n\t\t\t\t\t\t\t\t上一步\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t)}\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_guided_tour_btn rpc_guided_tour_btn_primary\"\n\t\t\t\t\t\t\tonClick={handleNext}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{currentStepIndex === steps.length - 1 ? '完成' : '下一步'}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>,\n\t\tdocument.body,\n\t);\n};\n\nexport default GuidedTour;\n"]}
1
+ {"version":3,"sources":["../GuidedTour/index.tsx"],"names":["useState","useEffect","currentStep","ReactDOM","jsx","jsxs","CloseOutlined"],"mappings":"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","file":"chunk-DTJEY3BC.cjs","sourcesContent":["import React, { useState, useEffect, ReactNode, CSSProperties } from 'react';\nimport ReactDOM from 'react-dom';\nimport { CloseOutlined } from '../src/icons';\nimport './index.less';\n\nexport type TourPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface TourStep {\n\t/** 目标 DOM 节点选择器、DOM 对象或获取函数 */\n\ttarget: string | HTMLElement | (() => HTMLElement | null) | null;\n\t/** 引导步骤标题 */\n\ttitle: ReactNode;\n\t/** 引导步骤详细说明 */\n\tdescription: ReactNode;\n\t/** 气泡对齐方向,默认为 'bottom' */\n\tplacement?: TourPlacement;\n}\n\nexport interface GuidedTourProps {\n\t/** 引导步骤列表 */\n\tsteps: TourStep[];\n\t/** 是否开启引导 */\n\topen: boolean;\n\t/** 当前步数(受控,可选) */\n\tcurrent?: number;\n\t/** 步数改变回调 */\n\tonChange?: (current: number) => void;\n\t/** 关闭/跳过引导回调 */\n\tonClose?: () => void;\n\t/** 全部引导完成回调 */\n\tonFinish?: () => void;\n\t/** LocalStorage 存储已完成状态的 Key(若提供则完成或跳过后自动持久化记录) */\n\tstorageKey?: string;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst GuidedTour: React.FC<GuidedTourProps> = ({\n\tsteps = [],\n\topen,\n\tcurrent: controlledCurrent,\n\tonChange,\n\tonClose,\n\tonFinish,\n\tstorageKey,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalCurrent, setInternalCurrent] = useState<number>(0);\n\tconst currentStepIndex = controlledCurrent !== undefined ? controlledCurrent : internalCurrent;\n\n\tconst [targetRect, setTargetRect] = useState<DOMRect | null>(null);\n\n\t// 获取当前步骤的目标 DOM\n\tconst getTargetElement = (step: TourStep): HTMLElement | null => {\n\t\tif (!step || !step.target) return null;\n\t\tif (typeof step.target === 'function') {\n\t\t\treturn step.target();\n\t\t}\n\t\tif (typeof step.target === 'string') {\n\t\t\treturn document.querySelector(step.target);\n\t\t}\n\t\treturn step.target;\n\t};\n\n\t// 计算目标节点坐标\n\tuseEffect(() => {\n\t\tif (!open || steps.length === 0) return;\n\n\t\tconst currentStep = steps[currentStepIndex];\n\t\tif (!currentStep) return;\n\n\t\tconst el = getTargetElement(currentStep);\n\t\tif (el) {\n\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\tsetTargetRect(rect);\n\t\t\t// 自动平滑滚动到可见区域\n\t\t\tel.scrollIntoView({ behavior: 'smooth', block: 'center' });\n\t\t} else {\n\t\t\tsetTargetRect(null);\n\t\t}\n\t}, [open, steps, currentStepIndex]);\n\n\tif (!open || steps.length === 0) return null;\n\n\tconst currentStep = steps[currentStepIndex];\n\tif (!currentStep) return null;\n\n\tconst handleNext = () => {\n\t\tif (currentStepIndex < steps.length - 1) {\n\t\t\tconst next = currentStepIndex + 1;\n\t\t\tif (controlledCurrent === undefined) setInternalCurrent(next);\n\t\t\tonChange?.(next);\n\t\t} else {\n\t\t\tif (storageKey) localStorage.setItem(storageKey, 'true');\n\t\t\tonFinish?.();\n\t\t\tonClose?.();\n\t\t}\n\t};\n\n\tconst handlePrev = () => {\n\t\tif (currentStepIndex > 0) {\n\t\t\tconst prev = currentStepIndex - 1;\n\t\t\tif (controlledCurrent === undefined) setInternalCurrent(prev);\n\t\t\tonChange?.(prev);\n\t\t}\n\t};\n\n\tconst handleSkip = () => {\n\t\tif (storageKey) localStorage.setItem(storageKey, 'true');\n\t\tonClose?.();\n\t};\n\n\t// 气泡卡片定位计算\n\tlet popoverTop = 100;\n\tlet popoverLeft = 100;\n\n\tif (targetRect) {\n\t\tconst placement = currentStep.placement || 'bottom';\n\t\tconst padding = 12;\n\n\t\tif (placement === 'bottom') {\n\t\t\tpopoverTop = targetRect.bottom + padding;\n\t\t\tpopoverLeft = targetRect.left;\n\t\t} else if (placement === 'top') {\n\t\t\tpopoverTop = targetRect.top - 180 - padding;\n\t\t\tpopoverLeft = targetRect.left;\n\t\t} else if (placement === 'left') {\n\t\t\tpopoverTop = targetRect.top;\n\t\t\tpopoverLeft = targetRect.left - 320 - padding;\n\t\t} else if (placement === 'right') {\n\t\t\tpopoverTop = targetRect.top;\n\t\t\tpopoverLeft = targetRect.right + padding;\n\t\t}\n\n\t\t// 视口防溢出修正\n\t\tpopoverLeft = Math.max(16, Math.min(window.innerWidth - 340, popoverLeft));\n\t\tpopoverTop = Math.max(16, Math.min(window.innerHeight - 200, popoverTop));\n\t}\n\n\treturn ReactDOM.createPortal(\n\t\t<div className={`rpc_guided_tour ${className}`} style={style}>\n\t\t\t{/* 镂空高亮遮罩层 */}\n\t\t\t{targetRect && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"rpc_guided_tour_highlight_box\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tleft: `${targetRect.left - 4}px`,\n\t\t\t\t\t\ttop: `${targetRect.top - 4}px`,\n\t\t\t\t\t\twidth: `${targetRect.width + 8}px`,\n\t\t\t\t\t\theight: `${targetRect.height + 8}px`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{/* 引导卡片 */}\n\t\t\t<div\n\t\t\t\tclassName=\"rpc_guided_tour_popover\"\n\t\t\t\tstyle={{\n\t\t\t\t\tleft: `${popoverLeft}px`,\n\t\t\t\t\ttop: `${popoverTop}px`,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div className=\"rpc_guided_tour_header\">\n\t\t\t\t\t<span className=\"rpc_guided_tour_title\">{currentStep.title}</span>\n\t\t\t\t\t<CloseOutlined style={{ cursor: 'pointer', color: '#8c8c8c' }} onClick={handleSkip} />\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"rpc_guided_tour_description\">{currentStep.description}</div>\n\n\t\t\t\t<div className=\"rpc_guided_tour_footer\">\n\t\t\t\t\t<span className=\"rpc_guided_tour_progress\">\n\t\t\t\t\t\t{currentStepIndex + 1} / {steps.length}\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<div className=\"rpc_guided_tour_actions\">\n\t\t\t\t\t\t{currentStepIndex > 0 && (\n\t\t\t\t\t\t\t<button type=\"button\" className=\"rpc_guided_tour_btn\" onClick={handlePrev}>\n\t\t\t\t\t\t\t\t上一步\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t)}\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_guided_tour_btn rpc_guided_tour_btn_primary\"\n\t\t\t\t\t\t\tonClick={handleNext}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{currentStepIndex === steps.length - 1 ? '完成' : '下一步'}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>,\n\t\tdocument.body,\n\t);\n};\n\nexport default GuidedTour;\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkR4V3EJVP_cjs = require('./chunk-R4V3EJVP.cjs');
3
+ var chunkQMLDK2DL_cjs = require('./chunk-QMLDK2DL.cjs');
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
5
 
6
6
  var DisabledBox = ({
@@ -31,9 +31,9 @@ var DisabledBox = ({
31
31
  style,
32
32
  onClickCapture: handleClickCapture,
33
33
  children: [
34
- iconAlign === "left" && /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.LockOutlined, { className: "disabled_box_icon" }),
34
+ iconAlign === "left" && /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.LockOutlined, { className: "disabled_box_icon" }),
35
35
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "disabled_box_title", children: content }),
36
- iconAlign === "right" && /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.LockOutlined, { className: "disabled_box_icon" })
36
+ iconAlign === "right" && /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.LockOutlined, { className: "disabled_box_icon" })
37
37
  ]
38
38
  }
39
39
  );
@@ -41,5 +41,5 @@ var DisabledBox = ({
41
41
  var DisabledBox_default = DisabledBox;
42
42
 
43
43
  exports.DisabledBox_default = DisabledBox_default;
44
- //# sourceMappingURL=chunk-2EIAWXFA.cjs.map
45
- //# sourceMappingURL=chunk-2EIAWXFA.cjs.map
44
+ //# sourceMappingURL=chunk-DWG4FUDX.cjs.map
45
+ //# sourceMappingURL=chunk-DWG4FUDX.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../DisabledBox/index.tsx"],"names":["jsx","jsxs","LockOutlined"],"mappings":";;;;;AAmBA,IAAM,cAA0C,CAAC;AAAA,EAChD,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,SAAA,GAAY,MAAA;AAAA,EACZ,SAAA,GAAY,EAAA;AAAA,EACZ;AACD,CAAA,KAAM;AACL,EAAA,MAAM,UAAU,QAAA,IAAA,IAAA,GAAA,QAAA,GAAY,KAAA;AAG5B,EAAA,IAAI,CAAC,QAAA,EAAU;AACd,IAAA,IAAI,aAAa,KAAA,EAAO;AACvB,MAAA,uBACCA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EACzB,QAAA,EAAA,OAAA,EACF,CAAA;AAAA,IAEF;AACA,IAAA,6DAAU,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,EACnB;AAGA,EAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAwB;AACnD,IAAA,IAAI,QAAA,EAAU;AACb,MAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,MAAA,CAAA,CAAE,cAAA,EAAe;AAAA,IAClB;AAAA,EACD,CAAA;AAEA,EAAA,uBACCC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAW,gDAAgD,SAAS,CAAA,CAAA;AAAA,MACpE,KAAA;AAAA,MACA,cAAA,EAAgB,kBAAA;AAAA,MAEf,QAAA,EAAA;AAAA,QAAA,SAAA,KAAc,MAAA,oBAAUD,cAAA,CAACE,8BAAA,EAAA,EAAa,SAAA,EAAU,mBAAA,EAAoB,CAAA;AAAA,wBACrEF,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAsB,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,QAC7C,SAAA,KAAc,OAAA,oBAAWA,cAAA,CAACE,8BAAA,EAAA,EAAa,WAAU,mBAAA,EAAoB;AAAA;AAAA;AAAA,GACvE;AAEF,CAAA;AAEA,IAAO,mBAAA,GAAQ","file":"chunk-2EIAWXFA.cjs","sourcesContent":["import React, { ReactNode, CSSProperties } from 'react';\nimport { LockOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface DisabledBoxProps {\n\t/** 内容节点(优先于 title) */\n\tchildren?: ReactNode;\n\t/** 标题文案(当无 children 时作为内容) */\n\ttitle?: ReactNode;\n\t/** 是否禁用,禁用时显示锁图标 + 文字置灰 + 拦截点击事件 */\n\tdisabled?: boolean;\n\t/** 锁图标对齐方向:'left' 左侧,'right' 右侧,默认为 'left' */\n\ticonAlign?: 'left' | 'right';\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst DisabledBox: React.FC<DisabledBoxProps> = ({\n\ttitle,\n\tchildren,\n\tdisabled = false,\n\ticonAlign = 'left',\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst content = children ?? title;\n\n\t// 未禁用时原样渲染\n\tif (!disabled) {\n\t\tif (className || style) {\n\t\t\treturn (\n\t\t\t\t<div className={className} style={style}>\n\t\t\t\t\t{content}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\treturn <>{content}</>;\n\t}\n\n\t// disabled 时在捕获阶段阻止 click 事件传播\n\tconst handleClickCapture = (e: React.MouseEvent) => {\n\t\tif (disabled) {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`disabled_box_container disabled_box_disabled ${className}`}\n\t\t\tstyle={style}\n\t\t\tonClickCapture={handleClickCapture}\n\t\t>\n\t\t\t{iconAlign === 'left' && <LockOutlined className=\"disabled_box_icon\" />}\n\t\t\t<span className=\"disabled_box_title\">{content}</span>\n\t\t\t{iconAlign === 'right' && <LockOutlined className=\"disabled_box_icon\" />}\n\t\t</div>\n\t);\n};\n\nexport default DisabledBox;\n"]}
1
+ {"version":3,"sources":["../DisabledBox/index.tsx"],"names":["jsx","jsxs","LockOutlined"],"mappings":";;;;;AAmBA,IAAM,cAA0C,CAAC;AAAA,EAChD,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,SAAA,GAAY,MAAA;AAAA,EACZ,SAAA,GAAY,EAAA;AAAA,EACZ;AACD,CAAA,KAAM;AACL,EAAA,MAAM,UAAU,QAAA,IAAA,IAAA,GAAA,QAAA,GAAY,KAAA;AAG5B,EAAA,IAAI,CAAC,QAAA,EAAU;AACd,IAAA,IAAI,aAAa,KAAA,EAAO;AACvB,MAAA,uBACCA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EACzB,QAAA,EAAA,OAAA,EACF,CAAA;AAAA,IAEF;AACA,IAAA,6DAAU,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,EACnB;AAGA,EAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAwB;AACnD,IAAA,IAAI,QAAA,EAAU;AACb,MAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,MAAA,CAAA,CAAE,cAAA,EAAe;AAAA,IAClB;AAAA,EACD,CAAA;AAEA,EAAA,uBACCC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAW,gDAAgD,SAAS,CAAA,CAAA;AAAA,MACpE,KAAA;AAAA,MACA,cAAA,EAAgB,kBAAA;AAAA,MAEf,QAAA,EAAA;AAAA,QAAA,SAAA,KAAc,MAAA,oBAAUD,cAAA,CAACE,8BAAA,EAAA,EAAa,SAAA,EAAU,mBAAA,EAAoB,CAAA;AAAA,wBACrEF,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAsB,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,QAC7C,SAAA,KAAc,OAAA,oBAAWA,cAAA,CAACE,8BAAA,EAAA,EAAa,WAAU,mBAAA,EAAoB;AAAA;AAAA;AAAA,GACvE;AAEF,CAAA;AAEA,IAAO,mBAAA,GAAQ","file":"chunk-DWG4FUDX.cjs","sourcesContent":["import React, { ReactNode, CSSProperties } from 'react';\nimport { LockOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface DisabledBoxProps {\n\t/** 内容节点(优先于 title) */\n\tchildren?: ReactNode;\n\t/** 标题文案(当无 children 时作为内容) */\n\ttitle?: ReactNode;\n\t/** 是否禁用,禁用时显示锁图标 + 文字置灰 + 拦截点击事件 */\n\tdisabled?: boolean;\n\t/** 锁图标对齐方向:'left' 左侧,'right' 右侧,默认为 'left' */\n\ticonAlign?: 'left' | 'right';\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst DisabledBox: React.FC<DisabledBoxProps> = ({\n\ttitle,\n\tchildren,\n\tdisabled = false,\n\ticonAlign = 'left',\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst content = children ?? title;\n\n\t// 未禁用时原样渲染\n\tif (!disabled) {\n\t\tif (className || style) {\n\t\t\treturn (\n\t\t\t\t<div className={className} style={style}>\n\t\t\t\t\t{content}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\treturn <>{content}</>;\n\t}\n\n\t// disabled 时在捕获阶段阻止 click 事件传播\n\tconst handleClickCapture = (e: React.MouseEvent) => {\n\t\tif (disabled) {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`disabled_box_container disabled_box_disabled ${className}`}\n\t\t\tstyle={style}\n\t\t\tonClickCapture={handleClickCapture}\n\t\t>\n\t\t\t{iconAlign === 'left' && <LockOutlined className=\"disabled_box_icon\" />}\n\t\t\t<span className=\"disabled_box_title\">{content}</span>\n\t\t\t{iconAlign === 'right' && <LockOutlined className=\"disabled_box_icon\" />}\n\t\t</div>\n\t);\n};\n\nexport default DisabledBox;\n"]}
@@ -1,4 +1,4 @@
1
- import { CloseOutlined } from './chunk-2IDVNTKR.js';
1
+ import { CloseOutlined } from './chunk-537T6BR3.js';
2
2
  import { useState, useEffect } from 'react';
3
3
  import ReactDOM from 'react-dom';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -143,5 +143,5 @@ var GuidedTour = ({
143
143
  var GuidedTour_default = GuidedTour;
144
144
 
145
145
  export { GuidedTour_default };
146
- //# sourceMappingURL=chunk-IF4XAUV3.js.map
147
- //# sourceMappingURL=chunk-IF4XAUV3.js.map
146
+ //# sourceMappingURL=chunk-E6EJLQL7.js.map
147
+ //# sourceMappingURL=chunk-E6EJLQL7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../GuidedTour/index.tsx"],"names":["currentStep"],"mappings":"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","file":"chunk-IF4XAUV3.js","sourcesContent":["import React, { useState, useEffect, ReactNode, CSSProperties } from 'react';\nimport ReactDOM from 'react-dom';\nimport { CloseOutlined } from '../src/icons';\nimport './index.less';\n\nexport type TourPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface TourStep {\n\t/** 目标 DOM 节点选择器、DOM 对象或获取函数 */\n\ttarget: string | HTMLElement | (() => HTMLElement | null) | null;\n\t/** 引导步骤标题 */\n\ttitle: ReactNode;\n\t/** 引导步骤详细说明 */\n\tdescription: ReactNode;\n\t/** 气泡对齐方向,默认为 'bottom' */\n\tplacement?: TourPlacement;\n}\n\nexport interface GuidedTourProps {\n\t/** 引导步骤列表 */\n\tsteps: TourStep[];\n\t/** 是否开启引导 */\n\topen: boolean;\n\t/** 当前步数(受控,可选) */\n\tcurrent?: number;\n\t/** 步数改变回调 */\n\tonChange?: (current: number) => void;\n\t/** 关闭/跳过引导回调 */\n\tonClose?: () => void;\n\t/** 全部引导完成回调 */\n\tonFinish?: () => void;\n\t/** LocalStorage 存储已完成状态的 Key(若提供则完成或跳过后自动持久化记录) */\n\tstorageKey?: string;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst GuidedTour: React.FC<GuidedTourProps> = ({\n\tsteps = [],\n\topen,\n\tcurrent: controlledCurrent,\n\tonChange,\n\tonClose,\n\tonFinish,\n\tstorageKey,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalCurrent, setInternalCurrent] = useState<number>(0);\n\tconst currentStepIndex = controlledCurrent !== undefined ? controlledCurrent : internalCurrent;\n\n\tconst [targetRect, setTargetRect] = useState<DOMRect | null>(null);\n\n\t// 获取当前步骤的目标 DOM\n\tconst getTargetElement = (step: TourStep): HTMLElement | null => {\n\t\tif (!step || !step.target) return null;\n\t\tif (typeof step.target === 'function') {\n\t\t\treturn step.target();\n\t\t}\n\t\tif (typeof step.target === 'string') {\n\t\t\treturn document.querySelector(step.target);\n\t\t}\n\t\treturn step.target;\n\t};\n\n\t// 计算目标节点坐标\n\tuseEffect(() => {\n\t\tif (!open || steps.length === 0) return;\n\n\t\tconst currentStep = steps[currentStepIndex];\n\t\tif (!currentStep) return;\n\n\t\tconst el = getTargetElement(currentStep);\n\t\tif (el) {\n\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\tsetTargetRect(rect);\n\t\t\t// 自动平滑滚动到可见区域\n\t\t\tel.scrollIntoView({ behavior: 'smooth', block: 'center' });\n\t\t} else {\n\t\t\tsetTargetRect(null);\n\t\t}\n\t}, [open, steps, currentStepIndex]);\n\n\tif (!open || steps.length === 0) return null;\n\n\tconst currentStep = steps[currentStepIndex];\n\tif (!currentStep) return null;\n\n\tconst handleNext = () => {\n\t\tif (currentStepIndex < steps.length - 1) {\n\t\t\tconst next = currentStepIndex + 1;\n\t\t\tif (controlledCurrent === undefined) setInternalCurrent(next);\n\t\t\tonChange?.(next);\n\t\t} else {\n\t\t\tif (storageKey) localStorage.setItem(storageKey, 'true');\n\t\t\tonFinish?.();\n\t\t\tonClose?.();\n\t\t}\n\t};\n\n\tconst handlePrev = () => {\n\t\tif (currentStepIndex > 0) {\n\t\t\tconst prev = currentStepIndex - 1;\n\t\t\tif (controlledCurrent === undefined) setInternalCurrent(prev);\n\t\t\tonChange?.(prev);\n\t\t}\n\t};\n\n\tconst handleSkip = () => {\n\t\tif (storageKey) localStorage.setItem(storageKey, 'true');\n\t\tonClose?.();\n\t};\n\n\t// 气泡卡片定位计算\n\tlet popoverTop = 100;\n\tlet popoverLeft = 100;\n\n\tif (targetRect) {\n\t\tconst placement = currentStep.placement || 'bottom';\n\t\tconst padding = 12;\n\n\t\tif (placement === 'bottom') {\n\t\t\tpopoverTop = targetRect.bottom + padding;\n\t\t\tpopoverLeft = targetRect.left;\n\t\t} else if (placement === 'top') {\n\t\t\tpopoverTop = targetRect.top - 180 - padding;\n\t\t\tpopoverLeft = targetRect.left;\n\t\t} else if (placement === 'left') {\n\t\t\tpopoverTop = targetRect.top;\n\t\t\tpopoverLeft = targetRect.left - 320 - padding;\n\t\t} else if (placement === 'right') {\n\t\t\tpopoverTop = targetRect.top;\n\t\t\tpopoverLeft = targetRect.right + padding;\n\t\t}\n\n\t\t// 视口防溢出修正\n\t\tpopoverLeft = Math.max(16, Math.min(window.innerWidth - 340, popoverLeft));\n\t\tpopoverTop = Math.max(16, Math.min(window.innerHeight - 200, popoverTop));\n\t}\n\n\treturn ReactDOM.createPortal(\n\t\t<div className={`rpc_guided_tour ${className}`} style={style}>\n\t\t\t{/* 镂空高亮遮罩层 */}\n\t\t\t{targetRect && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"rpc_guided_tour_highlight_box\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tleft: `${targetRect.left - 4}px`,\n\t\t\t\t\t\ttop: `${targetRect.top - 4}px`,\n\t\t\t\t\t\twidth: `${targetRect.width + 8}px`,\n\t\t\t\t\t\theight: `${targetRect.height + 8}px`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{/* 引导卡片 */}\n\t\t\t<div\n\t\t\t\tclassName=\"rpc_guided_tour_popover\"\n\t\t\t\tstyle={{\n\t\t\t\t\tleft: `${popoverLeft}px`,\n\t\t\t\t\ttop: `${popoverTop}px`,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div className=\"rpc_guided_tour_header\">\n\t\t\t\t\t<span className=\"rpc_guided_tour_title\">{currentStep.title}</span>\n\t\t\t\t\t<CloseOutlined style={{ cursor: 'pointer', color: '#8c8c8c' }} onClick={handleSkip} />\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"rpc_guided_tour_description\">{currentStep.description}</div>\n\n\t\t\t\t<div className=\"rpc_guided_tour_footer\">\n\t\t\t\t\t<span className=\"rpc_guided_tour_progress\">\n\t\t\t\t\t\t{currentStepIndex + 1} / {steps.length}\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<div className=\"rpc_guided_tour_actions\">\n\t\t\t\t\t\t{currentStepIndex > 0 && (\n\t\t\t\t\t\t\t<button type=\"button\" className=\"rpc_guided_tour_btn\" onClick={handlePrev}>\n\t\t\t\t\t\t\t\t上一步\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t)}\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_guided_tour_btn rpc_guided_tour_btn_primary\"\n\t\t\t\t\t\t\tonClick={handleNext}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{currentStepIndex === steps.length - 1 ? '完成' : '下一步'}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>,\n\t\tdocument.body,\n\t);\n};\n\nexport default GuidedTour;\n"]}
1
+ {"version":3,"sources":["../GuidedTour/index.tsx"],"names":["currentStep"],"mappings":"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","file":"chunk-E6EJLQL7.js","sourcesContent":["import React, { useState, useEffect, ReactNode, CSSProperties } from 'react';\nimport ReactDOM from 'react-dom';\nimport { CloseOutlined } from '../src/icons';\nimport './index.less';\n\nexport type TourPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface TourStep {\n\t/** 目标 DOM 节点选择器、DOM 对象或获取函数 */\n\ttarget: string | HTMLElement | (() => HTMLElement | null) | null;\n\t/** 引导步骤标题 */\n\ttitle: ReactNode;\n\t/** 引导步骤详细说明 */\n\tdescription: ReactNode;\n\t/** 气泡对齐方向,默认为 'bottom' */\n\tplacement?: TourPlacement;\n}\n\nexport interface GuidedTourProps {\n\t/** 引导步骤列表 */\n\tsteps: TourStep[];\n\t/** 是否开启引导 */\n\topen: boolean;\n\t/** 当前步数(受控,可选) */\n\tcurrent?: number;\n\t/** 步数改变回调 */\n\tonChange?: (current: number) => void;\n\t/** 关闭/跳过引导回调 */\n\tonClose?: () => void;\n\t/** 全部引导完成回调 */\n\tonFinish?: () => void;\n\t/** LocalStorage 存储已完成状态的 Key(若提供则完成或跳过后自动持久化记录) */\n\tstorageKey?: string;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst GuidedTour: React.FC<GuidedTourProps> = ({\n\tsteps = [],\n\topen,\n\tcurrent: controlledCurrent,\n\tonChange,\n\tonClose,\n\tonFinish,\n\tstorageKey,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalCurrent, setInternalCurrent] = useState<number>(0);\n\tconst currentStepIndex = controlledCurrent !== undefined ? controlledCurrent : internalCurrent;\n\n\tconst [targetRect, setTargetRect] = useState<DOMRect | null>(null);\n\n\t// 获取当前步骤的目标 DOM\n\tconst getTargetElement = (step: TourStep): HTMLElement | null => {\n\t\tif (!step || !step.target) return null;\n\t\tif (typeof step.target === 'function') {\n\t\t\treturn step.target();\n\t\t}\n\t\tif (typeof step.target === 'string') {\n\t\t\treturn document.querySelector(step.target);\n\t\t}\n\t\treturn step.target;\n\t};\n\n\t// 计算目标节点坐标\n\tuseEffect(() => {\n\t\tif (!open || steps.length === 0) return;\n\n\t\tconst currentStep = steps[currentStepIndex];\n\t\tif (!currentStep) return;\n\n\t\tconst el = getTargetElement(currentStep);\n\t\tif (el) {\n\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\tsetTargetRect(rect);\n\t\t\t// 自动平滑滚动到可见区域\n\t\t\tel.scrollIntoView({ behavior: 'smooth', block: 'center' });\n\t\t} else {\n\t\t\tsetTargetRect(null);\n\t\t}\n\t}, [open, steps, currentStepIndex]);\n\n\tif (!open || steps.length === 0) return null;\n\n\tconst currentStep = steps[currentStepIndex];\n\tif (!currentStep) return null;\n\n\tconst handleNext = () => {\n\t\tif (currentStepIndex < steps.length - 1) {\n\t\t\tconst next = currentStepIndex + 1;\n\t\t\tif (controlledCurrent === undefined) setInternalCurrent(next);\n\t\t\tonChange?.(next);\n\t\t} else {\n\t\t\tif (storageKey) localStorage.setItem(storageKey, 'true');\n\t\t\tonFinish?.();\n\t\t\tonClose?.();\n\t\t}\n\t};\n\n\tconst handlePrev = () => {\n\t\tif (currentStepIndex > 0) {\n\t\t\tconst prev = currentStepIndex - 1;\n\t\t\tif (controlledCurrent === undefined) setInternalCurrent(prev);\n\t\t\tonChange?.(prev);\n\t\t}\n\t};\n\n\tconst handleSkip = () => {\n\t\tif (storageKey) localStorage.setItem(storageKey, 'true');\n\t\tonClose?.();\n\t};\n\n\t// 气泡卡片定位计算\n\tlet popoverTop = 100;\n\tlet popoverLeft = 100;\n\n\tif (targetRect) {\n\t\tconst placement = currentStep.placement || 'bottom';\n\t\tconst padding = 12;\n\n\t\tif (placement === 'bottom') {\n\t\t\tpopoverTop = targetRect.bottom + padding;\n\t\t\tpopoverLeft = targetRect.left;\n\t\t} else if (placement === 'top') {\n\t\t\tpopoverTop = targetRect.top - 180 - padding;\n\t\t\tpopoverLeft = targetRect.left;\n\t\t} else if (placement === 'left') {\n\t\t\tpopoverTop = targetRect.top;\n\t\t\tpopoverLeft = targetRect.left - 320 - padding;\n\t\t} else if (placement === 'right') {\n\t\t\tpopoverTop = targetRect.top;\n\t\t\tpopoverLeft = targetRect.right + padding;\n\t\t}\n\n\t\t// 视口防溢出修正\n\t\tpopoverLeft = Math.max(16, Math.min(window.innerWidth - 340, popoverLeft));\n\t\tpopoverTop = Math.max(16, Math.min(window.innerHeight - 200, popoverTop));\n\t}\n\n\treturn ReactDOM.createPortal(\n\t\t<div className={`rpc_guided_tour ${className}`} style={style}>\n\t\t\t{/* 镂空高亮遮罩层 */}\n\t\t\t{targetRect && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"rpc_guided_tour_highlight_box\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tleft: `${targetRect.left - 4}px`,\n\t\t\t\t\t\ttop: `${targetRect.top - 4}px`,\n\t\t\t\t\t\twidth: `${targetRect.width + 8}px`,\n\t\t\t\t\t\theight: `${targetRect.height + 8}px`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{/* 引导卡片 */}\n\t\t\t<div\n\t\t\t\tclassName=\"rpc_guided_tour_popover\"\n\t\t\t\tstyle={{\n\t\t\t\t\tleft: `${popoverLeft}px`,\n\t\t\t\t\ttop: `${popoverTop}px`,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div className=\"rpc_guided_tour_header\">\n\t\t\t\t\t<span className=\"rpc_guided_tour_title\">{currentStep.title}</span>\n\t\t\t\t\t<CloseOutlined style={{ cursor: 'pointer', color: '#8c8c8c' }} onClick={handleSkip} />\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"rpc_guided_tour_description\">{currentStep.description}</div>\n\n\t\t\t\t<div className=\"rpc_guided_tour_footer\">\n\t\t\t\t\t<span className=\"rpc_guided_tour_progress\">\n\t\t\t\t\t\t{currentStepIndex + 1} / {steps.length}\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<div className=\"rpc_guided_tour_actions\">\n\t\t\t\t\t\t{currentStepIndex > 0 && (\n\t\t\t\t\t\t\t<button type=\"button\" className=\"rpc_guided_tour_btn\" onClick={handlePrev}>\n\t\t\t\t\t\t\t\t上一步\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t)}\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_guided_tour_btn rpc_guided_tour_btn_primary\"\n\t\t\t\t\t\t\tonClick={handleNext}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{currentStepIndex === steps.length - 1 ? '完成' : '下一步'}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>,\n\t\tdocument.body,\n\t);\n};\n\nexport default GuidedTour;\n"]}
@@ -56,18 +56,10 @@ function PeriodSelect({
56
56
  showActiveLine ? "rpc_period_select_item_has_active_line" : "",
57
57
  isItemDisabled ? "rpc_period_select_item_disabled" : ""
58
58
  ].filter(Boolean).join(" ");
59
- return /* @__PURE__ */ jsxs(
60
- "div",
61
- {
62
- className: itemClass,
63
- onClick: () => handleSelect(item),
64
- children: [
65
- showActiveLine && /* @__PURE__ */ jsx("span", { className: "rpc_period_select_active_line" }),
66
- /* @__PURE__ */ jsx("span", { className: "rpc_period_select_text", children: item.label })
67
- ]
68
- },
69
- String(item.value)
70
- );
59
+ return /* @__PURE__ */ jsxs("div", { className: itemClass, onClick: () => handleSelect(item), children: [
60
+ showActiveLine && /* @__PURE__ */ jsx("span", { className: "rpc_period_select_active_line" }),
61
+ /* @__PURE__ */ jsx("span", { className: "rpc_period_select_text", children: item.label })
62
+ ] }, String(item.value));
71
63
  })
72
64
  }
73
65
  );
@@ -75,5 +67,5 @@ function PeriodSelect({
75
67
  var PeriodSelect_default = PeriodSelect;
76
68
 
77
69
  export { DEFAULT_PERIOD_OPTIONS, PeriodSelect, PeriodSelect_default };
78
- //# sourceMappingURL=chunk-RFTYEXKU.js.map
79
- //# sourceMappingURL=chunk-RFTYEXKU.js.map
70
+ //# sourceMappingURL=chunk-EMQHYD3G.js.map
71
+ //# sourceMappingURL=chunk-EMQHYD3G.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../PeriodSelect/index.tsx"],"names":[],"mappings":"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","file":"chunk-EMQHYD3G.js","sourcesContent":["import React, { useState, CSSProperties, ReactNode } from 'react';\nimport './index.less';\n\nexport interface PeriodSelectOption<T = string | number> {\n\t/** 选项展示内容 */\n\tlabel: ReactNode;\n\t/** 选项值 */\n\tvalue: T;\n\t/** 是否禁用当前选项 */\n\tdisabled?: boolean;\n}\n\nexport type PeriodSelectSize = 'small' | 'middle' | 'large';\n\nexport interface PeriodSelectProps<T = string | number> {\n\t/** 选项列表,默认提供【周度、月度、季度、年度】 */\n\toptions?: PeriodSelectOption<T>[];\n\t/** 当前选中值(受控模式) */\n\tvalue?: T;\n\t/** 默认选中值(非受控模式) */\n\tdefaultValue?: T;\n\t/** 切换选项时的回调函数 */\n\tonChange?: (value: T, option: PeriodSelectOption<T>) => void;\n\t/** 尺寸大小,默认为 'middle' */\n\tsize?: PeriodSelectSize;\n\t/** 自定义高亮激活颜色(文字与高亮竖线) */\n\tactiveColor?: string;\n\t/** 是否整体禁用 */\n\tdisabled?: boolean;\n\t/** 是否等宽撑满父容器 */\n\tblock?: boolean;\n\t/** 自定义容器类名 */\n\tclassName?: string;\n\t/** 自定义容器样式 */\n\tstyle?: CSSProperties;\n}\n\n// 默认内置的周期选项(精准匹配周度、月度、季度、年度)\nexport const DEFAULT_PERIOD_OPTIONS: PeriodSelectOption<string>[] = [\n\t{ label: '周度', value: 'week' },\n\t{ label: '月度', value: 'month' },\n\t{ label: '季度', value: 'quarter' },\n\t{ label: '年度', value: 'year' },\n];\n\nexport function PeriodSelect<T = string | number>({\n\toptions = DEFAULT_PERIOD_OPTIONS as unknown as PeriodSelectOption<T>[],\n\tvalue: controlledValue,\n\tdefaultValue,\n\tonChange,\n\tsize = 'middle',\n\tactiveColor,\n\tdisabled = false,\n\tblock = false,\n\tclassName = '',\n\tstyle,\n}: PeriodSelectProps<T>) {\n\tconst initialValue = defaultValue !== undefined ? defaultValue : (options[0]?.value as T);\n\tconst [internalValue, setInternalValue] = useState<T>(initialValue);\n\n\tconst currentValue = controlledValue !== undefined ? controlledValue : internalValue;\n\n\tconst handleSelect = (item: PeriodSelectOption<T>) => {\n\t\tif (disabled || item.disabled) return;\n\t\tif (controlledValue === undefined) {\n\t\t\tsetInternalValue(item.value);\n\t\t}\n\t\tonChange?.(item.value, item);\n\t};\n\n\tconst containerClass = [\n\t\t'rpc_period_select',\n\t\t`rpc_period_select_${size}`,\n\t\tdisabled ? 'rpc_period_select_disabled' : '',\n\t\tblock ? 'rpc_period_select_block' : '',\n\t\tclassName,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\treturn (\n\t\t<div\n\t\t\tclassName={containerClass}\n\t\t\tstyle={\n\t\t\t\t{\n\t\t\t\t\t...style,\n\t\t\t\t\t...(activeColor ? { '--rpc-period-active-color': activeColor } : {}),\n\t\t\t\t} as CSSProperties\n\t\t\t}\n\t\t>\n\t\t\t{options.map((item, index) => {\n\t\t\t\tconst isActive = currentValue === item.value;\n\t\t\t\tconst isItemDisabled = disabled || Boolean(item.disabled);\n\n\t\t\t\t// 判断是否需要在当前选项左侧展示蓝色高亮竖线\n\t\t\t\t// 精确还原截图:当激活项不是第一项时,其左侧显示一条与主题色一致的竖线\n\t\t\t\tconst showActiveLine = isActive && index > 0;\n\n\t\t\t\tconst itemClass = [\n\t\t\t\t\t'rpc_period_select_item',\n\t\t\t\t\tisActive ? 'rpc_period_select_item_active' : '',\n\t\t\t\t\tshowActiveLine ? 'rpc_period_select_item_has_active_line' : '',\n\t\t\t\t\tisItemDisabled ? 'rpc_period_select_item_disabled' : '',\n\t\t\t\t]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(' ');\n\n\t\t\t\treturn (\n\t\t\t\t\t<div key={String(item.value)} className={itemClass} onClick={() => handleSelect(item)}>\n\t\t\t\t\t\t{showActiveLine && <span className=\"rpc_period_select_active_line\" />}\n\t\t\t\t\t\t<span className=\"rpc_period_select_text\">{item.label}</span>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n\nexport default PeriodSelect;\n"]}
@@ -1,4 +1,4 @@
1
- import { CloseOutlined } from './chunk-2IDVNTKR.js';
1
+ import { CloseOutlined } from './chunk-537T6BR3.js';
2
2
  import { useState } from 'react';
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
 
@@ -67,7 +67,13 @@ var AnnouncementBar = ({
67
67
  ...style
68
68
  },
69
69
  children: [
70
- /* @__PURE__ */ jsx("div", { className: "rpc_announcement_bar_body", children: /* @__PURE__ */ jsx("div", { className: `rpc_announcement_bar_content ${marquee ? "rpc_announcement_bar_marquee" : ""}`, children }) }),
70
+ /* @__PURE__ */ jsx("div", { className: "rpc_announcement_bar_body", children: /* @__PURE__ */ jsx(
71
+ "div",
72
+ {
73
+ className: `rpc_announcement_bar_content ${marquee ? "rpc_announcement_bar_marquee" : ""}`,
74
+ children
75
+ }
76
+ ) }),
71
77
  closable && /* @__PURE__ */ jsx(
72
78
  "button",
73
79
  {
@@ -85,5 +91,5 @@ var AnnouncementBar = ({
85
91
  var AnnouncementBar_default = AnnouncementBar;
86
92
 
87
93
  export { AnnouncementBar_default };
88
- //# sourceMappingURL=chunk-O4EABET3.js.map
89
- //# sourceMappingURL=chunk-O4EABET3.js.map
94
+ //# sourceMappingURL=chunk-ERPKXNWM.js.map
95
+ //# sourceMappingURL=chunk-ERPKXNWM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../AnnouncementBar/index.tsx"],"names":[],"mappings":";;;;AAuCA,IAAM,kBAAkD,CAAC;AAAA,EACxD,QAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,UAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA,GAAS,KAAA;AAAA,EACT,KAAA,GAAQ,KAAA;AAAA,EACR,GAAA,GAAM,CAAA;AAAA,EACN,MAAA,GAAS,GAAA;AAAA,EACT,QAAA,GAAW,IAAA;AAAA,EACX,SAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,OAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ;AACD,CAAA,KAAM;AACL,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAkB,MAAM;AACrD,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,UAAA,EAAY;AAChD,MAAA,IAAI;AACH,QAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,CAAA,iBAAA,EAAoB,UAAU,EAAE,CAAA,KAAM,QAAA;AAAA,MACnE,CAAA,CAAA,OAAQ,CAAA,EAAA;AACP,QAAA,OAAO,IAAA;AAAA,MACR;AAAA,IACD;AACA,IAAA,OAAO,IAAA;AAAA,EACR,CAAC,CAAA;AAED,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAkB,KAAK,CAAA;AAEzD,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,EAAA,MAAM,cAAc,MAAM;AACzB,IAAA,YAAA,CAAa,IAAI,CAAA;AAEjB,IAAA,IAAI,UAAA,IAAc,OAAO,MAAA,KAAW,WAAA,EAAa;AAChD,MAAA,IAAI;AACH,QAAA,YAAA,CAAa,OAAA,CAAQ,CAAA,iBAAA,EAAoB,UAAU,CAAA,CAAA,EAAI,QAAQ,CAAA;AAAA,MAChE,CAAA,CAAA,OAAQ,CAAA,EAAA;AAAA,MAER;AAAA,IACD;AAEA,IAAA,UAAA,CAAW,MAAM;AAChB,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,EAAA;AAAA,IACD,GAAG,GAAG,CAAA;AAAA,EACP,CAAA;AAEA,EAAA,MAAM,gBAA+B,EAAC;AACtC,EAAA,IAAI,KAAA,EAAO;AACV,IAAA,aAAA,CAAc,QAAA,GAAW,OAAA;AACzB,IAAA,aAAA,CAAc,GAAA,GAAM,GAAA;AACpB,IAAA,aAAA,CAAc,IAAA,GAAO,CAAA;AACrB,IAAA,aAAA,CAAc,KAAA,GAAQ,CAAA;AACtB,IAAA,aAAA,CAAc,MAAA,GAAS,MAAA;AAAA,EACxB,WAAW,MAAA,EAAQ;AAClB,IAAA,aAAA,CAAc,QAAA,GAAW,QAAA;AACzB,IAAA,aAAA,CAAc,GAAA,GAAM,GAAA;AACpB,IAAA,aAAA,CAAc,MAAA,GAAS,MAAA;AAAA,EACxB;AAEA,EAAA,uBACC,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,WAAW,CAAA,0CAAA,EAA6C,IAAI,CAAA,CAAA,EAC3D,MAAA,GAAS,gCAAgC,EAC1C,CAAA,CAAA,EAAI,KAAA,GAAQ,4BAAA,GAA+B,EAAE,CAAA,CAAA,EAC5C,SAAA,GAAY,8BAAA,GAAiC,EAC9C,IAAI,SAAS,CAAA,CAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACN,YAAY,UAAA,IAAc,MAAA;AAAA,QAC1B,OAAO,KAAA,IAAS,MAAA;AAAA,QAChB,GAAG,aAAA;AAAA,QACH,GAAG;AAAA,OACJ;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2BAAA,EACd,QAAA,kBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,SAAA,EAAW,CAAA,6BAAA,EAAgC,OAAA,GAAU,8BAAA,GAAiC,EAAE,CAAA,CAAA;AAAA,YAEvF;AAAA;AAAA,SACF,EACD,CAAA;AAAA,QAEC,QAAA,oBACA,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAU,4BAAA;AAAA,YACV,OAAA,EAAS,WAAA;AAAA,YACT,KAAA,EAAM,0BAAA;AAAA,YAEL,uCAAa,GAAA,CAAC,aAAA,EAAA,EAAc,OAAO,EAAE,QAAA,EAAU,IAAG,EAAG;AAAA;AAAA;AACvD;AAAA;AAAA,GAEF;AAEF,CAAA;AAEA,IAAO,uBAAA,GAAQ","file":"chunk-ERPKXNWM.js","sourcesContent":["import React, { useState, useEffect, ReactNode, CSSProperties } from 'react';\nimport { CloseOutlined } from '../src/icons';\nimport './index.less';\n\nexport type AnnouncementType = 'primary' | 'warning' | 'success' | 'danger' | 'purple';\n\nexport interface AnnouncementBarProps {\n\t/** 横幅广播内容 */\n\tchildren: ReactNode;\n\t/** 预设主题色系:'primary' | 'warning' | 'success' | 'danger' | 'purple' */\n\ttype?: AnnouncementType;\n\t/** 自定义渐变或背景样式(传值时覆盖 type 预设) */\n\tbackground?: string;\n\t/** 自定义文字颜色 */\n\tcolor?: string;\n\t/** 是否开启智能吸顶 (position: sticky),默认为 false */\n\tsticky?: boolean;\n\t/** 是否开启固定吸顶 (position: fixed),默认为 false */\n\tfixed?: boolean;\n\t/** 吸顶时距离顶部的距离偏移(像素或 CSS 字符串),默认为 0 */\n\ttop?: number | string;\n\t/** 图层层级 z-index,默认为 1000 */\n\tzIndex?: number;\n\t/** 是否支持点击关闭,默认为 true */\n\tclosable?: boolean;\n\t/** 自定义关闭图标 */\n\tcloseIcon?: ReactNode;\n\t/** LocalStorage 记忆 Key(若传入则关闭后自动持久化记忆,不再重复弹出) */\n\tstorageKey?: string;\n\t/** 内容过长时是否开启跑马灯无缝水平滚动,默认为 false */\n\tmarquee?: boolean;\n\t/** 关闭时的回调函数 */\n\tonClose?: () => void;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst AnnouncementBar: React.FC<AnnouncementBarProps> = ({\n\tchildren,\n\ttype = 'primary',\n\tbackground,\n\tcolor,\n\tsticky = false,\n\tfixed = false,\n\ttop = 0,\n\tzIndex = 1000,\n\tclosable = true,\n\tcloseIcon,\n\tstorageKey,\n\tmarquee = false,\n\tonClose,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [visible, setVisible] = useState<boolean>(() => {\n\t\tif (typeof window !== 'undefined' && storageKey) {\n\t\t\ttry {\n\t\t\t\treturn localStorage.getItem(`rpc_announcement_${storageKey}`) !== 'closed';\n\t\t\t} catch {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t});\n\n\tconst [isClosing, setIsClosing] = useState<boolean>(false);\n\n\tif (!visible) return null;\n\n\tconst handleClose = () => {\n\t\tsetIsClosing(true);\n\n\t\tif (storageKey && typeof window !== 'undefined') {\n\t\t\ttry {\n\t\t\t\tlocalStorage.setItem(`rpc_announcement_${storageKey}`, 'closed');\n\t\t\t} catch {\n\t\t\t\t// ignore\n\t\t\t}\n\t\t}\n\n\t\tsetTimeout(() => {\n\t\t\tsetVisible(false);\n\t\t\tonClose?.();\n\t\t}, 250);\n\t};\n\n\tconst positionStyle: CSSProperties = {};\n\tif (fixed) {\n\t\tpositionStyle.position = 'fixed';\n\t\tpositionStyle.top = top;\n\t\tpositionStyle.left = 0;\n\t\tpositionStyle.right = 0;\n\t\tpositionStyle.zIndex = zIndex;\n\t} else if (sticky) {\n\t\tpositionStyle.position = 'sticky';\n\t\tpositionStyle.top = top;\n\t\tpositionStyle.zIndex = zIndex;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`rpc_announcement_bar rpc_announcement_bar_${type} ${\n\t\t\t\tsticky ? 'rpc_announcement_bar_sticky' : ''\n\t\t\t} ${fixed ? 'rpc_announcement_bar_fixed' : ''} ${\n\t\t\t\tisClosing ? 'rpc_announcement_bar_closing' : ''\n\t\t\t} ${className}`}\n\t\t\tstyle={{\n\t\t\t\tbackground: background || undefined,\n\t\t\t\tcolor: color || undefined,\n\t\t\t\t...positionStyle,\n\t\t\t\t...style,\n\t\t\t}}\n\t\t>\n\t\t\t<div className=\"rpc_announcement_bar_body\">\n\t\t\t\t<div\n\t\t\t\t\tclassName={`rpc_announcement_bar_content ${marquee ? 'rpc_announcement_bar_marquee' : ''}`}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{closable && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"rpc_announcement_bar_close\"\n\t\t\t\t\tonClick={handleClose}\n\t\t\t\t\ttitle=\"关闭通知\"\n\t\t\t\t>\n\t\t\t\t\t{closeIcon || <CloseOutlined style={{ fontSize: 13 }} />}\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default AnnouncementBar;\n"]}
@@ -1,4 +1,4 @@
1
- import { ZoomInOutlined, ZoomOutOutlined, RotateRightOutlined, CloseOutlined, CheckOutlined } from './chunk-2IDVNTKR.js';
1
+ import { ZoomInOutlined, ZoomOutOutlined, RotateRightOutlined, CloseOutlined, CheckOutlined } from './chunk-537T6BR3.js';
2
2
  import { forwardRef, useRef, useState, useEffect, useCallback, useImperativeHandle } from 'react';
3
3
  import ReactDOM from 'react-dom';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -311,5 +311,5 @@ ImageCropper.displayName = "ImageCropper";
311
311
  var ImageCropper_default = ImageCropper;
312
312
 
313
313
  export { ImageCropper_default };
314
- //# sourceMappingURL=chunk-QRZ2GVVJ.js.map
315
- //# sourceMappingURL=chunk-QRZ2GVVJ.js.map
314
+ //# sourceMappingURL=chunk-FJ33L5D7.js.map
315
+ //# sourceMappingURL=chunk-FJ33L5D7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../ImageCropper/index.tsx"],"names":["cropBox"],"mappings":"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","file":"chunk-QRZ2GVVJ.js","sourcesContent":["import React, {\n\tuseState,\n\tuseRef,\n\tuseEffect,\n\tuseCallback,\n\tuseImperativeHandle,\n\tforwardRef,\n\tReactNode,\n\tCSSProperties,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n\tRotateRightOutlined,\n\tZoomInOutlined,\n\tZoomOutOutlined,\n\tCloseOutlined,\n\tCheckOutlined,\n} from '../src/icons';\nimport './index.less';\n\nexport type CropShape = 'rect' | 'round';\n\nexport interface CropResult {\n\tdataURL: string;\n\tblob: Blob | null;\n\twidth: number;\n\theight: number;\n}\n\nexport interface ImageCropperRef {\n\t/** 获取当前裁剪结果(DataURL 与 Blob) */\n\tgetCroppedResult: (type?: string, quality?: number) => Promise<CropResult>;\n\t/** 顺时针旋转 90 度 */\n\trotate: (degree?: number) => void;\n\t/** 缩放图片 */\n\tzoom: (delta: number) => void;\n\t/** 重置所有变换参数 */\n\treset: () => void;\n}\n\nexport interface ImageCropperProps {\n\t/** 图片源地址或 Base64 字符串 */\n\tsrc: string;\n\t/** 裁剪框宽高比(如 1 代表 1:1 正方形,16/9 代表宽屏,0 代表自由矩形),默认为 1 */\n\taspectRatio?: number;\n\t/** 裁剪框形状:'rect' 矩形,'round' 圆形(适合头像),默认为 'rect' */\n\tshape?: CropShape;\n\t/** 是否以 Modal 模态弹窗形式展示,默认为 false */\n\tmodal?: boolean;\n\t/** Modal 模式下的标题,默认为 '图片裁剪' */\n\ttitle?: ReactNode;\n\t/** Modal 模式下的显隐受控状态 */\n\topen?: boolean;\n\t/** 确认裁剪回调 */\n\tonOk?: (result: CropResult) => void;\n\t/** 取消/关闭回调 */\n\tonCancel?: () => void;\n\t/** 容器高度(内联模式有效),默认为 360 */\n\theight?: number;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst ImageCropper = forwardRef<ImageCropperRef, ImageCropperProps>(\n\t(\n\t\t{\n\t\t\tsrc,\n\t\t\taspectRatio = 1,\n\t\t\tshape = 'rect',\n\t\t\tmodal = false,\n\t\t\ttitle = '图片裁剪',\n\t\t\topen = true,\n\t\t\tonOk,\n\t\t\tonCancel,\n\t\t\theight = 360,\n\t\t\tclassName = '',\n\t\t\tstyle,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst canvasRef = useRef<HTMLCanvasElement>(null);\n\t\tconst containerRef = useRef<HTMLDivElement>(null);\n\t\tconst imgRef = useRef<HTMLImageElement | null>(null);\n\n\t\t// 图片变换参数\n\t\tconst [scale, setScale] = useState<number>(1);\n\t\tconst [rotateDeg, setRotateDeg] = useState<number>(0);\n\t\tconst [offset, setOffset] = useState<{ x: number; y: number }>({ x: 0, y: 0 });\n\t\tconst isDraggingRef = useRef<boolean>(false);\n\t\tconst dragStartRef = useRef<{ x: number; y: number }>({ x: 0, y: 0 });\n\n\t\t// 加载图片\n\t\tuseEffect(() => {\n\t\t\tif (!src) return;\n\t\t\tconst img = new Image();\n\t\t\timg.crossOrigin = 'anonymous';\n\t\t\timg.src = src;\n\t\t\timg.onload = () => {\n\t\t\t\timgRef.current = img;\n\t\t\t\t// 初始计算合适缩放比例\n\t\t\t\tsetScale(1);\n\t\t\t\tsetRotateDeg(0);\n\t\t\t\tsetOffset({ x: 0, y: 0 });\n\t\t\t\trenderCanvas(1, 0, { x: 0, y: 0 });\n\t\t\t};\n\t\t}, [src]);\n\n\t\t// 重新渲染 Canvas\n\t\tconst renderCanvas = useCallback(\n\t\t\t(curScale: number, curDeg: number, curOffset: { x: number; y: number }) => {\n\t\t\t\tconst canvas = canvasRef.current;\n\t\t\t\tconst img = imgRef.current;\n\t\t\t\tif (!canvas || !img) return;\n\n\t\t\t\tconst ctx = canvas.getContext('2d');\n\t\t\t\tif (!ctx) return;\n\n\t\t\t\tconst dpr = window.devicePixelRatio || 1;\n\t\t\t\tconst width = canvas.clientWidth || 400;\n\t\t\t\tconst canvasHeight = canvas.clientHeight || height;\n\n\t\t\t\tcanvas.width = width * dpr;\n\t\t\t\tcanvas.height = canvasHeight * dpr;\n\t\t\t\tctx.scale(dpr, dpr);\n\n\t\t\t\tctx.clearRect(0, 0, width, canvasHeight);\n\t\t\t\tctx.save();\n\n\t\t\t\t// 移动到中心点进行旋转、缩放与平移\n\t\t\t\tconst centerX = width / 2 + curOffset.x;\n\t\t\t\tconst centerY = canvasHeight / 2 + curOffset.y;\n\n\t\t\t\tctx.translate(centerX, centerY);\n\t\t\t\tctx.rotate((curDeg * Math.PI) / 180);\n\t\t\t\tctx.scale(curScale, curScale);\n\n\t\t\t\t// 居中绘制原始图像\n\t\t\t\tconst imgWidth = img.naturalWidth || img.width;\n\t\t\t\tconst imgHeight = img.naturalHeight || img.height;\n\n\t\t\t\t// 保持图像按比例自适应居中\n\t\t\t\tconst baseRatio = Math.min((width * 0.8) / imgWidth, (canvasHeight * 0.8) / imgHeight, 1);\n\t\t\t\tconst renderW = imgWidth * baseRatio;\n\t\t\t\tconst renderH = imgHeight * baseRatio;\n\n\t\t\t\tctx.drawImage(img, -renderW / 2, -renderH / 2, renderW, renderH);\n\t\t\t\tctx.restore();\n\t\t\t},\n\t\t\t[height],\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\trenderCanvas(scale, rotateDeg, offset);\n\t\t}, [scale, rotateDeg, offset, renderCanvas]);\n\n\t\t// 鼠标拖拽平移\n\t\tconst handleMouseDown = (e: React.MouseEvent) => {\n\t\t\tisDraggingRef.current = true;\n\t\t\tdragStartRef.current = { x: e.clientX - offset.x, y: e.clientY - offset.y };\n\t\t};\n\n\t\tconst handleMouseMove = (e: React.MouseEvent) => {\n\t\t\tif (!isDraggingRef.current) return;\n\t\t\tconst nextOffset = {\n\t\t\t\tx: e.clientX - dragStartRef.current.x,\n\t\t\t\ty: e.clientY - dragStartRef.current.y,\n\t\t\t};\n\t\t\tsetOffset(nextOffset);\n\t\t};\n\n\t\tconst handleMouseUp = () => {\n\t\t\tisDraggingRef.current = false;\n\t\t};\n\n\t\t// 滚轮缩放\n\t\tconst handleWheel = (e: React.WheelEvent) => {\n\t\t\te.preventDefault();\n\t\t\tconst zoomStep = e.deltaY < 0 ? 0.1 : -0.1;\n\t\t\tsetScale((prev) => Math.min(Math.max(0.2, prev + zoomStep), 5));\n\t\t};\n\n\t\t// 顺时针旋转\n\t\tconst handleRotate = (deg = 90) => {\n\t\t\tsetRotateDeg((prev) => (prev + deg) % 360);\n\t\t};\n\n\t\tconst handleZoom = (delta: number) => {\n\t\t\tsetScale((prev) => Math.min(Math.max(0.2, prev + delta), 5));\n\t\t};\n\n\t\tconst handleReset = () => {\n\t\t\tsetScale(1);\n\t\t\tsetRotateDeg(0);\n\t\t\tsetOffset({ x: 0, y: 0 });\n\t\t};\n\n\t\t// 计算裁剪框尺寸与位置\n\t\tconst getCropBoxRect = () => {\n\t\t\tconst container = containerRef.current;\n\t\t\tconst containerW = container?.clientWidth || 400;\n\t\t\tconst containerH = height;\n\n\t\t\tlet boxW = Math.min(containerW * 0.7, 240);\n\t\t\tlet boxH = aspectRatio ? boxW / aspectRatio : boxW;\n\n\t\t\tif (boxH > containerH * 0.8) {\n\t\t\t\tboxH = containerH * 0.8;\n\t\t\t\tboxW = aspectRatio ? boxH * aspectRatio : boxH;\n\t\t\t}\n\n\t\t\tconst boxLeft = (containerW - boxW) / 2;\n\t\t\tconst boxTop = (containerH - boxH) / 2;\n\n\t\t\treturn { left: boxLeft, top: boxTop, width: boxW, height: boxH };\n\t\t};\n\n\t\t// 提取裁剪区域生成图片\n\t\tconst getCroppedResult = useCallback(\n\t\t\tasync (type = 'image/png', quality = 0.92): Promise<CropResult> => {\n\t\t\t\tconst canvas = canvasRef.current;\n\t\t\t\tif (!canvas) throw new Error('Canvas not found');\n\n\t\t\t\tconst cropBox = getCropBoxRect();\n\t\t\t\tconst dpr = window.devicePixelRatio || 1;\n\n\t\t\t\tconst cropCanvas = document.createElement('canvas');\n\t\t\t\tcropCanvas.width = cropBox.width * dpr;\n\t\t\t\tcropCanvas.height = cropBox.height * dpr;\n\t\t\t\tconst cropCtx = cropCanvas.getContext('2d');\n\n\t\t\t\tif (!cropCtx) throw new Error('Failed to create canvas context');\n\n\t\t\t\tif (shape === 'round') {\n\t\t\t\t\tcropCtx.beginPath();\n\t\t\t\t\tcropCtx.arc(\n\t\t\t\t\t\t(cropBox.width * dpr) / 2,\n\t\t\t\t\t\t(cropBox.height * dpr) / 2,\n\t\t\t\t\t\t(cropBox.width * dpr) / 2,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tMath.PI * 2,\n\t\t\t\t\t);\n\t\t\t\t\tcropCtx.closePath();\n\t\t\t\t\tcropCtx.clip();\n\t\t\t\t}\n\n\t\t\t\tcropCtx.drawImage(\n\t\t\t\t\tcanvas,\n\t\t\t\t\tcropBox.left * dpr,\n\t\t\t\t\tcropBox.top * dpr,\n\t\t\t\t\tcropBox.width * dpr,\n\t\t\t\t\tcropBox.height * dpr,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tcropBox.width * dpr,\n\t\t\t\t\tcropBox.height * dpr,\n\t\t\t\t);\n\n\t\t\t\tconst dataURL = cropCanvas.toDataURL(type, quality);\n\t\t\t\tconst blob: Blob | null = await new Promise((resolve) => {\n\t\t\t\t\tcropCanvas.toBlob((b) => resolve(b), type, quality);\n\t\t\t\t});\n\n\t\t\t\treturn {\n\t\t\t\t\tdataURL,\n\t\t\t\t\tblob,\n\t\t\t\t\twidth: Math.round(cropBox.width),\n\t\t\t\t\theight: Math.round(cropBox.height),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[shape, aspectRatio, height],\n\t\t);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tgetCroppedResult,\n\t\t\t\trotate: handleRotate,\n\t\t\t\tzoom: handleZoom,\n\t\t\t\treset: handleReset,\n\t\t\t}),\n\t\t\t[getCroppedResult],\n\t\t);\n\n\t\tconst handleConfirm = async () => {\n\t\t\tconst res = await getCroppedResult();\n\t\t\tonOk?.(res);\n\t\t};\n\n\t\tconst cropBox = getCropBoxRect();\n\n\t\tconst coreContent = (\n\t\t\t<div className={`rpc_image_cropper ${className}`} style={{ ...style }}>\n\t\t\t\t<div\n\t\t\t\t\tref={containerRef}\n\t\t\t\t\tclassName=\"rpc_image_cropper_canvas_wrap\"\n\t\t\t\t\tstyle={{ height }}\n\t\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\t\tonMouseMove={handleMouseMove}\n\t\t\t\t\tonMouseUp={handleMouseUp}\n\t\t\t\t\tonMouseLeave={handleMouseUp}\n\t\t\t\t\tonWheel={handleWheel}\n\t\t\t\t>\n\t\t\t\t\t<canvas\n\t\t\t\t\t\tref={canvasRef}\n\t\t\t\t\t\tclassName=\"rpc_image_cropper_canvas\"\n\t\t\t\t\t\tstyle={{ width: '100%', height }}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{/* 裁剪框与遮罩 */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={`rpc_image_cropper_crop_box ${\n\t\t\t\t\t\t\tshape === 'round' ? 'rpc_image_cropper_crop_box_round' : ''\n\t\t\t\t\t\t}`}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: `${cropBox.left}px`,\n\t\t\t\t\t\t\ttop: `${cropBox.top}px`,\n\t\t\t\t\t\t\twidth: `${cropBox.width}px`,\n\t\t\t\t\t\t\theight: `${cropBox.height}px`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{shape === 'rect' && <div className=\"rpc_image_cropper_crop_box_grid\" />}\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_image_cropper_toolbar\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn\"\n\t\t\t\t\t\tonClick={() => handleZoom(0.1)}\n\t\t\t\t\t\ttitle=\"放大\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ZoomInOutlined /> 放大\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn\"\n\t\t\t\t\t\tonClick={() => handleZoom(-0.1)}\n\t\t\t\t\t\ttitle=\"缩小\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ZoomOutOutlined /> 缩小\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn\"\n\t\t\t\t\t\tonClick={() => handleRotate(90)}\n\t\t\t\t\t\ttitle=\"顺时针旋转90°\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<RotateRightOutlined /> 旋转\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn\"\n\t\t\t\t\t\tonClick={handleReset}\n\t\t\t\t\t\ttitle=\"重置\"\n\t\t\t\t\t>\n\t\t\t\t\t\t重置\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\n\t\tif (modal) {\n\t\t\tif (!open) return null;\n\t\t\treturn ReactDOM.createPortal(\n\t\t\t\t<div className=\"rpc_cropper_modal\" onClick={onCancel}>\n\t\t\t\t\t<div className=\"rpc_cropper_modal_card\" onClick={(e) => e.stopPropagation()}>\n\t\t\t\t\t\t<div className=\"rpc_cropper_modal_header\">\n\t\t\t\t\t\t\t<span>{title}</span>\n\t\t\t\t\t\t\t<CloseOutlined className=\"rpc_cropper_modal_close\" onClick={onCancel} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div style={{ padding: 16, background: '#141414' }}>{coreContent}</div>\n\t\t\t\t\t\t<div className=\"rpc_cropper_modal_footer\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn\"\n\t\t\t\t\t\t\t\tstyle={{ background: '#ffffff', color: '#262626', borderColor: '#d9d9d9' }}\n\t\t\t\t\t\t\t\tonClick={onCancel}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t取消\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn rpc_image_cropper_btn_primary\"\n\t\t\t\t\t\t\t\tonClick={handleConfirm}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<CheckOutlined /> 确定裁剪\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>,\n\t\t\t\tdocument.body,\n\t\t\t);\n\t\t}\n\n\t\treturn coreContent;\n\t},\n);\n\nImageCropper.displayName = 'ImageCropper';\n\nexport default ImageCropper;\n"]}
1
+ {"version":3,"sources":["../ImageCropper/index.tsx"],"names":["cropBox"],"mappings":"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","file":"chunk-FJ33L5D7.js","sourcesContent":["import React, {\n\tuseState,\n\tuseRef,\n\tuseEffect,\n\tuseCallback,\n\tuseImperativeHandle,\n\tforwardRef,\n\tReactNode,\n\tCSSProperties,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n\tRotateRightOutlined,\n\tZoomInOutlined,\n\tZoomOutOutlined,\n\tCloseOutlined,\n\tCheckOutlined,\n} from '../src/icons';\nimport './index.less';\n\nexport type CropShape = 'rect' | 'round';\n\nexport interface CropResult {\n\tdataURL: string;\n\tblob: Blob | null;\n\twidth: number;\n\theight: number;\n}\n\nexport interface ImageCropperRef {\n\t/** 获取当前裁剪结果(DataURL 与 Blob) */\n\tgetCroppedResult: (type?: string, quality?: number) => Promise<CropResult>;\n\t/** 顺时针旋转 90 度 */\n\trotate: (degree?: number) => void;\n\t/** 缩放图片 */\n\tzoom: (delta: number) => void;\n\t/** 重置所有变换参数 */\n\treset: () => void;\n}\n\nexport interface ImageCropperProps {\n\t/** 图片源地址或 Base64 字符串 */\n\tsrc: string;\n\t/** 裁剪框宽高比(如 1 代表 1:1 正方形,16/9 代表宽屏,0 代表自由矩形),默认为 1 */\n\taspectRatio?: number;\n\t/** 裁剪框形状:'rect' 矩形,'round' 圆形(适合头像),默认为 'rect' */\n\tshape?: CropShape;\n\t/** 是否以 Modal 模态弹窗形式展示,默认为 false */\n\tmodal?: boolean;\n\t/** Modal 模式下的标题,默认为 '图片裁剪' */\n\ttitle?: ReactNode;\n\t/** Modal 模式下的显隐受控状态 */\n\topen?: boolean;\n\t/** 确认裁剪回调 */\n\tonOk?: (result: CropResult) => void;\n\t/** 取消/关闭回调 */\n\tonCancel?: () => void;\n\t/** 容器高度(内联模式有效),默认为 360 */\n\theight?: number;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst ImageCropper = forwardRef<ImageCropperRef, ImageCropperProps>(\n\t(\n\t\t{\n\t\t\tsrc,\n\t\t\taspectRatio = 1,\n\t\t\tshape = 'rect',\n\t\t\tmodal = false,\n\t\t\ttitle = '图片裁剪',\n\t\t\topen = true,\n\t\t\tonOk,\n\t\t\tonCancel,\n\t\t\theight = 360,\n\t\t\tclassName = '',\n\t\t\tstyle,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst canvasRef = useRef<HTMLCanvasElement>(null);\n\t\tconst containerRef = useRef<HTMLDivElement>(null);\n\t\tconst imgRef = useRef<HTMLImageElement | null>(null);\n\n\t\t// 图片变换参数\n\t\tconst [scale, setScale] = useState<number>(1);\n\t\tconst [rotateDeg, setRotateDeg] = useState<number>(0);\n\t\tconst [offset, setOffset] = useState<{ x: number; y: number }>({ x: 0, y: 0 });\n\t\tconst isDraggingRef = useRef<boolean>(false);\n\t\tconst dragStartRef = useRef<{ x: number; y: number }>({ x: 0, y: 0 });\n\n\t\t// 加载图片\n\t\tuseEffect(() => {\n\t\t\tif (!src) return;\n\t\t\tconst img = new Image();\n\t\t\timg.crossOrigin = 'anonymous';\n\t\t\timg.src = src;\n\t\t\timg.onload = () => {\n\t\t\t\timgRef.current = img;\n\t\t\t\t// 初始计算合适缩放比例\n\t\t\t\tsetScale(1);\n\t\t\t\tsetRotateDeg(0);\n\t\t\t\tsetOffset({ x: 0, y: 0 });\n\t\t\t\trenderCanvas(1, 0, { x: 0, y: 0 });\n\t\t\t};\n\t\t}, [src]);\n\n\t\t// 重新渲染 Canvas\n\t\tconst renderCanvas = useCallback(\n\t\t\t(curScale: number, curDeg: number, curOffset: { x: number; y: number }) => {\n\t\t\t\tconst canvas = canvasRef.current;\n\t\t\t\tconst img = imgRef.current;\n\t\t\t\tif (!canvas || !img) return;\n\n\t\t\t\tconst ctx = canvas.getContext('2d');\n\t\t\t\tif (!ctx) return;\n\n\t\t\t\tconst dpr = window.devicePixelRatio || 1;\n\t\t\t\tconst width = canvas.clientWidth || 400;\n\t\t\t\tconst canvasHeight = canvas.clientHeight || height;\n\n\t\t\t\tcanvas.width = width * dpr;\n\t\t\t\tcanvas.height = canvasHeight * dpr;\n\t\t\t\tctx.scale(dpr, dpr);\n\n\t\t\t\tctx.clearRect(0, 0, width, canvasHeight);\n\t\t\t\tctx.save();\n\n\t\t\t\t// 移动到中心点进行旋转、缩放与平移\n\t\t\t\tconst centerX = width / 2 + curOffset.x;\n\t\t\t\tconst centerY = canvasHeight / 2 + curOffset.y;\n\n\t\t\t\tctx.translate(centerX, centerY);\n\t\t\t\tctx.rotate((curDeg * Math.PI) / 180);\n\t\t\t\tctx.scale(curScale, curScale);\n\n\t\t\t\t// 居中绘制原始图像\n\t\t\t\tconst imgWidth = img.naturalWidth || img.width;\n\t\t\t\tconst imgHeight = img.naturalHeight || img.height;\n\n\t\t\t\t// 保持图像按比例自适应居中\n\t\t\t\tconst baseRatio = Math.min((width * 0.8) / imgWidth, (canvasHeight * 0.8) / imgHeight, 1);\n\t\t\t\tconst renderW = imgWidth * baseRatio;\n\t\t\t\tconst renderH = imgHeight * baseRatio;\n\n\t\t\t\tctx.drawImage(img, -renderW / 2, -renderH / 2, renderW, renderH);\n\t\t\t\tctx.restore();\n\t\t\t},\n\t\t\t[height],\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\trenderCanvas(scale, rotateDeg, offset);\n\t\t}, [scale, rotateDeg, offset, renderCanvas]);\n\n\t\t// 鼠标拖拽平移\n\t\tconst handleMouseDown = (e: React.MouseEvent) => {\n\t\t\tisDraggingRef.current = true;\n\t\t\tdragStartRef.current = { x: e.clientX - offset.x, y: e.clientY - offset.y };\n\t\t};\n\n\t\tconst handleMouseMove = (e: React.MouseEvent) => {\n\t\t\tif (!isDraggingRef.current) return;\n\t\t\tconst nextOffset = {\n\t\t\t\tx: e.clientX - dragStartRef.current.x,\n\t\t\t\ty: e.clientY - dragStartRef.current.y,\n\t\t\t};\n\t\t\tsetOffset(nextOffset);\n\t\t};\n\n\t\tconst handleMouseUp = () => {\n\t\t\tisDraggingRef.current = false;\n\t\t};\n\n\t\t// 滚轮缩放\n\t\tconst handleWheel = (e: React.WheelEvent) => {\n\t\t\te.preventDefault();\n\t\t\tconst zoomStep = e.deltaY < 0 ? 0.1 : -0.1;\n\t\t\tsetScale((prev) => Math.min(Math.max(0.2, prev + zoomStep), 5));\n\t\t};\n\n\t\t// 顺时针旋转\n\t\tconst handleRotate = (deg = 90) => {\n\t\t\tsetRotateDeg((prev) => (prev + deg) % 360);\n\t\t};\n\n\t\tconst handleZoom = (delta: number) => {\n\t\t\tsetScale((prev) => Math.min(Math.max(0.2, prev + delta), 5));\n\t\t};\n\n\t\tconst handleReset = () => {\n\t\t\tsetScale(1);\n\t\t\tsetRotateDeg(0);\n\t\t\tsetOffset({ x: 0, y: 0 });\n\t\t};\n\n\t\t// 计算裁剪框尺寸与位置\n\t\tconst getCropBoxRect = () => {\n\t\t\tconst container = containerRef.current;\n\t\t\tconst containerW = container?.clientWidth || 400;\n\t\t\tconst containerH = height;\n\n\t\t\tlet boxW = Math.min(containerW * 0.7, 240);\n\t\t\tlet boxH = aspectRatio ? boxW / aspectRatio : boxW;\n\n\t\t\tif (boxH > containerH * 0.8) {\n\t\t\t\tboxH = containerH * 0.8;\n\t\t\t\tboxW = aspectRatio ? boxH * aspectRatio : boxH;\n\t\t\t}\n\n\t\t\tconst boxLeft = (containerW - boxW) / 2;\n\t\t\tconst boxTop = (containerH - boxH) / 2;\n\n\t\t\treturn { left: boxLeft, top: boxTop, width: boxW, height: boxH };\n\t\t};\n\n\t\t// 提取裁剪区域生成图片\n\t\tconst getCroppedResult = useCallback(\n\t\t\tasync (type = 'image/png', quality = 0.92): Promise<CropResult> => {\n\t\t\t\tconst canvas = canvasRef.current;\n\t\t\t\tif (!canvas) throw new Error('Canvas not found');\n\n\t\t\t\tconst cropBox = getCropBoxRect();\n\t\t\t\tconst dpr = window.devicePixelRatio || 1;\n\n\t\t\t\tconst cropCanvas = document.createElement('canvas');\n\t\t\t\tcropCanvas.width = cropBox.width * dpr;\n\t\t\t\tcropCanvas.height = cropBox.height * dpr;\n\t\t\t\tconst cropCtx = cropCanvas.getContext('2d');\n\n\t\t\t\tif (!cropCtx) throw new Error('Failed to create canvas context');\n\n\t\t\t\tif (shape === 'round') {\n\t\t\t\t\tcropCtx.beginPath();\n\t\t\t\t\tcropCtx.arc(\n\t\t\t\t\t\t(cropBox.width * dpr) / 2,\n\t\t\t\t\t\t(cropBox.height * dpr) / 2,\n\t\t\t\t\t\t(cropBox.width * dpr) / 2,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tMath.PI * 2,\n\t\t\t\t\t);\n\t\t\t\t\tcropCtx.closePath();\n\t\t\t\t\tcropCtx.clip();\n\t\t\t\t}\n\n\t\t\t\tcropCtx.drawImage(\n\t\t\t\t\tcanvas,\n\t\t\t\t\tcropBox.left * dpr,\n\t\t\t\t\tcropBox.top * dpr,\n\t\t\t\t\tcropBox.width * dpr,\n\t\t\t\t\tcropBox.height * dpr,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tcropBox.width * dpr,\n\t\t\t\t\tcropBox.height * dpr,\n\t\t\t\t);\n\n\t\t\t\tconst dataURL = cropCanvas.toDataURL(type, quality);\n\t\t\t\tconst blob: Blob | null = await new Promise((resolve) => {\n\t\t\t\t\tcropCanvas.toBlob((b) => resolve(b), type, quality);\n\t\t\t\t});\n\n\t\t\t\treturn {\n\t\t\t\t\tdataURL,\n\t\t\t\t\tblob,\n\t\t\t\t\twidth: Math.round(cropBox.width),\n\t\t\t\t\theight: Math.round(cropBox.height),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[shape, aspectRatio, height],\n\t\t);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tgetCroppedResult,\n\t\t\t\trotate: handleRotate,\n\t\t\t\tzoom: handleZoom,\n\t\t\t\treset: handleReset,\n\t\t\t}),\n\t\t\t[getCroppedResult],\n\t\t);\n\n\t\tconst handleConfirm = async () => {\n\t\t\tconst res = await getCroppedResult();\n\t\t\tonOk?.(res);\n\t\t};\n\n\t\tconst cropBox = getCropBoxRect();\n\n\t\tconst coreContent = (\n\t\t\t<div className={`rpc_image_cropper ${className}`} style={{ ...style }}>\n\t\t\t\t<div\n\t\t\t\t\tref={containerRef}\n\t\t\t\t\tclassName=\"rpc_image_cropper_canvas_wrap\"\n\t\t\t\t\tstyle={{ height }}\n\t\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\t\tonMouseMove={handleMouseMove}\n\t\t\t\t\tonMouseUp={handleMouseUp}\n\t\t\t\t\tonMouseLeave={handleMouseUp}\n\t\t\t\t\tonWheel={handleWheel}\n\t\t\t\t>\n\t\t\t\t\t<canvas\n\t\t\t\t\t\tref={canvasRef}\n\t\t\t\t\t\tclassName=\"rpc_image_cropper_canvas\"\n\t\t\t\t\t\tstyle={{ width: '100%', height }}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{/* 裁剪框与遮罩 */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={`rpc_image_cropper_crop_box ${\n\t\t\t\t\t\t\tshape === 'round' ? 'rpc_image_cropper_crop_box_round' : ''\n\t\t\t\t\t\t}`}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: `${cropBox.left}px`,\n\t\t\t\t\t\t\ttop: `${cropBox.top}px`,\n\t\t\t\t\t\t\twidth: `${cropBox.width}px`,\n\t\t\t\t\t\t\theight: `${cropBox.height}px`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{shape === 'rect' && <div className=\"rpc_image_cropper_crop_box_grid\" />}\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_image_cropper_toolbar\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn\"\n\t\t\t\t\t\tonClick={() => handleZoom(0.1)}\n\t\t\t\t\t\ttitle=\"放大\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ZoomInOutlined /> 放大\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn\"\n\t\t\t\t\t\tonClick={() => handleZoom(-0.1)}\n\t\t\t\t\t\ttitle=\"缩小\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ZoomOutOutlined /> 缩小\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn\"\n\t\t\t\t\t\tonClick={() => handleRotate(90)}\n\t\t\t\t\t\ttitle=\"顺时针旋转90°\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<RotateRightOutlined /> 旋转\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn\"\n\t\t\t\t\t\tonClick={handleReset}\n\t\t\t\t\t\ttitle=\"重置\"\n\t\t\t\t\t>\n\t\t\t\t\t\t重置\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\n\t\tif (modal) {\n\t\t\tif (!open) return null;\n\t\t\treturn ReactDOM.createPortal(\n\t\t\t\t<div className=\"rpc_cropper_modal\" onClick={onCancel}>\n\t\t\t\t\t<div className=\"rpc_cropper_modal_card\" onClick={(e) => e.stopPropagation()}>\n\t\t\t\t\t\t<div className=\"rpc_cropper_modal_header\">\n\t\t\t\t\t\t\t<span>{title}</span>\n\t\t\t\t\t\t\t<CloseOutlined className=\"rpc_cropper_modal_close\" onClick={onCancel} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div style={{ padding: 16, background: '#141414' }}>{coreContent}</div>\n\t\t\t\t\t\t<div className=\"rpc_cropper_modal_footer\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn\"\n\t\t\t\t\t\t\t\tstyle={{ background: '#ffffff', color: '#262626', borderColor: '#d9d9d9' }}\n\t\t\t\t\t\t\t\tonClick={onCancel}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t取消\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn rpc_image_cropper_btn_primary\"\n\t\t\t\t\t\t\t\tonClick={handleConfirm}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<CheckOutlined /> 确定裁剪\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>,\n\t\t\t\tdocument.body,\n\t\t\t);\n\t\t}\n\n\t\treturn coreContent;\n\t},\n);\n\nImageCropper.displayName = 'ImageCropper';\n\nexport default ImageCropper;\n"]}
@@ -1,4 +1,4 @@
1
- import { CodeOutlined, CheckOutlined, CopyOutlined, ExportOutlined, ThunderboltOutlined, CodePenOutlined, CodeSandboxOutlined, UpOutlined, DownOutlined } from './chunk-2IDVNTKR.js';
1
+ import { CodeOutlined, CheckOutlined, CopyOutlined, ExportOutlined, ThunderboltOutlined, CodePenOutlined, CodeSandboxOutlined, UpOutlined, DownOutlined } from './chunk-537T6BR3.js';
2
2
  import React, { useState } from 'react';
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
 
@@ -153,9 +153,7 @@ function openInCodePen(code, config = {}) {
153
153
  "https://unpkg.com/react-dom@18/umd/react-dom.production.min.js",
154
154
  "https://unpkg.com/react-public-components/dist/index.umd.js"
155
155
  ].join(";"),
156
- css_external: [
157
- "https://unpkg.com/react-public-components/dist/index.css"
158
- ].join(";")
156
+ css_external: ["https://unpkg.com/react-public-components/dist/index.css"].join(";")
159
157
  };
160
158
  const input = document.createElement("input");
161
159
  input.type = "hidden";
@@ -415,5 +413,5 @@ var CodeSnippet = ({
415
413
  var CodeSnippet_default = CodeSnippet;
416
414
 
417
415
  export { CodeSnippet_default, openInCodePen, openInCodeSandbox, openInNewTab, openInStackBlitz };
418
- //# sourceMappingURL=chunk-4KMVABTM.js.map
419
- //# sourceMappingURL=chunk-4KMVABTM.js.map
416
+ //# sourceMappingURL=chunk-FQHPCK3S.js.map
417
+ //# sourceMappingURL=chunk-FQHPCK3S.js.map