@easyv/react-components 0.0.12 → 0.0.14
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/Input/index.js +32 -41
- package/dist/Input/interface.d.ts +1 -2
- package/dist/InputNumber/PointDrag.d.ts +13 -0
- package/dist/InputNumber/PointDrag.js +107 -0
- package/dist/InputNumber/index.d.ts +3 -1
- package/dist/InputNumber/index.js +183 -1
- package/dist/InputNumber/index.less +93 -0
- package/dist/InputNumber/interface.d.ts +6 -1
- package/dist/InputNumber/util.d.ts +8 -0
- package/dist/InputNumber/util.js +31 -0
- package/package.json +1 -1
package/dist/Input/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
-
var _excluded = ["
|
|
3
|
-
_excluded2 = ["
|
|
2
|
+
var _excluded = ["value", "defaultValue", "enableEmpty", "autoSelect", "changeOnBlur", "onPressEnter", "onFocus", "onBlur", "onChange"],
|
|
3
|
+
_excluded2 = ["onSearch"];
|
|
4
4
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
5
5
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
6
6
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
@@ -16,97 +16,88 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
|
|
|
16
16
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
17
17
|
import React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';
|
|
18
18
|
import { Input } from '@arco-design/web-react';
|
|
19
|
-
import classNames from 'classnames';
|
|
20
19
|
import { SearchCircleOutlined } from '@easyv/react-icons';
|
|
21
20
|
import "./index.less";
|
|
22
21
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
22
|
var XInput = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
24
|
-
var
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
var _halfControlledProps;
|
|
24
|
+
var value = props.value,
|
|
25
|
+
defaultValue = props.defaultValue,
|
|
27
26
|
enableEmpty = props.enableEmpty,
|
|
28
|
-
value = props.value,
|
|
29
27
|
autoSelect = props.autoSelect,
|
|
30
|
-
|
|
28
|
+
changeOnBlur = props.changeOnBlur,
|
|
29
|
+
onPressEnter = props.onPressEnter,
|
|
31
30
|
onFocus = props.onFocus,
|
|
31
|
+
onBlur = props.onBlur,
|
|
32
32
|
onChange = props.onChange,
|
|
33
|
-
onPressEnter = props.onPressEnter,
|
|
34
|
-
onBlurChange = props.onBlurChange,
|
|
35
33
|
restProps = _objectWithoutProperties(props, _excluded);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
var _useState = useState('value' in props ?
|
|
34
|
+
|
|
35
|
+
// 用于 changeOnBlur 为 true 的模式,组件内存储,在失焦的时候,提交这个值
|
|
36
|
+
var _useState = useState('value' in props ? value : defaultValue),
|
|
39
37
|
_useState2 = _slicedToArray(_useState, 2),
|
|
40
38
|
localValue = _useState2[0],
|
|
41
39
|
setLocalValue = _useState2[1];
|
|
40
|
+
|
|
41
|
+
// 为了让 onBlur 函数不要每次值更新都生成新的函数引用,这里用 ref 缓存 localValue 值,这样 onBlur 函数可以不依赖 localValue 的更新,直接在需要的时候读取 ref 的值
|
|
42
42
|
var refValue = useRef(localValue);
|
|
43
43
|
refValue.current = localValue;
|
|
44
44
|
useEffect(function () {
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
// 只在 changeOnBlur 为 true 的时候 value 变化才更新,防止 changeOnBlur 为 false 时不需要这个值,更新过于频繁
|
|
46
|
+
if (changeOnBlur && value !== localValue) {
|
|
47
|
+
setLocalValue(value);
|
|
47
48
|
}
|
|
48
|
-
}, [
|
|
49
|
+
}, [value, changeOnBlur]);
|
|
49
50
|
|
|
50
|
-
//
|
|
51
|
+
// 修改组件库的默认行为:按回车失去焦点
|
|
51
52
|
var handlePressEnter = useCallback(function (e) {
|
|
52
53
|
e.currentTarget.blur();
|
|
53
54
|
onPressEnter === null || onPressEnter === void 0 ? void 0 : onPressEnter(e);
|
|
54
55
|
}, [onPressEnter]);
|
|
55
56
|
|
|
56
|
-
//
|
|
57
|
+
// 根据配置决定是否需要聚焦自动选中输入框文本
|
|
57
58
|
var handleFocus = useCallback(function (e) {
|
|
58
59
|
if (autoSelect) {
|
|
59
60
|
e.currentTarget.select();
|
|
60
61
|
}
|
|
61
62
|
onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
|
|
62
63
|
}, [onFocus]);
|
|
63
|
-
|
|
64
|
+
|
|
65
|
+
// changeOnBlur 为 true 模式下,修改的值存本地
|
|
66
|
+
var handleChange = useCallback(function (value) {
|
|
64
67
|
setLocalValue(value);
|
|
65
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(value, e);
|
|
66
68
|
}, [onChange]);
|
|
69
|
+
|
|
70
|
+
// changeOnBlur 为 true 模式下,失去焦点的时候才提交值的修改
|
|
67
71
|
var handleBlur = useCallback(function (e) {
|
|
68
|
-
if (refValue.current !== undefined && refValue.current !==
|
|
72
|
+
if (refValue.current !== undefined && refValue.current !== value) {
|
|
69
73
|
if (enableEmpty || refValue.current !== '') {
|
|
70
|
-
|
|
71
|
-
(_props$onBlurChange = props.onBlurChange) === null || _props$onBlurChange === void 0 ? void 0 : _props$onBlurChange.call(props, refValue.current);
|
|
74
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(refValue.current, e);
|
|
72
75
|
} else {
|
|
73
|
-
setLocalValue(
|
|
76
|
+
setLocalValue(value);
|
|
74
77
|
}
|
|
75
78
|
}
|
|
76
79
|
onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
|
|
77
|
-
}, [
|
|
78
|
-
var halfControlledProps = {
|
|
79
|
-
value: localValue,
|
|
80
|
-
onChange: handleChange,
|
|
81
|
-
onBlur: handleBlur
|
|
82
|
-
};
|
|
80
|
+
}, [value, onBlur]);
|
|
81
|
+
var halfControlledProps = (_halfControlledProps = {}, _defineProperty(_halfControlledProps, 'value' in props ? 'value' : 'defaultValue', localValue), _defineProperty(_halfControlledProps, "onChange", handleChange), _defineProperty(_halfControlledProps, "onBlur", handleBlur), _halfControlledProps);
|
|
83
82
|
return /*#__PURE__*/_jsx(Input, _objectSpread(_objectSpread({
|
|
84
83
|
ref: ref,
|
|
85
|
-
className: classNames(className, {
|
|
86
|
-
'arco-input-borderless': !bordered
|
|
87
|
-
}),
|
|
88
84
|
onPressEnter: handlePressEnter,
|
|
89
85
|
onFocus: handleFocus
|
|
90
|
-
},
|
|
86
|
+
}, changeOnBlur ? halfControlledProps : 'value' in props ? {
|
|
91
87
|
value: value,
|
|
92
88
|
onBlur: onBlur,
|
|
93
89
|
onChange: onChange
|
|
94
90
|
} : {
|
|
91
|
+
defaultValue: defaultValue,
|
|
95
92
|
onBlur: onBlur,
|
|
96
93
|
onChange: onChange
|
|
97
94
|
}), restProps));
|
|
98
95
|
});
|
|
99
96
|
var InputSearch = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
100
|
-
var
|
|
101
|
-
bordered = _ref$bordered === void 0 ? true : _ref$bordered,
|
|
102
|
-
className = _ref.className,
|
|
103
|
-
onSearch = _ref.onSearch,
|
|
97
|
+
var onSearch = _ref.onSearch,
|
|
104
98
|
restProps = _objectWithoutProperties(_ref, _excluded2);
|
|
105
99
|
return /*#__PURE__*/_jsx(Input, _objectSpread({
|
|
106
100
|
ref: ref,
|
|
107
|
-
className: classNames(className, {
|
|
108
|
-
'arco-input-borderless': !bordered
|
|
109
|
-
}),
|
|
110
101
|
prefix: /*#__PURE__*/_jsx(SearchCircleOutlined, {}),
|
|
111
102
|
onChange: onSearch,
|
|
112
103
|
onPressEnter: function onPressEnter(e) {
|
|
@@ -2,9 +2,8 @@ import type { InputProps } from '@arco-design/web-react';
|
|
|
2
2
|
import type { InputSearchProps, RefInputType } from '@arco-design/web-react/es/Input';
|
|
3
3
|
interface XInputProps extends InputProps {
|
|
4
4
|
enableEmpty?: boolean;
|
|
5
|
-
bordered?: boolean;
|
|
6
5
|
autoSelect?: boolean;
|
|
7
|
-
|
|
6
|
+
changeOnBlur?: boolean;
|
|
8
7
|
}
|
|
9
8
|
interface XInputSearchProps extends InputSearchProps {
|
|
10
9
|
bordered?: boolean;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface PointDragProps {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
onMoveStart?: () => void;
|
|
5
|
+
onMove?: ({ movementX }: {
|
|
6
|
+
movementX: number;
|
|
7
|
+
}) => void;
|
|
8
|
+
onMoveEnd?: ({ movementX }: {
|
|
9
|
+
movementX: number;
|
|
10
|
+
}) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function PointerDrag({ children, onMoveStart, onMove, onMoveEnd, }: PointDragProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
6
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
import React, { Fragment, cloneElement, useMemo, useRef, useState } from 'react';
|
|
8
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
|
+
export function PointerDrag(_ref) {
|
|
11
|
+
var children = _ref.children,
|
|
12
|
+
onMoveStart = _ref.onMoveStart,
|
|
13
|
+
onMove = _ref.onMove,
|
|
14
|
+
onMoveEnd = _ref.onMoveEnd;
|
|
15
|
+
var _useState = useState(false),
|
|
16
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
17
|
+
dragging = _useState2[0],
|
|
18
|
+
setDrag = _useState2[1];
|
|
19
|
+
var _useState3 = useState({
|
|
20
|
+
x: 0,
|
|
21
|
+
y: 0
|
|
22
|
+
}),
|
|
23
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
24
|
+
position = _useState4[0],
|
|
25
|
+
setPosition = _useState4[1];
|
|
26
|
+
var windowSize = useMemo(function () {
|
|
27
|
+
return {
|
|
28
|
+
width: document.body.clientWidth,
|
|
29
|
+
height: document.body.clientHeight
|
|
30
|
+
};
|
|
31
|
+
}, []);
|
|
32
|
+
var moveDistance = useRef(0);
|
|
33
|
+
var onMouseDown = function onMouseDown(e) {
|
|
34
|
+
e.target.requestPointerLock();
|
|
35
|
+
setPosition({
|
|
36
|
+
x: e.clientX,
|
|
37
|
+
y: e.clientY
|
|
38
|
+
});
|
|
39
|
+
setDrag(true);
|
|
40
|
+
moveDistance.current = 0;
|
|
41
|
+
onMoveStart === null || onMoveStart === void 0 ? void 0 : onMoveStart();
|
|
42
|
+
};
|
|
43
|
+
var _onMouseMove = function onMouseMove(e) {
|
|
44
|
+
if (dragging) {
|
|
45
|
+
setPosition(function (prev) {
|
|
46
|
+
var nextX = prev.x + e.movementX;
|
|
47
|
+
nextX = nextX + 10 * windowSize.width % windowSize.width;
|
|
48
|
+
return {
|
|
49
|
+
x: nextX,
|
|
50
|
+
y: prev.y
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
// 记录移动距离
|
|
54
|
+
moveDistance.current = moveDistance.current + e.movementX;
|
|
55
|
+
onMove === null || onMove === void 0 ? void 0 : onMove({
|
|
56
|
+
movementX: moveDistance.current
|
|
57
|
+
});
|
|
58
|
+
} else if (Math.abs(e.movementX) >= 1 && e.buttons) {
|
|
59
|
+
onMouseDown(e);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
var onMouseUp = function onMouseUp() {
|
|
63
|
+
if (dragging) {
|
|
64
|
+
document.exitPointerLock();
|
|
65
|
+
setDrag(false);
|
|
66
|
+
onMoveEnd === null || onMoveEnd === void 0 ? void 0 : onMoveEnd({
|
|
67
|
+
movementX: moveDistance.current
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
var arrow = /*#__PURE__*/_jsx("svg", {
|
|
72
|
+
width: 46,
|
|
73
|
+
height: 15,
|
|
74
|
+
style: {
|
|
75
|
+
position: 'fixed',
|
|
76
|
+
left: position.x,
|
|
77
|
+
top: position.y,
|
|
78
|
+
width: 46,
|
|
79
|
+
height: 15,
|
|
80
|
+
zIndex: 1,
|
|
81
|
+
transform: 'translate(-50%, -50%)'
|
|
82
|
+
},
|
|
83
|
+
children: /*#__PURE__*/_jsxs("g", {
|
|
84
|
+
transform: "translate(2 3)",
|
|
85
|
+
children: [/*#__PURE__*/_jsx("path", {
|
|
86
|
+
fillRule: "evenodd",
|
|
87
|
+
d: "M 15 4.5L 15 2L 11.5 5.5L 15 9L 15 6.5L 31 6.5L 31 9L 34.5 5.5L 31 2L 31 4.5Z",
|
|
88
|
+
stroke: "#fafafa",
|
|
89
|
+
style: {
|
|
90
|
+
strokeWidth: 2
|
|
91
|
+
}
|
|
92
|
+
}), /*#__PURE__*/_jsx("path", {
|
|
93
|
+
fillRule: "evenodd",
|
|
94
|
+
d: "M 15 4.5L 15 2L 11.5 5.5L 15 9L 15 6.5L 31 6.5L 31 9L 34.5 5.5L 31 2L 31 4.5Z"
|
|
95
|
+
})]
|
|
96
|
+
})
|
|
97
|
+
});
|
|
98
|
+
return /*#__PURE__*/_jsxs(Fragment, {
|
|
99
|
+
children: [children && /*#__PURE__*/cloneElement(children, {
|
|
100
|
+
onMouseMove: function onMouseMove(e) {
|
|
101
|
+
e.persist();
|
|
102
|
+
_onMouseMove(e);
|
|
103
|
+
},
|
|
104
|
+
onMouseUp: onMouseUp
|
|
105
|
+
}), dragging && arrow]
|
|
106
|
+
});
|
|
107
|
+
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { InputNumberProps } from './interface';
|
|
2
3
|
import './index.less';
|
|
4
|
+
declare const InputNumber: import("react").ForwardRefExoticComponent<InputNumberProps & import("react").RefAttributes<unknown>>;
|
|
3
5
|
export default InputNumber;
|
|
4
6
|
export type * from './interface';
|
|
@@ -1,3 +1,185 @@
|
|
|
1
|
-
|
|
1
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
+
var _excluded = ["min", "max", "step", "precision", "value", "defaultValue", "prefix", "suffix", "hideControl", "onChange"];
|
|
3
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
4
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
5
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
7
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
8
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
9
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
10
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
11
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
12
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
13
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
14
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
15
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
16
|
+
import { forwardRef, useCallback, useEffect, useRef, useState } from 'react';
|
|
17
|
+
import { DownOutlined, UpOutlined } from '@easyv/react-icons';
|
|
18
|
+
import Input from "../Input";
|
|
19
|
+
import { getSafeValue, evaluateExpression } from "./util";
|
|
20
|
+
import { PointerDrag } from "./PointDrag";
|
|
2
21
|
import "./index.less";
|
|
22
|
+
import classNames from 'classnames';
|
|
23
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
24
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
25
|
+
var valueRegx = /^[0-9().+\-*/]+$/;
|
|
26
|
+
var InputNumber = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
27
|
+
var min = props.min,
|
|
28
|
+
max = props.max,
|
|
29
|
+
_props$step = props.step,
|
|
30
|
+
step = _props$step === void 0 ? 1 : _props$step,
|
|
31
|
+
precision = props.precision,
|
|
32
|
+
value = props.value,
|
|
33
|
+
defaultValue = props.defaultValue,
|
|
34
|
+
prefix = props.prefix,
|
|
35
|
+
suffix = props.suffix,
|
|
36
|
+
hideControl = props.hideControl,
|
|
37
|
+
onChange = props.onChange,
|
|
38
|
+
restProps = _objectWithoutProperties(props, _excluded);
|
|
39
|
+
var getPropsValue = function getPropsValue() {
|
|
40
|
+
if ('value' in props) {
|
|
41
|
+
return value === undefined ? value : value.toString();
|
|
42
|
+
} else {
|
|
43
|
+
return defaultValue === undefined ? defaultValue : defaultValue.toString();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
var _useState = useState(getPropsValue),
|
|
47
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
48
|
+
localValue = _useState2[0],
|
|
49
|
+
setLocalValue = _useState2[1];
|
|
50
|
+
|
|
51
|
+
// 给拖拽滑动改变数值使用
|
|
52
|
+
var dragRef = useRef(false);
|
|
53
|
+
var originValue = useRef();
|
|
54
|
+
useEffect(function () {
|
|
55
|
+
// 拖拽过程中禁止更新
|
|
56
|
+
if (!dragRef.current && value !== localValue) {
|
|
57
|
+
setLocalValue(getPropsValue());
|
|
58
|
+
}
|
|
59
|
+
}, [value]);
|
|
60
|
+
|
|
61
|
+
// 只允许输入数字和(.+-*/)
|
|
62
|
+
var handleChange = useCallback(function (value) {
|
|
63
|
+
if (value === '' || valueRegx.test(value)) {
|
|
64
|
+
setLocalValue(value);
|
|
65
|
+
}
|
|
66
|
+
}, []);
|
|
67
|
+
var handleBlur = function handleBlur() {
|
|
68
|
+
if (localValue !== undefined) {
|
|
69
|
+
var result = evaluateExpression(localValue);
|
|
70
|
+
if (isNaN(result)) {
|
|
71
|
+
setLocalValue(getPropsValue());
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
result = getSafeValue(result, {
|
|
75
|
+
min: min,
|
|
76
|
+
max: max,
|
|
77
|
+
precision: precision
|
|
78
|
+
});
|
|
79
|
+
setLocalValue(result.toString());
|
|
80
|
+
if (result !== value) {
|
|
81
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(result);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
var handleMoveStart = function handleMoveStart() {
|
|
86
|
+
dragRef.current = true;
|
|
87
|
+
var initValue = getPropsValue();
|
|
88
|
+
originValue.current = initValue === undefined ? undefined : isNaN(Number(initValue)) ? undefined : Number(initValue);
|
|
89
|
+
};
|
|
90
|
+
var handlePointMove = function handlePointMove(_ref) {
|
|
91
|
+
var movementX = _ref.movementX;
|
|
92
|
+
var initNumberValue = originValue.current;
|
|
93
|
+
if (initNumberValue === undefined) {
|
|
94
|
+
initNumberValue = 0;
|
|
95
|
+
}
|
|
96
|
+
var result = initNumberValue + Math.floor(movementX / 2) * step;
|
|
97
|
+
result = getSafeValue(result, {
|
|
98
|
+
min: min,
|
|
99
|
+
max: max,
|
|
100
|
+
precision: precision
|
|
101
|
+
});
|
|
102
|
+
setLocalValue(result.toString());
|
|
103
|
+
if (result !== originValue.current) {
|
|
104
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(result);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
var handlePointMoveEnd = function handlePointMoveEnd() {
|
|
108
|
+
dragRef.current = false;
|
|
109
|
+
};
|
|
110
|
+
var handleCountUp = function handleCountUp() {
|
|
111
|
+
if (props.disabled) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
var result = localValue === undefined ? 0 : isNaN(Number(localValue)) ? 0 : Number(localValue);
|
|
115
|
+
result += step;
|
|
116
|
+
result = getSafeValue(result, {
|
|
117
|
+
min: min,
|
|
118
|
+
max: max,
|
|
119
|
+
precision: precision
|
|
120
|
+
});
|
|
121
|
+
setLocalValue(result.toString());
|
|
122
|
+
if (result !== value) {
|
|
123
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(result);
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
var handleCountDown = function handleCountDown() {
|
|
127
|
+
if (props.disabled) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
var result = localValue === undefined ? 0 : isNaN(Number(localValue)) ? 0 : Number(localValue);
|
|
131
|
+
result -= step;
|
|
132
|
+
result = getSafeValue(result, {
|
|
133
|
+
min: min,
|
|
134
|
+
max: max,
|
|
135
|
+
precision: precision
|
|
136
|
+
});
|
|
137
|
+
setLocalValue(result.toString());
|
|
138
|
+
if (result !== value) {
|
|
139
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(result);
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
return /*#__PURE__*/_jsx(Input, _objectSpread({
|
|
143
|
+
autoSelect: true,
|
|
144
|
+
ref: ref,
|
|
145
|
+
className: "arco-input-number",
|
|
146
|
+
onChange: handleChange,
|
|
147
|
+
onBlur: handleBlur,
|
|
148
|
+
value: localValue,
|
|
149
|
+
prefix: !props.disabled && !props.readOnly ? /*#__PURE__*/_jsx(PointerDrag, {
|
|
150
|
+
onMoveStart: handleMoveStart,
|
|
151
|
+
onMove: handlePointMove,
|
|
152
|
+
onMoveEnd: handlePointMoveEnd,
|
|
153
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
154
|
+
className: "arco-input-number-prefix-inner",
|
|
155
|
+
children: prefix
|
|
156
|
+
})
|
|
157
|
+
}) : /*#__PURE__*/_jsx("span", {
|
|
158
|
+
className: "arco-input-number-prefix-inner",
|
|
159
|
+
children: prefix
|
|
160
|
+
}),
|
|
161
|
+
suffix: /*#__PURE__*/_jsxs("div", {
|
|
162
|
+
className: "arco-input-number-suffix-inner",
|
|
163
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
164
|
+
className: "arco-input-number-suffix-icon",
|
|
165
|
+
children: suffix
|
|
166
|
+
}), !hideControl && !props.disabled && !props.readOnly && /*#__PURE__*/_jsxs("div", {
|
|
167
|
+
className: "arco-input-number-step",
|
|
168
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
169
|
+
className: classNames('arco-input-number-handle-up', {
|
|
170
|
+
'arco-input-number-handle-disabled': localValue !== undefined && max !== undefined && +localValue >= max
|
|
171
|
+
}),
|
|
172
|
+
onClick: handleCountUp,
|
|
173
|
+
children: /*#__PURE__*/_jsx(UpOutlined, {})
|
|
174
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
175
|
+
className: classNames('arco-input-number-handle-down', {
|
|
176
|
+
'arco-input-number-handle-disabled': localValue !== undefined && min !== undefined && +localValue <= min
|
|
177
|
+
}),
|
|
178
|
+
onClick: handleCountDown,
|
|
179
|
+
children: /*#__PURE__*/_jsx(DownOutlined, {})
|
|
180
|
+
})]
|
|
181
|
+
})]
|
|
182
|
+
})
|
|
183
|
+
}, restProps));
|
|
184
|
+
});
|
|
3
185
|
export default InputNumber;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
.arco-input-number {
|
|
2
|
+
&.arco-input-group-wrapper {
|
|
3
|
+
--input-height: 30px;
|
|
4
|
+
--input-step-top: 4px;
|
|
5
|
+
|
|
6
|
+
&.arco-input-group-wrapper-mini {
|
|
7
|
+
--input-height: 22px;
|
|
8
|
+
--input-step-top: 1px;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
&.arco-input-group-wrapper-small {
|
|
12
|
+
--input-height: 26px;
|
|
13
|
+
--input-step-top: 2px;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
&.arco-input-group-wrapper-large {
|
|
17
|
+
--input-height: 34px;
|
|
18
|
+
--input-step-top: 8px;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.arco-input-inner-wrapper {
|
|
22
|
+
padding-left: 0;
|
|
23
|
+
|
|
24
|
+
.arco-input {
|
|
25
|
+
padding-left: 0;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.arco-input-inner-wrapper-focus {
|
|
30
|
+
.arco-input-number-step {
|
|
31
|
+
background-color: var(--color-fill-1);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.arco-input-number-suffix-icon {
|
|
35
|
+
display: none;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.arco-input-number-prefix-inner {
|
|
40
|
+
cursor: ew-resize;
|
|
41
|
+
display: flex;
|
|
42
|
+
align-items: center;
|
|
43
|
+
min-height: var(--input-height);
|
|
44
|
+
padding-left: 12px;
|
|
45
|
+
padding-right: 12px;
|
|
46
|
+
|
|
47
|
+
&:empty {
|
|
48
|
+
padding-left: 6px;
|
|
49
|
+
padding-right: 6px;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.arco-input-number-step {
|
|
54
|
+
position: absolute;
|
|
55
|
+
right: 6px;
|
|
56
|
+
top: var(--input-step-top);
|
|
57
|
+
display: flex;
|
|
58
|
+
flex-direction: column;
|
|
59
|
+
width: 18px;
|
|
60
|
+
text-align: center;
|
|
61
|
+
font-size: 12px;
|
|
62
|
+
opacity: 0;
|
|
63
|
+
|
|
64
|
+
.arco-input-number-handle-up,
|
|
65
|
+
.arco-input-number-handle-down {
|
|
66
|
+
display: flex;
|
|
67
|
+
align-items: center;
|
|
68
|
+
justify-content: center;
|
|
69
|
+
height: calc((var(--input-height) - var(--input-step-top) * 2) / 2);
|
|
70
|
+
cursor: pointer;
|
|
71
|
+
|
|
72
|
+
&.arco-input-number-handle-disabled {
|
|
73
|
+
cursor: not-allowed;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
&:not(.arco-input-number-handle-disabled):hover {
|
|
77
|
+
background-color: var(--color-fill-2);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
&:hover {
|
|
83
|
+
.arco-input-number-step {
|
|
84
|
+
opacity: 1;
|
|
85
|
+
transition: all opacity 0.3s;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.arco-input-number-suffix-icon {
|
|
89
|
+
display: none;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -1 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import type { InputNumberProps } from '@arco-design/web-react';
|
|
2
|
+
interface XInputNumberProps extends Omit<InputNumberProps, 'value' | 'defaultValue' | 'onKeyDown' | 'formatter' | 'parser' | 'strictMode' | 'mode' | 'icons'> {
|
|
3
|
+
value?: number;
|
|
4
|
+
defaultValue?: number;
|
|
5
|
+
}
|
|
6
|
+
export { XInputNumberProps as InputNumberProps };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function evaluateExpression(exporssion: string): number;
|
|
2
|
+
interface SafeOptions {
|
|
3
|
+
min?: number;
|
|
4
|
+
max?: number;
|
|
5
|
+
precision?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function getSafeValue(value: number, { min, max, precision }: SafeOptions): number;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export function evaluateExpression(exporssion) {
|
|
2
|
+
try {
|
|
3
|
+
// eslint-disable-next-line no-eval
|
|
4
|
+
return +eval(exporssion);
|
|
5
|
+
} catch (e) {
|
|
6
|
+
return NaN;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export function getSafeValue(value, _ref) {
|
|
10
|
+
var min = _ref.min,
|
|
11
|
+
max = _ref.max,
|
|
12
|
+
precision = _ref.precision;
|
|
13
|
+
// 处理精度问题,如0.1 + 0.2 !== 0.3,不过这是比较简单的处理方式,还是会有异常情况,如需准确,需要引入第三方库
|
|
14
|
+
var result = parseFloat(value.toFixed(12));
|
|
15
|
+
if (min !== undefined && result < min) {
|
|
16
|
+
result = min;
|
|
17
|
+
}
|
|
18
|
+
if (max !== undefined && result > max) {
|
|
19
|
+
result = max;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// if (step !== undefined) {
|
|
23
|
+
// result = Math.round(result / step) * step;
|
|
24
|
+
// }
|
|
25
|
+
|
|
26
|
+
result = parseFloat(result.toFixed(12));
|
|
27
|
+
if (precision !== undefined) {
|
|
28
|
+
result = Number(result.toFixed(precision));
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|