@qsxy/element-plus-react 1.0.1 → 1.0.2
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/dist/Calendar/Calendar.js +12 -3
- package/dist/Calendar/Footer.js +4 -2
- package/dist/Calendar/QuarterPanel.d.ts +4 -0
- package/dist/Calendar/QuarterPanel.js +109 -0
- package/dist/Calendar/WeekPanel.js +1 -1
- package/dist/Calendar/typings.d.ts +1 -1
- package/dist/Card/Card.js +9 -4
- package/dist/Card/typings.d.ts +1 -1
- package/dist/Cascader/Cascader.js +1 -1
- package/dist/DatePicker/DatePicker.js +38 -12
- package/dist/DatePicker/DateRangePicker.js +27 -9
- package/dist/DatePicker/main.js +1 -1
- package/dist/DatePicker/typings.d.ts +1 -1
- package/dist/DateTimePicker/DateTimePicker.js +2 -2
- package/dist/Input/Input.1.d.ts +16 -0
- package/dist/Input/Input.1.js +376 -0
- package/dist/Input/Input.js +137 -121
- package/dist/Input/InputRange.js +1 -1
- package/dist/Input/TextArea.js +87 -12
- package/dist/Input/typings.d.ts +15 -5
- package/dist/Input/useComposition.d.ts +23 -0
- package/dist/Input/useComposition.js +63 -0
- package/dist/Input/utils.d.ts +6 -0
- package/dist/Input/utils.js +91 -0
- package/dist/InputNumber/InputNumber.js +1 -1
- package/dist/InputNumber/typings.d.ts +1 -1
- package/dist/Select/Option.js +30 -14
- package/dist/Select/SelectContext.d.ts +3 -4
- package/dist/Select/SelectCore.d.ts +2 -2
- package/dist/Select/SelectCore.js +164 -447
- package/dist/Select/SelectDropdown.js +67 -145
- package/dist/Select/typings.d.ts +47 -21
- package/dist/Select/useSelect.d.ts +125 -0
- package/dist/Select/useSelect.js +516 -0
- package/dist/Table/util.js +6 -5
- package/dist/Tag/Tag.js +22 -17
- package/dist/TimePicker/TimePicker.js +2 -2
- package/dist/TreeSelect/TreeSelect.js +2 -2
- package/dist/Util/aria.d.ts +25 -0
- package/dist/Util/aria.js +118 -0
- package/dist/hooks/useCalcInputWidth.d.ts +8 -0
- package/dist/hooks/useCalcInputWidth.js +30 -0
- package/dist/hooks/useComposition.d.ts +16 -0
- package/dist/hooks/useComposition.js +39 -0
- package/dist/hooks/useCursor.d.ts +2 -0
- package/dist/hooks/useCursor.js +52 -0
- package/dist/hooks/useFocusController.d.ts +27 -0
- package/dist/hooks/useFocusController.js +72 -0
- package/dist/index.css +1 -1
- package/dist/locale/en.d.ts +15 -0
- package/dist/locale/en.js +15 -0
- package/dist/locale/zhCn.d.ts +15 -0
- package/dist/locale/zhCn.js +15 -0
- package/package.json +1 -1
- package/theme-chalk/calendar/index.scss +1 -0
- package/theme-chalk/calendar/quarter-table.scss +78 -0
- package/theme-chalk/common/var.scss +1 -1
- package/theme-chalk/input/input.scss +424 -578
- package/theme-chalk/input/input.scss--bak +578 -0
- package/theme-chalk/select/index.scss +272 -247
- package/theme-chalk/select/index.scss--bak +247 -0
- package/theme-chalk/select/option-group.scss +2 -2
- package/theme-chalk/select/option.scss +2 -2
- package/theme-chalk/select/select-dropdown.scss +2 -2
- package/theme-chalk/tag.scss +181 -203
- package/theme-chalk/tag.scss--bak +203 -0
|
@@ -0,0 +1,516 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
var _excluded = ["filterable", "clearable", "clearIcon", "multiple", "onChange", "allowCreate", "onEnter", "afterLeave", "onVisibleChange", "onRemoveTag", "onClear", "labelFormat", "remote", "remoteShowSuffix", "suffixIcon"];
|
|
3
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
7
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
8
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
9
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
10
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
11
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
12
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
13
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
14
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
15
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
16
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
17
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
18
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
19
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
20
|
+
import ensureArray from 'lodash/castArray';
|
|
21
|
+
import filter from 'lodash/filter';
|
|
22
|
+
import max from 'lodash/max';
|
|
23
|
+
import min from 'lodash/min';
|
|
24
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
25
|
+
import { useTranslation } from 'react-i18next';
|
|
26
|
+
import { useConfigProvider } from "../ConfigProvider/ConfigProviderContext";
|
|
27
|
+
import { isEmpty, isNotEmpty, isUndefined, mergeDefaultProps } from "../Util";
|
|
28
|
+
import { partitionAnimationProps, partitionHTMLProps, partitionPopperPropsUtils, useChildrenInstance, useClassNames, useControlled, useDisabled, useSize } from "../hooks";
|
|
29
|
+
import { useComposition } from "../hooks/useComposition";
|
|
30
|
+
var useSelect = function useSelect(props) {
|
|
31
|
+
var _useConfigProvider = useConfigProvider(),
|
|
32
|
+
locale = _useConfigProvider.locale;
|
|
33
|
+
var _useTranslation = useTranslation(),
|
|
34
|
+
t = _useTranslation.t;
|
|
35
|
+
props = mergeDefaultProps({
|
|
36
|
+
placeholder: t('el.select.placeholder', {
|
|
37
|
+
lng: locale
|
|
38
|
+
}),
|
|
39
|
+
noDataText: t('el.select.noData', {
|
|
40
|
+
lng: locale
|
|
41
|
+
}),
|
|
42
|
+
noMatchText: t('el.select.noMatch', {
|
|
43
|
+
lng: locale
|
|
44
|
+
}),
|
|
45
|
+
loadingText: t('el.select.loading', {
|
|
46
|
+
lng: locale
|
|
47
|
+
}),
|
|
48
|
+
showArrow: true,
|
|
49
|
+
clearable: false,
|
|
50
|
+
filterable: false,
|
|
51
|
+
error: false,
|
|
52
|
+
required: false,
|
|
53
|
+
disabled: false,
|
|
54
|
+
maxWidth: 500,
|
|
55
|
+
collapseTagsTooltip: true,
|
|
56
|
+
maxCollapseTags: 1,
|
|
57
|
+
tagType: 'info',
|
|
58
|
+
tagEffect: 'light',
|
|
59
|
+
suffixIcon: 'angle-down',
|
|
60
|
+
clearIcon: 'circle-xmark'
|
|
61
|
+
}, props);
|
|
62
|
+
var nsSelect = useClassNames('select');
|
|
63
|
+
var be = nsSelect.be,
|
|
64
|
+
is = nsSelect.is;
|
|
65
|
+
// 选择框容器div
|
|
66
|
+
var containerRef = useRef(null);
|
|
67
|
+
// 下拉选项容器div
|
|
68
|
+
var contentRef = useRef(null);
|
|
69
|
+
var popperInstRef = useRef(null);
|
|
70
|
+
var selectDropdownRef = useRef(null);
|
|
71
|
+
var tagTooltipRef = useRef(null);
|
|
72
|
+
var inputRef = useRef(null);
|
|
73
|
+
var wrapperRef = useRef(null);
|
|
74
|
+
var suffixWrapperRef = useRef(null);
|
|
75
|
+
// 输入框是否初始化
|
|
76
|
+
var initedRef = useRef(false);
|
|
77
|
+
var _props = props,
|
|
78
|
+
filterable = _props.filterable,
|
|
79
|
+
clearable = _props.clearable,
|
|
80
|
+
clearIcon = _props.clearIcon,
|
|
81
|
+
multiple = _props.multiple,
|
|
82
|
+
onChange = _props.onChange,
|
|
83
|
+
allowCreate = _props.allowCreate,
|
|
84
|
+
onEnter = _props.onEnter,
|
|
85
|
+
afterLeave = _props.afterLeave,
|
|
86
|
+
onVisibleChange = _props.onVisibleChange,
|
|
87
|
+
onRemoveTag = _props.onRemoveTag,
|
|
88
|
+
onClearProp = _props.onClear,
|
|
89
|
+
labelFormat = _props.labelFormat,
|
|
90
|
+
remote = _props.remote,
|
|
91
|
+
remoteShowSuffix = _props.remoteShowSuffix,
|
|
92
|
+
suffixIcon = _props.suffixIcon,
|
|
93
|
+
rest = _objectWithoutProperties(_props, _excluded);
|
|
94
|
+
var _partitionHTMLProps = partitionHTMLProps(rest),
|
|
95
|
+
_partitionHTMLProps2 = _slicedToArray(_partitionHTMLProps, 1),
|
|
96
|
+
htmlInputProps = _partitionHTMLProps2[0];
|
|
97
|
+
var _partitionAnimationPr = partitionAnimationProps(rest),
|
|
98
|
+
_partitionAnimationPr2 = _slicedToArray(_partitionAnimationPr, 1),
|
|
99
|
+
transitionProps = _partitionAnimationPr2[0];
|
|
100
|
+
var _partitionPopperProps = partitionPopperPropsUtils(rest),
|
|
101
|
+
_partitionPopperProps2 = _slicedToArray(_partitionPopperProps, 1),
|
|
102
|
+
popperProps = _partitionPopperProps2[0];
|
|
103
|
+
var _useControlled = useControlled(props.value, props.defaultValue),
|
|
104
|
+
_useControlled2 = _slicedToArray(_useControlled, 2),
|
|
105
|
+
value = _useControlled2[0],
|
|
106
|
+
setValue = _useControlled2[1];
|
|
107
|
+
var disabled = useDisabled(props.disabled);
|
|
108
|
+
var size = useSize(props.size);
|
|
109
|
+
|
|
110
|
+
// 单选框显示文本
|
|
111
|
+
var _useState = useState(null),
|
|
112
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
113
|
+
selected = _useState2[0],
|
|
114
|
+
setSelected = _useState2[1];
|
|
115
|
+
var _useState3 = useState(false),
|
|
116
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
117
|
+
visible = _useState4[0],
|
|
118
|
+
setVisible = _useState4[1];
|
|
119
|
+
var _useState5 = useState({}),
|
|
120
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
121
|
+
popperStyle = _useState6[0],
|
|
122
|
+
setPopperStyle = _useState6[1];
|
|
123
|
+
// 多选时input框高度
|
|
124
|
+
var _useState7 = useState(''),
|
|
125
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
126
|
+
inputValue = _useState8[0],
|
|
127
|
+
setInputValue = _useState8[1];
|
|
128
|
+
var cachedOptions = useRef(new Map());
|
|
129
|
+
|
|
130
|
+
/** 获取所有的option组件 */
|
|
131
|
+
var getOptionInstance = useChildrenInstance('ElOption', 'ElOptionGroup');
|
|
132
|
+
var optionData = useMemo(function () {
|
|
133
|
+
if (props.children) {
|
|
134
|
+
var componentChildren = getOptionInstance(props.children);
|
|
135
|
+
return componentChildren.map(function (node) {
|
|
136
|
+
var _node$props$label, _node$props$label2, _node$props;
|
|
137
|
+
cachedOptions.current.set(node.props.value, {
|
|
138
|
+
value: node.props.value,
|
|
139
|
+
label: (_node$props$label = node.props.label) !== null && _node$props$label !== void 0 ? _node$props$label : node.props.value,
|
|
140
|
+
data: node.props.data
|
|
141
|
+
});
|
|
142
|
+
return {
|
|
143
|
+
label: (_node$props$label2 = (_node$props = node.props) === null || _node$props === void 0 ? void 0 : _node$props.label) !== null && _node$props$label2 !== void 0 ? _node$props$label2 : node.props.value,
|
|
144
|
+
value: node.props.value,
|
|
145
|
+
data: node.props.data
|
|
146
|
+
};
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return [];
|
|
150
|
+
}, [getOptionInstance, props.children]);
|
|
151
|
+
|
|
152
|
+
// 多选框值
|
|
153
|
+
var multiValue = useMemo(function () {
|
|
154
|
+
if (multiple) {
|
|
155
|
+
if (value instanceof Array) {
|
|
156
|
+
return value;
|
|
157
|
+
} else if (typeof value === 'string') {
|
|
158
|
+
return [value];
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return [];
|
|
162
|
+
}, [multiple, value]);
|
|
163
|
+
var multiOptionData = useMemo(function () {
|
|
164
|
+
if (multiple) {
|
|
165
|
+
return multiValue.map(function (item) {
|
|
166
|
+
return [].concat(_toConsumableArray(optionData), _toConsumableArray(Array.from(cachedOptions.current.values()))).find(function (op) {
|
|
167
|
+
return op.value === item;
|
|
168
|
+
});
|
|
169
|
+
}).filter(function (item) {
|
|
170
|
+
return isNotEmpty(item);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
return [];
|
|
174
|
+
}, [multiValue, multiple, optionData]);
|
|
175
|
+
var label = useMemo(function () {
|
|
176
|
+
if (!multiple && selected && !Array.isArray(selected)) {
|
|
177
|
+
var _selected$label;
|
|
178
|
+
return ((_selected$label = selected.label) !== null && _selected$label !== void 0 ? _selected$label : selected.value) + '';
|
|
179
|
+
}
|
|
180
|
+
return '';
|
|
181
|
+
}, [multiple, selected]);
|
|
182
|
+
|
|
183
|
+
// 占位符
|
|
184
|
+
var placeholder = useMemo(function () {
|
|
185
|
+
var _placeholder = '';
|
|
186
|
+
if (multiple && isNotEmpty(multiValue) || isNotEmpty(inputValue)) {
|
|
187
|
+
_placeholder = '';
|
|
188
|
+
}
|
|
189
|
+
if (!allowCreate && filterable && isEmpty(inputValue)) {
|
|
190
|
+
_placeholder = t('el.select.search', {
|
|
191
|
+
lng: locale
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
if (!_placeholder) {
|
|
195
|
+
_placeholder = props.placeholder;
|
|
196
|
+
}
|
|
197
|
+
return multiple || isEmpty(label) ? _placeholder : label;
|
|
198
|
+
}, [allowCreate, filterable, inputValue, label, locale, multiValue, multiple, props.placeholder, t]);
|
|
199
|
+
var shouldShowPlaceholder = useMemo(function () {
|
|
200
|
+
if (multiple && !isUndefined(value)) {
|
|
201
|
+
return ensureArray(value).length === 0 && !inputValue;
|
|
202
|
+
}
|
|
203
|
+
var _value = Array.isArray(value) ? value[0] : value;
|
|
204
|
+
return filterable || isUndefined(_value) ? !inputValue : true;
|
|
205
|
+
}, [inputValue, filterable, multiple, value]);
|
|
206
|
+
var iconComponent = useMemo(function () {
|
|
207
|
+
return remote && filterable && !remoteShowSuffix ? null : suffixIcon;
|
|
208
|
+
}, [filterable, remote, remoteShowSuffix, suffixIcon]);
|
|
209
|
+
var iconReverse = useMemo(function () {
|
|
210
|
+
return is({
|
|
211
|
+
reverse: !!(iconComponent && visible)
|
|
212
|
+
});
|
|
213
|
+
}, [iconComponent, is, visible]);
|
|
214
|
+
|
|
215
|
+
// const validateState = useMemo(() => formItem?.validateState || '');
|
|
216
|
+
// const validateIcon = useMemo(() => validateState.value && (ValidateComponentsMap[validateState.value] as Component));
|
|
217
|
+
|
|
218
|
+
// const multiLabel = useMemo(() => {
|
|
219
|
+
// if (multiple) {
|
|
220
|
+
// return multiValue.map(item => find(optionData, { value: item })?.label ?? item);
|
|
221
|
+
// }
|
|
222
|
+
// return [];
|
|
223
|
+
// }, [multiValue, multiple, optionData]);
|
|
224
|
+
|
|
225
|
+
var showClearBtn = useCallback(function (show) {
|
|
226
|
+
if (show && clearable && !disabled && isNotEmpty(value)) {
|
|
227
|
+
var _suffixWrapperRef$cur, _suffixWrapperRef$cur2;
|
|
228
|
+
(_suffixWrapperRef$cur = suffixWrapperRef.current) === null || _suffixWrapperRef$cur === void 0 || _suffixWrapperRef$cur.classList.add(nsSelect.is('hidden-arrow'));
|
|
229
|
+
(_suffixWrapperRef$cur2 = suffixWrapperRef.current) === null || _suffixWrapperRef$cur2 === void 0 || _suffixWrapperRef$cur2.classList.remove(nsSelect.is('hidden-clear'));
|
|
230
|
+
} else {
|
|
231
|
+
var _suffixWrapperRef$cur3, _suffixWrapperRef$cur4;
|
|
232
|
+
(_suffixWrapperRef$cur3 = suffixWrapperRef.current) === null || _suffixWrapperRef$cur3 === void 0 || _suffixWrapperRef$cur3.classList.remove(nsSelect.is('hidden-arrow'));
|
|
233
|
+
(_suffixWrapperRef$cur4 = suffixWrapperRef.current) === null || _suffixWrapperRef$cur4 === void 0 || _suffixWrapperRef$cur4.classList.add(nsSelect.is('hidden-clear'));
|
|
234
|
+
}
|
|
235
|
+
}, [clearable, disabled, nsSelect, value]);
|
|
236
|
+
var setInputHovering = useCallback(function (hovering) {
|
|
237
|
+
if (!disabled) {
|
|
238
|
+
if (wrapperRef.current) {
|
|
239
|
+
if (hovering) {
|
|
240
|
+
wrapperRef.current.classList.add(nsSelect.is('hovering'));
|
|
241
|
+
showClearBtn(true);
|
|
242
|
+
} else {
|
|
243
|
+
wrapperRef.current.classList.remove(nsSelect.is('hovering'));
|
|
244
|
+
if (wrapperRef.current.classList.contains(nsSelect.is('focused'))) {
|
|
245
|
+
showClearBtn(true);
|
|
246
|
+
} else {
|
|
247
|
+
showClearBtn(false);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}, [disabled, nsSelect, showClearBtn]);
|
|
253
|
+
var setIsFocused = useCallback(function (focused) {
|
|
254
|
+
if (wrapperRef.current) {
|
|
255
|
+
if (focused) {
|
|
256
|
+
wrapperRef.current.classList.add(nsSelect.is('focused'));
|
|
257
|
+
showClearBtn(true);
|
|
258
|
+
} else {
|
|
259
|
+
wrapperRef.current.classList.remove(nsSelect.is('focused'));
|
|
260
|
+
if (wrapperRef.current.classList.contains(nsSelect.is('hovering'))) {
|
|
261
|
+
showClearBtn(true);
|
|
262
|
+
} else {
|
|
263
|
+
showClearBtn(false);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}, [nsSelect, showClearBtn]);
|
|
268
|
+
var _useComposition = useComposition({
|
|
269
|
+
afterComposition: function afterComposition(event) {
|
|
270
|
+
setInputValue(event.target.value);
|
|
271
|
+
}
|
|
272
|
+
}),
|
|
273
|
+
isComposing = _useComposition.isComposing,
|
|
274
|
+
handleCompositionStart = _useComposition.handleCompositionStart,
|
|
275
|
+
handleCompositionUpdate = _useComposition.handleCompositionUpdate,
|
|
276
|
+
handleCompositionEnd = _useComposition.handleCompositionEnd;
|
|
277
|
+
|
|
278
|
+
/** 动态计算下拉框宽度 */
|
|
279
|
+
var handleEnter = useCallback(function (node) {
|
|
280
|
+
if (visible && contentRef.current && containerRef.current) {
|
|
281
|
+
var _selectDropdownRef$cu;
|
|
282
|
+
var rect = containerRef.current.getBoundingClientRect();
|
|
283
|
+
// const { width } = contentRef.current.getBoundingClientRect();
|
|
284
|
+
var options = Array.from(contentRef.current.querySelectorAll(".".concat(be('dropdown', 'item'), ">span")));
|
|
285
|
+
var maxWidth = (options.length > 0 ? max(options.map(function (item) {
|
|
286
|
+
var _item$offsetWidth;
|
|
287
|
+
return (_item$offsetWidth = item === null || item === void 0 ? void 0 : item.offsetWidth) !== null && _item$offsetWidth !== void 0 ? _item$offsetWidth : 0;
|
|
288
|
+
})) : 0) + 60;
|
|
289
|
+
if (maxWidth && maxWidth < rect.width) {
|
|
290
|
+
setPopperStyle(_objectSpread(_objectSpread({}, popperStyle), {}, {
|
|
291
|
+
width: rect.width
|
|
292
|
+
}));
|
|
293
|
+
} else {
|
|
294
|
+
setPopperStyle(_objectSpread(_objectSpread({}, popperStyle), {}, {
|
|
295
|
+
width: min([maxWidth, props.maxWidth])
|
|
296
|
+
}));
|
|
297
|
+
}
|
|
298
|
+
(_selectDropdownRef$cu = selectDropdownRef.current) === null || _selectDropdownRef$cu === void 0 || _selectDropdownRef$cu.scrollToSelected();
|
|
299
|
+
onEnter === null || onEnter === void 0 || onEnter(node);
|
|
300
|
+
}
|
|
301
|
+
}, [be, onEnter, popperStyle, props.maxWidth, visible]);
|
|
302
|
+
|
|
303
|
+
/** 关闭下拉框后清空搜索项 */
|
|
304
|
+
var handleAfterLeave = useCallback(function (node) {
|
|
305
|
+
var _selectDropdownRef$cu2;
|
|
306
|
+
(_selectDropdownRef$cu2 = selectDropdownRef.current) === null || _selectDropdownRef$cu2 === void 0 || _selectDropdownRef$cu2.clear();
|
|
307
|
+
afterLeave === null || afterLeave === void 0 || afterLeave(node);
|
|
308
|
+
}, [afterLeave]);
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* 展开/关闭下拉框
|
|
312
|
+
* @param e
|
|
313
|
+
* @returns
|
|
314
|
+
*/
|
|
315
|
+
var toggleMenu = useCallback(function (event) {
|
|
316
|
+
event.preventDefault();
|
|
317
|
+
event === null || event === void 0 || event.stopPropagation();
|
|
318
|
+
if (disabled) {
|
|
319
|
+
setVisible(false);
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
setVisible(!visible);
|
|
323
|
+
setIsFocused(!visible);
|
|
324
|
+
}, [disabled, setIsFocused, visible]);
|
|
325
|
+
|
|
326
|
+
/** 取消多选项 */
|
|
327
|
+
var onCloseTag = useCallback(function (event, item) {
|
|
328
|
+
event.stopPropagation();
|
|
329
|
+
var res = multiValue.filter(function (val) {
|
|
330
|
+
return val !== item.value;
|
|
331
|
+
});
|
|
332
|
+
setValue(res);
|
|
333
|
+
onChange === null || onChange === void 0 || onChange(res, multiOptionData.filter(function (val) {
|
|
334
|
+
return val.value !== item.value;
|
|
335
|
+
}));
|
|
336
|
+
onRemoveTag === null || onRemoveTag === void 0 || onRemoveTag(item);
|
|
337
|
+
setTimeout(function () {
|
|
338
|
+
if (tagTooltipRef.current) {
|
|
339
|
+
tagTooltipRef.current.updatePopper();
|
|
340
|
+
}
|
|
341
|
+
}, 50);
|
|
342
|
+
}, [multiOptionData, multiValue, onChange, onRemoveTag, setValue]);
|
|
343
|
+
|
|
344
|
+
/** 重置值 */
|
|
345
|
+
var onClear = useCallback(function (event) {
|
|
346
|
+
var _selectDropdownRef$cu3;
|
|
347
|
+
event.stopPropagation();
|
|
348
|
+
event.preventDefault();
|
|
349
|
+
setValue(multiple ? [] : '');
|
|
350
|
+
setSelected(null);
|
|
351
|
+
(_selectDropdownRef$cu3 = selectDropdownRef.current) === null || _selectDropdownRef$cu3 === void 0 || _selectDropdownRef$cu3.hover('');
|
|
352
|
+
onChange === null || onChange === void 0 || onChange(multiple ? [] : '');
|
|
353
|
+
onClearProp === null || onClearProp === void 0 || onClearProp();
|
|
354
|
+
setInputValue('');
|
|
355
|
+
showClearBtn(false);
|
|
356
|
+
setVisible(false);
|
|
357
|
+
}, [multiple, onChange, onClearProp, setValue, showClearBtn]);
|
|
358
|
+
|
|
359
|
+
/** 选中项回调 */
|
|
360
|
+
var onChoose = useCallback(function (val, data, event) {
|
|
361
|
+
event.preventDefault();
|
|
362
|
+
if (isNotEmpty(val)) {
|
|
363
|
+
var result = val;
|
|
364
|
+
var multiData = [];
|
|
365
|
+
if (multiple) {
|
|
366
|
+
if (multiValue.includes(val)) {
|
|
367
|
+
result = filter(multiValue, function (item) {
|
|
368
|
+
return item !== val;
|
|
369
|
+
});
|
|
370
|
+
multiData = multiOptionData.filter(function (item) {
|
|
371
|
+
return item.value !== val;
|
|
372
|
+
});
|
|
373
|
+
} else {
|
|
374
|
+
result = [].concat(_toConsumableArray(multiValue), [val]);
|
|
375
|
+
multiData = [].concat(_toConsumableArray(multiOptionData), [data]);
|
|
376
|
+
}
|
|
377
|
+
setSelected(multiData);
|
|
378
|
+
} else {
|
|
379
|
+
setSelected(data);
|
|
380
|
+
}
|
|
381
|
+
if (allowCreate && isNotEmpty(inputValue)) {
|
|
382
|
+
var _inputRef$current;
|
|
383
|
+
setInputValue('');
|
|
384
|
+
cachedOptions.current.set(inputValue, {
|
|
385
|
+
value: inputValue,
|
|
386
|
+
label: inputValue,
|
|
387
|
+
data: {
|
|
388
|
+
value: inputValue,
|
|
389
|
+
label: inputValue
|
|
390
|
+
}
|
|
391
|
+
});
|
|
392
|
+
setIsFocused(false);
|
|
393
|
+
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.blur();
|
|
394
|
+
}
|
|
395
|
+
setValue(result);
|
|
396
|
+
onChange === null || onChange === void 0 || onChange(result, multiple ? multiData : data);
|
|
397
|
+
!multiple && toggleMenu(event);
|
|
398
|
+
} else {
|
|
399
|
+
setVisible(false);
|
|
400
|
+
}
|
|
401
|
+
if (!multiValue) {
|
|
402
|
+
setInputValue('');
|
|
403
|
+
}
|
|
404
|
+
}, [multiValue, multiple, allowCreate, inputValue, setValue, onChange, toggleMenu, multiOptionData, setIsFocused]);
|
|
405
|
+
|
|
406
|
+
/** 监听加载状态,加载中时自动打开下拉 */
|
|
407
|
+
// useEffect(() => {
|
|
408
|
+
// setVisible(props.loading);
|
|
409
|
+
// popperInstRef.current?.update();
|
|
410
|
+
// }, [props.loading]);
|
|
411
|
+
|
|
412
|
+
// 打开后搜索框自动获取焦点
|
|
413
|
+
useEffect(function () {
|
|
414
|
+
onVisibleChange === null || onVisibleChange === void 0 || onVisibleChange(visible);
|
|
415
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
416
|
+
}, [visible]);
|
|
417
|
+
|
|
418
|
+
/** 搜索时 */
|
|
419
|
+
useEffect(function () {
|
|
420
|
+
if (popperInstRef.current && popperInstRef.current.update) {
|
|
421
|
+
var _popperInstRef$curren;
|
|
422
|
+
(_popperInstRef$curren = popperInstRef.current) === null || _popperInstRef$curren === void 0 || _popperInstRef$curren.update();
|
|
423
|
+
}
|
|
424
|
+
}, [popperStyle]);
|
|
425
|
+
|
|
426
|
+
/** 多选框选择选项后,动态调整input框高度 */
|
|
427
|
+
useEffect(function () {
|
|
428
|
+
setTimeout(function () {
|
|
429
|
+
if (popperInstRef.current && popperInstRef.current.update) {
|
|
430
|
+
var _popperInstRef$curren2;
|
|
431
|
+
(_popperInstRef$curren2 = popperInstRef.current) === null || _popperInstRef$curren2 === void 0 || _popperInstRef$curren2.update();
|
|
432
|
+
}
|
|
433
|
+
}, 50);
|
|
434
|
+
}, [multiValue]);
|
|
435
|
+
|
|
436
|
+
/** 初次加载时反显选中文本 */
|
|
437
|
+
useEffect(function () {
|
|
438
|
+
if (initedRef.current) {
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
441
|
+
if (multiple && Array.isArray(value)) {
|
|
442
|
+
setSelected(multiOptionData.filter(function (item) {
|
|
443
|
+
return value.includes(item.value);
|
|
444
|
+
}));
|
|
445
|
+
initedRef.current = true;
|
|
446
|
+
} else {
|
|
447
|
+
if (isNotEmpty(value)) {
|
|
448
|
+
var data = optionData.find(function (item) {
|
|
449
|
+
return item.value === value;
|
|
450
|
+
});
|
|
451
|
+
setSelected(data);
|
|
452
|
+
initedRef.current = true;
|
|
453
|
+
} else {
|
|
454
|
+
setSelected(null);
|
|
455
|
+
initedRef.current = true;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
}, [value]);
|
|
459
|
+
return _objectSpread(_objectSpread({}, rest), {}, {
|
|
460
|
+
nsSelect: nsSelect,
|
|
461
|
+
containerRef: containerRef,
|
|
462
|
+
contentRef: contentRef,
|
|
463
|
+
wrapperRef: wrapperRef,
|
|
464
|
+
popperInstRef: popperInstRef,
|
|
465
|
+
selectDropdownRef: selectDropdownRef,
|
|
466
|
+
tagTooltipRef: tagTooltipRef,
|
|
467
|
+
inputRef: inputRef,
|
|
468
|
+
suffixWrapperRef: suffixWrapperRef,
|
|
469
|
+
inputValue: inputValue,
|
|
470
|
+
setInputHovering: setInputHovering,
|
|
471
|
+
setInputValue: setInputValue,
|
|
472
|
+
setIsFocused: setIsFocused,
|
|
473
|
+
filterable: filterable,
|
|
474
|
+
clearable: clearable,
|
|
475
|
+
clearIcon: clearIcon,
|
|
476
|
+
multiple: multiple,
|
|
477
|
+
onChange: onChange,
|
|
478
|
+
allowCreate: allowCreate,
|
|
479
|
+
onEnter: onEnter,
|
|
480
|
+
afterLeave: afterLeave,
|
|
481
|
+
onVisibleChange: onVisibleChange,
|
|
482
|
+
onRemoveTag: onRemoveTag,
|
|
483
|
+
htmlInputProps: htmlInputProps,
|
|
484
|
+
transitionProps: transitionProps,
|
|
485
|
+
popperProps: popperProps,
|
|
486
|
+
value: value,
|
|
487
|
+
setValue: setValue,
|
|
488
|
+
disabled: disabled,
|
|
489
|
+
size: size,
|
|
490
|
+
optionData: optionData,
|
|
491
|
+
multiValue: multiValue,
|
|
492
|
+
multiOptionData: multiOptionData,
|
|
493
|
+
selected: selected,
|
|
494
|
+
label: label,
|
|
495
|
+
visible: visible,
|
|
496
|
+
setVisible: setVisible,
|
|
497
|
+
popperStyle: popperStyle,
|
|
498
|
+
placeholder: placeholder,
|
|
499
|
+
shouldShowPlaceholder: shouldShowPlaceholder,
|
|
500
|
+
handleEnter: handleEnter,
|
|
501
|
+
handleAfterLeave: handleAfterLeave,
|
|
502
|
+
toggleMenu: toggleMenu,
|
|
503
|
+
onCloseTag: onCloseTag,
|
|
504
|
+
onClear: onClear,
|
|
505
|
+
onChoose: onChoose,
|
|
506
|
+
labelFormat: labelFormat,
|
|
507
|
+
iconComponent: iconComponent,
|
|
508
|
+
iconReverse: iconReverse,
|
|
509
|
+
isComposing: isComposing,
|
|
510
|
+
remote: remote,
|
|
511
|
+
handleCompositionStart: handleCompositionStart,
|
|
512
|
+
handleCompositionUpdate: handleCompositionUpdate,
|
|
513
|
+
handleCompositionEnd: handleCompositionEnd
|
|
514
|
+
});
|
|
515
|
+
};
|
|
516
|
+
export default useSelect;
|
package/dist/Table/util.js
CHANGED
|
@@ -117,7 +117,7 @@ export function createTablePopper(parentNode, trigger, popperContent, tooltipRef
|
|
|
117
117
|
placement: 'top',
|
|
118
118
|
// @ts-ignore
|
|
119
119
|
ref: tooltipRef,
|
|
120
|
-
hideAfter:
|
|
120
|
+
hideAfter: 200
|
|
121
121
|
});
|
|
122
122
|
root.render(vm);
|
|
123
123
|
} else {
|
|
@@ -151,10 +151,11 @@ export function createTablePopper(parentNode, trigger, popperContent, tooltipRef
|
|
|
151
151
|
// ...popperOptions,
|
|
152
152
|
// });
|
|
153
153
|
// trigger.addEventListener('mouseenter', showPopper);
|
|
154
|
-
trigger.addEventListener('mouseleave',
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
});
|
|
154
|
+
// trigger.addEventListener('mouseleave', () => {
|
|
155
|
+
// setTimeout(() => {
|
|
156
|
+
// tooltipRef.current?.hide();
|
|
157
|
+
// }, 200);
|
|
158
|
+
// });
|
|
158
159
|
scrollContainer === null || scrollContainer === void 0 || scrollContainer.addEventListener('scroll', _removePopper2);
|
|
159
160
|
}
|
|
160
161
|
export var getRowIdentity = function getRowIdentity(row, rowKey) {
|
package/dist/Tag/Tag.js
CHANGED
|
@@ -18,24 +18,27 @@ import { useComposeRef } from 'rc-util/lib/ref';
|
|
|
18
18
|
import React, { forwardRef, memo, useCallback, useRef } from 'react';
|
|
19
19
|
import Icon from "../Icon/Icon";
|
|
20
20
|
import Transition from "../Transition/Transition";
|
|
21
|
-
import {
|
|
21
|
+
import { mergeDefaultProps } from "../Util";
|
|
22
|
+
import { partitionHTMLProps, useClassNames, useSize } from "../hooks";
|
|
22
23
|
var Tag = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(function (props, ref) {
|
|
23
|
-
|
|
24
|
-
type
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
24
|
+
props = mergeDefaultProps({
|
|
25
|
+
type: 'primary',
|
|
26
|
+
effect: 'light'
|
|
27
|
+
}, props);
|
|
28
|
+
var _props = props,
|
|
29
|
+
type = _props.type,
|
|
30
|
+
closable = _props.closable,
|
|
31
|
+
color = _props.color,
|
|
32
|
+
effect = _props.effect,
|
|
33
|
+
round = _props.round,
|
|
34
|
+
hit = _props.hit,
|
|
35
|
+
_props$classPrefix = _props.classPrefix,
|
|
33
36
|
classPrefix = _props$classPrefix === void 0 ? 'tag' : _props$classPrefix,
|
|
34
|
-
className =
|
|
35
|
-
style =
|
|
36
|
-
onClick =
|
|
37
|
-
onClose =
|
|
38
|
-
disableTransitions =
|
|
37
|
+
className = _props.className,
|
|
38
|
+
style = _props.style,
|
|
39
|
+
onClick = _props.onClick,
|
|
40
|
+
onClose = _props.onClose,
|
|
41
|
+
disableTransitions = _props.disableTransitions;
|
|
39
42
|
var _useClassNames = useClassNames(classPrefix),
|
|
40
43
|
b = _useClassNames.b,
|
|
41
44
|
m = _useClassNames.m,
|
|
@@ -46,6 +49,7 @@ var Tag = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(function (props, ref) {
|
|
|
46
49
|
}),
|
|
47
50
|
_partitionHTMLProps2 = _slicedToArray(_partitionHTMLProps, 1),
|
|
48
51
|
tooltipEvents = _partitionHTMLProps2[0];
|
|
52
|
+
var size = useSize(props.size);
|
|
49
53
|
var containerRef = useRef(null);
|
|
50
54
|
var mergedRef = useComposeRef(ref, containerRef);
|
|
51
55
|
var onClickTag = useCallback(function (event) {
|
|
@@ -66,7 +70,8 @@ var Tag = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(function (props, ref) {
|
|
|
66
70
|
duration: 200
|
|
67
71
|
}, /*#__PURE__*/React.createElement("span", _extends({
|
|
68
72
|
ref: mergedRef,
|
|
69
|
-
className: classNames(b(), m(type,
|
|
73
|
+
className: classNames(b(), m(type, effect, _defineProperty({}, size, size)), is({
|
|
74
|
+
closable: closable,
|
|
70
75
|
round: round,
|
|
71
76
|
hit: hit
|
|
72
77
|
}), className),
|
|
@@ -229,14 +229,14 @@ var TimePicker = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
|
229
229
|
setValue('');
|
|
230
230
|
}, 500);
|
|
231
231
|
},
|
|
232
|
-
className: classNames(_defineProperty(_defineProperty({}, "".concat(namespace, "-date"), readonly), 'is-
|
|
232
|
+
className: classNames(_defineProperty(_defineProperty({}, "".concat(namespace, "-date"), readonly), 'is-focus', visible)),
|
|
233
233
|
style: props.style,
|
|
234
234
|
error: error,
|
|
235
235
|
warning: warning,
|
|
236
236
|
append: append,
|
|
237
237
|
prepend: prepend,
|
|
238
238
|
ref: inputRef
|
|
239
|
-
}, omit(htmlInputProps, ['style', 'prefix', 'readOnly', 'size', 'onClick', 'onInput', 'onChange', 'disabled', 'className', 'type', 'maxLength', 'minLength', 'name']))), /*#__PURE__*/React.createElement(Popper, _extends({
|
|
239
|
+
}, omit(htmlInputProps, ['value', 'defaultValue', 'style', 'prefix', 'readOnly', 'size', 'onClick', 'onInput', 'onChange', 'disabled', 'className', 'type', 'maxLength', 'minLength', 'name']))), /*#__PURE__*/React.createElement(Popper, _extends({
|
|
240
240
|
visible: visible,
|
|
241
241
|
referenceElement: function referenceElement() {
|
|
242
242
|
var _inputRef$current;
|
|
@@ -466,7 +466,7 @@ function InternalTreeSelect(props, ref) {
|
|
|
466
466
|
onClear: onClear,
|
|
467
467
|
plain: props.plain,
|
|
468
468
|
className: is({
|
|
469
|
-
|
|
469
|
+
focus: visible
|
|
470
470
|
}),
|
|
471
471
|
error: error,
|
|
472
472
|
warning: warning,
|
|
@@ -480,7 +480,7 @@ function InternalTreeSelect(props, ref) {
|
|
|
480
480
|
onClick: onClick
|
|
481
481
|
}),
|
|
482
482
|
ref: inputInstance
|
|
483
|
-
}, omit(htmlInputProps, ['onInput', 'disabled', 'size', 'prefix', 'onChange', 'style'])))), /*#__PURE__*/React.createElement(Popper, _extends({
|
|
483
|
+
}, omit(htmlInputProps, ['value', 'defaultValue', 'onInput', 'disabled', 'size', 'prefix', 'onChange', 'style'])))), /*#__PURE__*/React.createElement(Popper, _extends({
|
|
484
484
|
referenceElement: append || prepend ? groupRef : containerRef,
|
|
485
485
|
visible: visible,
|
|
486
486
|
popperStyle: popperStyle,
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Determine if the testing element is visible on screen no matter if its on the viewport or not
|
|
3
|
+
*/
|
|
4
|
+
export declare const isVisible: (element: HTMLElement) => boolean;
|
|
5
|
+
export declare const obtainAllFocusableElements: (element: HTMLElement) => HTMLElement[];
|
|
6
|
+
/**
|
|
7
|
+
* @desc Determine if target element is focusable
|
|
8
|
+
* @param element {HTMLElement}
|
|
9
|
+
* @returns {Boolean} true if it is focusable
|
|
10
|
+
*/
|
|
11
|
+
export declare const isFocusable: (element: HTMLElement) => boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Trigger an event
|
|
14
|
+
* mouseenter, mouseleave, mouseover, keyup, change, click, etc.
|
|
15
|
+
* @param {HTMLElement} elm
|
|
16
|
+
* @param {String} name
|
|
17
|
+
* @param {*} opts
|
|
18
|
+
*/
|
|
19
|
+
export declare const triggerEvent: (elm: HTMLElement, name: string, ...opts: Array<boolean>) => HTMLElement;
|
|
20
|
+
export declare const isLeaf: (el: HTMLElement) => boolean;
|
|
21
|
+
export declare const getSibling: (el: HTMLElement, distance: number, elClass: string) => Element;
|
|
22
|
+
export declare const focusElement: (el?: HTMLElement | {
|
|
23
|
+
focus: () => void;
|
|
24
|
+
} | null, options?: FocusOptions) => void;
|
|
25
|
+
export declare const focusNode: (el: HTMLElement) => void;
|