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

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 (93) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/locales/base.d.ts +6 -0
  3. package/dist/cjs/locales/en-US.js +17 -1
  4. package/dist/cjs/locales/id-ID.js +17 -1
  5. package/dist/cjs/locales/ja-JP.js +16 -2
  6. package/dist/cjs/locales/tr-TR.js +17 -1
  7. package/dist/cjs/locales/zh-CN.js +15 -1
  8. package/dist/cjs/locales/zh-TW.js +15 -1
  9. package/dist/cjs/locales/zh-UG.js +17 -1
  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/calendarcard/calendarcard.js +30 -8
  18. package/dist/cjs/packages/dialog/dialog.js +6 -2
  19. package/dist/cjs/packages/divider/divider.js +2 -2
  20. package/dist/cjs/packages/empty/empty.d.ts +4 -4
  21. package/dist/cjs/packages/image/image.js +11 -3
  22. package/dist/cjs/packages/input/input.js +10 -3
  23. package/dist/cjs/packages/progress/progress.js +2 -4
  24. package/dist/cjs/packages/quickenter/quickenter.js +21 -15
  25. package/dist/cjs/packages/quickenter/style/quickenter.scss +10 -2
  26. package/dist/cjs/packages/quickenter/style/style.css +7 -1
  27. package/dist/cjs/packages/quickenter/style/style.harmony.css +6 -1
  28. package/dist/cjs/packages/quickenter/style-jmapp/quickenter.scss +10 -2
  29. package/dist/cjs/packages/quickenter/style-jmapp/style.css +7 -1
  30. package/dist/cjs/packages/quickenter/style-jrkf/quickenter.scss +10 -2
  31. package/dist/cjs/packages/quickenter/style-jrkf/style.css +7 -1
  32. package/dist/cjs/packages/resultpage/resultpage.js +2 -1
  33. package/dist/cjs/packages/searchbar/searchbar.js +23 -9
  34. package/dist/cjs/packages/swipe/swipe.d.ts +1 -1
  35. package/dist/cjs/packages/tabs/tabs.js +12 -5
  36. package/dist/cjs/types/spec/button/base.d.ts +2 -1
  37. package/dist/cjs/types/spec/button/taro.d.ts +5 -1
  38. package/dist/cjs/types/spec/calendarcard/base.d.ts +2 -0
  39. package/dist/cjs/types/spec/quickenter/base.d.ts +1 -0
  40. package/dist/cjs/utils/taro/get-rect.js +4 -2
  41. package/dist/es/locales/base.d.ts +6 -0
  42. package/dist/es/locales/en-US.js +17 -1
  43. package/dist/es/locales/id-ID.js +17 -1
  44. package/dist/es/locales/ja-JP.js +16 -2
  45. package/dist/es/locales/tr-TR.js +17 -1
  46. package/dist/es/locales/zh-CN.js +15 -1
  47. package/dist/es/locales/zh-TW.js +15 -1
  48. package/dist/es/locales/zh-UG.js +17 -1
  49. package/dist/es/packages/address/address.d.ts +1 -1
  50. package/dist/es/packages/animatingnumbers/countup.js +3 -1
  51. package/dist/es/packages/avatar/avatar.js +32 -6
  52. package/dist/es/packages/badge/badge.js +16 -3
  53. package/dist/es/packages/button/button.d.ts +2 -21
  54. package/dist/es/packages/button/button.js +2 -4
  55. package/dist/es/packages/button/index.d.ts +0 -1
  56. package/dist/es/packages/calendarcard/calendarcard.js +31 -9
  57. package/dist/es/packages/dialog/dialog.js +6 -2
  58. package/dist/es/packages/divider/divider.js +1 -1
  59. package/dist/es/packages/empty/empty.d.ts +4 -4
  60. package/dist/es/packages/image/image.js +11 -3
  61. package/dist/es/packages/input/input.js +10 -3
  62. package/dist/es/packages/popup/popup.js +1 -2
  63. package/dist/es/packages/progress/progress.js +2 -4
  64. package/dist/es/packages/quickenter/quickenter.js +19 -13
  65. package/dist/es/packages/quickenter/style/quickenter.scss +10 -2
  66. package/dist/es/packages/quickenter/style/style.css +7 -1
  67. package/dist/es/packages/quickenter/style/style.harmony.css +6 -1
  68. package/dist/es/packages/quickenter/style-jmapp/quickenter.scss +10 -2
  69. package/dist/es/packages/quickenter/style-jmapp/style.css +7 -1
  70. package/dist/es/packages/quickenter/style-jrkf/quickenter.scss +10 -2
  71. package/dist/es/packages/quickenter/style-jrkf/style.css +7 -1
  72. package/dist/es/packages/resultpage/resultpage.js +2 -1
  73. package/dist/es/packages/searchbar/searchbar.js +23 -9
  74. package/dist/es/packages/swipe/swipe.d.ts +1 -1
  75. package/dist/es/packages/tabs/tabs.js +12 -5
  76. package/dist/es/types/spec/button/base.d.ts +2 -1
  77. package/dist/es/types/spec/button/taro.d.ts +5 -1
  78. package/dist/es/types/spec/calendarcard/base.d.ts +2 -0
  79. package/dist/es/types/spec/quickenter/base.d.ts +1 -0
  80. package/dist/es/utils/taro/get-rect.js +4 -2
  81. package/dist/nutui.react.umd.js +1166 -111
  82. package/dist/style-jmapp.css +1 -1
  83. package/dist/style-jmapp.scss +24 -24
  84. package/dist/style-jrkf.css +1 -1
  85. package/dist/style-jrkf.scss +32 -32
  86. package/dist/style.css +1 -1
  87. package/dist/style.scss +40 -40
  88. package/dist/styles/jd-font.scss +2 -2
  89. package/dist/styles/themes/daojia.css +1 -1
  90. package/dist/styles/themes/dark-daojia.css +1 -1
  91. package/dist/styles/themes/dark.css +1 -1
  92. package/dist/styles/themes/default.css +1 -1
  93. package/package.json +1 -1
