downshift 7.0.5 → 7.1.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "downshift",
3
- "version": "7.0.5",
3
+ "version": "7.1.1",
4
4
  "description": "🏎 A set of primitives to build simple, flexible, WAI-ARIA compliant React autocomplete, combobox or select dropdown components.",
5
5
  "main": "dist/downshift.cjs.js",
6
6
  "react-native": "dist/downshift.native.cjs.js",
@@ -1965,12 +1965,11 @@ function getItemIndexByCharacterKey(_a) {
1965
1965
  var keysSoFar = _a.keysSoFar, highlightedIndex = _a.highlightedIndex, items = _a.items, itemToString = _a.itemToString, getItemNodeFromIndex = _a.getItemNodeFromIndex;
1966
1966
  var lowerCasedKeysSoFar = keysSoFar.toLowerCase();
1967
1967
  for (var index = 0; index < items.length; index++) {
1968
- var offsetIndex = (index + highlightedIndex + 1) % items.length;
1968
+ // if we already have a search query in progress, we also consider the current highlighted item.
1969
+ var offsetIndex = (index + highlightedIndex + (keysSoFar.length < 2 ? 1 : 0)) % items.length;
1969
1970
  var item = items[offsetIndex];
1970
1971
  if (item !== undefined &&
1971
- itemToString(item)
1972
- .toLowerCase()
1973
- .startsWith(lowerCasedKeysSoFar)) {
1972
+ itemToString(item).toLowerCase().startsWith(lowerCasedKeysSoFar)) {
1974
1973
  var element = getItemNodeFromIndex(offsetIndex);
1975
1974
  if (!(element === null || element === void 0 ? void 0 : element.hasAttribute('disabled'))) {
1976
1975
  return offsetIndex;
@@ -2415,9 +2414,24 @@ function useSelect(userProps) {
2415
2414
  },
2416
2415
  ' '(event) {
2417
2416
  event.preventDefault();
2418
- dispatch({
2419
- type: latest.current.state.isOpen ? ToggleButtonKeyDownSpaceButton : ToggleButtonClick$1
2420
- });
2417
+ const currentState = latest.current.state;
2418
+ if (!currentState.isOpen) {
2419
+ dispatch({
2420
+ type: ToggleButtonClick$1
2421
+ });
2422
+ return;
2423
+ }
2424
+ if (currentState.inputValue) {
2425
+ dispatch({
2426
+ type: ToggleButtonKeyDownCharacter,
2427
+ key: ' ',
2428
+ getItemNodeFromIndex
2429
+ });
2430
+ } else {
2431
+ dispatch({
2432
+ type: ToggleButtonKeyDownSpaceButton
2433
+ });
2434
+ }
2421
2435
  }
2422
2436
  }), [dispatch, getItemNodeFromIndex, latest]);
2423
2437
 
@@ -3569,6 +3583,9 @@ function downshiftMultipleSelectionReducer(state, action) {
3569
3583
  case SelectedItemKeyDownBackspace:
3570
3584
  case SelectedItemKeyDownDelete:
3571
3585
  {
3586
+ if (activeIndex < 0) {
3587
+ break;
3588
+ }
3572
3589
  let newActiveIndex = activeIndex;
3573
3590
  if (selectedItems.length === 1) {
3574
3591
  newActiveIndex = -1;
@@ -3607,17 +3624,18 @@ function downshiftMultipleSelectionReducer(state, action) {
3607
3624
  {
3608
3625
  let newActiveIndex = activeIndex;
3609
3626
  const selectedItemIndex = selectedItems.indexOf(selectedItem);
3610
- if (selectedItemIndex >= 0) {
3611
- if (selectedItems.length === 1) {
3612
- newActiveIndex = -1;
3613
- } else if (selectedItemIndex === selectedItems.length - 1) {
3614
- newActiveIndex = selectedItems.length - 2;
3615
- }
3616
- changes = {
3617
- selectedItems: [...selectedItems.slice(0, selectedItemIndex), ...selectedItems.slice(selectedItemIndex + 1)],
3618
- activeIndex: newActiveIndex
3619
- };
3627
+ if (selectedItemIndex < 0) {
3628
+ break;
3620
3629
  }
3630
+ if (selectedItems.length === 1) {
3631
+ newActiveIndex = -1;
3632
+ } else if (selectedItemIndex === selectedItems.length - 1) {
3633
+ newActiveIndex = selectedItems.length - 2;
3634
+ }
3635
+ changes = {
3636
+ selectedItems: [...selectedItems.slice(0, selectedItemIndex), ...selectedItems.slice(selectedItemIndex + 1)],
3637
+ activeIndex: newActiveIndex
3638
+ };
3621
3639
  break;
3622
3640
  }
3623
3641
  case FunctionSetSelectedItems:
@@ -1956,12 +1956,11 @@ function getItemIndexByCharacterKey(_a) {
1956
1956
  var keysSoFar = _a.keysSoFar, highlightedIndex = _a.highlightedIndex, items = _a.items, itemToString = _a.itemToString, getItemNodeFromIndex = _a.getItemNodeFromIndex;
1957
1957
  var lowerCasedKeysSoFar = keysSoFar.toLowerCase();
1958
1958
  for (var index = 0; index < items.length; index++) {
1959
- var offsetIndex = (index + highlightedIndex + 1) % items.length;
1959
+ // if we already have a search query in progress, we also consider the current highlighted item.
1960
+ var offsetIndex = (index + highlightedIndex + (keysSoFar.length < 2 ? 1 : 0)) % items.length;
1960
1961
  var item = items[offsetIndex];
1961
1962
  if (item !== undefined &&
1962
- itemToString(item)
1963
- .toLowerCase()
1964
- .startsWith(lowerCasedKeysSoFar)) {
1963
+ itemToString(item).toLowerCase().startsWith(lowerCasedKeysSoFar)) {
1965
1964
  var element = getItemNodeFromIndex(offsetIndex);
1966
1965
  if (!(element === null || element === void 0 ? void 0 : element.hasAttribute('disabled'))) {
1967
1966
  return offsetIndex;
@@ -2406,9 +2405,24 @@ function useSelect(userProps) {
2406
2405
  },
2407
2406
  ' '(event) {
2408
2407
  event.preventDefault();
2409
- dispatch({
2410
- type: latest.current.state.isOpen ? ToggleButtonKeyDownSpaceButton : ToggleButtonClick$1
2411
- });
2408
+ const currentState = latest.current.state;
2409
+ if (!currentState.isOpen) {
2410
+ dispatch({
2411
+ type: ToggleButtonClick$1
2412
+ });
2413
+ return;
2414
+ }
2415
+ if (currentState.inputValue) {
2416
+ dispatch({
2417
+ type: ToggleButtonKeyDownCharacter,
2418
+ key: ' ',
2419
+ getItemNodeFromIndex
2420
+ });
2421
+ } else {
2422
+ dispatch({
2423
+ type: ToggleButtonKeyDownSpaceButton
2424
+ });
2425
+ }
2412
2426
  }
2413
2427
  }), [dispatch, getItemNodeFromIndex, latest]);
2414
2428
 
@@ -3560,6 +3574,9 @@ function downshiftMultipleSelectionReducer(state, action) {
3560
3574
  case SelectedItemKeyDownBackspace:
3561
3575
  case SelectedItemKeyDownDelete:
3562
3576
  {
3577
+ if (activeIndex < 0) {
3578
+ break;
3579
+ }
3563
3580
  let newActiveIndex = activeIndex;
3564
3581
  if (selectedItems.length === 1) {
3565
3582
  newActiveIndex = -1;
@@ -3598,17 +3615,18 @@ function downshiftMultipleSelectionReducer(state, action) {
3598
3615
  {
3599
3616
  let newActiveIndex = activeIndex;
3600
3617
  const selectedItemIndex = selectedItems.indexOf(selectedItem);
3601
- if (selectedItemIndex >= 0) {
3602
- if (selectedItems.length === 1) {
3603
- newActiveIndex = -1;
3604
- } else if (selectedItemIndex === selectedItems.length - 1) {
3605
- newActiveIndex = selectedItems.length - 2;
3606
- }
3607
- changes = {
3608
- selectedItems: [...selectedItems.slice(0, selectedItemIndex), ...selectedItems.slice(selectedItemIndex + 1)],
3609
- activeIndex: newActiveIndex
3610
- };
3618
+ if (selectedItemIndex < 0) {
3619
+ break;
3611
3620
  }
3621
+ if (selectedItems.length === 1) {
3622
+ newActiveIndex = -1;
3623
+ } else if (selectedItemIndex === selectedItems.length - 1) {
3624
+ newActiveIndex = selectedItems.length - 2;
3625
+ }
3626
+ changes = {
3627
+ selectedItems: [...selectedItems.slice(0, selectedItemIndex), ...selectedItems.slice(selectedItemIndex + 1)],
3628
+ activeIndex: newActiveIndex
3629
+ };
3612
3630
  break;
3613
3631
  }
3614
3632
  case FunctionSetSelectedItems:
@@ -2220,12 +2220,11 @@
2220
2220
  var keysSoFar = _a.keysSoFar, highlightedIndex = _a.highlightedIndex, items = _a.items, itemToString = _a.itemToString, getItemNodeFromIndex = _a.getItemNodeFromIndex;
2221
2221
  var lowerCasedKeysSoFar = keysSoFar.toLowerCase();
2222
2222
  for (var index = 0; index < items.length; index++) {
2223
- var offsetIndex = (index + highlightedIndex + 1) % items.length;
2223
+ // if we already have a search query in progress, we also consider the current highlighted item.
2224
+ var offsetIndex = (index + highlightedIndex + (keysSoFar.length < 2 ? 1 : 0)) % items.length;
2224
2225
  var item = items[offsetIndex];
2225
2226
  if (item !== undefined &&
2226
- itemToString(item)
2227
- .toLowerCase()
2228
- .startsWith(lowerCasedKeysSoFar)) {
2227
+ itemToString(item).toLowerCase().startsWith(lowerCasedKeysSoFar)) {
2229
2228
  var element = getItemNodeFromIndex(offsetIndex);
2230
2229
  if (!(element === null || element === void 0 ? void 0 : element.hasAttribute('disabled'))) {
2231
2230
  return offsetIndex;
@@ -2670,9 +2669,24 @@
2670
2669
  },
2671
2670
  ' '(event) {
2672
2671
  event.preventDefault();
2673
- dispatch({
2674
- type: latest.current.state.isOpen ? ToggleButtonKeyDownSpaceButton : ToggleButtonClick$1
2675
- });
2672
+ const currentState = latest.current.state;
2673
+ if (!currentState.isOpen) {
2674
+ dispatch({
2675
+ type: ToggleButtonClick$1
2676
+ });
2677
+ return;
2678
+ }
2679
+ if (currentState.inputValue) {
2680
+ dispatch({
2681
+ type: ToggleButtonKeyDownCharacter,
2682
+ key: ' ',
2683
+ getItemNodeFromIndex
2684
+ });
2685
+ } else {
2686
+ dispatch({
2687
+ type: ToggleButtonKeyDownSpaceButton
2688
+ });
2689
+ }
2676
2690
  }
2677
2691
  }), [dispatch, getItemNodeFromIndex, latest]);
2678
2692
 
@@ -3824,6 +3838,9 @@
3824
3838
  case SelectedItemKeyDownBackspace:
3825
3839
  case SelectedItemKeyDownDelete:
3826
3840
  {
3841
+ if (activeIndex < 0) {
3842
+ break;
3843
+ }
3827
3844
  let newActiveIndex = activeIndex;
3828
3845
  if (selectedItems.length === 1) {
3829
3846
  newActiveIndex = -1;
@@ -3862,17 +3879,18 @@
3862
3879
  {
3863
3880
  let newActiveIndex = activeIndex;
3864
3881
  const selectedItemIndex = selectedItems.indexOf(selectedItem);
3865
- if (selectedItemIndex >= 0) {
3866
- if (selectedItems.length === 1) {
3867
- newActiveIndex = -1;
3868
- } else if (selectedItemIndex === selectedItems.length - 1) {
3869
- newActiveIndex = selectedItems.length - 2;
3870
- }
3871
- changes = {
3872
- selectedItems: [...selectedItems.slice(0, selectedItemIndex), ...selectedItems.slice(selectedItemIndex + 1)],
3873
- activeIndex: newActiveIndex
3874
- };
3882
+ if (selectedItemIndex < 0) {
3883
+ break;
3875
3884
  }
3885
+ if (selectedItems.length === 1) {
3886
+ newActiveIndex = -1;
3887
+ } else if (selectedItemIndex === selectedItems.length - 1) {
3888
+ newActiveIndex = selectedItems.length - 2;
3889
+ }
3890
+ changes = {
3891
+ selectedItems: [...selectedItems.slice(0, selectedItemIndex), ...selectedItems.slice(selectedItemIndex + 1)],
3892
+ activeIndex: newActiveIndex
3893
+ };
3876
3894
  break;
3877
3895
  }
3878
3896
  case FunctionSetSelectedItems: