@arco-design/mobile-react 2.19.2-ee92494.5 → 2.20.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.
Files changed (112) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.en-US.md +4 -4
  3. package/README.md +4 -4
  4. package/cjs/avatar/group.js +1 -1
  5. package/cjs/avatar/index.js +10 -13
  6. package/cjs/avatar/style/css/index.css +96 -126
  7. package/cjs/avatar/style/index.less +54 -72
  8. package/cjs/badge/index.js +6 -8
  9. package/cjs/badge/style/css/index.css +5 -5
  10. package/cjs/badge/style/index.less +5 -5
  11. package/cjs/button/demo/style/mobile.less +0 -4
  12. package/cjs/button/hooks.d.ts +1 -2
  13. package/cjs/button/hooks.js +5 -3
  14. package/cjs/button/index.d.ts +1 -1
  15. package/cjs/button/index.js +28 -33
  16. package/cjs/button/style/css/index.css +75 -310
  17. package/cjs/button/style/index.less +32 -38
  18. package/cjs/dropdown/dropdown.d.ts +3 -0
  19. package/cjs/dropdown/dropdown.js +306 -0
  20. package/cjs/dropdown/index.d.ts +3 -4
  21. package/cjs/dropdown/index.js +3 -303
  22. package/cjs/dropdown/options.js +2 -1
  23. package/cjs/dropdown/type.d.ts +20 -9
  24. package/cjs/dropdown-menu/dropdown-menu.d.ts +4 -0
  25. package/cjs/dropdown-menu/dropdown-menu.js +273 -0
  26. package/cjs/dropdown-menu/helper.d.ts +1 -1
  27. package/cjs/dropdown-menu/index.d.ts +2 -3
  28. package/cjs/dropdown-menu/index.js +2 -245
  29. package/cjs/dropdown-menu/type.d.ts +21 -20
  30. package/cjs/image/index.js +4 -1
  31. package/cjs/image/style/css/index.css +2 -1
  32. package/cjs/image/style/index.less +2 -1
  33. package/cjs/image-picker/index.d.ts +6 -6
  34. package/cjs/image-picker/index.js +4 -3
  35. package/cjs/nav-bar/index.js +7 -2
  36. package/cjs/show-monitor/index.js +31 -3
  37. package/dist/index.js +644 -604
  38. package/dist/index.min.js +3 -3
  39. package/dist/style.css +174 -438
  40. package/dist/style.min.css +1 -1
  41. package/esm/avatar/group.js +1 -1
  42. package/esm/avatar/index.js +10 -13
  43. package/esm/avatar/style/css/index.css +96 -126
  44. package/esm/avatar/style/index.less +54 -72
  45. package/esm/badge/index.js +6 -8
  46. package/esm/badge/style/css/index.css +5 -5
  47. package/esm/badge/style/index.less +5 -5
  48. package/esm/button/demo/style/mobile.less +0 -4
  49. package/esm/button/hooks.d.ts +1 -2
  50. package/esm/button/hooks.js +5 -3
  51. package/esm/button/index.d.ts +1 -1
  52. package/esm/button/index.js +30 -35
  53. package/esm/button/style/css/index.css +75 -310
  54. package/esm/button/style/index.less +32 -38
  55. package/esm/dropdown/dropdown.d.ts +3 -0
  56. package/esm/dropdown/dropdown.js +288 -0
  57. package/esm/dropdown/index.d.ts +3 -4
  58. package/esm/dropdown/index.js +3 -293
  59. package/esm/dropdown/options.js +2 -1
  60. package/esm/dropdown/type.d.ts +20 -9
  61. package/esm/dropdown-menu/dropdown-menu.d.ts +4 -0
  62. package/esm/dropdown-menu/dropdown-menu.js +256 -0
  63. package/esm/dropdown-menu/helper.d.ts +1 -1
  64. package/esm/dropdown-menu/index.d.ts +2 -3
  65. package/esm/dropdown-menu/index.js +2 -237
  66. package/esm/dropdown-menu/type.d.ts +21 -20
  67. package/esm/image/index.js +4 -1
  68. package/esm/image/style/css/index.css +2 -1
  69. package/esm/image/style/index.less +2 -1
  70. package/esm/image-picker/index.d.ts +6 -6
  71. package/esm/image-picker/index.js +4 -3
  72. package/esm/nav-bar/index.js +6 -2
  73. package/esm/show-monitor/index.js +31 -3
  74. package/package.json +3 -3
  75. package/tokens/app/arcodesign/default/css-variables.less +2 -1
  76. package/tokens/app/arcodesign/default/index.d.ts +2 -1
  77. package/tokens/app/arcodesign/default/index.js +2 -1
  78. package/tokens/app/arcodesign/default/index.json +27 -15
  79. package/tokens/app/arcodesign/default/index.less +2 -1
  80. package/umd/avatar/group.js +1 -1
  81. package/umd/avatar/index.js +10 -13
  82. package/umd/avatar/style/css/index.css +96 -126
  83. package/umd/avatar/style/index.less +54 -72
  84. package/umd/badge/index.js +6 -8
  85. package/umd/badge/style/css/index.css +5 -5
  86. package/umd/badge/style/index.less +5 -5
  87. package/umd/button/demo/style/mobile.less +0 -4
  88. package/umd/button/hooks.d.ts +1 -2
  89. package/umd/button/hooks.js +5 -3
  90. package/umd/button/index.d.ts +1 -1
  91. package/umd/button/index.js +28 -33
  92. package/umd/button/style/css/index.css +75 -310
  93. package/umd/button/style/index.less +32 -38
  94. package/umd/dropdown/dropdown.d.ts +3 -0
  95. package/umd/dropdown/dropdown.js +309 -0
  96. package/umd/dropdown/index.d.ts +3 -4
  97. package/umd/dropdown/index.js +5 -298
  98. package/umd/dropdown/options.js +2 -1
  99. package/umd/dropdown/type.d.ts +20 -9
  100. package/umd/dropdown-menu/dropdown-menu.d.ts +4 -0
  101. package/umd/dropdown-menu/dropdown-menu.js +278 -0
  102. package/umd/dropdown-menu/helper.d.ts +1 -1
  103. package/umd/dropdown-menu/index.d.ts +2 -3
  104. package/umd/dropdown-menu/index.js +5 -241
  105. package/umd/dropdown-menu/type.d.ts +21 -20
  106. package/umd/image/index.js +4 -1
  107. package/umd/image/style/css/index.css +2 -1
  108. package/umd/image/style/index.less +2 -1
  109. package/umd/image-picker/index.d.ts +6 -6
  110. package/umd/image-picker/index.js +4 -3
  111. package/umd/nav-bar/index.js +9 -6
  112. package/umd/show-monitor/index.js +31 -3
