@nutui/nutui-react 2.0.0-beta.3 → 2.0.1-beta.0
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 +17 -0
- package/dist/esm/Card/style/style.css +1 -1
- package/dist/esm/CircleProgress.js +1 -1
- package/dist/esm/DatePicker.js +31 -25
- package/dist/esm/Ellipsis/style/style.css +1 -1
- package/dist/esm/Form.js +1 -1
- package/dist/esm/InputNumber.js +6 -6
- package/dist/esm/SearchBar/style/style.css +1 -1
- package/dist/esm/SearchBar.js +2 -2
- package/dist/esm/Tag/style/style.css +1 -1
- package/dist/esm/Uploader.js +1 -0
- package/dist/esm/formitem2.js +2 -1
- package/dist/esm/tabs2.js +2 -8
- package/dist/esm/types/src/packages/animatingnumbers/animatingnumbers.d.ts +1 -3
- package/dist/esm/types/src/packages/animatingnumbers/animatingnumbers.taro.d.ts +1 -3
- package/dist/esm/types/src/packages/circleprogress/circleprogress.d.ts +1 -1
- package/dist/esm/types/src/packages/circleprogress/circleprogress.taro.d.ts +1 -1
- package/dist/esm/types/src/packages/configprovider/types.d.ts +1 -1
- package/dist/esm/types/src/packages/datepicker/datepicker.d.ts +2 -2
- package/dist/esm/types/src/packages/datepicker/datepicker.taro.d.ts +2 -2
- package/dist/esm/types/src/packages/nutui.react.taro.d.ts +1 -1
- package/dist/esm/types/src/packages/nutui.taro.react.build.d.ts +1 -1
- package/dist/esm/types/src/packages/tag/tag.d.ts +1 -1
- package/dist/esm/types/src/packages/tag/tag.taro.d.ts +1 -1
- package/dist/esm/types/src/packages/uploader/upload.d.ts +6 -6
- package/dist/esm/types/src/packages/uploader/uploader.taro.d.ts +2 -2
- package/dist/esm/use-props-value.js +21 -8
- package/dist/locales/base.js +1 -1
- package/dist/locales/en-US.js +1 -1
- package/dist/locales/id-ID.js +1 -1
- package/dist/locales/tr-TR.js +1 -1
- package/dist/locales/zh-CN.js +1 -1
- package/dist/locales/zh-TW.js +1 -1
- package/dist/locales/zh-UG.js +1 -1
- package/dist/nutui.react.es.js +66 -50
- package/dist/nutui.react.umd.js +66 -50
- package/dist/packages/searchbar/searchbar.scss +2 -0
- package/dist/packages/tag/tag.scss +5 -0
- package/dist/style.css +1 -1
- package/dist/style.mjs +1 -1
- package/dist/styles/theme-dark.scss +1 -0
- package/dist/styles/theme-default.scss +1 -0
- package/dist/styles/variables.scss +6 -6
- package/dist/types/packages/animatingnumbers/animatingnumbers.d.ts +1 -3
- package/dist/types/packages/circleprogress/circleprogress.d.ts +1 -1
- package/dist/types/packages/configprovider/types.d.ts +1 -1
- package/dist/types/packages/datepicker/datepicker.d.ts +2 -2
- package/dist/types/packages/tag/tag.d.ts +1 -1
- package/dist/types/packages/uploader/upload.d.ts +6 -6
- package/package.json +2 -3
|
@@ -47,10 +47,10 @@ export interface UploaderProps extends BasicComponent {
|
|
|
47
47
|
autoUpload: boolean;
|
|
48
48
|
multiple: boolean;
|
|
49
49
|
timeout: number;
|
|
50
|
-
data:
|
|
50
|
+
data: any;
|
|
51
51
|
method: string;
|
|
52
52
|
xhrState: number | string;
|
|
53
|
-
headers:
|
|
53
|
+
headers: any;
|
|
54
54
|
preview: boolean;
|
|
55
55
|
deletable: boolean;
|
|
56
56
|
className: string;
|
|
@@ -1,18 +1,31 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
-
import {
|
|
2
|
+
import React__default, { useRef, useCallback } from "react";
|
|
3
|
+
function useForceUpdate() {
|
|
4
|
+
var _React__default$useSt = React__default.useState(), _React__default$useSt2 = _slicedToArray(_React__default$useSt, 2), updateState = _React__default$useSt2[1];
|
|
5
|
+
return React__default.useCallback(function() {
|
|
6
|
+
return updateState({});
|
|
7
|
+
}, []);
|
|
8
|
+
}
|
|
3
9
|
function usePropsValue(_ref) {
|
|
4
10
|
var value = _ref.value, defaultValue = _ref.defaultValue, finalValue = _ref.finalValue, _ref$onChange = _ref.onChange, onChange = _ref$onChange === void 0 ? function(value2) {
|
|
5
11
|
} : _ref$onChange;
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(val);
|
|
10
|
-
};
|
|
12
|
+
var forceUpdate = useForceUpdate();
|
|
13
|
+
var dfValue = defaultValue !== void 0 ? defaultValue : finalValue;
|
|
14
|
+
var stateRef = useRef(value !== void 0 ? value : dfValue);
|
|
11
15
|
if (value !== void 0) {
|
|
12
|
-
|
|
16
|
+
stateRef.current = value;
|
|
13
17
|
}
|
|
14
|
-
|
|
18
|
+
var setState = useCallback(function(v) {
|
|
19
|
+
var prevState = stateRef.current;
|
|
20
|
+
stateRef.current = v;
|
|
21
|
+
if (prevState !== stateRef.current) {
|
|
22
|
+
forceUpdate();
|
|
23
|
+
}
|
|
24
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(v);
|
|
25
|
+
}, [value, onChange]);
|
|
26
|
+
return [stateRef.current, setState];
|
|
15
27
|
}
|
|
16
28
|
export {
|
|
29
|
+
useForceUpdate as a,
|
|
17
30
|
usePropsValue as u
|
|
18
31
|
};
|
package/dist/locales/base.js
CHANGED
package/dist/locales/en-US.js
CHANGED
package/dist/locales/id-ID.js
CHANGED
package/dist/locales/tr-TR.js
CHANGED
package/dist/locales/zh-CN.js
CHANGED
package/dist/locales/zh-TW.js
CHANGED
package/dist/locales/zh-UG.js
CHANGED
package/dist/nutui.react.es.js
CHANGED
|
@@ -6,7 +6,7 @@ var __publicField = (obj, key, value) => {
|
|
|
6
6
|
};
|
|
7
7
|
var _a;
|
|
8
8
|
/*!
|
|
9
|
-
* @nutui/nutui-react v2.0.
|
|
9
|
+
* @nutui/nutui-react v2.0.1 Wed Jul 05 2023 14:14:34 GMT+0800 (China Standard Time)
|
|
10
10
|
* (c) 2023 @jdf2e.
|
|
11
11
|
* Released under the MIT License.
|
|
12
12
|
*/
|
|
@@ -11382,6 +11382,10 @@ const SubSideNavBar = (props) => {
|
|
|
11382
11382
|
const iconClass = open ? "arrow-icon arrow-down" : "arrow-icon arrow-up";
|
|
11383
11383
|
return /* @__PURE__ */ React__default.createElement("div", { className: divClass, ref: listRef, onClick: clickFn, ...rest }, /* @__PURE__ */ React__default.createElement("div", { className: `${classPrefix2}__title ${classPrefix2}-border-bt` }, title, " ", /* @__PURE__ */ React__default.createElement("i", { className: iconClass })), /* @__PURE__ */ React__default.createElement("div", { className: `${classPrefix2}__content` }, children));
|
|
11384
11384
|
};
|
|
11385
|
+
function useForceUpdate() {
|
|
11386
|
+
const [, updateState] = React__default.useState();
|
|
11387
|
+
return React__default.useCallback(() => updateState({}), []);
|
|
11388
|
+
}
|
|
11385
11389
|
function usePropsValue({
|
|
11386
11390
|
value,
|
|
11387
11391
|
defaultValue,
|
|
@@ -11389,17 +11393,24 @@ function usePropsValue({
|
|
|
11389
11393
|
onChange = (value2) => {
|
|
11390
11394
|
}
|
|
11391
11395
|
}) {
|
|
11392
|
-
const
|
|
11393
|
-
|
|
11394
|
-
);
|
|
11395
|
-
const handleUncontrolledChange = (val) => {
|
|
11396
|
-
setUncontrolled(val);
|
|
11397
|
-
onChange == null ? void 0 : onChange(val);
|
|
11398
|
-
};
|
|
11396
|
+
const forceUpdate = useForceUpdate();
|
|
11397
|
+
const dfValue = defaultValue !== void 0 ? defaultValue : finalValue;
|
|
11398
|
+
const stateRef = useRef(value !== void 0 ? value : dfValue);
|
|
11399
11399
|
if (value !== void 0) {
|
|
11400
|
-
|
|
11400
|
+
stateRef.current = value;
|
|
11401
11401
|
}
|
|
11402
|
-
|
|
11402
|
+
const setState = useCallback(
|
|
11403
|
+
(v) => {
|
|
11404
|
+
const prevState = stateRef.current;
|
|
11405
|
+
stateRef.current = v;
|
|
11406
|
+
if (prevState !== stateRef.current) {
|
|
11407
|
+
forceUpdate();
|
|
11408
|
+
}
|
|
11409
|
+
onChange == null ? void 0 : onChange(v);
|
|
11410
|
+
},
|
|
11411
|
+
[value, onChange]
|
|
11412
|
+
);
|
|
11413
|
+
return [stateRef.current, setState];
|
|
11403
11414
|
}
|
|
11404
11415
|
const defaultProps$17 = {
|
|
11405
11416
|
...ComponentDefaults,
|
|
@@ -11596,10 +11607,6 @@ function requestAniFrame() {
|
|
|
11596
11607
|
};
|
|
11597
11608
|
}
|
|
11598
11609
|
const requestAniFrame$1 = requestAniFrame();
|
|
11599
|
-
function useForceUpdate() {
|
|
11600
|
-
const [, updateState] = React__default.useState();
|
|
11601
|
-
return React__default.useCallback(() => updateState({}), []);
|
|
11602
|
-
}
|
|
11603
11610
|
const defaultProps$13 = {
|
|
11604
11611
|
...ComponentDefaults,
|
|
11605
11612
|
tabStyle: {},
|
|
@@ -14286,12 +14293,12 @@ const DatePicker = (props) => {
|
|
|
14286
14293
|
}
|
|
14287
14294
|
let timestmp = Math.max(cvalue.getTime(), startDate.getTime());
|
|
14288
14295
|
timestmp = Math.min(timestmp, endDate.getTime());
|
|
14289
|
-
return
|
|
14296
|
+
return timestmp;
|
|
14290
14297
|
};
|
|
14291
14298
|
const [currentDate, setCurrentDate] = usePropsValue({
|
|
14292
14299
|
value: props.value && formatValue(props.value),
|
|
14293
14300
|
defaultValue: formatValue(props.defaultValue || null),
|
|
14294
|
-
finalValue:
|
|
14301
|
+
finalValue: 0,
|
|
14295
14302
|
onChange: (val) => {
|
|
14296
14303
|
}
|
|
14297
14304
|
});
|
|
@@ -14334,7 +14341,7 @@ const DatePicker = (props) => {
|
|
|
14334
14341
|
};
|
|
14335
14342
|
};
|
|
14336
14343
|
const ranges = () => {
|
|
14337
|
-
const curDate = currentDate;
|
|
14344
|
+
const curDate = new Date(currentDate);
|
|
14338
14345
|
if (!curDate)
|
|
14339
14346
|
return [];
|
|
14340
14347
|
const { maxYear, maxDate, maxMonth, maxHour, maxMinute, maxSeconds } = getBoundary("max", curDate);
|
|
@@ -14391,19 +14398,21 @@ const DatePicker = (props) => {
|
|
|
14391
14398
|
return result;
|
|
14392
14399
|
};
|
|
14393
14400
|
const updateChooseValueCustmer = (selectedOptions, selectedValue, index) => {
|
|
14401
|
+
var _a2;
|
|
14402
|
+
const rangeType = type4.toLocaleLowerCase();
|
|
14394
14403
|
if (["date", "datetime", "datehour", "month-day", "year-month"].includes(
|
|
14395
|
-
|
|
14404
|
+
rangeType
|
|
14396
14405
|
)) {
|
|
14397
14406
|
const formatDate = [];
|
|
14398
14407
|
selectedValue.forEach((item) => {
|
|
14399
14408
|
formatDate.push(item);
|
|
14400
14409
|
});
|
|
14401
|
-
if (
|
|
14410
|
+
if (rangeType === "month-day" && formatDate.length < 3) {
|
|
14402
14411
|
formatDate.unshift(
|
|
14403
14412
|
new Date(defaultValue || startDate || endDate).getFullYear()
|
|
14404
14413
|
);
|
|
14405
14414
|
}
|
|
14406
|
-
if (
|
|
14415
|
+
if (rangeType === "year-month" && formatDate.length < 3) {
|
|
14407
14416
|
formatDate.push(
|
|
14408
14417
|
new Date(defaultValue || startDate || endDate).getDate()
|
|
14409
14418
|
);
|
|
@@ -14415,9 +14424,9 @@ const DatePicker = (props) => {
|
|
|
14415
14424
|
getMonthEndDay(Number(formatDate[0]), Number(formatDate[1]))
|
|
14416
14425
|
);
|
|
14417
14426
|
let date4 = null;
|
|
14418
|
-
if (
|
|
14427
|
+
if (rangeType === "date" || rangeType === "month-day" || rangeType === "year-month") {
|
|
14419
14428
|
date4 = new Date(year, month, day);
|
|
14420
|
-
} else if (
|
|
14429
|
+
} else if (rangeType === "datetime") {
|
|
14421
14430
|
date4 = new Date(
|
|
14422
14431
|
year,
|
|
14423
14432
|
month,
|
|
@@ -14425,10 +14434,10 @@ const DatePicker = (props) => {
|
|
|
14425
14434
|
Number(formatDate[3]),
|
|
14426
14435
|
Number(formatDate[4])
|
|
14427
14436
|
);
|
|
14428
|
-
} else if (
|
|
14437
|
+
} else if (rangeType === "datehour") {
|
|
14429
14438
|
date4 = new Date(year, month, day, Number(formatDate[3]));
|
|
14430
14439
|
}
|
|
14431
|
-
const isEqual2 = (currentDate == null ? void 0 :
|
|
14440
|
+
const isEqual2 = ((_a2 = new Date(currentDate)) == null ? void 0 : _a2.getTime()) === (date4 == null ? void 0 : date4.getTime());
|
|
14432
14441
|
date4 && isDate(date4) && !isEqual2 && setCurrentDate(formatValue(date4));
|
|
14433
14442
|
}
|
|
14434
14443
|
props.onChange && props.onChange(selectedOptions, selectedValue, index);
|
|
@@ -14478,23 +14487,28 @@ const DatePicker = (props) => {
|
|
|
14478
14487
|
return arr;
|
|
14479
14488
|
};
|
|
14480
14489
|
const getDateIndex = (type22) => {
|
|
14490
|
+
const date4 = new Date(currentDate);
|
|
14481
14491
|
if (!currentDate)
|
|
14482
14492
|
return 0;
|
|
14483
|
-
let d = 0;
|
|
14484
14493
|
if (type22 === "year") {
|
|
14485
|
-
|
|
14486
|
-
}
|
|
14487
|
-
|
|
14488
|
-
|
|
14489
|
-
|
|
14490
|
-
|
|
14491
|
-
|
|
14492
|
-
}
|
|
14493
|
-
|
|
14494
|
-
|
|
14495
|
-
|
|
14496
|
-
|
|
14497
|
-
|
|
14494
|
+
return date4.getFullYear();
|
|
14495
|
+
}
|
|
14496
|
+
if (type22 === "month") {
|
|
14497
|
+
return date4.getMonth() + 1;
|
|
14498
|
+
}
|
|
14499
|
+
if (type22 === "day") {
|
|
14500
|
+
return date4.getDate();
|
|
14501
|
+
}
|
|
14502
|
+
if (type22 === "hour") {
|
|
14503
|
+
return date4.getHours();
|
|
14504
|
+
}
|
|
14505
|
+
if (type22 === "minute") {
|
|
14506
|
+
return date4.getMinutes();
|
|
14507
|
+
}
|
|
14508
|
+
if (type22 === "seconds") {
|
|
14509
|
+
return date4.getSeconds();
|
|
14510
|
+
}
|
|
14511
|
+
return 0;
|
|
14498
14512
|
};
|
|
14499
14513
|
const columns = () => {
|
|
14500
14514
|
const val = ranges().map((res, columnIndex) => {
|
|
@@ -14512,7 +14526,7 @@ const DatePicker = (props) => {
|
|
|
14512
14526
|
if (currentDate) {
|
|
14513
14527
|
setOptions(columns());
|
|
14514
14528
|
}
|
|
14515
|
-
}, []);
|
|
14529
|
+
}, [currentDate]);
|
|
14516
14530
|
return /* @__PURE__ */ React__default.createElement("div", { className: `nut-datepicker ${className}`, style, ...rest }, options2.length && /* @__PURE__ */ React__default.createElement(
|
|
14517
14531
|
Picker$1,
|
|
14518
14532
|
{
|
|
@@ -15601,7 +15615,7 @@ class FormStore {
|
|
|
15601
15615
|
__publicField(this, "registerField", (field) => {
|
|
15602
15616
|
this.fieldEntities.push(field);
|
|
15603
15617
|
return () => {
|
|
15604
|
-
this.fieldEntities = this.fieldEntities.filter((item) => item
|
|
15618
|
+
this.fieldEntities = this.fieldEntities.filter((item) => item !== field);
|
|
15605
15619
|
if (this.store) {
|
|
15606
15620
|
delete this.store[field.props.name];
|
|
15607
15621
|
}
|
|
@@ -15759,9 +15773,10 @@ class FormItem extends React__default.Component {
|
|
|
15759
15773
|
if ((_a2 = children == null ? void 0 : children.props) == null ? void 0 : _a2.defaultValue) {
|
|
15760
15774
|
console.warn("通过 initialValue 设置初始值");
|
|
15761
15775
|
}
|
|
15776
|
+
const fieldValue = getFieldValue(name);
|
|
15762
15777
|
const controlled = {
|
|
15763
15778
|
...children.props,
|
|
15764
|
-
[this.props.valuePropName || "value"]:
|
|
15779
|
+
[this.props.valuePropName || "value"]: fieldValue !== void 0 ? fieldValue : this.props.initialValue,
|
|
15765
15780
|
[this.props.trigger || "onChange"]: (...args) => {
|
|
15766
15781
|
const originOnChange = children.props[this.props.trigger || "onChange"];
|
|
15767
15782
|
if (originOnChange) {
|
|
@@ -16201,14 +16216,14 @@ const InputNumber = (props) => {
|
|
|
16201
16216
|
};
|
|
16202
16217
|
const addAllow = (value2 = _checked) => {
|
|
16203
16218
|
if (formatter) {
|
|
16204
|
-
const numValue = String(value2).replace(/[^0-9
|
|
16219
|
+
const numValue = String(value2).replace(/[^0-9|.]/gi, "");
|
|
16205
16220
|
return Number(numValue) < Number(max) && !disabled;
|
|
16206
16221
|
}
|
|
16207
16222
|
return Number(value2) < Number(max) && !disabled;
|
|
16208
16223
|
};
|
|
16209
16224
|
const reduceAllow = (value2 = _checked) => {
|
|
16210
16225
|
if (formatter) {
|
|
16211
|
-
const numValue = String(value2).replace(/[^0-9
|
|
16226
|
+
const numValue = String(value2).replace(/[^0-9|.]/gi, "");
|
|
16212
16227
|
return Number(numValue) > Number(min) && !disabled;
|
|
16213
16228
|
}
|
|
16214
16229
|
return Number(value2) > Number(min) && !disabled;
|
|
@@ -16239,7 +16254,7 @@ const InputNumber = (props) => {
|
|
|
16239
16254
|
onMinus && onMinus(e);
|
|
16240
16255
|
if (reduceAllow()) {
|
|
16241
16256
|
if (formatter) {
|
|
16242
|
-
const numValue = String(_checked).replace(/[^0-9
|
|
16257
|
+
const numValue = String(_checked).replace(/[^0-9|.]/gi, "");
|
|
16243
16258
|
const outputValue = Number(numValue) - Number(step);
|
|
16244
16259
|
inputRef.current = formatter(outputValue);
|
|
16245
16260
|
emitChange(outputValue, e);
|
|
@@ -16255,7 +16270,7 @@ const InputNumber = (props) => {
|
|
|
16255
16270
|
onPlus && onPlus(e);
|
|
16256
16271
|
if (addAllow()) {
|
|
16257
16272
|
if (formatter) {
|
|
16258
|
-
const numValue = String(_checked).replace(/[^0-9
|
|
16273
|
+
const numValue = String(_checked).replace(/[^0-9|.]/gi, "");
|
|
16259
16274
|
const outputValue = Number(numValue) + Number(step);
|
|
16260
16275
|
inputRef.current = formatter(outputValue);
|
|
16261
16276
|
emitChange(outputValue, e);
|
|
@@ -16281,7 +16296,7 @@ const InputNumber = (props) => {
|
|
|
16281
16296
|
const changeFormatValue = (e) => {
|
|
16282
16297
|
const input = e.target.value;
|
|
16283
16298
|
const numReg = new RegExp("^[0-9]*$");
|
|
16284
|
-
const numValue = input.replace(/[^0-9
|
|
16299
|
+
const numValue = input.replace(/[^0-9|.]/gi, "");
|
|
16285
16300
|
if (formatter) {
|
|
16286
16301
|
if (!numReg.test(input[0]) && numValue) {
|
|
16287
16302
|
setChecked(formatter(numValue));
|
|
@@ -16300,7 +16315,7 @@ const InputNumber = (props) => {
|
|
|
16300
16315
|
const burFormatValue = (e) => {
|
|
16301
16316
|
const input = e.target.value;
|
|
16302
16317
|
const numReg = new RegExp("^[0-9]*$");
|
|
16303
|
-
const numValue = input.replace(/[^0-9
|
|
16318
|
+
const numValue = input.replace(/[^0-9|.]/gi, "");
|
|
16304
16319
|
if (formatter) {
|
|
16305
16320
|
if (formatter(numValue) === input) {
|
|
16306
16321
|
emitChange(numValue, e);
|
|
@@ -17555,7 +17570,7 @@ const SearchBar = (props) => {
|
|
|
17555
17570
|
disabled,
|
|
17556
17571
|
readOnly,
|
|
17557
17572
|
maxLength,
|
|
17558
|
-
|
|
17573
|
+
onKeyDown: onKeydown,
|
|
17559
17574
|
onChange: (e) => change(e),
|
|
17560
17575
|
onFocus: (e) => focus(e),
|
|
17561
17576
|
onBlur: (e) => blur(e),
|
|
@@ -17604,7 +17619,7 @@ const SearchBar = (props) => {
|
|
|
17604
17619
|
onClear && onClear(event);
|
|
17605
17620
|
forceFocus();
|
|
17606
17621
|
};
|
|
17607
|
-
const
|
|
17622
|
+
const onKeydown = (e) => {
|
|
17608
17623
|
if (e.key === "Enter") {
|
|
17609
17624
|
const event = e.nativeEvent;
|
|
17610
17625
|
if (typeof event.cancelable !== "boolean" || event.cancelable) {
|
|
@@ -18344,6 +18359,7 @@ const InternalUploader = (props, ref) => {
|
|
|
18344
18359
|
try {
|
|
18345
18360
|
uploadOption.sourceFile = fileItem.formData.get(name);
|
|
18346
18361
|
} catch (error) {
|
|
18362
|
+
console.warn(error);
|
|
18347
18363
|
}
|
|
18348
18364
|
uploadOption.onStart = (option) => {
|
|
18349
18365
|
clearUploadQueue(index);
|
|
@@ -21350,7 +21366,7 @@ const CircleProgress = (props) => {
|
|
|
21350
21366
|
(a2, b) => parseFloat(a2) - parseFloat(b)
|
|
21351
21367
|
);
|
|
21352
21368
|
const stopArr = [];
|
|
21353
|
-
colorArr.
|
|
21369
|
+
colorArr.forEach((item) => {
|
|
21354
21370
|
const obj = {
|
|
21355
21371
|
key: "",
|
|
21356
21372
|
value: ""
|