react-public-components 1.2.7 → 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 (212) 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/MiniSparkline/index.cjs +2 -2
  43. package/dist/MiniSparkline/index.js +1 -1
  44. package/dist/PasswordStrength/index.cjs +4 -4
  45. package/dist/PasswordStrength/index.js +2 -2
  46. package/dist/PdfViewer/index.cjs +3 -3
  47. package/dist/PdfViewer/index.js +2 -2
  48. package/dist/PeriodSelect/index.cjs +4 -4
  49. package/dist/PeriodSelect/index.js +1 -1
  50. package/dist/QrCodeCard/index.cjs +3 -3
  51. package/dist/QrCodeCard/index.js +2 -2
  52. package/dist/SensitiveMask/index.cjs +5 -5
  53. package/dist/SensitiveMask/index.js +3 -3
  54. package/dist/Splitter/index.cjs +3 -3
  55. package/dist/Splitter/index.js +2 -2
  56. package/dist/TagInput/index.cjs +3 -3
  57. package/dist/TagInput/index.js +2 -2
  58. package/dist/TextEllipsis/index.cjs +4 -4
  59. package/dist/TextEllipsis/index.js +3 -3
  60. package/dist/TreeTransfer/index.cjs +3 -3
  61. package/dist/TreeTransfer/index.js +2 -2
  62. package/dist/VideoPlayer/index.cjs +3 -3
  63. package/dist/VideoPlayer/index.js +2 -2
  64. package/dist/{chunk-56VELHCH.js → chunk-2SEHUMQH.js} +3 -3
  65. package/dist/{chunk-56VELHCH.js.map → chunk-2SEHUMQH.js.map} +1 -1
  66. package/dist/{chunk-2INP6NM4.js → chunk-3WLGM74R.js} +3 -3
  67. package/dist/{chunk-2INP6NM4.js.map → chunk-3WLGM74R.js.map} +1 -1
  68. package/dist/{chunk-2IDVNTKR.js → chunk-537T6BR3.js} +32 -8
  69. package/dist/chunk-537T6BR3.js.map +1 -0
  70. package/dist/{chunk-XUAHWX6B.js → chunk-5QEXX32M.js} +3 -3
  71. package/dist/{chunk-XUAHWX6B.js.map → chunk-5QEXX32M.js.map} +1 -1
  72. package/dist/{chunk-ETFLLRTO.js → chunk-5XTIASJH.js} +3 -3
  73. package/dist/{chunk-ETFLLRTO.js.map → chunk-5XTIASJH.js.map} +1 -1
  74. package/dist/{chunk-TNZ2OLGW.cjs → chunk-6KODABJW.cjs} +4 -4
  75. package/dist/{chunk-TNZ2OLGW.cjs.map → chunk-6KODABJW.cjs.map} +1 -1
  76. package/dist/{chunk-ZWKUHYTV.cjs → chunk-6WCWYSFU.cjs} +6 -6
  77. package/dist/{chunk-ZWKUHYTV.cjs.map → chunk-6WCWYSFU.cjs.map} +1 -1
  78. package/dist/{chunk-Y54KVULF.js → chunk-7FGE7NRH.js} +11 -4
  79. package/dist/chunk-7FGE7NRH.js.map +1 -0
  80. package/dist/{chunk-VJOO2DG3.cjs → chunk-7NXCDDBT.cjs} +8 -8
  81. package/dist/{chunk-VJOO2DG3.cjs.map → chunk-7NXCDDBT.cjs.map} +1 -1
  82. package/dist/{chunk-VYPIRVL4.js → chunk-7W7PCWMM.js} +2 -2
  83. package/dist/chunk-7W7PCWMM.js.map +1 -0
  84. package/dist/{chunk-NNS4YN3C.js → chunk-B3FMPSBM.js} +10 -4
  85. package/dist/chunk-B3FMPSBM.js.map +1 -0
  86. package/dist/{chunk-TUEVILTA.cjs → chunk-BKHKPZ6O.cjs} +5 -5
  87. package/dist/{chunk-TUEVILTA.cjs.map → chunk-BKHKPZ6O.cjs.map} +1 -1
  88. package/dist/{chunk-AXPVN2OO.js → chunk-BXLUH6FE.js} +3 -3
  89. package/dist/{chunk-AXPVN2OO.js.map → chunk-BXLUH6FE.js.map} +1 -1
  90. package/dist/{chunk-PYCSRJSF.cjs → chunk-CWG7A5DS.cjs} +7 -7
  91. package/dist/{chunk-PYCSRJSF.cjs.map → chunk-CWG7A5DS.cjs.map} +1 -1
  92. package/dist/{chunk-YP4XTMK3.cjs → chunk-DTJEY3BC.cjs} +4 -4
  93. package/dist/{chunk-YP4XTMK3.cjs.map → chunk-DTJEY3BC.cjs.map} +1 -1
  94. package/dist/{chunk-2EIAWXFA.cjs → chunk-DWG4FUDX.cjs} +5 -5
  95. package/dist/{chunk-2EIAWXFA.cjs.map → chunk-DWG4FUDX.cjs.map} +1 -1
  96. package/dist/{chunk-IF4XAUV3.js → chunk-E6EJLQL7.js} +3 -3
  97. package/dist/{chunk-IF4XAUV3.js.map → chunk-E6EJLQL7.js.map} +1 -1
  98. package/dist/{chunk-RFTYEXKU.js → chunk-EMQHYD3G.js} +6 -14
  99. package/dist/chunk-EMQHYD3G.js.map +1 -0
  100. package/dist/{chunk-O4EABET3.js → chunk-ERPKXNWM.js} +10 -4
  101. package/dist/chunk-ERPKXNWM.js.map +1 -0
  102. package/dist/{chunk-QRZ2GVVJ.js → chunk-FJ33L5D7.js} +3 -3
  103. package/dist/{chunk-QRZ2GVVJ.js.map → chunk-FJ33L5D7.js.map} +1 -1
  104. package/dist/{chunk-4KMVABTM.js → chunk-FQHPCK3S.js} +4 -6
  105. package/dist/chunk-FQHPCK3S.js.map +1 -0
  106. package/dist/{chunk-OLLVIQPL.js → chunk-FT2XGH4D.js} +3 -3
  107. package/dist/{chunk-OLLVIQPL.js.map → chunk-FT2XGH4D.js.map} +1 -1
  108. package/dist/{chunk-EMT4NUI5.js → chunk-G76ELHWZ.js} +3 -3
  109. package/dist/{chunk-EMT4NUI5.js.map → chunk-G76ELHWZ.js.map} +1 -1
  110. package/dist/{chunk-QU33CY3M.cjs → chunk-IHUBENM6.cjs} +6 -14
  111. package/dist/chunk-IHUBENM6.cjs.map +1 -0
  112. package/dist/{chunk-M4FZJALR.js → chunk-J3C46E6G.js} +4 -4
  113. package/dist/{chunk-M4FZJALR.js.map → chunk-J3C46E6G.js.map} +1 -1
  114. package/dist/{chunk-UIU6VCEQ.cjs → chunk-JLW5ISIR.cjs} +6 -3
  115. package/dist/chunk-JLW5ISIR.cjs.map +1 -0
  116. package/dist/{chunk-UAUP5TJK.cjs → chunk-K4LVWWEE.cjs} +5 -5
  117. package/dist/{chunk-UAUP5TJK.cjs.map → chunk-K4LVWWEE.cjs.map} +1 -1
  118. package/dist/{chunk-P5CS7V4W.js → chunk-KJ537QZS.js} +3 -3
  119. package/dist/{chunk-P5CS7V4W.js.map → chunk-KJ537QZS.js.map} +1 -1
  120. package/dist/{chunk-U2EBNBGK.cjs → chunk-KSXCVQU3.cjs} +4 -4
  121. package/dist/{chunk-U2EBNBGK.cjs.map → chunk-KSXCVQU3.cjs.map} +1 -1
  122. package/dist/{chunk-LFGBZXQH.cjs → chunk-KWL5465Y.cjs} +4 -4
  123. package/dist/{chunk-LFGBZXQH.cjs.map → chunk-KWL5465Y.cjs.map} +1 -1
  124. package/dist/{chunk-TUDLE3RT.cjs → chunk-KYM35LPD.cjs} +13 -15
  125. package/dist/chunk-KYM35LPD.cjs.map +1 -0
  126. package/dist/{chunk-RN5WU7KA.cjs → chunk-L76JMQUH.cjs} +7 -7
  127. package/dist/{chunk-RN5WU7KA.cjs.map → chunk-L76JMQUH.cjs.map} +1 -1
  128. package/dist/{chunk-AHTRLNYK.cjs → chunk-LPDHDZTA.cjs} +5 -5
  129. package/dist/{chunk-AHTRLNYK.cjs.map → chunk-LPDHDZTA.cjs.map} +1 -1
  130. package/dist/{chunk-JHVPDKBM.cjs → chunk-LRUSUUPJ.cjs} +6 -6
  131. package/dist/{chunk-JHVPDKBM.cjs.map → chunk-LRUSUUPJ.cjs.map} +1 -1
  132. package/dist/{chunk-MQJBUHDB.js → chunk-MWVME3UR.js} +3 -3
  133. package/dist/{chunk-MQJBUHDB.js.map → chunk-MWVME3UR.js.map} +1 -1
  134. package/dist/{chunk-OONBZRPV.cjs → chunk-N4UF72SJ.cjs} +4 -4
  135. package/dist/{chunk-OONBZRPV.cjs.map → chunk-N4UF72SJ.cjs.map} +1 -1
  136. package/dist/{chunk-EKDJPOA3.cjs → chunk-NKLHMUGB.cjs} +5 -5
  137. package/dist/{chunk-EKDJPOA3.cjs.map → chunk-NKLHMUGB.cjs.map} +1 -1
  138. package/dist/{chunk-M3GQ7RCV.cjs → chunk-NZNNDZW4.cjs} +4 -4
  139. package/dist/{chunk-M3GQ7RCV.cjs.map → chunk-NZNNDZW4.cjs.map} +1 -1
  140. package/dist/{chunk-UZB7GOEI.cjs → chunk-OLIPC6HC.cjs} +4 -4
  141. package/dist/{chunk-UZB7GOEI.cjs.map → chunk-OLIPC6HC.cjs.map} +1 -1
  142. package/dist/{chunk-PTFKE67K.js → chunk-OOH3YSNC.js} +3 -3
  143. package/dist/{chunk-PTFKE67K.js.map → chunk-OOH3YSNC.js.map} +1 -1
  144. package/dist/{chunk-Q7OVUH5K.js → chunk-OXBOWSLR.js} +3 -3
  145. package/dist/{chunk-Q7OVUH5K.js.map → chunk-OXBOWSLR.js.map} +1 -1
  146. package/dist/{chunk-EDNBPLUS.js → chunk-P7P3UVGN.js} +3 -3
  147. package/dist/{chunk-EDNBPLUS.js.map → chunk-P7P3UVGN.js.map} +1 -1
  148. package/dist/{chunk-ANTFNDH4.js → chunk-Q2M3ZE7E.js} +3 -3
  149. package/dist/{chunk-ANTFNDH4.js.map → chunk-Q2M3ZE7E.js.map} +1 -1
  150. package/dist/{chunk-W5JA3YTT.js → chunk-Q3Z6OWKR.js} +3 -3
  151. package/dist/{chunk-W5JA3YTT.js.map → chunk-Q3Z6OWKR.js.map} +1 -1
  152. package/dist/{chunk-R4V3EJVP.cjs → chunk-QMLDK2DL.cjs} +32 -8
  153. package/dist/chunk-QMLDK2DL.cjs.map +1 -0
  154. package/dist/{chunk-PUMVD7CP.js → chunk-QVTQQB6M.js} +3 -3
  155. package/dist/{chunk-PUMVD7CP.js.map → chunk-QVTQQB6M.js.map} +1 -1
  156. package/dist/{chunk-ZCBT56AG.js → chunk-RBX6VEKI.js} +3 -3
  157. package/dist/{chunk-ZCBT56AG.js.map → chunk-RBX6VEKI.js.map} +1 -1
  158. package/dist/{chunk-4TMBGQQE.cjs → chunk-S35SIDXQ.cjs} +5 -5
  159. package/dist/{chunk-4TMBGQQE.cjs.map → chunk-S35SIDXQ.cjs.map} +1 -1
  160. package/dist/{chunk-CURWX7OY.js → chunk-SCVOSNWF.js} +3 -3
  161. package/dist/{chunk-CURWX7OY.js.map → chunk-SCVOSNWF.js.map} +1 -1
  162. package/dist/{chunk-ZXMFWVE4.cjs → chunk-SG7Z432O.cjs} +11 -5
  163. package/dist/chunk-SG7Z432O.cjs.map +1 -0
  164. package/dist/{chunk-FZH5FL7X.cjs → chunk-THZFDBJM.cjs} +12 -5
  165. package/dist/chunk-THZFDBJM.cjs.map +1 -0
  166. package/dist/{chunk-HKALWFWZ.cjs → chunk-TWL3QEFV.cjs} +5 -5
  167. package/dist/{chunk-HKALWFWZ.cjs.map → chunk-TWL3QEFV.cjs.map} +1 -1
  168. package/dist/{chunk-XLOGMDAQ.js → chunk-U4VZGKQV.js} +3 -3
  169. package/dist/{chunk-XLOGMDAQ.js.map → chunk-U4VZGKQV.js.map} +1 -1
  170. package/dist/{chunk-EJYTTSW6.js → chunk-VAU4USHW.js} +3 -3
  171. package/dist/{chunk-EJYTTSW6.js.map → chunk-VAU4USHW.js.map} +1 -1
  172. package/dist/{chunk-HSYTBMLN.cjs → chunk-VVKYGA2T.cjs} +9 -3
  173. package/dist/chunk-VVKYGA2T.cjs.map +1 -0
  174. package/dist/{chunk-JNA5AQ2K.js → chunk-VY4XERM4.js} +3 -3
  175. package/dist/{chunk-JNA5AQ2K.js.map → chunk-VY4XERM4.js.map} +1 -1
  176. package/dist/{chunk-V55FEQYU.cjs → chunk-W52O3Y2I.cjs} +2 -2
  177. package/dist/chunk-W52O3Y2I.cjs.map +1 -0
  178. package/dist/{chunk-7ZBA4NHH.cjs → chunk-W7LZVHTA.cjs} +4 -4
  179. package/dist/{chunk-7ZBA4NHH.cjs.map → chunk-W7LZVHTA.cjs.map} +1 -1
  180. package/dist/{chunk-5Q7THN6M.js → chunk-WLAHW5RF.js} +6 -3
  181. package/dist/chunk-WLAHW5RF.js.map +1 -0
  182. package/dist/{chunk-IPS7PC3M.cjs → chunk-X5X4YABT.cjs} +13 -13
  183. package/dist/{chunk-IPS7PC3M.cjs.map → chunk-X5X4YABT.cjs.map} +1 -1
  184. package/dist/{chunk-WKF4C6TJ.js → chunk-XLPOXPOV.js} +3 -3
  185. package/dist/{chunk-WKF4C6TJ.js.map → chunk-XLPOXPOV.js.map} +1 -1
  186. package/dist/{chunk-QP3RKA4J.cjs → chunk-XM6J7F5X.cjs} +4 -4
  187. package/dist/{chunk-QP3RKA4J.cjs.map → chunk-XM6J7F5X.cjs.map} +1 -1
  188. package/dist/{chunk-ED3ZG2VX.cjs → chunk-ZR56U55S.cjs} +5 -5
  189. package/dist/{chunk-ED3ZG2VX.cjs.map → chunk-ZR56U55S.cjs.map} +1 -1
  190. package/dist/{chunk-77ANKL4K.cjs → chunk-ZRNAJCZI.cjs} +8 -8
  191. package/dist/{chunk-77ANKL4K.cjs.map → chunk-ZRNAJCZI.cjs.map} +1 -1
  192. package/dist/index.cjs +73 -73
  193. package/dist/index.js +32 -32
  194. package/dist/src/icons.d.ts +6 -6
  195. package/dist/src/index.d.ts +2 -2
  196. package/package.json +1 -1
  197. package/dist/chunk-2IDVNTKR.js.map +0 -1
  198. package/dist/chunk-4KMVABTM.js.map +0 -1
  199. package/dist/chunk-5Q7THN6M.js.map +0 -1
  200. package/dist/chunk-FZH5FL7X.cjs.map +0 -1
  201. package/dist/chunk-HSYTBMLN.cjs.map +0 -1
  202. package/dist/chunk-NNS4YN3C.js.map +0 -1
  203. package/dist/chunk-O4EABET3.js.map +0 -1
  204. package/dist/chunk-QU33CY3M.cjs.map +0 -1
  205. package/dist/chunk-R4V3EJVP.cjs.map +0 -1
  206. package/dist/chunk-RFTYEXKU.js.map +0 -1
  207. package/dist/chunk-TUDLE3RT.cjs.map +0 -1
  208. package/dist/chunk-UIU6VCEQ.cjs.map +0 -1
  209. package/dist/chunk-V55FEQYU.cjs.map +0 -1
  210. package/dist/chunk-VYPIRVL4.js.map +0 -1
  211. package/dist/chunk-Y54KVULF.js.map +0 -1
  212. 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
 
