@nutui/nutui-react-taro 3.0.19-cpp.26-beta.5 → 3.0.19-cpp.27

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 (89) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/locales/base.d.ts +5 -0
  3. package/dist/cjs/locales/en-US.js +5 -0
  4. package/dist/cjs/locales/id-ID.js +5 -0
  5. package/dist/cjs/locales/ja-JP.js +6 -1
  6. package/dist/cjs/locales/tr-TR.js +5 -0
  7. package/dist/cjs/locales/zh-CN.js +5 -0
  8. package/dist/cjs/locales/zh-TW.js +5 -0
  9. package/dist/cjs/locales/zh-UG.js +5 -0
  10. package/dist/cjs/packages/address/address.d.ts +1 -1
  11. package/dist/cjs/packages/animatingnumbers/countup.js +3 -1
  12. package/dist/cjs/packages/avatar/avatar.js +32 -6
  13. package/dist/cjs/packages/badge/badge.js +16 -3
  14. package/dist/cjs/packages/button/button.d.ts +2 -21
  15. package/dist/cjs/packages/button/button.js +2 -3
  16. package/dist/cjs/packages/button/index.d.ts +0 -1
  17. package/dist/cjs/packages/dialog/dialog.js +6 -2
  18. package/dist/cjs/packages/divider/divider.js +2 -2
  19. package/dist/cjs/packages/empty/empty.d.ts +4 -4
  20. package/dist/cjs/packages/image/image.js +11 -3
  21. package/dist/cjs/packages/input/input.js +10 -3
  22. package/dist/cjs/packages/progress/progress.js +2 -4
  23. package/dist/cjs/packages/quickenter/quickenter.js +21 -15
  24. package/dist/cjs/packages/quickenter/style/quickenter.scss +10 -2
  25. package/dist/cjs/packages/quickenter/style/style.css +7 -1
  26. package/dist/cjs/packages/quickenter/style/style.harmony.css +6 -1
  27. package/dist/cjs/packages/quickenter/style-jmapp/quickenter.scss +10 -2
  28. package/dist/cjs/packages/quickenter/style-jmapp/style.css +7 -1
  29. package/dist/cjs/packages/quickenter/style-jrkf/quickenter.scss +10 -2
  30. package/dist/cjs/packages/quickenter/style-jrkf/style.css +7 -1
  31. package/dist/cjs/packages/resultpage/resultpage.js +2 -1
  32. package/dist/cjs/packages/searchbar/searchbar.js +23 -9
  33. package/dist/cjs/packages/swipe/swipe.d.ts +1 -1
  34. package/dist/cjs/packages/tabs/tabs.js +12 -5
  35. package/dist/cjs/types/spec/button/base.d.ts +2 -1
  36. package/dist/cjs/types/spec/button/taro.d.ts +5 -1
  37. package/dist/cjs/types/spec/quickenter/base.d.ts +1 -0
  38. package/dist/cjs/utils/taro/get-rect.js +4 -2
  39. package/dist/es/locales/base.d.ts +5 -0
  40. package/dist/es/locales/en-US.js +5 -0
  41. package/dist/es/locales/id-ID.js +5 -0
  42. package/dist/es/locales/ja-JP.js +6 -1
  43. package/dist/es/locales/tr-TR.js +5 -0
  44. package/dist/es/locales/zh-CN.js +5 -0
  45. package/dist/es/locales/zh-TW.js +5 -0
  46. package/dist/es/locales/zh-UG.js +5 -0
  47. package/dist/es/packages/address/address.d.ts +1 -1
  48. package/dist/es/packages/animatingnumbers/countup.js +3 -1
  49. package/dist/es/packages/avatar/avatar.js +32 -6
  50. package/dist/es/packages/badge/badge.js +16 -3
  51. package/dist/es/packages/button/button.d.ts +2 -21
  52. package/dist/es/packages/button/button.js +2 -4
  53. package/dist/es/packages/button/index.d.ts +0 -1
  54. package/dist/es/packages/dialog/dialog.js +6 -2
  55. package/dist/es/packages/divider/divider.js +1 -1
  56. package/dist/es/packages/empty/empty.d.ts +4 -4
  57. package/dist/es/packages/image/image.js +11 -3
  58. package/dist/es/packages/input/input.js +10 -3
  59. package/dist/es/packages/popup/popup.js +1 -2
  60. package/dist/es/packages/progress/progress.js +2 -4
  61. package/dist/es/packages/quickenter/quickenter.js +19 -13
  62. package/dist/es/packages/quickenter/style/quickenter.scss +10 -2
  63. package/dist/es/packages/quickenter/style/style.css +7 -1
  64. package/dist/es/packages/quickenter/style/style.harmony.css +6 -1
  65. package/dist/es/packages/quickenter/style-jmapp/quickenter.scss +10 -2
  66. package/dist/es/packages/quickenter/style-jmapp/style.css +7 -1
  67. package/dist/es/packages/quickenter/style-jrkf/quickenter.scss +10 -2
  68. package/dist/es/packages/quickenter/style-jrkf/style.css +7 -1
  69. package/dist/es/packages/resultpage/resultpage.js +2 -1
  70. package/dist/es/packages/searchbar/searchbar.js +23 -9
  71. package/dist/es/packages/swipe/swipe.d.ts +1 -1
  72. package/dist/es/packages/tabs/tabs.js +12 -5
  73. package/dist/es/types/spec/button/base.d.ts +2 -1
  74. package/dist/es/types/spec/button/taro.d.ts +5 -1
  75. package/dist/es/types/spec/quickenter/base.d.ts +1 -0
  76. package/dist/es/utils/taro/get-rect.js +4 -2
  77. package/dist/nutui.react.umd.js +1127 -102
  78. package/dist/style-jmapp.css +1 -1
  79. package/dist/style-jmapp.scss +30 -30
  80. package/dist/style-jrkf.css +1 -1
  81. package/dist/style-jrkf.scss +34 -34
  82. package/dist/style.css +1 -1
  83. package/dist/style.scss +44 -44
  84. package/dist/styles/jd-font.scss +2 -2
  85. package/dist/styles/themes/daojia.css +1 -1
  86. package/dist/styles/themes/dark-daojia.css +1 -1
  87. package/dist/styles/themes/dark.css +1 -1
  88. package/dist/styles/themes/default.css +1 -1
  89. package/package.json +1 -1
