antd-mobile 5.21.0 → 5.23.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 (192) hide show
  1. package/2x/bundle/antd-mobile.cjs.development.js +25816 -0
  2. package/2x/bundle/antd-mobile.cjs.js +8 -32
  3. package/2x/bundle/antd-mobile.compatible.umd.js +12093 -12569
  4. package/2x/bundle/antd-mobile.es.development.js +25796 -0
  5. package/2x/bundle/antd-mobile.es.js +8578 -8861
  6. package/2x/bundle/antd-mobile.umd.development.js +25818 -0
  7. package/2x/bundle/antd-mobile.umd.js +8 -32
  8. package/2x/bundle/style.css +149 -44
  9. package/2x/cjs/components/action-sheet/action-sheet.css +6 -2
  10. package/2x/cjs/components/action-sheet/action-sheet.d.ts +1 -0
  11. package/2x/cjs/components/action-sheet/action-sheet.js +2 -1
  12. package/2x/cjs/components/avatar/avatar.js +2 -2
  13. package/2x/cjs/components/check-list/check-list.css +1 -1
  14. package/2x/cjs/components/dialog/dialog-action-button.d.ts +2 -2
  15. package/2x/cjs/components/ellipsis/ellipsis.js +1 -0
  16. package/2x/cjs/components/empty/empty.d.ts +1 -0
  17. package/2x/cjs/components/empty/empty.js +1 -0
  18. package/2x/cjs/components/floating-panel/floating-panel.js +2 -2
  19. package/2x/cjs/components/footer/footer.css +60 -0
  20. package/2x/cjs/components/footer/footer.d.ts +19 -0
  21. package/2x/cjs/components/footer/footer.js +83 -0
  22. package/2x/cjs/components/footer/index.d.ts +4 -0
  23. package/2x/cjs/components/footer/index.js +13 -0
  24. package/2x/cjs/components/image-uploader/image-uploader.d.ts +11 -1
  25. package/2x/cjs/components/image-uploader/image-uploader.js +42 -25
  26. package/2x/cjs/components/image-uploader/index.d.ts +1 -1
  27. package/2x/cjs/components/image-uploader/preview-item.js +5 -0
  28. package/2x/cjs/components/image-viewer/image-viewer.js +4 -2
  29. package/2x/cjs/components/image-viewer/slides.js +2 -2
  30. package/2x/cjs/components/index-bar/index-bar.css +1 -1
  31. package/2x/cjs/components/page-indicator/page-indicator.css +2 -1
  32. package/2x/cjs/components/picker/index.d.ts +2 -2
  33. package/2x/cjs/components/picker/picker.d.ts +1 -1
  34. package/2x/cjs/components/picker-view/picker-view.css +9 -0
  35. package/2x/cjs/components/picker-view/wheel.js +8 -4
  36. package/2x/cjs/components/rate/rate.css +6 -1
  37. package/2x/cjs/components/rate/rate.js +3 -1
  38. package/2x/cjs/components/selector/selector.css +10 -0
  39. package/2x/cjs/components/selector/selector.d.ts +3 -2
  40. package/2x/cjs/components/selector/selector.js +1 -4
  41. package/2x/cjs/components/slider/slider.css +15 -1
  42. package/2x/cjs/components/slider/slider.d.ts +1 -0
  43. package/2x/cjs/components/slider/slider.js +13 -2
  44. package/2x/cjs/components/slider/thumb.d.ts +1 -0
  45. package/2x/cjs/components/slider/thumb.js +4 -3
  46. package/2x/cjs/components/tab-bar/tab-bar.css +2 -2
  47. package/2x/cjs/components/toast/toast.css +4 -3
  48. package/2x/cjs/index.d.ts +1 -0
  49. package/2x/cjs/index.js +8 -0
  50. package/2x/cjs/locales/zh-CN.js +1 -1
  51. package/2x/cjs/utils/measure-css-length.js +1 -1
  52. package/2x/es/components/action-sheet/action-sheet.css +6 -2
  53. package/2x/es/components/action-sheet/action-sheet.d.ts +1 -0
  54. package/2x/es/components/action-sheet/action-sheet.js +2 -1
  55. package/2x/es/components/avatar/avatar.js +1 -1
  56. package/2x/es/components/check-list/check-list.css +1 -1
  57. package/2x/es/components/dialog/dialog-action-button.d.ts +2 -2
  58. package/2x/es/components/ellipsis/ellipsis.js +1 -0
  59. package/2x/es/components/empty/empty.d.ts +1 -0
  60. package/2x/es/components/empty/empty.js +2 -0
  61. package/2x/es/components/floating-panel/floating-panel.js +2 -2
  62. package/2x/es/components/footer/footer.css +60 -0
  63. package/2x/es/components/footer/footer.d.ts +19 -0
  64. package/2x/es/components/footer/footer.js +66 -0
  65. package/2x/es/components/footer/index.d.ts +4 -0
  66. package/2x/es/components/footer/index.js +3 -0
  67. package/2x/es/components/image-uploader/image-uploader.d.ts +11 -1
  68. package/2x/es/components/image-uploader/image-uploader.js +41 -25
  69. package/2x/es/components/image-uploader/index.d.ts +1 -1
  70. package/2x/es/components/image-uploader/preview-item.js +6 -1
  71. package/2x/es/components/image-viewer/image-viewer.js +4 -2
  72. package/2x/es/components/image-viewer/slides.js +2 -2
  73. package/2x/es/components/index-bar/index-bar.css +1 -1
  74. package/2x/es/components/page-indicator/page-indicator.css +2 -1
  75. package/2x/es/components/picker/index.d.ts +2 -2
  76. package/2x/es/components/picker/picker.d.ts +1 -1
  77. package/2x/es/components/picker-view/picker-view.css +9 -0
  78. package/2x/es/components/picker-view/wheel.js +8 -4
  79. package/2x/es/components/rate/rate.css +6 -1
  80. package/2x/es/components/rate/rate.js +3 -1
  81. package/2x/es/components/selector/selector.css +10 -0
  82. package/2x/es/components/selector/selector.d.ts +3 -2
  83. package/2x/es/components/selector/selector.js +1 -3
  84. package/2x/es/components/slider/slider.css +15 -1
  85. package/2x/es/components/slider/slider.d.ts +1 -0
  86. package/2x/es/components/slider/slider.js +12 -2
  87. package/2x/es/components/slider/thumb.d.ts +1 -0
  88. package/2x/es/components/slider/thumb.js +4 -3
  89. package/2x/es/components/tab-bar/tab-bar.css +2 -2
  90. package/2x/es/components/toast/toast.css +4 -3
  91. package/2x/es/index.d.ts +1 -0
  92. package/2x/es/index.js +1 -0
  93. package/2x/es/locales/zh-CN.js +1 -1
  94. package/2x/es/utils/measure-css-length.js +1 -1
  95. package/2x/package.json +1 -1
  96. package/2x/umd/antd-mobile.js +12093 -12569
  97. package/bundle/antd-mobile.cjs.development.js +25816 -0
  98. package/bundle/antd-mobile.cjs.js +8 -32
  99. package/bundle/antd-mobile.compatible.umd.js +12093 -12569
  100. package/bundle/antd-mobile.es.development.js +25796 -0
  101. package/bundle/antd-mobile.es.js +8578 -8861
  102. package/bundle/antd-mobile.umd.development.js +25818 -0
  103. package/bundle/antd-mobile.umd.js +8 -32
  104. package/bundle/style.css +1 -1
  105. package/cjs/components/action-sheet/action-sheet.css +5 -2
  106. package/cjs/components/action-sheet/action-sheet.d.ts +1 -0
  107. package/cjs/components/action-sheet/action-sheet.js +2 -1
  108. package/cjs/components/avatar/avatar.js +2 -2
  109. package/cjs/components/check-list/check-list.css +1 -1
  110. package/cjs/components/dialog/dialog-action-button.d.ts +2 -2
  111. package/cjs/components/ellipsis/ellipsis.js +1 -0
  112. package/cjs/components/empty/empty.d.ts +1 -0
  113. package/cjs/components/empty/empty.js +1 -0
  114. package/cjs/components/floating-panel/floating-panel.js +2 -2
  115. package/cjs/components/footer/footer.css +51 -0
  116. package/cjs/components/footer/footer.d.ts +19 -0
  117. package/cjs/components/footer/footer.js +83 -0
  118. package/cjs/components/footer/index.d.ts +4 -0
  119. package/cjs/components/footer/index.js +13 -0
  120. package/cjs/components/image-uploader/image-uploader.d.ts +11 -1
  121. package/cjs/components/image-uploader/image-uploader.js +42 -25
  122. package/cjs/components/image-uploader/index.d.ts +1 -1
  123. package/cjs/components/image-uploader/preview-item.js +5 -0
  124. package/cjs/components/image-viewer/image-viewer.js +4 -2
  125. package/cjs/components/image-viewer/slides.js +2 -2
  126. package/cjs/components/index-bar/index-bar.css +1 -1
  127. package/cjs/components/page-indicator/page-indicator.css +2 -1
  128. package/cjs/components/picker/index.d.ts +2 -2
  129. package/cjs/components/picker/picker.d.ts +1 -1
  130. package/cjs/components/picker-view/picker-view.css +8 -0
  131. package/cjs/components/picker-view/wheel.js +8 -4
  132. package/cjs/components/rate/rate.css +5 -1
  133. package/cjs/components/rate/rate.js +3 -1
  134. package/cjs/components/selector/selector.css +9 -0
  135. package/cjs/components/selector/selector.d.ts +3 -2
  136. package/cjs/components/selector/selector.js +1 -4
  137. package/cjs/components/slider/slider.css +14 -1
  138. package/cjs/components/slider/slider.d.ts +1 -0
  139. package/cjs/components/slider/slider.js +13 -2
  140. package/cjs/components/slider/thumb.d.ts +1 -0
  141. package/cjs/components/slider/thumb.js +4 -3
  142. package/cjs/components/tab-bar/tab-bar.css +2 -2
  143. package/cjs/components/toast/toast.css +4 -3
  144. package/cjs/index.d.ts +1 -0
  145. package/cjs/index.js +8 -0
  146. package/cjs/locales/zh-CN.js +1 -1
  147. package/cjs/utils/measure-css-length.js +1 -1
  148. package/es/components/action-sheet/action-sheet.css +5 -2
  149. package/es/components/action-sheet/action-sheet.d.ts +1 -0
  150. package/es/components/action-sheet/action-sheet.js +2 -1
  151. package/es/components/avatar/avatar.js +1 -1
  152. package/es/components/check-list/check-list.css +1 -1
  153. package/es/components/dialog/dialog-action-button.d.ts +2 -2
  154. package/es/components/ellipsis/ellipsis.js +1 -0
  155. package/es/components/empty/empty.d.ts +1 -0
  156. package/es/components/empty/empty.js +2 -0
  157. package/es/components/floating-panel/floating-panel.js +2 -2
  158. package/es/components/footer/footer.css +51 -0
  159. package/es/components/footer/footer.d.ts +19 -0
  160. package/es/components/footer/footer.js +66 -0
  161. package/es/components/footer/index.d.ts +4 -0
  162. package/es/components/footer/index.js +3 -0
  163. package/es/components/image-uploader/image-uploader.d.ts +11 -1
  164. package/es/components/image-uploader/image-uploader.js +41 -25
  165. package/es/components/image-uploader/index.d.ts +1 -1
  166. package/es/components/image-uploader/preview-item.js +6 -1
  167. package/es/components/image-viewer/image-viewer.js +4 -2
  168. package/es/components/image-viewer/slides.js +2 -2
  169. package/es/components/index-bar/index-bar.css +1 -1
  170. package/es/components/page-indicator/page-indicator.css +2 -1
  171. package/es/components/picker/index.d.ts +2 -2
  172. package/es/components/picker/picker.d.ts +1 -1
  173. package/es/components/picker-view/picker-view.css +8 -0
  174. package/es/components/picker-view/wheel.js +8 -4
  175. package/es/components/rate/rate.css +5 -1
  176. package/es/components/rate/rate.js +3 -1
  177. package/es/components/selector/selector.css +9 -0
  178. package/es/components/selector/selector.d.ts +3 -2
  179. package/es/components/selector/selector.js +1 -3
  180. package/es/components/slider/slider.css +14 -1
  181. package/es/components/slider/slider.d.ts +1 -0
  182. package/es/components/slider/slider.js +12 -2
  183. package/es/components/slider/thumb.d.ts +1 -0
  184. package/es/components/slider/thumb.js +4 -3
  185. package/es/components/tab-bar/tab-bar.css +2 -2
  186. package/es/components/toast/toast.css +4 -3
  187. package/es/index.d.ts +1 -0
  188. package/es/index.js +1 -0
  189. package/es/locales/zh-CN.js +1 -1
  190. package/es/utils/measure-css-length.js +1 -1
  191. package/package.json +1 -1
  192. package/umd/antd-mobile.js +1 -1
