@pointcloud/pcloud-components 0.1.21 → 0.1.24
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/README.md +1 -1
- package/dist/esm/AdvancedFilter/FormFilter.js +3 -3
- package/dist/esm/AdvancedFilter/interface.d.ts +3 -3
- package/dist/esm/AdvancedFilter/styles/index.less +146 -146
- package/dist/esm/AspectRatio/index.d.ts +9 -0
- package/dist/esm/AspectRatio/index.js +46 -0
- package/dist/esm/ColorPicker/index.js +1 -1
- package/dist/esm/ColorPicker/index.less +18 -18
- package/dist/esm/ColorPicker/interface.d.ts +3 -3
- package/dist/esm/ConfigProvider/interface.d.ts +1 -1
- package/dist/esm/DCascader/index.js +6 -6
- package/dist/esm/DCascader/index.less +24 -24
- package/dist/esm/DForm/DItem/itemType.d.ts +5 -1
- package/dist/esm/DForm/DItem/itemsRender.d.ts +2 -0
- package/dist/esm/DForm/DItem/itemsRender.js +8 -0
- package/dist/esm/DForm/helper.d.ts +2 -0
- package/dist/esm/DForm/helper.js +33 -10
- package/dist/esm/DForm/index.js +7 -4
- package/dist/esm/DForm/index.less +5 -0
- package/dist/esm/DInput/index.js +14 -14
- package/dist/esm/DModal/interface.d.ts +2 -2
- package/dist/esm/DModal/styles/index.less +27 -27
- package/dist/esm/DSelect/index.js +39 -45
- package/dist/esm/DTable/index.js +6 -6
- package/dist/esm/DTable/index.less +71 -71
- package/dist/esm/DTreeSelect/index.less +11 -11
- package/dist/esm/DUpload/helper.js +47 -47
- package/dist/esm/DUpload/index.less +19 -19
- package/dist/esm/ErrorBoundary/index.less +44 -44
- package/dist/esm/IPAddress/index.d.ts +20 -0
- package/dist/esm/IPAddress/index.js +248 -0
- package/dist/esm/IPAddress/index.less +75 -0
- package/dist/esm/IconFont/index.d.ts +17 -0
- package/dist/esm/IconFont/index.js +27 -0
- package/dist/esm/InfiniteScrollList/index.d.ts +9 -0
- package/dist/esm/InfiniteScrollList/index.js +9 -4
- package/dist/esm/InfiniteScrollList/styles/index.less +2 -0
- package/dist/esm/LabelValue/interface.d.ts +1 -1
- package/dist/esm/LabelValue/styles/index.less +23 -23
- package/dist/esm/Loading/hooks/useLoading.d.ts +6 -0
- package/dist/esm/Loading/hooks/useLoading.js +35 -0
- package/dist/esm/Loading/index.d.ts +5 -4
- package/dist/esm/Loading/index.js +9 -9
- package/dist/esm/Loading/interface.d.ts +6 -3
- package/dist/esm/Loading/loading.d.ts +2 -4
- package/dist/esm/Loading/loading.js +5 -3
- package/dist/esm/Loading/styles/index.less +25 -25
- package/dist/esm/NoData/styles/index.less +24 -24
- package/dist/esm/PictureCard/index.d.ts +1 -1
- package/dist/esm/PictureCard/index.less +28 -28
- package/dist/esm/RCropper/handler.d.ts +16 -0
- package/dist/esm/RCropper/handler.js +146 -0
- package/dist/esm/RCropper/index.d.ts +4 -0
- package/dist/esm/RCropper/index.js +183 -0
- package/dist/esm/RCropper/interface.d.ts +70 -0
- package/dist/esm/RCropper/interface.js +1 -0
- package/dist/esm/RCropper/styles/toolbar.less +25 -0
- package/dist/esm/RCropper/svgIcons.d.ts +28 -0
- package/dist/esm/RCropper/svgIcons.js +158 -0
- package/dist/esm/RCropper/toolbar.d.ts +5 -0
- package/dist/esm/RCropper/toolbar.js +84 -0
- package/dist/esm/WordCloud/index.d.ts +6 -2
- package/dist/esm/WordCloud/index.js +110 -5
- package/dist/esm/commonStyle/index.less +1 -1
- package/dist/esm/index.d.ts +9 -1
- package/dist/esm/index.js +6 -2
- package/dist/umd/pcloud-components.min.css +1 -1
- package/dist/umd/pcloud-components.min.js +1 -1
- package/package.json +107 -106
|
@@ -29,6 +29,9 @@ var InfiniteScrollList = function InfiniteScrollList(props) {
|
|
|
29
29
|
scrollThreshold = _props$scrollThreshol === void 0 ? '100px' : _props$scrollThreshol,
|
|
30
30
|
_props$visibilityHeig = props.visibilityHeight,
|
|
31
31
|
visibilityHeight = _props$visibilityHeig === void 0 ? 200 : _props$visibilityHeig,
|
|
32
|
+
_props$showBackTop = props.showBackTop,
|
|
33
|
+
showBackTop = _props$showBackTop === void 0 ? true : _props$showBackTop,
|
|
34
|
+
endMessage = props.endMessage,
|
|
32
35
|
_renderItem = props.renderItem;
|
|
33
36
|
var _useContext = useContext(ConfigContext),
|
|
34
37
|
prefixCls = _useContext.prefixCls,
|
|
@@ -127,11 +130,13 @@ var InfiniteScrollList = function InfiniteScrollList(props) {
|
|
|
127
130
|
className: "scroll-container",
|
|
128
131
|
ref: scrollRef,
|
|
129
132
|
style: {
|
|
130
|
-
height: containerHeight
|
|
131
|
-
overflowY: 'auto'
|
|
133
|
+
height: containerHeight
|
|
132
134
|
},
|
|
133
135
|
children: [/*#__PURE__*/_jsx(InfiniteScroll, {
|
|
134
136
|
className: "".concat(wrapperClass, " ").concat(className),
|
|
137
|
+
style: {
|
|
138
|
+
overflow: 'initial'
|
|
139
|
+
},
|
|
135
140
|
scrollableTarget: containerId,
|
|
136
141
|
dataLength: (_listData$data = listData.data) === null || _listData$data === void 0 ? void 0 : _listData$data.length,
|
|
137
142
|
next: handleLoadMore,
|
|
@@ -144,7 +149,7 @@ var InfiniteScrollList = function InfiniteScrollList(props) {
|
|
|
144
149
|
tip: "\u62FC\u547D\u52A0\u8F7D\u4E2D..."
|
|
145
150
|
})
|
|
146
151
|
}),
|
|
147
|
-
endMessage: (listData === null || listData === void 0 ? void 0 : listData.total) > 0 && /*#__PURE__*/_jsx(Divider, {
|
|
152
|
+
endMessage: endMessage || (listData === null || listData === void 0 ? void 0 : listData.total) > 0 && /*#__PURE__*/_jsx(Divider, {
|
|
148
153
|
plain: true,
|
|
149
154
|
children: "\u5DF2\u7ECF\u5230\u5E95\u90E8\u4E86"
|
|
150
155
|
}),
|
|
@@ -159,7 +164,7 @@ var InfiniteScrollList = function InfiniteScrollList(props) {
|
|
|
159
164
|
}, item[itemKey]);
|
|
160
165
|
}
|
|
161
166
|
})
|
|
162
|
-
}), /*#__PURE__*/_jsx(BackTop, {
|
|
167
|
+
}), showBackTop && /*#__PURE__*/_jsx(BackTop, {
|
|
163
168
|
className: "backtop",
|
|
164
169
|
target: function target() {
|
|
165
170
|
return (scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.current) || document.body;
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
@import '../../commonStyle/index.less';
|
|
2
|
-
|
|
3
|
-
.@{prefix}-label-value {
|
|
4
|
-
display: inline-flex;
|
|
5
|
-
|
|
6
|
-
span {
|
|
7
|
-
&:first-child {
|
|
8
|
-
max-width: 120px;
|
|
9
|
-
padding-right: 4px;
|
|
10
|
-
white-space: nowrap;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
&:last-child {
|
|
14
|
-
flex: 1;
|
|
15
|
-
|
|
16
|
-
&.no-wrap {
|
|
17
|
-
overflow: hidden;
|
|
18
|
-
white-space: nowrap;
|
|
19
|
-
text-overflow: ellipsis;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
1
|
+
@import '../../commonStyle/index.less';
|
|
2
|
+
|
|
3
|
+
.@{prefix}-label-value {
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
|
|
6
|
+
span {
|
|
7
|
+
&:first-child {
|
|
8
|
+
max-width: 120px;
|
|
9
|
+
padding-right: 4px;
|
|
10
|
+
white-space: nowrap;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
&:last-child {
|
|
14
|
+
flex: 1;
|
|
15
|
+
|
|
16
|
+
&.no-wrap {
|
|
17
|
+
overflow: hidden;
|
|
18
|
+
white-space: nowrap;
|
|
19
|
+
text-overflow: ellipsis;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
+
import { useState, useEffect, useRef } from 'react';
|
|
3
|
+
import loading from "../index";
|
|
4
|
+
export var useLoading = function useLoading() {
|
|
5
|
+
var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
6
|
+
var _useState = useState(initialState),
|
|
7
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
8
|
+
isLoading = _useState2[0],
|
|
9
|
+
setIsLoading = _useState2[1];
|
|
10
|
+
var loadingRef = useRef(null);
|
|
11
|
+
useEffect(function () {
|
|
12
|
+
return function () {
|
|
13
|
+
if (loadingRef.current) {
|
|
14
|
+
loading.close();
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
}, []);
|
|
18
|
+
var openLoading = function openLoading(params) {
|
|
19
|
+
setIsLoading(true);
|
|
20
|
+
loadingRef.current = loading.open(params);
|
|
21
|
+
return loadingRef.current;
|
|
22
|
+
};
|
|
23
|
+
var closeLoading = function closeLoading() {
|
|
24
|
+
setIsLoading(false);
|
|
25
|
+
if (loadingRef.current) {
|
|
26
|
+
loading.close();
|
|
27
|
+
loadingRef.current = null;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
isLoading: isLoading,
|
|
32
|
+
openLoading: openLoading,
|
|
33
|
+
closeLoading: closeLoading
|
|
34
|
+
};
|
|
35
|
+
};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import Loading from './loading';
|
|
2
|
-
import {
|
|
2
|
+
import { LoadingInstanceProps, ILoadingInstance } from './interface';
|
|
3
|
+
import { useLoading } from './hooks/useLoading';
|
|
3
4
|
declare const _default: {
|
|
4
|
-
open(params?: LoadingInstanceProps):
|
|
5
|
+
open(params?: LoadingInstanceProps): ILoadingInstance;
|
|
5
6
|
close(): void;
|
|
6
|
-
getInstance():
|
|
7
|
+
getInstance(): ILoadingInstance | null;
|
|
7
8
|
};
|
|
8
9
|
export default _default;
|
|
9
|
-
export { Loading };
|
|
10
|
+
export { Loading, useLoading };
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import Loading from "./loading";
|
|
2
|
+
import { useLoading } from "./hooks/useLoading";
|
|
2
3
|
var loadingInstance = null;
|
|
3
|
-
var getLoadingInstance = function getLoadingInstance(params) {
|
|
4
|
-
loadingInstance = loadingInstance || Loading.newInstance(params);
|
|
5
|
-
return loadingInstance;
|
|
6
|
-
};
|
|
7
4
|
export default {
|
|
8
5
|
open: function open(params) {
|
|
9
|
-
|
|
6
|
+
if (!loadingInstance) {
|
|
7
|
+
loadingInstance = Loading.newInstance(params);
|
|
8
|
+
}
|
|
9
|
+
return loadingInstance;
|
|
10
10
|
},
|
|
11
11
|
close: function close() {
|
|
12
12
|
if (loadingInstance) {
|
|
13
|
-
var
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
var currentInstance = loadingInstance;
|
|
14
|
+
loadingInstance = null; // 先清空引用
|
|
15
|
+
currentInstance.destroy(); // 再销毁
|
|
16
16
|
}
|
|
17
17
|
},
|
|
18
18
|
getInstance: function getInstance() {
|
|
19
19
|
return loadingInstance;
|
|
20
20
|
}
|
|
21
21
|
};
|
|
22
|
-
export { Loading };
|
|
22
|
+
export { Loading, useLoading };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SpinProps } from 'antd';
|
|
2
|
-
import
|
|
2
|
+
import { ReactInstance } from 'react';
|
|
3
3
|
export interface LoadingInstanceProps extends Omit<SpinProps, 'delay'> {
|
|
4
4
|
/**
|
|
5
5
|
* @description 加载框容器
|
|
@@ -12,9 +12,12 @@ export interface LoadingInstanceProps extends Omit<SpinProps, 'delay'> {
|
|
|
12
12
|
*/
|
|
13
13
|
delay?: number;
|
|
14
14
|
}
|
|
15
|
+
export interface ILoadingInstance {
|
|
16
|
+
destroy: () => void;
|
|
17
|
+
}
|
|
15
18
|
export interface ILoadingProps {
|
|
16
|
-
open: (
|
|
19
|
+
open: (_params: LoadingInstanceProps) => ILoadingInstance;
|
|
20
|
+
getInstance: () => ILoadingInstance | null;
|
|
17
21
|
close: () => void;
|
|
18
|
-
getInstance: () => React.ReactNode;
|
|
19
22
|
}
|
|
20
23
|
export declare type LoadingProps = ILoadingProps;
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { LoadingInstanceProps } from './interface';
|
|
1
|
+
import { ILoadingInstance, LoadingInstanceProps } from './interface';
|
|
2
2
|
import './styles/index.less';
|
|
3
3
|
declare function Loading(props: LoadingInstanceProps): import("react/jsx-runtime").JSX.Element;
|
|
4
4
|
declare namespace Loading {
|
|
5
|
-
var newInstance: (args
|
|
6
|
-
destroy(): void;
|
|
7
|
-
};
|
|
5
|
+
var newInstance: (args?: LoadingInstanceProps | undefined) => ILoadingInstance;
|
|
8
6
|
}
|
|
9
7
|
export default Loading;
|
|
@@ -6,7 +6,7 @@ var _excluded = ["delay"],
|
|
|
6
6
|
_excluded2 = ["container"];
|
|
7
7
|
import { Spin } from 'antd';
|
|
8
8
|
import classNames from 'classnames';
|
|
9
|
-
import { useContext, useEffect, useState } from 'react';
|
|
9
|
+
import { useContext, useEffect, useRef, useState } from 'react';
|
|
10
10
|
import ReactDOM from 'react-dom';
|
|
11
11
|
import { ConfigContext } from "../ConfigProvider";
|
|
12
12
|
import "./styles/index.less";
|
|
@@ -25,6 +25,7 @@ function Loading(props) {
|
|
|
25
25
|
_useState2 = _slicedToArray(_useState, 2),
|
|
26
26
|
visible = _useState2[0],
|
|
27
27
|
setVisible = _useState2[1];
|
|
28
|
+
var timer = useRef();
|
|
28
29
|
useEffect(function () {
|
|
29
30
|
document.body.style.overflow = 'hidden';
|
|
30
31
|
return function () {
|
|
@@ -32,11 +33,11 @@ function Loading(props) {
|
|
|
32
33
|
};
|
|
33
34
|
}, []);
|
|
34
35
|
useEffect(function () {
|
|
35
|
-
|
|
36
|
+
timer.current = setTimeout(function () {
|
|
36
37
|
return setVisible(true);
|
|
37
38
|
}, delay || 0);
|
|
38
39
|
return function () {
|
|
39
|
-
clearTimeout(timer);
|
|
40
|
+
clearTimeout(timer.current);
|
|
40
41
|
};
|
|
41
42
|
}, [delay]);
|
|
42
43
|
if (!visible) return /*#__PURE__*/_jsx(_Fragment, {});
|
|
@@ -62,6 +63,7 @@ Loading.newInstance = function newNotificationInstance(args) {
|
|
|
62
63
|
container = _ref.container,
|
|
63
64
|
otherProps = _objectWithoutProperties(_ref, _excluded2);
|
|
64
65
|
var div = document.createElement('div');
|
|
66
|
+
|
|
65
67
|
// eslint-disable-next-line react/no-find-dom-node
|
|
66
68
|
var element = ReactDOM.findDOMNode(container);
|
|
67
69
|
if (element) {
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
@import '../../commonStyle/index.less';
|
|
2
|
-
|
|
3
|
-
.@{prefix}-loading {
|
|
4
|
-
.mask {
|
|
5
|
-
position: fixed;
|
|
6
|
-
top: 0;
|
|
7
|
-
left: 0;
|
|
8
|
-
z-index: 100000;
|
|
9
|
-
width: 100%;
|
|
10
|
-
height: 100%;
|
|
11
|
-
overflow: hidden;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
.loading {
|
|
15
|
-
position: absolute;
|
|
16
|
-
top: 50%;
|
|
17
|
-
left: 50%;
|
|
18
|
-
z-index: 100001;
|
|
19
|
-
padding: 20px;
|
|
20
|
-
background: #fff;
|
|
21
|
-
border-radius: 10px;
|
|
22
|
-
box-shadow: 3px 3px 3px rgba(0, 0, 0, 20%);
|
|
23
|
-
transform: translate(-50%, -50%);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
1
|
+
@import '../../commonStyle/index.less';
|
|
2
|
+
|
|
3
|
+
.@{prefix}-loading {
|
|
4
|
+
.mask {
|
|
5
|
+
position: fixed;
|
|
6
|
+
top: 0;
|
|
7
|
+
left: 0;
|
|
8
|
+
z-index: 100000;
|
|
9
|
+
width: 100%;
|
|
10
|
+
height: 100%;
|
|
11
|
+
overflow: hidden;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.loading {
|
|
15
|
+
position: absolute;
|
|
16
|
+
top: 50%;
|
|
17
|
+
left: 50%;
|
|
18
|
+
z-index: 100001;
|
|
19
|
+
padding: 20px;
|
|
20
|
+
background: #fff;
|
|
21
|
+
border-radius: 10px;
|
|
22
|
+
box-shadow: 3px 3px 3px rgba(0, 0, 0, 20%);
|
|
23
|
+
transform: translate(-50%, -50%);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
@import '../../commonStyle/index.less';
|
|
2
|
-
|
|
3
|
-
.@{prefix}-nodata {
|
|
4
|
-
position: absolute;
|
|
5
|
-
top: 50%;
|
|
6
|
-
left: 50%;
|
|
7
|
-
transform: translate(-50%, -50%);
|
|
8
|
-
|
|
9
|
-
.not-data-image {
|
|
10
|
-
display: block;
|
|
11
|
-
height: 100px;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
.no-data-text {
|
|
15
|
-
display: inline-block;
|
|
16
|
-
width: 100%;
|
|
17
|
-
margin-top: 5px;
|
|
18
|
-
color: #000;
|
|
19
|
-
font-weight: 400;
|
|
20
|
-
font-size: 14px;
|
|
21
|
-
text-align: center;
|
|
22
|
-
opacity: 0.65;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
1
|
+
@import '../../commonStyle/index.less';
|
|
2
|
+
|
|
3
|
+
.@{prefix}-nodata {
|
|
4
|
+
position: absolute;
|
|
5
|
+
top: 50%;
|
|
6
|
+
left: 50%;
|
|
7
|
+
transform: translate(-50%, -50%);
|
|
8
|
+
|
|
9
|
+
.not-data-image {
|
|
10
|
+
display: block;
|
|
11
|
+
height: 100px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.no-data-text {
|
|
15
|
+
display: inline-block;
|
|
16
|
+
width: 100%;
|
|
17
|
+
margin-top: 5px;
|
|
18
|
+
color: #000;
|
|
19
|
+
font-weight: 400;
|
|
20
|
+
font-size: 14px;
|
|
21
|
+
text-align: center;
|
|
22
|
+
opacity: 0.65;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { ImageProps } from 'antd';
|
|
3
3
|
import './index.less';
|
|
4
|
-
interface IPictureCardProps extends Omit<ImageProps, 'src' | 'width'> {
|
|
4
|
+
interface IPictureCardProps extends Omit<ImageProps, 'src' | 'width' | 'content'> {
|
|
5
5
|
className?: string;
|
|
6
6
|
layout?: 'vertical' | 'horizontal';
|
|
7
7
|
src: ImageProps['src'] | ImageProps['src'][];
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
@import '../commonStyle/index.less';
|
|
2
|
-
|
|
3
|
-
.@{prefix}-picture-card {
|
|
4
|
-
display: inline-block;
|
|
5
|
-
padding: 10px;
|
|
6
|
-
transition: box-shadow 0.3s linear;
|
|
7
|
-
|
|
8
|
-
.info {
|
|
9
|
-
margin-top: 10px;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
&-bordered {
|
|
13
|
-
border: 1px solid rgba(0, 0, 0, 6%);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
&-hoverable {
|
|
17
|
-
&:hover {
|
|
18
|
-
cursor: pointer;
|
|
19
|
-
border-color: transparent;
|
|
20
|
-
box-shadow: 0 1px 2px -2px rgba(0, 0, 0, 16%), 0 3px 6px rgba(0, 0, 0, 12%), 0 5px 12px 4px rgba(0, 0, 0, 9%);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
&.horizontal {
|
|
25
|
-
display: flex;
|
|
26
|
-
justify-content: space-around;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
1
|
+
@import '../commonStyle/index.less';
|
|
2
|
+
|
|
3
|
+
.@{prefix}-picture-card {
|
|
4
|
+
display: inline-block;
|
|
5
|
+
padding: 10px;
|
|
6
|
+
transition: box-shadow 0.3s linear;
|
|
7
|
+
|
|
8
|
+
.info {
|
|
9
|
+
margin-top: 10px;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
&-bordered {
|
|
13
|
+
border: 1px solid rgba(0, 0, 0, 6%);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
&-hoverable {
|
|
17
|
+
&:hover {
|
|
18
|
+
cursor: pointer;
|
|
19
|
+
border-color: transparent;
|
|
20
|
+
box-shadow: 0 1px 2px -2px rgba(0, 0, 0, 16%), 0 3px 6px rgba(0, 0, 0, 12%), 0 5px 12px 4px rgba(0, 0, 0, 9%);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&.horizontal {
|
|
25
|
+
display: flex;
|
|
26
|
+
justify-content: space-around;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { RCropperActionHandlers } from './interface';
|
|
3
|
+
import type Cropper from 'cropperjs';
|
|
4
|
+
export declare function createCropperHandlers(cropperInstanceRef: React.RefObject<Cropper | null>, imgTransformRef: React.RefObject<number[] | undefined>, props: {
|
|
5
|
+
onCrop?: (base64: string, file?: File) => void;
|
|
6
|
+
onZoom?: (transform: number[] | undefined) => void;
|
|
7
|
+
onRotate?: (transform: number[] | undefined) => void;
|
|
8
|
+
onFlip?: (transform: number[] | undefined) => void;
|
|
9
|
+
onReset?: (transform: number[] | undefined) => void;
|
|
10
|
+
onCancelCrop?: (info: {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
}) => void;
|
|
16
|
+
}): RCropperActionHandlers;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
+
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
|
3
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
4
|
+
var base64ToFile = function base64ToFile(base64) {
|
|
5
|
+
var _arr$;
|
|
6
|
+
var fileName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'file.png';
|
|
7
|
+
// 分割Base64字符串获取MIME类型和纯数据部分
|
|
8
|
+
var arr = base64.split(',');
|
|
9
|
+
var mime = arr === null || arr === void 0 || (_arr$ = arr[0]) === null || _arr$ === void 0 || (_arr$ = _arr$.match(/:(.*?);/)) === null || _arr$ === void 0 ? void 0 : _arr$[1];
|
|
10
|
+
var bstr = atob(arr[1]);
|
|
11
|
+
var n = bstr.length;
|
|
12
|
+
// 创建Uint8Array并填充数据
|
|
13
|
+
var u8arr = new Uint8Array(n);
|
|
14
|
+
while (n--) {
|
|
15
|
+
u8arr[n] = bstr.charCodeAt(n);
|
|
16
|
+
}
|
|
17
|
+
// 创建并返回File对象
|
|
18
|
+
return new File([u8arr], fileName, {
|
|
19
|
+
type: mime
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
export function createCropperHandlers(cropperInstanceRef, imgTransformRef, props) {
|
|
23
|
+
return {
|
|
24
|
+
handleCrop: function handleCrop() {
|
|
25
|
+
return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
26
|
+
var _props$onCrop, cropper, selection, canvasEl, img, _file;
|
|
27
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
28
|
+
while (1) switch (_context.prev = _context.next) {
|
|
29
|
+
case 0:
|
|
30
|
+
_context.prev = 0;
|
|
31
|
+
cropper = cropperInstanceRef.current;
|
|
32
|
+
if (cropper) {
|
|
33
|
+
_context.next = 4;
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
return _context.abrupt("return");
|
|
37
|
+
case 4:
|
|
38
|
+
selection = cropper.getCropperSelection();
|
|
39
|
+
_context.next = 7;
|
|
40
|
+
return selection === null || selection === void 0 ? void 0 : selection.$toCanvas();
|
|
41
|
+
case 7:
|
|
42
|
+
canvasEl = _context.sent;
|
|
43
|
+
img = canvasEl === null || canvasEl === void 0 ? void 0 : canvasEl.toDataURL();
|
|
44
|
+
_file = base64ToFile(img);
|
|
45
|
+
(_props$onCrop = props.onCrop) === null || _props$onCrop === void 0 || _props$onCrop.call(props, img, _file);
|
|
46
|
+
_context.next = 15;
|
|
47
|
+
break;
|
|
48
|
+
case 13:
|
|
49
|
+
_context.prev = 13;
|
|
50
|
+
_context.t0 = _context["catch"](0);
|
|
51
|
+
case 15:
|
|
52
|
+
case "end":
|
|
53
|
+
return _context.stop();
|
|
54
|
+
}
|
|
55
|
+
}, _callee, null, [[0, 13]]);
|
|
56
|
+
}))();
|
|
57
|
+
},
|
|
58
|
+
handleZoomIn: function handleZoomIn() {
|
|
59
|
+
try {
|
|
60
|
+
var _cropperInstanceRef$c, _props$onZoom;
|
|
61
|
+
var img = (_cropperInstanceRef$c = cropperInstanceRef.current) === null || _cropperInstanceRef$c === void 0 ? void 0 : _cropperInstanceRef$c.getCropperImage();
|
|
62
|
+
img === null || img === void 0 || img.$zoom(0.1);
|
|
63
|
+
(_props$onZoom = props.onZoom) === null || _props$onZoom === void 0 || _props$onZoom.call(props, img === null || img === void 0 ? void 0 : img.$getTransform());
|
|
64
|
+
} catch (_unused2) {}
|
|
65
|
+
},
|
|
66
|
+
handleZoomOut: function handleZoomOut() {
|
|
67
|
+
try {
|
|
68
|
+
var _cropperInstanceRef$c2, _props$onZoom2;
|
|
69
|
+
var img = (_cropperInstanceRef$c2 = cropperInstanceRef.current) === null || _cropperInstanceRef$c2 === void 0 ? void 0 : _cropperInstanceRef$c2.getCropperImage();
|
|
70
|
+
img === null || img === void 0 || img.$zoom(-0.1);
|
|
71
|
+
(_props$onZoom2 = props.onZoom) === null || _props$onZoom2 === void 0 || _props$onZoom2.call(props, img === null || img === void 0 ? void 0 : img.$getTransform());
|
|
72
|
+
} catch (_unused3) {}
|
|
73
|
+
},
|
|
74
|
+
handleRotateLeft: function handleRotateLeft() {
|
|
75
|
+
try {
|
|
76
|
+
var _cropperInstanceRef$c3, _props$onRotate;
|
|
77
|
+
var img = (_cropperInstanceRef$c3 = cropperInstanceRef.current) === null || _cropperInstanceRef$c3 === void 0 ? void 0 : _cropperInstanceRef$c3.getCropperImage();
|
|
78
|
+
img === null || img === void 0 || img.$rotate('-45deg');
|
|
79
|
+
(_props$onRotate = props.onRotate) === null || _props$onRotate === void 0 || _props$onRotate.call(props, img === null || img === void 0 ? void 0 : img.$getTransform());
|
|
80
|
+
} catch (_unused4) {}
|
|
81
|
+
},
|
|
82
|
+
handleRotateRight: function handleRotateRight() {
|
|
83
|
+
try {
|
|
84
|
+
var _cropperInstanceRef$c4, _props$onRotate2;
|
|
85
|
+
var img = (_cropperInstanceRef$c4 = cropperInstanceRef.current) === null || _cropperInstanceRef$c4 === void 0 ? void 0 : _cropperInstanceRef$c4.getCropperImage();
|
|
86
|
+
img === null || img === void 0 || img.$rotate('45deg');
|
|
87
|
+
(_props$onRotate2 = props.onRotate) === null || _props$onRotate2 === void 0 || _props$onRotate2.call(props, img === null || img === void 0 ? void 0 : img.$getTransform());
|
|
88
|
+
} catch (_unused5) {}
|
|
89
|
+
},
|
|
90
|
+
handleFlipX: function handleFlipX() {
|
|
91
|
+
try {
|
|
92
|
+
var _cropperInstanceRef$c5, _props$onFlip;
|
|
93
|
+
var img = (_cropperInstanceRef$c5 = cropperInstanceRef.current) === null || _cropperInstanceRef$c5 === void 0 ? void 0 : _cropperInstanceRef$c5.getCropperImage();
|
|
94
|
+
img === null || img === void 0 || img.$scale(-1, 1);
|
|
95
|
+
(_props$onFlip = props.onFlip) === null || _props$onFlip === void 0 || _props$onFlip.call(props, img === null || img === void 0 ? void 0 : img.$getTransform());
|
|
96
|
+
} catch (_unused6) {}
|
|
97
|
+
},
|
|
98
|
+
handleFlipY: function handleFlipY() {
|
|
99
|
+
try {
|
|
100
|
+
var _cropperInstanceRef$c6, _props$onFlip2;
|
|
101
|
+
var img = (_cropperInstanceRef$c6 = cropperInstanceRef.current) === null || _cropperInstanceRef$c6 === void 0 ? void 0 : _cropperInstanceRef$c6.getCropperImage();
|
|
102
|
+
img === null || img === void 0 || img.$scale(1, -1);
|
|
103
|
+
(_props$onFlip2 = props.onFlip) === null || _props$onFlip2 === void 0 || _props$onFlip2.call(props, img === null || img === void 0 ? void 0 : img.$getTransform());
|
|
104
|
+
} catch (_unused7) {}
|
|
105
|
+
},
|
|
106
|
+
handleReset: function handleReset() {
|
|
107
|
+
try {
|
|
108
|
+
var _cropperInstanceRef$c7;
|
|
109
|
+
var img = (_cropperInstanceRef$c7 = cropperInstanceRef.current) === null || _cropperInstanceRef$c7 === void 0 ? void 0 : _cropperInstanceRef$c7.getCropperImage();
|
|
110
|
+
if (img && imgTransformRef.current) {
|
|
111
|
+
var _props$onReset;
|
|
112
|
+
var _imgTransformRef$curr = _slicedToArray(imgTransformRef.current, 6),
|
|
113
|
+
scaleX = _imgTransformRef$curr[0],
|
|
114
|
+
skewY = _imgTransformRef$curr[1],
|
|
115
|
+
skewX = _imgTransformRef$curr[2],
|
|
116
|
+
scaleY = _imgTransformRef$curr[3],
|
|
117
|
+
translateX = _imgTransformRef$curr[4],
|
|
118
|
+
translateY = _imgTransformRef$curr[5];
|
|
119
|
+
img === null || img === void 0 || img.$setTransform(scaleX, skewY, skewX, scaleY, translateX, translateY);
|
|
120
|
+
(_props$onReset = props.onReset) === null || _props$onReset === void 0 || _props$onReset.call(props, img === null || img === void 0 ? void 0 : img.$getTransform());
|
|
121
|
+
}
|
|
122
|
+
} catch (_unused8) {}
|
|
123
|
+
},
|
|
124
|
+
handleCancelCrop: function handleCancelCrop() {
|
|
125
|
+
try {
|
|
126
|
+
var _cropperInstanceRef$c8, _props$onCancelCrop;
|
|
127
|
+
var selection = (_cropperInstanceRef$c8 = cropperInstanceRef.current) === null || _cropperInstanceRef$c8 === void 0 ? void 0 : _cropperInstanceRef$c8.getCropperSelection();
|
|
128
|
+
var width = selection === null || selection === void 0 ? void 0 : selection.width;
|
|
129
|
+
var height = selection === null || selection === void 0 ? void 0 : selection.height;
|
|
130
|
+
var x = selection === null || selection === void 0 ? void 0 : selection.x;
|
|
131
|
+
var y = selection === null || selection === void 0 ? void 0 : selection.y;
|
|
132
|
+
if (width && height) {
|
|
133
|
+
selection === null || selection === void 0 || selection.$clear();
|
|
134
|
+
} else {
|
|
135
|
+
selection === null || selection === void 0 || selection.$reset();
|
|
136
|
+
}
|
|
137
|
+
(_props$onCancelCrop = props.onCancelCrop) === null || _props$onCancelCrop === void 0 || _props$onCancelCrop.call(props, {
|
|
138
|
+
x: x,
|
|
139
|
+
y: y,
|
|
140
|
+
width: width,
|
|
141
|
+
height: height
|
|
142
|
+
});
|
|
143
|
+
} catch (_unused9) {}
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
}
|