@@ -21,6 +21,7 @@ var _components = require("@tarojs/components");
21
21
  var _iconsreacttaro = require("@nutui/icons-react-taro");
22
22
  var _classnames = /*#__PURE__*/ _interop_require_default._(require("classnames"));
23
23
  var _pxtransform = require("../../utils/taro/px-transform");
24
+ var _index = require("../configprovider/index");
24
25
  var defaultProps = {
25
26
  src: '',
26
27
  error: true,
@@ -42,6 +43,7 @@ var Image = function Image(props) {
42
43
  ]);
43
44
  var _useState = (0, _sliced_to_array._)((0, _react.useState)(true), 2), innerLoading = _useState[0], setInnerLoading = _useState[1];
44
45
  var _useState1 = (0, _sliced_to_array._)((0, _react.useState)(false), 2), isError = _useState1[0], setIsError = _useState1[1];
46
+ var locale = (0, _index.useConfig)().locale;
45
47
  var pxCheck = function pxCheck(value) {
46
48
  return Number.isNaN(Number(value)) ? String(value) : (0, _pxtransform.pxTransform)(+value);
47
49
  };
@@ -74,8 +76,11 @@ var Image = function Image(props) {
74
76
  if (!isError) return null;
75
77
  if (typeof error === 'boolean' && error === true && !innerLoading) {
76
78
  return /*#__PURE__*/ _react.default.createElement(_components.View, {
77
- className: "".concat(classPrefix, "-error")
78
- }, /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.ImageError, null));
79
+ className: "".concat(classPrefix, "-error"),
80
+ ariaLabel: locale.image.errorTip || ''
81
+ }, /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.ImageError, {
82
+ ariaHidden: true
83
+ }));
79
84
  }
