antd-mobile 5.4.0 → 5.6.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.
Files changed (227) hide show
  1. package/2x/cjs/components/action-sheet/action-sheet.d.ts +5 -5
  2. package/2x/cjs/components/action-sheet/action-sheet.js +6 -46
  3. package/2x/cjs/components/action-sheet/index.d.ts +1 -1
  4. package/2x/cjs/components/badge/badge.js +1 -1
  5. package/2x/cjs/components/cascader-view/cascader-view.d.ts +1 -0
  6. package/2x/cjs/components/cascader-view/cascader-view.js +7 -0
  7. package/2x/cjs/components/cascader-view/use-cascader-value-extend.js +23 -0
  8. package/2x/cjs/components/check-list/check-list-item.js +1 -1
  9. package/2x/cjs/components/checkbox/checkbox.js +4 -8
  10. package/2x/cjs/components/checkbox/native-input.d.ts +10 -0
  11. package/2x/cjs/components/checkbox/native-input.js +42 -0
  12. package/2x/cjs/components/dialog/index.d.ts +1 -1
  13. package/2x/cjs/components/dialog/show.d.ts +2 -4
  14. package/2x/cjs/components/dialog/show.js +9 -47
  15. package/2x/cjs/components/dot-loading/dot-loading.js +1 -2
  16. package/2x/cjs/components/error-block/error-block.js +4 -2
  17. package/2x/cjs/components/floating-bubble/floating-bubble.css +2 -1
  18. package/2x/cjs/components/floating-bubble/floating-bubble.d.ts +1 -1
  19. package/2x/cjs/components/floating-bubble/floating-bubble.js +14 -5
  20. package/2x/cjs/components/form/form-array.d.ts +19 -0
  21. package/2x/cjs/components/form/form-array.js +52 -0
  22. package/2x/cjs/components/form/form-item.css +6 -1
  23. package/2x/cjs/components/form/form-item.js +24 -8
  24. package/2x/cjs/components/form/form.css +5 -0
  25. package/2x/cjs/components/form/form.js +16 -5
  26. package/2x/cjs/components/form/index.css +11 -1
  27. package/2x/cjs/components/form/index.d.ts +2 -0
  28. package/2x/cjs/components/form/index.js +3 -0
  29. package/2x/cjs/components/image-uploader/image-uploader.d.ts +1 -1
  30. package/2x/cjs/components/image-uploader/image-uploader.js +17 -1
  31. package/2x/cjs/components/image-viewer/index.d.ts +1 -1
  32. package/2x/cjs/components/image-viewer/methods.d.ts +3 -4
  33. package/2x/cjs/components/image-viewer/methods.js +41 -56
  34. package/2x/cjs/components/modal/index.d.ts +1 -1
  35. package/2x/cjs/components/modal/show.d.ts +2 -4
  36. package/2x/cjs/components/modal/show.js +9 -47
  37. package/2x/cjs/components/popover/index.d.ts +7 -2
  38. package/2x/cjs/components/popover/normalize-placement.d.ts +2 -0
  39. package/2x/cjs/components/popover/normalize-placement.js +22 -0
  40. package/2x/cjs/components/popover/popover.css +0 -104
  41. package/2x/cjs/components/popover/popover.d.ts +11 -5
  42. package/2x/cjs/components/popover/popover.js +127 -22
  43. package/2x/cjs/components/popover/temp-floating-ui.min.d.ts +1 -0
  44. package/2x/cjs/components/popover/temp-floating-ui.min.js +1 -0
  45. package/2x/cjs/components/popover/wrapper.d.ts +7 -0
  46. package/2x/cjs/components/popover/wrapper.js +41 -0
  47. package/2x/cjs/components/pull-to-refresh/pull-to-refresh.js +24 -9
  48. package/2x/cjs/components/radio/radio.js +4 -8
  49. package/2x/cjs/components/search-bar/search-bar.d.ts +1 -1
  50. package/2x/cjs/components/tab-bar/tab-bar.d.ts +1 -1
  51. package/2x/cjs/components/tab-bar/tab-bar.js +1 -1
  52. package/2x/cjs/components/tree-select/tree-select.js +2 -2
  53. package/2x/cjs/utils/render-imperatively.d.ts +10 -0
  54. package/2x/cjs/utils/render-imperatively.js +58 -0
  55. package/2x/cjs/utils/use-props-value.d.ts +2 -1
  56. package/2x/cjs/utils/use-props-value.js +4 -2
  57. package/2x/es/components/action-sheet/action-sheet.d.ts +5 -5
  58. package/2x/es/components/action-sheet/action-sheet.js +5 -41
  59. package/2x/es/components/action-sheet/index.d.ts +1 -1
  60. package/2x/es/components/badge/badge.js +1 -1
  61. package/2x/es/components/cascader-view/cascader-view.d.ts +1 -0
  62. package/2x/es/components/cascader-view/cascader-view.js +7 -0
  63. package/2x/es/components/cascader-view/use-cascader-value-extend.js +23 -0
  64. package/2x/es/components/check-list/check-list-item.js +1 -1
  65. package/2x/es/components/checkbox/checkbox.js +3 -8
  66. package/2x/es/components/checkbox/native-input.d.ts +10 -0
  67. package/2x/es/components/checkbox/native-input.js +28 -0
  68. package/2x/es/components/dialog/index.d.ts +1 -1
  69. package/2x/es/components/dialog/show.d.ts +2 -4
  70. package/2x/es/components/dialog/show.js +8 -44
  71. package/2x/es/components/dot-loading/dot-loading.js +1 -2
  72. package/2x/es/components/error-block/error-block.js +4 -2
  73. package/2x/es/components/floating-bubble/floating-bubble.css +2 -1
  74. package/2x/es/components/floating-bubble/floating-bubble.d.ts +1 -1
  75. package/2x/es/components/floating-bubble/floating-bubble.js +14 -5
  76. package/2x/es/components/form/form-array.d.ts +19 -0
  77. package/2x/es/components/form/form-array.js +38 -0
  78. package/2x/es/components/form/form-item.css +6 -1
  79. package/2x/es/components/form/form-item.js +22 -8
  80. package/2x/es/components/form/form.css +5 -0
  81. package/2x/es/components/form/form.js +15 -5
  82. package/2x/es/components/form/index.css +11 -1
  83. package/2x/es/components/form/index.d.ts +2 -0
  84. package/2x/es/components/form/index.js +2 -0
  85. package/2x/es/components/image-uploader/image-uploader.d.ts +1 -1
  86. package/2x/es/components/image-uploader/image-uploader.js +17 -1
  87. package/2x/es/components/image-viewer/index.d.ts +1 -1
  88. package/2x/es/components/image-viewer/methods.d.ts +3 -4
  89. package/2x/es/components/image-viewer/methods.js +38 -57
  90. package/2x/es/components/modal/index.d.ts +1 -1
  91. package/2x/es/components/modal/show.d.ts +2 -4
  92. package/2x/es/components/modal/show.js +8 -44
  93. package/2x/es/components/popover/index.d.ts +7 -2
  94. package/2x/es/components/popover/normalize-placement.d.ts +2 -0
  95. package/2x/es/components/popover/normalize-placement.js +15 -0
  96. package/2x/es/components/popover/popover.css +0 -104
  97. package/2x/es/components/popover/popover.d.ts +11 -5
  98. package/2x/es/components/popover/popover.js +119 -22
  99. package/2x/es/components/popover/temp-floating-ui.min.d.ts +1 -0
  100. package/2x/es/components/popover/temp-floating-ui.min.js +1 -0
  101. package/2x/es/components/popover/wrapper.d.ts +7 -0
  102. package/2x/es/components/popover/wrapper.js +28 -0
  103. package/2x/es/components/pull-to-refresh/pull-to-refresh.js +24 -9
  104. package/2x/es/components/radio/radio.js +3 -8
  105. package/2x/es/components/search-bar/search-bar.d.ts +1 -1
  106. package/2x/es/components/tab-bar/tab-bar.d.ts +1 -1
  107. package/2x/es/components/tab-bar/tab-bar.js +1 -1
  108. package/2x/es/components/tree-select/tree-select.js +2 -2
  109. package/2x/es/utils/render-imperatively.d.ts +10 -0
  110. package/2x/es/utils/render-imperatively.js +45 -0
  111. package/2x/es/utils/use-props-value.d.ts +2 -1
  112. package/2x/es/utils/use-props-value.js +4 -2
  113. package/2x/package.json +3 -4
  114. package/cjs/components/action-sheet/action-sheet.d.ts +5 -5
  115. package/cjs/components/action-sheet/action-sheet.js +6 -46
  116. package/cjs/components/action-sheet/index.d.ts +1 -1
  117. package/cjs/components/badge/badge.js +1 -1
  118. package/cjs/components/cascader-view/cascader-view.d.ts +1 -0
  119. package/cjs/components/cascader-view/cascader-view.js +7 -0
  120. package/cjs/components/cascader-view/use-cascader-value-extend.js +23 -0
  121. package/cjs/components/check-list/check-list-item.js +1 -1
  122. package/cjs/components/checkbox/checkbox.js +4 -8
  123. package/cjs/components/checkbox/native-input.d.ts +10 -0
  124. package/cjs/components/checkbox/native-input.js +42 -0
  125. package/cjs/components/dialog/index.d.ts +1 -1
  126. package/cjs/components/dialog/show.d.ts +2 -4
  127. package/cjs/components/dialog/show.js +9 -47
  128. package/cjs/components/dot-loading/dot-loading.js +1 -2
  129. package/cjs/components/error-block/error-block.js +4 -2
  130. package/cjs/components/floating-bubble/floating-bubble.css +2 -1
  131. package/cjs/components/floating-bubble/floating-bubble.d.ts +1 -1
  132. package/cjs/components/floating-bubble/floating-bubble.js +14 -5
  133. package/cjs/components/form/form-array.d.ts +19 -0
  134. package/cjs/components/form/form-array.js +52 -0
  135. package/cjs/components/form/form-item.css +5 -1
  136. package/cjs/components/form/form-item.js +24 -8
  137. package/cjs/components/form/form.css +4 -0
  138. package/cjs/components/form/form.js +16 -5
  139. package/cjs/components/form/index.css +9 -1
  140. package/cjs/components/form/index.d.ts +2 -0
  141. package/cjs/components/form/index.js +3 -0
  142. package/cjs/components/image-uploader/image-uploader.d.ts +1 -1
  143. package/cjs/components/image-uploader/image-uploader.js +17 -1
  144. package/cjs/components/image-viewer/index.d.ts +1 -1
  145. package/cjs/components/image-viewer/methods.d.ts +3 -4
  146. package/cjs/components/image-viewer/methods.js +41 -56
  147. package/cjs/components/modal/index.d.ts +1 -1
  148. package/cjs/components/modal/show.d.ts +2 -4
  149. package/cjs/components/modal/show.js +9 -47
  150. package/cjs/components/popover/index.d.ts +7 -2
  151. package/cjs/components/popover/normalize-placement.d.ts +2 -0
  152. package/cjs/components/popover/normalize-placement.js +22 -0
  153. package/cjs/components/popover/popover.css +0 -84
  154. package/cjs/components/popover/popover.d.ts +11 -5
  155. package/cjs/components/popover/popover.js +127 -22
  156. package/cjs/components/popover/temp-floating-ui.min.d.ts +1 -0
  157. package/cjs/components/popover/temp-floating-ui.min.js +1 -0
  158. package/cjs/components/popover/wrapper.d.ts +7 -0
  159. package/cjs/components/popover/wrapper.js +41 -0
  160. package/cjs/components/pull-to-refresh/pull-to-refresh.js +24 -9
  161. package/cjs/components/radio/radio.js +4 -8
  162. package/cjs/components/search-bar/search-bar.d.ts +1 -1
  163. package/cjs/components/tab-bar/tab-bar.d.ts +1 -1
  164. package/cjs/components/tab-bar/tab-bar.js +1 -1
  165. package/cjs/components/tree-select/tree-select.js +2 -2
  166. package/cjs/utils/render-imperatively.d.ts +10 -0
  167. package/cjs/utils/render-imperatively.js +58 -0
  168. package/cjs/utils/use-props-value.d.ts +2 -1
  169. package/cjs/utils/use-props-value.js +4 -2
  170. package/es/components/action-sheet/action-sheet.d.ts +5 -5
  171. package/es/components/action-sheet/action-sheet.js +5 -41
  172. package/es/components/action-sheet/index.d.ts +1 -1
  173. package/es/components/badge/badge.js +1 -1
  174. package/es/components/cascader-view/cascader-view.d.ts +1 -0
  175. package/es/components/cascader-view/cascader-view.js +7 -0
  176. package/es/components/cascader-view/use-cascader-value-extend.js +23 -0
  177. package/es/components/check-list/check-list-item.js +1 -1
  178. package/es/components/checkbox/checkbox.js +3 -8
  179. package/es/components/checkbox/native-input.d.ts +10 -0
  180. package/es/components/checkbox/native-input.js +28 -0
  181. package/es/components/dialog/index.d.ts +1 -1
  182. package/es/components/dialog/show.d.ts +2 -4
  183. package/es/components/dialog/show.js +8 -44
  184. package/es/components/dot-loading/dot-loading.js +1 -2
  185. package/es/components/error-block/error-block.js +4 -2
  186. package/es/components/floating-bubble/floating-bubble.css +2 -1
  187. package/es/components/floating-bubble/floating-bubble.d.ts +1 -1
  188. package/es/components/floating-bubble/floating-bubble.js +14 -5
  189. package/es/components/form/form-array.d.ts +19 -0
  190. package/es/components/form/form-array.js +38 -0
  191. package/es/components/form/form-item.css +5 -1
  192. package/es/components/form/form-item.js +22 -8
  193. package/es/components/form/form.css +4 -0
  194. package/es/components/form/form.js +15 -5
  195. package/es/components/form/index.css +9 -1
  196. package/es/components/form/index.d.ts +2 -0
  197. package/es/components/form/index.js +2 -0
  198. package/es/components/image-uploader/image-uploader.d.ts +1 -1
  199. package/es/components/image-uploader/image-uploader.js +17 -1
  200. package/es/components/image-viewer/index.d.ts +1 -1
  201. package/es/components/image-viewer/methods.d.ts +3 -4
  202. package/es/components/image-viewer/methods.js +38 -57
  203. package/es/components/modal/index.d.ts +1 -1
  204. package/es/components/modal/show.d.ts +2 -4
  205. package/es/components/modal/show.js +8 -44
  206. package/es/components/popover/index.d.ts +7 -2
  207. package/es/components/popover/normalize-placement.d.ts +2 -0
  208. package/es/components/popover/normalize-placement.js +15 -0
  209. package/es/components/popover/popover.css +0 -84
  210. package/es/components/popover/popover.d.ts +11 -5
  211. package/es/components/popover/popover.js +119 -22
  212. package/es/components/popover/temp-floating-ui.min.d.ts +1 -0
  213. package/es/components/popover/temp-floating-ui.min.js +1 -0
  214. package/es/components/popover/wrapper.d.ts +7 -0
  215. package/es/components/popover/wrapper.js +28 -0
  216. package/es/components/pull-to-refresh/pull-to-refresh.js +24 -9
  217. package/es/components/radio/radio.js +3 -8
  218. package/es/components/search-bar/search-bar.d.ts +1 -1
  219. package/es/components/tab-bar/tab-bar.d.ts +1 -1
  220. package/es/components/tab-bar/tab-bar.js +1 -1
  221. package/es/components/tree-select/tree-select.js +2 -2
  222. package/es/utils/render-imperatively.d.ts +10 -0
  223. package/es/utils/render-imperatively.js +45 -0
  224. package/es/utils/use-props-value.d.ts +2 -1
  225. package/es/utils/use-props-value.js +4 -2
  226. package/package.json +3 -4
  227. package/umd/antd-mobile.js +1 -1
