antd-mobile 5.22.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 (144) hide show
  1. package/2x/bundle/antd-mobile.cjs.development.js +803 -711
  2. package/2x/bundle/antd-mobile.cjs.js +8 -8
  3. package/2x/bundle/antd-mobile.compatible.umd.js +6831 -6752
  4. package/2x/bundle/antd-mobile.es.development.js +803 -711
  5. package/2x/bundle/antd-mobile.es.js +5266 -5200
  6. package/2x/bundle/antd-mobile.umd.development.js +803 -711
  7. package/2x/bundle/antd-mobile.umd.js +8 -8
  8. package/2x/bundle/style.css +128 -37
  9. package/2x/cjs/components/avatar/avatar.js +2 -2
  10. package/2x/cjs/components/dialog/dialog-action-button.d.ts +2 -2
  11. package/2x/cjs/components/empty/empty.d.ts +1 -0
  12. package/2x/cjs/components/empty/empty.js +1 -0
  13. package/2x/cjs/components/footer/footer.css +60 -0
  14. package/2x/cjs/components/footer/footer.d.ts +19 -0
  15. package/2x/cjs/components/footer/footer.js +83 -0
  16. package/2x/cjs/components/footer/index.d.ts +4 -0
  17. package/2x/cjs/components/footer/index.js +13 -0
  18. package/2x/cjs/components/image-uploader/image-uploader.d.ts +11 -1
  19. package/2x/cjs/components/image-uploader/image-uploader.js +42 -25
  20. package/2x/cjs/components/image-uploader/index.d.ts +1 -1
  21. package/2x/cjs/components/image-uploader/preview-item.js +5 -0
  22. package/2x/cjs/components/image-viewer/slides.js +2 -2
  23. package/2x/cjs/components/page-indicator/page-indicator.css +1 -0
  24. package/2x/cjs/components/picker/index.d.ts +2 -2
  25. package/2x/cjs/components/picker/picker.d.ts +1 -1
  26. package/2x/cjs/components/picker-view/picker-view.css +9 -0
  27. package/2x/cjs/components/picker-view/wheel.js +8 -4
  28. package/2x/cjs/components/rate/rate.css +6 -1
  29. package/2x/cjs/components/rate/rate.js +3 -1
  30. package/2x/cjs/components/slider/slider.css +15 -1
  31. package/2x/cjs/components/slider/slider.d.ts +1 -0
  32. package/2x/cjs/components/slider/slider.js +13 -2
  33. package/2x/cjs/components/slider/thumb.d.ts +1 -0
  34. package/2x/cjs/components/slider/thumb.js +4 -3
  35. package/2x/cjs/components/toast/toast.css +4 -3
  36. package/2x/cjs/index.d.ts +1 -0
  37. package/2x/cjs/index.js +8 -0
  38. package/2x/cjs/locales/zh-CN.js +1 -1
  39. package/2x/cjs/utils/measure-css-length.js +1 -1
  40. package/2x/es/components/avatar/avatar.js +1 -1
  41. package/2x/es/components/dialog/dialog-action-button.d.ts +2 -2
  42. package/2x/es/components/empty/empty.d.ts +1 -0
  43. package/2x/es/components/empty/empty.js +2 -0
  44. package/2x/es/components/footer/footer.css +60 -0
  45. package/2x/es/components/footer/footer.d.ts +19 -0
  46. package/2x/es/components/footer/footer.js +66 -0
  47. package/2x/es/components/footer/index.d.ts +4 -0
  48. package/2x/es/components/footer/index.js +3 -0
  49. package/2x/es/components/image-uploader/image-uploader.d.ts +11 -1
  50. package/2x/es/components/image-uploader/image-uploader.js +41 -25
  51. package/2x/es/components/image-uploader/index.d.ts +1 -1
  52. package/2x/es/components/image-uploader/preview-item.js +6 -1
  53. package/2x/es/components/image-viewer/slides.js +2 -2
  54. package/2x/es/components/page-indicator/page-indicator.css +1 -0
  55. package/2x/es/components/picker/index.d.ts +2 -2
  56. package/2x/es/components/picker/picker.d.ts +1 -1
  57. package/2x/es/components/picker-view/picker-view.css +9 -0
  58. package/2x/es/components/picker-view/wheel.js +8 -4
  59. package/2x/es/components/rate/rate.css +6 -1
  60. package/2x/es/components/rate/rate.js +3 -1
  61. package/2x/es/components/slider/slider.css +15 -1
  62. package/2x/es/components/slider/slider.d.ts +1 -0
  63. package/2x/es/components/slider/slider.js +12 -2
  64. package/2x/es/components/slider/thumb.d.ts +1 -0
  65. package/2x/es/components/slider/thumb.js +4 -3
  66. package/2x/es/components/toast/toast.css +4 -3
  67. package/2x/es/index.d.ts +1 -0
  68. package/2x/es/index.js +1 -0
  69. package/2x/es/locales/zh-CN.js +1 -1
  70. package/2x/es/utils/measure-css-length.js +1 -1
  71. package/2x/package.json +1 -1
  72. package/2x/umd/antd-mobile.js +6831 -6752
  73. package/bundle/antd-mobile.cjs.development.js +803 -711
  74. package/bundle/antd-mobile.cjs.js +8 -8
  75. package/bundle/antd-mobile.compatible.umd.js +6831 -6752
  76. package/bundle/antd-mobile.es.development.js +803 -711
  77. package/bundle/antd-mobile.es.js +5266 -5200
  78. package/bundle/antd-mobile.umd.development.js +803 -711
  79. package/bundle/antd-mobile.umd.js +8 -8
  80. package/bundle/style.css +1 -1
  81. package/cjs/components/avatar/avatar.js +2 -2
  82. package/cjs/components/dialog/dialog-action-button.d.ts +2 -2
  83. package/cjs/components/empty/empty.d.ts +1 -0
  84. package/cjs/components/empty/empty.js +1 -0
  85. package/cjs/components/footer/footer.css +51 -0
  86. package/cjs/components/footer/footer.d.ts +19 -0
  87. package/cjs/components/footer/footer.js +83 -0
  88. package/cjs/components/footer/index.d.ts +4 -0
  89. package/cjs/components/footer/index.js +13 -0
  90. package/cjs/components/image-uploader/image-uploader.d.ts +11 -1
  91. package/cjs/components/image-uploader/image-uploader.js +42 -25
  92. package/cjs/components/image-uploader/index.d.ts +1 -1
  93. package/cjs/components/image-uploader/preview-item.js +5 -0
  94. package/cjs/components/image-viewer/slides.js +2 -2
  95. package/cjs/components/page-indicator/page-indicator.css +1 -0
  96. package/cjs/components/picker/index.d.ts +2 -2
  97. package/cjs/components/picker/picker.d.ts +1 -1
  98. package/cjs/components/picker-view/picker-view.css +8 -0
  99. package/cjs/components/picker-view/wheel.js +8 -4
  100. package/cjs/components/rate/rate.css +5 -1
  101. package/cjs/components/rate/rate.js +3 -1
  102. package/cjs/components/slider/slider.css +14 -1
  103. package/cjs/components/slider/slider.d.ts +1 -0
  104. package/cjs/components/slider/slider.js +13 -2
  105. package/cjs/components/slider/thumb.d.ts +1 -0
  106. package/cjs/components/slider/thumb.js +4 -3
  107. package/cjs/components/toast/toast.css +4 -3
  108. package/cjs/index.d.ts +1 -0
  109. package/cjs/index.js +8 -0
  110. package/cjs/locales/zh-CN.js +1 -1
  111. package/cjs/utils/measure-css-length.js +1 -1
  112. package/es/components/avatar/avatar.js +1 -1
  113. package/es/components/dialog/dialog-action-button.d.ts +2 -2
  114. package/es/components/empty/empty.d.ts +1 -0
  115. package/es/components/empty/empty.js +2 -0
  116. package/es/components/footer/footer.css +51 -0
  117. package/es/components/footer/footer.d.ts +19 -0
  118. package/es/components/footer/footer.js +66 -0
  119. package/es/components/footer/index.d.ts +4 -0
  120. package/es/components/footer/index.js +3 -0
  121. package/es/components/image-uploader/image-uploader.d.ts +11 -1
  122. package/es/components/image-uploader/image-uploader.js +41 -25
  123. package/es/components/image-uploader/index.d.ts +1 -1
  124. package/es/components/image-uploader/preview-item.js +6 -1
  125. package/es/components/image-viewer/slides.js +2 -2
  126. package/es/components/page-indicator/page-indicator.css +1 -0
  127. package/es/components/picker/index.d.ts +2 -2
  128. package/es/components/picker/picker.d.ts +1 -1
  129. package/es/components/picker-view/picker-view.css +8 -0
  130. package/es/components/picker-view/wheel.js +8 -4
  131. package/es/components/rate/rate.css +5 -1
  132. package/es/components/rate/rate.js +3 -1
  133. package/es/components/slider/slider.css +14 -1
  134. package/es/components/slider/slider.d.ts +1 -0
  135. package/es/components/slider/slider.js +12 -2
  136. package/es/components/slider/thumb.d.ts +1 -0
  137. package/es/components/slider/thumb.js +4 -3
  138. package/es/components/toast/toast.css +4 -3
  139. package/es/index.d.ts +1 -0
  140. package/es/index.js +1 -0
  141. package/es/locales/zh-CN.js +1 -1
  142. package/es/utils/measure-css-length.js +1 -1
  143. package/package.json +1 -1
  144. package/umd/antd-mobile.js +1 -1
