rsuite 5.37.0 → 5.37.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [5.37.2](https://github.com/rsuite/rsuite/compare/v5.37.1...v5.37.2) (2023-07-28)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **CheckPicker:** wrong padding of grouped options ([#3306](https://github.com/rsuite/rsuite/issues/3306)) ([03ca6bf](https://github.com/rsuite/rsuite/commit/03ca6bff626146d44b1dd9ca1f931a984ad3103a))
6
+ - **Overlay:** type error on OverlayTriggerProps ([#3307](https://github.com/rsuite/rsuite/issues/3307)) ([4a2e28e](https://github.com/rsuite/rsuite/commit/4a2e28e2412a6ffebcb9ad03a99a808f4d9ee3ee))
7
+ - **RadioGroup:** unexpected wrapped text in picker appearance ([#3303](https://github.com/rsuite/rsuite/issues/3303)) ([c5aa81a](https://github.com/rsuite/rsuite/commit/c5aa81affab3333e6a29189d69c071d9208fbba8))
8
+
9
+ ## [5.37.1](https://github.com/rsuite/rsuite/compare/v5.37.0...v5.37.1) (2023-07-21)
10
+
11
+ ### Bug Fixes
12
+
13
+ - **SelectPicker:** wrong padding for grouped options ([#3298](https://github.com/rsuite/rsuite/issues/3298)) ([e929f74](https://github.com/rsuite/rsuite/commit/e929f74273092855503f306f2e7e3362c716e574))
14
+
1
15
  # [5.37.0](https://github.com/rsuite/rsuite/compare/v5.36.0...v5.37.0) (2023-07-07)
2
16
 
3
17
  ### Bug Fixes
@@ -15,4 +15,14 @@
15
15
  .rs-check-item.rs-checkbox-checked .rs-checkbox-checker > label {
16
16
  .picker-item-active();
17
17
  }
18
+
19
+ &.rs-picker-check-menu-grouped {
20
+ .rs-check-item .rs-checkbox-checker > label {
21
+ padding-left: 52px;
22
+ }
23
+
24
+ .rs-check-item .rs-checkbox-checker .rs-checkbox-wrapper {
25
+ left: 26px;
26
+ }
27
+ }
18
28
  }
@@ -397,22 +397,20 @@
397
397
  cursor: not-allowed;
398
398
  }
399
399
 
400
- .rs-checkbox-wrapper {
401
- left: @picker-item-content-padding-horizontal;
402
-
403
- .grouped &,
404
- .@{ckpns}-menu-group-children & {
405
- left: (
406
- @picker-item-content-padding-horizontal + @picker-children-check-item-padding-left
407
- );
408
- }
409
- }
410
-
411
400
  .grouped &,
412
401
  .@{ckpns}-menu-group-children & {
413
402
  padding-left: @picker-check-item-content-padding-left +
414
403
  @picker-children-check-item-padding-left;
415
404
  }
416
405
  }
406
+
407
+ .rs-checkbox-wrapper {
408
+ left: @picker-item-content-padding-horizontal;
409
+
410
+ .grouped &,
411
+ .@{ckpns}-menu-group-children & {
412
+ left: (@picker-item-content-padding-horizontal + @picker-children-check-item-padding-left);
413
+ }
414
+ }
417
415
  }
418
416
  }
@@ -49,6 +49,7 @@
49
49
 
50
50
  .rs-radio-checker > label {
51
51
  display: inline-block;
52
+ white-space: nowrap;
52
53
  font-size: @font-size-base;
53
54
  line-height: @line-height-base;
54
55
  border-radius: 0;
@@ -11,6 +11,10 @@
11
11
  .picker-menu-group-common(picker);
12
12
  .picker-menu-group-title(picker);
13
13
  .picker-menu-group-closed(picker);
14
+
15
+ .rs-picker-menu-group ~ [role='option'] > .rs-picker-select-menu-item {
16
+ padding-left: 26px;
17
+ }
14
18
  }
15
19
 
16
20
  // Menu item (the option)
@@ -135,16 +135,15 @@ var CheckPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
135
135
  onSearch === null || onSearch === void 0 ? void 0 : onSearch(searchKeyword, event);
136
136
  }, [setFocusItemValue, onSearch, valueKey]); // Use search keywords to filter options.
137
137
 