@@ -1,4 +1,5 @@
1
1
  import { CSSProperties, ReactNode } from 'react';
2
+ export declare type OptionValueType = number | string;
2
3
  export interface OptionsItem {
3
4
  /**
4
5
  * 选项名称
@@ -9,7 +10,7 @@ export interface OptionsItem {
9
10
  * 选项标识
10
11
  * @en option value
11
12
  * */
12
- value: number;
13
+ value: OptionValueType;
13
14
  /**
14
15
  * 选项是否可用,默认false表示可用
15
16
  * @en Whether the option is available, the default false means available
@@ -111,6 +112,11 @@ export interface DropdownCommonProps {
111
112
  * @default false
112
113
  */
113
114
  useColumn?: boolean | number;
115
+ /**
116
+ * 选项附带图标
117
+ * @en Icon in each option
118
+ */
119
+ optionIcon?: ReactNode;
114
120
  /**
115
121
  * 是否在打开下拉框时再加载内容
116
122
  * @en Whether to reload the content when the dropdown box is opened
@@ -177,29 +183,29 @@ export interface SingleOptionProps {
177
183
  * 默认选中值
178
184
  * @en Default checked value
179
185
  * */
180
- defaultSelectedValue?: number;
186
+ defaultSelectedValue?: OptionValueType;
181
187
  /**
182
188
  * 当前选择的选项标识
183
189
  * @en The currently selected option value
184
190
  * */
185
- selectedValue?: number;
191
+ selectedValue?: OptionValueType;
186
192
  /**
187
193
  * 点击选项时触发的回调函数
188
194
  * @en Callback when clicking option
189
195
  * */
190
- onOptionClick?: (val: number, op: OptionsItem) => void;
196
+ onOptionClick?: (val: OptionValueType, op: OptionsItem) => void;
191
197
  /**
192
198
  * 当选项改变时触发的回调函数
193
199
  * @en Callback when the option changes
194
200
  * */
195
- onOptionChange?: (val: number, op: OptionsItem) => void;
201
+ onOptionChange?: (val: OptionValueType, op: OptionsItem) => void;
196
202
  }
197
203
  export interface MultipleOptionProps {
198
204
  multiple: true;
199
- defaultSelectedValue?: number[];
200
- selectedValue?: number[];
201
- onOptionClick?: (selected: boolean, val: number, op: OptionsItem) => void;
202
- onOptionChange?: (vals: number[], op: OptionsItem) => void;
205
+ defaultSelectedValue?: OptionValueType[];
206
+ selectedValue?: OptionValueType[];
207
+ onOptionClick?: (selected: boolean, val: OptionValueType, op: OptionsItem) => void;
208
+ onOptionChange?: (vals: OptionValueType[], op: OptionsItem) => void;
203
209
  }
204
210
  export declare type OptionProps = SingleOptionProps | MultipleOptionProps;