@@ -125,14 +125,14 @@ var QrCodeCard = ({
125
125
  onRefresh == null ? void 0 : onRefresh();
126
126
  },
127
127
  children: [
128
- /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.ReloadOutlined, { className: "rpc_qrcode_card_refresh_icon" }),
128
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.ReloadOutlined, { className: "rpc_qrcode_card_refresh_icon" }),
129
129
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u70B9\u51FB\u5237\u65B0" })
130
130
  ]
131
131
  }
132
132
  )
133
133
  ] }),
134
134
  status === "loading" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rpc_qrcode_card_mask rpc_qrcode_card_mask_loading", children: [
135
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rpc_qrcode_card_spinner_wrap", children: /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.LoadingOutlined, { className: "rpc_qrcode_card_spinner" }) }),
135
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rpc_qrcode_card_spinner_wrap", children: /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.LoadingOutlined, { className: "rpc_qrcode_card_spinner" }) }),
136
136
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rpc_qrcode_card_mask_text", children: "\u52A0\u8F7D\u4E2D..." })
137
137
  ] })
138
138
  ]
@@ -143,7 +143,7 @@ var QrCodeCard = ({
143
143
  description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rpc_qrcode_card_description", children: description })
144
144
  ] }),
145
145
  downloadable && status === "active" && /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: "rpc_qrcode_card_download", onClick: handleDownload, children: [
146
- /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.DownloadOutlined, { style: { marginRight: 4, fontSize: 13 } }),
146
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.DownloadOutlined, { style: { marginRight: 4, fontSize: 13 } }),
147
147
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u4E0B\u8F7D\u4E8C\u7EF4\u7801" })
148
148
  ] })
149
149
  ] });
