rsuite 5.0.0-beta.5 → 5.0.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 (194) hide show
  1. package/Animation/styles/index.less +16 -16
  2. package/Animation/styles/mixin.less +2 -2
  3. package/Button/styles/index.less +36 -1
  4. package/Button/styles/mixin.less +7 -1
  5. package/CHANGELOG.md +47 -4
  6. package/Calendar/styles/index.less +7 -1
  7. package/Checkbox/styles/index.less +18 -2
  8. package/DatePicker/styles/index.less +6 -2
  9. package/Drawer/styles/index.less +11 -2
  10. package/Drawer/styles/mixin.less +2 -2
  11. package/Dropdown/styles/index.less +4 -0
  12. package/Form/styles/mixin.less +6 -0
  13. package/InputGroup/styles/index.less +4 -0
  14. package/Message/styles/index.less +16 -0
  15. package/Modal/styles/index.less +3 -2
  16. package/Nav/styles/index.less +18 -2
  17. package/Navbar/styles/index.less +68 -34
  18. package/Notification/styles/index.less +9 -3
  19. package/Pagination/styles/index.less +12 -1
  20. package/Pagination/styles/mixin.less +7 -0
  21. package/Picker/styles/index.less +25 -3
  22. package/Picker/styles/mixin.less +7 -2
  23. package/Popover/styles/index.less +23 -30
  24. package/Popover/styles/mixins.less +72 -0
  25. package/README.md +4 -4
  26. package/Radio/styles/index.less +16 -0
  27. package/RadioGroup/styles/index.less +4 -0
  28. package/Rate/styles/index.less +13 -2
  29. package/Ripple/styles/index.less +8 -4
  30. package/Sidenav/styles/index.less +160 -47
  31. package/Table/styles/index.less +8 -0
  32. package/TagInput/package.json +7 -0
  33. package/TagInput/styles/index.less +13 -0
  34. package/Toggle/styles/index.less +29 -19
  35. package/Tooltip/styles/index.less +32 -38
  36. package/Tooltip/styles/mixins.less +72 -0
  37. package/Uploader/styles/index.less +11 -1
  38. package/cjs/@types/common.d.ts +2 -0
  39. package/cjs/Animation/Bounce.js +10 -4
  40. package/cjs/Animation/Collapse.d.ts +1 -48
  41. package/cjs/Animation/Collapse.js +60 -106
  42. package/cjs/Animation/Fade.js +10 -5
  43. package/cjs/Animation/Slide.js +8 -4
  44. package/cjs/Carousel/Carousel.d.ts +7 -0
  45. package/cjs/Carousel/Carousel.js +24 -11
  46. package/cjs/CheckTree/index.js +14 -5
  47. package/cjs/CheckTreePicker/CheckTreePicker.js +9 -5
  48. package/cjs/DatePicker/DatePicker.d.ts +5 -1
  49. package/cjs/DatePicker/DatePicker.js +2 -13
  50. package/cjs/DateRangePicker/Calendar.d.ts +2 -1
  51. package/cjs/DateRangePicker/Calendar.js +4 -3
  52. package/cjs/DateRangePicker/DateRangePicker.d.ts +1 -1
  53. package/cjs/DateRangePicker/DateRangePicker.js +58 -43
  54. package/cjs/DateRangePicker/utils.d.ts +1 -1
  55. package/cjs/DateRangePicker/utils.js +9 -5
  56. package/cjs/Dropdown/Dropdown.js +31 -18
  57. package/cjs/Dropdown/DropdownContext.d.ts +4 -1
  58. package/cjs/Dropdown/DropdownItem.js +31 -4
  59. package/cjs/Dropdown/DropdownState.d.ts +37 -0
  60. package/cjs/Dropdown/DropdownState.js +66 -0
  61. package/cjs/Dropdown/DropdownToggle.js +3 -6
  62. package/cjs/InputNumber/InputNumber.js +11 -10
  63. package/cjs/InputPicker/InputPicker.d.ts +16 -3
  64. package/cjs/InputPicker/InputPicker.js +85 -44
  65. package/cjs/List/ListItem.d.ts +1 -1
  66. package/cjs/Menu/MenuItem.js +1 -1
  67. package/cjs/MultiCascader/MultiCascader.js +4 -3
  68. package/cjs/Nav/NavItem.js +11 -63
  69. package/cjs/Navbar/NavbarItem.d.ts +19 -0
  70. package/cjs/Navbar/NavbarItem.js +93 -0
  71. package/cjs/Pagination/Pagination.js +1 -1
  72. package/cjs/Picker/PickerToggle.js +2 -2
  73. package/cjs/Picker/utils.d.ts +1 -1
  74. package/cjs/Picker/utils.js +26 -22
  75. package/cjs/Progress/ProgressCircle.js +15 -15
  76. package/cjs/SelectPicker/SelectPicker.d.ts +1 -3
  77. package/cjs/Sidenav/SidenavDropdown.js +6 -1
  78. package/cjs/Sidenav/SidenavItem.js +46 -12
  79. package/cjs/Slider/Slider.js +2 -1
  80. package/cjs/TagInput/index.d.ts +13 -0
  81. package/cjs/TagInput/index.js +58 -0
  82. package/cjs/TagPicker/index.d.ts +10 -2
  83. package/cjs/TagPicker/index.js +25 -6
  84. package/cjs/Tree/Tree.d.ts +0 -2
  85. package/cjs/Tree/Tree.js +13 -4
  86. package/cjs/Tree/TreeContext.d.ts +7 -0
  87. package/cjs/Tree/TreeContext.js +13 -0
  88. package/cjs/TreePicker/TreeNode.js +10 -3
  89. package/cjs/TreePicker/TreePicker.js +22 -10
  90. package/cjs/Uploader/UploadFileItem.d.ts +5 -0
  91. package/cjs/Uploader/UploadFileItem.js +4 -3
  92. package/cjs/Uploader/Uploader.d.ts +8 -3
  93. package/cjs/Uploader/Uploader.js +12 -6
  94. package/cjs/index.d.ts +2 -0
  95. package/cjs/index.js +5 -1
  96. package/cjs/utils/ajaxUpload.d.ts +5 -1
  97. package/cjs/utils/ajaxUpload.js +24 -13
  98. package/cjs/utils/constants.d.ts +1 -0
  99. package/cjs/utils/constants.js +1 -0
  100. package/cjs/utils/dateUtils.d.ts +1 -0
  101. package/cjs/utils/dateUtils.js +5 -1
  102. package/cjs/utils/useInternalId.d.ts +4 -0
  103. package/cjs/utils/useInternalId.js +24 -0
  104. package/cjs/utils/useUniqueId.d.ts +1 -1
  105. package/cjs/utils/useUniqueId.js +1 -1
  106. package/dist/rsuite-rtl.css +1614 -221
  107. package/dist/rsuite-rtl.min.css +1 -1
  108. package/dist/rsuite-rtl.min.css.map +1 -1
  109. package/dist/rsuite.css +1618 -221
  110. package/dist/rsuite.js +288 -288
  111. package/dist/rsuite.min.css +1 -1
  112. package/dist/rsuite.min.css.map +1 -1
  113. package/dist/rsuite.min.js +1 -1
  114. package/dist/rsuite.min.js.map +1 -1
  115. package/esm/@types/common.d.ts +2 -0
  116. package/esm/Animation/Bounce.js +8 -4
  117. package/esm/Animation/Collapse.d.ts +1 -48
  118. package/esm/Animation/Collapse.js +59 -104
  119. package/esm/Animation/Fade.js +8 -4
  120. package/esm/Animation/Slide.js +6 -3
  121. package/esm/Carousel/Carousel.d.ts +7 -0
  122. package/esm/Carousel/Carousel.js +25 -12
  123. package/esm/CheckTree/index.js +11 -5
  124. package/esm/CheckTreePicker/CheckTreePicker.js +8 -6
  125. package/esm/DatePicker/DatePicker.d.ts +5 -1
  126. package/esm/DatePicker/DatePicker.js +2 -13
  127. package/esm/DateRangePicker/Calendar.d.ts +2 -1
  128. package/esm/DateRangePicker/Calendar.js +4 -3
  129. package/esm/DateRangePicker/DateRangePicker.d.ts +1 -1
  130. package/esm/DateRangePicker/DateRangePicker.js +27 -12
  131. package/esm/DateRangePicker/utils.d.ts +1 -1
  132. package/esm/DateRangePicker/utils.js +7 -3
  133. package/esm/Dropdown/Dropdown.js +30 -19
  134. package/esm/Dropdown/DropdownContext.d.ts +4 -1
  135. package/esm/Dropdown/DropdownItem.js +30 -6
  136. package/esm/Dropdown/DropdownState.d.ts +37 -0
  137. package/esm/Dropdown/DropdownState.js +55 -0
  138. package/esm/Dropdown/DropdownToggle.js +3 -6
  139. package/esm/InputNumber/InputNumber.js +11 -10
  140. package/esm/InputPicker/InputPicker.d.ts +16 -3
  141. package/esm/InputPicker/InputPicker.js +84 -45
  142. package/esm/List/ListItem.d.ts +1 -1
  143. package/esm/Menu/MenuItem.js +1 -1
  144. package/esm/MultiCascader/MultiCascader.js +4 -3
  145. package/esm/Nav/NavItem.js +12 -61
  146. package/esm/Navbar/NavbarItem.d.ts +19 -0
  147. package/esm/Navbar/NavbarItem.js +73 -0
  148. package/esm/Pagination/Pagination.js +1 -1
  149. package/esm/Picker/PickerToggle.js +2 -2
  150. package/esm/Picker/utils.d.ts +1 -1
  151. package/esm/Picker/utils.js +26 -22
  152. package/esm/Progress/ProgressCircle.js +15 -15
  153. package/esm/SelectPicker/SelectPicker.d.ts +1 -3
  154. package/esm/Sidenav/SidenavDropdown.js +5 -1
  155. package/esm/Sidenav/SidenavItem.js +47 -13
  156. package/esm/Slider/Slider.js +2 -1
  157. package/esm/TagInput/index.d.ts +13 -0
  158. package/esm/TagInput/index.js +44 -0
  159. package/esm/TagPicker/index.d.ts +10 -2
  160. package/esm/TagPicker/index.js +23 -6
  161. package/esm/Tree/Tree.d.ts +0 -2
  162. package/esm/Tree/Tree.js +10 -4
  163. package/esm/Tree/TreeContext.d.ts +7 -0
  164. package/esm/Tree/TreeContext.js +3 -0
  165. package/esm/TreePicker/TreeNode.js +10 -4
  166. package/esm/TreePicker/TreePicker.js +23 -12
  167. package/esm/Uploader/UploadFileItem.d.ts +5 -0
  168. package/esm/Uploader/UploadFileItem.js +2 -3
  169. package/esm/Uploader/Uploader.d.ts +8 -3
  170. package/esm/Uploader/Uploader.js +12 -6
  171. package/esm/index.d.ts +2 -0
  172. package/esm/index.js +1 -0
  173. package/esm/utils/ajaxUpload.d.ts +5 -1
  174. package/esm/utils/ajaxUpload.js +24 -13
  175. package/esm/utils/constants.d.ts +1 -0
  176. package/esm/utils/constants.js +1 -0
  177. package/esm/utils/dateUtils.d.ts +1 -0
  178. package/esm/utils/dateUtils.js +1 -0
  179. package/esm/utils/useInternalId.d.ts +4 -0
  180. package/esm/utils/useInternalId.js +16 -0
  181. package/esm/utils/useUniqueId.d.ts +1 -1
  182. package/esm/utils/useUniqueId.js +1 -1
  183. package/package.json +4 -9
  184. package/styles/color-modes/dark.less +28 -5
  185. package/styles/color-modes/high-contrast.less +317 -0
  186. package/styles/color-modes/light.less +24 -1
  187. package/styles/color-modes.less +5 -0
  188. package/styles/colors/high-contrast.less +105 -0
  189. package/styles/index.less +1 -0
  190. package/styles/mixins/color-modes.less +6 -0
  191. package/styles/mixins/listbox.less +13 -1
  192. package/styles/mixins/menu.less +7 -0
  193. package/styles/mixins/utilities.less +9 -1
  194. package/styles/variables.less +11 -0