205
211
  export interface DropdownBasicProps extends DropdownCommonProps {
@@ -247,6 +253,11 @@ export interface DropdownOptionsBasicProps {
247
253
  * @default false
248
254
  */
249
255
  useColumn?: DropdownCommonProps['useColumn'];
256
+ /**
257
+ * 选项列表右侧图标
258
+ * @en Icon on the right side of the options list
259
+ */
260
+ icon?: ReactNode;
250
261
  }
251
262
  export declare type DropdownOptionsProps = DropdownOptionsBasicProps & OptionProps;
252
263
  export interface DropdownOptionsRef {
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { DropdownMenuRef } from './type';
3
+ import { DropdownProps, DropdownRef } from '../dropdown';
4
+ export declare function componentGenerator<P extends DropdownProps = DropdownProps, R extends DropdownRef = DropdownRef>(Comp: React.ForwardRefExoticComponent<P & React.RefAttributes<R>>): React.ForwardRefExoticComponent<(import("./type").DropdownMenuBasicProps & import("./type").SingleOptionProps & React.RefAttributes<DropdownMenuRef>) | (import("./type").DropdownMenuBasicProps & import("./type").MultipleOptionProps & React.RefAttributes<DropdownMenuRef>)>;
@@ -0,0 +1,278 @@
1
+ (function (global, factory) {
2
+ if (typeof define === "function" && define.amd) {
3
+ define(["exports", "@babel/runtime/helpers/extends", "react", "@arco-design/mobile-utils", "../context-provider", "./helper", "../icon/IconTriDown"], factory);
4
+ } else if (typeof exports !== "undefined") {
5
+ factory(exports, require("@babel/runtime/helpers/extends"), require("react"), require("@arco-design/mobile-utils"), require("../context-provider"), require("./helper"), require("../icon/IconTriDown"));
6
+ } else {
7
+ var mod = {
8
+ exports: {}
9
+ };
10
+ factory(mod.exports, global._extends, global.react, global.mobileUtils, global.contextProvider, global.helper, global.IconTriDown);
11
+ global.dropdownMenu = mod.exports;
12
+ }
13
+ })(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _extends2, _react, _mobileUtils, _contextProvider, _helper, _IconTriDown) {
14
+ "use strict";
15
+
16
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
17
+
18
+ _exports.__esModule = true;
19
+ _exports.componentGenerator = componentGenerator;
20
+ _extends2 = _interopRequireDefault(_extends2);
21
+ _react = _interopRequireWildcard(_react);
22
+ _IconTriDown = _interopRequireDefault(_IconTriDown);
23
+
24
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
+
26
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
+
28
+ function componentGenerator(Comp) {
29
+ return /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
30
+ var _props$className = props.className,
31
+ className = _props$className === void 0 ? '' : _props$className,
32
+ _props$style = props.style,
33
+ style = _props$style === void 0 ? {} : _props$style,
34
+ _props$options = props.options,
35
+ options = _props$options === void 0 ? [] : _props$options,
36
+ _props$disabled = props.disabled,
37
+ disabled = _props$disabled === void 0 ? [] : _props$disabled,
38
+ _props$selectTips = props.selectTips,
39
+ selectTips = _props$selectTips === void 0 ? [] : _props$selectTips,
40
+ values = props.values,
41
+ _props$defaultValues = props.defaultValues,
42
+ defaultValues = _props$defaultValues === void 0 ? [] : _props$defaultValues,
43
+ icon = props.icon,
44
+ _props$chooseAndClose = props.chooseAndClose,
45
+ chooseAndClose = _props$chooseAndClose === void 0 ? true : _props$chooseAndClose,
46
+ selectIndex = props.selectIndex,
47
+ _props$defaultSelectI = props.defaultSelectIndex,
48
+ defaultSelectIndex = _props$defaultSelectI === void 0 ? 0 : _props$defaultSelectI,
49
+ showDropdown = props.showDropdown,
50
+ _props$defaultShowDro = props.defaultShowDropdown,
51
+ defaultShowDropdown = _props$defaultShowDro === void 0 ? false : _props$defaultShowDro,
52
+ onValuesChange = props.onValuesChange,
53
+ onSelectChange = props.onSelectChange,
54
+ onDropdownChange = props.onDropdownChange,
55
+ _props$getFormattedOp = props.getFormattedOptions,
56
+ getFormattedOptions = _props$getFormattedOp === void 0 ? _helper.getFormattedOptions : _props$getFormattedOp,
57
+ getContainer = props.getContainer,
58
+ children = props.children,
59
+ extraForDropdown = props.extraForDropdown;
60
+
61
+ var _useContext = (0, _react.useContext)(_contextProvider.GlobalContext),
62
+ prefixCls = _useContext.prefixCls,
63
+ locale = _useContext.locale;
64
+
65
+ var _useState = (0, _react.useState)(defaultValues),
66
+ innerValues = _useState[0],
67
+ setInnerValues = _useState[1];
68
+
69
+ var _useState2 = (0, _react.useState)(0),
70
+ defaultTop = _useState2[0],
71
+ setDefaultTop = _useState2[1];
72
+
73
+ var currentValues = values !== void 0 ? values : innerValues;
74
+
75
+ var _useState3 = (0, _react.useState)(defaultShowDropdown),
76
+ innerShowDropdown = _useState3[0],
77
+ setInnerShowDropdown = _useState3[1];
78
+
79
+ var dropdownShown = showDropdown !== void 0 ? showDropdown : innerShowDropdown;
80
+
81
+ var _useState4 = (0, _react.useState)(defaultSelectIndex),
82
+ innerSelectedIndex = _useState4[0],
83
+ setInnerSelectedIndex = _useState4[1];
84
+
85
+ var selectedIndex = selectIndex !== void 0 ? selectIndex : innerSelectedIndex;
86
+ var selectWrapper = (0, _react.useRef)(null);
87
+ var domRef = (0, _react.useRef)(null);
88
+ var defaultOpItem = {
89
+ label: locale == null ? void 0 : locale.DropdownMenu.select,
90
+ value: -1
91
+ };
92
+ /**
93
+ * 更新选项数组和选择情况
94
+ * @en Update options list and selection
95
+ */
96
+
97
+ var _useMemo = (0, _react.useMemo)(function () {
98
+ return getFormattedOptions(options, currentValues);
99
+ }, [options, currentValues]),
100
+ formattedOptions = _useMemo.formattedOptions;
101
+
102
+ var selectedOptions = (0, _react.useMemo)(function () {
103
+ return formattedOptions.map(function (ops, index) {
104
+ if (props.multiple) {
105
+ var _value = currentValues[index] || [];
106
+
107
+ var opItems = ops.reduce(function (acc, op) {
108
+ return [].concat(acc, _value.includes(op.value) ? [op] : []);
109
+ }, []);
110
+ return opItems.length ? opItems : [defaultOpItem];
111
+ }
112
+
113
+ var value = currentValues[index];
114
+ return ops.find(function (op) {
115
+ return op.value === value;
116
+ }) || ops[0];
117
+ });
118
+ }, [formattedOptions, currentValues, props.multiple]);
119
+ /**
120
+ * 当下拉框的状态变化
121
+ * @en When the state of the dropdown box changes
122
+ */
123
+
124
+ var handleShowDropdownChange = function handleShowDropdownChange(show, index) {
125
+ onDropdownChange && onDropdownChange(show, index);
126
+ setInnerShowDropdown(show);
127
+ };
128
+
129
+ var handleSelectedIndexChange = function handleSelectedIndexChange(idx) {
130
+ setInnerSelectedIndex(idx);
131
+ onSelectChange == null ? void 0 : onSelectChange(idx);
132
+ };
133
+
134
+ var handleValuesChange = function handleValuesChange(val) {
135
+ var newValue = [].concat(currentValues); // 级联情况下 selectedIndex 之后的选项值重置
136
+ // @en Option values are reset after selectedIndex in case of cascade
137
+
138
+ if ((0, _helper.isCascadeArray)(options)) {
139
+ newValue = newValue.slice(0, selectedIndex);
140
+ }
141
+
142
+ newValue[selectedIndex] = val;
143
+ newValue = getFormattedOptions(options, newValue).formattedValue;
144
+ setInnerValues(newValue);
145
+ onValuesChange == null ? void 0 : onValuesChange(newValue);
146
+ };
147
+ /**
148
+ * 处理选择框的点击事件
149
+ * @en Handle click event of dropdown box
150
+ */
151
+
152
+
153
+ var handleSelectClick = function handleSelectClick(idx) {
154
+ if (disabled[idx]) return;
155
+
156
+ if (Number(idx) === selectedIndex) {
157
+ handleShowDropdownChange(!dropdownShown, idx);
158
+ } else {
159
+ handleSelectedIndexChange(idx);
160
+ if (!dropdownShown) handleShowDropdownChange(true, idx);
161
+ }
162
+ };
163
+ /**
164
+ * 判断是否为当前实例下的选择框
165
+ * @en Determine whether it is the dropdown box under the current instance
166
+ */
167
+
168
+
169
+ var isCurrentSelectEl = function isCurrentSelectEl(target) {
170
+ var _ref = extraForDropdown || {},
171
+ isStopTouchEl = _ref.isStopTouchEl;
172
+
173
+ return (0, _helper.isRefDom)(target, selectWrapper) && (0, _helper.isClassNameDom)(target, 'select-item') || (isStopTouchEl == null ? void 0 : isStopTouchEl(target)) || false;
174
+ };
175
+
176
+ (0, _react.useImperativeHandle)(ref, function () {
177
+ return {
178
+ dom: domRef.current
179
+ };
180
+ });
181
+ (0, _react.useEffect)(function () {
182
+ var defaultContainer = selectWrapper.current;
183
+ var container = getContainer ? getContainer() || defaultContainer : defaultContainer;
184
+ setDefaultTop((container == null ? void 0 : container.getBoundingClientRect().bottom) || 0);
185
+ }, [getContainer, dropdownShown]);
186
+
187
+ var onCancel = props.onCancel || function () {
188
+ return handleShowDropdownChange(false);
189
+ };
190
+
191
+ var dropdownCommonProps = (0, _extends2.default)({
192
+ showDropdown: dropdownShown,
193
+ top: (extraForDropdown == null ? void 0 : extraForDropdown.top) || defaultTop,
194
+ onCancel: onCancel
195
+ }, extraForDropdown || {}, {
196
+ isStopTouchEl: isCurrentSelectEl
197
+ });
198
+
199
+ var renderSelectedLabel = function renderSelectedLabel(op, index) {
200
+ if (props.multiple === true) {
201
+ var multipleOp = op || [];
202
+ return props.renderSelectLabel ? props.renderSelectLabel(multipleOp, index) : /*#__PURE__*/_react.default.createElement("div", {
203
+ className: (0, _mobileUtils.cls)(prefixCls + "-select-item-label-text")
204
+ }, multipleOp.map(function (item) {
205
+ return item.label;
206
+ }).join(','));
207
+ }
208
+
209
+ var singleOp = op || [];
210
+ return props.renderSelectLabel ? props.renderSelectLabel(singleOp, index) : /*#__PURE__*/_react.default.createElement("div", {
211
+ className: (0, _mobileUtils.cls)(prefixCls + "-select-item-label-text")
212
+ }, singleOp.label);
213
+ };
214
+
215
+ return /*#__PURE__*/_react.default.createElement("div", {
216
+ ref: domRef,
217
+ className: (0, _mobileUtils.cls)(prefixCls + "-dropdown-menu all-border-box", className, {
218
+ show: dropdownShown
219
+ }),
220
+ style: style
221
+ }, /*#__PURE__*/_react.default.createElement("div", {
222
+ className: (0, _mobileUtils.cls)(prefixCls + "-select"),
223
+ ref: selectWrapper
224
+ }, selectedOptions.map(function (op, index) {
225
+ var tip = selectTips[index] || '';
226
+ return /*#__PURE__*/_react.default.createElement("div", {
227
+ className: (0, _mobileUtils.cls)(prefixCls + "-select-item", {
228
+ 'is-disabled': disabled[index],
229
+ 'is-selected': dropdownShown && selectedIndex === index
230
+ }),
231
+ key: index,
232
+ "data-idx": index,
233
+ onClick: function onClick() {
234
+ return handleSelectClick(index);
235
+ }
236
+ }, tip.length > 0 && /*#__PURE__*/_react.default.createElement("span", {
237
+ className: (0, _mobileUtils.cls)(prefixCls + "-select-item-tip")
238
+ }, tip), /*#__PURE__*/_react.default.createElement("div", {
239
+ className: (0, _mobileUtils.cls)(prefixCls + "-select-item-label")
240
+ }, renderSelectedLabel(op, index), icon === void 0 ? /*#__PURE__*/_react.default.createElement(_IconTriDown.default, {
241
+ className: (0, _mobileUtils.cls)(prefixCls + "-select-item-icon", {
242
+ 'is-show': dropdownShown && selectedIndex === index
243
+ })
244
+ }) : icon));
245
+ }), props.multiple === true ? /*#__PURE__*/_react.default.createElement(Comp, (0, _extends2.default)({
246
+ multiple: true,
247
+ options: formattedOptions[selectedIndex] || [],
248
+ selectedValue: currentValues[selectedIndex] || [],
249
+ onOptionClick: function onOptionClick(selected, val, op) {
250
+ props.onOptionClick == null ? void 0 : props.onOptionClick(selected, val, op, selectedIndex);
251
+ },
252
+ onOptionChange: function onOptionChange(val, op) {
253
+ props.onOptionChange == null ? void 0 : props.onOptionChange(val, op, selectedIndex);
254
+ handleValuesChange(val);
255
+ }
256
+ }, dropdownCommonProps, {
257
+ children: children
258
+ })) : /*#__PURE__*/_react.default.createElement(Comp, (0, _extends2.default)({
259
+ multiple: props.multiple,
260
+ options: formattedOptions[selectedIndex] || [],
261
+ selectedValue: currentValues[selectedIndex] || 0,
262
+ onOptionClick: function onOptionClick(val, op) {
263
+ props.onOptionClick == null ? void 0 : props.onOptionClick(val, op, selectedIndex);
264
+
265
+ if (chooseAndClose) {
266
+ handleShowDropdownChange(false, selectedIndex);
267
+ }
268
+ },
269
+ onOptionChange: function onOptionChange(val, op) {
270
+ props.onOptionChange == null ? void 0 : props.onOptionChange(val, op, selectedIndex);
271
+ handleValuesChange(val);
272
+ }
273
+ }, dropdownCommonProps, {
274
+ children: children
275
+ }))));
276
+ });
277
+ }
278
+ });
@@ -25,7 +25,7 @@ export declare function isString(icon: string | ReactNode): icon is string;
25
25
  * */