@@ -151,5 +151,5 @@ var QrCodeCard = ({
151
151
  var QrCodeCard_default = QrCodeCard;
152
152
 
153
153
  exports.QrCodeCard_default = QrCodeCard_default;
154
- //# sourceMappingURL=chunk-ZWKUHYTV.cjs.map
155
- //# sourceMappingURL=chunk-ZWKUHYTV.cjs.map
154
+ //# sourceMappingURL=chunk-6WCWYSFU.cjs.map
155
+ //# sourceMappingURL=chunk-6WCWYSFU.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../QrCodeCard/index.tsx"],"names":["useRef","useEffect","jsxs","jsx","ReloadOutlined","LoadingOutlined","DownloadOutlined"],"mappings":"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","file":"chunk-ZWKUHYTV.cjs","sourcesContent":["import React, { useRef, useEffect, ReactNode, CSSProperties } from 'react';\nimport { ReloadOutlined, LoadingOutlined, DownloadOutlined } from '../src/icons';\nimport './index.less';\n\nexport type QrCodeStatus = 'active' | 'expired' | 'loading';\n\nexport interface QrCodeCardProps {\n\t/** 二维码内容或跳转 URL */\n\tvalue: string;\n\t/** 二维码尺寸(像素),默认为 160 */\n\tsize?: number;\n\t/** 二维码颜色,默认为 #1a1a1a */\n\tcolor?: string;\n\t/** 二维码背景色,默认为 #ffffff */\n\tbackgroundColor?: string;\n\t/** 中心嵌入的 Logo 图标地址 */\n\ticon?: string;\n\t/** 中心 Logo 的尺寸(像素),默认根据 size 自动计算 (约 22%) */\n\ticonSize?: number;\n\t/** 二维码状态:'active' 正常,'expired' 已过期,'loading' 生成中,默认为 'active' */\n\tstatus?: QrCodeStatus;\n\t/** 卡片主标题说明 */\n\ttitle?: ReactNode;\n\t/** 卡片副标题或扫码引导文案 */\n\tdescription?: ReactNode;\n\t/** 是否显示一键下载二维码按钮,默认为 false */\n\tdownloadable?: boolean;\n\t/** 是否显示四角扫码引导角标,默认为 false */\n\tbordered?: boolean;\n\t/** 点击过期遮罩刷新时的回调 */\n\tonRefresh?: () => void;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\n// 经典的 25x25 规整 QR 矩阵模式生成器(带标准 3 方位探测器与时钟同步条)\nfunction renderQrCode(\n\tcanvas: HTMLCanvasElement,\n\ttext: string,\n\tsize: number,\n\tcolor: string = '#1a1a1a',\n\tbgColor: string = '#ffffff',\n) {\n\tconst ctx = canvas.getContext('2d');\n\tif (!ctx) return;\n\n\tconst dpr = window.devicePixelRatio || 2;\n\tcanvas.width = size * dpr;\n\tcanvas.height = size * dpr;\n\tctx.scale(dpr, dpr);\n\n\t// 背景\n\tctx.fillStyle = bgColor;\n\tctx.fillRect(0, 0, size, size);\n\n\tconst modules = 25; // 25x25 矩阵\n\tconst padding = 1.5; // 安全边距留白 (Quiet Zone)\n\tconst effectiveSize = size;\n\tconst cellSize = effectiveSize / (modules + padding * 2);\n\tconst startOffset = padding * cellSize;\n\n\tctx.fillStyle = color;\n\n\t// 绘制三个角的定位探测图案 (Position Detection Patterns)\n\tconst drawPositionPattern = (row: number, col: number) => {\n\t\tconst ox = startOffset + col * cellSize;\n\t\tconst oy = startOffset + row * cellSize;\n\n\t\t// 1. 外层 7x7 实心黑方块(带圆角)\n\t\tctx.fillStyle = color;\n\t\tctx.fillRect(ox, oy, 7 * cellSize, 7 * cellSize);\n\n\t\t// 2. 内层 5x5 白色挖空方块\n\t\tctx.fillStyle = bgColor;\n\t\tctx.fillRect(ox + 1 * cellSize, oy + 1 * cellSize, 5 * cellSize, 5 * cellSize);\n\n\t\t// 3. 中心 3x3 实心黑方块\n\t\tctx.fillStyle = color;\n\t\tctx.fillRect(ox + 2 * cellSize, oy + 2 * cellSize, 3 * cellSize, 3 * cellSize);\n\t};\n\n\tdrawPositionPattern(0, 0);\n\tdrawPositionPattern(0, modules - 7);\n\tdrawPositionPattern(modules - 7, 0);\n\n\t// 绘制时钟同步线 (Timing Patterns)\n\tfor (let i = 8; i < modules - 8; i++) {\n\t\tif (i % 2 === 0) {\n\t\t\tctx.fillRect(startOffset + i * cellSize, startOffset + 6 * cellSize, cellSize, cellSize);\n\t\t\tctx.fillRect(startOffset + 6 * cellSize, startOffset + i * cellSize, cellSize, cellSize);\n\t\t}\n\t}\n\n\t// 基于文本字符串的 hash 填充数据点\n\tlet hash = 0;\n\tfor (let i = 0; i < text.length; i++) {\n\t\thash = (hash << 5) - hash + text.charCodeAt(i);\n\t\thash |= 0;\n\t}\n\n\tfor (let r = 0; r < modules; r++) {\n\t\tfor (let c = 0; c < modules; c++) {\n\t\t\t// 跳过三个角的位置\n\t\t\tif (\n\t\t\t\t(r < 8 && c < 8) ||\n\t\t\t\t(r < 8 && c >= modules - 8) ||\n\t\t\t\t(r >= modules - 8 && c < 8) ||\n\t\t\t\tr === 6 ||\n\t\t\t\tc === 6\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst seed = (r * 37 + c * 23 + (hash ^ (r * c))) % 100;\n\t\t\tif (Math.abs(seed) % 2 === 0) {\n\t\t\t\tctx.fillStyle = color;\n\t\t\t\t// 轻微圆角方块效果\n\t\t\t\tconst x = startOffset + c * cellSize;\n\t\t\t\tconst y = startOffset + r * cellSize;\n\t\t\t\tctx.fillRect(x, y, cellSize - 0.15, cellSize - 0.15);\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst QrCodeCard: React.FC<QrCodeCardProps> = ({\n\tvalue,\n\tsize = 160,\n\tcolor = '#1f1f1f',\n\tbackgroundColor = '#ffffff',\n\ticon,\n\ticonSize,\n\tstatus = 'active',\n\ttitle,\n\tdescription,\n\tdownloadable = false,\n\tbordered = false,\n\tonRefresh,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst canvasRef = useRef<HTMLCanvasElement>(null);\n\tconst calculatedLogoSize = iconSize || Math.max(28, Math.round(size * 0.22));\n\n\tuseEffect(() => {\n\t\tif (canvasRef.current && value) {\n\t\t\trenderQrCode(canvasRef.current, value, size, color, backgroundColor);\n\t\t}\n\t}, [value, size, color, backgroundColor]);\n\n\tconst handleDownload = () => {\n\t\tif (!canvasRef.current) return;\n\t\tconst url = canvasRef.current.toDataURL('image/png');\n\t\tconst a = document.createElement('a');\n\t\ta.href = url;\n\t\ta.download = `qrcode-${Date.now()}.png`;\n\t\ta.click();\n\t};\n\n\treturn (\n\t\t<div className={`rpc_qrcode_card ${className}`} style={style}>\n\t\t\t<div\n\t\t\t\tclassName={`rpc_qrcode_card_wrap ${bordered ? 'rpc_qrcode_card_wrap_bordered' : ''}`}\n\t\t\t\tstyle={{ width: size + 24, height: size + 24 }}\n\t\t\t>\n\t\t\t\t<canvas\n\t\t\t\t\tref={canvasRef}\n\t\t\t\t\tclassName=\"rpc_qrcode_card_canvas\"\n\t\t\t\t\tstyle={{ width: size, height: size }}\n\t\t\t\t/>\n\n\t\t\t\t{/* 嵌入中心 Logo */}\n\t\t\t\t{icon && status === 'active' && (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={icon}\n\t\t\t\t\t\talt=\"Logo\"\n\t\t\t\t\t\tclassName=\"rpc_qrcode_card_logo\"\n\t\t\t\t\t\tstyle={{ width: calculatedLogoSize, height: calculatedLogoSize }}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{/* 过期遮罩 */}\n\t\t\t\t{status === 'expired' && (\n\t\t\t\t\t<div className=\"rpc_qrcode_card_mask rpc_qrcode_card_mask_expired\" onClick={onRefresh}>\n\t\t\t\t\t\t<div className=\"rpc_qrcode_card_mask_title\">二维码已失效</div>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"rpc_qrcode_card_refresh_btn\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tonRefresh?.();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ReloadOutlined className=\"rpc_qrcode_card_refresh_icon\" />\n\t\t\t\t\t\t\t<span>点击刷新</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* 加载中遮罩 */}\n\t\t\t\t{status === 'loading' && (\n\t\t\t\t\t<div className=\"rpc_qrcode_card_mask rpc_qrcode_card_mask_loading\">\n\t\t\t\t\t\t<div className=\"rpc_qrcode_card_spinner_wrap\">\n\t\t\t\t\t\t\t<LoadingOutlined className=\"rpc_qrcode_card_spinner\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<span className=\"rpc_qrcode_card_mask_text\">加载中...</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* 标题说明 */}\n\t\t\t{(title || description) && (\n\t\t\t\t<div className=\"rpc_qrcode_card_info\">\n\t\t\t\t\t{title && <div className=\"rpc_qrcode_card_title\">{title}</div>}\n\t\t\t\t\t{description && <div className=\"rpc_qrcode_card_description\">{description}</div>}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* 下载链接 */}\n\t\t\t{downloadable && status === 'active' && (\n\t\t\t\t<button type=\"button\" className=\"rpc_qrcode_card_download\" onClick={handleDownload}>\n\t\t\t\t\t<DownloadOutlined style={{ marginRight: 4, fontSize: 13 }} />\n\t\t\t\t\t<span>下载二维码</span>\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default QrCodeCard;\n"]}
1
+ {"version":3,"sources":["../QrCodeCard/index.tsx"],"names":["useRef","useEffect","jsxs","jsx","ReloadOutlined","LoadingOutlined","DownloadOutlined"],"mappings":"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","file":"chunk-6WCWYSFU.cjs","sourcesContent":["import React, { useRef, useEffect, ReactNode, CSSProperties } from 'react';\nimport { ReloadOutlined, LoadingOutlined, DownloadOutlined } from '../src/icons';\nimport './index.less';\n\nexport type QrCodeStatus = 'active' | 'expired' | 'loading';\n\nexport interface QrCodeCardProps {\n\t/** 二维码内容或跳转 URL */\n\tvalue: string;\n\t/** 二维码尺寸(像素),默认为 160 */\n\tsize?: number;\n\t/** 二维码颜色,默认为 #1a1a1a */\n\tcolor?: string;\n\t/** 二维码背景色,默认为 #ffffff */\n\tbackgroundColor?: string;\n\t/** 中心嵌入的 Logo 图标地址 */\n\ticon?: string;\n\t/** 中心 Logo 的尺寸(像素),默认根据 size 自动计算 (约 22%) */\n\ticonSize?: number;\n\t/** 二维码状态:'active' 正常,'expired' 已过期,'loading' 生成中,默认为 'active' */\n\tstatus?: QrCodeStatus;\n\t/** 卡片主标题说明 */\n\ttitle?: ReactNode;\n\t/** 卡片副标题或扫码引导文案 */\n\tdescription?: ReactNode;\n\t/** 是否显示一键下载二维码按钮,默认为 false */\n\tdownloadable?: boolean;\n\t/** 是否显示四角扫码引导角标,默认为 false */\n\tbordered?: boolean;\n\t/** 点击过期遮罩刷新时的回调 */\n\tonRefresh?: () => void;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\n// 经典的 25x25 规整 QR 矩阵模式生成器(带标准 3 方位探测器与时钟同步条)\nfunction renderQrCode(\n\tcanvas: HTMLCanvasElement,\n\ttext: string,\n\tsize: number,\n\tcolor: string = '#1a1a1a',\n\tbgColor: string = '#ffffff',\n) {\n\tconst ctx = canvas.getContext('2d');\n\tif (!ctx) return;\n\n\tconst dpr = window.devicePixelRatio || 2;\n\tcanvas.width = size * dpr;\n\tcanvas.height = size * dpr;\n\tctx.scale(dpr, dpr);\n\n\t// 背景\n\tctx.fillStyle = bgColor;\n\tctx.fillRect(0, 0, size, size);\n\n\tconst modules = 25; // 25x25 矩阵\n\tconst padding = 1.5; // 安全边距留白 (Quiet Zone)\n\tconst effectiveSize = size;\n\tconst cellSize = effectiveSize / (modules + padding * 2);\n\tconst startOffset = padding * cellSize;\n\n\tctx.fillStyle = color;\n\n\t// 绘制三个角的定位探测图案 (Position Detection Patterns)\n\tconst drawPositionPattern = (row: number, col: number) => {\n\t\tconst ox = startOffset + col * cellSize;\n\t\tconst oy = startOffset + row * cellSize;\n\n\t\t// 1. 外层 7x7 实心黑方块(带圆角)\n\t\tctx.fillStyle = color;\n\t\tctx.fillRect(ox, oy, 7 * cellSize, 7 * cellSize);\n\n\t\t// 2. 内层 5x5 白色挖空方块\n\t\tctx.fillStyle = bgColor;\n\t\tctx.fillRect(ox + 1 * cellSize, oy + 1 * cellSize, 5 * cellSize, 5 * cellSize);\n\n\t\t// 3. 中心 3x3 实心黑方块\n\t\tctx.fillStyle = color;\n\t\tctx.fillRect(ox + 2 * cellSize, oy + 2 * cellSize, 3 * cellSize, 3 * cellSize);\n\t};\n\n\tdrawPositionPattern(0, 0);\n\tdrawPositionPattern(0, modules - 7);\n\tdrawPositionPattern(modules - 7, 0);\n\n\t// 绘制时钟同步线 (Timing Patterns)\n\tfor (let i = 8; i < modules - 8; i++) {\n\t\tif (i % 2 === 0) {\n\t\t\tctx.fillRect(startOffset + i * cellSize, startOffset + 6 * cellSize, cellSize, cellSize);\n\t\t\tctx.fillRect(startOffset + 6 * cellSize, startOffset + i * cellSize, cellSize, cellSize);\n\t\t}\n\t}\n\n\t// 基于文本字符串的 hash 填充数据点\n\tlet hash = 0;\n\tfor (let i = 0; i < text.length; i++) {\n\t\thash = (hash << 5) - hash + text.charCodeAt(i);\n\t\thash |= 0;\n\t}\n\n\tfor (let r = 0; r < modules; r++) {\n\t\tfor (let c = 0; c < modules; c++) {\n\t\t\t// 跳过三个角的位置\n\t\t\tif (\n\t\t\t\t(r < 8 && c < 8) ||\n\t\t\t\t(r < 8 && c >= modules - 8) ||\n\t\t\t\t(r >= modules - 8 && c < 8) ||\n\t\t\t\tr === 6 ||\n\t\t\t\tc === 6\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst seed = (r * 37 + c * 23 + (hash ^ (r * c))) % 100;\n\t\t\tif (Math.abs(seed) % 2 === 0) {\n\t\t\t\tctx.fillStyle = color;\n\t\t\t\t// 轻微圆角方块效果\n\t\t\t\tconst x = startOffset + c * cellSize;\n\t\t\t\tconst y = startOffset + r * cellSize;\n\t\t\t\tctx.fillRect(x, y, cellSize - 0.15, cellSize - 0.15);\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst QrCodeCard: React.FC<QrCodeCardProps> = ({\n\tvalue,\n\tsize = 160,\n\tcolor = '#1f1f1f',\n\tbackgroundColor = '#ffffff',\n\ticon,\n\ticonSize,\n\tstatus = 'active',\n\ttitle,\n\tdescription,\n\tdownloadable = false,\n\tbordered = false,\n\tonRefresh,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst canvasRef = useRef<HTMLCanvasElement>(null);\n\tconst calculatedLogoSize = iconSize || Math.max(28, Math.round(size * 0.22));\n\n\tuseEffect(() => {\n\t\tif (canvasRef.current && value) {\n\t\t\trenderQrCode(canvasRef.current, value, size, color, backgroundColor);\n\t\t}\n\t}, [value, size, color, backgroundColor]);\n\n\tconst handleDownload = () => {\n\t\tif (!canvasRef.current) return;\n\t\tconst url = canvasRef.current.toDataURL('image/png');\n\t\tconst a = document.createElement('a');\n\t\ta.href = url;\n\t\ta.download = `qrcode-${Date.now()}.png`;\n\t\ta.click();\n\t};\n\n\treturn (\n\t\t<div className={`rpc_qrcode_card ${className}`} style={style}>\n\t\t\t<div\n\t\t\t\tclassName={`rpc_qrcode_card_wrap ${bordered ? 'rpc_qrcode_card_wrap_bordered' : ''}`}\n\t\t\t\tstyle={{ width: size + 24, height: size + 24 }}\n\t\t\t>\n\t\t\t\t<canvas\n\t\t\t\t\tref={canvasRef}\n\t\t\t\t\tclassName=\"rpc_qrcode_card_canvas\"\n\t\t\t\t\tstyle={{ width: size, height: size }}\n\t\t\t\t/>\n\n\t\t\t\t{/* 嵌入中心 Logo */}\n\t\t\t\t{icon && status === 'active' && (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={icon}\n\t\t\t\t\t\talt=\"Logo\"\n\t\t\t\t\t\tclassName=\"rpc_qrcode_card_logo\"\n\t\t\t\t\t\tstyle={{ width: calculatedLogoSize, height: calculatedLogoSize }}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{/* 过期遮罩 */}\n\t\t\t\t{status === 'expired' && (\n\t\t\t\t\t<div className=\"rpc_qrcode_card_mask rpc_qrcode_card_mask_expired\" onClick={onRefresh}>\n\t\t\t\t\t\t<div className=\"rpc_qrcode_card_mask_title\">二维码已失效</div>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"rpc_qrcode_card_refresh_btn\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tonRefresh?.();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ReloadOutlined className=\"rpc_qrcode_card_refresh_icon\" />\n\t\t\t\t\t\t\t<span>点击刷新</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* 加载中遮罩 */}\n\t\t\t\t{status === 'loading' && (\n\t\t\t\t\t<div className=\"rpc_qrcode_card_mask rpc_qrcode_card_mask_loading\">\n\t\t\t\t\t\t<div className=\"rpc_qrcode_card_spinner_wrap\">\n\t\t\t\t\t\t\t<LoadingOutlined className=\"rpc_qrcode_card_spinner\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<span className=\"rpc_qrcode_card_mask_text\">加载中...</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* 标题说明 */}\n\t\t\t{(title || description) && (\n\t\t\t\t<div className=\"rpc_qrcode_card_info\">\n\t\t\t\t\t{title && <div className=\"rpc_qrcode_card_title\">{title}</div>}\n\t\t\t\t\t{description && <div className=\"rpc_qrcode_card_description\">{description}</div>}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* 下载链接 */}\n\t\t\t{downloadable && status === 'active' && (\n\t\t\t\t<button type=\"button\" className=\"rpc_qrcode_card_download\" onClick={handleDownload}>\n\t\t\t\t\t<DownloadOutlined style={{ marginRight: 4, fontSize: 13 }} />\n\t\t\t\t\t<span>下载二维码</span>\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default QrCodeCard;\n"]}
@@ -1,4 +1,4 @@
1
- import { HolderOutlined } from './chunk-2IDVNTKR.js';
1
+ import { HolderOutlined } from './chunk-537T6BR3.js';
2
2
  import { useRef, useState } from 'react';
3
3
  import ReactDOM from 'react-dom';
4
4
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
@@ -145,7 +145,14 @@ function DragSortList({
145
145
  height: dragItemRect.height
146
146
  },
147
147
  children: [
148
- showHandle && /* @__PURE__ */ jsx("span", { className: "rpc_drag_sort_list_handle", style: { cursor: "grabbing", color: "#1677ff" }, children: /* @__PURE__ */ jsx(HolderOutlined, {}) }),
148
+ showHandle && /* @__PURE__ */ jsx(
149
+ "span",
150
+ {
151
+ className: "rpc_drag_sort_list_handle",
152
+ style: { cursor: "grabbing", color: "#1677ff" },
153
+ children: /* @__PURE__ */ jsx(HolderOutlined, {})
154
+ }
155
+ ),
149
156
  /* @__PURE__ */ jsx("div", { className: "rpc_drag_sort_list_content", style: { flex: 1 }, children: renderItem(draggedItemData, dragIndex, true) })
150
157
  ]
151
158
  }
@@ -157,5 +164,5 @@ function DragSortList({
157
164
  var DragSortList_default = DragSortList;
158
165
 
159
166
  export { DragSortList_default };
160
- //# sourceMappingURL=chunk-Y54KVULF.js.map
161
- //# sourceMappingURL=chunk-Y54KVULF.js.map
167
+ //# sourceMappingURL=chunk-7FGE7NRH.js.map
168
+ //# sourceMappingURL=chunk-7FGE7NRH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../DragSortList/index.tsx"],"names":[],"mappings":"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","file":"chunk-7FGE7NRH.js","sourcesContent":["import React, { useState, useRef, useEffect, ReactNode, CSSProperties } from 'react';\nimport ReactDOM from 'react-dom';\nimport { HolderOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface DragSortListProps<T> {\n\t/** 数据列表 */\n\titems: T[];\n\t/** 拖拽排序完成后的新列表回调 */\n\tonReorder: (newItems: T[], fromIndex: number, toIndex: number) => void;\n\t/** 提取唯一 Key */\n\tkeyExtractor: (item: T, index: number) => string | number;\n\t/** 自定义渲染单个列表项内容 */\n\trenderItem: (item: T, index: number, isDragging: boolean) => ReactNode;\n\t/** 是否仅允许通过左侧把手图标拖动,默认为 false */\n\thandleOnly?: boolean;\n\t/** 是否展示左侧拖拽把手图标,默认为 true */\n\tshowHandle?: boolean;\n\t/** 是否禁用拖拽排序,默认为 false */\n\tdisabled?: boolean;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nfunction arrayMove<T>(array: T[], from: number, to: number): T[] {\n\tconst next = [...array];\n\tconst [item] = next.splice(from, 1);\n\tnext.splice(to, 0, item);\n\treturn next;\n}\n\nfunction DragSortList<T>({\n\titems,\n\tonReorder,\n\tkeyExtractor,\n\trenderItem,\n\thandleOnly = false,\n\tshowHandle = true,\n\tdisabled = false,\n\tclassName = '',\n\tstyle,\n}: DragSortListProps<T>) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\n\t// 拖拽核心状态\n\tconst [dragIndex, setDragIndex] = useState<number | null>(null);\n\tconst [hoverIndex, setHoverIndex] = useState<number | null>(null);\n\tconst [pointerCoord, setPointerCoord] = useState<{ x: number; y: number } | null>(null);\n\tconst [grabOffset, setGrabOffset] = useState<{ x: number; y: number }>({ x: 0, y: 0 });\n\tconst [dragItemRect, setDragItemRect] = useState<{ width: number; height: number } | null>(null);\n\n\tconst dragIndexRef = useRef<number | null>(null);\n\tconst hoverIndexRef = useRef<number | null>(null);\n\tconst itemsRef = useRef<T[]>(items);\n\n\tdragIndexRef.current = dragIndex;\n\thoverIndexRef.current = hoverIndex;\n\titemsRef.current = items;\n\n\t// 处理鼠标按下发起拖拽\n\tconst handlePointerDown = (\n\t\te: React.PointerEvent<HTMLElement>,\n\t\tindex: number,\n\t\tfromHandle: boolean,\n\t) => {\n\t\tif (disabled || e.button !== 0) return;\n\t\tif (handleOnly && !fromHandle) return;\n\n\t\tconst targetItemEl = e.currentTarget.closest('.rpc_drag_sort_list_item') as HTMLElement;\n\t\tif (!targetItemEl) return;\n\n\t\tconst rect = targetItemEl.getBoundingClientRect();\n\t\tconst offsetX = e.clientX - rect.left;\n\t\tconst offsetY = e.clientY - rect.top;\n\n\t\tsetGrabOffset({ x: offsetX, y: offsetY });\n\t\tsetDragItemRect({ width: rect.width, height: rect.height });\n\t\tsetPointerCoord({ x: e.clientX, y: e.clientY });\n\t\tsetDragIndex(index);\n\t\tsetHoverIndex(index);\n\n\t\tconst handlePointerMove = (moveEvent: PointerEvent) => {\n\t\t\tsetPointerCoord({ x: moveEvent.clientX, y: moveEvent.clientY });\n\n\t\t\tif (!containerRef.current) return;\n\t\t\tconst itemElements = Array.from(\n\t\t\t\tcontainerRef.current.querySelectorAll('.rpc_drag_sort_list_item'),\n\t\t\t) as HTMLElement[];\n\n\t\t\tif (itemElements.length === 0) return;\n\n\t\t\tconst pointerY = moveEvent.clientY;\n\t\t\tlet newHoverIndex = dragIndexRef.current ?? 0;\n\n\t\t\t// 精确检测鼠标当前所处的列表项插槽\n\t\t\tfor (let i = 0; i < itemElements.length; i++) {\n\t\t\t\tconst elRect = itemElements[i].getBoundingClientRect();\n\t\t\t\tif (pointerY >= elRect.top && pointerY <= elRect.bottom) {\n\t\t\t\t\tnewHoverIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (pointerY < itemElements[0].getBoundingClientRect().top) {\n\t\t\t\t\tnewHoverIndex = 0;\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (\n\t\t\t\t\tpointerY > itemElements[itemElements.length - 1].getBoundingClientRect().bottom\n\t\t\t\t) {\n\t\t\t\t\tnewHoverIndex = itemElements.length - 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (newHoverIndex !== hoverIndexRef.current) {\n\t\t\t\tsetHoverIndex(newHoverIndex);\n\t\t\t}\n\t\t};\n\n\t\tconst handlePointerUp = () => {\n\t\t\twindow.removeEventListener('pointermove', handlePointerMove);\n\t\t\twindow.removeEventListener('pointerup', handlePointerUp);\n\n\t\t\tconst from = dragIndexRef.current;\n\t\t\tconst to = hoverIndexRef.current;\n\t\t\tconst currentList = itemsRef.current;\n\n\t\t\tif (\n\t\t\t\tfrom !== null &&\n\t\t\t\tto !== null &&\n\t\t\t\tfrom !== to &&\n\t\t\t\tfrom >= 0 &&\n\t\t\t\tto >= 0 &&\n\t\t\t\tfrom < currentList.length &&\n\t\t\t\tto < currentList.length\n\t\t\t) {\n\t\t\t\tconst reorderedList = arrayMove(currentList, from, to);\n\t\t\t\tonReorder(reorderedList, from, to);\n\t\t\t}\n\n\t\t\tsetDragIndex(null);\n\t\t\tsetHoverIndex(null);\n\t\t\tsetPointerCoord(null);\n\t\t\tsetDragItemRect(null);\n\t\t};\n\n\t\twindow.addEventListener('pointermove', handlePointerMove);\n\t\twindow.addEventListener('pointerup', handlePointerUp);\n\t};\n\n\t// 动态计算实时预览重排后的列表\n\tconst displayItems =\n\t\tdragIndex !== null && hoverIndex !== null && dragIndex !== hoverIndex\n\t\t\t? arrayMove(items, dragIndex, hoverIndex)\n\t\t\t: items;\n\n\tconst draggedItemData = dragIndex !== null ? items[dragIndex] : null;\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\tref={containerRef}\n\t\t\t\tclassName={`rpc_drag_sort_list ${disabled ? 'rpc_drag_sort_list_disabled' : ''} ${className}`}\n\t\t\t\tstyle={style}\n\t\t\t>\n\t\t\t\t{displayItems.map((item, idx) => {\n\t\t\t\t\tconst key = keyExtractor(item, idx);\n\t\t\t\t\tconst isCurrentPlaceholder = dragIndex !== null && hoverIndex === idx;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\tonPointerDown={(e) => handlePointerDown(e, idx, false)}\n\t\t\t\t\t\t\tclassName={`rpc_drag_sort_list_item ${\n\t\t\t\t\t\t\t\tisCurrentPlaceholder ? 'rpc_drag_sort_list_item_placeholder' : ''\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\theight: isCurrentPlaceholder && dragItemRect ? dragItemRect.height : undefined,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{/* 当作为占位槽展示时,显示虚线卡槽 */}\n\t\t\t\t\t\t\t{isCurrentPlaceholder ? (\n\t\t\t\t\t\t\t\t<div className=\"rpc_drag_sort_list_placeholder_inner\">\n\t\t\t\t\t\t\t\t\t<div className=\"rpc_drag_sort_list_placeholder_line\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{showHandle && (\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"rpc_drag_sort_list_handle\"\n\t\t\t\t\t\t\t\t\t\t\tonPointerDown={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (handleOnly) {\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\thandlePointerDown(e, idx, true);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\ttitle={disabled ? undefined : '按住拖动以重排序'}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<HolderOutlined />\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t<div className=\"rpc_drag_sort_list_content\">{renderItem(item, idx, false)}</div>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t{/* 浮动随动幽灵卡片(全局悬浮脱离文档流,100% 顺畅跟手,绝对 0 跳动) */}\n\t\t\t{dragIndex !== null &&\n\t\t\t\tpointerCoord &&\n\t\t\t\tdragItemRect &&\n\t\t\t\tdraggedItemData &&\n\t\t\t\ttypeof document !== 'undefined' &&\n\t\t\t\tReactDOM.createPortal(\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"rpc_drag_sort_list_floating_ghost\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: pointerCoord.x - grabOffset.x,\n\t\t\t\t\t\t\ttop: pointerCoord.y - grabOffset.y,\n\t\t\t\t\t\t\twidth: dragItemRect.width,\n\t\t\t\t\t\t\theight: dragItemRect.height,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{showHandle && (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName=\"rpc_drag_sort_list_handle\"\n\t\t\t\t\t\t\t\tstyle={{ cursor: 'grabbing', color: '#1677ff' }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<HolderOutlined />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<div className=\"rpc_drag_sort_list_content\" style={{ flex: 1 }}>\n\t\t\t\t\t\t\t{renderItem(draggedItemData, dragIndex, true)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)}\n\t\t</>\n\t);\n}\n\nexport default DragSortList;\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');
@@ -230,7 +230,7 @@ var ImageCropper = react.forwardRef(
230
230
  onClick: () => handleZoom(0.1),
231
231
  title: "\u653E\u5927",
232
232
  children: [
233
- /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.ZoomInOutlined, {}),
233
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.ZoomInOutlined, {}),
234
234
  " \u653E\u5927"
235
235
  ]
236
236
  }
@@ -243,7 +243,7 @@ var ImageCropper = react.forwardRef(
243
243
  onClick: () => handleZoom(-0.1),
244
244
  title: "\u7F29\u5C0F",
245
245
  children: [
246
- /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.ZoomOutOutlined, {}),
246
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.ZoomOutOutlined, {}),
247
247
  " \u7F29\u5C0F"
248
248
  ]
249
249
  }