@@ -0,0 +1,37 @@
1
+ interface DropdownItemState {
2
+ /**
3
+ * Internal ID
4
+ */
5
+ id: string;
6
+ /**
7
+ *
8
+ */
9
+ props: {
10
+ selected: boolean;
11
+ };
12
+ }
13
+ interface DropdownState {
14
+ items: DropdownItemState[];
15
+ }
16
+ export declare const initialState: DropdownState;
17
+ export declare enum DropdownActionType {
18
+ RegisterItem = 0,
19
+ UnregisterItem = 1,
20
+ UpdateItem = 2
21
+ }
22
+ export declare type DropdownAction = {
23
+ type: DropdownActionType.RegisterItem;
24
+ payload: {
25
+ id: string;
26
+ props: {
27
+ selected: boolean;
28
+ };
29
+ };
30
+ } | {
31
+ type: DropdownActionType.UnregisterItem;
32
+ payload: {
33
+ id: string;
34
+ };
35
+ };
36
+ export declare function reducer(state: DropdownState, action: DropdownAction): DropdownState;
37
+ export {};
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ exports.__esModule = true;
6
+ exports.reducer = reducer;
7
+ exports.DropdownActionType = exports.initialState = void 0;
8
+
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+
11
+ var initialState = {
12
+ items: []
13
+ };
14
+ exports.initialState = initialState;
15
+ var DropdownActionType;
16
+ exports.DropdownActionType = DropdownActionType;
17
+
18
+ (function (DropdownActionType) {
19
+ DropdownActionType[DropdownActionType["RegisterItem"] = 0] = "RegisterItem";
20
+ DropdownActionType[DropdownActionType["UnregisterItem"] = 1] = "UnregisterItem";
21
+ DropdownActionType[DropdownActionType["UpdateItem"] = 2] = "UpdateItem";
22
+ })(DropdownActionType || (exports.DropdownActionType = DropdownActionType = {}));
23
+
24
+ function reducer(state, action) {
25
+ if (state === void 0) {
26
+ state = initialState;
27
+ }
28
+
29
+ switch (action.type) {
30
+ case DropdownActionType.RegisterItem:
31
+ if (state.items.find(function (item) {
32
+ return item.id === action.payload.id;
33
+ })) {
34
+ return (0, _extends2.default)({}, state, {
35
+ items: state.items.map(function (item) {
36
+ if (item.id === action.payload.id) {
37
+ return (0, _extends2.default)({}, item, {
38
+ props: (0, _extends2.default)({}, item.props, {
39
+ selected: action.payload.props.selected
40
+ })
41
+ });
42
+ }
43
+
44
+ return item;
45
+ })
46
+ });
47
+ }
48
+
49
+ return (0, _extends2.default)({}, state, {
50
+ items: [].concat(state.items, [{
51
+ id: action.payload.id,
52
+ props: action.payload.props
53
+ }])
54
+ });
55
+
56
+ case DropdownActionType.UnregisterItem:
57
+ return (0, _extends2.default)({}, state, {
58
+ items: state.items.filter(function (item) {
59
+ return item.id !== action.payload.id;
60
+ })
61
+ });
62
+
63
+ default:
64
+ return state;
65
+ }
66
+ }
@@ -51,16 +51,13 @@ var DropdownToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref
51
51
  var inSidenav = !!sidenav; // Caret icon is down by default, when Dropdown is used in Sidenav.