138
- var _useSearch = (0, _Picker.useSearch)({
138
+ var _useSearch = (0, _Picker.useSearch)(data, {
139
139
  labelKey: labelKey,
140
- data: data,
141
140
  searchBy: searchBy,
142
141
  callback: handleSearchCallback
143
142
  }),
144
143
  searchKeyword = _useSearch.searchKeyword,
145
144
  filteredData = _useSearch.filteredData,
146
- setSearchKeyword = _useSearch.setSearchKeyword,
147
145
  handleSearch = _useSearch.handleSearch,
146
+ resetSearch = _useSearch.resetSearch,
148
147
  checkShouldDisplay = _useSearch.checkShouldDisplay; // Use component active state to support keyboard events.
149
148
 
150
149
 
@@ -253,11 +252,11 @@ var CheckPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
253
252
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
254
253
  }, [onOpen]);
255
254
  var handleExited = (0, _react.useCallback)(function () {
256
- setSearchKeyword('');
255
+ resetSearch();
257
256
  setFocusItemValue(null);
258
257
  setActive(false);
259
258
  onClose === null || onClose === void 0 ? void 0 : onClose();
260
- }, [onClose, setFocusItemValue, setSearchKeyword]);
259
+ }, [onClose, setFocusItemValue, resetSearch]);
261
260
  (0, _Picker.usePublicMethods)(ref, {
262
261
  triggerRef: triggerRef,
263
262
  overlayRef: overlayRef,
@@ -214,14 +214,13 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
214
214
  onSearch === null || onSearch === void 0 ? void 0 : onSearch(searchKeyword, event);
215
215
  }, [disabledOptions, setFocusItemValue, valueKey, onSearch]); // Use search keywords to filter options.
216
216
 
217
- var _useSearch = (0, _Picker.useSearch)({
217
+ var _useSearch = (0, _Picker.useSearch)(getAllData(), {
218
218
  labelKey: labelKey,
219
- data: getAllData(),
220
219
  searchBy: searchBy,
221
220
  callback: handleSearchCallback
222
221
  }),
223
222
  searchKeyword = _useSearch.searchKeyword,
224
- setSearchKeyword = _useSearch.setSearchKeyword,
223
+ resetSearch = _useSearch.resetSearch,
225
224
  checkShouldDisplay = _useSearch.checkShouldDisplay,
226
225
  handleSearch = _useSearch.handleSearch; // Update the state when the data in props changes
227
226
 
@@ -334,7 +333,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
334
333
  var handleSelectItem = function handleSelectItem(value, item, event) {
335
334
  setValue(value);
336
335
  setFocusItemValue(value);
337
- setSearchKeyword('');
336
+ resetSearch();
338
337
  handleSelect(value, item, event);
339
338
  handleChange(value, event);
340
339
  handleClose();
@@ -360,7 +359,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
360
359
  }
361
360
 
362
361
  setValue(val);
363
- setSearchKeyword('');
362
+ resetSearch();
364
363
  setFocusItemValue(nextItemValue);
365
364
  handleSelect(val, item, event);
366
365
  handleChange(val, event);
@@ -406,10 +405,10 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
406
405
  }
407
406
 
408
407
  setValue(val);
409
- setSearchKeyword('');
408
+ resetSearch();
410
409
  handleSelect(val, focusItem, event);
411
410
  handleChange(val, event);
412
- }, [cloneValue, getAllData, focusItemValue, disabledItemValues, disabledOptions, setValue, setSearchKeyword, handleSelect, handleChange, valueKey, createOption]);
411
+ }, [cloneValue, getAllData, focusItemValue, disabledItemValues, disabledOptions, setValue, resetSearch, handleSelect, handleChange, valueKey, createOption]);
413
412
  var handleMenuItemKeyPress = (0, _react.useCallback)(function (event) {
414
413
  if (!focusItemValue || !controlledData) {
415
414
  return;
@@ -433,7 +432,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
433
432
  }
434
433
 
435
434
  setValue(focusItemValue);
436
- setSearchKeyword('');
435
+ resetSearch();
437
436
 
438
437
  if (focusItem) {
439
438
  handleSelect(focusItemValue, focusItem, event);
@@ -441,7 +440,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
441
440
 
442
441
  handleChange(focusItemValue, event);
443
442
  handleClose();
444
- }, [setValue, disabledItemValues, controlledData, focusItemValue, valueKey, searchKeyword, handleClose, setSearchKeyword, createOption, getAllData, handleChange, handleSelect]);
443
+ }, [setValue, disabledItemValues, controlledData, focusItemValue, valueKey, searchKeyword, handleClose, resetSearch, createOption, getAllData, handleChange, handleSelect]);
445
444
  (0, _Picker.usePublicMethods)(ref, {
446
445
  triggerRef: triggerRef,
447
446
  overlayRef: overlayRef,
@@ -477,7 +476,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
477
476
 
478
477
  setValue(null);
479
478
  setFocusItemValue(null);
480
- setSearchKeyword('');
479
+ resetSearch();
481
480
 
482
481
  if (multi) {
483
482
  handleChange([], event);
@@ -486,7 +485,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
486
485
  }
487
486
 
488
487
  onClean === null || onClean === void 0 ? void 0 : onClean(event);
489
- }, [disabled, searchKeyword, setValue, setFocusItemValue, setSearchKeyword, multi, onClean, handleChange]);
488
+ }, [disabled, searchKeyword, setValue, setFocusItemValue, resetSearch, multi, onClean, handleChange]);
490
489
  var events = {
491
490
  onMenuPressBackspace: multi ? removeLastItem : handleClean,
492
491
  onMenuKeyDown: onKeyDown,
@@ -526,9 +525,9 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
526
525
  }, events, rest));
