antd-mobile 5.25.0 → 5.26.0
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/2x/bundle/antd-mobile.cjs.development.js +188 -121
- package/2x/bundle/antd-mobile.cjs.js +8 -8
- package/2x/bundle/antd-mobile.es.development.js +188 -121
- package/2x/bundle/antd-mobile.es.js +3936 -3910
- package/2x/bundle/antd-mobile.umd.development.js +188 -121
- package/2x/bundle/antd-mobile.umd.js +8 -8
- package/2x/bundle/css-vars-patch.css +399 -0
- package/2x/bundle/style.css +29 -5
- package/2x/cjs/components/calendar/calendar.js +9 -1
- package/2x/cjs/components/floating-bubble/floating-bubble.d.ts +8 -0
- package/2x/cjs/components/floating-bubble/floating-bubble.js +25 -5
- package/2x/cjs/components/form/form.d.ts +1 -1
- package/2x/cjs/components/image-uploader/image-uploader.css +16 -1
- package/2x/cjs/components/image-uploader/image-uploader.d.ts +4 -1
- package/2x/cjs/components/image-uploader/image-uploader.js +46 -9
- package/2x/cjs/components/image-uploader/preview-item.d.ts +2 -1
- package/2x/cjs/components/image-uploader/preview-item.js +5 -7
- package/2x/cjs/components/mask/mask.d.ts +1 -1
- package/2x/cjs/components/mask/mask.js +6 -2
- package/2x/cjs/components/notice-bar/notice-bar.css +13 -4
- package/2x/cjs/components/notice-bar/notice-bar.d.ts +10 -8
- package/2x/cjs/components/notice-bar/notice-bar.js +5 -2
- package/2x/cjs/components/stepper/stepper.d.ts +2 -0
- package/2x/cjs/components/stepper/stepper.js +55 -32
- package/2x/cjs/components/water-mark/water-mark.d.ts +1 -1
- package/2x/cjs/components/water-mark/water-mark.js +5 -1
- package/2x/es/components/calendar/calendar.js +9 -1
- package/2x/es/components/floating-bubble/floating-bubble.d.ts +8 -0
- package/2x/es/components/floating-bubble/floating-bubble.js +26 -6
- package/2x/es/components/form/form.d.ts +1 -1
- package/2x/es/components/image-uploader/image-uploader.css +16 -1
- package/2x/es/components/image-uploader/image-uploader.d.ts +4 -1
- package/2x/es/components/image-uploader/image-uploader.js +48 -11
- package/2x/es/components/image-uploader/preview-item.d.ts +2 -1
- package/2x/es/components/image-uploader/preview-item.js +6 -8
- package/2x/es/components/mask/mask.d.ts +1 -1
- package/2x/es/components/mask/mask.js +6 -2
- package/2x/es/components/notice-bar/notice-bar.css +13 -4
- package/2x/es/components/notice-bar/notice-bar.d.ts +10 -8
- package/2x/es/components/notice-bar/notice-bar.js +5 -2
- package/2x/es/components/stepper/stepper.d.ts +2 -0
- package/2x/es/components/stepper/stepper.js +55 -32
- package/2x/es/components/water-mark/water-mark.d.ts +1 -1
- package/2x/es/components/water-mark/water-mark.js +5 -1
- package/2x/package.json +9 -9
- package/bundle/antd-mobile.cjs.development.js +188 -121
- package/bundle/antd-mobile.cjs.js +8 -8
- package/bundle/antd-mobile.compatible.umd.js +1 -1
- package/bundle/antd-mobile.es.development.js +188 -121
- package/bundle/antd-mobile.es.js +3936 -3910
- package/bundle/antd-mobile.umd.development.js +188 -121
- package/bundle/antd-mobile.umd.js +8 -8
- package/bundle/css-vars-patch.css +312 -0
- package/bundle/style.css +1 -1
- package/cjs/components/calendar/calendar.js +9 -1
- package/cjs/components/floating-bubble/floating-bubble.d.ts +8 -0
- package/cjs/components/floating-bubble/floating-bubble.js +25 -5
- package/cjs/components/form/form.d.ts +1 -1
- package/cjs/components/image-uploader/image-uploader.css +15 -1
- package/cjs/components/image-uploader/image-uploader.d.ts +4 -1
- package/cjs/components/image-uploader/image-uploader.js +46 -9
- package/cjs/components/image-uploader/preview-item.d.ts +2 -1
- package/cjs/components/image-uploader/preview-item.js +5 -7
- package/cjs/components/mask/mask.d.ts +1 -1
- package/cjs/components/mask/mask.js +6 -2
- package/cjs/components/notice-bar/notice-bar.css +11 -4
- package/cjs/components/notice-bar/notice-bar.d.ts +10 -8
- package/cjs/components/notice-bar/notice-bar.js +5 -2
- package/cjs/components/stepper/stepper.d.ts +2 -0
- package/cjs/components/stepper/stepper.js +55 -32
- package/cjs/components/water-mark/water-mark.d.ts +1 -1
- package/cjs/components/water-mark/water-mark.js +5 -1
- package/es/components/calendar/calendar.js +9 -1
- package/es/components/floating-bubble/floating-bubble.d.ts +8 -0
- package/es/components/floating-bubble/floating-bubble.js +26 -6
- package/es/components/form/form.d.ts +1 -1
- package/es/components/image-uploader/image-uploader.css +15 -1
- package/es/components/image-uploader/image-uploader.d.ts +4 -1
- package/es/components/image-uploader/image-uploader.js +48 -11
- package/es/components/image-uploader/preview-item.d.ts +2 -1
- package/es/components/image-uploader/preview-item.js +6 -8
- package/es/components/mask/mask.d.ts +1 -1
- package/es/components/mask/mask.js +6 -2
- package/es/components/notice-bar/notice-bar.css +11 -4
- package/es/components/notice-bar/notice-bar.d.ts +10 -8
- package/es/components/notice-bar/notice-bar.js +5 -2
- package/es/components/stepper/stepper.d.ts +2 -0
- package/es/components/stepper/stepper.js +55 -32
- package/es/components/water-mark/water-mark.d.ts +1 -1
- package/es/components/water-mark/water-mark.js +5 -1
- package/package.json +9 -9
- package/umd/antd-mobile.js +1 -1
- package/2x/cjs/components/image/test/image.test.d.ts +0 -1
- package/2x/cjs/components/image/test/image.test.js +0 -73
- package/2x/es/components/image/test/image.test.d.ts +0 -1
- package/2x/es/components/image/test/image.test.js +0 -70
- package/cjs/components/image/test/image.test.d.ts +0 -1
- package/cjs/components/image/test/image.test.js +0 -73
- package/es/components/image/test/image.test.d.ts +0 -1
- package/es/components/image/test/image.test.js +0 -70
|
@@ -14,7 +14,9 @@ var _usePropsValue = require("../../utils/use-props-value");
|
|
|
14
14
|
var _ahooks = require("ahooks");
|
|
15
15
|
var _space = _interopRequireDefault(require("../space"));
|
|
16
16
|
var _nativeProps = require("../../utils/native-props");
|
|
17
|
+
var _measureCssLength = require("../../utils/measure-css-length");
|
|
17
18
|
var _configProvider = require("../config-provider");
|
|
19
|
+
var _grid = _interopRequireDefault(require("../grid"));
|
|
18
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
21
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
20
22
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -22,6 +24,9 @@ const classPrefix = `adm-image-uploader`;
|
|
|
22
24
|
const defaultProps = {
|
|
23
25
|
disableUpload: false,
|
|
24
26
|
deletable: true,
|
|
27
|
+
deleteIcon: _react.default.createElement(_antdMobileIcons.CloseOutline, {
|
|
28
|
+
className: `${classPrefix}-cell-delete-icon`
|
|
29
|
+
}),
|
|
25
30
|
showUpload: true,
|
|
26
31
|
multiple: false,
|
|
27
32
|
maxCount: 0,
|
|
@@ -36,8 +41,26 @@ const ImageUploader = p => {
|
|
|
36
41
|
locale
|
|
37
42
|
} = (0, _configProvider.useConfig)();
|
|
38
43
|
const props = (0, _withDefaultProps.mergeProps)(defaultProps, p);
|
|
44
|
+
const {
|
|
45
|
+
columns
|
|
46
|
+
} = props;
|
|
39
47
|
const [value, setValue] = (0, _usePropsValue.usePropsValue)(props);
|
|
40
48
|
const [tasks, setTasks] = (0, _react.useState)([]);
|
|
49
|
+
const containerRef = (0, _react.useRef)(null);
|
|
50
|
+
const containerSize = (0, _ahooks.useSize)(containerRef);
|
|
51
|
+
const gapMeasureRef = (0, _react.useRef)(null);
|
|
52
|
+
const [cellSize, setCellSize] = (0, _react.useState)(80);
|
|
53
|
+
(0, _ahooks.useIsomorphicLayoutEffect)(() => {
|
|
54
|
+
const gapMeasure = gapMeasureRef.current;
|
|
55
|
+
if (columns && containerSize && gapMeasure) {
|
|
56
|
+
const width = containerSize.width;
|
|
57
|
+
const gap = (0, _measureCssLength.measureCSSLength)(window.getComputedStyle(gapMeasure).getPropertyValue('height'));
|
|
58
|
+
setCellSize((width - gap * (columns - 1)) / columns);
|
|
59
|
+
}
|
|
60
|
+
}, [containerSize === null || containerSize === void 0 ? void 0 : containerSize.width]);
|
|
61
|
+
const style = {
|
|
62
|
+
'--cell-size': cellSize + 'px'
|
|
63
|
+
};
|
|
41
64
|
(0, _ahooks.useIsomorphicLayoutEffect)(() => {
|
|
42
65
|
setTasks(prev => prev.filter(task => {
|
|
43
66
|
if (task.url === undefined) return true;
|
|
@@ -161,6 +184,7 @@ const ImageUploader = p => {
|
|
|
161
184
|
key: (_a = fileItem.key) !== null && _a !== void 0 ? _a : index,
|
|
162
185
|
url: (_b = fileItem.thumbnailUrl) !== null && _b !== void 0 ? _b : fileItem.url,
|
|
163
186
|
deletable: props.deletable,
|
|
187
|
+
deleteIcon: props.deleteIcon,
|
|
164
188
|
imageFit: props.imageFit,
|
|
165
189
|
onClick: () => {
|
|
166
190
|
if (props.preview) {
|
|
@@ -178,21 +202,19 @@ const ImageUploader = p => {
|
|
|
178
202
|
return renderItem ? renderItem(originNode, fileItem, value) : originNode;
|
|
179
203
|
});
|
|
180
204
|
};
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
wrap: true,
|
|
186
|
-
block: true
|
|
187
|
-
}, renderImages(), finalTasks.map(task => {
|
|
205
|
+
const contentNode = _react.default.createElement(_react.default.Fragment, null, renderImages(), tasks.map(task => {
|
|
206
|
+
if (!props.showFailed && task.status === 'fail') {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
188
209
|
return _react.default.createElement(_previewItem.default, {
|
|
189
210
|
key: task.id,
|
|
190
211
|
file: task.file,
|
|
191
212
|
deletable: task.status !== 'pending',
|
|
213
|
+
deleteIcon: props.deleteIcon,
|
|
192
214
|
status: task.status,
|
|
193
215
|
imageFit: props.imageFit,
|
|
194
216
|
onDelete: () => {
|
|
195
|
-
setTasks(
|
|
217
|
+
setTasks(tasks.filter(x => x.id !== task.id));
|
|
196
218
|
}
|
|
197
219
|
});
|
|
198
220
|
}), showUpload && _react.default.createElement("div", {
|
|
@@ -211,6 +233,21 @@ const ImageUploader = p => {
|
|
|
211
233
|
className: `${classPrefix}-input`,
|
|
212
234
|
onChange: onChange,
|
|
213
235
|
"aria-hidden": true
|
|
214
|
-
})))
|
|
236
|
+
})));
|
|
237
|
+
return (0, _nativeProps.withNativeProps)(props, _react.default.createElement("div", {
|
|
238
|
+
className: classPrefix,
|
|
239
|
+
ref: containerRef
|
|
240
|
+
}, columns ? _react.default.createElement(_grid.default, {
|
|
241
|
+
className: `${classPrefix}-grid`,
|
|
242
|
+
columns: columns,
|
|
243
|
+
style: style
|
|
244
|
+
}, _react.default.createElement("div", {
|
|
245
|
+
className: `${classPrefix}-gap-measure`,
|
|
246
|
+
ref: gapMeasureRef
|
|
247
|
+
}), contentNode.props.children) : _react.default.createElement(_space.default, {
|
|
248
|
+
className: `${classPrefix}-space`,
|
|
249
|
+
wrap: true,
|
|
250
|
+
block: true
|
|
251
|
+
}, contentNode.props.children)));
|
|
215
252
|
};
|
|
216
253
|
exports.ImageUploader = ImageUploader;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
1
|
+
import React, { FC } from 'react';
|
|
2
2
|
import { TaskStatus } from './image-uploader';
|
|
3
3
|
import type { ImageProps } from '../image';
|
|
4
4
|
declare type Props = {
|
|
5
5
|
onClick?: () => void;
|
|
6
6
|
onDelete?: () => void;
|
|
7
7
|
deletable: boolean;
|
|
8
|
+
deleteIcon: React.ReactNode;
|
|
8
9
|
url?: string;
|
|
9
10
|
file?: File;
|
|
10
11
|
status?: TaskStatus;
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
-
var _antdMobileIcons = require("antd-mobile-icons");
|
|
9
8
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
10
9
|
var _image = _interopRequireDefault(require("../image"));
|
|
11
10
|
var _spinLoading = _interopRequireDefault(require("../spin-loading"));
|
|
@@ -22,6 +21,7 @@ const PreviewItem = props => {
|
|
|
22
21
|
url,
|
|
23
22
|
file,
|
|
24
23
|
deletable,
|
|
24
|
+
deleteIcon,
|
|
25
25
|
onDelete,
|
|
26
26
|
imageFit
|
|
27
27
|
} = props;
|
|
@@ -34,11 +34,11 @@ const PreviewItem = props => {
|
|
|
34
34
|
}
|
|
35
35
|
return '';
|
|
36
36
|
}, [url, file]);
|
|
37
|
-
(0, _react.
|
|
37
|
+
(0, _react.useEffect)(() => {
|
|
38
38
|
return () => {
|
|
39
|
-
URL.revokeObjectURL(src);
|
|
39
|
+
if (file) URL.revokeObjectURL(src);
|
|
40
40
|
};
|
|
41
|
-
}, [src]);
|
|
41
|
+
}, [src, file]);
|
|
42
42
|
function renderLoading() {
|
|
43
43
|
return props.status === 'pending' && _react.default.createElement("div", {
|
|
44
44
|
className: `${classPrefix}-cell-mask`
|
|
@@ -54,9 +54,7 @@ const PreviewItem = props => {
|
|
|
54
54
|
return deletable && _react.default.createElement("span", {
|
|
55
55
|
className: `${classPrefix}-cell-delete`,
|
|
56
56
|
onClick: onDelete
|
|
57
|
-
},
|
|
58
|
-
className: `${classPrefix}-cell-delete-icon`
|
|
59
|
-
}));
|
|
57
|
+
}, deleteIcon);
|
|
60
58
|
}
|
|
61
59
|
return _react.default.createElement("div", {
|
|
62
60
|
className: (0, _classnames.default)(`${classPrefix}-cell`, props.status === 'fail' && `${classPrefix}-cell-fail`)
|
|
@@ -8,7 +8,7 @@ export declare type MaskProps = {
|
|
|
8
8
|
destroyOnClose?: boolean;
|
|
9
9
|
forceRender?: boolean;
|
|
10
10
|
disableBodyScroll?: boolean;
|
|
11
|
-
color?: '
|
|
11
|
+
color?: 'white' | 'black' | (string & {});
|
|
12
12
|
opacity?: 'default' | 'thin' | 'thick' | number;
|
|
13
13
|
getContainer?: GetContainer;
|
|
14
14
|
afterShow?: () => void;
|
|
@@ -22,6 +22,10 @@ const opacityRecord = {
|
|
|
22
22
|
thin: 0.35,
|
|
23
23
|
thick: 0.75
|
|
24
24
|
};
|
|
25
|
+
const colorRecord = {
|
|
26
|
+
black: '0, 0, 0',
|
|
27
|
+
white: '255, 255, 255'
|
|
28
|
+
};
|
|
25
29
|
const defaultProps = {
|
|
26
30
|
visible: true,
|
|
27
31
|
destroyOnClose: false,
|
|
@@ -42,8 +46,8 @@ const Mask = p => {
|
|
|
42
46
|
const background = (0, _react.useMemo)(() => {
|
|
43
47
|
var _a;
|
|
44
48
|
const opacity = (_a = opacityRecord[props.opacity]) !== null && _a !== void 0 ? _a : props.opacity;
|
|
45
|
-
const rgb = props.color
|
|
46
|
-
return `rgba(${rgb}, ${opacity})
|
|
49
|
+
const rgb = colorRecord[props.color];
|
|
50
|
+
return rgb ? `rgba(${rgb}, ${opacity})` : props.color;
|
|
47
51
|
}, [props.color, props.opacity]);
|
|
48
52
|
const [active, setActive] = (0, _react.useState)(props.visible);
|
|
49
53
|
const unmountedRef = (0, _ahooks.useUnmountedRef)();
|
|
@@ -4,11 +4,10 @@
|
|
|
4
4
|
--text-color: var(--adm-color-white);
|
|
5
5
|
--font-size: var(--adm-font-size-7);
|
|
6
6
|
--icon-font-size: var(--adm-font-size-10);
|
|
7
|
-
--height:
|
|
7
|
+
--height: 40px;
|
|
8
8
|
height: var(--height);
|
|
9
9
|
box-sizing: border-box;
|
|
10
10
|
font-size: var(--font-size);
|
|
11
|
-
line-height: var(--height);
|
|
12
11
|
padding: 0 12px;
|
|
13
12
|
display: flex;
|
|
14
13
|
align-items: center;
|
|
@@ -41,7 +40,6 @@
|
|
|
41
40
|
flex-shrink: 0;
|
|
42
41
|
margin-right: 8px;
|
|
43
42
|
font-size: var(--icon-font-size);
|
|
44
|
-
line-height: var(--height);
|
|
45
43
|
}
|
|
46
44
|
.adm-notice-bar .adm-notice-bar-content {
|
|
47
45
|
flex: 1;
|
|
@@ -54,9 +52,11 @@
|
|
|
54
52
|
.adm-notice-bar .adm-notice-bar-content .adm-notice-bar-content-inner {
|
|
55
53
|
width: auto;
|
|
56
54
|
transition-timing-function: linear;
|
|
57
|
-
position: absolute;
|
|
58
55
|
white-space: nowrap;
|
|
59
56
|
}
|
|
57
|
+
.adm-notice-bar-wrap.adm-notice-bar .adm-notice-bar-content .adm-notice-bar-content-inner {
|
|
58
|
+
white-space: normal;
|
|
59
|
+
}
|
|
60
60
|
.adm-notice-bar .adm-notice-bar-right {
|
|
61
61
|
flex-shrink: 0;
|
|
62
62
|
margin-left: 12px;
|
|
@@ -72,3 +72,10 @@
|
|
|
72
72
|
.adm-notice-bar-close-icon {
|
|
73
73
|
font-size: var(--adm-font-size-10);
|
|
74
74
|
}
|
|
75
|
+
.adm-notice-bar-wrap {
|
|
76
|
+
height: auto;
|
|
77
|
+
align-items: flex-start;
|
|
78
|
+
padding-top: 8px;
|
|
79
|
+
padding-bottom: 8px;
|
|
80
|
+
line-height: 22px;
|
|
81
|
+
}
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { NativeProps } from '../../utils/native-props';
|
|
3
3
|
export declare type NoticeBarProps = {
|
|
4
|
-
/**
|
|
4
|
+
/** The type of the NoticeBar */
|
|
5
5
|
color?: 'default' | 'alert' | 'error' | 'info';
|
|
6
|
-
/**
|
|
6
|
+
/** TDelay to start scrolling, unit ms */
|
|
7
7
|
delay?: number;
|
|
8
|
-
/**
|
|
8
|
+
/** Scroll speed, unit px/s */
|
|
9
9
|
speed?: number;
|
|
10
|
-
/**
|
|
10
|
+
/** The content of the NoticeBar */
|
|
11
11
|
content: React.ReactNode;
|
|
12
|
-
/**
|
|
12
|
+
/** Whether it can be closed */
|
|
13
13
|
closeable?: boolean;
|
|
14
|
-
/**
|
|
14
|
+
/** Callback when closed */
|
|
15
15
|
onClose?: () => void;
|
|
16
|
-
/**
|
|
16
|
+
/** Additional operating area, displayed to the left of the close button */
|
|
17
17
|
extra?: React.ReactNode;
|
|
18
|
-
/**
|
|
18
|
+
/** Radio icon on the left */
|
|
19
19
|
icon?: React.ReactNode;
|
|
20
|
+
/** Whether to display multiple lines */
|
|
21
|
+
wrap?: boolean;
|
|
20
22
|
} & NativeProps<'--background-color' | '--border-color' | '--text-color' | '--font-size' | '--icon-font-size' | '--height'>;
|
|
21
23
|
export declare const NoticeBar: React.NamedExoticComponent<NoticeBarProps>;
|
|
@@ -20,6 +20,7 @@ const defaultProps = {
|
|
|
20
20
|
color: 'default',
|
|
21
21
|
delay: 2000,
|
|
22
22
|
speed: 50,
|
|
23
|
+
wrap: false,
|
|
23
24
|
icon: _react.default.createElement(_antdMobileIcons.SoundOutline, null)
|
|
24
25
|
};
|
|
25
26
|
const NoticeBar = (0, _react.memo)(p => {
|
|
@@ -31,7 +32,7 @@ const NoticeBar = (0, _react.memo)(p => {
|
|
|
31
32
|
const delayLockRef = (0, _react.useRef)(true);
|
|
32
33
|
const animatingRef = (0, _react.useRef)(false);
|
|
33
34
|
function start() {
|
|
34
|
-
if (delayLockRef.current) return;
|
|
35
|
+
if (delayLockRef.current || props.wrap) return;
|
|
35
36
|
const container = containerRef.current;
|
|
36
37
|
const text = textRef.current;
|
|
37
38
|
if (!container || !text) return;
|
|
@@ -70,7 +71,9 @@ const NoticeBar = (0, _react.memo)(p => {
|
|
|
70
71
|
});
|
|
71
72
|
if (!visible) return null;
|
|
72
73
|
return (0, _nativeProps.withNativeProps)(props, _react.default.createElement("div", {
|
|
73
|
-
className: (0, _classnames.default)(classPrefix, `${classPrefix}-${props.color}
|
|
74
|
+
className: (0, _classnames.default)(classPrefix, `${classPrefix}-${props.color}`, {
|
|
75
|
+
[`${classPrefix}-wrap`]: props.wrap
|
|
76
|
+
})
|
|
74
77
|
}, props.icon && _react.default.createElement("span", {
|
|
75
78
|
className: `${classPrefix}-left`
|
|
76
79
|
}, props.icon), _react.default.createElement("span", {
|
|
@@ -20,6 +20,8 @@ export declare type StepperProps = Pick<InputProps, 'onFocus' | 'onBlur'> & (Val
|
|
|
20
20
|
digits?: number;
|
|
21
21
|
disabled?: boolean;
|
|
22
22
|
inputReadOnly?: boolean;
|
|
23
|
+
parser?: (text: string) => number;
|
|
24
|
+
formatter?: (value?: number) => string;
|
|
23
25
|
} & NativeProps<'--height' | '--input-width' | '--input-font-size' | '--input-background-color' | '--border-radius' | '--border' | '--border-inner' | '--active-border' | '--button-font-size' | '--button-background-color' | '--button-width' | '--input-font-color' | '--button-text-color'>;
|
|
24
26
|
export declare const Stepper: FC<StepperProps>;
|
|
25
27
|
export {};
|
|
@@ -32,35 +32,45 @@ const Stepper = p => {
|
|
|
32
32
|
step,
|
|
33
33
|
max,
|
|
34
34
|
min,
|
|
35
|
-
inputReadOnly
|
|
35
|
+
inputReadOnly,
|
|
36
|
+
digits,
|
|
37
|
+
formatter,
|
|
38
|
+
parser
|
|
36
39
|
} = props;
|
|
37
40
|
const {
|
|
38
41
|
locale
|
|
39
42
|
} = (0, _configProvider.useConfig)();
|
|
43
|
+
// ========================== Parse / Format ==========================
|
|
44
|
+
const parseValue = text => {
|
|
45
|
+
if (text === '') return null;
|
|
46
|
+
return parser ? parser(text) : parseFloat(text);
|
|
47
|
+
};
|
|
48
|
+
const formatValue = value => {
|
|
49
|
+
if (value === null) return '';
|
|
50
|
+
if (formatter) {
|
|
51
|
+
return formatter(value);
|
|
52
|
+
} else if (digits !== undefined) {
|
|
53
|
+
return value.toFixed(digits);
|
|
54
|
+
} else {
|
|
55
|
+
return value.toString();
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
// ======================== Value & InputValue ========================
|
|
40
59
|
const [value, setValue] = (0, _usePropsValue.usePropsValue)(props);
|
|
41
|
-
const [inputValue, setInputValue] = (0, _react.useState)(() =>
|
|
60
|
+
const [inputValue, setInputValue] = (0, _react.useState)(() => formatValue(value));
|
|
61
|
+
// >>>>> Value
|
|
42
62
|
function setValueWithCheck(v) {
|
|
43
63
|
if (isNaN(v)) return;
|
|
44
64
|
let target = (0, _bound.bound)(v, props.min, props.max);
|
|
45
|
-
if (
|
|
46
|
-
target = parseFloat(target.toFixed(
|
|
65
|
+
if (digits !== undefined) {
|
|
66
|
+
target = parseFloat(target.toFixed(digits));
|
|
47
67
|
}
|
|
48
68
|
setValue(target);
|
|
49
69
|
}
|
|
50
|
-
|
|
51
|
-
(0, _react.useEffect)(() => {
|
|
52
|
-
if (!hasFocus) {
|
|
53
|
-
setInputValue(convertValueToText(value, props.digits));
|
|
54
|
-
}
|
|
55
|
-
}, [hasFocus]);
|
|
56
|
-
(0, _react.useEffect)(() => {
|
|
57
|
-
if (!hasFocus) {
|
|
58
|
-
setInputValue(convertValueToText(value, props.digits));
|
|
59
|
-
}
|
|
60
|
-
}, [value, props.digits]);
|
|
70
|
+
// >>>>> Input
|
|
61
71
|
const handleInputChange = v => {
|
|
62
72
|
setInputValue(v);
|
|
63
|
-
const value =
|
|
73
|
+
const value = parseValue(v);
|
|
64
74
|
if (value === null) {
|
|
65
75
|
if (props.allowEmpty) {
|
|
66
76
|
setValue(null);
|
|
@@ -71,6 +81,29 @@ const Stepper = p => {
|
|
|
71
81
|
setValueWithCheck(value);
|
|
72
82
|
}
|
|
73
83
|
};
|
|
84
|
+
// ============================== Focus ===============================
|
|
85
|
+
const [focused, setFocused] = (0, _react.useState)(false);
|
|
86
|
+
const inputRef = _react.default.useRef(null);
|
|
87
|
+
function triggerFocus(nextFocus) {
|
|
88
|
+
setFocused(nextFocus);
|
|
89
|
+
// We will convert value to original text when focus
|
|
90
|
+
if (nextFocus) {
|
|
91
|
+
setInputValue(typeof value === 'number' ? String(value) : '');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
(0, _react.useEffect)(() => {
|
|
95
|
+
var _a, _b, _c;
|
|
96
|
+
if (focused) {
|
|
97
|
+
(_c = (_b = (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.nativeElement) === null || _b === void 0 ? void 0 : _b.select) === null || _c === void 0 ? void 0 : _c.call(_b);
|
|
98
|
+
}
|
|
99
|
+
}, [focused]);
|
|
100
|
+
// Focus change to format value
|
|
101
|
+
(0, _react.useEffect)(() => {
|
|
102
|
+
if (!focused) {
|
|
103
|
+
setInputValue(formatValue(value));
|
|
104
|
+
}
|
|
105
|
+
}, [focused, value, digits]);
|
|
106
|
+
// ============================ Operations ============================
|
|
74
107
|
const handleMinus = () => {
|
|
75
108
|
setValueWithCheck((0, _big.default)(value !== null && value !== void 0 ? value : 0).minus(step).toNumber());
|
|
76
109
|
};
|
|
@@ -93,9 +126,10 @@ const Stepper = p => {
|
|
|
93
126
|
}
|
|
94
127
|
return false;
|
|
95
128
|
};
|
|
129
|
+
// ============================== Render ==============================
|
|
96
130
|
return (0, _nativeProps.withNativeProps)(props, _react.default.createElement("div", {
|
|
97
131
|
className: (0, _classnames.default)(classPrefix, {
|
|
98
|
-
[`${classPrefix}-active`]:
|
|
132
|
+
[`${classPrefix}-active`]: focused
|
|
99
133
|
})
|
|
100
134
|
}, _react.default.createElement(_button.default, {
|
|
101
135
|
className: `${classPrefix}-minus`,
|
|
@@ -108,10 +142,11 @@ const Stepper = p => {
|
|
|
108
142
|
}, _react.default.createElement(_antdMobileIcons.MinusOutline, null)), _react.default.createElement("div", {
|
|
109
143
|
className: `${classPrefix}-middle`
|
|
110
144
|
}, _react.default.createElement(_input.default, {
|
|
145
|
+
ref: inputRef,
|
|
111
146
|
className: `${classPrefix}-input`,
|
|
112
147
|
onFocus: e => {
|
|
113
148
|
var _a;
|
|
114
|
-
|
|
149
|
+
triggerFocus(true);
|
|
115
150
|
(_a = props.onFocus) === null || _a === void 0 ? void 0 : _a.call(props, e);
|
|
116
151
|
},
|
|
117
152
|
value: inputValue,
|
|
@@ -121,7 +156,7 @@ const Stepper = p => {
|
|
|
121
156
|
disabled: disabled,
|
|
122
157
|
onBlur: e => {
|
|
123
158
|
var _a;
|
|
124
|
-
|
|
159
|
+
triggerFocus(false);
|
|
125
160
|
(_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, e);
|
|
126
161
|
},
|
|
127
162
|
readOnly: inputReadOnly,
|
|
@@ -140,16 +175,4 @@ const Stepper = p => {
|
|
|
140
175
|
"aria-label": locale.Stepper.increase
|
|
141
176
|
}, _react.default.createElement(_antdMobileIcons.AddOutline, null))));
|
|
142
177
|
};
|
|
143
|
-
exports.Stepper = Stepper;
|
|
144
|
-
function convertValueToText(value, digits) {
|
|
145
|
-
if (value === null) return '';
|
|
146
|
-
if (digits !== undefined) {
|
|
147
|
-
return value.toFixed(digits);
|
|
148
|
-
} else {
|
|
149
|
-
return value.toString();
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
function convertTextToValue(text) {
|
|
153
|
-
if (text === '') return null;
|
|
154
|
-
return parseFloat(text);
|
|
155
|
-
}
|
|
178
|
+
exports.Stepper = Stepper;
|
|
@@ -10,7 +10,7 @@ export declare type WaterMarkProps = {
|
|
|
10
10
|
image?: string;
|
|
11
11
|
imageWidth?: number;
|
|
12
12
|
imageHeight?: number;
|
|
13
|
-
content?: string;
|
|
13
|
+
content?: string | string[];
|
|
14
14
|
fontColor?: string;
|
|
15
15
|
fontStyle?: 'none' | 'normal' | 'italic' | 'oblique';
|
|
16
16
|
fontFamily?: string;
|
|
@@ -67,7 +67,11 @@ const WaterMark = p => {
|
|
|
67
67
|
const markSize = Number(fontSize) * ratio;
|
|
68
68
|
ctx.font = `${fontStyle} normal ${fontWeight} ${markSize}px/${markHeight}px ${fontFamily}`;
|
|
69
69
|
ctx.fillStyle = fontColor;
|
|
70
|
-
|
|
70
|
+
if (Array.isArray(content)) {
|
|
71
|
+
content.forEach((item, index) => ctx.fillText(item, 0, index * markSize));
|
|
72
|
+
} else {
|
|
73
|
+
ctx.fillText(content, 0, 0);
|
|
74
|
+
}
|
|
71
75
|
ctx.restore();
|
|
72
76
|
setBase64Url(canvas.toDataURL());
|
|
73
77
|
}
|
|
@@ -122,11 +122,17 @@ export const Calendar = forwardRef((p, ref) => {
|
|
|
122
122
|
let isSelect = false;
|
|
123
123
|
let isBegin = false;
|
|
124
124
|
let isEnd = false;
|
|
125
|
+
let isSelectRowBegin = false;
|
|
126
|
+
let isSelectRowEnd = false;
|
|
125
127
|
if (dateRange) {
|
|
126
128
|
const [begin, end] = dateRange;
|
|
127
129
|
isBegin = d.isSame(begin, 'day');
|
|
128
130
|
isEnd = d.isSame(end, 'day');
|
|
129
131
|
isSelect = isBegin || isEnd || d.isAfter(begin, 'day') && d.isBefore(end, 'day');
|
|
132
|
+
if (isSelect) {
|
|
133
|
+
isSelectRowBegin = (cells.length % 7 === 0 || d.isSame(d.startOf('month'), 'day')) && !isBegin;
|
|
134
|
+
isSelectRowEnd = (cells.length % 7 === 6 || d.isSame(d.endOf('month'), 'day')) && !isEnd;
|
|
135
|
+
}
|
|
130
136
|
}
|
|
131
137
|
const inThisMonth = d.month() === current.month();
|
|
132
138
|
const disabled = props.shouldDisableDate ? props.shouldDisableDate(d.toDate()) : maxDay && d.isAfter(maxDay, 'day') || minDay && d.isBefore(minDay, 'day');
|
|
@@ -136,7 +142,9 @@ export const Calendar = forwardRef((p, ref) => {
|
|
|
136
142
|
[`${classPrefix}-cell-today`]: d.isSame(today, 'day'),
|
|
137
143
|
[`${classPrefix}-cell-selected`]: isSelect,
|
|
138
144
|
[`${classPrefix}-cell-selected-begin`]: isBegin,
|
|
139
|
-
[`${classPrefix}-cell-selected-end`]: isEnd
|
|
145
|
+
[`${classPrefix}-cell-selected-end`]: isEnd,
|
|
146
|
+
[`${classPrefix}-cell-selected-row-begin`]: isSelectRowBegin,
|
|
147
|
+
[`${classPrefix}-cell-selected-row-end`]: isSelectRowEnd
|
|
140
148
|
}),
|
|
141
149
|
onClick: () => {
|
|
142
150
|
if (!props.selectionMode) return;
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import React, { FC } from 'react';
|
|
2
2
|
import { NativeProps } from '../../utils/native-props';
|
|
3
|
+
declare type Offset = {
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
};
|
|
3
7
|
export declare type FloatingBubbleProps = {
|
|
4
8
|
onClick?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;
|
|
5
9
|
axis?: 'x' | 'y' | 'xy' | 'lock';
|
|
6
10
|
magnetic?: 'x' | 'y';
|
|
7
11
|
children?: React.ReactNode;
|
|
12
|
+
offset?: Offset;
|
|
13
|
+
defaultOffset?: Offset;
|
|
14
|
+
onOffsetChange?: (offset: Offset) => void;
|
|
8
15
|
} & NativeProps<'--initial-position-left' | '--initial-position-right' | '--initial-position-top' | '--initial-position-bottom' | '--z-index' | '--edge-distance' | '--size' | '--border-radius' | '--background'>;
|
|
9
16
|
export declare const FloatingBubble: FC<FloatingBubbleProps>;
|
|
17
|
+
export {};
|
|
@@ -1,16 +1,28 @@
|
|
|
1
|
-
import React, { useRef } from 'react';
|
|
1
|
+
import React, { useRef, useEffect, useState } from 'react';
|
|
2
2
|
import { useSpring, animated, to } from '@react-spring/web';
|
|
3
3
|
import { useDrag } from '@use-gesture/react';
|
|
4
4
|
import { mergeProps } from '../../utils/with-default-props';
|
|
5
5
|
import { withNativeProps } from '../../utils/native-props';
|
|
6
6
|
const classPrefix = `adm-floating-bubble`;
|
|
7
7
|
const defaultProps = {
|
|
8
|
-
axis: 'y'
|
|
8
|
+
axis: 'y',
|
|
9
|
+
defaultOffset: {
|
|
10
|
+
x: 0,
|
|
11
|
+
y: 0
|
|
12
|
+
}
|
|
9
13
|
};
|
|
10
14
|
export const FloatingBubble = p => {
|
|
11
15
|
const props = mergeProps(defaultProps, p);
|
|
12
16
|
const boundaryRef = useRef(null);
|
|
13
17
|
const buttonRef = useRef(null);
|
|
18
|
+
const [innerValue, setInnerValue] = useState(props.offset === undefined ? props.defaultOffset : props.offset);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
if (props.offset === undefined) return;
|
|
21
|
+
api.start({
|
|
22
|
+
x: props.offset.x,
|
|
23
|
+
y: props.offset.y
|
|
24
|
+
});
|
|
25
|
+
}, [props.offset]);
|
|
14
26
|
/**
|
|
15
27
|
* memoize the `to` function
|
|
16
28
|
* inside a component that renders frequently
|
|
@@ -21,11 +33,12 @@ export const FloatingBubble = p => {
|
|
|
21
33
|
y,
|
|
22
34
|
opacity
|
|
23
35
|
}, api] = useSpring(() => ({
|
|
24
|
-
x:
|
|
25
|
-
y:
|
|
36
|
+
x: innerValue.x,
|
|
37
|
+
y: innerValue.y,
|
|
26
38
|
opacity: 1
|
|
27
39
|
}));
|
|
28
40
|
const bind = useDrag(state => {
|
|
41
|
+
var _a;
|
|
29
42
|
let nextX = state.offset[0];
|
|
30
43
|
let nextY = state.offset[1];
|
|
31
44
|
if (state.last && props.magnetic) {
|
|
@@ -54,10 +67,17 @@ export const FloatingBubble = p => {
|
|
|
54
67
|
}
|
|
55
68
|
}
|
|
56
69
|
}
|
|
57
|
-
|
|
70
|
+
const nextOffest = {
|
|
58
71
|
x: nextX,
|
|
59
72
|
y: nextY
|
|
60
|
-
}
|
|
73
|
+
};
|
|
74
|
+
if (props.offset === undefined) {
|
|
75
|
+
// Uncontrolled mode
|
|
76
|
+
api.start(nextOffest);
|
|
77
|
+
} else {
|
|
78
|
+
setInnerValue(nextOffest);
|
|
79
|
+
}
|
|
80
|
+
(_a = props.onOffsetChange) === null || _a === void 0 ? void 0 : _a.call(props, nextOffest);
|
|
61
81
|
// active status
|
|
62
82
|
api.start({
|
|
63
83
|
opacity: state.active ? 0.8 : 1
|
|
@@ -3,7 +3,7 @@ import { NativeProps } from '../../utils/native-props';
|
|
|
3
3
|
import { ListProps } from '../list';
|
|
4
4
|
import type { FormProps as RcFormProps, FormInstance as RCFormInstance } from 'rc-field-form';
|
|
5
5
|
import { FormContextType } from './context';
|
|
6
|
-
export declare type FormInstance = Pick<RCFormInstance, 'getFieldValue' | 'getFieldsValue' | 'getFieldError' | 'getFieldsError' | 'isFieldTouched' | 'isFieldsTouched' | 'resetFields' | 'setFields' | 'setFieldsValue' | 'submit' | 'validateFields'>;
|
|
6
|
+
export declare type FormInstance = Pick<RCFormInstance, 'getFieldValue' | 'getFieldsValue' | 'getFieldError' | 'getFieldsError' | 'isFieldTouched' | 'isFieldsTouched' | 'resetFields' | 'setFields' | 'setFieldValue' | 'setFieldsValue' | 'submit' | 'validateFields'>;
|
|
7
7
|
export declare type FormProps = Pick<RcFormProps, 'form' | 'initialValues' | 'name' | 'preserve' | 'validateMessages' | 'validateTrigger' | 'onFieldsChange' | 'onFinish' | 'onFinishFailed' | 'onValuesChange' | 'children'> & NativeProps<'--border-inner' | '--border-top' | '--border-bottom' | '--prefix-width'> & Partial<FormContextType> & {
|
|
8
8
|
footer?: ReactNode;
|
|
9
9
|
mode?: ListProps['mode'];
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
.adm-image-uploader {
|
|
2
2
|
--cell-size: 80px;
|
|
3
|
+
--gap: 12px;
|
|
4
|
+
---gap: var(--gap);
|
|
5
|
+
---gap-horizontal: var(--gap-horizontal, var(--gap));
|
|
6
|
+
---gap-vertical: var(--gap-vertical, var(--gap));
|
|
3
7
|
}
|
|
8
|
+
.adm-image-uploader-grid,
|
|
4
9
|
.adm-image-uploader-space {
|
|
5
|
-
--gap:
|
|
10
|
+
--gap: var(---gap);
|
|
11
|
+
--gap-horizontal: var(---gap-horizontal);
|
|
12
|
+
--gap-vertical: var(---gap-vertical);
|
|
6
13
|
}
|
|
7
14
|
.adm-image-uploader-cell {
|
|
8
15
|
position: relative;
|
|
@@ -82,3 +89,10 @@
|
|
|
82
89
|
height: 100%;
|
|
83
90
|
border-radius: 4px;
|
|
84
91
|
}
|
|
92
|
+
.adm-image-uploader .adm-image-uploader-gap-measure {
|
|
93
|
+
position: absolute;
|
|
94
|
+
left: 0;
|
|
95
|
+
top: 0;
|
|
96
|
+
height: var(--gap-horizontal);
|
|
97
|
+
width: 0;
|
|
98
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { FC, InputHTMLAttributes } from 'react';
|
|
2
2
|
import { NativeProps } from '../../utils/native-props';
|
|
3
3
|
import type { ImageProps } from '../image';
|
|
4
|
+
import { GridProps } from '../grid';
|
|
4
5
|
export declare type TaskStatus = 'pending' | 'fail' | 'success';
|
|
5
6
|
export interface ImageUploadItem {
|
|
6
7
|
key?: string | number;
|
|
@@ -18,6 +19,7 @@ export declare type UploadTask = Pick<Task, 'id' | 'status'>;
|
|
|
18
19
|
export declare type ImageUploaderProps = {
|
|
19
20
|
defaultValue?: ImageUploadItem[];
|
|
20
21
|
value?: ImageUploadItem[];
|
|
22
|
+
columns?: GridProps['columns'];
|
|
21
23
|
onChange?: (items: ImageUploadItem[]) => void;
|
|
22
24
|
onUploadQueueChange?: (tasks: UploadTask[]) => void;
|
|
23
25
|
accept?: string;
|
|
@@ -27,6 +29,7 @@ export declare type ImageUploaderProps = {
|
|
|
27
29
|
disableUpload?: boolean;
|
|
28
30
|
showUpload?: boolean;
|
|
29
31
|
deletable?: boolean;
|
|
32
|
+
deleteIcon?: React.ReactNode;
|
|
30
33
|
capture?: InputHTMLAttributes<unknown>['capture'];
|
|
31
34
|
onPreview?: (index: number, item: ImageUploadItem) => void;
|
|
32
35
|
beforeUpload?: (file: File, files: File[]) => Promise<File | null> | File | null;
|
|
@@ -37,6 +40,6 @@ export declare type ImageUploaderProps = {
|
|
|
37
40
|
imageFit?: ImageProps['fit'];
|
|
38
41
|
children?: React.ReactNode;
|
|
39
42
|
renderItem?: (originNode: React.ReactElement, file: ImageUploadItem, fileList: ImageUploadItem[]) => React.ReactNode;
|
|
40
|
-
} & NativeProps<'--cell-size'>;
|
|
43
|
+
} & NativeProps<'--cell-size' | '--gap' | '--gap-vertical' | '--gap-horizontal'>;
|
|
41
44
|
export declare const ImageUploader: FC<ImageUploaderProps>;
|
|
42
45
|
export {};
|