52
52
 
53
53
  var Caret = (0, _useToggleCaret.default)(inSidenav ? 'bottomStart' : placement);
54
- var buttonProps = Component === _Button.default ? {
55
- appearance: 'subtle'
56
- } : null;
57
54
 
58
- var toggle = /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, buttonProps, rest, {
55
+ var toggle = /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
59
56
  ref: ref,
60
57
  className: classes
61
- }), /*#__PURE__*/_react.default.createElement("span", {
58
+ }), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
62
59
  className: prefix('icon')
63
- }, icon), children, noCaret ? null : /*#__PURE__*/_react.default.createElement(Caret, {
60
+ }), children, noCaret ? null : /*#__PURE__*/_react.default.createElement(Caret, {
64
61
  className: prefix('caret')
65
62
  }));
66
63
 
@@ -151,7 +151,7 @@ var InputNumber = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
151
151
  rest = _partitionHTMLProps[1];
152
152
 
153
153
  var inputRef = (0, _react.useRef)();
154
- var handleValue = (0, _react.useCallback)(function (currentValue, event) {
154
+ var handleChangeValue = (0, _react.useCallback)(function (currentValue, event) {
155
155
  if (currentValue !== value) {
156
156
  // Disable the up button when the value is greater than the maximum value.
157
157
  setDisabledUpButton(disableMaxValue(currentValue, max)); // Disable the down button when the value is greater than the minimum value.
@@ -179,13 +179,13 @@ var InputNumber = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
179
179
  var handlePlus = (0, _react.useCallback)(function (event) {
180
180
  var val = +(value || 0);
181
181
  var bit = decimals(val, step);
182
- handleValue(getSafeValue((val + step).toFixed(bit)), event);
183
- }, [getSafeValue, handleValue, step, value]);
182
+ handleChangeValue(getSafeValue((val + step).toFixed(bit)), event);
183
+ }, [getSafeValue, handleChangeValue, step, value]);
184
184
  var handleMinus = (0, _react.useCallback)(function (event) {
185
185
  var val = +(value || 0);
186
186
  var bit = decimals(val, step);
187
- handleValue(getSafeValue((val - step).toFixed(bit)), event);
188
- }, [getSafeValue, handleValue, step, value]);
187
+ handleChangeValue(getSafeValue((val - step).toFixed(bit)), event);
188
+ }, [getSafeValue, handleChangeValue, step, value]);
189
189
  var handleWheel = (0, _react.useCallback)(function (event) {
190
190
  if (!disabled && !readOnly && event.target === document.activeElement) {
191
191
  event.preventDefault();
@@ -207,14 +207,14 @@ var InputNumber = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
207
207
  return;
208
208
  }
209
209
 
210
- handleValue(value, event);
211
- }, [handleValue]);
210
+ handleChangeValue(value, event);
211
+ }, [handleChangeValue]);
212
212
  var handleBlur = (0, _react.useCallback)(function (event) {
213
213
  var _event$target;
214
214
 
215
215
  var targetValue = Number.parseFloat((_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.value);
216
- handleValue(getSafeValue(targetValue), event);
217
- }, [getSafeValue, handleValue]);
216
+ handleChangeValue(getSafeValue(targetValue), event);
217
+ }, [getSafeValue, handleChangeValue]);
218
218
  (0, _react.useEffect)(function () {
219
219
  var wheelListener;
220
220
 
@@ -241,7 +241,8 @@ var InputNumber = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
241
241
  value: (0, _isNil.default)(value) ? '' : "" + value,
242
242
  disabled: disabled,
243
243
  readOnly: readOnly,
244
- plaintext: plaintext
244
+ plaintext: plaintext,
245
+ ref: plaintext ? ref : undefined
245
246
  }));
