antd-mobile 5.22.0 → 5.24.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 (196) hide show
  1. package/2x/bundle/antd-mobile.cjs.development.js +953 -709
  2. package/2x/bundle/antd-mobile.cjs.js +8 -8
  3. package/2x/bundle/antd-mobile.compatible.umd.js +6991 -6789
  4. package/2x/bundle/antd-mobile.es.development.js +953 -709
  5. package/2x/bundle/antd-mobile.es.js +5666 -5497
  6. package/2x/bundle/antd-mobile.umd.development.js +953 -709
  7. package/2x/bundle/antd-mobile.umd.js +8 -8
  8. package/2x/bundle/style.css +137 -41
  9. package/2x/cjs/components/avatar/avatar.js +2 -2
  10. package/2x/cjs/components/calendar/calendar.d.ts +3 -5
  11. package/2x/cjs/components/calendar/calendar.js +27 -5
  12. package/2x/cjs/components/calendar/convert.d.ts +6 -0
  13. package/2x/cjs/components/calendar/convert.js +9 -0
  14. package/2x/cjs/components/dialog/dialog-action-button.d.ts +2 -2
  15. package/2x/cjs/components/ellipsis/ellipsis.js +16 -7
  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/footer/footer.css +60 -0
  19. package/2x/cjs/components/footer/footer.d.ts +19 -0
  20. package/2x/cjs/components/footer/footer.js +83 -0
  21. package/2x/cjs/components/footer/index.d.ts +4 -0
  22. package/2x/cjs/components/footer/index.js +13 -0
  23. package/2x/cjs/components/form/form-item.css +0 -1
  24. package/2x/cjs/components/form/form.css +9 -3
  25. package/2x/cjs/components/form/form.d.ts +2 -2
  26. package/2x/cjs/components/form/index.css +9 -4
  27. package/2x/cjs/components/form/index.d.ts +1 -1
  28. package/2x/cjs/components/image-uploader/image-uploader.d.ts +11 -1
  29. package/2x/cjs/components/image-uploader/image-uploader.js +42 -25
  30. package/2x/cjs/components/image-uploader/index.d.ts +1 -1
  31. package/2x/cjs/components/image-uploader/preview-item.js +5 -0
  32. package/2x/cjs/components/image-viewer/slides.js +2 -2
  33. package/2x/cjs/components/page-indicator/page-indicator.css +1 -0
  34. package/2x/cjs/components/picker/index.d.ts +2 -2
  35. package/2x/cjs/components/picker/picker.d.ts +1 -1
  36. package/2x/cjs/components/picker-view/picker-view.css +9 -0
  37. package/2x/cjs/components/picker-view/wheel.js +8 -4
  38. package/2x/cjs/components/popover/popover.js +2 -2
  39. package/2x/cjs/components/rate/rate.css +6 -1
  40. package/2x/cjs/components/rate/rate.js +3 -1
  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/stepper/stepper.js +2 -1
  47. package/2x/cjs/components/swiper/swiper.js +9 -0
  48. package/2x/cjs/components/toast/toast.css +4 -3
  49. package/2x/cjs/index.d.ts +1 -0
  50. package/2x/cjs/index.js +8 -0
  51. package/2x/cjs/locales/zh-CN.js +1 -1
  52. package/2x/cjs/utils/measure-css-length.js +1 -1
  53. package/2x/es/components/avatar/avatar.js +1 -1
  54. package/2x/es/components/calendar/calendar.d.ts +3 -5
  55. package/2x/es/components/calendar/calendar.js +29 -6
  56. package/2x/es/components/calendar/convert.d.ts +6 -0
  57. package/2x/es/components/calendar/convert.js +4 -0
  58. package/2x/es/components/dialog/dialog-action-button.d.ts +2 -2
  59. package/2x/es/components/ellipsis/ellipsis.js +14 -8
  60. package/2x/es/components/empty/empty.d.ts +1 -0
  61. package/2x/es/components/empty/empty.js +2 -0
  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/form/form-item.css +0 -1
  68. package/2x/es/components/form/form.css +9 -3
  69. package/2x/es/components/form/form.d.ts +2 -2
  70. package/2x/es/components/form/index.css +9 -4
  71. package/2x/es/components/form/index.d.ts +1 -1
  72. package/2x/es/components/image-uploader/image-uploader.d.ts +11 -1
  73. package/2x/es/components/image-uploader/image-uploader.js +41 -25
  74. package/2x/es/components/image-uploader/index.d.ts +1 -1
  75. package/2x/es/components/image-uploader/preview-item.js +6 -1
  76. package/2x/es/components/image-viewer/slides.js +2 -2
  77. package/2x/es/components/page-indicator/page-indicator.css +1 -0
  78. package/2x/es/components/picker/index.d.ts +2 -2
  79. package/2x/es/components/picker/picker.d.ts +1 -1
  80. package/2x/es/components/picker-view/picker-view.css +9 -0
  81. package/2x/es/components/picker-view/wheel.js +8 -4
  82. package/2x/es/components/popover/popover.js +2 -2
  83. package/2x/es/components/rate/rate.css +6 -1
  84. package/2x/es/components/rate/rate.js +3 -1
  85. package/2x/es/components/slider/slider.css +15 -1
  86. package/2x/es/components/slider/slider.d.ts +1 -0
  87. package/2x/es/components/slider/slider.js +12 -2
  88. package/2x/es/components/slider/thumb.d.ts +1 -0
  89. package/2x/es/components/slider/thumb.js +4 -3
  90. package/2x/es/components/stepper/stepper.js +2 -1
  91. package/2x/es/components/swiper/swiper.js +9 -0
  92. package/2x/es/components/toast/toast.css +4 -3
  93. package/2x/es/index.d.ts +1 -0
  94. package/2x/es/index.js +1 -0
  95. package/2x/es/locales/zh-CN.js +1 -1
  96. package/2x/es/utils/measure-css-length.js +1 -1
  97. package/2x/package.json +2 -1
  98. package/2x/umd/antd-mobile.js +6991 -6789
  99. package/bundle/antd-mobile.cjs.development.js +953 -709
  100. package/bundle/antd-mobile.cjs.js +8 -8
  101. package/bundle/antd-mobile.compatible.umd.js +6991 -6789
  102. package/bundle/antd-mobile.es.development.js +953 -709
  103. package/bundle/antd-mobile.es.js +5666 -5497
  104. package/bundle/antd-mobile.umd.development.js +953 -709
  105. package/bundle/antd-mobile.umd.js +8 -8
  106. package/bundle/style.css +1 -1
  107. package/cjs/components/avatar/avatar.js +2 -2
  108. package/cjs/components/calendar/calendar.d.ts +3 -5
  109. package/cjs/components/calendar/calendar.js +27 -5
  110. package/cjs/components/calendar/convert.d.ts +6 -0
  111. package/cjs/components/calendar/convert.js +9 -0
  112. package/cjs/components/dialog/dialog-action-button.d.ts +2 -2
  113. package/cjs/components/ellipsis/ellipsis.js +16 -7
  114. package/cjs/components/empty/empty.d.ts +1 -0
  115. package/cjs/components/empty/empty.js +1 -0
  116. package/cjs/components/footer/footer.css +51 -0
  117. package/cjs/components/footer/footer.d.ts +19 -0
  118. package/cjs/components/footer/footer.js +83 -0
  119. package/cjs/components/footer/index.d.ts +4 -0
  120. package/cjs/components/footer/index.js +13 -0
  121. package/cjs/components/form/form-item.css +0 -1
  122. package/cjs/components/form/form.css +8 -3
  123. package/cjs/components/form/form.d.ts +2 -2
  124. package/cjs/components/form/index.css +8 -4
  125. package/cjs/components/form/index.d.ts +1 -1
  126. package/cjs/components/image-uploader/image-uploader.d.ts +11 -1
  127. package/cjs/components/image-uploader/image-uploader.js +42 -25
  128. package/cjs/components/image-uploader/index.d.ts +1 -1
  129. package/cjs/components/image-uploader/preview-item.js +5 -0
  130. package/cjs/components/image-viewer/slides.js +2 -2
  131. package/cjs/components/page-indicator/page-indicator.css +1 -0
  132. package/cjs/components/picker/index.d.ts +2 -2
  133. package/cjs/components/picker/picker.d.ts +1 -1
  134. package/cjs/components/picker-view/picker-view.css +8 -0
  135. package/cjs/components/picker-view/wheel.js +8 -4
  136. package/cjs/components/popover/popover.js +2 -2
  137. package/cjs/components/rate/rate.css +5 -1
  138. package/cjs/components/rate/rate.js +3 -1
  139. package/cjs/components/slider/slider.css +14 -1
  140. package/cjs/components/slider/slider.d.ts +1 -0
  141. package/cjs/components/slider/slider.js +13 -2
  142. package/cjs/components/slider/thumb.d.ts +1 -0
  143. package/cjs/components/slider/thumb.js +4 -3
  144. package/cjs/components/stepper/stepper.js +2 -1
  145. package/cjs/components/swiper/swiper.js +9 -0
  146. package/cjs/components/toast/toast.css +4 -3
  147. package/cjs/index.d.ts +1 -0
  148. package/cjs/index.js +8 -0
  149. package/cjs/locales/zh-CN.js +1 -1
  150. package/cjs/utils/measure-css-length.js +1 -1
  151. package/es/components/avatar/avatar.js +1 -1
  152. package/es/components/calendar/calendar.d.ts +3 -5
  153. package/es/components/calendar/calendar.js +29 -6
  154. package/es/components/calendar/convert.d.ts +6 -0
  155. package/es/components/calendar/convert.js +4 -0
  156. package/es/components/dialog/dialog-action-button.d.ts +2 -2
  157. package/es/components/ellipsis/ellipsis.js +14 -8
  158. package/es/components/empty/empty.d.ts +1 -0
  159. package/es/components/empty/empty.js +2 -0
  160. package/es/components/footer/footer.css +51 -0
  161. package/es/components/footer/footer.d.ts +19 -0
  162. package/es/components/footer/footer.js +66 -0
  163. package/es/components/footer/index.d.ts +4 -0
  164. package/es/components/footer/index.js +3 -0
  165. package/es/components/form/form-item.css +0 -1
  166. package/es/components/form/form.css +8 -3
  167. package/es/components/form/form.d.ts +2 -2
  168. package/es/components/form/index.css +8 -4
  169. package/es/components/form/index.d.ts +1 -1
  170. package/es/components/image-uploader/image-uploader.d.ts +11 -1
  171. package/es/components/image-uploader/image-uploader.js +41 -25
  172. package/es/components/image-uploader/index.d.ts +1 -1
  173. package/es/components/image-uploader/preview-item.js +6 -1
  174. package/es/components/image-viewer/slides.js +2 -2
  175. package/es/components/page-indicator/page-indicator.css +1 -0
  176. package/es/components/picker/index.d.ts +2 -2
  177. package/es/components/picker/picker.d.ts +1 -1
  178. package/es/components/picker-view/picker-view.css +8 -0
  179. package/es/components/picker-view/wheel.js +8 -4
  180. package/es/components/popover/popover.js +2 -2
  181. package/es/components/rate/rate.css +5 -1
  182. package/es/components/rate/rate.js +3 -1
  183. package/es/components/slider/slider.css +14 -1
  184. package/es/components/slider/slider.d.ts +1 -0
  185. package/es/components/slider/slider.js +12 -2
  186. package/es/components/slider/thumb.d.ts +1 -0
  187. package/es/components/slider/thumb.js +4 -3
  188. package/es/components/stepper/stepper.js +2 -1
  189. package/es/components/swiper/swiper.js +9 -0
  190. package/es/components/toast/toast.css +4 -3
  191. package/es/index.d.ts +1 -0
  192. package/es/index.js +1 -0
  193. package/es/locales/zh-CN.js +1 -1
  194. package/es/utils/measure-css-length.js +1 -1
  195. package/package.json +2 -1
  196. package/umd/antd-mobile.js +1 -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);