80
85
  if (/*#__PURE__*/ _react.default.isValidElement(error) && !innerLoading) {
81
86
  return /*#__PURE__*/ _react.default.createElement(_components.View, {
@@ -86,7 +91,8 @@ var Image = function Image(props) {
86
91
  }, [
87
92
  error,
88
93
  isError,
89
- innerLoading
94
+ innerLoading,
95
+ locale
90
96
  ]);
91
97
  var renderLoading = (0, _react.useCallback)(function() {
92
98
  if (!loading) return null;
@@ -112,6 +118,8 @@ var Image = function Image(props) {
112
118
  className: (0, _classnames.default)("".concat(classPrefix, "-default"), className && "".concat(className, "-image"), (0, _define_property._)({}, "".concat(classPrefix, "-error"), isError)),
113
119
  style: imgStyle,
114
120
  src: src,
121
+ // @ts-ignore
122
+ ariaHidden: isError,
115
123
  onLoad: function onLoad(e) {
116
124
  return handleLoad(e);
117
125
  },
@@ -202,7 +202,9 @@ var Input = /*#__PURE__*/ (0, _react.forwardRef)(function(props, ref) {
202
202
  confirmType: confirmType,
203
203
  onBlur: handleBlur,
204
204
  onFocus: handleFocus,
205
- onInput: handleInput
205
+ onInput: handleInput,
206
+ ariaLabel: props.ariaLabel || // eslint-disable-next-line no-nested-ternary
207
+ (value ? undefined : placeholder === undefined ? locale.placeholder : placeholder)
206
208
  })), /*#__PURE__*/ _react.default.createElement(_components.View, {
207
209
  style: {
208
210
  display: clearable && !readOnly && active && value.length > 0 ? 'flex' : 'none',
@@ -215,8 +217,13 @@ var Input = /*#__PURE__*/ (0, _react.forwardRef)(function(props, ref) {
215
217
  setValue('');
216
218
  onClear === null || onClear === void 0 ? void 0 : onClear('');
217
219
  }
218
- }
219
- }, clearIcon || /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.MaskClose, {
220
+ },
221
+ ariaRole: "button",
222
+ ariaLabel: locale.clear || '清除'
223
+ }, clearIcon ? /*#__PURE__*/ _react.default.cloneElement(clearIcon, {
224
+ ariaHidden: true
225
+ }) : /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.MaskClose, {
226
+ ariaHidden: true,
220
227
  className: "nut-input-clear"
221
228
  })));
222
229
  });
@@ -33,7 +33,7 @@ var defaultProps = (0, _object_spread_props._)((0, _object_spread._)({}, _typing
33
33
  });
