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

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # v3.0.19-cpp.28
2
+
3
+ `2026-04-27`
4
+
5
+ - 🚀 feat(price): 组件增加原样渲染的兜底逻辑,支持输入内容包含无价格或多个价格时直接原样返回 (#3440)
6
+ - ♿️ feat(calendarcard): 补充无障碍支持 (A11y),增加 `dayAriaLabel` 多语言配置,开放 `renderDayAriaLabel` 以及在 Web 端支持了 `weekdays` 属性自定义星期的表头
7
+
1
8
  # v3.0.19-cpp.27
2
9
 
3
10
  `2026-04-24`
@@ -20,6 +20,7 @@ var _typings = require("../../utils/typings");
20
20
  var _index = require("../configprovider/index");
21
21
  var _types = require("../../types");
22
22
  var _platform = require("../../utils/taro/platform");
23
+ var _shouldrenderpriceraw = require("../../utils/should-render-price-raw");
23
24
  var defaultProps = (0, _object_spread_props._)((0, _object_spread._)({}, _typings.ComponentDefaults), {
24
25
  color: 'primary',
25
26
  price: 0,
@@ -34,10 +35,17 @@ var Price = function Price(props) {
34
35
  var _$_object_spread = (0, _object_spread._)({}, defaultProps, props), color = _$_object_spread.color, originalPrice = _$_object_spread.price, symbol = _$_object_spread.symbol, digits = _$_object_spread.digits, thousands = _$_object_spread.thousands, position = _$_object_spread.position, size = _$_object_spread.size, line = _$_object_spread.line, className = _$_object_spread.className, style = _$_object_spread.style;
35
36
  var classPrefix = 'nut-price';
36
37
  var rtl = (0, _index.useRtl)();
38
+ var isRenderPriceRaw = (0, _react.useMemo)(function() {
39
+ return typeof originalPrice === 'string' && (0, _shouldrenderpriceraw.shouldRenderPriceAsRaw)(originalPrice);
40
+ }, [
41
+ originalPrice
42
+ ]);
37
43
  var price = (0, _react.useMemo)(function() {
44
+ if (isRenderPriceRaw) return '';
38
45
  return originalPrice.toString().replace(/[^\d.]/g, '');
39
46
  }, [
40
- originalPrice
47
+ originalPrice,
48
+ isRenderPriceRaw
41
49
  ]);
42
50
  var isCustomPriceColor = (0, _react.useMemo)(function() {
43
51
  var specificPriceColor = Object.values(_types.PriceColorEnum);
@@ -118,12 +126,15 @@ var Price = function Price(props) {
118
126
  style: priceColorStyle
119
127
  }, formatDecimal(price))) : null, symbol && position === 'after' ? renderSymbol() : null);
120
128
  };
129
+ var renderRawContent = function renderRawContent() {
130
+ return /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, originalPrice);
131
+ };
121
132
  return /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, (0, _platform.harmony)() || process.env.TARO_ENV === 'dynamic' ? /*#__PURE__*/ _react.default.createElement(_components.Text, {
122
133
  className: "".concat(classPrefix, " ").concat(classPrefix, "-").concat(color, " ").concat(className),
123
134
  style: style
124
- }, renderInner()) : /*#__PURE__*/ _react.default.createElement(_components.View, {
135
+ }, isRenderPriceRaw ? renderRawContent() : renderInner()) : /*#__PURE__*/ _react.default.createElement(_components.View, {
125
136
  className: "".concat(classPrefix, " ").concat(classPrefix, "-").concat(color, " ").concat(className),
126
137
  style: style
127
- }, renderInner()));
138
+ }, isRenderPriceRaw ? renderRawContent() : renderInner()));
128
139
  };
129
140
  Price.displayName = 'NutPrice';