@@ -113,8 +113,8 @@ export const FloatingPanel = forwardRef((p, ref) => {
113
113
  ref: elementRef,
114
114
  className: 'adm-floating-panel',
115
115
  style: {
116
- height: maxHeight,
117
- translateY: y.to(y => `calc(100% + (${y}px))`)
116
+ height: Math.round(maxHeight),
117
+ translateY: y.to(y => `calc(100% + (${Math.round(y)}px))`)
118
118
  }
119
119
  }, React.createElement("div", {
120
120
  className: 'adm-floating-panel-mask',
@@ -0,0 +1,60 @@
1
+ .adm-footer {
2
+ --background-color: var(--adm-color-background);
3
+ color: var(--adm-color-text);
4
+ display: flex;
5
+ flex-direction: column;
6
+ align-items: center;
7
+ background-color: var(--background-color);
8
+ }
9
+
10
+ .adm-footer-label {
11
+ width: 100%;
12
+ }
13
+
14
+ .adm-footer-label .adm-divider.adm-divider {
15
+ color: var(--adm-color-light);
16
+ }
17
+
18
+ .adm-footer-links {
19
+ margin: 16px 0;
20
+ color: var(--adm-color-primary);
21
+ white-space: nowrap;
22
+ }
23
+
24
+ .adm-footer-links a {
25
+ text-decoration: none;
26
+ }
27
+
28
+ .adm-footer-content {
29
+ display: flex;
30
+ align-items: center;
31
+ margin: 16px 0;
32
+ color: var(--adm-color-light);
33
+ }
34
+
35
+ .adm-footer-chips {
36
+ display: flex;
37
+ align-items: center;
38
+ white-space: nowrap;
39
+ margin: 16px 0;
40
+ }
41
+
42
+ .adm-footer-chip {
43
+ white-space: nowrap;
44
+ margin-right: 40px;
45
+ font-size: 24px;
46
+ background-color: var(--adm-color-box);
47
+ color: var(--adm-color-weak);
48
+ padding: 8px 24px;
49
+ border-radius: 200px;
50
+ }
51
+
52
+ .adm-footer-chip-link {
53
+ cursor: pointer;
54
+ background-color: #e7f1ff;
55
+ color: var(--adm-color-primary);
56
+ }
57
+
58
+ .adm-footer-chip:last-child {
59
+ margin-right: 0;
60
+ }
@@ -0,0 +1,19 @@
1
+ import { FC, ReactNode } from 'react';
2
+ import { NativeProps } from '../../utils/native-props';
3
+ export declare type LinkItem = {
4
+ text: string;
5
+ href: string;
6
+ };
7
+ export declare type ChipItem = {
8
+ text: ReactNode;
9
+ type?: 'plain' | 'link';
10
+ };
11
+ export declare type FooterProps = {
12
+ label?: ReactNode;
13
+ links?: LinkItem[];
14
+ content?: ReactNode;
15
+ chips?: ChipItem[];
16
+ onChipClick?: (item: ChipItem, index: number) => void;
17
+ onLinkClick?: (item: LinkItem, index: number) => void;
18
+ } & NativeProps<'--background-color'>;
19
+ export declare const Footer: FC<FooterProps>;
@@ -0,0 +1,66 @@
1
+ import React from 'react';
2
+ import classNames from 'classnames';
3
+ import { withNativeProps } from '../../utils/native-props';
4
+ import { mergeProps } from '../../utils/with-default-props';
5
+ import { Divider } from '../divider/divider';
6
+ const classPrefix = `adm-footer`;
7
+ const defaultProps = {
8
+ label: '',
9
+ links: [],
10
+ content: '',
11
+ chips: []
12
+ };
13
+ export const Footer = p => {
14
+ const props = mergeProps(defaultProps, p);
15
+ const {
16
+ label,
17
+ links,
18
+ content,
19
+ chips,
20
+ onChipClick,
21
+ onLinkClick
22
+ } = props;
23
+
24
+ const clickChipItem = (item, index) => {
25
+ if ((chips === null || chips === void 0 ? void 0 : chips.length) && item.type === 'link') {
26
+ onChipClick === null || onChipClick === void 0 ? void 0 : onChipClick(item, index);
27
+ }
28
+ };
29
+
30
+ const clickLinkItem = (item, index, e) => {
31
+ if (onLinkClick) {
32
+ e.preventDefault();
33
+ onLinkClick(item, index);
34
+ }
35
+ };
36
+
37
+ return withNativeProps(props, React.createElement("div", {
38
+ className: classNames(classPrefix)
39
+ }, label && React.createElement("div", {
40
+ className: `${classPrefix}-label`
41
+ }, React.createElement(Divider, null, label)), links && links.length > 0 && React.createElement("div", {
42
+ className: `${classPrefix}-links`
43
+ }, links.map((link, index) => {
44
+ return React.createElement(React.Fragment, {
45
+ key: index
46
+ }, React.createElement("a", {
47
+ href: link.href,
48
+ rel: 'noopener noreferrer',
49
+ onClick: event => clickLinkItem(link, index, event)
50
+ }, link.text), index !== links.length - 1 && React.createElement(Divider, {
51
+ direction: 'vertical'
52
+ }));
53
+ })), content && React.createElement("div", {
54
+ className: `${classPrefix}-content`
55
+ }, content), chips && chips.length > 0 && React.createElement("div", {
56
+ className: `${classPrefix}-chips`
57
+ }, chips.map((chip, index) => {
58
+ return React.createElement("div", {
59
+ key: index,
60
+ onClick: () => clickChipItem(chip, index),
61
+ className: classNames(`${classPrefix}-chip`, {
62
+ [`${classPrefix}-chip-link`]: chip.type === 'link'
63
+ })
64
+ }, chip.text);
65
+ }))));
66
+ };
@@ -0,0 +1,4 @@
1
+ import './footer.less';
2
+ import { Footer } from './footer';
3
+ export type { FooterProps, ChipItem, LinkItem } from './footer';
4
+ export default Footer;
@@ -0,0 +1,3 @@
1
+ import "./footer.css";
2
+ import { Footer } from './footer';
3
+ export default Footer;
@@ -1,17 +1,25 @@
1
1
  import React, { FC, InputHTMLAttributes } from 'react';
2
2
  import { NativeProps } from '../../utils/native-props';
3
3
  import type { ImageProps } from '../image';
4
- export declare type TaskStatus = 'pending' | 'fail';
4
+ export declare type TaskStatus = 'pending' | 'fail' | 'success';
5
5
  export interface ImageUploadItem {
6
6
  key?: string | number;
7
7
  url: string;
8
8
  thumbnailUrl?: string;
9
9
  extra?: any;
10
10
  }
11
+ declare type Task = {
12
+ id: number;
13
+ url?: string;
14
+ file: File;
15
+ status: TaskStatus;
16
+ };
17
+ export declare type UploadTask = Pick<Task, 'id' | 'status'>;
11
18
  export declare type ImageUploaderProps = {
12
19
  defaultValue?: ImageUploadItem[];
13
20
  value?: ImageUploadItem[];
14
21
  onChange?: (items: ImageUploadItem[]) => void;
22
+ onUploadQueueChange?: (tasks: UploadTask[]) => void;
15
23
  accept?: string;
16
24
  multiple?: boolean;
17
25
  maxCount?: number;
@@ -28,5 +36,7 @@ export declare type ImageUploaderProps = {
28
36
  showFailed?: boolean;
29
37
  imageFit?: ImageProps['fit'];
30
38
  children?: React.ReactNode;
39
+ renderItem?: (originNode: React.ReactElement, file: ImageUploadItem, fileList: ImageUploadItem[]) => React.ReactNode;
31
40
  } & NativeProps<'--cell-size'>;
32
41
  export declare const ImageUploader: FC<ImageUploaderProps>;
42
+ export {};
@@ -35,10 +35,19 @@ export const ImageUploader = p => {
35
35
  return !value.some(fileItem => fileItem.url === task.url);
36
36
  }));
37
37
  }, [value]);
