@entur/dropdown 7.1.1-beta.0 → 7.1.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.
@@ -573,6 +573,7 @@ var DropdownFieldAppendix = /*#__PURE__*/React.forwardRef(function (_ref3, ref)
573
573
  ref: ref,
574
574
  "aria-label": getToggleAriaLabel()
575
575
  }, rest, {
576
+ type: "button",
576
577
  tabIndex: focusable ? 0 : -1
577
578
  }), !loading ? React.createElement(icons.DownArrowIcon, {
578
579
  "aria-hidden": "true"
@@ -985,22 +986,20 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
985
986
  case downshift.useCombobox.stateChangeTypes.InputChange:
986
987
  {
987
988
  var _changes$inputValue;
988
- setLastHighlightedIndex(0);
989
989
  var leadingWhitespaceTest = /^\s+/g;
990
990
  var isSpacePressedOnEmptyInput = changes.inputValue === ' ';
991
+ if (!isSpacePressedOnEmptyInput) setLastHighlightedIndex(0);
991
992
  if ((_changes$inputValue = changes.inputValue) != null && _changes$inputValue.match(leadingWhitespaceTest)) {
992
993
  var sanitizedInputValue = changes.inputValue.replace(leadingWhitespaceTest, EMPTY_INPUT);
993
994
  if (isSpacePressedOnEmptyInput) {
994
995
  if (!state.isOpen) return _extends({}, changes, {
995
996
  inputValue: sanitizedInputValue,
996
- isOpen: true,
997
- highlightedIndex: 0
997
+ isOpen: true
998
998
  });
999
999
  if (changes.highlightedIndex !== undefined) {
1000
1000
  return _extends({}, changes, {
1001
1001
  inputValue: sanitizedInputValue,
1002
- selectedItem: listItems[changes.highlightedIndex],
1003
- highlightedIndex: 0
1002
+ selectedItem: listItems[changes.highlightedIndex]
1004
1003
  });
1005
1004
  }
1006
1005
  }
@@ -1036,6 +1035,7 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1036
1035
  }));
1037
1036
  }
1038
1037
  }),
1038
+ closeMenu = _useCombobox.closeMenu,
1039
1039
  isOpen = _useCombobox.isOpen,
1040
1040
  getToggleButtonProps = _useCombobox.getToggleButtonProps,
1041
1041
  getLabelProps = _useCombobox.getLabelProps,
@@ -1147,15 +1147,23 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1147
1147
  'eds-dropdown__input--hidden': showSelectedItem
1148
1148
  })