@@ -1,3 +1,2 @@
1
1
  import { Button } from "./button";
2
- export type { ButtonType, ButtonProps, ButtonSize, ButtonShape, ButtonFill, } from "./button";
3
2
  export default Button;
@@ -180,7 +180,11 @@ export var BaseDialog = function(props) {
180
180
  };
181
181
  var _obj;
182
182
  var closeClasses = classNames((_obj = {}, _define_property(_obj, "".concat(classPrefix, "-close"), true), _define_property(_obj, "".concat(classPrefix, "-close-").concat(closeIconPosition), true), _obj));
183
- var systomIcon = closeIconPosition !== 'bottom' ? /*#__PURE__*/ React.createElement(Close, null) : /*#__PURE__*/ React.createElement(Failure, null);
183
+ var systemIcon = closeIconPosition !== 'bottom' ? /*#__PURE__*/ React.createElement(Close, {
184
+ ariaHidden: true
185
+ }) : /*#__PURE__*/ React.createElement(Failure, {
186
+ ariaHidden: true
187
+ });
184
188
  return /*#__PURE__*/ React.createElement(View, {
185
189
  className: closeClasses,
186
190
  onClick: handleClose,
@@ -188,7 +192,7 @@ export var BaseDialog = function(props) {
188
192
  ariaLabel: locale.close,
189
193
  // @ts-ignore
190
194
  tabIndex: 0
191
- }, /*#__PURE__*/ React.isValidElement(closeIcon) ? closeIcon : systomIcon);
195
+ }, /*#__PURE__*/ React.isValidElement(closeIcon) ? closeIcon : systemIcon);
192
196
  };