@@ -161,7 +161,8 @@ const Stepper = p => {
161
161
  role: 'spinbutton',
162
162
  "aria-valuenow": Number(inputValue),
163
163
  "aria-valuemax": max,
164
- "aria-valuemin": min
164
+ "aria-valuemin": min,
165
+ inputMode: 'decimal'
165
166
  })), _react.default.createElement(_button.default, {
166
167
  className: `${classPrefix}-plus`,
167
168
  onClick: handlePlus,
@@ -50,8 +50,10 @@ const defaultProps = {
50
50
  stuckAtBoundary: true,
51
51
  rubberband: true
52
52
  };
53
+ let currentUid;
53
54
  const Swiper = (0, _react.forwardRef)((0, _stagedComponents.staged)((p, ref) => {
54
55
  const props = (0, _withDefaultProps.mergeProps)(defaultProps, p);
56
+ const [uid] = (0, _react.useState)({});
55
57
  const isVertical = props.direction === 'vertical';
56
58
  const slideRatio = props.slideSize / 100;
57
59
  const offsetRatio = props.trackOffset / 100;
@@ -153,6 +155,13 @@ const Swiper = (0, _react.forwardRef)((0, _stagedComponents.staged)((p, ref) =>
153
155
  const bind = (0, _react2.useDrag)(state => {
154
156
  dragCancelRef.current = state.cancel;
155
157
  if (!state.intentional) return;
158
+
159
+ if (state.first && !currentUid) {
160
+ currentUid = uid;
161
+ }
162
+
163
+ if (currentUid !== uid) return;
164
+ currentUid = state.last ? undefined : uid;
156
165
  const slidePixels = getSlidePixels();
157
166
  if (!slidePixels) return;
158
167
  const paramIndex = isVertical ? 1 : 0;
@@ -12,8 +12,7 @@
12
12
  left: 50%;
13
13
  transform: translate(-50%, -50%);
14
14
  width: auto;
15
- min-width: 96px;
16
- max-width: 200px;
15
+ max-width: 204px;
17
16
  max-height: 70%;
18
17
  overflow: auto;
19
18
  color: white;
@@ -27,9 +26,11 @@
27
26
  }
28
27
  .adm-toast-mask .adm-toast-main-text {
29
28
  padding: 12px;
29
+ min-width: 0px;
30
30
  }
31
31
  .adm-toast-mask .adm-toast-main-icon {
32
- padding: 35px 40px;
32
+ padding: 35px 12px;
33
+ min-width: 150px;
33
34
  }
34
35
  .adm-toast-mask .adm-toast-main-icon .adm-toast-icon {
35
36
  text-align: center;
package/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/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,9 +1,6 @@
1
1
  import React from 'react';
2
2
  import { NativeProps } from '../../utils/native-props';
3
- declare type Page = {
4
- month: number;
5
- year: number;
6
- };
3
+ import { Page } from './convert';
7
4
  export declare type CalendarRef = {
8
5
  jumpTo: (page: Page | ((page: Page) => Page)) => void;
9
6
  jumpToToday: () => void;
@@ -20,6 +17,8 @@ export declare type CalendarProps = {
20
17
  max?: Date;
21
18
  min?: Date;
22
19
  shouldDisableDate?: (date: Date) => boolean;
20
+ minPage?: Page;
21
+ maxPage?: Page;
23
22
  } & ({
24
23
  selectionMode?: undefined;
25
24
  value?: undefined;
@@ -37,4 +36,3 @@ export declare type CalendarProps = {
37
36
  onChange?: (val: [Date, Date] | null) => void;
38
37
  }) & NativeProps;
39
38
  export declare const Calendar: React.ForwardRefExoticComponent<CalendarProps & React.RefAttributes<CalendarRef>>;
40
- export {};
@@ -9,7 +9,7 @@ import { useConfig } from '../config-provider';
9
9
  import isoWeek from 'dayjs/plugin/isoWeek';
10
10
  import { useUpdateEffect } from 'ahooks';
11
11
  import { usePropsValue } from '../../utils/use-props-value';
12
- import { convertValueToRange } from './convert';
12
+ import { convertValueToRange, convertPageToDayjs } from './convert';
13
13
  dayjs.extend(isoWeek);
14
14
  const classPrefix = 'adm-calendar';
15
15
  const defaultProps = {
@@ -67,35 +67,58 @@ export const Calendar = forwardRef((p, ref) => {
67
67
  page = pageOrPageGenerator;
68
68
  }
69
69
 
70
- setCurrent(dayjs().year(page.year).month(page.month - 1).date(1));
70
+ setCurrent(convertPageToDayjs(page));
71
71
  },
72
72
  jumpToToday: () => {
73
73
  setCurrent(dayjs().date(1));
74
74
  }
75
75
  }));
76
+
77
+ const handlePageChange = (action, num, type) => {
78
+ const nxtCurrent = current[action](num, type);
79
+
80
+ if (action === 'subtract' && props.minPage) {
81
+ const minPage = convertPageToDayjs(props.minPage);
82
+
83
+ if (nxtCurrent.isBefore(minPage, type)) {
84
+ return;
85
+ }
86
+ }
87
+
88
+ if (action === 'add' && props.maxPage) {
89
+ const maxPage = convertPageToDayjs(props.maxPage);
90
+
91
+ if (nxtCurrent.isAfter(maxPage, type)) {
92
+ return;
93
+ }
94
+ }
95
+
96
+ setCurrent(current[action](num, type));
97
+ };
98
+
76
99
  const header = React.createElement("div", {
77
100
  className: `${classPrefix}-header`
78
101
  }, React.createElement("a", {
79
102
  className: `${classPrefix}-arrow-button ${classPrefix}-arrow-button-year`,
80
103
  onClick: () => {
81
- setCurrent(current.subtract(1, 'year'));
104
+ handlePageChange('subtract', 1, 'year');
82
105
  }
83
106
  }, props.prevYearButton), React.createElement("a", {
84
107
  className: `${classPrefix}-arrow-button ${classPrefix}-arrow-button-month`,
85
108
  onClick: () => {
86
- setCurrent(current.subtract(1, 'month'));
109
+ handlePageChange('subtract', 1, 'month');
87
110
  }
88
111
  }, props.prevMonthButton), React.createElement("div", {
89
112
  className: `${classPrefix}-title`
90
113
  }, locale.Calendar.renderYearAndMonth(current.year(), current.month() + 1)), React.createElement("a", {
91
114
  className: classNames(`${classPrefix}-arrow-button`, `${classPrefix}-arrow-button-right`, `${classPrefix}-arrow-button-right-month`),
92
115
  onClick: () => {
93
- setCurrent(current.add(1, 'month'));
116
+ handlePageChange('add', 1, 'month');
94
117
  }
95
118
  }, props.nextMonthButton), React.createElement("a", {
96
119
  className: classNames(`${classPrefix}-arrow-button`, `${classPrefix}-arrow-button-right`, `${classPrefix}-arrow-button-right-year`),
97
120
  onClick: () => {
98
- setCurrent(current.add(1, 'year'));
121
+ handlePageChange('add', 1, 'year');
99
122
  }
100
123
  }, props.nextYearButton));
101
124
  const maxDay = useMemo(() => props.max && dayjs(props.max), [props.max]);
@@ -1,2 +1,8 @@
1
+ import dayjs from 'dayjs';
1
2
  export declare type DateRange = [Date, Date] | null;
3
+ export declare type Page = {
4
+ month: number;
5
+ year: number;
6
+ };
2
7
  export declare function convertValueToRange(selectionMode: 'single' | 'range' | undefined, value: Date | [Date, Date] | null): DateRange;
8
+ export declare function convertPageToDayjs(page: Page): dayjs.Dayjs;
@@ -1,3 +1,4 @@
1
+ import dayjs from 'dayjs';
1
2
  export function convertValueToRange(selectionMode, value) {
2
3
  if (selectionMode === undefined) {
3
4
  return null;
@@ -12,4 +13,7 @@ export function convertValueToRange(selectionMode, value) {
12
13
  }
13
14
 
14
15
  return [value, value];
16
+ }
17
+ export function convertPageToDayjs(page) {
18
+ return dayjs().year(page.year).month(page.month - 1).date(1);
15
19
  }
@@ -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;
@@ -1,4 +1,5 @@
1
- import React, { useRef, useState } from 'react';
1
+ import React, { useMemo, useRef, useState } from 'react';
2
+ import runes from 'runes';
2
3
  import { mergeProps } from '../../utils/with-default-props';
3
4
  import { withNativeProps } from '../../utils/native-props';
4
5
  import { useResizeEffect } from '../../utils/use-resize-effect';
@@ -19,6 +20,11 @@ export const Ellipsis = p => {
19
20
  const [ellipsised, setEllipsised] = useState({});
20
21
  const [expanded, setExpanded] = useState(false);
21
22
  const [exceeded, setExceeded] = useState(false);
23
+ const chars = useMemo(() => runes(props.content), [props.content]);
24
+
25
+ function getSubString(start, end) {
26
+ return chars.slice(start, end).join('');
27
+ }
22
28
 
23
29
  function calcEllipsised() {
24
30
  const root = rootRef.current;
@@ -57,11 +63,11 @@ export const Ellipsis = p => {
57
63
  if (right - left <= 1) {
58
64
  if (props.direction === 'end') {
59
65
  return {
60
- leading: props.content.slice(0, left) + '...'
66
+ leading: getSubString(0, left) + '...'
61
67
  };
62
68
  } else {
63
69
  return {
64
- tailing: '...' + props.content.slice(right, end)
70
+ tailing: '...' + getSubString(right, end)
65
71
  };
66
72
  }
67
73
  }
@@ -69,9 +75,9 @@ export const Ellipsis = p => {
69
75
  const middle = Math.round((left + right) / 2);
70
76
 
71
77
  if (props.direction === 'end') {
72
- container.innerText = props.content.slice(0, middle) + '...' + actionText;
78
+ container.innerText = getSubString(0, middle) + '...' + actionText;
73
79
  } else {
74
- container.innerText = actionText + '...' + props.content.slice(middle, end);
80
+ container.innerText = actionText + '...' + getSubString(middle, end);
75
81
  }
76
82
 
77
83
  if (container.offsetHeight <= maxHeight) {
@@ -92,14 +98,14 @@ export const Ellipsis = p => {
92
98
  function checkMiddle(leftPart, rightPart) {
93
99
  if (leftPart[1] - leftPart[0] <= 1 && rightPart[1] - rightPart[0] <= 1) {
94
100
  return {
95
- leading: props.content.slice(0, leftPart[0]) + '...',
96
- tailing: '...' + props.content.slice(rightPart[1], end)
101
+ leading: getSubString(0, leftPart[0]) + '...',
102
+ tailing: '...' + getSubString(rightPart[1], end)
97
103
  };
98
104
  }
99
105
 
100
106
  const leftPartMiddle = Math.floor((leftPart[0] + leftPart[1]) / 2);
101
107
  const rightPartMiddle = Math.ceil((rightPart[0] + rightPart[1]) / 2);
102
- container.innerText = props.content.slice(0, leftPartMiddle) + '...' + actionText + '...' + props.content.slice(rightPartMiddle, end);
108
+ container.innerText = getSubString(0, leftPartMiddle) + '...' + actionText + '...' + getSubString(rightPartMiddle, end);
103
109
 
104
110
  if (container.offsetHeight <= maxHeight) {
105
111
  return checkMiddle([leftPartMiddle, leftPart[1]], [rightPart[0], rightPartMiddle]);
@@ -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,51 @@
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
+ .adm-footer-label {
10
+ width: 100%;
11
+ }
12
+ .adm-footer-label .adm-divider.adm-divider {
13
+ color: var(--adm-color-light);
14
+ }
15
+ .adm-footer-links {
16
+ margin: 8px 0;
17
+ color: var(--adm-color-primary);
18
+ white-space: nowrap;
19
+ }
20
+ .adm-footer-links a {
21
+ text-decoration: none;
22
+ }
23
+ .adm-footer-content {
24
+ display: flex;
25
+ align-items: center;
26
+ margin: 8px 0;
27
+ color: var(--adm-color-light);
28
+ }
29
+ .adm-footer-chips {
30
+ display: flex;
31
+ align-items: center;
32
+ white-space: nowrap;
33
+ margin: 8px 0;
34
+ }
35
+ .adm-footer-chip {
36
+ white-space: nowrap;
37
+ margin-right: 20px;
38
+ font-size: 12px;
39
+ background-color: var(--adm-color-box);
40
+ color: var(--adm-color-weak);
41
+ padding: 4px 12px;
42
+ border-radius: 100px;
43
+ }
44
+ .adm-footer-chip-link {
45
+ cursor: pointer;
46
+ background-color: #e7f1ff;
47
+ color: var(--adm-color-primary);
48
+ }
49
+ .adm-footer-chip:last-child {
50
+ margin-right: 0;
51
+ }
@@ -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;
@@ -54,7 +54,6 @@
54
54
  }
55
55
  .adm-form-item.adm-form-item-horizontal.adm-list-item {
56
56
  --align-items: stretch;
57
- --prefix-width: 6.8em;
58
57
  }
59
58
  .adm-form-item.adm-form-item-horizontal .adm-list-item-content-prefix {
60
59
  padding-top: 12px;
@@ -1,10 +1,12 @@
1
1
  .adm-form {
2
- --border-inner: solid 1px var(--adm-color-border);
3
- --border-top: solid 1px var(--adm-color-border);
4
- --border-bottom: solid 1px var(--adm-color-border);
2
+ --border-inner: solid 1px var(--adm-border-color);
3
+ --border-top: solid 1px var(--adm-border-color);
4
+ --border-bottom: solid 1px var(--adm-border-color);
5
+ --prefix-width: 6.8em;
5
6
  ---border-inner: var(--border-inner);
6
7
  ---border-top: var(--border-top);
7
8
  ---border-bottom: var(--border-bottom);
9
+ ---prefix-width: var(--prefix-width);
8
10
  }
9
11
  .adm-form .adm-list.adm-list {
10
12
  --padding-left: 16px;
@@ -16,6 +18,9 @@
16
18
  .adm-form .adm-form-footer {
17
19
  padding: 20px 12px;
18
20
  }
21
+ .adm-form .adm-form-item-horizontal.adm-list-item {
22
+ --prefix-width: var(---prefix-width);
23
+ }
19
24
  .adm-form-list-operation {
20
25
  text-align: center;
21
26
  color: #1677ff;
@@ -4,13 +4,13 @@ import { ListProps } from '../list';
4
4
  import type { FormProps as RcFormProps, FormInstance as RCFormInstance } from 'rc-field-form';
5
5
  import { FormContextType } from './context';
6
6
  export declare type FormInstance = Pick<RCFormInstance, 'getFieldValue' | 'getFieldsValue' | 'getFieldError' | 'getFieldsError' | 'isFieldTouched' | 'isFieldsTouched' | 'resetFields' | 'setFields' | 'setFieldsValue' | 'submit' | 'validateFields'>;
7
- export declare type FormProps = Pick<RcFormProps, 'form' | 'initialValues' | 'name' | 'preserve' | 'validateMessages' | 'validateTrigger' | 'onFieldsChange' | 'onFinish' | 'onFinishFailed' | 'onValuesChange' | 'children'> & NativeProps<'--border-inner' | '--border-top' | '--border-bottom'> & Partial<FormContextType> & {
7
+ export declare type FormProps = Pick<RcFormProps, 'form' | 'initialValues' | 'name' | 'preserve' | 'validateMessages' | 'validateTrigger' | 'onFieldsChange' | 'onFinish' | 'onFinishFailed' | 'onValuesChange' | 'children'> & NativeProps<'--border-inner' | '--border-top' | '--border-bottom' | '--prefix-width'> & Partial<FormContextType> & {
8
8
  footer?: ReactNode;
9
9
  mode?: ListProps['mode'];
10
10
  };
11
11
  export declare const Form: React.ForwardRefExoticComponent<Pick<RcFormProps<any>, "children" | "form" | "name" | "initialValues" | "preserve" | "validateMessages" | "validateTrigger" | "onFieldsChange" | "onFinish" | "onFinishFailed" | "onValuesChange"> & {
12
12
  className?: string | undefined;
13
- style?: (React.CSSProperties & Partial<Record<"--border-bottom" | "--border-inner" | "--border-top", string>>) | undefined;
13
+ style?: (React.CSSProperties & Partial<Record<"--border-bottom" | "--border-inner" | "--border-top" | "--prefix-width", string>>) | undefined;
14
14
  tabIndex?: number | undefined;
15
15
  } & React.AriaAttributes & Partial<FormContextType> & {
16
16
  footer?: ReactNode;
@@ -1,10 +1,12 @@
1
1
  .adm-form {
2
- --border-inner: solid 1px var(--adm-color-border);
3
- --border-top: solid 1px var(--adm-color-border);
4
- --border-bottom: solid 1px var(--adm-color-border);
2
+ --border-inner: solid 1px var(--adm-border-color);
3
+ --border-top: solid 1px var(--adm-border-color);
4
+ --border-bottom: solid 1px var(--adm-border-color);
5
+ --prefix-width: 6.8em;
5
6
  ---border-inner: var(--border-inner);
6
7
  ---border-top: var(--border-top);
7
8
  ---border-bottom: var(--border-bottom);
9
+ ---prefix-width: var(--prefix-width);
8
10
  }
9
11
  .adm-form .adm-list.adm-list {
10
12
  --padding-left: 16px;
@@ -16,6 +18,9 @@
16
18
  .adm-form .adm-form-footer {
17
19
  padding: 20px 12px;
18
20
  }
21
+ .adm-form .adm-form-item-horizontal.adm-list-item {
22
+ --prefix-width: var(---prefix-width);
23
+ }
19
24
  .adm-form-list-operation {
20
25
  text-align: center;
21
26
  color: #1677ff;
@@ -76,7 +81,6 @@
76
81
  }
77
82
  .adm-form-item.adm-form-item-horizontal.adm-list-item {
78
83
  --align-items: stretch;
79
- --prefix-width: 6.8em;
80
84
  }
81
85
  .adm-form-item.adm-form-item-horizontal .adm-list-item-content-prefix {
82
86
  padding-top: 12px;
@@ -9,7 +9,7 @@ export type { ValidateMessages, FieldData, NamePath, } from 'rc-field-form/es/in
9
9
  export type { FormArrayField, FormArrayOperation, FormArrayProps, } from './form-array';
10
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"> & {
11
11
  className?: string | undefined;
12
- style?: (import("react").CSSProperties & Partial<Record<"--border-bottom" | "--border-inner" | "--border-top", string>>) | undefined;
12
+ style?: (import("react").CSSProperties & Partial<Record<"--border-bottom" | "--border-inner" | "--border-top" | "--prefix-width", string>>) | undefined;
13
13
  tabIndex?: number | undefined;
14
14
  } & import("react").AriaAttributes & Partial<import("./context").FormContextType> & {
15
15
  footer?: import("react").ReactNode;
@@ -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 {};