antd-mobile 5.9.5 → 5.10.2

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 (135) hide show
  1. package/2x/cjs/components/capsule-tabs/capsule-tabs.js +3 -3
  2. package/2x/cjs/components/collapse/collapse.js +3 -3
  3. package/2x/cjs/components/divider/divider.css +19 -8
  4. package/2x/cjs/components/divider/divider.d.ts +1 -0
  5. package/2x/cjs/components/divider/divider.js +3 -2
  6. package/2x/cjs/components/form/form.js +3 -2
  7. package/2x/cjs/components/image-uploader/image-uploader.d.ts +2 -0
  8. package/2x/cjs/components/image-uploader/image-uploader.js +6 -2
  9. package/2x/cjs/components/image-uploader/preview-item.d.ts +2 -0
  10. package/2x/cjs/components/image-uploader/preview-item.js +3 -2
  11. package/2x/cjs/components/index-bar/index-bar.js +3 -3
  12. package/2x/cjs/components/jumbo-tabs/jumbo-tabs.js +3 -3
  13. package/2x/cjs/components/mask/mask.css +1 -0
  14. package/2x/cjs/components/mask/mask.js +8 -1
  15. package/2x/cjs/components/picker-view/picker-view.d.ts +1 -0
  16. package/2x/cjs/components/picker-view/wheel.js +3 -1
  17. package/2x/cjs/components/popover/popover-menu.js +2 -1
  18. package/2x/cjs/components/safe-area/safe-area.css +2 -2
  19. package/2x/cjs/components/side-bar/side-bar.js +3 -3
  20. package/2x/cjs/components/stepper/stepper.js +16 -9
  21. package/2x/cjs/components/swiper/swiper.js +1 -0
  22. package/2x/cjs/components/tab-bar/tab-bar.js +3 -3
  23. package/2x/cjs/components/tabs/tabs.js +3 -3
  24. package/2x/cjs/components/tree-select/multiple.js +2 -1
  25. package/2x/cjs/global/global.css +1 -0
  26. package/2x/cjs/global/theme.css +1 -0
  27. package/2x/cjs/locales/ko-KR.d.ts +102 -0
  28. package/2x/cjs/locales/ko-KR.js +115 -0
  29. package/2x/cjs/locales/zh-HK.js +56 -0
  30. package/2x/cjs/locales/zh-TW.js +56 -0
  31. package/2x/cjs/utils/traverse-react-node.d.ts +2 -0
  32. package/2x/cjs/utils/traverse-react-node.js +29 -0
  33. package/2x/es/components/capsule-tabs/capsule-tabs.js +2 -1
  34. package/2x/es/components/collapse/collapse.js +2 -1
  35. package/2x/es/components/divider/divider.css +19 -8
  36. package/2x/es/components/divider/divider.d.ts +1 -0
  37. package/2x/es/components/divider/divider.js +3 -2
  38. package/2x/es/components/form/form.js +2 -1
  39. package/2x/es/components/image-uploader/image-uploader.d.ts +2 -0
  40. package/2x/es/components/image-uploader/image-uploader.js +6 -2
  41. package/2x/es/components/image-uploader/preview-item.d.ts +2 -0
  42. package/2x/es/components/image-uploader/preview-item.js +3 -2
  43. package/2x/es/components/index-bar/index-bar.js +2 -1
  44. package/2x/es/components/jumbo-tabs/jumbo-tabs.js +2 -1
  45. package/2x/es/components/mask/mask.css +1 -0
  46. package/2x/es/components/mask/mask.js +8 -1
  47. package/2x/es/components/picker-view/picker-view.d.ts +1 -0
  48. package/2x/es/components/picker-view/wheel.js +3 -1
  49. package/2x/es/components/popover/popover-menu.js +2 -1
  50. package/2x/es/components/safe-area/safe-area.css +2 -2
  51. package/2x/es/components/side-bar/side-bar.js +2 -1
  52. package/2x/es/components/stepper/stepper.js +15 -9
  53. package/2x/es/components/swiper/swiper.js +1 -0
  54. package/2x/es/components/tab-bar/tab-bar.js +2 -1
  55. package/2x/es/components/tabs/tabs.js +2 -1
  56. package/2x/es/components/tree-select/multiple.js +2 -1
  57. package/2x/es/global/global.css +1 -0
  58. package/2x/es/global/theme.css +1 -0
  59. package/2x/es/locales/ko-KR.d.ts +102 -0
  60. package/2x/es/locales/ko-KR.js +105 -0
  61. package/2x/es/locales/zh-HK.js +56 -0
  62. package/2x/es/locales/zh-TW.js +56 -0
  63. package/2x/es/utils/traverse-react-node.d.ts +2 -0
  64. package/2x/es/utils/traverse-react-node.js +18 -0
  65. package/2x/package.json +5 -1
  66. package/bundle/antd-mobile.cjs.js +60 -25
  67. package/bundle/antd-mobile.es.js +59 -25
  68. package/bundle/style.css +22 -10
  69. package/cjs/components/capsule-tabs/capsule-tabs.js +3 -3
  70. package/cjs/components/collapse/collapse.js +3 -3
  71. package/cjs/components/divider/divider.css +18 -8
  72. package/cjs/components/divider/divider.d.ts +1 -0
  73. package/cjs/components/divider/divider.js +3 -2
  74. package/cjs/components/form/form.js +3 -2
  75. package/cjs/components/image-uploader/image-uploader.d.ts +2 -0
  76. package/cjs/components/image-uploader/image-uploader.js +6 -2
  77. package/cjs/components/image-uploader/preview-item.d.ts +2 -0
  78. package/cjs/components/image-uploader/preview-item.js +3 -2
  79. package/cjs/components/index-bar/index-bar.js +3 -3
  80. package/cjs/components/jumbo-tabs/jumbo-tabs.js +3 -3
  81. package/cjs/components/mask/mask.css +1 -0
  82. package/cjs/components/mask/mask.js +8 -1
  83. package/cjs/components/picker-view/picker-view.d.ts +1 -0
  84. package/cjs/components/picker-view/wheel.js +3 -1
  85. package/cjs/components/popover/popover-menu.js +2 -1
  86. package/cjs/components/safe-area/safe-area.css +2 -2
  87. package/cjs/components/side-bar/side-bar.js +3 -3
  88. package/cjs/components/stepper/stepper.js +16 -9
  89. package/cjs/components/swiper/swiper.js +1 -0
  90. package/cjs/components/tab-bar/tab-bar.js +3 -3
  91. package/cjs/components/tabs/tabs.js +3 -3
  92. package/cjs/components/tree-select/multiple.js +2 -1
  93. package/cjs/global/global.css +1 -0
  94. package/cjs/global/theme.css +1 -0
  95. package/cjs/locales/ko-KR.d.ts +102 -0
  96. package/cjs/locales/ko-KR.js +115 -0
  97. package/cjs/locales/zh-HK.js +56 -0
  98. package/cjs/locales/zh-TW.js +56 -0
  99. package/cjs/utils/traverse-react-node.d.ts +2 -0
  100. package/cjs/utils/traverse-react-node.js +29 -0
  101. package/es/components/capsule-tabs/capsule-tabs.js +2 -1
  102. package/es/components/collapse/collapse.js +2 -1
  103. package/es/components/divider/divider.css +18 -8
  104. package/es/components/divider/divider.d.ts +1 -0
  105. package/es/components/divider/divider.js +3 -2
  106. package/es/components/form/form.js +2 -1
  107. package/es/components/image-uploader/image-uploader.d.ts +2 -0
  108. package/es/components/image-uploader/image-uploader.js +6 -2
  109. package/es/components/image-uploader/preview-item.d.ts +2 -0
  110. package/es/components/image-uploader/preview-item.js +3 -2
  111. package/es/components/index-bar/index-bar.js +2 -1
  112. package/es/components/jumbo-tabs/jumbo-tabs.js +2 -1
  113. package/es/components/mask/mask.css +1 -0
  114. package/es/components/mask/mask.js +8 -1
  115. package/es/components/picker-view/picker-view.d.ts +1 -0
  116. package/es/components/picker-view/wheel.js +3 -1
  117. package/es/components/popover/popover-menu.js +2 -1
  118. package/es/components/safe-area/safe-area.css +2 -2
  119. package/es/components/side-bar/side-bar.js +2 -1
  120. package/es/components/stepper/stepper.js +15 -9
  121. package/es/components/swiper/swiper.js +1 -0
  122. package/es/components/tab-bar/tab-bar.js +2 -1
  123. package/es/components/tabs/tabs.js +2 -1
  124. package/es/components/tree-select/multiple.js +2 -1
  125. package/es/global/global.css +1 -0
  126. package/es/global/theme.css +1 -0
  127. package/es/locales/ko-KR.d.ts +102 -0
  128. package/es/locales/ko-KR.js +105 -0
  129. package/es/locales/zh-HK.js +56 -0
  130. package/es/locales/zh-TW.js +56 -0
  131. package/es/utils/traverse-react-node.d.ts +2 -0
  132. package/es/utils/traverse-react-node.js +18 -0
  133. package/package.json +5 -1
  134. package/umd/antd-mobile.js +1 -1
  135. package/umd/antd-mobile.js.LICENSE.txt +9 -0
