antd-mobile 5.42.0-alpha.0 → 5.42.0-alpha.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 (38) hide show
  1. package/2x/bundle/antd-mobile.cjs.development.js +31 -21
  2. package/2x/bundle/antd-mobile.cjs.js +4 -4
  3. package/2x/bundle/antd-mobile.es.development.js +31 -21
  4. package/2x/bundle/antd-mobile.es.js +753 -747
  5. package/2x/bundle/antd-mobile.umd.development.js +31 -21
  6. package/2x/bundle/antd-mobile.umd.js +4 -4
  7. package/2x/cjs/components/image-viewer/image-viewer.d.ts +3 -0
  8. package/2x/cjs/components/image-viewer/image-viewer.js +14 -12
  9. package/2x/cjs/components/number-keyboard/number-keyboard.d.ts +6 -1
  10. package/2x/cjs/components/number-keyboard/number-keyboard.js +15 -8
  11. package/2x/cjs/components/virtual-input/virtual-input.js +2 -1
  12. package/2x/es/components/image-viewer/image-viewer.d.ts +3 -0
  13. package/2x/es/components/image-viewer/image-viewer.js +14 -12
  14. package/2x/es/components/number-keyboard/number-keyboard.d.ts +6 -1
  15. package/2x/es/components/number-keyboard/number-keyboard.js +15 -8
  16. package/2x/es/components/virtual-input/virtual-input.js +2 -1
  17. package/2x/package.json +1 -1
  18. package/bundle/antd-mobile.cjs.development.js +31 -21
  19. package/bundle/antd-mobile.cjs.js +4 -4
  20. package/bundle/antd-mobile.compatible.umd.js +1 -1
  21. package/bundle/antd-mobile.es.development.js +31 -21
  22. package/bundle/antd-mobile.es.js +753 -747
  23. package/bundle/antd-mobile.umd.development.js +31 -21
  24. package/bundle/antd-mobile.umd.js +4 -4
  25. package/cjs/components/image-viewer/image-viewer.css +1 -1
  26. package/cjs/components/image-viewer/image-viewer.d.ts +3 -0
  27. package/cjs/components/image-viewer/image-viewer.js +14 -12
  28. package/cjs/components/number-keyboard/number-keyboard.d.ts +6 -1
  29. package/cjs/components/number-keyboard/number-keyboard.js +15 -8
  30. package/cjs/components/virtual-input/virtual-input.js +2 -1
  31. package/es/components/image-viewer/image-viewer.css +1 -1
  32. package/es/components/image-viewer/image-viewer.d.ts +3 -0
  33. package/es/components/image-viewer/image-viewer.js +14 -12
  34. package/es/components/number-keyboard/number-keyboard.d.ts +6 -1
  35. package/es/components/number-keyboard/number-keyboard.js +15 -8
  36. package/es/components/virtual-input/virtual-input.js +2 -1
  37. package/package.json +1 -1
  38. package/umd/antd-mobile.js +1 -1
@@ -18,6 +18,9 @@ export declare type ImageViewerProps = {
18
18
  mask?: string;
19
19
  body?: string;
20
20
  };
21
+ mask?: {
22
+ onClick?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;
23
+ };
21
24
  };
22
25
  export declare const ImageViewer: FC<ImageViewerProps>;
23
26
  export declare type MultiImageViewerRef = SlidesRef;
@@ -22,17 +22,18 @@ const defaultProps = {
22
22
  visible: false
23
23
  };