@@ -256,7 +256,7 @@ var ImageCropper = react.forwardRef(
256
256
  onClick: () => handleRotate(90),
257
257
  title: "\u987A\u65F6\u9488\u65CB\u8F6C90\xB0",
258
258
  children: [
259
- /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.RotateRightOutlined, {}),
259
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.RotateRightOutlined, {}),
260
260
  " \u65CB\u8F6C"
261
261
  ]
262
262
  }
@@ -279,7 +279,7 @@ var ImageCropper = react.forwardRef(
279
279
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rpc_cropper_modal", onClick: onCancel, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rpc_cropper_modal_card", onClick: (e) => e.stopPropagation(), children: [
280
280
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rpc_cropper_modal_header", children: [
281
281
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: title }),
282
- /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.CloseOutlined, { className: "rpc_cropper_modal_close", onClick: onCancel })
282
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.CloseOutlined, { className: "rpc_cropper_modal_close", onClick: onCancel })
283
283
  ] }),
284
284
  /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: 16, background: "#141414" }, children: coreContent }),
285
285
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rpc_cropper_modal_footer", children: [
@@ -300,7 +300,7 @@ var ImageCropper = react.forwardRef(
300
300
  className: "rpc_image_cropper_btn rpc_image_cropper_btn_primary",
301
301
  onClick: handleConfirm,
302
302
  children: [
303
- /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.CheckOutlined, {}),
303
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.CheckOutlined, {}),
304
304
  " \u786E\u5B9A\u88C1\u526A"