@@ -7,6 +7,7 @@ import { mergeProps } from '../../utils/with-default-props';
7
7
  import { bound } from '../../utils/bound';
8
8
  import Input from '../input';
9
9
  import Button from '../button';
10
+ import Big from 'big.js';
10
11
  const classPrefix = `adm-stepper`;
11
12
  const defaultProps = {
12
13
  defaultValue: 0,
@@ -24,13 +25,13 @@ export const Stepper = p => {
24
25
  inputReadOnly
25
26
  } = props;
26
27
  const [value, setValue] = usePropsValue(props);
27
- const [inputValue, setInputValue] = useState(() => convertValueToText(value));
28
+ const [inputValue, setInputValue] = useState(() => convertValueToText(value, props.digits));
28
29
 
29
30
  function setValueWithCheck(v) {
30
31
  if (isNaN(v)) return;
31
32
  let target = bound(v, props.min, props.max);
32
33
 
33
- if (props.digits || props.digits === 0) {
34
+ if (props.digits !== undefined) {
34
35
  target = parseFloat(target.toFixed(props.digits));
35
36
  }
36
37
 
@@ -40,14 +41,14 @@ export const Stepper = p => {
40
41
  const [hasFocus, setHasFocus] = useState(false);
41
42
  useEffect(() => {
42
43
  if (!hasFocus) {
43
- setInputValue(convertValueToText(value));
44
+ setInputValue(convertValueToText(value, props.digits));
44
45
  }
45
46
  }, [hasFocus]);
46
47
  useEffect(() => {
47
48
  if (!hasFocus) {
48
- setInputValue(convertValueToText(value));
49
+ setInputValue(convertValueToText(value, props.digits));
49
50
  }
50
- }, [value]);
51
+ }, [value, props.digits]);
51
52
 
52
53
  const handleInputChange = v => {
53
54
  setInputValue(v);
@@ -65,11 +66,11 @@ export const Stepper = p => {
65
66
  };
66
67
 
67
68
  const handleMinus = () => {
68
- setValueWithCheck((value !== null && value !== void 0 ? value : 0) - step);
69
+ setValueWithCheck(Big(value !== null && value !== void 0 ? value : 0).minus(step).toNumber());
69
70
  };
70
71
 
71
72
  const handlePlus = () => {
72
- setValueWithCheck((value !== null && value !== void 0 ? value : 0) + step);
73
+ setValueWithCheck(Big(value !== null && value !== void 0 ? value : 0).add(step).toNumber());
73
74
  };
74
75
 
75
76
  const minusDisabled = () => {
@@ -137,9 +138,14 @@ export const Stepper = p => {
137
138
  }, React.createElement(AddOutline, null))));
138
139
  };
