rsuite 5.15.2 → 5.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/Form/styles/mixin.less +1 -1
  3. package/InputGroup/styles/index.less +8 -4
  4. package/Picker/styles/index.less +6 -0
  5. package/Slider/styles/index.less +2 -1
  6. package/TreePicker/styles/index.less +0 -3
  7. package/cjs/Cascader/utils.js +3 -5
  8. package/cjs/CheckPicker/CheckPicker.d.ts +2 -2
  9. package/cjs/CheckPicker/test/CheckPicker.test.js +15 -0
  10. package/cjs/CheckTreePicker/CheckTreePicker.d.ts +2 -2
  11. package/cjs/CheckTreePicker/test/CheckTreePicker.test.d.ts +1 -0
  12. package/cjs/CheckTreePicker/test/CheckTreePicker.test.js +15 -0
  13. package/cjs/CheckTreePicker/utils.js +3 -1
  14. package/cjs/CustomProvider/CustomProvider.js +6 -3
  15. package/cjs/DateRangePicker/Calendar.d.ts +0 -1
  16. package/cjs/DateRangePicker/Calendar.js +1 -39
  17. package/cjs/DateRangePicker/DateRangePicker.js +22 -22
  18. package/cjs/DateRangePicker/utils.d.ts +2 -1
  19. package/cjs/DateRangePicker/utils.js +12 -3
  20. package/cjs/InputPicker/InputPicker.d.ts +2 -2
  21. package/cjs/InputPicker/test/InputPicker.test.d.ts +1 -0
  22. package/cjs/InputPicker/test/InputPicker.test.js +15 -0
  23. package/cjs/MultiCascader/utils.js +3 -2
  24. package/cjs/Overlay/OverlayTrigger.js +1 -1
  25. package/cjs/Panel/Panel.js +8 -7
  26. package/cjs/Picker/PickerToggle.d.ts +1 -0
  27. package/cjs/Picker/PickerToggle.js +5 -2
  28. package/cjs/SelectPicker/SelectPicker.d.ts +8 -2
  29. package/cjs/SelectPicker/test/SelectPicker.test.js +30 -0
  30. package/cjs/TreePicker/TreePicker.d.ts +2 -2
  31. package/cjs/TreePicker/test/TreePicker.test.d.ts +1 -0
  32. package/cjs/TreePicker/test/TreePicker.test.js +15 -0
  33. package/cjs/utils/attachParent.d.ts +1 -0
  34. package/cjs/utils/attachParent.js +15 -0
  35. package/cjs/utils/treeUtils.js +3 -2
  36. package/cjs/utils/usePortal.d.ts +4 -2
  37. package/cjs/utils/usePortal.js +40 -14
  38. package/dist/rsuite-rtl.css +34 -27
  39. package/dist/rsuite-rtl.min.css +1 -1
  40. package/dist/rsuite-rtl.min.css.map +1 -1
  41. package/dist/rsuite.css +34 -27
  42. package/dist/rsuite.js +28 -17
  43. package/dist/rsuite.js.map +1 -1
  44. package/dist/rsuite.min.css +1 -1
  45. package/dist/rsuite.min.css.map +1 -1
  46. package/dist/rsuite.min.js +1 -1
  47. package/dist/rsuite.min.js.map +1 -1
  48. package/esm/Cascader/utils.js +2 -4
  49. package/esm/CheckPicker/CheckPicker.d.ts +2 -2
  50. package/esm/CheckPicker/test/CheckPicker.test.js +14 -0
  51. package/esm/CheckTreePicker/CheckTreePicker.d.ts +2 -2
  52. package/esm/CheckTreePicker/test/CheckTreePicker.test.d.ts +1 -0
  53. package/esm/CheckTreePicker/test/CheckTreePicker.test.js +10 -0
  54. package/esm/CheckTreePicker/utils.js +2 -1
  55. package/esm/CustomProvider/CustomProvider.js +6 -3
  56. package/esm/DateRangePicker/Calendar.d.ts +0 -1
  57. package/esm/DateRangePicker/Calendar.js +2 -41
  58. package/esm/DateRangePicker/DateRangePicker.js +22 -22
  59. package/esm/DateRangePicker/utils.d.ts +2 -1
  60. package/esm/DateRangePicker/utils.js +12 -3
  61. package/esm/InputPicker/InputPicker.d.ts +2 -2
  62. package/esm/InputPicker/test/InputPicker.test.d.ts +1 -0
  63. package/esm/InputPicker/test/InputPicker.test.js +10 -0
  64. package/esm/MultiCascader/utils.js +2 -2
  65. package/esm/Overlay/OverlayTrigger.js +1 -1
  66. package/esm/Panel/Panel.js +8 -7
  67. package/esm/Picker/PickerToggle.d.ts +1 -0
  68. package/esm/Picker/PickerToggle.js +5 -2
  69. package/esm/SelectPicker/SelectPicker.d.ts +8 -2
  70. package/esm/SelectPicker/test/SelectPicker.test.js +29 -0
  71. package/esm/TreePicker/TreePicker.d.ts +2 -2
  72. package/esm/TreePicker/test/TreePicker.test.d.ts +1 -0
  73. package/esm/TreePicker/test/TreePicker.test.js +10 -0
  74. package/esm/utils/attachParent.d.ts +1 -0
  75. package/esm/utils/attachParent.js +10 -0
  76. package/esm/utils/treeUtils.js +2 -2
  77. package/esm/utils/usePortal.d.ts +4 -2
  78. package/esm/utils/usePortal.js +36 -14
  79. package/package.json +2 -2