246
247
 
247
248
  if (plaintext) {
@@ -4,17 +4,30 @@ import { PickerComponent } from '../Picker';
4
4
  import { TagProps } from '../Tag';
5
5
  import { ItemDataType, FormControlPickerProps } from '../@types/common';
6
6
  import { SelectProps } from '../SelectPicker';
7
+ export declare type TriggerType = 'Enter' | 'Space' | 'Comma';
8
+ export interface InputPickerContextProps {
9
+ /** Multiple selections are allowed */
10
+ multi?: boolean;
11
+ /** Tag related props. */
12
+ tagProps?: TagProps;
13
+ /**
14
+ * Set the trigger for creating tags. only valid when creatable
15
+ */
16
+ trigger?: TriggerType | TriggerType[];
17
+ /**
18
+ * No overlay provides options
19
+ */
20
+ disabledOptions?: boolean;
21
+ }
22
+ export declare const InputPickerContext: React.Context<InputPickerContextProps>;
7
23
  interface InputItemDataType extends ItemDataType {
8
24
  create?: boolean;
9
25
  }
10
26
  export declare type ValueType = any;
11
27
  export interface InputPickerProps<T = ValueType> extends FormControlPickerProps<T, InputPickerLocale, InputItemDataType>, SelectProps<T> {
12
28
  tabIndex?: number;
13
- multi?: boolean;
14
29
  /** Settings can create new options */
15
30
  creatable?: boolean;
16
- /** Tag related props. */
17
- tagProps?: TagProps;
18
31
  /** Option to cache value when searching asynchronously */
19
32
  cacheData?: InputItemDataType[];
20
33
  /** The `onBlur` attribute for the `input` element. */
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
6
 
7
7
  exports.__esModule = true;
8
- exports.default = void 0;
8
+ exports.default = exports.InputPickerContext = void 0;
9
9
 
10
10
  var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));
11
11
 
@@ -51,8 +51,11 @@ var _InputAutosize = _interopRequireDefault(require("./InputAutosize"));
51
51
 
52
52
  var _InputSearch = _interopRequireDefault(require("./InputSearch"));
53
53
 
54
- var _templateObject, _templateObject2, _templateObject3, _templateObject4;
54
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
55
55
 
