rsuite 5.17.0-beta → 5.17.0-beta.1

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 (38) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/Picker/styles/index.less +1 -1
  3. package/cjs/AutoComplete/AutoComplete.d.ts +3 -1
  4. package/cjs/AutoComplete/AutoComplete.js +6 -2
  5. package/cjs/AutoComplete/test/AutoComplete.test.d.ts +1 -0
  6. package/cjs/AutoComplete/test/AutoComplete.test.js +23 -0
  7. package/cjs/DatePicker/DatePicker.js +1 -1
  8. package/cjs/DateRangePicker/DateRangePicker.js +1 -1
  9. package/cjs/Disclosure/Disclosure.d.ts +2 -2
  10. package/cjs/Disclosure/Disclosure.js +6 -6
  11. package/cjs/Navbar/NavbarDropdownMenu.js +16 -10
  12. package/cjs/Overlay/OverlayTrigger.js +43 -34
  13. package/cjs/Picker/PickerToggle.d.ts +1 -1
  14. package/cjs/Picker/PickerToggle.js +52 -27
  15. package/cjs/utils/dateUtils.js +0 -0
  16. package/dist/rsuite-rtl.css +1 -1
  17. package/dist/rsuite-rtl.min.css +1 -1
  18. package/dist/rsuite-rtl.min.css.map +1 -1
  19. package/dist/rsuite.css +1 -1
  20. package/dist/rsuite.js +7 -7
  21. package/dist/rsuite.min.css +1 -1
  22. package/dist/rsuite.min.css.map +1 -1
  23. package/dist/rsuite.min.js +1 -1
  24. package/dist/rsuite.min.js.map +1 -1
  25. package/esm/AutoComplete/AutoComplete.d.ts +3 -1
  26. package/esm/AutoComplete/AutoComplete.js +6 -2
  27. package/esm/AutoComplete/test/AutoComplete.test.d.ts +1 -0
  28. package/esm/AutoComplete/test/AutoComplete.test.js +18 -0
  29. package/esm/DatePicker/DatePicker.js +1 -1
  30. package/esm/DateRangePicker/DateRangePicker.js +1 -1
  31. package/esm/Disclosure/Disclosure.d.ts +2 -2
  32. package/esm/Disclosure/Disclosure.js +6 -6
  33. package/esm/Navbar/NavbarDropdownMenu.js +14 -8
  34. package/esm/Overlay/OverlayTrigger.js +44 -35
  35. package/esm/Picker/PickerToggle.d.ts +1 -1
  36. package/esm/Picker/PickerToggle.js +52 -27
  37. package/esm/utils/dateUtils.js +0 -0
  38. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [5.16.4](https://github.com/rsuite/rsuite/compare/v5.16.3...v5.16.4) (2022-08-04)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **DatePicker:** fix issues with focus event ([#2636](https://github.com/rsuite/rsuite/issues/2636)) ([76b68aa](https://github.com/rsuite/rsuite/commit/76b68aa79dd129a210238517c279fe41b0da89ac))
6
+
1
7
  ## [5.16.3](https://github.com/rsuite/rsuite/compare/v5.16.2...v5.16.3) (2022-07-29)
2
8
 
3
9
  ### Bug Fixes
@@ -104,6 +104,7 @@
104
104
  padding-right: 32px;
105
105
  color: var(--rs-text-primary);
106
106
  background-color: var(--rs-input-bg);
107
+ outline: none;
107
108
  }
108
109
 
109
110
  &.rs-btn-lg &-textbox {
@@ -120,7 +121,6 @@
120
121
 
121
122
  &-read-only {
122
123
  opacity: 0;
123
- pointer-events: none;
124
124
  }
125
125
  }
126
126
 
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { PickerComponent } from '../Picker';
3
3
  import { WithAsProps, FormControlPickerProps, TypeAttributes, ItemDataType } from '../@types/common';
4
4
  export declare type ValueType = string;