305
305
  ]
306
306
  }
@@ -317,5 +317,5 @@ ImageCropper.displayName = "ImageCropper";
317
317
  var ImageCropper_default = ImageCropper;
318
318
 
319
319
  exports.ImageCropper_default = ImageCropper_default;
320
- //# sourceMappingURL=chunk-VJOO2DG3.cjs.map
321
- //# sourceMappingURL=chunk-VJOO2DG3.cjs.map
320
+ //# sourceMappingURL=chunk-7NXCDDBT.cjs.map
321
+ //# sourceMappingURL=chunk-7NXCDDBT.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../ImageCropper/index.tsx"],"names":["forwardRef","useRef","useState","useEffect","useCallback","cropBox","useImperativeHandle","jsxs","jsx","ZoomInOutlined","ZoomOutOutlined","RotateRightOutlined","ReactDOM","CloseOutlined","CheckOutlined"],"mappings":"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","file":"chunk-VJOO2DG3.cjs","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":["forwardRef","useRef","useState","useEffect","useCallback","cropBox","useImperativeHandle","jsxs","jsx","ZoomInOutlined","ZoomOutOutlined","RotateRightOutlined","ReactDOM","CloseOutlined","CheckOutlined"],"mappings":"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","file":"chunk-7NXCDDBT.cjs","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"]}
@@ -189,5 +189,5 @@ LazyLoadBox.displayName = "LazyLoadBox";
189
189
  var LazyLoadBox_default = LazyLoadBox;
190
190
 
191
191
  export { LazyLoadBox, LazyLoadBox_default };
192
- //# sourceMappingURL=chunk-VYPIRVL4.js.map
193
- //# sourceMappingURL=chunk-VYPIRVL4.js.map
192
+ //# sourceMappingURL=chunk-7W7PCWMM.js.map
193
+ //# sourceMappingURL=chunk-7W7PCWMM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../LazyLoadBox/index.tsx"],"names":[],"mappings":"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","file":"chunk-7W7PCWMM.js","sourcesContent":["import React, {\n\tuseState,\n\tuseEffect,\n\tuseRef,\n\tuseImperativeHandle,\n\tforwardRef,\n\tCSSProperties,\n\tReactNode,\n\tRefObject,\n} from 'react';\nimport './index.less';\n\nexport interface LazyLoadBoxRef {\n\t/** 立即强制触发加载真实内容 */\n\tload: () => void;\n\t/** 重置加载状态(仅在 once=false 或需要重新触发时可用) */\n\treset: () => void;\n\t/** 获取当前元素是否在可视/预加载区域内 */\n\tgetInView: () => boolean;\n\t/** 获取当前是否已经完成过加载 */\n\tgetHasLoaded: () => boolean;\n\t/** 获取容器原生 DOM 节点 */\n\tgetDOMNode: () => HTMLDivElement | null;\n}\n\nexport interface LazyRenderProps {\n\t/** 当前是否在视口范围内 */\n\tisInView: boolean;\n\t/** 是否已经触发过加载并完成挂载 */\n\thasLoaded: boolean;\n\t/** 重新触发加载函数 */\n\tload: () => void;\n}\n\nexport type LazyOffset =\n\t| number\n\t| string\n\t| [number | string, number | string]\n\t| [number | string, number | string, number | string, number | string];\n\nexport interface LazyLoadBoxProps {\n\t/**\n\t * 子组件或 Render Props\n\t * 当为普通组件时:未进入视口时不渲染,进入视口预加载范围后挂载并触发其内部网络请求与渲染;\n\t * 当为函数时:接收 ({ isInView, hasLoaded, load }) 回传参数\n\t */\n\tchildren?: ReactNode | ((props: LazyRenderProps) => ReactNode);\n\t/**\n\t * 距离视口/滚动条多远时提前触发加载(单位 px,或标准 rootMargin 字符串/数组)\n\t * 例如:\n\t * - 纯数字:offset={200} (表示上下预加载 200px)\n\t * - 字符串:offset=\"200px 0px\"\n\t * - 数组:offset={[100, 200]} (表示上下预加载距离)\n\t * 默认:150\n\t */\n\toffset?: LazyOffset;\n\t/**\n\t * 未加载前的预估高度/最小高度,防止页面未渲染时高度坍塌导致滚动条剧烈跳动(CLS)\n\t * 默认:180\n\t */\n\theight?: number | string;\n\t/**\n\t * 预估宽度/最小宽度(可选)\n\t */\n\twidth?: number | string;\n\t/**\n\t * 未加载时显示的占位内容(如骨架屏或加载动画)\n\t * 默认提供内置的高品质流光呼吸骨架屏\n\t */\n\tplaceholder?: ReactNode;\n\t/**\n\t * 是否显示默认占位骨架屏(当 placeholder 未指定时生效)\n\t * 默认:true\n\t */\n\tskeleton?: boolean;\n\t/**\n\t * 骨架屏是否显示微边框\n\t * 默认:false\n\t */\n\tbordered?: boolean;\n\t/**\n\t * 是否只加载一次(默认 true:进入视口后保持挂载,移出不会销毁与重复请求)\n\t * 若设为 false,则移出视口时会自动卸载,再次移入时重新挂载\n\t */\n\tonce?: boolean;\n\t/**\n\t * 强制立即渲染(忽略视口距离,用于一键展开、批量导出、页面打印等场景)\n\t */\n\tforceRender?: boolean;\n\t/**\n\t * 指定局部滚动容器(支持 DOM 节点、RefObject、选择器字符串或 getter 函数),默认监听 window 视口\n\t */\n\tscrollContainer?:\n\t\tHTMLElement | null | string | RefObject<HTMLElement | null> | (() => HTMLElement | null);\n\t/**\n\t * 交叉比例阈值(0 ~ 1),默认 0\n\t */\n\tthreshold?: number | number[];\n\t/**\n\t * 是否在加载完成后启用平滑淡入动效\n\t * 默认:true\n\t */\n\tanimate?: boolean;\n\t/**\n\t * 服务端渲染(SSR)时是否直接渲染内容(默认为 false)\n\t */\n\tssr?: boolean;\n\t/**\n\t * 首次进入可视/预加载区域触发加载时的回调\n\t */\n\tonVisible?: () => void;\n\t/**\n\t * 可见性变化时的实时回调\n\t */\n\tonInViewChange?: (inView: boolean) => void;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\n/** 规范化 offset 为标准 CSS 4 方向 rootMargin 字符串 */\nfunction parseRootMargin(offset: LazyOffset): string {\n\tif (typeof offset === 'number') {\n\t\treturn `${offset}px 0px ${offset}px 0px`;\n\t}\n\tif (typeof offset === 'string') {\n\t\treturn offset;\n\t}\n\tif (Array.isArray(offset)) {\n\t\tif (offset.length === 2) {\n\t\t\tconst [v, h] = offset.map((item) => (typeof item === 'number' ? `${item}px` : item));\n\t\t\treturn `${v} ${h} ${v} ${h}`;\n\t\t}\n\t\tif (offset.length === 4) {\n\t\t\treturn offset.map((item) => (typeof item === 'number' ? `${item}px` : item)).join(' ');\n\t\t}\n\t}\n\treturn '150px 0px 150px 0px';\n}\n\nexport const LazyLoadBox = forwardRef<LazyLoadBoxRef, LazyLoadBoxProps>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\toffset = 150,\n\t\t\theight = 180,\n\t\t\twidth,\n\t\t\tplaceholder,\n\t\t\tskeleton = true,\n\t\t\tbordered = false,\n\t\t\tonce = true,\n\t\t\tforceRender = false,\n\t\t\tscrollContainer,\n\t\t\tthreshold = 0,\n\t\t\tanimate = true,\n\t\t\tssr = false,\n\t\t\tonVisible,\n\t\t\tonInViewChange,\n\t\t\tclassName = '',\n\t\t\tstyle,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst containerRef = useRef<HTMLDivElement | null>(null);\n\t\tconst [isInView, setIsInView] = useState<boolean>(Boolean(ssr || forceRender));\n\t\tconst [hasLoaded, setHasLoaded] = useState<boolean>(Boolean(ssr || forceRender));\n\t\tconst hasLoadedRef = useRef<boolean>(hasLoaded);\n\t\tconst onVisibleRef = useRef(onVisible);\n\t\tconst onInViewChangeRef = useRef(onInViewChange);\n\n\t\tonVisibleRef.current = onVisible;\n\t\tonInViewChangeRef.current = onInViewChange;\n\n\t\tconst rootMargin = parseRootMargin(offset);\n\n\t\tconst triggerLoad = () => {\n\t\t\tif (!hasLoadedRef.current) {\n\t\t\t\tsetHasLoaded(true);\n\t\t\t\tsetIsInView(true);\n\t\t\t\thasLoadedRef.current = true;\n\t\t\t\tonVisibleRef.current?.();\n\t\t\t}\n\t\t};\n\n\t\t// 暴露命令式操作方法\n\t\tuseImperativeHandle(ref, () => ({\n\t\t\tload: triggerLoad,\n\t\t\treset: () => {\n\t\t\t\tsetHasLoaded(false);\n\t\t\t\tsetIsInView(false);\n\t\t\t\thasLoadedRef.current = false;\n\t\t\t},\n\t\t\tgetInView: () => isInView,\n\t\t\tgetHasLoaded: () => hasLoadedRef.current,\n\t\t\tgetDOMNode: () => containerRef.current,\n\t\t}));\n\n\t\t// 响应 forceRender 受控属性变化\n\t\tuseEffect(() => {\n\t\t\tif (forceRender && !hasLoadedRef.current) {\n\t\t\t\ttriggerLoad();\n\t\t\t}\n\t\t}, [forceRender]);\n\n\t\tuseEffect(() => {\n\t\t\t// 如果已经加载且 once 为 true,则无需挂载 Observer\n\t\t\tif (hasLoaded && once) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst target = containerRef.current;\n\t\t\tif (!target) return;\n\n\t\t\t// 环境不支持 IntersectionObserver,降级为立即加载\n\t\t\tif (typeof window === 'undefined' || !('IntersectionObserver' in window)) {\n\t\t\t\ttriggerLoad();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// 解析 scrollContainer 根节点\n\t\t\tlet rootElement: HTMLElement | null = null;\n\t\t\tif (typeof scrollContainer === 'string') {\n\t\t\t\trootElement = document.querySelector(scrollContainer);\n\t\t\t} else if (typeof scrollContainer === 'function') {\n\t\t\t\trootElement = scrollContainer();\n\t\t\t} else if (scrollContainer && 'current' in scrollContainer) {\n\t\t\t\trootElement = (scrollContainer as RefObject<HTMLElement | null>).current;\n\t\t\t} else if (scrollContainer instanceof HTMLElement) {\n\t\t\t\trootElement = scrollContainer;\n\t\t\t}\n\n\t\t\tlet observer: IntersectionObserver | null = null;\n\n\t\t\ttry {\n\t\t\t\tobserver = new IntersectionObserver(\n\t\t\t\t\t(entries) => {\n\t\t\t\t\t\tentries.forEach((entry) => {\n\t\t\t\t\t\t\tconst inView = entry.isIntersecting;\n\t\t\t\t\t\t\tsetIsInView(inView);\n\t\t\t\t\t\t\tonInViewChangeRef.current?.(inView);\n\n\t\t\t\t\t\t\tif (inView) {\n\t\t\t\t\t\t\t\tif (!hasLoadedRef.current) {\n\t\t\t\t\t\t\t\t\tsetHasLoaded(true);\n\t\t\t\t\t\t\t\t\thasLoadedRef.current = true;\n\t\t\t\t\t\t\t\t\tonVisibleRef.current?.();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (once) {\n\t\t\t\t\t\t\t\t\tobserver?.unobserve(target);\n\t\t\t\t\t\t\t\t\tobserver?.disconnect();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (!once) {\n\t\t\t\t\t\t\t\t\tsetHasLoaded(false);\n\t\t\t\t\t\t\t\t\thasLoadedRef.current = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\troot: rootElement,\n\t\t\t\t\t\trootMargin,\n\t\t\t\t\t\tthreshold,\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tobserver.observe(target);\n\t\t\t} catch {\n\t\t\t\t// 如果传参格式或环境发生意外,安全降级立即触发\n\t\t\t\ttriggerLoad();\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\tif (observer) {\n\t\t\t\t\tobserver.unobserve(target);\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t}\n\t\t\t};\n\t\t}, [rootMargin, threshold, once, hasLoaded, scrollContainer]);\n\n\t\tconst formattedHeight = typeof height === 'number' ? `${height}px` : height;\n\t\tconst formattedWidth = typeof width === 'number' ? `${width}px` : width;\n\n\t\t// 默认骨架占位\n\t\tconst defaultPlaceholder = skeleton ? (\n\t\t\t<div\n\t\t\t\tclassName={`rpc_lazy_load_placeholder ${bordered ? 'rpc_lazy_load_placeholder_bordered' : ''}`}\n\t\t\t\tstyle={{\n\t\t\t\t\tminHeight: formattedHeight,\n\t\t\t\t\twidth: formattedWidth,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div className=\"rpc_lazy_load_skeleton\" />\n\t\t\t</div>\n\t\t) : (\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tminHeight: formattedHeight,\n\t\t\t\t\twidth: formattedWidth,\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\n\t\tconst shouldRenderContent = hasLoaded || (once ? hasLoaded : isInView);\n\n\t\tconst containerClass = [\n\t\t\t'rpc_lazy_load_box',\n\t\t\tshouldRenderContent ? 'rpc_lazy_load_loaded' : 'rpc_lazy_load_pending',\n\t\t\tanimate && shouldRenderContent ? 'rpc_lazy_load_fade_in' : '',\n\t\t\tclassName,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={containerRef}\n\t\t\t\tclassName={containerClass}\n\t\t\t\tstyle={{\n\t\t\t\t\tminHeight: shouldRenderContent ? undefined : formattedHeight,\n\t\t\t\t\twidth: formattedWidth,\n\t\t\t\t\t...style,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{shouldRenderContent\n\t\t\t\t\t? typeof children === 'function'\n\t\t\t\t\t\t? (children as (props: LazyRenderProps) => ReactNode)({\n\t\t\t\t\t\t\t\tisInView,\n\t\t\t\t\t\t\t\thasLoaded,\n\t\t\t\t\t\t\t\tload: triggerLoad,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: children\n\t\t\t\t\t: placeholder !== undefined\n\t\t\t\t\t\t? placeholder\n\t\t\t\t\t\t: defaultPlaceholder}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nLazyLoadBox.displayName = 'LazyLoadBox';\n\nexport default LazyLoadBox;\n"]}
@@ -1,7 +1,8 @@
1
- import { useId } from 'react';
1
+ import { useRef } from 'react';
2
2
  import { jsx, jsxs } from 'react/jsx-runtime';