26
26
  export declare const getFormattedOptions: (options: OptionsItem[][] | string[] | CascadeOptions[], currentValues: ValueType) => {
27
27
  formattedOptions: OptionsItem[][];
28
- formattedValue: (number | number[])[];
28
+ formattedValue: (string | number | (string | number)[])[];
29
29
  };
30
30
  /**
31
31
  * 判断是否为指定ref内的元素
@@ -1,5 +1,4 @@
1
- import React from 'react';
2
- import { DropdownMenuRef } from './type';
1
+ /// <reference types="react" />
3
2
  export * from './type';
4
3
  /**
5
4
  * 下拉选择组件,点击选择器(select)展开下拉框(dropdown),展示选择项(options),兼容多个选择器的情况。
@@ -9,5 +8,5 @@ export * from './type';
9
8
  * @name 下拉选择菜单
10
9
  * @name_en DropdownMenu
11
10
  */
12
- declare const DropdownMenu: React.ForwardRefExoticComponent<(import("./type").DropdownMenuBasicProps & import("./type").SingleOptionProps & React.RefAttributes<DropdownMenuRef>) | (import("./type").DropdownMenuBasicProps & import("./type").MultipleOptionProps & React.RefAttributes<DropdownMenuRef>)>;
11
+ declare const DropdownMenu: import("react").ForwardRefExoticComponent<(import("./type").DropdownMenuBasicProps & import("./type").SingleOptionProps & import("react").RefAttributes<import("./type").DropdownMenuRef>) | (import("./type").DropdownMenuBasicProps & import("./type").MultipleOptionProps & import("react").RefAttributes<import("./type").DropdownMenuRef>)>;
13
12
  export default DropdownMenu;