56
+ var InputPickerContext = /*#__PURE__*/_react.default.createContext({});
57
+
58
+ exports.InputPickerContext = InputPickerContext;
56
59
  var defaultProps = {
57
60
  as: 'div',
58
61
  appearance: 'default',
@@ -66,8 +69,7 @@ var defaultProps = {
66
69
  placement: 'bottomStart',
67
70
  searchable: true,
68
71
  menuAutoWidth: true,
69
- menuMaxHeight: 320,
70
- tagProps: {}
72
+ menuMaxHeight: 320
71
73
  };
72
74
 
73
75
  var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
@@ -88,10 +90,8 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
88
90
  toggleAs = props.toggleAs,
89
91
  style = props.style,
90
92
  searchable = props.searchable,
91
- multi = props.multi,
92
93
  controlledOpen = props.open,
93
94
  placeholder = props.placeholder,
94
- tagProps = props.tagProps,
95
95
  groupBy = props.groupBy,
96
96
  menuClassName = props.menuClassName,
97
97
  menuStyle = props.menuStyle,
@@ -126,7 +126,13 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
126
126
  onFocus = props.onFocus,
127
127
  searchBy = props.searchBy,
128
128
  placement = props.placement,
129
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "cleanable", "cacheData", "classPrefix", "data", "disabled", "readOnly", "plaintext", "defaultValue", "defaultOpen", "disabledItemValues", "locale", "toggleAs", "style", "searchable", "multi", "open", "placeholder", "tagProps", "groupBy", "menuClassName", "menuStyle", "menuAutoWidth", "menuMaxHeight", "creatable", "value", "valueKey", "virtualized", "labelKey", "listProps", "id", "tabIndex", "sort", "renderMenu", "renderExtraFooter", "renderValue", "renderMenuItem", "renderMenuGroup", "onEnter", "onEntered", "onExit", "onExited", "onChange", "onClean", "onCreate", "onSearch", "onSelect", "onOpen", "onClose", "onBlur", "onFocus", "searchBy", "placement"]);
129
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "cleanable", "cacheData", "classPrefix", "data", "disabled", "readOnly", "plaintext", "defaultValue", "defaultOpen", "disabledItemValues", "locale", "toggleAs", "style", "searchable", "open", "placeholder", "groupBy", "menuClassName", "menuStyle", "menuAutoWidth", "menuMaxHeight", "creatable", "value", "valueKey", "virtualized", "labelKey", "listProps", "id", "tabIndex", "sort", "renderMenu", "renderExtraFooter", "renderValue", "renderMenuItem", "renderMenuGroup", "onEnter", "onEntered", "onExit", "onExited", "onChange", "onClean", "onCreate", "onSearch", "onSelect", "onOpen", "onClose", "onBlur", "onFocus", "searchBy", "placement"]);
130
+
131
+ var _useContext = (0, _react.useContext)(InputPickerContext),
132
+ multi = _useContext.multi,
133
+ tagProps = _useContext.tagProps,
134
+ trigger = _useContext.trigger,
135
+ disabledOptions = _useContext.disabledOptions;
130
136
 
131
137
  if (groupBy === valueKey || groupBy === labelKey) {
132
138
  throw Error('`groupBy` can not be equal to `valueKey` and `labelKey`');
@@ -197,9 +203,9 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
197
203
  var _filteredData$;
198
204
 
199
205
  // The first option after filtering is the focus.
200
- setFocusItemValue((filteredData === null || filteredData === void 0 ? void 0 : (_filteredData$ = filteredData[0]) === null || _filteredData$ === void 0 ? void 0 : _filteredData$[valueKey]) || searchKeyword);
206
+ setFocusItemValue(disabledOptions ? searchKeyword : (filteredData === null || filteredData === void 0 ? void 0 : (_filteredData$ = filteredData[0]) === null || _filteredData$ === void 0 ? void 0 : _filteredData$[valueKey]) || searchKeyword);
201
207
  onSearch === null || onSearch === void 0 ? void 0 : onSearch(searchKeyword, event);
202
- }, [setFocusItemValue, onSearch, valueKey]); // Use search keywords to filter options.
208
+ }, [disabledOptions, setFocusItemValue, valueKey, onSearch]); // Use search keywords to filter options.
203
209
 