3
3
 
4
4
  // MiniSparkline/index.tsx
5
+ var sparklineIdCounter = 0;
5
6
  var MiniSparkline = ({
6
7
  data = [],
7
8
  color = "#1677ff",
@@ -11,7 +12,12 @@ var MiniSparkline = ({
11
12
  className = "",
12
13
  style
13
14
  }) => {
14
- const gradientId = useId();
15
+ const idRef = useRef();
16
+ if (!idRef.current) {
17
+ sparklineIdCounter += 1;
18
+ idRef.current = `rpc_sparkline_grad_${sparklineIdCounter}`;
19
+ }
20
+ const gradientId = idRef.current;
15
21
  if (data.length < 2) return null;
16
22
  const min = Math.min(...data);
17
23
  const max = Math.max(...data);
@@ -38,5 +44,5 @@ var MiniSparkline = ({
38
44
  var MiniSparkline_default = MiniSparkline;
39
45
 
40
46
  export { MiniSparkline_default };
41
- //# sourceMappingURL=chunk-NNS4YN3C.js.map
42
- //# sourceMappingURL=chunk-NNS4YN3C.js.map
47
+ //# sourceMappingURL=chunk-B3FMPSBM.js.map
48
+ //# sourceMappingURL=chunk-B3FMPSBM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../MiniSparkline/index.tsx"],"names":[],"mappings":"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","file":"chunk-B3FMPSBM.js","sourcesContent":["import React, { useRef, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface MiniSparklineProps {\n\t/** 数值序列 */\n\tdata: number[];\n\t/** 折线与填充主题色,默认为 '#1677ff' */\n\tcolor?: string;\n\t/** 是否展示面积渐变填充,默认为 true */\n\tfill?: boolean;\n\t/** 宽度(像素),默认为 80 */\n\twidth?: number;\n\t/** 高度(像素),默认为 28 */\n\theight?: number;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nlet sparklineIdCounter = 0;\n\nconst MiniSparkline: React.FC<MiniSparklineProps> = ({\n\tdata = [],\n\tcolor = '#1677ff',\n\tfill = true,\n\twidth = 80,\n\theight = 28,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst idRef = useRef<string>();\n\tif (!idRef.current) {\n\t\tsparklineIdCounter += 1;\n\t\tidRef.current = `rpc_sparkline_grad_${sparklineIdCounter}`;\n\t}\n\tconst gradientId = idRef.current;\n\n\tif (data.length < 2) return null;\n\n\tconst min = Math.min(...data);\n\tconst max = Math.max(...data);\n\tconst range = max - min || 1;\n\tconst padding = 2;\n\n\tconst points = data.map((val, idx) => {\n\t\tconst x = padding + (idx / (data.length - 1)) * (width - padding * 2);\n\t\tconst y = height - padding - ((val - min) / range) * (height - padding * 2);\n\t\treturn { x, y };\n\t});\n\n\tconst linePath = points.reduce((acc, pt, idx) => {\n\t\treturn idx === 0 ? `M ${pt.x} ${pt.y}` : `${acc} L ${pt.x} ${pt.y}`;\n\t}, '');\n\n\tconst areaPath = `${linePath} L ${points[points.length - 1].x} ${height} L ${points[0].x} ${height} Z`;\n\n\treturn (\n\t\t<div className={`rpc_mini_sparkline ${className}`} style={style}>\n\t\t\t<svg width={width} height={height}>\n\t\t\t\t<defs>\n\t\t\t\t\t<linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n\t\t\t\t\t\t<stop offset=\"0%\" stopColor={color} stopOpacity=\"0.25\" />\n\t\t\t\t\t\t<stop offset=\"100%\" stopColor={color} stopOpacity=\"0.0\" />\n\t\t\t\t\t</linearGradient>\n\t\t\t\t</defs>\n\n\t\t\t\t{fill && <path d={areaPath} fill={`url(#${gradientId})`} />}\n\t\t\t\t<path d={linePath} fill=\"none\" stroke={color} strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n\t\t\t</svg>\n\t\t</div>\n\t);\n};\n\nexport default MiniSparkline;\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 jsxRuntime = require('react/jsx-runtime');
6
6
 
@@ -83,7 +83,7 @@ var KeyValEditor = ({
83
83
  }
84
84
  },
85
85
  title: item.isSecret ? "\u5207\u6362\u663E\u793A/\u9690\u85CF" : "\u8BBE\u4E3A\u654F\u611F\u5BC6\u7801",
86
- children: item.isSecret ? visibleSecrets[index] ? /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.EyeOutlined, {}) : /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.EyeInvisibleOutlined, {}) : /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 11, color: "#8c8c8c" }, children: "\u{1F512}" })
86
+ children: item.isSecret ? visibleSecrets[index] ? /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.EyeOutlined, {}) : /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.EyeInvisibleOutlined, {}) : /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 11, color: "#8c8c8c" }, children: "\u{1F512}" })
87
87
  }
88
88
  ),
89
89
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -93,7 +93,7 @@ var KeyValEditor = ({
93
93
  className: "rpc_key_val_editor_btn_icon",
94
94
  onClick: () => handleDelete(index),
95
95
  title: "\u5220\u9664\u6B64\u884C",
96
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.CloseOutlined, {})
96
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkQMLDK2DL_cjs.CloseOutlined, {})
97
97
  }
98
98
  )
99
99
  ] }, index);
