@aloudata/aloudata-design 2.13.17 → 2.14.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 (67) hide show
  1. package/dist/AldSelect/BaseSelect.d.ts +70 -0
  2. package/dist/AldSelect/BaseSelect.js +236 -0
  3. package/dist/AldSelect/SelectTrigger.d.ts +23 -0
  4. package/dist/AldSelect/SelectTrigger.js +73 -0
  5. package/dist/AldSelect/Selector/MultipleResponsiveSelectedSection.d.ts +7 -0
  6. package/dist/AldSelect/Selector/MultipleResponsiveSelectedSection.js +32 -0
  7. package/dist/AldSelect/Selector/MultipleSelector.d.ts +12 -0
  8. package/dist/AldSelect/Selector/MultipleSelector.js +148 -0
  9. package/dist/AldSelect/Selector/index.d.ts +9 -0
  10. package/dist/AldSelect/Selector/index.js +25 -0
  11. package/dist/AldSelect/components/PopupContent.d.ts +8 -0
  12. package/dist/AldSelect/components/PopupContent.js +15 -0
  13. package/dist/AldSelect/components/SearchBox.d.ts +9 -0
  14. package/dist/AldSelect/components/SearchBox.js +26 -0
  15. package/dist/AldSelect/components/Suffix.d.ts +11 -0
  16. package/dist/AldSelect/components/Suffix.js +36 -0
  17. package/dist/AldSelect/hooks/useCache.d.ts +6 -0
  18. package/dist/AldSelect/hooks/useCache.js +50 -0
  19. package/dist/AldSelect/hooks/useDisplayMenu.d.ts +3 -0
  20. package/dist/AldSelect/hooks/useDisplayMenu.js +60 -0
  21. package/dist/AldSelect/hooks/useLayoutEffect.d.ts +5 -0
  22. package/dist/AldSelect/hooks/useLayoutEffect.js +17 -0
  23. package/dist/AldSelect/hooks/useOptions.d.ts +11 -0
  24. package/dist/AldSelect/hooks/useOptions.js +63 -0
  25. package/dist/AldSelect/index.d.ts +4 -0
  26. package/dist/AldSelect/index.js +224 -0
  27. package/dist/AldSelect/interface.d.ts +91 -0
  28. package/dist/AldSelect/interface.js +1 -0
  29. package/dist/AldSelect/style/color.less +54 -0
  30. package/dist/AldSelect/style/index.d.ts +1 -0
  31. package/dist/AldSelect/style/index.js +1 -0
  32. package/dist/AldSelect/style/index.less +138 -0
  33. package/dist/AldSelect/style/size.less +63 -0
  34. package/dist/AldSelect/utils/commonUtil.d.ts +8 -0
  35. package/dist/AldSelect/utils/commonUtil.js +22 -0
  36. package/dist/AldSelect/utils/getWidthStyle.d.ts +2 -0
  37. package/dist/AldSelect/utils/getWidthStyle.js +18 -0
  38. package/dist/AldSelect/utils/keyUtil.d.ts +2 -0
  39. package/dist/AldSelect/utils/keyUtil.js +10 -0
  40. package/dist/AldSelect/utils/valueUtil.d.ts +22 -0
  41. package/dist/AldSelect/utils/valueUtil.js +131 -0
  42. package/dist/Dropdown/index.d.ts +5 -0
  43. package/dist/Dropdown/index.js +25 -6
  44. package/dist/Form/index.d.ts +1 -1
  45. package/dist/Form/index.js +1 -0
  46. package/dist/Icon/components/ArrowDownRightFill.d.ts +10 -0
  47. package/dist/Icon/components/ArrowDownRightFill.js +35 -0
  48. package/dist/Icon/components/CloseCircleRightFill.d.ts +10 -0
  49. package/dist/Icon/components/CloseCircleRightFill.js +35 -0
  50. package/dist/Icon/index.d.ts +2 -0
  51. package/dist/Icon/index.js +3 -1
  52. package/dist/Icon/svg/arrow-down-right-fill.svg +5 -0
  53. package/dist/Icon/svg/close-circle-right-fill.svg +5 -0
  54. package/dist/Input/components/Password/index.js +1 -0
  55. package/dist/Menu/index.d.ts +4 -0
  56. package/dist/Menu/index.js +5 -4
  57. package/dist/ScrollArea/index.d.ts +1 -0
  58. package/dist/ScrollArea/index.js +9 -1
  59. package/dist/Table/helper.d.ts +1 -1
  60. package/dist/_utils/prefixCls.d.ts +4 -0
  61. package/dist/_utils/prefixCls.js +16 -0
  62. package/dist/ald.min.css +1 -1
  63. package/dist/index.d.ts +1 -0
  64. package/dist/index.js +2 -1
  65. package/dist/index.less +1 -0
  66. package/dist/locale/default.d.ts +1 -1
  67. package/package.json +1 -1