34
34
  var Progress = function Progress(props) {
35
35
  var rtl = (0, _index.useRtl)();
36
- var _ref = (0, _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, 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 = (0, _object_without_properties._)(_ref, [
36
+ var _ref = (0, _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, 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 = (0, _object_without_properties._)(_ref, [
37
37
  "className",
38
38
  "style",
39
39
  "percent",
@@ -53,7 +53,6 @@ var Progress = function Progress(props) {
53
53
  "active",
54
54
  "activeMode",
55
55
  "duration",
56
- "ariaLabel",
57
56
  "onActiveEnd"
58
57
  ]);
59
58
  var classPrefix = 'nut-progress';
@@ -220,8 +219,7 @@ var Progress = function Progress(props) {
220
219
  ref: progressRef,
221
220
  id: selector,
222
221
  className: (0, _classnames.default)(classPrefix, className),
223
- style: style,
224
- "aria-label": ariaLabel
222
+ style: style
225
223
  }, rest), /*#__PURE__*/ _react.default.createElement(_components.View, {
226
224
  className: "".concat(classPrefix, "-outer"),
227
225
  style: stylesOuter
@@ -21,18 +21,18 @@ var _taro = /*#__PURE__*/ _interop_require_default._(require("@tarojs/taro"));
21
21
  var _classnames = /*#__PURE__*/ _interop_require_default._(require("classnames"));
22
22
  var _iconsreacttaro = require("@nutui/icons-react-taro");
23
23
  var _index = /*#__PURE__*/ _interop_require_default._(require("../popup/index"));
24
- var _index1 = /*#__PURE__*/ _interop_require_default._(require("../safearea/index"));
25
24
  var _typings = require("../../utils/typings");
26
25
  var _usepropsvalue = require("../../hooks/use-props-value");
27
- var _index2 = /*#__PURE__*/ _interop_require_default._(require("../badge/index"));
26
+ var _index1 = /*#__PURE__*/ _interop_require_default._(require("../badge/index"));
28
27
  var _configprovider = require("../configprovider");
29
28
  var defaultProps = (0, _object_spread_props._)((0, _object_spread._)({}, _typings.ComponentDefaults), {
30
29
  options: [],
31
30
  visible: false,
32
- closeOnOverlayClick: true
31
+ closeOnOverlayClick: true,
32
+ safeAreaInsetTop: true
33
33
  });
34
34
  var InternalQuickEnter = function InternalQuickEnter(props, ref) {
35
- var _ref = (0, _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 = (0, _object_without_properties._)(_ref, [
35
+ var _ref = (0, _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 = (0, _object_without_properties._)(_ref, [
36
36
  "children",
37
37
  "visible",
38
38
  "title",
@@ -43,12 +43,15 @@ var InternalQuickEnter = function InternalQuickEnter(props, ref) {
43
43
  "style",
44
44
  "onClose",
45
45
  "onChange",
46
- "closeIcon"
46
+ "closeIcon",
47
+ "safeAreaInsetTop"
47
48
  ]);
48
49
  var locale = (0, _configprovider.useConfig)().locale;
49
50
  var mergedTitle = title || locale.quickenter.title;
50
51
  var classPrefix = 'nut-quickenter';
51
- var classes = (0, _classnames.default)(classPrefix, className);
52
+ var classes = (0, _classnames.default)(classPrefix, className, {
53
+ 'safe-area-top': safeAreaInsetTop
54
+ });
52
55
  var _usePropsValue = (0, _sliced_to_array._)((0, _usepropsvalue.usePropsValue)({
53
56
  value: props.visible,
54
57
  defaultValue: false,
@@ -93,7 +96,9 @@ var InternalQuickEnter = function InternalQuickEnter(props, ref) {
93
96
  e.stopPropagation();
94
97
  onCancelEvent();
95
98
  }
96
- }, closeIcon || /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.Close, null)));
99
+ }, closeIcon || /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.Close, {
100
+ ariaLabel: locale.close
101
+ })));
97
102
  };
98
103
  var renderContent = function renderContent() {
99
104
  return /*#__PURE__*/ _react.default.createElement(_components.View, {
@@ -101,20 +106,23 @@ var InternalQuickEnter = function InternalQuickEnter(props, ref) {
101
106
  }, /*#__PURE__*/ _react.default.createElement(_components.View, {
102
107
  className: "".concat(classPrefix, "-list")
103
108
  }, options.map(function(item, index) {
104
- var _item_badgeProps;
105
- var _item_badge;
109
+ var _item_badgeProps, _item_badgeProps1;
110
+ var _item_badge, _item_badge1;
106
111
  return /*#__PURE__*/ _react.default.createElement(_components.View, {
107
112
  key: index,
108
113
  className: "".concat(classPrefix, "-item"),
114
+ 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),
109
115
  onClick: function onClick() {
110
116
  return handleItemClick(item, index);
111
117
  }
112
118
  }, /*#__PURE__*/ _react.default.createElement(_components.View, {
113
- className: "".concat(classPrefix, "-item-icon")
114
- }, /*#__PURE__*/ _react.default.createElement(_index2.default, (0, _object_spread_props._)((0, _object_spread._)({}, item.badgeProps), {
115
- 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
119
+ className: "".concat(classPrefix, "-item-icon"),
120
+ ariaHidden: true
121
+ }, /*#__PURE__*/ _react.default.createElement(_index1.default, (0, _object_spread_props._)((0, _object_spread._)({}, item.badgeProps), {
122
+ 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
116
123
  }), item.icon)), /*#__PURE__*/ _react.default.createElement(_components.View, {
117
- className: "".concat(classPrefix, "-item-title")
124
+ className: "".concat(classPrefix, "-item-title"),
125
+ ariaHidden: true
118
126
  }, item.title));
119
127
  })));
120
128
  };
@@ -139,8 +147,6 @@ var InternalQuickEnter = function InternalQuickEnter(props, ref) {
139
147
  onCancelEvent();
140
148
  },
141
149
  onClose: onCancelEvent
142
- }), /*#__PURE__*/ _react.default.createElement(_index1.default, {
143
- position: "top"
144
150
  }), renderQuickEnterElement()));
145
151
  };
146
152
  var QuickEnter = /*#__PURE__*/ _react.default.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;
@@ -50,7 +50,8 @@ var ResultPage = function ResultPage(props) {
50
50
  className: cls,
51
51
  style: style
52
52
  }, /*#__PURE__*/ _react.default.createElement(_components.View, {
53
- className: "".concat(classPrefix, "-icon")
53
+ className: "".concat(classPrefix, "-icon"),
54
+ ariaHidden: true
54
55
  }, icon || defaultStatus[status]), typeof title === 'string' && title ? /*#__PURE__*/ _react.default.createElement(_components.View, {
55
56
  className: "".concat(classPrefix, "-title")
56
57
  }, title) : title, typeof description === 'string' && description ? /*#__PURE__*/ _react.default.createElement(_components.Text, {
@@ -34,7 +34,9 @@ var defaultProps = (0, _object_spread_props._)((0, _object_spread._)({}, _typing
34
34
  left: '',
35
35
  right: '',
36
36
  rightIn: '',
37
- leftIn: /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.Search, null),
37
+ leftIn: /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.Search, {
38
+ ariaHidden: true
39
+ }),
38
40
  tag: false
39
41
  });
40
42
  var SearchBar = function SearchBar(props) {
@@ -189,12 +191,15 @@ var SearchBar = function SearchBar(props) {
189
191
  onClick: function onClick(e) {
190
192
  return onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, e);
191
193
  }
192
- }, item, /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.Close, null));
194
+ }, item, /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.Close, {
195
+ ariaLabel: locale.close
196
+ }));
193
197
  }));