@@ -104,5 +104,5 @@ var KeyValEditor = ({
104
104
  var KeyValEditor_default = KeyValEditor;
105
105
 
106
106
  exports.KeyValEditor_default = KeyValEditor_default;
107
- //# sourceMappingURL=chunk-TUEVILTA.cjs.map
108
- //# sourceMappingURL=chunk-TUEVILTA.cjs.map
107
+ //# sourceMappingURL=chunk-BKHKPZ6O.cjs.map
108
+ //# sourceMappingURL=chunk-BKHKPZ6O.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../KeyValEditor/index.tsx"],"names":["useState","jsxs","jsx","EyeOutlined","EyeInvisibleOutlined","CloseOutlined"],"mappings":";;;;;;AA8BA,IAAM,eAA4C,CAAC;AAAA,EAClD,KAAA,EAAO,eAAA;AAAA,EACP,YAAA,GAAe,CAAC,EAAE,GAAA,EAAK,IAAI,KAAA,EAAO,EAAA,EAAI,OAAA,EAAS,IAAA,EAAM,CAAA;AAAA,EACrD,QAAA;AAAA,EACA,cAAA,GAAiB,kBAAA;AAAA,EACjB,cAAA,GAAiB,oBAAA;AAAA,EACjB,WAAA,GAAc,IAAA;AAAA,EACd,SAAA,GAAY,EAAA;AAAA,EACZ;AACD,CAAA,KAAM;AACL,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAuB,YAAY,CAAA;AACzE,EAAA,MAAM,KAAA,GAAQ,eAAA,KAAoB,MAAA,GAAY,eAAA,GAAkB,WAAA;AAEhE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,cAAA,CAAkC,EAAE,CAAA;AAEhF,EAAA,MAAM,aAAA,GAAgB,CAAC,QAAA,KAA2B;AACjD,IAAA,IAAI,eAAA,KAAoB,MAAA,EAAW,cAAA,CAAe,QAAQ,CAAA;AAC1D,IAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,QAAA,CAAA;AAAA,EACZ,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,EAAe,KAAA,EAAyB,GAAA,KAAa;AAC9E,IAAA,MAAM,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,MAAO,CAAA,KAAM,KAAA,GAAQ,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,GAAA,KAAQ,IAAK,CAAA;AACpF,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,YAAY,MAAM;AACvB,IAAA,aAAA,CAAc,CAAC,GAAG,KAAA,EAAO,EAAE,GAAA,EAAK,EAAA,EAAI,KAAA,EAAO,EAAA,EAAI,OAAA,EAAS,IAAA,EAAM,CAAC,CAAA;AAAA,EAChE,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAkB;AACvC,IAAA,aAAA,CAAc,MAAM,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,KAAM,KAAK,CAAC,CAAA;AAAA,EAClD,CAAA;AAEA,EAAA,MAAM,sBAAA,GAAyB,CAAC,KAAA,KAAkB;AACjD,IAAA,iBAAA,CAAkB,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,CAAC,KAAK,GAAG,CAAC,IAAA,CAAK,KAAK,CAAA,EAAE,CAAE,CAAA;AAAA,EACjE,CAAA;AAEA,EAAA,uCACE,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,mBAAA,EAAsB,SAAS,IAAI,KAAA,EACjD,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU;AAC3B,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,CAAC,eAAe,KAAK,CAAA;AAEvD,MAAA,uBACCC,eAAA,CAAC,KAAA,EAAA,EAAgB,SAAA,EAAU,wBAAA,EAE1B,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,UAAA;AAAA,YACL,OAAA,EAAS,KAAK,OAAA,KAAY,KAAA;AAAA,YAC1B,QAAA,EAAU,CAAC,CAAA,KAAM,gBAAA,CAAiB,OAAO,SAAA,EAAW,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,YACpE,SAAA,EAAU,6BAAA;AAAA,YACV,KAAA,EAAM;AAAA;AAAA,SACP;AAAA,wBAGAA,cAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,MAAA;AAAA,YACL,WAAA,EAAa,cAAA;AAAA,YACb,OAAO,IAAA,CAAK,GAAA;AAAA,YACZ,QAAA,EAAU,KAAK,OAAA,KAAY,KAAA;AAAA,YAC3B,QAAA,EAAU,CAAC,CAAA,KAAM,gBAAA,CAAiB,OAAO,KAAA,EAAO,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC9D,SAAA,EAAU;AAAA;AAAA,SACX;AAAA,wBAGAA,cAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAM,WAAW,UAAA,GAAa,MAAA;AAAA,YAC9B,WAAA,EAAa,cAAA;AAAA,YACb,OAAO,IAAA,CAAK,KAAA;AAAA,YACZ,QAAA,EAAU,KAAK,OAAA,KAAY,KAAA;AAAA,YAC3B,QAAA,EAAU,CAAC,CAAA,KAAM,gBAAA,CAAiB,OAAO,OAAA,EAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAChE,SAAA,EAAU;AAAA;AAAA,SACX;AAAA,QAGC,WAAA,oBACAA,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAU,6BAAA;AAAA,YACV,SAAS,MAAM;AACd,cAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AACnB,gBAAA,gBAAA,CAAiB,KAAA,EAAO,YAAY,IAAI,CAAA;AAAA,cACzC,CAAA,MAAO;AACN,gBAAA,sBAAA,CAAuB,KAAK,CAAA;AAAA,cAC7B;AAAA,YACD,CAAA;AAAA,YACA,KAAA,EAAO,IAAA,CAAK,QAAA,GAAW,uCAAA,GAAY,sCAAA;AAAA,YAElC,QAAA,EAAA,IAAA,CAAK,WACL,cAAA,CAAe,KAAK,oBACnBA,cAAA,CAACC,6BAAA,EAAA,EAAY,oBAEbD,cAAA,CAACE,sCAAA,EAAA,EAAqB,oBAGvBF,cAAA,CAAC,MAAA,EAAA,EAAK,OAAO,EAAE,QAAA,EAAU,IAAI,KAAA,EAAO,SAAA,IAAa,QAAA,EAAA,WAAA,EAAE;AAAA;AAAA,SAErD;AAAA,wBAIDA,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAU,6BAAA;AAAA,YACV,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,YACjC,KAAA,EAAM,0BAAA;AAAA,YAEN,yCAACG,+BAAA,EAAA,EAAc;AAAA;AAAA;AAChB,OAAA,EAAA,EAhES,KAiEV,CAAA;AAAA,IAEF,CAAC,CAAA;AAAA,oBAEDH,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACd,QAAA,kBAAAA,cAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,4BAAA,EAA6B,OAAA,EAAS,SAAA,EAAW,8CAEjF,CAAA,EACD;AAAA,GAAA,EACD,CAAA;AAEF,CAAA;AAEA,IAAO,oBAAA,GAAQ","file":"chunk-TUEVILTA.cjs","sourcesContent":["import React, { useState, CSSProperties } from 'react';\nimport { CloseOutlined, EyeOutlined, EyeInvisibleOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface KeyValItem {\n\tkey: string;\n\tvalue: string;\n\tenabled?: boolean;\n\tisSecret?: boolean;\n}\n\nexport interface KeyValEditorProps {\n\t/** 键值对数组(受控) */\n\tvalue?: KeyValItem[];\n\t/** 默认键值对数组 */\n\tdefaultValue?: KeyValItem[];\n\t/** 变化回调 */\n\tonChange?: (items: KeyValItem[]) => void;\n\t/** Key 输入框占位文案,默认为 'Key 键名' */\n\tkeyPlaceholder?: string;\n\t/** Value 输入框占位文案,默认为 'Value 键值' */\n\tvalPlaceholder?: string;\n\t/** 是否允许配置 Secret 密码掩码,默认为 true */\n\tallowSecret?: boolean;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst KeyValEditor: React.FC<KeyValEditorProps> = ({\n\tvalue: controlledValue,\n\tdefaultValue = [{ key: '', value: '', enabled: true }],\n\tonChange,\n\tkeyPlaceholder = 'Key 键名',\n\tvalPlaceholder = 'Value 键值',\n\tallowSecret = true,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalVal, setInternalVal] = useState<KeyValItem[]>(defaultValue);\n\tconst items = controlledValue !== undefined ? controlledValue : internalVal;\n\n\tconst [visibleSecrets, setVisibleSecrets] = useState<Record<number, boolean>>({});\n\n\tconst triggerChange = (newItems: KeyValItem[]) => {\n\t\tif (controlledValue === undefined) setInternalVal(newItems);\n\t\tonChange?.(newItems);\n\t};\n\n\tconst handleItemChange = (index: number, field: keyof KeyValItem, val: any) => {\n\t\tconst next = items.map((item, i) => (i === index ? { ...item, [field]: val } : item));\n\t\ttriggerChange(next);\n\t};\n\n\tconst handleAdd = () => {\n\t\ttriggerChange([...items, { key: '', value: '', enabled: true }]);\n\t};\n\n\tconst handleDelete = (index: number) => {\n\t\ttriggerChange(items.filter((_, i) => i !== index));\n\t};\n\n\tconst toggleSecretVisibility = (index: number) => {\n\t\tsetVisibleSecrets((prev) => ({ ...prev, [index]: !prev[index] }));\n\t};\n\n\treturn (\n\t\t<div className={`rpc_key_val_editor ${className}`} style={style}>\n\t\t\t{items.map((item, index) => {\n\t\t\t\tconst isSecret = item.isSecret && !visibleSecrets[index];\n\n\t\t\t\treturn (\n\t\t\t\t\t<div key={index} className=\"rpc_key_val_editor_row\">\n\t\t\t\t\t\t{/* 启用/禁用勾选 */}\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tchecked={item.enabled !== false}\n\t\t\t\t\t\t\tonChange={(e) => handleItemChange(index, 'enabled', e.target.checked)}\n\t\t\t\t\t\t\tclassName=\"rpc_key_val_editor_checkbox\"\n\t\t\t\t\t\t\ttitle=\"启用/禁用此条目\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Key 输入 */}\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tplaceholder={keyPlaceholder}\n\t\t\t\t\t\t\tvalue={item.key}\n\t\t\t\t\t\t\tdisabled={item.enabled === false}\n\t\t\t\t\t\t\tonChange={(e) => handleItemChange(index, 'key', e.target.value)}\n\t\t\t\t\t\t\tclassName=\"rpc_key_val_editor_input\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Value 输入 */}\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype={isSecret ? 'password' : 'text'}\n\t\t\t\t\t\t\tplaceholder={valPlaceholder}\n\t\t\t\t\t\t\tvalue={item.value}\n\t\t\t\t\t\t\tdisabled={item.enabled === false}\n\t\t\t\t\t\t\tonChange={(e) => handleItemChange(index, 'value', e.target.value)}\n\t\t\t\t\t\t\tclassName=\"rpc_key_val_editor_input\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* 密码明文切换 */}\n\t\t\t\t\t\t{allowSecret && (\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_key_val_editor_btn_icon\"\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tif (!item.isSecret) {\n\t\t\t\t\t\t\t\t\t\thandleItemChange(index, 'isSecret', true);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\ttoggleSecretVisibility(index);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\ttitle={item.isSecret ? '切换显示/隐藏' : '设为敏感密码'}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.isSecret ? (\n\t\t\t\t\t\t\t\t\tvisibleSecrets[index] ? (\n\t\t\t\t\t\t\t\t\t\t<EyeOutlined />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<EyeInvisibleOutlined />\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<span style={{ fontSize: 11, color: '#8c8c8c' }}>🔒</span>\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\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_key_val_editor_btn_icon\"\n\t\t\t\t\t\t\tonClick={() => handleDelete(index)}\n\t\t\t\t\t\t\ttitle=\"删除此行\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CloseOutlined />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\n\t\t\t<div className=\"rpc_key_val_editor_footer\">\n\t\t\t\t<button type=\"button\" className=\"rpc_key_val_editor_add_btn\" onClick={handleAdd}>\n\t\t\t\t\t+ 添加键值对\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default KeyValEditor;\n"]}
1
+ {"version":3,"sources":["../KeyValEditor/index.tsx"],"names":["useState","jsxs","jsx","EyeOutlined","EyeInvisibleOutlined","CloseOutlined"],"mappings":";;;;;;AA8BA,IAAM,eAA4C,CAAC;AAAA,EAClD,KAAA,EAAO,eAAA;AAAA,EACP,YAAA,GAAe,CAAC,EAAE,GAAA,EAAK,IAAI,KAAA,EAAO,EAAA,EAAI,OAAA,EAAS,IAAA,EAAM,CAAA;AAAA,EACrD,QAAA;AAAA,EACA,cAAA,GAAiB,kBAAA;AAAA,EACjB,cAAA,GAAiB,oBAAA;AAAA,EACjB,WAAA,GAAc,IAAA;AAAA,EACd,SAAA,GAAY,EAAA;AAAA,EACZ;AACD,CAAA,KAAM;AACL,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAuB,YAAY,CAAA;AACzE,EAAA,MAAM,KAAA,GAAQ,eAAA,KAAoB,MAAA,GAAY,eAAA,GAAkB,WAAA;AAEhE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,cAAA,CAAkC,EAAE,CAAA;AAEhF,EAAA,MAAM,aAAA,GAAgB,CAAC,QAAA,KAA2B;AACjD,IAAA,IAAI,eAAA,KAAoB,MAAA,EAAW,cAAA,CAAe,QAAQ,CAAA;AAC1D,IAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,QAAA,CAAA;AAAA,EACZ,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,EAAe,KAAA,EAAyB,GAAA,KAAa;AAC9E,IAAA,MAAM,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,MAAO,CAAA,KAAM,KAAA,GAAQ,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,GAAA,KAAQ,IAAK,CAAA;AACpF,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,YAAY,MAAM;AACvB,IAAA,aAAA,CAAc,CAAC,GAAG,KAAA,EAAO,EAAE,GAAA,EAAK,EAAA,EAAI,KAAA,EAAO,EAAA,EAAI,OAAA,EAAS,IAAA,EAAM,CAAC,CAAA;AAAA,EAChE,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAkB;AACvC,IAAA,aAAA,CAAc,MAAM,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,KAAM,KAAK,CAAC,CAAA;AAAA,EAClD,CAAA;AAEA,EAAA,MAAM,sBAAA,GAAyB,CAAC,KAAA,KAAkB;AACjD,IAAA,iBAAA,CAAkB,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,CAAC,KAAK,GAAG,CAAC,IAAA,CAAK,KAAK,CAAA,EAAE,CAAE,CAAA;AAAA,EACjE,CAAA;AAEA,EAAA,uCACE,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,mBAAA,EAAsB,SAAS,IAAI,KAAA,EACjD,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU;AAC3B,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,CAAC,eAAe,KAAK,CAAA;AAEvD,MAAA,uBACCC,eAAA,CAAC,KAAA,EAAA,EAAgB,SAAA,EAAU,wBAAA,EAE1B,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,UAAA;AAAA,YACL,OAAA,EAAS,KAAK,OAAA,KAAY,KAAA;AAAA,YAC1B,QAAA,EAAU,CAAC,CAAA,KAAM,gBAAA,CAAiB,OAAO,SAAA,EAAW,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,YACpE,SAAA,EAAU,6BAAA;AAAA,YACV,KAAA,EAAM;AAAA;AAAA,SACP;AAAA,wBAGAA,cAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,MAAA;AAAA,YACL,WAAA,EAAa,cAAA;AAAA,YACb,OAAO,IAAA,CAAK,GAAA;AAAA,YACZ,QAAA,EAAU,KAAK,OAAA,KAAY,KAAA;AAAA,YAC3B,QAAA,EAAU,CAAC,CAAA,KAAM,gBAAA,CAAiB,OAAO,KAAA,EAAO,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC9D,SAAA,EAAU;AAAA;AAAA,SACX;AAAA,wBAGAA,cAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAM,WAAW,UAAA,GAAa,MAAA;AAAA,YAC9B,WAAA,EAAa,cAAA;AAAA,YACb,OAAO,IAAA,CAAK,KAAA;AAAA,YACZ,QAAA,EAAU,KAAK,OAAA,KAAY,KAAA;AAAA,YAC3B,QAAA,EAAU,CAAC,CAAA,KAAM,gBAAA,CAAiB,OAAO,OAAA,EAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAChE,SAAA,EAAU;AAAA;AAAA,SACX;AAAA,QAGC,WAAA,oBACAA,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAU,6BAAA;AAAA,YACV,SAAS,MAAM;AACd,cAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AACnB,gBAAA,gBAAA,CAAiB,KAAA,EAAO,YAAY,IAAI,CAAA;AAAA,cACzC,CAAA,MAAO;AACN,gBAAA,sBAAA,CAAuB,KAAK,CAAA;AAAA,cAC7B;AAAA,YACD,CAAA;AAAA,YACA,KAAA,EAAO,IAAA,CAAK,QAAA,GAAW,uCAAA,GAAY,sCAAA;AAAA,YAElC,QAAA,EAAA,IAAA,CAAK,WACL,cAAA,CAAe,KAAK,oBACnBA,cAAA,CAACC,6BAAA,EAAA,EAAY,oBAEbD,cAAA,CAACE,sCAAA,EAAA,EAAqB,oBAGvBF,cAAA,CAAC,MAAA,EAAA,EAAK,OAAO,EAAE,QAAA,EAAU,IAAI,KAAA,EAAO,SAAA,IAAa,QAAA,EAAA,WAAA,EAAE;AAAA;AAAA,SAErD;AAAA,wBAIDA,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAU,6BAAA;AAAA,YACV,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,YACjC,KAAA,EAAM,0BAAA;AAAA,YAEN,yCAACG,+BAAA,EAAA,EAAc;AAAA;AAAA;AAChB,OAAA,EAAA,EAhES,KAiEV,CAAA;AAAA,IAEF,CAAC,CAAA;AAAA,oBAEDH,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACd,QAAA,kBAAAA,cAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,4BAAA,EAA6B,OAAA,EAAS,SAAA,EAAW,8CAEjF,CAAA,EACD;AAAA,GAAA,EACD,CAAA;AAEF,CAAA;AAEA,IAAO,oBAAA,GAAQ","file":"chunk-BKHKPZ6O.cjs","sourcesContent":["import React, { useState, CSSProperties } from 'react';\nimport { CloseOutlined, EyeOutlined, EyeInvisibleOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface KeyValItem {\n\tkey: string;\n\tvalue: string;\n\tenabled?: boolean;\n\tisSecret?: boolean;\n}\n\nexport interface KeyValEditorProps {\n\t/** 键值对数组(受控) */\n\tvalue?: KeyValItem[];\n\t/** 默认键值对数组 */\n\tdefaultValue?: KeyValItem[];\n\t/** 变化回调 */\n\tonChange?: (items: KeyValItem[]) => void;\n\t/** Key 输入框占位文案,默认为 'Key 键名' */\n\tkeyPlaceholder?: string;\n\t/** Value 输入框占位文案,默认为 'Value 键值' */\n\tvalPlaceholder?: string;\n\t/** 是否允许配置 Secret 密码掩码,默认为 true */\n\tallowSecret?: boolean;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst KeyValEditor: React.FC<KeyValEditorProps> = ({\n\tvalue: controlledValue,\n\tdefaultValue = [{ key: '', value: '', enabled: true }],\n\tonChange,\n\tkeyPlaceholder = 'Key 键名',\n\tvalPlaceholder = 'Value 键值',\n\tallowSecret = true,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalVal, setInternalVal] = useState<KeyValItem[]>(defaultValue);\n\tconst items = controlledValue !== undefined ? controlledValue : internalVal;\n\n\tconst [visibleSecrets, setVisibleSecrets] = useState<Record<number, boolean>>({});\n\n\tconst triggerChange = (newItems: KeyValItem[]) => {\n\t\tif (controlledValue === undefined) setInternalVal(newItems);\n\t\tonChange?.(newItems);\n\t};\n\n\tconst handleItemChange = (index: number, field: keyof KeyValItem, val: any) => {\n\t\tconst next = items.map((item, i) => (i === index ? { ...item, [field]: val } : item));\n\t\ttriggerChange(next);\n\t};\n\n\tconst handleAdd = () => {\n\t\ttriggerChange([...items, { key: '', value: '', enabled: true }]);\n\t};\n\n\tconst handleDelete = (index: number) => {\n\t\ttriggerChange(items.filter((_, i) => i !== index));\n\t};\n\n\tconst toggleSecretVisibility = (index: number) => {\n\t\tsetVisibleSecrets((prev) => ({ ...prev, [index]: !prev[index] }));\n\t};\n\n\treturn (\n\t\t<div className={`rpc_key_val_editor ${className}`} style={style}>\n\t\t\t{items.map((item, index) => {\n\t\t\t\tconst isSecret = item.isSecret && !visibleSecrets[index];\n\n\t\t\t\treturn (\n\t\t\t\t\t<div key={index} className=\"rpc_key_val_editor_row\">\n\t\t\t\t\t\t{/* 启用/禁用勾选 */}\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tchecked={item.enabled !== false}\n\t\t\t\t\t\t\tonChange={(e) => handleItemChange(index, 'enabled', e.target.checked)}\n\t\t\t\t\t\t\tclassName=\"rpc_key_val_editor_checkbox\"\n\t\t\t\t\t\t\ttitle=\"启用/禁用此条目\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Key 输入 */}\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tplaceholder={keyPlaceholder}\n\t\t\t\t\t\t\tvalue={item.key}\n\t\t\t\t\t\t\tdisabled={item.enabled === false}\n\t\t\t\t\t\t\tonChange={(e) => handleItemChange(index, 'key', e.target.value)}\n\t\t\t\t\t\t\tclassName=\"rpc_key_val_editor_input\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Value 输入 */}\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype={isSecret ? 'password' : 'text'}\n\t\t\t\t\t\t\tplaceholder={valPlaceholder}\n\t\t\t\t\t\t\tvalue={item.value}\n\t\t\t\t\t\t\tdisabled={item.enabled === false}\n\t\t\t\t\t\t\tonChange={(e) => handleItemChange(index, 'value', e.target.value)}\n\t\t\t\t\t\t\tclassName=\"rpc_key_val_editor_input\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* 密码明文切换 */}\n\t\t\t\t\t\t{allowSecret && (\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_key_val_editor_btn_icon\"\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tif (!item.isSecret) {\n\t\t\t\t\t\t\t\t\t\thandleItemChange(index, 'isSecret', true);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\ttoggleSecretVisibility(index);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\ttitle={item.isSecret ? '切换显示/隐藏' : '设为敏感密码'}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.isSecret ? (\n\t\t\t\t\t\t\t\t\tvisibleSecrets[index] ? (\n\t\t\t\t\t\t\t\t\t\t<EyeOutlined />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<EyeInvisibleOutlined />\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<span style={{ fontSize: 11, color: '#8c8c8c' }}>🔒</span>\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\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_key_val_editor_btn_icon\"\n\t\t\t\t\t\t\tonClick={() => handleDelete(index)}\n\t\t\t\t\t\t\ttitle=\"删除此行\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CloseOutlined />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\n\t\t\t<div className=\"rpc_key_val_editor_footer\">\n\t\t\t\t<button type=\"button\" className=\"rpc_key_val_editor_add_btn\" onClick={handleAdd}>\n\t\t\t\t\t+ 添加键值对\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default KeyValEditor;\n"]}
@@ -1,4 +1,4 @@
1
- import { LoadingOutlined, CloseCircleFilled, DownOutlined, CheckOutlined } from './chunk-2IDVNTKR.js';
1
+ import { LoadingOutlined, CloseCircleFilled, DownOutlined, CheckOutlined } from './chunk-537T6BR3.js';
2
2
  import { useState, useRef, useMemo, useEffect } from 'react';
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
 
@@ -207,5 +207,5 @@ var DebounceSelect = ({
207
207
  var DebounceSelect_default = DebounceSelect;
208
208
 
209
209
  export { DebounceSelect_default };
210
- //# sourceMappingURL=chunk-AXPVN2OO.js.map
211
- //# sourceMappingURL=chunk-AXPVN2OO.js.map
210
+ //# sourceMappingURL=chunk-BXLUH6FE.js.map
211
+ //# sourceMappingURL=chunk-BXLUH6FE.js.map