@@ -8,6 +8,7 @@ import { devWarning } from '../../utils/dev-log';
8
8
  import { CheckIcon } from './check-icon';
9
9
  import { IndeterminateIcon } from './indeterminate-icon';
10
10
  import { isDev } from '../../utils/is-dev';
11
+ import { NativeInput } from './native-input';
11
12
  const classPrefix = `adm-checkbox`;
12
13
  const defaultProps = {
13
14
  defaultChecked: false,
@@ -73,16 +74,10 @@ export const Checkbox = p => {
73
74
  [`${classPrefix}-disabled`]: disabled,
74
75
  [`${classPrefix}-block`]: props.block
75
76
  })
76
- }, React.createElement("input", {
77
+ }, React.createElement(NativeInput, {
77
78
  type: 'checkbox',
78
79
  checked: checked,
79
- onChange: e => {
80
- setChecked(e.target.checked);
81
- },
82
- onClick: e => {
83
- e.stopPropagation();
84
- e.nativeEvent.stopImmediatePropagation();
85
- },
80
+ onChange: setChecked,
86
81
  disabled: disabled,
87
82
  id: props.id
88
83
  }), renderIcon(), props.children && React.createElement("div", {
@@ -0,0 +1,10 @@
1
+ import { FC } from 'react';
2
+ interface Props {
3
+ type: 'checkbox' | 'radio';
4
+ checked: boolean;
5
+ onChange: (checked: boolean) => void;
6
+ disabled?: boolean;
7
+ id?: string;
8
+ }
9
+ export declare const NativeInput: FC<Props>;
10
+ export {};
@@ -0,0 +1,28 @@
1
+ import React, { useEffect, useRef } from 'react';
2
+ export const NativeInput = props => {
3
+ const inputRef = useRef(null);
4
+ useEffect(() => {
5
+ if (props.disabled) return;
6
+ if (!inputRef.current) return;
7
+ const input = inputRef.current;
8
+
9
+ function handleClick(e) {
10
+ e.stopPropagation();
11
+ e.stopImmediatePropagation();
12
+ props.onChange(input.checked);
13
+ }
14
+
15
+ input.addEventListener('click', handleClick);
16
+ return () => {
17
+ input.removeEventListener('click', handleClick);
18
+ };
19
+ }, [props.disabled, props.onChange]);
20
+ return React.createElement("input", {
21
+ ref: inputRef,
22
+ type: 'checkbox',
23
+ checked: props.checked,
24
+ onChange: () => {},
25
+ disabled: props.disabled,
26
+ id: props.id
27
+ });
28
+ };
@@ -6,7 +6,7 @@ import { confirm } from './confirm';
6
6
  import { clear } from './clear';
7
7
  export type { DialogProps } from './dialog';
8
8
  export type { Action } from './dialog-action-button';
9
- export type { DialogShowProps, DialogShowRef } from './show';
9
+ export type { DialogShowProps, DialogShowHandler } from './show';
10
10
  export type { DialogAlertProps } from './alert';
11
11
  export type { DialogConfirmProps } from './confirm';
12
12
  declare const _default: import("react").FC<import("./dialog").DialogProps> & {
@@ -1,9 +1,7 @@
1
1
  import { DialogProps } from './dialog';
2
2
  export declare type DialogShowProps = Omit<DialogProps, 'visible'>;
3
- export declare type DialogShowRef = {
3
+ export declare type DialogShowHandler = {
4
4
  close: () => void;
5
5
  };
6
6
  export declare const closeFnSet: Set<() => void>;
7
- export declare function show(props: DialogShowProps): {
8
- close: () => void;
9
- };
7
+ export declare function show(props: DialogShowProps): DialogShowHandler;
@@ -1,52 +1,16 @@
1
- import React, { createRef, forwardRef, useEffect, useImperativeHandle, useState } from 'react';
2
- import { renderToBody } from '../../utils/render-to-body';
1
+ import React from 'react';
3
2
  import { Dialog } from './dialog';
3
+ import { renderImperatively } from '../../utils/render-imperatively';
4
4
  export const closeFnSet = new Set();
5
5
  export function show(props) {
6
- const Wrapper = forwardRef((_, ref) => {
7
- const [visible, setVisible] = useState(false);
8
- useEffect(() => {
9
- setVisible(true);
10
- }, []);
11
-
12
- function handleClose() {
13
- var _a;
14
-
15
- (_a = props.onClose) === null || _a === void 0 ? void 0 : _a.call(props);
16
- setVisible(false);
17
- }
18
-
19
- useImperativeHandle(ref, () => ({
20
- close: handleClose
21
- }));
22
-
23
- function handleAfterClose() {
6
+ const handler = renderImperatively(React.createElement(Dialog, Object.assign({}, props, {
7
+ afterClose: () => {
24
8
  var _a;
25
9
 
10
+ closeFnSet.delete(handler.close);
26
11
  (_a = props.afterClose) === null || _a === void 0 ? void 0 : _a.call(props);
27
- unmount();
28
- closeFnSet.delete(close);
29
12
  }
30
-
31
- return React.createElement(Dialog, Object.assign({}, props, {
32
- visible: visible,
33
- onClose: handleClose,
34
- afterClose: handleAfterClose
35
- }));
36
- });
37
- const ref = createRef();
38
- const unmount = renderToBody(React.createElement(Wrapper, {
39
- ref: ref
40
- }));
41
-
42
- const close = () => {
43
- var _a;
44
-
45
- (_a = ref.current) === null || _a === void 0 ? void 0 : _a.close();
46
- };
47
-
48
- closeFnSet.add(close);
49
- return {
50
- close
51
- };
13
+ })));
14
+ closeFnSet.add(handler.close);
15
+ return handler;
52
16
  }
@@ -53,7 +53,6 @@ export const DotLoading = memo(p => {
53
53
  begin: `${i * 0.2}s`,
54
54
  repeatCount: 'indefinite',
55
55
  values: '16; 6; 26; 16; 16',
56
- keyTimes: '0; 0.1; 0.3; 0.4; 1',
57
- id: 'circ-anim'
56
+ keyTimes: '0; 0.1; 0.3; 0.4; 1'
58
57
  }))))))))));