193
197
  var onHandleClickOverlay = function(e) {
194
198
  if (closeOnOverlayClick && visible && e.target === e.currentTarget) {
@@ -6,7 +6,7 @@ import React from "react";
6
6
  import classNames from "classnames";
7
7
  import { View } from "@tarojs/components";
8
8
  import { ComponentDefaults } from "../../utils/typings";
9
- import { useRtl } from "../configprovider/configprovider";
9
+ import { useRtl } from "../configprovider/index";
10
10
  var defaultProps = _object_spread_props(_object_spread({}, ComponentDefaults), {
11
11
  contentPosition: 'center',
12
12
  direction: 'horizontal'
@@ -1,11 +1,11 @@
1
1
  import React, { FunctionComponent, ReactNode } from 'react';
2
2
  import { BasicComponent } from "../../utils/typings";
3
- import { ButtonFill, ButtonSize, ButtonType } from "../button/button";
3
+ import { UIFill, UISize, UIType } from "../../types/base/atoms";
4
4
  export interface EmptyAction {
5
5
  text: React.ReactNode;
6
- type?: ButtonType;
7
- size?: ButtonSize;
8
- fill?: ButtonFill;
6
+ type?: UIType;
7
+ size?: UISize;
8
+ fill?: UIFill;
9
9
  disabled?: boolean;
10
10
  onClick?: () => () => void;
11
11
  }
@@ -9,6 +9,7 @@ import { Image as TImage, View } from "@tarojs/components";
9
9
  import { Image as ImageIcon, ImageError } from "@nutui/icons-react-taro";
10
10
  import classNames from "classnames";
11
11
  import { pxTransform } from "../../utils/taro/px-transform";
12
+ import { useConfig } from "../configprovider/index";
12
13
  var defaultProps = {
13
14
  src: '',
14
15
  error: true,
@@ -30,6 +31,7 @@ export var Image = function(props) {
30
31
  ]);
31
32
  var _useState = _sliced_to_array(useState(true), 2), innerLoading = _useState[0], setInnerLoading = _useState[1];
32
33
  var _useState1 = _sliced_to_array(useState(false), 2), isError = _useState1[0], setIsError = _useState1[1];
34
+ var locale = useConfig().locale;
33
35
  var pxCheck = function(value) {
34
36
  return Number.isNaN(Number(value)) ? String(value) : pxTransform(+value);
35
37
  };
@@ -62,8 +64,11 @@ export var Image = function(props) {
62
64
  if (!isError) return null;
63
65
  if (typeof error === 'boolean' && error === true && !innerLoading) {
64
66
  return /*#__PURE__*/ React.createElement(View, {
65
- className: "".concat(classPrefix, "-error")
66
- }, /*#__PURE__*/ React.createElement(ImageError, null));
67
+ className: "".concat(classPrefix, "-error"),
68
+ ariaLabel: locale.image.errorTip || ''
69
+ }, /*#__PURE__*/ React.createElement(ImageError, {
70
+ ariaHidden: true
71
+ }));
67
72
  }
68
73
  if (/*#__PURE__*/ React.isValidElement(error) && !innerLoading) {
69
74
  return /*#__PURE__*/ React.createElement(View, {
@@ -74,7 +79,8 @@ export var Image = function(props) {
74
79
  }, [
75
80
  error,
76
81
  isError,
77
- innerLoading
82
+ innerLoading,
83
+ locale
78
84
  ]);
79
85
  var renderLoading = useCallback(function() {
80
86
  if (!loading) return null;
@@ -100,6 +106,8 @@ export var Image = function(props) {
100
106
  className: classNames("".concat(classPrefix, "-default"), className && "".concat(className, "-image"), _define_property({}, "".concat(classPrefix, "-error"), isError)),
101
107
  style: imgStyle,
102
108
  src: src,
109
+ // @ts-ignore
110
+ ariaHidden: isError,
103
111
  onLoad: function(e) {
104
112
  return handleLoad(e);
105
113
  },
@@ -191,7 +191,9 @@ export var Input = /*#__PURE__*/ forwardRef(function(props, ref) {
191
191
  confirmType: confirmType,
192
192
  onBlur: handleBlur,
193
193
  onFocus: handleFocus,
194
- onInput: handleInput
194
+ onInput: handleInput,
195
+ ariaLabel: props.ariaLabel || // eslint-disable-next-line no-nested-ternary
196
+ (value ? undefined : placeholder === undefined ? locale.placeholder : placeholder)
195
197
  })), /*#__PURE__*/ React.createElement(View, {
196
198
  style: {
197
199
  display: clearable && !readOnly && active && value.length > 0 ? 'flex' : 'none',
@@ -204,8 +206,13 @@ export var Input = /*#__PURE__*/ forwardRef(function(props, ref) {
204
206
  setValue('');
205
207
  onClear === null || onClear === void 0 ? void 0 : onClear('');
206
208
  }
207
- }
208
- }, clearIcon || /*#__PURE__*/ React.createElement(MaskClose, {
209
+ },
210
+ ariaRole: "button",
211
+ ariaLabel: locale.clear || '清除'
212
+ }, clearIcon ? /*#__PURE__*/ React.cloneElement(clearIcon, {
213
+ ariaHidden: true
214
+ }) : /*#__PURE__*/ React.createElement(MaskClose, {
215
+ ariaHidden: true,
209
216
  className: "nut-input-clear"
210
217
  })));
211
218
  });
@@ -209,8 +209,7 @@ export var Popup = function(props) {
209
209
  onClick: handleCloseIconClick,
210
210
  ariaRole: "button",
211
211
  ariaLabel: closeAriaLabel || locale.close
212
- }, /*#__PURE__*/ React.isValidElement(closeIcon) ? closeIcon : // @ts-ignore
213
- /*#__PURE__*/ React.createElement(Close, {
212
+ }, /*#__PURE__*/ React.isValidElement(closeIcon) ? closeIcon : /*#__PURE__*/ React.createElement(Close, {
214
213
  ariaHidden: true
215
214
  }));
216
215
  }, [
@@ -22,7 +22,7 @@ var defaultProps = _object_spread_props(_object_spread({}, ComponentDefaults), {
22
22
  export var Progress = function(props) {
23
23
  var rtl = useRtl();
24
24
  var _ref = _object_spread({}, defaultProps, props), className = _ref.className, style = _ref.style, percent = _ref.percent, background = _ref.background, color = _ref.color, strokeWidth = _ref.strokeWidth, showText = _ref.showText, animated = _ref.animated, children = _ref.children, lazy = _ref.lazy, delay = _ref.delay, // tc
25
- showInfo = _ref.showInfo, borderRadius = _ref.borderRadius, fontSize = _ref.fontSize, activeColor = _ref.activeColor, backgroundColor = _ref.backgroundColor, active = _ref.active, activeMode = _ref.activeMode, duration = _ref.duration, ariaLabel = _ref.ariaLabel, onActiveEnd = _ref.onActiveEnd, rest = _object_without_properties(_ref, [
25
+ showInfo = _ref.showInfo, borderRadius = _ref.borderRadius, fontSize = _ref.fontSize, activeColor = _ref.activeColor, backgroundColor = _ref.backgroundColor, active = _ref.active, activeMode = _ref.activeMode, duration = _ref.duration, onActiveEnd = _ref.onActiveEnd, rest = _object_without_properties(_ref, [
26
26
  "className",
27
27
  "style",
28
28
  "percent",
@@ -42,7 +42,6 @@ export var Progress = function(props) {
42
42
  "active",
43
43
  "activeMode",
44
44
  "duration",
45
- "ariaLabel",
46
45
  "onActiveEnd"
47
46
  ]);
48
47
  var classPrefix = 'nut-progress';
@@ -209,8 +208,7 @@ export var Progress = function(props) {
209
208
  ref: progressRef,
210
209
  id: selector,
211
210
  className: classNames(classPrefix, className),
212
- style: style,
213
- "aria-label": ariaLabel
211
+ style: style
214
212
  }, rest), /*#__PURE__*/ React.createElement(View, {
215
213
  className: "".concat(classPrefix, "-outer"),
216
214
  style: stylesOuter
@@ -9,7 +9,6 @@ import Taro from "@tarojs/taro";
9
9
  import classNames from "classnames";
10
10
  import { Close } from "@nutui/icons-react-taro";
11
11
  import Popup from "../popup/index";
12
- import SafeArea from "../safearea/index";
13
12
  import { ComponentDefaults } from "../../utils/typings";
14
13
  import { usePropsValue } from "../../hooks/use-props-value";
15
14
  import Badge from "../badge/index";
@@ -17,10 +16,11 @@ import { useConfig } from "../configprovider";
17
16
  var defaultProps = _object_spread_props(_object_spread({}, ComponentDefaults), {
18
17
  options: [],
19
18
  visible: false,
20
- closeOnOverlayClick: true
19
+ closeOnOverlayClick: true,
20
+ safeAreaInsetTop: true
21
21
  });
22
22
  var InternalQuickEnter = function(props, ref) {
23
- var _ref = _object_spread({}, defaultProps, props), children = _ref.children, visible = _ref.visible, title = _ref.title, _ref_options = _ref.options, options = _ref_options === void 0 ? [] : _ref_options, closeOnOverlayClick = _ref.closeOnOverlayClick, _ref_popupProps = _ref.popupProps, popupProps = _ref_popupProps === void 0 ? {} : _ref_popupProps, className = _ref.className, style = _ref.style, onClose = _ref.onClose, onChange = _ref.onChange, closeIcon = _ref.closeIcon, rest = _object_without_properties(_ref, [
23
+ var _ref = _object_spread({}, defaultProps, props), children = _ref.children, visible = _ref.visible, title = _ref.title, _ref_options = _ref.options, options = _ref_options === void 0 ? [] : _ref_options, closeOnOverlayClick = _ref.closeOnOverlayClick, _ref_popupProps = _ref.popupProps, popupProps = _ref_popupProps === void 0 ? {} : _ref_popupProps, className = _ref.className, style = _ref.style, onClose = _ref.onClose, onChange = _ref.onChange, closeIcon = _ref.closeIcon, safeAreaInsetTop = _ref.safeAreaInsetTop, rest = _object_without_properties(_ref, [
24
24
  "children",
25
25
  "visible",
26
26
  "title",
@@ -31,12 +31,15 @@ var InternalQuickEnter = function(props, ref) {
31
31
  "style",
32
32
  "onClose",
33
33
  "onChange",
34
- "closeIcon"
34
+ "closeIcon",
35
+ "safeAreaInsetTop"
35
36
  ]);
36
37
  var locale = useConfig().locale;
37
38
  var mergedTitle = title || locale.quickenter.title;
38
39
  var classPrefix = 'nut-quickenter';
39
- var classes = classNames(classPrefix, className);
40
+ var classes = classNames(classPrefix, className, {
41
+ 'safe-area-top': safeAreaInsetTop
42
+ });
40
43
  var _usePropsValue = _sliced_to_array(usePropsValue({
41
44
  value: props.visible,
42
45
  defaultValue: false,
@@ -81,7 +84,9 @@ var InternalQuickEnter = function(props, ref) {
81
84
  e.stopPropagation();
82
85
  onCancelEvent();
83
86
  }
84
- }, closeIcon || /*#__PURE__*/ React.createElement(Close, null)));
87
+ }, closeIcon || /*#__PURE__*/ React.createElement(Close, {
88
+ ariaLabel: locale.close
89
+ })));
85
90
  };
86
91
  var renderContent = function() {
87
92
  return /*#__PURE__*/ React.createElement(View, {
@@ -89,20 +94,23 @@ var InternalQuickEnter = function(props, ref) {
89
94
  }, /*#__PURE__*/ React.createElement(View, {
90
95
  className: "".concat(classPrefix, "-list")
91
96
  }, options.map(function(item, index) {
92
- var _item_badgeProps;
93
- var _item_badge;
97
+ var _item_badgeProps, _item_badgeProps1;
98
+ var _item_badge, _item_badge1;
94
99
  return /*#__PURE__*/ React.createElement(View, {
95
100
  key: index,
96
101
  className: "".concat(classPrefix, "-item"),
102
+ ariaLabel: "".concat(item.title, " ").concat((_item_badge = item.badge) !== null && _item_badge !== void 0 ? _item_badge : (_item_badgeProps = item.badgeProps) === null || _item_badgeProps === void 0 ? void 0 : _item_badgeProps.value),
97
103
  onClick: function() {
98
104
  return handleItemClick(item, index);
99
105
  }
100
106
  }, /*#__PURE__*/ React.createElement(View, {
101
- className: "".concat(classPrefix, "-item-icon")
107
+ className: "".concat(classPrefix, "-item-icon"),
108
+ ariaHidden: true
102
109
  }, /*#__PURE__*/ React.createElement(Badge, _object_spread_props(_object_spread({}, item.badgeProps), {
103
- value: (_item_badge = item.badge) !== null && _item_badge !== void 0 ? _item_badge : (_item_badgeProps = item.badgeProps) === null || _item_badgeProps === void 0 ? void 0 : _item_badgeProps.value
110
+ value: (_item_badge1 = item.badge) !== null && _item_badge1 !== void 0 ? _item_badge1 : (_item_badgeProps1 = item.badgeProps) === null || _item_badgeProps1 === void 0 ? void 0 : _item_badgeProps1.value
104
111
  }), item.icon)), /*#__PURE__*/ React.createElement(View, {
105
- className: "".concat(classPrefix, "-item-title")
112
+ className: "".concat(classPrefix, "-item-title"),
113
+ ariaHidden: true
106
114
  }, item.title));
107
115
  })));
108
116
  };
@@ -127,8 +135,6 @@ var InternalQuickEnter = function(props, ref) {
127
135
  onCancelEvent();
128
136
  },
129
137
  onClose: onCancelEvent
130
- }), /*#__PURE__*/ React.createElement(SafeArea, {
131
- position: "top"
132
138
  }), renderQuickEnterElement()));
133
139
  };
134
140
  var QuickEnter = /*#__PURE__*/ React.forwardRef(InternalQuickEnter);
@@ -1,6 +1,7 @@
1
1
  .nut-quickenter {
2
2
  width: 100%;
3
- max-height: $quickenter-max-height; // Limit height for scrolling
3
+ /* 限制弹层最大高度,包含安全区 */
4
+ max-height: calc(#{$quickenter-max-height} + env(safe-area-inset-top, 0));
4
5
  background: $quickenter-bg-color;
5
6
  border-radius: 0 0 12px 12px;
6
7
  overflow: hidden;
@@ -10,6 +11,13 @@
10
11
  box-shadow: $quickenter-box-shadow;
11
12
  // backdrop-filter: $quickenter-backdrop-filter;
12
13
 
14
+ &.safe-area-top {
15
+ /* 使用 env fallback,确保旧浏览器返回 0 */
16
+ padding-top: calc(
17
+ env(safe-area-inset-top, 0) * var(--nutui-safe-area-multiple, 1)
18
+ );
19
+ }
20
+
13
21
  &-control {
14
22
  display: flex;
15
23
  align-items: center;
@@ -44,7 +52,7 @@
44
52
  &-content {
45
53
  flex: 1;
46
54
  padding: 10px 28px;
47
- overflow-y: hidden; // Default: no scrolling
55
+ overflow-y: hidden; // 始终可滚动,防止内容被遮挡
48
56
  box-sizing: border-box;
49
57
 
50
58
  &-scrollable {
@@ -1,10 +1,12 @@
1
+ @charset "UTF-8";
1
2
  /* #ifdef harmony */
2
3
  /* #endif */
3
4
  /* #ifndef harmony */
4
5
  /* #endif */
5
6
  .nut-quickenter {
6
7
  width: 100%;
7
- max-height: var(--nutui-quickenter-max-height, 256px);
8
+ /* 限制弹层最大高度,包含安全区 */
9
+ max-height: calc(var(--nutui-quickenter-max-height, 256px) + env(safe-area-inset-top, 0));
8
10
  background: var(--nutui-quickenter-bg-color, #f5f5f5);
9
11
  border-radius: 0 0 12px 12px;
10
12
  overflow: hidden;
@@ -13,6 +15,10 @@
13
15
  flex-direction: column;
14
16
  box-shadow: var(--nutui-quickenter-box-shadow, 0px 8px 16px rgba(141, 153, 167, 0.2), 0px -0.5px 0px rgba(0, 0, 0, 0.05) inset);
15
17
  }
18
+ .nut-quickenter.safe-area-top {
19
+ /* 使用 env fallback,确保旧浏览器返回 0 */
20
+ padding-top: calc(env(safe-area-inset-top, 0) * var(--nutui-safe-area-multiple, 1));
21
+ }
16
22
  .nut-quickenter-control {
17
23
  display: flex;
18
24
  align-items: center;
@@ -405,7 +405,8 @@
405
405
 
406
406
  .nut-quickenter {
407
407
  width: 100%;
408
- max-height: var(--nutui-quickenter-max-height, 256px);
408
+ /* 限制弹层最大高度,包含安全区 */
409
+ max-height: calc(var(--nutui-quickenter-max-height, 256px) + env(safe-area-inset-top, 0));
409
410
  background: var(--nutui-quickenter-bg-color, #f5f5f5);
410
411
  border-radius: 0 0 12px 12px;
411
412
  overflow: hidden;
@@ -414,6 +415,10 @@
414
415
  flex-direction: column;
415
416
  box-shadow: var(--nutui-quickenter-box-shadow, 0px 8px 16px rgba(141, 153, 167, 0.2), 0px -0.5px 0px rgba(0, 0, 0, 0.05) inset);
416
417
  }
418
+ .nut-quickenter.safe-area-top {
419
+ /* 使用 env fallback,确保旧浏览器返回 0 */
420
+ padding-top: calc(env(safe-area-inset-top, 0) * var(--nutui-safe-area-multiple, 1));
421
+ }
417
422
  .nut-quickenter-control {
418
423
  display: flex;
419
424
  align-items: center;
@@ -1,6 +1,7 @@
1
1
  .nut-quickenter {
2
2
  width: 100%;
3
- max-height: $quickenter-max-height; // Limit height for scrolling
3
+ /* 限制弹层最大高度,包含安全区 */
4
+ max-height: calc(#{$quickenter-max-height} + env(safe-area-inset-top, 0));
4
5
  background: $quickenter-bg-color;
5
6
  border-radius: 0 0 12px 12px;
6
7
  overflow: hidden;
@@ -10,6 +11,13 @@
10
11
  box-shadow: $quickenter-box-shadow;
11
12
  // backdrop-filter: $quickenter-backdrop-filter;
12
13
 
14
+ &.safe-area-top {
15
+ /* 使用 env fallback,确保旧浏览器返回 0 */
16
+ padding-top: calc(
17
+ env(safe-area-inset-top, 0) * var(--nutui-safe-area-multiple, 1)
18
+ );
19
+ }
20
+
13
21
  &-control {
14
22
  display: flex;
15
23
  align-items: center;
@@ -44,7 +52,7 @@
44
52
  &-content {
45
53
  flex: 1;
46
54
  padding: 10px 28px;
47
- overflow-y: hidden; // Default: no scrolling
55
+ overflow-y: hidden; // 始终可滚动,防止内容被遮挡
48
56
  box-sizing: border-box;
49
57
 
50
58
  &-scrollable {
@@ -1,10 +1,12 @@
1
+ @charset "UTF-8";
1
2
  /* #ifdef harmony */
2
3
  /* #endif */
3
4
  /* #ifndef harmony */
4
5
  /* #endif */
5
6
  .nut-quickenter {
6
7
  width: 100%;
7
- max-height: var(--nutui-quickenter-max-height, 256px);
8
+ /* 限制弹层最大高度,包含安全区 */
9
+ max-height: calc(var(--nutui-quickenter-max-height, 256px) + env(safe-area-inset-top, 0));
8
10
  background: var(--nutui-quickenter-bg-color, #f5f5f5);
9
11
  border-radius: 0 0 12px 12px;
10
12
  overflow: hidden;
@@ -13,6 +15,10 @@
13
15
  flex-direction: column;
14
16
  box-shadow: var(--nutui-quickenter-box-shadow, 0px 8px 16px rgba(141, 153, 167, 0.2), 0px -0.5px 0px rgba(0, 0, 0, 0.05) inset);
15
17
  }
18
+ .nut-quickenter.safe-area-top {
19
+ /* 使用 env fallback,确保旧浏览器返回 0 */
20
+ padding-top: calc(env(safe-area-inset-top, 0) * var(--nutui-safe-area-multiple, 1));
21
+ }
16
22
  .nut-quickenter-control {
17
23
  display: flex;
18
24
  align-items: center;
@@ -1,6 +1,7 @@
1
1
  .nut-quickenter {
2
2
  width: 100%;
3
- max-height: $quickenter-max-height; // Limit height for scrolling
3
+ /* 限制弹层最大高度,包含安全区 */
4
+ max-height: calc(#{$quickenter-max-height} + env(safe-area-inset-top, 0));
4
5
  background: $quickenter-bg-color;
5
6
  border-radius: 0 0 12px 12px;
6
7
  overflow: hidden;
@@ -10,6 +11,13 @@
10
11
  box-shadow: $quickenter-box-shadow;
11
12
  // backdrop-filter: $quickenter-backdrop-filter;
12
13
 
14
+ &.safe-area-top {
15
+ /* 使用 env fallback,确保旧浏览器返回 0 */
16
+ padding-top: calc(
17
+ env(safe-area-inset-top, 0) * var(--nutui-safe-area-multiple, 1)
18
+ );
19
+ }
20
+
13
21
  &-control {
14
22
  display: flex;
15
23
  align-items: center;
@@ -44,7 +52,7 @@
44
52
  &-content {
45
53
  flex: 1;
46
54
  padding: 10px 28px;
47
- overflow-y: hidden; // Default: no scrolling
55
+ overflow-y: hidden; // 始终可滚动,防止内容被遮挡
48
56
  box-sizing: border-box;
49
57
 
50
58
  &-scrollable {
@@ -1,10 +1,12 @@
1
+ @charset "UTF-8";
1
2
  /* #ifdef harmony */
2
3
  /* #endif */
3
4
  /* #ifndef harmony */
4
5
  /* #endif */
5
6
  .nut-quickenter {
6
7
  width: 100%;
7
- max-height: var(--nutui-quickenter-max-height, 256px);
8
+ /* 限制弹层最大高度,包含安全区 */
9
+ max-height: calc(var(--nutui-quickenter-max-height, 256px) + env(safe-area-inset-top, 0));
8
10
  background: var(--nutui-quickenter-bg-color, #f5f5f5);
9
11
  border-radius: 0 0 12px 12px;
10
12
  overflow: hidden;
@@ -13,6 +15,10 @@
13
15
  flex-direction: column;
14
16
  box-shadow: var(--nutui-quickenter-box-shadow, 0px 8px 16px rgba(141, 153, 167, 0.2), 0px -0.5px 0px rgba(0, 0, 0, 0.05) inset);
15
17
  }
18
+ .nut-quickenter.safe-area-top {
19
+ /* 使用 env fallback,确保旧浏览器返回 0 */
20
+ padding-top: calc(env(safe-area-inset-top, 0) * var(--nutui-safe-area-multiple, 1));
21
+ }
16
22
  .nut-quickenter-control {
17
23
  display: flex;
18
24
  align-items: center;
@@ -39,7 +39,8 @@ export var ResultPage = function(props) {
39
39
  className: cls,
40
40
  style: style
41
41
  }, /*#__PURE__*/ React.createElement(View, {
42
- className: "".concat(classPrefix, "-icon")
42
+ className: "".concat(classPrefix, "-icon"),
43
+ ariaHidden: true
43
44
  }, icon || defaultStatus[status]), typeof title === 'string' && title ? /*#__PURE__*/ React.createElement(View, {
44
45
  className: "".concat(classPrefix, "-title")
45
46
  }, title) : title, typeof description === 'string' && description ? /*#__PURE__*/ React.createElement(Text, {
@@ -22,7 +22,9 @@ var defaultProps = _object_spread_props(_object_spread({}, ComponentDefaults), {
22
22
  left: '',
23
23
  right: '',
24
24
  rightIn: '',
25
- leftIn: /*#__PURE__*/ React.createElement(Search, null),
25
+ leftIn: /*#__PURE__*/ React.createElement(Search, {
26
+ ariaHidden: true
27
+ }),
26
28
  tag: false
27
29
  });
28
30
  export var SearchBar = function(props) {
@@ -177,12 +179,15 @@ export var SearchBar = function(props) {
177
179
  onClick: function(e) {
178
180
  return onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, e);
179
181
  }
180
- }, item, /*#__PURE__*/ React.createElement(Close, null));
182
+ }, item, /*#__PURE__*/ React.createElement(Close, {
183
+ ariaLabel: locale.close
184
+ }));
181
185
  }));
182
186
  }, [
183
187
  value,
184
188
  onItemClick,
185
- innerTag
189
+ innerTag,
190
+ locale.close
186
191
  ]);
187
192
  var renderLeftIn = useCallback(function() {
188
193
  if (!leftIn) return null;
@@ -195,11 +200,16 @@ export var SearchBar = function(props) {
195
200
  var renderLeft = useCallback(function() {
196
201
  if (!backable && !left) return null;
197
202
  return /*#__PURE__*/ React.createElement(View, {
198
- className: "".concat(classPrefix, "-left")
199
- }, backable ? /*#__PURE__*/ React.createElement(ArrowLeft, null) : left);
203
+ className: "".concat(classPrefix, "-left"),
204
+ ariaRole: backable ? 'button' : undefined,
205
+ ariaLabel: backable ? locale.back : undefined
206
+ }, backable ? /*#__PURE__*/ React.createElement(ArrowLeft, {
207
+ ariaHidden: true
208
+ }) : left);
200
209
  }, [
201
210
  backable,
202
- left
211
+ left,
212
+ locale
203
213
  ]);
204
214
  var renderRightIn = useCallback(function() {
205
215
  if (!rightIn) return null;
@@ -226,13 +236,17 @@ export var SearchBar = function(props) {
226
236
  visibility: "".concat(!innerTag && value && clearable ? 'visible' : 'hidden')
227
237
  },
228
238
  onClick: clearaVal,
229
- "aria-label": "清除"
230
- }, /*#__PURE__*/ React.createElement(MaskClose, null));
239
+ ariaRole: "button",
240
+ ariaLabel: locale.clear
241
+ }, /*#__PURE__*/ React.createElement(MaskClose, {
242
+ ariaHidden: true
243
+ }));
231
244
  }, [
232
245
  value,
233
246
  clearable,
234
247
  clearaVal,
235
- innerTag
248
+ innerTag,
249
+ locale
236
250
  ]);
237
251
  var onConfirm = function() {
238
252
  onSearch && onSearch(value);
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
2
  import { SwipeRef, TaroSwipeProps } from "../../types";
3
- export declare const Swipe: React.ForwardRefExoticComponent<Partial<TaroSwipeProps> & Omit<React.HTMLAttributes<HTMLDivElement>, "onTouchEnd" | "onTouchMove" | "onTouchStart"> & React.RefAttributes<SwipeRef>>;
3
+ export declare const Swipe: React.ForwardRefExoticComponent<Partial<TaroSwipeProps> & Omit<React.HTMLAttributes<HTMLDivElement>, "onTouchStart" | "onTouchMove" | "onTouchEnd"> & React.RefAttributes<SwipeRef>>;
@@ -51,6 +51,7 @@ export var Tabs = function(props) {
51
51
  onChange: onChange
52
52
  }), 2), value = _usePropsValue[0], setValue = _usePropsValue[1];
53
53
  var titleItemsRef = useRef([]);
54
+ var tabsRef = useRef(null);
54
55
  var getTitles = function() {
55
56
  var titles = [];
56
57
  React.Children.forEach(children, function(child, idx) {
@@ -90,7 +91,8 @@ export var Tabs = function(props) {
90
91
  var classesTitle = classNames("".concat(classPrefix, "-titles"), (_obj = {}, _define_property(_obj, "".concat(classPrefix, "-titles-").concat(activeType), activeType), _define_property(_obj, "".concat(classPrefix, "-titles-").concat(align), align), _obj));
91
92
  var getRect = function(selector) {
92
93
  return new Promise(function(resolve) {
93
- createSelectorQuery().select(selector).boundingClientRect().exec(function() {
94
+ var _tabsRef_current;
95
+ createSelectorQuery().in(((_tabsRef_current = tabsRef.current) === null || _tabsRef_current === void 0 ? void 0 : _tabsRef_current._scope) || tabsRef.current).select(selector).boundingClientRect().exec(function() {
94
96
  var rect = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [];
95
97
  resolve(rect[0]);
96
98
  });
@@ -98,7 +100,8 @@ export var Tabs = function(props) {
98
100
  };
99
101
  var getAllRect = function(selector) {
100
102
  return new Promise(function(resolve) {
101
- createSelectorQuery().selectAll(selector).boundingClientRect().exec(function() {
103
+ var _tabsRef_current;
104
+ createSelectorQuery().in(((_tabsRef_current = tabsRef.current) === null || _tabsRef_current === void 0 ? void 0 : _tabsRef_current._scope) || tabsRef.current).selectAll(selector).boundingClientRect().exec(function() {
102
105
  var rect = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [];
103
106
  resolve(rect[0]);
104
107
  });
@@ -178,9 +181,11 @@ export var Tabs = function(props) {
178
181
  setValue(item.value);
179
182
  }
180
183
  };
181
- return /*#__PURE__*/ React.createElement(View, _object_spread({
184
+ return /*#__PURE__*/ React.createElement(View, _object_spread_props(_object_spread({
182
185
  className: classes
183
- }, rest), /*#__PURE__*/ React.createElement(ScrollView, {
186
+ }, rest), {
187
+ ref: tabsRef
188
+ }), /*#__PURE__*/ React.createElement(ScrollView, {
184
189
  enableFlex: true,
185
190
  scrollX: direction === 'horizontal',
186
191
  scrollY: direction === 'vertical',
@@ -212,7 +217,9 @@ export var Tabs = function(props) {
212
217
  background: activeColor
213
218
  }
214
219
  }), activeType === 'smile' && /*#__PURE__*/ React.createElement(View, {
215
- className: "".concat(classPrefix, "-titles-item-smile")
220
+ className: "".concat(classPrefix, "-titles-item-smile"),
221
+ // @ts-ignore
222
+ ariaHidden: true
216
223
  }, /*#__PURE__*/ React.createElement(JoySmile, {
217
224
  color: activeColor
218
225
  })), /*#__PURE__*/ React.createElement(View, {
@@ -1,4 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
+ import type { MouseEvent } from 'react';
2
3
  import { BaseProps } from '../../base/props';
3
4
  import { UIFill, UIRound, UISize, UIType } from '../../base/atoms';
4
5
  export interface BaseButton extends BaseProps {
@@ -50,5 +51,5 @@ export interface BaseButton extends BaseProps {
50
51
  /**
51
52
  * 点击按钮时触发
52
53
  */
53
- onClick: (e: any) => void
54
+ onClick: (e: MouseEvent<HTMLButtonElement>) => void
54
55
  }
@@ -1,3 +1,7 @@
1
+ import { ButtonProps as MiniProgramButtonProps } from '@tarojs/components';
1
2
  import { BaseButton } from './base';
2
- export interface TaroButtonProps extends BaseButton {
3
+ type OmitMiniProgramButtonProps = Omit<MiniProgramButtonProps, 'size' | 'type' | 'onClick' | 'style' | 'disabled' | 'loading' | 'id'>;
4
+ export interface TaroButtonProps extends BaseButton, OmitMiniProgramButtonProps {
5
+ nativeType: 'submit' | 'reset';
3
6
  }
7
+ export {};
@@ -38,6 +38,7 @@ export interface BaseQuickEnter<POPUP_PROPS = any> extends BaseProps {
38
38
  * 自定义关闭图标
39
39
  */
40
40
  closeIcon?: ReactNode
41
+ safeAreaInsetTop?: boolean;
41
42
  onClose?: () => void;
42
43
  onChange?: (item: QuickEnterOption, index: number) => void;
43
44
  children?: ReactNode;
@@ -34,7 +34,8 @@ export var getRectInMultiPlatform = function(element) {
34
34
  resolve(lru.get(element));
35
35
  return;
36
36
  }
37
- createSelectorQuery().select("#".concat(harmonyId || element.uid)).boundingClientRect().exec(function(param) {
37
+ createSelectorQuery()// https://taro.jd.com/docs/reference/config/page/
38
+ .in((element === null || element === void 0 ? void 0 : element._scope) || element).select("#".concat(harmonyId || element.uid)).boundingClientRect().exec(function(param) {
38
39
  var _param = _sliced_to_array(param, 1), rects = _param[0];
39
40
  if (rects) {
40
41
  lru.set(element, rects);
@@ -66,7 +67,8 @@ export var getRectInMultiPlatformWithoutCache = function(element) {
66
67
  return [
67
68
  2,
68
69
  new Promise(function(resolve, reject) {
69
- createSelectorQuery().select("#".concat(harmonyId || element.uid)).boundingClientRect().exec(function(param) {
70
+ createSelectorQuery()// https://taro.jd.com/docs/reference/config/page/
71
+ .in((element === null || element === void 0 ? void 0 : element._scope) || element).select("#".concat(harmonyId || element.uid)).boundingClientRect().exec(function(param) {
70
72
  var _param = _sliced_to_array(param, 1), rects = _param[0];
71
73
  resolve(rects);
72
74
  });