194
198
  }, [
195
199
  value,
196
200
  onItemClick,
197
- innerTag
201
+ innerTag,
202
+ locale.close
198
203
  ]);
199
204
  var renderLeftIn = (0, _react.useCallback)(function() {
200
205
  if (!leftIn) return null;
@@ -207,11 +212,16 @@ var SearchBar = function SearchBar(props) {
207
212
  var renderLeft = (0, _react.useCallback)(function() {
208
213
  if (!backable && !left) return null;
209
214
  return /*#__PURE__*/ _react.default.createElement(_components.View, {
210
- className: "".concat(classPrefix, "-left")
211
- }, backable ? /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.ArrowLeft, null) : left);
215
+ className: "".concat(classPrefix, "-left"),
216
+ ariaRole: backable ? 'button' : undefined,
217
+ ariaLabel: backable ? locale.back : undefined
218
+ }, backable ? /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.ArrowLeft, {
219
+ ariaHidden: true
220
+ }) : left);
212
221
  }, [
213
222
  backable,
214
- left
223
+ left,
224
+ locale
215
225
  ]);
216
226
  var renderRightIn = (0, _react.useCallback)(function() {
217
227
  if (!rightIn) return null;
@@ -238,13 +248,17 @@ var SearchBar = function SearchBar(props) {
238
248
  visibility: "".concat(!innerTag && value && clearable ? 'visible' : 'hidden')
239
249
  },
240
250
  onClick: clearaVal,
241
- "aria-label": "清除"
242
- }, /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.MaskClose, null));
251
+ ariaRole: "button",
252
+ ariaLabel: locale.clear
253
+ }, /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.MaskClose, {
254
+ ariaHidden: true
255
+ }));
243
256
  }, [
244
257
  value,
245
258
  clearable,
246
259
  clearaVal,
247
- innerTag
260
+ innerTag,
261
+ locale
248
262
  ]);
249
263
  var onConfirm = function onConfirm() {
250
264
  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>>;
@@ -63,6 +63,7 @@ var Tabs = function Tabs(props) {
63
63
  onChange: onChange
64
64
  }), 2), value = _usePropsValue[0], setValue = _usePropsValue[1];
65
65
  var titleItemsRef = (0, _react.useRef)([]);