204
210
  var _useSearch = (0, _Picker.useSearch)({
205
211
  labelKey: labelKey,
@@ -243,16 +249,16 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
243
249
  var activeItem = allData.find(function (item) {
244
250
  return (0, _shallowEqual.default)(item[valueKey], value);
245
251
  });
246
- var displayElement = placeholder;
252
+ var itemNode = placeholder;
247
253
 
248
254
  if (activeItem !== null && activeItem !== void 0 && activeItem[labelKey]) {
249
- displayElement = activeItem === null || activeItem === void 0 ? void 0 : activeItem[labelKey];
255
+ itemNode = activeItem === null || activeItem === void 0 ? void 0 : activeItem[labelKey];
250
256
  }
251
257
 
252
258
  return {
253
259
  isValid: !!activeItem,
254
260
  activeItem: activeItem,
255
- displayElement: displayElement
261
+ itemNode: itemNode
256
262
  };
257
263
  };
258
264
 
@@ -318,7 +324,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
318
324
  * @param event
319
325
  */
320
326
 
321
- var handleItemSelect = function handleItemSelect(value, item, event) {
327
+ var handleSelectItem = function handleSelectItem(value, item, event) {
322
328
  setValue(value);
323
329
  setFocusItemValue(value);
324
330
  setSearchKeyword('');
@@ -335,7 +341,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
335
341
  */
336
342
 
337
343
 
338
- var handleCheckItemSelect = function handleCheckItemSelect(nextItemValue, item, event, checked) {
344
+ var handleCheckTag = function handleCheckTag(nextItemValue, item, event, checked) {
339
345
  var val = cloneValue();
340
346
 
341
347
  if (checked) {
@@ -354,7 +360,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
354
360
  focusInput();
355
361
  };
356
362
 
357
- var selectFocusMenuCheckItem = (0, _react.useCallback)(function (event) {
363
+ var handleTagKeyPress = (0, _react.useCallback)(function (event) {
358
364
  var val = cloneValue();
359
365
  var data = getAllData();
360
366
 
@@ -373,7 +379,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
373
379
  return (0, _shallowEqual.default)(v, focusItemValue);
374
380
  })) {
375
381
  val.push(focusItemValue);
376
- } else {
382
+ } else if (!disabledOptions) {
377
383
  (0, _remove.default)(val, function (itemVal) {
378
384
  return (0, _shallowEqual.default)(itemVal, focusItemValue);
379
385
  });
@@ -391,8 +397,8 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
391
397
  setSearchKeyword('');
392
398
  handleSelect(val, focusItem, event);
393
399
  handleChange(val, event);
394
- }, [setValue, cloneValue, getAllData, handleChange, handleSelect, createOption, setSearchKeyword, disabledItemValues, focusItemValue, valueKey]);
395
- var selectFocusMenuItem = (0, _react.useCallback)(function (event) {
400
+ }, [cloneValue, getAllData, focusItemValue, disabledItemValues, disabledOptions, setValue, setSearchKeyword, handleSelect, handleChange, valueKey, createOption]);
401
+ var handleMenuItemKeyPress = (0, _react.useCallback)(function (event) {
396
402
  if (!focusItemValue || !controlledData) {
397
403
  return;
398
404
  } // If the value is disabled in this option, it is returned.
@@ -458,14 +464,43 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
458
464
  handleChange(null, event);
459
465
  onClean === null || onClean === void 0 ? void 0 : onClean(event);
460
466
  }, [disabled, searchKeyword, onClean, handleChange, setValue, setFocusItemValue, setSearchKeyword]);
467
+ var events = {
468
+ onMenuPressBackspace: multi ? removeLastItem : handleClean,
469
+ onMenuKeyDown: onKeyDown,
470
+ onMenuPressEnter: null,
471
+ onKeyDown: null
472
+ };
473
+ var handleKeyPress = (0, _react.useCallback)(function (event) {
474
+ // When typing a space, create a tag.
475
+ if ((0, _utils.isOneOf)('Space', trigger) && event.key === _utils.KEY_VALUES.SPACE) {
476
+ handleTagKeyPress(event);
477
+ event.preventDefault();
478
+ } // When typing a comma, create a tag.
479
+
480
+
481
+ if ((0, _utils.isOneOf)('Comma', trigger) && event.key === _utils.KEY_VALUES.COMMA) {
482
+ handleTagKeyPress(event);
483
+ event.preventDefault();
484
+ }
485
+ }, [handleTagKeyPress, trigger]);
486
+
487
+ if (multi) {
488
+ if ((0, _utils.isOneOf)('Enter', trigger)) {
489
+ events.onMenuPressEnter = handleTagKeyPress;
490
+ }
491
+
492
+ if (creatable) {
493
+ events.onKeyDown = handleKeyPress;
494
+ }
495
+ } else {
496
+ events.onMenuPressEnter = handleMenuItemKeyPress;
497
+ }
498
+
461
499
  var onPickerKeyDown = (0, _Picker.useToggleKeyDownEvent)((0, _extends2.default)({
462
500
  triggerRef: triggerRef,
463
501
  targetRef: targetRef,
464
- overlayRef: overlayRef,
465
- onMenuPressEnter: multi ? selectFocusMenuCheckItem : selectFocusMenuItem,
466
- onMenuPressBackspace: multi ? removeLastItem : handleClean,
467
- onMenuKeyDown: onKeyDown
468
- }, rest));
502
+ overlayRef: overlayRef
503
+ }, events, rest));
469
504
  var handleExited = (0, _react.useCallback)(function () {
470
505
  setFocusItemValue(multi ? value === null || value === void 0 ? void 0 : value[0] : value);
471
506
  setSearchKeyword('');
@@ -497,24 +532,24 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
497
532
  return renderMenuItem ? renderMenuItem(newLabel, item) : newLabel;
498
533
  };
499
534
 
500
- var renderSingleValue = function renderSingleValue() {
535
+ var checkValue = function checkValue() {
501
536
  if (multi) {
502
537
  return {
503
538
  isValid: false,
504
- displayElement: placeholder
539
+ itemNode: null
505
540
  };
506
541
  }
507
542
 
508
543
  var dataItem = getDateItem(value);
509
- var displayElement = dataItem.displayElement;
544
+ var itemNode = dataItem.itemNode;
510
545
 
511
546
  if (!(0, _isNil.default)(value) && (0, _isFunction.default)(renderValue)) {
512
- displayElement = renderValue(value, dataItem.activeItem, displayElement);
547
+ itemNode = renderValue(value, dataItem.activeItem, itemNode);
513
548
  }
514
549
 
515
550
  return {
516
551
  isValid: dataItem.isValid,
517
- displayElement: displayElement
552
+ itemNode: itemNode
518
553
  };
519
554
  };
520
555
 
@@ -532,7 +567,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
532
567
  var tagElements = tags.map(function (tag) {
533
568
  var _getDateItem = getDateItem(tag),
534
569
  isValid = _getDateItem.isValid,
535
- displayElement = _getDateItem.displayElement,
570
+ itemNode = _getDateItem.itemNode,
536
571
  activeItem = _getDateItem.activeItem;
537
572
 
538
573
  items.push(activeItem);
@@ -545,9 +580,9 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
545
580
  key: tag,
546
581
  size: rest.size === 'lg' ? 'lg' : rest.size === 'xs' ? 'sm' : 'md',
547
582
  closable: !disabled && closable && !readOnly && !plaintext,
548
- title: typeof displayElement === 'string' ? displayElement : undefined,
583
+ title: typeof itemNode === 'string' ? itemNode : undefined,
549
584
  onClose: (0, _utils.createChainedFunction)(handleRemoveItemByTag.bind(null, tag), onClose)
550
- }), displayElement);
585
+ }), itemNode);
551
586
  }).filter(function (item) {
552
587
  return item !== null;
553
588
  });
