downshift 7.3.2 → 7.3.3

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.
@@ -75,7 +75,7 @@ export function useEnhancedReducer(reducer: Function, initialState: Object, prop
75
75
  export function useLatestRef(val: any): import("react").MutableRefObject<any>;
76
76
  export function capitalizeString(string: any): string;
77
77
  export function isAcceptedCharacterKey(key: any): boolean;
78
- export function getItemIndex(index: any, item: any, items: any): any;
78
+ export function getItemAndIndex(itemProp: any, indexProp: any, items: any, errorMessage: any): any[];
79
79
  export function useElementIds({ id, labelId, menuId, getItemId, toggleButtonId, inputId, }: {
80
80
  id?: string | undefined;
81
81
  labelId: any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "downshift",
3
- "version": "7.3.2",
3
+ "version": "7.3.3",
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",
@@ -1566,14 +1566,19 @@ function useElementIds(_ref) {
1566
1566
  });
1567
1567
  return elementIdsRef.current;
1568
1568
  }
1569
- function getItemIndex(index, item, items) {
1570
- if (index !== undefined) {
1571
- return index;
1572
- }
1573
- if (items.length === 0) {
1574
- return -1;
1569
+ function getItemAndIndex(itemProp, indexProp, items, errorMessage) {
1570
+ var item, index;
1571
+ if (itemProp === undefined) {
1572
+ if (indexProp === undefined) {
1573
+ throw new Error(errorMessage);
1574
+ }
1575
+ item = items[indexProp];
1576
+ index = indexProp;
1577
+ } else {
1578
+ index = indexProp === undefined ? items.indexOf(itemProp) : indexProp;
1579
+ item = itemProp;
1575
1580
  }
1576
- return items.indexOf(item);
1581
+ return [item, index];
1577
1582
  }
1578
1583
  function itemToString(item) {
1579
1584
  return item ? String(item) : '';
@@ -2563,8 +2568,9 @@ function useSelect(userProps) {
2563
2568
  var _latest$current = latest.current,
2564
2569
  latestState = _latest$current.state,
2565
2570
  latestProps = _latest$current.props;
2566
- var item = itemProp != null ? itemProp : items[indexProp];
2567
- var index = getItemIndex(indexProp, item, latestProps.items);
2571
+ var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
2572
+ item = _getItemAndIndex[0],
2573
+ index = _getItemAndIndex[1];
2568
2574
  var itemHandleMouseMove = function itemHandleMouseMove() {
2569
2575
  if (index === latestState.highlightedIndex) {
2570
2576
  return;
@@ -2582,18 +2588,14 @@ function useSelect(userProps) {
2582
2588
  index: index
2583
2589
  });
2584
2590
  };
2585
- var itemIndex = getItemIndex(index, item, latestProps.items);
2586
- if (itemIndex < 0) {
2587
- throw new Error('Pass either item or item index in getItemProps!');
2588
- }
2589
2591
  var itemProps = _extends__default["default"]((_extends4 = {
2590
2592
  disabled: disabled,
2591
2593
  role: 'option',
2592
2594
  'aria-selected': "" + (item === selectedItem),
2593
- id: elementIds.getItemId(itemIndex)
2595
+ id: elementIds.getItemId(index)
2594
2596
  }, _extends4[refKey] = handleRefs(ref, function (itemNode) {
2595
2597
  if (itemNode) {
2596
- itemRefs.current[elementIds.getItemId(itemIndex)] = itemNode;
2598
+ itemRefs.current[elementIds.getItemId(index)] = itemNode;
2597
2599
  }
2598
2600
  }), _extends4), rest);
2599
2601
  if (!disabled) {
@@ -2604,7 +2606,7 @@ function useSelect(userProps) {
2604
2606
  }
2605
2607
  itemProps.onMouseMove = callAllEventHandlers(onMouseMove, itemHandleMouseMove);
2606
2608
  return itemProps;
2607
- }, [latest, items, selectedItem, elementIds, shouldScrollRef, dispatch]);
2609
+ }, [latest, selectedItem, elementIds, shouldScrollRef, dispatch]);
2608
2610
  return {
2609
2611
  // prop getters.
2610
2612
  getToggleButtonProps: getToggleButtonProps,
@@ -3133,8 +3135,8 @@ function useCombobox(userProps) {
3133
3135
  var getItemProps = preact.useCallback(function (_temp3) {
3134
3136
  var _extends3, _ref4;
3135
3137
  var _ref3 = _temp3 === void 0 ? {} : _temp3,
3136
- item = _ref3.item,
3137
- index = _ref3.index,
3138
+ itemProp = _ref3.item,
3139
+ indexProp = _ref3.index,
3138
3140
  _ref3$refKey = _ref3.refKey,
3139
3141
  refKey = _ref3$refKey === void 0 ? 'ref' : _ref3$refKey,
3140
3142
  ref = _ref3.ref,
@@ -3147,10 +3149,8 @@ function useCombobox(userProps) {
3147
3149
  var _latest$current = latest.current,
3148
3150
  latestProps = _latest$current.props,
3149
3151
  latestState = _latest$current.state;
3150
- var itemIndex = getItemIndex(index, item, latestProps.items);
3151
- if (itemIndex < 0) {
3152
- throw new Error('Pass either item or item index in getItemProps!');
3153
- }
3152
+ var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
3153
+ index = _getItemAndIndex[1];
3154
3154
  var onSelectKey = 'onClick';
3155
3155
  var customClickHandler = onClick;
3156
3156
  var itemHandleMouseMove = function itemHandleMouseMove() {
@@ -3175,9 +3175,9 @@ function useCombobox(userProps) {
3175
3175
  };
3176
3176
  return _extends__default["default"]((_extends3 = {}, _extends3[refKey] = handleRefs(ref, function (itemNode) {
3177
3177
  if (itemNode) {
3178
- itemRefs.current[elementIds.getItemId(itemIndex)] = itemNode;
3178
+ itemRefs.current[elementIds.getItemId(index)] = itemNode;
3179
3179
  }
3180
- }), _extends3.disabled = disabled, _extends3.role = 'option', _extends3['aria-selected'] = "" + (itemIndex === latestState.highlightedIndex), _extends3.id = elementIds.getItemId(itemIndex), _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {
3180
+ }), _extends3.disabled = disabled, _extends3.role = 'option', _extends3['aria-selected'] = "" + (index === latestState.highlightedIndex), _extends3.id = elementIds.getItemId(index), _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {
3181
3181
  onMouseMove: callAllEventHandlers(onMouseMove, itemHandleMouseMove),
3182
3182
  onMouseDown: callAllEventHandlers(onMouseDown, itemHandleMouseDown)
3183
3183
  }, rest);
@@ -3717,14 +3717,13 @@ function useMultipleSelection(userProps) {
3717
3717
  ref = _ref3.ref,
3718
3718
  onClick = _ref3.onClick,
3719
3719
  onKeyDown = _ref3.onKeyDown,
3720
- selectedItem = _ref3.selectedItem,
3721
- index = _ref3.index,
3720
+ selectedItemProp = _ref3.selectedItem,
3721
+ indexProp = _ref3.index,
3722
3722
  rest = _objectWithoutPropertiesLoose__default["default"](_ref3, _excluded);
3723
3723
  var latestState = latest.current.state;
3724
- var itemIndex = getItemIndex(index, selectedItem, latestState.selectedItems);
3725
- if (itemIndex < 0) {
3726
- throw new Error('Pass either selectedItem or index in getSelectedItemProps!');
3727
- }
3724
+ var _getItemAndIndex = getItemAndIndex(selectedItemProp, indexProp, latestState.selectedItems, 'Pass either item or index to getSelectedItemProps!'),
3725
+ index = _getItemAndIndex[1];
3726
+ var isFocusable = index > -1 && index === latestState.activeIndex;
3728
3727
  var selectedItemHandleClick = function selectedItemHandleClick() {
3729
3728
  dispatch({
3730
3729
  type: SelectedItemClick,
@@ -3741,7 +3740,7 @@ function useMultipleSelection(userProps) {
3741
3740
  if (selectedItemNode) {
3742
3741
  selectedItemRefs.current.push(selectedItemNode);
3743
3742
  }
3744
- }), _extends2.tabIndex = index === latestState.activeIndex ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
3743
+ }), _extends2.tabIndex = isFocusable ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
3745
3744
  }, [dispatch, latest, selectedItemKeyDownHandlers]);
3746
3745
  var getDropdownProps = preact.useCallback(function (_temp2, _temp3) {
3747
3746
  var _extends3;
@@ -1553,14 +1553,19 @@ function useElementIds(_ref) {
1553
1553
  });
1554
1554
  return elementIdsRef.current;
1555
1555
  }
1556
- function getItemIndex(index, item, items) {
1557
- if (index !== undefined) {
1558
- return index;
1559
- }
1560
- if (items.length === 0) {
1561
- return -1;
1556
+ function getItemAndIndex(itemProp, indexProp, items, errorMessage) {
1557
+ var item, index;
1558
+ if (itemProp === undefined) {
1559
+ if (indexProp === undefined) {
1560
+ throw new Error(errorMessage);
1561
+ }
1562
+ item = items[indexProp];
1563
+ index = indexProp;
1564
+ } else {
1565
+ index = indexProp === undefined ? items.indexOf(itemProp) : indexProp;
1566
+ item = itemProp;
1562
1567
  }
1563
- return items.indexOf(item);
1568
+ return [item, index];
1564
1569
  }
1565
1570
  function itemToString(item) {
1566
1571
  return item ? String(item) : '';
@@ -2550,8 +2555,9 @@ function useSelect(userProps) {
2550
2555
  var _latest$current = latest.current,
2551
2556
  latestState = _latest$current.state,
2552
2557
  latestProps = _latest$current.props;
2553
- var item = itemProp != null ? itemProp : items[indexProp];
2554
- var index = getItemIndex(indexProp, item, latestProps.items);
2558
+ var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
2559
+ item = _getItemAndIndex[0],
2560
+ index = _getItemAndIndex[1];
2555
2561
  var itemHandleMouseMove = function itemHandleMouseMove() {
2556
2562
  if (index === latestState.highlightedIndex) {
2557
2563
  return;
@@ -2569,18 +2575,14 @@ function useSelect(userProps) {
2569
2575
  index: index
2570
2576
  });
2571
2577
  };
2572
- var itemIndex = getItemIndex(index, item, latestProps.items);
2573
- if (itemIndex < 0) {
2574
- throw new Error('Pass either item or item index in getItemProps!');
2575
- }
2576
2578
  var itemProps = _extends((_extends4 = {
2577
2579
  disabled: disabled,
2578
2580
  role: 'option',
2579
2581
  'aria-selected': "" + (item === selectedItem),
2580
- id: elementIds.getItemId(itemIndex)
2582
+ id: elementIds.getItemId(index)
2581
2583
  }, _extends4[refKey] = handleRefs(ref, function (itemNode) {
2582
2584
  if (itemNode) {
2583
- itemRefs.current[elementIds.getItemId(itemIndex)] = itemNode;
2585
+ itemRefs.current[elementIds.getItemId(index)] = itemNode;
2584
2586
  }
2585
2587
  }), _extends4), rest);
2586
2588
  if (!disabled) {
@@ -2591,7 +2593,7 @@ function useSelect(userProps) {
2591
2593
  }
2592
2594
  itemProps.onMouseMove = callAllEventHandlers(onMouseMove, itemHandleMouseMove);
2593
2595
  return itemProps;
2594
- }, [latest, items, selectedItem, elementIds, shouldScrollRef, dispatch]);
2596
+ }, [latest, selectedItem, elementIds, shouldScrollRef, dispatch]);
2595
2597
  return {
2596
2598
  // prop getters.
2597
2599
  getToggleButtonProps: getToggleButtonProps,
@@ -3120,8 +3122,8 @@ function useCombobox(userProps) {
3120
3122
  var getItemProps = useCallback(function (_temp3) {
3121
3123
  var _extends3, _ref4;
3122
3124
  var _ref3 = _temp3 === void 0 ? {} : _temp3,
3123
- item = _ref3.item,
3124
- index = _ref3.index,
3125
+ itemProp = _ref3.item,
3126
+ indexProp = _ref3.index,
3125
3127
  _ref3$refKey = _ref3.refKey,
3126
3128
  refKey = _ref3$refKey === void 0 ? 'ref' : _ref3$refKey,
3127
3129
  ref = _ref3.ref,
@@ -3134,10 +3136,8 @@ function useCombobox(userProps) {
3134
3136
  var _latest$current = latest.current,
3135
3137
  latestProps = _latest$current.props,
3136
3138
  latestState = _latest$current.state;
3137
- var itemIndex = getItemIndex(index, item, latestProps.items);
3138
- if (itemIndex < 0) {
3139
- throw new Error('Pass either item or item index in getItemProps!');
3140
- }
3139
+ var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
3140
+ index = _getItemAndIndex[1];
3141
3141
  var onSelectKey = 'onClick';
3142
3142
  var customClickHandler = onClick;
3143
3143
  var itemHandleMouseMove = function itemHandleMouseMove() {
@@ -3162,9 +3162,9 @@ function useCombobox(userProps) {
3162
3162
  };
3163
3163
  return _extends((_extends3 = {}, _extends3[refKey] = handleRefs(ref, function (itemNode) {
3164
3164
  if (itemNode) {
3165
- itemRefs.current[elementIds.getItemId(itemIndex)] = itemNode;
3165
+ itemRefs.current[elementIds.getItemId(index)] = itemNode;
3166
3166
  }
3167
- }), _extends3.disabled = disabled, _extends3.role = 'option', _extends3['aria-selected'] = "" + (itemIndex === latestState.highlightedIndex), _extends3.id = elementIds.getItemId(itemIndex), _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {
3167
+ }), _extends3.disabled = disabled, _extends3.role = 'option', _extends3['aria-selected'] = "" + (index === latestState.highlightedIndex), _extends3.id = elementIds.getItemId(index), _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {
3168
3168
  onMouseMove: callAllEventHandlers(onMouseMove, itemHandleMouseMove),
3169
3169
  onMouseDown: callAllEventHandlers(onMouseDown, itemHandleMouseDown)
3170
3170
  }, rest);
@@ -3704,14 +3704,13 @@ function useMultipleSelection(userProps) {
3704
3704
  ref = _ref3.ref,
3705
3705
  onClick = _ref3.onClick,
3706
3706
  onKeyDown = _ref3.onKeyDown,
3707
- selectedItem = _ref3.selectedItem,
3708
- index = _ref3.index,
3707
+ selectedItemProp = _ref3.selectedItem,
3708
+ indexProp = _ref3.index,
3709
3709
  rest = _objectWithoutPropertiesLoose(_ref3, _excluded);
3710
3710
  var latestState = latest.current.state;
3711
- var itemIndex = getItemIndex(index, selectedItem, latestState.selectedItems);
3712
- if (itemIndex < 0) {
3713
- throw new Error('Pass either selectedItem or index in getSelectedItemProps!');
3714
- }
3711
+ var _getItemAndIndex = getItemAndIndex(selectedItemProp, indexProp, latestState.selectedItems, 'Pass either item or index to getSelectedItemProps!'),
3712
+ index = _getItemAndIndex[1];
3713
+ var isFocusable = index > -1 && index === latestState.activeIndex;
3715
3714
  var selectedItemHandleClick = function selectedItemHandleClick() {
3716
3715
  dispatch({
3717
3716
  type: SelectedItemClick,
@@ -3728,7 +3727,7 @@ function useMultipleSelection(userProps) {
3728
3727
  if (selectedItemNode) {
3729
3728
  selectedItemRefs.current.push(selectedItemNode);
3730
3729
  }
3731
- }), _extends2.tabIndex = index === latestState.activeIndex ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
3730
+ }), _extends2.tabIndex = isFocusable ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
3732
3731
  }, [dispatch, latest, selectedItemKeyDownHandlers]);
3733
3732
  var getDropdownProps = useCallback(function (_temp2, _temp3) {
3734
3733
  var _extends3;
@@ -1836,14 +1836,19 @@
1836
1836
  });
1837
1837
  return elementIdsRef.current;
1838
1838
  }
1839
- function getItemIndex(index, item, items) {
1840
- if (index !== undefined) {
1841
- return index;
1842
- }
1843
- if (items.length === 0) {
1844
- return -1;
1839
+ function getItemAndIndex(itemProp, indexProp, items, errorMessage) {
1840
+ var item, index;
1841
+ if (itemProp === undefined) {
1842
+ if (indexProp === undefined) {
1843
+ throw new Error(errorMessage);
1844
+ }
1845
+ item = items[indexProp];
1846
+ index = indexProp;
1847
+ } else {
1848
+ index = indexProp === undefined ? items.indexOf(itemProp) : indexProp;
1849
+ item = itemProp;
1845
1850
  }
1846
- return items.indexOf(item);
1851
+ return [item, index];
1847
1852
  }
1848
1853
  function itemToString(item) {
1849
1854
  return item ? String(item) : '';
@@ -2859,8 +2864,9 @@
2859
2864
  var _latest$current = latest.current,
2860
2865
  latestState = _latest$current.state,
2861
2866
  latestProps = _latest$current.props;
2862
- var item = itemProp != null ? itemProp : items[indexProp];
2863
- var index = getItemIndex(indexProp, item, latestProps.items);
2867
+ var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
2868
+ item = _getItemAndIndex[0],
2869
+ index = _getItemAndIndex[1];
2864
2870
  var itemHandleMouseMove = function itemHandleMouseMove() {
2865
2871
  if (index === latestState.highlightedIndex) {
2866
2872
  return;
@@ -2878,18 +2884,14 @@
2878
2884
  index: index
2879
2885
  });
2880
2886
  };
2881
- var itemIndex = getItemIndex(index, item, latestProps.items);
2882
- if (itemIndex < 0) {
2883
- throw new Error('Pass either item or item index in getItemProps!');
2884
- }
2885
2887
  var itemProps = _extends((_extends4 = {
2886
2888
  disabled: disabled,
2887
2889
  role: 'option',
2888
2890
  'aria-selected': "" + (item === selectedItem),
2889
- id: elementIds.getItemId(itemIndex)
2891
+ id: elementIds.getItemId(index)
2890
2892
  }, _extends4[refKey] = handleRefs(ref, function (itemNode) {
2891
2893
  if (itemNode) {
2892
- itemRefs.current[elementIds.getItemId(itemIndex)] = itemNode;
2894
+ itemRefs.current[elementIds.getItemId(index)] = itemNode;
2893
2895
  }
2894
2896
  }), _extends4), rest);
2895
2897
  if (!disabled) {
@@ -2900,7 +2902,7 @@
2900
2902
  }
2901
2903
  itemProps.onMouseMove = callAllEventHandlers(onMouseMove, itemHandleMouseMove);
2902
2904
  return itemProps;
2903
- }, [latest, items, selectedItem, elementIds, shouldScrollRef, dispatch]);
2905
+ }, [latest, selectedItem, elementIds, shouldScrollRef, dispatch]);
2904
2906
  return {
2905
2907
  // prop getters.
2906
2908
  getToggleButtonProps: getToggleButtonProps,
@@ -3429,8 +3431,8 @@
3429
3431
  var getItemProps = preact.useCallback(function (_temp3) {
3430
3432
  var _extends3, _ref4;
3431
3433
  var _ref3 = _temp3 === void 0 ? {} : _temp3,
3432
- item = _ref3.item,
3433
- index = _ref3.index,
3434
+ itemProp = _ref3.item,
3435
+ indexProp = _ref3.index,
3434
3436
  _ref3$refKey = _ref3.refKey,
3435
3437
  refKey = _ref3$refKey === void 0 ? 'ref' : _ref3$refKey,
3436
3438
  ref = _ref3.ref,
@@ -3443,10 +3445,8 @@
3443
3445
  var _latest$current = latest.current,
3444
3446
  latestProps = _latest$current.props,
3445
3447
  latestState = _latest$current.state;
3446
- var itemIndex = getItemIndex(index, item, latestProps.items);
3447
- if (itemIndex < 0) {
3448
- throw new Error('Pass either item or item index in getItemProps!');
3449
- }
3448
+ var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
3449
+ index = _getItemAndIndex[1];
3450
3450
  var onSelectKey = 'onClick';
3451
3451
  var customClickHandler = onClick;
3452
3452
  var itemHandleMouseMove = function itemHandleMouseMove() {
@@ -3471,9 +3471,9 @@
3471
3471
  };
3472
3472
  return _extends((_extends3 = {}, _extends3[refKey] = handleRefs(ref, function (itemNode) {
3473
3473
  if (itemNode) {
3474
- itemRefs.current[elementIds.getItemId(itemIndex)] = itemNode;
3474
+ itemRefs.current[elementIds.getItemId(index)] = itemNode;
3475
3475
  }
3476
- }), _extends3.disabled = disabled, _extends3.role = 'option', _extends3['aria-selected'] = "" + (itemIndex === latestState.highlightedIndex), _extends3.id = elementIds.getItemId(itemIndex), _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {
3476
+ }), _extends3.disabled = disabled, _extends3.role = 'option', _extends3['aria-selected'] = "" + (index === latestState.highlightedIndex), _extends3.id = elementIds.getItemId(index), _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {
3477
3477
  onMouseMove: callAllEventHandlers(onMouseMove, itemHandleMouseMove),
3478
3478
  onMouseDown: callAllEventHandlers(onMouseDown, itemHandleMouseDown)
3479
3479
  }, rest);
@@ -4013,14 +4013,13 @@
4013
4013
  ref = _ref3.ref,
4014
4014
  onClick = _ref3.onClick,
4015
4015
  onKeyDown = _ref3.onKeyDown,
4016
- selectedItem = _ref3.selectedItem,
4017
- index = _ref3.index,
4016
+ selectedItemProp = _ref3.selectedItem,
4017
+ indexProp = _ref3.index,
4018
4018
  rest = _objectWithoutPropertiesLoose(_ref3, _excluded);
4019
4019
  var latestState = latest.current.state;
4020
- var itemIndex = getItemIndex(index, selectedItem, latestState.selectedItems);
4021
- if (itemIndex < 0) {
4022
- throw new Error('Pass either selectedItem or index in getSelectedItemProps!');
4023
- }
4020
+ var _getItemAndIndex = getItemAndIndex(selectedItemProp, indexProp, latestState.selectedItems, 'Pass either item or index to getSelectedItemProps!'),
4021
+ index = _getItemAndIndex[1];
4022
+ var isFocusable = index > -1 && index === latestState.activeIndex;
4024
4023
  var selectedItemHandleClick = function selectedItemHandleClick() {
4025
4024
  dispatch({
4026
4025
  type: SelectedItemClick,
@@ -4037,7 +4036,7 @@
4037
4036
  if (selectedItemNode) {
4038
4037
  selectedItemRefs.current.push(selectedItemNode);
4039
4038
  }
4040
- }), _extends2.tabIndex = index === latestState.activeIndex ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
4039
+ }), _extends2.tabIndex = isFocusable ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
4041
4040
  }, [dispatch, latest, selectedItemKeyDownHandlers]);
4042
4041
  var getDropdownProps = preact.useCallback(function (_temp2, _temp3) {
4043
4042
  var _extends3;