@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,15 @@
1
+ import _ from 'lodash';
2
+ import React from 'react';
3
+ export default function PopupContent(props) {
4
+ var content = props.content,
5
+ notFoundContent = props.notFoundContent,
6
+ dropdownRender = props.dropdownRender,
7
+ menuProps = props.menuProps;
8
+ var popupContent;
9
+ if (_.isNil(menuProps) || _.isEmpty(menuProps.items)) {
10
+ popupContent = notFoundContent;
11
+ } else {
12
+ popupContent = dropdownRender ? dropdownRender(content) : content;
13
+ }
14
+ return /*#__PURE__*/React.createElement(React.Fragment, null, popupContent);
15
+ }
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ declare function SearchBox({ showSearch, value, onChange, onBlur, }: {
3
+ showSearch?: boolean;
4
+ value?: string;
5
+ onChange?: (value: string) => void;
6
+ onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;
7
+ }): React.JSX.Element | null;
8
+ declare const _default: React.MemoExoticComponent<typeof SearchBox>;
9
+ export default _default;
@@ -0,0 +1,26 @@
1
+ import Input from "../../Input";
2
+ import React from 'react';
3
+ import SearchLine from "../../Icon/components/SearchLine";
4
+ function SearchBox(_ref) {
5
+ var _ref$showSearch = _ref.showSearch,
6
+ showSearch = _ref$showSearch === void 0 ? false : _ref$showSearch,
7
+ _ref$value = _ref.value,
8
+ value = _ref$value === void 0 ? '' : _ref$value,
9
+ _onChange = _ref.onChange,
10
+ onBlur = _ref.onBlur;
11
+ if (!showSearch) return null;
12
+ return /*#__PURE__*/React.createElement(Input, {
13
+ className: "beta-ald-select-search-box",
14
+ value: value,
15
+ size: "small",
16
+ bordered: false,
17
+ onBlur: onBlur,
18
+ prefix: /*#__PURE__*/React.createElement(SearchLine, {
19
+ size: 16
20
+ }),
21
+ onChange: function onChange(e) {
22
+ _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.value);
23
+ }
24
+ });
25
+ }
26
+ export default /*#__PURE__*/React.memo(SearchBox);
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { DisplayValueType } from '../interface';
3
+ export default function Suffix({ showArrow, allowClear, isActive, isHover, icon, onClear, displayValues, }: {
4
+ showArrow?: boolean;
5
+ allowClear?: boolean;
6
+ isActive?: boolean;
7
+ isHover?: boolean;
8
+ icon: React.ReactNode;
9
+ onClear?: () => void;
10
+ displayValues: DisplayValueType[];
11
+ }): React.JSX.Element | null;
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+ import prefixCls from "../../_utils/prefixCls";
3
+ import { ArrowDownRightFill, CloseCircleRightFill } from "../../Icon";
4
+ export default function Suffix(_ref) {
5
+ var showArrow = _ref.showArrow,
6
+ allowClear = _ref.allowClear,
7
+ isActive = _ref.isActive,
8
+ isHover = _ref.isHover,
9
+ icon = _ref.icon,
10
+ onClear = _ref.onClear,
11
+ displayValues = _ref.displayValues;
12
+ var classNames = prefixCls('select');
13
+ if ((isActive || isHover) && allowClear && displayValues.length > 0) {
14
+ return /*#__PURE__*/React.createElement("div", {
15
+ className: classNames('suffix', 'clear'),
16
+ onClick: function onClick(event) {
17
+ event.stopPropagation();
18
+ event.preventDefault();
19
+ onClear === null || onClear === void 0 ? void 0 : onClear();
20
+ }
21
+ }, /*#__PURE__*/React.createElement(CloseCircleRightFill, {
22
+ size: 16,
23
+ color: "#6B7280"
24
+ }));
25
+ }
26
+ if (showArrow) {
27
+ var dropdownIcon = icon || /*#__PURE__*/React.createElement(ArrowDownRightFill, {
28
+ color: "#6B7280",
29
+ size: 16
30
+ });
31
+ return /*#__PURE__*/React.createElement("div", {
32
+ className: classNames('suffix', 'arrow')
33
+ }, dropdownIcon);
34
+ }
35
+ return null;
36
+ }
@@ -0,0 +1,6 @@
1
+ import { DefaultOptionType, LabelInValueType, RawValueType } from '../interface';
2
+ /**
3
+ * Cache `value` related LabeledValue & options.
4
+ */
5
+ declare const _default: (labeledValues: LabelInValueType[], valueOptions: Map<RawValueType, DefaultOptionType>) => [LabelInValueType[], (val: RawValueType) => DefaultOptionType];
6
+ export default _default;
@@ -0,0 +1,50 @@
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 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
+ import * as React from 'react';
8
+ /**
9
+ * Cache `value` related LabeledValue & options.
10
+ */
11
+ export default (function (labeledValues, valueOptions) {
12
+ var cacheRef = React.useRef({
13
+ values: new Map(),
14
+ options: new Map()
15
+ });
16
+ var filledLabeledValues = React.useMemo(function () {
17
+ var _cacheRef$current = cacheRef.current,
18
+ prevValueCache = _cacheRef$current.values,
19
+ prevOptionCache = _cacheRef$current.options;
20
+
21
+ // Fill label by cache
22
+ var patchedValues = labeledValues.map(function (item) {
23
+ if (item.label === undefined) {
24
+ var _prevValueCache$get;
25
+ return _objectSpread(_objectSpread({}, item), {}, {
26
+ label: (_prevValueCache$get = prevValueCache.get(item.value)) === null || _prevValueCache$get === void 0 ? void 0 : _prevValueCache$get.label
27
+ });
28
+ }
29
+ return item;
30
+ });
31
+
32
+ // Refresh cache
33
+ var valueCache = new Map();
34
+ var optionCache = new Map();
35
+ patchedValues.forEach(function (item) {
36
+ valueCache.set(item.value, item);
37
+ var option = valueOptions.get(item.value) || prevOptionCache.get(item.value);
38
+ if (option) {
39
+ optionCache.set(item.value, option);
40
+ }
41
+ });
42
+ cacheRef.current.values = valueCache;
43
+ cacheRef.current.options = optionCache;
44
+ return patchedValues;
45
+ }, [labeledValues, valueOptions]);
46
+ var getOption = React.useCallback(function (val) {
47
+ return valueOptions.get(val) || cacheRef.current.options.get(val);
48
+ }, [valueOptions]);
49
+ return [filledLabeledValues, getOption];
50
+ });
@@ -0,0 +1,3 @@
1
+ import { MenuProps } from '../../Menu';
2
+ import { DefaultOptionType } from '../interface';
3
+ export default function useDisplayMenu(menu: MenuProps, filterOptions?: (inputValue: string, option: DefaultOptionType) => boolean, innerSearchValue?: string): MenuProps;
@@ -0,0 +1,60 @@
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 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 _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
8
+ 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."); }
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 _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 _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; }
13
+ import { useCallback, useMemo } from 'react';
14
+ import { isDivideMenuItem, isHeaderMenuItem, isSubMenuItem } from "../../Menu";
15
+ export default function useDisplayMenu(menu, filterOptions, innerSearchValue) {
16
+ var items = menu.items;
17
+ var filter = useCallback(function (inputValue, option) {
18
+ if (filterOptions) {
19
+ return filterOptions(inputValue, option);
20
+ }
21
+ var toBeSearched = option.label || option.value || '';
22
+ return toBeSearched.toString().includes(inputValue);
23
+ }, [filterOptions]);
24
+ var findFilteredItems = useCallback(function (currentItems) {
25
+ return currentItems.filter(function (item) {
26
+ if (isSubMenuItem(item)) {
27
+ return findFilteredItems(item.children);
28
+ } else if (isHeaderMenuItem(item)) {
29
+ return true;
30
+ } else if (isDivideMenuItem(item)) {
31
+ return true;
32
+ }
33
+ return filter === null || filter === void 0 ? void 0 : filter(innerSearchValue || '', {
34
+ label: item.label,
35
+ value: item.key
36
+ });
37
+ }).reduceRight(function (prev, current) {
38
+ var prevItem = prev[0];
39
+ if (isHeaderMenuItem(current) || isDivideMenuItem(current)) {
40
+ if (!prevItem || isHeaderMenuItem(prevItem) || isDivideMenuItem(prevItem)) {
41
+ return prev;
42
+ }
43
+ } else if (isSubMenuItem(current)) {
44
+ if (current.children.length === 0) {
45
+ return prev;
46
+ }
47
+ }
48
+ return [current].concat(_toConsumableArray(prev));
49
+ }, []);
50
+ }, [innerSearchValue, filter]);
51
+ var filteredItems = useMemo(function () {
52
+ return findFilteredItems(items);
53
+ }, [findFilteredItems, items]);
54
+ if (!innerSearchValue) {
55
+ return menu;
56
+ }
57
+ return _objectSpread(_objectSpread({}, menu), {}, {
58
+ items: filteredItems
59
+ });
60
+ }
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * Wrap `React.useLayoutEffect` which will not throw warning message in test env
4
+ */
5
+ export default function useLayoutEffect(effect: React.EffectCallback, deps?: React.DependencyList): void;
@@ -0,0 +1,17 @@
1
+ /* eslint-disable react-hooks/rules-of-hooks */
2
+ import * as React from 'react';
3
+ import { isBrowserClient } from "../utils/commonUtil";
4
+
5
+ /**
6
+ * Wrap `React.useLayoutEffect` which will not throw warning message in test env
7
+ */
8
+ export default function useLayoutEffect(effect, deps) {
9
+ // Never happen in test env
10
+ if (isBrowserClient) {
11
+ /* istanbul ignore next */
12
+ React.useLayoutEffect(effect, deps);
13
+ } else {
14
+ React.useEffect(effect, deps);
15
+ }
16
+ }
17
+ /* eslint-enable */
@@ -0,0 +1,11 @@
1
+ import type { DefaultOptionType, DraftValueType, RawValueType } from '../interface';
2
+ import { ItemType, MenuProps, SubMenuType } from '../../Menu';
3
+ export declare function isRawValue(value: DraftValueType): value is RawValueType;
4
+ /**
5
+ * Parse `children` to `options` if `options` is not provided.
6
+ * Then flatten the `options`.
7
+ */
8
+ export default function useOptions<OptionType extends DefaultOptionType>(menu?: MenuProps, options?: OptionType[], value?: DraftValueType): {
9
+ menu: MenuProps;
10
+ keyMenuItems: Map<string, ItemType | SubMenuType>;
11
+ };
@@ -0,0 +1,63 @@
1
+ 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; }
2
+ 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; }
3
+ 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; }
4
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
5
+ 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); }
6
+ 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); }
7
+ import * as React from 'react';
8
+ import { isDivideMenuItem, isHeaderMenuItem, isSubMenuItem } from "../../Menu";
9
+ import { convertOptionsToMenu, toArray } from "../utils/commonUtil";
10
+ export function isRawValue(value) {
11
+ return !value || _typeof(value) !== 'object';
12
+ }
13
+ /**
14
+ * Parse `children` to `options` if `options` is not provided.
15
+ * Then flatten the `options`.
16
+ */
17
+ export default function useOptions(menu, options, value) {
18
+ return React.useMemo(function () {
19
+ var selectedKeys = [];
20
+ if (value) {
21
+ var valueList = toArray(value);
22
+ valueList.forEach(function (val) {
23
+ if (isRawValue(val)) {
24
+ selectedKeys.push(val.toString());
25
+ } else {
26
+ var key = val.value;
27
+ if (key) {
28
+ selectedKeys.push(key.toString());
29
+ }
30
+ }
31
+ });
32
+ }
33
+ var mergedMenu = menu ? _objectSpread(_objectSpread({}, menu), {}, {
34
+ items: (menu === null || menu === void 0 ? void 0 : menu.items) || [],
35
+ selectedKeys: selectedKeys
36
+ }) : convertOptionsToMenu(options || [], selectedKeys);
37
+ var keyMenuItems = new Map();
38
+ // const labelMenuItems = new Map<React.ReactNode, MenuItemType>();
39
+
40
+ function dig(menuItems) {
41
+ // for loop to speed up collection speed
42
+ for (var i = 0; i < menuItems.length; i += 1) {
43
+ var menuItem = menuItems[i];
44
+ if (isDivideMenuItem(menuItem) || isHeaderMenuItem(menuItem)) {
45
+ continue;
46
+ }
47
+ if (isSubMenuItem(menuItem)) {
48
+ dig(menuItem.children);
49
+ continue;
50
+ } else {
51
+ keyMenuItems.set(menuItem.key, menuItem);
52
+ // labelMenuItems.set(menuItem.label, menuItem);
53
+ }
54
+ }
55
+ }
56
+
57
+ dig(mergedMenu.items || []);
58
+ return {
59
+ menu: mergedMenu,
60
+ keyMenuItems: keyMenuItems
61
+ };
62
+ }, [options, menu, value]);
63
+ }
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { BaseSelectRef, DefaultOptionType, ISelectProps } from './interface';
3
+ declare const _default: React.ForwardRefExoticComponent<ISelectProps<any, DefaultOptionType> & React.RefAttributes<BaseSelectRef>>;
4
+ export default _default;
@@ -0,0 +1,224 @@
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 _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 _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
4
+ 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."); }
5
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
6
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
7
+ 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; }
8
+ 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; }
9
+ 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; }
10
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
11
+ 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); }
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(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; } }
17
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
18
+ import React, { forwardRef, useCallback, useMemo } from 'react';
19
+ import useOptions, { isRawValue } from "./hooks/useOptions";
20
+ import useMergedState from 'rc-util/lib/hooks/useMergedState';
21
+ import { toArray } from "./utils/commonUtil";
22
+ import useCache from "./hooks/useCache";
23
+ import BaseSelect, { isMultiple } from "./BaseSelect";
24
+ import { injectPropsWithOption } from "./utils/valueUtil";
25
+ import useDisplayMenu from "./hooks/useDisplayMenu";
26
+ export default /*#__PURE__*/forwardRef(function AldSelect(props, ref) {
27
+ var value = props.value,
28
+ defaultValue = props.defaultValue,
29
+ mode = props.mode,
30
+ menu = props.menu,
31
+ options = props.options,
32
+ onChange = props.onChange,
33
+ onSelect = props.onSelect,
34
+ onDeselect = props.onDeselect,
35
+ labelInValue = props.labelInValue,
36
+ filterOption = props.filterOption,
37
+ searchValue = props.searchValue;
38
+
39
+ // =========================== Values ===========================
40
+ var _useMergedState = useMergedState(defaultValue, {
41
+ value: value
42
+ }),
43
+ _useMergedState2 = _slicedToArray(_useMergedState, 2),
44
+ internalValue = _useMergedState2[0],
45
+ setInternalValue = _useMergedState2[1];
46
+ var parsedOptions = useOptions(menu, options, internalValue);
47
+ var mergedMenu = parsedOptions.menu,
48
+ keyMenuItems = parsedOptions.keyMenuItems;
49
+ var multiple = mode && isMultiple(mode);
50
+ // ============================== SearchValue ==============================
51
+ var _useMergedState3 = useMergedState(undefined, {
52
+ value: searchValue
53
+ }),
54
+ _useMergedState4 = _slicedToArray(_useMergedState3, 2),
55
+ innerSearchValue = _useMergedState4[0],
56
+ setInnerSearchValue = _useMergedState4[1];
57
+ // ========================= Wrap Value =========================
58
+ var convert2LabelValues = React.useCallback(function (draftValues) {
59
+ // Convert to array
60
+ var valueList = toArray(draftValues);
61
+
62
+ // Convert to labelInValue type
63
+ return valueList.map(function (val) {
64
+ var rawValue;
65
+ var rawLabel;
66
+ var rawDisabled;
67
+ if (isRawValue(val)) {
68
+ rawValue = val;
69
+ } else {
70
+ rawLabel = val.label;
71
+ rawValue = val.value;
72
+ }
73
+ var menuItem = keyMenuItems.get(rawValue.toString());
74
+ if (menuItem) {
75
+ // Fill missing props
76
+ if (rawLabel === undefined) {
77
+ rawLabel = menuItem.label;
78
+ }
79
+ rawDisabled = menuItem.disabled;
80
+ }
81
+ return {
82
+ label: rawLabel,
83
+ value: rawValue,
84
+ disabled: rawDisabled
85
+ };
86
+ });
87
+ }, [keyMenuItems]);
88
+
89
+ // Merged value with LabelValueType
90
+ var rawLabeledValues = React.useMemo(function () {
91
+ var values = convert2LabelValues(internalValue);
92
+ return values;
93
+ }, [internalValue, convert2LabelValues]);
94
+
95
+ // Fill label with cache to avoid option remove
96
+ var _useCache = useCache(rawLabeledValues, keyMenuItems),
97
+ _useCache2 = _slicedToArray(_useCache, 2),
98
+ mergedValues = _useCache2[0],
99
+ getMixedOption = _useCache2[1];
100
+ var displayValues = React.useMemo(function () {
101
+ // `null` need show as placeholder instead
102
+ if (!mode && mergedValues.length === 1) {
103
+ var firstValue = mergedValues[0];
104
+ if (firstValue.value === null && (firstValue.label === null || firstValue.label === undefined)) {
105
+ return [];
106
+ }
107
+ }
108
+ return mergedValues.map(function (item) {
109
+ var _item$label;
110
+ return _objectSpread(_objectSpread({}, item), {}, {
111
+ label: (_item$label = item.label) !== null && _item$label !== void 0 ? _item$label : item.value
112
+ });
113
+ });
114
+ }, [mode, mergedValues]);
115
+
116
+ // =========================== Change ===========================
117
+ var triggerChange = useCallback(function (values) {
118
+ var labeledValues = convert2LabelValues(values);
119
+ setInternalValue(labeledValues);
120
+ if (onChange && (
121
+ // Trigger event only when value changed
122
+ labeledValues.length !== mergedValues.length || labeledValues.some(function (newVal, index) {
123
+ var _mergedValues$index;
124
+ return ((_mergedValues$index = mergedValues[index]) === null || _mergedValues$index === void 0 ? void 0 : _mergedValues$index.value) !== (newVal === null || newVal === void 0 ? void 0 : newVal.value);
125
+ }))) {
126
+ var returnValues = labelInValue ? labeledValues : labeledValues.map(function (v) {
127
+ return v.value;
128
+ });
129
+ var returnOptions = labeledValues.map(function (v) {
130
+ return injectPropsWithOption(getMixedOption(v.value));
131
+ });
132
+ onChange(
133
+ // Value
134
+ multiple ? returnValues : returnValues[0],
135
+ // Option
136
+ multiple ? returnOptions : returnOptions[0]);
137
+ }
138
+ }, [convert2LabelValues, setInternalValue, onChange, mergedValues, labelInValue, multiple, getMixedOption]);
139
+ // ========================= OptionList =========================
140
+ var triggerSelect = function triggerSelect(val, selected, type) {
141
+ var getSelectEnt = function getSelectEnt() {
142
+ var option = getMixedOption(val);
143
+ return [labelInValue ? {
144
+ label: option.label,
145
+ value: val
146
+ } : val, injectPropsWithOption(option)];
147
+ };
148
+ if (selected && onSelect) {
149
+ var _getSelectEnt = getSelectEnt(),
150
+ _getSelectEnt2 = _slicedToArray(_getSelectEnt, 2),
151
+ wrappedValue = _getSelectEnt2[0],
152
+ option = _getSelectEnt2[1];
153
+ onSelect(wrappedValue, option);
154
+ } else if (!selected && onDeselect && type !== 'clear') {
155
+ var _getSelectEnt3 = getSelectEnt(),
156
+ _getSelectEnt4 = _slicedToArray(_getSelectEnt3, 2),
157
+ _wrappedValue = _getSelectEnt4[0],
158
+ _option = _getSelectEnt4[1];
159
+ onDeselect(_wrappedValue, _option);
160
+ }
161
+ };
162
+ // Used for OptionList selection
163
+ var onOptionSelect = function onOptionSelect(val) {
164
+ var selected = displayValues.find(function (item) {
165
+ return item.value.toString() === val;
166
+ });
167
+ if (isMultiple(mode)) {
168
+ if (!selected) {
169
+ triggerSelect(val, true, 'add');
170
+ } else {
171
+ triggerSelect(val, false, 'remove');
172
+ }
173
+ } else {
174
+ triggerSelect(val, true, 'add');
175
+ }
176
+ };
177
+ // ======================= Display Change =======================
178
+ // BaseSelect display values change
179
+ var onDisplayValuesChange = function onDisplayValuesChange(nextValues, info) {
180
+ triggerChange(nextValues);
181
+ var type = info.type,
182
+ values = info.values;
183
+ if (type === 'remove' || type === 'clear') {
184
+ values.forEach(function (item) {
185
+ triggerSelect(item.value, false, type);
186
+ });
187
+ }
188
+ };
189
+ var selectMenu = useMemo(function () {
190
+ return _objectSpread(_objectSpread({}, mergedMenu), {}, {
191
+ items: (mergedMenu === null || mergedMenu === void 0 ? void 0 : mergedMenu.items) || [],
192
+ onClick: function onClick(menuInfo) {
193
+ var _mergedMenu$onClick;
194
+ if (mode && isMultiple(mode)) {
195
+ if (displayValues.find(function (item) {
196
+ return item.value.toString() === menuInfo.key;
197
+ })) {
198
+ triggerChange(displayValues.filter(function (item) {
199
+ return item.value.toString() !== menuInfo.key;
200
+ }).map(function (item) {
201
+ return item.value;
202
+ }));
203
+ } else {
204
+ triggerChange([].concat(_toConsumableArray(displayValues), [menuInfo.key]));
205
+ }
206
+ } else {
207
+ triggerChange(menuInfo.key);
208
+ }
209
+ mergedMenu === null || mergedMenu === void 0 ? void 0 : (_mergedMenu$onClick = mergedMenu.onClick) === null || _mergedMenu$onClick === void 0 ? void 0 : _mergedMenu$onClick.call(mergedMenu, menuInfo);
210
+ }
211
+ });
212
+ }, [mergedMenu, mode, displayValues, triggerChange]);
213
+ var displayMenu = useDisplayMenu(selectMenu, filterOption, innerSearchValue);
214
+ return /*#__PURE__*/React.createElement(BaseSelect, _extends({}, props, {
215
+ ref: ref,
216
+ displayValues: displayValues,
217
+ onDisplayValuesChange: onDisplayValuesChange,
218
+ setInnerSearchValue: setInnerSearchValue,
219
+ innerSearchValue: innerSearchValue,
220
+ onOptionSelect: onOptionSelect,
221
+ menu: selectMenu,
222
+ displayMenu: displayMenu
223
+ }));
224
+ });
@@ -0,0 +1,91 @@
1
+ /// <reference types="react" />
2
+ import { PlacementType } from '../Dropdown';
3
+ import { MenuProps } from '../Menu';
4
+ import { CustomTagProps, Mode } from './BaseSelect';
5
+ type ArrayElementType<T> = T extends (infer E)[] ? E : T;
6
+ export interface ISelectProps<ValueType = any, OptionType extends BaseOptionType = DefaultOptionType> {
7
+ prefix?: React.ReactNode;
8
+ size?: 'small' | 'middle' | 'large';
9
+ mode?: Mode;
10
+ status?: 'success' | 'error';
11
+ suffixIcon?: React.ReactNode;
12
+ className?: string;
13
+ id?: string;
14
+ disabled?: boolean;
15
+ showSearch?: boolean;
16
+ searchValue?: string;
17
+ allowClear?: boolean;
18
+ showArrow?: boolean;
19
+ borderLess?: boolean;
20
+ width?: 'auto' | 'fill' | number;
21
+ dropdownClassName?: string;
22
+ popupClassName?: string;
23
+ placement?: PlacementType;
24
+ labelInValue?: boolean;
25
+ options?: OptionType[];
26
+ menu?: MenuProps;
27
+ value?: ValueType | null;
28
+ defaultValue?: ValueType | null;
29
+ onChange?: (value: ValueType, option: OptionType | OptionType[]) => void;
30
+ placeholder?: string;
31
+ onClear?: () => void;
32
+ dropdownRender?: (menu: React.ReactNode) => React.ReactNode;
33
+ dropdownStyle?: React.CSSProperties;
34
+ overlayStyle?: React.CSSProperties;
35
+ style?: React.CSSProperties;
36
+ open?: boolean;
37
+ onOpenChange?: (open: boolean) => void;
38
+ getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;
39
+ onInputKeyDown?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
40
+ popupMatchSelectWidth?: boolean;
41
+ onSelect?: SelectHandler<ArrayElementType<ValueType>, OptionType>;
42
+ onDeselect?: SelectHandler<ArrayElementType<ValueType>, OptionType>;
43
+ notFoundContent?: React.ReactNode;
44
+ filterOption?: (inputValue: string, option: OptionType) => boolean;
45
+ tagRender?: (props: CustomTagProps, isPreview?: boolean) => React.ReactNode;
46
+ maxTagPlaceholder?: React.ReactNode | ((omittedValues: DisplayValueType[]) => React.ReactNode);
47
+ onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;
48
+ }
49
+ export interface BaseOptionType {
50
+ disabled?: boolean;
51
+ [name: string]: any;
52
+ }
53
+ export type SelectHandler<ValueType = any, OptionType extends BaseOptionType = DefaultOptionType> = ((value: RawValueType | LabelInValueType, option: OptionType) => void) | ((value: ValueType, option: OptionType) => void);
54
+ export interface BaseSelectRef {
55
+ focus: () => void;
56
+ blur: () => void;
57
+ open: () => void;
58
+ close: () => void;
59
+ }
60
+ export interface DisplayValueType {
61
+ key?: React.Key;
62
+ value?: RawValueType;
63
+ label?: React.ReactNode;
64
+ title?: React.ReactNode;
65
+ disabled?: boolean;
66
+ }
67
+ export type ScrollAlign = 'top' | 'bottom' | 'auto';
68
+ export type ScrollConfig = {
69
+ index: number;
70
+ align?: ScrollAlign;
71
+ offset?: number;
72
+ } | {
73
+ key: React.Key;
74
+ align?: ScrollAlign;
75
+ offset?: number;
76
+ };
77
+ export type RawValueType = string | number;
78
+ export interface LabelInValueType {
79
+ label: React.ReactNode;
80
+ value: RawValueType;
81
+ disabled?: boolean;
82
+ }
83
+ export type DraftValueType = RawValueType | LabelInValueType | DisplayValueType | (RawValueType | LabelInValueType | DisplayValueType)[];
84
+ export type RenderDOMFunc = (triggerNode: HTMLElement) => HTMLElement;
85
+ export type DisplayInfoType = 'add' | 'remove' | 'clear';
86
+ export interface DefaultOptionType extends BaseOptionType {
87
+ label?: React.ReactNode;
88
+ value?: string | number | null;
89
+ children?: Omit<DefaultOptionType, 'children'>[];
90
+ }
91
+ export {};
@@ -0,0 +1 @@
1
+ export {};