5
- export interface AutoCompleteProps<T = ValueType> extends WithAsProps, FormControlPickerProps<T, any, ItemDataType> {
5
+ export interface AutoCompleteProps<T = ValueType> extends WithAsProps, FormControlPickerProps<T, any, ItemDataType | string> {
6
6
  /** Additional classes for menu */
7
7
  menuClassName?: string;
8
8
  /** The placement of component */
@@ -13,6 +13,8 @@ export interface AutoCompleteProps<T = ValueType> extends WithAsProps, FormContr
13
13
  open?: boolean;
14
14
  /** Placeholder text */
15
15
  placeholder?: string;
16
+ /** The width of the menu will automatically follow the width of the input box */
17
+ menuAutoWidth?: boolean;
16
18
  /** Custom filter function to determine whether the item will be displayed */
17
19
  filterBy?: (value: string, item: ItemDataType) => boolean;
18
20
  /** Called when a option is selected */
@@ -44,6 +44,8 @@ var AutoComplete = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
44
44
  classPrefix = _props$classPrefix === void 0 ? 'auto-complete' : _props$classPrefix,
45
45
  _props$defaultValue = props.defaultValue,
46
46
  defaultValue = _props$defaultValue === void 0 ? '' : _props$defaultValue,
47
+ _props$menuAutoWidth = props.menuAutoWidth,
48
+ menuAutoWidth = _props$menuAutoWidth === void 0 ? true : _props$menuAutoWidth,
47
49
  data = props.data,
48
50
  valueProp = props.value,
49
51
  open = props.open,
@@ -61,7 +63,7 @@ var AutoComplete = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
61
63
  onFocus = props.onFocus,
62
64
  onBlur = props.onBlur,
63
65
  onMenuFocus = props.onMenuFocus,
64
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "disabled", "className", "placement", "selectOnEnter", "classPrefix", "defaultValue", "data", "value", "open", "style", "menuClassName", "id", "renderMenu", "renderMenuItem", "onSelect", "filterBy", "onKeyDown", "onChange", "onClose", "onOpen", "onFocus", "onBlur", "onMenuFocus"]);
66
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "disabled", "className", "placement", "selectOnEnter", "classPrefix", "defaultValue", "menuAutoWidth", "data", "value", "open", "style", "menuClassName", "id", "renderMenu", "renderMenuItem", "onSelect", "filterBy", "onKeyDown", "onChange", "onClose", "onOpen", "onFocus", "onBlur", "onMenuFocus"]);
65
67
  var datalist = (0, _utils3.transformData)(data);
66
68
 
67
69
  var _useControlled = (0, _utils.useControlled)(valueProp, defaultValue),
@@ -203,7 +205,8 @@ var AutoComplete = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
203
205
  style: styles,
204
206
  className: className,
205
207
  onKeyDown: handleKeyDownEvent,
206
- target: triggerRef
208
+ target: triggerRef,
209
+ autoWidth: menuAutoWidth
207
210
  }, renderMenu ? renderMenu(menu) : menu);
208
211
  };
209
212
 
@@ -239,6 +242,7 @@ AutoComplete.propTypes = (0, _extends2.default)({}, _utils2.animationPropTypes,
239
242
  defaultValue: _propTypes.default.string,
240
243
  className: _propTypes.default.string,
241
244
  menuClassName: _propTypes.default.string,
245
+ menuAutoWidth: _propTypes.default.bool,
242
246
  placement: _propTypes.default.oneOf(_utils.PLACEMENT),
243
247
  onFocus: _propTypes.default.func,
244
248
  onMenuFocus: _propTypes.default.func,
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _react = _interopRequireDefault(require("react"));
6
+
7
+ var _AutoComplete = _interopRequireDefault(require("../AutoComplete"));
8
+
9
+ /*#__PURE__*/
10
+ _react.default.createElement(_AutoComplete.default, {
11
+ data: ['item1', 'item2']
12
+ });
13
+
14
+ /*#__PURE__*/
15
+ _react.default.createElement(_AutoComplete.default, {
16
+ data: [{
17
+ label: 'item1',
18
+ value: 'item1'
19
+ }, {
20
+ label: 'item2',
21
+ value: 'item2'
22
+ }]
23
+ });
@@ -467,7 +467,7 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
467
467
  as: toggleAs,
468
468
  ref: targetRef,
469
469
  appearance: appearance,
470
- input: true,
470
+ editable: true,
471
471
  inputValue: value ? formatDate(value, formatStr) : '',
472
472
  inputPlaceholder: typeof placeholder === 'string' && placeholder ? placeholder : formatStr,
473
473
  inputMask: _utils.DateUtils.getDateMask(formatStr),
@@ -624,7 +624,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
624
624
  as: toggleAs,
625
625
  ref: targetRef,
626
626
  appearance: appearance,
627
- input: true,
627
+ editable: true,
628
628
  inputMask: _utils.DateUtils.getDateMask(rangeFormatStr),
629
629
  inputValue: value ? getDisplayString(value, true) : '',
630
630
  inputPlaceholder: typeof placeholder === 'string' && placeholder ? placeholder : rangeFormatStr,
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import DisclosureButton from './DisclosureButton';
3
3
  import DisclosureContent from './DisclosureContent';
4
- export declare type DisclosureTrigger = 'click' | 'mouseover';
5
- export interface DisclosureRenderProps extends Pick<React.HTMLAttributes<HTMLElement>, 'onMouseOver' | 'onMouseOut'> {
4
+ export declare type DisclosureTrigger = 'click' | 'hover';
5
+ export interface DisclosureRenderProps extends Pick<React.HTMLAttributes<HTMLElement>, 'onMouseEnter' | 'onMouseLeave'> {
6
6
  open: boolean;
7
7
  }
8
8
  export interface DisclosureProps {
@@ -74,7 +74,7 @@ var Disclosure = /*#__PURE__*/_react.default.memo(function (props) {
74
74
  });
75
75
  }
76
76
  });