@@ -0,0 +1 @@
1
+ export declare function shouldRenderPriceAsRaw(s: string): boolean;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "shouldRenderPriceAsRaw", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return shouldRenderPriceAsRaw;
9
+ }
10
+ });
11
+ var CJK = /[\u4E00-\u9FFF]/;
12
+ var RE_NUM = /\d+(?:\.\d+)?/g;
13
+ function hasNoExtractablePrice(s) {
14
+ var t = s.trim();
15
+ if (!t) return true;
16
+ if (!/\d/.test(t)) return true;
17
+ if (t.replace(/[^\d.]/g, '') === '') return true;
18
+ return false;
19
+ }
20
+ function shouldRenderPriceAsRaw(s) {
21
+ if (hasNoExtractablePrice(s)) {
22
+ return true;
23
+ }
24
+ var t = s.trim();
25
+ if (!CJK.test(t)) return false;
26
+ var matches = Array.from(t.matchAll(RE_NUM));
27
+ if (matches.length < 2) return false;
28
+ var a = matches[0];
29
+ var b = matches[1];
30
+ var i0 = a.index;
31
+ var i1 = b.index;
32
+ var between = t.slice(i0 + a[0].length, i1);
33
+ return CJK.test(between);
34
+ }
@@ -8,6 +8,7 @@ import { ComponentDefaults } from "../../utils/typings";
8
8
  import { useRtl } from "../configprovider/index";
9
9
  import { PriceColorEnum } from "../../types";
10
10
  import { harmony } from "../../utils/taro/platform";
11
+ import { shouldRenderPriceAsRaw } from "../../utils/should-render-price-raw";
11
12
  var defaultProps = _object_spread_props(_object_spread({}, ComponentDefaults), {
12
13
  color: 'primary',
13
14
  price: 0,
@@ -22,10 +23,17 @@ export var Price = function(props) {
22
23
  var _$_object_spread = _object_spread({}, defaultProps, props), color = _$_object_spread.color, originalPrice = _$_object_spread.price, symbol = _$_object_spread.symbol, digits = _$_object_spread.digits, thousands = _$_object_spread.thousands, position = _$_object_spread.position, size = _$_object_spread.size, line = _$_object_spread.line, className = _$_object_spread.className, style = _$_object_spread.style;
23
24
  var classPrefix = 'nut-price';
24
25
  var rtl = useRtl();
26
+ var isRenderPriceRaw = useMemo(function() {
27
+ return typeof originalPrice === 'string' && shouldRenderPriceAsRaw(originalPrice);
28
+ }, [
29
+ originalPrice
30
+ ]);
25
31
  var price = useMemo(function() {
32
+ if (isRenderPriceRaw) return '';
26
33
  return originalPrice.toString().replace(/[^\d.]/g, '');
27
34
  }, [
28
- originalPrice
35
+ originalPrice,
36
+ isRenderPriceRaw
29
37
  ]);
30
38
  var isCustomPriceColor = useMemo(function() {
31
39
  var specificPriceColor = Object.values(PriceColorEnum);
@@ -106,12 +114,15 @@ export var Price = function(props) {
106
114
  style: priceColorStyle
107
115
  }, formatDecimal(price))) : null, symbol && position === 'after' ? renderSymbol() : null);
108
116
  };
117
+ var renderRawContent = function() {
118
+ return /*#__PURE__*/ React.createElement(React.Fragment, null, originalPrice);
119
+ };
109
120
  return /*#__PURE__*/ React.createElement(React.Fragment, null, harmony() || process.env.TARO_ENV === 'dynamic' ? /*#__PURE__*/ React.createElement(Text, {
110
121
  className: "".concat(classPrefix, " ").concat(classPrefix, "-").concat(color, " ").concat(className),
111
122
  style: style
112
- }, renderInner()) : /*#__PURE__*/ React.createElement(View, {
123
+ }, isRenderPriceRaw ? renderRawContent() : renderInner()) : /*#__PURE__*/ React.createElement(View, {
113
124
  className: "".concat(classPrefix, " ").concat(classPrefix, "-").concat(color, " ").concat(className),
114
125
  style: style
115
- }, renderInner()));
126
+ }, isRenderPriceRaw ? renderRawContent() : renderInner()));
116
127
  };
117
128
  Price.displayName = 'NutPrice';
@@ -0,0 +1 @@
1
+ export declare function shouldRenderPriceAsRaw(s: string): boolean;
@@ -0,0 +1,24 @@
1
+ var CJK = /[\u4E00-\u9FFF]/;
2
+ var RE_NUM = /\d+(?:\.\d+)?/g;
3
+ function hasNoExtractablePrice(s) {
4
+ var t = s.trim();
5
+ if (!t) return true;
6
+ if (!/\d/.test(t)) return true;
7
+ if (t.replace(/[^\d.]/g, '') === '') return true;
8
+ return false;
9
+ }
10
+ export function shouldRenderPriceAsRaw(s) {
11
+ if (hasNoExtractablePrice(s)) {
12
+ return true;
13
+ }
14
+ var t = s.trim();
15
+ if (!CJK.test(t)) return false;
16
+ var matches = Array.from(t.matchAll(RE_NUM));
17
+ if (matches.length < 2) return false;
18
+ var a = matches[0];
19
+ var b = matches[1];
20
+ var i0 = a.index;
21
+ var i1 = b.index;
22
+ var between = t.slice(i0 + a[0].length, i1);
23
+ return CJK.test(between);
24
+ }
@@ -41095,6 +41095,30 @@
41095
41095
  return PriceColorEnum2;