@@ -54,11 +54,12 @@ const Wheel = (0, _react.memo)(props => {
54
54
  }));
55
55
  const draggingRef = (0, _react.useRef)(false);
56
56
  const rootRef = (0, _react.useRef)(null);
57
+ const itemHeightMeasureRef = (0, _react.useRef)(null);
57
58
  const itemHeight = (0, _react.useRef)(34);
58
59
  (0, _ahooks.useIsomorphicLayoutEffect)(() => {
59
- const root = rootRef.current;
60
- if (!root) return;
61
- itemHeight.current = (0, _measureCssLength.measureCSSLength)(window.getComputedStyle(root).getPropertyValue('--item-height'));
60
+ const itemHeightMeasure = itemHeightMeasureRef.current;
61
+ if (!itemHeightMeasure) return;
62
+ itemHeight.current = (0, _measureCssLength.measureCSSLength)(window.getComputedStyle(itemHeightMeasure).getPropertyValue('height'));
62
63
  });
63
64
  (0, _ahooks.useIsomorphicLayoutEffect)(() => {
64
65
  if (draggingRef.current) return;
@@ -175,7 +176,10 @@ const Wheel = (0, _react.memo)(props => {
175
176
 
176
177
  return _react.default.createElement("div", {
177
178
  className: `${classPrefix}-column`
178
- }, _react.default.createElement(_web.animated.div, {
179
+ }, _react.default.createElement("div", {
180
+ className: `${classPrefix}-item-height-measure`,
181
+ ref: itemHeightMeasureRef
182
+ }), _react.default.createElement(_web.animated.div, {
179
183
  ref: rootRef,
180
184
  style: {
181
185
  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
  }
@@ -85,7 +85,9 @@ const Rate = p => {
85
85
  filterTaps: true
86
86
  });
87
87
  return (0, _nativeProps.withNativeProps)(props, _react.default.createElement("div", Object.assign({
88
- className: classPrefix,
88
+ className: (0, _classnames.default)(classPrefix, {
89
+ [`${classPrefix}-half`]: props.allowHalf
90
+ }),
89
91
  role: 'radiogroup',
90
92
  "aria-readonly": props.readOnly,
91
93
  ref: containerRef
@@ -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'>;
@@ -23,6 +23,8 @@ var _nearest = require("../../utils/nearest");
23
23
 
24
24
  var _usePropsValue = require("../../utils/use-props-value");
25
25
 
26
+ var _devLog = require("../../utils/dev-log");
27
+
26
28
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
29
 
28
30
  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); }
@@ -37,7 +39,8 @@ const defaultProps = {
37
39
  ticks: false,
38
40
  range: false,
39
41
  disabled: false,
40
- popover: false
42
+ popover: false,
43
+ residentPopover: false
41
44
  };
42
45
 
43
46
  const Slider = p => {
@@ -72,8 +75,15 @@ const Slider = p => {
72
75
  (_a = props.onAfterChange) === null || _a === void 0 ? void 0 : _a.call(props, reverseValue(value));
73
76
  }
74
77
 
78
+ let propsValue = props.value;
79
+
80
+ if (props.range && typeof props.value === 'number') {
81
+ (0, _devLog.devWarning)('Slider', 'When `range` prop is enabled, the `value` prop should be an array, like: [0, 0]');
82
+ propsValue = [0, props.value];
83
+ }
84
+
75
85
  const [rawValue, setRawValue] = (0, _usePropsValue.usePropsValue)({
76
- value: props.value,
86
+ value: propsValue,
77
87
  defaultValue: (_a = props.defaultValue) !== null && _a !== void 0 ? _a : props.range ? [min, min] : min,
78
88
  onChange: props.onChange
79
89
  });
@@ -159,6 +169,7 @@ const Slider = p => {
159
169
  trackRef: trackRef,
160
170
  icon: icon,
161
171
  popover: props.popover,
172
+ residentPopover: props.residentPopover,
162
173
  onDrag: (position, first, last) => {
163
174
  if (first) {
164
175
  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;
@@ -27,8 +27,9 @@ const Thumb = props => {
27
27
  min,
28
28
  max,
29
29
  disabled,
30
- onDrag,
31
- icon
30
+ icon,
31
+ residentPopover,
32
+ onDrag
32
33
  } = props;
33
34
  const prevValue = (0, _react.useRef)(value);
34
35
  const {
@@ -85,7 +86,7 @@ const Thumb = props => {
85
86
  }), renderPopoverContent ? _react.default.createElement(_popover.Popover, {
86
87
  content: renderPopoverContent(value),
87
88
  placement: 'top',
88
- visible: dragging,
89
+ visible: residentPopover || dragging,
89
90
  getContainer: null,
90
91
  mode: 'dark'
91
92
  }, thumbElement) : thumbElement);
@@ -13,8 +13,7 @@
13
13
  left: 50%;
14
14
  transform: translate(-50%, -50%);
15
15
  width: auto;
16
- min-width: 192px;
17
- max-width: 400px;
16
+ max-width: 408px;
18
17
  max-height: 70%;
19
18
  overflow: auto;
20
19
  color: white;
@@ -29,10 +28,12 @@
29
28
 
30
29
  .adm-toast-mask .adm-toast-main-text {
31
30
  padding: 24px;
31
+ min-width: 0;
32
32
  }
33
33
 
34
34
  .adm-toast-mask .adm-toast-main-icon {
35
- padding: 70px 80px;
35
+ padding: 70px 24px;
36
+ min-width: 300px;
36
37
  }
37
38
 
38
39
  .adm-toast-mask .adm-toast-main-icon .adm-toast-icon {
package/2x/cjs/index.d.ts CHANGED
@@ -79,5 +79,6 @@ export { default as Toast } from './components/toast';
79
79
  export { default as TreeSelect } from './components/tree-select';
80
80
  export { default as VirtualInput } from './components/virtual-input';
81
81
  export { default as WaterMark } from './components/water-mark';
82
+ export { default as Footer } from './components/footer';
82
83
  export { createErrorBlock } from './components/error-block';
83
84
  export { reduceMotion, restoreMotion } from './utils/reduce-and-restore-motion';
package/2x/cjs/index.js CHANGED
@@ -171,6 +171,12 @@ Object.defineProperty(exports, "FloatingPanel", {
171
171
  return _floatingPanel.default;
172
172
  }
173
173
  });
174
+ Object.defineProperty(exports, "Footer", {
175
+ enumerable: true,
176
+ get: function () {
177
+ return _footer.default;
178
+ }
179
+ });
174
180
  Object.defineProperty(exports, "Form", {
175
181
  enumerable: true,
176
182
  get: function () {
@@ -662,6 +668,8 @@ var _virtualInput = _interopRequireDefault(require("./components/virtual-input")
662
668
 
663
669
  var _waterMark = _interopRequireDefault(require("./components/water-mark"));
664
670
 
671
+ var _footer = _interopRequireDefault(require("./components/footer"));
672
+
665
673
  var _reduceAndRestoreMotion = require("./utils/reduce-and-restore-motion");
666
674
 
667
675
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -109,7 +109,7 @@ const zhCN = (0, _mergeLocale.mergeLocale)(_base.base, {
109
109
  clear: '清除'
110
110
  },
111
111
  Mask: {
112
- name: '遮罩层'
112
+ name: '背景蒙层'
113
113
  },
114
114
  Modal: {
115
115
  ok: '我知道了'
@@ -12,7 +12,7 @@ var _devLog = require("./dev-log");
12
12
  function measureCSSLength(raw) {
13
13
  if (raw === null || raw === undefined || raw === '') {
14
14
  if (_isDev.isDev) {
15
- (0, _devLog.devError)('Global', 'Seems like the you will encounter a style messed problem. Please check the browser environment to make sure it supports CSS variables.');
15
+ (0, _devLog.devError)('Global', 'Something went wrong when calculating CSS length. Please report an issue at https://github.com/ant-design/ant-design-mobile/issues/new/choose');
16
16
  }
17
17
 
18
18
  return 0;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { withNativeProps } from '../../utils/native-props';
3
- import { Image } from '../../index';
3
+ import Image from '../image';
4
4
  import { mergeProps } from '../../utils/with-default-props';
5
5
  import { Fallback } from './fallback';
6
6
  const classPrefix = 'adm-avatar';
@@ -1,8 +1,8 @@
1
- import { FC } from 'react';
1
+ import { FC, ReactNode } from 'react';
2
2
  import { NativeProps } from '../../utils/native-props';
3
3
  export declare type Action = {
4
4
  key: string | number;
5
- text: string;
5
+ text: ReactNode;
6
6
  disabled?: boolean;
7
7
  danger?: boolean;
8
8
  bold?: boolean;
@@ -5,4 +5,5 @@ export declare type EmptyProps = {
5
5
  imageStyle?: React.CSSProperties;
6
6
  description?: ReactNode;
7
7
  } & NativeProps;
8
+ /** @deprecated Empty has been deprecated and will be removed in the next major version. */
8
9
  export declare const Empty: React.FC<EmptyProps>;
@@ -3,6 +3,8 @@ import classNames from 'classnames';
3
3
  import { withNativeProps } from '../../utils/native-props';
4
4
  import { EmptyIcon } from './empty-icon';
5
5
  const classPrefix = `adm-empty`;
6
+ /** @deprecated Empty has been deprecated and will be removed in the next major version. */
7
+
6
8
  export const Empty = props => {
7
9
  function renderImageNode() {
8
10
  const {
@@ -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", {
@@ -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,
@@ -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
  }