59
58
  });
@@ -18,13 +18,15 @@ export const ErrorBlock = p => {
18
18
  const des = 'description' in props ? props.description : contentPack.description;
19
19
  const title = 'title' in props ? props.title : contentPack.title;
20
20
  let imageNode = React.createElement("img", {
21
- src: icon
21
+ src: icon,
22
+ alt: 'error block image'
22
23
  });
23
24
 
24
25
  if (props.image) {
25
26
  if (typeof props.image === 'string') {
26
27
  imageNode = React.createElement("img", {
27
- src: props.image
28
+ src: props.image,
29
+ alt: 'error block image'
28
30
  });
29
31
  } else {
30
32
  imageNode = props.image;
@@ -7,6 +7,7 @@
7
7
  --edge-distance: 0;
8
8
  --size: 96px;
9
9
  --border-radius: 50%;
10
+ --background: var(--adm-color-primary);
10
11
  }
11
12
 
12
13
  .adm-floating-bubble-boundary-outer {
@@ -43,7 +44,7 @@
43
44
  transition: opacity ease 0.15s;
44
45
  user-select: none;
45
46
  touch-action: none;
46
- background: var(--adm-color-primary);
47
+ background: var(--background);
47
48
  color: var(--adm-color-white);
48
49
  border-radius: var(--border-radius);
49
50
  z-index: var(--z-index);
@@ -4,5 +4,5 @@ export declare type FloatingBubbleProps = {
4
4
  onClick?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;
5
5
  axis?: 'x' | 'y' | 'xy' | 'lock';
6
6
  magnetic?: 'x' | 'y';
7
- } & NativeProps<'--initial-position-left' | '--initial-position-right' | '--initial-position-top' | '--initial-position-bottom' | '--z-index' | '--edge-distance' | '--size' | '--border-radius'>;
7
+ } & NativeProps<'--initial-position-left' | '--initial-position-right' | '--initial-position-top' | '--initial-position-bottom' | '--z-index' | '--edge-distance' | '--size' | '--border-radius' | '--background'>;
8
8
  export declare const FloatingBubble: FC<FloatingBubbleProps>;
@@ -30,15 +30,15 @@ export const FloatingBubble = p => {
30
30
  let nextX = state.offset[0];
31
31
  let nextY = state.offset[1];
32
32
 
33
- if (state.last) {
33
+ if (state.last && props.magnetic) {
34
34
  const boundary = boundaryRef.current;
35
35
  const button = buttonRef.current;
36
36
  if (!boundary || !button) return;
37
+ const boundaryRect = boundary.getBoundingClientRect();
38
+ const buttonRect = button.getBoundingClientRect();
37
39
 
38
40
  if (props.magnetic === 'x') {
39
41
  const compensation = x.goal - x.get();
40
- const boundaryRect = boundary.getBoundingClientRect();
41
- const buttonRect = button.getBoundingClientRect();
42
42
  const leftDistance = buttonRect.left + compensation - boundaryRect.left;
43
43
  const rightDistance = boundaryRect.right - (buttonRect.right + compensation);
44
44
 
@@ -47,13 +47,22 @@ export const FloatingBubble = p => {
47
47
  } else {
48
48
  nextX -= leftDistance;
49
49
  }
50
+ } else if (props.magnetic === 'y') {
51
+ const compensation = y.goal - y.get();
52
+ const topDistance = buttonRect.top + compensation - boundaryRect.top;
53
+ const bottomDistance = boundaryRect.bottom - (buttonRect.bottom + compensation);
54
+
55
+ if (bottomDistance <= topDistance) {
56
+ nextY += bottomDistance;
57
+ } else {
58
+ nextY -= topDistance;
59
+ }
50
60
  }
51
61
  }
52
62
 
53
63
  api.start({
54
64
  x: nextX,
55
- y: nextY // immediate: !state.last,
56
-
65
+ y: nextY
57
66
  }); // active status
58
67
 
59
68
  api.start({
@@ -0,0 +1,19 @@
1
+ import React, { ReactElement, ReactNode } from 'react';
2
+ import type { StoreValue } from 'rc-field-form/es/interface';
3
+ export interface FormArrayField {
4
+ index: number;
5
+ key: number;
6
+ }
7
+ export interface FormArrayOperation {
8
+ add: (defaultValue?: StoreValue, insertIndex?: number) => void;
9
+ remove: (index: number | number[]) => void;
10
+ move: (from: number, to: number) => void;
11
+ }
12
+ export interface FormArrayProps {
13
+ name: string | number | (string | number)[];
14
+ initialValue?: any[];
15
+ renderHeader?: (field: FormArrayField, operation: FormArrayOperation) => ReactNode;
16
+ renderAdd?: () => ReactNode;
17
+ children: (fields: FormArrayField[], operation: FormArrayOperation) => ReactElement[];
18
+ }
19
+ export declare const FormArray: React.FC<FormArrayProps>;
@@ -0,0 +1,38 @@
1
+ import React from 'react';
2
+ import { List as RCList } from 'rc-field-form';
3
+ import List from '../list';
4
+ export const FormArray = props => {
5
+ return React.createElement(RCList, {
6
+ name: props.name,
7
+ initialValue: props.initialValue
8
+ }, (rcFields, operation) => {
9
+ const fields = rcFields.map(field => ({
10
+ index: field.name,
11
+ key: field.key
12
+ }));
13
+ const children = props.children(fields, operation).map((child, index) => {
14
+ var _a;
15
+
16
+ return React.createElement(List, {
17
+ key: fields[index].key,
18
+ mode: 'card',
19
+ header: (_a = props.renderHeader) === null || _a === void 0 ? void 0 : _a.call(props, fields[index], operation)
20
+ }, child);
21
+ });
22
+
23
+ if (props.renderAdd) {
24
+ children.push(React.createElement(List, {
25
+ key: 'add',
26
+ mode: 'card'
27
+ }, React.createElement(List.Item, {
28
+ className: 'adm-form-list-operation',
29
+ onClick: () => {
30
+ operation.add();
31
+ },
32
+ arrow: false
33
+ }, props.renderAdd())));
34
+ }
35
+
36
+ return React.createElement(React.Fragment, null, children);
37
+ });
38
+ };
@@ -50,11 +50,16 @@
50
50
  flex: none;
51
51
  }
52
52
 
53
- .adm-form-item-footer {
53
+ .adm-form-item-feedback-error {
54
54
  color: var(--adm-color-danger);
55
55
  margin-top: 8px;
56
56
  }
57
57
 
58
+ .adm-form-item-feedback-warning {
59
+ color: var(--adm-color-warning);
60
+ margin-top: 8px;
61
+ }
62
+
58
63
  .adm-form-item.adm-form-item-hidden {
59
64
  display: none;
60
65
  }
@@ -28,9 +28,7 @@ const FormItemLayout = props => {
28
28
  children,
29
29
  htmlFor,
30
30
  hidden,
31
- errors,
32
31
  arrow,
33
- description,
34
32
  childElementPosition = 'normal'
35
33
  } = props;
36
34
  const context = useContext(FormContext);
@@ -39,7 +37,6 @@ const FormItemLayout = props => {
39
37
  } = useConfig();
40
38
  const hasFeedback = props.hasFeedback !== undefined ? props.hasFeedback : context.hasFeedback;
41
39
  const layout = props.layout || context.layout;
42
- const feedback = hasFeedback && errors && errors.length > 0 ? errors[0] : null;
43
40
 
44
41
  const requiredMark = (() => {
45
42
  const {
@@ -77,15 +74,19 @@ const FormItemLayout = props => {
77
74
  mode: 'dark',
78
75
  trigger: 'click'
79
76
  }, React.createElement(QuestionCircleOutline, null)))) : null;
80
- const descriptionElement = feedback || description ? React.createElement(React.Fragment, null, description, React.createElement("div", {
81
- className: `${classPrefix}-footer`
82
- }, feedback)) : null;
77
+ const description = React.createElement(React.Fragment, null, props.description, hasFeedback && React.createElement(React.Fragment, null, props.errors.map((error, index) => React.createElement("div", {
78
+ key: `error-${index}`,
79
+ className: `${classPrefix}-feedback-error`
80
+ }, error)), props.warnings.map((warning, index) => React.createElement("div", {
81
+ key: `warning-${index}`,
82
+ className: `${classPrefix}-feedback-warning`
83
+ }, warning))));
83
84
  return React.createElement(List.Item, {
84
85
  style: style,
85
86
  title: layout === 'vertical' && labelElement,
86
87
  prefix: layout === 'horizontal' && labelElement,
87
88
  extra: extra,
88
- description: descriptionElement,
89
+ description: description,
89
90
  className: classNames(classPrefix, className, `${classPrefix}-${layout}`, {
90
91
  [`${classPrefix}-hidden`]: hidden
91
92
  }),
@@ -153,7 +154,7 @@ export const FormItem = props => {
153
154
  }, [setSubMetas]);
154
155
 
155
156
  function renderLayout(baseChildren, fieldId, meta, isRequired) {
156
- var _a;
157
+ var _a, _b;
157
158
 
158
159
  if (noStyle && !hidden) {
159
160
  return baseChildren;
@@ -171,6 +172,18 @@ export const FormItem = props => {
171
172
 
172
173
  return subErrors;
173
174
  }, curErrors);
175
+ const curWarnings = (_b = meta === null || meta === void 0 ? void 0 : meta.warnings) !== null && _b !== void 0 ? _b : [];
176
+ const warnings = Object.keys(subMetas).reduce((subWarnings, key) => {
177
+ var _a, _b;
178
+
179
+ const warnings = (_b = (_a = subMetas[key]) === null || _a === void 0 ? void 0 : _a.warnings) !== null && _b !== void 0 ? _b : [];
180
+
181
+ if (warnings.length) {
182
+ subWarnings = [...subWarnings, ...warnings];
183
+ }
184
+
185
+ return subWarnings;
186
+ }, curWarnings);
174
187
  return React.createElement(FormItemLayout, {
175
188
  className: className,
176
189
  style: style,
@@ -183,6 +196,7 @@ export const FormItem = props => {
183
196
  hasFeedback: hasFeedback,
184
197
  htmlFor: fieldId,
185
198
  errors: errors,
199
+ warnings: warnings,
186
200
  onClick: onClick,
187
201
  hidden: hidden,
188
202
  layout: layout,
@@ -17,4 +17,9 @@
17
17
 
18
18
  .adm-form .adm-form-footer {
19
19
  padding: 40px 24px;
20
+ }
21
+
22
+ .adm-form-list-operation {
23
+ text-align: center;
24
+ color: #1677ff;
20
25
  }
@@ -8,6 +8,7 @@ import { mergeProps } from '../../utils/with-default-props';
8
8
  import { Header } from './header';
9
9
  import { useConfig } from '../config-provider';
10
10
  import merge from 'lodash/merge';
11
+ import { FormArray } from './form-array';
11
12
  const classPrefix = 'adm-form';
12
13
  const defaultProps = defaultFormContext;
13
14
  export const Form = forwardRef((p, ref) => {
@@ -46,12 +47,21 @@ export const Form = forwardRef((p, ref) => {
46
47
  }
47
48
 
48
49
  React.Children.forEach(props.children, child => {
49
- if (React.isValidElement(child) && child.type === Header) {
50
- collect();
51
- currentHeader = child.props.children;
52
- } else {
53
- items.push(child);
50
+ if (React.isValidElement(child)) {
51
+ if (child.type === Header) {
52
+ collect();
53
+ currentHeader = child.props.children;
54
+ return;
55
+ }
56
+
57
+ if (child.type === FormArray) {
58
+ collect();
59
+ lists.push(child);
60
+ return;
61
+ }
54
62
  }
63
+
64
+ items.push(child);
55
65
  });
56
66
  collect();
57
67
  return React.createElement(RcForm, Object.assign({
@@ -19,6 +19,11 @@
19
19
  padding: 40px 24px;
20
20
  }
21
21
 
22
+ .adm-form-list-operation {
23
+ text-align: center;
24
+ color: #1677ff;
25
+ }
26
+
22
27
  .adm-form-item + .adm-form-item {
23
28
  border-top: none;
24
29
  }
@@ -71,11 +76,16 @@
71
76
  flex: none;
72
77
  }
73
78
 
74
- .adm-form-item-footer {
79
+ .adm-form-item-feedback-error {
75
80
  color: var(--adm-color-danger);
76
81
  margin-top: 8px;
77
82
  }
78
83
 
84
+ .adm-form-item-feedback-warning {
85
+ color: var(--adm-color-warning);
86
+ margin-top: 8px;
87
+ }
88
+
79
89
  .adm-form-item.adm-form-item-hidden {
80
90
  display: none;
81
91
  }
@@ -6,6 +6,7 @@ export type { FormProps, FormInstance } from './form';
6
6
  export type { FormItemProps } from './form-item';
7
7
  export type { FormSubscribeProps } from './form-subscribe';
8
8
  export type { ValidateMessages, FieldData, NamePath, } from 'rc-field-form/es/interface';
9
+ export type { FormArrayField, FormArrayOperation, FormArrayProps, } from './form-array';
9
10
  declare const _default: import("react").ForwardRefExoticComponent<Pick<import("rc-field-form").FormProps<any>, "children" | "form" | "name" | "initialValues" | "preserve" | "validateMessages" | "validateTrigger" | "onFieldsChange" | "onFinish" | "onFinishFailed" | "onValuesChange"> & import("../../utils/native-props").NativeProps<"--border-inner" | "--border-top" | "--border-bottom"> & Partial<import("./context").FormContextType> & {
10
11
  footer?: import("react").ReactNode;
11
12
  layout?: FormLayout | undefined;
@@ -14,6 +15,7 @@ declare const _default: import("react").ForwardRefExoticComponent<Pick<import("r
14
15
  Item: import("react").FC<import("./form-item").FormItemProps>;
15
16
  Subscribe: import("react").VFC<import("./form-subscribe").FormSubscribeProps>;
16
17
  Header: import("react").FC<{}>;
18
+ Array: import("react").FC<import("./form-array").FormArrayProps>;
17
19
  useForm: typeof useForm;
18
20
  };
19
21
  export default _default;
@@ -5,9 +5,11 @@ import { FormItem } from './form-item';
5
5
  import { Header } from './header';
6
6
  import { useForm } from 'rc-field-form';
7
7
  import { FormSubscribe } from './form-subscribe';
8
+ import { FormArray } from './form-array';
8
9
  export default attachPropertiesToComponent(Form, {
9
10
  Item: FormItem,
10
11
  Subscribe: FormSubscribe,
11
12
  Header,
13
+ Array: FormArray,
12
14
  useForm
13
15
  });
@@ -20,7 +20,7 @@ export declare type ImageUploaderProps = {
20
20
  deletable?: boolean;
21
21
  capture?: InputHTMLAttributes<unknown>['capture'];
22
22
  onPreview?: (index: number, item: ImageUploadItem) => void;
23
- beforeUpload?: (file: File[]) => Promise<File[]> | File[];
23
+ beforeUpload?: (file: File, files: File[]) => Promise<File | null> | File | null;
24
24
  upload: (file: File) => Promise<ImageUploadItem>;
25
25
  onDelete?: (item: ImageUploadItem) => boolean | Promise<boolean> | void;
26
26
  preview?: boolean;
@@ -39,6 +39,17 @@ export const ImageUploader = p => {
39
39
  onPreview
40
40
  } = props;
41
41
 
42
+ function processFile(file, fileList) {
43
+ return __awaiter(this, void 0, void 0, function* () {
44
+ const {
45
+ beforeUpload
46
+ } = props;
47
+ let transformedFile = file;
48
+ transformedFile = yield beforeUpload === null || beforeUpload === void 0 ? void 0 : beforeUpload(file, fileList);
49
+ return transformedFile;
50
+ });
51
+ }
52
+
42
53
  function onChange(e) {
43
54
  var _a;
44
55
 
@@ -51,7 +62,12 @@ export const ImageUploader = p => {
51
62
  let files = [].slice.call(rawFiles);
52
63
 
53
64
  if (props.beforeUpload) {
54
- files = yield props.beforeUpload(files);
65
+ const postFiles = files.map(file => {
66
+ return processFile(file, files);
67
+ });
68
+ yield Promise.all(postFiles).then(filesList => {
69
+ files = filesList.filter(Boolean);
70
+ });
55
71
  }
56
72
 
57
73
  if (files.length === 0) {
@@ -2,7 +2,7 @@
2
2
  import './image-viewer.less';
3
3
  import { showMultiImageViewer, showImageViewer, clearImageViewer } from './methods';
4
4
  export type { ImageViewerProps, MultiImageViewerProps, MultiImageViewerRef, } from './image-viewer';
5
- export type { ImageViewerHandler } from './methods';
5
+ export type { ImageViewerShowHandler } from './methods';
6
6
  declare const _default: import("react").FC<import("./image-viewer").ImageViewerProps> & {
7
7
  Multi: import("react").ForwardRefExoticComponent<Omit<import("./image-viewer").ImageViewerProps, "image"> & {
8
8
  images?: string[] | undefined;
@@ -1,11 +1,10 @@
1
1
  import { ImageViewerProps, MultiImageViewerProps } from './image-viewer';
2
- export declare type ImageViewerHandler = {
3
- close: () => void;
4
- };
5
- export declare function showImageViewer(props: Omit<ImageViewerProps, 'visible'>): {
2
+ export declare type ImageViewerShowHandler = {
6
3
  close: () => void;
7
4
  };
5
+ export declare function showImageViewer(props: Omit<ImageViewerProps, 'visible'>): ImageViewerShowHandler;
8
6
  export declare function showMultiImageViewer(props: Omit<MultiImageViewerProps, 'visible'>): {
9
7
  close: () => void;
10
8
  };
11
9
  export declare function clearImageViewer(): void;
10
+ export declare const getH: () => void;