38
+ useIsomorphicLayoutEffect(() => {
39
+ var _a;
40
+
41
+ (_a = props.onUploadQueueChange) === null || _a === void 0 ? void 0 : _a.call(props, tasks.map(item => ({
42
+ id: item.id,
43
+ status: item.status
44
+ })));
45
+ }, [tasks]);
38
46
  const idCountRef = useRef(0);
39
47
  const {
40
48
  maxCount,
41
- onPreview
49
+ onPreview,
50
+ renderItem
42
51
  } = props;
43
52
 
44
53
  function processFile(file, fileList) {
@@ -99,6 +108,7 @@ export const ImageUploader = p => {
99
108
  return prev.map(task => {
100
109
  if (task.id === currentTask.id) {
101
110
  return Object.assign(Object.assign({}, task), {
111
+ status: 'success',
102
112
  url: result.url
103
113
  });
104
114
  }
@@ -146,36 +156,42 @@ export const ImageUploader = p => {
146
156
  (_a = imageViewerHandlerRef.current) === null || _a === void 0 ? void 0 : _a.close();
147
157
  });
148
158
  const showUpload = props.showUpload && (maxCount === 0 || value.length + tasks.length < maxCount);
159
+
160
+ const renderImages = () => {
161
+ return value.map((fileItem, index) => {
162
+ var _a, _b;
163
+
164
+ const originNode = React.createElement(PreviewItem, {
165
+ key: (_a = fileItem.key) !== null && _a !== void 0 ? _a : index,
166
+ url: (_b = fileItem.thumbnailUrl) !== null && _b !== void 0 ? _b : fileItem.url,
167
+ deletable: props.deletable,
168
+ imageFit: props.imageFit,
169
+ onClick: () => {
170
+ if (props.preview) {
171
+ previewImage(index);
172
+ }
173
+
174
+ onPreview && onPreview(index, fileItem);
175
+ },
176
+ onDelete: () => __awaiter(void 0, void 0, void 0, function* () {
177
+ var _c;
178
+
179
+ const canDelete = yield (_c = props.onDelete) === null || _c === void 0 ? void 0 : _c.call(props, fileItem);
180
+ if (canDelete === false) return;
181
+ setValue(value.filter((x, i) => i !== index));
182
+ })
183
+ });
184
+ return renderItem ? renderItem(originNode, fileItem, value) : originNode;
185
+ });
186
+ };
187
+
149
188
  return withNativeProps(props, React.createElement("div", {
150
189
  className: classPrefix
151
190
  }, React.createElement(Space, {
152
191
  className: `${classPrefix}-space`,
153
192
  wrap: true,
154
193
  block: true
155
- }, value.map((fileItem, index) => {
156
- var _a, _b;
157
-
158
- return React.createElement(PreviewItem, {
159
- key: (_a = fileItem.key) !== null && _a !== void 0 ? _a : index,
160
- url: (_b = fileItem.thumbnailUrl) !== null && _b !== void 0 ? _b : fileItem.url,
161
- deletable: props.deletable,
162
- imageFit: props.imageFit,
163
- onClick: () => {
164
- if (props.preview) {
165
- previewImage(index);
166
- }
167
-
168
- onPreview && onPreview(index, fileItem);
169
- },
170
- onDelete: () => __awaiter(void 0, void 0, void 0, function* () {
171
- var _c;
172
-
173
- const canDelete = yield (_c = props.onDelete) === null || _c === void 0 ? void 0 : _c.call(props, fileItem);
174
- if (canDelete === false) return;
175
- setValue(value.filter((x, i) => i !== index));
176
- })
177
- });
178
- }), tasks.map(task => {
194
+ }, renderImages(), tasks.map(task => {
179
195
  if (!props.showFailed && task.status === 'fail') {
180
196
  return null;
181
197
  }
@@ -1,4 +1,4 @@
1
1
  import { ImageUploader } from './image-uploader';
2
2
  import './image-uploader.less';
3
- export type { ImageUploadItem, ImageUploaderProps } from './image-uploader';
3
+ export type { ImageUploadItem, ImageUploaderProps, UploadTask, } from './image-uploader';
4
4
  export default ImageUploader;
@@ -1,4 +1,4 @@
1
- import React, { useMemo } from 'react';
1
+ import React, { useLayoutEffect, useMemo } from 'react';
2
2
  import { CloseOutline } from 'antd-mobile-icons';
3
3
  import classNames from 'classnames';
4
4
  import Image from '../image';
@@ -28,6 +28,11 @@ const PreviewItem = props => {
28
28
 
29
29
  return '';
30
30
  }, [url, file]);
31
+ useLayoutEffect(() => {
32
+ return () => {
33
+ URL.revokeObjectURL(src);
34
+ };
35
+ }, [src]);
31
36
 
32
37
  function renderLoading() {
33
38
  return props.status === 'pending' && React.createElement("div", {
@@ -19,7 +19,8 @@ export const ImageViewer = p => {
19
19
  visible: props.visible,
20
20
  disableBodyScroll: false,
21
21
  opacity: 'thick',
22
- afterClose: props.afterClose
22
+ afterClose: props.afterClose,
23
+ destroyOnClose: true
23
24
  }, React.createElement("div", {
24
25
  className: `${classPrefix}-content`
25
26
  }, props.image && React.createElement(Slide, {
@@ -64,7 +65,8 @@ export const MultiImageViewer = forwardRef((p, ref) => {
64
65
  visible: props.visible,
65
66
  disableBodyScroll: false,
66
67
  opacity: 'thick',
67
- afterClose: props.afterClose
68
+ afterClose: props.afterClose,
69
+ destroyOnClose: true
68
70
  }, React.createElement("div", {
69
71
  className: `${classPrefix}-content`
70
72
  }, props.images && React.createElement(Slides, {
@@ -75,8 +75,8 @@ export const Slides = forwardRef((props, ref) => {
75
75
  style: {
76
76
  x: x.to(x => -x)
77
77
  }
78
- }, props.images.map(image => React.createElement(Slide, {
79
- key: image,
78
+ }, props.images.map((image, index) => React.createElement(Slide, {
79
+ key: index,
80
80
  image: image,
81
81
  onTap: props.onTap,
82
82
  maxZoom: props.maxZoom,
@@ -45,7 +45,7 @@
45
45
  .adm-index-bar-sidebar-bubble {
46
46
  position: absolute;
47
47
  top: 50%;
48
- right: 84px;
48
+ right: 120px;
49
49
  width: 94px;
50
50
  height: 94px;
51
51
  color: var(--adm-color-white);
@@ -1,7 +1,7 @@
1
1
  .adm-page-indicator {
2
2
  display: flex;
3
3
  width: auto;
4
- --dot-color: rgba(0, 0, 0, 0.2);
4
+ --dot-color: #dddddd;
5
5
  --active-dot-color: var(--adm-color-primary);
6
6
  --dot-size: 6px;
7
7
  --active-dot-size: 26px;
@@ -28,6 +28,7 @@
28
28
  }
29
29
 
30
30
  .adm-page-indicator-color-white {
31
+ --dot-color: rgba(255, 255, 255, 0.5);
31
32
  --active-dot-color: var(--adm-color-white);
32
33
  }
33
34
 
@@ -24,7 +24,7 @@ declare const _default: import("react").NamedExoticComponent<{
24
24
  popupStyle?: import("react").CSSProperties | undefined;
25
25
  } & Pick<import("../popup").PopupProps, "onClick" | "destroyOnClose" | "forceRender" | "getContainer" | "afterShow" | "afterClose" | "stopPropagation"> & {
26
26
  className?: string | undefined;
27
- style?: (import("react").CSSProperties & Partial<Record<"--item-height" | "--header-button-font-size" | "--title-font-size" | "--item-font-size", string>>) | undefined;
27
+ style?: (import("react").CSSProperties & Partial<Record<"--header-button-font-size" | "--title-font-size" | "--item-font-size" | "--item-height", string>>) | undefined;
28
28
  tabIndex?: number | undefined;
29
29
  } & import("react").AriaAttributes & import("react").RefAttributes<import("./picker").PickerActions>> & {
30
30
  readonly type: import("react").ForwardRefExoticComponent<{
@@ -49,7 +49,7 @@ declare const _default: import("react").NamedExoticComponent<{
49
49
  popupStyle?: import("react").CSSProperties | undefined;
50
50
  } & Pick<import("../popup").PopupProps, "onClick" | "destroyOnClose" | "forceRender" | "getContainer" | "afterShow" | "afterClose" | "stopPropagation"> & {
51
51
  className?: string | undefined;
52
- style?: (import("react").CSSProperties & Partial<Record<"--item-height" | "--header-button-font-size" | "--title-font-size" | "--item-font-size", string>>) | undefined;
52
+ style?: (import("react").CSSProperties & Partial<Record<"--header-button-font-size" | "--title-font-size" | "--item-font-size" | "--item-height", string>>) | undefined;
53
53
  tabIndex?: number | undefined;
54
54
  } & import("react").AriaAttributes & import("react").RefAttributes<import("./picker").PickerActions>>;
55
55
  } & {
@@ -51,6 +51,6 @@ export declare const Picker: React.MemoExoticComponent<React.ForwardRefExoticCom
51
51
  popupStyle?: React.CSSProperties | undefined;
52
52
  } & Pick<PopupProps, "onClick" | "destroyOnClose" | "forceRender" | "getContainer" | "afterShow" | "afterClose" | "stopPropagation"> & {
53
53
  className?: string | undefined;
54
- style?: (React.CSSProperties & Partial<Record<"--item-height" | "--header-button-font-size" | "--title-font-size" | "--item-font-size", string>>) | undefined;
54
+ style?: (React.CSSProperties & Partial<Record<"--header-button-font-size" | "--title-font-size" | "--item-font-size" | "--item-height", string>>) | undefined;
55
55
  tabIndex?: number | undefined;
56
56
  } & React.AriaAttributes & React.RefAttributes<PickerActions>>>;
@@ -133,4 +133,13 @@
133
133
  display: flex;
134
134
  justify-content: center;
135
135
  align-items: center;
136
+ }
137
+
138
+ .adm-picker-view-item-height-measure {
139
+ position: relative;
140
+ left: 0;
141
+ top: 0;
142
+ height: var(--item-height);
143
+ width: 0;
144
+ pointer-events: none;
136
145
  }
@@ -32,11 +32,12 @@ export const Wheel = memo(props => {
32
32
  }));
33
33
  const draggingRef = useRef(false);
34
34
  const rootRef = useRef(null);
35
+ const itemHeightMeasureRef = useRef(null);
35
36
  const itemHeight = useRef(34);
36
37
  useIsomorphicLayoutEffect(() => {
37
- const root = rootRef.current;
38
- if (!root) return;
39
- itemHeight.current = measureCSSLength(window.getComputedStyle(root).getPropertyValue('--item-height'));
38
+ const itemHeightMeasure = itemHeightMeasureRef.current;
39
+ if (!itemHeightMeasure) return;
40
+ itemHeight.current = measureCSSLength(window.getComputedStyle(itemHeightMeasure).getPropertyValue('height'));
40
41
  });
41
42
  useIsomorphicLayoutEffect(() => {
42
43
  if (draggingRef.current) return;
@@ -153,7 +154,10 @@ export const Wheel = memo(props => {
153
154
 
154
155
  return React.createElement("div", {
155
156
  className: `${classPrefix}-column`
156
- }, React.createElement(animated.div, {
157
+ }, React.createElement("div", {
158
+ className: `${classPrefix}-item-height-measure`,
159
+ ref: itemHeightMeasureRef
160
+ }), React.createElement(animated.div, {
157
161
  ref: rootRef,
158
162
  style: {
159
163
  translateY: y
@@ -1,7 +1,8 @@
1
1
  .adm-rate {
2
2
  --star-size: 48px;
3
3
  --active-color: #ffd21e;
4
- --inactive-color: var(--adm-color-border);
4
+ --inactive-color: #e5e5e5;
5
+ --inactive-color-half: #dbdbdb;
5
6
  display: inline-flex;
6
7
  touch-action: pan-y;
7
8
  -webkit-user-select: none;
@@ -38,4 +39,8 @@
38
39
 
39
40
  .adm-rate-star-readonly {
40
41
  cursor: unset;
42
+ }
43
+
44
+ .adm-rate.adm-rate-half .adm-rate-star-half:not(.adm-rate-star-active) {
45
+ color: var(--inactive-color-half);
41
46
  }
@@ -63,7 +63,9 @@ export const Rate = p => {
63
63
  filterTaps: true
64
64
  });
65
65
  return withNativeProps(props, React.createElement("div", Object.assign({
66
- className: classPrefix,
66
+ className: classNames(classPrefix, {
67
+ [`${classPrefix}-half`]: props.allowHalf
68
+ }),
67
69
  role: 'radiogroup',
68
70
  "aria-readonly": props.readOnly,
69
71
  ref: containerRef
@@ -7,6 +7,10 @@
7
7
  --checked-border: none;
8
8
  --border-radius: 4px;
9
9
  --padding: 16px 32px;
10
+ --gap: 16px;
11
+ ---gap: var(--gap);
12
+ ---gap-horizontal: var(--gap-horizontal, var(--gap));
13
+ ---gap-vertical: var(--gap-vertical, var(--gap));
10
14
  overflow: hidden;
11
15
  font-size: var(--adm-font-size-7);
12
16
  line-height: 1.4;
@@ -16,6 +20,12 @@
16
20
  --gap: 24px;
17
21
  }
18
22
 
23
+ .adm-selector .adm-grid {
24
+ --gap: var(---gap);
25
+ --gap-horizontal: var(---gap-horizontal);
26
+ --gap-vertical: var(---gap-vertical);
27
+ }
28
+
19
29
  .adm-selector-item {
20
30
  padding: var(--padding);
21
31
  position: relative;
@@ -1,5 +1,6 @@
1
1
  import React, { ReactNode } from 'react';
2
2
  import { NativeProps } from '../../utils/native-props';
3
+ import { GridProps } from '../grid';
3
4
  declare type SelectorValue = string | number;
4
5
  export interface SelectorOption<V> {
5
6
  label: ReactNode;
@@ -9,7 +10,7 @@ export interface SelectorOption<V> {
9
10
  }
10
11
  export declare type SelectorProps<V> = {
11
12
  options: SelectorOption<V>[];
12
- columns?: number;
13
+ columns?: GridProps['columns'];
13
14
  multiple?: boolean;
14
15
  disabled?: boolean;
15
16
  defaultValue?: V[];
@@ -18,6 +19,6 @@ export declare type SelectorProps<V> = {
18
19
  items: SelectorOption<V>[];
19
20
  }) => void;
20
21
  showCheckMark?: boolean;
21
- } & NativeProps<'--color' | '--checked-color' | '--text-color' | '--checked-text-color' | '--border' | '--checked-border' | '--border-radius' | '--padding'>;
22
+ } & NativeProps<'--color' | '--checked-color' | '--text-color' | '--checked-text-color' | '--border' | '--checked-border' | '--border-radius' | '--padding' | '--gap' | '--gap-vertical' | '--gap-horizontal'>;
22
23
  export declare const Selector: <V extends SelectorValue>(p: SelectorProps<V>) => React.ReactElement<any, string | React.JSXElementConstructor<any>>;
23
24
  export {};
@@ -4,7 +4,6 @@ import { withNativeProps } from '../../utils/native-props';
4
4
  import { mergeProps } from '../../utils/with-default-props';
5
5
  import Space from '../space';
6
6
  import Grid from '../grid';
7
- import { convertPx } from '../../utils/convert-px';
8
7
  import { usePropsValue } from '../../utils/use-props-value';
9
8
  import { CheckMark } from './check-mark';
10
9
  const classPrefix = `adm-selector`;
@@ -65,7 +64,6 @@ export const Selector = p => {
65
64
  }, !props.columns && React.createElement(Space, {
66
65
  wrap: true
67
66
  }, items), props.columns && React.createElement(Grid, {
68
- columns: props.columns,
69
- gap: convertPx(8)
67
+ columns: props.columns
70
68
  }, items)));
71
69
  };
@@ -105,12 +105,26 @@
105
105
  transform: translateX(-50%);
106
106
  }
107
107
 
108
- .adm-slider-disabled {
108
+ .adm-slider-disabled .adm-slider-mark,
109
+ .adm-slider-disabled .adm-slider-thumb-icon {
109
110
  opacity: 0.4;
110
111
  }
111
112
 
113
+ .adm-slider-disabled .adm-slider-tick-active::after,
114
+ .adm-slider-disabled .adm-slider-fill::after {
115
+ content: '';
116
+ position: absolute;
117
+ left: 0;
118
+ top: 0;
119
+ right: 0;
120
+ bottom: 0;
121
+ border-radius: inherit;
122
+ background-color: rgba(255, 255, 255, 0.6);
123
+ }
124
+
112
125
  .adm-slider-disabled .adm-slider-thumb {
113
126
  cursor: not-allowed;
127
+ box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.06);
114
128
  }
115
129
 
116
130
  .adm-slider-disabled .adm-slider-mark-text,
@@ -14,6 +14,7 @@ export declare type SliderProps = {
14
14
  range?: boolean;
15
15
  icon?: ReactNode;
16
16
  popover?: boolean | ((value: number) => ReactNode);
17
+ residentPopover?: boolean;
17
18
  onChange?: (value: SliderValue) => void;
18
19
  onAfterChange?: (value: SliderValue) => void;
19
20
  } & NativeProps<'--fill-color'>;
@@ -7,6 +7,7 @@ import Thumb from './thumb';
7
7
  import { mergeProps } from '../../utils/with-default-props';
8
8
  import { nearest } from '../../utils/nearest';
9
9
  import { usePropsValue } from '../../utils/use-props-value';
10
+ import { devWarning } from '../../utils/dev-log';
10
11
  const classPrefix = `adm-slider`;
11
12
  const defaultProps = {
12
13
  min: 0,
@@ -15,7 +16,8 @@ const defaultProps = {
15
16
  ticks: false,
16
17
  range: false,
17
18
  disabled: false,
18
- popover: false
19
+ popover: false,
20
+ residentPopover: false
19
21
  };
20
22
  export const Slider = p => {
21
23
  var _a;
@@ -49,8 +51,15 @@ export const Slider = p => {
49
51
  (_a = props.onAfterChange) === null || _a === void 0 ? void 0 : _a.call(props, reverseValue(value));
50
52
  }
51
53
 
54
+ let propsValue = props.value;
55
+
56
+ if (props.range && typeof props.value === 'number') {
57
+ devWarning('Slider', 'When `range` prop is enabled, the `value` prop should be an array, like: [0, 0]');
58
+ propsValue = [0, props.value];
59
+ }
60
+
52
61
  const [rawValue, setRawValue] = usePropsValue({
53
- value: props.value,
62
+ value: propsValue,
54
63
  defaultValue: (_a = props.defaultValue) !== null && _a !== void 0 ? _a : props.range ? [min, min] : min,
55
64
  onChange: props.onChange
56
65
  });
@@ -136,6 +145,7 @@ export const Slider = p => {
136
145
  trackRef: trackRef,
137
146
  icon: icon,
138
147
  popover: props.popover,
148
+ residentPopover: props.residentPopover,
139
149
  onDrag: (position, first, last) => {
140
150
  if (first) {
141
151
  dragLockRef.current += 1;
@@ -9,6 +9,7 @@ declare type ThumbProps = {
9
9
  trackRef: RefObject<HTMLDivElement>;
10
10
  icon?: React.ReactNode;
11
11
  popover: boolean | ((value: number) => ReactNode);
12
+ residentPopover: boolean;
12
13
  } & NativeProps;
13
14
  declare const Thumb: FC<ThumbProps>;
14
15
  export default Thumb;
@@ -11,8 +11,9 @@ const Thumb = props => {
11
11
  min,
12
12
  max,
13
13
  disabled,
14
- onDrag,
15
- icon
14
+ icon,
15
+ residentPopover,
16
+ onDrag
16
17
  } = props;
17
18
  const prevValue = useRef(value);
18
19
  const {
@@ -67,7 +68,7 @@ const Thumb = props => {
67
68
  }), renderPopoverContent ? React.createElement(Popover, {
68
69
  content: renderPopoverContent(value),
69
70
  placement: 'top',
70
- visible: dragging,
71
+ visible: residentPopover || dragging,
71
72
  getContainer: null,
72
73
  mode: 'dark'
73
74
  }, thumbElement) : thumbElement);