@@ -584,6 +619,12 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
584
619
  items = items.sort(sort(false));
585
620
  }
586
621
 
622
+ if (disabledOptions) {
623
+ return /*#__PURE__*/_react.default.createElement(_Picker.PickerOverlay, {
624
+ ref: (0, _utils.mergeRefs)(overlayRef, speakerRef)
625
+ });
626
+ }
627
+
587
628
  var menu = items.length ? /*#__PURE__*/_react.default.createElement(_Picker.DropdownMenu, {
588
629
  id: id ? id + "-listbox" : undefined,
589
630
  listProps: listProps,
@@ -598,7 +639,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
598
639
  maxHeight: menuMaxHeight,
599
640
  data: items,
600
641
  group: !(0, _isUndefined.default)(groupBy),
601
- onSelect: multi ? handleCheckItemSelect : handleItemSelect,
642
+ onSelect: multi ? handleCheckTag : handleSelectItem,
602
643
  renderMenuGroup: renderMenuGroup,
603
644
  renderMenuItem: renderDropdownMenuItem,
604
645
  virtualized: virtualized
@@ -615,9 +656,9 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
615
656
  }, renderMenu ? renderMenu(menu) : menu, renderExtraFooter === null || renderExtraFooter === void 0 ? void 0 : renderExtraFooter());
616
657
  };
617
658
 
618
- var _renderSingleValue = renderSingleValue(),
619
- isValid = _renderSingleValue.isValid,
620
- displayElement = _renderSingleValue.displayElement;
659
+ var _checkValue = checkValue(),
660
+ isValid = _checkValue.isValid,
661
+ itemNode = _checkValue.itemNode;
621
662
 
622
663
  var tagElements = renderMultiValue();
623
664
  /**
@@ -626,7 +667,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
626
667
  * 3.If renderValue returns null or undefined, hasValue is false.
627
668
  */
628
669
 
629
- var hasSingleValue = !(0, _isNil.default)(value) && (0, _isFunction.default)(renderValue) && !(0, _isNil.default)(displayElement);
670
+ var hasSingleValue = !(0, _isNil.default)(value) && (0, _isFunction.default)(renderValue) && !(0, _isNil.default)(itemNode);
630
671
  var hasMultiValue = (0, _isArray.default)(value) && value.length > 0 && (0, _isFunction.default)(renderValue) && !(0, _isNil.default)(tagElements);
631
672
  var hasValue = multi ? !!(tagElements !== null && tagElements !== void 0 && tagElements.length) || hasMultiValue : isValid || hasSingleValue;
632
673
 
@@ -637,7 +678,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
637
678
  pickerClasses = _usePickerClassName[0],
638
679
  usedClassNamePropKeys = _usePickerClassName[1];
639
680
 
640
- var classes = merge(pickerClasses, (_merge = {}, _merge[prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["tag"])))] = multi, _merge[prefix(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["focused"])))] = open, _merge));
681
+ var classes = merge(pickerClasses, (_merge = {}, _merge[prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["tag"])))] = multi, _merge[prefix(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["focused"])))] = open, _merge[prefix(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["disabled-options"])))] = disabledOptions, _merge));
641
682
  var searching = !!searchKeyword && open;
642
683
  var displaySearchInput = searchable && !disabled;
643
684
  var inputProps = multi ? {
@@ -662,9 +703,10 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
662
703
  return /*#__PURE__*/_react.default.createElement(_Plaintext.default, (0, _extends2.default)({
663
704
  localeKey: "notSelected",
664
705
  ref: targetRef
665
- }, plaintextProps), displayElement || (tagElements !== null && tagElements !== void 0 && tagElements.length ? tagElements : null));
706
+ }, plaintextProps), itemNode || (tagElements !== null && tagElements !== void 0 && tagElements.length ? tagElements : null) || placeholder);
666
707
  }
667
708
 
