react-public-components 1.2.1 → 1.2.3

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 (687) hide show
  1. package/dist/ActivityLog/index.cjs +9 -0
  2. package/dist/ActivityLog/index.cjs.map +1 -0
  3. package/dist/ActivityLog/index.css +117 -0
  4. package/dist/ActivityLog/index.css.map +1 -0
  5. package/dist/ActivityLog/index.d.ts +32 -0
  6. package/dist/ActivityLog/index.js +3 -0
  7. package/dist/ActivityLog/index.js.map +1 -0
  8. package/dist/AnnouncementBar/index.cjs +9 -0
  9. package/dist/AnnouncementBar/index.cjs.map +1 -0
  10. package/dist/AnnouncementBar/index.css +37 -0
  11. package/dist/AnnouncementBar/index.css.map +1 -0
  12. package/dist/AnnouncementBar/index.d.ts +18 -0
  13. package/dist/AnnouncementBar/index.js +3 -0
  14. package/dist/AnnouncementBar/index.js.map +1 -0
  15. package/dist/AudioPlayer/index.cjs +10 -0
  16. package/dist/AudioPlayer/index.cjs.map +1 -0
  17. package/dist/AudioPlayer/index.css +105 -0
  18. package/dist/AudioPlayer/index.css.map +1 -0
  19. package/dist/AudioPlayer/index.d.ts +18 -0
  20. package/dist/AudioPlayer/index.js +4 -0
  21. package/dist/AudioPlayer/index.js.map +1 -0
  22. package/dist/BadgeRibbon/index.cjs +9 -0
  23. package/dist/BadgeRibbon/index.cjs.map +1 -0
  24. package/dist/BadgeRibbon/index.css +48 -0
  25. package/dist/BadgeRibbon/index.css.map +1 -0
  26. package/dist/BadgeRibbon/index.d.ts +19 -0
  27. package/dist/BadgeRibbon/index.js +3 -0
  28. package/dist/BadgeRibbon/index.js.map +1 -0
  29. package/dist/BorderBeam/index.cjs +9 -0
  30. package/dist/BorderBeam/index.cjs.map +1 -0
  31. package/dist/BorderBeam/index.css +40 -0
  32. package/dist/BorderBeam/index.css.map +1 -0
  33. package/dist/BorderBeam/index.d.ts +24 -0
  34. package/dist/BorderBeam/index.js +3 -0
  35. package/dist/BorderBeam/index.js.map +1 -0
  36. package/dist/CascadeDrawer/index.cjs +9 -0
  37. package/dist/CascadeDrawer/index.cjs.map +1 -0
  38. package/dist/CascadeDrawer/index.css +73 -0
  39. package/dist/CascadeDrawer/index.css.map +1 -0
  40. package/dist/CascadeDrawer/index.d.ts +23 -0
  41. package/dist/CascadeDrawer/index.js +3 -0
  42. package/dist/CascadeDrawer/index.js.map +1 -0
  43. package/dist/CodeSnippet/index.cjs +9 -0
  44. package/dist/CodeSnippet/index.cjs.map +1 -0
  45. package/dist/CodeSnippet/index.css +131 -0
  46. package/dist/CodeSnippet/index.css.map +1 -0
  47. package/dist/CodeSnippet/index.d.ts +23 -0
  48. package/dist/CodeSnippet/index.js +3 -0
  49. package/dist/CodeSnippet/index.js.map +1 -0
  50. package/dist/CollapseBox/index.cjs +10 -0
  51. package/dist/CollapseBox/index.cjs.map +1 -0
  52. package/dist/CollapseBox/index.css +106 -0
  53. package/dist/CollapseBox/index.css.map +1 -0
  54. package/dist/CollapseBox/index.d.ts +17 -0
  55. package/dist/CollapseBox/index.js +4 -0
  56. package/dist/CollapseBox/index.js.map +1 -0
  57. package/dist/ColorPicker/Color.d.ts +48 -0
  58. package/dist/ColorPicker/index.cjs +23 -0
  59. package/dist/ColorPicker/index.cjs.map +1 -0
  60. package/dist/ColorPicker/index.css +422 -0
  61. package/dist/ColorPicker/index.css.map +1 -0
  62. package/dist/ColorPicker/index.d.ts +48 -0
  63. package/dist/ColorPicker/index.js +4 -0
  64. package/dist/ColorPicker/index.js.map +1 -0
  65. package/dist/ContextMenu/index.cjs +10 -0
  66. package/dist/ContextMenu/index.cjs.map +1 -0
  67. package/dist/ContextMenu/index.css +107 -0
  68. package/dist/ContextMenu/index.css.map +1 -0
  69. package/dist/ContextMenu/index.d.ts +42 -0
  70. package/dist/ContextMenu/index.js +4 -0
  71. package/dist/ContextMenu/index.js.map +1 -0
  72. package/dist/CopyButton/index.cjs +10 -0
  73. package/dist/CopyButton/index.cjs.map +1 -0
  74. package/dist/CopyButton/index.css +122 -0
  75. package/dist/CopyButton/index.css.map +1 -0
  76. package/dist/CopyButton/index.d.ts +36 -0
  77. package/dist/CopyButton/index.js +4 -0
  78. package/dist/CopyButton/index.js.map +1 -0
  79. package/dist/CountUp/index.cjs +9 -0
  80. package/dist/CountUp/index.cjs.map +1 -0
  81. package/dist/CountUp/index.css +23 -0
  82. package/dist/CountUp/index.css.map +1 -0
  83. package/dist/CountUp/index.d.ts +40 -0
  84. package/dist/CountUp/index.js +3 -0
  85. package/dist/CountUp/index.js.map +1 -0
  86. package/dist/CronPicker/index.cjs +11 -0
  87. package/dist/CronPicker/index.cjs.map +1 -0
  88. package/dist/CronPicker/index.css +215 -0
  89. package/dist/CronPicker/index.css.map +1 -0
  90. package/dist/CronPicker/index.d.ts +17 -0
  91. package/dist/CronPicker/index.js +5 -0
  92. package/dist/CronPicker/index.js.map +1 -0
  93. package/dist/DebounceSelect/index.cjs +10 -0
  94. package/dist/DebounceSelect/index.cjs.map +1 -0
  95. package/dist/DebounceSelect/index.css +156 -0
  96. package/dist/DebounceSelect/index.css.map +1 -0
  97. package/dist/DebounceSelect/index.d.ts +39 -0
  98. package/dist/DebounceSelect/index.js +4 -0
  99. package/dist/DebounceSelect/index.js.map +1 -0
  100. package/dist/DiffViewer/index.cjs +9 -0
  101. package/dist/DiffViewer/index.cjs.map +1 -0
  102. package/dist/DiffViewer/index.css +90 -0
  103. package/dist/DiffViewer/index.css.map +1 -0
  104. package/dist/DiffViewer/index.d.ts +21 -0
  105. package/dist/DiffViewer/index.js +3 -0
  106. package/dist/DiffViewer/index.js.map +1 -0
  107. package/dist/DisabledBox/index.cjs +10 -0
  108. package/dist/DisabledBox/index.cjs.map +1 -0
  109. package/dist/DisabledBox/index.css +35 -0
  110. package/dist/DisabledBox/index.css.map +1 -0
  111. package/dist/DisabledBox/index.d.ts +18 -0
  112. package/dist/DisabledBox/index.js +4 -0
  113. package/dist/DisabledBox/index.js.map +1 -0
  114. package/dist/DragSortList/index.cjs +9 -0
  115. package/dist/DragSortList/index.cjs.map +1 -0
  116. package/dist/DragSortList/index.css +44 -0
  117. package/dist/DragSortList/index.css.map +1 -0
  118. package/dist/DragSortList/index.d.ts +18 -0
  119. package/dist/DragSortList/index.js +3 -0
  120. package/dist/DragSortList/index.js.map +1 -0
  121. package/dist/DualRangeSlider/index.cjs +9 -0
  122. package/dist/DualRangeSlider/index.cjs.map +1 -0
  123. package/dist/DualRangeSlider/index.css +41 -0
  124. package/dist/DualRangeSlider/index.css.map +1 -0
  125. package/dist/DualRangeSlider/index.d.ts +22 -0
  126. package/dist/DualRangeSlider/index.js +3 -0
  127. package/dist/DualRangeSlider/index.js.map +1 -0
  128. package/dist/EnvBadge/index.cjs +9 -0
  129. package/dist/EnvBadge/index.cjs.map +1 -0
  130. package/dist/EnvBadge/index.css +123 -0
  131. package/dist/EnvBadge/index.css.map +1 -0
  132. package/dist/EnvBadge/index.d.ts +36 -0
  133. package/dist/EnvBadge/index.js +3 -0
  134. package/dist/EnvBadge/index.js.map +1 -0
  135. package/dist/FileDropZone/index.cjs +9 -0
  136. package/dist/FileDropZone/index.cjs.map +1 -0
  137. package/dist/FileDropZone/index.css +39 -0
  138. package/dist/FileDropZone/index.css.map +1 -0
  139. package/dist/FileDropZone/index.d.ts +20 -0
  140. package/dist/FileDropZone/index.js +3 -0
  141. package/dist/FileDropZone/index.js.map +1 -0
  142. package/dist/FilePreviewer/index.cjs +19 -0
  143. package/dist/FilePreviewer/index.cjs.map +1 -0
  144. package/dist/FilePreviewer/index.css +155 -0
  145. package/dist/FilePreviewer/index.css.map +1 -0
  146. package/dist/FilePreviewer/index.d.ts +38 -0
  147. package/dist/FilePreviewer/index.js +4 -0
  148. package/dist/FilePreviewer/index.js.map +1 -0
  149. package/dist/FilterChips/index.cjs +9 -0
  150. package/dist/FilterChips/index.cjs.map +1 -0
  151. package/dist/FilterChips/index.css +52 -0
  152. package/dist/FilterChips/index.css.map +1 -0
  153. package/dist/FilterChips/index.d.ts +23 -0
  154. package/dist/FilterChips/index.js +3 -0
  155. package/dist/FilterChips/index.js.map +1 -0
  156. package/dist/FlipCard/index.cjs +9 -0
  157. package/dist/FlipCard/index.cjs.map +1 -0
  158. package/dist/FlipCard/index.css +46 -0
  159. package/dist/FlipCard/index.css.map +1 -0
  160. package/dist/FlipCard/index.d.ts +28 -0
  161. package/dist/FlipCard/index.js +3 -0
  162. package/dist/FlipCard/index.js.map +1 -0
  163. package/dist/Fullscreen/index.cjs +10 -0
  164. package/dist/Fullscreen/index.cjs.map +1 -0
  165. package/dist/Fullscreen/index.css +112 -0
  166. package/dist/Fullscreen/index.css.map +1 -0
  167. package/dist/Fullscreen/index.d.ts +49 -0
  168. package/dist/Fullscreen/index.js +4 -0
  169. package/dist/Fullscreen/index.js.map +1 -0
  170. package/dist/GradientText/index.cjs +9 -0
  171. package/dist/GradientText/index.cjs.map +1 -0
  172. package/dist/GradientText/index.css +22 -0
  173. package/dist/GradientText/index.css.map +1 -0
  174. package/dist/GradientText/index.d.ts +18 -0
  175. package/dist/GradientText/index.js +3 -0
  176. package/dist/GradientText/index.js.map +1 -0
  177. package/dist/GuidedTour/index.cjs +10 -0
  178. package/dist/GuidedTour/index.cjs.map +1 -0
  179. package/dist/GuidedTour/index.css +105 -0
  180. package/dist/GuidedTour/index.css.map +1 -0
  181. package/dist/GuidedTour/index.d.ts +35 -0
  182. package/dist/GuidedTour/index.js +4 -0
  183. package/dist/GuidedTour/index.js.map +1 -0
  184. package/dist/HoverCard/index.cjs +9 -0
  185. package/dist/HoverCard/index.cjs.map +1 -0
  186. package/dist/HoverCard/index.css +31 -0
  187. package/dist/HoverCard/index.css.map +1 -0
  188. package/dist/HoverCard/index.d.ts +18 -0
  189. package/dist/HoverCard/index.js +3 -0
  190. package/dist/HoverCard/index.js.map +1 -0
  191. package/dist/ImageCropper/index.cjs +10 -0
  192. package/dist/ImageCropper/index.cjs.map +1 -0
  193. package/dist/ImageCropper/index.css +181 -0
  194. package/dist/ImageCropper/index.css.map +1 -0
  195. package/dist/ImageCropper/index.d.ts +45 -0
  196. package/dist/ImageCropper/index.js +4 -0
  197. package/dist/ImageCropper/index.js.map +1 -0
  198. package/dist/InfiniteScrollList/index.cjs +10 -0
  199. package/dist/InfiniteScrollList/index.cjs.map +1 -0
  200. package/dist/InfiniteScrollList/index.css +35 -0
  201. package/dist/InfiniteScrollList/index.css.map +1 -0
  202. package/dist/InfiniteScrollList/index.d.ts +28 -0
  203. package/dist/InfiniteScrollList/index.js +4 -0
  204. package/dist/InfiniteScrollList/index.js.map +1 -0
  205. package/dist/JsonDiffViewer/index.cjs +9 -0
  206. package/dist/JsonDiffViewer/index.cjs.map +1 -0
  207. package/dist/JsonDiffViewer/index.css +48 -0
  208. package/dist/JsonDiffViewer/index.css.map +1 -0
  209. package/dist/JsonDiffViewer/index.d.ts +14 -0
  210. package/dist/JsonDiffViewer/index.js +3 -0
  211. package/dist/JsonDiffViewer/index.js.map +1 -0
  212. package/dist/JsonEditor/index.cjs +11 -0
  213. package/dist/JsonEditor/index.cjs.map +1 -0
  214. package/dist/JsonEditor/index.css +230 -0
  215. package/dist/JsonEditor/index.css.map +1 -0
  216. package/dist/JsonEditor/index.d.ts +26 -0
  217. package/dist/JsonEditor/index.js +5 -0
  218. package/dist/JsonEditor/index.js.map +1 -0
  219. package/dist/JsonTree/index.cjs +9 -0
  220. package/dist/JsonTree/index.cjs.map +1 -0
  221. package/dist/JsonTree/index.css +58 -0
  222. package/dist/JsonTree/index.css.map +1 -0
  223. package/dist/JsonTree/index.d.ts +14 -0
  224. package/dist/JsonTree/index.js +3 -0
  225. package/dist/JsonTree/index.js.map +1 -0
  226. package/dist/KanbanBoard/index.cjs +9 -0
  227. package/dist/KanbanBoard/index.cjs.map +1 -0
  228. package/dist/KanbanBoard/index.css +80 -0
  229. package/dist/KanbanBoard/index.css.map +1 -0
  230. package/dist/KanbanBoard/index.d.ts +24 -0
  231. package/dist/KanbanBoard/index.js +3 -0
  232. package/dist/KanbanBoard/index.js.map +1 -0
  233. package/dist/KeyValEditor/index.cjs +10 -0
  234. package/dist/KeyValEditor/index.cjs.map +1 -0
  235. package/dist/KeyValEditor/index.css +72 -0
  236. package/dist/KeyValEditor/index.css.map +1 -0
  237. package/dist/KeyValEditor/index.d.ts +28 -0
  238. package/dist/KeyValEditor/index.js +4 -0
  239. package/dist/KeyValEditor/index.js.map +1 -0
  240. package/dist/Marquee/index.cjs +9 -0
  241. package/dist/Marquee/index.cjs.map +1 -0
  242. package/dist/Marquee/index.css +99 -0
  243. package/dist/Marquee/index.css.map +1 -0
  244. package/dist/Marquee/index.d.ts +27 -0
  245. package/dist/Marquee/index.js +3 -0
  246. package/dist/Marquee/index.js.map +1 -0
  247. package/dist/Masonry/index.cjs +9 -0
  248. package/dist/Masonry/index.cjs.map +1 -0
  249. package/dist/Masonry/index.css +15 -0
  250. package/dist/Masonry/index.css.map +1 -0
  251. package/dist/Masonry/index.d.ts +58 -0
  252. package/dist/Masonry/index.js +3 -0
  253. package/dist/Masonry/index.js.map +1 -0
  254. package/dist/MetricCard/index.cjs +10 -0
  255. package/dist/MetricCard/index.cjs.map +1 -0
  256. package/dist/MetricCard/index.css +105 -0
  257. package/dist/MetricCard/index.css.map +1 -0
  258. package/dist/MetricCard/index.d.ts +32 -0
  259. package/dist/MetricCard/index.js +4 -0
  260. package/dist/MetricCard/index.js.map +1 -0
  261. package/dist/MiniSparkline/index.cjs +9 -0
  262. package/dist/MiniSparkline/index.cjs.map +1 -0
  263. package/dist/MiniSparkline/index.css +11 -0
  264. package/dist/MiniSparkline/index.css.map +1 -0
  265. package/dist/MiniSparkline/index.d.ts +20 -0
  266. package/dist/MiniSparkline/index.js +3 -0
  267. package/dist/MiniSparkline/index.js.map +1 -0
  268. package/dist/NumberStepper/index.cjs +9 -0
  269. package/dist/NumberStepper/index.cjs.map +1 -0
  270. package/dist/NumberStepper/index.css +45 -0
  271. package/dist/NumberStepper/index.css.map +1 -0
  272. package/dist/NumberStepper/index.d.ts +24 -0
  273. package/dist/NumberStepper/index.js +3 -0
  274. package/dist/NumberStepper/index.js.map +1 -0
  275. package/dist/NumericRangeInput/index.cjs +9 -0
  276. package/dist/NumericRangeInput/index.cjs.map +1 -0
  277. package/dist/NumericRangeInput/index.css +87 -0
  278. package/dist/NumericRangeInput/index.css.map +1 -0
  279. package/dist/NumericRangeInput/index.d.ts +39 -0
  280. package/dist/NumericRangeInput/index.js +3 -0
  281. package/dist/NumericRangeInput/index.js.map +1 -0
  282. package/dist/PasswordStrength/index.cjs +19 -0
  283. package/dist/PasswordStrength/index.cjs.map +1 -0
  284. package/dist/PasswordStrength/index.css +66 -0
  285. package/dist/PasswordStrength/index.css.map +1 -0
  286. package/dist/PasswordStrength/index.d.ts +31 -0
  287. package/dist/PasswordStrength/index.js +4 -0
  288. package/dist/PasswordStrength/index.js.map +1 -0
  289. package/dist/PdfViewer/index.cjs +10 -0
  290. package/dist/PdfViewer/index.cjs.map +1 -0
  291. package/dist/PdfViewer/index.css +65 -0
  292. package/dist/PdfViewer/index.css.map +1 -0
  293. package/dist/PdfViewer/index.d.ts +20 -0
  294. package/dist/PdfViewer/index.js +4 -0
  295. package/dist/PdfViewer/index.js.map +1 -0
  296. package/dist/PhotoViewer/index.cjs +9 -0
  297. package/dist/PhotoViewer/index.cjs.map +1 -0
  298. package/dist/PhotoViewer/index.css +129 -0
  299. package/dist/PhotoViewer/index.css.map +1 -0
  300. package/dist/PhotoViewer/index.d.ts +23 -0
  301. package/dist/PhotoViewer/index.js +3 -0
  302. package/dist/PhotoViewer/index.js.map +1 -0
  303. package/dist/QrCodeCard/index.cjs +10 -0
  304. package/dist/QrCodeCard/index.cjs.map +1 -0
  305. package/dist/QrCodeCard/index.css +109 -0
  306. package/dist/QrCodeCard/index.css.map +1 -0
  307. package/dist/QrCodeCard/index.d.ts +27 -0
  308. package/dist/QrCodeCard/index.js +4 -0
  309. package/dist/QrCodeCard/index.js.map +1 -0
  310. package/dist/QuickDateRange/index.cjs +9 -0
  311. package/dist/QuickDateRange/index.cjs.map +1 -0
  312. package/dist/QuickDateRange/index.css +30 -0
  313. package/dist/QuickDateRange/index.css.map +1 -0
  314. package/dist/QuickDateRange/index.d.ts +22 -0
  315. package/dist/QuickDateRange/index.js +3 -0
  316. package/dist/QuickDateRange/index.js.map +1 -0
  317. package/dist/ScrollTracker/index.cjs +22 -0
  318. package/dist/ScrollTracker/index.cjs.map +1 -0
  319. package/dist/ScrollTracker/index.css +48 -0
  320. package/dist/ScrollTracker/index.css.map +1 -0
  321. package/dist/ScrollTracker/index.d.ts +37 -0
  322. package/dist/ScrollTracker/index.js +3 -0
  323. package/dist/ScrollTracker/index.js.map +1 -0
  324. package/dist/SegmentedProgress/index.cjs +9 -0
  325. package/dist/SegmentedProgress/index.cjs.map +1 -0
  326. package/dist/SegmentedProgress/index.css +42 -0
  327. package/dist/SegmentedProgress/index.css.map +1 -0
  328. package/dist/SegmentedProgress/index.d.ts +24 -0
  329. package/dist/SegmentedProgress/index.js +3 -0
  330. package/dist/SegmentedProgress/index.js.map +1 -0
  331. package/dist/SensitiveMask/index.cjs +20 -0
  332. package/dist/SensitiveMask/index.cjs.map +1 -0
  333. package/dist/SensitiveMask/index.css +149 -0
  334. package/dist/SensitiveMask/index.css.map +1 -0
  335. package/dist/SensitiveMask/index.d.ts +30 -0
  336. package/dist/SensitiveMask/index.js +5 -0
  337. package/dist/SensitiveMask/index.js.map +1 -0
  338. package/dist/ShimmerSkeleton/index.cjs +9 -0
  339. package/dist/ShimmerSkeleton/index.cjs.map +1 -0
  340. package/dist/ShimmerSkeleton/index.css +55 -0
  341. package/dist/ShimmerSkeleton/index.css.map +1 -0
  342. package/dist/ShimmerSkeleton/index.d.ts +19 -0
  343. package/dist/ShimmerSkeleton/index.js +3 -0
  344. package/dist/ShimmerSkeleton/index.js.map +1 -0
  345. package/dist/Splitter/index.cjs +10 -0
  346. package/dist/Splitter/index.cjs.map +1 -0
  347. package/dist/Splitter/index.d.ts +94 -0
  348. package/dist/Splitter/index.js +4 -0
  349. package/dist/Splitter/index.js.map +1 -0
  350. package/dist/SpotlightCard/index.cjs +9 -0
  351. package/dist/SpotlightCard/index.cjs.map +1 -0
  352. package/dist/SpotlightCard/index.css +34 -0
  353. package/dist/SpotlightCard/index.css.map +1 -0
  354. package/dist/SpotlightCard/index.d.ts +18 -0
  355. package/dist/SpotlightCard/index.js +3 -0
  356. package/dist/SpotlightCard/index.js.map +1 -0
  357. package/dist/StatusTimeline/index.cjs +9 -0
  358. package/dist/StatusTimeline/index.cjs.map +1 -0
  359. package/dist/StatusTimeline/index.css +111 -0
  360. package/dist/StatusTimeline/index.css.map +1 -0
  361. package/dist/StatusTimeline/index.d.ts +25 -0
  362. package/dist/StatusTimeline/index.js +3 -0
  363. package/dist/StatusTimeline/index.js.map +1 -0
  364. package/dist/TagInput/index.cjs +10 -0
  365. package/dist/TagInput/index.cjs.map +1 -0
  366. package/dist/TagInput/index.css +108 -0
  367. package/dist/TagInput/index.css.map +1 -0
  368. package/dist/TagInput/index.d.ts +32 -0
  369. package/dist/TagInput/index.js +4 -0
  370. package/dist/TagInput/index.js.map +1 -0
  371. package/dist/TextEllipsis/index.cjs +11 -0
  372. package/dist/TextEllipsis/index.cjs.map +1 -0
  373. package/dist/TextEllipsis/index.css +217 -0
  374. package/dist/TextEllipsis/index.css.map +1 -0
  375. package/dist/TextEllipsis/index.d.ts +34 -0
  376. package/dist/TextEllipsis/index.js +5 -0
  377. package/dist/TextEllipsis/index.js.map +1 -0
  378. package/dist/TiltCard/index.cjs +9 -0
  379. package/dist/TiltCard/index.cjs.map +1 -0
  380. package/dist/TiltCard/index.css +32 -0
  381. package/dist/TiltCard/index.css.map +1 -0
  382. package/dist/TiltCard/index.d.ts +20 -0
  383. package/dist/TiltCard/index.js +3 -0
  384. package/dist/TiltCard/index.js.map +1 -0
  385. package/dist/TreeFilterPanel/index.cjs +9 -0
  386. package/dist/TreeFilterPanel/index.cjs.map +1 -0
  387. package/dist/TreeFilterPanel/index.css +67 -0
  388. package/dist/TreeFilterPanel/index.css.map +1 -0
  389. package/dist/TreeFilterPanel/index.d.ts +27 -0
  390. package/dist/TreeFilterPanel/index.js +3 -0
  391. package/dist/TreeFilterPanel/index.js.map +1 -0
  392. package/dist/TreeTransfer/index.cjs +10 -0
  393. package/dist/TreeTransfer/index.cjs.map +1 -0
  394. package/dist/TreeTransfer/index.css +67 -0
  395. package/dist/TreeTransfer/index.css.map +1 -0
  396. package/dist/TreeTransfer/index.d.ts +27 -0
  397. package/dist/TreeTransfer/index.js +4 -0
  398. package/dist/TreeTransfer/index.js.map +1 -0
  399. package/dist/TrendIndicator/index.cjs +9 -0
  400. package/dist/TrendIndicator/index.cjs.map +1 -0
  401. package/dist/TrendIndicator/index.css +42 -0
  402. package/dist/TrendIndicator/index.css.map +1 -0
  403. package/dist/TrendIndicator/index.d.ts +22 -0
  404. package/dist/TrendIndicator/index.js +3 -0
  405. package/dist/TrendIndicator/index.js.map +1 -0
  406. package/dist/VideoPlayer/index.cjs +10 -0
  407. package/dist/VideoPlayer/index.cjs.map +1 -0
  408. package/dist/VideoPlayer/index.css +122 -0
  409. package/dist/VideoPlayer/index.css.map +1 -0
  410. package/dist/VideoPlayer/index.d.ts +24 -0
  411. package/dist/VideoPlayer/index.js +4 -0
  412. package/dist/VideoPlayer/index.js.map +1 -0
  413. package/dist/VirtualList/index.cjs +9 -0
  414. package/dist/VirtualList/index.cjs.map +1 -0
  415. package/dist/VirtualList/index.css +26 -0
  416. package/dist/VirtualList/index.css.map +1 -0
  417. package/dist/VirtualList/index.d.ts +22 -0
  418. package/dist/VirtualList/index.js +3 -0
  419. package/dist/VirtualList/index.js.map +1 -0
  420. package/dist/Watermark/index.cjs +9 -0
  421. package/dist/Watermark/index.cjs.map +1 -0
  422. package/dist/Watermark/index.css +24 -0
  423. package/dist/Watermark/index.css.map +1 -0
  424. package/dist/Watermark/index.d.ts +28 -0
  425. package/dist/Watermark/index.js +3 -0
  426. package/dist/Watermark/index.js.map +1 -0
  427. package/dist/chunk-2DIU347W.cjs +159 -0
  428. package/dist/chunk-2DIU347W.cjs.map +1 -0
  429. package/dist/chunk-2MDYHFLH.cjs +73 -0
  430. package/dist/chunk-2MDYHFLH.cjs.map +1 -0
  431. package/dist/chunk-2O2A5XYF.js +59 -0
  432. package/dist/chunk-2O2A5XYF.js.map +1 -0
  433. package/dist/chunk-2UCTE6YN.cjs +176 -0
  434. package/dist/chunk-2UCTE6YN.cjs.map +1 -0
  435. package/dist/chunk-3JJP4D5L.js +92 -0
  436. package/dist/chunk-3JJP4D5L.js.map +1 -0
  437. package/dist/chunk-3R3NOO4K.js +71 -0
  438. package/dist/chunk-3R3NOO4K.js.map +1 -0
  439. package/dist/chunk-3UNZXPOT.cjs +926 -0
  440. package/dist/chunk-3UNZXPOT.cjs.map +1 -0
  441. package/dist/chunk-4BDO5TJH.cjs +213 -0
  442. package/dist/chunk-4BDO5TJH.cjs.map +1 -0
  443. package/dist/chunk-4OXVTRYV.cjs +106 -0
  444. package/dist/chunk-4OXVTRYV.cjs.map +1 -0
  445. package/dist/chunk-56TD4LDC.js +125 -0
  446. package/dist/chunk-56TD4LDC.js.map +1 -0
  447. package/dist/chunk-5E36FGRP.cjs +98 -0
  448. package/dist/chunk-5E36FGRP.cjs.map +1 -0
  449. package/dist/chunk-5GLC2HU6.js +174 -0
  450. package/dist/chunk-5GLC2HU6.js.map +1 -0
  451. package/dist/chunk-5GOF5EZU.cjs +87 -0
  452. package/dist/chunk-5GOF5EZU.cjs.map +1 -0
  453. package/dist/chunk-5HIRDMZH.js +96 -0
  454. package/dist/chunk-5HIRDMZH.js.map +1 -0
  455. package/dist/chunk-5LA2NPLG.cjs +81 -0
  456. package/dist/chunk-5LA2NPLG.cjs.map +1 -0
  457. package/dist/chunk-5R2YXBXM.js +126 -0
  458. package/dist/chunk-5R2YXBXM.js.map +1 -0
  459. package/dist/chunk-5V4UAS6I.cjs +103 -0
  460. package/dist/chunk-5V4UAS6I.cjs.map +1 -0
  461. package/dist/chunk-5VSEUDVY.js +45 -0
  462. package/dist/chunk-5VSEUDVY.js.map +1 -0
  463. package/dist/chunk-5YQVSOHK.js +44 -0
  464. package/dist/chunk-5YQVSOHK.js.map +1 -0
  465. package/dist/chunk-64LBDDZU.js +104 -0
  466. package/dist/chunk-64LBDDZU.js.map +1 -0
  467. package/dist/chunk-6FVAQECF.js +103 -0
  468. package/dist/chunk-6FVAQECF.js.map +1 -0
  469. package/dist/chunk-6IXVUD2M.js +71 -0
  470. package/dist/chunk-6IXVUD2M.js.map +1 -0
  471. package/dist/chunk-6TKNFV4B.js +53 -0
  472. package/dist/chunk-6TKNFV4B.js.map +1 -0
  473. package/dist/chunk-6UKUAYN3.cjs +625 -0
  474. package/dist/chunk-6UKUAYN3.cjs.map +1 -0
  475. package/dist/chunk-6UTLBY6Y.js +51 -0
  476. package/dist/chunk-6UTLBY6Y.js.map +1 -0
  477. package/dist/chunk-7SIUSULP.cjs +103 -0
  478. package/dist/chunk-7SIUSULP.cjs.map +1 -0
  479. package/dist/chunk-A4LXKZQ5.js +80 -0
  480. package/dist/chunk-A4LXKZQ5.js.map +1 -0
  481. package/dist/chunk-AFR7V4A4.js +81 -0
  482. package/dist/chunk-AFR7V4A4.js.map +1 -0
  483. package/dist/chunk-AMCCRVHG.cjs +57 -0
  484. package/dist/chunk-AMCCRVHG.cjs.map +1 -0
  485. package/dist/chunk-B3HZIYQQ.cjs +46 -0
  486. package/dist/chunk-B3HZIYQQ.cjs.map +1 -0
  487. package/dist/chunk-B4VXFHER.js +63 -0
  488. package/dist/chunk-B4VXFHER.js.map +1 -0
  489. package/dist/chunk-B7NN6SZD.cjs +108 -0
  490. package/dist/chunk-B7NN6SZD.cjs.map +1 -0
  491. package/dist/chunk-BFQV5MYD.js +159 -0
  492. package/dist/chunk-BFQV5MYD.js.map +1 -0
  493. package/dist/chunk-BRHXKRG6.js +98 -0
  494. package/dist/chunk-BRHXKRG6.js.map +1 -0
  495. package/dist/chunk-BZXMWKD2.js +922 -0
  496. package/dist/chunk-BZXMWKD2.js.map +1 -0
  497. package/dist/chunk-CPQLXDBR.cjs +176 -0
  498. package/dist/chunk-CPQLXDBR.cjs.map +1 -0
  499. package/dist/chunk-CT66HLZ5.js +229 -0
  500. package/dist/chunk-CT66HLZ5.js.map +1 -0
  501. package/dist/chunk-D7ZE4NMX.cjs +30 -0
  502. package/dist/chunk-D7ZE4NMX.cjs.map +1 -0
  503. package/dist/chunk-DJQEBDEP.cjs +128 -0
  504. package/dist/chunk-DJQEBDEP.cjs.map +1 -0
  505. package/dist/chunk-EGZSSZBX.js +211 -0
  506. package/dist/chunk-EGZSSZBX.js.map +1 -0
  507. package/dist/chunk-EOGYWPX7.cjs +47 -0
  508. package/dist/chunk-EOGYWPX7.cjs.map +1 -0
  509. package/dist/chunk-EPYD35KB.cjs +99 -0
  510. package/dist/chunk-EPYD35KB.cjs.map +1 -0
  511. package/dist/chunk-EQ7S5SYM.js +67 -0
  512. package/dist/chunk-EQ7S5SYM.js.map +1 -0
  513. package/dist/chunk-ES3KKDLM.js +245 -0
  514. package/dist/chunk-ES3KKDLM.js.map +1 -0
  515. package/dist/chunk-EUOBMHFF.cjs +45 -0
  516. package/dist/chunk-EUOBMHFF.cjs.map +1 -0
  517. package/dist/chunk-F36V2QTN.js +28 -0
  518. package/dist/chunk-F36V2QTN.js.map +1 -0
  519. package/dist/chunk-F5X3V6A3.cjs +55 -0
  520. package/dist/chunk-F5X3V6A3.cjs.map +1 -0
  521. package/dist/chunk-FYFL4PFD.cjs +69 -0
  522. package/dist/chunk-FYFL4PFD.cjs.map +1 -0
  523. package/dist/chunk-GMZSBGSL.cjs +66 -0
  524. package/dist/chunk-GMZSBGSL.cjs.map +1 -0
  525. package/dist/chunk-GV2RRQ2S.cjs +45 -0
  526. package/dist/chunk-GV2RRQ2S.cjs.map +1 -0
  527. package/dist/chunk-H3AASAXK.cjs +82 -0
  528. package/dist/chunk-H3AASAXK.cjs.map +1 -0
  529. package/dist/chunk-HFPWBZID.js +89 -0
  530. package/dist/chunk-HFPWBZID.js.map +1 -0
  531. package/dist/chunk-HSYTBMLN.cjs +44 -0
  532. package/dist/chunk-HSYTBMLN.cjs.map +1 -0
  533. package/dist/chunk-HUXPCMNP.js +127 -0
  534. package/dist/chunk-HUXPCMNP.js.map +1 -0
  535. package/dist/chunk-HZERTFL6.js +97 -0
  536. package/dist/chunk-HZERTFL6.js.map +1 -0
  537. package/dist/chunk-IBI6AT5Z.js +37 -0
  538. package/dist/chunk-IBI6AT5Z.js.map +1 -0
  539. package/dist/chunk-IBOCJ2ZS.js +147 -0
  540. package/dist/chunk-IBOCJ2ZS.js.map +1 -0
  541. package/dist/chunk-IBYFOFSS.js +79 -0
  542. package/dist/chunk-IBYFOFSS.js.map +1 -0
  543. package/dist/chunk-IRU5E252.cjs +65 -0
  544. package/dist/chunk-IRU5E252.cjs.map +1 -0
  545. package/dist/chunk-ISUXPTLV.js +504 -0
  546. package/dist/chunk-ISUXPTLV.js.map +1 -0
  547. package/dist/chunk-J3IKUWXD.js +102 -0
  548. package/dist/chunk-J3IKUWXD.js.map +1 -0
  549. package/dist/chunk-JAW7Q2YC.cjs +127 -0
  550. package/dist/chunk-JAW7Q2YC.cjs.map +1 -0
  551. package/dist/chunk-JECYRODB.js +619 -0
  552. package/dist/chunk-JECYRODB.js.map +1 -0
  553. package/dist/chunk-JEDW76LI.cjs +107 -0
  554. package/dist/chunk-JEDW76LI.cjs.map +1 -0
  555. package/dist/chunk-K3JC52JH.cjs +49 -0
  556. package/dist/chunk-K3JC52JH.cjs.map +1 -0
  557. package/dist/chunk-KCXXUUWC.js +47 -0
  558. package/dist/chunk-KCXXUUWC.js.map +1 -0
  559. package/dist/chunk-KGZNVN7P.cjs +39 -0
  560. package/dist/chunk-KGZNVN7P.cjs.map +1 -0
  561. package/dist/chunk-KXZM322K.cjs +70 -0
  562. package/dist/chunk-KXZM322K.cjs.map +1 -0
  563. package/dist/chunk-L7X3RVEY.js +101 -0
  564. package/dist/chunk-L7X3RVEY.js.map +1 -0
  565. package/dist/chunk-LFXMUCEO.cjs +73 -0
  566. package/dist/chunk-LFXMUCEO.cjs.map +1 -0
  567. package/dist/chunk-LLWK5VKA.js +125 -0
  568. package/dist/chunk-LLWK5VKA.js.map +1 -0
  569. package/dist/chunk-MBOWSS4B.cjs +530 -0
  570. package/dist/chunk-MBOWSS4B.cjs.map +1 -0
  571. package/dist/chunk-MC3NERDH.js +43 -0
  572. package/dist/chunk-MC3NERDH.js.map +1 -0
  573. package/dist/chunk-MGUNFP6P.js +68 -0
  574. package/dist/chunk-MGUNFP6P.js.map +1 -0
  575. package/dist/chunk-MGYDOC76.cjs +81 -0
  576. package/dist/chunk-MGYDOC76.cjs.map +1 -0
  577. package/dist/chunk-MLYM5LAX.js +53 -0
  578. package/dist/chunk-MLYM5LAX.js.map +1 -0
  579. package/dist/chunk-MNY5P5EG.cjs +232 -0
  580. package/dist/chunk-MNY5P5EG.cjs.map +1 -0
  581. package/dist/chunk-MY4M7HVW.cjs +161 -0
  582. package/dist/chunk-MY4M7HVW.cjs.map +1 -0
  583. package/dist/chunk-NJIYP6SC.cjs +123 -0
  584. package/dist/chunk-NJIYP6SC.cjs.map +1 -0
  585. package/dist/chunk-NNS4YN3C.js +42 -0
  586. package/dist/chunk-NNS4YN3C.js.map +1 -0
  587. package/dist/chunk-NUTVJGVT.cjs +153 -0
  588. package/dist/chunk-NUTVJGVT.cjs.map +1 -0
  589. package/dist/chunk-O2YTJPG4.js +64 -0
  590. package/dist/chunk-O2YTJPG4.js.map +1 -0
  591. package/dist/chunk-OBK6XTUY.js +119 -0
  592. package/dist/chunk-OBK6XTUY.js.map +1 -0
  593. package/dist/chunk-OCN7L2ID.cjs +106 -0
  594. package/dist/chunk-OCN7L2ID.cjs.map +1 -0
  595. package/dist/chunk-ODNGFJVN.cjs +100 -0
  596. package/dist/chunk-ODNGFJVN.cjs.map +1 -0
  597. package/dist/chunk-ODV3XF5W.cjs +71 -0
  598. package/dist/chunk-ODV3XF5W.cjs.map +1 -0
  599. package/dist/chunk-OKCQZO5E.js +315 -0
  600. package/dist/chunk-OKCQZO5E.js.map +1 -0
  601. package/dist/chunk-PJB7ADK6.js +225 -0
  602. package/dist/chunk-PJB7ADK6.js.map +1 -0
  603. package/dist/chunk-PUJJHD22.js +106 -0
  604. package/dist/chunk-PUJJHD22.js.map +1 -0
  605. package/dist/chunk-PUTAVQJZ.js +286 -0
  606. package/dist/chunk-PUTAVQJZ.js.map +1 -0
  607. package/dist/chunk-QNSEJGF6.cjs +121 -0
  608. package/dist/chunk-QNSEJGF6.cjs.map +1 -0
  609. package/dist/chunk-QZZGBUW4.js +121 -0
  610. package/dist/chunk-QZZGBUW4.js.map +1 -0
  611. package/dist/chunk-RAF7I4A5.js +44 -0
  612. package/dist/chunk-RAF7I4A5.js.map +1 -0
  613. package/dist/chunk-RIR43PO3.js +69 -0
  614. package/dist/chunk-RIR43PO3.js.map +1 -0
  615. package/dist/chunk-TNKJCJ3U.cjs +94 -0
  616. package/dist/chunk-TNKJCJ3U.cjs.map +1 -0
  617. package/dist/chunk-UCG7ZVK5.cjs +46 -0
  618. package/dist/chunk-UCG7ZVK5.cjs.map +1 -0
  619. package/dist/chunk-V4O325BX.cjs +84 -0
  620. package/dist/chunk-V4O325BX.cjs.map +1 -0
  621. package/dist/chunk-V7IUSCQS.js +157 -0
  622. package/dist/chunk-V7IUSCQS.js.map +1 -0
  623. package/dist/chunk-VF5P7XMC.cjs +161 -0
  624. package/dist/chunk-VF5P7XMC.cjs.map +1 -0
  625. package/dist/chunk-VIJ3PXCW.cjs +104 -0
  626. package/dist/chunk-VIJ3PXCW.cjs.map +1 -0
  627. package/dist/chunk-VJM2XBHZ.cjs +31 -0
  628. package/dist/chunk-VJM2XBHZ.cjs.map +1 -0
  629. package/dist/chunk-VQKPZ4YE.cjs +251 -0
  630. package/dist/chunk-VQKPZ4YE.cjs.map +1 -0
  631. package/dist/chunk-VS2YVJOB.cjs +129 -0
  632. package/dist/chunk-VS2YVJOB.cjs.map +1 -0
  633. package/dist/chunk-WDHU3BSM.cjs +55 -0
  634. package/dist/chunk-WDHU3BSM.cjs.map +1 -0
  635. package/dist/chunk-WEGDIRDB.js +101 -0
  636. package/dist/chunk-WEGDIRDB.js.map +1 -0
  637. package/dist/chunk-WEOMKZC6.js +174 -0
  638. package/dist/chunk-WEOMKZC6.js.map +1 -0
  639. package/dist/chunk-WN557PFJ.js +122 -0
  640. package/dist/chunk-WN557PFJ.js.map +1 -0
  641. package/dist/chunk-WWXBH57R.cjs +95 -0
  642. package/dist/chunk-WWXBH57R.cjs.map +1 -0
  643. package/dist/chunk-WZ2GV4HA.js +49 -0
  644. package/dist/chunk-WZ2GV4HA.js.map +1 -0
  645. package/dist/chunk-WZRUBHS3.cjs +231 -0
  646. package/dist/chunk-WZRUBHS3.cjs.map +1 -0
  647. package/dist/chunk-X2F2DVMB.js +85 -0
  648. package/dist/chunk-X2F2DVMB.js.map +1 -0
  649. package/dist/chunk-XOMV26WS.js +105 -0
  650. package/dist/chunk-XOMV26WS.js.map +1 -0
  651. package/dist/chunk-XWHITF5V.cjs +31 -0
  652. package/dist/chunk-XWHITF5V.cjs.map +1 -0
  653. package/dist/chunk-XWXFENGT.js +159 -0
  654. package/dist/chunk-XWXFENGT.js.map +1 -0
  655. package/dist/chunk-Y7A3WQQN.js +79 -0
  656. package/dist/chunk-Y7A3WQQN.js.map +1 -0
  657. package/dist/chunk-YFHKH6HL.js +43 -0
  658. package/dist/chunk-YFHKH6HL.js.map +1 -0
  659. package/dist/chunk-YXTLWTY4.js +29 -0
  660. package/dist/chunk-YXTLWTY4.js.map +1 -0
  661. package/dist/chunk-ZFBLVX7E.cjs +51 -0
  662. package/dist/chunk-ZFBLVX7E.cjs.map +1 -0
  663. package/dist/chunk-ZKM664KC.cjs +126 -0
  664. package/dist/chunk-ZKM664KC.cjs.map +1 -0
  665. package/dist/chunk-ZLHNRKOQ.js +29 -0
  666. package/dist/chunk-ZLHNRKOQ.js.map +1 -0
  667. package/dist/chunk-ZLWY7QS2.cjs +292 -0
  668. package/dist/chunk-ZLWY7QS2.cjs.map +1 -0
  669. package/dist/chunk-ZNFW6L3E.cjs +321 -0
  670. package/dist/chunk-ZNFW6L3E.cjs.map +1 -0
  671. package/dist/chunk-ZUW3XLZQ.cjs +131 -0
  672. package/dist/chunk-ZUW3XLZQ.cjs.map +1 -0
  673. package/dist/chunk-ZVSN7ADO.cjs +61 -0
  674. package/dist/chunk-ZVSN7ADO.cjs.map +1 -0
  675. package/dist/index.cjs +334 -8101
  676. package/dist/index.cjs.map +1 -1
  677. package/dist/index.css +79 -11
  678. package/dist/index.css.map +1 -1
  679. package/dist/index.js +63 -8026
  680. package/dist/index.js.map +1 -1
  681. package/dist/src/icons.d.ts +70 -0
  682. package/dist/src/index.d.ts +124 -0
  683. package/dist/tsup.config.d.ts +2 -0
  684. package/dist/vite.config.d.ts +2 -0
  685. package/package.json +17 -3
  686. package/dist/index.d.cts +0 -1624
  687. package/dist/index.d.ts +0 -1624
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../CollapseBox/index.tsx","../src/icons.tsx","../Splitter/index.tsx","../DisabledBox/index.tsx","../Masonry/index.tsx","../BorderBeam/index.tsx","../ColorPicker/index.tsx","../ColorPicker/Color.ts","../CopyButton/index.tsx","../TextEllipsis/index.tsx","../DebounceSelect/index.tsx","../CountUp/index.tsx","../ContextMenu/index.tsx","../Fullscreen/index.tsx","../ImageCropper/index.tsx","../ScrollTracker/index.tsx","../FilePreviewer/index.tsx","../TagInput/index.tsx","../PasswordStrength/index.tsx","../JsonEditor/index.tsx","../InfiniteScrollList/index.tsx","../Marquee/index.tsx","../SpotlightCard/index.tsx","../SensitiveMask/index.tsx","../DiffViewer/index.tsx","../CronPicker/index.tsx","../GuidedTour/index.tsx","../NumericRangeInput/index.tsx","../MetricCard/index.tsx","../AudioPlayer/index.tsx","../QrCodeCard/index.tsx","../ActivityLog/index.tsx","../DragSortList/index.tsx","../TiltCard/index.tsx","../VirtualList/index.tsx","../Watermark/index.tsx","../VideoPlayer/index.tsx","../PdfViewer/index.tsx","../BadgeRibbon/index.tsx","../ShimmerSkeleton/index.tsx","../FlipCard/index.tsx","../KanbanBoard/index.tsx","../TreeFilterPanel/index.tsx","../EnvBadge/index.tsx","../StatusTimeline/index.tsx","../GradientText/index.tsx","../KeyValEditor/index.tsx","../QuickDateRange/index.tsx","../PhotoViewer/index.tsx","../TrendIndicator/index.tsx","../SegmentedProgress/index.tsx","../HoverCard/index.tsx","../TreeTransfer/index.tsx","../NumberStepper/index.tsx","../JsonTree/index.tsx","../CodeSnippet/index.tsx","../MiniSparkline/index.tsx","../FileDropZone/index.tsx","../CascadeDrawer/index.tsx","../DualRangeSlider/index.tsx","../FilterChips/index.tsx","../AnnouncementBar/index.tsx","../JsonDiffViewer/index.tsx"],"sourcesContent":["// 统一入口\nimport './index.less';\n\nexport { default as CollapseBox } from '../CollapseBox';\nexport type {\n\tCollapseBoxProps,\n\tCollapseBoxDirection,\n\tCollapseBoxButtonPosition,\n} from '../CollapseBox';\n\nexport { default as Splitter } from '../Splitter';\nexport type {\n\tSplitterProps,\n\tSplitterPanelProps,\n\tSplitterCollapsible,\n\tSplitterSize,\n\tSplitterOrientation,\n} from '../Splitter';\n\nexport { default as DisabledBox } from '../DisabledBox';\nexport type { DisabledBoxProps } from '../DisabledBox';\n\nexport { default as Masonry } from '../Masonry';\nexport type {\n\tMasonryProps,\n\tMasonryItem,\n\tMasonrySemanticDOM,\n\tMasonryClassNames,\n\tMasonryStyles,\n\tGap,\n\tBreakpoint,\n} from '../Masonry';\n\nexport { default as BorderBeam } from '../BorderBeam';\nexport type { BorderBeamProps, BorderBeamColorStop } from '../BorderBeam';\n\nexport { default as ColorPicker } from '../ColorPicker';\nexport { Color, generateColor } from '../ColorPicker/Color';\nexport type {\n\tColorPickerProps,\n\tColorPresetItem,\n\tColorFormat,\n\tColorMode,\n\tHsbColor,\n\tRgbColor,\n} from '../ColorPicker';\n\nexport { default as CopyButton } from '../CopyButton';\nexport type { CopyButtonProps } from '../CopyButton';\n\nexport { default as TextEllipsis } from '../TextEllipsis';\nexport type { TextEllipsisProps, TextEllipsisExpandConfig } from '../TextEllipsis';\n\nexport { default as DebounceSelect } from '../DebounceSelect';\nexport type { DebounceSelectProps, SelectOption, SelectValue } from '../DebounceSelect';\n\nexport { default as CountUp } from '../CountUp';\nexport type { CountUpProps, CountUpRef } from '../CountUp';\n\nexport { default as ContextMenu } from '../ContextMenu';\nexport type { ContextMenuProps, ContextMenuItem } from '../ContextMenu';\n\nexport { default as Fullscreen } from '../Fullscreen';\nexport type {\n\tFullscreenProps,\n\tFullscreenRef,\n\tFullscreenMode,\n\tFullscreenButtonPosition,\n\tFullscreenRenderProps,\n} from '../Fullscreen';\n\nexport { default as ImageCropper } from '../ImageCropper';\nexport type { ImageCropperProps, ImageCropperRef, CropResult, CropShape } from '../ImageCropper';\n\nexport { default as ScrollTracker, StickyHeader } from '../ScrollTracker';\nexport type { ScrollTrackerProps, StickyHeaderProps } from '../ScrollTracker';\n\nexport { default as FilePreviewer, inferFileType } from '../FilePreviewer';\nexport type { FilePreviewerProps, FileItem, FileType } from '../FilePreviewer';\n\nexport { default as TagInput } from '../TagInput';\nexport type { TagInputProps } from '../TagInput';\n\nexport { default as PasswordStrength, evaluatePasswordStrength } from '../PasswordStrength';\nexport type {\n\tPasswordStrengthProps,\n\tPasswordStrengthLevel,\n\tPasswordRule,\n} from '../PasswordStrength';\n\nexport { default as JsonEditor } from '../JsonEditor';\nexport type { JsonEditorProps } from '../JsonEditor';\n\nexport { default as InfiniteScrollList } from '../InfiniteScrollList';\nexport type { InfiniteScrollListProps } from '../InfiniteScrollList';\n\nexport { default as Marquee } from '../Marquee';\nexport type { MarqueeProps, MarqueeDirection } from '../Marquee';\n\nexport { default as SpotlightCard } from '../SpotlightCard';\nexport type { SpotlightCardProps } from '../SpotlightCard';\n\nexport { default as SensitiveMask, maskSensitiveText } from '../SensitiveMask';\nexport type { SensitiveMaskProps, SensitiveType } from '../SensitiveMask';\n\nexport { default as DiffViewer } from '../DiffViewer';\nexport type { DiffViewerProps, DiffViewMode } from '../DiffViewer';\n\nexport { default as CronPicker } from '../CronPicker';\nexport type { CronPickerProps, CronPeriodType } from '../CronPicker';\n\nexport { default as GuidedTour } from '../GuidedTour';\nexport type { GuidedTourProps, TourStep, TourPlacement } from '../GuidedTour';\n\nexport { default as NumericRangeInput } from '../NumericRangeInput';\nexport type { NumericRangeInputProps, RangeValue, RangeShortcut } from '../NumericRangeInput';\n\nexport { default as MetricCard } from '../MetricCard';\nexport type { MetricCardProps } from '../MetricCard';\n\nexport { default as AudioPlayer } from '../AudioPlayer';\nexport type { AudioPlayerProps } from '../AudioPlayer';\n\nexport { default as QrCodeCard } from '../QrCodeCard';\nexport type { QrCodeCardProps, QrCodeStatus } from '../QrCodeCard';\n\nexport { default as ActivityLog } from '../ActivityLog';\nexport type { ActivityLogProps, ActivityItem } from '../ActivityLog';\n\nexport { default as DragSortList } from '../DragSortList';\nexport type { DragSortListProps } from '../DragSortList';\n\nexport { default as TiltCard } from '../TiltCard';\nexport type { TiltCardProps } from '../TiltCard';\n\nexport { default as VirtualList } from '../VirtualList';\nexport type { VirtualListProps } from '../VirtualList';\n\nexport { default as Watermark } from '../Watermark';\nexport type { WatermarkProps } from '../Watermark';\n\nexport { default as VideoPlayer } from '../VideoPlayer';\nexport type { VideoPlayerProps } from '../VideoPlayer';\n\nexport { default as PdfViewer } from '../PdfViewer';\nexport type { PdfViewerProps } from '../PdfViewer';\n\nexport { default as BadgeRibbon } from '../BadgeRibbon';\nexport type { BadgeRibbonProps, RibbonPlacement } from '../BadgeRibbon';\n\nexport { default as ShimmerSkeleton } from '../ShimmerSkeleton';\nexport type { ShimmerSkeletonProps, SkeletonType } from '../ShimmerSkeleton';\n\nexport { default as FlipCard } from '../FlipCard';\nexport type { FlipCardProps, FlipTrigger, FlipDirection } from '../FlipCard';\n\nexport { default as KanbanBoard } from '../KanbanBoard';\nexport type { KanbanBoardProps, KanbanColumn } from '../KanbanBoard';\n\nexport { default as TreeFilterPanel } from '../TreeFilterPanel';\nexport type { TreeFilterPanelProps, TreeFilterNode } from '../TreeFilterPanel';\n\nexport { default as EnvBadge } from '../EnvBadge';\nexport type {\n\tEnvBadgeProps,\n\tEnvType,\n\tEnvPlacement,\n\tEnvBuildInfo,\n\tEnvSwitchItem,\n} from '../EnvBadge';\n\nexport { default as StatusTimeline } from '../StatusTimeline';\nexport type {\n\tStatusTimelineProps,\n\tStatusTimelineItem,\n\tTimelineStatus,\n\tTimelineOperator,\n} from '../StatusTimeline';\n\nexport { default as GradientText } from '../GradientText';\nexport type { GradientTextProps } from '../GradientText';\n\nexport { default as KeyValEditor } from '../KeyValEditor';\nexport type { KeyValEditorProps, KeyValItem } from '../KeyValEditor';\n\nexport { default as QuickDateRange } from '../QuickDateRange';\nexport type { QuickDateRangeProps, ShortcutItem } from '../QuickDateRange';\n\nexport { default as PhotoViewer } from '../PhotoViewer';\nexport type { PhotoViewerProps, PhotoItem } from '../PhotoViewer';\n\nexport { default as TrendIndicator } from '../TrendIndicator';\nexport type { TrendIndicatorProps } from '../TrendIndicator';\n\nexport { default as SegmentedProgress } from '../SegmentedProgress';\nexport type { SegmentedProgressProps, ProgressSegment } from '../SegmentedProgress';\n\nexport { default as HoverCard } from '../HoverCard';\nexport type { HoverCardProps } from '../HoverCard';\n\nexport { default as TreeTransfer } from '../TreeTransfer';\nexport type { TreeTransferProps, TreeTransferNode } from '../TreeTransfer';\n\nexport { default as NumberStepper } from '../NumberStepper';\nexport type { NumberStepperProps } from '../NumberStepper';\n\nexport { default as JsonTree } from '../JsonTree';\nexport type { JsonTreeProps } from '../JsonTree';\n\nexport { default as CodeSnippet } from '../CodeSnippet';\nexport type { CodeSnippetProps } from '../CodeSnippet';\n\nexport { default as MiniSparkline } from '../MiniSparkline';\nexport type { MiniSparklineProps } from '../MiniSparkline';\n\nexport { default as FileDropZone } from '../FileDropZone';\nexport type { FileDropZoneProps } from '../FileDropZone';\n\nexport { default as CascadeDrawer } from '../CascadeDrawer';\nexport type { CascadeDrawerProps, CascadeLevel } from '../CascadeDrawer';\n\nexport { default as DualRangeSlider } from '../DualRangeSlider';\nexport type { DualRangeSliderProps } from '../DualRangeSlider';\n\nexport { default as FilterChips } from '../FilterChips';\nexport type { FilterChipsProps, FilterChipItem } from '../FilterChips';\n\nexport { default as AnnouncementBar } from '../AnnouncementBar';\nexport type { AnnouncementBarProps } from '../AnnouncementBar';\n\nexport { default as JsonDiffViewer } from '../JsonDiffViewer';\nexport type { JsonDiffViewerProps } from '../JsonDiffViewer';\n","import { useState, type CSSProperties, type ReactNode } from 'react';\nimport { DownOutlined, LeftOutlined, RightOutlined, UpOutlined } from '../src/icons';\nimport './index.less';\n\nexport type CollapseBoxDirection = 'horizontal' | 'vertical';\nexport type CollapseBoxButtonPosition = 'left' | 'right' | 'top' | 'bottom';\n\nexport interface CollapseBoxProps {\n\tchildren?: ReactNode;\n\ttitle?: string;\n\tdirection?: CollapseBoxDirection;\n\tbuttonPosition?: CollapseBoxButtonPosition;\n\tdefaultWidth?: number | string;\n\tdefaultHeight?: number | string;\n\tcontentPadding?: string;\n\theaderHeight?: number;\n\tclassName?: string;\n}\n\nconst formatDimension = (value?: number | string): string | undefined => {\n\tif (value === undefined || value === null) return undefined;\n\treturn typeof value === 'number' ? `${value}px` : value;\n};\n\nconst ChevronLeft = () => <LeftOutlined />;\n\nconst ChevronRight = () => <RightOutlined />;\n\nconst ChevronUp = () => <UpOutlined />;\n\nconst ChevronDown = () => <DownOutlined />;\n\nconst CollapsibleBox = ({\n\tchildren,\n\ttitle = '内容区域',\n\tdirection = 'horizontal',\n\tbuttonPosition = 'right',\n\tdefaultWidth = 600,\n\tdefaultHeight = 300,\n\tcontentPadding = '16px',\n\theaderHeight = 16,\n\tclassName,\n}: CollapseBoxProps) => {\n\tconst [isExpanded, setIsExpanded] = useState(true);\n\n\tconst getContentMaxHeight = () => {\n\t\tif (typeof defaultHeight === 'number') {\n\t\t\treturn `${defaultHeight - headerHeight}px`;\n\t\t}\n\t\tif (typeof defaultHeight === 'string') {\n\t\t\treturn headerHeight ? `calc(${defaultHeight} - ${headerHeight}px)` : defaultHeight;\n\t\t}\n\t\treturn '100%';\n\t};\n\n\tconst getIcon = () => {\n\t\tif (direction === 'horizontal') {\n\t\t\tif (buttonPosition === 'right') {\n\t\t\t\treturn isExpanded ? <ChevronRight /> : <ChevronLeft />;\n\t\t\t}\n\t\t\treturn isExpanded ? <ChevronLeft /> : <ChevronRight />;\n\t\t}\n\t\tif (buttonPosition === 'bottom') {\n\t\t\treturn isExpanded ? <ChevronDown /> : <ChevronUp />;\n\t\t}\n\t\treturn isExpanded ? <ChevronUp /> : <ChevronDown />;\n\t};\n\n\tconst getButtonClass = () => {\n\t\tif (direction === 'horizontal') {\n\t\t\treturn buttonPosition === 'right' ? 'button-right' : 'button-left';\n\t\t}\n\t\treturn buttonPosition === 'bottom' ? 'button-bottom' : 'button-top';\n\t};\n\n\tconst getContainerStyle = (): CSSProperties => {\n\t\tif (direction === 'horizontal') {\n\t\t\treturn {\n\t\t\t\twidth: isExpanded ? '100%' : '0px',\n\t\t\t\theight: '100%',\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\theight: isExpanded ? '100%' : '0px',\n\t\t\twidth: '100%',\n\t\t};\n\t};\n\n\tconst baseWrapperClass =\n\t\tdirection === 'horizontal' ? 'collapsible-wrapper horizontal' : 'collapsible-wrapper vertical';\n\tconst wrapperClass = className ? `${baseWrapperClass} ${className}` : baseWrapperClass;\n\n\tconst containerClass = [\n\t\t'collapsible-container',\n\t\tdirection === 'horizontal' && buttonPosition === 'right' ? 'align-right' : '',\n\t\tdirection === 'vertical' && buttonPosition === 'bottom' ? 'align-bottom' : '',\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\tconst height = getContentMaxHeight();\n\tconst contentStyle: CSSProperties = {\n\t\tmaxHeight: direction === 'vertical' ? (isExpanded ? height : '0px') : height,\n\t\toverflowY: 'auto',\n\t\tpadding: contentPadding,\n\t\tboxSizing: 'border-box',\n\t};\n\n\tconst formattedWidth = formatDimension(defaultWidth);\n\tconst formattedHeight = formatDimension(defaultHeight);\n\tconst wrapperStyle: CSSProperties = {\n\t\twidth: formattedWidth,\n\t\theight: formattedHeight,\n\t};\n\n\treturn (\n\t\t<div className={wrapperClass} style={wrapperStyle}>\n\t\t\t<div style={getContainerStyle()} className={containerClass}>\n\t\t\t\t{title && (\n\t\t\t\t\t<div className=\"collapsible-header\" style={{ display: 'none' }}>\n\t\t\t\t\t\t<h3>{title}</h3>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<div className=\"collapsible-content\" style={contentStyle}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tonClick={() => setIsExpanded(!isExpanded)}\n\t\t\t\tclassName={`toggle-button ${getButtonClass()}`}\n\t\t\t\ttitle={isExpanded ? '隐藏' : '展开'}\n\t\t\t>\n\t\t\t\t{getIcon()}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default CollapsibleBox;\n","import type { CSSProperties } from 'react';\n\ninterface IconProps {\n\tstyle?: CSSProperties;\n\tclassName?: string;\n}\n\nconst baseStyle: CSSProperties = {\n\tdisplay: 'inline-block',\n\twidth: '1em',\n\theight: '1em',\n\tverticalAlign: '-0.125em',\n};\n\nexport const LeftOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"left\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 000 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z\" />\n\t</svg>\n);\n\nexport const RightOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"right\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M765.7 486.8L314.9 134.7A7.97 7.97 0 00302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 000-50.4z\" />\n\t</svg>\n);\n\nexport const UpOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"up\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M890.5 755.3L537.4 268a31.96 31.96 0 00-50.8 0L133.5 755.3a7.95 7.95 0 006.3 12.7h75.5c4.9 0 9.6-2.3 12.6-6.1l281-360 281 360c3 3.8 7.7 6.1 12.6 6.1h75.5c6.7 0 10.4-7.6 6.1-12.7z\" />\n\t</svg>\n);\n\nexport const DownOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"down\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 37 17.6 49.8 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z\" />\n\t</svg>\n);\n\nexport const LockOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"lock\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M928 224H704v-64c0-88.4-71.6-160-160-160s-160 71.6-160 160v64H160c-17.7 0-32 14.3-32 32v640c0 17.7 14.3 32 32 32h768c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32zM456 160c0-44.2 35.8-80 80-80s80 35.8 80 80v64H456v-64zm408 696H224V296h640v560zM496 448c-30.9 0-56 25.1-56 56 0 24.7 16.1 45.6 38.4 52.7V680c0 9.7 7.8 17.5 17.6 17.5h32c9.7 0 17.6-7.8 17.6-17.5V556.7c22.3-7.1 38.4-28 38.4-52.7 0-30.9-25.1-56-56-56z\" />\n\t</svg>\n);\n\nexport const CloseCircleFilled = ({\n\tstyle,\n\tclassName,\n\tonClick,\n}: IconProps & { onClick?: (e: React.MouseEvent) => void }) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"close-circle\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t\tonClick={onClick}\n\t>\n\t\t<path d=\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm165.4 618.2l-66-66L512 516.8l-99.4 99.4-66-66L446 450.8 346.6 351.4l66-66L512 384.8l99.4-99.4 66 66L578 450.8l99.4 99.4z\" />\n\t</svg>\n);\n\nexport const CopyOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"copy\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v496c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V128c0-35.3-28.7-64-64-64zM704 192H192c-35.3 0-64 28.7-64 64v640c0 35.3 28.7 64 64 64h512c35.3 0 64-28.7 64-64V256c0-35.3-28.7-64-64-64zm-8 648H200c-4.4 0-8-3.6-8-8V264c0-4.4 3.6-8 8-8h496c4.4 0 8 3.6 8 8v568c0 4.4-3.6 8-8 8z\" />\n\t</svg>\n);\n\nexport const CheckOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"check\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 00-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z\" />\n\t</svg>\n);\n\nexport const LoadingOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"loading\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"none\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{\n\t\t\t...baseStyle,\n\t\t\tanimation: 'rpc-spin 0.85s infinite linear',\n\t\t\t...style,\n\t\t}}\n\t\tclassName={`rpc_loading_icon ${className || ''}`}\n\t>\n\t\t<style>\n\t\t\t{`@keyframes rpc-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }`}\n\t\t</style>\n\t\t<circle\n\t\t\tcx=\"512\"\n\t\t\tcy=\"512\"\n\t\t\tr=\"380\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth=\"96\"\n\t\t\tstrokeOpacity=\"0.2\"\n\t\t/>\n\t\t<path\n\t\t\td=\"M512 132c209.9 0 380 170.1 380 380\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth=\"96\"\n\t\t\tstrokeLinecap=\"round\"\n\t\t/>\n\t</svg>\n);\n\nexport const SearchOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"search\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M909.6 854.5L649.9 594.8C690.2 537.8 712 469 712 396c0-174.5-141.5-316-316-316S80 221.5 80 396s141.5 316 316 316c73 0 141.8-21.8 198.8-62.1l259.7 259.7c4.7 4.7 12.3 4.7 17 0l38.1-38.1c4.7-4.7 4.7-12.3 0-17zM396 644c-137 0-248-111-248-248S259 148 396 148s248 111 248 248-111 248-248 248z\" />\n\t</svg>\n);\n\nexport const CloseOutlined = ({\n\tstyle,\n\tclassName,\n\tonClick,\n}: IconProps & { onClick?: (e: React.MouseEvent) => void }) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"close\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"none\"\n\t\tstroke=\"currentColor\"\n\t\tstrokeWidth=\"84\"\n\t\tstrokeLinecap=\"round\"\n\t\tstrokeLinejoin=\"round\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t\tonClick={onClick}\n\t>\n\t\t<path d=\"M260 260l504 504M764 260L260 764\" />\n\t</svg>\n);\n\nexport const EditOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"edit\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M257.7 752c2 0 4-.2 6-.5L431.9 722c2-.4 3.9-1.3 5.3-2.8l423.9-423.9a9.96 9.96 0 000-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2a33.5 33.5 0 009.4 29.8c6.6 6.4 14.9 9.9 23.8 9.9zm67.4-148.6L687.8 240.7l48.1 48.1-362.7 362.7-65.6 11.5 17.5-69.6zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z\" />\n\t</svg>\n);\n\nexport const DeleteOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"delete\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M864 256H704V144c0-26.5-21.5-48-48-48H368c-26.5 0-48 21.5-48 48v112H160c-17.7 0-32 14.3-32 32v24c0 4.4 3.6 8 8 8h60.5l52.6 578.6C251.2 922.3 273 944 298.8 944h426.4c25.8 0 47.6-21.7 49.7-47.4L827.5 320H888c4.4 0 8-3.6 8-8v-24c0-17.7-14.3-32-32-32zM384 168h256v88H384v-88zm377.9 713.8a8.04 8.04 0 01-8 7.2H298.8c-4.2 0-7.7-3.2-8-7.2L240.2 320h543.5l-51.8 561.8z\" />\n\t</svg>\n);\n\nexport const ShareAltOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"share-alt\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M752 664c-28.5 0-54.8 10-75.6 26.8L414.5 522.6c1.5-7.3 2.5-14.9 2.5-22.6s-1-15.3-2.5-22.6L676.4 309.2C697.2 326 723.5 336 752 336c66.3 0 120-53.7 120-120s-53.7-120-120-120-120 53.7-120 120c0 7.7 1 15.3 2.5 22.6L372.6 406.8C351.8 390 325.5 380 296 380c-66.3 0-120 53.7-120 120s53.7 120 120 120c29.5 0 55.8-10 76.6-26.8l261.9 168.2c-1.5 7.3-2.5 14.9-2.5 22.6 0 66.3 53.7 120 120 120s120-53.7 120-120-53.7-120-120-120z\" />\n\t</svg>\n);\n\nexport const FullscreenOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"fullscreen\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"none\"\n\t\tstroke=\"currentColor\"\n\t\tstrokeWidth=\"88\"\n\t\tstrokeLinecap=\"round\"\n\t\tstrokeLinejoin=\"round\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t{/* 左上角 ↖ */}\n\t\t<path d=\"M380 180H180v200\" />\n\t\t<path d=\"M180 180l240 240\" />\n\t\t{/* 右上角 ↗ */}\n\t\t<path d=\"M644 180h200v200\" />\n\t\t<path d=\"M844 180L604 420\" />\n\t\t{/* 左下角 ↙ */}\n\t\t<path d=\"M180 644v200h200\" />\n\t\t<path d=\"M180 844l240-240\" />\n\t\t{/* 右下角 ↘ */}\n\t\t<path d=\"M844 644v200H644\" />\n\t\t<path d=\"M844 844L604 604\" />\n\t</svg>\n);\n\nexport const FullscreenExitOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"fullscreen-exit\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"none\"\n\t\tstroke=\"currentColor\"\n\t\tstrokeWidth=\"88\"\n\t\tstrokeLinecap=\"round\"\n\t\tstrokeLinejoin=\"round\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t{/* 左上角内聚 ↘ */}\n\t\t<path d=\"M180 420h240V180\" />\n\t\t<path d=\"M420 420L180 180\" />\n\t\t{/* 右上角内聚 ↙ */}\n\t\t<path d=\"M844 420H604V180\" />\n\t\t<path d=\"M604 420l240-240\" />\n\t\t{/* 左下角内聚 ↗ */}\n\t\t<path d=\"M180 604h240v240\" />\n\t\t<path d=\"M420 604L180 844\" />\n\t\t{/* 右下角内聚 ↖ */}\n\t\t<path d=\"M844 604H604v240\" />\n\t\t<path d=\"M604 604l240 240\" />\n\t</svg>\n);\n\nexport const RotateRightOutlined = ({\n\tstyle,\n\tclassName,\n\tonClick,\n}: IconProps & { onClick?: (e: React.MouseEvent) => void }) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"rotate-right\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"none\"\n\t\tstroke=\"currentColor\"\n\t\tstrokeWidth=\"80\"\n\t\tstrokeLinecap=\"round\"\n\t\tstrokeLinejoin=\"round\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t\tonClick={onClick}\n\t>\n\t\t{/* 顺时针旋转主体圆弧 */}\n\t\t<path d=\"M896 512a384 384 0 1 1-112.5-271.5L896 341\" />\n\t\t{/* 顺时针旋转折线箭头 */}\n\t\t<path d=\"M896 128v213h-213\" />\n\t</svg>\n);\n\nexport const ZoomInOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"zoom-in\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"none\"\n\t\tstroke=\"currentColor\"\n\t\tstrokeWidth=\"76\"\n\t\tstrokeLinecap=\"round\"\n\t\tstrokeLinejoin=\"round\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t{/* 放大镜圆镜框 */}\n\t\t<circle cx=\"440\" cy=\"440\" r=\"280\" />\n\t\t{/* 放大镜手柄 */}\n\t\t<path d=\"M640 640l220 220\" strokeWidth=\"88\" />\n\t\t{/* 放大镜内部清晰加号 */}\n\t\t<path d=\"M440 320v240M320 440h240\" strokeWidth=\"80\" />\n\t</svg>\n);\n\nexport const ZoomOutOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"zoom-out\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"none\"\n\t\tstroke=\"currentColor\"\n\t\tstrokeWidth=\"76\"\n\t\tstrokeLinecap=\"round\"\n\t\tstrokeLinejoin=\"round\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t{/* 放大镜圆镜框 */}\n\t\t<circle cx=\"440\" cy=\"440\" r=\"280\" />\n\t\t{/* 放大镜手柄 */}\n\t\t<path d=\"M640 640l220 220\" strokeWidth=\"88\" />\n\t\t{/* 放大镜内部清晰减号 */}\n\t\t<path d=\"M320 440h240\" strokeWidth=\"80\" />\n\t</svg>\n);\n\nexport const DownloadOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"download\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"none\"\n\t\tstroke=\"currentColor\"\n\t\tstrokeWidth=\"76\"\n\t\tstrokeLinecap=\"round\"\n\t\tstrokeLinejoin=\"round\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t{/* 下载向下箭头 */}\n\t\t<path d=\"M512 160v460M330 450l182 182 182-182\" />\n\t\t{/* 底部托盘 */}\n\t\t<path d=\"M200 680v160h624V680\" />\n\t</svg>\n);\n\nexport const FileOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"file\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zM224 896V128h314v230c0 17.7 14.3 32 32 32h230v506H224z\" />\n\t</svg>\n);\n\nexport const FilePdfOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"file-pdf\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M532 531.3c-7.9-25.1-17.9-57.9-29.2-94.8 17.4-44.5 28.5-84.5 32.8-118.6 6.8-54.6-1.5-87.1-23.7-92.3-15.6-3.7-33 11-40.4 46.1-5.1 24.3-3.6 56.4 4.3 93.3-8.8 33-21.9 76.5-38.3 125.7-18.7 56.2-41.2 108.6-66.2 153.8-37.1 20.3-69 41.5-92.9 63.8-38.2 35.6-46.7 67.2-24.1 89.8 12.8 12.8 31.6 15.3 54.1 7.2 28.8-10.4 62.9-38.9 98.7-83.3 43.1-13.8 91.5-26.3 143.1-37.2 32.8 23.3 64.9 39.8 94.6 48.7 32 9.6 57 8.3 69.8-3.9 15.6-14.8 11.6-42.3-11.4-78.7-17.7-27.9-43.9-51.5-76.3-69.6-1.4-.8-2.8-1.5-4.2-2.3zm-180.2 277c-7.8-7.8-7.8-21.1 0-38.2 11.3-24.8 29.5-48.4 52.8-68.5-25.3 47.9-43.2 86.8-52.8 106.7zm134.7-474c1.6-18.1 4.5-28.7 8.3-30.8 2.2-1.2 5-.8 8.1 1.2 5.1 3.3 7 14.5 5.5 32.5-1.9 22.8-8.2 49.3-18.4 78.4-3.2-30.1-4.7-57.2-3.5-81.3zm-27.1 257.6c17.5-47.5 31.8-90.8 42.1-127.3 9.4 29.6 17.5 56.4 24 79.2-21.6 4.9-43.9 10.3-66.1 16.1v32zm251.4 69.7c15.1 18.8 18.4 32.1 9.4 39.5-3.3 2.7-8.9 3.2-16.4.7-12.7-4.2-27.7-13.5-43.9-27.1 22.8 3.8 41.5-1.1 50.9-13.1zM854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zM224 896V128h314v230c0 17.7 14.3 32 32 32h230v506H224z\" />\n\t</svg>\n);\n\nexport const FileImageOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"file-image\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zM224 896V128h314v230c0 17.7 14.3 32 32 32h230v506H224zm136-280a48 48 0 1096 0 48 48 0 10-96 0zm336 96L552 544l-96 112-48-56-112 112h400z\" />\n\t</svg>\n);\n\nexport const FileTextOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"file-text\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zM224 896V128h314v230c0 17.7 14.3 32 32 32h230v506H224zm120-480h160c4.4 0 8-3.6 8-8v-32c0-4.4-3.6-8-8-8H344c-4.4 0-8 3.6-8 8v32c0 4.4 3.6 8 8 8zm0 120h336c4.4 0 8-3.6 8-8v-32c0-4.4-3.6-8-8-8H344c-4.4 0-8 3.6-8 8v32c0 4.4 3.6 8 8 8zm0 120h336c4.4 0 8-3.6 8-8v-32c0-4.4-3.6-8-8-8H344c-4.4 0-8 3.6-8 8v32c0 4.4 3.6 8 8 8z\" />\n\t</svg>\n);\n\nexport const EyeOutlined = ({ style, className, onClick }: IconProps & { onClick?: (e: React.MouseEvent) => void }) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"eye\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t\tonClick={onClick}\n\t>\n\t\t<path d=\"M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.2a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.4 684.2 673.3 766 512 766zm-1-438c-101.6 0-184 82.4-184 184s82.4 184 184 184 184-82.4 184-184-82.4-184-184-184zm0 296c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z\" />\n\t</svg>\n);\n\nexport const EyeInvisibleOutlined = ({ style, className, onClick }: IconProps & { onClick?: (e: React.MouseEvent) => void }) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"eye-invisible\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t\tonClick={onClick}\n\t>\n\t\t<path d=\"M942.2 486.2Q889.47 375.11 804.85 296.83l57.75-57.75a8.03 8.03 0 000-11.32l-39.6-39.6a8.03 8.03 0 00-11.31 0L117.82 882.03a8.03 8.03 0 000 11.32l39.6 39.6a8.03 8.03 0 0011.31 0l79.47-79.47C333.62 882.35 421.36 900 512 900c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 828c-161.3 0-279.4-81.8-362.7-254 38.67-80.44 94.67-142.75 163.66-184.22l81.65 81.65a184.07 184.07 0 00231.42 231.42l77.72 77.72C637.38 812.59 576.84 828 512 828zm-399.7-331.4C108.6 489.1 106 480 106 470c0-10 2.6-19.1 6.3-26.6 94.8-199.7 238-300.2 430.2-300.2 73.1 0 141.7 14.5 204.6 41.5l-63.5 63.5A384.85 384.85 0 00512 210c-161.3 0-279.4 81.8-362.7 254 18.23 37.93 40.54 70.83 66.27 98.42l-51.3 51.3a549.9 549.9 0 01-51.97-117.12z\" />\n\t</svg>\n);\n\nexport const PlayCircleOutlined = ({ style, className, onClick }: IconProps & { onClick?: (e: React.MouseEvent) => void }) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"play-circle\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t\tonClick={onClick}\n\t>\n\t\t<path d=\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372zm-88-532.7v325.4c0 10.7 11.9 17.1 20.9 11.3l244-162.7a13.6 13.6 0 000-22.6l-244-162.7c-9-5.8-20.9.6-20.9 11.3z\" />\n\t</svg>\n);\n\nexport const PauseCircleOutlined = ({ style, className, onClick }: IconProps & { onClick?: (e: React.MouseEvent) => void }) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"pause-circle\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t\tonClick={onClick}\n\t>\n\t\t<path d=\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372zm-128-524c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v304c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V360zm160 0c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v304c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V360z\" />\n\t</svg>\n);\n\nexport const UndoOutlined = ({ style, className, onClick }: IconProps & { onClick?: (e: React.MouseEvent) => void }) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"undo\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t\tonClick={onClick}\n\t>\n\t\t<path d=\"M758 416H428.8l93.7-93.7c3.1-3.1 3.1-8.2 0-11.3l-22.6-22.6a8.03 8.03 0 00-11.3 0L303.3 473.7a8.03 8.03 0 000 11.3l185.3 185.3c3.1 3.1 8.2 3.1 11.3 0l22.6-22.6c3.1-3.1 3.1-8.2 0-11.3L428.8 544H758c56.3 0 102 45.7 102 102s-45.7 102-102 102H260c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h498c120.4 0 218-97.6 218-218s-97.6-218-218-218z\" />\n\t</svg>\n);\n\nexport const RedoOutlined = ({ style, className, onClick }: IconProps & { onClick?: (e: React.MouseEvent) => void }) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"redo\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t\tonClick={onClick}\n\t>\n\t\t<path d=\"M758.2 338.3L572.9 153c-3.1-3.1-8.2-3.1-11.3 0l-22.6 22.6a8.03 8.03 0 000 11.3l93.7 93.7H266c-120.4 0-218 97.6-218 218s97.6 218 218 218h498c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H266c-56.3 0-102-45.7-102-102s45.7-102 102-102h366.7l-93.7 93.7c-3.1 3.1-3.1 8.2 0 11.3l22.6 22.6c3.1 3.1 8.2 3.1 11.3 0l185.3-185.3a8.03 8.03 0 000-11.3z\" />\n\t</svg>\n);\n\nexport const ReloadOutlined = ({ style, className, onClick }: IconProps & { onClick?: (e: React.MouseEvent) => void }) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"reload\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t\tonClick={onClick}\n\t>\n\t\t<path d=\"M909.1 209.3l-56.4 44.1C775.8 155.1 656.2 96 512 96 282.2 96 96 282.2 96 512s186.2 416 416 416c196.4 0 361.3-136.2 404.7-319.4 1.2-5.1-1.9-10.2-7.1-11.4l-62.4-14.7c-5.1-1.2-10.2 1.9-11.4 7.1C800.7 724.8 667.6 832 512 832c-176.7 0-320-143.3-320-320s143.3-320 320-320c112.5 0 211.3 58 268.4 146.4l-75.1 58.7c-5.3 4.1-3.4 12.6 3.1 14.1l197.8 45.4c4.6 1.1 9.1-2.4 9.1-7.1l-1.9-202.9c0-6.6-8.2-9.7-12.7-4.9z\" />\n\t</svg>\n);\n\nexport const SoundOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"sound\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M625.9 115c-5.9 0-11.9 1.6-17.2 4.9L354.8 280H192c-17.7 0-32 14.3-32 32v384c0 17.7 14.3 32 32 32h162.8l253.9 160.1c5.3 3.3 11.3 4.9 17.2 4.9 18.2 0 33.1-14.9 33.1-33.1V148.1c0-18.2-14.9-33.1-33.1-33.1zm-32.9 663.2L367.6 634.6a8 8 0 00-4.3-1.2H232V390.6h131.3a8 8 0 004.3-1.2L593 245.8v532.4zM704 398.7a32 32 0 00-32 32v162.6a32 32 0 0064 0V430.7a32 32 0 00-32-32zm96-99.3a32 32 0 00-32 32v361.3a32 32 0 0064 0V331.4a32 32 0 00-32-32z\" />\n\t</svg>\n);\n\nexport const SendOutlined = ({ style, className, onClick }: IconProps & { onClick?: (e: React.MouseEvent) => void }) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"send\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t\tonClick={onClick}\n\t>\n\t\t<path d=\"M931.4 498.9L94.9 79.5c-3.4-1.7-7.3-2.1-11-1.2a15.8 15.8 0 00-11.8 17.9L173 496H512v32H173L72.1 927.8c-1.8 7.3 1.9 14.9 8.8 17.7 2.3.9 4.7 1.2 7.1.7 3.7-.7 7.1-2.9 9.1-6L931.4 525.1c6.1-4.7 7.4-13.5 2.7-19.6-.8-1-1.7-1.8-2.7-2.6z\" />\n\t</svg>\n);\n\nexport const LikeOutlined = ({ style, className, onClick }: IconProps & { onClick?: (e: React.MouseEvent) => void }) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"like\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t\tonClick={onClick}\n\t>\n\t\t<path d=\"M885.9 533.7c16.8-22.2 26.1-49.4 26.1-77.7 0-44.9-25.1-85-65.6-104.2l-21.8-10.3 8.5-22.6c8.6-22.8 13-46.9 13-71.9 0-94.8-77-172-171.8-172-35.4 0-69.2 10.9-97.7 31.5L462.6 193c-2.4 1.7-4.6 3.6-6.6 5.6L348 306.6c-4.4 4.4-6.9 10.4-6.9 16.6V768c0 13.3 10.7 24 24 24h356c32.1 0 61.5-16.7 77.8-44.1l21.2-35.7 38.6-6.4c35.4-5.9 64.3-30.8 74.9-64.6l6.8-21.6 22 4.4c2.8.6 5.6.8 8.4.8 28.3 0 54.8-12.8 72.1-35.3 16.8-22.2 21.6-50.6 13.1-77.9l-6.8-21.6 22 4.4c2.8.6 5.6.8 8.4.8 28.3 0 54.8-12.8 72.1-35.3 16.8-22.2 21.6-50.6 13.1-77.9l-8.9-28.7zM792 720H406V336l96-96c21.2-21.2 46.3-37.4 73.9-47.5 12.8-4.7 26.3-7.1 40.1-7.1 55.1 0 100 44.9 100 100 0 18.2-4.1 36.1-11.9 52.3l-19.1 39.5H846c24.6 0 45.4 17.5 49.3 41.8 1.9 12-1 24.1-8.1 33.4L870.3 475l16.9 5.6c11.9 3.9 21.3 12.8 25.8 24.4s3 24.4-4.2 33.9L892 560l16.9 5.6c11.9 3.9 21.3 12.8 25.8 24.4s3 24.4-4.2 33.9L913.6 645l-12.1 38.6c-5.8 18.5-21.7 32.1-41.1 35.3L792 720zm-536 72h-80c-4.4 0-8-3.6-8-8V328c0-4.4 3.6-8 8-8h80c4.4 0 8 3.6 8 8v456c0 4.4-3.6 8-8 8z\" />\n\t</svg>\n);\n\nexport const DislikeOutlined = ({ style, className, onClick }: IconProps & { onClick?: (e: React.MouseEvent) => void }) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"dislike\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t\tonClick={onClick}\n\t>\n\t\t<path d=\"M885.9 490.3l8.9-28.7c8.5-27.3 3.7-55.7-13.1-77.9-17.3-22.5-43.8-35.3-72.1-35.3-2.8 0-5.6.3-8.4.8l-22 4.4 6.8-21.6c8.5-27.3 3.7-55.7-13.1-77.9-17.3-22.5-43.8-35.3-72.1-35.3-2.8 0-5.6.3-8.4.8l-22 4.4-6.8-21.6c-10.6-33.8-39.5-58.7-74.9-64.6l-38.6-6.4-21.2-35.7C620.5 106.7 591.1 90 559 90H203c-13.3 0-24 10.7-24 24v444.8c0 6.2 2.5 12.2 6.9 16.6l108 108c2 2 4.2 3.9 6.6 5.6l113.8 81.3c28.5 20.6 62.3 31.5 97.7 31.5 94.8 0 171.8-77.2 171.8-172 0-25-4.4-49.1-13-71.9l-8.5-22.6 21.8-10.3c40.5-19.2 65.6-59.3 65.6-104.2.1-28.3-9.2-55.5-26-77.7zM792 304l68.4-1.1c19.4 3.2 35.3 16.8 41.1 35.3l12.1 38.6 16.9 21.2c7.2 9.5 8.7 22.3 4.2 33.9s-13.9 20.5-25.8 24.4L892 462l16.9 21.2c7.2 9.5 8.7 22.3 4.2 33.9s-13.9 20.5-25.8 24.4l-16.9 5.6 14.8 17.9c7.1 9.3 10 21.4 8.1 33.4-3.9 24.3-24.7 41.8-49.3 41.8H741l19.1 39.5c7.8 16.2 11.9 34.1 11.9 52.3 0 55.1-44.9 100-100 100-13.8 0-27.3-2.4-40.1-7.1-27.6-10.1-52.7-26.3-73.9-47.5l-96-96V232h386zM256 232h-80c-4.4 0-8 3.6-8 8v456c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V240c0-4.4-3.6-8-8-8z\" />\n\t</svg>\n);\n\nexport const StarFilled = ({ style, className, onClick }: IconProps & { onClick?: (e: React.MouseEvent) => void }) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"star\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t\tonClick={onClick}\n\t>\n\t\t<path d=\"M908.1 353.1l-253.9-36.9L540.7 86.6c-9.7-19.7-37.7-19.7-47.4 0L379.8 316.2l-253.9 36.9c-21.9 3.2-30.6 30-14.7 45.5l183.7 179-43.4 252.9c-3.7 21.8 19.1 38.4 38.8 28.1L512 740l221.7 116.6c19.7 10.4 42.5-6.3 38.8-28.1l-43.4-252.9 183.7-179c15.9-15.5 7.2-42.3-14.7-45.5z\" />\n\t</svg>\n);\n\n\n\n\n\n\n\n\n","import { DownOutlined, LeftOutlined, RightOutlined, UpOutlined } from '../src/icons';\nimport type {\n\tCSSProperties,\n\tReactElement,\n\tReactNode,\n\tPointerEvent as ReactPointerEvent,\n} from 'react';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nexport type SplitterSize = number | `${number}%`;\nexport type SplitterOrientation = 'horizontal' | 'vertical';\n\nexport type SplitterCollapsible =\n\t| boolean\n\t| {\n\t\t\tstart?: boolean;\n\t\t\tend?: boolean;\n\t\t\tshowCollapsibleIcon?: boolean | 'auto';\n\t };\n\n/**\n * Splitter.Panel 子面板组件属性\n */\nexport type SplitterPanelProps = {\n\t/** 面板内容节点 */\n\tchildren?: ReactNode;\n\t/** 面板自定义类名 */\n\tclassName?: string;\n\t/**\n\t * 折叠配置:\n\t * - `boolean`: 是否允许两端折叠\n\t * - `Object`: `{ start?: boolean; end?: boolean; showCollapsibleIcon?: boolean | 'auto' }`\n\t */\n\tcollapsible?: SplitterCollapsible;\n\t/** 面板初始默认尺寸(支持数字 px 或百分比字符串如 '40%') */\n\tdefaultSize?: SplitterSize;\n\t/** 折叠/隐藏时是否销毁面板内容节点(可覆盖 Splitter 根容器上的 destroyOnHidden 属性) */\n\tdestroyOnHidden?: boolean;\n\t/** 面板最大允许尺寸限制 */\n\tmax?: SplitterSize;\n\t/** 面板最小允许尺寸限制 */\n\tmin?: SplitterSize;\n\t/** 是否允许通过分隔条拖拽调整大小(默认 true) */\n\tresizable?: boolean;\n\t/** 面板受控尺寸 */\n\tsize?: SplitterSize;\n\t/** 面板自定义 CSS 样式 */\n\tstyle?: CSSProperties;\n};\n\nexport type SplitterSemanticDOM = 'root' | 'panel' | 'dragger';\n/** 语义化 DOM 结构标识 */\nexport type SemanticDOM = SplitterSemanticDOM;\n\nexport type SplitterStyles =\n\t| Partial<Record<SplitterSemanticDOM, CSSProperties>>\n\t| ((info: { props: SplitterProps }) => Partial<Record<SplitterSemanticDOM, CSSProperties>>);\n\nexport type SplitterClassNames =\n\t| Partial<Record<SplitterSemanticDOM, string>>\n\t| ((info: { props: SplitterProps }) => Partial<Record<SplitterSemanticDOM, string>>);\n\n/**\n * Splitter 根容器组件属性\n */\nexport type SplitterProps = {\n\t/** 面板集合(建议传入 Splitter.Panel) */\n\tchildren?: ReactNode;\n\t/** 容器根节点自定义类名 */\n\tclassName?: string;\n\t/** 用于自定义组件内部各语义化结构(root、panel、dragger)的 class,支持对象或函数 */\n\tclassNames?: SplitterClassNames;\n\t/** 折叠/隐藏时是否销毁面板内容节点(默认 false,保留组件状态) */\n\tdestroyOnHidden?: boolean;\n\t/** 拖拽分隔条的宽度/高度(单位 px,默认 4) */\n\tdraggerSize?: number;\n\t/** 是否在拖拽结束时才更新视图(默认 false) */\n\tlazy?: boolean;\n\t/** 面板展开或折叠状态改变时的回调 */\n\tonCollapse?: (collapsed: boolean[], sizes: number[]) => void;\n\t/** 拖拽过程中的实时尺寸变化回调 */\n\tonResize?: (sizes: number[]) => void;\n\t/** 拖拽结束、重置尺寸或折叠完成时的回调 */\n\tonResizeEnd?: (sizes: number[]) => void;\n\t/** 开始拖拽分隔条时的回调 */\n\tonResizeStart?: (sizes: number[]) => void;\n\t/** 双击拖拽条回调 */\n\tonDraggerDoubleClick?: (index: number) => void;\n\t/** 分屏方向:'horizontal'(水平分屏)| 'vertical'(垂直分屏),默认 'horizontal' */\n\torientation?: SplitterOrientation;\n\t/** 容器根节点自定义 CSS 样式 */\n\tstyle?: CSSProperties;\n\t/** 容器根节点及各语义化结构(root、panel、dragger)自定义 CSS 样式,支持对象或函数 */\n\tstyles?: SplitterStyles;\n\t/** 是否垂直分屏(orientation=\"vertical\" 的简写形式) 排列方向,与 orientation 同时存在,以 orientation 优先 */\n\tvertical?: boolean;\n\t/** 自定义拖拽手柄图标/节点 */\n\tdraggerIcon?: ReactNode;\n};\n\nexport interface ResolvedCollapsible {\n\tstart: boolean;\n\tend: boolean;\n\tshowCollapsibleIcon: boolean | 'auto';\n}\n\nconst getCollapsibleConfig = (collapsible?: SplitterCollapsible): ResolvedCollapsible => {\n\tif (!collapsible) {\n\t\treturn { start: false, end: false, showCollapsibleIcon: 'auto' };\n\t}\n\tif (typeof collapsible === 'boolean') {\n\t\treturn {\n\t\t\tstart: collapsible,\n\t\t\tend: collapsible,\n\t\t\tshowCollapsibleIcon: collapsible ? true : 'auto',\n\t\t};\n\t}\n\treturn {\n\t\tstart: collapsible.start ?? false,\n\t\tend: collapsible.end ?? false,\n\t\tshowCollapsibleIcon: collapsible.showCollapsibleIcon ?? true,\n\t};\n};\n\ntype SplitterComponent = React.FC<SplitterProps> & {\n\tPanel: React.FC<SplitterPanelProps>;\n};\n\nconst DEFAULT_DRAGGER_SIZE = 4;\nconst MIN_DRAG_SIZE = 40; // 手动拖拽调整大小时的默认最小限制 (px)\n\nconst SplitterPanel: React.FC<SplitterPanelProps> = ({ children }) => <>{children}</>;\n\nconst isPercentSize = (value: SplitterSize): value is `${number}%` =>\n\ttypeof value === 'string' && value.endsWith('%');\n\nconst parseSize = (value: SplitterSize | undefined, total: number, fallback: number) => {\n\tif (value === undefined) {\n\t\treturn fallback;\n\t}\n\n\tif (isPercentSize(value)) {\n\t\treturn (Number.parseFloat(value) / 100) * total;\n\t}\n\n\treturn Number(value);\n};\n\nconst roundSizes = (sizes: number[]) => sizes.map((size) => Math.round(size));\n\nconst getPointerPosition = (\n\tevent: PointerEvent | ReactPointerEvent,\n\torientation: SplitterOrientation,\n) => (orientation === 'horizontal' ? event.clientX : event.clientY);\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveSemanticStyles = (\n\tstyles: SplitterStyles | undefined,\n\tinfoProps: SplitterProps,\n): Partial<Record<SplitterSemanticDOM, CSSProperties>> => {\n\tif (!styles) {\n\t\treturn {};\n\t}\n\n\tconst resolved = typeof styles === 'function' ? styles({ props: infoProps }) : styles;\n\treturn resolved || {};\n};\n\nconst resolveSemanticClassNames = (\n\tclassNames: SplitterClassNames | undefined,\n\tinfoProps: SplitterProps,\n): Partial<Record<SplitterSemanticDOM, string>> => {\n\tif (!classNames) {\n\t\treturn {};\n\t}\n\n\tconst resolved = typeof classNames === 'function' ? classNames({ props: infoProps }) : classNames;\n\treturn resolved || {};\n};\n\nconst CustomSplitter: SplitterComponent = (props) => {\n\tconst {\n\t\tchildren,\n\t\tclassName,\n\t\tclassNames,\n\t\tdestroyOnHidden = false,\n\t\tdraggerIcon,\n\t\tdraggerSize = DEFAULT_DRAGGER_SIZE,\n\t\tlazy = false,\n\t\tonResize,\n\t\tonResizeEnd,\n\t\tonResizeStart,\n\t\tonCollapse,\n\t\tonDraggerDoubleClick,\n\t\torientation,\n\t\tstyle,\n\t\tstyles,\n\t\tvertical = false,\n\t} = props;\n\tconst resolvedOrientation = orientation ?? (vertical ? 'vertical' : 'horizontal');\n\tconst rootRef = useRef<HTMLDivElement>(null);\n\tconst sizesRef = useRef<number[]>([]);\n\tconst [containerSize, setContainerSize] = useState(0);\n\tconst [draggingIndex, setDraggingIndex] = useState<number | null>(null);\n\tconst [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\n\tconst [hoveredCollapsePanelIndex, setHoveredCollapsePanelIndex] = useState<number | null>(null);\n\tconst [sizes, setSizes] = useState<number[]>([]);\n\n\tconst semanticStyles = useMemo(() => resolveSemanticStyles(styles, props), [styles, props]);\n\tconst semanticClassNames = useMemo(\n\t\t() => resolveSemanticClassNames(classNames, props),\n\t\t[classNames, props],\n\t);\n\n\tconst panels = useMemo(\n\t\t() =>\n\t\t\tReact.Children.toArray(children).filter(\n\t\t\t\tReact.isValidElement,\n\t\t\t) as ReactElement<SplitterPanelProps>[],\n\t\t[children],\n\t);\n\n\tconst trackSize = Math.max(0, containerSize - Math.max(0, panels.length - 1) * draggerSize);\n\n\tconst getPanelMin = useCallback(\n\t\t(index: number) => parseSize(panels[index]?.props.min, trackSize, 0),\n\t\t[panels, trackSize],\n\t);\n\n\tconst getPanelMax = useCallback(\n\t\t(index: number) => parseSize(panels[index]?.props.max, trackSize, trackSize),\n\t\t[panels, trackSize],\n\t);\n\n\tconst normalizeToTrack = useCallback(\n\t\t(nextSizes: number[]) => {\n\t\t\tif (!trackSize || !nextSizes.length) {\n\t\t\t\treturn nextSizes;\n\t\t\t}\n\n\t\t\tconst normalized = [...nextSizes];\n\t\t\tconst diff = trackSize - normalized.reduce((sum, size) => sum + size, 0);\n\t\t\tconst flexibleIndex = normalized.findIndex((size) => size > 0);\n\t\t\tif (flexibleIndex !== -1) {\n\t\t\t\tnormalized[flexibleIndex] += diff;\n\t\t\t}\n\n\t\t\treturn normalized.map((size, index) => {\n\t\t\t\t// 折叠状态(size <= 1)保持为 0,不受 min 限制干扰\n\t\t\t\tif (size <= 1) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\t// 拖拽过程从 0 拖出时,允许在 0 到 min 之间平滑过渡,不被强行跳变到 min\n\t\t\t\tif (size < getPanelMin(index)) {\n\t\t\t\t\treturn size;\n\t\t\t\t}\n\t\t\t\treturn clamp(size, getPanelMin(index), getPanelMax(index));\n\t\t\t});\n\t\t},\n\t\t[getPanelMax, getPanelMin, trackSize],\n\t);\n\n\tconst buildInitialSizes = useCallback(\n\t\t(previous?: number[]) => {\n\t\t\tif (!trackSize || !panels.length) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tif (previous?.length === panels.length) {\n\t\t\t\tconst previousTotal = previous.reduce((sum, size) => sum + size, 0);\n\t\t\t\tif (previousTotal > 0) {\n\t\t\t\t\treturn normalizeToTrack(previous.map((size) => (size / previousTotal) * trackSize));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst explicitSizes = panels.map((panel) =>\n\t\t\t\tparseSize(panel.props.size ?? panel.props.defaultSize, trackSize, -1),\n\t\t\t);\n\t\t\tconst usedSize = explicitSizes\n\t\t\t\t.filter((size) => size >= 0)\n\t\t\t\t.reduce((sum, size) => sum + size, 0);\n\t\t\tconst unsetCount = explicitSizes.filter((size) => size < 0).length;\n\t\t\tconst fallbackSize = unsetCount ? Math.max(0, (trackSize - usedSize) / unsetCount) : 0;\n\n\t\t\treturn normalizeToTrack(\n\t\t\t\texplicitSizes.map((size, index) =>\n\t\t\t\t\tclamp(size >= 0 ? size : fallbackSize, getPanelMin(index), getPanelMax(index)),\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\t\t[getPanelMax, getPanelMin, normalizeToTrack, panels, trackSize],\n\t);\n\n\tconst updateSizes = useCallback(\n\t\t(nextSizes: number[], notify = true) => {\n\t\t\tconst normalized = normalizeToTrack(nextSizes);\n\t\t\tsetSizes(normalized);\n\t\t\tsizesRef.current = normalized;\n\t\t\tif (notify) {\n\t\t\t\tonResize?.(roundSizes(normalized));\n\t\t\t}\n\t\t},\n\t\t[normalizeToTrack, onResize],\n\t);\n\n\tuseEffect(() => {\n\t\tconst node = rootRef.current;\n\t\tif (!node) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst syncSize = () => {\n\t\t\tsetContainerSize(resolvedOrientation === 'horizontal' ? node.clientWidth : node.clientHeight);\n\t\t};\n\t\tsyncSize();\n\n\t\tconst observer = new ResizeObserver(syncSize);\n\t\tobserver.observe(node);\n\t\treturn () => observer.disconnect();\n\t}, [resolvedOrientation]);\n\n\tuseEffect(() => {\n\t\tsetSizes((previous) => {\n\t\t\tconst nextSizes = buildInitialSizes(previous);\n\t\t\tsizesRef.current = nextSizes;\n\t\t\treturn nextSizes;\n\t\t});\n\t}, [buildInitialSizes]);\n\n\tconst getResizedPair = useCallback(\n\t\t(sourceSizes: number[], index: number, delta: number) => {\n\t\t\tconst nextSizes = [...sourceSizes];\n\t\t\tconst isLeftCollapsed = sourceSizes[index] <= 1;\n\t\t\tconst isRightCollapsed = sourceSizes[index + 1] <= 1;\n\n\t\t\tconst leftMin = isLeftCollapsed ? 0 : getPanelMin(index);\n\t\t\tconst rightMin = isRightCollapsed ? 0 : getPanelMin(index + 1);\n\t\t\tconst leftMax = getPanelMax(index);\n\t\t\tconst rightMax = getPanelMax(index + 1);\n\n\t\t\tconst minDelta = Math.max(leftMin - sourceSizes[index], sourceSizes[index + 1] - rightMax);\n\t\t\tconst maxDelta = Math.min(leftMax - sourceSizes[index], sourceSizes[index + 1] - rightMin);\n\t\t\tconst safeDelta = clamp(delta, minDelta, maxDelta);\n\n\t\t\tnextSizes[index] = sourceSizes[index] + safeDelta;\n\t\t\tnextSizes[index + 1] = sourceSizes[index + 1] - safeDelta;\n\t\t\treturn normalizeToTrack(nextSizes);\n\t\t},\n\t\t[getPanelMax, getPanelMin, normalizeToTrack],\n\t);\n\n\tconst getInitialLockedIndex = useCallback(\n\t\t(sourceSizes: number[], startIndex: number, delta: number) => {\n\t\t\tif (sourceSizes[startIndex] <= 1 && delta < 0 && startIndex > 0) {\n\t\t\t\treturn startIndex - 1;\n\t\t\t}\n\t\t\tif (sourceSizes[startIndex + 1] <= 1 && delta > 0 && startIndex < sourceSizes.length - 2) {\n\t\t\t\treturn startIndex + 1;\n\t\t\t}\n\t\t\treturn startIndex;\n\t\t},\n\t\t[],\n\t);\n\n\tconst resizePair = useCallback(\n\t\t(index: number, delta: number, notify = true) => {\n\t\t\tconst targetIndex = getInitialLockedIndex(sizesRef.current, index, delta);\n\t\t\tupdateSizes(getResizedPair(sizesRef.current, targetIndex, delta), notify);\n\t\t},\n\t\t[getInitialLockedIndex, getResizedPair, updateSizes],\n\t);\n\n\tconst startResize = (index: number, event: ReactPointerEvent<HTMLDivElement>) => {\n\t\tif (panels[index].props.resizable === false || panels[index + 1].props.resizable === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tconst startPosition = getPointerPosition(event, resolvedOrientation);\n\t\tconst startSizes = [...sizesRef.current];\n\t\tlet latestSizes = startSizes;\n\t\tlet lockedIndex: number | null = null;\n\n\t\tsetDraggingIndex(index);\n\t\tonResizeStart?.(roundSizes(startSizes));\n\n\t\tconst handlePointerMove = (moveEvent: PointerEvent) => {\n\t\t\tconst delta = getPointerPosition(moveEvent, resolvedOrientation) - startPosition;\n\t\t\tif (delta === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (lockedIndex === null) {\n\t\t\t\tlockedIndex = getInitialLockedIndex(startSizes, index, delta);\n\t\t\t}\n\n\t\t\tlatestSizes = getResizedPair(startSizes, lockedIndex, delta);\n\t\t\tif (!lazy) {\n\t\t\t\tupdateSizes(latestSizes, true);\n\t\t\t}\n\t\t};\n\n\t\tconst handlePointerUp = () => {\n\t\t\tdocument.removeEventListener('pointermove', handlePointerMove);\n\t\t\tdocument.removeEventListener('pointerup', handlePointerUp);\n\t\t\tsetDraggingIndex(null);\n\t\t\tif (lazy) {\n\t\t\t\tupdateSizes(latestSizes, true);\n\t\t\t}\n\t\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\t\tconst startCollapsed = startSizes.map((size) => size <= 1);\n\t\t\tif (currentCollapsed.some((c, i) => c !== startCollapsed[i])) {\n\t\t\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\t\t}\n\t\t\tonResizeEnd?.(currentSizes);\n\t\t};\n\n\t\tdocument.addEventListener('pointermove', handlePointerMove);\n\t\tdocument.addEventListener('pointerup', handlePointerUp);\n\t};\n\n\tconst toggleCollapse = (index: number, neighborIndex: number) => {\n\t\tconst nextSizes = [...sizesRef.current];\n\n\t\tif (nextSizes[index] > 1) {\n\t\t\tnextSizes[neighborIndex] += nextSizes[index];\n\t\t\tnextSizes[index] = 0;\n\t\t} else {\n\t\t\tconst initialSizes = buildInitialSizes();\n\t\t\tconst initialSize =\n\t\t\t\tinitialSizes[index] ??\n\t\t\t\tparseSize(panels[index].props.defaultSize, trackSize, trackSize / panels.length);\n\t\t\tconst restoredSize = clamp(initialSize, getPanelMin(index), getPanelMax(index));\n\t\t\tnextSizes[index] = restoredSize;\n\t\t\tnextSizes[neighborIndex] = Math.max(0, nextSizes[neighborIndex] - nextSizes[index]);\n\t\t}\n\n\t\tupdateSizes(nextSizes);\n\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\tonResizeEnd?.(currentSizes);\n\t};\n\n\tconst resetSizes = () => {\n\t\tconst previousCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tconst nextSizes = buildInitialSizes();\n\t\tupdateSizes(nextSizes);\n\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tif (currentCollapsed.some((c, i) => c !== previousCollapsed[i])) {\n\t\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\t}\n\t\tonResizeEnd?.(currentSizes);\n\t};\n\n\tconst rootStyle: CSSProperties = {\n\t\tborder: '1px solid #f0f0f0',\n\t\tborderRadius: 8,\n\t\tboxSizing: 'border-box',\n\t\tdisplay: 'flex',\n\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'row' : 'column',\n\t\theight: '100%',\n\t\tminHeight: 0,\n\t\toverflow: 'hidden',\n\t\tposition: 'relative',\n\t\twidth: '100%',\n\t\t...semanticStyles.root,\n\t\t...style,\n\t};\n\n\tconst renderCollapseButton = (\n\t\tdraggerIndex: number,\n\t\tpanelIndex: number,\n\t\tdirection: 'start' | 'end',\n\t) => {\n\t\tconst panel = panels[panelIndex];\n\t\tconst config = getCollapsibleConfig(panel?.props.collapsible);\n\t\tconst isAllowed = direction === 'start' ? config.start : config.end;\n\n\t\tif (!isAllowed || config.showCollapsibleIcon === false) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst neighborIndex = direction === 'start' ? panelIndex + 1 : panelIndex - 1;\n\t\tconst isCollapsed = (sizes[panelIndex] ?? 0) <= 1;\n\t\tconst isNeighborCollapsed = (sizes[neighborIndex] ?? 0) <= 1;\n\n\t\t// 自己折叠后隐藏;对侧面板折叠后也隐藏(避免与展开按钮重复/语义冲突)\n\t\tif (isCollapsed || isNeighborCollapsed) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// 展开时箭头指向面板将被折叠到的方向\n\t\tconst Icon =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? direction === 'start'\n\t\t\t\t\t? LeftOutlined\n\t\t\t\t\t: RightOutlined\n\t\t\t\t: direction === 'start'\n\t\t\t\t\t? UpOutlined\n\t\t\t\t\t: DownOutlined;\n\n\t\tconst isHorizontal = resolvedOrientation === 'horizontal';\n\t\tconst isAlwaysShow = config.showCollapsibleIcon === true;\n\t\tconst isHoveredOrDragging = hoveredIndex === draggerIndex || draggingIndex === draggerIndex;\n\t\tconst opacity = isAlwaysShow || isHoveredOrDragging ? 1 : 0;\n\t\tconst pointerEvents = isAlwaysShow || isHoveredOrDragging ? 'auto' : 'none';\n\n\t\tconst buttonTitle =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? direction === 'start'\n\t\t\t\t\t? '折叠左侧面板'\n\t\t\t\t\t: '折叠右侧面板'\n\t\t\t\t: direction === 'start'\n\t\t\t\t\t? '折叠上方面板'\n\t\t\t\t\t: '折叠下方面板';\n\n\t\treturn (\n\t\t\t<button\n\t\t\t\taria-label={buttonTitle}\n\t\t\t\ttitle={buttonTitle}\n\t\t\t\tonClick={(event) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\ttoggleCollapse(panelIndex, neighborIndex);\n\t\t\t\t}}\n\t\t\t\tonDoubleClick={(event) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}}\n\t\t\t\tstyle={{\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\tborder: '1px solid #d9d9d9',\n\t\t\t\t\tborderRadius: 3,\n\t\t\t\t\tcolor: '#595959',\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\theight: isHorizontal ? 40 : 14,\n\t\t\t\t\twidth: isHorizontal ? 14 : 40,\n\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\tfontSize: 10,\n\t\t\t\t\tboxShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',\n\t\t\t\t\ttransition: 'all 0.2s ease',\n\t\t\t\t\topacity,\n\t\t\t\t\tpointerEvents,\n\t\t\t\t}}\n\t\t\t\ttype=\"button\"\n\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\te.currentTarget.style.background = '#e5e7eb';\n\t\t\t\t\te.currentTarget.style.color = '#1f2937';\n\t\t\t\t\tsetHoveredCollapsePanelIndex(panelIndex);\n\t\t\t\t}}\n\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\te.currentTarget.style.background = '#fff';\n\t\t\t\t\te.currentTarget.style.color = '#595959';\n\t\t\t\t\tsetHoveredCollapsePanelIndex(null);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Icon />\n\t\t\t</button>\n\t\t);\n\t};\n\n\tconst rootClassName = [className, semanticClassNames.root].filter(Boolean).join(' ') || undefined;\n\n\treturn (\n\t\t<div className={rootClassName} ref={rootRef} style={rootStyle}>\n\t\t\t{panels.map((panel, index) => {\n\t\t\t\tconst isHidden = sizes[index] <= 1;\n\t\t\t\tconst isLeftOrTopCollapsed = (sizes[index] ?? 0) <= 1;\n\t\t\t\tconst isRightOrBottomCollapsed = (sizes[index + 1] ?? 0) <= 1;\n\t\t\t\tconst isAnyCollapsed = isLeftOrTopCollapsed || isRightOrBottomCollapsed;\n\t\t\t\tconst panelDestroyOnHidden = panel.props.destroyOnHidden ?? destroyOnHidden;\n\t\t\t\tconst shouldRenderContent = !isHidden || !panelDestroyOnHidden;\n\n\t\t\t\treturn (\n\t\t\t\t\t<React.Fragment key={index}>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t[semanticClassNames.panel, panel.props.className].filter(Boolean).join(' ') ||\n\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tbackground: index % 2 ? '#fff' : '#fafafa',\n\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\tflex: `0 0 ${sizes[index] ?? 0}px`,\n\t\t\t\t\t\t\t\tminHeight: 0,\n\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\t\t\tboxShadow:\n\t\t\t\t\t\t\t\t\thoveredCollapsePanelIndex === index ? 'inset 0 0 0 2px #1677ff' : undefined,\n\t\t\t\t\t\t\t\ttransition:\n\t\t\t\t\t\t\t\t\tdraggingIndex === null ? 'box-shadow 0.2s ease, flex-basis 0.2s ease' : undefined,\n\t\t\t\t\t\t\t\t...semanticStyles.panel,\n\t\t\t\t\t\t\t\t...panel.props.style,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{shouldRenderContent && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\t\tdisplay: isHidden ? 'none' : 'block',\n\t\t\t\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\t\t\t\toverflowX: 'hidden',\n\t\t\t\t\t\t\t\t\t\toverflowY: 'auto',\n\t\t\t\t\t\t\t\t\t\tpadding: (sizes[index] ?? 0) < 32 ? 0 : 16,\n\t\t\t\t\t\t\t\t\t\twidth: '100%',\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{panel.props.children}\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</div>\n\n\t\t\t\t\t\t{index < panels.length - 1 && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\taria-orientation={resolvedOrientation}\n\t\t\t\t\t\t\t\tclassName={semanticClassNames.dragger}\n\t\t\t\t\t\t\t\tonDoubleClick={() => {\n\t\t\t\t\t\t\t\t\tonDraggerDoubleClick?.(index);\n\t\t\t\t\t\t\t\t\tresetSizes();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\t\tconst step = event.shiftKey ? 40 : 10;\n\t\t\t\t\t\t\t\t\tconst directionMap =\n\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t? { ArrowLeft: -step, ArrowRight: step }\n\t\t\t\t\t\t\t\t\t\t\t: { ArrowUp: -step, ArrowDown: step };\n\t\t\t\t\t\t\t\t\tconst delta = directionMap[event.key as keyof typeof directionMap];\n\t\t\t\t\t\t\t\t\tif (delta !== undefined) {\n\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\tresizePair(index, delta);\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\tonPointerDown={(event) => startResize(index, event)}\n\t\t\t\t\t\t\t\tonPointerEnter={() => setHoveredIndex(index)}\n\t\t\t\t\t\t\t\tonPointerLeave={() => setHoveredIndex(null)}\n\t\t\t\t\t\t\t\trole=\"separator\"\n\t\t\t\t\t\t\t\ttitle=\"拖动调整大小,双击重置\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#e6f4ff' : '#f5f5f5',\n\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\tcursor: resolvedOrientation === 'horizontal' ? 'col-resize' : 'row-resize',\n\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\tflex: `0 0 ${draggerSize}px`,\n\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\tmarginLeft:\n\t\t\t\t\t\t\t\t\t\tindex > 0 && (sizes[index] ?? 0) <= 1 && resolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t? -draggerSize\n\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\tmarginTop:\n\t\t\t\t\t\t\t\t\t\tindex > 0 && (sizes[index] ?? 0) <= 1 && resolvedOrientation === 'vertical'\n\t\t\t\t\t\t\t\t\t\t\t? -draggerSize\n\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\toutline: 'none',\n\t\t\t\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\t\t\t\tuserSelect: 'none',\n\t\t\t\t\t\t\t\t\tzIndex: isAnyCollapsed ? 2 : 1,\n\t\t\t\t\t\t\t\t\t...semanticStyles.dragger,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\ttabIndex={0}\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{draggerIcon ? (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#1677ff' : '#8c8c8c',\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\t\t\t\t\t\t\ttransition: 'color 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\tuserSelect: 'none',\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{draggerIcon}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#1677ff' : '#d9d9d9',\n\t\t\t\t\t\t\t\t\t\t\tborderRadius: 2,\n\t\t\t\t\t\t\t\t\t\t\theight: resolvedOrientation === 'horizontal' ? 40 : 2,\n\t\t\t\t\t\t\t\t\t\t\ttransition: 'background 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\twidth: resolvedOrientation === 'horizontal' ? 2 : 40,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* 未折叠状态下呈现折叠按钮 */}\n\t\t\t\t\t\t\t\t{!isAnyCollapsed && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\t\t\ttop: '50%',\n\t\t\t\t\t\t\t\t\t\t\tleft: '50%',\n\t\t\t\t\t\t\t\t\t\t\ttransform: 'translate(-50%, -50%)',\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'row' : 'column',\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\tgap: 2,\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 5,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'flex-end',\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: resolvedOrientation === 'horizontal' ? undefined : 14,\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: resolvedOrientation === 'horizontal' ? 14 : undefined,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{renderCollapseButton(index, index, 'start')}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'flex-start',\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: resolvedOrientation === 'horizontal' ? undefined : 14,\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: resolvedOrientation === 'horizontal' ? 14 : undefined,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{renderCollapseButton(index, index + 1, 'end')}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* 折叠状态下呈现展开按钮(必须包含 collapsible 允许方可渲染) */}\n\t\t\t\t\t\t\t\t{isAnyCollapsed && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\t\t\ttop:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? '50%'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tbottom:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isRightOrBottomCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tleft:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: '50%',\n\t\t\t\t\t\t\t\t\t\t\tright:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isRightOrBottomCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\t\t\t\t\tpointerEvents: 'auto',\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 5,\n\t\t\t\t\t\t\t\t\t\t\ttransform:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `translate(${isLeftOrTopCollapsed ? '4px' : '-4px'}, -50%)`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: `translate(-50%, ${isLeftOrTopCollapsed ? '4px' : '-4px'})`,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{(() => {\n\t\t\t\t\t\t\t\t\t\t\tconst isStart = isLeftOrTopCollapsed;\n\t\t\t\t\t\t\t\t\t\t\tconst targetIndex = isStart ? index : index + 1;\n\t\t\t\t\t\t\t\t\t\t\tconst targetPanel = panels[targetIndex];\n\t\t\t\t\t\t\t\t\t\t\tconst config = getCollapsibleConfig(targetPanel?.props.collapsible);\n\t\t\t\t\t\t\t\t\t\t\tconst isAllowed = isStart ? config.start : config.end;\n\n\t\t\t\t\t\t\t\t\t\t\tif (!isAllowed || config.showCollapsibleIcon === false) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tconst ExpandIcon =\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? RightOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: LeftOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? DownOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: UpOutlined;\n\n\t\t\t\t\t\t\t\t\t\t\tconst neighborIndex = isLeftOrTopCollapsed ? index + 1 : index;\n\t\t\t\t\t\t\t\t\t\t\tconst isHorizontal = resolvedOrientation === 'horizontal';\n\n\t\t\t\t\t\t\t\t\t\t\tconst expandTitle =\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? '展开左侧面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: '展开右侧面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? '展开上方面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: '展开下方面板';\n\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={expandTitle}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={expandTitle}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleCollapse(targetIndex, neighborIndex);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonDoubleClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: '#f3f4f6',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: '1px solid #e5e7eb',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 3,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: '#595959',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: isHorizontal ? 40 : 14,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: isHorizontal ? 14 : 40,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: '0 1px 3px rgba(0, 0, 0, 0.08)',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttransition: 'all 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.background = '#e5e7eb';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.color = '#1f2937';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetHoveredCollapsePanelIndex(targetIndex);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.background = '#f3f4f6';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.color = '#595959';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetHoveredCollapsePanelIndex(null);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\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\t\t<ExpandIcon />\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})()}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n};\n\nCustomSplitter.Panel = SplitterPanel;\n\nexport default CustomSplitter;\n","import type { ReactNode } from 'react';\nimport { LockOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface DisabledBoxProps {\n\ttitle?: ReactNode;\n\tchildren?: ReactNode;\n\t// 是否禁用,禁用时显示锁图标 + 文字灰色 + 不可点击\n\tdisabled?: boolean;\n\t// 锁图标对齐方向\n\ticonAlign?: 'left' | 'right';\n}\n\nconst DisabledBox = (props: DisabledBoxProps) => {\n\tconst { title, children, disabled = false, iconAlign = 'left' } = props;\n\tconst content = children ?? title;\n\n\t// 未禁用时原样渲染,不加锁\n\tif (!disabled) {\n\t\treturn <>{content}</>;\n\t}\n\n\t// disabled 时用div渲染,样式模拟disabled效果\n\t// 在捕获阶段阻止click事件传播,既防止内部点击事件触发,也阻止冒泡到父组件\n\t// 不阻止mouseenter/mouseleave等hover事件,保证Tooltip正常显示\n\tconst handleClickCapture = (e: React.MouseEvent) => {\n\t\tif (disabled) {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"disabled_box_container disabled_box_disabled\"\n\t\t\tonClickCapture={handleClickCapture}\n\t\t>\n\t\t\t{iconAlign === 'left' && <LockOutlined className=\"disabled_box_icon\" />}\n\t\t\t<span className=\"disabled_box_title\">{content}</span>\n\t\t\t{iconAlign === 'right' && <LockOutlined className=\"disabled_box_icon\" />}\n\t\t</div>\n\t);\n};\n\nexport default DisabledBox;\n","import type { CSSProperties, ReactNode, Key } from 'react';\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport './index.less';\n\n/** 响应式断点名称 */\nexport type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\n\n/** 间距配置项 */\nexport type Gap = undefined | number | Partial<Record<Breakpoint, number>>;\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/** 瀑布流单项结构 */\nexport interface MasonryItem<T = any> {\n\t/** 自定义展示内容,相对 itemRender 具有更高优先级 */\n\tchildren?: ReactNode;\n\t/** 自定义所在列(0-indexed) */\n\tcolumn?: number;\n\t/** 自定义存储数据 */\n\tdata?: T;\n\t/** 高度(手指定时优先使用,否则通过测量动态计算) */\n\theight?: number;\n\t/** 唯一标识 */\n\tkey: Key;\n}\n\n/** 语义化 DOM 节点 */\nexport type MasonrySemanticDOM = 'root' | 'item';\n\nexport type MasonryClassNames =\n\t| Partial<Record<MasonrySemanticDOM, string>>\n\t| ((info: { props: MasonryProps<any> }) => Partial<Record<MasonrySemanticDOM, string>>);\n\nexport type MasonryStyles =\n\t| Partial<Record<MasonrySemanticDOM, CSSProperties>>\n\t| ((info: { props: MasonryProps<any> }) => Partial<Record<MasonrySemanticDOM, CSSProperties>>);\n\n/** Masonry 组件属性 */\nexport interface MasonryProps<T = any> {\n\t/** 用于自定义组件内部各语义化结构的 class,支持对象或函数 */\n\tclassNames?: MasonryClassNames;\n\t/** 列数,可以是固定值或响应式配置,默认 3 */\n\tcolumns?: number | Partial<Record<Breakpoint, number>>;\n\t/** 是否持续监听子项尺寸变化,默认 false */\n\tfresh?: boolean;\n\t/** 间距,可以是固定值、响应式配置或水平垂直间距配置 [horizontalGap, verticalGap],默认 0 */\n\tgutter?: Gap | [Gap, Gap];\n\t/** 瀑布流项列表 */\n\titems?: MasonryItem<T>[];\n\t/** 自定义项渲染 */\n\titemRender?: (item: MasonryItem<T>) => ReactNode;\n\t/** 语义化结构 style,支持对象和函数形式 */\n\tstyles?: MasonryStyles;\n\t/** 列排序回调 */\n\tonLayoutChange?: (layout: { key: Key; column: number }[]) => void;\n\t/** 根节点自定义类名 */\n\tclassName?: string;\n\t/** 根节点自定义 CSS 样式 */\n\tstyle?: CSSProperties;\n\t/** JSX 子节点支持 */\n\tchildren?: ReactNode;\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nconst BREAKPOINT_ORDER: Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];\n\n/** 计算当前容器宽度对应的响应式断点 */\nfunction getBreakpoint(width: number): Breakpoint {\n\tif (width >= 1600) return 'xxl';\n\tif (width >= 1200) return 'xl';\n\tif (width >= 992) return 'lg';\n\tif (width >= 768) return 'md';\n\tif (width >= 576) return 'sm';\n\treturn 'xs';\n}\n\n/** 解析响应式配置值 */\nfunction resolveResponsiveValue<T>(\n\tvalue: T | Partial<Record<Breakpoint, T>> | undefined,\n\tcurrentBp: Breakpoint,\n\tdefaultValue: T,\n): T {\n\tif (value === undefined || value === null) return defaultValue;\n\tif (typeof value === 'object') {\n\t\tconst obj = value as Partial<Record<Breakpoint, T>>;\n\t\tif (obj[currentBp] !== undefined) return obj[currentBp]!;\n\t\tconst currentIdx = BREAKPOINT_ORDER.indexOf(currentBp);\n\t\tfor (let i = currentIdx - 1; i >= 0; i--) {\n\t\t\tconst bp = BREAKPOINT_ORDER[i];\n\t\t\tif (obj[bp] !== undefined) return obj[bp]!;\n\t\t}\n\t\tfor (let i = currentIdx + 1; i < BREAKPOINT_ORDER.length; i++) {\n\t\t\tconst bp = BREAKPOINT_ORDER[i];\n\t\t\tif (obj[bp] !== undefined) return obj[bp]!;\n\t\t}\n\t\treturn defaultValue;\n\t}\n\treturn value;\n}\n\n/** 解析水平和垂直 Gutter */\nfunction resolveGutter(\n\tgutter: Gap | [Gap, Gap] | undefined,\n\tcurrentBp: Breakpoint,\n): [number, number] {\n\tif (!gutter) return [0, 0];\n\tif (Array.isArray(gutter)) {\n\t\tconst h = resolveResponsiveValue(gutter[0], currentBp, 0);\n\t\tconst v = resolveResponsiveValue(gutter[1], currentBp, 0);\n\t\treturn [h, v];\n\t}\n\tconst g = resolveResponsiveValue(gutter, currentBp, 0);\n\treturn [g, g];\n}\n\nconst Masonry = <T = unknown,>(props: MasonryProps<T>) => {\n\tconst {\n\t\tclassNames,\n\t\tcolumns = 3,\n\t\tfresh = false,\n\t\tgutter = 0,\n\t\titems,\n\t\titemRender,\n\t\tstyles,\n\t\tonLayoutChange,\n\t\tclassName,\n\t\tstyle,\n\t\tchildren,\n\t} = props;\n\n\tconst rootRef = useRef<HTMLDivElement>(null);\n\tconst [containerWidth, setContainerWidth] = useState<number>(0);\n\tconst [measuredHeights, setMeasuredHeights] = useState<Record<string, number>>({});\n\tconst itemRefs = useRef<Map<Key, HTMLDivElement>>(new Map());\n\n\t// 规范化 items 列表(支持 items 属性或 JSX children)\n\tconst normalizedItems: MasonryItem<T>[] = useMemo(() => {\n\t\tif (items) return items;\n\t\tif (!children) return [];\n\t\treturn React.Children.toArray(children).map((child, index) => {\n\t\t\tif (React.isValidElement(child)) {\n\t\t\t\tconst key = child.key ?? `masonry-item-${index}`;\n\t\t\t\treturn {\n\t\t\t\t\tkey,\n\t\t\t\t\tchildren: child,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkey: `masonry-item-${index}`,\n\t\t\t\tchildren: child,\n\t\t\t};\n\t\t});\n\t}, [items, children]);\n\n\t// 计算当前响应式断点\n\tconst currentBreakpoint = useMemo(() => getBreakpoint(containerWidth), [containerWidth]);\n\n\t// 解析实际列数与间隔\n\tconst resolvedColumns = useMemo(() => {\n\t\tconst count = resolveResponsiveValue(columns, currentBreakpoint, 3);\n\t\treturn Math.max(1, Math.floor(count));\n\t}, [columns, currentBreakpoint]);\n\n\tconst [horizontalGap, verticalGap] = useMemo(\n\t\t() => resolveGutter(gutter, currentBreakpoint),\n\t\t[gutter, currentBreakpoint],\n\t);\n\n\t// 监听容器宽度变化\n\tuseEffect(() => {\n\t\tif (!rootRef.current) return;\n\t\tconst observer = new ResizeObserver((entries) => {\n\t\t\tfor (const entry of entries) {\n\t\t\t\tconst width = entry.contentRect.width;\n\t\t\t\tif (width > 0) {\n\t\t\t\t\tsetContainerWidth(width);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tobserver.observe(rootRef.current);\n\t\treturn () => observer.disconnect();\n\t}, []);\n\n\t// 测量每个 item DOM 的实际高度\n\tconst measureItems = useCallback(() => {\n\t\tlet hasChange = false;\n\t\tconst newHeights: Record<string, number> = {};\n\n\t\titemRefs.current.forEach((el, key) => {\n\t\t\tif (el) {\n\t\t\t\tconst strKey = String(key);\n\t\t\t\tconst h = el.offsetHeight;\n\t\t\t\tif (h > 0) {\n\t\t\t\t\tnewHeights[strKey] = h;\n\t\t\t\t\tif (measuredHeights[strKey] !== h) {\n\t\t\t\t\t\thasChange = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (hasChange) {\n\t\t\tsetMeasuredHeights((prev) => ({ ...prev, ...newHeights }));\n\t\t}\n\t}, [measuredHeights]);\n\n\tuseLayoutEffect(() => {\n\t\tconst handle = requestAnimationFrame(() => {\n\t\t\tmeasureItems();\n\t\t});\n\t\treturn () => cancelAnimationFrame(handle);\n\t}, [measureItems]);\n\n\t// 监听 fresh 配置:持续监听每个 item 的 DOM 尺寸变动(例如图片加载、文本折叠)\n\tuseEffect(() => {\n\t\tif (!fresh) return;\n\t\tconst observer = new ResizeObserver(() => {\n\t\t\tmeasureItems();\n\t\t});\n\n\t\titemRefs.current.forEach((el) => {\n\t\t\tif (el) observer.observe(el);\n\t\t});\n\n\t\treturn () => observer.disconnect();\n\t}, [fresh, measureItems, normalizedItems]);\n\n\t// 计算单个列宽\n\tconst columnWidth = useMemo(() => {\n\t\tif (containerWidth <= 0) return 0;\n\t\tconst totalGap = (resolvedColumns - 1) * horizontalGap;\n\t\treturn Math.max(0, (containerWidth - totalGap) / resolvedColumns);\n\t}, [containerWidth, resolvedColumns, horizontalGap]);\n\n\t// 瀑布流核心布局算法计算\n\tconst { layoutItems, containerHeight, layoutChangeData } = useMemo(() => {\n\t\tconst colHeights = new Array(resolvedColumns).fill(0);\n\t\tconst changeData: { key: Key; column: number }[] = [];\n\n\t\tconst computedList = normalizedItems.map((item) => {\n\t\t\t// 如果显式指定了 height,优先使用;否则使用 DOM 测量的 height\n\t\t\tconst h = item.height ?? measuredHeights[String(item.key)] ?? 0;\n\n\t\t\t// 判断目标放置列(指定列数或者找当前高度最小的列)\n\t\t\tlet targetCol = 0;\n\t\t\tif (typeof item.column === 'number' && item.column >= 0 && item.column < resolvedColumns) {\n\t\t\t\ttargetCol = Math.floor(item.column);\n\t\t\t} else {\n\t\t\t\tlet minH = colHeights[0];\n\t\t\t\tfor (let i = 1; i < resolvedColumns; i++) {\n\t\t\t\t\tif (colHeights[i] < minH) {\n\t\t\t\t\t\tminH = colHeights[i];\n\t\t\t\t\t\ttargetCol = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst left = targetCol * (columnWidth + horizontalGap);\n\t\t\tconst top = colHeights[targetCol];\n\n\t\t\t// 更新该列高度\n\t\t\tcolHeights[targetCol] += h + (h > 0 ? verticalGap : 0);\n\n\t\t\tchangeData.push({ key: item.key, column: targetCol });\n\n\t\t\treturn {\n\t\t\t\titem,\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\twidth: columnWidth,\n\t\t\t\theight: h,\n\t\t\t\tcolumn: targetCol,\n\t\t\t};\n\t\t});\n\n\t\tconst totalH = Math.max(0, ...colHeights);\n\n\t\treturn {\n\t\t\tlayoutItems: computedList,\n\t\t\tcontainerHeight: totalH,\n\t\t\tlayoutChangeData: changeData,\n\t\t};\n\t}, [normalizedItems, resolvedColumns, horizontalGap, verticalGap, columnWidth, measuredHeights]);\n\n\t// 触发 onLayoutChange 回调\n\tconst prevLayoutRef = useRef<string>('');\n\tuseEffect(() => {\n\t\tconst layoutKey = JSON.stringify(layoutChangeData);\n\t\tif (layoutKey !== prevLayoutRef.current) {\n\t\t\tprevLayoutRef.current = layoutKey;\n\t\t\tonLayoutChange?.(layoutChangeData);\n\t\t}\n\t}, [layoutChangeData, onLayoutChange]);\n\n\t// 解析语义化 className 和 styles\n\tconst semanticClassNames = useMemo(() => {\n\t\tif (typeof classNames === 'function') {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\treturn classNames({ props: props as MasonryProps<any> }) ?? {};\n\t\t}\n\t\treturn classNames ?? {};\n\t}, [classNames, props]);\n\n\tconst semanticStyles = useMemo(() => {\n\t\tif (typeof styles === 'function') {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\treturn styles({ props: props as MasonryProps<any> }) ?? {};\n\t\t}\n\t\treturn styles ?? {};\n\t}, [styles, props]);\n\n\treturn (\n\t\t<div\n\t\t\tref={rootRef}\n\t\t\tclassName={['masonry_root', semanticClassNames.root, className].filter(Boolean).join(' ')}\n\t\t\tstyle={{\n\t\t\t\tminHeight: containerHeight > 0 ? containerHeight : undefined,\n\t\t\t\theight: containerHeight > 0 ? containerHeight : undefined,\n\t\t\t\t...semanticStyles.root,\n\t\t\t\t...style,\n\t\t\t}}\n\t\t>\n\t\t\t{layoutItems.map(({ item, left, top, width, height }) => {\n\t\t\t\tconst content = item.children ?? itemRender?.(item);\n\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={item.key}\n\t\t\t\t\t\tref={(node) => {\n\t\t\t\t\t\t\tif (node) {\n\t\t\t\t\t\t\t\titemRefs.current.set(item.key, node);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\titemRefs.current.delete(item.key);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={['masonry_item', semanticClassNames.item].filter(Boolean).join(' ')}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: containerWidth > 0 ? width : '100%',\n\t\t\t\t\t\t\theight: height > 0 ? height : undefined,\n\t\t\t\t\t\t\ttransform: containerWidth > 0 ? `translate3d(${left}px, ${top}px, 0)` : undefined,\n\t\t\t\t\t\t\topacity: containerWidth > 0 ? 1 : 0,\n\t\t\t\t\t\t\t...semanticStyles.item,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonLoad={measureItems}\n\t\t\t\t\t>\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n};\n\nexport default Masonry;\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\nimport './index.less';\n\nexport type BorderBeamColorStop = {\n\tcolor: string;\n\tpercent: number;\n};\n\nexport interface BorderBeamProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color'> {\n\t/** 装饰内容 */\n\tchildren?: ReactNode;\n\t/** 流光颜色配置,支持单色字符串或渐变停靠点数组 */\n\tcolor?: string | BorderBeamColorStop[];\n\t/** 流光数量,默认为 1 */\n\tcount?: number;\n\t/** 流光完成一圈动画的时间,单位秒,默认为 6 */\n\tduration?: number;\n\t/** 流光线宽,数字类型按像素处理,默认为 1px */\n\tlineWidth?: number | string;\n\t/** 流光层相对容器边缘的外扩距离,遇到裁剪容器时可设为 0 */\n\toutset?: number | string;\n\t/** 流光可见段的尺寸,数字类型按像素处理,默认为 100 */\n\tsize?: number | string;\n}\n\nconst formatSizeUnit = (value: number | string | undefined, defaultValue: string): string => {\n\tif (value === undefined || value === null) {\n\t\treturn defaultValue;\n\t}\n\tif (typeof value === 'number') {\n\t\treturn `${value}px`;\n\t}\n\treturn value;\n};\n\nconst buildGradientString = (color?: string | BorderBeamColorStop[]): string => {\n\tif (!color) {\n\t\treturn 'linear-gradient(to left, #1677ff 0%, transparent 100%)';\n\t}\n\tif (typeof color === 'string') {\n\t\treturn `linear-gradient(to left, ${color} 0%, transparent 100%)`;\n\t}\n\tif (Array.isArray(color)) {\n\t\tif (color.length === 0) {\n\t\t\treturn 'linear-gradient(to left, #1677ff 0%, transparent 100%)';\n\t\t}\n\t\tconst sorted = [...color].sort((a, b) => a.percent - b.percent);\n\t\tconst mappedStops = sorted.map((stop) => {\n\t\t\tconst mappedPercent = Math.min(Math.max((stop.percent / 100) * 80, 0), 80);\n\t\t\treturn `${stop.color} ${mappedPercent.toFixed(2)}%`;\n\t\t});\n\t\treturn `linear-gradient(to left, ${mappedStops.join(', ')}, transparent 100%)`;\n\t}\n\treturn 'linear-gradient(to left, #1677ff 0%, transparent 100%)';\n};\n\nconst BorderBeam = (props: BorderBeamProps) => {\n\tconst {\n\t\tchildren,\n\t\tcolor,\n\t\tcount = 1,\n\t\tduration = 6,\n\t\tlineWidth = '1px',\n\t\toutset = '0px',\n\t\tsize = 100,\n\t\tclassName,\n\t\tstyle,\n\t\t...restProps\n\t} = props;\n\n\tconst formattedLineWidth = formatSizeUnit(lineWidth, '1px');\n\tconst formattedOutset = formatSizeUnit(outset, '0px');\n\tconst formattedSize = formatSizeUnit(size, '100px');\n\tconst gradientCss = buildGradientString(color);\n\n\tconst maskStyle: CSSProperties = {\n\t\t'--border-beam-line-width': formattedLineWidth,\n\t\t'--border-beam-outset': formattedOutset,\n\t\t'--border-beam-size': formattedSize,\n\t\t'--border-beam-duration': `${duration}s`,\n\t\t'--border-beam-gradient': gradientCss,\n\t} as CSSProperties;\n\n\tconst beamCount = Math.max(1, count);\n\tconst beams = Array.from({ length: beamCount }).map((_, index) => {\n\t\tconst delaySeconds = -((duration * index) / beamCount);\n\t\treturn (\n\t\t\t<div\n\t\t\t\tkey={index}\n\t\t\t\tclassName=\"react-public-border-beam-item\"\n\t\t\t\tstyle={{\n\t\t\t\t\tanimationDelay: `${delaySeconds}s`,\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\t});\n\n\tif (children !== undefined) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={`react-public-border-beam-container ${className || ''}`.trim()}\n\t\t\t\tstyle={style}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t\t<div className=\"react-public-border-beam-mask\" style={maskStyle}>\n\t\t\t\t\t{beams}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`react-public-border-beam-mask ${className || ''}`.trim()}\n\t\t\tstyle={{\n\t\t\t\t...maskStyle,\n\t\t\t\t...style,\n\t\t\t}}\n\t\t\t{...restProps}\n\t\t>\n\t\t\t{beams}\n\t\t</div>\n\t);\n};\n\nexport default BorderBeam;\n","import {\n\tuseState,\n\tuseRef,\n\tuseEffect,\n\tuseCallback,\n\ttype ReactNode,\n\ttype HTMLAttributes,\n\ttype FC,\n\ttype Key,\n\ttype MouseEvent as ReactMouseEvent,\n} from 'react';\nimport {\n\tColor,\n\tgenerateColor,\n\ttype ColorInput,\n\ttype HsbColor,\n\ttype RgbColor,\n\ttype ColorGradientStop,\n\tparseGradientStops,\n\tformatGradientCss,\n\tformatGradientText,\n} from './Color';\nimport { CloseCircleFilled, DownOutlined } from '../src/icons';\nimport './index.less';\n\nexport { Color, generateColor };\nexport type { HsbColor, RgbColor, ColorInput, ColorGradientStop };\n\nexport type ColorFormat = 'hex' | 'rgb' | 'hsb';\nexport type ColorMode = 'single' | 'gradient';\n\nexport interface ColorPresetItem {\n\tlabel: ReactNode;\n\tcolors: (string | Color)[];\n\tdefaultOpen?: boolean;\n\tkey?: Key;\n}\n\nexport interface ColorPickerProps extends Omit<\n\tHTMLAttributes<HTMLDivElement>,\n\t'onChange' | 'value' | 'defaultValue' | 'children'\n> {\n\tallowClear?: boolean;\n\tarrow?: boolean | { pointAtCenter?: boolean };\n\tchildren?: ReactNode | ((color: Color) => ReactNode);\n\tdefaultValue?: ColorInput;\n\tdefaultFormat?: ColorFormat;\n\tdisabled?: boolean;\n\tdisabledAlpha?: boolean;\n\tdisabledFormat?: boolean;\n\tdestroyOnHidden?: boolean;\n\tformat?: ColorFormat;\n\tmode?: ColorMode | ColorMode[];\n\topen?: boolean;\n\tpresets?: ColorPresetItem[];\n\tplacement?: 'top' | 'topLeft' | 'topRight' | 'bottom' | 'bottomLeft' | 'bottomRight';\n\tpanelRender?: (panel: ReactNode, extra: { components: { Picker: FC; Presets: FC } }) => ReactNode;\n\tshowText?: boolean | ((color: Color | ColorGradientStop[]) => ReactNode);\n\tsize?: 'large' | 'middle' | 'small';\n\ttrigger?: 'hover' | 'click';\n\tvalue?: ColorInput;\n\tonChange?: (value: Color, css: string) => void;\n\tonChangeComplete?: (value: Color) => void;\n\tonFormatChange?: (format: ColorFormat) => void;\n\tonOpenChange?: (open: boolean) => void;\n\tonClear?: () => void;\n}\n\nconst ColorPicker = (props: ColorPickerProps) => {\n\tconst {\n\t\tallowClear = false,\n\t\tarrow = true,\n\t\tchildren,\n\t\tdefaultValue = '#1677ff',\n\t\tdefaultFormat = 'hex',\n\t\tdisabled = false,\n\t\tdisabledAlpha = false,\n\t\tdisabledFormat = false,\n\t\tdestroyOnHidden = false,\n\t\tformat,\n\t\tmode = 'single',\n\t\topen,\n\t\tpresets,\n\t\tplacement = 'bottomLeft',\n\t\tpanelRender,\n\t\tshowText,\n\t\tsize = 'middle',\n\t\ttrigger = 'click',\n\t\tvalue,\n\t\tonChange,\n\t\tonChangeComplete,\n\t\tonFormatChange,\n\t\tonOpenChange,\n\t\tonClear,\n\t\tclassName = '',\n\t\tstyle,\n\t\t...restProps\n\t} = props;\n\n\t// Mode 管理 (single / gradient)\n\tconst modeOptions: ColorMode[] = Array.isArray(mode)\n\t\t? mode\n\t\t: mode === 'gradient'\n\t\t\t? ['gradient']\n\t\t\t: ['single'];\n\tconst [activeMode, setActiveMode] = useState<ColorMode>(modeOptions[0] ?? 'single');\n\n\t// 受控 / 非受控 Open\n\tconst [internalOpen, setInternalOpen] = useState<boolean>(false);\n\tconst isOpen = open !== undefined ? open : internalOpen;\n\n\t// 渐变 Stops 状态\n\tconst [gradientStops, setGradientStops] = useState<ColorGradientStop[]>(() => {\n\t\tif (typeof defaultValue === 'string' && defaultValue.includes('%')) {\n\t\t\treturn parseGradientStops(defaultValue);\n\t\t}\n\t\treturn [\n\t\t\t{ color: generateColor('rgb(16, 142, 233)'), percent: 0 },\n\t\t\t{ color: generateColor('rgb(135, 208, 104)'), percent: 100 },\n\t\t];\n\t});\n\tconst [activeStopIndex, setActiveStopIndex] = useState<number>(0);\n\n\t// 受控 / 非受控 Value\n\tconst [internalColor, setInternalColor] = useState<Color>(() => generateColor(defaultValue));\n\tconst currentColor =\n\t\tactiveMode === 'gradient'\n\t\t\t? (gradientStops[activeStopIndex]?.color ?? internalColor)\n\t\t\t: value !== undefined\n\t\t\t\t? generateColor(value)\n\t\t\t\t: internalColor;\n\n\t// 受控 / 非受控 Format\n\tconst [internalFormat, setInternalFormat] = useState<ColorFormat>(defaultFormat);\n\tconst currentFormat = format !== undefined ? format : internalFormat;\n\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst paletteRef = useRef<HTMLDivElement>(null);\n\tconst hueSliderRef = useRef<HTMLDivElement>(null);\n\tconst alphaSliderRef = useRef<HTMLDivElement>(null);\n\tconst gradientRailRef = useRef<HTMLDivElement>(null);\n\n\tconst isDraggingRef = useRef<boolean>(false);\n\n\tconst handleOpenChange = useCallback(\n\t\t(nextOpen: boolean) => {\n\t\t\tif (disabled) return;\n\t\t\tif (open === undefined) {\n\t\t\t\tsetInternalOpen(nextOpen);\n\t\t\t}\n\t\t\tonOpenChange?.(nextOpen);\n\t\t},\n\t\t[disabled, open, onOpenChange],\n\t);\n\n\tconst updateColor = useCallback(\n\t\t(nextColor: Color, isComplete = false) => {\n\t\t\tif (activeMode === 'gradient') {\n\t\t\t\tconst nextStops = [...gradientStops];\n\t\t\t\tnextStops[activeStopIndex] = {\n\t\t\t\t\t...nextStops[activeStopIndex],\n\t\t\t\t\tcolor: nextColor,\n\t\t\t\t};\n\t\t\t\tsetGradientStops(nextStops);\n\t\t\t\tconst cssStr = formatGradientCss(nextStops);\n\t\t\t\tonChange?.(nextColor, cssStr);\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tonChangeComplete?.(nextColor);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (value === undefined) {\n\t\t\t\tsetInternalColor(nextColor);\n\t\t\t}\n\t\t\tonChange?.(nextColor, nextColor.toCssString());\n\t\t\tif (isComplete) {\n\t\t\t\tonChangeComplete?.(nextColor);\n\t\t\t}\n\t\t},\n\t\t[activeMode, gradientStops, activeStopIndex, value, onChange, onChangeComplete],\n\t);\n\n\tconst currentColorRef = useRef<Color>(currentColor);\n\tcurrentColorRef.current = currentColor;\n\n\tconst updateColorRef = useRef(updateColor);\n\tupdateColorRef.current = updateColor;\n\n\t// 点击外部关闭\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\n\t\tconst handleClickOutside = (e: MouseEvent) => {\n\t\t\tif (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n\t\t\t\thandleOpenChange(false);\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener('mousedown', handleClickOutside);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('mousedown', handleClickOutside);\n\t\t};\n\t}, [isOpen, handleOpenChange]);\n\n\t// SV 画板拖拽逻辑\n\tconst handlePaletteDrag = useCallback(\n\t\t(e: MouseEvent | ReactMouseEvent) => {\n\t\t\tif (!paletteRef.current) return;\n\t\t\tconst rect = paletteRef.current.getBoundingClientRect();\n\t\t\tconst x = Math.max(0, Math.min(rect.width, e.clientX - rect.left));\n\t\t\tconst y = Math.max(0, Math.min(rect.height, e.clientY - rect.top));\n\n\t\t\tconst s = Math.round((x / rect.width) * 100);\n\t\t\tconst b = Math.round((1 - y / rect.height) * 100);\n\n\t\t\tconst curr = currentColorRef.current;\n\t\t\tconst targetAlpha = curr.a === 0 ? 1 : curr.a;\n\n\t\t\tconst newColor = new Color({\n\t\t\t\th: curr.h,\n\t\t\t\ts,\n\t\t\t\tb,\n\t\t\t\ta: targetAlpha,\n\t\t\t});\n\t\t\tupdateColorRef.current(newColor);\n\t\t},\n\t\t[],\n\t);\n\n\tconst handlePaletteMouseDown = (e: ReactMouseEvent) => {\n\t\te.preventDefault();\n\t\tisDraggingRef.current = true;\n\t\thandlePaletteDrag(e);\n\n\t\tconst handleMouseMove = (moveEvent: MouseEvent) => {\n\t\t\tif (isDraggingRef.current) {\n\t\t\t\thandlePaletteDrag(moveEvent);\n\t\t\t}\n\t\t};\n\n\t\tconst handleMouseUp = () => {\n\t\t\tif (isDraggingRef.current) {\n\t\t\t\tisDraggingRef.current = false;\n\t\t\t\tonChangeComplete?.(currentColorRef.current);\n\t\t\t}\n\t\t\twindow.removeEventListener('mousemove', handleMouseMove);\n\t\t\twindow.removeEventListener('mouseup', handleMouseUp);\n\t\t};\n\n\t\twindow.addEventListener('mousemove', handleMouseMove);\n\t\twindow.addEventListener('mouseup', handleMouseUp);\n\t};\n\n\t// Hue 拖拽逻辑\n\tconst handleHueDrag = useCallback(\n\t\t(e: MouseEvent | ReactMouseEvent) => {\n\t\t\tif (!hueSliderRef.current) return;\n\t\t\tconst rect = hueSliderRef.current.getBoundingClientRect();\n\t\t\tconst x = Math.max(0, Math.min(rect.width, e.clientX - rect.left));\n\t\t\tconst h = Math.round((x / rect.width) * 360);\n\n\t\t\tconst curr = currentColorRef.current;\n\t\t\tconst targetAlpha = curr.a === 0 ? 1 : curr.a;\n\n\t\t\tconst newColor = new Color({\n\t\t\t\th: h === 360 ? 0 : h,\n\t\t\t\ts: curr.s,\n\t\t\t\tb: curr.b,\n\t\t\t\ta: targetAlpha,\n\t\t\t});\n\t\t\tupdateColorRef.current(newColor);\n\t\t},\n\t\t[],\n\t);\n\n\tconst handleHueMouseDown = (e: ReactMouseEvent) => {\n\t\te.preventDefault();\n\t\thandleHueDrag(e);\n\n\t\tconst handleMouseMove = (moveEvent: MouseEvent) => {\n\t\t\thandleHueDrag(moveEvent);\n\t\t};\n\n\t\tconst handleMouseUp = () => {\n\t\t\tonChangeComplete?.(currentColorRef.current);\n\t\t\twindow.removeEventListener('mousemove', handleMouseMove);\n\t\t\twindow.removeEventListener('mouseup', handleMouseUp);\n\t\t};\n\n\t\twindow.addEventListener('mousemove', handleMouseMove);\n\t\twindow.addEventListener('mouseup', handleMouseUp);\n\t};\n\n\t// Alpha 拖拽逻辑\n\tconst handleAlphaDrag = useCallback(\n\t\t(e: MouseEvent | ReactMouseEvent) => {\n\t\t\tif (!alphaSliderRef.current) return;\n\t\t\tconst rect = alphaSliderRef.current.getBoundingClientRect();\n\t\t\tconst x = Math.max(0, Math.min(rect.width, e.clientX - rect.left));\n\t\t\tconst a = Number((x / rect.width).toFixed(2));\n\n\t\t\tconst curr = currentColorRef.current;\n\n\t\t\tconst newColor = new Color({\n\t\t\t\th: curr.h,\n\t\t\t\ts: curr.s,\n\t\t\t\tb: curr.b,\n\t\t\t\ta,\n\t\t\t});\n\t\t\tupdateColorRef.current(newColor);\n\t\t},\n\t\t[],\n\t);\n\n\tconst handleAlphaMouseDown = (e: ReactMouseEvent) => {\n\t\te.preventDefault();\n\t\thandleAlphaDrag(e);\n\n\t\tconst handleMouseMove = (moveEvent: MouseEvent) => {\n\t\t\thandleAlphaDrag(moveEvent);\n\t\t};\n\n\t\tconst handleMouseUp = () => {\n\t\t\tonChangeComplete?.(currentColorRef.current);\n\t\t\twindow.removeEventListener('mousemove', handleMouseMove);\n\t\t\twindow.removeEventListener('mouseup', handleMouseUp);\n\t\t};\n\n\t\twindow.addEventListener('mousemove', handleMouseMove);\n\t\twindow.addEventListener('mouseup', handleMouseUp);\n\t};\n\n\t// 渐变 Stop 拖拽逻辑\n\tconst handleGradientStopDrag = useCallback(\n\t\t(index: number, e: MouseEvent | ReactMouseEvent) => {\n\t\t\tif (!gradientRailRef.current) return;\n\t\t\tconst rect = gradientRailRef.current.getBoundingClientRect();\n\t\t\tconst x = Math.max(0, Math.min(rect.width, e.clientX - rect.left));\n\t\t\tconst percent = Math.round((x / rect.width) * 100);\n\n\t\t\tconst nextStops = [...gradientStops];\n\t\t\tnextStops[index] = {\n\t\t\t\t...nextStops[index],\n\t\t\t\tpercent,\n\t\t\t};\n\t\t\tsetGradientStops(nextStops);\n\t\t\tonChange?.(nextStops[index].color, formatGradientCss(nextStops));\n\t\t},\n\t\t[gradientStops, onChange],\n\t);\n\n\tconst handleGradientStopMouseDown = (index: number, e: ReactMouseEvent) => {\n\t\te.stopPropagation();\n\t\te.preventDefault();\n\t\tsetActiveStopIndex(index);\n\n\t\tconst handleMouseMove = (moveEvent: MouseEvent) => {\n\t\t\thandleGradientStopDrag(index, moveEvent);\n\t\t};\n\n\t\tconst handleMouseUp = () => {\n\t\t\twindow.removeEventListener('mousemove', handleMouseMove);\n\t\t\twindow.removeEventListener('mouseup', handleMouseUp);\n\t\t};\n\n\t\twindow.addEventListener('mousemove', handleMouseMove);\n\t\twindow.addEventListener('mouseup', handleMouseUp);\n\t};\n\n\t// 渐变轨空白处点击新增 Stop\n\tconst handleGradientRailClick = (e: ReactMouseEvent) => {\n\t\tif (!gradientRailRef.current) return;\n\t\tconst rect = gradientRailRef.current.getBoundingClientRect();\n\t\tconst x = Math.max(0, Math.min(rect.width, e.clientX - rect.left));\n\t\tconst percent = Math.round((x / rect.width) * 100);\n\n\t\tconst newStopColor = generateColor('#1677ff');\n\t\tconst nextStops = [...gradientStops, { color: newStopColor, percent }];\n\t\tsetGradientStops(nextStops);\n\t\tsetActiveStopIndex(nextStops.length - 1);\n\t\tonChange?.(newStopColor, formatGradientCss(nextStops));\n\t};\n\n\t// Format 变化\n\tconst handleFormatSelectChange = (newFormat: ColorFormat) => {\n\t\tif (format === undefined) {\n\t\t\tsetInternalFormat(newFormat);\n\t\t}\n\t\tonFormatChange?.(newFormat);\n\t};\n\n\t// 清除颜色\n\tconst handleClearClick = (e: ReactMouseEvent) => {\n\t\te.stopPropagation();\n\t\tconst cleared = new Color({ h: 0, s: 0, b: 100, a: 0 });\n\t\tupdateColor(cleared, true);\n\t\tonClear?.();\n\t};\n\n\t// 纯 Picker 内容\n\tconst renderPickerContent = () => {\n\t\tconst hueColor = new Color({ h: currentColor.h, s: 100, b: 100, a: 1 }).toHexString();\n\n\t\treturn (\n\t\t\t<div className=\"react-public-color-picker-panel-body\">\n\t\t\t\t{/* 顶部 Header:模式切换与右上角清除按钮 */}\n\t\t\t\t{(modeOptions.length > 1 || (allowClear && !disabled)) && (\n\t\t\t\t\t<div className=\"react-public-color-picker-panel-header\">\n\t\t\t\t\t\t{modeOptions.length > 1 ? (\n\t\t\t\t\t\t\t<div className=\"react-public-color-picker-mode-segmented\">\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={`react-public-color-picker-mode-option ${\n\t\t\t\t\t\t\t\t\t\tactiveMode === 'single' ? 'active' : ''\n\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\tonClick={() => setActiveMode('single')}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t单色\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={`react-public-color-picker-mode-option ${\n\t\t\t\t\t\t\t\t\t\tactiveMode === 'gradient' ? 'active' : ''\n\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\tonClick={() => setActiveMode('gradient')}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t渐变\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div />\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{allowClear && !disabled && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"react-public-color-picker-panel-clear-btn\"\n\t\t\t\t\t\t\t\tonClick={handleClearClick}\n\t\t\t\t\t\t\t\ttitle=\"清除颜色\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\">\n\t\t\t\t\t\t\t\t\t<line x1=\"4\" y1=\"4\" x2=\"20\" y2=\"20\" stroke=\"#ff4d4f\" strokeWidth=\"2.5\" strokeLinecap=\"round\" />\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* 渐变 Slider Rail */}\n\t\t\t\t{activeMode === 'gradient' && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={gradientRailRef}\n\t\t\t\t\t\tclassName=\"react-public-color-picker-gradient-slider\"\n\t\t\t\t\t\tonClick={handleGradientRailClick}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"react-public-color-picker-gradient-bg\"\n\t\t\t\t\t\t\tstyle={{ background: formatGradientCss(gradientStops) }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{gradientStops.map((stop, idx) => (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\t\tclassName={`react-public-color-picker-gradient-stop-handle ${\n\t\t\t\t\t\t\t\t\tactiveStopIndex === idx ? 'active' : ''\n\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tleft: `${stop.percent}%`,\n\t\t\t\t\t\t\t\t\tbackgroundColor: stop.color.toCssString(),\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonMouseDown={(e) => handleGradientStopMouseDown(idx, e)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* SV 调色画布 */}\n\t\t\t\t<div\n\t\t\t\t\tref={paletteRef}\n\t\t\t\t\tclassName=\"react-public-color-picker-palette\"\n\t\t\t\t\tstyle={{ backgroundColor: hueColor }}\n\t\t\t\t\tonMouseDown={handlePaletteMouseDown}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"react-public-color-picker-saturation-bg\" />\n\t\t\t\t\t<div className=\"react-public-color-picker-brightness-bg\" />\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"react-public-color-picker-handler\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: `${currentColor.s}%`,\n\t\t\t\t\t\t\ttop: `${100 - currentColor.b}%`,\n\t\t\t\t\t\t\tbackgroundColor: currentColor.toCssString(),\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Hue & Alpha 滑块与右侧色块 */}\n\t\t\t\t<div className=\"react-public-color-picker-slider-container\">\n\t\t\t\t\t<div className=\"react-public-color-picker-slider-group\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tref={hueSliderRef}\n\t\t\t\t\t\t\tclassName=\"react-public-color-picker-slider react-public-color-picker-hue-slider\"\n\t\t\t\t\t\t\tonMouseDown={handleHueMouseDown}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"react-public-color-picker-slider-handler\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tleft: `${(currentColor.h / 360) * 100}%`,\n\t\t\t\t\t\t\t\t\tbackgroundColor: hueColor,\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\n\t\t\t\t\t\t{!disabledAlpha && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tref={alphaSliderRef}\n\t\t\t\t\t\t\t\tclassName=\"react-public-color-picker-slider react-public-color-picker-alpha-slider\"\n\t\t\t\t\t\t\t\tonMouseDown={handleAlphaMouseDown}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName=\"react-public-color-picker-alpha-bg\"\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tbackground: `linear-gradient(to right, transparent, ${new Color({\n\t\t\t\t\t\t\t\t\t\t\th: currentColor.h,\n\t\t\t\t\t\t\t\t\t\t\ts: currentColor.s,\n\t\t\t\t\t\t\t\t\t\t\tb: currentColor.b,\n\t\t\t\t\t\t\t\t\t\t\ta: 1,\n\t\t\t\t\t\t\t\t\t\t}).toHexString()})`,\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<div\n\t\t\t\t\t\t\t\t\tclassName=\"react-public-color-picker-slider-handler\"\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tleft: `${currentColor.a * 100}%`,\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: currentColor.toCssString(),\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</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* 右侧边栏预览色块 */}\n\t\t\t\t\t<div className=\"react-public-color-picker-side-block\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"react-public-color-picker-color-inner\"\n\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\tactiveMode === 'gradient'\n\t\t\t\t\t\t\t\t\t? { background: formatGradientCss(gradientStops) }\n\t\t\t\t\t\t\t\t\t: { backgroundColor: currentColor.toCssString() }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Format 格式输入行 */}\n\t\t\t\t{!disabledFormat && (\n\t\t\t\t\t<div className=\"react-public-color-picker-inputs\">\n\t\t\t\t\t\t<select\n\t\t\t\t\t\t\tclassName=\"react-public-color-picker-format-select\"\n\t\t\t\t\t\t\tvalue={currentFormat}\n\t\t\t\t\t\t\tonChange={(e) => handleFormatSelectChange(e.target.value as ColorFormat)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<option value=\"hex\">HEX</option>\n\t\t\t\t\t\t\t<option value=\"rgb\">RGB</option>\n\t\t\t\t\t\t\t<option value=\"hsb\">HSB</option>\n\t\t\t\t\t\t</select>\n\n\t\t\t\t\t\t{currentFormat === 'hex' && (\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclassName=\"react-public-color-picker-input-field\"\n\t\t\t\t\t\t\t\tvalue={currentColor.toHex()}\n\t\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\t\tconst val = e.target.value;\n\t\t\t\t\t\t\t\t\tconst newC = new Color(`#${val}`);\n\t\t\t\t\t\t\t\t\tnewC.a = currentColor.a;\n\t\t\t\t\t\t\t\t\tupdateColor(newC, true);\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\n\t\t\t\t\t\t{currentFormat === 'rgb' && (\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclassName=\"react-public-color-picker-input-field\"\n\t\t\t\t\t\t\t\tvalue={`${currentColor.toRgb().r}, ${currentColor.toRgb().g}, ${currentColor.toRgb().b}`}\n\t\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\t\tconst parts = e.target.value.split(',').map((v) => parseInt(v.trim(), 10));\n\t\t\t\t\t\t\t\t\tif (parts.length >= 3 && !parts.some((n) => isNaN(n))) {\n\t\t\t\t\t\t\t\t\t\tconst newC = new Color({\n\t\t\t\t\t\t\t\t\t\t\tr: parts[0],\n\t\t\t\t\t\t\t\t\t\t\tg: parts[1],\n\t\t\t\t\t\t\t\t\t\t\tb: parts[2],\n\t\t\t\t\t\t\t\t\t\t\ta: currentColor.a,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tupdateColor(newC, true);\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/>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{currentFormat === 'hsb' && (\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclassName=\"react-public-color-picker-input-field\"\n\t\t\t\t\t\t\t\tvalue={`${currentColor.h}°, ${currentColor.s}%, ${currentColor.b}%`}\n\t\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\t\tconst parts = e.target.value\n\t\t\t\t\t\t\t\t\t\t.replace(/[%°]/g, '')\n\t\t\t\t\t\t\t\t\t\t.split(',')\n\t\t\t\t\t\t\t\t\t\t.map((v) => parseInt(v.trim(), 10));\n\t\t\t\t\t\t\t\t\tif (parts.length >= 3 && !parts.some((n) => isNaN(n))) {\n\t\t\t\t\t\t\t\t\t\tconst newC = new Color({\n\t\t\t\t\t\t\t\t\t\t\th: parts[0],\n\t\t\t\t\t\t\t\t\t\t\ts: parts[1],\n\t\t\t\t\t\t\t\t\t\t\tb: parts[2],\n\t\t\t\t\t\t\t\t\t\t\ta: currentColor.a,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tupdateColor(newC, true);\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/>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{!disabledAlpha && (\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclassName=\"react-public-color-picker-alpha-input\"\n\t\t\t\t\t\t\t\tvalue={`${Math.round(currentColor.a * 100)}%`}\n\t\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\t\tconst val = parseInt(e.target.value.replace('%', ''), 10);\n\t\t\t\t\t\t\t\t\tif (!isNaN(val)) {\n\t\t\t\t\t\t\t\t\t\tconst newA = Math.max(0, Math.min(1, val / 100));\n\t\t\t\t\t\t\t\t\t\tconst newC = new Color({\n\t\t\t\t\t\t\t\t\t\t\th: currentColor.h,\n\t\t\t\t\t\t\t\t\t\t\ts: currentColor.s,\n\t\t\t\t\t\t\t\t\t\t\tb: currentColor.b,\n\t\t\t\t\t\t\t\t\t\t\ta: newA,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tupdateColor(newC, true);\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/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t};\n\n\t// Presets 折叠状态\n\tconst [collapsedPresets, setCollapsedPresets] = useState<Record<number, boolean>>({});\n\n\tconst togglePresetCollapse = (idx: number) => {\n\t\tsetCollapsedPresets((prev) => ({\n\t\t\t...prev,\n\t\t\t[idx]: !prev[idx],\n\t\t}));\n\t};\n\n\t// 纯 Presets 内容\n\tconst renderPresetsContent = (isStandalone = false) => {\n\t\tif (!presets || presets.length === 0) return null;\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={`react-public-color-picker-presets ${\n\t\t\t\t\tisStandalone ? 'react-public-color-picker-presets-standalone' : ''\n\t\t\t\t}`}\n\t\t\t>\n\t\t\t\t{presets.map((preset, idx) => {\n\t\t\t\t\tconst isCollapsed = collapsedPresets[idx] ?? preset.defaultOpen === false;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div key={preset.key ?? idx} style={{ marginBottom: 8 }}>\n\t\t\t\t\t\t\t{preset.label && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName=\"react-public-color-picker-preset-title\"\n\t\t\t\t\t\t\t\t\tonClick={() => togglePresetCollapse(idx)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<DownOutlined\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tfontSize: 10,\n\t\t\t\t\t\t\t\t\t\t\tcolor: '#8c8c8c',\n\t\t\t\t\t\t\t\t\t\t\ttransition: 'transform 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\ttransform: isCollapsed ? 'rotate(-90deg)' : 'rotate(0deg)',\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{preset.label}\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{!isCollapsed && (\n\t\t\t\t\t\t\t\t<div className=\"react-public-color-picker-preset-colors\">\n\t\t\t\t\t\t\t\t\t{preset.colors.map((c, colorIdx) => {\n\t\t\t\t\t\t\t\t\t\tconst presetColor = generateColor(c);\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tkey={colorIdx}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"react-public-color-picker-preset-item\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => updateColor(presetColor, true)}\n\t\t\t\t\t\t\t\t\t\t\t\ttitle={presetColor.toCssString()}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"react-public-color-picker-preset-item-inner\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ backgroundColor: presetColor.toCssString() }}\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</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</div>\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\t\t);\n\t};\n\n\t// 完整的 Popover Panel\n\tconst defaultPanel = (\n\t\t<div>\n\t\t\t{renderPickerContent()}\n\t\t\t{renderPresetsContent(true)}\n\t\t</div>\n\t);\n\n\tconst finalPanel = panelRender\n\t\t? panelRender(defaultPanel, {\n\t\t\t\tcomponents: {\n\t\t\t\t\tPicker: renderPickerContent,\n\t\t\t\t\tPresets: () => renderPresetsContent(false),\n\t\t\t\t},\n\t\t\t})\n\t\t: defaultPanel;\n\n\t// 触发器背景与文本计算\n\tconst triggerBgStyle =\n\t\tactiveMode === 'gradient'\n\t\t\t? { background: formatGradientCss(gradientStops) }\n\t\t\t: { backgroundColor: currentColor.toCssString() };\n\n\tconst renderText = () => {\n\t\tif (!showText) return null;\n\t\tif (typeof showText === 'function') {\n\t\t\treturn showText(activeMode === 'gradient' ? gradientStops : currentColor);\n\t\t}\n\t\tconst textContent =\n\t\t\tactiveMode === 'gradient' ? formatGradientText(gradientStops) : currentColor.toCssString();\n\t\treturn <span style={{ fontSize: 13, color: '#595959' }}>{textContent}</span>;\n\t};\n\n\tconst renderCustomTrigger = () => {\n\t\tif (!children) return null;\n\t\tif (typeof children === 'function') {\n\t\t\treturn children(currentColor);\n\t\t}\n\t\treturn children;\n\t};\n\n\t// 事件监听 (hover / click)\n\tconst triggerProps = {\n\t\tonClick: () => {\n\t\t\tif (trigger === 'click') {\n\t\t\t\thandleOpenChange(!isOpen);\n\t\t\t}\n\t\t},\n\t\tonMouseEnter: () => {\n\t\t\tif (trigger === 'hover') {\n\t\t\t\thandleOpenChange(true);\n\t\t\t}\n\t\t},\n\t\tonMouseLeave: () => {\n\t\t\tif (trigger === 'hover') {\n\t\t\t\thandleOpenChange(false);\n\t\t\t}\n\t\t},\n\t};\n\n\tconst showArrow = typeof arrow === 'boolean' ? arrow : (arrow?.pointAtCenter ?? true);\n\n\tif (destroyOnHidden && !isOpen) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={containerRef}\n\t\t\t\tclassName={`react-public-color-picker-trigger react-public-color-picker-size-${size} ${\n\t\t\t\t\tdisabled ? 'react-public-color-picker-disabled' : ''\n\t\t\t\t} ${className}`.trim()}\n\t\t\t\tstyle={style}\n\t\t\t\t{...triggerProps}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t{children ? (\n\t\t\t\t\trenderCustomTrigger()\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<div className=\"react-public-color-picker-color-block\">\n\t\t\t\t\t\t\t<div className=\"react-public-color-picker-color-inner\" style={triggerBgStyle} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{renderText()}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tstyle={{ position: 'relative', display: 'inline-block' }}\n\t\t\t{...triggerProps}\n\t\t>\n\t\t\t{/* 触发器 */}\n\t\t\t<div\n\t\t\t\tclassName={`react-public-color-picker-trigger react-public-color-picker-size-${size} ${\n\t\t\t\t\tdisabled ? 'react-public-color-picker-disabled' : ''\n\t\t\t\t} ${className}`.trim()}\n\t\t\t\tstyle={style}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t{children ? (\n\t\t\t\t\trenderCustomTrigger()\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<div className=\"react-public-color-picker-color-block\">\n\t\t\t\t\t\t\t<div className=\"react-public-color-picker-color-inner\" style={triggerBgStyle} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{renderText()}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t\t{allowClear && !disabled && (\n\t\t\t\t\t<CloseCircleFilled\n\t\t\t\t\t\tclassName=\"react-public-color-picker-clear-icon\"\n\t\t\t\t\t\tonClick={handleClearClick}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* 弹出面板 */}\n\t\t\t{isOpen && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={`react-public-color-picker-popover react-public-color-picker-popover-${placement}`}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\ttop: placement.startsWith('bottom') ? 'calc(100% + 8px)' : undefined,\n\t\t\t\t\t\tbottom: placement.startsWith('top') ? 'calc(100% + 8px)' : undefined,\n\t\t\t\t\t\tleft: placement.endsWith('Left') || placement === 'bottom' ? 0 : undefined,\n\t\t\t\t\t\tright: placement.endsWith('Right') ? 0 : undefined,\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t>\n\t\t\t\t\t{showArrow && <div className=\"react-public-color-picker-arrow\" />}\n\t\t\t\t\t{finalPanel}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default ColorPicker;\n","export interface HsbColor {\n\th: number; // 0 ~ 360\n\ts: number; // 0 ~ 100\n\tb: number; // 0 ~ 100\n\ta: number; // 0 ~ 1\n}\n\nexport interface RgbColor {\n\tr: number; // 0 ~ 255\n\tg: number; // 0 ~ 255\n\tb: number; // 0 ~ 255\n\ta: number; // 0 ~ 1\n}\n\nexport interface ColorGradientStop {\n\tcolor: Color;\n\tpercent: number; // 0 ~ 100\n}\n\nexport type ColorInput =\n\t| string\n\t| Color\n\t| { r: number; g: number; b: number; a?: number }\n\t| { h: number; s: number; b: number; a?: number };\n\nexport const parseGradientStops = (gradientStr: string): ColorGradientStop[] => {\n\tlet clean = gradientStr.trim();\n\tif (clean.toLowerCase().startsWith('linear-gradient')) {\n\t\tconst match = clean.match(/linear-gradient\\([^,]+,\\s*(.+)\\)$/i);\n\t\tif (match) {\n\t\t\tclean = match[1];\n\t\t}\n\t}\n\n\t// 匹配颜色 + 百分比,例如 \"rgb(16,142,233) 0%, rgb(135,208,104) 100%\"\n\t// 或 \"#1677ff 0%, #36cfc9 100%\"\n\tconst parts = clean.split(/,\\s*(?=[a-zA-Z#])/);\n\tconst stops: ColorGradientStop[] = [];\n\n\tparts.forEach((part, index) => {\n\t\tconst percentMatch = part.match(/\\s+(\\d+(?:\\.\\d+)?)%\\s*$/);\n\t\tlet percent = index === 0 ? 0 : 100;\n\t\tlet colorStr = part;\n\n\t\tif (percentMatch) {\n\t\t\tpercent = parseFloat(percentMatch[1]);\n\t\t\tcolorStr = part.replace(/\\s+\\d+(?:\\.\\d+)?%\\s*$/, '').trim();\n\t\t}\n\n\t\tstops.push({\n\t\t\tcolor: generateColor(colorStr),\n\t\t\tpercent,\n\t\t});\n\t});\n\n\tif (stops.length === 0) {\n\t\treturn [\n\t\t\t{ color: generateColor('rgb(16,142,233)'), percent: 0 },\n\t\t\t{ color: generateColor('rgb(135,208,104)'), percent: 100 },\n\t\t];\n\t}\n\n\treturn stops;\n};\n\nexport const formatGradientCss = (stops: ColorGradientStop[]): string => {\n\tconst sorted = [...stops].sort((a, b) => a.percent - b.percent);\n\treturn `linear-gradient(90deg, ${sorted.map((s) => `${s.color.toCssString()} ${s.percent}%`).join(', ')})`;\n};\n\nexport const formatGradientText = (stops: ColorGradientStop[]): string => {\n\tconst sorted = [...stops].sort((a, b) => a.percent - b.percent);\n\treturn sorted.map((s) => `${s.color.toCssString()} ${s.percent}%`).join(', ');\n};\n\nexport class Color {\n\th: number = 0; // 0 ~ 360\n\ts: number = 0; // 0 ~ 100\n\tb: number = 0; // 0 ~ 100\n\ta: number = 1; // 0 ~ 1\n\n\tconstructor(colorInput?: ColorInput) {\n\t\tif (!colorInput) {\n\t\t\tthis.h = 215;\n\t\t\tthis.s = 91;\n\t\t\tthis.b = 100;\n\t\t\tthis.a = 1;\n\t\t\treturn;\n\t\t}\n\n\t\tif (colorInput instanceof Color) {\n\t\t\tthis.h = colorInput.h;\n\t\t\tthis.s = colorInput.s;\n\t\t\tthis.b = colorInput.b;\n\t\t\tthis.a = colorInput.a;\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof colorInput === 'string') {\n\t\t\tconst parsed = Color.parseString(colorInput);\n\t\t\tthis.h = parsed.h;\n\t\t\tthis.s = parsed.s;\n\t\t\tthis.b = parsed.b;\n\t\t\tthis.a = parsed.a;\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof colorInput === 'object') {\n\t\t\tif ('r' in colorInput && 'g' in colorInput && 'b' in colorInput) {\n\t\t\t\tconst hsb = Color.rgbToHsb(colorInput.r, colorInput.g, colorInput.b, colorInput.a ?? 1);\n\t\t\t\tthis.h = hsb.h;\n\t\t\t\tthis.s = hsb.s;\n\t\t\t\tthis.b = hsb.b;\n\t\t\t\tthis.a = hsb.a;\n\t\t\t} else if ('h' in colorInput && 's' in colorInput && 'b' in colorInput) {\n\t\t\t\tthis.h = Math.min(360, Math.max(0, colorInput.h));\n\t\t\t\tthis.s = Math.min(100, Math.max(0, colorInput.s));\n\t\t\t\tthis.b = Math.min(100, Math.max(0, colorInput.b));\n\t\t\t\tthis.a = Math.min(1, Math.max(0, colorInput.a ?? 1));\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic rgbToHsb(r: number, g: number, b: number, a: number = 1): HsbColor {\n\t\tconst rNorm = r / 255;\n\t\tconst gNorm = g / 255;\n\t\tconst bNorm = b / 255;\n\n\t\tconst max = Math.max(rNorm, gNorm, bNorm);\n\t\tconst min = Math.min(rNorm, gNorm, bNorm);\n\t\tconst delta = max - min;\n\n\t\tlet h = 0;\n\t\tif (delta !== 0) {\n\t\t\tif (max === rNorm) {\n\t\t\t\th = ((gNorm - bNorm) / delta) % 6;\n\t\t\t} else if (max === gNorm) {\n\t\t\t\th = (bNorm - rNorm) / delta + 2;\n\t\t\t} else {\n\t\t\t\th = (rNorm - gNorm) / delta + 4;\n\t\t\t}\n\t\t\th = Math.round(h * 60);\n\t\t\tif (h < 0) h += 360;\n\t\t}\n\n\t\tconst s = max === 0 ? 0 : Math.round((delta / max) * 100);\n\t\tconst v = Math.round(max * 100);\n\n\t\treturn { h, s, b: v, a };\n\t}\n\n\tstatic hsbToRgb(h: number, s: number, b: number, a: number = 1): RgbColor {\n\t\tconst sNorm = s / 100;\n\t\tconst vNorm = b / 100;\n\n\t\tconst c = vNorm * sNorm;\n\t\tconst x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n\t\tconst m = vNorm - c;\n\n\t\tlet rPrime = 0;\n\t\tlet gPrime = 0;\n\t\tlet bPrime = 0;\n\n\t\tif (h >= 0 && h < 60) {\n\t\t\trPrime = c;\n\t\t\tgPrime = x;\n\t\t\tbPrime = 0;\n\t\t} else if (h >= 60 && h < 120) {\n\t\t\trPrime = x;\n\t\t\tgPrime = c;\n\t\t\tbPrime = 0;\n\t\t} else if (h >= 120 && h < 180) {\n\t\t\trPrime = 0;\n\t\t\tgPrime = c;\n\t\t\tbPrime = x;\n\t\t} else if (h >= 180 && h < 240) {\n\t\t\trPrime = 0;\n\t\t\tgPrime = x;\n\t\t\tbPrime = c;\n\t\t} else if (h >= 240 && h < 300) {\n\t\t\trPrime = x;\n\t\t\tgPrime = 0;\n\t\t\tbPrime = c;\n\t\t} else if (h >= 300 && h <= 360) {\n\t\t\trPrime = c;\n\t\t\tgPrime = 0;\n\t\t\tbPrime = x;\n\t\t}\n\n\t\tconst r = Math.round((rPrime + m) * 255);\n\t\tconst g = Math.round((gPrime + m) * 255);\n\t\tconst bRes = Math.round((bPrime + m) * 255);\n\n\t\treturn { r, g, b: bRes, a };\n\t}\n\n\tstatic parseString(str: string): HsbColor {\n\t\tconst trimmed = str.trim().toLowerCase();\n\n\t\t// 解析 hex,例如 #1677ff, #fff, #1677ff80\n\t\tif (trimmed.startsWith('#')) {\n\t\t\tlet hex = trimmed.slice(1);\n\t\t\tif (hex.length === 3) {\n\t\t\t\thex = hex\n\t\t\t\t\t.split('')\n\t\t\t\t\t.map((c) => c + c)\n\t\t\t\t\t.join('');\n\t\t\t}\n\t\t\tif (hex.length === 6) {\n\t\t\t\tconst r = parseInt(hex.slice(0, 2), 16);\n\t\t\t\tconst g = parseInt(hex.slice(2, 4), 16);\n\t\t\t\tconst b = parseInt(hex.slice(4, 6), 16);\n\t\t\t\treturn Color.rgbToHsb(r, g, b, 1);\n\t\t\t}\n\t\t\tif (hex.length === 8) {\n\t\t\t\tconst r = parseInt(hex.slice(0, 2), 16);\n\t\t\t\tconst g = parseInt(hex.slice(2, 4), 16);\n\t\t\t\tconst b = parseInt(hex.slice(4, 6), 16);\n\t\t\t\tconst a = parseInt(hex.slice(6, 8), 16) / 255;\n\t\t\t\treturn Color.rgbToHsb(r, g, b, a);\n\t\t\t}\n\t\t}\n\n\t\t// 解析 rgb / rgba\n\t\tconst rgbMatch = trimmed.match(\n\t\t\t/^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/,\n\t\t);\n\t\tif (rgbMatch) {\n\t\t\tconst r = parseInt(rgbMatch[1], 10);\n\t\t\tconst g = parseInt(rgbMatch[2], 10);\n\t\t\tconst b = parseInt(rgbMatch[3], 10);\n\t\t\tconst a = rgbMatch[4] !== undefined ? parseFloat(rgbMatch[4]) : 1;\n\t\t\treturn Color.rgbToHsb(r, g, b, a);\n\t\t}\n\n\t\t// 解析 hsb / hsba / hsl / hsla\n\t\tconst hsbMatch = trimmed.match(\n\t\t\t/^hsba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)%?\\s*,\\s*(\\d+)%?(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/,\n\t\t);\n\t\tif (hsbMatch) {\n\t\t\tconst h = parseInt(hsbMatch[1], 10);\n\t\t\tconst s = parseInt(hsbMatch[2], 10);\n\t\t\tconst b = parseInt(hsbMatch[3], 10);\n\t\t\tconst a = hsbMatch[4] !== undefined ? parseFloat(hsbMatch[4]) : 1;\n\t\t\treturn { h, s, b, a };\n\t\t}\n\n\t\t// 默认 fallback (蓝)\n\t\treturn { h: 215, s: 91, b: 100, a: 1 };\n\t}\n\n\ttoRgb(): RgbColor {\n\t\treturn Color.hsbToRgb(this.h, this.s, this.b, this.a);\n\t}\n\n\ttoRgbString(): string {\n\t\tconst { r, g, b, a } = this.toRgb();\n\t\tif (a < 1) {\n\t\t\treturn `rgba(${r}, ${g}, ${b}, ${Number(a.toFixed(2))})`;\n\t\t}\n\t\treturn `rgb(${r}, ${g}, ${b})`;\n\t}\n\n\ttoHsb(): HsbColor {\n\t\treturn {\n\t\t\th: Math.round(this.h),\n\t\t\ts: Math.round(this.s),\n\t\t\tb: Math.round(this.b),\n\t\t\ta: Number(this.a.toFixed(2)),\n\t\t};\n\t}\n\n\ttoHsbString(): string {\n\t\tconst { h, s, b, a } = this.toHsb();\n\t\tif (a < 1) {\n\t\t\treturn `hsba(${h}, ${s}%, ${b}%, ${a})`;\n\t\t}\n\t\treturn `hsb(${h}, ${s}%, ${b}%)`;\n\t}\n\n\ttoHex(): string {\n\t\tconst { r, g, b } = this.toRgb();\n\t\tconst rHex = r.toString(16).padStart(2, '0');\n\t\tconst gHex = g.toString(16).padStart(2, '0');\n\t\tconst bHex = b.toString(16).padStart(2, '0');\n\t\treturn `${rHex}${gHex}${bHex}`;\n\t}\n\n\ttoHexString(): string {\n\t\treturn `#${this.toHex()}`;\n\t}\n\n\ttoCssString(): string {\n\t\tif (this.a < 1) {\n\t\t\treturn this.toRgbString();\n\t\t}\n\t\treturn this.toHexString();\n\t}\n}\n\nexport const generateColor = (color: ColorInput): Color => {\n\tif (color instanceof Color) {\n\t\treturn color;\n\t}\n\treturn new Color(color);\n};\n","import React, { useState, useRef, useEffect, ReactNode, CSSProperties } from 'react';\nimport { CopyOutlined, CheckOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface CopyButtonProps {\n\t/** 要复制的目标文本 */\n\ttext?: string;\n\t/** 动态获取要复制的目标文本(支持异步) */\n\tgetText?: () => string | Promise<string>;\n\t/** 复制按钮的展示形态:button 按钮形态、icon 纯图标、inline 行内文本 */\n\tmode?: 'button' | 'icon' | 'inline';\n\t/** 按钮类型(仅在 mode='button' 时有效) */\n\ttype?: 'default' | 'primary';\n\t/** 默认图标 */\n\ticon?: ReactNode;\n\t/** 复制成功后的图标 */\n\tcopiedIcon?: ReactNode;\n\t/** 复制成功后展示的文本 */\n\tcopiedText?: ReactNode;\n\t/** 默认展示的子内容/按钮文案 */\n\tchildren?: ReactNode;\n\t/** 复制成功提示的 Tooltip 配置(传 false 禁用,传字符串/ReactNode 自定义文案,传 true 使用默认'复制成功') */\n\ttooltip?: boolean | ReactNode;\n\t/** 复制成功后的高亮展示持续时间(毫秒),默认 2000ms */\n\tduration?: number;\n\t/** 是否禁用 */\n\tdisabled?: boolean;\n\t/** 成功复制回调 */\n\tonCopy?: (text: string) => void;\n\t/** 复制失败回调 */\n\tonError?: (error: unknown) => void;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\n/** 浏览器剪贴板复制降级方案 */\nasync function copyToClipboard(content: string): Promise<void> {\n\tif (navigator.clipboard && window.isSecureContext) {\n\t\tawait navigator.clipboard.writeText(content);\n\t\treturn;\n\t}\n\n\tconst textArea = document.createElement('textarea');\n\ttextArea.value = content;\n\ttextArea.style.position = 'fixed';\n\ttextArea.style.left = '-999999px';\n\ttextArea.style.top = '-999999px';\n\tdocument.body.appendChild(textArea);\n\ttextArea.focus();\n\ttextArea.select();\n\n\treturn new Promise((resolve, reject) => {\n\t\tconst successful = document.execCommand('copy');\n\t\ttextArea.remove();\n\t\tif (successful) {\n\t\t\tresolve();\n\t\t} else {\n\t\t\treject(new Error('复制失败'));\n\t\t}\n\t});\n}\n\nconst CopyButton: React.FC<CopyButtonProps> = ({\n\ttext,\n\tgetText,\n\tmode = 'button',\n\ttype = 'default',\n\ticon,\n\tcopiedIcon,\n\tcopiedText,\n\tchildren,\n\ttooltip = true,\n\tduration = 2000,\n\tdisabled = false,\n\tonCopy,\n\tonError,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [isCopied, setIsCopied] = useState<boolean>(false);\n\tconst [isHovered, setIsHovered] = useState<boolean>(false);\n\tconst timerRef = useRef<number | null>(null);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (timerRef.current) {\n\t\t\t\twindow.clearTimeout(timerRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\tconst handleCopy = async (e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tif (disabled) return;\n\n\t\ttry {\n\t\t\tlet targetText = text || '';\n\t\t\tif (getText) {\n\t\t\t\ttargetText = await getText();\n\t\t\t}\n\n\t\t\tawait copyToClipboard(targetText);\n\t\t\tsetIsCopied(true);\n\t\t\tonCopy?.(targetText);\n\n\t\t\tif (timerRef.current) {\n\t\t\t\twindow.clearTimeout(timerRef.current);\n\t\t\t}\n\t\t\ttimerRef.current = window.setTimeout(() => {\n\t\t\t\tsetIsCopied(false);\n\t\t\t}, duration);\n\t\t} catch (err) {\n\t\t\tonError?.(err);\n\t\t}\n\t};\n\n\tconst defaultIcon = icon ?? <CopyOutlined />;\n\tconst defaultCopiedIcon = copiedIcon ?? <CheckOutlined style={{ color: '#52c41a' }} />;\n\n\t// 计算展示的图标与文案\n\tconst currentIcon = isCopied ? defaultCopiedIcon : defaultIcon;\n\tconst currentText = isCopied ? (copiedText ?? children ?? '已复制') : (children ?? (mode === 'button' ? '复制' : null));\n\n\t// Tooltip 提示文本计算\n\tlet tooltipContent: ReactNode = null;\n\tif (tooltip) {\n\t\tif (isCopied) {\n\t\t\ttooltipContent = typeof tooltip === 'boolean' ? '复制成功!' : tooltip;\n\t\t} else if (mode === 'icon') {\n\t\t\ttooltipContent = '点击复制';\n\t\t}\n\t}\n\n\tconst classNames = [\n\t\t'rpc_copy_button',\n\t\t`rpc_copy_button_${mode}`,\n\t\ttype === 'primary' && mode === 'button' ? 'rpc_copy_button_primary' : '',\n\t\tisCopied ? 'rpc_copy_button_copied' : '',\n\t\tdisabled ? 'rpc_copy_button_disabled' : '',\n\t\tclassName,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\treturn (\n\t\t<div\n\t\t\tclassName={classNames}\n\t\t\tstyle={style}\n\t\t\tonClick={handleCopy}\n\t\t\tonMouseEnter={() => setIsHovered(true)}\n\t\t\tonMouseLeave={() => setIsHovered(false)}\n\t\t\trole=\"button\"\n\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t>\n\t\t\t<span className=\"rpc_copy_button_icon_wrap\">{currentIcon}</span>\n\t\t\t{currentText && <span>{currentText}</span>}\n\n\t\t\t{tooltip && tooltipContent && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={`rpc_copy_button_tooltip ${\n\t\t\t\t\t\tisCopied ? 'rpc_copy_button_tooltip_visible' : isHovered ? 'rpc_copy_button_tooltip_hover' : ''\n\t\t\t\t\t}`}\n\t\t\t\t>\n\t\t\t\t\t{tooltipContent}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default CopyButton;\n","import React, { useState, useRef, useEffect, ReactNode, CSSProperties } from 'react';\nimport CopyButton from '../CopyButton';\nimport './index.less';\n\nexport interface TextEllipsisExpandConfig {\n\t/** 展开按钮文案,默认为 '展开' */\n\tcollapsedText?: ReactNode;\n\t/** 收起按钮文案,默认为 '收起' */\n\texpandedText?: ReactNode;\n\t/** 默认是否展开 */\n\tdefaultExpanded?: boolean;\n\t/** 展开状态改变回调 */\n\tonExpandChange?: (expanded: boolean) => void;\n}\n\nexport interface TextEllipsisProps {\n\t/** 显示的文本或节点 */\n\tchildren: ReactNode;\n\t/** 最大显示行数,超过则截断,默认为 1 */\n\tlines?: number;\n\t/** 是否支持展开/收起,可传 boolean 或配置对象 */\n\texpandable?: boolean | TextEllipsisExpandConfig;\n\t/** Tooltip 浮层展示配置:'auto' 仅在溢出截断时展示、true 始终在 hover 时展示、false 禁用 */\n\ttooltip?: 'auto' | boolean | ReactNode;\n\t/** 是否显示复制按钮 */\n\tcopyable?: boolean;\n\t/** 前缀节点 */\n\tprefix?: ReactNode;\n\t/** 后缀节点 */\n\tsuffix?: ReactNode;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst TextEllipsis: React.FC<TextEllipsisProps> = ({\n\tchildren,\n\tlines = 1,\n\texpandable = false,\n\ttooltip = 'auto',\n\tcopyable = false,\n\tprefix,\n\tsuffix,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst expandConfig = typeof expandable === 'object' ? expandable : {};\n\tconst [expanded, setExpanded] = useState<boolean>(\n\t\texpandConfig.defaultExpanded ?? false,\n\t);\n\tconst [isOverflow, setIsOverflow] = useState<boolean>(false);\n\tconst [isHovered, setIsHovered] = useState<boolean>(false);\n\tconst textRef = useRef<HTMLDivElement>(null);\n\n\t// 检测文本是否发生溢出截断\n\tconst checkOverflow = () => {\n\t\tconst el = textRef.current;\n\t\tif (!el) return;\n\t\tif (lines === 1) {\n\t\t\tsetIsOverflow(el.scrollWidth > el.clientWidth);\n\t\t} else {\n\t\t\tsetIsOverflow(el.scrollHeight > el.clientHeight);\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tcheckOverflow();\n\t\twindow.addEventListener('resize', checkOverflow);\n\t\treturn () => {\n\t\t\twindow.removeEventListener('resize', checkOverflow);\n\t\t};\n\t}, [children, lines, expanded]);\n\n\tconst handleToggleExpand = (e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tconst nextState = !expanded;\n\t\tsetExpanded(nextState);\n\t\texpandConfig.onExpandChange?.(nextState);\n\t};\n\n\t// 提取纯文本用于复制和默认 Tooltip\n\tconst rawText = typeof children === 'string' || typeof children === 'number' ? String(children) : '';\n\n\t// 判断是否展示 Tooltip\n\tconst shouldShowTooltip =\n\t\t!expanded &&\n\t\t(tooltip === true || (tooltip === 'auto' && isOverflow) || (typeof tooltip === 'string' && tooltip.length > 0));\n\n\tconst tooltipText = typeof tooltip === 'string' || React.isValidElement(tooltip) ? tooltip : rawText;\n\n\tconst collapsedBtnText = expandConfig.collapsedText ?? '展开';\n\tconst expandedBtnText = expandConfig.expandedText ?? '收起';\n\n\tconst isSingleLine = lines <= 1;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`rpc_text_ellipsis ${className}`}\n\t\t\tstyle={style}\n\t\t\tonMouseEnter={() => setIsHovered(true)}\n\t\t\tonMouseLeave={() => setIsHovered(false)}\n\t\t>\n\t\t\t{prefix && <span className=\"rpc_text_ellipsis_prefix\">{prefix}</span>}\n\n\t\t\t<div\n\t\t\t\tref={textRef}\n\t\t\t\tclassName={`rpc_text_ellipsis_content_wrap ${\n\t\t\t\t\texpanded\n\t\t\t\t\t\t? 'rpc_text_ellipsis_expanded'\n\t\t\t\t\t\t: isSingleLine\n\t\t\t\t\t\t\t? 'rpc_text_ellipsis_single_line'\n\t\t\t\t\t\t\t: 'rpc_text_ellipsis_multi_line'\n\t\t\t\t}`}\n\t\t\t\tstyle={{\n\t\t\t\t\tWebkitLineClamp: expanded ? undefined : lines > 1 ? lines : undefined,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\n\t\t\t{expandable && (isOverflow || expanded) && (\n\t\t\t\t<span className=\"rpc_text_ellipsis_action_btn\" onClick={handleToggleExpand}>\n\t\t\t\t\t{expanded ? expandedBtnText : collapsedBtnText}\n\t\t\t\t</span>\n\t\t\t)}\n\n\t\t\t{copyable && rawText && (\n\t\t\t\t<span className=\"rpc_text_ellipsis_suffix\">\n\t\t\t\t\t<CopyButton mode=\"icon\" text={rawText} tooltip={false} />\n\t\t\t\t</span>\n\t\t\t)}\n\n\t\t\t{suffix && <span className=\"rpc_text_ellipsis_suffix\">{suffix}</span>}\n\n\t\t\t{shouldShowTooltip && tooltipText && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={`rpc_text_ellipsis_tooltip ${\n\t\t\t\t\t\tisHovered ? 'rpc_text_ellipsis_tooltip_visible' : ''\n\t\t\t\t\t}`}\n\t\t\t\t>\n\t\t\t\t\t{tooltipText}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default TextEllipsis;\n","import React, { useState, useRef, useEffect, useMemo, ReactNode, CSSProperties } from 'react';\nimport { LoadingOutlined, SearchOutlined, CloseCircleFilled, DownOutlined, CheckOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface SelectOption {\n\tlabel: ReactNode;\n\tvalue: string | number;\n\tdisabled?: boolean;\n\t[key: string]: unknown;\n}\n\nexport type SelectValue =\n\t| string\n\t| number\n\t| SelectOption\n\t| (string | number | SelectOption)[]\n\t| undefined;\n\nexport interface DebounceSelectProps {\n\t/** 异步拉取选项列表的函数 */\n\tfetchOptions: (search: string) => Promise<SelectOption[]>;\n\t/** 防抖等待时间(毫秒),默认为 300ms */\n\tdebounceTimeout?: number;\n\t/** 选择模式:'single' 单选,'multiple' 多选(Tag标签形式) */\n\tmode?: 'single' | 'multiple';\n\t/** 当前选中值 */\n\tvalue?: SelectValue;\n\t/** 默认选中值 */\n\tdefaultValue?: SelectValue;\n\t/** 选中值变化回调 */\n\tonChange?: (value: any, option?: SelectOption | SelectOption[]) => void;\n\t/** 输入框占位符 */\n\tplaceholder?: string;\n\t/** 是否支持清空 */\n\tallowClear?: boolean;\n\t/** 是否禁用 */\n\tdisabled?: boolean;\n\t/** 空数据时的展示内容 */\n\tnotFoundContent?: ReactNode;\n\t/** 默认选项列表(搜索前展示) */\n\tdefaultOptions?: SelectOption[];\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst DebounceSelect: React.FC<DebounceSelectProps> = ({\n\tfetchOptions,\n\tdebounceTimeout = 300,\n\tmode = 'single',\n\tvalue: controlledValue,\n\tdefaultValue,\n\tonChange,\n\tplaceholder = '请输入搜索内容...',\n\tallowClear = true,\n\tdisabled = false,\n\tnotFoundContent = '暂无匹配数据',\n\tdefaultOptions = [],\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalValue, setInternalValue] = useState<SelectValue>(\n\t\tdefaultValue ?? (mode === 'multiple' ? [] : undefined),\n\t);\n\n\tconst currentValue = controlledValue !== undefined ? controlledValue : internalValue;\n\n\tconst [options, setOptions] = useState<SelectOption[]>(defaultOptions);\n\tconst [fetching, setFetching] = useState<boolean>(false);\n\tconst [searchValue, setSearchValue] = useState<string>('');\n\tconst [isOpen, setIsOpen] = useState<boolean>(false);\n\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst fetchRef = useRef<number>(0);\n\tconst debounceTimerRef = useRef<number | null>(null);\n\n\t// 解析格式化已选值,统一定位到数组格式\n\tconst selectedList: SelectOption[] = useMemo(() => {\n\t\tif (currentValue === undefined || currentValue === null) return [];\n\t\tconst rawArr = Array.isArray(currentValue) ? currentValue : [currentValue];\n\t\treturn rawArr.map((item) => {\n\t\t\tif (typeof item === 'object' && item !== null && 'value' in item) {\n\t\t\t\treturn item as SelectOption;\n\t\t\t}\n\t\t\tconst matched = options.find((opt) => opt.value === item);\n\t\t\treturn matched || { label: String(item), value: item as string | number };\n\t\t});\n\t}, [currentValue, options]);\n\n\t// 异步搜索逻辑(带时序竞态控制)\n\tconst performSearch = (kw: string) => {\n\t\tfetchRef.current += 1;\n\t\tconst fetchId = fetchRef.current;\n\n\t\tif (debounceTimerRef.current) {\n\t\t\twindow.clearTimeout(debounceTimerRef.current);\n\t\t}\n\n\t\tdebounceTimerRef.current = window.setTimeout(() => {\n\t\t\tsetFetching(true);\n\t\t\tfetchOptions(kw)\n\t\t\t\t.then((newOptions) => {\n\t\t\t\t\t// 仅当当前请求是最新一次发起的请求时才更新 options\n\t\t\t\t\tif (fetchId === fetchRef.current) {\n\t\t\t\t\t\tsetOptions(newOptions);\n\t\t\t\t\t\tsetFetching(false);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tif (fetchId === fetchRef.current) {\n\t\t\t\t\t\tsetOptions([]);\n\t\t\t\t\t\tsetFetching(false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}, debounceTimeout);\n\t};\n\n\t// 监听输入变化\n\tconst handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst val = e.target.value;\n\t\tsetSearchValue(val);\n\t\tif (!isOpen) setIsOpen(true);\n\t\tperformSearch(val);\n\t};\n\n\t// 点击外部关闭弹窗\n\tuseEffect(() => {\n\t\tconst handleClickOutside = (e: MouseEvent) => {\n\t\t\tif (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n\t\t\t\tsetIsOpen(false);\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener('mousedown', handleClickOutside);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('mousedown', handleClickOutside);\n\t\t\tif (debounceTimerRef.current) {\n\t\t\t\twindow.clearTimeout(debounceTimerRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\t// 选中项处理\n\tconst handleSelectOption = (option: SelectOption) => {\n\t\tif (option.disabled) return;\n\n\t\tif (mode === 'single') {\n\t\t\tif (controlledValue === undefined) {\n\t\t\t\tsetInternalValue(option.value);\n\t\t\t}\n\t\t\tonChange?.(option.value, option);\n\t\t\tsetIsOpen(false);\n\t\t\tsetSearchValue('');\n\t\t} else {\n\t\t\tconst exists = selectedList.some((item) => item.value === option.value);\n\t\t\tlet nextSelected: SelectOption[];\n\t\t\tif (exists) {\n\t\t\t\tnextSelected = selectedList.filter((item) => item.value !== option.value);\n\t\t\t} else {\n\t\t\t\tnextSelected = [...selectedList, option];\n\t\t\t}\n\t\t\tconst nextValues = nextSelected.map((item) => item.value);\n\t\t\tif (controlledValue === undefined) {\n\t\t\t\tsetInternalValue(nextValues);\n\t\t\t}\n\t\t\tonChange?.(nextValues, nextSelected);\n\t\t\tsetSearchValue('');\n\t\t\tinputRef.current?.focus();\n\t\t}\n\t};\n\n\t// 移除选中 Tag\n\tconst handleRemoveTag = (e: React.MouseEvent, val: string | number) => {\n\t\te.stopPropagation();\n\t\tconst nextSelected = selectedList.filter((item) => item.value !== val);\n\t\tconst nextValues = nextSelected.map((item) => item.value);\n\t\tif (controlledValue === undefined) {\n\t\t\tsetInternalValue(nextValues);\n\t\t}\n\t\tonChange?.(nextValues, nextSelected);\n\t};\n\n\t// 清空全部\n\tconst handleClear = (e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tconst emptyVal = mode === 'multiple' ? [] : undefined;\n\t\tif (controlledValue === undefined) {\n\t\t\tsetInternalValue(emptyVal);\n\t\t}\n\t\tonChange?.(emptyVal, mode === 'multiple' ? [] : undefined);\n\t\tsetSearchValue('');\n\t};\n\n\tconst showClear = allowClear && !disabled && (selectedList.length > 0 || searchValue.length > 0);\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={`rpc_debounce_select ${className}`}\n\t\t\tstyle={style}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={`rpc_debounce_select_selector ${\n\t\t\t\t\tisOpen ? 'rpc_debounce_select_selector_focused' : ''\n\t\t\t\t} ${disabled ? 'rpc_debounce_select_selector_disabled' : ''}`}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tif (!disabled) {\n\t\t\t\t\t\tsetIsOpen(true);\n\t\t\t\t\t\tinputRef.current?.focus();\n\t\t\t\t\t\tif (options.length === 0 && !searchValue) {\n\t\t\t\t\t\t\tperformSearch('');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{/* 多选 Tags */}\n\t\t\t\t{mode === 'multiple' &&\n\t\t\t\t\tselectedList.map((item) => (\n\t\t\t\t\t\t<span key={item.value} className=\"rpc_debounce_select_tag\">\n\t\t\t\t\t\t\t<span>{item.label}</span>\n\t\t\t\t\t\t\t{!disabled && (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_debounce_select_tag_close\"\n\t\t\t\t\t\t\t\t\tonClick={(e) => handleRemoveTag(e, item.value)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t×\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t))}\n\n\t\t\t\t{/* 单选回显值或输入框 */}\n\t\t\t\t{mode === 'single' && selectedList.length > 0 && !searchValue && !isOpen && (\n\t\t\t\t\t<span style={{ color: '#262626', marginRight: 4 }}>{selectedList[0].label}</span>\n\t\t\t\t)}\n\n\t\t\t\t<input\n\t\t\t\t\tref={inputRef}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tclassName=\"rpc_debounce_select_input\"\n\t\t\t\t\tvalue={searchValue}\n\t\t\t\t\tonChange={handleInputChange}\n\t\t\t\t\tplaceholder={selectedList.length === 0 ? placeholder : ''}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t/>\n\n\t\t\t\t{/* 右侧动作按钮 */}\n\t\t\t\t<div className=\"rpc_debounce_select_actions\">\n\t\t\t\t\t{fetching && <LoadingOutlined />}\n\t\t\t\t\t{!fetching && showClear && (\n\t\t\t\t\t\t<CloseCircleFilled className=\"rpc_debounce_select_clear_btn\" onClick={handleClear} />\n\t\t\t\t\t)}\n\t\t\t\t\t{!fetching && !showClear && (\n\t\t\t\t\t\t<DownOutlined\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\ttransform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n\t\t\t\t\t\t\t\ttransition: 'transform 0.2s',\n\t\t\t\t\t\t\t\tfontSize: 10,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* 下拉浮层 */}\n\t\t\t{isOpen && !disabled && (\n\t\t\t\t<div className=\"rpc_debounce_select_dropdown\">\n\t\t\t\t\t{fetching && options.length === 0 ? (\n\t\t\t\t\t\t<div className=\"rpc_debounce_select_empty\">\n\t\t\t\t\t\t\t<LoadingOutlined style={{ marginRight: 8 }} />\n\t\t\t\t\t\t\t正在搜索中...\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : options.length > 0 ? (\n\t\t\t\t\t\toptions.map((opt) => {\n\t\t\t\t\t\t\tconst isSelected = selectedList.some((item) => item.value === opt.value);\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={opt.value}\n\t\t\t\t\t\t\t\t\tclassName={`rpc_debounce_select_item ${\n\t\t\t\t\t\t\t\t\t\tisSelected ? 'rpc_debounce_select_item_selected' : ''\n\t\t\t\t\t\t\t\t\t} ${opt.disabled ? 'rpc_debounce_select_item_disabled' : ''}`}\n\t\t\t\t\t\t\t\t\tonClick={() => handleSelectOption(opt)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span>{opt.label}</span>\n\t\t\t\t\t\t\t\t\t{isSelected && <CheckOutlined style={{ fontSize: 12 }} />}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"rpc_debounce_select_empty\">{notFoundContent}</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default DebounceSelect;\n","import React, {\n\tuseState,\n\tuseRef,\n\tuseEffect,\n\tuseCallback,\n\tuseImperativeHandle,\n\tforwardRef,\n\tReactNode,\n\tCSSProperties,\n} from 'react';\nimport './index.less';\n\nexport interface CountUpProps {\n\t/** 起始数值,默认为 0 */\n\tstart?: number;\n\t/** 目标数值 */\n\tend: number;\n\t/** 动画持续时间(秒),默认为 2 */\n\tduration?: number;\n\t/** 保留小数位数,默认为 0 */\n\tdecimals?: number;\n\t/** 小数点符号,默认为 '.' */\n\tdecimal?: string;\n\t/** 千分位分隔符,默认为 ',',若不显示可传空字符串 */\n\tseparator?: string;\n\t/** 前缀字符或节点(如 '¥'、'$') */\n\tprefix?: ReactNode;\n\t/** 后缀字符或节点(如 '%'、'件') */\n\tsuffix?: ReactNode;\n\t/** 是否启用缓动过渡,默认为 true */\n\tuseEasing?: boolean;\n\t/** 是否自动开始动画,默认为 true */\n\tautoStart?: boolean;\n\t/** 动画完成回调 */\n\tonEnd?: () => void;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nexport interface CountUpRef {\n\t/** 开始/重新播放动画 */\n\tstart: () => void;\n\t/** 重置回起始值 */\n\treset: () => void;\n\t/** 更新目标值并平滑过渡 */\n\tupdate: (newEnd: number) => void;\n}\n\n// 默认 EaseOutExpo 缓动函数\nfunction easeOutExpo(t: number, b: number, c: number, d: number): number {\n\treturn t === d ? b + c : c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024 / 1023 + b;\n}\n\n// 格式化数字字符串\nfunction formatNumber(\n\tnum: number,\n\tdecimals: number,\n\tdecimal: string,\n\tseparator: string,\n): string {\n\tconst fixed = Math.abs(num).toFixed(decimals);\n\tconst [intPart, decPart] = fixed.split('.');\n\n\tconst formattedInt = separator\n\t\t? intPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, separator)\n\t\t: intPart;\n\n\tconst sign = num < 0 ? '-' : '';\n\treturn decPart !== undefined ? `${sign}${formattedInt}${decimal}${decPart}` : `${sign}${formattedInt}`;\n}\n\nconst CountUp = forwardRef<CountUpRef, CountUpProps>(\n\t(\n\t\t{\n\t\t\tstart = 0,\n\t\t\tend,\n\t\t\tduration = 2,\n\t\t\tdecimals = 0,\n\t\t\tdecimal = '.',\n\t\t\tseparator = ',',\n\t\t\tprefix,\n\t\t\tsuffix,\n\t\t\tuseEasing = true,\n\t\t\tautoStart = true,\n\t\t\tonEnd,\n\t\t\tclassName = '',\n\t\t\tstyle,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [displayValue, setDisplayValue] = useState<number>(start);\n\t\tconst startValRef = useRef<number>(start);\n\t\tconst endValRef = useRef<number>(end);\n\t\tconst startTimeRef = useRef<number | null>(null);\n\t\tconst rafIdRef = useRef<number | null>(null);\n\n\t\tconst stopAnimation = () => {\n\t\t\tif (rafIdRef.current) {\n\t\t\t\tcancelAnimationFrame(rafIdRef.current);\n\t\t\t\trafIdRef.current = null;\n\t\t\t}\n\t\t};\n\n\t\tconst animate = useCallback(\n\t\t\t(timestamp: number) => {\n\t\t\t\tif (!startTimeRef.current) startTimeRef.current = timestamp;\n\t\t\t\tconst progress = timestamp - startTimeRef.current;\n\t\t\t\tconst totalDuration = Math.max(duration * 1000, 1);\n\n\t\t\t\tlet currentVal: number;\n\t\t\t\tif (progress >= totalDuration) {\n\t\t\t\t\tcurrentVal = endValRef.current;\n\t\t\t\t\tsetDisplayValue(currentVal);\n\t\t\t\t\tstopAnimation();\n\t\t\t\t\tonEnd?.();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (useEasing) {\n\t\t\t\t\tcurrentVal = easeOutExpo(\n\t\t\t\t\t\tprogress,\n\t\t\t\t\t\tstartValRef.current,\n\t\t\t\t\t\tendValRef.current - startValRef.current,\n\t\t\t\t\t\ttotalDuration,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tcurrentVal =\n\t\t\t\t\t\tstartValRef.current +\n\t\t\t\t\t\t(endValRef.current - startValRef.current) * (progress / totalDuration);\n\t\t\t\t}\n\n\t\t\t\tsetDisplayValue(currentVal);\n\t\t\t\trafIdRef.current = requestAnimationFrame(animate);\n\t\t\t},\n\t\t\t[duration, useEasing, onEnd],\n\t\t);\n\n\t\tconst triggerStart = useCallback(() => {\n\t\t\tstopAnimation();\n\t\t\tstartTimeRef.current = null;\n\t\t\trafIdRef.current = requestAnimationFrame(animate);\n\t\t}, [animate]);\n\n\t\tconst reset = useCallback(() => {\n\t\t\tstopAnimation();\n\t\t\tsetDisplayValue(start);\n\t\t}, [start]);\n\n\t\tconst update = useCallback(\n\t\t\t(newEnd: number) => {\n\t\t\t\tstopAnimation();\n\t\t\t\tstartValRef.current = displayValue;\n\t\t\t\tendValRef.current = newEnd;\n\t\t\t\tstartTimeRef.current = null;\n\t\t\t\trafIdRef.current = requestAnimationFrame(animate);\n\t\t\t},\n\t\t\t[displayValue, animate],\n\t\t);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tstart: triggerStart,\n\t\t\t\treset,\n\t\t\t\tupdate,\n\t\t\t}),\n\t\t\t[triggerStart, reset, update],\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tstartValRef.current = start;\n\t\t\tendValRef.current = end;\n\t\t\tif (autoStart) {\n\t\t\t\ttriggerStart();\n\t\t\t}\n\t\t\treturn () => stopAnimation();\n\t\t}, [start, end, autoStart, triggerStart]);\n\n\t\tconst formattedStr = formatNumber(displayValue, decimals, decimal, separator);\n\n\t\treturn (\n\t\t\t<span className={`rpc_count_up ${className}`} style={style}>\n\t\t\t\t{prefix && <span className=\"rpc_count_up_prefix\">{prefix}</span>}\n\t\t\t\t<span className=\"rpc_count_up_value\">{formattedStr}</span>\n\t\t\t\t{suffix && <span className=\"rpc_count_up_suffix\">{suffix}</span>}\n\t\t\t</span>\n\t\t);\n\t},\n);\n\nCountUp.displayName = 'CountUp';\n\nexport default CountUp;\n","import React, { useState, useRef, useEffect, ReactNode, CSSProperties } from 'react';\nimport ReactDOM from 'react-dom';\nimport { RightOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface ContextMenuItem {\n\t/** 菜单项唯一标识 */\n\tkey: string;\n\t/** 菜单项展示文本或节点 */\n\tlabel?: ReactNode;\n\t/** 菜单项前置图标 */\n\ticon?: ReactNode;\n\t/** 是否为分割线 */\n\ttype?: 'divider';\n\t/** 是否禁用 */\n\tdisabled?: boolean;\n\t/** 是否为警示/危险操作(红色显示) */\n\tdanger?: boolean;\n\t/** 快捷键提示(如 '⌘ C' / 'Ctrl+C') */\n\tshortcut?: string;\n\t/** 二级子菜单项列表 */\n\tchildren?: ContextMenuItem[];\n\t/** 点击菜单项回调 */\n\tonClick?: (item: ContextMenuItem, e: React.MouseEvent) => void;\n}\n\nexport interface ContextMenuProps {\n\t/** 菜单项列表配置 */\n\titems: ContextMenuItem[];\n\t/** 被右键激活的目标子组件/容器 */\n\tchildren: ReactNode;\n\t/** 是否禁用右键上下文菜单 */\n\tdisabled?: boolean;\n\t/** 菜单显隐状态改变回调 */\n\tonOpenChange?: (open: boolean) => void;\n\t/** 自定义菜单类名 */\n\tmenuClassName?: string;\n\t/** 自定义菜单样式 */\n\tmenuStyle?: CSSProperties;\n\t/** 自定义外层包裹类名 */\n\tclassName?: string;\n\t/** 自定义外层包裹样式 */\n\tstyle?: CSSProperties;\n}\n\ninterface Position {\n\tx: number;\n\ty: number;\n}\n\nconst ContextMenu: React.FC<ContextMenuProps> = ({\n\titems,\n\tchildren,\n\tdisabled = false,\n\tonOpenChange,\n\tmenuClassName = '',\n\tmenuStyle,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [visible, setVisible] = useState<boolean>(false);\n\tconst [position, setPosition] = useState<Position>({ x: 0, y: 0 });\n\tconst menuRef = useRef<HTMLDivElement>(null);\n\n\tconst handleContextMenu = (e: React.MouseEvent) => {\n\t\tif (disabled) return;\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tconst mouseX = e.clientX;\n\t\tconst mouseY = e.clientY;\n\n\t\t// 初始设置位置\n\t\tsetPosition({ x: mouseX, y: mouseY });\n\t\tsetVisible(true);\n\t\tonOpenChange?.(true);\n\t};\n\n\t// 菜单渲染后自适应调整边界,防止溢出视口\n\tuseEffect(() => {\n\t\tif (!visible || !menuRef.current) return;\n\t\tconst menuEl = menuRef.current;\n\t\tconst rect = menuEl.getBoundingClientRect();\n\n\t\tlet adjustedX = position.x;\n\t\tlet adjustedY = position.y;\n\n\t\t// 水平防溢出\n\t\tif (position.x + rect.width > window.innerWidth) {\n\t\t\tadjustedX = window.innerWidth - rect.width - 8;\n\t\t}\n\n\t\t// 垂直防溢出\n\t\tif (position.y + rect.height > window.innerHeight) {\n\t\t\tadjustedY = window.innerHeight - rect.height - 8;\n\t\t}\n\n\t\tif (adjustedX !== position.x || adjustedY !== position.y) {\n\t\t\tsetPosition({ x: Math.max(8, adjustedX), y: Math.max(8, adjustedY) });\n\t\t}\n\t}, [visible]);\n\n\t// 点击外部、按 ESC、页面滚动时关闭菜单\n\tuseEffect(() => {\n\t\tif (!visible) return;\n\n\t\tconst handleClose = (e: MouseEvent | KeyboardEvent) => {\n\t\t\tif (e instanceof KeyboardEvent && e.key !== 'Escape') return;\n\t\t\tsetVisible(false);\n\t\t\tonOpenChange?.(false);\n\t\t};\n\n\t\tconst handleScroll = () => {\n\t\t\tsetVisible(false);\n\t\t\tonOpenChange?.(false);\n\t\t};\n\n\t\tdocument.addEventListener('mousedown', handleClose);\n\t\tdocument.addEventListener('keydown', handleClose);\n\t\twindow.addEventListener('scroll', handleScroll, true);\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('mousedown', handleClose);\n\t\t\tdocument.removeEventListener('keydown', handleClose);\n\t\t\twindow.removeEventListener('scroll', handleScroll, true);\n\t\t};\n\t}, [visible, onOpenChange]);\n\n\t// 渲染菜单项(递归支持二级子菜单)\n\tconst renderMenuItem = (item: ContextMenuItem) => {\n\t\tif (item.type === 'divider') {\n\t\t\treturn <div key={item.key} className=\"rpc_context_menu_divider\" />;\n\t\t}\n\n\t\tconst hasSub = item.children && item.children.length > 0;\n\n\t\tconst handleItemClick = (e: React.MouseEvent) => {\n\t\t\tif (item.disabled || hasSub) return;\n\t\t\te.stopPropagation();\n\t\t\titem.onClick?.(item, e);\n\t\t\tsetVisible(false);\n\t\t\tonOpenChange?.(false);\n\t\t};\n\n\t\tconst itemClassNames = [\n\t\t\t'rpc_context_menu_item',\n\t\t\titem.danger ? 'rpc_context_menu_item_danger' : '',\n\t\t\titem.disabled ? 'rpc_context_menu_item_disabled' : '',\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\treturn (\n\t\t\t<div key={item.key} className={itemClassNames} onClick={handleItemClick}>\n\t\t\t\t{item.icon && <span className=\"rpc_context_menu_item_icon\">{item.icon}</span>}\n\t\t\t\t<span className=\"rpc_context_menu_item_label\">{item.label}</span>\n\t\t\t\t{item.shortcut && <span className=\"rpc_context_menu_item_shortcut\">{item.shortcut}</span>}\n\t\t\t\t{hasSub && <RightOutlined className=\"rpc_context_menu_item_arrow\" />}\n\n\t\t\t\t{/* 二级子菜单 */}\n\t\t\t\t{hasSub && (\n\t\t\t\t\t<div className=\"rpc_context_menu_submenu\">\n\t\t\t\t\t\t{item.children!.map((sub) => renderMenuItem(sub))}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst menuContent = visible && typeof document !== 'undefined' ? (\n\t\tReactDOM.createPortal(\n\t\t\t<div\n\t\t\t\tref={menuRef}\n\t\t\t\tclassName={`rpc_context_menu_panel ${menuClassName}`}\n\t\t\t\tstyle={{\n\t\t\t\t\tleft: `${position.x}px`,\n\t\t\t\t\ttop: `${position.y}px`,\n\t\t\t\t\t...menuStyle,\n\t\t\t\t}}\n\t\t\t\tonContextMenu={(e) => e.preventDefault()}\n\t\t\t>\n\t\t\t\t{items.map((item) => renderMenuItem(item))}\n\t\t\t</div>,\n\t\t\tdocument.body,\n\t\t)\n\t) : null;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`rpc_context_menu ${className}`}\n\t\t\tstyle={style}\n\t\t\tonContextMenu={handleContextMenu}\n\t\t>\n\t\t\t{children}\n\t\t\t{menuContent}\n\t\t</div>\n\t);\n};\n\nexport default ContextMenu;\n","import React, {\n\tuseState,\n\tuseRef,\n\tuseEffect,\n\tuseCallback,\n\tuseImperativeHandle,\n\tforwardRef,\n\tReactNode,\n\tCSSProperties,\n} from 'react';\nimport { FullscreenOutlined, FullscreenExitOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface FullscreenRef {\n\t/** 进入全屏 */\n\tenter: () => Promise<void>;\n\t/** 退出全屏 */\n\texit: () => Promise<void>;\n\t/** 切换全屏状态 */\n\ttoggle: () => Promise<void>;\n\t/** 当前是否处于全屏状态 */\n\tisFullscreen: boolean;\n\t/** 当前目标容器 DOM 元素 */\n\tgetElement: () => HTMLElement | null;\n}\n\nexport type FullscreenMode = 'browser' | 'web';\nexport type FullscreenButtonPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n\nexport interface FullscreenRenderProps {\n\tisFullscreen: boolean;\n\tenter: () => Promise<void>;\n\texit: () => Promise<void>;\n\ttoggle: () => Promise<void>;\n}\n\nexport interface FullscreenProps {\n\t/** 子元素或 Render Props 函数 */\n\tchildren?: ReactNode | ((props: FullscreenRenderProps) => ReactNode);\n\t/** 全屏模式:'browser' 原生浏览器全屏,'web' 网页内最大化置顶 */\n\tmode?: FullscreenMode;\n\t/** 自定义目标全屏元素(不传时默认为当前包裹的容器元素,传 document.documentElement 时为整页全屏) */\n\ttarget?: HTMLElement | (() => HTMLElement | null) | null;\n\t/** 受控全屏状态 */\n\tfullscreen?: boolean;\n\t/** 默认全屏状态 */\n\tdefaultFullscreen?: boolean;\n\t/** 全屏状态变化回调 */\n\tonChange?: (isFullscreen: boolean) => void;\n\t/** 是否在容器角落展示快速全屏切换悬浮按钮,默认 false */\n\tshowButton?: boolean;\n\t/** 悬浮按钮对齐位置,默认 'top-right' */\n\tbuttonPosition?: FullscreenButtonPosition;\n\t/** 悬浮按钮的自定义 Tooltip 提示或图标 */\n\tenterIcon?: ReactNode;\n\texitIcon?: ReactNode;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst Fullscreen = forwardRef<FullscreenRef, FullscreenProps>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\tmode = 'browser',\n\t\t\ttarget,\n\t\t\tfullscreen: controlledFullscreen,\n\t\t\tdefaultFullscreen = false,\n\t\t\tonChange,\n\t\t\tshowButton = false,\n\t\t\tbuttonPosition = 'top-right',\n\t\t\tenterIcon,\n\t\t\texitIcon,\n\t\t\tclassName = '',\n\t\t\tstyle,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst containerRef = useRef<HTMLDivElement>(null);\n\t\tconst [internalFullscreen, setInternalFullscreen] = useState<boolean>(defaultFullscreen);\n\t\tconst isControlled = controlledFullscreen !== undefined;\n\t\tconst isFullscreen = isControlled ? controlledFullscreen : internalFullscreen;\n\n\t\tconst getTargetElement = useCallback((): HTMLElement | null => {\n\t\t\tif (typeof target === 'function') {\n\t\t\t\treturn target();\n\t\t\t}\n\t\t\tif (target) {\n\t\t\t\treturn target;\n\t\t\t}\n\t\t\treturn containerRef.current;\n\t\t}, [target]);\n\n\t\t// 进入全屏\n\t\tconst enter = useCallback(async () => {\n\t\t\tconst el = getTargetElement();\n\t\t\tif (!el) return;\n\n\t\t\tif (mode === 'browser') {\n\t\t\t\tif (el.requestFullscreen) {\n\t\t\t\t\tawait el.requestFullscreen();\n\t\t\t\t} else if ((el as any).webkitRequestFullscreen) {\n\t\t\t\t\tawait (el as any).webkitRequestFullscreen();\n\t\t\t\t} else if ((el as any).msRequestFullscreen) {\n\t\t\t\t\tawait (el as any).msRequestFullscreen();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!isControlled) {\n\t\t\t\t\tsetInternalFullscreen(true);\n\t\t\t\t}\n\t\t\t\tonChange?.(true);\n\t\t\t}\n\t\t}, [mode, getTargetElement, isControlled, onChange]);\n\n\t\t// 退出全屏\n\t\tconst exit = useCallback(async () => {\n\t\t\tif (mode === 'browser') {\n\t\t\t\tif (document.fullscreenElement || (document as any).webkitFullscreenElement) {\n\t\t\t\t\tif (document.exitFullscreen) {\n\t\t\t\t\t\tawait document.exitFullscreen();\n\t\t\t\t\t} else if ((document as any).webkitExitFullscreen) {\n\t\t\t\t\t\tawait (document as any).webkitExitFullscreen();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!isControlled) {\n\t\t\t\t\tsetInternalFullscreen(false);\n\t\t\t\t}\n\t\t\t\tonChange?.(false);\n\t\t\t}\n\t\t}, [mode, isControlled, onChange]);\n\n\t\t// 切换全屏\n\t\tconst toggle = useCallback(async () => {\n\t\t\tif (isFullscreen) {\n\t\t\t\tawait exit();\n\t\t\t} else {\n\t\t\t\tawait enter();\n\t\t\t}\n\t\t}, [isFullscreen, enter, exit]);\n\n\t\t// 暴露 Imperative Ref\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tenter,\n\t\t\t\texit,\n\t\t\t\ttoggle,\n\t\t\t\tisFullscreen,\n\t\t\t\tgetElement: getTargetElement,\n\t\t\t}),\n\t\t\t[enter, exit, toggle, isFullscreen, getTargetElement],\n\t\t);\n\n\t\t// 监听浏览器原生全屏事件\n\t\tuseEffect(() => {\n\t\t\tif (mode !== 'browser') return;\n\n\t\t\tconst handleFullscreenChange = () => {\n\t\t\t\tconst currentFsEl =\n\t\t\t\t\tdocument.fullscreenElement ||\n\t\t\t\t\t(document as any).webkitFullscreenElement ||\n\t\t\t\t\t(document as any).mozFullScreenElement ||\n\t\t\t\t\t(document as any).msFullscreenElement;\n\n\t\t\t\tconst targetEl = getTargetElement();\n\t\t\t\tconst isActive = currentFsEl !== null && (currentFsEl === targetEl || targetEl === document.documentElement);\n\n\t\t\t\tif (!isControlled) {\n\t\t\t\t\tsetInternalFullscreen(isActive);\n\t\t\t\t}\n\t\t\t\tonChange?.(isActive);\n\t\t\t};\n\n\t\t\tdocument.addEventListener('fullscreenchange', handleFullscreenChange);\n\t\t\tdocument.addEventListener('webkitfullscreenchange', handleFullscreenChange);\n\t\t\tdocument.addEventListener('mozfullscreenchange', handleFullscreenChange);\n\t\t\tdocument.addEventListener('MSFullscreenChange', handleFullscreenChange);\n\n\t\t\treturn () => {\n\t\t\t\tdocument.removeEventListener('fullscreenchange', handleFullscreenChange);\n\t\t\t\tdocument.removeEventListener('webkitfullscreenchange', handleFullscreenChange);\n\t\t\t\tdocument.removeEventListener('mozfullscreenchange', handleFullscreenChange);\n\t\t\t\tdocument.removeEventListener('MSFullscreenChange', handleFullscreenChange);\n\t\t\t};\n\t\t}, [mode, getTargetElement, isControlled, onChange]);\n\n\t\t// Web 模拟全屏模式下的 ESC 监听\n\t\tuseEffect(() => {\n\t\t\tif (mode !== 'web' || !isFullscreen) return;\n\n\t\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\t\tif (e.key === 'Escape') {\n\t\t\t\t\texit();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\twindow.addEventListener('keydown', handleKeyDown);\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener('keydown', handleKeyDown);\n\t\t\t};\n\t\t}, [mode, isFullscreen, exit]);\n\n\t\tconst positionClass = `rpc_fullscreen_container_action_btn_${buttonPosition.replace('-', '_')}`;\n\t\tconst isWebFsActive = mode === 'web' && isFullscreen;\n\n\t\tconst currentEnterIcon = enterIcon ?? <FullscreenOutlined />;\n\t\tconst currentExitIcon = exitIcon ?? <FullscreenExitOutlined />;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={containerRef}\n\t\t\t\tclassName={`rpc_fullscreen_container ${\n\t\t\t\t\tisFullscreen ? 'rpc_fullscreen_container_fullscreen' : ''\n\t\t\t\t} ${isWebFsActive ? 'rpc_fullscreen_container_web_fullscreen' : ''} ${className}`}\n\t\t\t\tstyle={{\n\t\t\t\t\t...(isFullscreen ? { backgroundColor: '#ffffff' } : {}),\n\t\t\t\t\t...style,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{/* 右上角/指定角落的快捷切换按钮 */}\n\t\t\t\t{showButton && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={`rpc_fullscreen_container_action_btn ${positionClass}`}\n\t\t\t\t\t\tonClick={toggle}\n\t\t\t\t\t\ttitle={isFullscreen ? '退出全屏 (ESC)' : '全屏显示'}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isFullscreen ? currentExitIcon : currentEnterIcon}\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\n\t\t\t\t{typeof children === 'function'\n\t\t\t\t\t? children({\n\t\t\t\t\t\t\tisFullscreen,\n\t\t\t\t\t\t\tenter,\n\t\t\t\t\t\t\texit,\n\t\t\t\t\t\t\ttoggle,\n\t\t\t\t\t\t})\n\t\t\t\t\t: children}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nFullscreen.displayName = 'Fullscreen';\n\nexport default Fullscreen;\n","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\n\t\t\t\tclassName={`rpc_image_cropper ${className}`}\n\t\t\t\tstyle={{ ...style }}\n\t\t\t>\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","import React, { useState, useEffect, useRef, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\n/* =========================================================================\n * 1. ScrollTracker 组件\n * ========================================================================= */\n\nexport interface ScrollTrackerProps {\n\t/** 进度条吸附位置:'top' 顶部,'bottom' 底部,默认为 'top' */\n\tposition?: 'top' | 'bottom';\n\t/** 进度条高度(像素),默认为 3 */\n\theight?: number;\n\t/** 进度条颜色或渐变色配置(如 '#1677ff' 或 ['#1677ff', '#52c41a']) */\n\tcolor?: string | string[];\n\t/** 是否显示右上角/角落的百分比数字浮签,默认为 false */\n\tshowPercentage?: boolean;\n\t/** 监听滚动的目标元素或 ref(不传时监听整个 window 视口) */\n\ttarget?: HTMLElement | (() => HTMLElement | null) | null;\n\t/** 进度改变回调 (0 ~ 100) */\n\tonChange?: (percent: number) => void;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nexport const ScrollTracker: React.FC<ScrollTrackerProps> = ({\n\tposition = 'top',\n\theight = 3,\n\tcolor = '#1677ff',\n\tshowPercentage = false,\n\ttarget,\n\tonChange,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [percent, setPercent] = useState<number>(0);\n\n\tuseEffect(() => {\n\t\tconst calculateScroll = () => {\n\t\t\tlet scrollTop = 0;\n\t\t\tlet scrollHeight = 0;\n\t\t\tlet clientHeight = 0;\n\n\t\t\tconst targetEl = typeof target === 'function' ? target() : target;\n\n\t\t\tif (targetEl) {\n\t\t\t\tscrollTop = targetEl.scrollTop;\n\t\t\t\tscrollHeight = targetEl.scrollHeight;\n\t\t\t\tclientHeight = targetEl.clientHeight;\n\t\t\t} else {\n\t\t\t\tscrollTop = window.pageYOffset || document.documentElement.scrollTop;\n\t\t\t\tscrollHeight = document.documentElement.scrollHeight;\n\t\t\t\tclientHeight = document.documentElement.clientHeight;\n\t\t\t}\n\n\t\t\tconst total = scrollHeight - clientHeight;\n\t\t\tconst currentPercent = total > 0 ? Math.min(100, Math.max(0, (scrollTop / total) * 100)) : 0;\n\t\t\tconst rounded = Math.round(currentPercent);\n\n\t\t\tsetPercent(rounded);\n\t\t\tonChange?.(rounded);\n\t\t};\n\n\t\tcalculateScroll();\n\n\t\tconst targetEl = typeof target === 'function' ? target() : target;\n\t\tconst scrollSource = targetEl || window;\n\n\t\tscrollSource.addEventListener('scroll', calculateScroll, { passive: true });\n\t\twindow.addEventListener('resize', calculateScroll);\n\n\t\treturn () => {\n\t\t\tscrollSource.removeEventListener('scroll', calculateScroll);\n\t\t\twindow.removeEventListener('resize', calculateScroll);\n\t\t};\n\t}, [target, onChange]);\n\n\t// 计算背景渐变色\n\tconst backgroundStyle = Array.isArray(color)\n\t\t? `linear-gradient(90deg, ${color.join(', ')})`\n\t\t: color;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`rpc_scroll_tracker rpc_scroll_tracker_${position} ${className}`}\n\t\t\tstyle={{ height, ...style }}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName=\"rpc_scroll_tracker_bar\"\n\t\t\t\tstyle={{\n\t\t\t\t\twidth: `${percent}%`,\n\t\t\t\t\tbackground: backgroundStyle,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{showPercentage && (\n\t\t\t\t<span className=\"rpc_scroll_tracker_percentage\">{percent}%</span>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\n/* =========================================================================\n * 2. StickyHeader 组件\n * ========================================================================= */\n\nexport interface StickyHeaderProps {\n\t/** 子内容 */\n\tchildren: ReactNode | ((isSticky: boolean) => ReactNode);\n\t/** 吸顶距离顶部偏移量(像素),默认为 0 */\n\toffsetTop?: number;\n\t/** 吸顶状态改变回调 */\n\tonStickyChange?: (isSticky: boolean) => void;\n\t/** 监听滚动的目标容器(默认为 window) */\n\ttarget?: HTMLElement | (() => HTMLElement | null) | null;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nexport const StickyHeader: React.FC<StickyHeaderProps> = ({\n\tchildren,\n\toffsetTop = 0,\n\tonStickyChange,\n\ttarget,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [isSticky, setIsSticky] = useState<boolean>(false);\n\tconst headerRef = useRef<HTMLDivElement>(null);\n\tconst sentinelRef = useRef<HTMLDivElement>(null);\n\n\tuseEffect(() => {\n\t\tconst sentinel = sentinelRef.current;\n\t\tconst targetEl = typeof target === 'function' ? target() : target;\n\n\t\tif (!sentinel) return;\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t([entry]) => {\n\t\t\t\t// 当占位元素滚出视口顶部时触发吸顶\n\t\t\t\tconst sticky = !entry.isIntersecting && entry.boundingClientRect.top <= offsetTop;\n\t\t\t\tsetIsSticky(sticky);\n\t\t\t\tonStickyChange?.(sticky);\n\t\t\t},\n\t\t\t{\n\t\t\t\troot: targetEl || null,\n\t\t\t\tthreshold: [0],\n\t\t\t\trootMargin: `-${offsetTop}px 0px 0px 0px`,\n\t\t\t},\n\t\t);\n\n\t\tobserver.observe(sentinel);\n\t\treturn () => observer.disconnect();\n\t}, [offsetTop, target, onStickyChange]);\n\n\treturn (\n\t\t<>\n\t\t\t{/* 探测哨兵元素 */}\n\t\t\t<div ref={sentinelRef} style={{ height: 1, marginBottom: -1 }} />\n\t\t\t<div\n\t\t\t\tref={headerRef}\n\t\t\t\tclassName={`rpc_sticky_header ${isSticky ? 'rpc_sticky_header_stuck' : ''} ${className}`}\n\t\t\t\tstyle={{\n\t\t\t\t\ttop: `${offsetTop}px`,\n\t\t\t\t\t...style,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{typeof children === 'function' ? children(isSticky) : children}\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nexport default ScrollTracker;\n","import React, { useState, useEffect, ReactNode, CSSProperties } from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n\tCloseOutlined,\n\tRotateRightOutlined,\n\tZoomInOutlined,\n\tZoomOutOutlined,\n\tDownloadOutlined,\n\tFilePdfOutlined,\n\tFileImageOutlined,\n\tFileTextOutlined,\n\tFileOutlined,\n} from '../src/icons';\nimport './index.less';\n\nexport type FileType = 'image' | 'video' | 'audio' | 'pdf' | 'text' | 'unknown';\n\nexport interface FileItem {\n\t/** 文件访问 URL 或 Base64 */\n\turl: string;\n\t/** 文件名称 */\n\tname?: string;\n\t/** 文件类型(如不传则根据文件名后缀或 URL 自动推断) */\n\tfileType?: FileType;\n\t/** 文件大小描述(如 '2.4 MB') */\n\tsize?: string;\n\t/** 纯文本内容(针对直接传入 text 字符串预览) */\n\ttextContent?: string;\n}\n\nexport interface FilePreviewerProps {\n\t/** 是否打开预览弹窗 */\n\topen: boolean;\n\t/** 当前预览的文件对象或 URL 字符串 */\n\tfile?: FileItem | string | null;\n\t/** 关闭弹窗回调 */\n\tonCancel?: () => void;\n\t/** 自定义下载行为(不传时使用默认浏览器下载) */\n\tonDownload?: (file: FileItem) => void;\n\t/** 自定义标题栏右侧额外操作按钮 */\n\textraActions?: ReactNode;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\n// 根据文件名或 URL 后缀推断文件类型\nexport function inferFileType(urlOrName: string): FileType {\n\tif (!urlOrName) return 'unknown';\n\tconst clean = urlOrName.split('?')[0].split('#')[0].toLowerCase();\n\tconst ext = clean.substring(clean.lastIndexOf('.') + 1);\n\n\tif (['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'bmp', 'ico'].includes(ext)) {\n\t\treturn 'image';\n\t}\n\tif (['mp4', 'webm', 'ogg', 'mov', 'mkv'].includes(ext)) {\n\t\treturn 'video';\n\t}\n\tif (['mp3', 'wav', 'aac', 'flac', 'm4a'].includes(ext)) {\n\t\treturn 'audio';\n\t}\n\tif (['pdf'].includes(ext)) {\n\t\treturn 'pdf';\n\t}\n\tif (['txt', 'json', 'js', 'ts', 'jsx', 'tsx', 'html', 'css', 'less', 'md', 'log', 'xml'].includes(ext)) {\n\t\treturn 'text';\n\t}\n\treturn 'unknown';\n}\n\nconst FilePreviewer: React.FC<FilePreviewerProps> & {\n\tpreview: (options: FileItem) => { close: () => void };\n} = ({\n\topen,\n\tfile,\n\tonCancel,\n\tonDownload,\n\textraActions,\n\tclassName = '',\n\tstyle,\n}) => {\n\t// 图片控制状态\n\tconst [imageScale, setImageScale] = useState<number>(1);\n\tconst [imageRotate, setImageRotate] = useState<number>(0);\n\n\tuseEffect(() => {\n\t\tif (open) {\n\t\t\tsetImageScale(1);\n\t\t\tsetImageRotate(0);\n\t\t}\n\t}, [open, file]);\n\n\tif (!open || !file) return null;\n\n\tconst currentFile: FileItem =\n\t\ttypeof file === 'string'\n\t\t\t? { url: file, name: file.substring(file.lastIndexOf('/') + 1) }\n\t\t\t: file;\n\n\tconst type: FileType = currentFile.fileType || inferFileType(currentFile.name || currentFile.url);\n\n\t// 默认下载处理\n\tconst handleDefaultDownload = () => {\n\t\tif (onDownload) {\n\t\t\tonDownload(currentFile);\n\t\t\treturn;\n\t\t}\n\t\tconst a = document.createElement('a');\n\t\ta.href = currentFile.url;\n\t\ta.download = currentFile.name || 'download';\n\t\ta.target = '_blank';\n\t\tdocument.body.appendChild(a);\n\t\ta.click();\n\t\ta.remove();\n\t};\n\n\t// 渲染文件图标\n\tconst renderFileIcon = () => {\n\t\tswitch (type) {\n\t\t\tcase 'image':\n\t\t\t\treturn <FileImageOutlined style={{ color: '#1677ff' }} />;\n\t\t\tcase 'pdf':\n\t\t\t\treturn <FilePdfOutlined style={{ color: '#ff4d4f' }} />;\n\t\t\tcase 'text':\n\t\t\t\treturn <FileTextOutlined style={{ color: '#52c41a' }} />;\n\t\t\tdefault:\n\t\t\t\treturn <FileOutlined style={{ color: '#8c8c8c' }} />;\n\t\t}\n\t};\n\n\t// 渲染主体内容\n\tconst renderBodyContent = () => {\n\t\tswitch (type) {\n\t\t\tcase 'image':\n\t\t\t\treturn (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={currentFile.url}\n\t\t\t\t\t\talt={currentFile.name || 'Preview'}\n\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_image\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttransform: `scale(${imageScale}) rotate(${imageRotate}deg)`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\tcase 'video':\n\t\t\t\treturn (\n\t\t\t\t\t<video\n\t\t\t\t\t\tsrc={currentFile.url}\n\t\t\t\t\t\tcontrols\n\t\t\t\t\t\tautoPlay\n\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_media\"\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\tcase 'audio':\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_audio_wrap\">\n\t\t\t\t\t\t<div style={{ fontSize: 48 }}>🎵</div>\n\t\t\t\t\t\t<div style={{ fontSize: 16, fontWeight: 600 }}>{currentFile.name || '音频播放'}</div>\n\t\t\t\t\t\t<audio src={currentFile.url} controls autoPlay style={{ width: 320 }} />\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\tcase 'pdf':\n\t\t\t\treturn (\n\t\t\t\t\t<iframe\n\t\t\t\t\t\tsrc={currentFile.url}\n\t\t\t\t\t\ttitle={currentFile.name || 'PDF Preview'}\n\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_iframe\"\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\tcase 'text':\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_text_wrap\">\n\t\t\t\t\t\t{currentFile.textContent || '正在加载文件内容...'}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_fallback_card\">\n\t\t\t\t\t\t<div style={{ fontSize: 48, color: '#8c8c8c' }}>📦</div>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<h4 style={{ margin: '0 0 6px 0', fontSize: 16, color: '#1f1f1f' }}>\n\t\t\t\t\t\t\t\t{currentFile.name || '未知文件'}\n\t\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t\t<p style={{ margin: 0, color: '#8c8c8c', fontSize: 13 }}>\n\t\t\t\t\t\t\t\t该格式暂不支持直接在线预览,请下载后在本地查看。{currentFile.size ? `(${currentFile.size})` : ''}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={handleDefaultDownload}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tdisplay: 'inline-flex',\n\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\tgap: 6,\n\t\t\t\t\t\t\t\tpadding: '8px 20px',\n\t\t\t\t\t\t\t\tbackground: '#1677ff',\n\t\t\t\t\t\t\t\tcolor: '#fff',\n\t\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\t\tborderRadius: 6,\n\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\tfontSize: 14,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DownloadOutlined /> 立即下载\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t}\n\t};\n\n\treturn ReactDOM.createPortal(\n\t\t<div className={`rpc_file_previewer_modal ${className}`} onClick={onCancel} style={style}>\n\t\t\t<div className=\"rpc_file_previewer_modal_card\" onClick={(e) => e.stopPropagation()}>\n\t\t\t\t{/* 顶部标题栏与工具栏 */}\n\t\t\t\t<div className=\"rpc_file_previewer_modal_header\">\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_title\">\n\t\t\t\t\t\t{renderFileIcon()}\n\t\t\t\t\t\t<span>{currentFile.name || '文件预览'}</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_actions\">\n\t\t\t\t\t\t{type === 'image' && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\t\t\tonClick={() => setImageScale((s) => Math.min(s + 0.2, 3))}\n\t\t\t\t\t\t\t\t\ttitle=\"放大\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ZoomInOutlined />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\t\t\tonClick={() => setImageScale((s) => Math.max(s - 0.2, 0.4))}\n\t\t\t\t\t\t\t\t\ttitle=\"缩小\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ZoomOutOutlined />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\t\t\tonClick={() => setImageRotate((r) => (r + 90) % 360)}\n\t\t\t\t\t\t\t\t\ttitle=\"顺时针旋转90°\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<RotateRightOutlined />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\tonClick={handleDefaultDownload}\n\t\t\t\t\t\t\ttitle=\"下载文件\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DownloadOutlined />\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t{extraActions}\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\tonClick={onCancel}\n\t\t\t\t\t\t\ttitle=\"关闭预览 (ESC)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CloseOutlined />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* 预览主体内容区域 */}\n\t\t\t\t<div className=\"rpc_file_previewer_modal_body\">{renderBodyContent()}</div>\n\t\t\t</div>\n\t\t</div>,\n\t\tdocument.body,\n\t);\n};\n\n// 命令式调用方法\nFilePreviewer.preview = (options: FileItem) => {\n\tconst div = document.createElement('div');\n\tdocument.body.appendChild(div);\n\n\tconst close = () => {\n\t\tReactDOM.render(<></>, div);\n\t\tdiv.remove();\n\t};\n\n\tReactDOM.render(\n\t\t<FilePreviewer open={true} file={options} onCancel={close} />,\n\t\tdiv,\n\t);\n\n\treturn { close };\n};\n\nexport default FilePreviewer;\n","import React, { useState, useRef, useEffect, ReactNode, CSSProperties } from 'react';\nimport { CloseOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface TagInputProps {\n\t/** 标签列表(受控) */\n\tvalue?: string[];\n\t/** 默认标签列表 */\n\tdefaultValue?: string[];\n\t/** 标签列表改变回调 */\n\tonChange?: (tags: string[]) => void;\n\t/** 最大允许输入的标签数量 */\n\tmaxCount?: number;\n\t/** 单个标签的最大字符长度 */\n\tmaxLength?: number;\n\t/** 是否允许重复标签,默认为 false */\n\tallowDuplicates?: boolean;\n\t/** 触发添加标签的按键/分隔符,默认为 ['Enter', ',', ','] */\n\tseparators?: string[];\n\t/** 标签自定义校验函数(返回 true 通过,返回 false 或 string 报错) */\n\tvalidate?: (tag: string) => boolean | string;\n\t/** 占位提示文案 */\n\tplaceholder?: string;\n\t/** 是否禁用 */\n\tdisabled?: boolean;\n\t/** 自定义渲染单个 Tag */\n\trenderTag?: (tag: string, index: number, onClose: () => void) => ReactNode;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst TagInput: React.FC<TagInputProps> = ({\n\tvalue: controlledValue,\n\tdefaultValue = [],\n\tonChange,\n\tmaxCount,\n\tmaxLength,\n\tallowDuplicates = false,\n\tseparators = ['Enter', ',', ','],\n\tvalidate,\n\tplaceholder = '输入标签后按回车...',\n\tdisabled = false,\n\trenderTag,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalTags, setInternalTags] = useState<string[]>(defaultValue);\n\tconst tags = controlledValue !== undefined ? controlledValue : internalTags;\n\n\tconst [inputValue, setInputValue] = useState<string>('');\n\tconst [isFocused, setIsFocused] = useState<boolean>(false);\n\tconst [errorMessage, setErrorMessage] = useState<string>('');\n\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\n\t// 添加 Tag\n\tconst addTag = (text: string) => {\n\t\tconst trimmed = text.trim();\n\t\tif (!trimmed) return;\n\n\t\tif (maxCount !== undefined && tags.length >= maxCount) {\n\t\t\tsetErrorMessage(`最多只能添加 ${maxCount} 个标签`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!allowDuplicates && tags.includes(trimmed)) {\n\t\t\tsetErrorMessage(`标签 \"${trimmed}\" 已存在`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (validate) {\n\t\t\tconst res = validate(trimmed);\n\t\t\tif (typeof res === 'string') {\n\t\t\t\tsetErrorMessage(res);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (res === false) {\n\t\t\t\tsetErrorMessage(`标签 \"${trimmed}\" 格式不合法`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst nextTags = [...tags, trimmed];\n\t\tif (controlledValue === undefined) {\n\t\t\tsetInternalTags(nextTags);\n\t\t}\n\t\tonChange?.(nextTags);\n\t\tsetInputValue('');\n\t\tsetErrorMessage('');\n\t};\n\n\t// 删除 Tag\n\tconst removeTag = (index: number) => {\n\t\tif (disabled) return;\n\t\tconst nextTags = tags.filter((_, i) => i !== index);\n\t\tif (controlledValue === undefined) {\n\t\t\tsetInternalTags(nextTags);\n\t\t}\n\t\tonChange?.(nextTags);\n\t\tsetErrorMessage('');\n\t};\n\n\t// 键盘事件处理\n\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n\t\tif (disabled) return;\n\n\t\t// 分隔符触发添加\n\t\tif (separators.includes(e.key)) {\n\t\t\te.preventDefault();\n\t\t\taddTag(inputValue);\n\t\t\treturn;\n\t\t}\n\n\t\t// 退格键删除最后一个 Tag\n\t\tif (e.key === 'Backspace' && !inputValue && tags.length > 0) {\n\t\t\te.preventDefault();\n\t\t\tremoveTag(tags.length - 1);\n\t\t}\n\t};\n\n\t// 失去焦点时添加\n\tconst handleBlur = () => {\n\t\tsetIsFocused(false);\n\t\tif (inputValue.trim()) {\n\t\t\taddTag(inputValue);\n\t\t}\n\t};\n\n\t// 双击编辑 Tag\n\tconst handleDoubleClick = (index: number, tag: string) => {\n\t\tif (disabled) return;\n\t\tremoveTag(index);\n\t\tsetInputValue(tag);\n\t\tinputRef.current?.focus();\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={`rpc_tag_input ${isFocused ? 'rpc_tag_input_focused' : ''} ${\n\t\t\t\tdisabled ? 'rpc_tag_input_disabled' : ''\n\t\t\t} ${errorMessage ? 'rpc_tag_input_error' : ''} ${className}`}\n\t\t\tstyle={style}\n\t\t\tonClick={() => {\n\t\t\t\tif (!disabled) inputRef.current?.focus();\n\t\t\t}}\n\t\t>\n\t\t\t{tags.map((tag, idx) => {\n\t\t\t\tif (renderTag) {\n\t\t\t\t\treturn renderTag(tag, idx, () => removeTag(idx));\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t<span\n\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\tclassName=\"rpc_tag_input_tag\"\n\t\t\t\t\t\tonDoubleClick={() => handleDoubleClick(idx, tag)}\n\t\t\t\t\t\ttitle=\"双击可重新编辑\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>{tag}</span>\n\t\t\t\t\t\t{!disabled && (\n\t\t\t\t\t\t\t<CloseOutlined\n\t\t\t\t\t\t\t\tclassName=\"rpc_tag_input_tag_close\"\n\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\tremoveTag(idx);\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</span>\n\t\t\t\t);\n\t\t\t})}\n\n\t\t\t{(!maxCount || tags.length < maxCount) && (\n\t\t\t\t<input\n\t\t\t\t\tref={inputRef}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\tmaxLength={maxLength}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tclassName=\"rpc_tag_input_input\"\n\t\t\t\t\tplaceholder={tags.length === 0 ? placeholder : ''}\n\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\tsetInputValue(e.target.value);\n\t\t\t\t\t\tif (errorMessage) setErrorMessage('');\n\t\t\t\t\t}}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\tonFocus={() => setIsFocused(true)}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{errorMessage && <div className=\"rpc_tag_input_error_tip\">{errorMessage}</div>}\n\t\t</div>\n\t);\n};\n\nexport default TagInput;\n","import React, { useMemo, ReactNode, CSSProperties } from 'react';\nimport { CheckOutlined, CloseOutlined } from '../src/icons';\nimport './index.less';\n\nexport type PasswordStrengthLevel = 0 | 1 | 2 | 3 | 4;\n\nexport interface PasswordRule {\n\tkey: string;\n\tlabel: ReactNode;\n\tvalidator: (password: string) => boolean;\n}\n\nexport interface PasswordStrengthProps {\n\t/** 当前输入的密码文本 */\n\tpassword?: string;\n\t/** 是否显示密码强度文字(弱/中/强/极强),默认为 true */\n\tshowText?: boolean;\n\t/** 是否显示密码规则校验清单,默认为 false */\n\tshowRules?: boolean;\n\t/** 自定义规则列表 */\n\trules?: PasswordRule[];\n\t/** 强度等级改变回调 */\n\tonLevelChange?: (level: PasswordStrengthLevel) => void;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst defaultRules: PasswordRule[] = [\n\t{\n\t\tkey: 'length',\n\t\tlabel: '长度至少 8 位',\n\t\tvalidator: (pwd) => pwd.length >= 8,\n\t},\n\t{\n\t\tkey: 'lowercase',\n\t\tlabel: '包含小写字母 (a-z)',\n\t\tvalidator: (pwd) => /[a-z]/.test(pwd),\n\t},\n\t{\n\t\tkey: 'uppercase',\n\t\tlabel: '包含大写字母 (A-Z)',\n\t\tvalidator: (pwd) => /[A-Z]/.test(pwd),\n\t},\n\t{\n\t\tkey: 'number',\n\t\tlabel: '包含数字 (0-9)',\n\t\tvalidator: (pwd) => /[0-9]/.test(pwd),\n\t},\n\t{\n\t\tkey: 'special',\n\t\tlabel: '包含特殊符号 (!@#$...)',\n\t\tvalidator: (pwd) => /[^A-Za-z0-9]/.test(pwd),\n\t},\n];\n\n// 计算密码强度得分 (0~4)\nexport function evaluatePasswordStrength(\n\tpwd: string = '',\n\trules: PasswordRule[] = defaultRules,\n): { level: PasswordStrengthLevel; score: number; passedKeys: string[] } {\n\tif (!pwd) {\n\t\treturn { level: 0, score: 0, passedKeys: [] };\n\t}\n\n\tconst passedKeys = rules.filter((r) => r.validator(pwd)).map((r) => r.key);\n\tlet score = passedKeys.length;\n\n\t// 如果长度过短(<6),强制判定为弱\n\tif (pwd.length < 6) {\n\t\treturn { level: 1, score: 1, passedKeys };\n\t}\n\n\tlet level: PasswordStrengthLevel = 1;\n\tif (score <= 1) level = 1;\n\telse if (score <= 3) level = 2;\n\telse if (score === 4) level = 3;\n\telse level = 4;\n\n\treturn { level, score, passedKeys };\n}\n\nconst levelConfig: Record<\n\tPasswordStrengthLevel,\n\t{ text: string; color: string; classSuffix: string }\n> = {\n\t0: { text: '', color: '#d9d9d9', classSuffix: '' },\n\t1: { text: '强度较弱', color: '#ff4d4f', classSuffix: 'weak' },\n\t2: { text: '强度中等', color: '#fa8c16', classSuffix: 'medium' },\n\t3: { text: '强度良好', color: '#1677ff', classSuffix: 'good' },\n\t4: { text: '强度极高', color: '#52c41a', classSuffix: 'strong' },\n};\n\nconst PasswordStrength: React.FC<PasswordStrengthProps> = ({\n\tpassword = '',\n\tshowText = true,\n\tshowRules = false,\n\trules = defaultRules,\n\tonLevelChange,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst { level, passedKeys } = useMemo(() => {\n\t\tconst res = evaluatePasswordStrength(password, rules);\n\t\tonLevelChange?.(res.level);\n\t\treturn res;\n\t}, [password, rules, onLevelChange]);\n\n\tconst currentInfo = levelConfig[level];\n\n\treturn (\n\t\t<div className={`rpc_password_strength ${className}`} style={style}>\n\t\t\t{/* 4 段彩色进度条 */}\n\t\t\t<div className=\"rpc_password_strength_bars\">\n\t\t\t\t{[1, 2, 3, 4].map((segIndex) => {\n\t\t\t\t\tconst isActive = level >= segIndex;\n\t\t\t\t\tconst segmentClass = [\n\t\t\t\t\t\t'rpc_password_strength_bar_segment',\n\t\t\t\t\t\tisActive && currentInfo.classSuffix\n\t\t\t\t\t\t\t? `rpc_password_strength_bar_segment_active_${currentInfo.classSuffix}`\n\t\t\t\t\t\t\t: '',\n\t\t\t\t\t]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(' ');\n\n\t\t\t\t\treturn <div key={segIndex} className={segmentClass} />;\n\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t{/* 文本说明 */}\n\t\t\t{showText && (\n\t\t\t\t<div className=\"rpc_password_strength_label\">\n\t\t\t\t\t<span>密码安全性</span>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"rpc_password_strength_level_text\"\n\t\t\t\t\t\tstyle={{ color: currentInfo.color }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{password ? currentInfo.text : '未输入密码'}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* 规则校验列表 */}\n\t\t\t{showRules && (\n\t\t\t\t<div className=\"rpc_password_strength_rules\">\n\t\t\t\t\t{rules.map((r) => {\n\t\t\t\t\t\tconst isPassed = passedKeys.includes(r.key);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={r.key}\n\t\t\t\t\t\t\t\tclassName={`rpc_password_strength_rule_item ${\n\t\t\t\t\t\t\t\t\tisPassed ? 'rpc_password_strength_rule_item_passed' : ''\n\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{isPassed ? (\n\t\t\t\t\t\t\t\t\t<CheckOutlined style={{ fontSize: 11 }} />\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<CloseOutlined style={{ fontSize: 10, opacity: 0.5 }} />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<span>{r.label}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default PasswordStrength;\n","import React, { useState, useRef, useEffect, useMemo, CSSProperties } from 'react';\nimport CopyButton from '../CopyButton';\nimport './index.less';\n\nexport interface JsonEditorProps {\n\t/** JSON 数据内容(可传 JSON 字符串或 Object 对象) */\n\tvalue?: string | object;\n\t/** 默认 JSON 数据内容 */\n\tdefaultValue?: string | object;\n\t/** 内容变化回调 */\n\tonChange?: (rawJson: string, parsedObject?: any) => void;\n\t/** 是否只读模式,默认为 false */\n\treadOnly?: boolean;\n\t/** 缩进空格数,默认为 2 */\n\tindent?: number;\n\t/** 编辑器高度,默认为 280 */\n\theight?: number | string;\n\t/** 是否展示行号,默认为 true */\n\tshowLineNumbers?: boolean;\n\t/** 是否展示顶部工具栏,默认为 true */\n\tshowToolbar?: boolean;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\n// 格式化初始传入值\nfunction normalizeJson(val?: string | object, indent: number = 2): string {\n\tif (val === undefined || val === null) return '{\\n \\n}';\n\tif (typeof val === 'object') {\n\t\ttry {\n\t\t\treturn JSON.stringify(val, null, indent);\n\t\t} catch {\n\t\t\treturn '{}';\n\t\t}\n\t}\n\treturn String(val);\n}\n\nconst JsonEditor: React.FC<JsonEditorProps> = ({\n\tvalue: controlledValue,\n\tdefaultValue,\n\tonChange,\n\treadOnly = false,\n\tindent = 2,\n\theight = 280,\n\tshowLineNumbers = true,\n\tshowToolbar = true,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst initialText = useMemo(() => {\n\t\treturn normalizeJson(controlledValue !== undefined ? controlledValue : defaultValue, indent);\n\t}, [controlledValue, defaultValue, indent]);\n\n\tconst [text, setText] = useState<string>(initialText);\n\tconst [error, setError] = useState<string | null>(null);\n\n\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\n\tuseEffect(() => {\n\t\tif (controlledValue !== undefined) {\n\t\t\tconst next = normalizeJson(controlledValue, indent);\n\t\t\tsetText(next);\n\t\t\tvalidate(next);\n\t\t}\n\t}, [controlledValue, indent]);\n\n\t// 校验 JSON\n\tconst validate = (content: string) => {\n\t\tif (!content.trim()) {\n\t\t\tsetError(null);\n\t\t\treturn true;\n\t\t}\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(content);\n\t\t\tsetError(null);\n\t\t\treturn parsed;\n\t\t} catch (err: any) {\n\t\t\tsetError(err.message || 'JSON 语法错误');\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tconst handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n\t\tconst nextText = e.target.value;\n\t\tsetText(nextText);\n\t\tconst parsed = validate(nextText);\n\t\tonChange?.(nextText, parsed !== false ? parsed : undefined);\n\t};\n\n\t// 一键美化格式化\n\tconst handleFormat = () => {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(text);\n\t\t\tconst formatted = JSON.stringify(parsed, null, indent);\n\t\t\tsetText(formatted);\n\t\t\tsetError(null);\n\t\t\tonChange?.(formatted, parsed);\n\t\t} catch (err: any) {\n\t\t\tsetError(err.message || '格式化失败: 语法不合法');\n\t\t}\n\t};\n\n\t// 一键压缩 (Minify)\n\tconst handleMinify = () => {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(text);\n\t\t\tconst minified = JSON.stringify(parsed);\n\t\t\tsetText(minified);\n\t\t\tsetError(null);\n\t\t\tonChange?.(minified, parsed);\n\t\t} catch (err: any) {\n\t\t\tsetError(err.message || '压缩失败: 语法不合法');\n\t\t}\n\t};\n\n\t// 处理 Tab 键缩进\n\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n\t\tif (e.key === 'Tab') {\n\t\t\te.preventDefault();\n\t\t\tconst textarea = textareaRef.current;\n\t\t\tif (!textarea) return;\n\n\t\t\tconst start = textarea.selectionStart;\n\t\t\tconst end = textarea.selectionEnd;\n\t\t\tconst spaces = ' '.repeat(indent);\n\n\t\t\tconst newText = text.substring(0, start) + spaces + text.substring(end);\n\t\t\tsetText(newText);\n\t\t\tvalidate(newText);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\ttextarea.selectionStart = textarea.selectionEnd = start + indent;\n\t\t\t}, 0);\n\t\t}\n\t};\n\n\t// 计算总行数\n\tconst lineCount = useMemo(() => {\n\t\treturn text.split('\\n').length;\n\t}, [text]);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`rpc_json_editor ${className}`}\n\t\t\tstyle={{ height, ...style }}\n\t\t>\n\t\t\t{/* 顶部工具栏 */}\n\t\t\t{showToolbar && (\n\t\t\t\t<div className=\"rpc_json_editor_toolbar\">\n\t\t\t\t\t<div className=\"rpc_json_editor_title\">\n\t\t\t\t\t\t<span>{'{ }'}</span>\n\t\t\t\t\t\t<span>JSON {readOnly ? 'Viewer' : 'Editor'}</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"rpc_json_editor_actions\">\n\t\t\t\t\t\t{!readOnly && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_json_editor_btn\"\n\t\t\t\t\t\t\t\t\tonClick={handleFormat}\n\t\t\t\t\t\t\t\t\ttitle=\"美化格式化\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t美化\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_json_editor_btn\"\n\t\t\t\t\t\t\t\t\tonClick={handleMinify}\n\t\t\t\t\t\t\t\t\ttitle=\"单行压缩\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t压缩\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<CopyButton mode=\"icon\" text={text} tooltip=\"复制 JSON\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* 主体编辑区域 */}\n\t\t\t<div className=\"rpc_json_editor_body\">\n\t\t\t\t{showLineNumbers && (\n\t\t\t\t\t<div className=\"rpc_json_editor_line_numbers\">\n\t\t\t\t\t\t{Array.from({ length: Math.max(1, lineCount) }).map((_, i) => (\n\t\t\t\t\t\t\t<div key={i}>{i + 1}</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<textarea\n\t\t\t\t\tref={textareaRef}\n\t\t\t\t\tvalue={text}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tspellCheck={false}\n\t\t\t\t\tclassName=\"rpc_json_editor_textarea\"\n\t\t\t\t\tplaceholder=\"在此输入或粘贴 JSON 字符串...\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t{/* 底部状态栏 */}\n\t\t\t<div\n\t\t\t\tclassName={`rpc_json_editor_status_bar ${\n\t\t\t\t\terror ? 'rpc_json_editor_status_bar_error' : ''\n\t\t\t\t}`}\n\t\t\t>\n\t\t\t\t<span>{error ? `⚠️ ${error}` : '✓ JSON 格式有效'}</span>\n\t\t\t\t<span>{lineCount} 行 · {text.length} 字符</span>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default JsonEditor;\n","import React, { useRef, useEffect, useCallback, ReactNode, CSSProperties } from 'react';\nimport { LoadingOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface InfiniteScrollListProps {\n\t/** 列表项子内容 */\n\tchildren: ReactNode;\n\t/** 是否还有更多数据可供加载 */\n\thasMore: boolean;\n\t/** 当前是否正在加载下一页 */\n\tloading: boolean;\n\t/** 触底加载下一页回调 */\n\tonLoadMore: () => void | Promise<void>;\n\t/** 触发加载的触底距离阈值(像素),默认为 40 */\n\tthreshold?: number;\n\t/** 没有更多数据时的底部提示内容,默认为 '已经到底啦 ~' */\n\tendMessage?: ReactNode;\n\t/** 加载中指示器组件,默认为 Spin 图标与 '正在加载更多...' */\n\tloadingIndicator?: ReactNode;\n\t/** 容器固定高度(传值时为局部滚动容器,不传时监听 window 全局滚动) */\n\theight?: number | string;\n\t/** 滚动容器 ref 或自定义对象 */\n\tscrollableTarget?: HTMLElement | (() => HTMLElement | null) | null;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst InfiniteScrollList: React.FC<InfiniteScrollListProps> = ({\n\tchildren,\n\thasMore,\n\tloading,\n\tonLoadMore,\n\tthreshold = 40,\n\tendMessage = '已经到底啦 ~',\n\tloadingIndicator,\n\theight,\n\tscrollableTarget,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst sentinelRef = useRef<HTMLDivElement>(null);\n\n\tconst handleLoadMore = useCallback(() => {\n\t\tif (!loading && hasMore) {\n\t\t\tonLoadMore();\n\t\t}\n\t}, [loading, hasMore, onLoadMore]);\n\n\t// 使用 IntersectionObserver 监听底部哨兵元素\n\tuseEffect(() => {\n\t\tconst sentinel = sentinelRef.current;\n\t\tif (!sentinel) return;\n\n\t\tconst targetEl =\n\t\t\ttypeof scrollableTarget === 'function'\n\t\t\t\t? scrollableTarget()\n\t\t\t\t: scrollableTarget || (height ? containerRef.current : null);\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t([entry]) => {\n\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\thandleLoadMore();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\troot: targetEl || null,\n\t\t\t\trootMargin: `0px 0px ${threshold}px 0px`,\n\t\t\t\tthreshold: 0,\n\t\t\t},\n\t\t);\n\n\t\tobserver.observe(sentinel);\n\t\treturn () => observer.disconnect();\n\t}, [height, scrollableTarget, threshold, handleLoadMore]);\n\n\tconst defaultLoadingIndicator = (\n\t\t<div className=\"rpc_infinite_scroll_list_footer\">\n\t\t\t<LoadingOutlined style={{ fontSize: 16, color: '#1677ff' }} />\n\t\t\t<span>正在加载更多数据...</span>\n\t\t</div>\n\t);\n\n\tconst isLocalScroll = Boolean(height);\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={`rpc_infinite_scroll_list ${\n\t\t\t\tisLocalScroll ? 'rpc_infinite_scroll_list_container' : ''\n\t\t\t} ${className}`}\n\t\t\tstyle={{\n\t\t\t\theight: height,\n\t\t\t\t...style,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\n\t\t\t{/* 底部哨兵元素 */}\n\t\t\t<div ref={sentinelRef} style={{ height: 1, margin: 0, padding: 0 }} />\n\n\t\t\t{/* 底部状态提示 */}\n\t\t\t{loading && (loadingIndicator || defaultLoadingIndicator)}\n\t\t\t{!hasMore && endMessage && (\n\t\t\t\t<div className=\"rpc_infinite_scroll_list_footer rpc_infinite_scroll_list_end\">\n\t\t\t\t\t{endMessage}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default InfiniteScrollList;\n","import React, { useRef, useState, useEffect, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport type MarqueeDirection = 'left' | 'right' | 'up' | 'down';\n\nexport interface MarqueeProps {\n\t/** 滚动子内容 */\n\tchildren: ReactNode;\n\t/** 滚动方向:'left' | 'right' | 'up' | 'down',默认为 'left' */\n\tdirection?: MarqueeDirection;\n\t/** 滚动速度(像素/秒),默认为 50 */\n\tspeed?: number;\n\t/** 鼠标悬浮时是否暂停动画,默认为 true */\n\tpauseOnHover?: boolean;\n\t/** 是否开启两侧边缘羽化渐变遮罩,默认为 false */\n\tgradient?: boolean;\n\t/** 边缘渐变遮罩的颜色(通常与背景色一致),默认为 '#ffffff' */\n\tgradientColor?: string;\n\t/** 子项间距(像素),默认为 24 */\n\tgap?: number;\n\t/** 是否持续保持播放 */\n\tplay?: boolean;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst Marquee: React.FC<MarqueeProps> = ({\n\tchildren,\n\tdirection = 'left',\n\tspeed = 50,\n\tpauseOnHover = true,\n\tgradient = false,\n\tgradientColor = '#ffffff',\n\tgap = 24,\n\tplay = true,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst contentRef = useRef<HTMLDivElement>(null);\n\tconst [duration, setDuration] = useState<number>(20);\n\n\tconst isVertical = direction === 'up' || direction === 'down';\n\n\t// 根据内容尺寸动态计算保持固定速度所需的 CSS 动画时长\n\tuseEffect(() => {\n\t\tconst calculateDuration = () => {\n\t\t\tif (!contentRef.current) return;\n\t\t\tconst size = isVertical\n\t\t\t\t? contentRef.current.clientHeight\n\t\t\t\t: contentRef.current.clientWidth;\n\n\t\t\tif (size > 0 && speed > 0) {\n\t\t\t\tsetDuration(size / speed);\n\t\t\t}\n\t\t};\n\n\t\tcalculateDuration();\n\t\twindow.addEventListener('resize', calculateDuration);\n\t\treturn () => window.removeEventListener('resize', calculateDuration);\n\t}, [children, speed, isVertical, gap]);\n\n\tlet animName = 'rpcMarqueeLeft';\n\tif (direction === 'right') animName = 'rpcMarqueeRight';\n\telse if (direction === 'up') animName = 'rpcMarqueeUp';\n\telse if (direction === 'down') animName = 'rpcMarqueeDown';\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={`rpc_marquee ${isVertical ? 'rpc_marquee_vertical' : ''} ${\n\t\t\t\tpauseOnHover ? 'rpc_marquee_pause_on_hover' : ''\n\t\t\t} ${gradient ? 'rpc_marquee_gradient' : ''} ${className}`}\n\t\t\tstyle={{\n\t\t\t\t['--rpc-marquee-gap' as any]: `${gap}px`,\n\t\t\t\t['--rpc-marquee-gradient-color' as any]: gradientColor,\n\t\t\t\t...style,\n\t\t\t}}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName=\"rpc_marquee_container\"\n\t\t\t\tstyle={{\n\t\t\t\t\tanimationName: animName,\n\t\t\t\t\tanimationDuration: `${duration}s`,\n\t\t\t\t\tanimationTimingFunction: 'linear',\n\t\t\t\t\tanimationIterationCount: 'infinite',\n\t\t\t\t\tanimationPlayState: play ? 'running' : 'paused',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div ref={contentRef} className=\"rpc_marquee_content\">\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t\t{/* 拼接副本以实现平滑无缝回环 */}\n\t\t\t\t<div className=\"rpc_marquee_content\" aria-hidden=\"true\">\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default Marquee;\n","import React, { useState, useRef, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface SpotlightCardProps {\n\t/** 卡片子内容 */\n\tchildren: ReactNode;\n\t/** 聚光灯光晕颜色,默认为 'rgba(22, 119, 255, 0.15)' */\n\tspotlightColor?: string;\n\t/** 聚光灯光晕半径(像素),默认为 320 */\n\tspotlightSize?: number;\n\t/** 是否开启暗色主题(高对比科技感),默认为 false */\n\tdark?: boolean;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst SpotlightCard: React.FC<SpotlightCardProps> = ({\n\tchildren,\n\tspotlightColor = 'rgba(22, 119, 255, 0.15)',\n\tspotlightSize = 320,\n\tdark = false,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst cardRef = useRef<HTMLDivElement>(null);\n\tconst [position, setPosition] = useState<{ x: number; y: number }>({ x: 0, y: 0 });\n\n\tconst handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n\t\tif (!cardRef.current) return;\n\t\tconst rect = cardRef.current.getBoundingClientRect();\n\t\tsetPosition({\n\t\t\tx: e.clientX - rect.left,\n\t\t\ty: e.clientY - rect.top,\n\t\t});\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tref={cardRef}\n\t\t\tonMouseMove={handleMouseMove}\n\t\t\tclassName={`rpc_spotlight_card ${dark ? 'rpc_spotlight_card_dark' : ''} ${className}`}\n\t\t\tstyle={style}\n\t\t>\n\t\t\t{/* 聚光灯层 */}\n\t\t\t<div\n\t\t\t\tclassName=\"rpc_spotlight_card_spotlight\"\n\t\t\t\tstyle={{\n\t\t\t\t\tbackground: `radial-gradient(${spotlightSize}px circle at ${position.x}px ${position.y}px, ${spotlightColor}, transparent 80%)`,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<div className=\"rpc_spotlight_card_content\">{children}</div>\n\t\t</div>\n\t);\n};\n\nexport default SpotlightCard;\n","import React, { useState, useMemo, CSSProperties } from 'react';\nimport { EyeOutlined, EyeInvisibleOutlined } from '../src/icons';\nimport CopyButton from '../CopyButton';\nimport './index.less';\n\nexport type SensitiveType = 'phone' | 'idcard' | 'email' | 'bankcard' | 'custom';\n\nexport interface SensitiveMaskProps {\n\t/** 原始敏感文本 */\n\ttext: string;\n\t/** 脱敏类型:'phone' | 'idcard' | 'email' | 'bankcard' | 'custom',默认为 'phone' */\n\ttype?: SensitiveType;\n\t/** 默认是否脱敏遮蔽,默认为 true */\n\tdefaultMasked?: boolean;\n\t/** 遮罩字符,默认为 '*' */\n\tmaskSymbol?: string;\n\t/** 自定义保留头部明文字符数(仅 type='custom' 有效) */\n\tunmaskedStart?: number;\n\t/** 自定义保留尾部明文字符数(仅 type='custom' 有效) */\n\tunmaskedEnd?: number;\n\t/** 是否支持切换明文/密文查看,默认为 true */\n\ttoggleable?: boolean;\n\t/** 是否支持一键复制,默认为 false */\n\tcopyable?: boolean;\n\t/** 切换明文时的拦截回调(返回 false 可阻止切换,支持异步鉴权) */\n\tonToggle?: (nextMasked: boolean) => boolean | Promise<boolean>;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\n// 格式化脱敏文本\nexport function maskSensitiveText(\n\traw: string,\n\ttype: SensitiveType = 'phone',\n\tmaskSymbol: string = '*',\n\tstartCount?: number,\n\tendCount?: number,\n): string {\n\tif (!raw) return '';\n\n\tswitch (type) {\n\t\tcase 'phone':\n\t\t\tif (raw.length <= 7) return raw;\n\t\t\treturn raw.slice(0, 3) + maskSymbol.repeat(4) + raw.slice(-4);\n\t\tcase 'idcard':\n\t\t\tif (raw.length <= 10) return raw;\n\t\t\treturn raw.slice(0, 6) + maskSymbol.repeat(Math.max(1, raw.length - 10)) + raw.slice(-4);\n\t\tcase 'bankcard':\n\t\t\tif (raw.length <= 8) return raw;\n\t\t\treturn raw.slice(0, 4) + ' ' + maskSymbol.repeat(4) + ' ' + maskSymbol.repeat(4) + ' ' + raw.slice(-4);\n\t\tcase 'email': {\n\t\t\tconst atIndex = raw.indexOf('@');\n\t\t\tif (atIndex <= 1) return raw;\n\t\t\tconst name = raw.slice(0, atIndex);\n\t\t\tconst domain = raw.slice(atIndex);\n\t\t\tconst maskedName = name[0] + maskSymbol.repeat(Math.max(1, name.length - 2)) + (name.length > 2 ? name.slice(-1) : '');\n\t\t\treturn maskedName + domain;\n\t\t}\n\t\tcase 'custom': {\n\t\t\tconst start = startCount !== undefined ? startCount : 2;\n\t\t\tconst end = endCount !== undefined ? endCount : 2;\n\t\t\tif (raw.length <= start + end) return raw;\n\t\t\treturn raw.slice(0, start) + maskSymbol.repeat(Math.max(1, raw.length - start - end)) + raw.slice(-end);\n\t\t}\n\t\tdefault:\n\t\t\treturn raw;\n\t}\n}\n\nconst SensitiveMask: React.FC<SensitiveMaskProps> = ({\n\ttext = '',\n\ttype = 'phone',\n\tdefaultMasked = true,\n\tmaskSymbol = '*',\n\tunmaskedStart,\n\tunmaskedEnd,\n\ttoggleable = true,\n\tcopyable = false,\n\tonToggle,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [masked, setMasked] = useState<boolean>(defaultMasked);\n\n\tconst maskedText = useMemo(() => {\n\t\treturn maskSensitiveText(text, type, maskSymbol, unmaskedStart, unmaskedEnd);\n\t}, [text, type, maskSymbol, unmaskedStart, unmaskedEnd]);\n\n\tconst displayText = masked ? maskedText : text;\n\n\tconst handleToggle = async (e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tconst nextState = !masked;\n\t\tif (onToggle) {\n\t\t\tconst allowed = await onToggle(nextState);\n\t\t\tif (allowed === false) return;\n\t\t}\n\t\tsetMasked(nextState);\n\t};\n\n\treturn (\n\t\t<span className={`rpc_sensitive_mask ${className}`} style={style}>\n\t\t\t<span className=\"rpc_sensitive_mask_text\">{displayText}</span>\n\n\t\t\t{toggleable && (\n\t\t\t\t<span className=\"rpc_sensitive_mask_action_btn\" onClick={handleToggle} title={masked ? '点击查看明文' : '点击隐藏'}>\n\t\t\t\t\t{masked ? <EyeOutlined /> : <EyeInvisibleOutlined />}\n\t\t\t\t</span>\n\t\t\t)}\n\n\t\t\t{copyable && <CopyButton mode=\"icon\" text={text} tooltip=\"复制明文\" />}\n\t\t</span>\n\t);\n};\n\nexport default SensitiveMask;\n","import React, { useState, useMemo, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport type DiffViewMode = 'split' | 'unified';\n\nexport interface DiffViewerProps {\n\t/** 修改前的旧文本 */\n\toldValue: string;\n\t/** 修改后的新文本 */\n\tnewValue: string;\n\t/** 视图模式:'split' 左右分栏,'unified' 单列行内,默认为 'split' */\n\tviewMode?: DiffViewMode;\n\t/** 是否允许用户自由切换视图模式,默认为 true */\n\tallowModeChange?: boolean;\n\t/** 文件标题或说明 */\n\ttitle?: ReactNode;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\ninterface DiffLine {\n\ttype: 'unchanged' | 'added' | 'removed';\n\ttext: string;\n\toldLineNumber?: number;\n\tnewLineNumber?: number;\n}\n\n// 简单高效的 LCS 行级差异比较算法\nfunction computeLineDiff(oldStr: string, newStr: string): DiffLine[] {\n\tconst oldLines = oldStr.split('\\n');\n\tconst newLines = newStr.split('\\n');\n\n\tconst n = oldLines.length;\n\tconst m = newLines.length;\n\n\t// 动态规划构建 LCS 矩阵\n\tconst dp: number[][] = Array.from({ length: n + 1 }, () => Array(m + 1).fill(0));\n\n\tfor (let i = 0; i < n; i++) {\n\t\tfor (let j = 0; j < m; j++) {\n\t\t\tif (oldLines[i] === newLines[j]) {\n\t\t\t\tdp[i + 1][j + 1] = dp[i][j] + 1;\n\t\t\t} else {\n\t\t\t\tdp[i + 1][j + 1] = Math.max(dp[i + 1][j], dp[i][j + 1]);\n\t\t\t}\n\t\t}\n\t}\n\n\t// 回溯生成差异序列\n\tconst result: DiffLine[] = [];\n\tlet i = n;\n\tlet j = m;\n\n\twhile (i > 0 || j > 0) {\n\t\tif (i > 0 && j > 0 && oldLines[i - 1] === newLines[j - 1]) {\n\t\t\tresult.unshift({\n\t\t\t\ttype: 'unchanged',\n\t\t\t\ttext: oldLines[i - 1],\n\t\t\t\toldLineNumber: i,\n\t\t\t\tnewLineNumber: j,\n\t\t\t});\n\t\t\ti--;\n\t\t\tj--;\n\t\t} else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {\n\t\t\tresult.unshift({\n\t\t\t\ttype: 'added',\n\t\t\t\ttext: newLines[j - 1],\n\t\t\t\tnewLineNumber: j,\n\t\t\t});\n\t\t\tj--;\n\t\t} else if (i > 0 && (j === 0 || dp[i][j - 1] < dp[i - 1][j])) {\n\t\t\tresult.unshift({\n\t\t\t\ttype: 'removed',\n\t\t\t\ttext: oldLines[i - 1],\n\t\t\t\toldLineNumber: i,\n\t\t\t});\n\t\t\ti--;\n\t\t}\n\t}\n\n\treturn result;\n}\n\nconst DiffViewer: React.FC<DiffViewerProps> = ({\n\toldValue = '',\n\tnewValue = '',\n\tviewMode: initialMode = 'split',\n\tallowModeChange = true,\n\ttitle,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [mode, setMode] = useState<DiffViewMode>(initialMode);\n\n\tconst diffLines = useMemo(() => {\n\t\treturn computeLineDiff(oldValue, newValue);\n\t}, [oldValue, newValue]);\n\n\t// 统计变动行数\n\tconst stats = useMemo(() => {\n\t\tlet added = 0;\n\t\tlet removed = 0;\n\t\tdiffLines.forEach((l) => {\n\t\t\tif (l.type === 'added') added++;\n\t\t\tif (l.type === 'removed') removed++;\n\t\t});\n\t\treturn { added, removed };\n\t}, [diffLines]);\n\n\treturn (\n\t\t<div className={`rpc_diff_viewer ${className}`} style={style}>\n\t\t\t{/* 头部标题与模式切换 */}\n\t\t\t<div className=\"rpc_diff_viewer_header\">\n\t\t\t\t<div style={{ display: 'flex', alignItems: 'center', gap: 12 }}>\n\t\t\t\t\t<span className=\"rpc_diff_viewer_title\">{title || 'Diff Comparison'}</span>\n\t\t\t\t\t<span style={{ fontSize: 12, color: '#52c41a' }}>+{stats.added}</span>\n\t\t\t\t\t<span style={{ fontSize: 12, color: '#ff4d4f' }}>-{stats.removed}</span>\n\t\t\t\t</div>\n\n\t\t\t\t{allowModeChange && (\n\t\t\t\t\t<div className=\"rpc_diff_viewer_mode_toggle\">\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_diff_viewer_mode_btn ${\n\t\t\t\t\t\t\t\tmode === 'split' ? 'rpc_diff_viewer_mode_btn_active' : ''\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\tonClick={() => setMode('split')}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t分栏 (Split)\n\t\t\t\t\t\t</button>\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_diff_viewer_mode_btn ${\n\t\t\t\t\t\t\t\tmode === 'unified' ? 'rpc_diff_viewer_mode_btn_active' : ''\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\tonClick={() => setMode('unified')}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t行内 (Unified)\n\t\t\t\t\t\t</button>\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<div style={{ overflowX: 'auto', maxHeight: 420, overflowY: 'auto' }}>\n\t\t\t\t{mode === 'unified' ? (\n\t\t\t\t\t<table className=\"rpc_diff_viewer_table\">\n\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t{diffLines.map((line, idx) => {\n\t\t\t\t\t\t\t\tconst rowClass =\n\t\t\t\t\t\t\t\t\tline.type === 'added'\n\t\t\t\t\t\t\t\t\t\t? 'rpc_diff_viewer_row_added'\n\t\t\t\t\t\t\t\t\t\t: line.type === 'removed'\n\t\t\t\t\t\t\t\t\t\t\t? 'rpc_diff_viewer_row_removed'\n\t\t\t\t\t\t\t\t\t\t\t: '';\n\n\t\t\t\t\t\t\t\tconst marker = line.type === 'added' ? '+' : line.type === 'removed' ? '-' : ' ';\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<tr key={idx} className={`rpc_diff_viewer_row ${rowClass}`}>\n\t\t\t\t\t\t\t\t\t\t<td className=\"rpc_diff_viewer_gutter\">{line.oldLineNumber || ''}</td>\n\t\t\t\t\t\t\t\t\t\t<td className=\"rpc_diff_viewer_gutter\">{line.newLineNumber || ''}</td>\n\t\t\t\t\t\t\t\t\t\t<td className=\"rpc_diff_viewer_marker\">{marker}</td>\n\t\t\t\t\t\t\t\t\t\t<td className=\"rpc_diff_viewer_code\">{line.text || ' '}</td>\n\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t) : (\n\t\t\t\t\t/* 分栏 Split 模式 */\n\t\t\t\t\t<table className=\"rpc_diff_viewer_table\">\n\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t{diffLines.map((line, idx) => {\n\t\t\t\t\t\t\t\tconst isAdd = line.type === 'added';\n\t\t\t\t\t\t\t\tconst isDel = line.type === 'removed';\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<tr key={idx} className=\"rpc_diff_viewer_row\">\n\t\t\t\t\t\t\t\t\t\t{/* 左侧旧版 */}\n\t\t\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\t\t\tclassName={`rpc_diff_viewer_gutter ${\n\t\t\t\t\t\t\t\t\t\t\t\tisDel ? 'rpc_diff_viewer_row_removed' : isAdd ? 'rpc_diff_viewer_row_empty' : ''\n\t\t\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{line.oldLineNumber || ''}\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\t\t\tclassName={`rpc_diff_viewer_code ${\n\t\t\t\t\t\t\t\t\t\t\t\tisDel ? 'rpc_diff_viewer_row_removed' : isAdd ? 'rpc_diff_viewer_row_empty' : ''\n\t\t\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{isDel || line.type === 'unchanged' ? line.text || ' ' : ''}\n\t\t\t\t\t\t\t\t\t\t</td>\n\n\t\t\t\t\t\t\t\t\t\t{/* 右侧新版 */}\n\t\t\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\t\t\tclassName={`rpc_diff_viewer_gutter ${\n\t\t\t\t\t\t\t\t\t\t\t\tisAdd ? 'rpc_diff_viewer_row_added' : isDel ? 'rpc_diff_viewer_row_empty' : ''\n\t\t\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{line.newLineNumber || ''}\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\t\t\tclassName={`rpc_diff_viewer_code ${\n\t\t\t\t\t\t\t\t\t\t\t\tisAdd ? 'rpc_diff_viewer_row_added' : isDel ? 'rpc_diff_viewer_row_empty' : ''\n\t\t\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{isAdd || line.type === 'unchanged' ? line.text || ' ' : ''}\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default DiffViewer;\n","import React, { useState, useEffect, CSSProperties } from 'react';\nimport CopyButton from '../CopyButton';\nimport './index.less';\n\nexport type CronPeriodType = 'minute' | 'hour' | 'day' | 'week' | 'month' | 'custom';\n\nexport interface CronPickerProps {\n\t/** 当前 Cron 表达式(受控) */\n\tvalue?: string;\n\t/** 默认 Cron 表达式,默认为 '0 0 12 * * ?' */\n\tdefaultValue?: string;\n\t/** 表达式改变回调 */\n\tonChange?: (cron: string, humanReadable: string) => void;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst CronPicker: React.FC<CronPickerProps> = ({\n\tvalue: controlledValue,\n\tdefaultValue = '0 0 12 * * ?',\n\tonChange,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [period, setPeriod] = useState<CronPeriodType>('day');\n\n\t// 状态字段\n\tconst [minuteInterval, setMinuteInterval] = useState<number>(5);\n\tconst [hourMinute, setHourMinute] = useState<number>(0);\n\tconst [dayHour, setDayHour] = useState<number>(12);\n\tconst [dayMinute, setDayMinute] = useState<number>(0);\n\tconst [weekDay, setWeekDay] = useState<number>(1); // 1 = 周一\n\tconst [weekHour, setWeekHour] = useState<number>(9);\n\tconst [weekMinute, setWeekMinute] = useState<number>(0);\n\tconst [monthDay, setMonthDay] = useState<number>(1);\n\tconst [monthHour, setMonthHour] = useState<number>(0);\n\tconst [monthMinute, setMonthMinute] = useState<number>(0);\n\tconst [customCron, setCustomCron] = useState<string>(defaultValue);\n\n\t// 计算当前周期对应的 Cron 表达式与中文描述\n\tconst { cron, desc } = React.useMemo(() => {\n\t\tif (controlledValue && period === 'custom') {\n\t\t\treturn { cron: controlledValue, desc: '自定义 Cron 调度' };\n\t\t}\n\n\t\tswitch (period) {\n\t\t\tcase 'minute':\n\t\t\t\treturn {\n\t\t\t\t\tcron: `0 0/${minuteInterval} * * * ?`,\n\t\t\t\t\tdesc: `每隔 ${minuteInterval} 分钟执行一次`,\n\t\t\t\t};\n\t\t\tcase 'hour':\n\t\t\t\treturn {\n\t\t\t\t\tcron: `0 ${hourMinute} * * * ?`,\n\t\t\t\t\tdesc: `每小时的第 ${hourMinute} 分钟执行一次`,\n\t\t\t\t};\n\t\t\tcase 'day':\n\t\t\t\treturn {\n\t\t\t\t\tcron: `0 ${dayMinute} ${dayHour} * * ?`,\n\t\t\t\t\tdesc: `每天 ${String(dayHour).padStart(2, '0')}:${String(dayMinute).padStart(2, '0')} 执行一次`,\n\t\t\t\t};\n\t\t\tcase 'week': {\n\t\t\t\tconst weekMap: Record<number, string> = {\n\t\t\t\t\t1: '周一',\n\t\t\t\t\t2: '周二',\n\t\t\t\t\t3: '周三',\n\t\t\t\t\t4: '周四',\n\t\t\t\t\t5: '周五',\n\t\t\t\t\t6: '周六',\n\t\t\t\t\t7: '周日',\n\t\t\t\t};\n\t\t\t\t// Cron 中 1 为周日/周一根据规范不同,这里按常规映射\n\t\t\t\treturn {\n\t\t\t\t\tcron: `0 ${weekMinute} ${weekHour} ? * ${weekDay}`,\n\t\t\t\t\tdesc: `每${weekMap[weekDay]} ${String(weekHour).padStart(2, '0')}:${String(weekMinute).padStart(2, '0')} 执行一次`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase 'month':\n\t\t\t\treturn {\n\t\t\t\t\tcron: `0 ${monthMinute} ${monthHour} ${monthDay} * ?`,\n\t\t\t\t\tdesc: `每月 ${monthDay} 号 ${String(monthHour).padStart(2, '0')}:${String(monthMinute).padStart(2, '0')} 执行一次`,\n\t\t\t\t};\n\t\t\tcase 'custom':\n\t\t\t\treturn {\n\t\t\t\t\tcron: customCron,\n\t\t\t\t\tdesc: '自定义 Cron 表达式',\n\t\t\t\t};\n\t\t\tdefault:\n\t\t\t\treturn { cron: defaultValue, desc: '定时执行' };\n\t\t}\n\t}, [\n\t\tperiod,\n\t\tcontrolledValue,\n\t\tminuteInterval,\n\t\thourMinute,\n\t\tdayHour,\n\t\tdayMinute,\n\t\tweekDay,\n\t\tweekHour,\n\t\tweekMinute,\n\t\tmonthDay,\n\t\tmonthHour,\n\t\tmonthMinute,\n\t\tcustomCron,\n\t\tdefaultValue,\n\t]);\n\n\tuseEffect(() => {\n\t\tonChange?.(cron, desc);\n\t}, [cron, desc, onChange]);\n\n\treturn (\n\t\t<div className={`rpc_cron_picker ${className}`} style={style}>\n\t\t\t{/* 周期切换 Tab */}\n\t\t\t<div className=\"rpc_cron_picker_tabs\">\n\t\t\t\t{[\n\t\t\t\t\t{ key: 'minute', label: '每隔分钟' },\n\t\t\t\t\t{ key: 'hour', label: '每小时' },\n\t\t\t\t\t{ key: 'day', label: '每天' },\n\t\t\t\t\t{ key: 'week', label: '每周' },\n\t\t\t\t\t{ key: 'month', label: '每月' },\n\t\t\t\t\t{ key: 'custom', label: '自定义 Cron' },\n\t\t\t\t].map((tab) => (\n\t\t\t\t\t<button\n\t\t\t\t\t\tkey={tab.key}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={`rpc_cron_picker_tab_btn ${\n\t\t\t\t\t\t\tperiod === tab.key ? 'rpc_cron_picker_tab_btn_active' : ''\n\t\t\t\t\t\t}`}\n\t\t\t\t\t\tonClick={() => setPeriod(tab.key as CronPeriodType)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{tab.label}\n\t\t\t\t\t</button>\n\t\t\t\t))}\n\t\t\t</div>\n\n\t\t\t{/* 参数配置区域 */}\n\t\t\t<div className=\"rpc_cron_picker_panel\">\n\t\t\t\t{period === 'minute' && (\n\t\t\t\t\t<div className=\"rpc_cron_picker_field_row\">\n\t\t\t\t\t\t<span>每隔</span>\n\t\t\t\t\t\t<select\n\t\t\t\t\t\t\tclassName=\"rpc_cron_picker_select\"\n\t\t\t\t\t\t\tvalue={minuteInterval}\n\t\t\t\t\t\t\tonChange={(e) => setMinuteInterval(Number(e.target.value))}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{[1, 2, 3, 5, 10, 15, 20, 30].map((m) => (\n\t\t\t\t\t\t\t\t<option key={m} value={m}>\n\t\t\t\t\t\t\t\t\t{m}\n\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t<span>分钟执行一次</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{period === 'hour' && (\n\t\t\t\t\t<div className=\"rpc_cron_picker_field_row\">\n\t\t\t\t\t\t<span>每小时的第</span>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\tmax={59}\n\t\t\t\t\t\t\tvalue={hourMinute}\n\t\t\t\t\t\t\tonChange={(e) => setHourMinute(Number(e.target.value))}\n\t\t\t\t\t\t\tclassName=\"rpc_cron_picker_input\"\n\t\t\t\t\t\t\tstyle={{ width: 60 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>分执行一次</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{period === 'day' && (\n\t\t\t\t\t<div className=\"rpc_cron_picker_field_row\">\n\t\t\t\t\t\t<span>每天在</span>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\tmax={23}\n\t\t\t\t\t\t\tvalue={dayHour}\n\t\t\t\t\t\t\tonChange={(e) => setDayHour(Number(e.target.value))}\n\t\t\t\t\t\t\tclassName=\"rpc_cron_picker_input\"\n\t\t\t\t\t\t\tstyle={{ width: 60 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>时</span>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\tmax={59}\n\t\t\t\t\t\t\tvalue={dayMinute}\n\t\t\t\t\t\t\tonChange={(e) => setDayMinute(Number(e.target.value))}\n\t\t\t\t\t\t\tclassName=\"rpc_cron_picker_input\"\n\t\t\t\t\t\t\tstyle={{ width: 60 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>分执行一次</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{period === 'week' && (\n\t\t\t\t\t<div className=\"rpc_cron_picker_field_row\">\n\t\t\t\t\t\t<span>每周</span>\n\t\t\t\t\t\t<select\n\t\t\t\t\t\t\tclassName=\"rpc_cron_picker_select\"\n\t\t\t\t\t\t\tvalue={weekDay}\n\t\t\t\t\t\t\tonChange={(e) => setWeekDay(Number(e.target.value))}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<option value={1}>周一</option>\n\t\t\t\t\t\t\t<option value={2}>周二</option>\n\t\t\t\t\t\t\t<option value={3}>周三</option>\n\t\t\t\t\t\t\t<option value={4}>周四</option>\n\t\t\t\t\t\t\t<option value={5}>周五</option>\n\t\t\t\t\t\t\t<option value={6}>周六</option>\n\t\t\t\t\t\t\t<option value={7}>周日</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t<span>的</span>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\tmax={23}\n\t\t\t\t\t\t\tvalue={weekHour}\n\t\t\t\t\t\t\tonChange={(e) => setWeekHour(Number(e.target.value))}\n\t\t\t\t\t\t\tclassName=\"rpc_cron_picker_input\"\n\t\t\t\t\t\t\tstyle={{ width: 60 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>时</span>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\tmax={59}\n\t\t\t\t\t\t\tvalue={weekMinute}\n\t\t\t\t\t\t\tonChange={(e) => setWeekMinute(Number(e.target.value))}\n\t\t\t\t\t\t\tclassName=\"rpc_cron_picker_input\"\n\t\t\t\t\t\t\tstyle={{ width: 60 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>分执行</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{period === 'month' && (\n\t\t\t\t\t<div className=\"rpc_cron_picker_field_row\">\n\t\t\t\t\t\t<span>每月第</span>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\tmin={1}\n\t\t\t\t\t\t\tmax={31}\n\t\t\t\t\t\t\tvalue={monthDay}\n\t\t\t\t\t\t\tonChange={(e) => setMonthDay(Number(e.target.value))}\n\t\t\t\t\t\t\tclassName=\"rpc_cron_picker_input\"\n\t\t\t\t\t\t\tstyle={{ width: 60 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>天的</span>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\tmax={23}\n\t\t\t\t\t\t\tvalue={monthHour}\n\t\t\t\t\t\t\tonChange={(e) => setMonthHour(Number(e.target.value))}\n\t\t\t\t\t\t\tclassName=\"rpc_cron_picker_input\"\n\t\t\t\t\t\t\tstyle={{ width: 60 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>时</span>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\tmax={59}\n\t\t\t\t\t\t\tvalue={monthMinute}\n\t\t\t\t\t\t\tonChange={(e) => setMonthMinute(Number(e.target.value))}\n\t\t\t\t\t\t\tclassName=\"rpc_cron_picker_input\"\n\t\t\t\t\t\t\tstyle={{ width: 60 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>分执行</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{period === 'custom' && (\n\t\t\t\t\t<div className=\"rpc_cron_picker_field_row\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tvalue={customCron}\n\t\t\t\t\t\t\tonChange={(e) => setCustomCron(e.target.value)}\n\t\t\t\t\t\t\tclassName=\"rpc_cron_picker_input\"\n\t\t\t\t\t\t\tstyle={{ width: '100%', fontFamily: 'monospace' }}\n\t\t\t\t\t\t\tplaceholder=\"例如: 0 0/15 * * * ?\"\n\t\t\t\t\t\t/>\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<div className=\"rpc_cron_picker_footer\">\n\t\t\t\t<div className=\"rpc_cron_picker_cron_badge\">\n\t\t\t\t\t<span>生成的 Cron:</span>\n\t\t\t\t\t<span className=\"rpc_cron_picker_cron_code\">{cron}</span>\n\t\t\t\t\t<CopyButton mode=\"icon\" text={cron} tooltip=\"复制 Cron 表达式\" />\n\t\t\t\t</div>\n\t\t\t\t<div className=\"rpc_cron_picker_human_desc\">\n\t\t\t\t\t<span>💡 周期人话解释:</span>\n\t\t\t\t\t<span>{desc}</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default CronPicker;\n","import React, { useState, useEffect, ReactNode, CSSProperties } from 'react';\nimport ReactDOM from 'react-dom';\nimport { CloseOutlined } from '../src/icons';\nimport './index.less';\n\nexport type TourPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface TourStep {\n\t/** 目标 DOM 节点选择器、DOM 对象或获取函数 */\n\ttarget: string | HTMLElement | (() => HTMLElement | null) | null;\n\t/** 引导步骤标题 */\n\ttitle: ReactNode;\n\t/** 引导步骤详细说明 */\n\tdescription: ReactNode;\n\t/** 气泡对齐方向,默认为 'bottom' */\n\tplacement?: TourPlacement;\n}\n\nexport interface GuidedTourProps {\n\t/** 引导步骤列表 */\n\tsteps: TourStep[];\n\t/** 是否开启引导 */\n\topen: boolean;\n\t/** 当前步数(受控,可选) */\n\tcurrent?: number;\n\t/** 步数改变回调 */\n\tonChange?: (current: number) => void;\n\t/** 关闭/跳过引导回调 */\n\tonClose?: () => void;\n\t/** 全部引导完成回调 */\n\tonFinish?: () => void;\n\t/** LocalStorage 存储已完成状态的 Key(若提供则完成或跳过后自动持久化记录) */\n\tstorageKey?: string;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst GuidedTour: React.FC<GuidedTourProps> = ({\n\tsteps = [],\n\topen,\n\tcurrent: controlledCurrent,\n\tonChange,\n\tonClose,\n\tonFinish,\n\tstorageKey,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalCurrent, setInternalCurrent] = useState<number>(0);\n\tconst currentStepIndex = controlledCurrent !== undefined ? controlledCurrent : internalCurrent;\n\n\tconst [targetRect, setTargetRect] = useState<DOMRect | null>(null);\n\n\t// 获取当前步骤的目标 DOM\n\tconst getTargetElement = (step: TourStep): HTMLElement | null => {\n\t\tif (!step || !step.target) return null;\n\t\tif (typeof step.target === 'function') {\n\t\t\treturn step.target();\n\t\t}\n\t\tif (typeof step.target === 'string') {\n\t\t\treturn document.querySelector(step.target);\n\t\t}\n\t\treturn step.target;\n\t};\n\n\t// 计算目标节点坐标\n\tuseEffect(() => {\n\t\tif (!open || steps.length === 0) return;\n\n\t\tconst currentStep = steps[currentStepIndex];\n\t\tif (!currentStep) return;\n\n\t\tconst el = getTargetElement(currentStep);\n\t\tif (el) {\n\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\tsetTargetRect(rect);\n\t\t\t// 自动平滑滚动到可见区域\n\t\t\tel.scrollIntoView({ behavior: 'smooth', block: 'center' });\n\t\t} else {\n\t\t\tsetTargetRect(null);\n\t\t}\n\t}, [open, steps, currentStepIndex]);\n\n\tif (!open || steps.length === 0) return null;\n\n\tconst currentStep = steps[currentStepIndex];\n\tif (!currentStep) return null;\n\n\tconst handleNext = () => {\n\t\tif (currentStepIndex < steps.length - 1) {\n\t\t\tconst next = currentStepIndex + 1;\n\t\t\tif (controlledCurrent === undefined) setInternalCurrent(next);\n\t\t\tonChange?.(next);\n\t\t} else {\n\t\t\tif (storageKey) localStorage.setItem(storageKey, 'true');\n\t\t\tonFinish?.();\n\t\t\tonClose?.();\n\t\t}\n\t};\n\n\tconst handlePrev = () => {\n\t\tif (currentStepIndex > 0) {\n\t\t\tconst prev = currentStepIndex - 1;\n\t\t\tif (controlledCurrent === undefined) setInternalCurrent(prev);\n\t\t\tonChange?.(prev);\n\t\t}\n\t};\n\n\tconst handleSkip = () => {\n\t\tif (storageKey) localStorage.setItem(storageKey, 'true');\n\t\tonClose?.();\n\t};\n\n\t// 气泡卡片定位计算\n\tlet popoverTop = 100;\n\tlet popoverLeft = 100;\n\n\tif (targetRect) {\n\t\tconst placement = currentStep.placement || 'bottom';\n\t\tconst padding = 12;\n\n\t\tif (placement === 'bottom') {\n\t\t\tpopoverTop = targetRect.bottom + padding;\n\t\t\tpopoverLeft = targetRect.left;\n\t\t} else if (placement === 'top') {\n\t\t\tpopoverTop = targetRect.top - 180 - padding;\n\t\t\tpopoverLeft = targetRect.left;\n\t\t} else if (placement === 'left') {\n\t\t\tpopoverTop = targetRect.top;\n\t\t\tpopoverLeft = targetRect.left - 320 - padding;\n\t\t} else if (placement === 'right') {\n\t\t\tpopoverTop = targetRect.top;\n\t\t\tpopoverLeft = targetRect.right + padding;\n\t\t}\n\n\t\t// 视口防溢出修正\n\t\tpopoverLeft = Math.max(16, Math.min(window.innerWidth - 340, popoverLeft));\n\t\tpopoverTop = Math.max(16, Math.min(window.innerHeight - 200, popoverTop));\n\t}\n\n\treturn ReactDOM.createPortal(\n\t\t<div className={`rpc_guided_tour ${className}`} style={style}>\n\t\t\t{/* 镂空高亮遮罩层 */}\n\t\t\t{targetRect && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"rpc_guided_tour_highlight_box\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tleft: `${targetRect.left - 4}px`,\n\t\t\t\t\t\ttop: `${targetRect.top - 4}px`,\n\t\t\t\t\t\twidth: `${targetRect.width + 8}px`,\n\t\t\t\t\t\theight: `${targetRect.height + 8}px`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{/* 引导卡片 */}\n\t\t\t<div\n\t\t\t\tclassName=\"rpc_guided_tour_popover\"\n\t\t\t\tstyle={{\n\t\t\t\t\tleft: `${popoverLeft}px`,\n\t\t\t\t\ttop: `${popoverTop}px`,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div className=\"rpc_guided_tour_header\">\n\t\t\t\t\t<span className=\"rpc_guided_tour_title\">{currentStep.title}</span>\n\t\t\t\t\t<CloseOutlined\n\t\t\t\t\t\tstyle={{ cursor: 'pointer', color: '#8c8c8c' }}\n\t\t\t\t\t\tonClick={handleSkip}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"rpc_guided_tour_description\">{currentStep.description}</div>\n\n\t\t\t\t<div className=\"rpc_guided_tour_footer\">\n\t\t\t\t\t<span className=\"rpc_guided_tour_progress\">\n\t\t\t\t\t\t{currentStepIndex + 1} / {steps.length}\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<div className=\"rpc_guided_tour_actions\">\n\t\t\t\t\t\t{currentStepIndex > 0 && (\n\t\t\t\t\t\t\t<button type=\"button\" className=\"rpc_guided_tour_btn\" onClick={handlePrev}>\n\t\t\t\t\t\t\t\t上一步\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"rpc_guided_tour_btn rpc_guided_tour_btn_primary\"\n\t\t\t\t\t\t\tonClick={handleNext}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{currentStepIndex === steps.length - 1 ? '完成' : '下一步'}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>,\n\t\tdocument.body,\n\t);\n};\n\nexport default GuidedTour;\n","import React, { useState, useEffect, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport type RangeValue = [number | undefined, number | undefined];\n\nexport interface RangeShortcut {\n\tlabel: string;\n\tvalue: RangeValue;\n}\n\nexport interface NumericRangeInputProps {\n\t/** 当前区间值 [min, max](受控) */\n\tvalue?: RangeValue;\n\t/** 默认区间值 */\n\tdefaultValue?: RangeValue;\n\t/** 区间改变回调 */\n\tonChange?: (range: RangeValue) => void;\n\t/** 允许输入的最小值 */\n\tmin?: number;\n\t/** 允许输入的最大值 */\n\tmax?: number;\n\t/** 步长,默认为 1 */\n\tstep?: number;\n\t/** 精度小数位数 */\n\tprecision?: number;\n\t/** 前缀标签(如 '¥') */\n\tprefix?: ReactNode;\n\t/** 后缀标签(如 '元') */\n\tsuffix?: ReactNode;\n\t/** 连接分隔符,默认为 '~' */\n\tseparator?: ReactNode;\n\t/** 快捷区间选项列表 */\n\tshortcuts?: RangeShortcut[];\n\t/** 是否禁用 */\n\tdisabled?: boolean;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst NumericRangeInput: React.FC<NumericRangeInputProps> = ({\n\tvalue: controlledValue,\n\tdefaultValue = [undefined, undefined],\n\tonChange,\n\tmin,\n\tmax,\n\tstep = 1,\n\tprecision,\n\tprefix,\n\tsuffix,\n\tseparator = '~',\n\tshortcuts,\n\tdisabled = false,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalVal, setInternalVal] = useState<RangeValue>(defaultValue);\n\tconst range = controlledValue !== undefined ? controlledValue : internalVal;\n\n\tconst [isFocused, setIsFocused] = useState<boolean>(false);\n\n\tconst isInvalid =\n\t\trange[0] !== undefined && range[1] !== undefined && range[0] > range[1];\n\n\tconst handleStartChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst val = e.target.value === '' ? undefined : Number(e.target.value);\n\t\tconst nextRange: RangeValue = [val, range[1]];\n\t\tif (controlledValue === undefined) setInternalVal(nextRange);\n\t\tonChange?.(nextRange);\n\t};\n\n\tconst handleEndChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst val = e.target.value === '' ? undefined : Number(e.target.value);\n\t\tconst nextRange: RangeValue = [range[0], val];\n\t\tif (controlledValue === undefined) setInternalVal(nextRange);\n\t\tonChange?.(nextRange);\n\t};\n\n\tconst handleShortcutClick = (scVal: RangeValue) => {\n\t\tif (disabled) return;\n\t\tif (controlledValue === undefined) setInternalVal(scVal);\n\t\tonChange?.(scVal);\n\t};\n\n\treturn (\n\t\t<div className={`rpc_numeric_range_input ${className}`} style={style}>\n\t\t\t<div\n\t\t\t\tclassName={`rpc_numeric_range_input_container ${\n\t\t\t\t\tisFocused ? 'rpc_numeric_range_input_container_focused' : ''\n\t\t\t\t} ${isInvalid ? 'rpc_numeric_range_input_container_error' : ''} ${\n\t\t\t\t\tdisabled ? 'rpc_numeric_range_input_container_disabled' : ''\n\t\t\t\t}`}\n\t\t\t>\n\t\t\t\t{prefix && <span className=\"rpc_numeric_range_input_prefix\">{prefix}</span>}\n\n\t\t\t\t<input\n\t\t\t\t\ttype=\"number\"\n\t\t\t\t\tvalue={range[0] !== undefined ? range[0] : ''}\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\tstep={step}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tplaceholder=\"最小值\"\n\t\t\t\t\tclassName=\"rpc_numeric_range_input_input\"\n\t\t\t\t\tonChange={handleStartChange}\n\t\t\t\t\tonFocus={() => setIsFocused(true)}\n\t\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\t/>\n\n\t\t\t\t<span className=\"rpc_numeric_range_input_separator\">{separator}</span>\n\n\t\t\t\t<input\n\t\t\t\t\ttype=\"number\"\n\t\t\t\t\tvalue={range[1] !== undefined ? range[1] : ''}\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\tstep={step}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tplaceholder=\"最大值\"\n\t\t\t\t\tclassName=\"rpc_numeric_range_input_input\"\n\t\t\t\t\tonChange={handleEndChange}\n\t\t\t\t\tonFocus={() => setIsFocused(true)}\n\t\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\t/>\n\n\t\t\t\t{suffix && <span className=\"rpc_numeric_range_input_suffix\">{suffix}</span>}\n\t\t\t</div>\n\n\t\t\t{/* 快捷区间预设 */}\n\t\t\t{shortcuts && shortcuts.length > 0 && (\n\t\t\t\t<div className=\"rpc_numeric_range_input_shortcuts\">\n\t\t\t\t\t{shortcuts.map((sc, idx) => (\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\tclassName=\"rpc_numeric_range_input_shortcut_item\"\n\t\t\t\t\t\t\tonClick={() => handleShortcutClick(sc.value)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{sc.label}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default NumericRangeInput;\n","import React, { ReactNode, CSSProperties } from 'react';\nimport CountUp from '../CountUp';\nimport './index.less';\n\nexport interface MetricCardProps {\n\t/** 卡片标题 */\n\ttitle: ReactNode;\n\t/** 指标数值(若是数字则自动平滑滚动) */\n\tvalue: number | string;\n\t/** 数值前缀(如 '¥') */\n\tprefix?: ReactNode;\n\t/** 数值后缀(如 '元' / '%') */\n\tsuffix?: ReactNode;\n\t/** 趋势方向:'up' 上升(绿色),'down' 下降(红色) */\n\ttrend?: 'up' | 'down';\n\t/** 趋势数值说明(如 '+18.5%' 或 '-3.2%') */\n\ttrendValue?: ReactNode;\n\t/** 趋势比较文本说明(如 '较上月') */\n\ttrendLabel?: ReactNode;\n\t/** 迷你折线图数据数组(如 [12, 18, 15, 26, 32, 40]) */\n\tchartData?: number[];\n\t/** 折线图颜色,默认为 '#1677ff' */\n\tchartColor?: string;\n\t/** 底部说明节点 */\n\tfooter?: ReactNode;\n\t/** 右上角额外操作节点 */\n\textra?: ReactNode;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\n// 自动生成 SVG Sparkline 迷你平滑路径\nfunction generateSparklinePath(data: number[], width: number = 200, height: number = 36) {\n\tif (!data || data.length < 2) return { linePath: '', fillPath: '' };\n\n\tconst min = Math.min(...data);\n\tconst max = Math.max(...data);\n\tconst range = max - min || 1;\n\n\tconst padding = 2;\n\tconst usableHeight = height - padding * 2;\n\n\tconst points = data.map((val, idx) => {\n\t\tconst x = (idx / (data.length - 1)) * width;\n\t\tconst y = height - padding - ((val - min) / range) * usableHeight;\n\t\treturn `${x.toFixed(1)},${y.toFixed(1)}`;\n\t});\n\n\tconst linePath = `M ${points.join(' L ')}`;\n\tconst fillPath = `M ${points[0]} L ${points.join(' L ')} L ${width},${height} L 0,${height} Z`;\n\n\treturn { linePath, fillPath };\n}\n\nconst MetricCard: React.FC<MetricCardProps> = ({\n\ttitle,\n\tvalue,\n\tprefix,\n\tsuffix,\n\ttrend,\n\ttrendValue,\n\ttrendLabel,\n\tchartData,\n\tchartColor = '#1677ff',\n\tfooter,\n\textra,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst isNumeric = typeof value === 'number';\n\tconst { linePath, fillPath } = chartData ? generateSparklinePath(chartData) : { linePath: '', fillPath: '' };\n\n\treturn (\n\t\t<div className={`rpc_metric_card ${className}`} style={style}>\n\t\t\t{/* 头部标题与操作 */}\n\t\t\t<div className=\"rpc_metric_card_header\">\n\t\t\t\t<span className=\"rpc_metric_card_title\">{title}</span>\n\t\t\t\t{extra && <div>{extra}</div>}\n\t\t\t</div>\n\n\t\t\t{/* 主体数值与趋势 */}\n\t\t\t<div className=\"rpc_metric_card_body\">\n\t\t\t\t<div className=\"rpc_metric_card_value_wrap\">\n\t\t\t\t\t{prefix && <span className=\"rpc_metric_card_prefix\">{prefix}</span>}\n\t\t\t\t\t<span className=\"rpc_metric_card_value\">\n\t\t\t\t\t\t{isNumeric ? <CountUp end={value as number} duration={1.2} /> : value}\n\t\t\t\t\t</span>\n\t\t\t\t\t{suffix && <span className=\"rpc_metric_card_suffix\">{suffix}</span>}\n\t\t\t\t</div>\n\n\t\t\t\t{trend && (\n\t\t\t\t\t<div className={`rpc_metric_card_trend rpc_metric_card_trend_${trend}`}>\n\t\t\t\t\t\t<span>{trend === 'up' ? '▲' : '▼'}</span>\n\t\t\t\t\t\t<span>{trendValue}</span>\n\t\t\t\t\t\t{trendLabel && <span style={{ color: '#8c8c8c', fontWeight: 400, marginLeft: 2 }}>{trendLabel}</span>}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* 微折线 Sparkline 图 */}\n\t\t\t{chartData && chartData.length > 1 && (\n\t\t\t\t<div className=\"rpc_metric_card_sparkline\">\n\t\t\t\t\t<svg width=\"100%\" height=\"100%\" viewBox=\"0 0 200 36\" preserveAspectRatio=\"none\">\n\t\t\t\t\t\t<defs>\n\t\t\t\t\t\t\t<linearGradient id={`grad-${chartColor}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n\t\t\t\t\t\t\t\t<stop offset=\"0%\" stopColor={chartColor} stopOpacity=\"0.25\" />\n\t\t\t\t\t\t\t\t<stop offset=\"100%\" stopColor={chartColor} stopOpacity=\"0\" />\n\t\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t\t</defs>\n\t\t\t\t\t\t<path d={fillPath} fill={`url(#grad-${chartColor})`} />\n\t\t\t\t\t\t<path d={linePath} fill=\"none\" stroke={chartColor} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* 底部备注 */}\n\t\t\t{footer && <div className=\"rpc_metric_card_footer\">{footer}</div>}\n\t\t</div>\n\t);\n};\n\nexport default MetricCard;\n","import React, { useState, useRef, useEffect, ReactNode, CSSProperties } from 'react';\nimport { PlayCircleOutlined, PauseCircleOutlined, DownloadOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface AudioPlayerProps {\n\t/** 音频资源地址 */\n\tsrc: string;\n\t/** 音频标题或文件名 */\n\ttitle?: ReactNode;\n\t/** 默认倍速,默认为 1 */\n\tdefaultPlaybackRate?: number;\n\t/** 是否显示下载按钮,默认为 true */\n\tshowDownload?: boolean;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nfunction formatTime(seconds: number): string {\n\tif (isNaN(seconds) || seconds < 0) return '00:00';\n\tconst m = Math.floor(seconds / 60);\n\tconst s = Math.floor(seconds % 60);\n\treturn `${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`;\n}\n\nconst speedOptions = [1.0, 1.25, 1.5, 2.0];\n\nconst AudioPlayer: React.FC<AudioPlayerProps> = ({\n\tsrc,\n\ttitle,\n\tdefaultPlaybackRate = 1.0,\n\tshowDownload = true,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst audioRef = useRef<HTMLAudioElement>(null);\n\tconst progressRef = useRef<HTMLDivElement>(null);\n\n\tconst [isPlaying, setIsPlaying] = useState<boolean>(false);\n\tconst [currentTime, setCurrentTime] = useState<number>(0);\n\tconst [duration, setDuration] = useState<number>(0);\n\tconst [speedIndex, setSpeedIndex] = useState<number>(\n\t\tMath.max(0, speedOptions.indexOf(defaultPlaybackRate)),\n\t);\n\n\tconst currentSpeed = speedOptions[speedIndex] || 1.0;\n\n\t// 播放 / 暂停切换\n\tconst togglePlay = () => {\n\t\tconst audio = audioRef.current;\n\t\tif (!audio) return;\n\t\tif (isPlaying) {\n\t\t\taudio.pause();\n\t\t\tsetIsPlaying(false);\n\t\t} else {\n\t\t\taudio.play();\n\t\t\tsetIsPlaying(true);\n\t\t}\n\t};\n\n\t// 监听时间更新\n\tconst handleTimeUpdate = () => {\n\t\tif (audioRef.current) {\n\t\t\tsetCurrentTime(audioRef.current.currentTime);\n\t\t}\n\t};\n\n\t// 监听时长加载\n\tconst handleLoadedMetadata = () => {\n\t\tif (audioRef.current) {\n\t\t\tsetDuration(audioRef.current.duration);\n\t\t}\n\t};\n\n\t// 切换倍速\n\tconst handleSpeedCycle = () => {\n\t\tconst nextIndex = (speedIndex + 1) % speedOptions.length;\n\t\tsetSpeedIndex(nextIndex);\n\t\tif (audioRef.current) {\n\t\t\taudioRef.current.playbackRate = speedOptions[nextIndex];\n\t\t}\n\t};\n\n\t// 拖拽进度条 Seek\n\tconst handleSeek = (e: React.MouseEvent<HTMLDivElement>) => {\n\t\tif (!progressRef.current || !audioRef.current || !duration) return;\n\t\tconst rect = progressRef.current.getBoundingClientRect();\n\t\tconst percent = Math.min(1, Math.max(0, (e.clientX - rect.left) / rect.width));\n\t\tconst targetTime = percent * duration;\n\t\taudioRef.current.currentTime = targetTime;\n\t\tsetCurrentTime(targetTime);\n\t};\n\n\tconst progressPercent = duration > 0 ? (currentTime / duration) * 100 : 0;\n\n\treturn (\n\t\t<div className={`rpc_audio_player ${className}`} style={style}>\n\t\t\t<audio\n\t\t\t\tref={audioRef}\n\t\t\t\tsrc={src}\n\t\t\t\tonTimeUpdate={handleTimeUpdate}\n\t\t\t\tonLoadedMetadata={handleLoadedMetadata}\n\t\t\t\tonEnded={() => setIsPlaying(false)}\n\t\t\t/>\n\n\t\t\t{/* 播放 / 暂停按钮 */}\n\t\t\t<div className=\"rpc_audio_player_play_btn\" onClick={togglePlay}>\n\t\t\t\t{isPlaying ? <PauseCircleOutlined /> : <PlayCircleOutlined />}\n\t\t\t</div>\n\n\t\t\t{/* 信息与进度条 */}\n\t\t\t<div className=\"rpc_audio_player_info\">\n\t\t\t\t<div className=\"rpc_audio_player_title_row\">\n\t\t\t\t\t<span className=\"rpc_audio_player_title\">{title || '音频播放'}</span>\n\t\t\t\t\t<span className=\"rpc_audio_player_time\">\n\t\t\t\t\t\t{formatTime(currentTime)} / {formatTime(duration)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\n\t\t\t\t<div ref={progressRef} className=\"rpc_audio_player_progress_bar\" onClick={handleSeek}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"rpc_audio_player_progress_fill\"\n\t\t\t\t\t\tstyle={{ width: `${progressPercent}%` }}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* 倍速与下载 */}\n\t\t\t<div className=\"rpc_audio_player_extra\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"rpc_audio_player_speed_btn\"\n\t\t\t\t\tonClick={handleSpeedCycle}\n\t\t\t\t\ttitle=\"点击切换播放倍速\"\n\t\t\t\t>\n\t\t\t\t\t{currentSpeed}x\n\t\t\t\t</button>\n\n\t\t\t\t{showDownload && (\n\t\t\t\t\t<a\n\t\t\t\t\t\thref={src}\n\t\t\t\t\t\tdownload\n\t\t\t\t\t\tclassName=\"rpc_audio_player_download_btn\"\n\t\t\t\t\t\ttitle=\"下载音频文件\"\n\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<DownloadOutlined />\n\t\t\t\t\t</a>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default AudioPlayer;\n","import React, { useRef, useEffect, ReactNode, CSSProperties } from 'react';\nimport { ReloadOutlined, LoadingOutlined } 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/** 中心嵌入的 Logo 图标地址 */\n\ticon?: string;\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/** 点击过期遮罩刷新时的回调 */\n\tonRefresh?: () => void;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\n// 简易轻量伪随机但确定性的二维码图案矩阵绘制算法(保证零外部大库)\nfunction drawQrCode(canvas: HTMLCanvasElement, text: string, size: number) {\n\tconst ctx = canvas.getContext('2d');\n\tif (!ctx) return;\n\n\tconst dpr = window.devicePixelRatio || 1;\n\tcanvas.width = size * dpr;\n\tcanvas.height = size * dpr;\n\tctx.scale(dpr, dpr);\n\n\tctx.fillStyle = '#ffffff';\n\tctx.fillRect(0, 0, size, size);\n\n\tconst modules = 25; // 25x25 矩阵\n\tconst cellSize = size / modules;\n\n\tctx.fillStyle = '#000000';\n\n\t// 绘制三个角的定位方块 (Position Detection Patterns)\n\tconst drawPositionPattern = (x: number, y: number) => {\n\t\t// 外 7x7\n\t\tctx.fillRect(x * cellSize, y * cellSize, 7 * cellSize, 7 * cellSize);\n\t\t// 中间挖空 5x5\n\t\tctx.fillStyle = '#ffffff';\n\t\tctx.fillRect((x + 1) * cellSize, (y + 1) * cellSize, 5 * cellSize, 5 * cellSize);\n\t\t// 中心实心 3x3\n\t\tctx.fillStyle = '#000000';\n\t\tctx.fillRect((x + 2) * cellSize, (y + 2) * cellSize, 3 * cellSize, 3 * cellSize);\n\t};\n\n\tdrawPositionPattern(0, 0);\n\tdrawPositionPattern(modules - 7, 0);\n\tdrawPositionPattern(0, modules - 7);\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) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst seed = (r * 31 + c * 17 + hash) % 100;\n\t\t\tif (Math.abs(seed) % 2 === 0) {\n\t\t\t\tctx.fillStyle = '#000000';\n\t\t\t\tctx.fillRect(c * cellSize, r * cellSize, cellSize - 0.2, cellSize - 0.2);\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst QrCodeCard: React.FC<QrCodeCardProps> = ({\n\tvalue,\n\tsize = 160,\n\ticon,\n\tstatus = 'active',\n\ttitle,\n\tdescription,\n\tdownloadable = false,\n\tonRefresh,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst canvasRef = useRef<HTMLCanvasElement>(null);\n\n\tuseEffect(() => {\n\t\tif (canvasRef.current && value) {\n\t\t\tdrawQrCode(canvasRef.current, value, size);\n\t\t}\n\t}, [value, size]);\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 className=\"rpc_qrcode_card_wrap\" style={{ width: size, height: size }}>\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 src={icon} alt=\"Logo\" className=\"rpc_qrcode_card_logo\" />\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\" onClick={onRefresh}>\n\t\t\t\t\t\t<span>二维码已失效</span>\n\t\t\t\t\t\t<button type=\"button\" className=\"rpc_qrcode_card_refresh_btn\">\n\t\t\t\t\t\t\t<ReloadOutlined />\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{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<LoadingOutlined style={{ fontSize: 28, color: '#1677ff' }} />\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 && <span className=\"rpc_qrcode_card_title\">{title}</span>}\n\t\t\t\t\t{description && <span className=\"rpc_qrcode_card_description\">{description}</span>}\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<span className=\"rpc_qrcode_card_download\" onClick={handleDownload}>\n\t\t\t\t\t下载二维码\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default QrCodeCard;\n","import React, { useState, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface ActivityItem {\n\t/** 唯一标识 */\n\tid: string | number;\n\t/** 操作人昵称 */\n\toperator: string;\n\t/** 操作人头像链接或文字 */\n\tavatar?: string;\n\t/** 操作人角色(如 '管理员' / '运维工程师') */\n\trole?: string;\n\t/** 动作类型描述(如 '发布了版本' / '修改了配置') */\n\taction: ReactNode;\n\t/** 操作目标(如 'v2.1.0' / 'RDS-MySQL-Master') */\n\ttarget?: ReactNode;\n\t/** 发生时间戳或文本(如 '3分钟前' / '2026-08-15 14:20') */\n\ttime: string;\n\t/** 变动详情内容(支持折叠展开) */\n\tdetail?: ReactNode;\n\t/** 是否默认展开详情,默认为 false */\n\tdefaultExpanded?: boolean;\n}\n\nexport interface ActivityLogProps {\n\t/** 日志动态列表 */\n\titems: ActivityItem[];\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst ActivityLogItem: React.FC<{ item: ActivityItem }> = ({ item }) => {\n\tconst [expanded, setExpanded] = useState<boolean>(Boolean(item.defaultExpanded));\n\n\tconst avatarInitial = item.operator ? item.operator.charAt(0).toUpperCase() : 'U';\n\n\treturn (\n\t\t<div className=\"rpc_activity_log_item\">\n\t\t\t{/* 头像与连接轴线 */}\n\t\t\t<div className=\"rpc_activity_log_avatar_col\">\n\t\t\t\t<div className=\"rpc_activity_log_avatar\">\n\t\t\t\t\t{item.avatar ? (\n\t\t\t\t\t\t<img src={item.avatar} alt={item.operator} />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<span>{avatarInitial}</span>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"rpc_activity_log_line\" />\n\t\t\t</div>\n\n\t\t\t{/* 内容主体 */}\n\t\t\t<div className=\"rpc_activity_log_content\">\n\t\t\t\t<div className=\"rpc_activity_log_header\">\n\t\t\t\t\t<div className=\"rpc_activity_log_operator_row\">\n\t\t\t\t\t\t<span className=\"rpc_activity_log_operator\">{item.operator}</span>\n\t\t\t\t\t\t{item.role && <span className=\"rpc_activity_log_role\">{item.role}</span>}\n\t\t\t\t\t\t<span className=\"rpc_activity_log_action\">{item.action}</span>\n\t\t\t\t\t\t{item.target && <span className=\"rpc_activity_log_target\">{item.target}</span>}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<span className=\"rpc_activity_log_time\">{item.time}</span>\n\t\t\t\t</div>\n\n\t\t\t\t{item.detail && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName=\"rpc_activity_log_toggle_btn\"\n\t\t\t\t\t\t\tonClick={() => setExpanded(!expanded)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{expanded ? '收起详情 ▲' : '查看变动详情 ▼'}\n\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t{expanded && <div className=\"rpc_activity_log_detail\">{item.detail}</div>}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nconst ActivityLog: React.FC<ActivityLogProps> = ({ items = [], className = '', style }) => {\n\treturn (\n\t\t<div className={`rpc_activity_log ${className}`} style={style}>\n\t\t\t{items.map((item) => (\n\t\t\t\t<ActivityLogItem key={item.id} item={item} />\n\t\t\t))}\n\t\t</div>\n\t);\n};\n\nexport default ActivityLog;\n","import React, { useState, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface DragSortListProps<T> {\n\t/** 数据列表 */\n\titems: T[];\n\t/** 拖拽排序完成后的新列表回调 */\n\tonReorder: (newItems: T[]) => 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/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nfunction DragSortList<T>({\n\titems,\n\tonReorder,\n\tkeyExtractor,\n\trenderItem,\n\tclassName = '',\n\tstyle,\n}: DragSortListProps<T>) {\n\tconst [draggingIndex, setDraggingIndex] = useState<number | null>(null);\n\tconst [dragOverIndex, setDragOverIndex] = useState<number | null>(null);\n\n\tconst handleDragStart = (index: number) => {\n\t\tsetDraggingIndex(index);\n\t};\n\n\tconst handleDragOver = (e: React.DragEvent, index: number) => {\n\t\te.preventDefault();\n\t\tif (dragOverIndex !== index) {\n\t\t\tsetDragOverIndex(index);\n\t\t}\n\t};\n\n\tconst handleDrop = (index: number) => {\n\t\tif (draggingIndex === null || draggingIndex === index) {\n\t\t\tsetDraggingIndex(null);\n\t\t\tsetDragOverIndex(null);\n\t\t\treturn;\n\t\t}\n\n\t\tconst newItems = [...items];\n\t\tconst [draggedItem] = newItems.splice(draggingIndex, 1);\n\t\tnewItems.splice(index, 0, draggedItem);\n\n\t\tsetDraggingIndex(null);\n\t\tsetDragOverIndex(null);\n\t\tonReorder(newItems);\n\t};\n\n\tconst handleDragEnd = () => {\n\t\tsetDraggingIndex(null);\n\t\tsetDragOverIndex(null);\n\t};\n\n\treturn (\n\t\t<div className={`rpc_drag_sort_list ${className}`} style={style}>\n\t\t\t{items.map((item, idx) => {\n\t\t\t\tconst key = keyExtractor(item, idx);\n\t\t\t\tconst isDragging = draggingIndex === idx;\n\t\t\t\tconst isOver = dragOverIndex === idx && draggingIndex !== idx;\n\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\tdraggable\n\t\t\t\t\t\tonDragStart={() => handleDragStart(idx)}\n\t\t\t\t\t\tonDragOver={(e) => handleDragOver(e, idx)}\n\t\t\t\t\t\tonDrop={() => handleDrop(idx)}\n\t\t\t\t\t\tonDragEnd={handleDragEnd}\n\t\t\t\t\t\tclassName={`rpc_drag_sort_list_item ${\n\t\t\t\t\t\t\tisDragging ? 'rpc_drag_sort_list_item_dragging' : ''\n\t\t\t\t\t\t} ${isOver ? 'rpc_drag_sort_list_item_over' : ''}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className=\"rpc_drag_sort_list_handle\">⋮⋮</span>\n\t\t\t\t\t\t<div style={{ flex: 1 }}>{renderItem(item, idx, isDragging)}</div>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n\nexport default DragSortList;\n","import React, { useState, useRef, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface TiltCardProps {\n\t/** 卡片子内容 */\n\tchildren: ReactNode;\n\t/** 最大倾斜旋转角度(度),默认为 15 */\n\tmaxAngle?: number;\n\t/** 鼠标悬停时的缩放比例,默认为 1.02 */\n\tscale?: number;\n\t/** 是否开启表面跟随高光(Glare),默认为 true */\n\tglare?: boolean;\n\t/** 透视景深(像素),默认为 1000 */\n\tperspective?: number;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst TiltCard: React.FC<TiltCardProps> = ({\n\tchildren,\n\tmaxAngle = 15,\n\tscale = 1.02,\n\tglare = true,\n\tperspective = 1000,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst cardRef = useRef<HTMLDivElement>(null);\n\tconst [transformStyle, setTransformStyle] = useState<string>('');\n\tconst [glareStyle, setGlareStyle] = useState<CSSProperties>({ opacity: 0 });\n\n\tconst handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n\t\tif (!cardRef.current) return;\n\t\tconst rect = cardRef.current.getBoundingClientRect();\n\n\t\tconst x = e.clientX - rect.left;\n\t\tconst y = e.clientY - rect.top;\n\n\t\tconst percentX = (x / rect.width) * 2 - 1; // -1 ~ 1\n\t\tconst percentY = (y / rect.height) * 2 - 1; // -1 ~ 1\n\n\t\tconst rotateX = -percentY * maxAngle;\n\t\tconst rotateY = percentX * maxAngle;\n\n\t\tsetTransformStyle(\n\t\t\t`perspective(${perspective}px) rotateX(${rotateX.toFixed(2)}deg) rotateY(${rotateY.toFixed(2)}deg) scale3d(${scale}, ${scale}, ${scale})`,\n\t\t);\n\n\t\tif (glare) {\n\t\t\tconst angle = Math.atan2(percentY, percentX) * (180 / Math.PI) - 90;\n\t\t\tsetGlareStyle({\n\t\t\t\topacity: 0.25,\n\t\t\t\tbackground: `linear-gradient(${angle}deg, rgba(255, 255, 255, 0.8) 0%, rgba(255, 255, 255, 0) 80%)`,\n\t\t\t});\n\t\t}\n\t};\n\n\tconst handleMouseLeave = () => {\n\t\tsetTransformStyle(`perspective(${perspective}px) rotateX(0deg) rotateY(0deg) scale3d(1, 1, 1)`);\n\t\tsetGlareStyle({ opacity: 0 });\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tref={cardRef}\n\t\t\tonMouseMove={handleMouseMove}\n\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\tclassName={`rpc_tilt_card ${className}`}\n\t\t\tstyle={{\n\t\t\t\ttransform: transformStyle,\n\t\t\t\t...style,\n\t\t\t}}\n\t\t>\n\t\t\t<div className=\"rpc_tilt_card_content\">{children}</div>\n\t\t\t{glare && <div className=\"rpc_tilt_card_glare\" style={glareStyle} />}\n\t\t</div>\n\t);\n};\n\nexport default TiltCard;\n","import React, { useState, useRef, useMemo, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface VirtualListProps<T> {\n\t/** 数据源数组 */\n\titems: T[];\n\t/** 单个列表项固定高度(像素),默认为 48 */\n\titemHeight?: number;\n\t/** 滚动容器可视高度(像素),默认为 360 */\n\theight?: number;\n\t/** 自定义渲染单个列表项 */\n\trenderItem: (item: T, index: number) => ReactNode;\n\t/** 提取唯一 Key */\n\tkeyExtractor?: (item: T, index: number) => string | number;\n\t/** 上下视口外额外渲染的缓冲项数量,默认为 5 */\n\tbuffer?: number;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nfunction VirtualList<T>({\n\titems = [],\n\titemHeight = 48,\n\theight = 360,\n\trenderItem,\n\tkeyExtractor,\n\tbuffer = 5,\n\tclassName = '',\n\tstyle,\n}: VirtualListProps<T>) {\n\tconst [scrollTop, setScrollTop] = useState<number>(0);\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\n\tconst totalCount = items.length;\n\tconst totalHeight = totalCount * itemHeight;\n\n\t// 计算当前可视区域的起止索引\n\tconst { startIndex, endIndex, offsetY } = useMemo(() => {\n\t\tconst start = Math.max(0, Math.floor(scrollTop / itemHeight) - buffer);\n\t\tconst visibleCount = Math.ceil(height / itemHeight);\n\t\tconst end = Math.min(totalCount, start + visibleCount + buffer * 2);\n\t\tconst offset = start * itemHeight;\n\n\t\treturn { startIndex: start, endIndex: end, offsetY: offset };\n\t}, [scrollTop, itemHeight, height, buffer, totalCount]);\n\n\tconst visibleItems = items.slice(startIndex, endIndex);\n\n\tconst handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n\t\tsetScrollTop(e.currentTarget.scrollTop);\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tonScroll={handleScroll}\n\t\t\tclassName={`rpc_virtual_list ${className}`}\n\t\t\tstyle={{ height, ...style }}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName=\"rpc_virtual_list_content\"\n\t\t\t\tstyle={{\n\t\t\t\t\theight: totalHeight,\n\t\t\t\t\tpaddingTop: offsetY,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{visibleItems.map((item, idx) => {\n\t\t\t\t\tconst actualIndex = startIndex + idx;\n\t\t\t\t\tconst key = keyExtractor ? keyExtractor(item, actualIndex) : actualIndex;\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\tclassName=\"rpc_virtual_list_item\"\n\t\t\t\t\t\t\tstyle={{ height: itemHeight }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{renderItem(item, actualIndex)}\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\t\t</div>\n\t);\n}\n\nexport default VirtualList;\n","import React, { useRef, useEffect, useCallback, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface WatermarkProps {\n\t/** 水印文本内容或多行文本数组 */\n\tcontent: string | string[];\n\t/** 子元素内容 */\n\tchildren?: ReactNode;\n\t/** 水印旋转角度,默认为 -22 */\n\trotate?: number;\n\t/** 字体大小(像素),默认为 14 */\n\tfontSize?: number;\n\t/** 水印颜色,默认为 'rgba(0, 0, 0, 0.12)' */\n\tcolor?: string;\n\t/** 单个水印单元宽度,默认为 240 */\n\twidth?: number;\n\t/** 单个水印单元高度,默认为 160 */\n\theight?: number;\n\t/** 水印层级 zIndex,默认为 9999 */\n\tzIndex?: number;\n\t/** 是否开启 MutationObserver 与心跳巡检防审查元素篡改,默认为 true */\n\tantiTamper?: boolean;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\n/** 生成 Canvas 水印平铺 Base64 图片 */\nfunction generateWatermarkBase64(\n\tcontent: string | string[],\n\twidth: number,\n\theight: number,\n\trotate: number,\n\tfontSize: number,\n\tcolor: string,\n): string {\n\tif (typeof document === 'undefined') return '';\n\tconst canvas = document.createElement('canvas');\n\tcanvas.width = width;\n\tcanvas.height = height;\n\n\tconst ctx = canvas.getContext('2d');\n\tif (!ctx) return '';\n\n\tctx.translate(width / 2, height / 2);\n\tctx.rotate((rotate * Math.PI) / 180);\n\tctx.font = `${fontSize}px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif`;\n\tctx.fillStyle = color;\n\tctx.textAlign = 'center';\n\tctx.textBaseline = 'middle';\n\n\tconst lines = Array.isArray(content) ? content : [content];\n\tconst lineHeight = fontSize * 1.5;\n\tconst startY = -((lines.length - 1) * lineHeight) / 2;\n\n\tlines.forEach((line, idx) => {\n\t\tctx.fillText(line, 0, startY + idx * lineHeight);\n\t});\n\n\treturn canvas.toDataURL('image/png');\n}\n\n/** 获取完整的水印行内样式 CSS 文本 */\nfunction getWatermarkCssText(url: string, zIndex: number): string {\n\treturn `\n\t\tposition: absolute !important;\n\t\ttop: 0px !important;\n\t\tleft: 0px !important;\n\t\tright: 0px !important;\n\t\tbottom: 0px !important;\n\t\twidth: 100% !important;\n\t\theight: 100% !important;\n\t\tpointer-events: none !important;\n\t\tbackground-repeat: repeat !important;\n\t\tbackground-image: url(\"${url}\") !important;\n\t\tz-index: ${zIndex} !important;\n\t\tdisplay: block !important;\n\t\tvisibility: visible !important;\n\t\topacity: 1 !important;\n\t\ttransform: none !important;\n\t\tfilter: none !important;\n\t\tclip-path: none !important;\n\t`.replace(/\\s+/g, ' ').trim();\n}\n\n/** 创建全新的原生水印 DOM 节点(脱离 React 虚拟 DOM 控制,防止 DevTools 删除节点时引发 React Crash) */\nfunction createWatermarkElement(url: string, zIndex: number): HTMLDivElement {\n\tconst el = document.createElement('div');\n\tel.className = 'rpc_watermark_layer';\n\tel.style.cssText = getWatermarkCssText(url, zIndex);\n\treturn el;\n}\n\n/** 深度检查水印元素在当前真实 DOM 树中的有效性与样式完整性 */\nfunction checkWatermarkIntegrity(\n\twatermarkEl: HTMLElement | null,\n\twrapperEl: HTMLElement | null,\n\texpectedUrl: string,\n): boolean {\n\tif (!watermarkEl || !wrapperEl) return false;\n\tif (!wrapperEl.contains(watermarkEl)) return false;\n\n\t// 检查内联样式\n\tconst styleAttr = watermarkEl.getAttribute('style') || '';\n\tif (!styleAttr.includes(expectedUrl)) return false;\n\n\t// 检查真实的最终计算样式 ComputedStyle(防止在 DevTools Styles 面板取消勾选属性)\n\ttry {\n\t\tconst computed = window.getComputedStyle(watermarkEl);\n\t\tif (\n\t\t\tcomputed.display === 'none' ||\n\t\t\tcomputed.visibility === 'hidden' ||\n\t\t\tNumber(computed.opacity) < 0.1 ||\n\t\t\tcomputed.backgroundImage === 'none' ||\n\t\t\t!computed.backgroundImage.includes('data:image') ||\n\t\t\twatermarkEl.offsetWidth === 0 ||\n\t\t\twatermarkEl.offsetHeight === 0\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t} catch {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nconst Watermark: React.FC<WatermarkProps> = ({\n\tcontent,\n\tchildren,\n\trotate = -22,\n\tfontSize = 14,\n\tcolor = 'rgba(0, 0, 0, 0.12)',\n\twidth = 240,\n\theight = 160,\n\tzIndex = 9999,\n\tantiTamper = true,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst wrapperRef = useRef<HTMLDivElement>(null);\n\t// 使用原生 DOM 引用,脱离 React Virtual DOM 的 Diff 追踪\n\tconst watermarkNodeRef = useRef<HTMLDivElement | null>(null);\n\tconst watermarkUrlRef = useRef<string>('');\n\n\t// 重新生成水印 Base64\n\tconst watermarkUrl = generateWatermarkBase64(content, width, height, rotate, fontSize, color);\n\twatermarkUrlRef.current = watermarkUrl;\n\n\t// 原生挂载或重建水印\n\tconst mountOrRestoreWatermark = useCallback(() => {\n\t\tconst wrapper = wrapperRef.current;\n\t\tconst currentUrl = watermarkUrlRef.current;\n\t\tif (!wrapper || !currentUrl) return;\n\n\t\t// 检查当前节点是否存在且完整\n\t\tif (watermarkNodeRef.current && wrapper.contains(watermarkNodeRef.current)) {\n\t\t\t// 如果仅样式被篡改,直接重设行内 style\n\t\t\twatermarkNodeRef.current.style.cssText = getWatermarkCssText(currentUrl, zIndex);\n\t\t\t// 再次检查计算样式,如果依然有效则无需重新创建节点\n\t\t\tif (checkWatermarkIntegrity(watermarkNodeRef.current, wrapper, currentUrl)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// 否则移除旧的异常节点\n\t\t\ttry {\n\t\t\t\twrapper.removeChild(watermarkNodeRef.current);\n\t\t\t} catch {\n\t\t\t\t// ignore\n\t\t\t}\n\t\t}\n\n\t\t// 创建并追加全新原生水印节点\n\t\tconst newWatermarkEl = createWatermarkElement(currentUrl, zIndex);\n\t\twrapper.appendChild(newWatermarkEl);\n\t\twatermarkNodeRef.current = newWatermarkEl;\n\t}, [zIndex]);\n\n\t// 组件挂载或参数更新时初始化水印\n\tuseEffect(() => {\n\t\tmountOrRestoreWatermark();\n\t\treturn () => {\n\t\t\tif (watermarkNodeRef.current && wrapperRef.current) {\n\t\t\t\ttry {\n\t\t\t\t\tif (wrapperRef.current.contains(watermarkNodeRef.current)) {\n\t\t\t\t\t\twrapperRef.current.removeChild(watermarkNodeRef.current);\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// ignore\n\t\t\t\t}\n\t\t\t\twatermarkNodeRef.current = null;\n\t\t\t}\n\t\t};\n\t}, [mountOrRestoreWatermark]);\n\n\t// 核心防篡改守护引擎:MutationObserver 毫秒级监听 + 定时心跳自愈\n\tuseEffect(() => {\n\t\tif (!antiTamper || !wrapperRef.current) return;\n\n\t\tconst wrapper = wrapperRef.current;\n\n\t\tconst verifyAndSelfHeal = () => {\n\t\t\tconst currentUrl = watermarkUrlRef.current;\n\t\t\tif (!currentUrl) return;\n\n\t\t\tconst isValid = checkWatermarkIntegrity(watermarkNodeRef.current, wrapper, currentUrl);\n\t\t\tif (!isValid) {\n\t\t\t\tmountOrRestoreWatermark();\n\t\t\t}\n\t\t};\n\n\t\t// 1. MutationObserver 监听任何 DOM 节点移除、替换或属性变动\n\t\tconst observer = new MutationObserver((mutations) => {\n\t\t\tfor (const mutation of mutations) {\n\t\t\t\t// 子节点被删除(包括 F12 Elements 面板按 Delete 直接删除水印 DOM)\n\t\t\t\tif (mutation.type === 'childList') {\n\t\t\t\t\tconst isRemoved = Array.from(mutation.removedNodes).some(\n\t\t\t\t\t\t(node) => node === watermarkNodeRef.current,\n\t\t\t\t\t);\n\t\t\t\t\tif (isRemoved || !wrapper.contains(watermarkNodeRef.current)) {\n\t\t\t\t\t\tmountOrRestoreWatermark();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// 属性被修改(包括 F12 Styles 面板取消勾选属性、修改 class 或 style)\n\t\t\t\tif (mutation.type === 'attributes') {\n\t\t\t\t\tverifyAndSelfHeal();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tobserver.observe(wrapper, {\n\t\t\tattributes: true,\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t\tattributeFilter: ['style', 'class', 'hidden', 'id', 'dir', 'aria-hidden'],\n\t\t});\n\n\t\t// 2. 心跳自检(防止断点或特殊篡改)\n\t\tconst timer = setInterval(() => {\n\t\t\tverifyAndSelfHeal();\n\t\t}, 400);\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t\tclearInterval(timer);\n\t\t};\n\t}, [antiTamper, mountOrRestoreWatermark]);\n\n\treturn (\n\t\t<div\n\t\t\tref={wrapperRef}\n\t\t\tclassName={`rpc_watermark_wrapper ${className}`}\n\t\t\tstyle={{ position: 'relative', ...style }}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n\nexport default Watermark;\n","import React, { useState, useRef, useEffect, ReactNode, CSSProperties } from 'react';\nimport {\n\tPlayCircleOutlined,\n\tPauseCircleOutlined,\n\tFullscreenOutlined,\n\tFullscreenExitOutlined,\n\tSoundOutlined,\n} from '../src/icons';\nimport './index.less';\n\nexport interface VideoPlayerProps {\n\t/** 视频播放地址 */\n\tsrc: string;\n\t/** 视频封面图 */\n\tposter?: string;\n\t/** 是否自动播放,默认为 false */\n\tautoPlay?: boolean;\n\t/** 是否循环播放,默认为 false */\n\tloop?: boolean;\n\t/** 是否默认静音,默认为 false */\n\tmuted?: boolean;\n\t/** 宽度,默认为 640 */\n\twidth?: number | string;\n\t/** 高度,默认为 360 */\n\theight?: number | string;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nfunction formatVideoTime(seconds: number): string {\n\tif (isNaN(seconds) || seconds < 0) return '00:00';\n\tconst m = Math.floor(seconds / 60);\n\tconst s = Math.floor(seconds % 60);\n\treturn `${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`;\n}\n\nconst speedList = [0.75, 1.0, 1.25, 1.5, 2.0];\n\nconst VideoPlayer: React.FC<VideoPlayerProps> = ({\n\tsrc,\n\tposter,\n\tautoPlay = false,\n\tloop = false,\n\tmuted = false,\n\twidth = 640,\n\theight = 360,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst videoRef = useRef<HTMLVideoElement>(null);\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst progressRef = useRef<HTMLDivElement>(null);\n\n\tconst [isPlaying, setIsPlaying] = useState<boolean>(false);\n\tconst [currentTime, setCurrentTime] = useState<number>(0);\n\tconst [duration, setDuration] = useState<number>(0);\n\tconst [speedIndex, setSpeedIndex] = useState<number>(1); // 1.0x\n\tconst [isControlsVisible, setIsControlsVisible] = useState<boolean>(true);\n\tconst [isFullscreen, setIsFullscreen] = useState<boolean>(false);\n\n\tconst hideTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n\tconst currentSpeed = speedList[speedIndex] || 1.0;\n\n\tconst togglePlay = () => {\n\t\tconst video = videoRef.current;\n\t\tif (!video) return;\n\t\tif (isPlaying) {\n\t\t\tvideo.pause();\n\t\t\tsetIsPlaying(false);\n\t\t} else {\n\t\t\tvideo.play();\n\t\t\tsetIsPlaying(true);\n\t\t}\n\t};\n\n\tconst seekBy = (seconds: number) => {\n\t\tconst video = videoRef.current;\n\t\tif (!video) return;\n\t\tvideo.currentTime = Math.max(0, Math.min(duration, video.currentTime + seconds));\n\t};\n\n\tconst handleTimeUpdate = () => {\n\t\tif (videoRef.current) {\n\t\t\tsetCurrentTime(videoRef.current.currentTime);\n\t\t}\n\t};\n\n\tconst handleLoadedMetadata = () => {\n\t\tif (videoRef.current) {\n\t\t\tsetDuration(videoRef.current.duration);\n\t\t}\n\t};\n\n\tconst handleProgressClick = (e: React.MouseEvent<HTMLDivElement>) => {\n\t\tif (!progressRef.current || !videoRef.current || !duration) return;\n\t\tconst rect = progressRef.current.getBoundingClientRect();\n\t\tconst percent = Math.min(1, Math.max(0, (e.clientX - rect.left) / rect.width));\n\t\tconst target = percent * duration;\n\t\tvideoRef.current.currentTime = target;\n\t\tsetCurrentTime(target);\n\t};\n\n\tconst handleSpeedChange = () => {\n\t\tconst next = (speedIndex + 1) % speedList.length;\n\t\tsetSpeedIndex(next);\n\t\tif (videoRef.current) {\n\t\t\tvideoRef.current.playbackRate = speedList[next];\n\t\t}\n\t};\n\n\tconst toggleFullscreen = () => {\n\t\tconst container = containerRef.current;\n\t\tif (!container) return;\n\n\t\tif (!document.fullscreenElement) {\n\t\t\tcontainer.requestFullscreen?.();\n\t\t\tsetIsFullscreen(true);\n\t\t} else {\n\t\t\tdocument.exitFullscreen?.();\n\t\t\tsetIsFullscreen(false);\n\t\t}\n\t};\n\n\tconst togglePiP = async () => {\n\t\tconst video = videoRef.current;\n\t\tif (!video) return;\n\t\tif (document.pictureInPictureElement) {\n\t\t\tawait document.exitPictureInPicture();\n\t\t} else if (document.pictureInPictureEnabled) {\n\t\t\tawait video.requestPictureInPicture();\n\t\t}\n\t};\n\n\tconst showControls = () => {\n\t\tsetIsControlsVisible(true);\n\t\tif (hideTimerRef.current) clearTimeout(hideTimerRef.current);\n\t\thideTimerRef.current = setTimeout(() => {\n\t\t\tif (isPlaying) {\n\t\t\t\tsetIsControlsVisible(false);\n\t\t\t}\n\t\t}, 3000);\n\t};\n\n\tconst progressPercent = duration > 0 ? (currentTime / duration) * 100 : 0;\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tonMouseMove={showControls}\n\t\t\tonMouseEnter={showControls}\n\t\t\tonMouseLeave={() => isPlaying && setIsControlsVisible(false)}\n\t\t\tclassName={`rpc_video_player ${className}`}\n\t\t\tstyle={{ width, height, ...style }}\n\t\t>\n\t\t\t<video\n\t\t\t\tref={videoRef}\n\t\t\t\tsrc={src}\n\t\t\t\tposter={poster}\n\t\t\t\tautoPlay={autoPlay}\n\t\t\t\tloop={loop}\n\t\t\t\tmuted={muted}\n\t\t\t\tonClick={togglePlay}\n\t\t\t\tonTimeUpdate={handleTimeUpdate}\n\t\t\t\tonLoadedMetadata={handleLoadedMetadata}\n\t\t\t\tonEnded={() => setIsPlaying(false)}\n\t\t\t\tclassName=\"rpc_video_player_video\"\n\t\t\t/>\n\n\t\t\t{/* 中央大播放按钮(暂停时展示) */}\n\t\t\t{!isPlaying && (\n\t\t\t\t<div className=\"rpc_video_player_big_play_btn\" onClick={togglePlay}>\n\t\t\t\t\t▶\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* 底部控制条 */}\n\t\t\t<div\n\t\t\t\tclassName={`rpc_video_player_controls ${\n\t\t\t\t\t!isControlsVisible && isPlaying ? 'rpc_video_player_controls_hidden' : ''\n\t\t\t\t}`}\n\t\t\t>\n\t\t\t\t{/* 进度条 */}\n\t\t\t\t<div\n\t\t\t\t\tref={progressRef}\n\t\t\t\t\tclassName=\"rpc_video_player_progress_wrap\"\n\t\t\t\t\tonClick={handleProgressClick}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"rpc_video_player_progress_fill\"\n\t\t\t\t\t\tstyle={{ width: `${progressPercent}%` }}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"rpc_video_player_bar_row\">\n\t\t\t\t\t<div className=\"rpc_video_player_left_btns\">\n\t\t\t\t\t\t<button type=\"button\" className=\"rpc_video_player_btn\" onClick={togglePlay}>\n\t\t\t\t\t\t\t{isPlaying ? <PauseCircleOutlined /> : <PlayCircleOutlined />}\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"rpc_video_player_btn\"\n\t\t\t\t\t\t\tonClick={() => seekBy(-10)}\n\t\t\t\t\t\t\ttitle=\"快退 10 秒\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t⏪ 10s\n\t\t\t\t\t\t</button>\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_video_player_btn\"\n\t\t\t\t\t\t\tonClick={() => seekBy(10)}\n\t\t\t\t\t\t\ttitle=\"快进 10 秒\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t10s ⏩\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t<span className=\"rpc_video_player_time\">\n\t\t\t\t\t\t\t{formatVideoTime(currentTime)} / {formatVideoTime(duration)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"rpc_video_player_right_btns\">\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_video_player_btn rpc_video_player_speed_btn\"\n\t\t\t\t\t\t\tonClick={handleSpeedChange}\n\t\t\t\t\t\t\ttitle=\"播放倍速\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{currentSpeed}x\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"rpc_video_player_btn\"\n\t\t\t\t\t\t\tonClick={togglePiP}\n\t\t\t\t\t\t\ttitle=\"画中画模式\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t🪟\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"rpc_video_player_btn\"\n\t\t\t\t\t\t\tonClick={toggleFullscreen}\n\t\t\t\t\t\t\ttitle=\"全屏切换\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isFullscreen ? <FullscreenExitOutlined /> : <FullscreenOutlined />}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default VideoPlayer;\n","import React, { useState, ReactNode, CSSProperties } from 'react';\nimport { ZoomInOutlined, ZoomOutOutlined, RotateRightOutlined, DownloadOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface PdfViewerProps {\n\t/** PDF 文件 URL 地址 */\n\tsrc: string;\n\t/** 文档标题 */\n\ttitle?: ReactNode;\n\t/** 宽度,默认为 '100%' */\n\twidth?: number | string;\n\t/** 高度,默认为 500 */\n\theight?: number | string;\n\t/** 是否显示下载按钮,默认为 true */\n\tshowDownload?: boolean;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst PdfViewer: React.FC<PdfViewerProps> = ({\n\tsrc,\n\ttitle = 'PDF Document Preview',\n\twidth = '100%',\n\theight = 500,\n\tshowDownload = true,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [zoom, setZoom] = useState<number>(100);\n\tconst [rotation, setRotation] = useState<number>(0);\n\n\tconst handleZoomIn = () => {\n\t\tsetZoom((prev) => Math.min(200, prev + 15));\n\t};\n\n\tconst handleZoomOut = () => {\n\t\tsetZoom((prev) => Math.max(50, prev - 15));\n\t};\n\n\tconst handleRotate = () => {\n\t\tsetRotation((prev) => (prev + 90) % 360);\n\t};\n\n\treturn (\n\t\t<div className={`rpc_pdf_viewer ${className}`} style={{ width, height, ...style }}>\n\t\t\t{/* 顶部工具栏 */}\n\t\t\t<div className=\"rpc_pdf_viewer_toolbar\">\n\t\t\t\t<span className=\"rpc_pdf_viewer_title\">{title}</span>\n\n\t\t\t\t<div className=\"rpc_pdf_viewer_actions\">\n\t\t\t\t\t<button type=\"button\" className=\"rpc_pdf_viewer_btn\" onClick={handleZoomOut} title=\"缩小\">\n\t\t\t\t\t\t<ZoomOutOutlined />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<span style={{ fontSize: 12, minWidth: 40, textAlign: 'center' }}>{zoom}%</span>\n\n\t\t\t\t\t<button type=\"button\" className=\"rpc_pdf_viewer_btn\" onClick={handleZoomIn} title=\"放大\">\n\t\t\t\t\t\t<ZoomInOutlined />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<button type=\"button\" className=\"rpc_pdf_viewer_btn\" onClick={handleRotate} title=\"顺时针旋转 90°\">\n\t\t\t\t\t\t<RotateRightOutlined />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t{showDownload && (\n\t\t\t\t\t\t<a href={src} download className=\"rpc_pdf_viewer_btn\" title=\"下载 PDF\">\n\t\t\t\t\t\t\t<DownloadOutlined />\n\t\t\t\t\t\t\t<span>下载</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* PDF 内容嵌入容器 */}\n\t\t\t<div className=\"rpc_pdf_viewer_body\">\n\t\t\t\t<iframe\n\t\t\t\t\tsrc={`${src}#toolbar=0&navpanes=0`}\n\t\t\t\t\ttitle=\"PDF Preview Frame\"\n\t\t\t\t\tclassName=\"rpc_pdf_viewer_frame\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\ttransform: `scale(${zoom / 100}) rotate(${rotation}deg)`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default PdfViewer;\n","import React, { ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport type RibbonPlacement = 'start' | 'end';\n\nexport interface BadgeRibbonProps {\n\t/** 缎带文字内容 */\n\ttext: ReactNode;\n\t/** 缎带背景颜色,默认为 '#ff4d4f' */\n\tcolor?: string;\n\t/** 挂载位置:'start' 左上角,'end' 右上角,默认为 'end' */\n\tplacement?: RibbonPlacement;\n\t/** 被包裹的卡片子元素 */\n\tchildren: ReactNode;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst BadgeRibbon: React.FC<BadgeRibbonProps> = ({\n\ttext,\n\tcolor = '#ff4d4f',\n\tplacement = 'end',\n\tchildren,\n\tclassName = '',\n\tstyle,\n}) => {\n\treturn (\n\t\t<div className={`rpc_badge_ribbon_wrapper ${className}`} style={style}>\n\t\t\t{children}\n\t\t\t<div\n\t\t\t\tclassName={`rpc_badge_ribbon rpc_badge_ribbon_${placement}`}\n\t\t\t\tstyle={{ background: color }}\n\t\t\t>\n\t\t\t\t{text}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default BadgeRibbon;\n","import React, { ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport type SkeletonType = 'text' | 'card' | 'list' | 'avatar';\n\nexport interface ShimmerSkeletonProps {\n\t/** 骨架类型:'text' 文本,'card' 卡片,'list' 列表,'avatar' 头像,默认为 'card' */\n\ttype?: SkeletonType;\n\t/** 文本骨架行数,默认为 3 */\n\trows?: number;\n\t/** 是否处于加载中状态,为 false 时渲染 children,默认为 true */\n\tloading?: boolean;\n\t/** 加载完成后的子元素内容 */\n\tchildren?: ReactNode;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst ShimmerSkeleton: React.FC<ShimmerSkeletonProps> = ({\n\ttype = 'card',\n\trows = 3,\n\tloading = true,\n\tchildren,\n\tclassName = '',\n\tstyle,\n}) => {\n\tif (!loading && children) {\n\t\treturn <>{children}</>;\n\t}\n\n\treturn (\n\t\t<div className={`rpc_shimmer_skeleton ${className}`} style={style}>\n\t\t\t{type === 'avatar' && <div className=\"rpc_shimmer_skeleton_avatar\" />}\n\n\t\t\t{type === 'text' && (\n\t\t\t\t<div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>\n\t\t\t\t\t{Array.from({ length: rows }).map((_, i) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\tclassName=\"rpc_shimmer_skeleton_bar\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\theight: 16,\n\t\t\t\t\t\t\t\twidth: i === rows - 1 ? '60%' : '100%',\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{type === 'card' && (\n\t\t\t\t<div className=\"rpc_shimmer_skeleton_card\">\n\t\t\t\t\t<div className=\"rpc_shimmer_skeleton_bar\" style={{ height: 160, width: '100%' }} />\n\t\t\t\t\t<div className=\"rpc_shimmer_skeleton_bar\" style={{ height: 20, width: '70%' }} />\n\t\t\t\t\t<div className=\"rpc_shimmer_skeleton_bar\" style={{ height: 14, width: '90%' }} />\n\t\t\t\t\t<div className=\"rpc_shimmer_skeleton_bar\" style={{ height: 14, width: '40%' }} />\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{type === 'list' && (\n\t\t\t\t<div style={{ display: 'flex', flexDirection: 'column' }}>\n\t\t\t\t\t{Array.from({ length: rows }).map((_, i) => (\n\t\t\t\t\t\t<div key={i} className=\"rpc_shimmer_skeleton_list_item\">\n\t\t\t\t\t\t\t<div className=\"rpc_shimmer_skeleton_avatar\" style={{ width: 40, height: 40 }} />\n\t\t\t\t\t\t\t<div style={{ flex: 1, display: 'flex', flexDirection: 'column', gap: 8 }}>\n\t\t\t\t\t\t\t\t<div className=\"rpc_shimmer_skeleton_bar\" style={{ height: 16, width: '50%' }} />\n\t\t\t\t\t\t\t\t<div className=\"rpc_shimmer_skeleton_bar\" style={{ height: 12, width: '80%' }} />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default ShimmerSkeleton;\n","import React, { useState, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport type FlipTrigger = 'hover' | 'click';\nexport type FlipDirection = 'horizontal' | 'vertical';\n\nexport interface FlipCardProps {\n\t/** 卡片正面内容 */\n\tfront: ReactNode;\n\t/** 卡片背面内容 */\n\tback: ReactNode;\n\t/** 触发翻转方式:'hover' 悬停,'click' 点击,默认为 'hover' */\n\ttrigger?: FlipTrigger;\n\t/** 翻转方向:'horizontal' 水平,'vertical' 垂直,默认为 'horizontal' */\n\tdirection?: FlipDirection;\n\t/** 当前是否翻转到背面(受控) */\n\tflipped?: boolean;\n\t/** 翻转状态改变回调 */\n\tonFlip?: (isFlipped: boolean) => void;\n\t/** 宽度,默认为 300 */\n\twidth?: number | string;\n\t/** 高度,默认为 200 */\n\theight?: number | string;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst FlipCard: React.FC<FlipCardProps> = ({\n\tfront,\n\tback,\n\ttrigger = 'hover',\n\tdirection = 'horizontal',\n\tflipped: controlledFlipped,\n\tonFlip,\n\twidth = 300,\n\theight = 200,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalFlipped, setInternalFlipped] = useState<boolean>(false);\n\tconst isFlipped = controlledFlipped !== undefined ? controlledFlipped : internalFlipped;\n\n\tconst handleMouseEnter = () => {\n\t\tif (trigger === 'hover') {\n\t\t\tif (controlledFlipped === undefined) setInternalFlipped(true);\n\t\t\tonFlip?.(true);\n\t\t}\n\t};\n\n\tconst handleMouseLeave = () => {\n\t\tif (trigger === 'hover') {\n\t\t\tif (controlledFlipped === undefined) setInternalFlipped(false);\n\t\t\tonFlip?.(false);\n\t\t}\n\t};\n\n\tconst handleClick = () => {\n\t\tif (trigger === 'click') {\n\t\t\tconst next = !isFlipped;\n\t\t\tif (controlledFlipped === undefined) setInternalFlipped(next);\n\t\t\tonFlip?.(next);\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`rpc_flip_card ${className}`}\n\t\t\tstyle={{ width, height, ...style }}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\tonClick={handleClick}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={`rpc_flip_card_inner ${\n\t\t\t\t\tisFlipped\n\t\t\t\t\t\t? direction === 'vertical'\n\t\t\t\t\t\t\t? 'rpc_flip_card_flipped_vertical'\n\t\t\t\t\t\t\t: 'rpc_flip_card_flipped_horizontal'\n\t\t\t\t\t\t: ''\n\t\t\t\t}`}\n\t\t\t>\n\t\t\t\t<div className=\"rpc_flip_card_front\">{front}</div>\n\t\t\t\t<div\n\t\t\t\t\tclassName={`rpc_flip_card_back ${\n\t\t\t\t\t\tdirection === 'vertical'\n\t\t\t\t\t\t\t? 'rpc_flip_card_back_vertical'\n\t\t\t\t\t\t\t: 'rpc_flip_card_back_horizontal'\n\t\t\t\t\t}`}\n\t\t\t\t>\n\t\t\t\t\t{back}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default FlipCard;\n","import React, { useState, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface KanbanColumn<T> {\n\tid: string;\n\ttitle: string;\n\tcolor?: string;\n\titems: T[];\n}\n\nexport interface KanbanBoardProps<T> {\n\t/** 泳道列数据 */\n\tcolumns: KanbanColumn<T>[];\n\t/** 提取卡片唯一 Key */\n\tkeyExtractor: (item: T) => string;\n\t/** 自定义渲染单个卡片 */\n\trenderCard: (item: T, columnId: string) => ReactNode;\n\t/** 卡片拖拽移动完成回调 */\n\tonCardMove?: (\n\t\tcardId: string,\n\t\tsourceColId: string,\n\t\ttargetColId: string,\n\t\tnewIndex: number,\n\t) => void;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nfunction KanbanBoard<T>({\n\tcolumns,\n\tkeyExtractor,\n\trenderCard,\n\tonCardMove,\n\tclassName = '',\n\tstyle,\n}: KanbanBoardProps<T>) {\n\tconst [draggingCardId, setDraggingCardId] = useState<string | null>(null);\n\tconst [sourceColumnId, setSourceColumnId] = useState<string | null>(null);\n\tconst [dragOverColumnId, setDragOverColumnId] = useState<string | null>(null);\n\n\tconst handleDragStart = (\n\t\te: React.DragEvent<HTMLDivElement>,\n\t\tcardId: string,\n\t\tcolId: string,\n\t) => {\n\t\tsetDraggingCardId(cardId);\n\t\tsetSourceColumnId(colId);\n\t\te.dataTransfer.setData('text/plain', JSON.stringify({ cardId, colId }));\n\t\te.dataTransfer.effectAllowed = 'move';\n\t};\n\n\tconst handleDragEnd = () => {\n\t\tsetDraggingCardId(null);\n\t\tsetSourceColumnId(null);\n\t\tsetDragOverColumnId(null);\n\t};\n\n\tconst handleDragOverCol = (e: React.DragEvent<HTMLDivElement>, colId: string) => {\n\t\te.preventDefault();\n\t\te.dataTransfer.dropEffect = 'move';\n\t\tif (dragOverColumnId !== colId) {\n\t\t\tsetDragOverColumnId(colId);\n\t\t}\n\t};\n\n\tconst handleDropOnCol = (\n\t\te: React.DragEvent<HTMLDivElement>,\n\t\ttargetColId: string,\n\t\ttargetIndex?: number,\n\t) => {\n\t\te.preventDefault();\n\t\tif (!draggingCardId || !sourceColumnId) return;\n\n\t\tconst targetColumn = columns.find((c) => c.id === targetColId);\n\t\tconst newIdx = targetIndex !== undefined ? targetIndex : targetColumn ? targetColumn.items.length : 0;\n\n\t\tonCardMove?.(draggingCardId, sourceColumnId, targetColId, newIdx);\n\t\thandleDragEnd();\n\t};\n\n\treturn (\n\t\t<div className={`rpc_kanban_board ${className}`} style={style}>\n\t\t\t{columns.map((col) => {\n\t\t\t\tconst isOver = dragOverColumnId === col.id;\n\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={col.id}\n\t\t\t\t\t\tclassName={`rpc_kanban_board_column ${\n\t\t\t\t\t\t\tisOver ? 'rpc_kanban_board_column_dragover' : ''\n\t\t\t\t\t\t}`}\n\t\t\t\t\t\tonDragOver={(e) => handleDragOverCol(e, col.id)}\n\t\t\t\t\t\tonDrop={(e) => handleDropOnCol(e, col.id)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* 列头部 */}\n\t\t\t\t\t\t<div className=\"rpc_kanban_board_column_header\">\n\t\t\t\t\t\t\t<div className=\"rpc_kanban_board_column_title_wrap\">\n\t\t\t\t\t\t\t\t{col.color && (\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclassName=\"rpc_kanban_board_column_dot\"\n\t\t\t\t\t\t\t\t\t\tstyle={{ backgroundColor: col.color }}\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<span>{col.title}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<span className=\"rpc_kanban_board_column_count\">\n\t\t\t\t\t\t\t\t{col.items.length}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{/* 卡片列表 */}\n\t\t\t\t\t\t<div className=\"rpc_kanban_board_column_body\">\n\t\t\t\t\t\t\t{col.items.map((item, idx) => {\n\t\t\t\t\t\t\t\tconst cardId = keyExtractor(item);\n\t\t\t\t\t\t\t\tconst isDragging = draggingCardId === cardId;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tkey={cardId}\n\t\t\t\t\t\t\t\t\t\tdraggable\n\t\t\t\t\t\t\t\t\t\tonDragStart={(e) => handleDragStart(e, cardId, col.id)}\n\t\t\t\t\t\t\t\t\t\tonDragEnd={handleDragEnd}\n\t\t\t\t\t\t\t\t\t\tonDragOver={(e) => {\n\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tonDrop={(e) => {\n\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\thandleDropOnCol(e, col.id, idx);\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tclassName={`rpc_kanban_board_card ${\n\t\t\t\t\t\t\t\t\t\t\tisDragging ? 'rpc_kanban_board_card_dragging' : ''\n\t\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{renderCard(item, col.id)}\n\t\t\t\t\t\t\t\t\t</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</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n\nexport default KanbanBoard;\n","import React, { useState, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface TreeFilterNode {\n\tlabel: string;\n\tvalue: string | number;\n\tchildren?: TreeFilterNode[];\n}\n\nexport interface TreeFilterPanelProps {\n\t/** 树形分类选项列表 */\n\toptions: TreeFilterNode[];\n\t/** 当前选中的值数组(受控) */\n\tvalue?: (string | number)[];\n\t/** 默认选中的值数组 */\n\tdefaultValue?: (string | number)[];\n\t/** 选中值变化回调 */\n\tonChange?: (values: (string | number)[]) => void;\n\t/** 是否支持多选,默认为 true */\n\tmultiple?: boolean;\n\t/** 标题前缀,默认为 ['一级分类', '二级分类', '三级标签'] */\n\tlevelLabels?: string[];\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst TreeFilterPanel: React.FC<TreeFilterPanelProps> = ({\n\toptions = [],\n\tvalue: controlledValue,\n\tdefaultValue = [],\n\tonChange,\n\tmultiple = true,\n\tlevelLabels = ['一级分类', '二级分类', '三级标签'],\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalVal, setInternalVal] = useState<(string | number)[]>(defaultValue);\n\tconst selectedValues = controlledValue !== undefined ? controlledValue : internalVal;\n\n\t// 记录每一层当前激活选中的父节点\n\tconst [activeLevel1, setActiveLevel1] = useState<string | number | null>(\n\t\toptions[0]?.value || null,\n\t);\n\n\tconst level1Option = options.find((opt) => opt.value === activeLevel1) || options[0];\n\tconst level2Options = level1Option?.children || [];\n\n\tconst [activeLevel2, setActiveLevel2] = useState<string | number | null>(\n\t\tlevel2Options[0]?.value || null,\n\t);\n\n\tconst level2Option = level2Options.find((opt) => opt.value === activeLevel2) || level2Options[0];\n\tconst level3Options = level2Option?.children || [];\n\n\tconst handleSelect = (val: string | number) => {\n\t\tlet next: (string | number)[];\n\t\tif (!multiple) {\n\t\t\tnext = [val];\n\t\t} else {\n\t\t\tif (selectedValues.includes(val)) {\n\t\t\t\tnext = selectedValues.filter((v) => v !== val);\n\t\t\t} else {\n\t\t\t\tnext = [...selectedValues, val];\n\t\t\t}\n\t\t}\n\n\t\tif (controlledValue === undefined) setInternalVal(next);\n\t\tonChange?.(next);\n\t};\n\n\tconst handleClear = () => {\n\t\tif (controlledValue === undefined) setInternalVal([]);\n\t\tonChange?.([]);\n\t};\n\n\treturn (\n\t\t<div className={`rpc_tree_filter_panel ${className}`} style={style}>\n\t\t\t{/* 一级分类 */}\n\t\t\t{options.length > 0 && (\n\t\t\t\t<div className=\"rpc_tree_filter_panel_row\">\n\t\t\t\t\t<div className=\"rpc_tree_filter_panel_label\">{levelLabels[0] || '一级分类'}:</div>\n\t\t\t\t\t<div className=\"rpc_tree_filter_panel_options\">\n\t\t\t\t\t\t{options.map((opt) => {\n\t\t\t\t\t\t\tconst isSelected = selectedValues.includes(opt.value);\n\t\t\t\t\t\t\tconst isCurrentActive = activeLevel1 === opt.value;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tkey={opt.value}\n\t\t\t\t\t\t\t\t\tclassName={`rpc_tree_filter_panel_item ${\n\t\t\t\t\t\t\t\t\t\tisSelected || isCurrentActive ? 'rpc_tree_filter_panel_item_active' : ''\n\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tsetActiveLevel1(opt.value);\n\t\t\t\t\t\t\t\t\t\tif (opt.children && opt.children.length > 0) {\n\t\t\t\t\t\t\t\t\t\t\tsetActiveLevel2(opt.children[0].value);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\thandleSelect(opt.value);\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{opt.label}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* 二级分类 */}\n\t\t\t{level2Options.length > 0 && (\n\t\t\t\t<div className=\"rpc_tree_filter_panel_row\">\n\t\t\t\t\t<div className=\"rpc_tree_filter_panel_label\">{levelLabels[1] || '二级分类'}:</div>\n\t\t\t\t\t<div className=\"rpc_tree_filter_panel_options\">\n\t\t\t\t\t\t{level2Options.map((opt) => {\n\t\t\t\t\t\t\tconst isSelected = selectedValues.includes(opt.value);\n\t\t\t\t\t\t\tconst isCurrentActive = activeLevel2 === opt.value;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tkey={opt.value}\n\t\t\t\t\t\t\t\t\tclassName={`rpc_tree_filter_panel_item ${\n\t\t\t\t\t\t\t\t\t\tisSelected || isCurrentActive ? 'rpc_tree_filter_panel_item_active' : ''\n\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tsetActiveLevel2(opt.value);\n\t\t\t\t\t\t\t\t\t\thandleSelect(opt.value);\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{opt.label}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* 三级标签 */}\n\t\t\t{level3Options.length > 0 && (\n\t\t\t\t<div className=\"rpc_tree_filter_panel_row\">\n\t\t\t\t\t<div className=\"rpc_tree_filter_panel_label\">{levelLabels[2] || '三级标签'}:</div>\n\t\t\t\t\t<div className=\"rpc_tree_filter_panel_options\">\n\t\t\t\t\t\t{level3Options.map((opt) => {\n\t\t\t\t\t\t\tconst isSelected = selectedValues.includes(opt.value);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tkey={opt.value}\n\t\t\t\t\t\t\t\t\tclassName={`rpc_tree_filter_panel_item ${\n\t\t\t\t\t\t\t\t\t\tisSelected ? 'rpc_tree_filter_panel_item_active' : ''\n\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\tonClick={() => handleSelect(opt.value)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{opt.label}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* 底部汇总与重置 */}\n\t\t\t<div className=\"rpc_tree_filter_panel_footer\">\n\t\t\t\t<span>已选条件:{selectedValues.length} 项</span>\n\t\t\t\t{selectedValues.length > 0 && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"rpc_tree_filter_panel_clear_btn\"\n\t\t\t\t\t\tonClick={handleClear}\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)}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default TreeFilterPanel;\n","import React, { useState, useRef, useEffect, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport type EnvType = 'dev' | 'test' | 'uat' | 'staging' | 'prod';\nexport type EnvPlacement = 'top-right' | 'top-left' | 'bottom-right';\n\nexport interface EnvBuildInfo {\n\tapiHost?: string;\n\tbranch?: string;\n\tcommit?: string;\n\tbuildTime?: string;\n\tversion?: string;\n}\n\nexport interface EnvSwitchItem {\n\tlabel: string;\n\turl: string;\n\tenv: EnvType;\n}\n\nexport interface EnvBadgeProps {\n\t/** 当前运行环境:'dev' | 'test' | 'uat' | 'staging' | 'prod' */\n\tenv: EnvType;\n\t/** 显示文本(不传则默认大写环境名) */\n\tlabel?: ReactNode;\n\t/** 悬浮挂载位置,默认为 'top-right' */\n\tplacement?: EnvPlacement;\n\t/** 当前构建与部署版本信息 */\n\tinfo?: EnvBuildInfo;\n\t/** 快捷切换至其他环境列表 */\n\tswitchList?: EnvSwitchItem[];\n\t/** 是否默认常驻,默认为 true */\n\tvisible?: boolean;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst defaultEnvLabels: Record<EnvType, string> = {\n\tdev: 'DEV 开发环境',\n\ttest: 'TEST 测试环境',\n\tuat: 'UAT 预验收',\n\tstaging: 'STAGING 预发',\n\tprod: '🚨 PROD 生产环境',\n};\n\nconst EnvBadge: React.FC<EnvBadgeProps> = ({\n\tenv,\n\tlabel,\n\tplacement = 'top-right',\n\tinfo,\n\tswitchList,\n\tvisible = true,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [isOpen, setIsOpen] = useState<boolean>(false);\n\tconst badgeRef = useRef<HTMLDivElement>(null);\n\n\tconst text = label || defaultEnvLabels[env] || env.toUpperCase();\n\n\t// 点击外部自动关闭气泡\n\tuseEffect(() => {\n\t\tconst handleClickOutside = (e: MouseEvent) => {\n\t\t\tif (badgeRef.current && !badgeRef.current.contains(e.target as Node)) {\n\t\t\t\tsetIsOpen(false);\n\t\t\t}\n\t\t};\n\n\t\tif (isOpen) {\n\t\t\tdocument.addEventListener('mousedown', handleClickOutside);\n\t\t}\n\t\treturn () => document.removeEventListener('mousedown', handleClickOutside);\n\t}, [isOpen]);\n\n\tif (!visible) return null;\n\n\treturn (\n\t\t<div\n\t\t\tref={badgeRef}\n\t\t\tclassName={`rpc_env_badge rpc_env_badge_${placement.replace('-', '_')} ${className}`}\n\t\t\tstyle={style}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={`rpc_env_badge_tag rpc_env_badge_tag_${env}`}\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t>\n\t\t\t\t<span>●</span>\n\t\t\t\t<span>{text}</span>\n\t\t\t</div>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className=\"rpc_env_badge_popover\">\n\t\t\t\t\t<div className=\"rpc_env_badge_pop_header\">\n\t\t\t\t\t\t<span>系统环境信息</span>\n\t\t\t\t\t\t<span style={{ fontSize: 12, color: '#8c8c8c' }}>{env.toUpperCase()}</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{info ? (\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t{info.version && (\n\t\t\t\t\t\t\t\t<div className=\"rpc_env_badge_pop_row\">\n\t\t\t\t\t\t\t\t\t<span>发布版本</span>\n\t\t\t\t\t\t\t\t\t<span>v{info.version}</span>\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{info.branch && (\n\t\t\t\t\t\t\t\t<div className=\"rpc_env_badge_pop_row\">\n\t\t\t\t\t\t\t\t\t<span>Git 分支</span>\n\t\t\t\t\t\t\t\t\t<span>{info.branch}</span>\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{info.commit && (\n\t\t\t\t\t\t\t\t<div className=\"rpc_env_badge_pop_row\">\n\t\t\t\t\t\t\t\t\t<span>Commit</span>\n\t\t\t\t\t\t\t\t\t<span>{info.commit}</span>\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{info.apiHost && (\n\t\t\t\t\t\t\t\t<div className=\"rpc_env_badge_pop_row\">\n\t\t\t\t\t\t\t\t\t<span>API 网关</span>\n\t\t\t\t\t\t\t\t\t<span style={{ fontSize: 11 }}>{info.apiHost}</span>\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{info.buildTime && (\n\t\t\t\t\t\t\t\t<div className=\"rpc_env_badge_pop_row\">\n\t\t\t\t\t\t\t\t\t<span>构建时间</span>\n\t\t\t\t\t\t\t\t\t<span>{info.buildTime}</span>\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</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div style={{ color: '#8c8c8c', fontSize: 12, padding: '8px 0' }}>\n\t\t\t\t\t\t\t暂无详细构建元数据\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{switchList && switchList.length > 0 && (\n\t\t\t\t\t\t<div className=\"rpc_env_badge_switch_wrap\">\n\t\t\t\t\t\t\t<span style={{ fontSize: 11, color: '#8c8c8c', width: '100%' }}>\n\t\t\t\t\t\t\t\t切换环境:\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{switchList.map((item, idx) => (\n\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\t\t\thref={item.url}\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_env_badge_switch_btn\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t</a>\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</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default EnvBadge;\n","import React, { ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport type TimelineStatus = 'finish' | 'process' | 'error' | 'wait';\n\nexport interface TimelineOperator {\n\tname: string;\n\tavatar?: ReactNode;\n}\n\nexport interface StatusTimelineItem {\n\ttitle: ReactNode;\n\tdescription?: ReactNode;\n\ttime?: string;\n\tduration?: string;\n\tstatus?: TimelineStatus;\n\toperator?: TimelineOperator;\n}\n\nexport interface StatusTimelineProps {\n\t/** 时间轴节点列表 */\n\titems: StatusTimelineItem[];\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst statusIcons: Record<TimelineStatus, string> = {\n\tfinish: '✓',\n\tprocess: '●',\n\terror: '✕',\n\twait: '○',\n};\n\nconst StatusTimeline: React.FC<StatusTimelineProps> = ({\n\titems = [],\n\tclassName = '',\n\tstyle,\n}) => {\n\treturn (\n\t\t<div className={`rpc_status_timeline ${className}`} style={style}>\n\t\t\t{items.map((item, idx) => {\n\t\t\t\tconst status = item.status || 'finish';\n\n\t\t\t\treturn (\n\t\t\t\t\t<div key={idx} className=\"rpc_status_timeline_item\">\n\t\t\t\t\t\t{/* 轴线与节点 */}\n\t\t\t\t\t\t<div className=\"rpc_status_timeline_axis\">\n\t\t\t\t\t\t\t<div className={`rpc_status_timeline_dot rpc_status_timeline_dot_${status}`}>\n\t\t\t\t\t\t\t\t{statusIcons[status]}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"rpc_status_timeline_line\" />\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{/* 节点内容 */}\n\t\t\t\t\t\t<div className=\"rpc_status_timeline_content\">\n\t\t\t\t\t\t\t<div className=\"rpc_status_timeline_header\">\n\t\t\t\t\t\t\t\t<span className=\"rpc_status_timeline_title\">{item.title}</span>\n\t\t\t\t\t\t\t\t{item.time && <span className=\"rpc_status_timeline_time\">{item.time}</span>}\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t{item.operator && (\n\t\t\t\t\t\t\t\t<div className=\"rpc_status_timeline_operator\">\n\t\t\t\t\t\t\t\t\t{item.operator.avatar && <span>{item.operator.avatar}</span>}\n\t\t\t\t\t\t\t\t\t<span>经办人:{item.operator.name}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{item.duration && (\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<span className=\"rpc_status_timeline_duration\">耗时:{item.duration}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{item.description && (\n\t\t\t\t\t\t\t\t<div className=\"rpc_status_timeline_desc\">{item.description}</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n};\n\nexport default StatusTimeline;\n","import React, { ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface GradientTextProps {\n\t/** 文字内容 */\n\tchildren: ReactNode;\n\t/** 渐变色定义,默认为 'linear-gradient(90deg, #1677ff 0%, #722ed1 50%, #eb2f96 100%)' */\n\tgradient?: string;\n\t/** 是否开启流光滚动动画,默认为 true */\n\tanimate?: boolean;\n\t/** 流光动画周期时间(秒),默认为 4 */\n\tspeed?: number;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst GradientText: React.FC<GradientTextProps> = ({\n\tchildren,\n\tgradient = 'linear-gradient(90deg, #1677ff 0%, #722ed1 50%, #eb2f96 100%)',\n\tanimate = true,\n\tspeed = 4,\n\tclassName = '',\n\tstyle,\n}) => {\n\treturn (\n\t\t<span\n\t\t\tclassName={`rpc_gradient_text ${animate ? 'rpc_gradient_text_animate' : ''} ${className}`}\n\t\t\tstyle={{\n\t\t\t\tbackgroundImage: gradient,\n\t\t\t\tanimationDuration: `${speed}s`,\n\t\t\t\t...style,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</span>\n\t);\n};\n\nexport default GradientText;\n","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] ? <EyeOutlined /> : <EyeInvisibleOutlined />\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","import React, { useState, CSSProperties } from 'react';\nimport './index.less';\n\nexport type DateShortcutKey = 'today' | 'yesterday' | '7days' | '30days' | 'thisMonth' | 'lastMonth';\n\nexport interface ShortcutItem {\n\tkey: string;\n\tlabel: string;\n\tcalc: () => [string, string];\n}\n\nexport interface QuickDateRangeProps {\n\t/** 当前选中项的 key(受控) */\n\tactiveKey?: string;\n\t/** 默认选中的 key,默认为 '7days' */\n\tdefaultKey?: string;\n\t/** 切换回调 */\n\tonChange?: (dateRange: [string, string], key: string) => void;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nfunction formatDate(d: Date): string {\n\tconst y = d.getFullYear();\n\tconst m = String(d.getMonth() + 1).padStart(2, '0');\n\tconst day = String(d.getDate()).padStart(2, '0');\n\treturn `${y}-${m}-${day}`;\n}\n\nconst defaultShortcuts: ShortcutItem[] = [\n\t{\n\t\tkey: 'today',\n\t\tlabel: '今日',\n\t\tcalc: () => {\n\t\t\tconst now = formatDate(new Date());\n\t\t\treturn [now, now];\n\t\t},\n\t},\n\t{\n\t\tkey: 'yesterday',\n\t\tlabel: '昨日',\n\t\tcalc: () => {\n\t\t\tconst d = new Date();\n\t\t\td.setDate(d.getDate() - 1);\n\t\t\tconst yStr = formatDate(d);\n\t\t\treturn [yStr, yStr];\n\t\t},\n\t},\n\t{\n\t\tkey: '7days',\n\t\tlabel: '近7天',\n\t\tcalc: () => {\n\t\t\tconst end = new Date();\n\t\t\tconst start = new Date();\n\t\t\tstart.setDate(start.getDate() - 6);\n\t\t\treturn [formatDate(start), formatDate(end)];\n\t\t},\n\t},\n\t{\n\t\tkey: '30days',\n\t\tlabel: '近30天',\n\t\tcalc: () => {\n\t\t\tconst end = new Date();\n\t\t\tconst start = new Date();\n\t\t\tstart.setDate(start.getDate() - 29);\n\t\t\treturn [formatDate(start), formatDate(end)];\n\t\t},\n\t},\n\t{\n\t\tkey: 'thisMonth',\n\t\tlabel: '本月',\n\t\tcalc: () => {\n\t\t\tconst now = new Date();\n\t\t\tconst start = new Date(now.getFullYear(), now.getMonth(), 1);\n\t\t\treturn [formatDate(start), formatDate(now)];\n\t\t},\n\t},\n\t{\n\t\tkey: 'lastMonth',\n\t\tlabel: '上月',\n\t\tcalc: () => {\n\t\t\tconst now = new Date();\n\t\t\tconst start = new Date(now.getFullYear(), now.getMonth() - 1, 1);\n\t\t\tconst end = new Date(now.getFullYear(), now.getMonth(), 0);\n\t\t\treturn [formatDate(start), formatDate(end)];\n\t\t},\n\t},\n];\n\nconst QuickDateRange: React.FC<QuickDateRangeProps> = ({\n\tactiveKey: controlledKey,\n\tdefaultKey = '7days',\n\tonChange,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalKey, setInternalKey] = useState<string>(defaultKey);\n\tconst currentKey = controlledKey !== undefined ? controlledKey : internalKey;\n\n\tconst handleClick = (item: ShortcutItem) => {\n\t\tif (controlledKey === undefined) setInternalKey(item.key);\n\t\tconst range = item.calc();\n\t\tonChange?.(range, item.key);\n\t};\n\n\treturn (\n\t\t<div className={`rpc_quick_date_range ${className}`} style={style}>\n\t\t\t{defaultShortcuts.map((item) => {\n\t\t\t\tconst isActive = currentKey === item.key;\n\n\t\t\t\treturn (\n\t\t\t\t\t<span\n\t\t\t\t\t\tkey={item.key}\n\t\t\t\t\t\tclassName={`rpc_quick_date_range_pill ${\n\t\t\t\t\t\t\tisActive ? 'rpc_quick_date_range_pill_active' : ''\n\t\t\t\t\t\t}`}\n\t\t\t\t\t\tonClick={() => handleClick(item)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t</span>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n};\n\nexport default QuickDateRange;\n","import React, { useState, useEffect, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface PhotoItem {\n\tsrc: string;\n\talt?: string;\n\ttitle?: string;\n}\n\nexport interface PhotoViewerProps {\n\t/** 相册图片列表 */\n\timages: PhotoItem[];\n\t/** 默认展示图片下标,默认为 0 */\n\tdefaultIndex?: number;\n\t/** 图片高度,默认为 380 */\n\theight?: number | string;\n\t/** 图片切换回调 */\n\tonChange?: (index: number) => void;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst PhotoViewer: React.FC<PhotoViewerProps> = ({\n\timages = [],\n\tdefaultIndex = 0,\n\theight = 380,\n\tonChange,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [currentIndex, setCurrentIndex] = useState<number>(defaultIndex);\n\n\tconst handleSelect = (index: number) => {\n\t\tsetCurrentIndex(index);\n\t\tonChange?.(index);\n\t};\n\n\tconst handlePrev = () => {\n\t\tconst next = (currentIndex - 1 + images.length) % images.length;\n\t\thandleSelect(next);\n\t};\n\n\tconst handleNext = () => {\n\t\tconst next = (currentIndex + 1) % images.length;\n\t\thandleSelect(next);\n\t};\n\n\tuseEffect(() => {\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.key === 'ArrowLeft') handlePrev();\n\t\t\tif (e.key === 'ArrowRight') handleNext();\n\t\t};\n\t\twindow.addEventListener('keydown', handleKeyDown);\n\t\treturn () => window.removeEventListener('keydown', handleKeyDown);\n\t}, [currentIndex, images.length]);\n\n\tif (images.length === 0) return null;\n\tconst currentImg = images[currentIndex] || images[0];\n\n\treturn (\n\t\t<div className={`rpc_photo_viewer ${className}`} style={style}>\n\t\t\t{/* 顶部标题与张数计数 */}\n\t\t\t<div className=\"rpc_photo_viewer_top_bar\">\n\t\t\t\t<span className=\"rpc_photo_viewer_top_title\">\n\t\t\t\t\t{currentImg.title || currentImg.alt || `Photo ${currentIndex + 1}`}\n\t\t\t\t</span>\n\t\t\t\t<span className=\"rpc_photo_viewer_counter\">\n\t\t\t\t\t{currentIndex + 1} / {images.length}\n\t\t\t\t</span>\n\t\t\t</div>\n\n\t\t\t{/* 主图预览 */}\n\t\t\t<div className=\"rpc_photo_viewer_main_wrap\" style={{ height }}>\n\t\t\t\t<img\n\t\t\t\t\tsrc={currentImg.src}\n\t\t\t\t\talt={currentImg.alt || `Photo ${currentIndex + 1}`}\n\t\t\t\t\tclassName=\"rpc_photo_viewer_main_img\"\n\t\t\t\t/>\n\n\t\t\t\t{images.length > 1 && (\n\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_photo_viewer_nav_btn rpc_photo_viewer_nav_btn_prev\"\n\t\t\t\t\t\t\tonClick={handlePrev}\n\t\t\t\t\t\t\ttitle=\"上一张 (← 键盘左键)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t‹\n\t\t\t\t\t\t</button>\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_photo_viewer_nav_btn rpc_photo_viewer_nav_btn_next\"\n\t\t\t\t\t\t\tonClick={handleNext}\n\t\t\t\t\t\t\ttitle=\"下一张 (→ 键盘右键)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t›\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* 底部缩略图联动 */}\n\t\t\t{images.length > 1 && (\n\t\t\t\t<div className=\"rpc_photo_viewer_thumbs_wrap\">\n\t\t\t\t\t{images.map((img, idx) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\tclassName={`rpc_photo_viewer_thumb ${\n\t\t\t\t\t\t\t\tcurrentIndex === idx ? 'rpc_photo_viewer_thumb_active' : ''\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\tonClick={() => handleSelect(idx)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<img src={img.src} alt={img.alt || ''} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default PhotoViewer;\n","import React, { CSSProperties } from 'react';\nimport './index.less';\n\nexport interface TrendIndicatorProps {\n\t/** 变动数值(如 14.2 代表 +14.2%,-5.8 代表 -5.8%) */\n\tvalue: number;\n\t/** 数值后缀,默认为 '%' */\n\tsuffix?: string;\n\t/** 数值前缀 */\n\tprefix?: string;\n\t/** 保留小数位数,默认为 1 */\n\tprecision?: number;\n\t/** 展示模式:'filled' 填充色块 | 'outlined' 线框 | 'text' 纯文字,默认为 'filled' */\n\ttype?: 'filled' | 'outlined' | 'text';\n\t/** 是否反转红绿色彩规则(如成本/延时降低为绿色),默认为 false */\n\treverse?: boolean;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst TrendIndicator: React.FC<TrendIndicatorProps> = ({\n\tvalue,\n\tsuffix = '%',\n\tprefix = '',\n\tprecision = 1,\n\ttype = 'filled',\n\treverse = false,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst isZero = Math.abs(value) < 0.0001;\n\tconst isPositive = value > 0;\n\n\t// 判断颜色状态\n\tlet statusClass = 'flat';\n\tif (!isZero) {\n\t\tconst isGood = reverse ? !isPositive : isPositive;\n\t\tstatusClass = isGood ? 'up' : 'down';\n\t}\n\n\tconst formattedVal = Math.abs(value).toFixed(precision);\n\tconst sign = isPositive ? '+' : value < 0 ? '-' : '';\n\n\treturn (\n\t\t<span\n\t\t\tclassName={`rpc_trend_indicator rpc_trend_indicator_${type} rpc_trend_indicator_${statusClass} ${className}`}\n\t\t\tstyle={style}\n\t\t>\n\t\t\t<span className=\"rpc_trend_indicator_arrow\">\n\t\t\t\t{isZero ? '—' : isPositive ? '▲' : '▼'}\n\t\t\t</span>\n\t\t\t<span>\n\t\t\t\t{prefix}\n\t\t\t\t{sign}\n\t\t\t\t{formattedVal}\n\t\t\t\t{suffix}\n\t\t\t</span>\n\t\t</span>\n\t);\n};\n\nexport default TrendIndicator;\n","import React, { useMemo, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface ProgressSegment {\n\tlabel: string;\n\tvalue: number;\n\tcolor: string;\n\tsuffix?: string;\n}\n\nexport interface SegmentedProgressProps {\n\t/** 分段数据列表 */\n\tsegments: ProgressSegment[];\n\t/** 总量基准(不传则自动对各分段 value 求和) */\n\ttotal?: number;\n\t/** 进度条高度(像素),默认为 10 */\n\theight?: number;\n\t/** 是否显示底部图例 Legend,默认为 true */\n\tshowLegend?: boolean;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst SegmentedProgress: React.FC<SegmentedProgressProps> = ({\n\tsegments = [],\n\ttotal: customTotal,\n\theight = 10,\n\tshowLegend = true,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst sumValue = useMemo(() => {\n\t\treturn segments.reduce((acc, cur) => acc + (cur.value || 0), 0);\n\t}, [segments]);\n\n\tconst baseTotal = customTotal !== undefined ? customTotal : (sumValue || 1);\n\n\treturn (\n\t\t<div className={`rpc_seg_progress ${className}`} style={style}>\n\t\t\t{/* 分段进度条主体 */}\n\t\t\t<div className=\"rpc_seg_progress_bar\" style={{ height }}>\n\t\t\t\t{segments.map((seg, idx) => {\n\t\t\t\t\tconst pct = ((seg.value / baseTotal) * 100).toFixed(1);\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\tclassName=\"rpc_seg_progress_segment\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: `${pct}%`,\n\t\t\t\t\t\t\t\tbackgroundColor: seg.color,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttitle={`${seg.label}: ${seg.value}${seg.suffix || ''} (${pct}%)`}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t{/* 底部图例 */}\n\t\t\t{showLegend && (\n\t\t\t\t<div className=\"rpc_seg_progress_legend\">\n\t\t\t\t\t{segments.map((seg, idx) => {\n\t\t\t\t\t\tconst pct = ((seg.value / baseTotal) * 100).toFixed(1);\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div key={idx} className=\"rpc_seg_progress_legend_item\">\n\t\t\t\t\t\t\t\t<span className=\"rpc_seg_progress_dot\" style={{ backgroundColor: seg.color }} />\n\t\t\t\t\t\t\t\t<span>{seg.label}</span>\n\t\t\t\t\t\t\t\t<b style={{ color: '#262626' }}>\n\t\t\t\t\t\t\t\t\t{seg.value}{seg.suffix || ''} ({pct}%)\n\t\t\t\t\t\t\t\t</b>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default SegmentedProgress;\n","import React, { useState, useRef, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface HoverCardProps {\n\t/** 触发宿主元素 */\n\tchildren: ReactNode;\n\t/** 悬浮弹出的卡片内容 */\n\tcontent: ReactNode;\n\t/** 鼠标移入展开延迟(毫秒),默认为 200 */\n\topenDelay?: number;\n\t/** 鼠标移出关闭延迟(毫秒),默认为 200 */\n\tcloseDelay?: number;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst HoverCard: React.FC<HoverCardProps> = ({\n\tchildren,\n\tcontent,\n\topenDelay = 200,\n\tcloseDelay = 200,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [isOpen, setIsOpen] = useState<boolean>(false);\n\tconst timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n\tconst handleMouseEnter = () => {\n\t\tif (timerRef.current) clearTimeout(timerRef.current);\n\t\ttimerRef.current = setTimeout(() => {\n\t\t\tsetIsOpen(true);\n\t\t}, openDelay);\n\t};\n\n\tconst handleMouseLeave = () => {\n\t\tif (timerRef.current) clearTimeout(timerRef.current);\n\t\ttimerRef.current = setTimeout(() => {\n\t\t\tsetIsOpen(false);\n\t\t}, closeDelay);\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`rpc_hover_card ${className}`}\n\t\t\tstyle={style}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonMouseLeave={handleMouseLeave}\n\t\t>\n\t\t\t{children}\n\n\t\t\t{isOpen && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"rpc_hover_card_popover\"\n\t\t\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t\t>\n\t\t\t\t\t{content}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default HoverCard;\n","import React, { useState, useMemo, CSSProperties } from 'react';\nimport { CloseOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface TreeTransferNode {\n\tkey: string;\n\ttitle: string;\n\tchildren?: TreeTransferNode[];\n}\n\nexport interface TreeTransferProps {\n\t/** 树形数据源 */\n\ttreeData: TreeTransferNode[];\n\t/** 右侧已选择 keys 列表(受控) */\n\ttargetKeys?: string[];\n\t/** 默认已选择 keys 列表 */\n\tdefaultTargetKeys?: string[];\n\t/** 改变回调 */\n\tonChange?: (targetKeys: string[]) => void;\n\t/** 左侧面板标题,默认为 '待选项目录' */\n\tsourceTitle?: string;\n\t/** 右侧面板标题,默认为 '已选项目' */\n\ttargetTitle?: string;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst TreeTransfer: React.FC<TreeTransferProps> = ({\n\ttreeData = [],\n\ttargetKeys: controlledKeys,\n\tdefaultTargetKeys = [],\n\tonChange,\n\tsourceTitle = '待选项目录',\n\ttargetTitle = '已选项目',\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalKeys, setInternalKeys] = useState<string[]>(defaultTargetKeys);\n\tconst targetKeys = controlledKeys !== undefined ? controlledKeys : internalKeys;\n\n\t// 平铺节点便于通过 key 查找 title\n\tconst flatNodeMap = useMemo(() => {\n\t\tconst map = new Map<string, string>();\n\t\tconst traverse = (nodes: TreeTransferNode[]) => {\n\t\t\tnodes.forEach((n) => {\n\t\t\t\tmap.set(n.key, n.title);\n\t\t\t\tif (n.children) traverse(n.children);\n\t\t\t});\n\t\t};\n\t\ttraverse(treeData);\n\t\treturn map;\n\t}, [treeData]);\n\n\tconst triggerChange = (newKeys: string[]) => {\n\t\tif (controlledKeys === undefined) setInternalKeys(newKeys);\n\t\tonChange?.(newKeys);\n\t};\n\n\tconst handleToggle = (key: string, checked: boolean) => {\n\t\tif (checked) {\n\t\t\ttriggerChange([...targetKeys, key]);\n\t\t} else {\n\t\t\ttriggerChange(targetKeys.filter((k) => k !== key));\n\t\t}\n\t};\n\n\tconst handleRemove = (key: string) => {\n\t\ttriggerChange(targetKeys.filter((k) => k !== key));\n\t};\n\n\treturn (\n\t\t<div className={`rpc_tree_transfer ${className}`} style={style}>\n\t\t\t{/* 左侧树形选择面板 */}\n\t\t\t<div className=\"rpc_tree_transfer_panel\">\n\t\t\t\t<div className=\"rpc_tree_transfer_header\">\n\t\t\t\t\t<span>{sourceTitle}</span>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"rpc_tree_transfer_body\">\n\t\t\t\t\t{treeData.map((group) => (\n\t\t\t\t\t\t<div key={group.key}>\n\t\t\t\t\t\t\t<div className=\"rpc_tree_transfer_tree_item\">\n\t\t\t\t\t\t\t\t<b>📁 {group.title}</b>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{group.children?.map((child) => {\n\t\t\t\t\t\t\t\tconst isChecked = targetKeys.includes(child.key);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<label\n\t\t\t\t\t\t\t\t\t\tkey={child.key}\n\t\t\t\t\t\t\t\t\t\tclassName=\"rpc_tree_transfer_tree_item rpc_tree_transfer_tree_child\"\n\t\t\t\t\t\t\t\t\t\tstyle={{ cursor: 'pointer' }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\t\t\tchecked={isChecked}\n\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleToggle(child.key, e.target.checked)}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<span>{child.title}</span>\n\t\t\t\t\t\t\t\t\t</label>\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</div>\n\t\t\t</div>\n\n\t\t\t{/* 中间指示 */}\n\t\t\t<span style={{ color: '#8c8c8c' }}>⇄</span>\n\n\t\t\t{/* 右侧平铺已选面板 */}\n\t\t\t<div className=\"rpc_tree_transfer_panel\">\n\t\t\t\t<div className=\"rpc_tree_transfer_header\">\n\t\t\t\t\t<span>{targetTitle} ({targetKeys.length})</span>\n\t\t\t\t\t{targetKeys.length > 0 && (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tstyle={{ background: 'none', border: 'none', color: '#1677ff', cursor: 'pointer', fontSize: 12 }}\n\t\t\t\t\t\t\tonClick={() => triggerChange([])}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t清空\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"rpc_tree_transfer_body\">\n\t\t\t\t\t{targetKeys.length === 0 ? (\n\t\t\t\t\t\t<div style={{ color: '#8c8c8c', padding: '20px 0', textAlign: 'center' }}>\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\t\ttargetKeys.map((key) => (\n\t\t\t\t\t\t\t<div key={key} className=\"rpc_tree_transfer_target_item\">\n\t\t\t\t\t\t\t\t<span>{flatNodeMap.get(key) || key}</span>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_tree_transfer_del_btn\"\n\t\t\t\t\t\t\t\t\tonClick={() => handleRemove(key)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<CloseOutlined />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default TreeTransfer;\n","import React, { useState, useRef, useEffect, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface NumberStepperProps {\n\t/** 当前数值(受控) */\n\tvalue?: number;\n\t/** 默认数值 */\n\tdefaultValue?: number;\n\t/** 最小值,默认为 0 */\n\tmin?: number;\n\t/** 最大值,默认为 100 */\n\tmax?: number;\n\t/** 步长,默认为 1 */\n\tstep?: number;\n\t/** 改变回调 */\n\tonChange?: (val: number) => void;\n\t/** 是否禁用 */\n\tdisabled?: boolean;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst NumberStepper: React.FC<NumberStepperProps> = ({\n\tvalue: controlledVal,\n\tdefaultValue = 1,\n\tmin = 0,\n\tmax = 100,\n\tstep = 1,\n\tonChange,\n\tdisabled = false,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalVal, setInternalVal] = useState<number>(defaultValue);\n\tconst currentVal = controlledVal !== undefined ? controlledVal : internalVal;\n\n\tconst timerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n\tconst updateVal = (val: number) => {\n\t\tconst clamped = Math.max(min, Math.min(max, val));\n\t\tif (controlledVal === undefined) setInternalVal(clamped);\n\t\tonChange?.(clamped);\n\t};\n\n\tconst handleStep = (delta: number) => {\n\t\tif (disabled) return;\n\t\tupdateVal(currentVal + delta);\n\t};\n\n\tconst startLongPress = (delta: number) => {\n\t\tif (disabled) return;\n\t\thandleStep(delta);\n\t\ttimerRef.current = setInterval(() => {\n\t\t\thandleStep(delta);\n\t\t}, 120);\n\t};\n\n\tconst stopLongPress = () => {\n\t\tif (timerRef.current) {\n\t\t\tclearInterval(timerRef.current);\n\t\t\ttimerRef.current = null;\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\treturn () => stopLongPress();\n\t}, []);\n\n\treturn (\n\t\t<div className={`rpc_num_stepper ${className}`} style={style}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tdisabled={disabled || currentVal <= min}\n\t\t\t\tclassName=\"rpc_num_stepper_btn\"\n\t\t\t\tonMouseDown={() => startLongPress(-step)}\n\t\t\t\tonMouseUp={stopLongPress}\n\t\t\t\tonMouseLeave={stopLongPress}\n\t\t\t>\n\t\t\t\t-\n\t\t\t</button>\n\n\t\t\t<input\n\t\t\t\ttype=\"number\"\n\t\t\t\tvalue={currentVal}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tonChange={(e) => updateVal(Number(e.target.value))}\n\t\t\t\tclassName=\"rpc_num_stepper_input\"\n\t\t\t/>\n\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tdisabled={disabled || currentVal >= max}\n\t\t\t\tclassName=\"rpc_num_stepper_btn\"\n\t\t\t\tonMouseDown={() => startLongPress(step)}\n\t\t\t\tonMouseUp={stopLongPress}\n\t\t\t\tonMouseLeave={stopLongPress}\n\t\t\t>\n\t\t\t\t+\n\t\t\t</button>\n\t\t</div>\n\t);\n};\n\nexport default NumberStepper;\n","import React, { useState, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface JsonTreeProps {\n\t/** JSON 数据源 */\n\tdata: any;\n\t/** 默认展开层级深度,默认为 2 */\n\tdefaultExpandedLevel?: number;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\ninterface TreeNodeProps {\n\tkeyName?: string;\n\tvalue: any;\n\tdepth: number;\n\tmaxDepth: number;\n}\n\nconst TreeNode: React.FC<TreeNodeProps> = ({ keyName, value, depth, maxDepth }) => {\n\tconst [collapsed, setCollapsed] = useState<boolean>(depth >= maxDepth);\n\n\tconst isObject = value !== null && typeof value === 'object';\n\tconst isArray = Array.isArray(value);\n\n\tif (!isObject) {\n\t\tlet valClass = 'rpc_json_tree_string';\n\t\tlet valStr = `\"${value}\"`;\n\n\t\tif (typeof value === 'number') {\n\t\t\tvalClass = 'rpc_json_tree_number';\n\t\t\tvalStr = String(value);\n\t\t} else if (typeof value === 'boolean') {\n\t\t\tvalClass = 'rpc_json_tree_boolean';\n\t\t\tvalStr = String(value);\n\t\t} else if (value === null) {\n\t\t\tvalClass = 'rpc_json_tree_null';\n\t\t\tvalStr = 'null';\n\t\t}\n\n\t\treturn (\n\t\t\t<div>\n\t\t\t\t{keyName !== undefined && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<span className=\"rpc_json_tree_key\">\"{keyName}\"</span>\n\t\t\t\t\t\t<span className=\"rpc_json_tree_colon\">:</span>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t\t<span className={valClass}>{valStr}</span>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst keys = Object.keys(value);\n\tconst openBracket = isArray ? '[' : '{';\n\tconst closeBracket = isArray ? ']' : '}';\n\n\treturn (\n\t\t<div>\n\t\t\t<span\n\t\t\t\tclassName={`rpc_json_tree_toggle ${collapsed ? 'rpc_json_tree_toggle_collapsed' : ''}`}\n\t\t\t\tonClick={() => setCollapsed(!collapsed)}\n\t\t\t>\n\t\t\t\t▼\n\t\t\t</span>\n\n\t\t\t{keyName !== undefined && (\n\t\t\t\t<>\n\t\t\t\t\t<span className=\"rpc_json_tree_key\">\"{keyName}\"</span>\n\t\t\t\t\t<span className=\"rpc_json_tree_colon\">:</span>\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t<span className=\"rpc_json_tree_bracket\">{openBracket}</span>\n\n\t\t\t{collapsed ? (\n\t\t\t\t<>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"rpc_json_tree_count\"\n\t\t\t\t\t\tstyle={{ cursor: 'pointer' }}\n\t\t\t\t\t\tonClick={() => setCollapsed(false)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{keys.length} items...\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className=\"rpc_json_tree_bracket\">{closeBracket}</span>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<div className=\"rpc_json_tree_node\">\n\t\t\t\t\t\t{keys.map((k) => (\n\t\t\t\t\t\t\t<TreeNode\n\t\t\t\t\t\t\t\tkey={k}\n\t\t\t\t\t\t\t\tkeyName={isArray ? undefined : k}\n\t\t\t\t\t\t\t\tvalue={value[k]}\n\t\t\t\t\t\t\t\tdepth={depth + 1}\n\t\t\t\t\t\t\t\tmaxDepth={maxDepth}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t\t<span className=\"rpc_json_tree_bracket\">{closeBracket}</span>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nconst JsonTree: React.FC<JsonTreeProps> = ({\n\tdata,\n\tdefaultExpandedLevel = 2,\n\tclassName = '',\n\tstyle,\n}) => {\n\treturn (\n\t\t<div className={`rpc_json_tree ${className}`} style={style}>\n\t\t\t<TreeNode value={data} depth={0} maxDepth={defaultExpandedLevel} />\n\t\t</div>\n\t);\n};\n\nexport default JsonTree;\n","import React, { useState, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface CodeSnippetProps {\n\t/** 代码文本内容 */\n\tcode: string;\n\t/** 编程语言标识,默认为 'bash' */\n\tlanguage?: string;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst CodeSnippet: React.FC<CodeSnippetProps> = ({\n\tcode,\n\tlanguage = 'bash',\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [copied, setCopied] = useState<boolean>(false);\n\n\tconst handleCopy = async () => {\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(code);\n\t\t\tsetCopied(true);\n\t\t\tsetTimeout(() => setCopied(false), 1500);\n\t\t} catch {\n\t\t\t// fallback\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className={`rpc_code_snippet ${className}`} style={style}>\n\t\t\t<div className=\"rpc_code_snippet_top_bar\">\n\t\t\t\t<div className=\"rpc_code_snippet_dots\">\n\t\t\t\t\t<span className=\"rpc_code_snippet_dot rpc_code_snippet_dot_red\" />\n\t\t\t\t\t<span className=\"rpc_code_snippet_dot rpc_code_snippet_dot_yellow\" />\n\t\t\t\t\t<span className=\"rpc_code_snippet_dot rpc_code_snippet_dot_green\" />\n\t\t\t\t</div>\n\n\t\t\t\t<span className=\"rpc_code_snippet_lang\">{language}</span>\n\n\t\t\t\t<button type=\"button\" className=\"rpc_code_snippet_copy_btn\" onClick={handleCopy}>\n\t\t\t\t\t{copied ? '✓ 已复制' : '复制'}\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t<pre className=\"rpc_code_snippet_content\">\n\t\t\t\t<code>{code}</code>\n\t\t\t</pre>\n\t\t</div>\n\t);\n};\n\nexport default CodeSnippet;\n","import React, { useId, 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\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 gradientId = useId();\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","import React, { useState, useRef, useEffect, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface FileDropZoneProps {\n\t/** 文件选择/拖拽/粘贴回调 */\n\tonDropFiles: (files: File[]) => void;\n\t/** 允许的文件类型,例如 'image/*' 或 '.pdf,.png' */\n\taccept?: string;\n\t/** 是否支持多选,默认为 true */\n\tmultiple?: boolean;\n\t/** 提示标题,默认为 '点击或将文件拖拽至此处上传' */\n\ttitle?: ReactNode;\n\t/** 提示副标题,默认为 '支持拖拽文件或直接按 Ctrl+V 粘贴截图' */\n\thint?: ReactNode;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst FileDropZone: React.FC<FileDropZoneProps> = ({\n\tonDropFiles,\n\taccept,\n\tmultiple = true,\n\ttitle = '点击或将文件拖拽至此处上传',\n\thint = '支持拖拽文件或直接按 Ctrl+V / Cmd+V 粘贴截图',\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [isDragOver, setIsDragOver] = useState<boolean>(false);\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\n\tconst handleFiles = (fileList: FileList | null) => {\n\t\tif (!fileList || fileList.length === 0) return;\n\t\tconst files = Array.from(fileList);\n\t\tonDropFiles(files);\n\t};\n\n\tconst handleDragOver = (e: React.DragEvent) => {\n\t\te.preventDefault();\n\t\tsetIsDragOver(true);\n\t};\n\n\tconst handleDragLeave = () => {\n\t\tsetIsDragOver(false);\n\t};\n\n\tconst handleDrop = (e: React.DragEvent) => {\n\t\te.preventDefault();\n\t\tsetIsDragOver(false);\n\t\thandleFiles(e.dataTransfer.files);\n\t};\n\n\t// 监听剪贴板粘贴事件\n\tuseEffect(() => {\n\t\tconst handlePaste = (e: ClipboardEvent) => {\n\t\t\tif (e.clipboardData && e.clipboardData.files.length > 0) {\n\t\t\t\thandleFiles(e.clipboardData.files);\n\t\t\t}\n\t\t};\n\t\twindow.addEventListener('paste', handlePaste);\n\t\treturn () => window.removeEventListener('paste', handlePaste);\n\t}, []);\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={`rpc_file_dropzone ${isDragOver ? 'rpc_file_dropzone_active' : ''} ${className}`}\n\t\t\tstyle={style}\n\t\t\tonClick={() => inputRef.current?.click()}\n\t\t\tonDragOver={handleDragOver}\n\t\t\tonDragLeave={handleDragLeave}\n\t\t\tonDrop={handleDrop}\n\t\t>\n\t\t\t<input\n\t\t\t\tref={inputRef}\n\t\t\t\ttype=\"file\"\n\t\t\t\taccept={accept}\n\t\t\t\tmultiple={multiple}\n\t\t\t\tstyle={{ display: 'none' }}\n\t\t\t\tonChange={(e) => handleFiles(e.target.files)}\n\t\t\t/>\n\n\t\t\t<div className=\"rpc_file_dropzone_icon\">📥</div>\n\t\t\t<div className=\"rpc_file_dropzone_title\">{title}</div>\n\t\t\t<div className=\"rpc_file_dropzone_hint\">{hint}</div>\n\t\t</div>\n\t);\n};\n\nexport default FileDropZone;\n","import React, { useState, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface CascadeLevel {\n\tid: string;\n\ttitle: string;\n\tcontent: ReactNode;\n}\n\nexport interface CascadeDrawerProps {\n\t/** 是否打开抽屉 */\n\topen: boolean;\n\t/** 关闭抽屉回调 */\n\tonClose: () => void;\n\t/** 初始根层级 */\n\trootLevel: CascadeLevel;\n\t/** 抽屉宽度,默认为 440 */\n\twidth?: number | string;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst CascadeDrawer: React.FC<CascadeDrawerProps> = ({\n\topen,\n\tonClose,\n\trootLevel,\n\twidth = 440,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [stack, setStack] = useState<CascadeLevel[]>([rootLevel]);\n\n\tif (!open) return null;\n\n\tconst currentLevel = stack[stack.length - 1] || rootLevel;\n\n\tconst pushLevel = (level: CascadeLevel) => {\n\t\tsetStack((prev) => [...prev, level]);\n\t};\n\n\tconst popTo = (index: number) => {\n\t\tsetStack((prev) => prev.slice(0, index + 1));\n\t};\n\n\treturn (\n\t\t<div className={`rpc_cascade_drawer ${className}`} style={style}>\n\t\t\t<div className=\"rpc_cascade_drawer_mask\" onClick={onClose} />\n\n\t\t\t<div className=\"rpc_cascade_drawer_content\" style={{ width }}>\n\t\t\t\t{/* 顶部面包屑导航 */}\n\t\t\t\t<div className=\"rpc_cascade_drawer_header\">\n\t\t\t\t\t<div className=\"rpc_cascade_drawer_breadcrumbs\">\n\t\t\t\t\t\t{stack.map((item, idx) => {\n\t\t\t\t\t\t\tconst isLast = idx === stack.length - 1;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<React.Fragment key={item.id}>\n\t\t\t\t\t\t\t\t\t{idx > 0 && <span style={{ color: '#bfbfbf' }}>/</span>}\n\t\t\t\t\t\t\t\t\t{isLast ? (\n\t\t\t\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"rpc_cascade_drawer_crumb_btn\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => popTo(idx)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</React.Fragment>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<button type=\"button\" className=\"rpc_cascade_drawer_close_btn\" onClick={onClose}>\n\t\t\t\t\t\t✕\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\n\t\t\t\t{/* 当前层级内容 */}\n\t\t\t\t<div className=\"rpc_cascade_drawer_body\">\n\t\t\t\t\t{typeof currentLevel.content === 'function'\n\t\t\t\t\t\t? (currentLevel.content as any)(pushLevel)\n\t\t\t\t\t\t: currentLevel.content}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default CascadeDrawer;\n","import React, { useState, useRef, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface DualRangeSliderProps {\n\t/** 最小值,默认为 0 */\n\tmin?: number;\n\t/** 最大值,默认为 100 */\n\tmax?: number;\n\t/** 步长,默认为 1 */\n\tstep?: number;\n\t/** 当前区间值 [minVal, maxVal](受控) */\n\tvalue?: [number, number];\n\t/** 默认区间值 */\n\tdefaultValue?: [number, number];\n\t/** 改变回调 */\n\tonChange?: (val: [number, number]) => void;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst DualRangeSlider: React.FC<DualRangeSliderProps> = ({\n\tmin = 0,\n\tmax = 100,\n\tvalue: controlledVal,\n\tdefaultValue = [20, 80],\n\tonChange,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [internalVal, setInternalVal] = useState<[number, number]>(defaultValue);\n\tconst rangeVal = controlledVal !== undefined ? controlledVal : internalVal;\n\n\tconst trackRef = useRef<HTMLDivElement>(null);\n\tconst activeThumbRef = useRef<'left' | 'right' | null>(null);\n\n\tconst updateVal = (val: [number, number]) => {\n\t\tif (controlledVal === undefined) setInternalVal(val);\n\t\tonChange?.(val);\n\t};\n\n\tconst handleThumbMouseDown = (thumb: 'left' | 'right') => {\n\t\tactiveThumbRef.current = thumb;\n\n\t\tconst handleMouseMove = (e: MouseEvent) => {\n\t\t\tif (!activeThumbRef.current || !trackRef.current) return;\n\t\t\tconst rect = trackRef.current.getBoundingClientRect();\n\t\t\tconst ratio = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width));\n\t\t\tconst currentNum = Math.round(min + ratio * (max - min));\n\n\t\t\tif (activeThumbRef.current === 'left') {\n\t\t\t\tconst clamped = Math.min(currentNum, rangeVal[1]);\n\t\t\t\tupdateVal([clamped, rangeVal[1]]);\n\t\t\t} else {\n\t\t\t\tconst clamped = Math.max(currentNum, rangeVal[0]);\n\t\t\t\tupdateVal([rangeVal[0], clamped]);\n\t\t\t}\n\t\t};\n\n\t\tconst handleMouseUp = () => {\n\t\t\tactiveThumbRef.current = null;\n\t\t\tdocument.removeEventListener('mousemove', handleMouseMove);\n\t\t\tdocument.removeEventListener('mouseup', handleMouseUp);\n\t\t};\n\n\t\tdocument.addEventListener('mousemove', handleMouseMove);\n\t\tdocument.addEventListener('mouseup', handleMouseUp);\n\t};\n\n\tconst leftPct = ((rangeVal[0] - min) / (max - min)) * 100;\n\tconst rightPct = ((rangeVal[1] - min) / (max - min)) * 100;\n\n\treturn (\n\t\t<div className={`rpc_dual_slider ${className}`} style={style}>\n\t\t\t<div ref={trackRef} className=\"rpc_dual_slider_track\">\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"rpc_dual_slider_highlight\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tleft: `${leftPct}%`,\n\t\t\t\t\t\twidth: `${rightPct - leftPct}%`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"rpc_dual_slider_thumb\"\n\t\t\t\t\tstyle={{ left: `${leftPct}%` }}\n\t\t\t\t\tonMouseDown={() => handleThumbMouseDown('left')}\n\t\t\t\t/>\n\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"rpc_dual_slider_thumb\"\n\t\t\t\t\tstyle={{ left: `${rightPct}%` }}\n\t\t\t\t\tonMouseDown={() => handleThumbMouseDown('right')}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default DualRangeSlider;\n","import React, { CSSProperties } from 'react';\nimport './index.less';\n\nexport interface FilterChipItem {\n\tid: string;\n\tlabel: string;\n\tvalue: string;\n}\n\nexport interface FilterChipsProps {\n\t/** 筛选胶囊列表 */\n\tchips: FilterChipItem[];\n\t/** 单项删除回调 */\n\tonRemove?: (id: string) => void;\n\t/** 全部清空回调 */\n\tonClearAll?: () => void;\n\t/** 清空按钮文案,默认为 '清空筛选' */\n\tclearText?: string;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst FilterChips: React.FC<FilterChipsProps> = ({\n\tchips = [],\n\tonRemove,\n\tonClearAll,\n\tclearText = '清空筛选',\n\tclassName = '',\n\tstyle,\n}) => {\n\tif (chips.length === 0) return null;\n\n\treturn (\n\t\t<div className={`rpc_filter_chips ${className}`} style={style}>\n\t\t\t{chips.map((chip) => (\n\t\t\t\t<span key={chip.id} className=\"rpc_filter_chips_chip\">\n\t\t\t\t\t<span className=\"rpc_filter_chips_label\">{chip.label}:</span>\n\t\t\t\t\t<span className=\"rpc_filter_chips_val\">{chip.value}</span>\n\t\t\t\t\t<span className=\"rpc_filter_chips_close\" onClick={() => onRemove?.(chip.id)}>\n\t\t\t\t\t\t✕\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t))}\n\n\t\t\t{onClearAll && (\n\t\t\t\t<button type=\"button\" className=\"rpc_filter_chips_clear_all\" onClick={onClearAll}>\n\t\t\t\t\t{clearText}\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default FilterChips;\n","import React, { useState, ReactNode, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface AnnouncementBarProps {\n\t/** 横幅广播内容 */\n\tchildren: ReactNode;\n\t/** 是否支持点击关闭,默认为 true */\n\tclosable?: boolean;\n\t/** 自定义渐变或背景样式 */\n\tbackground?: string;\n\t/** 关闭回调 */\n\tonClose?: () => void;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst AnnouncementBar: React.FC<AnnouncementBarProps> = ({\n\tchildren,\n\tclosable = true,\n\tbackground,\n\tonClose,\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst [visible, setVisible] = useState<boolean>(true);\n\n\tif (!visible) return null;\n\n\tconst handleClose = () => {\n\t\tsetVisible(false);\n\t\tonClose?.();\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`rpc_announcement_bar ${className}`}\n\t\t\tstyle={{ background: background || undefined, ...style }}\n\t\t>\n\t\t\t<div className=\"rpc_announcement_bar_content\">{children}</div>\n\n\t\t\t{closable && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"rpc_announcement_bar_close\"\n\t\t\t\t\tonClick={handleClose}\n\t\t\t\t\ttitle=\"关闭通知\"\n\t\t\t\t>\n\t\t\t\t\t✕\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default AnnouncementBar;\n","import React, { useMemo, CSSProperties } from 'react';\nimport './index.less';\n\nexport interface JsonDiffViewerProps {\n\t/** 变更前原始 JSON 对象 */\n\tbefore: Record<string, any>;\n\t/** 变更后最新 JSON 对象 */\n\tafter: Record<string, any>;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\ntype DiffType = 'added' | 'removed' | 'modified' | 'unchanged';\n\ninterface DiffRow {\n\tkey: string;\n\ttype: DiffType;\n\toldVal?: any;\n\tnewVal?: any;\n}\n\nconst JsonDiffViewer: React.FC<JsonDiffViewerProps> = ({\n\tbefore = {},\n\tafter = {},\n\tclassName = '',\n\tstyle,\n}) => {\n\tconst diffRows = useMemo(() => {\n\t\tconst rows: DiffRow[] = [];\n\t\tconst allKeys = Array.from(new Set([...Object.keys(before), ...Object.keys(after)]));\n\n\t\tallKeys.forEach((key) => {\n\t\t\tconst hasBefore = key in before;\n\t\t\tconst hasAfter = key in after;\n\n\t\t\tif (!hasBefore && hasAfter) {\n\t\t\t\trows.push({ key, type: 'added', newVal: after[key] });\n\t\t\t} else if (hasBefore && !hasAfter) {\n\t\t\t\trows.push({ key, type: 'removed', oldVal: before[key] });\n\t\t\t} else {\n\t\t\t\tconst bVal = JSON.stringify(before[key]);\n\t\t\t\tconst aVal = JSON.stringify(after[key]);\n\t\t\t\tif (bVal !== aVal) {\n\t\t\t\t\trows.push({ key, type: 'modified', oldVal: before[key], newVal: after[key] });\n\t\t\t\t} else {\n\t\t\t\t\trows.push({ key, type: 'unchanged', newVal: after[key] });\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn rows;\n\t}, [before, after]);\n\n\tconst formatVal = (v: any) => {\n\t\tif (typeof v === 'object') return JSON.stringify(v);\n\t\tif (typeof v === 'string') return `\"${v}\"`;\n\t\treturn String(v);\n\t};\n\n\treturn (\n\t\t<div className={`rpc_json_diff ${className}`} style={style}>\n\t\t\t<div style={{ color: '#858585', marginBottom: 6 }}>&#123;</div>\n\n\t\t\t{diffRows.map((row) => {\n\t\t\t\tconst sign =\n\t\t\t\t\trow.type === 'added'\n\t\t\t\t\t\t? '+'\n\t\t\t\t\t\t: row.type === 'removed'\n\t\t\t\t\t\t? '-'\n\t\t\t\t\t\t: row.type === 'modified'\n\t\t\t\t\t\t? '~'\n\t\t\t\t\t\t: ' ';\n\n\t\t\t\treturn (\n\t\t\t\t\t<div key={row.key} className={`rpc_json_diff_row rpc_json_diff_row_${row.type}`}>\n\t\t\t\t\t\t<span className=\"rpc_json_diff_sign\">{sign}</span>\n\t\t\t\t\t\t<span className=\"rpc_json_diff_key\">\"{row.key}\"</span>:\n\t\t\t\t\t\t{row.type === 'modified' ? (\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t<span style={{ textDecoration: 'line-through', opacity: 0.7 }}>\n\t\t\t\t\t\t\t\t\t{formatVal(row.oldVal)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span className=\"rpc_json_diff_arrow\">➔</span>\n\t\t\t\t\t\t\t\t<span>{formatVal(row.newVal)}</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : row.type === 'removed' ? (\n\t\t\t\t\t\t\t<span>{formatVal(row.oldVal)}</span>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span>{formatVal(row.newVal)}</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\n\t\t\t<div style={{ color: '#858585', marginTop: 6 }}>&#125;</div>\n\t\t</div>\n\t);\n};\n\nexport default JsonDiffViewer;\n"],"mappings":"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","names":["import_jsx_runtime","import_react","import_jsx_runtime","React","import_jsx_runtime","import_react","import_jsx_runtime","React","import_jsx_runtime","import_react","import_jsx_runtime","_a","_b","import_react","import_jsx_runtime","import_react","import_jsx_runtime","_a","React","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","ReactDOM","import_react","import_jsx_runtime","import_react","import_react_dom","import_jsx_runtime","cropBox","ReactDOM","import_react","import_jsx_runtime","targetEl","import_react","import_react_dom","import_jsx_runtime","ReactDOM","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","i","j","import_react","import_jsx_runtime","React","import_react","import_react_dom","import_jsx_runtime","currentStep","ReactDOM","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","React","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}