@nutui/nutui-react 2.3.12-beta.0 → 2.3.12
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/CHANGELOG.md +18 -0
- package/dist/esm/ActionSheet.js +30 -76
- package/dist/esm/Address.js +80 -171
- package/dist/esm/Animate.js +21 -49
- package/dist/esm/AnimatingNumbers.js +47 -120
- package/dist/esm/Audio.js +88 -159
- package/dist/esm/Avatar.js +44 -91
- package/dist/esm/AvatarCropper.js +149 -268
- package/dist/esm/AvatarGroup.js +13 -44
- package/dist/esm/BackTop.js +34 -75
- package/dist/esm/Barrage.js +49 -83
- package/dist/esm/Calendar.js +27 -119
- package/dist/esm/CalendarCard.js +180 -291
- package/dist/esm/CalendarItem.js +253 -314
- package/dist/esm/Card.js +38 -72
- package/dist/esm/Cell.js +27 -62
- package/dist/esm/CellGroup.js +16 -45
- package/dist/esm/CheckboxGroup.js +49 -85
- package/dist/esm/CircleProgress.js +42 -93
- package/dist/esm/Col.js +17 -48
- package/dist/esm/Collapse.js +18 -49
- package/dist/esm/ConfigProvider.js +3 -2
- package/dist/esm/CountDown.js +62 -101
- package/dist/esm/DatePicker.js +87 -127
- package/dist/esm/Dialog.js +116 -196
- package/dist/esm/Divider.js +16 -36
- package/dist/esm/Drag.js +32 -76
- package/dist/esm/Elevator.js +93 -133
- package/dist/esm/Ellipsis.js +71 -92
- package/dist/esm/Empty.js +31 -70
- package/dist/esm/FixedNav.js +32 -81
- package/dist/esm/Form.js +28 -61
- package/dist/esm/Grid.js +27 -51
- package/dist/esm/Image.js +47 -102
- package/dist/esm/ImagePreview.js +82 -135
- package/dist/esm/InfiniteLoading.js +77 -159
- package/dist/esm/Input.js +57 -125
- package/dist/esm/InputNumber.js +66 -96
- package/dist/esm/Layout.js +4 -28
- package/dist/esm/Loading.js +13 -40
- package/dist/esm/Menu.js +51 -105
- package/dist/esm/NavBar.js +46 -85
- package/dist/esm/NoticeBar.js +153 -226
- package/dist/esm/Notify.js +87 -178
- package/dist/esm/NumberKeyboard.js +84 -150
- package/dist/esm/Pagination.js +58 -97
- package/dist/esm/Picker.js +215 -276
- package/dist/esm/Popover.js +111 -159
- package/dist/esm/Price.js +23 -60
- package/dist/esm/Progress.js +47 -77
- package/dist/esm/PullToRefresh.js +94 -201
- package/dist/esm/RadioGroup.js +23 -53
- package/dist/esm/Range.js +113 -177
- package/dist/esm/Rate.js +48 -95
- package/dist/esm/Row.js +19 -43
- package/dist/esm/SearchBar.js +52 -119
- package/dist/esm/ShortPassword.js +58 -106
- package/dist/esm/SideNavBar.js +34 -59
- package/dist/esm/SideNavBarItem.js +7 -36
- package/dist/esm/Signature.js +49 -84
- package/dist/esm/Skeleton.js +31 -68
- package/dist/esm/Space.js +7 -34
- package/dist/esm/Step.js +35 -64
- package/dist/esm/Steps.js +16 -40
- package/dist/esm/Sticky.js +64 -108
- package/dist/esm/SubSideNavBar.js +42 -71
- package/dist/esm/Swipe.js +79 -143
- package/dist/esm/Swiper.js +136 -183
- package/dist/esm/SwiperItem.js +13 -38
- package/dist/esm/Switch.js +20 -53
- package/dist/esm/TabPane.js +6 -30
- package/dist/esm/Tabbar.js +29 -59
- package/dist/esm/Table.js +92 -141
- package/dist/esm/Tag.js +30 -74
- package/dist/esm/TextArea.js +37 -82
- package/dist/esm/TimeDetail.js +20 -58
- package/dist/esm/TimeSelect.js +57 -95
- package/dist/esm/Toast.js +110 -197
- package/dist/esm/Tour.js +88 -132
- package/dist/esm/TrendArrow.js +32 -74
- package/dist/esm/Uploader.js +226 -346
- package/dist/esm/UserContext.js +1 -1
- package/dist/esm/Video.js +34 -67
- package/dist/esm/VirtualList.js +127 -160
- package/dist/esm/WaterMark.js +24 -68
- package/dist/esm/badge2.js +23 -53
- package/dist/esm/button2.js +30 -63
- package/dist/esm/can-use-dom.js +1 -1
- package/dist/esm/cascader2.js +307 -536
- package/dist/esm/checkbox2.js +59 -96
- package/dist/esm/collapseitem2.js +48 -86
- package/dist/esm/configprovider2.js +43 -1003
- package/dist/esm/context.js +1 -1
- package/dist/esm/context2.js +1 -1
- package/dist/esm/context3.js +1 -1
- package/dist/esm/context4.js +1 -1
- package/dist/esm/context5.js +8 -8
- package/dist/esm/date.js +88 -66
- package/dist/esm/formitem2.js +236 -1510
- package/dist/esm/get-scroll-parent.js +8 -10
- package/dist/esm/griditem2.js +34 -52
- package/dist/esm/index.js +5 -12
- package/dist/esm/indicator2.js +13 -42
- package/dist/esm/menuitem2.js +81 -124
- package/dist/esm/overlay2.js +39 -78
- package/dist/esm/pad-zero.js +3 -4
- package/dist/esm/popup2.js +79 -124
- package/dist/esm/px-check.js +2 -2
- package/dist/esm/radio2.js +48 -79
- package/dist/esm/raf.js +5 -3
- package/dist/esm/render.js +17 -54
- package/dist/esm/safearea2.js +3 -5
- package/dist/esm/supports-passive.js +3 -3
- package/dist/esm/tabbaritem2.js +42 -58
- package/dist/esm/tabs2.js +82 -120
- package/dist/esm/tslib.es6.js +47 -0
- package/dist/esm/types/src/packages/button/demos/h5/demo1.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/h5/demo2.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/h5/demo3.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/h5/demo4.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/h5/demo5.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/h5/demo6.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/h5/demo7.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/h5/demo8.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/h5/demo9.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/taro/demo1.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/taro/demo10.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/taro/demo2.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/taro/demo3.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/taro/demo4.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/taro/demo5.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/taro/demo6.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/taro/demo7.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/taro/demo8.d.ts +3 -0
- package/dist/esm/types/src/packages/button/demos/taro/demo9.d.ts +3 -0
- package/dist/esm/types/src/packages/configprovider/configprovider.d.ts +1 -0
- package/dist/esm/types/src/packages/configprovider/configprovider.taro.d.ts +1 -0
- package/dist/esm/types/src/packages/configprovider/index.d.ts +2 -2
- package/dist/esm/types/src/packages/configprovider/index.taro.d.ts +2 -2
- package/dist/esm/types/src/packages/inputnumber/inputnumber.taro.d.ts +2 -0
- package/dist/esm/typings.js +1 -1
- package/dist/esm/use-click-away.js +9 -13
- package/dist/esm/use-client-rect.js +4 -4
- package/dist/esm/use-props-value.js +10 -15
- package/dist/esm/use-refs.js +5 -7
- package/dist/esm/use-touch.js +16 -20
- package/dist/locales/base.js +1 -1
- package/dist/locales/en-US.js +1 -1
- package/dist/locales/id-ID.js +1 -1
- package/dist/locales/tr-TR.js +1 -1
- package/dist/locales/zh-CN.js +1 -1
- package/dist/locales/zh-TW.js +1 -1
- package/dist/locales/zh-UG.js +1 -1
- package/dist/nutui.react.es.js +242 -284
- package/dist/nutui.react.umd.js +239 -281
- package/dist/style.mjs +1 -1
- package/dist/styles/variables-jmapp.scss +4 -0
- package/dist/types/packages/button/demos/h5/demo1.d.ts +3 -0
- package/dist/types/packages/button/demos/h5/demo2.d.ts +3 -0
- package/dist/types/packages/button/demos/h5/demo3.d.ts +3 -0
- package/dist/types/packages/button/demos/h5/demo4.d.ts +3 -0
- package/dist/types/packages/button/demos/h5/demo5.d.ts +3 -0
- package/dist/types/packages/button/demos/h5/demo6.d.ts +3 -0
- package/dist/types/packages/button/demos/h5/demo7.d.ts +3 -0
- package/dist/types/packages/button/demos/h5/demo8.d.ts +3 -0
- package/dist/types/packages/button/demos/h5/demo9.d.ts +3 -0
- package/dist/types/packages/button/demos/taro/demo1.d.ts +3 -0
- package/dist/types/packages/button/demos/taro/demo10.d.ts +3 -0
- package/dist/types/packages/button/demos/taro/demo2.d.ts +3 -0
- package/dist/types/packages/button/demos/taro/demo3.d.ts +3 -0
- package/dist/types/packages/button/demos/taro/demo4.d.ts +3 -0
- package/dist/types/packages/button/demos/taro/demo5.d.ts +3 -0
- package/dist/types/packages/button/demos/taro/demo6.d.ts +3 -0
- package/dist/types/packages/button/demos/taro/demo7.d.ts +3 -0
- package/dist/types/packages/button/demos/taro/demo8.d.ts +3 -0
- package/dist/types/packages/button/demos/taro/demo9.d.ts +3 -0
- package/dist/types/packages/configprovider/configprovider.d.ts +1 -0
- package/dist/types/packages/configprovider/configprovider.taro.d.ts +1 -0
- package/dist/types/packages/configprovider/index.d.ts +2 -2
- package/dist/types/packages/configprovider/index.taro.d.ts +2 -2
- package/dist/types/packages/empty/empty.d.ts +15 -3
- package/dist/types/packages/inputnumber/inputnumber.taro.d.ts +2 -0
- package/dist/types/packages/rate/rate.d.ts +1 -1
- package/package.json +5 -1
|
@@ -1,30 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
-
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
4
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
5
|
-
var _excluded = ["children", "toolbar", "maxZoom", "space", "toolbarPosition", "editText", "shape", "className", "style", "onConfirm", "onCancel"];
|
|
6
|
-
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
7
|
-
function ownKeys(e, r) {
|
|
8
|
-
var t = Object.keys(e);
|
|
9
|
-
if (Object.getOwnPropertySymbols) {
|
|
10
|
-
var o = Object.getOwnPropertySymbols(e);
|
|
11
|
-
r && (o = o.filter(function(r2) {
|
|
12
|
-
return Object.getOwnPropertyDescriptor(e, r2).enumerable;
|
|
13
|
-
})), t.push.apply(t, o);
|
|
14
|
-
}
|
|
15
|
-
return t;
|
|
16
|
-
}
|
|
17
|
-
function _objectSpread(e) {
|
|
18
|
-
for (var r = 1; r < arguments.length; r++) {
|
|
19
|
-
var t = null != arguments[r] ? arguments[r] : {};
|
|
20
|
-
r % 2 ? ownKeys(Object(t), true).forEach(function(r2) {
|
|
21
|
-
_defineProperty(e, r2, t[r2]);
|
|
22
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r2) {
|
|
23
|
-
Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t, r2));
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
return e;
|
|
27
|
-
}
|
|
1
|
+
import { _ as __rest, a as __awaiter } from "./tslib.es6.js";
|
|
28
2
|
import React__default, { useRef, useState, useMemo, useCallback, useEffect } from "react";
|
|
29
3
|
import classNames from "classnames";
|
|
30
4
|
import Button from "./Button.js";
|
|
@@ -32,36 +6,24 @@ import { C as ComponentDefaults } from "./typings.js";
|
|
|
32
6
|
import { u as useTouch } from "./use-touch.js";
|
|
33
7
|
import { p as preventDefault, c as clamp } from "./index.js";
|
|
34
8
|
import { g as getRect } from "./use-client-rect.js";
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
},
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
var classPrefix = "nut-avatar-cropper";
|
|
54
|
-
var AvatarCropper = function AvatarCropper2(props) {
|
|
55
|
-
var _defaultProps$props = _objectSpread(_objectSpread({}, defaultProps), props), children = _defaultProps$props.children, toolbar = _defaultProps$props.toolbar, maxZoom = _defaultProps$props.maxZoom, space = _defaultProps$props.space, toolbarPosition = _defaultProps$props.toolbarPosition, editText = _defaultProps$props.editText, shape = _defaultProps$props.shape, className = _defaultProps$props.className, style = _defaultProps$props.style, onConfirm = _defaultProps$props.onConfirm, onCancel = _defaultProps$props.onCancel, rest = _objectWithoutProperties(_defaultProps$props, _excluded);
|
|
56
|
-
var cls = classNames(classPrefix, className, shape === "round" && "round");
|
|
57
|
-
var toolbarPositionCls = classNames("".concat(classPrefix, "-popup-toolbar"), toolbarPosition);
|
|
58
|
-
var inputImageRef = useRef(null);
|
|
59
|
-
var cropperPopupRef = useRef(null);
|
|
60
|
-
var canvasRef = useRef(null);
|
|
61
|
-
var _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), visible = _useState2[0], setVisible = _useState2[1];
|
|
62
|
-
var _useState3 = useState(false), _useState4 = _slicedToArray(_useState3, 2), moving = _useState4[0], setMoving = _useState4[1];
|
|
63
|
-
var _useState5 = useState(false), _useState6 = _slicedToArray(_useState5, 2), zooming = _useState6[0], setZooming = _useState6[1];
|
|
64
|
-
var _useState7 = useState({
|
|
9
|
+
const defaultProps = Object.assign(Object.assign({}, ComponentDefaults), { maxZoom: 3, space: 10, toolbar: [
|
|
10
|
+
React__default.createElement(Button, { type: "danger", key: "cancel" }, "取消"),
|
|
11
|
+
React__default.createElement(Button, { key: "reset" }, "重置"),
|
|
12
|
+
React__default.createElement(Button, { key: "rotate" }, "旋转"),
|
|
13
|
+
React__default.createElement(Button, { type: "success", key: "confirm" }, "确认")
|
|
14
|
+
], toolbarPosition: "bottom", editText: "编辑", shape: "square" });
|
|
15
|
+
const classPrefix = `nut-avatar-cropper`;
|
|
16
|
+
const AvatarCropper = (props) => {
|
|
17
|
+
const _a = Object.assign(Object.assign({}, defaultProps), props), { children, toolbar, maxZoom, space, toolbarPosition, editText, shape, className, style, onConfirm, onCancel } = _a, rest = __rest(_a, ["children", "toolbar", "maxZoom", "space", "toolbarPosition", "editText", "shape", "className", "style", "onConfirm", "onCancel"]);
|
|
18
|
+
const cls = classNames(classPrefix, className, shape === "round" && "round");
|
|
19
|
+
const toolbarPositionCls = classNames(`${classPrefix}-popup-toolbar`, toolbarPosition);
|
|
20
|
+
const inputImageRef = useRef(null);
|
|
21
|
+
const cropperPopupRef = useRef(null);
|
|
22
|
+
const canvasRef = useRef(null);
|
|
23
|
+
const [visible, setVisible] = useState(false);
|
|
24
|
+
const [moving, setMoving] = useState(false);
|
|
25
|
+
const [zooming, setZooming] = useState(false);
|
|
26
|
+
const [state, setState] = useState({
|
|
65
27
|
defScale: 1,
|
|
66
28
|
scale: 1,
|
|
67
29
|
angle: 0,
|
|
@@ -69,8 +31,8 @@ var AvatarCropper = function AvatarCropper2(props) {
|
|
|
69
31
|
moveY: 0,
|
|
70
32
|
displayWidth: 0,
|
|
71
33
|
displayHeight: 0
|
|
72
|
-
})
|
|
73
|
-
|
|
34
|
+
});
|
|
35
|
+
const defDrawImage = {
|
|
74
36
|
img: new Image(),
|
|
75
37
|
sx: 0,
|
|
76
38
|
sy: 0,
|
|
@@ -82,60 +44,56 @@ var AvatarCropper = function AvatarCropper2(props) {
|
|
|
82
44
|
height: 0
|
|
83
45
|
// 要使用的图像的高度
|
|
84
46
|
};
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
47
|
+
const [drawImage, setDrawImg] = useState(Object.assign({}, defDrawImage));
|
|
48
|
+
const devicePixelRatio = window.devicePixelRatio || 1;
|
|
49
|
+
const touch = useTouch();
|
|
50
|
+
const highlightStyle = useMemo(() => {
|
|
51
|
+
const width = `${drawImage.swidth / devicePixelRatio}px`;
|
|
52
|
+
const height = width;
|
|
91
53
|
return {
|
|
92
54
|
width,
|
|
93
55
|
height,
|
|
94
56
|
borderRadius: shape === "round" ? "50%" : ""
|
|
95
57
|
};
|
|
96
58
|
}, [devicePixelRatio, drawImage.swidth]);
|
|
97
|
-
|
|
59
|
+
const isAngle = useMemo(() => {
|
|
98
60
|
return state.angle === 90 || state.angle === 270;
|
|
99
61
|
}, [state.angle]);
|
|
100
|
-
|
|
101
|
-
|
|
62
|
+
const maxMoveX = useMemo(() => {
|
|
63
|
+
const { swidth, height } = drawImage;
|
|
102
64
|
if (isAngle) {
|
|
103
65
|
return Math.max(0, (height * state.scale - swidth) / 2);
|
|
104
66
|
}
|
|
105
67
|
return Math.max(0, (state.displayWidth * state.scale - swidth) / 2);
|
|
106
68
|
}, [state.scale, state.displayWidth, drawImage, isAngle]);
|
|
107
|
-
|
|
108
|
-
|
|
69
|
+
const maxMoveY = useMemo(() => {
|
|
70
|
+
const { swidth, height } = drawImage;
|
|
109
71
|
if (isAngle) {
|
|
110
72
|
return Math.max(0, (state.displayWidth * state.scale - swidth) / 2);
|
|
111
73
|
}
|
|
112
74
|
return Math.max(0, (height * state.scale - swidth) / 2);
|
|
113
75
|
}, [state.scale, state.displayWidth, drawImage, isAngle]);
|
|
114
|
-
|
|
115
|
-
return new Promise(
|
|
116
|
-
|
|
117
|
-
reader.onloadend =
|
|
118
|
-
return resolve(e.target.result);
|
|
119
|
-
};
|
|
76
|
+
const fileToDataURL = (file) => {
|
|
77
|
+
return new Promise((resolve) => {
|
|
78
|
+
const reader = new FileReader();
|
|
79
|
+
reader.onloadend = (e) => resolve(e.target.result);
|
|
120
80
|
reader.readAsDataURL(file);
|
|
121
81
|
});
|
|
122
82
|
};
|
|
123
|
-
|
|
124
|
-
return new Promise(
|
|
125
|
-
|
|
126
|
-
img.onload =
|
|
127
|
-
return resolve(img);
|
|
128
|
-
};
|
|
83
|
+
const dataURLToImage = (dataURL) => {
|
|
84
|
+
return new Promise((resolve) => {
|
|
85
|
+
const img = new Image();
|
|
86
|
+
img.onload = () => resolve(img);
|
|
129
87
|
img.src = dataURL;
|
|
130
88
|
});
|
|
131
89
|
};
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
90
|
+
const draw = useCallback(() => {
|
|
91
|
+
const { img, width, height, x, y, swidth } = drawImage;
|
|
92
|
+
const { moveX, moveY, scale, angle, displayWidth, displayHeight } = state;
|
|
93
|
+
const canvas = canvasRef.current;
|
|
136
94
|
if (!canvas)
|
|
137
95
|
return;
|
|
138
|
-
|
|
96
|
+
const ctx = canvas.getContext("2d");
|
|
139
97
|
canvas.width = displayWidth;
|
|
140
98
|
canvas.height = displayHeight;
|
|
141
99
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
@@ -148,31 +106,27 @@ var AvatarCropper = function AvatarCropper2(props) {
|
|
|
148
106
|
ctx.scale(scale, scale);
|
|
149
107
|
ctx.drawImage(img, x, y, width, height);
|
|
150
108
|
}, [drawImage, state, devicePixelRatio, space]);
|
|
151
|
-
useEffect(
|
|
109
|
+
useEffect(() => {
|
|
152
110
|
if (Math.abs(state.moveX) > maxMoveX) {
|
|
153
|
-
setState(
|
|
154
|
-
moveX: maxMoveX
|
|
155
|
-
}));
|
|
111
|
+
setState(Object.assign(Object.assign({}, state), { moveX: maxMoveX }));
|
|
156
112
|
}
|
|
157
113
|
if (Math.abs(state.moveY) > maxMoveY) {
|
|
158
|
-
setState(
|
|
159
|
-
moveY: maxMoveY
|
|
160
|
-
}));
|
|
114
|
+
setState(Object.assign(Object.assign({}, state), { moveY: maxMoveY }));
|
|
161
115
|
}
|
|
162
116
|
draw();
|
|
163
117
|
}, [state, maxMoveX, maxMoveY, draw]);
|
|
164
|
-
|
|
165
|
-
|
|
118
|
+
const setDrawImgs = (image) => {
|
|
119
|
+
const rect = getRect(cropperPopupRef.current);
|
|
166
120
|
if (!rect)
|
|
167
121
|
return;
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
122
|
+
const { width: clientWidth, height: clientHeight } = rect;
|
|
123
|
+
const canvasWidth = state.displayWidth = clientWidth * devicePixelRatio;
|
|
124
|
+
const canvasHeight = state.displayHeight = clientHeight * devicePixelRatio;
|
|
125
|
+
const copyDrawImg = Object.assign({}, defDrawImage);
|
|
126
|
+
const { width: imgWidth, height: imgHeight } = image;
|
|
173
127
|
copyDrawImg.img = image;
|
|
174
|
-
|
|
175
|
-
|
|
128
|
+
const isPortrait = imgHeight > imgWidth;
|
|
129
|
+
const rate = isPortrait ? imgWidth / imgHeight : imgHeight / imgWidth;
|
|
176
130
|
copyDrawImg.width = canvasWidth;
|
|
177
131
|
copyDrawImg.height = isPortrait ? canvasWidth / rate : canvasWidth * rate;
|
|
178
132
|
copyDrawImg.x = -copyDrawImg.width / 2;
|
|
@@ -182,233 +136,160 @@ var AvatarCropper = function AvatarCropper2(props) {
|
|
|
182
136
|
copyDrawImg.sx = space * devicePixelRatio;
|
|
183
137
|
copyDrawImg.sy = (canvasHeight - copyDrawImg.swidth) / 2;
|
|
184
138
|
setDrawImg(copyDrawImg);
|
|
185
|
-
|
|
186
|
-
setState(
|
|
187
|
-
defScale: scale
|
|
188
|
-
}));
|
|
139
|
+
const scale = copyDrawImg.swidth / (isPortrait ? copyDrawImg.width : copyDrawImg.height);
|
|
140
|
+
setState(Object.assign(Object.assign({}, state), { defScale: scale }));
|
|
189
141
|
resetScale(scale);
|
|
190
142
|
};
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
break;
|
|
204
|
-
}
|
|
205
|
-
return _context.abrupt("return");
|
|
206
|
-
case 5:
|
|
207
|
-
_context.next = 7;
|
|
208
|
-
return fileToDataURL(files[0]);
|
|
209
|
-
case 7:
|
|
210
|
-
base64 = _context.sent;
|
|
211
|
-
_context.next = 10;
|
|
212
|
-
return dataURLToImage(base64);
|
|
213
|
-
case 10:
|
|
214
|
-
image = _context.sent;
|
|
215
|
-
setDrawImgs(image);
|
|
216
|
-
case 12:
|
|
217
|
-
case "end":
|
|
218
|
-
return _context.stop();
|
|
219
|
-
}
|
|
220
|
-
}, _callee);
|
|
221
|
-
}));
|
|
222
|
-
return function inputImageChange2(_x) {
|
|
223
|
-
return _ref.apply(this, arguments);
|
|
224
|
-
};
|
|
225
|
-
}();
|
|
226
|
-
var resetScale = function resetScale2(scale) {
|
|
227
|
-
setState(_objectSpread(_objectSpread({}, state), {}, {
|
|
228
|
-
moveX: 0,
|
|
229
|
-
moveY: 0,
|
|
230
|
-
angle: 0,
|
|
231
|
-
scale: scale || state.defScale,
|
|
232
|
-
defScale: scale || state.defScale
|
|
233
|
-
}));
|
|
143
|
+
const inputImageChange = (event) => __awaiter(void 0, void 0, void 0, function* () {
|
|
144
|
+
setVisible(true);
|
|
145
|
+
const $el = event.target;
|
|
146
|
+
const { files } = $el;
|
|
147
|
+
if (!(files === null || files === void 0 ? void 0 : files.length))
|
|
148
|
+
return;
|
|
149
|
+
const base64 = yield fileToDataURL(files[0]);
|
|
150
|
+
const image = yield dataURLToImage(base64);
|
|
151
|
+
setDrawImgs(image);
|
|
152
|
+
});
|
|
153
|
+
const resetScale = (scale) => {
|
|
154
|
+
setState(Object.assign(Object.assign({}, state), { moveX: 0, moveY: 0, angle: 0, scale: scale || state.defScale, defScale: scale || state.defScale }));
|
|
234
155
|
};
|
|
235
|
-
|
|
156
|
+
const setScale = (scale) => {
|
|
236
157
|
scale = clamp(scale, 0.3, +maxZoom + 1);
|
|
237
158
|
if (scale !== state.scale) {
|
|
238
|
-
setState(
|
|
239
|
-
scale
|
|
240
|
-
}));
|
|
159
|
+
setState(Object.assign(Object.assign({}, state), { scale }));
|
|
241
160
|
}
|
|
242
161
|
};
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
};
|
|
246
|
-
var _useState11 = useState({
|
|
162
|
+
const getDistance = (touches) => Math.sqrt(Math.pow(touches[0].clientX - touches[1].clientX, 2) + Math.pow(touches[0].clientY - touches[1].clientY, 2));
|
|
163
|
+
const [startMove, setStartMove] = useState({
|
|
247
164
|
startMoveX: 0,
|
|
248
165
|
startMoveY: 0,
|
|
249
166
|
startScale: 0,
|
|
250
167
|
startDistance: 0
|
|
251
|
-
})
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
168
|
+
});
|
|
169
|
+
const { startMoveX, startMoveY, startScale, startDistance } = startMove;
|
|
170
|
+
const onTouchStart = (event) => {
|
|
171
|
+
const { touches } = event;
|
|
172
|
+
const { offsetX } = touch;
|
|
256
173
|
touch.start(event);
|
|
257
|
-
|
|
258
|
-
setStartMove(
|
|
259
|
-
startMoveX: state.moveX,
|
|
260
|
-
startMoveY: state.moveY
|
|
261
|
-
}));
|
|
174
|
+
const fingerNum = touches === null || touches === void 0 ? void 0 : touches.length;
|
|
175
|
+
setStartMove(Object.assign(Object.assign({}, startMove), { startMoveX: state.moveX, startMoveY: state.moveY }));
|
|
262
176
|
setMoving(fingerNum === 1);
|
|
263
177
|
setZooming(fingerNum === 2 && !offsetX.current);
|
|
264
178
|
if (fingerNum === 2 && !offsetX.current) {
|
|
265
|
-
setStartMove(
|
|
266
|
-
startScale: state.scale,
|
|
267
|
-
startDistance: getDistance(event.touches)
|
|
268
|
-
}));
|
|
179
|
+
setStartMove(Object.assign(Object.assign({}, startMove), { startScale: state.scale, startDistance: getDistance(event.touches) }));
|
|
269
180
|
}
|
|
270
181
|
};
|
|
271
|
-
|
|
272
|
-
|
|
182
|
+
const onTouchMove = (event) => {
|
|
183
|
+
const { touches } = event;
|
|
273
184
|
touch.move(event);
|
|
274
185
|
if (moving || zooming) {
|
|
275
186
|
preventDefault(event, true);
|
|
276
187
|
}
|
|
277
188
|
if (moving) {
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
setState(
|
|
282
|
-
moveX: clamp(moveX, -maxMoveX, maxMoveX),
|
|
283
|
-
moveY: clamp(moveY, -maxMoveY, maxMoveY)
|
|
284
|
-
}));
|
|
189
|
+
const { deltaX, deltaY } = touch;
|
|
190
|
+
const moveX = deltaX.current * state.scale + startMoveX;
|
|
191
|
+
const moveY = deltaY.current * state.scale + startMoveY;
|
|
192
|
+
setState(Object.assign(Object.assign({}, state), { moveX: clamp(moveX, -maxMoveX, maxMoveX), moveY: clamp(moveY, -maxMoveY, maxMoveY) }));
|
|
285
193
|
}
|
|
286
194
|
if (zooming && touches.length === 2) {
|
|
287
|
-
|
|
288
|
-
|
|
195
|
+
const distance = getDistance(touches);
|
|
196
|
+
const scale = startScale * distance / startDistance;
|
|
289
197
|
setScale(scale);
|
|
290
198
|
}
|
|
291
199
|
};
|
|
292
|
-
|
|
293
|
-
|
|
200
|
+
const onTouchEnd = (event) => {
|
|
201
|
+
let stopPropagation = false;
|
|
294
202
|
if (moving || zooming) {
|
|
295
203
|
stopPropagation = !(moving && startMoveX === state.moveX && startMoveY === state.moveY);
|
|
296
204
|
if (!event.touches.length) {
|
|
297
205
|
if (zooming) {
|
|
298
|
-
setState(
|
|
299
|
-
moveX: clamp(state.moveX, -maxMoveX, maxMoveX),
|
|
300
|
-
moveY: clamp(state.moveY, -maxMoveY, maxMoveY)
|
|
301
|
-
}));
|
|
206
|
+
setState(Object.assign(Object.assign({}, state), { moveX: clamp(state.moveX, -maxMoveX, maxMoveX), moveY: clamp(state.moveY, -maxMoveY, maxMoveY) }));
|
|
302
207
|
setZooming(false);
|
|
303
208
|
}
|
|
304
209
|
setMoving(false);
|
|
305
|
-
setStartMove(
|
|
306
|
-
startMoveX: 0,
|
|
307
|
-
startMoveY: 0,
|
|
308
|
-
startScale: state.defScale
|
|
309
|
-
}));
|
|
210
|
+
setStartMove(Object.assign(Object.assign({}, startMove), { startMoveX: 0, startMoveY: 0, startScale: state.defScale }));
|
|
310
211
|
if (state.scale < state.defScale) {
|
|
311
212
|
resetScale();
|
|
312
213
|
}
|
|
313
214
|
if (state.scale > maxZoom) {
|
|
314
|
-
setState(
|
|
315
|
-
scale: +maxZoom
|
|
316
|
-
}));
|
|
215
|
+
setState(Object.assign(Object.assign({}, state), { scale: +maxZoom }));
|
|
317
216
|
}
|
|
318
217
|
}
|
|
319
218
|
}
|
|
320
219
|
preventDefault(event, stopPropagation);
|
|
321
220
|
touch.reset();
|
|
322
221
|
};
|
|
323
|
-
|
|
324
|
-
setState(
|
|
325
|
-
angle: 0
|
|
326
|
-
}));
|
|
222
|
+
const reset = () => {
|
|
223
|
+
setState(Object.assign(Object.assign({}, state), { angle: 0 }));
|
|
327
224
|
};
|
|
328
|
-
|
|
225
|
+
const rotate = () => {
|
|
329
226
|
if (state.angle === 270) {
|
|
330
|
-
setState(
|
|
331
|
-
angle: 0
|
|
332
|
-
}));
|
|
227
|
+
setState(Object.assign(Object.assign({}, state), { angle: 0 }));
|
|
333
228
|
return;
|
|
334
229
|
}
|
|
335
|
-
setState(
|
|
336
|
-
angle: state.angle + 90
|
|
337
|
-
}));
|
|
230
|
+
setState(Object.assign(Object.assign({}, state), { angle: state.angle + 90 }));
|
|
338
231
|
};
|
|
339
|
-
|
|
340
|
-
var isEmit = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
232
|
+
const cancel = (isEmit = true) => {
|
|
341
233
|
setVisible(false);
|
|
342
234
|
resetScale();
|
|
343
235
|
inputImageRef.current && (inputImageRef.current.value = "");
|
|
344
236
|
isEmit && onCancel && onCancel();
|
|
345
237
|
};
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
238
|
+
const confirm = () => {
|
|
239
|
+
const canvas = canvasRef.current;
|
|
240
|
+
const { sx, sy, swidth } = drawImage;
|
|
241
|
+
const width = swidth;
|
|
242
|
+
const height = swidth;
|
|
243
|
+
const croppedCanvas = document.createElement("canvas");
|
|
244
|
+
const croppedCtx = croppedCanvas.getContext("2d");
|
|
353
245
|
croppedCanvas.width = width;
|
|
354
246
|
croppedCanvas.height = height;
|
|
355
247
|
canvas && croppedCtx.drawImage(canvas, sx, sy, width, height, 0, 0, width, height);
|
|
356
|
-
|
|
248
|
+
const imageDataURL = croppedCanvas.toDataURL("image/png");
|
|
357
249
|
onConfirm && onConfirm(imageDataURL);
|
|
358
250
|
cancel(false);
|
|
359
251
|
};
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
return React__default.createElement(
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
className: "".concat(classPrefix, "-popup-toolbar-item"),
|
|
368
|
-
onClick: function onClick(_e) {
|
|
369
|
-
return action();
|
|
370
|
-
}
|
|
371
|
-
}, toolbar[index]);
|
|
372
|
-
})));
|
|
252
|
+
const ToolBar = () => {
|
|
253
|
+
const actions = [cancel, reset, rotate, confirm];
|
|
254
|
+
return React__default.createElement(
|
|
255
|
+
React__default.Fragment,
|
|
256
|
+
null,
|
|
257
|
+
React__default.createElement("div", { className: `${classPrefix}-popup-toolbar-flex` }, actions.map((action, index) => React__default.createElement("div", { key: index, className: `${classPrefix}-popup-toolbar-item`, onClick: (_e) => action() }, toolbar[index])))
|
|
258
|
+
);
|
|
373
259
|
};
|
|
374
|
-
|
|
375
|
-
return React__default.createElement(
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
}, React__default.createElement(ToolBar, null))));
|
|
260
|
+
const CropperPopup = () => {
|
|
261
|
+
return React__default.createElement(
|
|
262
|
+
React__default.Fragment,
|
|
263
|
+
null,
|
|
264
|
+
React__default.createElement(
|
|
265
|
+
"div",
|
|
266
|
+
{ ref: cropperPopupRef, className: `${classPrefix}-popup`, style: { display: visible ? "block" : "none" } },
|
|
267
|
+
React__default.createElement("canvas", { ref: canvasRef, className: `${classPrefix}-popup-canvas` }),
|
|
268
|
+
React__default.createElement(
|
|
269
|
+
"div",
|
|
270
|
+
{ className: `${classPrefix}-popup-highlight`, onTouchStart, onTouchMove, onTouchEnd },
|
|
271
|
+
React__default.createElement("div", { className: "highlight", style: highlightStyle })
|
|
272
|
+
),
|
|
273
|
+
React__default.createElement(
|
|
274
|
+
"div",
|
|
275
|
+
{ className: toolbarPositionCls },
|
|
276
|
+
React__default.createElement(ToolBar, null)
|
|
277
|
+
)
|
|
278
|
+
)
|
|
279
|
+
);
|
|
395
280
|
};
|
|
396
|
-
return React__default.createElement(
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
"aria-label": "选择图片"
|
|
409
|
-
}), React__default.createElement("div", {
|
|
410
|
-
className: "nut-avatar-cropper-edit-text"
|
|
411
|
-
}, editText)), CropperPopup());
|
|
281
|
+
return React__default.createElement(
|
|
282
|
+
React__default.Fragment,
|
|
283
|
+
null,
|
|
284
|
+
React__default.createElement(
|
|
285
|
+
"div",
|
|
286
|
+
Object.assign({ className: cls }, rest, { style }),
|
|
287
|
+
children,
|
|
288
|
+
React__default.createElement("input", { ref: inputImageRef, type: "file", accept: "image/*", className: `${classPrefix}-input`, onChange: (e) => inputImageChange(e), "aria-label": "选择图片" }),
|
|
289
|
+
React__default.createElement("div", { className: "nut-avatar-cropper-edit-text" }, editText)
|
|
290
|
+
),
|
|
291
|
+
CropperPopup()
|
|
292
|
+
);
|
|
412
293
|
};
|
|
413
294
|
AvatarCropper.defaultProps = defaultProps;
|
|
414
295
|
AvatarCropper.displayName = "NutAvatarCropper";
|
package/dist/esm/AvatarGroup.js
CHANGED
|
@@ -1,54 +1,23 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
-
function ownKeys(e, r) {
|
|
3
|
-
var t = Object.keys(e);
|
|
4
|
-
if (Object.getOwnPropertySymbols) {
|
|
5
|
-
var o = Object.getOwnPropertySymbols(e);
|
|
6
|
-
r && (o = o.filter(function(r2) {
|
|
7
|
-
return Object.getOwnPropertyDescriptor(e, r2).enumerable;
|
|
8
|
-
})), t.push.apply(t, o);
|
|
9
|
-
}
|
|
10
|
-
return t;
|
|
11
|
-
}
|
|
12
|
-
function _objectSpread(e) {
|
|
13
|
-
for (var r = 1; r < arguments.length; r++) {
|
|
14
|
-
var t = null != arguments[r] ? arguments[r] : {};
|
|
15
|
-
r % 2 ? ownKeys(Object(t), true).forEach(function(r2) {
|
|
16
|
-
_defineProperty(e, r2, t[r2]);
|
|
17
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r2) {
|
|
18
|
-
Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t, r2));
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
return e;
|
|
22
|
-
}
|
|
23
1
|
import React__default, { useRef } from "react";
|
|
24
2
|
import classNames from "classnames";
|
|
25
3
|
import { A as AvatarContext } from "./context2.js";
|
|
26
4
|
import { C as ComponentDefaults } from "./typings.js";
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
var classPrefix = "nut-avatar-group";
|
|
36
|
-
var AvatarGroup = function AvatarGroup2(props) {
|
|
37
|
-
var propAvatarGroup = _objectSpread(_objectSpread({}, defaultProps), props);
|
|
38
|
-
var className = propAvatarGroup.className, style = propAvatarGroup.style, children = propAvatarGroup.children;
|
|
39
|
-
var avatarGroupRef = useRef(null);
|
|
40
|
-
var cls = classNames(classPrefix, className);
|
|
41
|
-
var parentAvatar = {
|
|
5
|
+
const defaultProps = Object.assign(Object.assign({}, ComponentDefaults), { maxContent: "", max: "", maxBackground: "#eee", maxColor: "#666", gap: "-8", level: "left" });
|
|
6
|
+
const classPrefix = `nut-avatar-group`;
|
|
7
|
+
const AvatarGroup = (props) => {
|
|
8
|
+
const propAvatarGroup = Object.assign(Object.assign({}, defaultProps), props);
|
|
9
|
+
const { className, style, children } = propAvatarGroup;
|
|
10
|
+
const avatarGroupRef = useRef(null);
|
|
11
|
+
const cls = classNames(classPrefix, className);
|
|
12
|
+
const parentAvatar = {
|
|
42
13
|
propAvatarGroup,
|
|
43
14
|
avatarGroupRef
|
|
44
15
|
};
|
|
45
|
-
return React__default.createElement(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
className: cls,
|
|
49
|
-
|
|
50
|
-
ref: avatarGroupRef
|
|
51
|
-
}, children));
|
|
16
|
+
return React__default.createElement(
|
|
17
|
+
AvatarContext.Provider,
|
|
18
|
+
{ value: parentAvatar },
|
|
19
|
+
React__default.createElement("div", { className: cls, style, ref: avatarGroupRef }, children)
|
|
20
|
+
);
|
|
52
21
|
};
|
|
53
22
|
AvatarGroup.defaultProps = defaultProps;
|
|
54
23
|
AvatarGroup.displayName = "NutAvatarGroup";
|