@@ -1,16 +1,16 @@
1
1
  (function (global, factory) {
2
2
  if (typeof define === "function" && define.amd) {
3
- define(["exports", "@babel/runtime/helpers/extends", "react", "@arco-design/mobile-utils", "../context-provider", "./helper", "../dropdown", "../icon/IconTriDown", "./type"], factory);
3
+ define(["exports", "./dropdown-menu", "../dropdown", "./type"], factory);
4
4
  } else if (typeof exports !== "undefined") {
5
- factory(exports, require("@babel/runtime/helpers/extends"), require("react"), require("@arco-design/mobile-utils"), require("../context-provider"), require("./helper"), require("../dropdown"), require("../icon/IconTriDown"), require("./type"));
5
+ factory(exports, require("./dropdown-menu"), require("../dropdown"), require("./type"));
6
6
  } else {
7
7
  var mod = {
8
8
  exports: {}
9
9
  };
10
- factory(mod.exports, global._extends, global.react, global.mobileUtils, global.contextProvider, global.helper, global.dropdown, global.IconTriDown, global.type);
10
+ factory(mod.exports, global.dropdownMenu, global.dropdown, global.type);
11
11
  global.index = mod.exports;
12
12
  }
13
- })(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _extends2, _react, _mobileUtils, _contextProvider, _helper, _dropdown, _IconTriDown, _type) {
13
+ })(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _dropdownMenu, _dropdown, _type) {
14
14
  "use strict";
15
15
 
16
16
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
@@ -18,10 +18,7 @@
18
18
  _exports.__esModule = true;
19
19
  var _exportNames = {};
20
20
  _exports.default = void 0;
21
- _extends2 = _interopRequireDefault(_extends2);
22
- _react = _interopRequireWildcard(_react);
23
21
  _dropdown = _interopRequireDefault(_dropdown);
24
- _IconTriDown = _interopRequireDefault(_IconTriDown);
25
22
  Object.keys(_type).forEach(function (key) {
26
23
  if (key === "default" || key === "__esModule") return;
27
24
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -29,10 +26,6 @@
29
26
  _exports[key] = _type[key];
30
27
  });
31
28
 
32
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
33
-
34
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
35
-
36
29
  /**
37
30
  * 下拉选择组件,点击选择器(select)展开下拉框(dropdown),展示选择项(options),兼容多个选择器的情况。
38
31
  * @en Dropdown component, click the selector (select) to expand the dropdown box (dropdown), display the options (options), compatible with multiple selectors.
@@ -41,236 +34,7 @@
41
34
  * @name 下拉选择菜单
42
35
  * @name_en DropdownMenu
43
36
  */
44
- var DropdownMenu = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
45
- var _props$className = props.className,
46
- className = _props$className === void 0 ? '' : _props$className,
47
- _props$style = props.style,
48
- style = _props$style === void 0 ? {} : _props$style,
49
- _props$options = props.options,
50
- options = _props$options === void 0 ? [] : _props$options,
51
- _props$disabled = props.disabled,
52
- disabled = _props$disabled === void 0 ? [] : _props$disabled,
53
- _props$selectTips = props.selectTips,
54
- selectTips = _props$selectTips === void 0 ? [] : _props$selectTips,
55
- values = props.values,
56
- _props$defaultValues = props.defaultValues,
57
- defaultValues = _props$defaultValues === void 0 ? [] : _props$defaultValues,
58
- icon = props.icon,
59
- _props$chooseAndClose = props.chooseAndClose,
60
- chooseAndClose = _props$chooseAndClose === void 0 ? true : _props$chooseAndClose,
61
- selectIndex = props.selectIndex,
62
- _props$defaultSelectI = props.defaultSelectIndex,
63
- defaultSelectIndex = _props$defaultSelectI === void 0 ? 0 : _props$defaultSelectI,
64
- showDropdown = props.showDropdown,
65
- _props$defaultShowDro = props.defaultShowDropdown,
66
- defaultShowDropdown = _props$defaultShowDro === void 0 ? false : _props$defaultShowDro,
67
- renderSelectLabel = props.renderSelectLabel,
68
- onValuesChange = props.onValuesChange,
69
- onSelectChange = props.onSelectChange,
70
- onDropdownChange = props.onDropdownChange,
71
- _props$getFormattedOp = props.getFormattedOptions,
72
- getFormattedOptions = _props$getFormattedOp === void 0 ? _helper.getFormattedOptions : _props$getFormattedOp,
73
- children = props.children,
74
- extraForDropdown = props.extraForDropdown;
75
-
76
- var _useContext = (0, _react.useContext)(_contextProvider.GlobalContext),
77
- prefixCls = _useContext.prefixCls,
78
- locale = _useContext.locale;
79
-
80
- var _useState = (0, _react.useState)(defaultValues),
81
- innerValues = _useState[0],
82
- setInnerValues = _useState[1];
83
-
84
- var _useState2 = (0, _react.useState)(0),
85
- defaultTop = _useState2[0],
86
- setDefaultTop = _useState2[1];
87
-
88
- var currentValues = values !== void 0 ? values : innerValues;
89
-
90
- var _useState3 = (0, _react.useState)(defaultShowDropdown),
91
- innerShowDropdown = _useState3[0],
92
- setInnerShowDropdown = _useState3[1];
93
-
94
- var dropdownShown = showDropdown !== void 0 ? showDropdown : innerShowDropdown;
95
-
96
- var _useState4 = (0, _react.useState)(defaultSelectIndex),
97
- innerSelectedIndex = _useState4[0],
98
- setInnerSelectedIndex = _useState4[1];
99
-
100
- var selectedIndex = selectIndex !== void 0 ? selectIndex : innerSelectedIndex;
101
- var selectWrapper = (0, _react.useRef)(null);
102
- var domRef = (0, _react.useRef)(null);
103
- var defaultOpItem = {
104
- label: locale == null ? void 0 : locale.DropdownMenu.select,
105
- value: -1
106
- };
107
- /**
108
- * 下拉框的容器
109
- * @en Dropdown container
110
- */
111
-
112
- var getContainer = (0, _react.useCallback)(function () {
113
- if (props.getContainer) {
114
- return props.getContainer() || selectWrapper.current;
115
- }
116
-
117
- return selectWrapper.current;
118
- }, [selectWrapper.current]);
119
- /**
120
- * 更新选项数组和选择情况
121
- * @en Update options list and selection
122
- */
123
-
124
- var _useMemo = (0, _react.useMemo)(function () {
125
- return getFormattedOptions(options, currentValues);
126
- }, [options, currentValues]),
127
- formattedOptions = _useMemo.formattedOptions;
128
-
129
- var selectedOptions = (0, _react.useMemo)(function () {
130
- return formattedOptions.map(function (ops, index) {
131
- return ops.find(function (op) {
132
- var value = currentValues[index];
133
- return Array.isArray(value) ? value.includes(op.value) : op.value === value;
134
- }) || (props.multiple ? defaultOpItem : ops[0]);
135
- });
136
- }, [formattedOptions, currentValues]);
137
- /**
138
- * 当下拉框的状态变化
139
- * @en When the state of the dropdown box changes
140
- */
141
-
142
- var handleShowDropdownChange = function handleShowDropdownChange(show, index) {
143
- onDropdownChange && onDropdownChange(show, index);
144
- setInnerShowDropdown(show);
145
- };
146
-
147
- var handleSelectedIndexChange = function handleSelectedIndexChange(idx) {
148
- setInnerSelectedIndex(idx);
149
- onSelectChange == null ? void 0 : onSelectChange(idx);
150
- };
151
-
152
- var handleValuesChange = function handleValuesChange(val) {
153
- var newValue = [].concat(currentValues); // 级联情况下 selectedIndex 之后的选项值重置
154
- // @en Option values are reset after selectedIndex in case of cascade
155
-
156
- if ((0, _helper.isCascadeArray)(options)) {
157
- newValue = newValue.slice(0, selectedIndex);
158
- }
159
-
160
- newValue[selectedIndex] = val;
161
- newValue = getFormattedOptions(options, newValue).formattedValue;
162
- setInnerValues(newValue);
163
- onValuesChange == null ? void 0 : onValuesChange(newValue);
164
- };
165
- /**
166
- * 处理选择框的点击事件
167
- * @en Handle click event of dropdown box
168
- */
169
-
170
-
171
- var handleSelectClick = function handleSelectClick(idx) {
172
- if (disabled[idx]) return;
173
-
174
- if (Number(idx) === selectedIndex) {
175
- handleShowDropdownChange(!dropdownShown, idx);
176
- } else {
177
- handleSelectedIndexChange(idx);
178
- if (!dropdownShown) handleShowDropdownChange(true, idx);
179
- }
180
- };
181
- /**
182
- * 判断是否为当前实例下的选择框
183
- * @en Determine whether it is the dropdown box under the current instance
184
- */
185
-
186
-
187
- var isCurrentSelectEl = function isCurrentSelectEl(target) {
188
- var _ref = extraForDropdown || {},
189
- isStopTouchEl = _ref.isStopTouchEl;
190
-
191
- return (0, _helper.isRefDom)(target, selectWrapper) && (0, _helper.isClassNameDom)(target, 'select-item') || (isStopTouchEl == null ? void 0 : isStopTouchEl(target)) || false;
192
- };
193
-
194
- (0, _react.useImperativeHandle)(ref, function () {
195
- return {
196
- dom: domRef.current
197
- };
198
- });
199
- (0, _react.useEffect)(function () {
200
- var _getContainer;
201
-
202
- setDefaultTop(((_getContainer = getContainer()) == null ? void 0 : _getContainer.getBoundingClientRect().bottom) || 0);
203
- }, [getContainer, dropdownShown]);
204
-
205
- var onCancel = props.onCancel || function () {
206
- return handleShowDropdownChange(false);
207
- };
208
-
209
- var dropdownCommonProps = (0, _extends2.default)({
210
- showDropdown: dropdownShown,
211
- top: (extraForDropdown == null ? void 0 : extraForDropdown.top) || defaultTop,
212
- onCancel: onCancel
213
- }, extraForDropdown || {}, {
214
- isStopTouchEl: isCurrentSelectEl
215
- });
216
- return /*#__PURE__*/_react.default.createElement("div", {
217
- ref: domRef,
218
- className: (0, _mobileUtils.cls)(prefixCls + "-dropdown-menu all-border-box " + (dropdownShown ? 'show' : ''), className),
219
- style: style
220
- }, /*#__PURE__*/_react.default.createElement("div", {
221
- className: (0, _mobileUtils.cls)(prefixCls + "-select"),
222
- ref: selectWrapper
223
- }, selectedOptions.map(function (op, index) {
224
- var tip = selectTips[index] || '';
225
- return /*#__PURE__*/_react.default.createElement("div", {
226
- className: (0, _mobileUtils.cls)(prefixCls + "-select-item", {
227
- 'is-disabled': disabled[index],
228
- 'is-selected': dropdownShown && selectedIndex === index
229
- }),
230
- key: index,
231
- "data-idx": index,
232
- onClick: function onClick() {
233
- return handleSelectClick(index);
234
- }
235
- }, tip.length > 0 && /*#__PURE__*/_react.default.createElement("span", {
236
- className: (0, _mobileUtils.cls)(prefixCls + "-select-item-tip")
237
- }, tip), /*#__PURE__*/_react.default.createElement("div", {
238
- className: (0, _mobileUtils.cls)(prefixCls + "-select-item-label")
239
- }, renderSelectLabel ? renderSelectLabel(op, index) : /*#__PURE__*/_react.default.createElement("div", {
240
- className: (0, _mobileUtils.cls)(prefixCls + "-select-item-label-text")
241
- }, op.label), icon === void 0 ? /*#__PURE__*/_react.default.createElement(_IconTriDown.default, {
242
- className: (0, _mobileUtils.cls)(prefixCls + "-select-item-icon", {
243
- 'is-show': dropdownShown && selectedIndex === index
244
- })
245
- }) : icon));
246
- }), props.multiple === true ? /*#__PURE__*/_react.default.createElement(_dropdown.default, (0, _extends2.default)({
247
- multiple: true,
248
- options: formattedOptions[selectedIndex] || [],
249
- selectedValue: currentValues[selectedIndex] || [],
250
- onOptionClick: function onOptionClick(selected, val, op) {
251
- props.onOptionClick == null ? void 0 : props.onOptionClick(selected, val, op, selectedIndex);
252
- },
253
- onOptionChange: function onOptionChange(val, op) {
254
- props.onOptionChange == null ? void 0 : props.onOptionChange(val, op, selectedIndex);
255
- handleValuesChange(val);
256
- }
257
- }, dropdownCommonProps), children) : /*#__PURE__*/_react.default.createElement(_dropdown.default, (0, _extends2.default)({
258
- multiple: props.multiple,
259
- options: formattedOptions[selectedIndex] || [],
260
- selectedValue: currentValues[selectedIndex] || 0,
261
- onOptionClick: function onOptionClick(val, op) {
262
- props.onOptionClick == null ? void 0 : props.onOptionClick(val, op, selectedIndex);
263
-
264
- if (chooseAndClose) {
265
- handleShowDropdownChange(false, selectedIndex);
266
- }
267
- },
268
- onOptionChange: function onOptionChange(val, op) {
269
- props.onOptionChange == null ? void 0 : props.onOptionChange(val, op, selectedIndex);
270
- handleValuesChange(val);
271
- }
272
- }, dropdownCommonProps), children)));
273
- });
37
+ var DropdownMenu = (0, _dropdownMenu.componentGenerator)(_dropdown.default);
274
38
  var _default = DropdownMenu;
275
39
  _exports.default = _default;
276
40
  });