139
140
 
140
- function convertValueToText(value) {
141
+ function convertValueToText(value, digits) {
141
142
  if (value === null) return '';
142
- return value.toString();
143
+
144
+ if (digits !== undefined) {
145
+ return value.toFixed(digits);
146
+ } else {
147
+ return value.toString();
148
+ }
143
149
  }
144
150
 
145
151
  function convertTextToValue(text) {
@@ -101,6 +101,7 @@ export const Swiper = forwardRef(staged((p, ref) => {
101
101
  },
102
102
  onRest: () => {
103
103
  if (draggingRef.current) return;
104
+ if (!loop) return;
104
105
  const rawX = position.get();
105
106
  const totalWidth = 100 * count;
106
107
  const standardPosition = modulus(rawX, totalWidth);
@@ -5,6 +5,7 @@ import { mergeProps } from '../../utils/with-default-props';
5
5
  import Badge from '../badge';
6
6
  import SafeArea from '../safe-area';
7
7
  import { usePropsValue } from '../../utils/use-props-value';
8
+ import { traverseReactNode } from '../../utils/traverse-react-node';
8
9
  export const TabBarItem = () => {
9
10
  return null;
10
11
  };
@@ -18,7 +19,7 @@ export const TabBar = p => {
18
19
  const props = mergeProps(defaultProps, p);
19
20
  let firstActiveKey = null;
20
21
  const items = [];
21
- React.Children.forEach(props.children, (child, index) => {
22
+ traverseReactNode(props.children, (child, index) => {
22
23
  if (!React.isValidElement(child)) return;
23
24
  const key = child.key;
24
25
  if (typeof key !== 'string') return;
@@ -10,6 +10,7 @@ import { useResizeEffect } from '../../utils/use-resize-effect';
10
10
  import { mergeProps } from '../../utils/with-default-props';
11
11
  import { useIsomorphicUpdateLayoutEffect } from '../../utils/use-isomorphic-update-layout-effect';
12
12
  import { ShouldRender } from '../../utils/should-render';
13
+ import { traverseReactNode } from '../../utils/traverse-react-node';
13
14
  const classPrefix = `adm-tabs`;
14
15
  export const Tab = () => {
15
16
  return null;
@@ -27,7 +28,7 @@ export const Tabs = p => {
27
28
  const keyToIndexRecord = {};
28
29
  let firstActiveKey = null;
29
30
  const panes = [];
30
- React.Children.forEach(props.children, (child, index) => {
31
+ traverseReactNode(props.children, (child, index) => {
31
32
  if (!React.isValidElement(child)) return;
32
33
  const key = child.key;
33
34
  if (typeof key !== 'string') return;
@@ -137,7 +137,8 @@ export const Multiple = p => {
137
137
  walker(groupKeys);
138
138
  }
139
139
 
140
- groupKeys = groupKeys.filter(i => !unusedKeys.includes(i));
140
+ groupKeys = groupKeys.filter(i => !unusedKeys.includes(i)); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
141
+
141
142
  const groupOptions = groupKeys.map(i => optionsMap.get(i));
142
143
  setValue(groupKeys);
143
144
  (_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, groupKeys, groupOptions);
@@ -9,6 +9,7 @@
9
9
  --adm-border-color: #eeeeee;
10
10
  --adm-font-size-main: 13px;
11
11
  --adm-color-text: #333333;
12
+ --adm-hd: 1;
12
13
  --adm-font-family: -apple-system, blinkmacsystemfont, 'Helvetica Neue',
13
14
  helvetica, segoe ui, arial, roboto, 'PingFang SC', 'miui',
14
15
  'Hiragino Sans GB', 'Microsoft Yahei', sans-serif;
@@ -9,6 +9,7 @@
9
9
  --adm-border-color: #eeeeee;
10
10
  --adm-font-size-main: 13px;
11
11
  --adm-color-text: #333333;
12
+ --adm-hd: 1;
12
13
  --adm-font-family: -apple-system, blinkmacsystemfont, 'Helvetica Neue',
13
14
  helvetica, segoe ui, arial, roboto, 'PingFang SC', 'miui',
14
15
  'Hiragino Sans GB', 'Microsoft Yahei', sans-serif;
@@ -0,0 +1,102 @@
1
+ declare const koKR: {
2
+ locale: string;
3
+ common: {
4
+ confirm: string;
5
+ cancel: string;
6
+ loading: string;
7
+ };
8
+ Calendar: {
9
+ markItems: string[];
10
+ renderYearAndMonth: (year: number, month: number) => string;
11
+ };
12
+ Cascader: {
13
+ placeholder: string;
14
+ };
15
+ Dialog: {
16
+ ok: string;
17
+ };
18
+ ErrorBlock: {
19
+ default: {
20
+ title: string;
21
+ description: string;
22
+ };
23
+ busy: {
24
+ title: string;
25
+ description: string;
26
+ };
27
+ disconnected: {
28
+ title: string;
29
+ description: string;
30
+ };
31
+ empty: {
32
+ title: string;
33
+ description: string;
34
+ };
35
+ };
36
+ Form: {
37
+ required: string;
38
+ optional: string;
39
+ defaultValidateMessages: {
40
+ default: string;
41
+ required: string;
42
+ enum: string;
43
+ whitespace: string;
44
+ date: {
45
+ format: string;
46
+ parse: string;
47
+ invalid: string;
48
+ };
49
+ types: {
50
+ string: string;
51
+ method: string;
52
+ array: string;
53
+ object: string;
54
+ number: string;
55
+ date: string;
56
+ boolean: string;
57
+ integer: string;
58
+ float: string;
59
+ regexp: string;
60
+ email: string;
61
+ url: string;
62
+ hex: string;
63
+ };
64
+ string: {
65
+ len: string;
66
+ min: string;
67
+ max: string;
68
+ range: string;
69
+ };
70
+ number: {
71
+ len: string;
72
+ min: string;
73
+ max: string;
74
+ range: string;
75
+ };
76
+ array: {
77
+ len: string;
78
+ min: string;
79
+ max: string;
80
+ range: string;
81
+ };
82
+ pattern: {
83
+ mismatch: string;
84
+ };
85
+ };
86
+ };
87
+ ImageUploader: {
88
+ uploading: string;
89
+ };
90
+ Mask: {
91
+ name: string;
92
+ };
93
+ Modal: {
94
+ ok: string;
95
+ };
96
+ PullToRefresh: {
97
+ pulling: string;
98
+ canRelease: string;
99
+ complete: string;
100
+ };
101
+ };
102
+ export default koKR;
@@ -0,0 +1,105 @@
1
+ import { mergeLocale } from '../utils/merge-locale';
2
+ import { base } from './base';
3
+ const typeTemplate = '${label} 유효하지 않은 ${type} 입니다';
4
+ const koKR = mergeLocale(base, {
5
+ locale: 'ko-KR',
6
+ common: {
7
+ confirm: '확인',
8
+ cancel: '취소',
9
+ loading: '로딩중...'
10
+ },
11
+ Calendar: {
12
+ markItems: ['월', '화', '수', '목', '금', '토', '일'],
13
+ renderYearAndMonth: (year, month) => `${year}년${month}일`
14
+ },
15
+ Cascader: {
16
+ placeholder: '선택됨'
17
+ },
18
+ Dialog: {
19
+ ok: '확인'
20
+ },
21
+ ErrorBlock: {
22
+ default: {
23
+ title: '문제가 발생했습니다',
24
+ description: '잠시 후 다시 시도해주세요'
25
+ },
26
+ busy: {
27
+ title: '로딩 되지 않았습니다.',
28
+ description: '페이지를 새로고침 해주세요'
29
+ },
30
+ disconnected: {
31
+ title: '네트워크를 사용 중 입니다',
32
+ description: '페이지를 새로고침 해주세요'
33
+ },
34
+ empty: {
35
+ title: '정보를 찾을 수 없습니다',
36
+ description: '정확한 검색어인가요?'
37
+ }
38
+ },
39
+ Form: {
40
+ required: '필수',
41
+ optional: '선택',
42
+ defaultValidateMessages: {
43
+ default: '필드 유효성 검사 오류 ${label}',
44
+ required: '${label} 입력해 주세요',
45
+ enum: '${label} [${enum}] 중에 하나여야 합니다',
46
+ whitespace: '${label} 비워둘 수 없습니다',
47
+ date: {
48
+ format: '${label} 유효하지 않은 날짜 형식입니다',
49
+ parse: '${label} 날짜 형식으로 변환될 수 없습니다',
50
+ invalid: '${label} 유효하지 않은 날짜입니다'
51
+ },
52
+ types: {
53
+ string: typeTemplate,
54
+ method: typeTemplate,
55
+ array: typeTemplate,
56
+ object: typeTemplate,
57
+ number: typeTemplate,
58
+ date: typeTemplate,
59
+ boolean: typeTemplate,
60
+ integer: typeTemplate,
61
+ float: typeTemplate,
62
+ regexp: typeTemplate,
63
+ email: typeTemplate,
64
+ url: typeTemplate,
65
+ hex: typeTemplate
66
+ },
67
+ string: {
68
+ len: '${label} ${len}글자여야 합니다',
69
+ min: '${label} 적어도 ${min}글자 이상이어야 합니다',
70
+ max: '${label} ${max}글자 이하여야 합니다',
71
+ range: '${label} ${min}-${max}글자 사이어야 합니다'
72
+ },
73
+ number: {
74
+ len: '${label} 값은 ${len}이어야 합니다',
75
+ min: '${label} 최솟값은 ${min}입니다',
76
+ max: '${label} 최댓값은 ${max}입니다',
77
+ range: '${label} 값은 ${min}-${max} 사이어야 합니다'
78
+ },
79
+ array: {
80
+ len: '${len}이어야 합니다 ${label}',
81
+ min: '최소 ${min}이어야 합니다 ${label}',
82
+ max: '최대 ${max}이어야 합니다 ${label}',
83
+ range: '${label} ${min}-${max} 사이어야 합니다'
84
+ },
85
+ pattern: {
86
+ mismatch: '${label} ${pattern} 패턴과 일치하지 않습니다'
87
+ }
88
+ }
89
+ },
90
+ ImageUploader: {
91
+ uploading: '업로드 중...'
92
+ },
93
+ Mask: {
94
+ name: '마스크'
95
+ },
96
+ Modal: {
97
+ ok: '확인'
98
+ },
99
+ PullToRefresh: {
100
+ pulling: '스크롤을 당겨서 새로고침하십시오',
101
+ canRelease: '새로고침 하려면 놓으십시오',
102
+ complete: '새로고침 완료'
103
+ }
104
+ });
105
+ export default koKR;
@@ -1,5 +1,6 @@
1
1
  import { mergeLocale } from '../utils/merge-locale';
2
2
  import { base } from './base';
3
+ const typeTemplate = '${label}不是一個有效的${type}';
3
4
  const zhHK = mergeLocale(base, {
4
5
  locale: 'zh-HK',
5
6
  common: {
@@ -7,6 +8,10 @@ const zhHK = mergeLocale(base, {
7
8
  cancel: '取消',
8
9
  loading: '加載中……'
9
10
  },
11
+ Calendar: {
12
+ markItems: ['一', '二', '三', '四', '五', '六', '日'],
13
+ renderYearAndMonth: (year, month) => `${year}年${month}月`
14
+ },
10
15
  Cascader: {
11
16
  placeholder: '請選擇'
12
17
  },
@@ -31,6 +36,57 @@ const zhHK = mergeLocale(base, {
31
36
  description: '找找其他的吧'
32
37
  }
33
38
  },
39
+ Form: {
40
+ required: '必填',
41
+ optional: '選填',
42
+ defaultValidateMessages: {
43
+ default: '字段驗證錯誤${label}',
44
+ required: '請輸入${label}',
45
+ enum: '${label}必須是其中一個[${enum}]',
46
+ whitespace: '${label}不能為空字符',
47
+ date: {
48
+ format: '${label}日期格式無效',
49
+ parse: '${label}不能轉換為日期',
50
+ invalid: '${label}是一個無效日期'
51
+ },
52
+ types: {
53
+ string: typeTemplate,
54
+ method: typeTemplate,
55
+ array: typeTemplate,
56
+ object: typeTemplate,
57
+ number: typeTemplate,
58
+ date: typeTemplate,
59
+ boolean: typeTemplate,
60
+ integer: typeTemplate,
61
+ float: typeTemplate,
62
+ regexp: typeTemplate,
63
+ email: typeTemplate,
64
+ url: typeTemplate,
65
+ hex: typeTemplate
66
+ },
67
+ string: {
68
+ len: '${label}須為${len}個字符',
69
+ min: '${label}最少${min}個字符',
70
+ max: '${label}最多${max}個字符',
71
+ range: '${label}須在${min}-${max}字符之間'
72
+ },
73
+ number: {
74
+ len: '${label}必須等於${len}',
75
+ min: '${label}最小值為${min}',
76
+ max: '${label}最大值為${max}',
77
+ range: '${label}須在${min}-${max}之間'
78
+ },
79
+ array: {
80
+ len: '須為${len}個${label}',
81
+ min: '最少${min}個${label}',
82
+ max: '最多${max}個${label}',
83
+ range: '${label}数量須在${min}-${max}之間'
84
+ },
85
+ pattern: {
86
+ mismatch: '${label}與模式不匹配${pattern}'
87
+ }
88
+ }
89
+ },
34
90
  ImageUploader: {
35
91
  uploading: '上傳中...'
36
92
  },
@@ -1,5 +1,6 @@
1
1
  import { mergeLocale } from '../utils/merge-locale';
2
2
  import { base } from './base';
3
+ const typeTemplate = '${label}不是一個有效的${type}';
3
4
  const zhTW = mergeLocale(base, {
4
5
  locale: 'zh-TW',
5
6
  common: {
@@ -7,6 +8,10 @@ const zhTW = mergeLocale(base, {
7
8
  cancel: '取消',
8
9
  loading: '加載中……'
9
10
  },
11
+ Calendar: {
12
+ markItems: ['一', '二', '三', '四', '五', '六', '日'],
13
+ renderYearAndMonth: (year, month) => `${year}年${month}月`
14
+ },
10
15
  Cascader: {
11
16
  placeholder: '請選擇'
12
17
  },
@@ -31,6 +36,57 @@ const zhTW = mergeLocale(base, {
31
36
  description: '找找其他的吧'
32
37
  }
33
38
  },
39
+ Form: {
40
+ required: '必填',
41
+ optional: '選填',
42
+ defaultValidateMessages: {
43
+ default: '字段驗證錯誤${label}',
44
+ required: '請輸入${label}',
45
+ enum: '${label}必須是其中一個[${enum}]',
46
+ whitespace: '${label}不能為空字符',
47
+ date: {
48
+ format: '${label}日期格式無效',
49
+ parse: '${label}不能轉換為日期',
50
+ invalid: '${label}是一個無效日期'
51
+ },
52
+ types: {
53
+ string: typeTemplate,
54
+ method: typeTemplate,
55
+ array: typeTemplate,
56
+ object: typeTemplate,
57
+ number: typeTemplate,
58
+ date: typeTemplate,
59
+ boolean: typeTemplate,
60
+ integer: typeTemplate,
61
+ float: typeTemplate,
62
+ regexp: typeTemplate,
63
+ email: typeTemplate,
64
+ url: typeTemplate,
65
+ hex: typeTemplate
66
+ },
67
+ string: {
68
+ len: '${label}須為${len}個字符',
69
+ min: '${label}最少${min}個字符',
70
+ max: '${label}最多${max}個字符',
71
+ range: '${label}須在${min}-${max}字符之間'
72
+ },
73
+ number: {
74
+ len: '${label}必須等於${len}',
75
+ min: '${label}最小值為${min}',
76
+ max: '${label}最大值為${max}',
77
+ range: '${label}須在${min}-${max}之間'
78
+ },
79
+ array: {
80
+ len: '須為${len}個${label}',
81
+ min: '最少${min}個${label}',
82
+ max: '最多${max}個${label}',
83
+ range: '${label}数量須在${min}-${max}之間'
84
+ },
85
+ pattern: {
86
+ mismatch: '${label}與模式不匹配${pattern}'
87
+ }
88
+ }
89
+ },
34
90
  ImageUploader: {
35
91
  uploading: '上傳中...'
36
92
  },
@@ -0,0 +1,2 @@
1
+ import { ReactNode } from 'react';
2
+ export declare function traverseReactNode(children: ReactNode, fn: (child: ReactNode, index: number) => void): void;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { isFragment } from 'react-is';
3
+ export function traverseReactNode(children, fn) {
4
+ let i = 0;
5
+
6
+ function handle(target) {
7
+ React.Children.forEach(target, child => {
8
+ if (!isFragment(child)) {
9
+ fn(child, i);
10
+ i += 1;
11
+ } else {
12
+ handle(child.props.children);
13
+ }
14
+ });
15
+ }
16
+
17
+ handle(children);
18
+ }
package/package.json CHANGED
@@ -1,18 +1,22 @@
1
1
  {
2
2
  "name": "antd-mobile",
3
- "version": "5.9.5",
3
+ "version": "5.10.2",
4
4
  "dependencies": {
5
5
  "@floating-ui/dom": "^0.4.2",
6
6
  "@react-spring/web": "^9.4.4",
7
+ "@types/big.js": "^6.1.3",
8
+ "@types/react-is": "^17.0.3",
7
9
  "@types/resize-observer-browser": "^0.1.7",
8
10
  "@use-gesture/react": "^10.2.10",
9
11
  "ahooks": "^3.1.14",
10
12
  "antd-mobile-icons": "^0.2.2",
11
13
  "antd-mobile-v5-count": "^1.0.1",
14
+ "big.js": "^6.1.1",
12
15
  "classnames": "^2.3.1",
13
16
  "dayjs": "^1.11.0",
14
17
  "lodash": "^4.17.21",
15
18
  "rc-field-form": "^1.24.0",
19
+ "react-is": "^17.0.2",
16
20
  "staged-components": "^1.1.2",
17
21
  "tslib": "^2.3.1"
18
22
  },