41096
41096
  }({});
41097
41097
  var destroyList = [];
41098
+ var CJK = /[\u4E00-\u9FFF]/;
41099
+ var RE_NUM = /\d+(?:\.\d+)?/g;
41100
+ function hasNoExtractablePrice(s) {
41101
+ var t = s.trim();
41102
+ if (!t) return true;
41103
+ if (!/\d/.test(t)) return true;
41104
+ if (t.replace(/[^\d.]/g, "") === "") return true;
41105
+ return false;
41106
+ }
41107
+ function shouldRenderPriceAsRaw(s) {
41108
+ if (hasNoExtractablePrice(s)) {
41109
+ return true;
41110
+ }
41111
+ var t = s.trim();
41112
+ if (!CJK.test(t)) return false;
41113
+ var matches = Array.from(t.matchAll(RE_NUM));
41114
+ if (matches.length < 2) return false;
41115
+ var a = matches[0];
41116
+ var b = matches[1];
41117
+ var i0 = a.index;
41118
+ var i1 = b.index;
41119
+ var between = t.slice(i0 + a[0].length, i1);
41120
+ return CJK.test(between);
41121
+ }
41098
41122
  var defaultProps$g = _object_spread_props(_object_spread({}, ComponentDefaults), {
41099
41123
  color: "primary",
41100
41124
  price: 0,
@@ -41109,10 +41133,17 @@
41109
41133
  var _$_object_spread = _object_spread({}, defaultProps$g, props), color = _$_object_spread.color, originalPrice = _$_object_spread.price, symbol = _$_object_spread.symbol, digits = _$_object_spread.digits, thousands = _$_object_spread.thousands, position2 = _$_object_spread.position, size = _$_object_spread.size, line = _$_object_spread.line, className = _$_object_spread.className, style = _$_object_spread.style;
41110
41134
  var classPrefix2 = "nut-price";
41111
41135
  var rtl = useRtl();
41136
+ var isRenderPriceRaw = React.useMemo(function() {
41137
+ return typeof originalPrice === "string" && shouldRenderPriceAsRaw(originalPrice);
41138
+ }, [
41139
+ originalPrice
41140
+ ]);
41112
41141
  var price = React.useMemo(function() {
41142
+ if (isRenderPriceRaw) return "";
41113
41143
  return originalPrice.toString().replace(/[^\d.]/g, "");
41114
41144
  }, [
41115
- originalPrice
41145
+ originalPrice,
41146
+ isRenderPriceRaw
41116
41147
  ]);
41117
41148
  var isCustomPriceColor = React.useMemo(function() {
41118
41149
  var specificPriceColor = Object.values(PriceColorEnum);
@@ -41193,13 +41224,16 @@
41193
41224
  style: priceColorStyle
41194
41225
  }, formatDecimal(price))) : null, symbol && position2 === "after" ? renderSymbol() : null);
41195
41226
  };
41227
+ var renderRawContent = function() {
41228
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, originalPrice);
41229
+ };
41196
41230
  return /* @__PURE__ */ React.createElement(React.Fragment, null, harmony() || process.env.TARO_ENV === "dynamic" ? /* @__PURE__ */ React.createElement(components.Text, {
41197
41231
  className: "".concat(classPrefix2, " ").concat(classPrefix2, "-").concat(color, " ").concat(className),
41198
41232
  style
41199
- }, renderInner()) : /* @__PURE__ */ React.createElement(components.View, {
41233
+ }, isRenderPriceRaw ? renderRawContent() : renderInner()) : /* @__PURE__ */ React.createElement(components.View, {
41200
41234
  className: "".concat(classPrefix2, " ").concat(classPrefix2, "-").concat(color, " ").concat(className),
41201
41235
  style
41202
- }, renderInner()));
41236
+ }, isRenderPriceRaw ? renderRawContent() : renderInner()));
41203
41237
  };
41204
41238
  Price.displayName = "NutPrice";
41205
41239
  var defaultProps$f = {