77
- var onMouseOver = (0, _react.useCallback)(function (event) {
77
+ var onMouseEnter = (0, _react.useCallback)(function (event) {
78
78
  if (!open) {
79
79
  dispatch({
80
80
  type: _DisclosureContext.DisclosureActionTypes.Show
@@ -82,7 +82,7 @@ var Disclosure = /*#__PURE__*/_react.default.memo(function (props) {
82
82
  onToggle === null || onToggle === void 0 ? void 0 : onToggle(true, event);
83
83
  }
84
84
  }, [open, dispatch, onToggle]);
85
- var onMouseOut = (0, _react.useCallback)(function (event) {
85
+ var onMouseLeave = (0, _react.useCallback)(function (event) {
86
86
  if (open) {
87
87
  dispatch({
88
88
  type: _DisclosureContext.DisclosureActionTypes.Hide
@@ -113,13 +113,13 @@ var Disclosure = /*#__PURE__*/_react.default.memo(function (props) {
113
113
  open: open
114
114
  };
115
115
 
116
- if (trigger.includes('mouseover')) {
117
- renderProps.onMouseOver = onMouseOver;
118
- renderProps.onMouseOut = onMouseOut;
116
+ if (trigger.includes('hover')) {
117
+ renderProps.onMouseEnter = onMouseEnter;
118
+ renderProps.onMouseLeave = onMouseLeave;
119
119
  }
120
120
 
121
121
  return renderProps;
122
- }, [open, trigger, onMouseOver, onMouseOut]);
122
+ }, [open, trigger, onMouseEnter, onMouseLeave]);
123
123
  return /*#__PURE__*/_react.default.createElement(_DisclosureContext.default.Provider, {
124
124
  value: contextValue
125
125
  }, children(renderProps, containerElementRef));
@@ -15,17 +15,17 @@ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runt
15
15
 
16
16
  var _react = _interopRequireWildcard(require("react"));
17
17
 
18
- var _omit2 = _interopRequireDefault(require("lodash/omit"));
18
+ var _propTypes = _interopRequireDefault(require("prop-types"));
19
19
 
20
- var _utils = require("../utils");
20
+ var _omit2 = _interopRequireDefault(require("lodash/omit"));
21
21
 
22
- var _propTypes = _interopRequireDefault(require("prop-types"));
22
+ var _isNil = _interopRequireDefault(require("lodash/isNil"));
23
23
 
24
24
  var _AngleLeft = _interopRequireDefault(require("@rsuite/icons/legacy/AngleLeft"));
25
25
 
26
26
  var _AngleRight = _interopRequireDefault(require("@rsuite/icons/legacy/AngleRight"));
27
27
 
28
- var _useCustom2 = _interopRequireDefault(require("../utils/useCustom"));
28
+ var _utils = require("../utils");
29
29
 
30
30
  var _ = require(".");
31
31
 
@@ -68,7 +68,7 @@ var NavbarDropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props,
68
68
  openDirection = _props$openDirection === void 0 ? 'end' : _props$openDirection,
69
69
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["onToggle", "eventKey", "title", "classPrefix", "children", "openDirection"]);
70
70
 
71
- var _useCustom = (0, _useCustom2.default)('DropdownMenu'),
71
+ var _useCustom = (0, _utils.useCustom)('DropdownMenu'),
72
72
  rtl = _useCustom.rtl;
73
73
 
74
74
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
@@ -94,7 +94,7 @@ var NavbarDropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props,
94
94
  var Icon = rtl ? _AngleLeft.default : _AngleRight.default;
95
95
  return /*#__PURE__*/_react.default.createElement(_Disclosure.default, {
96
96
  hideOnClickOutside: true,
97
- trigger: ['click', 'mouseover'],
97
+ trigger: ['click', 'hover'],
98
98
  onToggle: function onToggle(open, event) {
99
99
  return _onToggle === null || _onToggle === void 0 ? void 0 : _onToggle(open, undefined, event);
100
100
  }
@@ -117,12 +117,18 @@ var NavbarDropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props,
117
117
  open: open,
118
118
  disabled: disabled
119
119
  }));
120
+ var dataAttributes = {
121
+ 'data-event-key': eventKey
122
+ };
123
+
124
+ if (!(0, _isNil.default)(eventKey) && typeof eventKey !== 'string') {
125
+ dataAttributes['data-event-key-type'] = typeof eventKey;
126
+ }
127
+
120
128
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
121
129
  ref: (0, _utils.mergeRefs)(buttonRef, buttonRef),
122
- className: classes,
123
- "data-event-key": eventKey,
124
- "data-event-key-type": typeof eventKey
125
- }, buttonProps), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
130
+ className: classes
131
+ }, dataAttributes, buttonProps), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
126
132
  className: prefix('menu-icon')
127
133
  }), title, /*#__PURE__*/_react.default.createElement(Icon, {
128
134
  className: prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["toggle-icon"])))
@@ -278,56 +278,65 @@ var OverlayTrigger = /*#__PURE__*/_react.default.forwardRef(function (props, ref
278
278
  var preventDefault = (0, _react.useCallback)(function (event) {
279
279
  event.preventDefault();
280
280
  }, []);
281
- var triggerEvents = {
282
- onClick: onClick,
283
- onContextMenu: onContextMenu,
284
- onMouseOver: onMouseOver,
285
- onMouseOut: onMouseOut,
286
- onFocus: onFocus,
287
- onBlur: onBlur,
288
- onMouseMove: onMouseMove
289
- };
281
+ var triggerEvents = (0, _react.useMemo)(function () {
282
+ // Pass events by props
283
+ var events = {
284
+ onClick: onClick,
285
+ onContextMenu: onContextMenu,
286
+ onMouseOver: onMouseOver,
287
+ onMouseOut: onMouseOut,
288
+ onFocus: onFocus,
289
+ onBlur: onBlur,
290
+ onMouseMove: onMouseMove
291
+ }; // When trigger is disabled, no predefined event listeners are added.
292
+
293
+ if (disabled || readOnly || plaintext || trigger === 'none') {
294
+ return events;
295
+ } // Get the cursor position through onMouseMove.
296
+ // https://rsuitejs.com/components/tooltip/#follow-cursor
297
+
298
+
299
+ if (followCursor) {
300
+ events.onMouseMove = (0, _utils.createChainedFunction)(handledMoveOverlay, onMouseMove);
301
+ } // The `click` event is usually used in `toggle` scenarios.
302
+ // The first click will open and the second click will close.
303
+
290
304
 
291
- if (!disabled && !readOnly && !plaintext) {
292
305
  if ((0, _isOneOf.default)('click', trigger)) {
293
- triggerEvents.onClick = (0, _utils.createChainedFunction)(handleOpenState, triggerEvents.onClick);
294
- }
306
+ events.onClick = (0, _utils.createChainedFunction)(handleOpenState, events.onClick);
307
+ return events;
308
+ } // The difference between it and the click event is that it does not trigger the close.
295
309
 
296
- if ((0, _isOneOf.default)('contextMenu', trigger)) {
297
- triggerEvents.onContextMenu = (0, _utils.createChainedFunction)(preventDefault, handleOpenState, triggerEvents.onContextMenu);
298
- }
299
310
 
300
311
  if ((0, _isOneOf.default)('active', trigger)) {
301
- triggerEvents.onClick = (0, _utils.createChainedFunction)(handleDelayedOpen, triggerEvents.onClick);
312
+ events.onClick = (0, _utils.createChainedFunction)(handleDelayedOpen, events.onClick);
313
+ return events;
302
314
  }
303
315
 
304
316
  if ((0, _isOneOf.default)('hover', trigger)) {
305
- var onMouseOverListener = null;
306
- var onMouseOutListener = null;
307
-
308
- if (trigger !== 'none') {
309
- onMouseOverListener = function onMouseOverListener(e) {
310
- return onMouseEventHandler(handleDelayedOpen, e);
311
- };
317
+ var onMouseOverListener = function onMouseOverListener(e) {
318
+ return onMouseEventHandler(handleDelayedOpen, e);
319
+ };
312
320
 
313
- onMouseOutListener = function onMouseOutListener(e) {
314
- return onMouseEventHandler(handleDelayedClose, e);
315
- };
316
- }
321
+ var onMouseOutListener = function onMouseOutListener(e) {
322
+ return onMouseEventHandler(handleDelayedClose, e);
323
+ };
317
324
 
318
- triggerEvents.onMouseOver = (0, _utils.createChainedFunction)(onMouseOverListener, onMouseOver);
319
- triggerEvents.onMouseOut = (0, _utils.createChainedFunction)(onMouseOutListener, onMouseOut);
325
+ events.onMouseOver = (0, _utils.createChainedFunction)(onMouseOverListener, events.onMouseOver);
326
+ events.onMouseOut = (0, _utils.createChainedFunction)(onMouseOutListener, events.onMouseOut);
320
327
  }
321
328
 
322
329
  if ((0, _isOneOf.default)('focus', trigger)) {
323
- triggerEvents.onFocus = (0, _utils.createChainedFunction)(handleDelayedOpen, onFocus);
324
- triggerEvents.onBlur = (0, _utils.createChainedFunction)(handleDelayedClose, onBlur);
330
+ events.onFocus = (0, _utils.createChainedFunction)(handleDelayedOpen, events.onFocus);
331
+ events.onBlur = (0, _utils.createChainedFunction)(handleDelayedClose, events.onBlur);
325
332
  }
326
333
 
327
- if (trigger !== 'none' && followCursor) {
328
- triggerEvents.onMouseMove = (0, _utils.createChainedFunction)(handledMoveOverlay, onMouseMove);
334
+ if ((0, _isOneOf.default)('contextMenu', trigger)) {
335
+ events.onContextMenu = (0, _utils.createChainedFunction)(preventDefault, handleOpenState, events.onContextMenu);
329
336
  }
330
- }
337
+
338
+ return events;
339
+ }, [disabled, followCursor, handleDelayedClose, handleDelayedOpen, handleOpenState, handledMoveOverlay, onBlur, onClick, onContextMenu, onFocus, onMouseMove, onMouseOut, onMouseOver, plaintext, preventDefault, readOnly, trigger]);
331
340
 
332
341
  var renderOverlay = function renderOverlay() {
333
342
  var overlayProps = (0, _extends2.default)({}, rest, {
@@ -15,7 +15,7 @@ export interface PickerToggleProps extends ToggleButtonProps {
15
15
  readOnly?: boolean;
16
16
  plaintext?: boolean;
17
17
  tabIndex?: number;
18
- input?: boolean;
18
+ editable?: boolean;
19
19
  inputPlaceholder?: string;
20
20
  inputMask?: (string | RegExp)[];
21
21
  onInputChange?: (value: string, event: React.ChangeEvent) => void;
@@ -51,12 +51,12 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
51
51
  readOnly = props.readOnly,
52
52
  plaintext = props.plaintext,
53
53
  hasValue = props.hasValue,
54
+ editable = props.editable,
54
55
  cleanableProp = props.cleanable,
55
56
  _props$tabIndex = props.tabIndex,
56
- tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,
57
+ tabIndexProp = _props$tabIndex === void 0 ? editable ? -1 : 0 : _props$tabIndex,
57
58
  id = props.id,
58
59
  value = props.value,
59
- input = props.input,
60
60
  inputPlaceholder = props.inputPlaceholder,
61
61
  inputValueProp = props.inputValue,
62
62
  _props$inputMask = props.inputMask,
@@ -74,8 +74,9 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
74
74
  _props$caretAs = props.caretAs,
75
75
  caretAs = _props$caretAs === void 0 ? caretComponent : _props$caretAs,
76
76
  label = props.label,
77
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["active", "as", "classPrefix", "children", "caret", "className", "disabled", "readOnly", "plaintext", "hasValue", "cleanable", "tabIndex", "id", "value", "input", "inputPlaceholder", "inputValue", "inputMask", "onInputChange", "onInputPressEnter", "onInputBlur", "onInputFocus", "onClean", "onFocus", "onBlur", "placement", "caretComponent", "caretAs", "label"]);
77
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["active", "as", "classPrefix", "children", "caret", "className", "disabled", "readOnly", "plaintext", "hasValue", "editable", "cleanable", "tabIndex", "id", "value", "inputPlaceholder", "inputValue", "inputMask", "onInputChange", "onInputPressEnter", "onInputBlur", "onInputFocus", "onClean", "onFocus", "onBlur", "placement", "caretComponent", "caretAs", "label"]);
78
78
  var inputRef = (0, _react.useRef)(null);
79
+ var comboboxRef = (0, _react.useRef)(null);
79
80
 
80
81
  var _useState = (0, _react.useState)(false),
81
82
  activeState = _useState[0],
@@ -95,30 +96,46 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
95
96
  setInputValue = _useState2[1];
96
97
 
97
98
  (0, _react.useEffect)(function () {
98
- var value = getInputValue();
99
- setInputValue(value);
99
+ if (comboboxRef.current) {
100
+ var _value = getInputValue();
101
+
102
+ setInputValue(_value);
103
+ }
100
104
  }, [getInputValue]);
101
105
  var classes = merge(className, withClassPrefix({
102
106
  active: activeProp || activeState
103
107
  }));
104
108
  var handleFocus = (0, _react.useCallback)(function (event) {
105
109
  setActive(true);
106
- onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
107
110
 
108
- if (input) {
109
- var _inputRef$current;
111
+ if (editable) {
112
+ // Avoid firing the onFocus event twice when DatePicker and DateRangePicker allow keyboard input.
113
+ if (event.target === inputRef.current) {
114
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
115
+ } // Force the input to be focused and editable.
110
116
 
111
- (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
117
+
118
+ if (document.activeElement === comboboxRef.current) {
119
+ var _inputRef$current;
120
+
121
+ (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
122
+ }
123
+ } else {
124
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
112
125
  }
113
- }, [input, onFocus]);
126
+ }, [editable, onFocus]);
114
127
  var handleBlur = (0, _react.useCallback)(function (event) {
115
- if (inputRef.current && document.activeElement !== inputRef.current) {
128
+ if (inputRef.current && !editable) {
129
+ setActive(false);
130
+ } // When activeElement is an input, it remains active.
131
+
132
+
133
+ if (editable && inputRef.current && document.activeElement !== inputRef.current) {
116
134
  setActive(false);
117
- inputRef.current.blur();
118
135
  }
119
136
 
120
137
  onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
121
- }, [onBlur]);
138
+ }, [editable, onBlur]);
122
139
 
123
140
  var handleInputBlur = function handleInputBlur(event) {
124
141
  setInputValue(getInputValue());
@@ -126,10 +143,13 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
126
143
  };
127
144
 
128
145
  var handleClean = (0, _react.useCallback)(function (event) {
146
+ var _inputRef$current2, _comboboxRef$current;
147
+
129
148
  event.stopPropagation();
130
- onClean === null || onClean === void 0 ? void 0 : onClean(event);
131
- setActive(false);
132
- }, [onClean]);
149
+ onClean === null || onClean === void 0 ? void 0 : onClean(event); // When the value is cleared, the current component is still in focus.
150
+
151
+ editable ? (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.focus() : (_comboboxRef$current = comboboxRef.current) === null || _comboboxRef$current === void 0 ? void 0 : _comboboxRef$current.focus();
152
+ }, [editable, onClean]);
133
153
  var handleInputChange = (0, _react.useCallback)(function (event) {
134
154
  var _event$target;
135
155
 
@@ -138,10 +158,18 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
138
158
  onInputChange === null || onInputChange === void 0 ? void 0 : onInputChange(value, event);
139
159
  }, [onInputChange]);
140
160
  var handleInputKeyDown = (0, _react.useCallback)(function (event) {
141
- if (input && event.key === _utils.KEY_VALUES.ENTER) {
161
+ if (editable && event.key === _utils.KEY_VALUES.ENTER) {
142
162
  onInputPressEnter === null || onInputPressEnter === void 0 ? void 0 : onInputPressEnter(event);
143
163
  }
144
- }, [onInputPressEnter, input]);
164
+ }, [onInputPressEnter, editable]);
165
+ var renderInput = (0, _react.useCallback)(function (ref, props) {
166
+ return /*#__PURE__*/_react.default.createElement("input", (0, _extends2.default)({
167
+ ref: (0, _utils.mergeRefs)(inputRef, ref),
168
+ style: {
169
+ pointerEvents: editable ? undefined : 'none'
170
+ }
171
+ }, props));
172
+ }, [editable]);
145
173
  var ToggleCaret = (0, _useToggleCaret.default)(placement);
146
174
  var Caret = caretAs !== null && caretAs !== void 0 ? caretAs : ToggleCaret;
147
175
 
@@ -154,7 +182,8 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
154
182
 
155
183
  var showCleanButton = cleanableProp && hasValue && !readOnly; // When the component is read-only or disabled, the input is not interactive.
156
184
 
157
- var inputFocused = readOnly || disabled ? false : input && activeState;
185
+ var inputFocused = readOnly || disabled ? false : editable && activeState;
186
+ var tabIndex = disabled ? undefined : tabIndexProp;
158
187
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
159
188
  role: "combobox",
160
189
  "aria-haspopup": "listbox",
@@ -162,9 +191,9 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
162
191
  "aria-disabled": disabled,
163
192
  "aria-owns": id ? id + "-listbox" : undefined
164
193
  }, rest, {
165
- ref: ref,
194
+ ref: (0, _utils.mergeRefs)(comboboxRef, ref),
166
195
  disabled: disabled,
167
- tabIndex: disabled ? undefined : tabIndex,
196
+ tabIndex: tabIndex,
168
197
  className: classes,
169
198
  onFocus: !disabled ? handleFocus : null // The debounce is set to 200 to solve the flicker caused by the switch between input and div.
170
199
  ,
@@ -181,16 +210,12 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
181
210
  readOnly: !inputFocused,
182
211
  disabled: disabled,
183
212
  "aria-controls": id ? id + "-listbox" : undefined,
184
- tabIndex: -1,
213
+ tabIndex: editable ? 0 : -1,
185
214
  className: prefix('textbox', {
186
215
  'read-only': !inputFocused
187
216
  }),
188
217
  placeholder: inputPlaceholder,
189
- render: function render(ref, props) {
190
- return /*#__PURE__*/_react.default.createElement("input", (0, _extends2.default)({
191
- ref: (0, _utils.mergeRefs)(inputRef, ref)
192
- }, props));
193
- }
218
+ render: renderInput
194
219
  }), children ? /*#__PURE__*/_react.default.createElement("span", {
195
220
  className: prefix(hasValue ? 'value' : 'placeholder'),
196
221
  "aria-placeholder": typeof children === 'string' ? children : undefined
File without changes
@@ -10939,6 +10939,7 @@ textarea.rs-picker-search-input {
10939
10939
  color: var(--rs-text-primary);
10940
10940
  background-color: #fff;
10941
10941
  background-color: var(--rs-input-bg);
10942
+ outline: none;
10942
10943
  }
10943
10944
  .rs-picker-toggle.rs-btn-lg .rs-picker-toggle-textbox {
10944
10945
  padding-right: 14px;
@@ -10951,7 +10952,6 @@ textarea.rs-picker-search-input {
10951
10952
  }
10952
10953
  .rs-picker-toggle-read-only {
10953
10954
  opacity: 0;
10954
- pointer-events: none;
10955
10955
  }
10956
10956
  .rs-picker-default .rs-btn,
10957
10957
  .rs-picker-default .rs-picker-toggle {