709
+ var placeholderNode = placeholder || (disabledOptions ? null : locale === null || locale === void 0 ? void 0 : locale.placeholder);
668
710
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerToggleTrigger, {
669
711
  pickerProps: (0, _pick.default)(props, _Picker.pickTriggerPropKeys),
670
712
  ref: triggerRef,
@@ -693,9 +735,10 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
693
735
  active: open,
694
736
  disabled: disabled,
695
737
  placement: placement,
696
- inputValue: value
697
- }), searching || multi && hasValue ? null : displayElement || (locale === null || locale === void 0 ? void 0 : locale.placeholder)), !(!multi && disabled) && /*#__PURE__*/_react.default.createElement("div", {
698
- className: prefix(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["tag-wrapper"])))
738
+ inputValue: value,
739
+ caret: !disabledOptions
740
+ }), searching || multi && hasValue ? null : itemNode || placeholderNode), !(!multi && disabled) && /*#__PURE__*/_react.default.createElement("div", {
741
+ className: prefix(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteralLoose2.default)(["tag-wrapper"])))
699
742
  }, tagElements, displaySearchInput && /*#__PURE__*/_react.default.createElement(_InputSearch.default, (0, _extends2.default)({}, inputProps, {
700
743
  tabIndex: tabIndex,
701
744
  readOnly: readOnly,
@@ -717,7 +760,6 @@ InputPicker.propTypes = (0, _extends2.default)({}, _Picker.listPickerPropTypes,
717
760
  menuMaxHeight: _propTypes.default.number,
718
761
  searchable: _propTypes.default.bool,
719
762
  creatable: _propTypes.default.bool,
720
- multi: _propTypes.default.bool,
721
763
  groupBy: _propTypes.default.any,
722
764
  sort: _propTypes.default.func,
723
765
  renderMenu: _propTypes.default.func,
@@ -728,8 +770,7 @@ InputPicker.propTypes = (0, _extends2.default)({}, _Picker.listPickerPropTypes,
728
770
  onGroupTitleClick: _propTypes.default.func,
729
771
  onSearch: _propTypes.default.func,
730
772
  virtualized: _propTypes.default.bool,
731
- searchBy: _propTypes.default.func,
732
- tagProps: _propTypes.default.object
773
+ searchBy: _propTypes.default.func
733
774
  });
734
775
  var _default = InputPicker;
735
776
  exports.default = _default;
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { WithAsProps } from '../@types/common';
3
3
  import { Collection } from './helper/useManager';
4
- export interface ListItemProps extends WithAsProps {
4
+ export interface ListItemProps extends WithAsProps, React.HTMLAttributes<HTMLElement> {
5
5
  index?: number;
6
6
  collection?: Collection;
7
7
  disabled?: boolean;
@@ -34,7 +34,7 @@ function MenuItem(props) {
34
34
  dispatch = _ref[1]; // Whether this menuitem has focus (indicated by `aria-activedescendant` from parent menu)
35
35
 
36
36
 
37
- var hasFocus = (menuState === null || menuState === void 0 ? void 0 : (_menuState$items$menu = menuState.items[menuState === null || menuState === void 0 ? void 0 : menuState.activeItemIndex]) === null || _menuState$items$menu === void 0 ? void 0 : _menuState$items$menu.element) === menuitemRef.current;
37
+ var hasFocus = (menuState === null || menuState === void 0 ? void 0 : (_menuState$items$menu = menuState.items[menuState === null || menuState === void 0 ? void 0 : menuState.activeItemIndex]) === null || _menuState$items$menu === void 0 ? void 0 : _menuState$items$menu.element) === menuitemRef.current && !!menuitemRef.current;
38
38
  var handleClick = (0, _react.useCallback)(function (event) {
39
39
  if (disabled) {
40
40
  return;
@@ -89,6 +89,7 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
89
89
  renderMenuItem = props.renderMenuItem,
90
90
  renderExtraFooter = props.renderExtraFooter,
91
91
  onEnter = props.onEnter,
92
+ onExit = props.onExit,
92
93
  onExited = props.onExited,
93
94
  onClean = props.onClean,
94
95
  onSearch = props.onSearch,
@@ -97,7 +98,7 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
97
98
  onOpen = props.onOpen,
98
99
  onClose = props.onClose,
99
100
  onCheck = props.onCheck,
100
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "data", "classPrefix", "defaultValue", "value", "valueKey", "labelKey", "childrenKey", "disabled", "disabledItemValues", "cleanable", "locale", "toggleAs", "style", "countable", "cascade", "inline", "placeholder", "placement", "menuWidth", "menuHeight", "menuClassName", "menuStyle", "searchable", "uncheckableItemValues", "id", "getChildren", "renderValue", "renderMenu", "renderMenuItem", "renderExtraFooter", "onEnter", "onExited", "onClean", "onSearch", "onSelect", "onChange", "onOpen", "onClose", "onCheck"]);
101
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "data", "classPrefix", "defaultValue", "value", "valueKey", "labelKey", "childrenKey", "disabled", "disabledItemValues", "cleanable", "locale", "toggleAs", "style", "countable", "cascade", "inline", "placeholder", "placement", "menuWidth", "menuHeight", "menuClassName", "menuStyle", "searchable", "uncheckableItemValues", "id", "getChildren", "renderValue", "renderMenu", "renderMenuItem", "renderExtraFooter", "onEnter", "onExit", "onExited", "onClean", "onSearch", "onSelect", "onChange", "onOpen", "onClose", "onCheck"]);
101
102
  var itemKeys = {
102
103
  childrenKey: childrenKey,
103
104
  labelKey: labelKey,
@@ -202,10 +203,9 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
202
203
  setActive(true);
203
204
  }, [onOpen]);
204
205
  var handleExited = (0, _react.useCallback)(function () {
205
- onClose === null || onClose === void 0 ? void 0 : onClose();
206
206
  setActive(false);
207
207
  setSearchKeyword('');
208
- }, [onClose]);
208
+ }, []);
209
209
  var handleSelect = (0, _react.useCallback)(function (node, cascadePaths, event) {
210
210
  var _node$childrenKey, _node$childrenKey2, _triggerRef$current, _triggerRef$current$u;
211
211
 
@@ -493,6 +493,7 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
493
493
  placement: placement,
494
494
  onEnter: (0, _utils3.createChainedFunction)(handleEntered, onEnter),
495
495
  onExited: (0, _utils3.createChainedFunction)(handleExited, onExited),
496
+ onExit: (0, _utils3.createChainedFunction)(onClose, onExit),
496
497
  speaker: renderDropdownMenu
497
498
  }, /*#__PURE__*/_react.default.createElement(Component, {
498
499
  className: classes,