1149
1149
  }, getInputProps({
1150
+ onKeyDown: function onKeyDown(e) {
1151
+ if (isOpen && e.key === 'Tab') {
1152
+ var highlitedItem = listItems[highlightedIndex];
1153
+ // we don't want to clear selection with tab
1154
+ if ((selectOnTab || selectOnBlur) && highlitedItem && highlitedItem !== selectedItem) {
1155
+ onChange == null || onChange(highlitedItem);
1156
+ }
1157
+ closeMenu();
1158
+ e.preventDefault();
1159
+ }
1160
+ },
1150
1161
  onBlur: function onBlur() {
1151
1162
  if (selectedItem !== null) setShowSelectedItem(true);
1152
1163
  },
1153
1164
  onFocus: function onFocus() {
1154
1165
  setShowSelectedItem(false);
1155
1166
  },
1156
- onKeyDown: function onKeyDown(e) {
1157
- if (isOpen && (selectOnTab || selectOnBlur) && e.key === 'Tab' && highlightedIndex !== undefined) onChange(listItems[highlightedIndex]);
1158
- },
1159
1167
  disabled: disabled,
1160
1168
  readOnly: readOnly,
1161
1169
  placeholder: (_selectedItem$label = selectedItem == null ? void 0 : selectedItem.label) != null ? _selectedItem$label : placeholder,
@@ -1180,7 +1188,7 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1180
1188
 
1181
1189
  var _excluded$2 = ["className", "clearable", "clearInputOnSelect", "debounceTimeout", "disabled", "disableLabelAnimation", "feedback", "hideSelectAll", "items", "itemFilter", "label", "labelAllItemsSelected", "labelClearAllItems", "labelSelectAll", "labelTooltip", "listStyle", "loading", "loadingText", "maxChips", "noMatchesText", "onChange", "placeholder", "readOnly", "selectedItems", "selectOnBlur", "selectOnTab", "style", "variant", "ariaLabelChosenSingular", "ariaLabelChosenPlural", "ariaLabelCloseList", "ariaLabelJumpToInput", "ariaLabelOpenList", "ariaLabelRemoveSelected", "ariaLabelSelectedItem"];
1182
1190
  var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1183
- var _inputRef$current4;
1191
+ var _inputRef$current5;
1184
1192
  var className = _ref.className,
1185
1193
  _ref$clearable = _ref.clearable,
1186
1194
  clearable = _ref$clearable === void 0 ? true : _ref$clearable,
@@ -1308,6 +1316,7 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1308
1316
  getSelectedItemProps = _useMultipleSelection.getSelectedItemProps,
1309
1317
  getDropdownProps = _useMultipleSelection.getDropdownProps;
1310
1318
  var stateReducer = React.useCallback(function (state, _ref5) {
1319
+ var _inputRef$current;
1311
1320
  var changes = _ref5.changes,
1312
1321
  type = _ref5.type;
1313
1322
  if (changes.highlightedIndex !== undefined && (changes == null ? void 0 : changes.highlightedIndex) >= 0) {
@@ -1316,6 +1325,7 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1316
1325
  switch (type) {
1317
1326
  // reset input value when leaving input field
1318
1327
  case downshift.useCombobox.stateChangeTypes.InputBlur:
1328
+ if (state.isOpen) (_inputRef$current = inputRef.current) == null || _inputRef$current.focus();
1319
1329
  return _extends({}, changes, {
1320
1330
  inputValue: EMPTY_INPUT
1321
1331
  });
@@ -1323,18 +1333,18 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1323
1333
  case downshift.useCombobox.stateChangeTypes.InputKeyDownEnter:
1324
1334
  case downshift.useCombobox.stateChangeTypes.ItemClick:
1325
1335
  {
1326
- var _inputRef$current$val, _inputRef$current;
1336
+ var _inputRef$current$val, _inputRef$current2;
1327
1337
  return _extends({}, changes, {
1328
1338
  isOpen: true,
1329
- inputValue: clearInputOnSelect ? EMPTY_INPUT : (_inputRef$current$val = inputRef == null || (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.value) != null ? _inputRef$current$val : EMPTY_INPUT
1339
+ inputValue: clearInputOnSelect ? EMPTY_INPUT : (_inputRef$current$val = inputRef == null || (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.value) != null ? _inputRef$current$val : EMPTY_INPUT
1330
1340
  });
1331
1341
  }
1332
1342
  // edit input value when selected items is updated outside component
1333
1343
  case downshift.useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
1334
1344
  {
1335
- var _inputRef$current$val2, _inputRef$current2;
1345
+ var _inputRef$current$val2, _inputRef$current3;
1336
1346
  return _extends({}, changes, {
1337
- inputValue: (_inputRef$current$val2 = inputRef == null || (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.value) != null ? _inputRef$current$val2 : EMPTY_INPUT
1347
+ inputValue: (_inputRef$current$val2 = inputRef == null || (_inputRef$current3 = inputRef.current) == null ? void 0 : _inputRef$current3.value) != null ? _inputRef$current$val2 : EMPTY_INPUT
1338
1348
  });
1339
1349
  }
1340
1350
  // remove leading whitespace, select item with spacebar if input is empty and filter list items
@@ -1441,10 +1451,10 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1441
1451
  }
1442
1452
  }, [isOpen, refs.reference, refs.floating, update]);
1443
1453
  var handleOnClear = function handleOnClear() {
1444
- var _inputRef$current3;
1454
+ var _inputRef$current4;
1445
1455
  onChange([]);
1446
1456
  setInputValue(EMPTY_INPUT);
1447
- (_inputRef$current3 = inputRef.current) == null || _inputRef$current3.focus();
1457
+ (_inputRef$current4 = inputRef.current) == null || _inputRef$current4.focus();
1448
1458
  updateListItems({
1449
1459
  inputValue: inputValue
1450
1460
  });
@@ -1497,7 +1507,7 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1497
1507
  'eds-dropdown--multiselect__selected-items-and-input--filled': hasSelectedItems
1498
1508
  })
1499
1509
  }, selectedItems.length > 1 ? React.createElement(a11y.VisuallyHidden, {
1500
- onClick: (_inputRef$current4 = inputRef.current) == null ? void 0 : _inputRef$current4.focus
1510
+ onClick: (_inputRef$current5 = inputRef.current) == null ? void 0 : _inputRef$current5.focus
1501
1511
  }, ariaLabelJumpToInput) : null, selectedItems.length <= maxChips ? selectedItems.map(function (selectedItem, index) {
1502
1512
  return React.createElement(SelectedItemTag, {
1503
1513
  ariaLabelChosen: ariaLabelChosenSingular,
@@ -1508,12 +1518,12 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1508
1518
  key: (selectedItem == null ? void 0 : selectedItem.label) + (typeof (selectedItem == null ? void 0 : selectedItem.value) === 'string' ? selectedItem.value : ''),
1509
1519
  readOnly: readOnly,
1510
1520
  removeSelectedItem: function removeSelectedItem() {
1511
- var _inputRef$current5;
1521
+ var _inputRef$current6;
1512
1522
  handleListItemClicked({
1513
1523
  clickedItem: selectedItem,
1514
1524
  onChange: onChange
1515
1525
  });
1516
- inputRef == null || (_inputRef$current5 = inputRef.current) == null || _inputRef$current5.focus();
1526
+ inputRef == null || (_inputRef$current6 = inputRef.current) == null || _inputRef$current6.focus();
1517
1527
  },
1518
1528
  selectedItem: selectedItem
1519
1529
  });
@@ -1624,6 +1634,7 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1624
1634
  },
1625
1635
  itemToString: itemToString
1626
1636
  }),
1637
+ closeMenu = _useSelect.closeMenu,
1627
1638
  isOpen = _useSelect.isOpen,
1628
1639
  getItemProps = _useSelect.getItemProps,
1629
1640
  getLabelProps = _useSelect.getLabelProps,
@@ -1687,7 +1698,15 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1687
1698
  children: undefined,
1688
1699
  tabIndex: disabled || readOnly ? -1 : 0,
1689
1700
  onKeyDown: function onKeyDown(e) {
1690
- if (isOpen && (selectOnTab || selectOnBlur) && e.key === 'Tab' && highlightedIndex !== undefined) onChange == null || onChange(normalizedItems[highlightedIndex]);
1701
+ if (isOpen && e.key === 'Tab') {
1702
+ var highlitedItem = normalizedItems[highlightedIndex];
1703
+ // we don't want to clear selection with tab
1704
+ if ((selectOnTab || selectOnBlur) && highlitedItem && highlitedItem !== selectedItem) {
1705
+ onChange == null || onChange(highlitedItem);
1706
+ }
1707
+ closeMenu();
1708
+ e.preventDefault();
1709
+ }
1691
1710
  }
1692
1711
  }), {
1693
1712
  after: React.createElement(DropdownList, {