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.
- package/dist/ActivityLog/index.cjs +9 -0
- package/dist/ActivityLog/index.cjs.map +1 -0
- package/dist/ActivityLog/index.css +117 -0
- package/dist/ActivityLog/index.css.map +1 -0
- package/dist/ActivityLog/index.d.ts +32 -0
- package/dist/ActivityLog/index.js +3 -0
- package/dist/ActivityLog/index.js.map +1 -0
- package/dist/AnnouncementBar/index.cjs +9 -0
- package/dist/AnnouncementBar/index.cjs.map +1 -0
- package/dist/AnnouncementBar/index.css +37 -0
- package/dist/AnnouncementBar/index.css.map +1 -0
- package/dist/AnnouncementBar/index.d.ts +18 -0
- package/dist/AnnouncementBar/index.js +3 -0
- package/dist/AnnouncementBar/index.js.map +1 -0
- package/dist/AudioPlayer/index.cjs +10 -0
- package/dist/AudioPlayer/index.cjs.map +1 -0
- package/dist/AudioPlayer/index.css +105 -0
- package/dist/AudioPlayer/index.css.map +1 -0
- package/dist/AudioPlayer/index.d.ts +18 -0
- package/dist/AudioPlayer/index.js +4 -0
- package/dist/AudioPlayer/index.js.map +1 -0
- package/dist/BadgeRibbon/index.cjs +9 -0
- package/dist/BadgeRibbon/index.cjs.map +1 -0
- package/dist/BadgeRibbon/index.css +48 -0
- package/dist/BadgeRibbon/index.css.map +1 -0
- package/dist/BadgeRibbon/index.d.ts +19 -0
- package/dist/BadgeRibbon/index.js +3 -0
- package/dist/BadgeRibbon/index.js.map +1 -0
- package/dist/BorderBeam/index.cjs +9 -0
- package/dist/BorderBeam/index.cjs.map +1 -0
- package/dist/BorderBeam/index.css +40 -0
- package/dist/BorderBeam/index.css.map +1 -0
- package/dist/BorderBeam/index.d.ts +24 -0
- package/dist/BorderBeam/index.js +3 -0
- package/dist/BorderBeam/index.js.map +1 -0
- package/dist/CascadeDrawer/index.cjs +9 -0
- package/dist/CascadeDrawer/index.cjs.map +1 -0
- package/dist/CascadeDrawer/index.css +73 -0
- package/dist/CascadeDrawer/index.css.map +1 -0
- package/dist/CascadeDrawer/index.d.ts +23 -0
- package/dist/CascadeDrawer/index.js +3 -0
- package/dist/CascadeDrawer/index.js.map +1 -0
- package/dist/CodeSnippet/index.cjs +9 -0
- package/dist/CodeSnippet/index.cjs.map +1 -0
- package/dist/CodeSnippet/index.css +131 -0
- package/dist/CodeSnippet/index.css.map +1 -0
- package/dist/CodeSnippet/index.d.ts +23 -0
- package/dist/CodeSnippet/index.js +3 -0
- package/dist/CodeSnippet/index.js.map +1 -0
- package/dist/CollapseBox/index.cjs +10 -0
- package/dist/CollapseBox/index.cjs.map +1 -0
- package/dist/CollapseBox/index.css +106 -0
- package/dist/CollapseBox/index.css.map +1 -0
- package/dist/CollapseBox/index.d.ts +17 -0
- package/dist/CollapseBox/index.js +4 -0
- package/dist/CollapseBox/index.js.map +1 -0
- package/dist/ColorPicker/Color.d.ts +48 -0
- package/dist/ColorPicker/index.cjs +23 -0
- package/dist/ColorPicker/index.cjs.map +1 -0
- package/dist/ColorPicker/index.css +422 -0
- package/dist/ColorPicker/index.css.map +1 -0
- package/dist/ColorPicker/index.d.ts +48 -0
- package/dist/ColorPicker/index.js +4 -0
- package/dist/ColorPicker/index.js.map +1 -0
- package/dist/ContextMenu/index.cjs +10 -0
- package/dist/ContextMenu/index.cjs.map +1 -0
- package/dist/ContextMenu/index.css +107 -0
- package/dist/ContextMenu/index.css.map +1 -0
- package/dist/ContextMenu/index.d.ts +42 -0
- package/dist/ContextMenu/index.js +4 -0
- package/dist/ContextMenu/index.js.map +1 -0
- package/dist/CopyButton/index.cjs +10 -0
- package/dist/CopyButton/index.cjs.map +1 -0
- package/dist/CopyButton/index.css +122 -0
- package/dist/CopyButton/index.css.map +1 -0
- package/dist/CopyButton/index.d.ts +36 -0
- package/dist/CopyButton/index.js +4 -0
- package/dist/CopyButton/index.js.map +1 -0
- package/dist/CountUp/index.cjs +9 -0
- package/dist/CountUp/index.cjs.map +1 -0
- package/dist/CountUp/index.css +23 -0
- package/dist/CountUp/index.css.map +1 -0
- package/dist/CountUp/index.d.ts +40 -0
- package/dist/CountUp/index.js +3 -0
- package/dist/CountUp/index.js.map +1 -0
- package/dist/CronPicker/index.cjs +11 -0
- package/dist/CronPicker/index.cjs.map +1 -0
- package/dist/CronPicker/index.css +215 -0
- package/dist/CronPicker/index.css.map +1 -0
- package/dist/CronPicker/index.d.ts +17 -0
- package/dist/CronPicker/index.js +5 -0
- package/dist/CronPicker/index.js.map +1 -0
- package/dist/DebounceSelect/index.cjs +10 -0
- package/dist/DebounceSelect/index.cjs.map +1 -0
- package/dist/DebounceSelect/index.css +156 -0
- package/dist/DebounceSelect/index.css.map +1 -0
- package/dist/DebounceSelect/index.d.ts +39 -0
- package/dist/DebounceSelect/index.js +4 -0
- package/dist/DebounceSelect/index.js.map +1 -0
- package/dist/DiffViewer/index.cjs +9 -0
- package/dist/DiffViewer/index.cjs.map +1 -0
- package/dist/DiffViewer/index.css +90 -0
- package/dist/DiffViewer/index.css.map +1 -0
- package/dist/DiffViewer/index.d.ts +21 -0
- package/dist/DiffViewer/index.js +3 -0
- package/dist/DiffViewer/index.js.map +1 -0
- package/dist/DisabledBox/index.cjs +10 -0
- package/dist/DisabledBox/index.cjs.map +1 -0
- package/dist/DisabledBox/index.css +35 -0
- package/dist/DisabledBox/index.css.map +1 -0
- package/dist/DisabledBox/index.d.ts +18 -0
- package/dist/DisabledBox/index.js +4 -0
- package/dist/DisabledBox/index.js.map +1 -0
- package/dist/DragSortList/index.cjs +9 -0
- package/dist/DragSortList/index.cjs.map +1 -0
- package/dist/DragSortList/index.css +44 -0
- package/dist/DragSortList/index.css.map +1 -0
- package/dist/DragSortList/index.d.ts +18 -0
- package/dist/DragSortList/index.js +3 -0
- package/dist/DragSortList/index.js.map +1 -0
- package/dist/DualRangeSlider/index.cjs +9 -0
- package/dist/DualRangeSlider/index.cjs.map +1 -0
- package/dist/DualRangeSlider/index.css +41 -0
- package/dist/DualRangeSlider/index.css.map +1 -0
- package/dist/DualRangeSlider/index.d.ts +22 -0
- package/dist/DualRangeSlider/index.js +3 -0
- package/dist/DualRangeSlider/index.js.map +1 -0
- package/dist/EnvBadge/index.cjs +9 -0
- package/dist/EnvBadge/index.cjs.map +1 -0
- package/dist/EnvBadge/index.css +123 -0
- package/dist/EnvBadge/index.css.map +1 -0
- package/dist/EnvBadge/index.d.ts +36 -0
- package/dist/EnvBadge/index.js +3 -0
- package/dist/EnvBadge/index.js.map +1 -0
- package/dist/FileDropZone/index.cjs +9 -0
- package/dist/FileDropZone/index.cjs.map +1 -0
- package/dist/FileDropZone/index.css +39 -0
- package/dist/FileDropZone/index.css.map +1 -0
- package/dist/FileDropZone/index.d.ts +20 -0
- package/dist/FileDropZone/index.js +3 -0
- package/dist/FileDropZone/index.js.map +1 -0
- package/dist/FilePreviewer/index.cjs +19 -0
- package/dist/FilePreviewer/index.cjs.map +1 -0
- package/dist/FilePreviewer/index.css +155 -0
- package/dist/FilePreviewer/index.css.map +1 -0
- package/dist/FilePreviewer/index.d.ts +38 -0
- package/dist/FilePreviewer/index.js +4 -0
- package/dist/FilePreviewer/index.js.map +1 -0
- package/dist/FilterChips/index.cjs +9 -0
- package/dist/FilterChips/index.cjs.map +1 -0
- package/dist/FilterChips/index.css +52 -0
- package/dist/FilterChips/index.css.map +1 -0
- package/dist/FilterChips/index.d.ts +23 -0
- package/dist/FilterChips/index.js +3 -0
- package/dist/FilterChips/index.js.map +1 -0
- package/dist/FlipCard/index.cjs +9 -0
- package/dist/FlipCard/index.cjs.map +1 -0
- package/dist/FlipCard/index.css +46 -0
- package/dist/FlipCard/index.css.map +1 -0
- package/dist/FlipCard/index.d.ts +28 -0
- package/dist/FlipCard/index.js +3 -0
- package/dist/FlipCard/index.js.map +1 -0
- package/dist/Fullscreen/index.cjs +10 -0
- package/dist/Fullscreen/index.cjs.map +1 -0
- package/dist/Fullscreen/index.css +112 -0
- package/dist/Fullscreen/index.css.map +1 -0
- package/dist/Fullscreen/index.d.ts +49 -0
- package/dist/Fullscreen/index.js +4 -0
- package/dist/Fullscreen/index.js.map +1 -0
- package/dist/GradientText/index.cjs +9 -0
- package/dist/GradientText/index.cjs.map +1 -0
- package/dist/GradientText/index.css +22 -0
- package/dist/GradientText/index.css.map +1 -0
- package/dist/GradientText/index.d.ts +18 -0
- package/dist/GradientText/index.js +3 -0
- package/dist/GradientText/index.js.map +1 -0
- package/dist/GuidedTour/index.cjs +10 -0
- package/dist/GuidedTour/index.cjs.map +1 -0
- package/dist/GuidedTour/index.css +105 -0
- package/dist/GuidedTour/index.css.map +1 -0
- package/dist/GuidedTour/index.d.ts +35 -0
- package/dist/GuidedTour/index.js +4 -0
- package/dist/GuidedTour/index.js.map +1 -0
- package/dist/HoverCard/index.cjs +9 -0
- package/dist/HoverCard/index.cjs.map +1 -0
- package/dist/HoverCard/index.css +31 -0
- package/dist/HoverCard/index.css.map +1 -0
- package/dist/HoverCard/index.d.ts +18 -0
- package/dist/HoverCard/index.js +3 -0
- package/dist/HoverCard/index.js.map +1 -0
- package/dist/ImageCropper/index.cjs +10 -0
- package/dist/ImageCropper/index.cjs.map +1 -0
- package/dist/ImageCropper/index.css +181 -0
- package/dist/ImageCropper/index.css.map +1 -0
- package/dist/ImageCropper/index.d.ts +45 -0
- package/dist/ImageCropper/index.js +4 -0
- package/dist/ImageCropper/index.js.map +1 -0
- package/dist/InfiniteScrollList/index.cjs +10 -0
- package/dist/InfiniteScrollList/index.cjs.map +1 -0
- package/dist/InfiniteScrollList/index.css +35 -0
- package/dist/InfiniteScrollList/index.css.map +1 -0
- package/dist/InfiniteScrollList/index.d.ts +28 -0
- package/dist/InfiniteScrollList/index.js +4 -0
- package/dist/InfiniteScrollList/index.js.map +1 -0
- package/dist/JsonDiffViewer/index.cjs +9 -0
- package/dist/JsonDiffViewer/index.cjs.map +1 -0
- package/dist/JsonDiffViewer/index.css +48 -0
- package/dist/JsonDiffViewer/index.css.map +1 -0
- package/dist/JsonDiffViewer/index.d.ts +14 -0
- package/dist/JsonDiffViewer/index.js +3 -0
- package/dist/JsonDiffViewer/index.js.map +1 -0
- package/dist/JsonEditor/index.cjs +11 -0
- package/dist/JsonEditor/index.cjs.map +1 -0
- package/dist/JsonEditor/index.css +230 -0
- package/dist/JsonEditor/index.css.map +1 -0
- package/dist/JsonEditor/index.d.ts +26 -0
- package/dist/JsonEditor/index.js +5 -0
- package/dist/JsonEditor/index.js.map +1 -0
- package/dist/JsonTree/index.cjs +9 -0
- package/dist/JsonTree/index.cjs.map +1 -0
- package/dist/JsonTree/index.css +58 -0
- package/dist/JsonTree/index.css.map +1 -0
- package/dist/JsonTree/index.d.ts +14 -0
- package/dist/JsonTree/index.js +3 -0
- package/dist/JsonTree/index.js.map +1 -0
- package/dist/KanbanBoard/index.cjs +9 -0
- package/dist/KanbanBoard/index.cjs.map +1 -0
- package/dist/KanbanBoard/index.css +80 -0
- package/dist/KanbanBoard/index.css.map +1 -0
- package/dist/KanbanBoard/index.d.ts +24 -0
- package/dist/KanbanBoard/index.js +3 -0
- package/dist/KanbanBoard/index.js.map +1 -0
- package/dist/KeyValEditor/index.cjs +10 -0
- package/dist/KeyValEditor/index.cjs.map +1 -0
- package/dist/KeyValEditor/index.css +72 -0
- package/dist/KeyValEditor/index.css.map +1 -0
- package/dist/KeyValEditor/index.d.ts +28 -0
- package/dist/KeyValEditor/index.js +4 -0
- package/dist/KeyValEditor/index.js.map +1 -0
- package/dist/Marquee/index.cjs +9 -0
- package/dist/Marquee/index.cjs.map +1 -0
- package/dist/Marquee/index.css +99 -0
- package/dist/Marquee/index.css.map +1 -0
- package/dist/Marquee/index.d.ts +27 -0
- package/dist/Marquee/index.js +3 -0
- package/dist/Marquee/index.js.map +1 -0
- package/dist/Masonry/index.cjs +9 -0
- package/dist/Masonry/index.cjs.map +1 -0
- package/dist/Masonry/index.css +15 -0
- package/dist/Masonry/index.css.map +1 -0
- package/dist/Masonry/index.d.ts +58 -0
- package/dist/Masonry/index.js +3 -0
- package/dist/Masonry/index.js.map +1 -0
- package/dist/MetricCard/index.cjs +10 -0
- package/dist/MetricCard/index.cjs.map +1 -0
- package/dist/MetricCard/index.css +105 -0
- package/dist/MetricCard/index.css.map +1 -0
- package/dist/MetricCard/index.d.ts +32 -0
- package/dist/MetricCard/index.js +4 -0
- package/dist/MetricCard/index.js.map +1 -0
- package/dist/MiniSparkline/index.cjs +9 -0
- package/dist/MiniSparkline/index.cjs.map +1 -0
- package/dist/MiniSparkline/index.css +11 -0
- package/dist/MiniSparkline/index.css.map +1 -0
- package/dist/MiniSparkline/index.d.ts +20 -0
- package/dist/MiniSparkline/index.js +3 -0
- package/dist/MiniSparkline/index.js.map +1 -0
- package/dist/NumberStepper/index.cjs +9 -0
- package/dist/NumberStepper/index.cjs.map +1 -0
- package/dist/NumberStepper/index.css +45 -0
- package/dist/NumberStepper/index.css.map +1 -0
- package/dist/NumberStepper/index.d.ts +24 -0
- package/dist/NumberStepper/index.js +3 -0
- package/dist/NumberStepper/index.js.map +1 -0
- package/dist/NumericRangeInput/index.cjs +9 -0
- package/dist/NumericRangeInput/index.cjs.map +1 -0
- package/dist/NumericRangeInput/index.css +87 -0
- package/dist/NumericRangeInput/index.css.map +1 -0
- package/dist/NumericRangeInput/index.d.ts +39 -0
- package/dist/NumericRangeInput/index.js +3 -0
- package/dist/NumericRangeInput/index.js.map +1 -0
- package/dist/PasswordStrength/index.cjs +19 -0
- package/dist/PasswordStrength/index.cjs.map +1 -0
- package/dist/PasswordStrength/index.css +66 -0
- package/dist/PasswordStrength/index.css.map +1 -0
- package/dist/PasswordStrength/index.d.ts +31 -0
- package/dist/PasswordStrength/index.js +4 -0
- package/dist/PasswordStrength/index.js.map +1 -0
- package/dist/PdfViewer/index.cjs +10 -0
- package/dist/PdfViewer/index.cjs.map +1 -0
- package/dist/PdfViewer/index.css +65 -0
- package/dist/PdfViewer/index.css.map +1 -0
- package/dist/PdfViewer/index.d.ts +20 -0
- package/dist/PdfViewer/index.js +4 -0
- package/dist/PdfViewer/index.js.map +1 -0
- package/dist/PhotoViewer/index.cjs +9 -0
- package/dist/PhotoViewer/index.cjs.map +1 -0
- package/dist/PhotoViewer/index.css +129 -0
- package/dist/PhotoViewer/index.css.map +1 -0
- package/dist/PhotoViewer/index.d.ts +23 -0
- package/dist/PhotoViewer/index.js +3 -0
- package/dist/PhotoViewer/index.js.map +1 -0
- package/dist/QrCodeCard/index.cjs +10 -0
- package/dist/QrCodeCard/index.cjs.map +1 -0
- package/dist/QrCodeCard/index.css +109 -0
- package/dist/QrCodeCard/index.css.map +1 -0
- package/dist/QrCodeCard/index.d.ts +27 -0
- package/dist/QrCodeCard/index.js +4 -0
- package/dist/QrCodeCard/index.js.map +1 -0
- package/dist/QuickDateRange/index.cjs +9 -0
- package/dist/QuickDateRange/index.cjs.map +1 -0
- package/dist/QuickDateRange/index.css +30 -0
- package/dist/QuickDateRange/index.css.map +1 -0
- package/dist/QuickDateRange/index.d.ts +22 -0
- package/dist/QuickDateRange/index.js +3 -0
- package/dist/QuickDateRange/index.js.map +1 -0
- package/dist/ScrollTracker/index.cjs +22 -0
- package/dist/ScrollTracker/index.cjs.map +1 -0
- package/dist/ScrollTracker/index.css +48 -0
- package/dist/ScrollTracker/index.css.map +1 -0
- package/dist/ScrollTracker/index.d.ts +37 -0
- package/dist/ScrollTracker/index.js +3 -0
- package/dist/ScrollTracker/index.js.map +1 -0
- package/dist/SegmentedProgress/index.cjs +9 -0
- package/dist/SegmentedProgress/index.cjs.map +1 -0
- package/dist/SegmentedProgress/index.css +42 -0
- package/dist/SegmentedProgress/index.css.map +1 -0
- package/dist/SegmentedProgress/index.d.ts +24 -0
- package/dist/SegmentedProgress/index.js +3 -0
- package/dist/SegmentedProgress/index.js.map +1 -0
- package/dist/SensitiveMask/index.cjs +20 -0
- package/dist/SensitiveMask/index.cjs.map +1 -0
- package/dist/SensitiveMask/index.css +149 -0
- package/dist/SensitiveMask/index.css.map +1 -0
- package/dist/SensitiveMask/index.d.ts +30 -0
- package/dist/SensitiveMask/index.js +5 -0
- package/dist/SensitiveMask/index.js.map +1 -0
- package/dist/ShimmerSkeleton/index.cjs +9 -0
- package/dist/ShimmerSkeleton/index.cjs.map +1 -0
- package/dist/ShimmerSkeleton/index.css +55 -0
- package/dist/ShimmerSkeleton/index.css.map +1 -0
- package/dist/ShimmerSkeleton/index.d.ts +19 -0
- package/dist/ShimmerSkeleton/index.js +3 -0
- package/dist/ShimmerSkeleton/index.js.map +1 -0
- package/dist/Splitter/index.cjs +10 -0
- package/dist/Splitter/index.cjs.map +1 -0
- package/dist/Splitter/index.d.ts +94 -0
- package/dist/Splitter/index.js +4 -0
- package/dist/Splitter/index.js.map +1 -0
- package/dist/SpotlightCard/index.cjs +9 -0
- package/dist/SpotlightCard/index.cjs.map +1 -0
- package/dist/SpotlightCard/index.css +34 -0
- package/dist/SpotlightCard/index.css.map +1 -0
- package/dist/SpotlightCard/index.d.ts +18 -0
- package/dist/SpotlightCard/index.js +3 -0
- package/dist/SpotlightCard/index.js.map +1 -0
- package/dist/StatusTimeline/index.cjs +9 -0
- package/dist/StatusTimeline/index.cjs.map +1 -0
- package/dist/StatusTimeline/index.css +111 -0
- package/dist/StatusTimeline/index.css.map +1 -0
- package/dist/StatusTimeline/index.d.ts +25 -0
- package/dist/StatusTimeline/index.js +3 -0
- package/dist/StatusTimeline/index.js.map +1 -0
- package/dist/TagInput/index.cjs +10 -0
- package/dist/TagInput/index.cjs.map +1 -0
- package/dist/TagInput/index.css +108 -0
- package/dist/TagInput/index.css.map +1 -0
- package/dist/TagInput/index.d.ts +32 -0
- package/dist/TagInput/index.js +4 -0
- package/dist/TagInput/index.js.map +1 -0
- package/dist/TextEllipsis/index.cjs +11 -0
- package/dist/TextEllipsis/index.cjs.map +1 -0
- package/dist/TextEllipsis/index.css +217 -0
- package/dist/TextEllipsis/index.css.map +1 -0
- package/dist/TextEllipsis/index.d.ts +34 -0
- package/dist/TextEllipsis/index.js +5 -0
- package/dist/TextEllipsis/index.js.map +1 -0
- package/dist/TiltCard/index.cjs +9 -0
- package/dist/TiltCard/index.cjs.map +1 -0
- package/dist/TiltCard/index.css +32 -0
- package/dist/TiltCard/index.css.map +1 -0
- package/dist/TiltCard/index.d.ts +20 -0
- package/dist/TiltCard/index.js +3 -0
- package/dist/TiltCard/index.js.map +1 -0
- package/dist/TreeFilterPanel/index.cjs +9 -0
- package/dist/TreeFilterPanel/index.cjs.map +1 -0
- package/dist/TreeFilterPanel/index.css +67 -0
- package/dist/TreeFilterPanel/index.css.map +1 -0
- package/dist/TreeFilterPanel/index.d.ts +27 -0
- package/dist/TreeFilterPanel/index.js +3 -0
- package/dist/TreeFilterPanel/index.js.map +1 -0
- package/dist/TreeTransfer/index.cjs +10 -0
- package/dist/TreeTransfer/index.cjs.map +1 -0
- package/dist/TreeTransfer/index.css +67 -0
- package/dist/TreeTransfer/index.css.map +1 -0
- package/dist/TreeTransfer/index.d.ts +27 -0
- package/dist/TreeTransfer/index.js +4 -0
- package/dist/TreeTransfer/index.js.map +1 -0
- package/dist/TrendIndicator/index.cjs +9 -0
- package/dist/TrendIndicator/index.cjs.map +1 -0
- package/dist/TrendIndicator/index.css +42 -0
- package/dist/TrendIndicator/index.css.map +1 -0
- package/dist/TrendIndicator/index.d.ts +22 -0
- package/dist/TrendIndicator/index.js +3 -0
- package/dist/TrendIndicator/index.js.map +1 -0
- package/dist/VideoPlayer/index.cjs +10 -0
- package/dist/VideoPlayer/index.cjs.map +1 -0
- package/dist/VideoPlayer/index.css +122 -0
- package/dist/VideoPlayer/index.css.map +1 -0
- package/dist/VideoPlayer/index.d.ts +24 -0
- package/dist/VideoPlayer/index.js +4 -0
- package/dist/VideoPlayer/index.js.map +1 -0
- package/dist/VirtualList/index.cjs +9 -0
- package/dist/VirtualList/index.cjs.map +1 -0
- package/dist/VirtualList/index.css +26 -0
- package/dist/VirtualList/index.css.map +1 -0
- package/dist/VirtualList/index.d.ts +22 -0
- package/dist/VirtualList/index.js +3 -0
- package/dist/VirtualList/index.js.map +1 -0
- package/dist/Watermark/index.cjs +9 -0
- package/dist/Watermark/index.cjs.map +1 -0
- package/dist/Watermark/index.css +24 -0
- package/dist/Watermark/index.css.map +1 -0
- package/dist/Watermark/index.d.ts +28 -0
- package/dist/Watermark/index.js +3 -0
- package/dist/Watermark/index.js.map +1 -0
- package/dist/chunk-2DIU347W.cjs +159 -0
- package/dist/chunk-2DIU347W.cjs.map +1 -0
- package/dist/chunk-2MDYHFLH.cjs +73 -0
- package/dist/chunk-2MDYHFLH.cjs.map +1 -0
- package/dist/chunk-2O2A5XYF.js +59 -0
- package/dist/chunk-2O2A5XYF.js.map +1 -0
- package/dist/chunk-2UCTE6YN.cjs +176 -0
- package/dist/chunk-2UCTE6YN.cjs.map +1 -0
- package/dist/chunk-3JJP4D5L.js +92 -0
- package/dist/chunk-3JJP4D5L.js.map +1 -0
- package/dist/chunk-3R3NOO4K.js +71 -0
- package/dist/chunk-3R3NOO4K.js.map +1 -0
- package/dist/chunk-3UNZXPOT.cjs +926 -0
- package/dist/chunk-3UNZXPOT.cjs.map +1 -0
- package/dist/chunk-4BDO5TJH.cjs +213 -0
- package/dist/chunk-4BDO5TJH.cjs.map +1 -0
- package/dist/chunk-4OXVTRYV.cjs +106 -0
- package/dist/chunk-4OXVTRYV.cjs.map +1 -0
- package/dist/chunk-56TD4LDC.js +125 -0
- package/dist/chunk-56TD4LDC.js.map +1 -0
- package/dist/chunk-5E36FGRP.cjs +98 -0
- package/dist/chunk-5E36FGRP.cjs.map +1 -0
- package/dist/chunk-5GLC2HU6.js +174 -0
- package/dist/chunk-5GLC2HU6.js.map +1 -0
- package/dist/chunk-5GOF5EZU.cjs +87 -0
- package/dist/chunk-5GOF5EZU.cjs.map +1 -0
- package/dist/chunk-5HIRDMZH.js +96 -0
- package/dist/chunk-5HIRDMZH.js.map +1 -0
- package/dist/chunk-5LA2NPLG.cjs +81 -0
- package/dist/chunk-5LA2NPLG.cjs.map +1 -0
- package/dist/chunk-5R2YXBXM.js +126 -0
- package/dist/chunk-5R2YXBXM.js.map +1 -0
- package/dist/chunk-5V4UAS6I.cjs +103 -0
- package/dist/chunk-5V4UAS6I.cjs.map +1 -0
- package/dist/chunk-5VSEUDVY.js +45 -0
- package/dist/chunk-5VSEUDVY.js.map +1 -0
- package/dist/chunk-5YQVSOHK.js +44 -0
- package/dist/chunk-5YQVSOHK.js.map +1 -0
- package/dist/chunk-64LBDDZU.js +104 -0
- package/dist/chunk-64LBDDZU.js.map +1 -0
- package/dist/chunk-6FVAQECF.js +103 -0
- package/dist/chunk-6FVAQECF.js.map +1 -0
- package/dist/chunk-6IXVUD2M.js +71 -0
- package/dist/chunk-6IXVUD2M.js.map +1 -0
- package/dist/chunk-6TKNFV4B.js +53 -0
- package/dist/chunk-6TKNFV4B.js.map +1 -0
- package/dist/chunk-6UKUAYN3.cjs +625 -0
- package/dist/chunk-6UKUAYN3.cjs.map +1 -0
- package/dist/chunk-6UTLBY6Y.js +51 -0
- package/dist/chunk-6UTLBY6Y.js.map +1 -0
- package/dist/chunk-7SIUSULP.cjs +103 -0
- package/dist/chunk-7SIUSULP.cjs.map +1 -0
- package/dist/chunk-A4LXKZQ5.js +80 -0
- package/dist/chunk-A4LXKZQ5.js.map +1 -0
- package/dist/chunk-AFR7V4A4.js +81 -0
- package/dist/chunk-AFR7V4A4.js.map +1 -0
- package/dist/chunk-AMCCRVHG.cjs +57 -0
- package/dist/chunk-AMCCRVHG.cjs.map +1 -0
- package/dist/chunk-B3HZIYQQ.cjs +46 -0
- package/dist/chunk-B3HZIYQQ.cjs.map +1 -0
- package/dist/chunk-B4VXFHER.js +63 -0
- package/dist/chunk-B4VXFHER.js.map +1 -0
- package/dist/chunk-B7NN6SZD.cjs +108 -0
- package/dist/chunk-B7NN6SZD.cjs.map +1 -0
- package/dist/chunk-BFQV5MYD.js +159 -0
- package/dist/chunk-BFQV5MYD.js.map +1 -0
- package/dist/chunk-BRHXKRG6.js +98 -0
- package/dist/chunk-BRHXKRG6.js.map +1 -0
- package/dist/chunk-BZXMWKD2.js +922 -0
- package/dist/chunk-BZXMWKD2.js.map +1 -0
- package/dist/chunk-CPQLXDBR.cjs +176 -0
- package/dist/chunk-CPQLXDBR.cjs.map +1 -0
- package/dist/chunk-CT66HLZ5.js +229 -0
- package/dist/chunk-CT66HLZ5.js.map +1 -0
- package/dist/chunk-D7ZE4NMX.cjs +30 -0
- package/dist/chunk-D7ZE4NMX.cjs.map +1 -0
- package/dist/chunk-DJQEBDEP.cjs +128 -0
- package/dist/chunk-DJQEBDEP.cjs.map +1 -0
- package/dist/chunk-EGZSSZBX.js +211 -0
- package/dist/chunk-EGZSSZBX.js.map +1 -0
- package/dist/chunk-EOGYWPX7.cjs +47 -0
- package/dist/chunk-EOGYWPX7.cjs.map +1 -0
- package/dist/chunk-EPYD35KB.cjs +99 -0
- package/dist/chunk-EPYD35KB.cjs.map +1 -0
- package/dist/chunk-EQ7S5SYM.js +67 -0
- package/dist/chunk-EQ7S5SYM.js.map +1 -0
- package/dist/chunk-ES3KKDLM.js +245 -0
- package/dist/chunk-ES3KKDLM.js.map +1 -0
- package/dist/chunk-EUOBMHFF.cjs +45 -0
- package/dist/chunk-EUOBMHFF.cjs.map +1 -0
- package/dist/chunk-F36V2QTN.js +28 -0
- package/dist/chunk-F36V2QTN.js.map +1 -0
- package/dist/chunk-F5X3V6A3.cjs +55 -0
- package/dist/chunk-F5X3V6A3.cjs.map +1 -0
- package/dist/chunk-FYFL4PFD.cjs +69 -0
- package/dist/chunk-FYFL4PFD.cjs.map +1 -0
- package/dist/chunk-GMZSBGSL.cjs +66 -0
- package/dist/chunk-GMZSBGSL.cjs.map +1 -0
- package/dist/chunk-GV2RRQ2S.cjs +45 -0
- package/dist/chunk-GV2RRQ2S.cjs.map +1 -0
- package/dist/chunk-H3AASAXK.cjs +82 -0
- package/dist/chunk-H3AASAXK.cjs.map +1 -0
- package/dist/chunk-HFPWBZID.js +89 -0
- package/dist/chunk-HFPWBZID.js.map +1 -0
- package/dist/chunk-HSYTBMLN.cjs +44 -0
- package/dist/chunk-HSYTBMLN.cjs.map +1 -0
- package/dist/chunk-HUXPCMNP.js +127 -0
- package/dist/chunk-HUXPCMNP.js.map +1 -0
- package/dist/chunk-HZERTFL6.js +97 -0
- package/dist/chunk-HZERTFL6.js.map +1 -0
- package/dist/chunk-IBI6AT5Z.js +37 -0
- package/dist/chunk-IBI6AT5Z.js.map +1 -0
- package/dist/chunk-IBOCJ2ZS.js +147 -0
- package/dist/chunk-IBOCJ2ZS.js.map +1 -0
- package/dist/chunk-IBYFOFSS.js +79 -0
- package/dist/chunk-IBYFOFSS.js.map +1 -0
- package/dist/chunk-IRU5E252.cjs +65 -0
- package/dist/chunk-IRU5E252.cjs.map +1 -0
- package/dist/chunk-ISUXPTLV.js +504 -0
- package/dist/chunk-ISUXPTLV.js.map +1 -0
- package/dist/chunk-J3IKUWXD.js +102 -0
- package/dist/chunk-J3IKUWXD.js.map +1 -0
- package/dist/chunk-JAW7Q2YC.cjs +127 -0
- package/dist/chunk-JAW7Q2YC.cjs.map +1 -0
- package/dist/chunk-JECYRODB.js +619 -0
- package/dist/chunk-JECYRODB.js.map +1 -0
- package/dist/chunk-JEDW76LI.cjs +107 -0
- package/dist/chunk-JEDW76LI.cjs.map +1 -0
- package/dist/chunk-K3JC52JH.cjs +49 -0
- package/dist/chunk-K3JC52JH.cjs.map +1 -0
- package/dist/chunk-KCXXUUWC.js +47 -0
- package/dist/chunk-KCXXUUWC.js.map +1 -0
- package/dist/chunk-KGZNVN7P.cjs +39 -0
- package/dist/chunk-KGZNVN7P.cjs.map +1 -0
- package/dist/chunk-KXZM322K.cjs +70 -0
- package/dist/chunk-KXZM322K.cjs.map +1 -0
- package/dist/chunk-L7X3RVEY.js +101 -0
- package/dist/chunk-L7X3RVEY.js.map +1 -0
- package/dist/chunk-LFXMUCEO.cjs +73 -0
- package/dist/chunk-LFXMUCEO.cjs.map +1 -0
- package/dist/chunk-LLWK5VKA.js +125 -0
- package/dist/chunk-LLWK5VKA.js.map +1 -0
- package/dist/chunk-MBOWSS4B.cjs +530 -0
- package/dist/chunk-MBOWSS4B.cjs.map +1 -0
- package/dist/chunk-MC3NERDH.js +43 -0
- package/dist/chunk-MC3NERDH.js.map +1 -0
- package/dist/chunk-MGUNFP6P.js +68 -0
- package/dist/chunk-MGUNFP6P.js.map +1 -0
- package/dist/chunk-MGYDOC76.cjs +81 -0
- package/dist/chunk-MGYDOC76.cjs.map +1 -0
- package/dist/chunk-MLYM5LAX.js +53 -0
- package/dist/chunk-MLYM5LAX.js.map +1 -0
- package/dist/chunk-MNY5P5EG.cjs +232 -0
- package/dist/chunk-MNY5P5EG.cjs.map +1 -0
- package/dist/chunk-MY4M7HVW.cjs +161 -0
- package/dist/chunk-MY4M7HVW.cjs.map +1 -0
- package/dist/chunk-NJIYP6SC.cjs +123 -0
- package/dist/chunk-NJIYP6SC.cjs.map +1 -0
- package/dist/chunk-NNS4YN3C.js +42 -0
- package/dist/chunk-NNS4YN3C.js.map +1 -0
- package/dist/chunk-NUTVJGVT.cjs +153 -0
- package/dist/chunk-NUTVJGVT.cjs.map +1 -0
- package/dist/chunk-O2YTJPG4.js +64 -0
- package/dist/chunk-O2YTJPG4.js.map +1 -0
- package/dist/chunk-OBK6XTUY.js +119 -0
- package/dist/chunk-OBK6XTUY.js.map +1 -0
- package/dist/chunk-OCN7L2ID.cjs +106 -0
- package/dist/chunk-OCN7L2ID.cjs.map +1 -0
- package/dist/chunk-ODNGFJVN.cjs +100 -0
- package/dist/chunk-ODNGFJVN.cjs.map +1 -0
- package/dist/chunk-ODV3XF5W.cjs +71 -0
- package/dist/chunk-ODV3XF5W.cjs.map +1 -0
- package/dist/chunk-OKCQZO5E.js +315 -0
- package/dist/chunk-OKCQZO5E.js.map +1 -0
- package/dist/chunk-PJB7ADK6.js +225 -0
- package/dist/chunk-PJB7ADK6.js.map +1 -0
- package/dist/chunk-PUJJHD22.js +106 -0
- package/dist/chunk-PUJJHD22.js.map +1 -0
- package/dist/chunk-PUTAVQJZ.js +286 -0
- package/dist/chunk-PUTAVQJZ.js.map +1 -0
- package/dist/chunk-QNSEJGF6.cjs +121 -0
- package/dist/chunk-QNSEJGF6.cjs.map +1 -0
- package/dist/chunk-QZZGBUW4.js +121 -0
- package/dist/chunk-QZZGBUW4.js.map +1 -0
- package/dist/chunk-RAF7I4A5.js +44 -0
- package/dist/chunk-RAF7I4A5.js.map +1 -0
- package/dist/chunk-RIR43PO3.js +69 -0
- package/dist/chunk-RIR43PO3.js.map +1 -0
- package/dist/chunk-TNKJCJ3U.cjs +94 -0
- package/dist/chunk-TNKJCJ3U.cjs.map +1 -0
- package/dist/chunk-UCG7ZVK5.cjs +46 -0
- package/dist/chunk-UCG7ZVK5.cjs.map +1 -0
- package/dist/chunk-V4O325BX.cjs +84 -0
- package/dist/chunk-V4O325BX.cjs.map +1 -0
- package/dist/chunk-V7IUSCQS.js +157 -0
- package/dist/chunk-V7IUSCQS.js.map +1 -0
- package/dist/chunk-VF5P7XMC.cjs +161 -0
- package/dist/chunk-VF5P7XMC.cjs.map +1 -0
- package/dist/chunk-VIJ3PXCW.cjs +104 -0
- package/dist/chunk-VIJ3PXCW.cjs.map +1 -0
- package/dist/chunk-VJM2XBHZ.cjs +31 -0
- package/dist/chunk-VJM2XBHZ.cjs.map +1 -0
- package/dist/chunk-VQKPZ4YE.cjs +251 -0
- package/dist/chunk-VQKPZ4YE.cjs.map +1 -0
- package/dist/chunk-VS2YVJOB.cjs +129 -0
- package/dist/chunk-VS2YVJOB.cjs.map +1 -0
- package/dist/chunk-WDHU3BSM.cjs +55 -0
- package/dist/chunk-WDHU3BSM.cjs.map +1 -0
- package/dist/chunk-WEGDIRDB.js +101 -0
- package/dist/chunk-WEGDIRDB.js.map +1 -0
- package/dist/chunk-WEOMKZC6.js +174 -0
- package/dist/chunk-WEOMKZC6.js.map +1 -0
- package/dist/chunk-WN557PFJ.js +122 -0
- package/dist/chunk-WN557PFJ.js.map +1 -0
- package/dist/chunk-WWXBH57R.cjs +95 -0
- package/dist/chunk-WWXBH57R.cjs.map +1 -0
- package/dist/chunk-WZ2GV4HA.js +49 -0
- package/dist/chunk-WZ2GV4HA.js.map +1 -0
- package/dist/chunk-WZRUBHS3.cjs +231 -0
- package/dist/chunk-WZRUBHS3.cjs.map +1 -0
- package/dist/chunk-X2F2DVMB.js +85 -0
- package/dist/chunk-X2F2DVMB.js.map +1 -0
- package/dist/chunk-XOMV26WS.js +105 -0
- package/dist/chunk-XOMV26WS.js.map +1 -0
- package/dist/chunk-XWHITF5V.cjs +31 -0
- package/dist/chunk-XWHITF5V.cjs.map +1 -0
- package/dist/chunk-XWXFENGT.js +159 -0
- package/dist/chunk-XWXFENGT.js.map +1 -0
- package/dist/chunk-Y7A3WQQN.js +79 -0
- package/dist/chunk-Y7A3WQQN.js.map +1 -0
- package/dist/chunk-YFHKH6HL.js +43 -0
- package/dist/chunk-YFHKH6HL.js.map +1 -0
- package/dist/chunk-YXTLWTY4.js +29 -0
- package/dist/chunk-YXTLWTY4.js.map +1 -0
- package/dist/chunk-ZFBLVX7E.cjs +51 -0
- package/dist/chunk-ZFBLVX7E.cjs.map +1 -0
- package/dist/chunk-ZKM664KC.cjs +126 -0
- package/dist/chunk-ZKM664KC.cjs.map +1 -0
- package/dist/chunk-ZLHNRKOQ.js +29 -0
- package/dist/chunk-ZLHNRKOQ.js.map +1 -0
- package/dist/chunk-ZLWY7QS2.cjs +292 -0
- package/dist/chunk-ZLWY7QS2.cjs.map +1 -0
- package/dist/chunk-ZNFW6L3E.cjs +321 -0
- package/dist/chunk-ZNFW6L3E.cjs.map +1 -0
- package/dist/chunk-ZUW3XLZQ.cjs +131 -0
- package/dist/chunk-ZUW3XLZQ.cjs.map +1 -0
- package/dist/chunk-ZVSN7ADO.cjs +61 -0
- package/dist/chunk-ZVSN7ADO.cjs.map +1 -0
- package/dist/index.cjs +334 -8101
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +79 -11
- package/dist/index.css.map +1 -1
- package/dist/index.js +63 -8026
- package/dist/index.js.map +1 -1
- package/dist/src/icons.d.ts +70 -0
- package/dist/src/index.d.ts +124 -0
- package/dist/tsup.config.d.ts +2 -0
- package/dist/vite.config.d.ts +2 -0
- package/package.json +17 -3
- package/dist/index.d.cts +0 -1624
- package/dist/index.d.ts +0 -1624
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import { ZoomInOutlined, ZoomOutOutlined, RotateRightOutlined, CloseOutlined, CheckOutlined } from './chunk-ISUXPTLV.js';
|
|
2
|
+
import { forwardRef, useRef, useState, useEffect, useCallback, useImperativeHandle } from 'react';
|
|
3
|
+
import ReactDOM from 'react-dom';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var ImageCropper = forwardRef(
|
|
7
|
+
({
|
|
8
|
+
src,
|
|
9
|
+
aspectRatio = 1,
|
|
10
|
+
shape = "rect",
|
|
11
|
+
modal = false,
|
|
12
|
+
title = "\u56FE\u7247\u88C1\u526A",
|
|
13
|
+
open = true,
|
|
14
|
+
onOk,
|
|
15
|
+
onCancel,
|
|
16
|
+
height = 360,
|
|
17
|
+
className = "",
|
|
18
|
+
style
|
|
19
|
+
}, ref) => {
|
|
20
|
+
const canvasRef = useRef(null);
|
|
21
|
+
const containerRef = useRef(null);
|
|
22
|
+
const imgRef = useRef(null);
|
|
23
|
+
const [scale, setScale] = useState(1);
|
|
24
|
+
const [rotateDeg, setRotateDeg] = useState(0);
|
|
25
|
+
const [offset, setOffset] = useState({ x: 0, y: 0 });
|
|
26
|
+
const isDraggingRef = useRef(false);
|
|
27
|
+
const dragStartRef = useRef({ x: 0, y: 0 });
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (!src) return;
|
|
30
|
+
const img = new Image();
|
|
31
|
+
img.crossOrigin = "anonymous";
|
|
32
|
+
img.src = src;
|
|
33
|
+
img.onload = () => {
|
|
34
|
+
imgRef.current = img;
|
|
35
|
+
setScale(1);
|
|
36
|
+
setRotateDeg(0);
|
|
37
|
+
setOffset({ x: 0, y: 0 });
|
|
38
|
+
renderCanvas(1, 0, { x: 0, y: 0 });
|
|
39
|
+
};
|
|
40
|
+
}, [src]);
|
|
41
|
+
const renderCanvas = useCallback(
|
|
42
|
+
(curScale, curDeg, curOffset) => {
|
|
43
|
+
const canvas = canvasRef.current;
|
|
44
|
+
const img = imgRef.current;
|
|
45
|
+
if (!canvas || !img) return;
|
|
46
|
+
const ctx = canvas.getContext("2d");
|
|
47
|
+
if (!ctx) return;
|
|
48
|
+
const dpr = window.devicePixelRatio || 1;
|
|
49
|
+
const width = canvas.clientWidth || 400;
|
|
50
|
+
const canvasHeight = canvas.clientHeight || height;
|
|
51
|
+
canvas.width = width * dpr;
|
|
52
|
+
canvas.height = canvasHeight * dpr;
|
|
53
|
+
ctx.scale(dpr, dpr);
|
|
54
|
+
ctx.clearRect(0, 0, width, canvasHeight);
|
|
55
|
+
ctx.save();
|
|
56
|
+
const centerX = width / 2 + curOffset.x;
|
|
57
|
+
const centerY = canvasHeight / 2 + curOffset.y;
|
|
58
|
+
ctx.translate(centerX, centerY);
|
|
59
|
+
ctx.rotate(curDeg * Math.PI / 180);
|
|
60
|
+
ctx.scale(curScale, curScale);
|
|
61
|
+
const imgWidth = img.naturalWidth || img.width;
|
|
62
|
+
const imgHeight = img.naturalHeight || img.height;
|
|
63
|
+
const baseRatio = Math.min(width * 0.8 / imgWidth, canvasHeight * 0.8 / imgHeight, 1);
|
|
64
|
+
const renderW = imgWidth * baseRatio;
|
|
65
|
+
const renderH = imgHeight * baseRatio;
|
|
66
|
+
ctx.drawImage(img, -renderW / 2, -renderH / 2, renderW, renderH);
|
|
67
|
+
ctx.restore();
|
|
68
|
+
},
|
|
69
|
+
[height]
|
|
70
|
+
);
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
renderCanvas(scale, rotateDeg, offset);
|
|
73
|
+
}, [scale, rotateDeg, offset, renderCanvas]);
|
|
74
|
+
const handleMouseDown = (e) => {
|
|
75
|
+
isDraggingRef.current = true;
|
|
76
|
+
dragStartRef.current = { x: e.clientX - offset.x, y: e.clientY - offset.y };
|
|
77
|
+
};
|
|
78
|
+
const handleMouseMove = (e) => {
|
|
79
|
+
if (!isDraggingRef.current) return;
|
|
80
|
+
const nextOffset = {
|
|
81
|
+
x: e.clientX - dragStartRef.current.x,
|
|
82
|
+
y: e.clientY - dragStartRef.current.y
|
|
83
|
+
};
|
|
84
|
+
setOffset(nextOffset);
|
|
85
|
+
};
|
|
86
|
+
const handleMouseUp = () => {
|
|
87
|
+
isDraggingRef.current = false;
|
|
88
|
+
};
|
|
89
|
+
const handleWheel = (e) => {
|
|
90
|
+
e.preventDefault();
|
|
91
|
+
const zoomStep = e.deltaY < 0 ? 0.1 : -0.1;
|
|
92
|
+
setScale((prev) => Math.min(Math.max(0.2, prev + zoomStep), 5));
|
|
93
|
+
};
|
|
94
|
+
const handleRotate = (deg = 90) => {
|
|
95
|
+
setRotateDeg((prev) => (prev + deg) % 360);
|
|
96
|
+
};
|
|
97
|
+
const handleZoom = (delta) => {
|
|
98
|
+
setScale((prev) => Math.min(Math.max(0.2, prev + delta), 5));
|
|
99
|
+
};
|
|
100
|
+
const handleReset = () => {
|
|
101
|
+
setScale(1);
|
|
102
|
+
setRotateDeg(0);
|
|
103
|
+
setOffset({ x: 0, y: 0 });
|
|
104
|
+
};
|
|
105
|
+
const getCropBoxRect = () => {
|
|
106
|
+
const container = containerRef.current;
|
|
107
|
+
const containerW = (container == null ? void 0 : container.clientWidth) || 400;
|
|
108
|
+
const containerH = height;
|
|
109
|
+
let boxW = Math.min(containerW * 0.7, 240);
|
|
110
|
+
let boxH = aspectRatio ? boxW / aspectRatio : boxW;
|
|
111
|
+
if (boxH > containerH * 0.8) {
|
|
112
|
+
boxH = containerH * 0.8;
|
|
113
|
+
boxW = aspectRatio ? boxH * aspectRatio : boxH;
|
|
114
|
+
}
|
|
115
|
+
const boxLeft = (containerW - boxW) / 2;
|
|
116
|
+
const boxTop = (containerH - boxH) / 2;
|
|
117
|
+
return { left: boxLeft, top: boxTop, width: boxW, height: boxH };
|
|
118
|
+
};
|
|
119
|
+
const getCroppedResult = useCallback(
|
|
120
|
+
async (type = "image/png", quality = 0.92) => {
|
|
121
|
+
const canvas = canvasRef.current;
|
|
122
|
+
if (!canvas) throw new Error("Canvas not found");
|
|
123
|
+
const cropBox2 = getCropBoxRect();
|
|
124
|
+
const dpr = window.devicePixelRatio || 1;
|
|
125
|
+
const cropCanvas = document.createElement("canvas");
|
|
126
|
+
cropCanvas.width = cropBox2.width * dpr;
|
|
127
|
+
cropCanvas.height = cropBox2.height * dpr;
|
|
128
|
+
const cropCtx = cropCanvas.getContext("2d");
|
|
129
|
+
if (!cropCtx) throw new Error("Failed to create canvas context");
|
|
130
|
+
if (shape === "round") {
|
|
131
|
+
cropCtx.beginPath();
|
|
132
|
+
cropCtx.arc(
|
|
133
|
+
cropBox2.width * dpr / 2,
|
|
134
|
+
cropBox2.height * dpr / 2,
|
|
135
|
+
cropBox2.width * dpr / 2,
|
|
136
|
+
0,
|
|
137
|
+
Math.PI * 2
|
|
138
|
+
);
|
|
139
|
+
cropCtx.closePath();
|
|
140
|
+
cropCtx.clip();
|
|
141
|
+
}
|
|
142
|
+
cropCtx.drawImage(
|
|
143
|
+
canvas,
|
|
144
|
+
cropBox2.left * dpr,
|
|
145
|
+
cropBox2.top * dpr,
|
|
146
|
+
cropBox2.width * dpr,
|
|
147
|
+
cropBox2.height * dpr,
|
|
148
|
+
0,
|
|
149
|
+
0,
|
|
150
|
+
cropBox2.width * dpr,
|
|
151
|
+
cropBox2.height * dpr
|
|
152
|
+
);
|
|
153
|
+
const dataURL = cropCanvas.toDataURL(type, quality);
|
|
154
|
+
const blob = await new Promise((resolve) => {
|
|
155
|
+
cropCanvas.toBlob((b) => resolve(b), type, quality);
|
|
156
|
+
});
|
|
157
|
+
return {
|
|
158
|
+
dataURL,
|
|
159
|
+
blob,
|
|
160
|
+
width: Math.round(cropBox2.width),
|
|
161
|
+
height: Math.round(cropBox2.height)
|
|
162
|
+
};
|
|
163
|
+
},
|
|
164
|
+
[shape, aspectRatio, height]
|
|
165
|
+
);
|
|
166
|
+
useImperativeHandle(
|
|
167
|
+
ref,
|
|
168
|
+
() => ({
|
|
169
|
+
getCroppedResult,
|
|
170
|
+
rotate: handleRotate,
|
|
171
|
+
zoom: handleZoom,
|
|
172
|
+
reset: handleReset
|
|
173
|
+
}),
|
|
174
|
+
[getCroppedResult]
|
|
175
|
+
);
|
|
176
|
+
const handleConfirm = async () => {
|
|
177
|
+
const res = await getCroppedResult();
|
|
178
|
+
onOk == null ? void 0 : onOk(res);
|
|
179
|
+
};
|
|
180
|
+
const cropBox = getCropBoxRect();
|
|
181
|
+
const coreContent = /* @__PURE__ */ jsxs("div", { className: `rpc_image_cropper ${className}`, style: { ...style }, children: [
|
|
182
|
+
/* @__PURE__ */ jsxs(
|
|
183
|
+
"div",
|
|
184
|
+
{
|
|
185
|
+
ref: containerRef,
|
|
186
|
+
className: "rpc_image_cropper_canvas_wrap",
|
|
187
|
+
style: { height },
|
|
188
|
+
onMouseDown: handleMouseDown,
|
|
189
|
+
onMouseMove: handleMouseMove,
|
|
190
|
+
onMouseUp: handleMouseUp,
|
|
191
|
+
onMouseLeave: handleMouseUp,
|
|
192
|
+
onWheel: handleWheel,
|
|
193
|
+
children: [
|
|
194
|
+
/* @__PURE__ */ jsx(
|
|
195
|
+
"canvas",
|
|
196
|
+
{
|
|
197
|
+
ref: canvasRef,
|
|
198
|
+
className: "rpc_image_cropper_canvas",
|
|
199
|
+
style: { width: "100%", height }
|
|
200
|
+
}
|
|
201
|
+
),
|
|
202
|
+
/* @__PURE__ */ jsx(
|
|
203
|
+
"div",
|
|
204
|
+
{
|
|
205
|
+
className: `rpc_image_cropper_crop_box ${shape === "round" ? "rpc_image_cropper_crop_box_round" : ""}`,
|
|
206
|
+
style: {
|
|
207
|
+
left: `${cropBox.left}px`,
|
|
208
|
+
top: `${cropBox.top}px`,
|
|
209
|
+
width: `${cropBox.width}px`,
|
|
210
|
+
height: `${cropBox.height}px`
|
|
211
|
+
},
|
|
212
|
+
children: shape === "rect" && /* @__PURE__ */ jsx("div", { className: "rpc_image_cropper_crop_box_grid" })
|
|
213
|
+
}
|
|
214
|
+
)
|
|
215
|
+
]
|
|
216
|
+
}
|
|
217
|
+
),
|
|
218
|
+
/* @__PURE__ */ jsxs("div", { className: "rpc_image_cropper_toolbar", children: [
|
|
219
|
+
/* @__PURE__ */ jsxs(
|
|
220
|
+
"button",
|
|
221
|
+
{
|
|
222
|
+
type: "button",
|
|
223
|
+
className: "rpc_image_cropper_btn",
|
|
224
|
+
onClick: () => handleZoom(0.1),
|
|
225
|
+
title: "\u653E\u5927",
|
|
226
|
+
children: [
|
|
227
|
+
/* @__PURE__ */ jsx(ZoomInOutlined, {}),
|
|
228
|
+
" \u653E\u5927"
|
|
229
|
+
]
|
|
230
|
+
}
|
|
231
|
+
),
|
|
232
|
+
/* @__PURE__ */ jsxs(
|
|
233
|
+
"button",
|
|
234
|
+
{
|
|
235
|
+
type: "button",
|
|
236
|
+
className: "rpc_image_cropper_btn",
|
|
237
|
+
onClick: () => handleZoom(-0.1),
|
|
238
|
+
title: "\u7F29\u5C0F",
|
|
239
|
+
children: [
|
|
240
|
+
/* @__PURE__ */ jsx(ZoomOutOutlined, {}),
|
|
241
|
+
" \u7F29\u5C0F"
|
|
242
|
+
]
|
|
243
|
+
}
|
|
244
|
+
),
|
|
245
|
+
/* @__PURE__ */ jsxs(
|
|
246
|
+
"button",
|
|
247
|
+
{
|
|
248
|
+
type: "button",
|
|
249
|
+
className: "rpc_image_cropper_btn",
|
|
250
|
+
onClick: () => handleRotate(90),
|
|
251
|
+
title: "\u987A\u65F6\u9488\u65CB\u8F6C90\xB0",
|
|
252
|
+
children: [
|
|
253
|
+
/* @__PURE__ */ jsx(RotateRightOutlined, {}),
|
|
254
|
+
" \u65CB\u8F6C"
|
|
255
|
+
]
|
|
256
|
+
}
|
|
257
|
+
),
|
|
258
|
+
/* @__PURE__ */ jsx(
|
|
259
|
+
"button",
|
|
260
|
+
{
|
|
261
|
+
type: "button",
|
|
262
|
+
className: "rpc_image_cropper_btn",
|
|
263
|
+
onClick: handleReset,
|
|
264
|
+
title: "\u91CD\u7F6E",
|
|
265
|
+
children: "\u91CD\u7F6E"
|
|
266
|
+
}
|
|
267
|
+
)
|
|
268
|
+
] })
|
|
269
|
+
] });
|
|
270
|
+
if (modal) {
|
|
271
|
+
if (!open) return null;
|
|
272
|
+
return ReactDOM.createPortal(
|
|
273
|
+
/* @__PURE__ */ jsx("div", { className: "rpc_cropper_modal", onClick: onCancel, children: /* @__PURE__ */ jsxs("div", { className: "rpc_cropper_modal_card", onClick: (e) => e.stopPropagation(), children: [
|
|
274
|
+
/* @__PURE__ */ jsxs("div", { className: "rpc_cropper_modal_header", children: [
|
|
275
|
+
/* @__PURE__ */ jsx("span", { children: title }),
|
|
276
|
+
/* @__PURE__ */ jsx(CloseOutlined, { className: "rpc_cropper_modal_close", onClick: onCancel })
|
|
277
|
+
] }),
|
|
278
|
+
/* @__PURE__ */ jsx("div", { style: { padding: 16, background: "#141414" }, children: coreContent }),
|
|
279
|
+
/* @__PURE__ */ jsxs("div", { className: "rpc_cropper_modal_footer", children: [
|
|
280
|
+
/* @__PURE__ */ jsx(
|
|
281
|
+
"button",
|
|
282
|
+
{
|
|
283
|
+
type: "button",
|
|
284
|
+
className: "rpc_image_cropper_btn",
|
|
285
|
+
style: { background: "#ffffff", color: "#262626", borderColor: "#d9d9d9" },
|
|
286
|
+
onClick: onCancel,
|
|
287
|
+
children: "\u53D6\u6D88"
|
|
288
|
+
}
|
|
289
|
+
),
|
|
290
|
+
/* @__PURE__ */ jsxs(
|
|
291
|
+
"button",
|
|
292
|
+
{
|
|
293
|
+
type: "button",
|
|
294
|
+
className: "rpc_image_cropper_btn rpc_image_cropper_btn_primary",
|
|
295
|
+
onClick: handleConfirm,
|
|
296
|
+
children: [
|
|
297
|
+
/* @__PURE__ */ jsx(CheckOutlined, {}),
|
|
298
|
+
" \u786E\u5B9A\u88C1\u526A"
|
|
299
|
+
]
|
|
300
|
+
}
|
|
301
|
+
)
|
|
302
|
+
] })
|
|
303
|
+
] }) }),
|
|
304
|
+
document.body
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
return coreContent;
|
|
308
|
+
}
|
|
309
|
+
);
|
|
310
|
+
ImageCropper.displayName = "ImageCropper";
|
|
311
|
+
var ImageCropper_default = ImageCropper;
|
|
312
|
+
|
|
313
|
+
export { ImageCropper_default };
|
|
314
|
+
//# sourceMappingURL=chunk-OKCQZO5E.js.map
|
|
315
|
+
//# sourceMappingURL=chunk-OKCQZO5E.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../ImageCropper/index.tsx"],"names":["cropBox"],"mappings":"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","file":"chunk-OKCQZO5E.js","sourcesContent":["import React, {\n\tuseState,\n\tuseRef,\n\tuseEffect,\n\tuseCallback,\n\tuseImperativeHandle,\n\tforwardRef,\n\tReactNode,\n\tCSSProperties,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n\tRotateRightOutlined,\n\tZoomInOutlined,\n\tZoomOutOutlined,\n\tCloseOutlined,\n\tCheckOutlined,\n} from '../src/icons';\nimport './index.less';\n\nexport type CropShape = 'rect' | 'round';\n\nexport interface CropResult {\n\tdataURL: string;\n\tblob: Blob | null;\n\twidth: number;\n\theight: number;\n}\n\nexport interface ImageCropperRef {\n\t/** 获取当前裁剪结果(DataURL 与 Blob) */\n\tgetCroppedResult: (type?: string, quality?: number) => Promise<CropResult>;\n\t/** 顺时针旋转 90 度 */\n\trotate: (degree?: number) => void;\n\t/** 缩放图片 */\n\tzoom: (delta: number) => void;\n\t/** 重置所有变换参数 */\n\treset: () => void;\n}\n\nexport interface ImageCropperProps {\n\t/** 图片源地址或 Base64 字符串 */\n\tsrc: string;\n\t/** 裁剪框宽高比(如 1 代表 1:1 正方形,16/9 代表宽屏,0 代表自由矩形),默认为 1 */\n\taspectRatio?: number;\n\t/** 裁剪框形状:'rect' 矩形,'round' 圆形(适合头像),默认为 'rect' */\n\tshape?: CropShape;\n\t/** 是否以 Modal 模态弹窗形式展示,默认为 false */\n\tmodal?: boolean;\n\t/** Modal 模式下的标题,默认为 '图片裁剪' */\n\ttitle?: ReactNode;\n\t/** Modal 模式下的显隐受控状态 */\n\topen?: boolean;\n\t/** 确认裁剪回调 */\n\tonOk?: (result: CropResult) => void;\n\t/** 取消/关闭回调 */\n\tonCancel?: () => void;\n\t/** 容器高度(内联模式有效),默认为 360 */\n\theight?: number;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\nconst ImageCropper = forwardRef<ImageCropperRef, ImageCropperProps>(\n\t(\n\t\t{\n\t\t\tsrc,\n\t\t\taspectRatio = 1,\n\t\t\tshape = 'rect',\n\t\t\tmodal = false,\n\t\t\ttitle = '图片裁剪',\n\t\t\topen = true,\n\t\t\tonOk,\n\t\t\tonCancel,\n\t\t\theight = 360,\n\t\t\tclassName = '',\n\t\t\tstyle,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst canvasRef = useRef<HTMLCanvasElement>(null);\n\t\tconst containerRef = useRef<HTMLDivElement>(null);\n\t\tconst imgRef = useRef<HTMLImageElement | null>(null);\n\n\t\t// 图片变换参数\n\t\tconst [scale, setScale] = useState<number>(1);\n\t\tconst [rotateDeg, setRotateDeg] = useState<number>(0);\n\t\tconst [offset, setOffset] = useState<{ x: number; y: number }>({ x: 0, y: 0 });\n\t\tconst isDraggingRef = useRef<boolean>(false);\n\t\tconst dragStartRef = useRef<{ x: number; y: number }>({ x: 0, y: 0 });\n\n\t\t// 加载图片\n\t\tuseEffect(() => {\n\t\t\tif (!src) return;\n\t\t\tconst img = new Image();\n\t\t\timg.crossOrigin = 'anonymous';\n\t\t\timg.src = src;\n\t\t\timg.onload = () => {\n\t\t\t\timgRef.current = img;\n\t\t\t\t// 初始计算合适缩放比例\n\t\t\t\tsetScale(1);\n\t\t\t\tsetRotateDeg(0);\n\t\t\t\tsetOffset({ x: 0, y: 0 });\n\t\t\t\trenderCanvas(1, 0, { x: 0, y: 0 });\n\t\t\t};\n\t\t}, [src]);\n\n\t\t// 重新渲染 Canvas\n\t\tconst renderCanvas = useCallback(\n\t\t\t(curScale: number, curDeg: number, curOffset: { x: number; y: number }) => {\n\t\t\t\tconst canvas = canvasRef.current;\n\t\t\t\tconst img = imgRef.current;\n\t\t\t\tif (!canvas || !img) return;\n\n\t\t\t\tconst ctx = canvas.getContext('2d');\n\t\t\t\tif (!ctx) return;\n\n\t\t\t\tconst dpr = window.devicePixelRatio || 1;\n\t\t\t\tconst width = canvas.clientWidth || 400;\n\t\t\t\tconst canvasHeight = canvas.clientHeight || height;\n\n\t\t\t\tcanvas.width = width * dpr;\n\t\t\t\tcanvas.height = canvasHeight * dpr;\n\t\t\t\tctx.scale(dpr, dpr);\n\n\t\t\t\tctx.clearRect(0, 0, width, canvasHeight);\n\t\t\t\tctx.save();\n\n\t\t\t\t// 移动到中心点进行旋转、缩放与平移\n\t\t\t\tconst centerX = width / 2 + curOffset.x;\n\t\t\t\tconst centerY = canvasHeight / 2 + curOffset.y;\n\n\t\t\t\tctx.translate(centerX, centerY);\n\t\t\t\tctx.rotate((curDeg * Math.PI) / 180);\n\t\t\t\tctx.scale(curScale, curScale);\n\n\t\t\t\t// 居中绘制原始图像\n\t\t\t\tconst imgWidth = img.naturalWidth || img.width;\n\t\t\t\tconst imgHeight = img.naturalHeight || img.height;\n\n\t\t\t\t// 保持图像按比例自适应居中\n\t\t\t\tconst baseRatio = Math.min((width * 0.8) / imgWidth, (canvasHeight * 0.8) / imgHeight, 1);\n\t\t\t\tconst renderW = imgWidth * baseRatio;\n\t\t\t\tconst renderH = imgHeight * baseRatio;\n\n\t\t\t\tctx.drawImage(img, -renderW / 2, -renderH / 2, renderW, renderH);\n\t\t\t\tctx.restore();\n\t\t\t},\n\t\t\t[height],\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\trenderCanvas(scale, rotateDeg, offset);\n\t\t}, [scale, rotateDeg, offset, renderCanvas]);\n\n\t\t// 鼠标拖拽平移\n\t\tconst handleMouseDown = (e: React.MouseEvent) => {\n\t\t\tisDraggingRef.current = true;\n\t\t\tdragStartRef.current = { x: e.clientX - offset.x, y: e.clientY - offset.y };\n\t\t};\n\n\t\tconst handleMouseMove = (e: React.MouseEvent) => {\n\t\t\tif (!isDraggingRef.current) return;\n\t\t\tconst nextOffset = {\n\t\t\t\tx: e.clientX - dragStartRef.current.x,\n\t\t\t\ty: e.clientY - dragStartRef.current.y,\n\t\t\t};\n\t\t\tsetOffset(nextOffset);\n\t\t};\n\n\t\tconst handleMouseUp = () => {\n\t\t\tisDraggingRef.current = false;\n\t\t};\n\n\t\t// 滚轮缩放\n\t\tconst handleWheel = (e: React.WheelEvent) => {\n\t\t\te.preventDefault();\n\t\t\tconst zoomStep = e.deltaY < 0 ? 0.1 : -0.1;\n\t\t\tsetScale((prev) => Math.min(Math.max(0.2, prev + zoomStep), 5));\n\t\t};\n\n\t\t// 顺时针旋转\n\t\tconst handleRotate = (deg = 90) => {\n\t\t\tsetRotateDeg((prev) => (prev + deg) % 360);\n\t\t};\n\n\t\tconst handleZoom = (delta: number) => {\n\t\t\tsetScale((prev) => Math.min(Math.max(0.2, prev + delta), 5));\n\t\t};\n\n\t\tconst handleReset = () => {\n\t\t\tsetScale(1);\n\t\t\tsetRotateDeg(0);\n\t\t\tsetOffset({ x: 0, y: 0 });\n\t\t};\n\n\t\t// 计算裁剪框尺寸与位置\n\t\tconst getCropBoxRect = () => {\n\t\t\tconst container = containerRef.current;\n\t\t\tconst containerW = container?.clientWidth || 400;\n\t\t\tconst containerH = height;\n\n\t\t\tlet boxW = Math.min(containerW * 0.7, 240);\n\t\t\tlet boxH = aspectRatio ? boxW / aspectRatio : boxW;\n\n\t\t\tif (boxH > containerH * 0.8) {\n\t\t\t\tboxH = containerH * 0.8;\n\t\t\t\tboxW = aspectRatio ? boxH * aspectRatio : boxH;\n\t\t\t}\n\n\t\t\tconst boxLeft = (containerW - boxW) / 2;\n\t\t\tconst boxTop = (containerH - boxH) / 2;\n\n\t\t\treturn { left: boxLeft, top: boxTop, width: boxW, height: boxH };\n\t\t};\n\n\t\t// 提取裁剪区域生成图片\n\t\tconst getCroppedResult = useCallback(\n\t\t\tasync (type = 'image/png', quality = 0.92): Promise<CropResult> => {\n\t\t\t\tconst canvas = canvasRef.current;\n\t\t\t\tif (!canvas) throw new Error('Canvas not found');\n\n\t\t\t\tconst cropBox = getCropBoxRect();\n\t\t\t\tconst dpr = window.devicePixelRatio || 1;\n\n\t\t\t\tconst cropCanvas = document.createElement('canvas');\n\t\t\t\tcropCanvas.width = cropBox.width * dpr;\n\t\t\t\tcropCanvas.height = cropBox.height * dpr;\n\t\t\t\tconst cropCtx = cropCanvas.getContext('2d');\n\n\t\t\t\tif (!cropCtx) throw new Error('Failed to create canvas context');\n\n\t\t\t\tif (shape === 'round') {\n\t\t\t\t\tcropCtx.beginPath();\n\t\t\t\t\tcropCtx.arc(\n\t\t\t\t\t\t(cropBox.width * dpr) / 2,\n\t\t\t\t\t\t(cropBox.height * dpr) / 2,\n\t\t\t\t\t\t(cropBox.width * dpr) / 2,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tMath.PI * 2,\n\t\t\t\t\t);\n\t\t\t\t\tcropCtx.closePath();\n\t\t\t\t\tcropCtx.clip();\n\t\t\t\t}\n\n\t\t\t\tcropCtx.drawImage(\n\t\t\t\t\tcanvas,\n\t\t\t\t\tcropBox.left * dpr,\n\t\t\t\t\tcropBox.top * dpr,\n\t\t\t\t\tcropBox.width * dpr,\n\t\t\t\t\tcropBox.height * dpr,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tcropBox.width * dpr,\n\t\t\t\t\tcropBox.height * dpr,\n\t\t\t\t);\n\n\t\t\t\tconst dataURL = cropCanvas.toDataURL(type, quality);\n\t\t\t\tconst blob: Blob | null = await new Promise((resolve) => {\n\t\t\t\t\tcropCanvas.toBlob((b) => resolve(b), type, quality);\n\t\t\t\t});\n\n\t\t\t\treturn {\n\t\t\t\t\tdataURL,\n\t\t\t\t\tblob,\n\t\t\t\t\twidth: Math.round(cropBox.width),\n\t\t\t\t\theight: Math.round(cropBox.height),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[shape, aspectRatio, height],\n\t\t);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tgetCroppedResult,\n\t\t\t\trotate: handleRotate,\n\t\t\t\tzoom: handleZoom,\n\t\t\t\treset: handleReset,\n\t\t\t}),\n\t\t\t[getCroppedResult],\n\t\t);\n\n\t\tconst handleConfirm = async () => {\n\t\t\tconst res = await getCroppedResult();\n\t\t\tonOk?.(res);\n\t\t};\n\n\t\tconst cropBox = getCropBoxRect();\n\n\t\tconst coreContent = (\n\t\t\t<div className={`rpc_image_cropper ${className}`} style={{ ...style }}>\n\t\t\t\t<div\n\t\t\t\t\tref={containerRef}\n\t\t\t\t\tclassName=\"rpc_image_cropper_canvas_wrap\"\n\t\t\t\t\tstyle={{ height }}\n\t\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\t\tonMouseMove={handleMouseMove}\n\t\t\t\t\tonMouseUp={handleMouseUp}\n\t\t\t\t\tonMouseLeave={handleMouseUp}\n\t\t\t\t\tonWheel={handleWheel}\n\t\t\t\t>\n\t\t\t\t\t<canvas\n\t\t\t\t\t\tref={canvasRef}\n\t\t\t\t\t\tclassName=\"rpc_image_cropper_canvas\"\n\t\t\t\t\t\tstyle={{ width: '100%', height }}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{/* 裁剪框与遮罩 */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={`rpc_image_cropper_crop_box ${\n\t\t\t\t\t\t\tshape === 'round' ? 'rpc_image_cropper_crop_box_round' : ''\n\t\t\t\t\t\t}`}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: `${cropBox.left}px`,\n\t\t\t\t\t\t\ttop: `${cropBox.top}px`,\n\t\t\t\t\t\t\twidth: `${cropBox.width}px`,\n\t\t\t\t\t\t\theight: `${cropBox.height}px`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{shape === 'rect' && <div className=\"rpc_image_cropper_crop_box_grid\" />}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* 底部工具栏 */}\n\t\t\t\t<div className=\"rpc_image_cropper_toolbar\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn\"\n\t\t\t\t\t\tonClick={() => handleZoom(0.1)}\n\t\t\t\t\t\ttitle=\"放大\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ZoomInOutlined /> 放大\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn\"\n\t\t\t\t\t\tonClick={() => handleZoom(-0.1)}\n\t\t\t\t\t\ttitle=\"缩小\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ZoomOutOutlined /> 缩小\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn\"\n\t\t\t\t\t\tonClick={() => handleRotate(90)}\n\t\t\t\t\t\ttitle=\"顺时针旋转90°\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<RotateRightOutlined /> 旋转\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn\"\n\t\t\t\t\t\tonClick={handleReset}\n\t\t\t\t\t\ttitle=\"重置\"\n\t\t\t\t\t>\n\t\t\t\t\t\t重置\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\n\t\tif (modal) {\n\t\t\tif (!open) return null;\n\t\t\treturn ReactDOM.createPortal(\n\t\t\t\t<div className=\"rpc_cropper_modal\" onClick={onCancel}>\n\t\t\t\t\t<div className=\"rpc_cropper_modal_card\" onClick={(e) => e.stopPropagation()}>\n\t\t\t\t\t\t<div className=\"rpc_cropper_modal_header\">\n\t\t\t\t\t\t\t<span>{title}</span>\n\t\t\t\t\t\t\t<CloseOutlined className=\"rpc_cropper_modal_close\" onClick={onCancel} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div style={{ padding: 16, background: '#141414' }}>{coreContent}</div>\n\t\t\t\t\t\t<div className=\"rpc_cropper_modal_footer\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn\"\n\t\t\t\t\t\t\t\tstyle={{ background: '#ffffff', color: '#262626', borderColor: '#d9d9d9' }}\n\t\t\t\t\t\t\t\tonClick={onCancel}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t取消\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclassName=\"rpc_image_cropper_btn rpc_image_cropper_btn_primary\"\n\t\t\t\t\t\t\t\tonClick={handleConfirm}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<CheckOutlined /> 确定裁剪\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>,\n\t\t\t\tdocument.body,\n\t\t\t);\n\t\t}\n\n\t\treturn coreContent;\n\t},\n);\n\nImageCropper.displayName = 'ImageCropper';\n\nexport default ImageCropper;\n"]}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { ZoomInOutlined, ZoomOutOutlined, RotateRightOutlined, DownloadOutlined, CloseOutlined, FileOutlined, FileTextOutlined, FilePdfOutlined, FileImageOutlined } from './chunk-ISUXPTLV.js';
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import ReactDOM from 'react-dom';
|
|
4
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
function inferFileType(urlOrName) {
|
|
7
|
+
if (!urlOrName) return "unknown";
|
|
8
|
+
const clean = urlOrName.split("?")[0].split("#")[0].toLowerCase();
|
|
9
|
+
const ext = clean.substring(clean.lastIndexOf(".") + 1);
|
|
10
|
+
if (["jpg", "jpeg", "png", "gif", "webp", "svg", "bmp", "ico"].includes(ext)) {
|
|
11
|
+
return "image";
|
|
12
|
+
}
|
|
13
|
+
if (["mp4", "webm", "ogg", "mov", "mkv"].includes(ext)) {
|
|
14
|
+
return "video";
|
|
15
|
+
}
|
|
16
|
+
if (["mp3", "wav", "aac", "flac", "m4a"].includes(ext)) {
|
|
17
|
+
return "audio";
|
|
18
|
+
}
|
|
19
|
+
if (["pdf"].includes(ext)) {
|
|
20
|
+
return "pdf";
|
|
21
|
+
}
|
|
22
|
+
if (["txt", "json", "js", "ts", "jsx", "tsx", "html", "css", "less", "md", "log", "xml"].includes(
|
|
23
|
+
ext
|
|
24
|
+
)) {
|
|
25
|
+
return "text";
|
|
26
|
+
}
|
|
27
|
+
return "unknown";
|
|
28
|
+
}
|
|
29
|
+
var FilePreviewer = ({ open, file, onCancel, onDownload, extraActions, className = "", style }) => {
|
|
30
|
+
const [imageScale, setImageScale] = useState(1);
|
|
31
|
+
const [imageRotate, setImageRotate] = useState(0);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (open) {
|
|
34
|
+
setImageScale(1);
|
|
35
|
+
setImageRotate(0);
|
|
36
|
+
}
|
|
37
|
+
}, [open, file]);
|
|
38
|
+
if (!open || !file) return null;
|
|
39
|
+
const currentFile = typeof file === "string" ? { url: file, name: file.substring(file.lastIndexOf("/") + 1) } : file;
|
|
40
|
+
const type = currentFile.fileType || inferFileType(currentFile.name || currentFile.url);
|
|
41
|
+
const handleDefaultDownload = () => {
|
|
42
|
+
if (onDownload) {
|
|
43
|
+
onDownload(currentFile);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const a = document.createElement("a");
|
|
47
|
+
a.href = currentFile.url;
|
|
48
|
+
a.download = currentFile.name || "download";
|
|
49
|
+
a.target = "_blank";
|
|
50
|
+
document.body.appendChild(a);
|
|
51
|
+
a.click();
|
|
52
|
+
a.remove();
|
|
53
|
+
};
|
|
54
|
+
const renderFileIcon = () => {
|
|
55
|
+
switch (type) {
|
|
56
|
+
case "image":
|
|
57
|
+
return /* @__PURE__ */ jsx(FileImageOutlined, { style: { color: "#1677ff" } });
|
|
58
|
+
case "pdf":
|
|
59
|
+
return /* @__PURE__ */ jsx(FilePdfOutlined, { style: { color: "#ff4d4f" } });
|
|
60
|
+
case "text":
|
|
61
|
+
return /* @__PURE__ */ jsx(FileTextOutlined, { style: { color: "#52c41a" } });
|
|
62
|
+
default:
|
|
63
|
+
return /* @__PURE__ */ jsx(FileOutlined, { style: { color: "#8c8c8c" } });
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const renderBodyContent = () => {
|
|
67
|
+
switch (type) {
|
|
68
|
+
case "image":
|
|
69
|
+
return /* @__PURE__ */ jsx(
|
|
70
|
+
"img",
|
|
71
|
+
{
|
|
72
|
+
src: currentFile.url,
|
|
73
|
+
alt: currentFile.name || "Preview",
|
|
74
|
+
className: "rpc_file_previewer_modal_image",
|
|
75
|
+
style: {
|
|
76
|
+
transform: `scale(${imageScale}) rotate(${imageRotate}deg)`
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
case "video":
|
|
81
|
+
return /* @__PURE__ */ jsx(
|
|
82
|
+
"video",
|
|
83
|
+
{
|
|
84
|
+
src: currentFile.url,
|
|
85
|
+
controls: true,
|
|
86
|
+
autoPlay: true,
|
|
87
|
+
className: "rpc_file_previewer_modal_media"
|
|
88
|
+
}
|
|
89
|
+
);
|
|
90
|
+
case "audio":
|
|
91
|
+
return /* @__PURE__ */ jsxs("div", { className: "rpc_file_previewer_modal_audio_wrap", children: [
|
|
92
|
+
/* @__PURE__ */ jsx("div", { style: { fontSize: 48 }, children: "\u{1F3B5}" }),
|
|
93
|
+
/* @__PURE__ */ jsx("div", { style: { fontSize: 16, fontWeight: 600 }, children: currentFile.name || "\u97F3\u9891\u64AD\u653E" }),
|
|
94
|
+
/* @__PURE__ */ jsx("audio", { src: currentFile.url, controls: true, autoPlay: true, style: { width: 320 } })
|
|
95
|
+
] });
|
|
96
|
+
case "pdf":
|
|
97
|
+
return /* @__PURE__ */ jsx(
|
|
98
|
+
"iframe",
|
|
99
|
+
{
|
|
100
|
+
src: currentFile.url,
|
|
101
|
+
title: currentFile.name || "PDF Preview",
|
|
102
|
+
className: "rpc_file_previewer_modal_iframe"
|
|
103
|
+
}
|
|
104
|
+
);
|
|
105
|
+
case "text":
|
|
106
|
+
return /* @__PURE__ */ jsx("div", { className: "rpc_file_previewer_modal_text_wrap", children: currentFile.textContent || "\u6B63\u5728\u52A0\u8F7D\u6587\u4EF6\u5185\u5BB9..." });
|
|
107
|
+
default:
|
|
108
|
+
return /* @__PURE__ */ jsxs("div", { className: "rpc_file_previewer_modal_fallback_card", children: [
|
|
109
|
+
/* @__PURE__ */ jsx("div", { style: { fontSize: 48, color: "#8c8c8c" }, children: "\u{1F4E6}" }),
|
|
110
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
111
|
+
/* @__PURE__ */ jsx("h4", { style: { margin: "0 0 6px 0", fontSize: 16, color: "#1f1f1f" }, children: currentFile.name || "\u672A\u77E5\u6587\u4EF6" }),
|
|
112
|
+
/* @__PURE__ */ jsxs("p", { style: { margin: 0, color: "#8c8c8c", fontSize: 13 }, children: [
|
|
113
|
+
"\u8BE5\u683C\u5F0F\u6682\u4E0D\u652F\u6301\u76F4\u63A5\u5728\u7EBF\u9884\u89C8\uFF0C\u8BF7\u4E0B\u8F7D\u540E\u5728\u672C\u5730\u67E5\u770B\u3002",
|
|
114
|
+
currentFile.size ? `(${currentFile.size})` : ""
|
|
115
|
+
] })
|
|
116
|
+
] }),
|
|
117
|
+
/* @__PURE__ */ jsxs(
|
|
118
|
+
"button",
|
|
119
|
+
{
|
|
120
|
+
type: "button",
|
|
121
|
+
onClick: handleDefaultDownload,
|
|
122
|
+
style: {
|
|
123
|
+
display: "inline-flex",
|
|
124
|
+
alignItems: "center",
|
|
125
|
+
gap: 6,
|
|
126
|
+
padding: "8px 20px",
|
|
127
|
+
background: "#1677ff",
|
|
128
|
+
color: "#fff",
|
|
129
|
+
border: "none",
|
|
130
|
+
borderRadius: 6,
|
|
131
|
+
cursor: "pointer",
|
|
132
|
+
fontSize: 14
|
|
133
|
+
},
|
|
134
|
+
children: [
|
|
135
|
+
/* @__PURE__ */ jsx(DownloadOutlined, {}),
|
|
136
|
+
" \u7ACB\u5373\u4E0B\u8F7D"
|
|
137
|
+
]
|
|
138
|
+
}
|
|
139
|
+
)
|
|
140
|
+
] });
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
return ReactDOM.createPortal(
|
|
144
|
+
/* @__PURE__ */ jsx("div", { className: `rpc_file_previewer_modal ${className}`, onClick: onCancel, style, children: /* @__PURE__ */ jsxs("div", { className: "rpc_file_previewer_modal_card", onClick: (e) => e.stopPropagation(), children: [
|
|
145
|
+
/* @__PURE__ */ jsxs("div", { className: "rpc_file_previewer_modal_header", children: [
|
|
146
|
+
/* @__PURE__ */ jsxs("div", { className: "rpc_file_previewer_modal_title", children: [
|
|
147
|
+
renderFileIcon(),
|
|
148
|
+
/* @__PURE__ */ jsx("span", { children: currentFile.name || "\u6587\u4EF6\u9884\u89C8" })
|
|
149
|
+
] }),
|
|
150
|
+
/* @__PURE__ */ jsxs("div", { className: "rpc_file_previewer_modal_actions", children: [
|
|
151
|
+
type === "image" && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
152
|
+
/* @__PURE__ */ jsx(
|
|
153
|
+
"button",
|
|
154
|
+
{
|
|
155
|
+
type: "button",
|
|
156
|
+
className: "rpc_file_previewer_modal_action_btn",
|
|
157
|
+
onClick: () => setImageScale((s) => Math.min(s + 0.2, 3)),
|
|
158
|
+
title: "\u653E\u5927",
|
|
159
|
+
children: /* @__PURE__ */ jsx(ZoomInOutlined, {})
|
|
160
|
+
}
|
|
161
|
+
),
|
|
162
|
+
/* @__PURE__ */ jsx(
|
|
163
|
+
"button",
|
|
164
|
+
{
|
|
165
|
+
type: "button",
|
|
166
|
+
className: "rpc_file_previewer_modal_action_btn",
|
|
167
|
+
onClick: () => setImageScale((s) => Math.max(s - 0.2, 0.4)),
|
|
168
|
+
title: "\u7F29\u5C0F",
|
|
169
|
+
children: /* @__PURE__ */ jsx(ZoomOutOutlined, {})
|
|
170
|
+
}
|
|
171
|
+
),
|
|
172
|
+
/* @__PURE__ */ jsx(
|
|
173
|
+
"button",
|
|
174
|
+
{
|
|
175
|
+
type: "button",
|
|
176
|
+
className: "rpc_file_previewer_modal_action_btn",
|
|
177
|
+
onClick: () => setImageRotate((r) => (r + 90) % 360),
|
|
178
|
+
title: "\u987A\u65F6\u9488\u65CB\u8F6C90\xB0",
|
|
179
|
+
children: /* @__PURE__ */ jsx(RotateRightOutlined, {})
|
|
180
|
+
}
|
|
181
|
+
)
|
|
182
|
+
] }),
|
|
183
|
+
/* @__PURE__ */ jsx(
|
|
184
|
+
"button",
|
|
185
|
+
{
|
|
186
|
+
type: "button",
|
|
187
|
+
className: "rpc_file_previewer_modal_action_btn",
|
|
188
|
+
onClick: handleDefaultDownload,
|
|
189
|
+
title: "\u4E0B\u8F7D\u6587\u4EF6",
|
|
190
|
+
children: /* @__PURE__ */ jsx(DownloadOutlined, {})
|
|
191
|
+
}
|
|
192
|
+
),
|
|
193
|
+
extraActions,
|
|
194
|
+
/* @__PURE__ */ jsx(
|
|
195
|
+
"button",
|
|
196
|
+
{
|
|
197
|
+
type: "button",
|
|
198
|
+
className: "rpc_file_previewer_modal_action_btn",
|
|
199
|
+
onClick: onCancel,
|
|
200
|
+
title: "\u5173\u95ED\u9884\u89C8 (ESC)",
|
|
201
|
+
children: /* @__PURE__ */ jsx(CloseOutlined, {})
|
|
202
|
+
}
|
|
203
|
+
)
|
|
204
|
+
] })
|
|
205
|
+
] }),
|
|
206
|
+
/* @__PURE__ */ jsx("div", { className: "rpc_file_previewer_modal_body", children: renderBodyContent() })
|
|
207
|
+
] }) }),
|
|
208
|
+
document.body
|
|
209
|
+
);
|
|
210
|
+
};
|
|
211
|
+
FilePreviewer.preview = (options) => {
|
|
212
|
+
const div = document.createElement("div");
|
|
213
|
+
document.body.appendChild(div);
|
|
214
|
+
const close = () => {
|
|
215
|
+
ReactDOM.render(/* @__PURE__ */ jsx(Fragment, {}), div);
|
|
216
|
+
div.remove();
|
|
217
|
+
};
|
|
218
|
+
ReactDOM.render(/* @__PURE__ */ jsx(FilePreviewer, { open: true, file: options, onCancel: close }), div);
|
|
219
|
+
return { close };
|
|
220
|
+
};
|
|
221
|
+
var FilePreviewer_default = FilePreviewer;
|
|
222
|
+
|
|
223
|
+
export { FilePreviewer_default, inferFileType };
|
|
224
|
+
//# sourceMappingURL=chunk-PJB7ADK6.js.map
|
|
225
|
+
//# sourceMappingURL=chunk-PJB7ADK6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../FilePreviewer/index.tsx"],"names":[],"mappings":"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","file":"chunk-PJB7ADK6.js","sourcesContent":["import React, { useState, useEffect, ReactNode, CSSProperties } from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n\tCloseOutlined,\n\tRotateRightOutlined,\n\tZoomInOutlined,\n\tZoomOutOutlined,\n\tDownloadOutlined,\n\tFilePdfOutlined,\n\tFileImageOutlined,\n\tFileTextOutlined,\n\tFileOutlined,\n} from '../src/icons';\nimport './index.less';\n\nexport type FileType = 'image' | 'video' | 'audio' | 'pdf' | 'text' | 'unknown';\n\nexport interface FileItem {\n\t/** 文件访问 URL 或 Base64 */\n\turl: string;\n\t/** 文件名称 */\n\tname?: string;\n\t/** 文件类型(如不传则根据文件名后缀或 URL 自动推断) */\n\tfileType?: FileType;\n\t/** 文件大小描述(如 '2.4 MB') */\n\tsize?: string;\n\t/** 纯文本内容(针对直接传入 text 字符串预览) */\n\ttextContent?: string;\n}\n\nexport interface FilePreviewerProps {\n\t/** 是否打开预览弹窗 */\n\topen: boolean;\n\t/** 当前预览的文件对象或 URL 字符串 */\n\tfile?: FileItem | string | null;\n\t/** 关闭弹窗回调 */\n\tonCancel?: () => void;\n\t/** 自定义下载行为(不传时使用默认浏览器下载) */\n\tonDownload?: (file: FileItem) => void;\n\t/** 自定义标题栏右侧额外操作按钮 */\n\textraActions?: ReactNode;\n\t/** 自定义类名 */\n\tclassName?: string;\n\t/** 自定义样式 */\n\tstyle?: CSSProperties;\n}\n\n// 根据文件名或 URL 后缀推断文件类型\nexport function inferFileType(urlOrName: string): FileType {\n\tif (!urlOrName) return 'unknown';\n\tconst clean = urlOrName.split('?')[0].split('#')[0].toLowerCase();\n\tconst ext = clean.substring(clean.lastIndexOf('.') + 1);\n\n\tif (['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'bmp', 'ico'].includes(ext)) {\n\t\treturn 'image';\n\t}\n\tif (['mp4', 'webm', 'ogg', 'mov', 'mkv'].includes(ext)) {\n\t\treturn 'video';\n\t}\n\tif (['mp3', 'wav', 'aac', 'flac', 'm4a'].includes(ext)) {\n\t\treturn 'audio';\n\t}\n\tif (['pdf'].includes(ext)) {\n\t\treturn 'pdf';\n\t}\n\tif (\n\t\t['txt', 'json', 'js', 'ts', 'jsx', 'tsx', 'html', 'css', 'less', 'md', 'log', 'xml'].includes(\n\t\t\text,\n\t\t)\n\t) {\n\t\treturn 'text';\n\t}\n\treturn 'unknown';\n}\n\nconst FilePreviewer: React.FC<FilePreviewerProps> & {\n\tpreview: (options: FileItem) => { close: () => void };\n} = ({ open, file, onCancel, onDownload, extraActions, className = '', style }) => {\n\t// 图片控制状态\n\tconst [imageScale, setImageScale] = useState<number>(1);\n\tconst [imageRotate, setImageRotate] = useState<number>(0);\n\n\tuseEffect(() => {\n\t\tif (open) {\n\t\t\tsetImageScale(1);\n\t\t\tsetImageRotate(0);\n\t\t}\n\t}, [open, file]);\n\n\tif (!open || !file) return null;\n\n\tconst currentFile: FileItem =\n\t\ttypeof file === 'string'\n\t\t\t? { url: file, name: file.substring(file.lastIndexOf('/') + 1) }\n\t\t\t: file;\n\n\tconst type: FileType = currentFile.fileType || inferFileType(currentFile.name || currentFile.url);\n\n\t// 默认下载处理\n\tconst handleDefaultDownload = () => {\n\t\tif (onDownload) {\n\t\t\tonDownload(currentFile);\n\t\t\treturn;\n\t\t}\n\t\tconst a = document.createElement('a');\n\t\ta.href = currentFile.url;\n\t\ta.download = currentFile.name || 'download';\n\t\ta.target = '_blank';\n\t\tdocument.body.appendChild(a);\n\t\ta.click();\n\t\ta.remove();\n\t};\n\n\t// 渲染文件图标\n\tconst renderFileIcon = () => {\n\t\tswitch (type) {\n\t\t\tcase 'image':\n\t\t\t\treturn <FileImageOutlined style={{ color: '#1677ff' }} />;\n\t\t\tcase 'pdf':\n\t\t\t\treturn <FilePdfOutlined style={{ color: '#ff4d4f' }} />;\n\t\t\tcase 'text':\n\t\t\t\treturn <FileTextOutlined style={{ color: '#52c41a' }} />;\n\t\t\tdefault:\n\t\t\t\treturn <FileOutlined style={{ color: '#8c8c8c' }} />;\n\t\t}\n\t};\n\n\t// 渲染主体内容\n\tconst renderBodyContent = () => {\n\t\tswitch (type) {\n\t\t\tcase 'image':\n\t\t\t\treturn (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={currentFile.url}\n\t\t\t\t\t\talt={currentFile.name || 'Preview'}\n\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_image\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttransform: `scale(${imageScale}) rotate(${imageRotate}deg)`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\tcase 'video':\n\t\t\t\treturn (\n\t\t\t\t\t<video\n\t\t\t\t\t\tsrc={currentFile.url}\n\t\t\t\t\t\tcontrols\n\t\t\t\t\t\tautoPlay\n\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_media\"\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\tcase 'audio':\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_audio_wrap\">\n\t\t\t\t\t\t<div style={{ fontSize: 48 }}>🎵</div>\n\t\t\t\t\t\t<div style={{ fontSize: 16, fontWeight: 600 }}>{currentFile.name || '音频播放'}</div>\n\t\t\t\t\t\t<audio src={currentFile.url} controls autoPlay style={{ width: 320 }} />\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\tcase 'pdf':\n\t\t\t\treturn (\n\t\t\t\t\t<iframe\n\t\t\t\t\t\tsrc={currentFile.url}\n\t\t\t\t\t\ttitle={currentFile.name || 'PDF Preview'}\n\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_iframe\"\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\tcase 'text':\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_text_wrap\">\n\t\t\t\t\t\t{currentFile.textContent || '正在加载文件内容...'}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_fallback_card\">\n\t\t\t\t\t\t<div style={{ fontSize: 48, color: '#8c8c8c' }}>📦</div>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<h4 style={{ margin: '0 0 6px 0', fontSize: 16, color: '#1f1f1f' }}>\n\t\t\t\t\t\t\t\t{currentFile.name || '未知文件'}\n\t\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t\t<p style={{ margin: 0, color: '#8c8c8c', fontSize: 13 }}>\n\t\t\t\t\t\t\t\t该格式暂不支持直接在线预览,请下载后在本地查看。\n\t\t\t\t\t\t\t\t{currentFile.size ? `(${currentFile.size})` : ''}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={handleDefaultDownload}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tdisplay: 'inline-flex',\n\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\tgap: 6,\n\t\t\t\t\t\t\t\tpadding: '8px 20px',\n\t\t\t\t\t\t\t\tbackground: '#1677ff',\n\t\t\t\t\t\t\t\tcolor: '#fff',\n\t\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\t\tborderRadius: 6,\n\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\tfontSize: 14,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DownloadOutlined /> 立即下载\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t}\n\t};\n\n\treturn ReactDOM.createPortal(\n\t\t<div className={`rpc_file_previewer_modal ${className}`} onClick={onCancel} style={style}>\n\t\t\t<div className=\"rpc_file_previewer_modal_card\" onClick={(e) => e.stopPropagation()}>\n\t\t\t\t{/* 顶部标题栏与工具栏 */}\n\t\t\t\t<div className=\"rpc_file_previewer_modal_header\">\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_title\">\n\t\t\t\t\t\t{renderFileIcon()}\n\t\t\t\t\t\t<span>{currentFile.name || '文件预览'}</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"rpc_file_previewer_modal_actions\">\n\t\t\t\t\t\t{type === 'image' && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\t\t\tonClick={() => setImageScale((s) => Math.min(s + 0.2, 3))}\n\t\t\t\t\t\t\t\t\ttitle=\"放大\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ZoomInOutlined />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\t\t\tonClick={() => setImageScale((s) => Math.max(s - 0.2, 0.4))}\n\t\t\t\t\t\t\t\t\ttitle=\"缩小\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ZoomOutOutlined />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\t\t\tonClick={() => setImageRotate((r) => (r + 90) % 360)}\n\t\t\t\t\t\t\t\t\ttitle=\"顺时针旋转90°\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<RotateRightOutlined />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\tonClick={handleDefaultDownload}\n\t\t\t\t\t\t\ttitle=\"下载文件\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DownloadOutlined />\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t{extraActions}\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"rpc_file_previewer_modal_action_btn\"\n\t\t\t\t\t\t\tonClick={onCancel}\n\t\t\t\t\t\t\ttitle=\"关闭预览 (ESC)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CloseOutlined />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* 预览主体内容区域 */}\n\t\t\t\t<div className=\"rpc_file_previewer_modal_body\">{renderBodyContent()}</div>\n\t\t\t</div>\n\t\t</div>,\n\t\tdocument.body,\n\t);\n};\n\n// 命令式调用方法\nFilePreviewer.preview = (options: FileItem) => {\n\tconst div = document.createElement('div');\n\tdocument.body.appendChild(div);\n\n\tconst close = () => {\n\t\tReactDOM.render(<></>, div);\n\t\tdiv.remove();\n\t};\n\n\tReactDOM.render(<FilePreviewer open={true} file={options} onCancel={close} />, div);\n\n\treturn { close };\n};\n\nexport default FilePreviewer;\n"]}
|