66
+ var tabsRef = (0, _react.useRef)(null);
66
67
  var getTitles = function getTitles() {
67
68
  var titles = [];
68
69
  _react.default.Children.forEach(children, function(child, idx) {
@@ -102,7 +103,8 @@ var Tabs = function Tabs(props) {
102
103
  var classesTitle = (0, _classnames.default)("".concat(classPrefix, "-titles"), (_obj = {}, (0, _define_property._)(_obj, "".concat(classPrefix, "-titles-").concat(activeType), activeType), (0, _define_property._)(_obj, "".concat(classPrefix, "-titles-").concat(align), align), _obj));
103
104
  var getRect = function getRect(selector) {
104
105
  return new Promise(function(resolve) {
105
- (0, _taro.createSelectorQuery)().select(selector).boundingClientRect().exec(function() {
106
+ var _tabsRef_current;
107
+ (0, _taro.createSelectorQuery)().in(((_tabsRef_current = tabsRef.current) === null || _tabsRef_current === void 0 ? void 0 : _tabsRef_current._scope) || tabsRef.current).select(selector).boundingClientRect().exec(function() {
106
108
  var rect = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [];
107
109
  resolve(rect[0]);
108
110
  });
@@ -110,7 +112,8 @@ var Tabs = function Tabs(props) {
110
112
  };
111
113
  var getAllRect = function getAllRect(selector) {
112
114
  return new Promise(function(resolve) {
113
- (0, _taro.createSelectorQuery)().selectAll(selector).boundingClientRect().exec(function() {
115
+ var _tabsRef_current;
116
+ (0, _taro.createSelectorQuery)().in(((_tabsRef_current = tabsRef.current) === null || _tabsRef_current === void 0 ? void 0 : _tabsRef_current._scope) || tabsRef.current).selectAll(selector).boundingClientRect().exec(function() {
114
117
  var rect = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [];
115
118
  resolve(rect[0]);
116
119
  });
@@ -190,9 +193,11 @@ var Tabs = function Tabs(props) {
190
193
  setValue(item.value);
191
194
  }
192
195
  };
193
- return /*#__PURE__*/ _react.default.createElement(_components.View, (0, _object_spread._)({
196
+ return /*#__PURE__*/ _react.default.createElement(_components.View, (0, _object_spread_props._)((0, _object_spread._)({
194
197
  className: classes
195
- }, rest), /*#__PURE__*/ _react.default.createElement(_components.ScrollView, {
198
+ }, rest), {
199
+ ref: tabsRef
200
+ }), /*#__PURE__*/ _react.default.createElement(_components.ScrollView, {
196
201
  enableFlex: true,
197
202
  scrollX: direction === 'horizontal',
198
203
  scrollY: direction === 'vertical',
@@ -224,7 +229,9 @@ var Tabs = function Tabs(props) {
224
229
  background: activeColor
225
230
  }
226
231
  }), activeType === 'smile' && /*#__PURE__*/ _react.default.createElement(_components.View, {
227
- className: "".concat(classPrefix, "-titles-item-smile")
232
+ className: "".concat(classPrefix, "-titles-item-smile"),
233
+ // @ts-ignore
234
+ ariaHidden: true
228
235
  }, /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.JoySmile, {
229
236
  color: activeColor
230
237
  })), /*#__PURE__*/ _react.default.createElement(_components.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 {
@@ -14,5 +15,5 @@ export interface BaseButton extends BaseProps {
14
15
  rightIcon: ReactNode;
15
16
  id: string;
16
17
  nativeType: 'submit' | 'reset' | 'button';
17
- onClick: (e: any) => void;
18
+ onClick: (e: MouseEvent<HTMLButtonElement>) => void;
18
19
  }
@@ -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 {};
@@ -23,10 +23,12 @@ export interface BaseCalendarCard extends BaseProps {
23
23
  firstDayOfWeek: number;
24
24
  startDate: Date;
25
25
  endDate: Date;
26
+ weekdays?: string[];
26
27
  disableDay: (day: CalendarCardDay) => boolean;
27
28
  renderDay: (day: CalendarCardDay) => ReactNode;
28
29
  renderDayTop: (day: CalendarCardDay) => ReactNode;
29
30
  renderDayBottom: (day: CalendarCardDay) => ReactNode;
31
+ renderDayAriaLabel?: (day: CalendarCardDay) => string;
30
32
  onDayClick: (day: CalendarCardDay) => void;
31
33
  onPageChange: (data: CalendarCardMonth) => void;
32
34
  onChange: (value: CalendarCardValue) => void;
@@ -20,6 +20,7 @@ export interface BaseQuickEnter<POPUP_PROPS = any> extends BaseProps {
20
20
  popupProps?: POPUP_PROPS;
21
21
  closeOnOverlayClick?: boolean;
22
22
  closeIcon?: ReactNode;
23
+ safeAreaInsetTop?: boolean;
23
24
  onClose?: () => void;
24
25
  onChange?: (item: QuickEnterOption, index: number) => void;
25
26
  children?: ReactNode;
@@ -55,7 +55,8 @@ var getRectInMultiPlatform = function getRectInMultiPlatform(element) {
55
55
  resolve(lru.get(element));
56
56
  return;
57
57
  }
58
- (0, _taro.createSelectorQuery)().select("#".concat(harmonyId || element.uid)).boundingClientRect().exec(function(param) {
58
+ (0, _taro.createSelectorQuery)() // https://taro.jd.com/docs/reference/config/page/
59
+ .in((element === null || element === void 0 ? void 0 : element._scope) || element).select("#".concat(harmonyId || element.uid)).boundingClientRect().exec(function(param) {
59
60
  var _param = (0, _sliced_to_array._)(param, 1), rects = _param[0];
60
61
  if (rects) {
61
62
  lru.set(element, rects);
@@ -86,7 +87,8 @@ var getRectInMultiPlatformWithoutCache = function getRectInMultiPlatformWithoutC
86
87
  return [
87
88
  2,
88
89
  new Promise(function(resolve, reject) {
89
- (0, _taro.createSelectorQuery)().select("#".concat(harmonyId || element.uid)).boundingClientRect().exec(function(param) {
90
+ (0, _taro.createSelectorQuery)() // https://taro.jd.com/docs/reference/config/page/
91
+ .in((element === null || element === void 0 ? void 0 : element._scope) || element).select("#".concat(harmonyId || element.uid)).boundingClientRect().exec(function(param) {
90
92
  var _param = (0, _sliced_to_array._)(param, 1), rects = _param[0];
91
93
  resolve(rects);
92
94
  });
@@ -9,6 +9,11 @@ export interface BaseLang {
9
9
  edit: string;
10
10
  reset: string;
11
11
  close: string;
12
+ back: string;
13
+ clear: string;
14
+ image: {
15
+ errorTip: string;
16
+ };
12
17
  video: {
13
18
  errorTip: string;
14
19
  clickRetry: string;
@@ -39,6 +44,7 @@ export interface BaseLang {
39
44
  today: string;
40
45
  loadPreviousMonth: string;
41
46
  noEarlierMonth: string;
47
+ dayAriaLabel?: Function;
42
48
  };
43
49
  shortpassword: {
44
50
  title: string;
@@ -9,6 +9,11 @@ var enUS = {
9
9
  edit: 'Edit',
10
10
  reset: 'Reset',
11
11
  close: 'Close',
12
+ back: 'Back',
13
+ clear: 'Clear',
14
+ image: {
15
+ errorTip: 'Image failed to load'
16
+ },
12
17
  video: {
13
18
  errorTip: 'Error Tip',
14
19
  clickRetry: 'Click Retry'
@@ -48,7 +53,18 @@ var enUS = {
48
53
  },
49
54
  today: 'Today',
50
55
  loadPreviousMonth: 'Load Previous Month',
51
- noEarlierMonth: 'No Earlier Month'
56
+ noEarlierMonth: 'No Earlier Month',
57
+ dayAriaLabel: function(year, month, day, today, isActive, isDisable) {
58
+ var dateStr = "".concat(year, "-").concat(month, "-").concat(day);
59
+ var label = today ? "Today, ".concat(dateStr) : dateStr;
60
+ if (isActive) {
61
+ label = "Selected ".concat(label);
62
+ }
63
+ if (isDisable) {
64
+ label = "".concat(label, " disabled");
65
+ }
66
+ return label;
67
+ }
52
68
  },
53
69
  shortpassword: {
54
70
  title: 'Please input a password',