react-public-components 1.2.2 → 1.2.4
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.
- package/dist/ActivityLog/index.cjs +2 -2
- package/dist/ActivityLog/index.js +1 -1
- package/dist/AudioPlayer/index.cjs +3 -3
- package/dist/AudioPlayer/index.js +2 -2
- package/dist/CascadeDrawer/index.cjs +2 -2
- package/dist/CascadeDrawer/index.d.ts +1 -1
- package/dist/CascadeDrawer/index.js +1 -1
- package/dist/CodeSnippet/index.cjs +3 -2
- package/dist/CodeSnippet/index.css +236 -11
- package/dist/CodeSnippet/index.css.map +1 -1
- package/dist/CodeSnippet/index.d.ts +49 -4
- package/dist/CodeSnippet/index.js +2 -1
- package/dist/CodeSnippet/sandbox.d.ts +26 -0
- package/dist/CollapseBox/index.cjs +3 -3
- package/dist/CollapseBox/index.js +2 -2
- package/dist/ColorPicker/index.cjs +5 -5
- package/dist/ColorPicker/index.js +2 -2
- package/dist/ContextMenu/index.cjs +3 -3
- package/dist/ContextMenu/index.js +2 -2
- package/dist/CopyButton/index.cjs +3 -3
- package/dist/CopyButton/index.js +2 -2
- package/dist/CountUp/index.cjs +2 -2
- package/dist/CountUp/index.js +1 -1
- package/dist/CronPicker/index.cjs +4 -4
- package/dist/CronPicker/index.js +3 -3
- package/dist/DebounceSelect/index.cjs +3 -3
- package/dist/DebounceSelect/index.d.ts +1 -1
- package/dist/DebounceSelect/index.js +2 -2
- package/dist/DiffViewer/index.cjs +2 -2
- package/dist/DiffViewer/index.js +1 -1
- package/dist/DisabledBox/index.cjs +3 -3
- package/dist/DisabledBox/index.d.ts +11 -3
- package/dist/DisabledBox/index.js +2 -2
- package/dist/DragSortList/index.cjs +3 -2
- package/dist/DragSortList/index.css +82 -13
- package/dist/DragSortList/index.css.map +1 -1
- package/dist/DragSortList/index.d.ts +8 -2
- package/dist/DragSortList/index.js +2 -1
- package/dist/EnvBadge/index.cjs +2 -2
- package/dist/EnvBadge/index.js +1 -1
- package/dist/FilePreviewer/index.cjs +4 -4
- package/dist/FilePreviewer/index.js +2 -2
- package/dist/Fullscreen/index.cjs +3 -3
- package/dist/Fullscreen/index.js +2 -2
- package/dist/GuidedTour/index.cjs +3 -3
- package/dist/GuidedTour/index.js +2 -2
- package/dist/ImageCropper/index.cjs +3 -3
- package/dist/ImageCropper/index.js +2 -2
- package/dist/InfiniteScrollList/index.cjs +3 -3
- package/dist/InfiniteScrollList/index.js +2 -2
- package/dist/JsonDiffViewer/index.cjs +2 -2
- package/dist/JsonDiffViewer/index.js +1 -1
- package/dist/JsonEditor/index.cjs +4 -4
- package/dist/JsonEditor/index.d.ts +1 -1
- package/dist/JsonEditor/index.js +3 -3
- package/dist/JsonTree/index.cjs +2 -2
- package/dist/JsonTree/index.d.ts +1 -1
- package/dist/JsonTree/index.js +1 -1
- package/dist/KanbanBoard/index.cjs +2 -2
- package/dist/KanbanBoard/index.js +1 -1
- package/dist/KeyValEditor/index.cjs +3 -3
- package/dist/KeyValEditor/index.js +2 -2
- package/dist/Marquee/index.cjs +2 -2
- package/dist/Marquee/index.js +1 -1
- package/dist/MetricCard/index.cjs +3 -3
- package/dist/MetricCard/index.js +2 -2
- package/dist/NumericRangeInput/index.cjs +2 -2
- package/dist/NumericRangeInput/index.js +1 -1
- package/dist/PasswordStrength/index.cjs +4 -4
- package/dist/PasswordStrength/index.js +2 -2
- package/dist/PdfViewer/index.cjs +3 -3
- package/dist/PdfViewer/index.js +2 -2
- package/dist/QrCodeCard/index.cjs +3 -3
- package/dist/QrCodeCard/index.css +122 -32
- package/dist/QrCodeCard/index.css.map +1 -1
- package/dist/QrCodeCard/index.d.ts +10 -2
- package/dist/QrCodeCard/index.js +2 -2
- package/dist/QuickDateRange/index.cjs +2 -2
- package/dist/QuickDateRange/index.js +1 -1
- package/dist/ScrollTracker/index.cjs +4 -4
- package/dist/ScrollTracker/index.js +1 -1
- package/dist/SegmentedProgress/index.cjs +2 -2
- package/dist/SegmentedProgress/index.js +1 -1
- package/dist/SensitiveMask/index.cjs +5 -5
- package/dist/SensitiveMask/index.js +3 -3
- package/dist/Splitter/index.cjs +3 -3
- package/dist/Splitter/index.js +2 -2
- package/dist/StatusTimeline/index.cjs +2 -2
- package/dist/StatusTimeline/index.js +1 -1
- package/dist/TagInput/index.cjs +3 -3
- package/dist/TagInput/index.js +2 -2
- package/dist/TextEllipsis/index.cjs +4 -4
- package/dist/TextEllipsis/index.js +3 -3
- package/dist/TreeFilterPanel/index.cjs +2 -2
- package/dist/TreeFilterPanel/index.js +1 -1
- package/dist/TreeTransfer/index.cjs +3 -3
- package/dist/TreeTransfer/index.js +2 -2
- package/dist/TrendIndicator/index.cjs +2 -2
- package/dist/TrendIndicator/index.js +1 -1
- package/dist/VideoPlayer/index.cjs +3 -3
- package/dist/VideoPlayer/index.js +2 -2
- package/dist/VirtualList/index.cjs +2 -2
- package/dist/VirtualList/index.js +1 -1
- package/dist/Watermark/index.cjs +2 -2
- package/dist/Watermark/index.js +1 -1
- package/dist/{chunk-L7ULSFW6.cjs → chunk-2EIAWXFA.cjs} +18 -8
- package/dist/chunk-2EIAWXFA.cjs.map +1 -0
- package/dist/{chunk-TGSKTHTV.js → chunk-2IDVNTKR.js} +119 -19
- package/dist/chunk-2IDVNTKR.js.map +1 -0
- package/dist/{chunk-DNRZCHZG.js → chunk-2INP6NM4.js} +4 -11
- package/dist/chunk-2INP6NM4.js.map +1 -0
- package/dist/{chunk-I3HBI52O.js → chunk-2O2A5XYF.js} +3 -11
- package/dist/chunk-2O2A5XYF.js.map +1 -0
- package/dist/{chunk-VTANPKPT.js → chunk-3R3NOO4K.js} +2 -2
- package/dist/chunk-3R3NOO4K.js.map +1 -0
- package/dist/chunk-4KMVABTM.js +419 -0
- package/dist/chunk-4KMVABTM.js.map +1 -0
- package/dist/{chunk-K5FWY6HB.cjs → chunk-4TMBGQQE.cjs} +5 -5
- package/dist/{chunk-K5FWY6HB.cjs.map → chunk-4TMBGQQE.cjs.map} +1 -1
- package/dist/{chunk-GZCNFM6C.js → chunk-56VELHCH.js} +8 -17
- package/dist/chunk-56VELHCH.js.map +1 -0
- package/dist/{chunk-PBPGBVQQ.cjs → chunk-5E36FGRP.cjs} +2 -2
- package/dist/chunk-5E36FGRP.cjs.map +1 -0
- package/dist/{chunk-PVKBGP6Q.js → chunk-5GLC2HU6.js} +2 -2
- package/dist/{chunk-PVKBGP6Q.js.map → chunk-5GLC2HU6.js.map} +1 -1
- package/dist/{chunk-QKSCFVN2.js → chunk-5HIRDMZH.js} +2 -2
- package/dist/chunk-5HIRDMZH.js.map +1 -0
- package/dist/{chunk-7AKHSOSZ.js → chunk-5R2YXBXM.js} +3 -11
- package/dist/chunk-5R2YXBXM.js.map +1 -0
- package/dist/{chunk-F42Z33L7.cjs → chunk-5V4UAS6I.cjs} +2 -2
- package/dist/chunk-5V4UAS6I.cjs.map +1 -0
- package/dist/{chunk-WWL4VEPH.js → chunk-6UTLBY6Y.js} +2 -2
- package/dist/chunk-6UTLBY6Y.js.map +1 -0
- package/dist/{chunk-QI7XQDFZ.cjs → chunk-77ANKL4K.cjs} +77 -85
- package/dist/chunk-77ANKL4K.cjs.map +1 -0
- package/dist/{chunk-4MRZVLM6.cjs → chunk-7SIUSULP.cjs} +2 -2
- package/dist/{chunk-4MRZVLM6.cjs.map → chunk-7SIUSULP.cjs.map} +1 -1
- package/dist/{chunk-DFHFXKR5.cjs → chunk-7ZBA4NHH.cjs} +5 -12
- package/dist/chunk-7ZBA4NHH.cjs.map +1 -0
- package/dist/{chunk-RTAQSOVE.cjs → chunk-AHTRLNYK.cjs} +5 -5
- package/dist/{chunk-RTAQSOVE.cjs.map → chunk-AHTRLNYK.cjs.map} +1 -1
- package/dist/{chunk-G564WB32.cjs → chunk-AMCCRVHG.cjs} +2 -2
- package/dist/chunk-AMCCRVHG.cjs.map +1 -0
- package/dist/{chunk-NFC2C2TD.js → chunk-ANTFNDH4.js} +65 -72
- package/dist/chunk-ANTFNDH4.js.map +1 -0
- package/dist/{chunk-LBEGRYTP.js → chunk-AXPVN2OO.js} +77 -85
- package/dist/chunk-AXPVN2OO.js.map +1 -0
- package/dist/{chunk-OYRX4AY6.js → chunk-BFQV5MYD.js} +2 -2
- package/dist/chunk-BFQV5MYD.js.map +1 -0
- package/dist/{chunk-AXHJC7FV.js → chunk-BRHXKRG6.js} +3 -11
- package/dist/chunk-BRHXKRG6.js.map +1 -0
- package/dist/{chunk-BXFP7EAW.cjs → chunk-CPQLXDBR.cjs} +2 -2
- package/dist/{chunk-BXFP7EAW.cjs.map → chunk-CPQLXDBR.cjs.map} +1 -1
- package/dist/{chunk-AIIXJB34.js → chunk-CURWX7OY.js} +3 -3
- package/dist/{chunk-AIIXJB34.js.map → chunk-CURWX7OY.js.map} +1 -1
- package/dist/{chunk-XMBTKO5I.cjs → chunk-DJQEBDEP.cjs} +3 -11
- package/dist/chunk-DJQEBDEP.cjs.map +1 -0
- package/dist/{chunk-ZQBEQK2I.cjs → chunk-ED3ZG2VX.cjs} +5 -5
- package/dist/{chunk-ZQBEQK2I.cjs.map → chunk-ED3ZG2VX.cjs.map} +1 -1
- package/dist/{chunk-IECISUOZ.js → chunk-EDNBPLUS.js} +61 -59
- package/dist/chunk-EDNBPLUS.js.map +1 -0
- package/dist/{chunk-5MQCVYVD.js → chunk-EJYTTSW6.js} +16 -6
- package/dist/chunk-EJYTTSW6.js.map +1 -0
- package/dist/{chunk-AVSFSS7S.cjs → chunk-EKDJPOA3.cjs} +63 -61
- package/dist/chunk-EKDJPOA3.cjs.map +1 -0
- package/dist/{chunk-5NI6HK5V.js → chunk-EMT4NUI5.js} +3 -3
- package/dist/{chunk-5NI6HK5V.js.map → chunk-EMT4NUI5.js.map} +1 -1
- package/dist/{chunk-5GCEQDBM.cjs → chunk-EPYD35KB.cjs} +2 -2
- package/dist/chunk-EPYD35KB.cjs.map +1 -0
- package/dist/{chunk-YPVRTMX6.js → chunk-ETFLLRTO.js} +4 -6
- package/dist/chunk-ETFLLRTO.js.map +1 -0
- package/dist/{chunk-ZSK74QFN.cjs → chunk-EUOBMHFF.cjs} +3 -7
- package/dist/chunk-EUOBMHFF.cjs.map +1 -0
- package/dist/chunk-FZH5FL7X.cjs +167 -0
- package/dist/chunk-FZH5FL7X.cjs.map +1 -0
- package/dist/{chunk-4IBF4R3H.cjs → chunk-GMZSBGSL.cjs} +2 -2
- package/dist/{chunk-4IBF4R3H.cjs.map → chunk-GMZSBGSL.cjs.map} +1 -1
- package/dist/{chunk-HTA5EG6X.cjs → chunk-HKALWFWZ.cjs} +5 -5
- package/dist/{chunk-HTA5EG6X.cjs.map → chunk-HKALWFWZ.cjs.map} +1 -1
- package/dist/{chunk-PMNTOEXC.js → chunk-HZERTFL6.js} +2 -2
- package/dist/chunk-HZERTFL6.js.map +1 -0
- package/dist/{chunk-DKTB6PKI.js → chunk-IBI6AT5Z.js} +3 -10
- package/dist/chunk-IBI6AT5Z.js.map +1 -0
- package/dist/{chunk-4VGH44DT.js → chunk-IBYFOFSS.js} +14 -4
- package/dist/chunk-IBYFOFSS.js.map +1 -0
- package/dist/{chunk-2ORGQ2IY.js → chunk-IF4XAUV3.js} +4 -10
- package/dist/chunk-IF4XAUV3.js.map +1 -0
- package/dist/{chunk-4GQ3X7MG.cjs → chunk-IPS7PC3M.cjs} +18 -27
- package/dist/chunk-IPS7PC3M.cjs.map +1 -0
- package/dist/{chunk-ELI3LL3K.cjs → chunk-JHVPDKBM.cjs} +14 -6
- package/dist/chunk-JHVPDKBM.cjs.map +1 -0
- package/dist/{chunk-5G3XVLJF.js → chunk-JNA5AQ2K.js} +3 -3
- package/dist/{chunk-5G3XVLJF.js.map → chunk-JNA5AQ2K.js.map} +1 -1
- package/dist/{chunk-W6BUNUQM.cjs → chunk-KGZNVN7P.cjs} +3 -10
- package/dist/chunk-KGZNVN7P.cjs.map +1 -0
- package/dist/{chunk-R7CRWOHG.js → chunk-L7X3RVEY.js} +2 -2
- package/dist/{chunk-R7CRWOHG.js.map → chunk-L7X3RVEY.js.map} +1 -1
- package/dist/{chunk-EIFN6XMU.cjs → chunk-LFGBZXQH.cjs} +11 -5
- package/dist/chunk-LFGBZXQH.cjs.map +1 -0
- package/dist/{chunk-XO6PBAAM.cjs → chunk-LFXMUCEO.cjs} +2 -2
- package/dist/chunk-LFXMUCEO.cjs.map +1 -0
- package/dist/{chunk-C5B5Y4S2.cjs → chunk-M3GQ7RCV.cjs} +4 -4
- package/dist/{chunk-C5B5Y4S2.cjs.map → chunk-M3GQ7RCV.cjs.map} +1 -1
- package/dist/{chunk-KBBLTGIU.js → chunk-M4FZJALR.js} +13 -5
- package/dist/chunk-M4FZJALR.js.map +1 -0
- package/dist/{chunk-N7IQ6LYD.cjs → chunk-MGYDOC76.cjs} +15 -5
- package/dist/chunk-MGYDOC76.cjs.map +1 -0
- package/dist/{chunk-WBN5SAY5.js → chunk-MLYM5LAX.js} +2 -2
- package/dist/{chunk-WBN5SAY5.js.map → chunk-MLYM5LAX.js.map} +1 -1
- package/dist/{chunk-62NPVN7T.js → chunk-MQJBUHDB.js} +3 -3
- package/dist/{chunk-62NPVN7T.js.map → chunk-MQJBUHDB.js.map} +1 -1
- package/dist/{chunk-X7EE5DXL.js → chunk-O2YTJPG4.js} +2 -2
- package/dist/{chunk-X7EE5DXL.js.map → chunk-O2YTJPG4.js.map} +1 -1
- package/dist/{chunk-OJEZ3TKT.js → chunk-OBK6XTUY.js} +2 -2
- package/dist/chunk-OBK6XTUY.js.map +1 -0
- package/dist/{chunk-6OKTK3AQ.cjs → chunk-ODNGFJVN.cjs} +3 -11
- package/dist/chunk-ODNGFJVN.cjs.map +1 -0
- package/dist/{chunk-Z5LFRNNJ.js → chunk-OLLVIQPL.js} +3 -3
- package/dist/{chunk-Z5LFRNNJ.js.map → chunk-OLLVIQPL.js.map} +1 -1
- package/dist/{chunk-FRGH3Q75.cjs → chunk-OONBZRPV.cjs} +4 -4
- package/dist/{chunk-FRGH3Q75.cjs.map → chunk-OONBZRPV.cjs.map} +1 -1
- package/dist/{chunk-UT5UXO44.js → chunk-P5CS7V4W.js} +3 -3
- package/dist/chunk-P5CS7V4W.js.map +1 -0
- package/dist/{chunk-HQ65GEM7.js → chunk-PTFKE67K.js} +3 -3
- package/dist/{chunk-HQ65GEM7.js.map → chunk-PTFKE67K.js.map} +1 -1
- package/dist/{chunk-U2TTRBES.js → chunk-PUMVD7CP.js} +3 -3
- package/dist/{chunk-U2TTRBES.js.map → chunk-PUMVD7CP.js.map} +1 -1
- package/dist/{chunk-4YPT2HUD.cjs → chunk-PYCSRJSF.cjs} +16 -7
- package/dist/chunk-PYCSRJSF.cjs.map +1 -0
- package/dist/{chunk-ZAHKA2V2.js → chunk-Q7OVUH5K.js} +3 -3
- package/dist/chunk-Q7OVUH5K.js.map +1 -0
- package/dist/{chunk-NMYXVZQP.cjs → chunk-QNSEJGF6.cjs} +2 -2
- package/dist/chunk-QNSEJGF6.cjs.map +1 -0
- package/dist/{chunk-KUW2ZR2A.cjs → chunk-QP3RKA4J.cjs} +65 -72
- package/dist/chunk-QP3RKA4J.cjs.map +1 -0
- package/dist/{chunk-IUR7SPDA.js → chunk-QRZ2GVVJ.js} +85 -92
- package/dist/chunk-QRZ2GVVJ.js.map +1 -0
- package/dist/{chunk-Q4QF6UYX.cjs → chunk-R4V3EJVP.cjs} +124 -18
- package/dist/chunk-R4V3EJVP.cjs.map +1 -0
- package/dist/{chunk-2ARM7X7A.js → chunk-RAF7I4A5.js} +2 -2
- package/dist/chunk-RAF7I4A5.js.map +1 -0
- package/dist/{chunk-7JLQOQJZ.cjs → chunk-RN5WU7KA.cjs} +7 -7
- package/dist/{chunk-7JLQOQJZ.cjs.map → chunk-RN5WU7KA.cjs.map} +1 -1
- package/dist/{chunk-FBOTWA6O.cjs → chunk-TNZ2OLGW.cjs} +5 -7
- package/dist/chunk-TNZ2OLGW.cjs.map +1 -0
- package/dist/chunk-TUDLE3RT.cjs +429 -0
- package/dist/chunk-TUDLE3RT.cjs.map +1 -0
- package/dist/{chunk-PIIJVF5D.cjs → chunk-TUEVILTA.cjs} +5 -5
- package/dist/chunk-TUEVILTA.cjs.map +1 -0
- package/dist/{chunk-RWZSTG6Q.cjs → chunk-U2EBNBGK.cjs} +4 -4
- package/dist/{chunk-RWZSTG6Q.cjs.map → chunk-U2EBNBGK.cjs.map} +1 -1
- package/dist/{chunk-5WHBZH44.cjs → chunk-UAUP5TJK.cjs} +5 -5
- package/dist/chunk-UAUP5TJK.cjs.map +1 -0
- package/dist/{chunk-SMVAHIBN.cjs → chunk-UCG7ZVK5.cjs} +2 -2
- package/dist/chunk-UCG7ZVK5.cjs.map +1 -0
- package/dist/{chunk-DATPWEQK.cjs → chunk-UZB7GOEI.cjs} +4 -4
- package/dist/{chunk-DATPWEQK.cjs.map → chunk-UZB7GOEI.cjs.map} +1 -1
- package/dist/{chunk-AJIIY2QT.cjs → chunk-VF5P7XMC.cjs} +2 -2
- package/dist/chunk-VF5P7XMC.cjs.map +1 -0
- package/dist/{chunk-R77VVMV5.cjs → chunk-VJOO2DG3.cjs} +87 -94
- package/dist/chunk-VJOO2DG3.cjs.map +1 -0
- package/dist/{chunk-XB3BT6BU.js → chunk-W5JA3YTT.js} +3 -3
- package/dist/{chunk-XB3BT6BU.js.map → chunk-W5JA3YTT.js.map} +1 -1
- package/dist/{chunk-ZGWBLJ6U.cjs → chunk-WDHU3BSM.cjs} +2 -2
- package/dist/{chunk-ZGWBLJ6U.cjs.map → chunk-WDHU3BSM.cjs.map} +1 -1
- package/dist/{chunk-NCNDJTOK.js → chunk-WEGDIRDB.js} +2 -2
- package/dist/chunk-WEGDIRDB.js.map +1 -0
- package/dist/{chunk-H5VPBP7U.js → chunk-WKF4C6TJ.js} +10 -4
- package/dist/chunk-WKF4C6TJ.js.map +1 -0
- package/dist/{chunk-EJNMH7ND.js → chunk-WN557PFJ.js} +2 -2
- package/dist/chunk-WN557PFJ.js.map +1 -0
- package/dist/{chunk-VPHHGQWP.js → chunk-XLOGMDAQ.js} +3 -3
- package/dist/{chunk-VPHHGQWP.js.map → chunk-XLOGMDAQ.js.map} +1 -1
- package/dist/chunk-XUAHWX6B.js +153 -0
- package/dist/chunk-XUAHWX6B.js.map +1 -0
- package/dist/chunk-Y54KVULF.js +161 -0
- package/dist/chunk-Y54KVULF.js.map +1 -0
- package/dist/{chunk-JD4TEUIV.js → chunk-YFHKH6HL.js} +3 -7
- package/dist/chunk-YFHKH6HL.js.map +1 -0
- package/dist/{chunk-XYJMP23P.cjs → chunk-YP4XTMK3.cjs} +4 -10
- package/dist/chunk-YP4XTMK3.cjs.map +1 -0
- package/dist/{chunk-7JRGQL63.js → chunk-ZCBT56AG.js} +13 -4
- package/dist/chunk-ZCBT56AG.js.map +1 -0
- package/dist/{chunk-GCMI5JGQ.cjs → chunk-ZKM664KC.cjs} +2 -2
- package/dist/chunk-ZKM664KC.cjs.map +1 -0
- package/dist/{chunk-24ND5WB7.cjs → chunk-ZVSN7ADO.cjs} +3 -11
- package/dist/chunk-ZVSN7ADO.cjs.map +1 -0
- package/dist/chunk-ZWKUHYTV.cjs +155 -0
- package/dist/chunk-ZWKUHYTV.cjs.map +1 -0
- package/dist/index.cjs +113 -97
- package/dist/index.css +440 -56
- package/dist/index.css.map +1 -1
- package/dist/index.js +46 -46
- package/dist/src/icons.d.ts +29 -11
- package/dist/src/index.d.ts +3 -1
- package/package.json +1 -1
- package/dist/chunk-24ND5WB7.cjs.map +0 -1
- package/dist/chunk-2ARM7X7A.js.map +0 -1
- package/dist/chunk-2ORGQ2IY.js.map +0 -1
- package/dist/chunk-4DUMEO5E.cjs +0 -107
- package/dist/chunk-4DUMEO5E.cjs.map +0 -1
- package/dist/chunk-4GQ3X7MG.cjs.map +0 -1
- package/dist/chunk-4VGH44DT.js.map +0 -1
- package/dist/chunk-4YPT2HUD.cjs.map +0 -1
- package/dist/chunk-5GCEQDBM.cjs.map +0 -1
- package/dist/chunk-5MQCVYVD.js.map +0 -1
- package/dist/chunk-5WHBZH44.cjs.map +0 -1
- package/dist/chunk-6OKTK3AQ.cjs.map +0 -1
- package/dist/chunk-7AKHSOSZ.js.map +0 -1
- package/dist/chunk-7JRGQL63.js.map +0 -1
- package/dist/chunk-AJIIY2QT.cjs.map +0 -1
- package/dist/chunk-AVSFSS7S.cjs.map +0 -1
- package/dist/chunk-AXHJC7FV.js.map +0 -1
- package/dist/chunk-DFHFXKR5.cjs.map +0 -1
- package/dist/chunk-DKTB6PKI.js.map +0 -1
- package/dist/chunk-DNRZCHZG.js.map +0 -1
- package/dist/chunk-EIFN6XMU.cjs.map +0 -1
- package/dist/chunk-EJNMH7ND.js.map +0 -1
- package/dist/chunk-ELI3LL3K.cjs.map +0 -1
- package/dist/chunk-EQ7S5SYM.js +0 -67
- package/dist/chunk-EQ7S5SYM.js.map +0 -1
- package/dist/chunk-F42Z33L7.cjs.map +0 -1
- package/dist/chunk-FBOTWA6O.cjs.map +0 -1
- package/dist/chunk-FWRVCH7T.js +0 -37
- package/dist/chunk-FWRVCH7T.js.map +0 -1
- package/dist/chunk-FYFL4PFD.cjs +0 -69
- package/dist/chunk-FYFL4PFD.cjs.map +0 -1
- package/dist/chunk-G564WB32.cjs.map +0 -1
- package/dist/chunk-GCMI5JGQ.cjs.map +0 -1
- package/dist/chunk-GZCNFM6C.js.map +0 -1
- package/dist/chunk-H5VPBP7U.js.map +0 -1
- package/dist/chunk-I3HBI52O.js.map +0 -1
- package/dist/chunk-IECISUOZ.js.map +0 -1
- package/dist/chunk-IUR7SPDA.js.map +0 -1
- package/dist/chunk-JD4TEUIV.js.map +0 -1
- package/dist/chunk-KBBLTGIU.js.map +0 -1
- package/dist/chunk-KUW2ZR2A.cjs.map +0 -1
- package/dist/chunk-L7ULSFW6.cjs.map +0 -1
- package/dist/chunk-LBEGRYTP.js.map +0 -1
- package/dist/chunk-N7IQ6LYD.cjs.map +0 -1
- package/dist/chunk-NCNDJTOK.js.map +0 -1
- package/dist/chunk-NFC2C2TD.js.map +0 -1
- package/dist/chunk-NMYXVZQP.cjs.map +0 -1
- package/dist/chunk-OJEZ3TKT.js.map +0 -1
- package/dist/chunk-OYRX4AY6.js.map +0 -1
- package/dist/chunk-PBPGBVQQ.cjs.map +0 -1
- package/dist/chunk-PIIJVF5D.cjs.map +0 -1
- package/dist/chunk-PMNTOEXC.js.map +0 -1
- package/dist/chunk-Q4QF6UYX.cjs.map +0 -1
- package/dist/chunk-QI7XQDFZ.cjs.map +0 -1
- package/dist/chunk-QKSCFVN2.js.map +0 -1
- package/dist/chunk-R77VVMV5.cjs.map +0 -1
- package/dist/chunk-SMVAHIBN.cjs.map +0 -1
- package/dist/chunk-TGSKTHTV.js.map +0 -1
- package/dist/chunk-UT5UXO44.js.map +0 -1
- package/dist/chunk-VTANPKPT.js.map +0 -1
- package/dist/chunk-W6BUNUQM.cjs.map +0 -1
- package/dist/chunk-WWL4VEPH.js.map +0 -1
- package/dist/chunk-X4MEHYWV.js +0 -105
- package/dist/chunk-X4MEHYWV.js.map +0 -1
- package/dist/chunk-XMBTKO5I.cjs.map +0 -1
- package/dist/chunk-XO6PBAAM.cjs.map +0 -1
- package/dist/chunk-XYJMP23P.cjs.map +0 -1
- package/dist/chunk-YJESCN4Y.cjs +0 -39
- package/dist/chunk-YJESCN4Y.cjs.map +0 -1
- package/dist/chunk-YPVRTMX6.js.map +0 -1
- package/dist/chunk-ZAHKA2V2.js.map +0 -1
- package/dist/chunk-ZSK74QFN.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../DiffViewer/index.tsx"],"names":["i","j"],"mappings":"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","file":"chunk-BFQV5MYD.js","sourcesContent":["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\n\t\t\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\t\t: isAdd\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'rpc_diff_viewer_row_empty'\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}`}\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\n\t\t\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\t\t: isAdd\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'rpc_diff_viewer_row_empty'\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}`}\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\n\t\t\t\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\t\t\t: isDel\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'rpc_diff_viewer_row_empty'\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}`}\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\n\t\t\t\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\t\t\t: isDel\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'rpc_diff_viewer_row_empty'\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}`}\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"]}
|
|
@@ -84,15 +84,7 @@ var EnvBadge = ({
|
|
|
84
84
|
] }) : /* @__PURE__ */ jsx("div", { style: { color: "#8c8c8c", fontSize: 12, padding: "8px 0" }, children: "\u6682\u65E0\u8BE6\u7EC6\u6784\u5EFA\u5143\u6570\u636E" }),
|
|
85
85
|
switchList && switchList.length > 0 && /* @__PURE__ */ jsxs("div", { className: "rpc_env_badge_switch_wrap", children: [
|
|
86
86
|
/* @__PURE__ */ jsx("span", { style: { fontSize: 11, color: "#8c8c8c", width: "100%" }, children: "\u5207\u6362\u73AF\u5883\uFF1A" }),
|
|
87
|
-
switchList.map((item, idx) => /* @__PURE__ */ jsx(
|
|
88
|
-
"a",
|
|
89
|
-
{
|
|
90
|
-
href: item.url,
|
|
91
|
-
className: "rpc_env_badge_switch_btn",
|
|
92
|
-
children: item.label
|
|
93
|
-
},
|
|
94
|
-
idx
|
|
95
|
-
))
|
|
87
|
+
switchList.map((item, idx) => /* @__PURE__ */ jsx("a", { href: item.url, className: "rpc_env_badge_switch_btn", children: item.label }, idx))
|
|
96
88
|
] })
|
|
97
89
|
] })
|
|
98
90
|
]
|
|
@@ -102,5 +94,5 @@ var EnvBadge = ({
|
|
|
102
94
|
var EnvBadge_default = EnvBadge;
|
|
103
95
|
|
|
104
96
|
export { EnvBadge_default };
|
|
105
|
-
//# sourceMappingURL=chunk-
|
|
106
|
-
//# sourceMappingURL=chunk-
|
|
97
|
+
//# sourceMappingURL=chunk-BRHXKRG6.js.map
|
|
98
|
+
//# sourceMappingURL=chunk-BRHXKRG6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../EnvBadge/index.tsx"],"names":[],"mappings":"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","file":"chunk-BRHXKRG6.js","sourcesContent":["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%' }}>切换环境:</span>\n\t\t\t\t\t\t\t{switchList.map((item, idx) => (\n\t\t\t\t\t\t\t\t<a key={idx} href={item.url} className=\"rpc_env_badge_switch_btn\">\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"]}
|
|
@@ -172,5 +172,5 @@ var Watermark = ({
|
|
|
172
172
|
var Watermark_default = Watermark;
|
|
173
173
|
|
|
174
174
|
exports.Watermark_default = Watermark_default;
|
|
175
|
-
//# sourceMappingURL=chunk-
|
|
176
|
-
//# sourceMappingURL=chunk-
|
|
175
|
+
//# sourceMappingURL=chunk-CPQLXDBR.cjs.map
|
|
176
|
+
//# sourceMappingURL=chunk-CPQLXDBR.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../Watermark/index.tsx"],"names":["useRef","useCallback","useEffect","jsx"],"mappings":"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","file":"chunk-BXFP7EAW.cjs","sourcesContent":["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"]}
|
|
1
|
+
{"version":3,"sources":["../Watermark/index.tsx"],"names":["useRef","useCallback","useEffect","jsx"],"mappings":"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","file":"chunk-CPQLXDBR.cjs","sourcesContent":["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`\n\t\t.replace(/\\s+/g, ' ')\n\t\t.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"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RightOutlined } from './chunk-
|
|
1
|
+
import { RightOutlined } from './chunk-2IDVNTKR.js';
|
|
2
2
|
import { useState, useRef, useEffect } from 'react';
|
|
3
3
|
import ReactDOM from 'react-dom';
|
|
4
4
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
@@ -121,5 +121,5 @@ var ContextMenu = ({
|
|
|
121
121
|
var ContextMenu_default = ContextMenu;
|
|
122
122
|
|
|
123
123
|
export { ContextMenu_default };
|
|
124
|
-
//# sourceMappingURL=chunk-
|
|
125
|
-
//# sourceMappingURL=chunk-
|
|
124
|
+
//# sourceMappingURL=chunk-CURWX7OY.js.map
|
|
125
|
+
//# sourceMappingURL=chunk-CURWX7OY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../ContextMenu/index.tsx"],"names":[],"mappings":"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","file":"chunk-AIIXJB34.js","sourcesContent":["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"]}
|
|
1
|
+
{"version":3,"sources":["../ContextMenu/index.tsx"],"names":[],"mappings":"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","file":"chunk-CURWX7OY.js","sourcesContent":["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 =\n\t\tvisible && typeof document !== 'undefined'\n\t\t\t? ReactDOM.createPortal(\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={menuRef}\n\t\t\t\t\t\tclassName={`rpc_context_menu_panel ${menuClassName}`}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: `${position.x}px`,\n\t\t\t\t\t\t\ttop: `${position.y}px`,\n\t\t\t\t\t\t\t...menuStyle,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonContextMenu={(e) => e.preventDefault()}\n\t\t\t\t\t>\n\t\t\t\t\t\t{items.map((item) => renderMenuItem(item))}\n\t\t\t\t\t</div>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)\n\t\t\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"]}
|
|
@@ -117,20 +117,12 @@ var TreeFilterPanel = ({
|
|
|
117
117
|
selectedValues.length,
|
|
118
118
|
" \u9879"
|
|
119
119
|
] }),
|
|
120
|
-
selectedValues.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
121
|
-
"button",
|
|
122
|
-
{
|
|
123
|
-
type: "button",
|
|
124
|
-
className: "rpc_tree_filter_panel_clear_btn",
|
|
125
|
-
onClick: handleClear,
|
|
126
|
-
children: "\u6E05\u7A7A\u6240\u6709\u7B5B\u9009"
|
|
127
|
-
}
|
|
128
|
-
)
|
|
120
|
+
selectedValues.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "rpc_tree_filter_panel_clear_btn", onClick: handleClear, children: "\u6E05\u7A7A\u6240\u6709\u7B5B\u9009" })
|
|
129
121
|
] })
|
|
130
122
|
] });
|
|
131
123
|
};
|
|
132
124
|
var TreeFilterPanel_default = TreeFilterPanel;
|
|
133
125
|
|
|
134
126
|
exports.TreeFilterPanel_default = TreeFilterPanel_default;
|
|
135
|
-
//# sourceMappingURL=chunk-
|
|
136
|
-
//# sourceMappingURL=chunk-
|
|
127
|
+
//# sourceMappingURL=chunk-DJQEBDEP.cjs.map
|
|
128
|
+
//# sourceMappingURL=chunk-DJQEBDEP.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../TreeFilterPanel/index.tsx"],"names":["useState","jsxs","jsx"],"mappings":"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","file":"chunk-DJQEBDEP.cjs","sourcesContent":["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 type=\"button\" className=\"rpc_tree_filter_panel_clear_btn\" onClick={handleClear}>\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"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkR4V3EJVP_cjs = require('./chunk-R4V3EJVP.cjs');
|
|
4
4
|
var react = require('react');
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
|
|
@@ -154,7 +154,7 @@ var VideoPlayer = ({
|
|
|
154
154
|
),
|
|
155
155
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rpc_video_player_bar_row", children: [
|
|
156
156
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rpc_video_player_left_btns", children: [
|
|
157
|
-
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "rpc_video_player_btn", onClick: togglePlay, children: isPlaying ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
157
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "rpc_video_player_btn", onClick: togglePlay, children: isPlaying ? /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.PauseCircleOutlined, {}) : /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.PlayCircleOutlined, {}) }),
|
|
158
158
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
159
159
|
"button",
|
|
160
160
|
{
|
|
@@ -212,7 +212,7 @@ var VideoPlayer = ({
|
|
|
212
212
|
className: "rpc_video_player_btn",
|
|
213
213
|
onClick: toggleFullscreen,
|
|
214
214
|
title: "\u5168\u5C4F\u5207\u6362",
|
|
215
|
-
children: isFullscreen ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
215
|
+
children: isFullscreen ? /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.FullscreenExitOutlined, {}) : /* @__PURE__ */ jsxRuntime.jsx(chunkR4V3EJVP_cjs.FullscreenOutlined, {})
|
|
216
216
|
}
|
|
217
217
|
)
|
|
218
218
|
] })
|
|
@@ -227,5 +227,5 @@ var VideoPlayer = ({
|
|
|
227
227
|
var VideoPlayer_default = VideoPlayer;
|
|
228
228
|
|
|
229
229
|
exports.VideoPlayer_default = VideoPlayer_default;
|
|
230
|
-
//# sourceMappingURL=chunk-
|
|
231
|
-
//# sourceMappingURL=chunk-
|
|
230
|
+
//# sourceMappingURL=chunk-ED3ZG2VX.cjs.map
|
|
231
|
+
//# sourceMappingURL=chunk-ED3ZG2VX.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../VideoPlayer/index.tsx"],"names":["useRef","useState","jsxs","jsx","PauseCircleOutlined","PlayCircleOutlined","FullscreenExitOutlined","FullscreenOutlined"],"mappings":"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","file":"chunk-ZQBEQK2I.cjs","sourcesContent":["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"]}
|
|
1
|
+
{"version":3,"sources":["../VideoPlayer/index.tsx"],"names":["useRef","useState","jsxs","jsx","PauseCircleOutlined","PlayCircleOutlined","FullscreenExitOutlined","FullscreenOutlined"],"mappings":"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","file":"chunk-ED3ZG2VX.cjs","sourcesContent":["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"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CloseCircleFilled, DownOutlined } from './chunk-
|
|
1
|
+
import { CloseCircleFilled, DownOutlined } from './chunk-2IDVNTKR.js';
|
|
2
2
|
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
3
3
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
4
4
|
|
|
@@ -350,26 +350,23 @@ var ColorPicker = (props) => {
|
|
|
350
350
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
351
351
|
};
|
|
352
352
|
}, [isOpen, handleOpenChange]);
|
|
353
|
-
const handlePaletteDrag = useCallback(
|
|
354
|
-
(
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
},
|
|
371
|
-
[]
|
|
372
|
-
);
|
|
353
|
+
const handlePaletteDrag = useCallback((e) => {
|
|
354
|
+
if (!paletteRef.current) return;
|
|
355
|
+
const rect = paletteRef.current.getBoundingClientRect();
|
|
356
|
+
const x = Math.max(0, Math.min(rect.width, e.clientX - rect.left));
|
|
357
|
+
const y = Math.max(0, Math.min(rect.height, e.clientY - rect.top));
|
|
358
|
+
const s = Math.round(x / rect.width * 100);
|
|
359
|
+
const b = Math.round((1 - y / rect.height) * 100);
|
|
360
|
+
const curr = currentColorRef.current;
|
|
361
|
+
const targetAlpha = curr.a === 0 ? 1 : curr.a;
|
|
362
|
+
const newColor = new Color({
|
|
363
|
+
h: curr.h,
|
|
364
|
+
s,
|
|
365
|
+
b,
|
|
366
|
+
a: targetAlpha
|
|
367
|
+
});
|
|
368
|
+
updateColorRef.current(newColor);
|
|
369
|
+
}, []);
|
|
373
370
|
const handlePaletteMouseDown = (e) => {
|
|
374
371
|
e.preventDefault();
|
|
375
372
|
isDraggingRef.current = true;
|
|
@@ -390,24 +387,21 @@ var ColorPicker = (props) => {
|
|
|
390
387
|
window.addEventListener("mousemove", handleMouseMove);
|
|
391
388
|
window.addEventListener("mouseup", handleMouseUp);
|
|
392
389
|
};
|
|
393
|
-
const handleHueDrag = useCallback(
|
|
394
|
-
(
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
},
|
|
409
|
-
[]
|
|
410
|
-
);
|
|
390
|
+
const handleHueDrag = useCallback((e) => {
|
|
391
|
+
if (!hueSliderRef.current) return;
|
|
392
|
+
const rect = hueSliderRef.current.getBoundingClientRect();
|
|
393
|
+
const x = Math.max(0, Math.min(rect.width, e.clientX - rect.left));
|
|
394
|
+
const h = Math.round(x / rect.width * 360);
|
|
395
|
+
const curr = currentColorRef.current;
|
|
396
|
+
const targetAlpha = curr.a === 0 ? 1 : curr.a;
|
|
397
|
+
const newColor = new Color({
|
|
398
|
+
h: h === 360 ? 0 : h,
|
|
399
|
+
s: curr.s,
|
|
400
|
+
b: curr.b,
|
|
401
|
+
a: targetAlpha
|
|
402
|
+
});
|
|
403
|
+
updateColorRef.current(newColor);
|
|
404
|
+
}, []);
|
|
411
405
|
const handleHueMouseDown = (e) => {
|
|
412
406
|
e.preventDefault();
|
|
413
407
|
handleHueDrag(e);
|
|
@@ -422,23 +416,20 @@ var ColorPicker = (props) => {
|
|
|
422
416
|
window.addEventListener("mousemove", handleMouseMove);
|
|
423
417
|
window.addEventListener("mouseup", handleMouseUp);
|
|
424
418
|
};
|
|
425
|
-
const handleAlphaDrag = useCallback(
|
|
426
|
-
(
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
},
|
|
440
|
-
[]
|
|
441
|
-
);
|
|
419
|
+
const handleAlphaDrag = useCallback((e) => {
|
|
420
|
+
if (!alphaSliderRef.current) return;
|
|
421
|
+
const rect = alphaSliderRef.current.getBoundingClientRect();
|
|
422
|
+
const x = Math.max(0, Math.min(rect.width, e.clientX - rect.left));
|
|
423
|
+
const a = Number((x / rect.width).toFixed(2));
|
|
424
|
+
const curr = currentColorRef.current;
|
|
425
|
+
const newColor = new Color({
|
|
426
|
+
h: curr.h,
|
|
427
|
+
s: curr.s,
|
|
428
|
+
b: curr.b,
|
|
429
|
+
a
|
|
430
|
+
});
|
|
431
|
+
updateColorRef.current(newColor);
|
|
432
|
+
}, []);
|
|
442
433
|
const handleAlphaMouseDown = (e) => {
|
|
443
434
|
e.preventDefault();
|
|
444
435
|
handleAlphaDrag(e);
|
|
@@ -534,7 +525,18 @@ var ColorPicker = (props) => {
|
|
|
534
525
|
className: "react-public-color-picker-panel-clear-btn",
|
|
535
526
|
onClick: handleClearClick,
|
|
536
527
|
title: "\u6E05\u9664\u989C\u8272",
|
|
537
|
-
children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", width: "14", height: "14", fill: "none", children: /* @__PURE__ */ jsx(
|
|
528
|
+
children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", width: "14", height: "14", fill: "none", children: /* @__PURE__ */ jsx(
|
|
529
|
+
"line",
|
|
530
|
+
{
|
|
531
|
+
x1: "4",
|
|
532
|
+
y1: "4",
|
|
533
|
+
x2: "20",
|
|
534
|
+
y2: "20",
|
|
535
|
+
stroke: "#ff4d4f",
|
|
536
|
+
strokeWidth: "2.5",
|
|
537
|
+
strokeLinecap: "round"
|
|
538
|
+
}
|
|
539
|
+
) })
|
|
538
540
|
}
|
|
539
541
|
)
|
|
540
542
|
] }),
|
|
@@ -916,5 +918,5 @@ var ColorPicker = (props) => {
|
|
|
916
918
|
var ColorPicker_default = ColorPicker;
|
|
917
919
|
|
|
918
920
|
export { Color, ColorPicker_default, generateColor };
|
|
919
|
-
//# sourceMappingURL=chunk-
|
|
920
|
-
//# sourceMappingURL=chunk-
|
|
921
|
+
//# sourceMappingURL=chunk-EDNBPLUS.js.map
|
|
922
|
+
//# sourceMappingURL=chunk-EDNBPLUS.js.map
|