527
526
  var handleExited = (0, _react.useCallback)(function () {
528
527
  setFocusItemValue(multi ? value === null || value === void 0 ? void 0 : value[0] : value);
529
- setSearchKeyword('');
528
+ resetSearch();
530
529
  onClose === null || onClose === void 0 ? void 0 : onClose();
531
- }, [setFocusItemValue, setSearchKeyword, onClose, value, multi]);
530
+ }, [setFocusItemValue, resetSearch, onClose, value, multi]);
532
531
  var handleFocus = (0, _react.useCallback)(function () {
533
532
  if (!readOnly) {
534
533
  var _triggerRef$current4;
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  import { AnimationEventProps, StandardProps, TypeAttributes } from '../@types/common';
4
4
  import { PositionChildProps } from './Position';
5
5
  export declare type OverlayTriggerType = 'click' | 'hover' | 'focus' | 'active' | 'contextMenu' | 'none';
6
- export interface OverlayTriggerProps extends StandardProps, AnimationEventProps {
6
+ export interface OverlayTriggerProps extends Omit<StandardProps, 'children'>, AnimationEventProps {
7
7
  /** Triggering events */
8
8
  trigger?: OverlayTriggerType | OverlayTriggerType[];
9
9
  /** Display placement */
@@ -89,25 +89,22 @@ export interface ToggleKeyDownEventProps {
89
89
  * @param props
90
90
  */
91
91
  export declare const useToggleKeyDownEvent: (props: ToggleKeyDownEventProps) => (event: React.KeyboardEvent) => void;
92
- export interface SearchProps<TItem extends Record<string, unknown>, TLabel> {
92
+ interface SearchOptions<T> {
93
93
  labelKey: string;
94
- data: TItem[];
95
- searchBy?: (keyword: string, label: TLabel, item: TItem) => boolean;
96
- callback?: (keyword: string, data: TItem[], event: React.SyntheticEvent) => void;
94
+ searchBy?: (keyword: string, label: any, item: T) => boolean;
95
+ callback?: (keyword: string, data: T[], event: React.SyntheticEvent) => void;
97
96
  }
98
- declare type UseSearchResult<TItem extends Record<string, unknown>> = {
97
+ declare type UseSearchResult<T> = {
99
98
  searchKeyword: string;
100
- filteredData: TItem[];
101
- updateFilteredData: (nextData: TItem[]) => void;
102
- setSearchKeyword: (value: string) => void;
103
- checkShouldDisplay: (item: TItem, keyword?: string) => boolean;
99
+ filteredData: T[];
100
+ checkShouldDisplay: (item: T, keyword?: string) => boolean;
104
101
  handleSearch: (searchKeyword: string, event: React.SyntheticEvent) => void;
102
+ resetSearch: () => void;
105
103
  };
106
104
  /**
107
105
  * A hook that handles search filter options
108
- * @param props
109
106
  */
110
- export declare function useSearch<TItem extends Record<string, unknown>, TLabel>(props: SearchProps<TItem, TLabel>): UseSearchResult<TItem>;
107
+ export declare function useSearch<T>(data: readonly T[], props: SearchOptions<T>): UseSearchResult<T>;
111
108
  export interface PickerDependentParameters {
112
109
  triggerRef?: React.RefObject<OverlayTriggerHandle>;
113
110
  rootRef?: React.RefObject<HTMLElement>;
@@ -526,48 +526,49 @@ exports.useToggleKeyDownEvent = useToggleKeyDownEvent;
526
526
 
527
527
  /**
528
528
  * A hook that handles search filter options
529
- * @param props
530
529
  */
531
- function useSearch(props) {
530
+ function useSearch(data, props) {
532
531
  var labelKey = props.labelKey,
533
- data = props.data,
534
532
  searchBy = props.searchBy,
535
533
  callback = props.callback; // Use search keywords to filter options.
536
534
 
537
535
  var _useState4 = (0, _react.useState)(''),
538
536
  searchKeyword = _useState4[0],
539
537
  setSearchKeyword = _useState4[1];
538
+
539
+ var resetSearch = (0, _react.useCallback)(function () {
540
+ setSearchKeyword('');
541
+ }, []);
540
542
  /**
541
543
  * Index of keyword in `label`
542
544
  * @param {node} label
543
545
  */
544
546
 
545
-
546
547
  var checkShouldDisplay = (0, _react.useCallback)(function (item, keyword) {
547
- var label = item === null || item === void 0 ? void 0 : item[labelKey];
548
+ var checkValue = typeof item === 'object' ? item === null || item === void 0 ? void 0 : item[labelKey] : String(item);
548
549
 
549
550
  var _keyword = (0, _isUndefined.default)(keyword) ? searchKeyword : keyword;
550
551
 
551
552
  if (typeof searchBy === 'function') {
552
- return searchBy(_keyword, label, item);
553
+ return searchBy(_keyword, checkValue, item);
553
554
  }
554
555
 
555
- return shouldDisplay(label, _keyword);
556
- }, [labelKey, searchBy, searchKeyword]);
557
- var updateFilteredData = (0, _react.useCallback)(function (nextData) {
558
- setFilteredData((0, _treeUtils.filterNodesOfTree)(nextData, function (item) {
559
- return checkShouldDisplay(item);
560
- }));
561
- }, [checkShouldDisplay]);
556
+ return shouldDisplay(checkValue, _keyword);
557
+ }, [labelKey, searchBy, searchKeyword]); // TODO-Doma
558
+ // filteredData should be derived from data and searchKeyword
559
+ // This redundant state might be here for preventing callback firing multiple times
560
+ // Find out if this is the case and remove this state if possible
562
561
 
563
- var _useState5 = (0, _react.useState)((0, _treeUtils.filterNodesOfTree)(data, function (item) {
564
- return checkShouldDisplay(item);
565
- })),
562
+ var _useState5 = (0, _react.useState)(function () {
563
+ return data.filter(function (item) {
564
+ return checkShouldDisplay(item);
565
+ });
566
+ }),
566
567
  filteredData = _useState5[0],
567
568
  setFilteredData = _useState5[1];
568
569
 
569
570
  var handleSearch = function handleSearch(searchKeyword, event) {
570
- var filteredData = (0, _treeUtils.filterNodesOfTree)(data, function (item) {
571
+ var filteredData = data.filter(function (item) {
571
572
  return checkShouldDisplay(item, searchKeyword);
572
573
  });
573
574
  setFilteredData(filteredData);
@@ -578,10 +579,9 @@ function useSearch(props) {
578
579
  return {
579
580
  searchKeyword: searchKeyword,
580
581
  filteredData: filteredData,
581
- updateFilteredData: updateFilteredData,
582
- setSearchKeyword: setSearchKeyword,
583
582
  checkShouldDisplay: checkShouldDisplay,
584
- handleSearch: handleSearch
583
+ handleSearch: handleSearch,
584
+ resetSearch: resetSearch
585
585
  };
586
586
  }
587
587
 
@@ -118,9 +118,8 @@ var SelectPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
118
118
  onFocusItem = _useFocusItemValue.onKeyDown; // Use search keywords to filter options.
119
119
 
120
120
 
121
- var _useSearch = (0, _Picker.useSearch)({
121
+ var _useSearch = (0, _Picker.useSearch)(data, {
122
122
  labelKey: labelKey,
123
- data: data,
124
123
  searchBy: searchBy,
125
124
  callback: function callback(searchKeyword, filteredData, event) {
126
125
  var _filteredData$;
@@ -132,13 +131,9 @@ var SelectPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
132
131
  }),
133
132
  searchKeyword = _useSearch.searchKeyword,
134
133
  filteredData = _useSearch.filteredData,
135
- updateFilteredData = _useSearch.updateFilteredData,
136
- setSearchKeyword = _useSearch.setSearchKeyword,
137
- handleSearch = _useSearch.handleSearch;
134
+ resetSearch = _useSearch.resetSearch,
135
+ handleSearch = _useSearch.handleSearch; // Use component active state to support keyboard events.
138
136
 
139
- (0, _react.useEffect)(function () {
140
- updateFilteredData(data);
141
- }, [data, updateFilteredData]); // Use component active state to support keyboard events.
142
137
 
143
138
  var _useState = (0, _react.useState)(false),
144
139
  active = _useState[0],
@@ -203,11 +198,11 @@ var SelectPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
203
198
  }
204
199
  }, rest));
205
200
  var handleExited = (0, _react.useCallback)(function () {
206
- setSearchKeyword('');
201
+ resetSearch();
207
202
  setActive(false);
208
203
  onSearch === null || onSearch === void 0 ? void 0 : onSearch('');
209
204
  onClose === null || onClose === void 0 ? void 0 : onClose();
210
- }, [onClose, setSearchKeyword, onSearch]);
205
+ }, [onClose, resetSearch, onSearch]);
211
206
  var handleEntered = (0, _react.useCallback)(function () {
212
207
  setActive(true);
213
208
  setFocusItemValue(value);
@@ -4116,6 +4116,12 @@ label:hover .rs-checkbox-wrapper .rs-checkbox-inner::before {
4116
4116
  .rs-picker-check-menu-items .rs-check-item.rs-checkbox-checked .rs-checkbox-checker > label {
4117
4117
  font-weight: bold;
4118
4118
  }
4119
+ .rs-picker-check-menu-items.rs-picker-check-menu-grouped .rs-check-item .rs-checkbox-checker > label {
4120
+ padding-right: 52px;
4121
+ }
4122
+ .rs-picker-check-menu-items.rs-picker-check-menu-grouped .rs-check-item .rs-checkbox-checker .rs-checkbox-wrapper {
4123
+ right: 26px;
4124
+ }
4119
4125
  .rs-check-tree {
4120
4126
  max-height: 360px;
4121
4127
  height: 100%;
@@ -11784,17 +11790,17 @@ textarea.rs-picker-menu .rs-picker-search-bar .rs-picker-search-bar-input {
11784
11790
  .rs-checkbox-disabled.rs-check-item .rs-checkbox-checker > label {
11785
11791
  cursor: not-allowed;
11786
11792
  }
11787
- .rs-check-item .rs-checkbox-checker > label .rs-checkbox-wrapper {
11788
- right: 12px;
11789
- }
11790
- .grouped .rs-check-item .rs-checkbox-checker > label .rs-checkbox-wrapper,
11791
- .rs-picker-check-menu-group-children .rs-check-item .rs-checkbox-checker > label .rs-checkbox-wrapper {
11792
- right: 26px;
11793
- }
11794
11793
  .grouped .rs-check-item .rs-checkbox-checker > label,
11795
11794
  .rs-picker-check-menu-group-children .rs-check-item .rs-checkbox-checker > label {
11796
11795
  padding-right: 52px;
11797
11796
  }
11797
+ .rs-check-item .rs-checkbox-checker .rs-checkbox-wrapper {
11798
+ right: 12px;
11799
+ }
11800
+ .grouped .rs-check-item .rs-checkbox-checker .rs-checkbox-wrapper,
11801
+ .rs-picker-check-menu-group-children .rs-check-item .rs-checkbox-checker .rs-checkbox-wrapper {
11802
+ right: 26px;
11803
+ }
11798
11804
  .rs-placeholder {
11799
11805
  display: -webkit-box;
11800
11806
  display: -ms-flexbox;
@@ -12698,6 +12704,7 @@ textarea.rs-picker-menu .rs-picker-search-bar .rs-picker-search-bar-input {
12698
12704
  }
12699
12705
  .rs-radio-group-picker .rs-radio-checker > label {
12700
12706
  display: inline-block;
12707
+ white-space: nowrap;
12701
12708
  font-size: 14px;
12702
12709
  line-height: 1.42857143;
12703
12710
  border-radius: 0;
@@ -12880,6 +12887,9 @@ textarea.rs-picker-menu .rs-picker-search-bar .rs-picker-search-bar-input {
12880
12887
  -webkit-transform: rotate(-90deg);
12881
12888
  transform: rotate(-90deg);
12882
12889
  }
12890
+ .rs-picker-select-menu-items .rs-picker-menu-group ~ [role='option'] > .rs-picker-select-menu-item {
12891
+ padding-right: 26px;
12892
+ }
12883
12893
  .rs-picker-select-menu-item {
12884
12894
  display: block;
12885
12895
  padding: 8px 12px;