@@ -73,7 +73,8 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
73
73
  caretComponent = props.caretComponent,
74
74
  _props$caretAs = props.caretAs,
75
75
  caretAs = _props$caretAs === void 0 ? caretComponent : _props$caretAs,
76
- 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"]);
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
78
  var inputRef = (0, _react.useRef)(null);
78
79
 
79
80
  var _useState = (0, _react.useState)(false),
@@ -193,7 +194,9 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
193
194
  }), children ? /*#__PURE__*/_react.default.createElement("span", {
194
195
  className: prefix(hasValue ? 'value' : 'placeholder'),
195
196
  "aria-placeholder": typeof children === 'string' ? children : undefined
196
- }, children) : null, showCleanButton && /*#__PURE__*/_react.default.createElement(_CloseButton.default, {
197
+ }, label && /*#__PURE__*/_react.default.createElement("span", {
198
+ className: prefix('label')
199
+ }, label, ": "), children) : null, showCleanButton && /*#__PURE__*/_react.default.createElement(_CloseButton.default, {
197
200
  className: prefix(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["clean"]))),
198
201
  tabIndex: -1,
199
202
  locale: {
@@ -1,6 +1,6 @@
1
1
  import React, { Ref } from 'react';
2
2
  import { PickerLocale } from '../locales';
3
- import { PickerInstance } from '../Picker';
3
+ import { PickerInstance, PickerToggleProps } from '../Picker';
4
4
  import { FormControlPickerProps, ItemDataType } from '../@types/common';
5
5
  import { ListProps } from 'react-virtualized/dist/commonjs/List';
6
6
  export interface SelectProps<T> {
@@ -40,7 +40,13 @@ export interface MultipleSelectProps<T> extends Omit<SelectProps<T>, 'renderValu
40
40
  /** Custom render selected items */
41
41
  renderValue?: (value: T[], item: ItemDataType<T>[], selectedElement: React.ReactNode) => React.ReactNode;
42
42
  }
43
- export interface SelectPickerProps<T> extends FormControlPickerProps<T, PickerLocale, ItemDataType<T>>, SelectProps<T> {
43
+ export interface SelectPickerProps<T> extends Omit<FormControlPickerProps<T, PickerLocale, ItemDataType<T>>, 'value' | 'defaultValue' | 'onChange'>, SelectProps<T>, Pick<PickerToggleProps, 'caretAs' | 'label'> {
44
+ /** Initial value */
45
+ defaultValue?: T;
46
+ /** Current value of the component. Creates a controlled component */
47
+ value?: T | null;
48
+ /** Called after the value has been changed */
49
+ onChange?: (value: T | null, event: React.SyntheticEvent) => void;
44
50
  }
45
51
  export interface SelectPickerComponent {
46
52
  <T>(props: SelectPickerProps<T> & {
@@ -67,4 +67,34 @@ var pickerRef = /*#__PURE__*/_react.default.createRef();
67
67
  _react.default.createElement(_SelectPicker.default, {
68
68
  ref: pickerRef,
69
69
  data: []
70
+ }); // With a label
71
+
72
+
73
+ /*#__PURE__*/
74
+ _react.default.createElement(_SelectPicker.default, {
75
+ label: "User",
76
+ data: []
77
+ });
78
+
79
+ /*#__PURE__*/
80
+ _react.default.createElement(_SelectPicker.default, {
81
+ data: [{
82
+ label: 'Ascending',
83
+ value: 'asc'
84
+ }, {
85
+ label: 'Descending',
86
+ value: 'desc'
87
+ }],
88
+ value: "asc",
89
+ onChange: function onChange(value) {
90
+ (0, _tsExpect.expectType)(value);
91
+ }
92
+ });
93
+
94
+ /*#__PURE__*/
95
+ _react.default.createElement(_SelectPicker.default, {
96
+ caretAs: function caretAs() {
97
+ return /*#__PURE__*/_react.default.createElement("div", null);
98
+ },
99
+ data: []
70
100
  });
@@ -1,10 +1,10 @@
1
1
  import React from 'react';
2
2
  import { PickerLocale } from '../locales';
3
- import { PickerComponent } from '../Picker';
3
+ import { PickerComponent, PickerToggleProps } from '../Picker';
4
4
  import { TreeDragProps, TreeBaseProps } from '../Tree/Tree';
5
5
  import { FormControlPickerProps, ItemDataType } from '../@types/common';
6
6
  export declare const maxTreeHeight = 320;
7
- export interface TreePickerProps<T = number | string> extends TreeBaseProps<T, ItemDataType>, TreeDragProps, FormControlPickerProps<T, PickerLocale, ItemDataType> {
7
+ export interface TreePickerProps<T = number | string> extends TreeBaseProps<T, ItemDataType>, TreeDragProps, FormControlPickerProps<T, PickerLocale, ItemDataType>, Pick<PickerToggleProps, 'caretAs'> {
8
8
  /** The height of Dropdown */
9
9
  height?: number;
10
10
  /** Tree node cascade */
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _react = _interopRequireDefault(require("react"));
6
+
7
+ var _TreePicker = _interopRequireDefault(require("../TreePicker"));
8
+
9
+ /*#__PURE__*/
10
+ _react.default.createElement(_TreePicker.default, {
11
+ caretAs: function caretAs() {
12
+ return /*#__PURE__*/_react.default.createElement("div", null);
13
+ },
14
+ data: []
15
+ });
@@ -0,0 +1 @@
1
+ export declare function attachParent<T>(data: T, parent: T): T;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.attachParent = attachParent;
5
+
6
+ function attachParent(data, parent) {
7
+ // mark "parent" unenumable
8
+ Object.defineProperty(data, 'parent', {
9
+ value: parent,
10
+ writable: false,
11
+ enumerable: false,
12
+ configurable: true
13
+ });
14
+ return data;
15
+ }
@@ -66,6 +66,8 @@ var _reactToString = _interopRequireDefault(require("./reactToString"));
66
66
 
67
67
  var _constants = require("./constants");
68
68
 
69
+ var _attachParent = require("./attachParent");
70
+
69
71
  // gap of tree node
70
72
  var TREE_NODE_GAP = 4;
71
73
  /**
@@ -113,8 +115,7 @@ function flattenTree(tree, childrenKey, executor) {
113
115
 
114
116
  data.forEach(function (item, index) {
115
117
  var node = typeof executor === 'function' ? executor(item, index) : item;
116
- node.parent = parent;
117
- flattenData.push((0, _extends3.default)({}, node));
118
+ flattenData.push((0, _attachParent.attachParent)(node, parent));
118
119
 
119
120
  if (item[childrenKey]) {
120
121
  traverse(item[childrenKey], item);
@@ -1,10 +1,12 @@
1
1
  import React from 'react';
2
2
  interface PortalProps {
3
- id?: string;
4
3
  container?: HTMLElement | (() => HTMLElement | null) | null;
4
+ waitMount?: boolean;
5
5
  }
6
6
  declare function usePortal(props?: PortalProps): {
7
7
  target: HTMLElement | null;
8
- Portal: React.FC<any>;
8
+ Portal: ((props: any) => JSX.Element) | (({ children }: {
9
+ children: React.ReactNode;
10
+ }) => React.ReactPortal | null);
9
11
  };
10
12
  export default usePortal;
@@ -1,41 +1,67 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
+
3
5
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
6
 
5
7
  exports.__esModule = true;
6
8
  exports.default = void 0;
7
9
 
8
- var _react = require("react");
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _react = _interopRequireWildcard(require("react"));
9
13
 
10
14
  var _reactDom = require("react-dom");
11
15
 
12
16
  var _canUseDOM = _interopRequireDefault(require("dom-lib/canUseDOM"));
13
17
 
18
+ var MountedPortal = /*#__PURE__*/_react.default.memo(function (_ref) {
19
+ var children = _ref.children,
20
+ container = _ref.container;
21
+
22
+ var _useState = (0, _react.useState)(false),
23
+ mounted = _useState[0],
24
+ setMounted = _useState[1];
25
+
26
+ (0, _react.useEffect)(function () {
27
+ return setMounted(true);
28
+ }, []);
29
+
30
+ if (container && mounted) {
31
+ return /*#__PURE__*/(0, _reactDom.createPortal)(children, container);
32
+ }
33
+
34
+ return null;
35
+ });
36
+
14
37
  function usePortal(props) {
15
38
  if (props === void 0) {
16
39
  props = {};
17
40
  }
18
41
 
19
42
  var _props = props,
20
- id = _props.id,
21
- container = _props.container;
43
+ container = _props.container,
44
+ _props$waitMount = _props.waitMount,
45
+ waitMount = _props$waitMount === void 0 ? false : _props$waitMount;
22
46
  var rootElemRef = (0, _react.useRef)(_canUseDOM.default ? document.body : null);
23
47
  (0, _react.useEffect)(function () {
24
- var containerElement = typeof container === 'function' ? container() : container; // Look for existing target dom element to append to
25
-
26
- var existingParent = id && document.querySelector("#" + id); // Parent is either a new root or the existing dom element
48
+ var containerElement = typeof container === 'function' ? container() : container; // Parent is either a new root or the existing dom element
27
49
 
28
- var parentElement = containerElement || existingParent || document.body;
50
+ var parentElement = containerElement || document.body;
29
51
  rootElemRef.current = parentElement;
30
- }, [rootElemRef, container, id]);
31
- var Portal = (0, _react.useCallback)(function (_ref) {
32
- var children = _ref.children;
33
- if (rootElemRef.current != null) return /*#__PURE__*/(0, _reactDom.createPortal)(children, rootElemRef.current);
34
- return null;
35
- }, [rootElemRef]);
52
+ }, [rootElemRef, container]);
53
+ var Portal = (0, _react.useCallback)(function (_ref2) {
54
+ var children = _ref2.children;
55
+ return rootElemRef.current != null ? /*#__PURE__*/(0, _reactDom.createPortal)(children, rootElemRef.current) : null;
56
+ }, []);
57
+ var WaitMountPortal = (0, _react.useCallback)(function (props) {
58
+ return /*#__PURE__*/_react.default.createElement(MountedPortal, (0, _extends2.default)({
59
+ container: rootElemRef.current
60
+ }, props));
61
+ }, []);
36
62
  return {
37
63
  target: rootElemRef.current,
38
- Portal: Portal
64
+ Portal: waitMount ? WaitMountPortal : Portal
39
65
  };
40
66
  }
41
67
 
@@ -7875,10 +7875,11 @@ textarea.rs-input {
7875
7875
  outline: 0;
7876
7876
  }
7877
7877
  .rs-input:focus {
7878
- -webkit-box-shadow: 0 0 0 3px rgba(52, 152, 255, 0.25);
7879
- -webkit-box-shadow: var(--rs-state-focus-shadow);
7880
- box-shadow: 0 0 0 3px rgba(52, 152, 255, 0.25);
7881
- box-shadow: var(--rs-state-focus-shadow);
7878
+ outline: 3px solid rgba(52, 152, 255, 0.25);
7879
+ outline: 3px solid var(--rs-color-focus-ring);
7880
+ }
7881
+ .rs-theme-high-contrast .rs-input:focus {
7882
+ outline-offset: 2px;
7882
7883
  }
7883
7884
  .rs-input:disabled {
7884
7885
  background-color: #f7f7fa;
@@ -7962,10 +7963,15 @@ textarea.rs-input-sm {
7962
7963
  }
7963
7964
  .rs-input-group:not(.rs-input-group-disabled).rs-input-group-focus,
7964
7965
  .rs-input-group:focus-within {
7965
- -webkit-box-shadow: 0 0 0 3px rgba(52, 152, 255, 0.25);
7966
- -webkit-box-shadow: var(--rs-state-focus-shadow);
7967
- box-shadow: 0 0 0 3px rgba(52, 152, 255, 0.25);
7968
- box-shadow: var(--rs-state-focus-shadow);
7966
+ outline: 3px solid rgba(52, 152, 255, 0.25);
7967
+ outline: 3px solid var(--rs-color-focus-ring);
7968
+ }
7969
+ .rs-theme-high-contrast .rs-input-group:not(.rs-input-group-disabled).rs-input-group-focus,
7970
+ .rs-theme-high-contrast .rs-input-group:focus-within {
7971
+ outline-offset: 2px;
7972
+ }
7973
+ .rs-input-group .rs-input-group {
7974
+ outline: none !important;
7969
7975
  }
7970
7976
  .rs-input-group .rs-input-number,
7971
7977
  .rs-input-group .rs-input-group-addon,
@@ -7973,14 +7979,12 @@ textarea.rs-input-sm {
7973
7979
  .rs-input-group .rs-picker-date .rs-picker-toggle {
7974
7980
  border: none;
7975
7981
  border-radius: 0;
7976
- -webkit-box-shadow: none;
7977
- box-shadow: none;
7982
+ outline: none;
7978
7983
  }
7979
7984
  .rs-input-group:not(.rs-input-group-inside) .rs-input {
7980
7985
  border: none;
7981
7986
  border-radius: 0;
7982
- -webkit-box-shadow: none;
7983
- box-shadow: none;
7987
+ outline: none;
7984
7988
  }
7985
7989
  .rs-input-group:not(.rs-input-group-inside) .rs-input-number:not(:last-child) .rs-input-number-btn-group-vertical {
7986
7990
  border-radius: 0;
@@ -8094,8 +8098,7 @@ textarea.rs-input-sm {
8094
8098
  line-height: 1.42857143;
8095
8099
  }
8096
8100
  .rs-input-group.rs-input-group-inside .rs-input-group-btn:focus {
8097
- -webkit-box-shadow: none;
8098
- box-shadow: none;
8101
+ outline: none;
8099
8102
  }
8100
8103
  .rs-input-group.rs-input-group-inside .rs-input-group-btn:first-child {
8101
8104
  border-bottom-right-radius: 6px;
@@ -11574,6 +11577,10 @@ textarea.rs-picker-search-input {
11574
11577
  .rs-picker-subtle.rs-picker-disabled .rs-picker-toggle:active::after {
11575
11578
  display: none;
11576
11579
  }
11580
+ .rs-picker-toggle-label {
11581
+ color: #575757;
11582
+ color: var(--rs-text-primary);
11583
+ }
11577
11584
  .rs-picker-toggle-value {
11578
11585
  display: block;
11579
11586
  overflow: hidden;
@@ -11649,6 +11656,13 @@ textarea.rs-picker-search-input {
11649
11656
  overflow: hidden;
11650
11657
  -webkit-transition: none;
11651
11658
  transition: none;
11659
+ display: -webkit-box;
11660
+ display: -ms-flexbox;
11661
+ display: flex;
11662
+ -webkit-box-orient: vertical;
11663
+ -webkit-box-direction: normal;
11664
+ -ms-flex-direction: column;
11665
+ flex-direction: column;
11652
11666
  /* stylelint-disable-next-line */
11653
11667
  }
11654
11668
  .rs-theme-high-contrast .rs-picker-menu {
@@ -11725,10 +11739,11 @@ textarea.rs-picker-menu .rs-picker-search-bar .rs-picker-search-bar-input {
11725
11739
  outline: 0;
11726
11740
  }
11727
11741
  .rs-picker-menu .rs-picker-search-bar .rs-picker-search-bar-input:focus {
11728
- -webkit-box-shadow: 0 0 0 3px rgba(52, 152, 255, 0.25);
11729
- -webkit-box-shadow: var(--rs-state-focus-shadow);
11730
- box-shadow: 0 0 0 3px rgba(52, 152, 255, 0.25);
11731
- box-shadow: var(--rs-state-focus-shadow);
11742
+ outline: 3px solid rgba(52, 152, 255, 0.25);
11743
+ outline: 3px solid var(--rs-color-focus-ring);
11744
+ }
11745
+ .rs-theme-high-contrast .rs-picker-menu .rs-picker-search-bar .rs-picker-search-bar-input:focus {
11746
+ outline-offset: 2px;
11732
11747
  }
11733
11748
  .rs-picker-menu .rs-picker-search-bar .rs-picker-search-bar-input:disabled {
11734
11749
  background-color: #f7f7fa;
@@ -13849,6 +13864,7 @@ textarea.rs-picker-menu .rs-picker-search-bar .rs-picker-search-bar-input {
13849
13864
  .rs-slider-handle {
13850
13865
  position: absolute;
13851
13866
  top: -50%;
13867
+ outline: none;
13852
13868
  }
13853
13869
  .rs-slider-handle::before {
13854
13870
  content: '';
@@ -15721,15 +15737,6 @@ textarea.rs-picker-menu .rs-picker-search-bar .rs-picker-search-bar-input {
15721
15737
  margin-right: -13px;
15722
15738
  border-right: 1px solid rgba(0, 0, 0, 0.1);
15723
15739
  }
15724
- .rs-picker-menu {
15725
- display: -webkit-box;
15726
- display: -ms-flexbox;
15727
- display: flex;
15728
- -webkit-box-orient: vertical;
15729
- -webkit-box-direction: normal;
15730
- -ms-flex-direction: column;
15731
- flex-direction: column;
15732
- }
15733
15740
  .rs-picker-menu.rs-tree-menu {
15734
15741
  padding-top: 12px;
15735
15742
  }