@@ -0,0 +1,70 @@
1
+ import * as React from 'react';
2
+ import type { AlignType } from 'rc-trigger/lib/interface';
3
+ import { PlacementType } from '../Dropdown';
4
+ import { BaseSelectRef, ISelectProps, LabelInValueType } from './interface';
5
+ import { MenuProps } from '../Menu';
6
+ export type RenderNode = React.ReactNode | ((props: any) => React.ReactNode);
7
+ export type RenderDOMFunc = (props: any) => HTMLElement;
8
+ export type Mode = 'multiple' | {
9
+ type: 'multiple';
10
+ responsive?: boolean;
11
+ maxRows?: number;
12
+ };
13
+ export type RawValueType = string | number;
14
+ export type CustomTagProps = {
15
+ label: React.ReactNode;
16
+ value: any;
17
+ disabled: boolean;
18
+ onClose: (event?: React.MouseEvent<HTMLElement, MouseEvent>) => void;
19
+ closable: boolean;
20
+ };
21
+ export interface BaseSelectPrivateProps {
22
+ omitDomProps?: string[];
23
+ displayValues: LabelInValueType[];
24
+ onDisplayValuesChange: (values: LabelInValueType[], info: {
25
+ type: 'add' | 'remove' | 'clear';
26
+ values: LabelInValueType[];
27
+ }) => void;
28
+ /** Current dropdown list active item string value */
29
+ activeValue?: string;
30
+ /** Link search input with target element */
31
+ activeDescendantId?: string;
32
+ onActiveValueChange?: (value: string | null) => void;
33
+ }
34
+ export type BaseSelectPropsWithoutPrivate = Omit<BaseSelectProps, keyof BaseSelectPrivateProps>;
35
+ export interface BaseSelectProps extends BaseSelectPrivateProps, ISelectProps, React.AriaAttributes {
36
+ className?: string;
37
+ style?: React.CSSProperties;
38
+ notFoundContent?: React.ReactNode;
39
+ placeholder?: string;
40
+ onClear?: () => void;
41
+ innerSearchValue?: string;
42
+ setInnerSearchValue?: (value: string) => void;
43
+ displayMenu?: MenuProps;
44
+ status?: 'success' | 'error';
45
+ open?: boolean;
46
+ defaultOpen?: boolean;
47
+ onOpenChange?: (open: boolean) => void;
48
+ onOptionSelect?: (val: RawValueType) => void;
49
+ allowClear?: boolean;
50
+ showArrow?: boolean;
51
+ suffixIcon?: React.ReactNode;
52
+ dropdownRender?: (menu: React.ReactNode) => React.ReactNode;
53
+ dropdownAlign?: AlignType;
54
+ placement?: PlacementType;
55
+ getPopupContainer?: RenderDOMFunc;
56
+ onBlur?: React.FocusEventHandler<HTMLElement>;
57
+ onFocus?: React.FocusEventHandler<HTMLElement>;
58
+ onKeyUp?: React.KeyboardEventHandler<HTMLDivElement>;
59
+ onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;
60
+ onMouseDown?: React.MouseEventHandler<HTMLDivElement>;
61
+ onPopupScroll?: React.UIEventHandler<HTMLDivElement>;
62
+ onInputKeyDown?: React.KeyboardEventHandler<HTMLInputElement | HTMLTextAreaElement>;
63
+ onMouseEnter?: React.MouseEventHandler<HTMLDivElement>;
64
+ onMouseLeave?: React.MouseEventHandler<HTMLDivElement>;
65
+ onClick?: React.MouseEventHandler<HTMLDivElement>;
66
+ }
67
+ export declare function isMultiple(mode?: Mode): boolean;
68
+ export declare function isResponsive(mode?: Mode): boolean | undefined;
69
+ declare const BaseSelect: React.ForwardRefExoticComponent<BaseSelectProps & React.RefAttributes<BaseSelectRef>>;
70
+ export default BaseSelect;
@@ -0,0 +1,236 @@
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
+ 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; }
5
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
6
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
7
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
+ 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."); }
9
+ 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); }
10
+ 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; }
11
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
12
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
13
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
14
+ import * as React from 'react';
15
+ import useMergedState from 'rc-util/lib/hooks/useMergedState';
16
+ import classNames from 'classnames';
17
+ import prefixCls from "../_utils/prefixCls";
18
+ import SelectTrigger from "./SelectTrigger";
19
+ import Selector from "./Selector";
20
+ import _ from 'lodash';
21
+ import { useContext, useRef, useState } from 'react';
22
+ import { FormItemInputContext } from 'antd/lib/form/context';
23
+ import getWidthStyle from "./utils/getWidthStyle";
24
+ import Suffix from "./components/Suffix";
25
+ import SizeContext from "../ConfigProvider/sizeContext";
26
+ import { ConfigContext } from "../ConfigProvider";
27
+ import { useCompactItemContext } from 'antd/lib/space/Compact';
28
+ export function isMultiple(mode) {
29
+ return !!mode;
30
+ }
31
+ export function isResponsive(mode) {
32
+ return _typeof(mode) === 'object' && (mode === null || mode === void 0 ? void 0 : mode.responsive);
33
+ }
34
+ var BaseSelect = /*#__PURE__*/React.forwardRef(function (props, ref) {
35
+ var _setClassNames;
36
+ var id = props.id,
37
+ className = props.className,
38
+ displayValues = props.displayValues,
39
+ onDisplayValuesChange = props.onDisplayValuesChange,
40
+ displayMenu = props.displayMenu,
41
+ notFoundContent = props.notFoundContent,
42
+ _onClear = props.onClear,
43
+ width = props.width,
44
+ mode = props.mode,
45
+ customStatus = props.status,
46
+ onOptionSelect = props.onOptionSelect,
47
+ onClick = props.onClick,
48
+ customSize = props.size,
49
+ _props$borderLess = props.borderLess,
50
+ borderLess = _props$borderLess === void 0 ? false : _props$borderLess,
51
+ disabled = props.disabled,
52
+ placeholder = props.placeholder,
53
+ open = props.open,
54
+ defaultOpen = props.defaultOpen,
55
+ onOpenChange = props.onOpenChange,
56
+ showSearch = props.showSearch,
57
+ innerSearchValue = props.innerSearchValue,
58
+ setInnerSearchValue = props.setInnerSearchValue,
59
+ allowClear = props.allowClear,
60
+ _props$showArrow = props.showArrow,
61
+ showArrow = _props$showArrow === void 0 ? true : _props$showArrow,
62
+ prefix = props.prefix,
63
+ suffixIcon = props.suffixIcon,
64
+ dropdownRender = props.dropdownRender,
65
+ overlayStyle = props.overlayStyle,
66
+ dropdownStyle = props.dropdownStyle,
67
+ _props$popupMatchSele = props.popupMatchSelectWidth,
68
+ popupMatchSelectWidth = _props$popupMatchSele === void 0 ? true : _props$popupMatchSele,
69
+ placement = props.placement,
70
+ popupClassName = props.popupClassName;
71
+ var setClassNames = prefixCls('select');
72
+ var selectRef = useRef(null);
73
+ var widthStyle = getWidthStyle(width);
74
+ var isResponsiveMode = isResponsive(mode);
75
+ var isMultipleMode = isMultiple(mode);
76
+ /** Used for component focused management */
77
+ var contentSize = useContext(SizeContext);
78
+ var _React$useContext = React.useContext(ConfigContext),
79
+ direction = _React$useContext.direction;
80
+ // ===================== Compact Item =====================
81
+ var _useCompactItemContex = useCompactItemContext('ald-select', direction),
82
+ compactSize = _useCompactItemContex.compactSize,
83
+ compactItemClassnames = _useCompactItemContex.compactItemClassnames;
84
+ var size = compactSize || customSize || contentSize || 'middle';
85
+ var _useContext = useContext(FormItemInputContext),
86
+ contextStatus = _useContext.status;
87
+ var mergedStatus = customStatus || contextStatus || undefined;
88
+ // =========================== Imperative ===========================
89
+ React.useImperativeHandle(ref, function () {
90
+ return {
91
+ focus: function focus() {
92
+ return setFocus(true);
93
+ },
94
+ blur: function blur() {
95
+ return setFocus(false);
96
+ },
97
+ open: function open() {
98
+ return onToggleOpen(true);
99
+ },
100
+ close: function close() {
101
+ onToggleOpen(false);
102
+ }
103
+ };
104
+ });
105
+ var _useState = useState(false),
106
+ _useState2 = _slicedToArray(_useState, 2),
107
+ focus = _useState2[0],
108
+ setFocus = _useState2[1];
109
+ var _useState3 = useState(false),
110
+ _useState4 = _slicedToArray(_useState3, 2),
111
+ isHover = _useState4[0],
112
+ setIsHover = _useState4[1];
113
+ // ============================== Open ==============================
114
+ var _useMergedState = useMergedState(false, {
115
+ defaultValue: defaultOpen,
116
+ value: open
117
+ }),
118
+ _useMergedState2 = _slicedToArray(_useMergedState, 2),
119
+ innerOpen = _useMergedState2[0],
120
+ setInnerOpen = _useMergedState2[1];
121
+ var mergedOpen = innerOpen;
122
+ var onToggleOpen = React.useCallback(function (newOpen) {
123
+ var nextOpen = newOpen !== undefined ? newOpen : !mergedOpen;
124
+ if (!nextOpen) {
125
+ setShowResponsiveSelectedSection(false);
126
+ setInnerSearchValue === null || setInnerSearchValue === void 0 ? void 0 : setInnerSearchValue('');
127
+ }
128
+ if (mergedOpen !== nextOpen && !disabled) {
129
+ setInnerOpen(nextOpen);
130
+ onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(nextOpen);
131
+ }
132
+ }, [mergedOpen, disabled, setInnerSearchValue, setInnerOpen, onOpenChange]);
133
+ var _useState5 = useState(false),
134
+ _useState6 = _slicedToArray(_useState5, 2),
135
+ showResponsiveSelectedSection = _useState6[0],
136
+ setShowResponsiveSelectedSection = _useState6[1];
137
+
138
+ // ============================ Selector ============================
139
+ var onSelectorRemove = function onSelectorRemove(val) {
140
+ var newValues = displayValues.filter(function (i) {
141
+ return i !== val;
142
+ });
143
+ onDisplayValuesChange(newValues, {
144
+ type: 'remove',
145
+ values: [{
146
+ label: val.label,
147
+ value: val.value
148
+ }]
149
+ });
150
+ };
151
+ var mergedClassName = classNames(setClassNames('beta-ald-select', size, (_setClassNames = {
152
+ active: mergedOpen || focus,
153
+ borderless: borderLess,
154
+ disabled: disabled
155
+ }, _defineProperty(_setClassNames, "".concat(mergedStatus), !!mergedStatus), _defineProperty(_setClassNames, 'multiple-responsive', isResponsiveMode), _defineProperty(_setClassNames, 'multiple-default', isMultipleMode && !isResponsiveMode), _setClassNames)), className, compactItemClassnames);
156
+ var showMenu = React.useMemo(function () {
157
+ if (!displayMenu) {
158
+ return undefined;
159
+ }
160
+ return _objectSpread(_objectSpread({}, displayMenu), {}, {
161
+ onClick: function onClick(info) {
162
+ var _displayMenu$onClick;
163
+ displayMenu === null || displayMenu === void 0 ? void 0 : (_displayMenu$onClick = displayMenu.onClick) === null || _displayMenu$onClick === void 0 ? void 0 : _displayMenu$onClick.call(displayMenu, info);
164
+ if (displayMenu && !isMultipleMode) {
165
+ onToggleOpen(false);
166
+ }
167
+ setIsHover(false);
168
+ onOptionSelect === null || onOptionSelect === void 0 ? void 0 : onOptionSelect(info.key);
169
+ }
170
+ });
171
+ }, [displayMenu, isMultipleMode, onToggleOpen, onOptionSelect]);
172
+ return /*#__PURE__*/React.createElement("div", {
173
+ className: mergedClassName,
174
+ style: widthStyle,
175
+ ref: selectRef,
176
+ id: id,
177
+ onClick: onClick,
178
+ onMouseEnter: function onMouseEnter() {
179
+ setIsHover(true);
180
+ },
181
+ onMouseLeave: function onMouseLeave() {
182
+ setIsHover(false);
183
+ }
184
+ }, /*#__PURE__*/React.createElement(SelectTrigger, {
185
+ open: !!mergedOpen,
186
+ notFoundContent: notFoundContent,
187
+ menu: showMenu,
188
+ showSearch: showSearch,
189
+ searchValue: innerSearchValue,
190
+ setInnerSearchValue: setInnerSearchValue,
191
+ popupMatchSelectWidth: popupMatchSelectWidth,
192
+ overlayClassName: popupClassName,
193
+ dropdownRender: dropdownRender,
194
+ overlayStyle: overlayStyle || dropdownStyle,
195
+ placement: placement,
196
+ onOpenChange: function onOpenChange(open) {
197
+ if (isResponsiveMode) {
198
+ if (!mergedOpen && !showResponsiveSelectedSection && displayValues.length > 0) {
199
+ setShowResponsiveSelectedSection(true);
200
+ } else {
201
+ onToggleOpen(open);
202
+ }
203
+ } else {
204
+ onToggleOpen(open);
205
+ }
206
+ }
207
+ }, /*#__PURE__*/React.createElement("div", {
208
+ className: setClassNames('trigger')
209
+ }, prefix && /*#__PURE__*/React.createElement("div", {
210
+ className: setClassNames('prefix')
211
+ }, prefix), _.isEmpty(displayValues) && /*#__PURE__*/React.createElement("div", {
212
+ className: setClassNames('placeholder')
213
+ }, placeholder), !_.isEmpty(displayValues) && /*#__PURE__*/React.createElement(Selector, _extends({}, props, {
214
+ size: size,
215
+ displayValues: displayValues,
216
+ onToggleOpen: onToggleOpen,
217
+ onRemove: onSelectorRemove,
218
+ showResponsiveSelectedSection: showResponsiveSelectedSection
219
+ })))), /*#__PURE__*/React.createElement(Suffix, {
220
+ showArrow: showArrow,
221
+ allowClear: allowClear,
222
+ isHover: isHover,
223
+ onClear: function onClear() {
224
+ onToggleOpen(false);
225
+ onDisplayValuesChange([], {
226
+ type: 'clear',
227
+ values: displayValues
228
+ });
229
+ _onClear === null || _onClear === void 0 ? void 0 : _onClear();
230
+ },
231
+ isActive: innerOpen,
232
+ icon: suffixIcon,
233
+ displayValues: displayValues
234
+ }));
235
+ });
236
+ export default BaseSelect;
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import type { ScrollTo } from 'rc-virtual-list/lib/List';
3
+ import { DropdownProps } from '..';
4
+ import { SelectOptionType } from '../Select';
5
+ export interface RefTriggerProps {
6
+ getPopupElement: () => HTMLDivElement | null;
7
+ }
8
+ export interface RefSelectorProps {
9
+ focus: (options?: FocusOptions) => void;
10
+ blur: () => void;
11
+ scrollTo?: ScrollTo;
12
+ }
13
+ export interface SelectTriggerProps extends DropdownProps {
14
+ open: boolean;
15
+ notFoundContent?: React.ReactNode;
16
+ popupMatchSelectWidth?: boolean;
17
+ showSearch?: boolean;
18
+ searchValue?: string;
19
+ setInnerSearchValue?: (value: string) => void;
20
+ filterOption?: (inputValue: string, option: SelectOptionType) => boolean;
21
+ }
22
+ declare const RefSelectTrigger: React.ForwardRefExoticComponent<SelectTriggerProps & React.RefAttributes<RefTriggerProps>>;
23
+ export default RefSelectTrigger;
@@ -0,0 +1,73 @@
1
+ var _excluded = ["overlayStyle", "disabled", "open", "children", "dropdownRender", "getPopupContainer", "onOpenChange", "showSearch", "searchValue", "setInnerSearchValue", "menu", "overlayClassName", "popupMatchSelectWidth", "notFoundContent"];
2
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
3
+ 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; }
4
+ 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; }
5
+ import React, { useCallback } from 'react';
6
+ import Dropdown from "../Dropdown";
7
+ import classnames from 'classnames';
8
+ import { Empty } from '..';
9
+ import SearchBox from "./components/SearchBox";
10
+ import PopupContent from "./components/PopupContent";
11
+ var RefSelectTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
12
+ var overlayStyle = props.overlayStyle,
13
+ disabled = props.disabled,
14
+ open = props.open,
15
+ children = props.children,
16
+ dropdownRender = props.dropdownRender,
17
+ getPopupContainer = props.getPopupContainer,
18
+ _onOpenChange = props.onOpenChange,
19
+ showSearch = props.showSearch,
20
+ searchValue = props.searchValue,
21
+ setInnerSearchValue = props.setInnerSearchValue,
22
+ menuProps = props.menu,
23
+ overlayClassName = props.overlayClassName,
24
+ popupMatchSelectWidth = props.popupMatchSelectWidth,
25
+ _props$notFoundConten = props.notFoundContent,
26
+ notFoundContent = _props$notFoundConten === void 0 ? /*#__PURE__*/React.createElement(Empty, {
27
+ size: "small"
28
+ }) : _props$notFoundConten,
29
+ restProps = _objectWithoutProperties(props, _excluded);
30
+
31
+ // ======================= Ref =======================
32
+ var popupRef = React.useRef(null);
33
+ React.useImperativeHandle(ref, function () {
34
+ return {
35
+ getPopupElement: function getPopupElement() {
36
+ return popupRef.current;
37
+ }
38
+ };
39
+ });
40
+ var customDropdownRender = useCallback(function (menu) {
41
+ return /*#__PURE__*/React.createElement("div", {
42
+ className: "beta-ald-select-popup",
43
+ ref: popupRef
44
+ }, /*#__PURE__*/React.createElement(SearchBox, {
45
+ showSearch: showSearch,
46
+ value: searchValue,
47
+ onChange: function onChange(value) {
48
+ setInnerSearchValue === null || setInnerSearchValue === void 0 ? void 0 : setInnerSearchValue(value);
49
+ }
50
+ }), /*#__PURE__*/React.createElement(PopupContent, {
51
+ content: menu,
52
+ notFoundContent: notFoundContent,
53
+ dropdownRender: dropdownRender,
54
+ menuProps: menuProps
55
+ }));
56
+ }, [dropdownRender, menuProps, notFoundContent, searchValue, setInnerSearchValue, showSearch]);
57
+ return /*#__PURE__*/React.createElement(Dropdown, _extends({}, restProps, {
58
+ disabled: disabled,
59
+ open: open,
60
+ menu: menuProps,
61
+ popupMatchTriggerWidth: popupMatchSelectWidth,
62
+ overlayStyle: overlayStyle,
63
+ overlayClassName: classnames('beta-ald-select-popup-container', overlayClassName),
64
+ autoUpdatePos: true,
65
+ dropdownRender: customDropdownRender,
66
+ getPopupContainer: getPopupContainer,
67
+ onOpenChange: function onOpenChange(o) {
68
+ _onOpenChange === null || _onOpenChange === void 0 ? void 0 : _onOpenChange(o);
69
+ }
70
+ }), children);
71
+ });
72
+ RefSelectTrigger.displayName = 'SelectTrigger';
73
+ export default RefSelectTrigger;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { DisplayValueType } from '../interface';
3
+ export default function MultipleResponsiveSelectedSection(params: {
4
+ displayValues: DisplayValueType[];
5
+ renderItem: (valueItem: DisplayValueType) => React.JSX.Element | null;
6
+ onToggleOpen: (open: boolean) => void;
7
+ }): React.JSX.Element;
@@ -0,0 +1,32 @@
1
+ import React, { useEffect, useRef } from 'react';
2
+ export default function MultipleResponsiveSelectedSection(params) {
3
+ var displayValues = params.displayValues,
4
+ renderItem = params.renderItem,
5
+ onToggleOpen = params.onToggleOpen;
6
+ var multipleSelectedSectionRef = useRef(null);
7
+ useEffect(function () {
8
+ function getSelect() {
9
+ var _multipleSelectedSect, _multipleSelectedSect2, _multipleSelectedSect3;
10
+ var select = (_multipleSelectedSect = multipleSelectedSectionRef.current) === null || _multipleSelectedSect === void 0 ? void 0 : (_multipleSelectedSect2 = _multipleSelectedSect.parentElement) === null || _multipleSelectedSect2 === void 0 ? void 0 : (_multipleSelectedSect3 = _multipleSelectedSect2.parentElement) === null || _multipleSelectedSect3 === void 0 ? void 0 : _multipleSelectedSect3.parentElement;
11
+ if (select && select.classList.contains('beta-ald-select')) {
12
+ return select;
13
+ }
14
+ return null;
15
+ }
16
+ function close(e) {
17
+ var target = e.target;
18
+ var select = getSelect();
19
+ if (select && target.contains(select)) {
20
+ onToggleOpen(false);
21
+ }
22
+ }
23
+ document.addEventListener('click', close);
24
+ return function () {
25
+ document.removeEventListener('click', close);
26
+ };
27
+ }, [onToggleOpen]);
28
+ return /*#__PURE__*/React.createElement("div", {
29
+ ref: multipleSelectedSectionRef,
30
+ className: "beta-ald-select-selector-multiple-responsive-selected-section"
31
+ }, displayValues.map(renderItem));
32
+ }
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { SelectorProps } from './index';
3
+ import { DisplayValueType } from '../interface';
4
+ import { CustomTagProps } from '../BaseSelect';
5
+ interface MultipleSelectorProps extends SelectorProps {
6
+ onRemove: (value: DisplayValueType) => void;
7
+ onToggleOpen: (open?: boolean) => void;
8
+ tagRender?: (props: CustomTagProps, isPreview?: boolean) => React.ReactNode;
9
+ maxTagPlaceholder?: React.ReactNode | ((omittedValues: DisplayValueType[]) => React.ReactNode);
10
+ }
11
+ export default function MultipleSelector(props: MultipleSelectorProps): React.JSX.Element;
12
+ export {};
@@ -0,0 +1,148 @@
1
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
3
+ 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."); }
4
+ 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); }
5
+ 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; }
6
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
7
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
8
+ import React, { useMemo, useState } from 'react';
9
+ import Tag from "../../Tag";
10
+ import { isMultiple, isResponsive } from "../BaseSelect";
11
+ import ScrollArea from "../../ScrollArea";
12
+ import _ from 'lodash';
13
+ import Overflow from 'rc-overflow';
14
+ import MultipleResponsiveSelectedSection from "./MultipleResponsiveSelectedSection";
15
+ var overflowPrefixCls = 'beta-ald-select-selector-overflow';
16
+ var tagHeight = 20;
17
+ var gap = 4;
18
+ var onPreventMouseDown = function onPreventMouseDown(event) {
19
+ event.preventDefault();
20
+ event.stopPropagation();
21
+ };
22
+ function itemKey(value) {
23
+ var _value$key;
24
+ return ((_value$key = value.key) !== null && _value$key !== void 0 ? _value$key : value.value) || '';
25
+ }
26
+ export default function MultipleSelector(props) {
27
+ var displayValues = props.displayValues,
28
+ tagRender = props.tagRender,
29
+ onRemove = props.onRemove,
30
+ onToggleOpen = props.onToggleOpen,
31
+ mode = props.mode,
32
+ disabled = props.disabled,
33
+ _props$maxTagPlacehol = props.maxTagPlaceholder,
34
+ maxTagPlaceholder = _props$maxTagPlacehol === void 0 ? function (omittedValues) {
35
+ return "+ ".concat(omittedValues.length === displayValues.length ? omittedValues.length - 1 : omittedValues.length, " ...");
36
+ } : _props$maxTagPlacehol,
37
+ showResponsiveSelectedSection = props.showResponsiveSelectedSection;
38
+ var _useState = useState(0),
39
+ _useState2 = _slicedToArray(_useState, 2),
40
+ showItemIndex = _useState2[0],
41
+ setShowItemIndex = _useState2[1];
42
+ var customizeRenderSelector = function customizeRenderSelector(value, content, itemDisabled, closable, onClose, isPreview) {
43
+ var onMouseDown = function onMouseDown(e) {
44
+ onPreventMouseDown(e);
45
+ onToggleOpen(!open);
46
+ };
47
+ return /*#__PURE__*/React.createElement("span", {
48
+ onMouseDown: onMouseDown,
49
+ key: value
50
+ }, tagRender === null || tagRender === void 0 ? void 0 : tagRender({
51
+ label: content,
52
+ value: value,
53
+ disabled: itemDisabled,
54
+ closable: isPreview ? false : closable !== null && closable !== void 0 ? closable : false,
55
+ onClose: onClose !== null && onClose !== void 0 ? onClose : function () {}
56
+ }, isPreview));
57
+ };
58
+ var defaultRenderSelector = function defaultRenderSelector(item, content, itemDisabled, closable, _onClose, isPreview) {
59
+ return /*#__PURE__*/React.createElement(Tag, {
60
+ disabled: itemDisabled,
61
+ key: item === null || item === void 0 ? void 0 : item.value,
62
+ size: "small",
63
+ closable: isPreview ? false : closable,
64
+ onClose: function onClose(e) {
65
+ onPreventMouseDown(e);
66
+ _onClose === null || _onClose === void 0 ? void 0 : _onClose(e);
67
+ }
68
+ }, content);
69
+ };
70
+ var isResponsiveMode = isResponsive(mode);
71
+ var renderItem = function renderItem(valueItem) {
72
+ var itemDisabled = valueItem.disabled,
73
+ label = valueItem.label,
74
+ value = valueItem.value;
75
+ var closable = !disabled && !itemDisabled;
76
+ var isPreview = !showResponsiveSelectedSection;
77
+ if (!isResponsiveMode) {
78
+ isPreview = false;
79
+ }
80
+ var displayLabel = label;
81
+ var onClose = function onClose(event) {
82
+ if (event) {
83
+ event.stopPropagation();
84
+ }
85
+ onRemove(valueItem);
86
+ };
87
+ if (_.isNil(value)) {
88
+ return null;
89
+ }
90
+ return typeof tagRender === 'function' ? customizeRenderSelector(value, displayLabel, !!itemDisabled, closable, onClose, isPreview) : defaultRenderSelector(valueItem, displayLabel, !!itemDisabled, closable, onClose, isPreview);
91
+ };
92
+ var renderRest = function renderRest(omittedValues) {
93
+ if (displayValues.length === 1) {
94
+ return null;
95
+ }
96
+ var content = typeof maxTagPlaceholder === 'function' ? maxTagPlaceholder(omittedValues.length === displayValues.length ? omittedValues.slice(1, omittedValues.length) : omittedValues) : maxTagPlaceholder;
97
+ return typeof tagRender === 'function' ? customizeRenderSelector(undefined, content, false, false, undefined) : defaultRenderSelector({
98
+ title: content
99
+ }, content, false);
100
+ };
101
+ var onVisibleChange = function onVisibleChange(visibleCount) {
102
+ setShowItemIndex(visibleCount);
103
+ };
104
+ var maxHeight = useMemo(function () {
105
+ if (isMultiple(mode)) {
106
+ if (_typeof(mode) === 'object') {
107
+ var maxRows = mode.maxRows;
108
+ if (!maxRows) {
109
+ // 2.5行高+2行间距
110
+ return 2.5 * tagHeight + 2 * gap;
111
+ } else {
112
+ // 总行高+总行间距
113
+ return maxRows * tagHeight + (maxRows - 1) * gap;
114
+ }
115
+ }
116
+ }
117
+ return undefined;
118
+ }, [mode]);
119
+ if (isResponsiveMode) {
120
+ return /*#__PURE__*/React.createElement("div", {
121
+ className: "beta-ald-select-selector beta-ald-select-selector-multiple-responsive"
122
+ }, showItemIndex === -1 && displayValues.length > 0 && /*#__PURE__*/React.createElement("div", {
123
+ className: "beta-ald-select-selector-overflow-item-first"
124
+ }, renderItem(displayValues[0])), /*#__PURE__*/React.createElement(Overflow, {
125
+ prefixCls: overflowPrefixCls,
126
+ data: displayValues,
127
+ renderItem: renderItem,
128
+ renderRest: renderRest,
129
+ suffix: null,
130
+ itemKey: itemKey,
131
+ maxCount: "responsive",
132
+ onVisibleChange: onVisibleChange
133
+ }), showResponsiveSelectedSection && /*#__PURE__*/React.createElement(MultipleResponsiveSelectedSection, {
134
+ displayValues: displayValues,
135
+ renderItem: renderItem,
136
+ onToggleOpen: onToggleOpen
137
+ }));
138
+ }
139
+ return /*#__PURE__*/React.createElement(ScrollArea, {
140
+ innerClassName: "beta-ald-select-selector-multiple-default-inner",
141
+ className: "beta-ald-select-selector beta-ald-select-selector-multiple-default",
142
+ innerStyle: {
143
+ maxHeight: maxHeight
144
+ }
145
+ }, /*#__PURE__*/React.createElement("div", {
146
+ className: "beta-ald-select-selector-multiple-default-tags"
147
+ }, displayValues.map(renderItem)));
148
+ }
@@ -0,0 +1,9 @@
1
+ import { DisplayValueType, ISelectProps, LabelInValueType } from '../interface';
2
+ import React from 'react';
3
+ export interface SelectorProps extends ISelectProps {
4
+ displayValues: LabelInValueType[];
5
+ onRemove: (value: DisplayValueType) => void;
6
+ onToggleOpen: (open?: boolean) => void;
7
+ showResponsiveSelectedSection: boolean;
8
+ }
9
+ export default function Selector(props: SelectorProps): React.JSX.Element;
@@ -0,0 +1,25 @@
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+ import prefixCls from "../../_utils/prefixCls";
3
+ import React from 'react';
4
+ import MultipleSelector from "./MultipleSelector";
5
+ import { isMultiple } from "../BaseSelect";
6
+ export default function Selector(props) {
7
+ var classNames = prefixCls('select-selector');
8
+ var mode = props.mode,
9
+ displayValues = props.displayValues,
10
+ onRemove = props.onRemove,
11
+ onToggleOpen = props.onToggleOpen,
12
+ showResponsiveSelectedSection = props.showResponsiveSelectedSection;
13
+ if (isMultiple(mode)) {
14
+ return /*#__PURE__*/React.createElement(MultipleSelector, _extends({}, props, {
15
+ onRemove: onRemove,
16
+ onToggleOpen: onToggleOpen,
17
+ showResponsiveSelectedSection: showResponsiveSelectedSection
18
+ }));
19
+ }
20
+ return /*#__PURE__*/React.createElement("div", {
21
+ className: classNames('beta-ald-select-selector')
22
+ }, displayValues.map(function (item) {
23
+ return item.label;
24
+ }));
25
+ }
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { MenuProps } from '../../Menu';
3
+ export default function PopupContent(props: {
4
+ content: React.ReactNode;
5
+ notFoundContent: React.ReactNode;
6
+ dropdownRender?: (menu: React.ReactNode) => React.ReactNode;
7
+ menuProps?: MenuProps;
8
+ }): React.JSX.Element;