24
24
  const ImageViewer = p => {
25
- var _a, _b, _c;
25
+ var _a, _b, _c, _d;
26
26
  const props = (0, _withDefaultProps.mergeProps)(defaultProps, p);
27
27
  const node = _react.default.createElement(_mask.default, {
28
28
  visible: props.visible,
29
+ afterClose: props === null || props === void 0 ? void 0 : props.afterClose,
30
+ className: (_a = props === null || props === void 0 ? void 0 : props.classNames) === null || _a === void 0 ? void 0 : _a.mask,
31
+ onMaskClick: (_b = props.mask) === null || _b === void 0 ? void 0 : _b.onClick,
29
32
  disableBodyScroll: false,
30
33
  opacity: 'thick',
31
- afterClose: props.afterClose,
32
- destroyOnClose: true,
33
- className: (_a = props === null || props === void 0 ? void 0 : props.classNames) === null || _a === void 0 ? void 0 : _a.mask
34
+ destroyOnClose: true
34
35
  }, _react.default.createElement("div", {
35
- className: (0, _classnames.default)(`${classPrefix}-content`, (_b = props === null || props === void 0 ? void 0 : props.classNames) === null || _b === void 0 ? void 0 : _b.body)
36
+ className: (0, _classnames.default)(`${classPrefix}-content`, (_c = props === null || props === void 0 ? void 0 : props.classNames) === null || _c === void 0 ? void 0 : _c.body)
36
37
  }, (props.image || typeof props.imageRender === 'function') && _react.default.createElement(_slide.Slide, {
37
38
  image: props.image,
38
39
  onTap: props.onClose,
@@ -40,7 +41,7 @@ const ImageViewer = p => {
40
41
  imageRender: props.imageRender
41
42
  })), props.image && _react.default.createElement("div", {
42
43
  className: `${classPrefix}-footer`
43
- }, (_c = props.renderFooter) === null || _c === void 0 ? void 0 : _c.call(props, props.image), _react.default.createElement(_safeArea.default, {
44
+ }, (_d = props.renderFooter) === null || _d === void 0 ? void 0 : _d.call(props, props.image), _react.default.createElement(_safeArea.default, {
44
45
  position: 'bottom'
45
46
  })));
46
47
  return (0, _renderToContainer.renderToContainer)(props.getContainer, node);
@@ -50,7 +51,7 @@ const multiDefaultProps = Object.assign(Object.assign({}, defaultProps), {
50
51
  defaultIndex: 0
51
52
  });
52
53
  const MultiImageViewer = (0, _react.forwardRef)((p, ref) => {
53
- var _a, _b, _c;
54
+ var _a, _b, _c, _d;
54
55
  const props = (0, _withDefaultProps.mergeProps)(multiDefaultProps, p);
55
56
  const [index, setIndex] = (0, _react.useState)(props.defaultIndex);
56
57
  const slidesRef = (0, _react.useRef)(null);
@@ -69,13 +70,14 @@ const MultiImageViewer = (0, _react.forwardRef)((p, ref) => {
69
70
  }, [props.onIndexChange, index]);
70
71
  const node = _react.default.createElement(_mask.default, {
71
72
  visible: props.visible,
73
+ afterClose: props === null || props === void 0 ? void 0 : props.afterClose,
74
+ className: (_a = props === null || props === void 0 ? void 0 : props.classNames) === null || _a === void 0 ? void 0 : _a.mask,
75
+ onMaskClick: (_b = props.mask) === null || _b === void 0 ? void 0 : _b.onClick,
72
76
  disableBodyScroll: false,
73
77
  opacity: 'thick',
74
- afterClose: props.afterClose,
75
- destroyOnClose: true,
76
- className: (_a = props === null || props === void 0 ? void 0 : props.classNames) === null || _a === void 0 ? void 0 : _a.mask
78
+ destroyOnClose: true
77
79
  }, _react.default.createElement("div", {
78
- className: (0, _classnames.default)(`${classPrefix}-content`, (_b = props === null || props === void 0 ? void 0 : props.classNames) === null || _b === void 0 ? void 0 : _b.body)
80
+ className: (0, _classnames.default)(`${classPrefix}-content`, (_c = props === null || props === void 0 ? void 0 : props.classNames) === null || _c === void 0 ? void 0 : _c.body)
79
81
  }, props.images && _react.default.createElement(_slides.Slides, {
80
82
  ref: slidesRef,
81
83
  defaultIndex: index,
@@ -86,7 +88,7 @@ const MultiImageViewer = (0, _react.forwardRef)((p, ref) => {
86
88
  imageRender: props.imageRender
87
89
  })), props.images && _react.default.createElement("div", {
88
90
  className: `${classPrefix}-footer`
89
- }, (_c = props.renderFooter) === null || _c === void 0 ? void 0 : _c.call(props, props.images[index], index), _react.default.createElement(_safeArea.default, {
91
+ }, (_d = props.renderFooter) === null || _d === void 0 ? void 0 : _d.call(props, props.images[index], index), _react.default.createElement(_safeArea.default, {
90
92
  position: 'bottom'
91
93
  })));
92
94
  return (0, _renderToContainer.renderToContainer)(props.getContainer, node);
@@ -1,11 +1,15 @@
1
1
  import type { FC } from 'react';
2
2
  import { NativeProps } from '../../utils/native-props';
3
3
  import { PopupProps } from '../popup';
4
+ declare type CustomKeyType = string | {
5
+ key: string;
6
+ title: string;
7
+ };
4
8
  export declare type NumberKeyboardProps = {
5
9
  visible?: boolean;
6
10
  title?: string;
7
11
  confirmText?: string | null;
8
- customKey?: string | [string, string];
12
+ customKey?: CustomKeyType | CustomKeyType[];
9
13
  randomOrder?: boolean;
10
14
  showCloseButton?: boolean;
11
15
  onInput?: (v: string) => void;
@@ -16,3 +20,4 @@ export declare type NumberKeyboardProps = {
16
20
  safeArea?: boolean;
17
21
  } & Pick<PopupProps, 'afterClose' | 'afterShow' | 'getContainer' | 'destroyOnClose' | 'forceRender' | 'stopPropagation'> & NativeProps<'--adm-safe-area-multiple'>;
18
22
  export declare const NumberKeyboard: FC<NumberKeyboardProps>;
23
+ export {};
@@ -124,20 +124,27 @@ const NumberKeyboard = p => {
124
124
  onKeyPress(e, 'BACKSPACE');
125
125
  };
126
126
  const renderKey = (key, index) => {
127
- const isNumberKey = /^\d$/.test(key);
128
- const isBackspace = key === 'BACKSPACE';
127
+ const keyConfig = typeof key === 'string' ? {
128
+ key,
129
+ title: key
130
+ } : key;
131
+ const realKey = keyConfig.key;
132
+ const isNumberKey = /^\d$/.test(realKey);
133
+ const isBackspace = realKey === 'BACKSPACE';
134
+ const title = isBackspace ? locale.Input.clear : keyConfig.title;
129
135
  const className = (0, _classnames.default)(`${classPrefix}-key`, {
130
136
  [`${classPrefix}-key-number`]: isNumberKey,
131
- [`${classPrefix}-key-sign`]: !isNumberKey && key,
137
+ [`${classPrefix}-key-sign`]: !isNumberKey && realKey,
132
138
  [`${classPrefix}-key-mid`]: index === 9 && !!confirmText && keys.length < 12
133
139
  });
134
- const ariaProps = key ? {
140
+ const ariaProps = realKey ? {
135
141
  role: 'button',
136
- title: isBackspace ? locale.Input.clear : key,
142
+ title,
143
+ 'aria-label': title,
137
144
  tabIndex: -1
138
145
  } : undefined;
139
146
  return _react.default.createElement("div", Object.assign({
140
- key: key,
147
+ key: realKey,
141
148
  className: className,
142
149
  // 仅为 backspace 绑定,支持长按快速删除
143
150
  onTouchStart: isBackspace ? onBackspaceTouchStart : undefined,
@@ -149,9 +156,9 @@ const NumberKeyboard = p => {
149
156
  // backspace touchend 时会 preventDefault 阻止其后续 click 事件
150
157
  onClick: e => {
151
158
  stopContinueClear();
152
- onKeyPress(e, key);
159
+ onKeyPress(e, realKey);
153
160
  }
154
- }, ariaProps), isBackspace ? _react.default.createElement(_antdMobileIcons.TextDeletionOutline, null) : key);
161
+ }, ariaProps), isBackspace ? _react.default.createElement(_antdMobileIcons.TextDeletionOutline, null) : realKey);
155
162
  };
156
163
  return _react.default.createElement(_popup.default, {
157
164
  visible: visible,
@@ -142,6 +142,7 @@ const VirtualInput = (0, _react.forwardRef)((props, ref) => {
142
142
  (_b = (_a = mergedProps.cursor) === null || _a === void 0 ? void 0 : _a.onMove) === null || _b === void 0 ? void 0 : _b.call(_a, value.length);
143
143
  }
144
144
  (_c = mergedProps.onClick) === null || _c === void 0 ? void 0 : _c.call(mergedProps, e);
145
+ setHasFocus(true);
145
146
  };
146
147
  // 点击单个字符时,根据点击位置置于字符前或后
147
148
  const changeCaretPosition = index => e => {
@@ -217,7 +218,7 @@ const VirtualInput = (0, _react.forwardRef)((props, ref) => {
217
218
  className: `${classPrefix}-content`,
218
219
  ref: contentRef,
219
220
  "aria-disabled": mergedProps.disabled,
220
- "aria-label": value || mergedProps.placeholder,
221
+ "aria-label": value ? undefined : mergedProps.placeholder,
221
222
  role: 'textbox',
222
223
  tabIndex: mergedProps.disabled ? undefined : 0,
223
224
  // note: 这里增加 onFocus 有两个目的:
@@ -18,6 +18,9 @@ export declare type ImageViewerProps = {
18
18
  mask?: string;
19
19
  body?: string;
20
20
  };
21
+ mask?: {
22
+ onClick?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;
23
+ };
21
24
  };
22
25
  export declare const ImageViewer: FC<ImageViewerProps>;
23
26
  export declare type MultiImageViewerRef = SlidesRef;
@@ -13,17 +13,18 @@ const defaultProps = {
13
13
  visible: false
14
14
  };
15
15
  export const ImageViewer = p => {
16
- var _a, _b, _c;
16
+ var _a, _b, _c, _d;
17
17
  const props = mergeProps(defaultProps, p);
18
18
  const node = React.createElement(Mask, {
19
19
  visible: props.visible,
20
+ afterClose: props === null || props === void 0 ? void 0 : props.afterClose,
21
+ className: (_a = props === null || props === void 0 ? void 0 : props.classNames) === null || _a === void 0 ? void 0 : _a.mask,
22
+ onMaskClick: (_b = props.mask) === null || _b === void 0 ? void 0 : _b.onClick,
20
23
  disableBodyScroll: false,
21
24
  opacity: 'thick',
22
- afterClose: props.afterClose,
23
- destroyOnClose: true,
24
- className: (_a = props === null || props === void 0 ? void 0 : props.classNames) === null || _a === void 0 ? void 0 : _a.mask
25
+ destroyOnClose: true
25
26
  }, React.createElement("div", {
26
- className: classNames(`${classPrefix}-content`, (_b = props === null || props === void 0 ? void 0 : props.classNames) === null || _b === void 0 ? void 0 : _b.body)
27
+ className: classNames(`${classPrefix}-content`, (_c = props === null || props === void 0 ? void 0 : props.classNames) === null || _c === void 0 ? void 0 : _c.body)
27
28
  }, (props.image || typeof props.imageRender === 'function') && React.createElement(Slide, {
28
29
  image: props.image,
29
30
  onTap: props.onClose,
@@ -31,7 +32,7 @@ export const ImageViewer = p => {
31
32
  imageRender: props.imageRender
32
33
  })), props.image && React.createElement("div", {
33
34
  className: `${classPrefix}-footer`
34
- }, (_c = props.renderFooter) === null || _c === void 0 ? void 0 : _c.call(props, props.image), React.createElement(SafeArea, {
35
+ }, (_d = props.renderFooter) === null || _d === void 0 ? void 0 : _d.call(props, props.image), React.createElement(SafeArea, {
35
36
  position: 'bottom'
36
37
  })));
37
38
  return renderToContainer(props.getContainer, node);
@@ -40,7 +41,7 @@ const multiDefaultProps = Object.assign(Object.assign({}, defaultProps), {
40
41
  defaultIndex: 0
41
42
  });
42
43
  export const MultiImageViewer = forwardRef((p, ref) => {
43
- var _a, _b, _c;
44
+ var _a, _b, _c, _d;
44
45
  const props = mergeProps(multiDefaultProps, p);
45
46
  const [index, setIndex] = useState(props.defaultIndex);
46
47
  const slidesRef = useRef(null);
@@ -59,13 +60,14 @@ export const MultiImageViewer = forwardRef((p, ref) => {
59
60
  }, [props.onIndexChange, index]);
60
61
  const node = React.createElement(Mask, {
61
62
  visible: props.visible,
63
+ afterClose: props === null || props === void 0 ? void 0 : props.afterClose,
64
+ className: (_a = props === null || props === void 0 ? void 0 : props.classNames) === null || _a === void 0 ? void 0 : _a.mask,
65
+ onMaskClick: (_b = props.mask) === null || _b === void 0 ? void 0 : _b.onClick,
62
66
  disableBodyScroll: false,
63
67
  opacity: 'thick',
64
- afterClose: props.afterClose,
65
- destroyOnClose: true,
66
- className: (_a = props === null || props === void 0 ? void 0 : props.classNames) === null || _a === void 0 ? void 0 : _a.mask
68
+ destroyOnClose: true
67
69
  }, React.createElement("div", {
68
- className: classNames(`${classPrefix}-content`, (_b = props === null || props === void 0 ? void 0 : props.classNames) === null || _b === void 0 ? void 0 : _b.body)
70
+ className: classNames(`${classPrefix}-content`, (_c = props === null || props === void 0 ? void 0 : props.classNames) === null || _c === void 0 ? void 0 : _c.body)
69
71
  }, props.images && React.createElement(Slides, {
70
72
  ref: slidesRef,
71
73
  defaultIndex: index,
@@ -76,7 +78,7 @@ export const MultiImageViewer = forwardRef((p, ref) => {
76
78
  imageRender: props.imageRender
77
79
  })), props.images && React.createElement("div", {
78
80
  className: `${classPrefix}-footer`
79
- }, (_c = props.renderFooter) === null || _c === void 0 ? void 0 : _c.call(props, props.images[index], index), React.createElement(SafeArea, {
81
+ }, (_d = props.renderFooter) === null || _d === void 0 ? void 0 : _d.call(props, props.images[index], index), React.createElement(SafeArea, {
80
82
  position: 'bottom'
81
83
  })));
82
84
  return renderToContainer(props.getContainer, node);
@@ -1,11 +1,15 @@
1
1
  import type { FC } from 'react';
2
2
  import { NativeProps } from '../../utils/native-props';
3
3
  import { PopupProps } from '../popup';
4
+ declare type CustomKeyType = string | {
5
+ key: string;
6
+ title: string;
7
+ };
4
8
  export declare type NumberKeyboardProps = {
5
9
  visible?: boolean;
6
10
  title?: string;
7
11
  confirmText?: string | null;
8
- customKey?: string | [string, string];
12
+ customKey?: CustomKeyType | CustomKeyType[];
9
13
  randomOrder?: boolean;
10
14
  showCloseButton?: boolean;
11
15
  onInput?: (v: string) => void;
@@ -16,3 +20,4 @@ export declare type NumberKeyboardProps = {
16
20
  safeArea?: boolean;
17
21
  } & Pick<PopupProps, 'afterClose' | 'afterShow' | 'getContainer' | 'destroyOnClose' | 'forceRender' | 'stopPropagation'> & NativeProps<'--adm-safe-area-multiple'>;
18
22
  export declare const NumberKeyboard: FC<NumberKeyboardProps>;
23
+ export {};
@@ -115,20 +115,27 @@ export const NumberKeyboard = p => {
115
115
  onKeyPress(e, 'BACKSPACE');
116
116
  };
117
117
  const renderKey = (key, index) => {
118
- const isNumberKey = /^\d$/.test(key);
119
- const isBackspace = key === 'BACKSPACE';
118
+ const keyConfig = typeof key === 'string' ? {
119
+ key,
120
+ title: key
121
+ } : key;
122
+ const realKey = keyConfig.key;
123
+ const isNumberKey = /^\d$/.test(realKey);
124
+ const isBackspace = realKey === 'BACKSPACE';
125
+ const title = isBackspace ? locale.Input.clear : keyConfig.title;
120
126
  const className = classNames(`${classPrefix}-key`, {
121
127
  [`${classPrefix}-key-number`]: isNumberKey,
122
- [`${classPrefix}-key-sign`]: !isNumberKey && key,
128
+ [`${classPrefix}-key-sign`]: !isNumberKey && realKey,
123
129
  [`${classPrefix}-key-mid`]: index === 9 && !!confirmText && keys.length < 12
124
130
  });
125
- const ariaProps = key ? {
131
+ const ariaProps = realKey ? {
126
132
  role: 'button',
127
- title: isBackspace ? locale.Input.clear : key,
133
+ title,
134
+ 'aria-label': title,
128
135
  tabIndex: -1
129
136
  } : undefined;
130
137
  return React.createElement("div", Object.assign({
131
- key: key,
138
+ key: realKey,
132
139
  className: className,
133
140
  // 仅为 backspace 绑定,支持长按快速删除
134
141
  onTouchStart: isBackspace ? onBackspaceTouchStart : undefined,
@@ -140,9 +147,9 @@ export const NumberKeyboard = p => {
140
147
  // backspace touchend 时会 preventDefault 阻止其后续 click 事件
141
148
  onClick: e => {
142
149
  stopContinueClear();
143
- onKeyPress(e, key);
150
+ onKeyPress(e, realKey);
144
151
  }
145
- }, ariaProps), isBackspace ? React.createElement(TextDeletionOutline, null) : key);
152
+ }, ariaProps), isBackspace ? React.createElement(TextDeletionOutline, null) : realKey);
146
153
  };
147
154
  return React.createElement(Popup, {
148
155
  visible: visible,
@@ -133,6 +133,7 @@ export const VirtualInput = forwardRef((props, ref) => {
133
133
  (_b = (_a = mergedProps.cursor) === null || _a === void 0 ? void 0 : _a.onMove) === null || _b === void 0 ? void 0 : _b.call(_a, value.length);
134
134
  }
135
135
  (_c = mergedProps.onClick) === null || _c === void 0 ? void 0 : _c.call(mergedProps, e);
136
+ setHasFocus(true);
136
137
  };
137
138
  // 点击单个字符时,根据点击位置置于字符前或后
138
139
  const changeCaretPosition = index => e => {
@@ -208,7 +209,7 @@ export const VirtualInput = forwardRef((props, ref) => {
208
209
  className: `${classPrefix}-content`,
209
210
  ref: contentRef,
210
211
  "aria-disabled": mergedProps.disabled,
211
- "aria-label": value || mergedProps.placeholder,
212
+ "aria-label": value ? undefined : mergedProps.placeholder,
212
213
  role: 'textbox',
213
214
  tabIndex: mergedProps.disabled ? undefined : 0,
214
215
  // note: 这里增加 onFocus 有两个目的:
package/2x/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antd-mobile",
3
- "version": "5.42.0-alpha.0",
3
+ "version": "5.42.0-alpha.2",
4
4
  "homepage": "https://github.com/ant-design/ant-design-mobile#readme",
5
5
  "bugs": {
6
6
  "url": "https://github.com/ant-design/ant-design-mobile/issues"
@@ -21904,17 +21904,18 @@ const defaultProps$z = {
21904
21904
  visible: false
21905
21905
  };
21906
21906
  const ImageViewer$1 = (p) => {
21907
- var _a, _b, _c;
21907
+ var _a, _b, _c, _d;
21908
21908
  const props = mergeProps(defaultProps$z, p);
21909
21909
  const node = React$3.createElement(Mask, {
21910
21910
  visible: props.visible,
21911
+ afterClose: props === null || props === void 0 ? void 0 : props.afterClose,
21912
+ className: (_a = props === null || props === void 0 ? void 0 : props.classNames) === null || _a === void 0 ? void 0 : _a.mask,
21913
+ onMaskClick: (_b = props.mask) === null || _b === void 0 ? void 0 : _b.onClick,
21911
21914
  disableBodyScroll: false,
21912
21915
  opacity: "thick",
21913
- afterClose: props.afterClose,
21914
- destroyOnClose: true,
21915
- className: (_a = props === null || props === void 0 ? void 0 : props.classNames) === null || _a === void 0 ? void 0 : _a.mask
21916
+ destroyOnClose: true
21916
21917
  }, React$3.createElement("div", {
21917
- className: classNames(`${classPrefix$I}-content`, (_b = props === null || props === void 0 ? void 0 : props.classNames) === null || _b === void 0 ? void 0 : _b.body)
21918
+ className: classNames(`${classPrefix$I}-content`, (_c = props === null || props === void 0 ? void 0 : props.classNames) === null || _c === void 0 ? void 0 : _c.body)
21918
21919
  }, (props.image || typeof props.imageRender === "function") && React$3.createElement(Slide, {
21919
21920
  image: props.image,
21920
21921
  onTap: props.onClose,
@@ -21922,7 +21923,7 @@ const ImageViewer$1 = (p) => {
21922
21923
  imageRender: props.imageRender
21923
21924
  })), props.image && React$3.createElement("div", {
21924
21925
  className: `${classPrefix$I}-footer`
21925
- }, (_c = props.renderFooter) === null || _c === void 0 ? void 0 : _c.call(props, props.image), React$3.createElement(SafeArea, {
21926
+ }, (_d = props.renderFooter) === null || _d === void 0 ? void 0 : _d.call(props, props.image), React$3.createElement(SafeArea, {
21926
21927
  position: "bottom"
21927
21928
  })));
21928
21929
  return renderToContainer(props.getContainer, node);
@@ -21931,7 +21932,7 @@ const multiDefaultProps = Object.assign(Object.assign({}, defaultProps$z), {
21931
21932
  defaultIndex: 0
21932
21933
  });
21933
21934
  const MultiImageViewer = React$3.forwardRef((p, ref2) => {
21934
- var _a, _b, _c;
21935
+ var _a, _b, _c, _d;
21935
21936
  const props = mergeProps(multiDefaultProps, p);
21936
21937
  const [index2, setIndex] = React$3.useState(props.defaultIndex);
21937
21938
  const slidesRef = React$3.useRef(null);
@@ -21951,13 +21952,14 @@ const MultiImageViewer = React$3.forwardRef((p, ref2) => {
21951
21952
  }, [props.onIndexChange, index2]);
21952
21953
  const node = React$3.createElement(Mask, {
21953
21954
  visible: props.visible,
21955
+ afterClose: props === null || props === void 0 ? void 0 : props.afterClose,
21956
+ className: (_a = props === null || props === void 0 ? void 0 : props.classNames) === null || _a === void 0 ? void 0 : _a.mask,
21957
+ onMaskClick: (_b = props.mask) === null || _b === void 0 ? void 0 : _b.onClick,
21954
21958
  disableBodyScroll: false,
21955
21959
  opacity: "thick",
21956
- afterClose: props.afterClose,
21957
- destroyOnClose: true,
21958
- className: (_a = props === null || props === void 0 ? void 0 : props.classNames) === null || _a === void 0 ? void 0 : _a.mask
21960
+ destroyOnClose: true
21959
21961
  }, React$3.createElement("div", {
21960
- className: classNames(`${classPrefix$I}-content`, (_b = props === null || props === void 0 ? void 0 : props.classNames) === null || _b === void 0 ? void 0 : _b.body)
21962
+ className: classNames(`${classPrefix$I}-content`, (_c = props === null || props === void 0 ? void 0 : props.classNames) === null || _c === void 0 ? void 0 : _c.body)
21961
21963
  }, props.images && React$3.createElement(Slides, {
21962
21964
  ref: slidesRef,
21963
21965
  defaultIndex: index2,
@@ -21968,7 +21970,7 @@ const MultiImageViewer = React$3.forwardRef((p, ref2) => {
21968
21970
  imageRender: props.imageRender
21969
21971
  })), props.images && React$3.createElement("div", {
21970
21972
  className: `${classPrefix$I}-footer`
21971
- }, (_c = props.renderFooter) === null || _c === void 0 ? void 0 : _c.call(props, props.images[index2], index2), React$3.createElement(SafeArea, {
21973
+ }, (_d = props.renderFooter) === null || _d === void 0 ? void 0 : _d.call(props, props.images[index2], index2), React$3.createElement(SafeArea, {
21972
21974
  position: "bottom"
21973
21975
  })));
21974
21976
  return renderToContainer(props.getContainer, node);
@@ -23254,20 +23256,27 @@ const NumberKeyboard = (p) => {
23254
23256
  onKeyPress(e2, "BACKSPACE");
23255
23257
  };
23256
23258
  const renderKey = (key, index2) => {
23257
- const isNumberKey = /^\d$/.test(key);
23258
- const isBackspace = key === "BACKSPACE";
23259
+ const keyConfig = typeof key === "string" ? {
23260
+ key,
23261
+ title: key
23262
+ } : key;
23263
+ const realKey = keyConfig.key;
23264
+ const isNumberKey = /^\d$/.test(realKey);
23265
+ const isBackspace = realKey === "BACKSPACE";
23266
+ const title2 = isBackspace ? locale.Input.clear : keyConfig.title;
23259
23267
  const className = classNames(`${classPrefix$x}-key`, {
23260
23268
  [`${classPrefix$x}-key-number`]: isNumberKey,
23261
- [`${classPrefix$x}-key-sign`]: !isNumberKey && key,
23269
+ [`${classPrefix$x}-key-sign`]: !isNumberKey && realKey,
23262
23270
  [`${classPrefix$x}-key-mid`]: index2 === 9 && !!confirmText && keys2.length < 12
23263
23271
  });
23264
- const ariaProps = key ? {
23272
+ const ariaProps = realKey ? {
23265
23273
  role: "button",
23266
- title: isBackspace ? locale.Input.clear : key,
23274
+ title: title2,
23275
+ "aria-label": title2,
23267
23276
  tabIndex: -1
23268
23277
  } : void 0;
23269
23278
  return React$3.createElement("div", Object.assign({
23270
- key,
23279
+ key: realKey,
23271
23280
  className,
23272
23281
  // 仅为 backspace 绑定,支持长按快速删除
23273
23282
  onTouchStart: isBackspace ? onBackspaceTouchStart : void 0,
@@ -23279,9 +23288,9 @@ const NumberKeyboard = (p) => {
23279
23288
  // backspace touchend 时会 preventDefault 阻止其后续 click 事件
23280
23289
  onClick: (e2) => {
23281
23290
  stopContinueClear();
23282
- onKeyPress(e2, key);
23291
+ onKeyPress(e2, realKey);
23283
23292
  }
23284
- }, ariaProps), isBackspace ? React$3.createElement(TextDeletionOutline, null) : key);
23293
+ }, ariaProps), isBackspace ? React$3.createElement(TextDeletionOutline, null) : realKey);
23285
23294
  };
23286
23295
  return React$3.createElement(Popup, {
23287
23296
  visible,
@@ -27730,6 +27739,7 @@ const VirtualInput = React$3.forwardRef((props, ref2) => {
27730
27739
  (_b = (_a = mergedProps.cursor) === null || _a === void 0 ? void 0 : _a.onMove) === null || _b === void 0 ? void 0 : _b.call(_a, value.length);
27731
27740
  }
27732
27741
  (_c = mergedProps.onClick) === null || _c === void 0 ? void 0 : _c.call(mergedProps, e2);
27742
+ setHasFocus(true);
27733
27743
  };
27734
27744
  const changeCaretPosition = (index2) => (e2) => {
27735
27745
  var _a, _b, _c;
@@ -27803,7 +27813,7 @@ const VirtualInput = React$3.forwardRef((props, ref2) => {
27803
27813
  className: `${classPrefix$2}-content`,
27804
27814
  ref: contentRef,
27805
27815
  "aria-disabled": mergedProps.disabled,
27806
- "aria-label": value || mergedProps.placeholder,
27816
+ "aria-label": value ? void 0 : mergedProps.placeholder,
27807
27817
  role: "textbox",
27808
27818
  tabIndex: mergedProps.disabled ? void 0 : 0,
27809
27819
  // note: 这里增加 onFocus 有两个目的: