@entur/dropdown 5.0.0-beta.3 → 5.0.0

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 (33) hide show
  1. package/dist/Dropdown.d.ts +38 -37
  2. package/dist/MultiSelect.d.ts +89 -32
  3. package/dist/NativeDropdown.d.ts +23 -9
  4. package/dist/SearchableDropdown.d.ts +63 -17
  5. package/dist/{beta/components → components}/DropdownList.d.ts +11 -10
  6. package/dist/{beta/components → components}/FieldComponents.d.ts +7 -3
  7. package/dist/{BaseDropdown.d.ts → deprecated/BaseDropdown.d.ts} +3 -3
  8. package/dist/{DownshiftProvider.d.ts → deprecated/DownshiftProvider.d.ts} +1 -1
  9. package/dist/deprecated/Dropdown.d.ts +72 -0
  10. package/dist/{DropdownInputGroup.d.ts → deprecated/DropdownInputGroup.d.ts} +2 -2
  11. package/dist/deprecated/DropdownList.d.ts +8 -0
  12. package/dist/{DropdownLoadingDots.d.ts → deprecated/DropdownLoadingDots.d.ts} +1 -1
  13. package/dist/deprecated/DropdownToggleButton.d.ts +3 -0
  14. package/dist/deprecated/MultiSelect.d.ts +64 -0
  15. package/dist/{RegularDropdown.d.ts → deprecated/RegularDropdown.d.ts} +3 -3
  16. package/dist/deprecated/SearchableDropdown.d.ts +34 -0
  17. package/dist/{beta → deprecated}/index.d.ts +1 -2
  18. package/dist/dropdown.cjs.development.js +588 -347
  19. package/dist/dropdown.cjs.development.js.map +1 -1
  20. package/dist/dropdown.cjs.production.min.js +1 -1
  21. package/dist/dropdown.cjs.production.min.js.map +1 -1
  22. package/dist/dropdown.esm.js +586 -345
  23. package/dist/dropdown.esm.js.map +1 -1
  24. package/dist/index.d.ts +4 -3
  25. package/dist/styles.css +254 -252
  26. package/dist/useNormalizedItems.d.ts +5 -6
  27. package/dist/{beta/utils.d.ts → utils.d.ts} +25 -4
  28. package/package.json +12 -12
  29. package/dist/DropdownList.d.ts +0 -8
  30. package/dist/DropdownToggleButton.d.ts +0 -3
  31. package/dist/beta/Dropdown.d.ts +0 -52
  32. package/dist/beta/MultiSelect.d.ts +0 -76
  33. package/dist/beta/SearchableDropdown.d.ts +0 -61
@@ -451,7 +451,7 @@ var useDownshift = function useDownshift() {
451
451
  };
452
452
 
453
453
  var _excluded$c = ["items"];
454
- var DropdownList$1 = function DropdownList(_ref) {
454
+ var DropdownListDeprecated = function DropdownListDeprecated(_ref) {
455
455
  var items = _ref.items,
456
456
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$c);
457
457
  var _useDownshift = useDownshift(),
@@ -487,7 +487,7 @@ var DropdownList$1 = function DropdownList(_ref) {
487
487
  }) : null);
488
488
  };
489
489
 
490
- var DropdownToggleButton$1 = function DropdownToggleButton() {
490
+ var DropdownDeprecatedToggleButton = function DropdownDeprecatedToggleButton() {
491
491
  var _useDownshift = useDownshift(),
492
492
  getToggleButtonProps = _useDownshift.getToggleButtonProps,
493
493
  isOpen = _useDownshift.isOpen;
@@ -502,7 +502,7 @@ var DropdownToggleButton$1 = function DropdownToggleButton() {
502
502
  };
503
503
 
504
504
  var _excluded$b = ["className", "children"];
505
- var DropdownLoadingDots = function DropdownLoadingDots(_ref) {
505
+ var DropdownDeprecatedLoadingDots = function DropdownDeprecatedLoadingDots(_ref) {
506
506
  var className = _ref.className,
507
507
  children = _ref.children,
508
508
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$b);
@@ -512,7 +512,7 @@ var DropdownLoadingDots = function DropdownLoadingDots(_ref) {
512
512
  };
513
513
 
514
514
  var _excluded$a = ["children", "className", "items", "loading", "loadingText", "placeholder", "style", "listStyle", "clearable", "label", "isFilled", "disableLabelAnimation"];
515
- var BaseDropdown = function BaseDropdown(_ref) {
515
+ var BaseDropdownDeprecated = function BaseDropdownDeprecated(_ref) {
516
516
  var children = _ref.children,
517
517
  className = _ref.className,
518
518
  items = _ref.items,
@@ -545,7 +545,7 @@ var BaseDropdown = function BaseDropdown(_ref) {
545
545
  isFilled: isFilled,
546
546
  labelProps: getLabelProps(),
547
547
  disableLabelAnimation: disableLabelAnimation
548
- }, rest), children), React.createElement(DropdownList$1, _extends({
548
+ }, rest), children), React.createElement(DropdownListDeprecated, _extends({
549
549
  items: items,
550
550
  style: _extends({
551
551
  position: 'absolute',
@@ -576,16 +576,16 @@ var Appendix$1 = function Appendix(_ref3) {
576
576
  loadingText = _ref3.loadingText,
577
577
  readOnly = _ref3.readOnly;
578
578
  if (loading) {
579
- return React.createElement(DropdownLoadingDots, null, loadingText);
579
+ return React.createElement(DropdownDeprecatedLoadingDots, null, loadingText);
580
580
  }
581
581
  if (readOnly) {
582
582
  return null;
583
583
  }
584
- return clearable ? React.createElement(React.Fragment, null, React.createElement(ClearButton$1, null), " ", React.createElement(DropdownToggleButton$1, null)) : React.createElement(DropdownToggleButton$1, null);
584
+ return clearable ? React.createElement(React.Fragment, null, React.createElement(ClearButton$1, null), " ", React.createElement(DropdownDeprecatedToggleButton, null)) : React.createElement(DropdownDeprecatedToggleButton, null);
585
585
  };
586
586
 
587
587
  var _excluded$9 = ["disabled", "placeholder", "selectOnTab", "openOnFocus", "listStyle", "items", "label", "disableLabelAnimation", "loading", "loadingText", "className", "clearable"];
588
- var RegularDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
588
+ var RegularDropdownDeprecated = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
589
589
  var disabled = _ref.disabled,
590
590
  _ref$placeholder = _ref.placeholder,
591
591
  placeholder = _ref$placeholder === void 0 ? 'Vennligst velg' : _ref$placeholder,
@@ -610,7 +610,7 @@ var RegularDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
610
610
  isOpen = _useDownshift.isOpen,
611
611
  highlightedIndex = _useDownshift.highlightedIndex,
612
612
  setHighlightedIndex = _useDownshift.setHighlightedIndex;
613
- return React.createElement(BaseDropdown, _extends({
613
+ return React.createElement(BaseDropdownDeprecated, _extends({
614
614
  disabled: disabled,
615
615
  listStyle: listStyle,
616
616
  items: items,
@@ -671,7 +671,17 @@ function LowerCaseFilterTest(item, input) {
671
671
  var inputRegex = new RegExp(sanitizeEscapeCharacters, 'i');
672
672
  return inputRegex.test(item.label);
673
673
  }
674
- var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
674
+ /**
675
+ * @deprecated
676
+ * New SearchableDropdown available
677
+ *
678
+ * migration guide to new dropdown:
679
+ * - change import from 'DropdownDeprecated' to 'Dropdown'
680
+ * - change from 'value' to 'selectedItem'
681
+ * + type of 'selectedItem' is 'NormalizedDropdownType' and does not include 'string'
682
+ * - 'onChange' must update value of 'selectedItem'
683
+ */
684
+ var SearchableDropdownDeprecated = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
675
685
  var _ref$disabled = _ref.disabled,
676
686
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
677
687
  className = _ref.className,
@@ -712,7 +722,7 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
712
722
  return itemFilter(item, inputValue);
713
723
  });
714
724
  }, [inputValue, items, itemFilter]);
715
- return React.createElement(BaseDropdown, {
725
+ return React.createElement(BaseDropdownDeprecated, {
716
726
  items: filteredItems,
717
727
  disabled: disabled,
718
728
  readOnly: readOnly,
@@ -754,7 +764,7 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
754
764
  })));
755
765
  });
756
766
 
757
- var DropdownInputGroup = function DropdownInputGroup(_ref) {
767
+ var DropdownInputGroupDeprecated = function DropdownInputGroupDeprecated(_ref) {
758
768
  var children = _ref.children,
759
769
  feedback = _ref.feedback,
760
770
  variant = _ref.variant,
@@ -892,7 +902,18 @@ debounceTimeout) {
892
902
  };
893
903
 
894
904
  var _excluded$7 = ["highlightFirstItemOnOpen", "debounceTimeout", "disabled", "feedback", "items", "label", "loadingText", "onChange", "placeholder", "prepend", "readOnly", "searchable", "selectOnTab", "openOnFocus", "variant", "value", "clearable", "className", "style", "listStyle", "itemFilter", "disableLabelAnimation"];
895
- var Dropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
905
+ /**
906
+ * @deprecated
907
+ * New Dropdown available
908
+ *
909
+ * migration guide to new dropdown:
910
+ * - change import from 'DropdownDeprecated' to 'Dropdown'
911
+ * + if 'searchable', switch to 'SearchableDropdown'
912
+ * - change from 'value' to 'selectedItem'
913
+ * + type of 'selectedItem' is 'NormalizedDropdownType' and does not include 'string'
914
+ * - 'onChange' must update value of 'selectedItem'
915
+ */
916
+ var DropdownDeprecated = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
896
917
  var highlightFirstItemOnOpen = _ref.highlightFirstItemOnOpen,
897
918
  debounceTimeout = _ref.debounceTimeout,
898
919
  disabled = _ref.disabled,
@@ -927,7 +948,7 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
927
948
  var selectedItem = value === undefined ? undefined : normalizedItems.find(function (item) {
928
949
  return value === item.value;
929
950
  }) || null;
930
- var RenderedDropdown = searchable ? SearchableDropdown : RegularDropdown;
951
+ var RenderedDropdown = searchable ? SearchableDropdownDeprecated : RegularDropdownDeprecated;
931
952
  var searchAbleProps = searchable ? {
932
953
  itemFilter: itemFilter,
933
954
  name: rest.name,
@@ -945,7 +966,7 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
945
966
  className: className,
946
967
  style: style,
947
968
  searchable: searchable
948
- }, rest), React.createElement(DropdownInputGroup, {
969
+ }, rest), React.createElement(DropdownInputGroupDeprecated, {
949
970
  feedback: feedback,
950
971
  variant: variant
951
972
  }, React.createElement(RenderedDropdown, _extends({
@@ -966,68 +987,10 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
966
987
  }, searchAbleProps))));
967
988
  });
968
989
 
969
- var _excluded$6 = ["className", "disabled", "readOnly", "items", "loadingText", "prepend", "style", "label", "variant", "feedback", "disableLabelAnimation"];
970
- var NativeDropdown = function NativeDropdown(_ref) {
971
- var className = _ref.className,
972
- _ref$disabled = _ref.disabled,
973
- disabled = _ref$disabled === void 0 ? false : _ref$disabled,
974
- _ref$readOnly = _ref.readOnly,
975
- readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
976
- items = _ref.items,
977
- loadingText = _ref.loadingText,
978
- prepend = _ref.prepend,
979
- style = _ref.style,
980
- label = _ref.label,
981
- variant = _ref.variant,
982
- feedback = _ref.feedback,
983
- disableLabelAnimation = _ref.disableLabelAnimation,
984
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
985
- var _useResolvedItems = useResolvedItems(items),
986
- normalizedItems = _useResolvedItems.items,
987
- loading = _useResolvedItems.loading;
988
- var rightSideIcon = React.createElement(DownArrowIcon, {
989
- inline: true,
990
- "aria-hidden": "true"
991
- });
992
- if (disabled || readOnly) {
993
- rightSideIcon = null;
994
- } else if (loading) {
995
- rightSideIcon = React.createElement(DropdownLoadingDots, {
996
- "aria-hidden": "true"
997
- }, loadingText);
998
- }
999
- var nativeDropdownId = useRandomId('eds-native-dropdown');
1000
- return React.createElement(BaseFormControl, {
1001
- disabled: disabled,
1002
- readOnly: readOnly,
1003
- prepend: prepend,
1004
- append: rightSideIcon,
1005
- className: className,
1006
- style: style,
1007
- label: label,
1008
- labelId: nativeDropdownId,
1009
- variant: variant,
1010
- feedback: feedback,
1011
- disableLabelAnimation: disableLabelAnimation,
1012
- isFilled: true
1013
- }, React.createElement("select", _extends({
1014
- "aria-invalid": variant === 'error',
1015
- "aria-labelledby": nativeDropdownId,
1016
- "aria-busy": loading,
1017
- className: "eds-form-control eds-dropdown",
1018
- disabled: disabled || readOnly
1019
- }, rest), normalizedItems.map(function (item) {
1020
- return React.createElement("option", {
1021
- key: item.value,
1022
- value: item.value
1023
- }, item.label);
1024
- })));
1025
- };
1026
-
1027
- var _excluded$5 = ["className", "clearable", "debounceTimeout", "disabled", "feedback", "initialSelectedItems", "items", "itemsSelectedLabel", "label", "listStyle", "loading", "loadingText", "onChange", "openOnFocus", "readOnly", "style", "variant"];
1028
- var MultiSelectContext = /*#__PURE__*/React.createContext(null);
1029
- var useMultiSelectContext = function useMultiSelectContext() {
1030
- var context = React.useContext(MultiSelectContext);
990
+ var _excluded$6 = ["className", "clearable", "debounceTimeout", "disabled", "feedback", "initialSelectedItems", "items", "itemsSelectedLabel", "label", "listStyle", "loading", "loadingText", "onChange", "openOnFocus", "readOnly", "style", "variant"];
991
+ var MultiSelectOldContext = /*#__PURE__*/React.createContext(null);
992
+ var useMultiSelectOldContext = function useMultiSelectOldContext() {
993
+ var context = React.useContext(MultiSelectOldContext);
1031
994
  if (!context) {
1032
995
  throw new Error('You need to wrap your component in a DownshiftProvider');
1033
996
  }
@@ -1039,8 +1002,8 @@ actionAndChanges) {
1039
1002
  var changes = actionAndChanges.changes,
1040
1003
  type = actionAndChanges.type;
1041
1004
  switch (type) {
1042
- case useSelect.stateChangeTypes.MenuKeyDownEnter:
1043
- case useSelect.stateChangeTypes.MenuKeyDownSpaceButton:
1005
+ case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
1006
+ case useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton:
1044
1007
  case useSelect.stateChangeTypes.ItemClick:
1045
1008
  return _extends({}, changes, {
1046
1009
  isOpen: true,
@@ -1050,7 +1013,17 @@ actionAndChanges) {
1050
1013
  return changes;
1051
1014
  }
1052
1015
  }
1053
- var MultiSelect = function MultiSelect(_ref) {
1016
+ /**
1017
+ * @deprecated
1018
+ * New MultiSelect available
1019
+ *
1020
+ * migration guide to new dropdown:
1021
+ * - change import from 'MultiSelectDeprecated' to 'MultiSelect'
1022
+ * - add state containing selected items to 'selectedItems' prop
1023
+ * + type of 'selectedItems' is 'NormalizedDropdownType[]' and does not include 'string'
1024
+ * - 'onChange' must update value of 'selectedItem'
1025
+ */
1026
+ var MultiSelectDeprecated = function MultiSelectDeprecated(_ref) {
1054
1027
  var className = _ref.className,
1055
1028
  _ref$clearable = _ref.clearable,
1056
1029
  clearable = _ref$clearable === void 0 ? false : _ref$clearable,
@@ -1080,7 +1053,7 @@ var MultiSelect = function MultiSelect(_ref) {
1080
1053
  readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
1081
1054
  style = _ref.style,
1082
1055
  variant = _ref.variant,
1083
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
1056
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
1084
1057
  var _useResolvedItems = useResolvedItems(input, debounceTimeout),
1085
1058
  items = _useResolvedItems.items;
1086
1059
  var _useState = useState(initialSelectedItems),
@@ -1126,7 +1099,7 @@ var MultiSelect = function MultiSelect(_ref) {
1126
1099
  openMenu = _useSelect.openMenu;
1127
1100
  var buttonText = selectedItems.length ? itemsSelectedLabel(selectedItems) : '';
1128
1101
  var multiSelectId = useRandomId('eds-multiselect');
1129
- return React.createElement(MultiSelectContext.Provider, {
1102
+ return React.createElement(MultiSelectOldContext.Provider, {
1130
1103
  value: {
1131
1104
  isOpen: isOpen,
1132
1105
  reset: reset,
@@ -1202,8 +1175,8 @@ var MultiSelect = function MultiSelect(_ref) {
1202
1175
  };
1203
1176
  var ClearButton = function ClearButton(_ref3) {
1204
1177
  var props = _extends({}, (_objectDestructuringEmpty(_ref3), _ref3));
1205
- var _useMultiSelectContex = useMultiSelectContext(),
1206
- reset = _useMultiSelectContex.reset;
1178
+ var _useMultiSelectOldCon = useMultiSelectOldContext(),
1179
+ reset = _useMultiSelectOldCon.reset;
1207
1180
  return React.createElement(React.Fragment, null, React.createElement("button", _extends({
1208
1181
  className: "eds-dropdown__clear-button",
1209
1182
  type: "button",
@@ -1221,7 +1194,7 @@ var Appendix = function Appendix(_ref4) {
1221
1194
  readOnly = _ref4.readOnly,
1222
1195
  hasSelected = _ref4.hasSelected;
1223
1196
  if (loading) {
1224
- return React.createElement(DropdownLoadingDots, null, loadingText);
1197
+ return React.createElement(DropdownDeprecatedLoadingDots, null, loadingText);
1225
1198
  }
1226
1199
  if (readOnly) {
1227
1200
  return null;
@@ -1229,11 +1202,11 @@ var Appendix = function Appendix(_ref4) {
1229
1202
  return hasSelected ? React.createElement(React.Fragment, null, React.createElement(ClearButton, null), React.createElement(DropdownToggleButton, null)) : React.createElement(DropdownToggleButton, null);
1230
1203
  };
1231
1204
  var DropdownToggleButton = function DropdownToggleButton() {
1232
- var _useMultiSelectContex2 = useMultiSelectContext(),
1233
- getToggleButtonProps = _useMultiSelectContex2.getToggleButtonProps,
1234
- isOpen = _useMultiSelectContex2.isOpen,
1235
- openMenu = _useMultiSelectContex2.openMenu,
1236
- openOnFocus = _useMultiSelectContex2.openOnFocus;
1205
+ var _useMultiSelectOldCon2 = useMultiSelectOldContext(),
1206
+ getToggleButtonProps = _useMultiSelectOldCon2.getToggleButtonProps,
1207
+ isOpen = _useMultiSelectOldCon2.isOpen,
1208
+ openMenu = _useMultiSelectOldCon2.openMenu,
1209
+ openOnFocus = _useMultiSelectOldCon2.openOnFocus;
1237
1210
  return React.createElement("button", _extends({}, getToggleButtonProps({
1238
1211
  className: classNames('eds-dropdown__toggle-button', {
1239
1212
  'eds-dropdown__toggle-button--open': isOpen
@@ -1265,33 +1238,51 @@ function SelectedItemsLabel(items) {
1265
1238
  }).toString() : items.length + " elementer valgt";
1266
1239
  }
1267
1240
 
1268
- var _excluded$4 = ["selectedItems", "listItems", "inputValue", "isOpen", "getMenuProps", "getItemProps", "highlightedIndex", "showSelectAllInList", "loading", "selectAllCheckboxState", "selectAllItem", "listStyle", "noMatchesText", "loadingText", "selectedItemAriaLabel"];
1241
+ var _excluded$5 = ["ariaLabelChosenSingular", "ariaLabelSelectedItem", "getItemProps", "getMenuProps", "inputValue", "isOpen", "highlightedIndex", "listItems", "listStyle", "loading", "loadingText", "noMatchesText", "selectAllCheckboxState", "selectAllItem", "selectedItems", "showSelectAllInList"];
1269
1242
  var DropdownList = function DropdownList(_ref) {
1270
- var selectedItems = _ref.selectedItems,
1271
- listItems = _ref.listItems,
1272
- isOpen = _ref.isOpen,
1273
- getMenuProps = _ref.getMenuProps,
1243
+ var _ref$ariaLabelChosenS = _ref.ariaLabelChosenSingular,
1244
+ ariaLabelChosenSingular = _ref$ariaLabelChosenS === void 0 ? 'valgt' : _ref$ariaLabelChosenS,
1245
+ _ref$ariaLabelSelecte = _ref.ariaLabelSelectedItem,
1246
+ ariaLabelSelectedItem = _ref$ariaLabelSelecte === void 0 ? ', valgt element, trykk for å fjerne' : _ref$ariaLabelSelecte,
1274
1247
  getItemProps = _ref.getItemProps,
1248
+ getMenuProps = _ref.getMenuProps,
1249
+ isOpen = _ref.isOpen,
1275
1250
  highlightedIndex = _ref.highlightedIndex,
1251
+ listItems = _ref.listItems,
1252
+ listStyle = _ref.listStyle,
1276
1253
  _ref$loading = _ref.loading,
1277
1254
  loading = _ref$loading === void 0 ? false : _ref$loading,
1278
- selectAllCheckboxState = _ref.selectAllCheckboxState,
1279
- selectAllItem = _ref.selectAllItem,
1280
- listStyle = _ref.listStyle,
1281
- _ref$noMatchesText = _ref.noMatchesText,
1282
- noMatchesText = _ref$noMatchesText === void 0 ? 'Ingen treff for søket' : _ref$noMatchesText,
1283
1255
  _ref$loadingText = _ref.loadingText,
1284
1256
  loadingText = _ref$loadingText === void 0 ? 'Laster inn …' : _ref$loadingText,
1285
- _ref$selectedItemAria = _ref.selectedItemAriaLabel,
1286
- selectedItemAriaLabel = _ref$selectedItemAria === void 0 ? ', valgt element' : _ref$selectedItemAria,
1287
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
1257
+ _ref$noMatchesText = _ref.noMatchesText,
1258
+ noMatchesText = _ref$noMatchesText === void 0 ? 'Ingen treff for søket' : _ref$noMatchesText,
1259
+ selectAllCheckboxState = _ref.selectAllCheckboxState,
1260
+ selectAllItem = _ref.selectAllItem,
1261
+ selectedItems = _ref.selectedItems,
1262
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
1288
1263
  var isMultiselect = selectAllItem !== undefined;
1289
1264
  var isNoMatches = !loading && (listItems.length === 0 || listItems.length === 1 && listItems[0].value === (selectAllItem == null ? void 0 : selectAllItem.value));
1290
- var itemIsSelected = function itemIsSelected(item) {
1265
+ var isItemSelected = function isItemSelected(item) {
1291
1266
  return selectedItems.some(function (selectedItem) {
1292
- return selectedItem.value === item.value;
1267
+ return selectedItem.value === item.value && selectedItem.label === item.label;
1293
1268
  });
1294
1269
  };
1270
+ var ariaLabelSelectAll = function ariaLabelSelectAll() {
1271
+ switch (selectAllCheckboxState == null ? void 0 : selectAllCheckboxState()) {
1272
+ case 'indeterminate':
1273
+ {
1274
+ return (selectAllItem == null ? void 0 : selectAllItem.label) + ", delvis valgt";
1275
+ }
1276
+ case true:
1277
+ {
1278
+ return (selectAllItem == null ? void 0 : selectAllItem.label) + ", " + ariaLabelChosenSingular;
1279
+ }
1280
+ default:
1281
+ {
1282
+ return "" + (selectAllItem == null ? void 0 : selectAllItem.label);
1283
+ }
1284
+ }
1285
+ };
1295
1286
  var selectAllListItemContent = function selectAllListItemContent() {
1296
1287
  return React.createElement(React.Fragment, null, React.createElement(Checkbox, {
1297
1288
  "aria-hidden": "true",
@@ -1302,13 +1293,14 @@ var DropdownList = function DropdownList(_ref) {
1302
1293
  },
1303
1294
  tabIndex: -1
1304
1295
  }), React.createElement("span", {
1305
- className: "eds-dropdown__list__item__text"
1296
+ className: "eds-dropdown__list__item__text",
1297
+ "aria-label": ariaLabelSelectAll()
1306
1298
  }, selectAllItem == null ? void 0 : selectAllItem.label));
1307
1299
  };
1308
1300
  var listItemContent = function listItemContent(item) {
1309
1301
  return React.createElement(React.Fragment, null, React.createElement(Checkbox, {
1310
1302
  "aria-hidden": "true",
1311
- checked: itemIsSelected(item),
1303
+ checked: isItemSelected(item),
1312
1304
  className: "eds-dropdown__list__item__checkbox",
1313
1305
  onChange: function onChange() {
1314
1306
  return;
@@ -1319,7 +1311,7 @@ var DropdownList = function DropdownList(_ref) {
1319
1311
  tabIndex: -1
1320
1312
  }), React.createElement("span", {
1321
1313
  className: "eds-dropdown__list__item__text"
1322
- }, item.label, React.createElement(VisuallyHidden, null, selectedItemAriaLabel)), item.icons && React.createElement("span", null, item.icons.map(function (Icon, index) {
1314
+ }, item.label, React.createElement(VisuallyHidden, null, isItemSelected(item) ? ariaLabelSelectedItem : '')), item.icons && React.createElement("span", null, item.icons.map(function (Icon, index) {
1323
1315
  return React.createElement(Icon, {
1324
1316
  key: index,
1325
1317
  inline: true,
@@ -1328,35 +1320,166 @@ var DropdownList = function DropdownList(_ref) {
1328
1320
  })));
1329
1321
  };
1330
1322
  return (
1331
- // use popover from @entur/tooltip when the package uses floating-ui
1323
+ // use popover from @entur/tooltip when that package upgrades to floating-ui
1332
1324
  React.createElement("ul", _extends({}, getMenuProps(), {
1333
- className: classNames('eds-dropdown__list', {
1334
- 'eds-dropdown__list--open': isOpen
1335
- }),
1336
- style: _extends({}, rest.style, listStyle)
1337
- }), isOpen && listItems.length > 0 && listItems.map(function (item, index) {
1325
+ className: "eds-dropdown__list",
1326
+ style: _extends({
1327
+ display: isOpen ? 'inline-block' : 'none'
1328
+ }, rest.style, listStyle)
1329
+ }), listItems.length > 0 && listItems.map(function (item, index) {
1338
1330
  var itemIsSelectAll = item.value === (selectAllItem == null ? void 0 : selectAllItem.value);
1339
- if (itemIsSelectAll && listItems.length <= 2) return React.createElement(React.Fragment, null);
1331
+ if (itemIsSelectAll && listItems.length <= 2) return null;
1340
1332
  return React.createElement("li", _extends({
1341
- key: item.value,
1333
+ key: item.label,
1342
1334
  className: classNames('eds-dropdown__list__item', {
1343
1335
  'eds-dropdown__list__item--select-all': itemIsSelectAll,
1344
1336
  'eds-dropdown__list__item--highlighted': highlightedIndex === index,
1345
- 'eds-dropdown__list__item--selected': !isMultiselect && itemIsSelected(item)
1337
+ 'eds-dropdown__list__item--selected': !isMultiselect && isItemSelected(item)
1346
1338
  })
1347
1339
  }, getItemProps({
1348
- key: "" + index + item.value,
1340
+ key: item.label,
1349
1341
  item: item,
1350
1342
  index: index
1351
1343
  })), itemIsSelectAll ? selectAllListItemContent() : listItemContent(item));
1352
- }), isOpen && isNoMatches && React.createElement("li", {
1344
+ }), isNoMatches && React.createElement("li", {
1345
+ key: "dropdown-list-no-match",
1353
1346
  className: "eds-dropdown__list__item"
1354
- }, noMatchesText), isOpen && loading && React.createElement("li", {
1347
+ }, noMatchesText), loading && React.createElement("li", {
1348
+ key: "dropdown-list-loading",
1355
1349
  className: "eds-dropdown__list__item"
1356
1350
  }, loadingText))
1357
1351
  );
1358
1352
  };
1359
1353
 
1354
+ var _excluded$4 = ["tabIndex"];
1355
+ var SelectedItemTag = function SelectedItemTag(_ref) {
1356
+ var _getSelectedItemProps;
1357
+ var ariaLabelRemoveSelected = _ref.ariaLabelRemoveSelected,
1358
+ _ref$ariaLabelChosen = _ref.ariaLabelChosen,
1359
+ ariaLabelChosen = _ref$ariaLabelChosen === void 0 ? 'valgt' : _ref$ariaLabelChosen,
1360
+ disabled = _ref.disabled,
1361
+ getSelectedItemProps = _ref.getSelectedItemProps,
1362
+ index = _ref.index,
1363
+ readOnly = _ref.readOnly,
1364
+ removeSelectedItem = _ref.removeSelectedItem,
1365
+ selectedItem = _ref.selectedItem;
1366
+ var _ref2 = (_getSelectedItemProps = getSelectedItemProps == null ? void 0 : getSelectedItemProps({
1367
+ selectedItem: selectedItem,
1368
+ index: index
1369
+ })) != null ? _getSelectedItemProps : {},
1370
+ selectedItemProps = _objectWithoutPropertiesLoose(_ref2, _excluded$4);
1371
+ return React.createElement(TagChip, _extends({
1372
+ className: classNames('eds-dropdown__selected-item-tag', {
1373
+ 'eds-dropdown__selected-item-tag--readonly': readOnly,
1374
+ 'eds-dropdown__selected-item-tag--disabled': disabled
1375
+ })
1376
+ }, selectedItemProps, {
1377
+ onClose: function onClose(e) {
1378
+ e.stopPropagation();
1379
+ removeSelectedItem(selectedItem);
1380
+ },
1381
+ closeButtonAriaLabel: selectedItem.label + " " + ariaLabelChosen + ", " + ariaLabelRemoveSelected + " ",
1382
+ key: selectedItem.value,
1383
+ "aria-live": "polite"
1384
+ }), React.createElement("span", {
1385
+ "aria-hidden": "true"
1386
+ }, selectedItem.label));
1387
+ };
1388
+ var FieldAppend$1 = function FieldAppend(_ref3) {
1389
+ var _ref3$ariaHiddenToggl = _ref3.ariaHiddenToggleButton,
1390
+ ariaHiddenToggleButton = _ref3$ariaHiddenToggl === void 0 ? false : _ref3$ariaHiddenToggl,
1391
+ ariaLabelCloseList = _ref3.ariaLabelCloseList,
1392
+ ariaLabelOpenList = _ref3.ariaLabelOpenList,
1393
+ _ref3$clearable = _ref3.clearable,
1394
+ clearable = _ref3$clearable === void 0 ? false : _ref3$clearable,
1395
+ labelClearSelectedItems = _ref3.labelClearSelectedItems,
1396
+ _ref3$disabled = _ref3.disabled,
1397
+ disabled = _ref3$disabled === void 0 ? false : _ref3$disabled,
1398
+ _ref3$focusable = _ref3.focusable,
1399
+ focusable = _ref3$focusable === void 0 ? false : _ref3$focusable,
1400
+ getToggleButtonProps = _ref3.getToggleButtonProps,
1401
+ isOpen = _ref3.isOpen,
1402
+ _ref3$loading = _ref3.loading,
1403
+ loading = _ref3$loading === void 0 ? false : _ref3$loading,
1404
+ _ref3$loadingText = _ref3.loadingText,
1405
+ loadingText = _ref3$loadingText === void 0 ? 'Laster resultater …' : _ref3$loadingText,
1406
+ onClear = _ref3.onClear,
1407
+ selectedItems = _ref3.selectedItems;
1408
+ if (loading) {
1409
+ return React.createElement("div", {
1410
+ className: 'eds-dropdown-appendix__toggle-button--loading-dots'
1411
+ }, React.createElement(LoadingDots, {
1412
+ "aria-label": loadingText
1413
+ }));
1414
+ }
1415
+ if (disabled) {
1416
+ return null;
1417
+ }
1418
+ return React.createElement("div", {
1419
+ className: "eds-dropdown-appendix"
1420
+ }, clearable && (selectedItems == null ? void 0 : selectedItems.length) > 0 && selectedItems[0] !== null && React.createElement(React.Fragment, null, React.createElement(ClearableButton, {
1421
+ onClear: onClear,
1422
+ focusable: true,
1423
+ labelClearSelectedItems: labelClearSelectedItems
1424
+ }), React.createElement("div", {
1425
+ className: "eds-dropdown-appendix__divider"
1426
+ })), React.createElement(ToggleButton, {
1427
+ "aria-hidden": ariaHiddenToggleButton,
1428
+ ariaLabelCloseList: ariaLabelCloseList,
1429
+ ariaLabelOpenList: ariaLabelOpenList,
1430
+ getToggleButtonProps: getToggleButtonProps,
1431
+ isOpen: isOpen,
1432
+ focusable: focusable
1433
+ }));
1434
+ };
1435
+ var ClearableButton = function ClearableButton(_ref4) {
1436
+ var onClear = _ref4.onClear,
1437
+ _ref4$labelClearSelec = _ref4.labelClearSelectedItems,
1438
+ labelClearSelectedItems = _ref4$labelClearSelec === void 0 ? 'Fjern valgte' : _ref4$labelClearSelec,
1439
+ _ref4$focusable = _ref4.focusable,
1440
+ focusable = _ref4$focusable === void 0 ? false : _ref4$focusable;
1441
+ return React.createElement(Tooltip, {
1442
+ "aria-hidden": "true",
1443
+ placement: "top",
1444
+ content: labelClearSelectedItems,
1445
+ className: "eds-dropdown-appendix__clear-button__tooltip"
1446
+ }, React.createElement(IconButton, {
1447
+ className: "eds-dropdown-appendix__clear-button",
1448
+ type: "button",
1449
+ tabIndex: focusable ? 0 : 1,
1450
+ onClick: onClear,
1451
+ "aria-label": labelClearSelectedItems
1452
+ }, React.createElement(CloseSmallIcon, {
1453
+ "aria-hidden": "true"
1454
+ })));
1455
+ };
1456
+ var ToggleButton = function ToggleButton(_ref5) {
1457
+ var getToggleButtonProps = _ref5.getToggleButtonProps,
1458
+ isOpen = _ref5.isOpen,
1459
+ _ref5$ariaHidden = _ref5['aria-hidden'],
1460
+ ariaHidden = _ref5$ariaHidden === void 0 ? false : _ref5$ariaHidden,
1461
+ _ref5$ariaLabelCloseL = _ref5.ariaLabelCloseList,
1462
+ ariaLabelCloseList = _ref5$ariaLabelCloseL === void 0 ? 'Lukk liste med valg' : _ref5$ariaLabelCloseL,
1463
+ _ref5$ariaLabelOpenLi = _ref5.ariaLabelOpenList,
1464
+ ariaLabelOpenList = _ref5$ariaLabelOpenLi === void 0 ? 'Åpne liste med valg' : _ref5$ariaLabelOpenLi,
1465
+ _ref5$focusable = _ref5.focusable,
1466
+ focusable = _ref5$focusable === void 0 ? false : _ref5$focusable;
1467
+ return React.createElement(IconButton, _extends({}, getToggleButtonProps({
1468
+ className: classNames('eds-dropdown-appendix__toggle-button', {
1469
+ 'eds-dropdown-appendix__toggle-button--open': isOpen
1470
+ }),
1471
+ 'aria-labelledby': undefined
1472
+ }), {
1473
+ "aria-hidden": ariaHidden,
1474
+ "aria-label": ariaHidden ? undefined : isOpen ? ariaLabelCloseList : ariaLabelOpenList,
1475
+ tabIndex: focusable ? 0 : -1,
1476
+ type: "button"
1477
+ }), React.createElement(DownArrowIcon, {
1478
+ "aria-hidden": "true"
1479
+ }));
1480
+ };
1481
+
1482
+ /* start general utils */
1360
1483
  var EMPTY_INPUT = '';
1361
1484
  function lowerCaseFilterTest(item, input) {
1362
1485
  if (!input) {
@@ -1372,10 +1495,10 @@ var itemToString = function itemToString(item) {
1372
1495
  var useMultiselectUtils = function useMultiselectUtils(_ref) {
1373
1496
  var listItems = _ref.listItems,
1374
1497
  selectedItems = _ref.selectedItems,
1375
- selectAllValue = _ref.selectAllValue;
1498
+ selectAll = _ref.selectAll;
1376
1499
  var hasSelectedItems = selectedItems.length > 0;
1377
1500
  var listItemsWithoutSelectAll = listItems.filter(function (item) {
1378
- return item.value !== selectAllValue;
1501
+ return item.value !== selectAll.value;
1379
1502
  });
1380
1503
  var allListItemsAreSelected = listItemsWithoutSelectAll.filter(function (item) {
1381
1504
  return !selectedItems.includes(item);
@@ -1392,18 +1515,21 @@ var useMultiselectUtils = function useMultiselectUtils(_ref) {
1392
1515
  });
1393
1516
  };
1394
1517
  var clickedItemIsSelectAll = function clickedItemIsSelectAll(clickedItem) {
1395
- return clickedItem.value === selectAllValue;
1518
+ return clickedItem.value === selectAll.value;
1396
1519
  };
1397
1520
  var handleListItemClicked = function handleListItemClicked(_ref2) {
1398
1521
  var clickedItem = _ref2.clickedItem,
1399
- onChange = _ref2.onChange;
1522
+ onChange = _ref2.onChange,
1523
+ setLastRemovedItem = _ref2.setLastRemovedItem;
1400
1524
  if (clickedItemIsSelectAll(clickedItem)) {
1401
1525
  if (allListItemsAreSelected) {
1526
+ setLastRemovedItem(selectAll);
1402
1527
  return unselectAllListItems(onChange);
1403
1528
  }
1404
1529
  return selectAllUnselectedItemsInListItems(onChange);
1405
1530
  }
1406
1531
  if (clickedItemIsInSelectedItems(clickedItem)) {
1532
+ setLastRemovedItem(clickedItem);
1407
1533
  return removeClickedItemFromSelectedItems(clickedItem, onChange);
1408
1534
  }
1409
1535
  addClickedItemToSelectedItems(clickedItem, onChange);
@@ -1443,125 +1569,63 @@ var useMultiselectUtils = function useMultiselectUtils(_ref) {
1443
1569
  unselectAllListItems: unselectAllListItems
1444
1570
  };
1445
1571
  };
1446
-
1447
- var _excluded$3 = ["tabIndex"];
1448
- var SelectedItemTag = function SelectedItemTag(_ref) {
1449
- var _getSelectedItemProps;
1450
- var ariaLabelRemoveSelected = _ref.ariaLabelRemoveSelected,
1451
- disabled = _ref.disabled,
1452
- getSelectedItemProps = _ref.getSelectedItemProps,
1453
- index = _ref.index,
1454
- readOnly = _ref.readOnly,
1455
- removeSelectedItem = _ref.removeSelectedItem,
1456
- selectedItem = _ref.selectedItem;
1457
- var _ref2 = (_getSelectedItemProps = getSelectedItemProps == null ? void 0 : getSelectedItemProps({
1458
- selectedItem: selectedItem,
1459
- index: index
1460
- })) != null ? _getSelectedItemProps : {},
1461
- selectedItemProps = _objectWithoutPropertiesLoose(_ref2, _excluded$3);
1462
- return React.createElement(TagChip, _extends({
1463
- className: classNames('eds-dropdown__selected-item-tag', {
1464
- 'eds-dropdown__selected-item-tag--readonly': readOnly,
1465
- 'eds-dropdown__selected-item-tag--disabled': disabled
1466
- })
1467
- }, selectedItemProps, {
1468
- onClose: function onClose(e) {
1469
- e.stopPropagation();
1470
- removeSelectedItem(selectedItem);
1471
- },
1472
- closeButtonAriaLabel: selectedItem.label + ", " + ariaLabelRemoveSelected + " ",
1473
- key: selectedItem.value
1474
- }), React.createElement("span", {
1475
- "aria-hidden": "true"
1476
- }, selectedItem.label));
1477
- };
1478
- var FieldAppend = function FieldAppend(_ref3) {
1479
- var _ref3$clearable = _ref3.clearable,
1480
- clearable = _ref3$clearable === void 0 ? false : _ref3$clearable,
1481
- clearSelectedItemsLabel = _ref3.clearSelectedItemsLabel,
1482
- _ref3$disabled = _ref3.disabled,
1483
- disabled = _ref3$disabled === void 0 ? false : _ref3$disabled,
1484
- _ref3$focusable = _ref3.focusable,
1485
- focusable = _ref3$focusable === void 0 ? false : _ref3$focusable,
1486
- getToggleButtonProps = _ref3.getToggleButtonProps,
1487
- isOpen = _ref3.isOpen,
1488
- _ref3$loading = _ref3.loading,
1489
- loading = _ref3$loading === void 0 ? false : _ref3$loading,
1490
- _ref3$loadingText = _ref3.loadingText,
1491
- loadingText = _ref3$loadingText === void 0 ? 'Laster resultater …' : _ref3$loadingText,
1492
- onClear = _ref3.onClear,
1493
- selectedItems = _ref3.selectedItems;
1494
- if (loading) {
1495
- return React.createElement(DropdownLoadingDots, null, loadingText);
1572
+ function getA11yStatusMessage(options) {
1573
+ var isOpen = options.isOpen,
1574
+ resultCount = options.resultCount,
1575
+ previousResultCount = options.previousResultCount,
1576
+ _options$selectAllIte = options.selectAllItemIncluded,
1577
+ selectAllItemIncluded = _options$selectAllIte === void 0 ? false : _options$selectAllIte,
1578
+ _options$ariaLabelNoR = options.ariaLabelNoResults,
1579
+ ariaLabelNoResults = _options$ariaLabelNoR === void 0 ? 'Ingen resultater' : _options$ariaLabelNoR;
1580
+ if (!isOpen) {
1581
+ return '';
1496
1582
  }
1497
- if (disabled) {
1498
- return null;
1583
+ var resultCountWithoutSelectAll = selectAllItemIncluded ? resultCount - 1 : resultCount;
1584
+ if (resultCountWithoutSelectAll === 0) {
1585
+ return ariaLabelNoResults;
1499
1586
  }
1500
- return (
1501
- // to have a natural tab order, these elements are ordered opposite of how they are displayed
1502
- React.createElement("div", {
1503
- className: "eds-dropdown-appendix"
1504
- }, React.createElement(ToggleButton, {
1505
- getToggleButtonProps: getToggleButtonProps,
1506
- isOpen: isOpen,
1507
- focusable: focusable
1508
- }), clearable && (selectedItems == null ? void 0 : selectedItems.length) > 0 && selectedItems[0] !== null && React.createElement(React.Fragment, null, React.createElement("div", {
1509
- className: "eds-dropdown-appendix__divider"
1510
- }), React.createElement(ClearableButton, {
1511
- onClear: onClear,
1512
- focusable: true,
1513
- clearSelectedItemsLabel: clearSelectedItemsLabel
1514
- })))
1515
- );
1516
- };
1517
- var ClearableButton = function ClearableButton(_ref4) {
1518
- var onClear = _ref4.onClear,
1519
- _ref4$clearSelectedIt = _ref4.clearSelectedItemsLabel,
1520
- clearSelectedItemsLabel = _ref4$clearSelectedIt === void 0 ? 'Fjern valgte' : _ref4$clearSelectedIt,
1521
- _ref4$focusable = _ref4.focusable,
1522
- focusable = _ref4$focusable === void 0 ? false : _ref4$focusable;
1523
- return React.createElement(Tooltip, {
1524
- "aria-hidden": "true",
1525
- placement: "right",
1526
- content: clearSelectedItemsLabel
1527
- }, React.createElement(IconButton, {
1528
- className: "eds-dropdown-appendix__clear-button",
1529
- type: "button",
1530
- tabIndex: focusable ? 0 : 1,
1531
- onClick: onClear,
1532
- "aria-label": clearSelectedItemsLabel
1533
- }, React.createElement(CloseSmallIcon, {
1534
- "aria-hidden": "true"
1535
- })));
1536
- };
1537
- var ToggleButton = function ToggleButton(_ref5) {
1538
- var getToggleButtonProps = _ref5.getToggleButtonProps,
1539
- isOpen = _ref5.isOpen,
1540
- _ref5$closeAriaLabel = _ref5.closeAriaLabel,
1541
- closeAriaLabel = _ref5$closeAriaLabel === void 0 ? 'Lukk liste med valg' : _ref5$closeAriaLabel,
1542
- _ref5$openAriaLabel = _ref5.openAriaLabel,
1543
- openAriaLabel = _ref5$openAriaLabel === void 0 ? 'Åpne liste med valg' : _ref5$openAriaLabel,
1544
- _ref5$focusable = _ref5.focusable,
1545
- focusable = _ref5$focusable === void 0 ? false : _ref5$focusable;
1546
- return React.createElement(IconButton, _extends({}, getToggleButtonProps({
1547
- className: classNames('eds-dropdown-appendix__toggle-button', {
1548
- 'eds-dropdown-appendix__toggle-button--open': isOpen
1549
- })
1550
- }), {
1551
- "aria-label": isOpen ? closeAriaLabel : openAriaLabel,
1552
- tabIndex: focusable ? 0 : -1,
1553
- type: "button"
1554
- }), React.createElement(DownArrowIcon, {
1555
- "aria-hidden": "true"
1556
- }));
1587
+ if (resultCount !== previousResultCount) {
1588
+ return resultCountWithoutSelectAll + " resultat" + (resultCountWithoutSelectAll === 1 ? '' : 'er') + " tilgjengelig, naviger med pil opp eller ned, velg elementer med enter.";
1589
+ }
1590
+ return '';
1591
+ }
1592
+ function getA11ySelectionMessage(options) {
1593
+ var selectedItem = options.selectedItem,
1594
+ itemToStringLocal = options.itemToString,
1595
+ selectAllItem = options.selectAllItem;
1596
+ if ((selectedItem == null ? void 0 : selectedItem.value) === (selectAllItem == null ? void 0 : selectAllItem.value)) return 'Alle elementer i listen valgt.';
1597
+ return selectedItem ? itemToStringLocal(selectedItem) + " er valgt." : '';
1598
+ }
1599
+ function getA11yRemovalMessage(options) {
1600
+ var itemToString = options.itemToString,
1601
+ selectAllItem = options.selectAllItem,
1602
+ removedItem = options.removedItem;
1603
+ if (removedItem === undefined) return '';
1604
+ if (removedItem.value === (selectAllItem == null ? void 0 : selectAllItem.value)) return 'Alle elementer i listen fjernet fra valgte.';
1605
+ return itemToString(removedItem) + " fjernet fra valgte.";
1606
+ }
1607
+ /**A VoiceOver click is always preformed in the center of the clicked element.
1608
+ This functions expolits that to check if the performed click likely is
1609
+ made by VoiceOver. */
1610
+ var isVoiceOverClick = function isVoiceOverClick(clickEvent) {
1611
+ var targetElementRect = clickEvent.currentTarget.getBoundingClientRect();
1612
+ var targetElementMiddleX = Math.floor(targetElementRect.x + targetElementRect.width / 2);
1613
+ var targetElementMiddleY = Math.floor(targetElementRect.y + targetElementRect.height / 2);
1614
+ var clickPositionX = clickEvent.clientX;
1615
+ var clickPositionY = clickEvent.clientY;
1616
+ console.log('targetX:', targetElementMiddleX, 'targetY:', targetElementMiddleY, 'clickX:', clickPositionX, 'clickY:', clickPositionY);
1617
+ return Math.abs(targetElementMiddleX - clickPositionX) <= 1 && Math.abs(targetElementMiddleY - clickPositionY) <= 1;
1557
1618
  };
1619
+ /* end a11y utils */
1558
1620
 
1559
- var _excluded$2 = ["className", "clearable", "debounceTimeout", "disabled", "disableLabelAnimation", "feedback", "itemFilter", "items", "label", "listStyle", "loadingText", "onChange", "openOnFocus", "placeholder", "prepend", "readOnly", "selectedItem", "selectOnBlur", "style", "variant"];
1560
- var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1621
+ var _excluded$3 = ["ariaLabelCloseList", "ariaLabelOpenList", "className", "clearable", "debounceTimeout", "disabled", "disableLabelAnimation", "feedback", "itemFilter", "items", "label", "labelClearSelectedItem", "listStyle", "loadingText", "onChange", "placeholder", "prepend", "readOnly", "selectedItem", "selectOnBlur", "style", "variant"];
1622
+ var SearchableDropdown = function SearchableDropdown(_ref) {
1561
1623
  var _selectedItem$label;
1562
- var className = _ref.className,
1624
+ var ariaLabelCloseList = _ref.ariaLabelCloseList,
1625
+ ariaLabelOpenList = _ref.ariaLabelOpenList,
1626
+ className = _ref.className,
1563
1627
  _ref$clearable = _ref.clearable,
1564
- clearable = _ref$clearable === void 0 ? false : _ref$clearable,
1628
+ clearable = _ref$clearable === void 0 ? true : _ref$clearable,
1565
1629
  debounceTimeout = _ref.debounceTimeout,
1566
1630
  _ref$disabled = _ref.disabled,
1567
1631
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
@@ -1572,11 +1636,11 @@ var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1572
1636
  itemFilter = _ref$itemFilter === void 0 ? lowerCaseFilterTest : _ref$itemFilter,
1573
1637
  initialItems = _ref.items,
1574
1638
  label = _ref.label,
1639
+ _ref$labelClearSelect = _ref.labelClearSelectedItem,
1640
+ labelClearSelectedItem = _ref$labelClearSelect === void 0 ? 'fjern valgt' : _ref$labelClearSelect,
1575
1641
  listStyle = _ref.listStyle,
1576
1642
  loadingText = _ref.loadingText,
1577
1643
  onChange = _ref.onChange,
1578
- _ref$openOnFocus = _ref.openOnFocus,
1579
- openOnFocus = _ref$openOnFocus === void 0 ? false : _ref$openOnFocus,
1580
1644
  placeholder = _ref.placeholder,
1581
1645
  prepend = _ref.prepend,
1582
1646
  _ref$readOnly = _ref.readOnly,
@@ -1587,7 +1651,7 @@ var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1587
1651
  style = _ref.style,
1588
1652
  _ref$variant = _ref.variant,
1589
1653
  variant = _ref$variant === void 0 ? 'info' : _ref$variant,
1590
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
1654
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
1591
1655
  var _useState = useState(false),
1592
1656
  hideSelectedItem = _useState[0],
1593
1657
  setHideSelectedItem = _useState[1];
@@ -1627,6 +1691,7 @@ var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1627
1691
  setLastHighlightedIndex(changes == null ? void 0 : changes.highlightedIndex);
1628
1692
  }
1629
1693
  switch (type) {
1694
+ // empty input to show selected item and reset dropdown list on item selection
1630
1695
  case useCombobox.stateChangeTypes.ItemClick:
1631
1696
  case useCombobox.stateChangeTypes.InputKeyDownEnter:
1632
1697
  case useCombobox.stateChangeTypes.InputBlur:
@@ -1636,21 +1701,21 @@ var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1636
1701
  inputValue: EMPTY_INPUT
1637
1702
  });
1638
1703
  return _extends({}, changes, {
1639
- inputValue: EMPTY_INPUT // reset input value to show placeholder on focus
1704
+ inputValue: EMPTY_INPUT
1640
1705
  });
1641
1706
  }
1642
-
1707
+ // remove leading whitespace, select element with spacebar on empty input, and filter list based on input
1643
1708
  case useCombobox.stateChangeTypes.InputChange:
1644
1709
  {
1645
1710
  var _changes$inputValue;
1646
1711
  var leadingWhitespaceTest = /^\s+/g;
1647
- var isSpacePressedOnEmptyInput = changes.inputValue == ' ';
1712
+ var isSpacePressedOnEmptyInput = changes.inputValue === ' ';
1648
1713
  if ((_changes$inputValue = changes.inputValue) != null && _changes$inputValue.match(leadingWhitespaceTest)) {
1649
1714
  setInputValue(changes.inputValue.replace(leadingWhitespaceTest, EMPTY_INPUT));
1650
1715
  if (isSpacePressedOnEmptyInput) {
1651
1716
  openMenu();
1652
1717
  if (isOpen && changes.highlightedIndex !== undefined) {
1653
- onChange(listItems[changes.highlightedIndex]);
1718
+ onChange == null ? void 0 : onChange(listItems[changes.highlightedIndex]);
1654
1719
  }
1655
1720
  }
1656
1721
  } else {
@@ -1679,8 +1744,15 @@ var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1679
1744
  if (!selectOnBlur) break;
1680
1745
  case useCombobox.stateChangeTypes.InputKeyDownEnter: // eslint-disable-line no-fallthrough
1681
1746
  case useCombobox.stateChangeTypes.ItemClick:
1682
- onChange(clickedItem != null ? clickedItem : null);
1747
+ onChange == null ? void 0 : onChange(clickedItem != null ? clickedItem : null);
1683
1748
  }
1749
+ },
1750
+ // Accessibility
1751
+ getA11yStatusMessage: getA11yStatusMessage,
1752
+ // The following A11y-helper does not work due to a bug (https://github.com/downshift-js/downshift/issues/1227)
1753
+ // but is left here for when it is fixed
1754
+ getA11ySelectionMessage: function getA11ySelectionMessage$1(options) {
1755
+ return getA11ySelectionMessage(options);
1684
1756
  }
1685
1757
  }, rest)),
1686
1758
  isOpen = _useCombobox.isOpen,
@@ -1689,7 +1761,6 @@ var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1689
1761
  getLabelProps = _useCombobox.getLabelProps,
1690
1762
  getMenuProps = _useCombobox.getMenuProps,
1691
1763
  getInputProps = _useCombobox.getInputProps,
1692
- getComboboxProps = _useCombobox.getComboboxProps,
1693
1764
  highlightedIndex = _useCombobox.highlightedIndex,
1694
1765
  getItemProps = _useCombobox.getItemProps,
1695
1766
  selectedItem = _useCombobox.selectedItem,
@@ -1697,7 +1768,7 @@ var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1697
1768
  setInputValue = _useCombobox.setInputValue;
1698
1769
  var handleOnClear = function handleOnClear() {
1699
1770
  var _inputRef$current;
1700
- onChange(null);
1771
+ onChange == null ? void 0 : onChange(null);
1701
1772
  setInputValue(EMPTY_INPUT);
1702
1773
  (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.focus();
1703
1774
  updateListItems({
@@ -1705,11 +1776,14 @@ var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1705
1776
  });
1706
1777
  };
1707
1778
  return React.createElement("div", {
1708
- className: "eds-dropdown__wrapper"
1779
+ className: classNames('eds-dropdown__wrapper', className),
1780
+ style: style
1709
1781
  }, React.createElement(BaseFormControl, _extends({
1710
- append: React.createElement(FieldAppend, {
1782
+ append: React.createElement(FieldAppend$1, {
1783
+ ariaLabelCloseList: ariaLabelCloseList,
1784
+ ariaLabelOpenList: ariaLabelOpenList,
1711
1785
  clearable: clearable,
1712
- clearSelectedItemsLabel: "Fjern valgt",
1786
+ labelClearSelectedItems: labelClearSelectedItem,
1713
1787
  disabled: readOnly || disabled,
1714
1788
  focusable: false,
1715
1789
  getToggleButtonProps: getToggleButtonProps,
@@ -1719,19 +1793,20 @@ var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1719
1793
  onClear: handleOnClear,
1720
1794
  selectedItems: [selectedItem]
1721
1795
  }),
1722
- className: classNames('eds-dropdown', className),
1796
+ className: "eds-dropdown",
1723
1797
  disabled: disabled,
1724
1798
  disableLabelAnimation: disableLabelAnimation,
1725
1799
  feedback: feedback,
1726
- isFilled: selectedItem || inputValue !== EMPTY_INPUT,
1800
+ isFilled: selectedItem !== null || inputValue !== EMPTY_INPUT,
1727
1801
  label: label,
1802
+ labelId: getLabelProps().id,
1728
1803
  labelProps: getLabelProps(),
1729
1804
  prepend: prepend,
1730
1805
  readOnly: readOnly,
1731
- style: style,
1732
1806
  variant: variant
1733
- }, getComboboxProps(), rest), !hideSelectedItem && selectedItem && !inputValue && React.createElement("span", {
1734
- className: "eds-dropdown__selected-item__wrapper"
1807
+ }, rest), !hideSelectedItem && selectedItem && !inputValue && React.createElement("span", {
1808
+ className: "eds-dropdown__selected-item__wrapper",
1809
+ "aria-hidden": "true"
1735
1810
  }, React.createElement("span", {
1736
1811
  className: "eds-dropdown__selected-item",
1737
1812
  onClick: function onClick() {
@@ -1743,11 +1818,13 @@ var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1743
1818
  disabled: readOnly || disabled,
1744
1819
  placeholder: (_selectedItem$label = selectedItem == null ? void 0 : selectedItem.label) != null ? _selectedItem$label : placeholder
1745
1820
  }, getInputProps({
1821
+ onClick: function onClick(e) {
1822
+ if (!isOpen && isVoiceOverClick(e)) openMenu();
1823
+ },
1746
1824
  onBlur: function onBlur() {
1747
1825
  setHideSelectedItem(false);
1748
1826
  },
1749
1827
  onFocus: function onFocus() {
1750
- if (!isOpen && openOnFocus) openMenu();
1751
1828
  setHideSelectedItem(true);
1752
1829
  },
1753
1830
  ref: inputRef
@@ -1764,71 +1841,91 @@ var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1764
1841
  }));
1765
1842
  };
1766
1843
 
1767
- var _excluded$1 = ["allItemsSelectedLabel", "ariaLabelRemoveSelected", "className", "clearable", "clearInputOnSelect", "debounceTimeout", "disabled", "feedback", "hideSelectAll", "items", "label", "listStyle", "loadingText", "maxTags", "onChange", "openOnFocus", "placeholder", "readOnly", "clearAllItemsAriaLabel", "selectAllLabel", "selectedItems", "selectOnBlur", "style", "variant"];
1768
- var MultiSelectBeta = function MultiSelectBeta(_ref) {
1769
- var _ref$allItemsSelected = _ref.allItemsSelectedLabel,
1770
- allItemsSelectedLabel = _ref$allItemsSelected === void 0 ? 'Alle valgt' : _ref$allItemsSelected,
1771
- _ref$ariaLabelRemoveS = _ref.ariaLabelRemoveSelected,
1772
- ariaLabelRemoveSelected = _ref$ariaLabelRemoveS === void 0 ? 'trykk for å fjerne valg' : _ref$ariaLabelRemoveS,
1773
- className = _ref.className,
1844
+ var _excluded$2 = ["className", "clearable", "clearInputOnSelect", "debounceTimeout", "disabled", "feedback", "hideSelectAll", "itemFilter", "items", "label", "labelAllItemsSelected", "labelClearAllItems", "labelSelectAll", "listStyle", "loadingText", "maxChips", "noMatchesText", "onChange", "placeholder", "readOnly", "selectedItems", "selectOnBlur", "style", "variant", "ariaLabelChosenSingular", "ariaLabelChosenPlural", "ariaLabelCloseList", "ariaLabelJumpToInput", "ariaLabelOpenList", "ariaLabelRemoveSelected", "ariaLabelSelectedItem"];
1845
+ var MultiSelect = function MultiSelect(_ref) {
1846
+ var className = _ref.className,
1774
1847
  _ref$clearable = _ref.clearable,
1775
- clearable = _ref$clearable === void 0 ? false : _ref$clearable,
1848
+ clearable = _ref$clearable === void 0 ? true : _ref$clearable,
1776
1849
  _ref$clearInputOnSele = _ref.clearInputOnSelect,
1777
1850
  clearInputOnSelect = _ref$clearInputOnSele === void 0 ? false : _ref$clearInputOnSele,
1851
+ debounceTimeout = _ref.debounceTimeout,
1778
1852
  _ref$disabled = _ref.disabled,
1779
1853
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
1780
1854
  feedback = _ref.feedback,
1781
1855
  _ref$hideSelectAll = _ref.hideSelectAll,
1782
1856
  hideSelectAll = _ref$hideSelectAll === void 0 ? false : _ref$hideSelectAll,
1857
+ _ref$itemFilter = _ref.itemFilter,
1858
+ itemFilter = _ref$itemFilter === void 0 ? lowerCaseFilterTest : _ref$itemFilter,
1783
1859
  initialItems = _ref.items,
1784
1860
  label = _ref.label,
1861
+ _ref$labelAllItemsSel = _ref.labelAllItemsSelected,
1862
+ labelAllItemsSelected = _ref$labelAllItemsSel === void 0 ? 'Alle valgt' : _ref$labelAllItemsSel,
1863
+ _ref$labelClearAllIte = _ref.labelClearAllItems,
1864
+ labelClearAllItems = _ref$labelClearAllIte === void 0 ? 'Fjern valgte' : _ref$labelClearAllIte,
1865
+ _ref$labelSelectAll = _ref.labelSelectAll,
1866
+ labelSelectAll = _ref$labelSelectAll === void 0 ? 'Velg alle' : _ref$labelSelectAll,
1785
1867
  listStyle = _ref.listStyle,
1786
1868
  loadingText = _ref.loadingText,
1787
- _ref$maxTags = _ref.maxTags,
1788
- maxTags = _ref$maxTags === void 0 ? 10 : _ref$maxTags,
1789
- onChange = _ref.onChange,
1790
- _ref$openOnFocus = _ref.openOnFocus,
1791
- openOnFocus = _ref$openOnFocus === void 0 ? false : _ref$openOnFocus,
1869
+ _ref$maxChips = _ref.maxChips,
1870
+ maxChips = _ref$maxChips === void 0 ? 10 : _ref$maxChips,
1871
+ _ref$onChange = _ref.onChange,
1872
+ onChange = _ref$onChange === void 0 ? function () {
1873
+ return undefined;
1874
+ } : _ref$onChange,
1792
1875
  placeholder = _ref.placeholder,
1793
1876
  _ref$readOnly = _ref.readOnly,
1794
1877
  readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
1795
- _ref$clearAllItemsAri = _ref.clearAllItemsAriaLabel,
1796
- clearAllItemsAriaLabel = _ref$clearAllItemsAri === void 0 ? 'Fjern valgte' : _ref$clearAllItemsAri,
1797
- _ref$selectAllLabel = _ref.selectAllLabel,
1798
- selectAllLabel = _ref$selectAllLabel === void 0 ? 'Velg alle' : _ref$selectAllLabel,
1799
1878
  selectedItems = _ref.selectedItems,
1800
1879
  _ref$selectOnBlur = _ref.selectOnBlur,
1801
1880
  selectOnBlur = _ref$selectOnBlur === void 0 ? false : _ref$selectOnBlur,
1802
1881
  style = _ref.style,
1803
1882
  _ref$variant = _ref.variant,
1804
1883
  variant = _ref$variant === void 0 ? 'info' : _ref$variant,
1805
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$1);
1884
+ _ref$ariaLabelChosenS = _ref.ariaLabelChosenSingular,
1885
+ ariaLabelChosenSingular = _ref$ariaLabelChosenS === void 0 ? 'valgt' : _ref$ariaLabelChosenS,
1886
+ _ref$ariaLabelChosenP = _ref.ariaLabelChosenPlural,
1887
+ ariaLabelChosenPlural = _ref$ariaLabelChosenP === void 0 ? 'valgte' : _ref$ariaLabelChosenP,
1888
+ ariaLabelCloseList = _ref.ariaLabelCloseList,
1889
+ _ref$ariaLabelJumpToI = _ref.ariaLabelJumpToInput,
1890
+ ariaLabelJumpToInput = _ref$ariaLabelJumpToI === void 0 ? selectedItems.length + " valgte elementer, trykk for \xE5 hoppe til tekstfeltet" : _ref$ariaLabelJumpToI,
1891
+ ariaLabelOpenList = _ref.ariaLabelOpenList,
1892
+ _ref$ariaLabelRemoveS = _ref.ariaLabelRemoveSelected,
1893
+ ariaLabelRemoveSelected = _ref$ariaLabelRemoveS === void 0 ? 'trykk for å fjerne valg' : _ref$ariaLabelRemoveS,
1894
+ _ref$ariaLabelSelecte = _ref.ariaLabelSelectedItem,
1895
+ ariaLabelSelectedItem = _ref$ariaLabelSelecte === void 0 ? ', valgt element, trykk for å fjerne' : _ref$ariaLabelSelecte,
1896
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
1806
1897
  var _React$useState = React.useState(0),
1807
1898
  lastHighlightedIndex = _React$useState[0],
1808
1899
  setLastHighlightedIndex = _React$useState[1];
1900
+ var _React$useState2 = React.useState(undefined),
1901
+ lastRemovedItem = _React$useState2[0],
1902
+ setLastRemovedItem = _React$useState2[1];
1809
1903
  var inputRef = useRef(null);
1810
- var _useResolvedItems = useResolvedItems(initialItems),
1904
+ var _useResolvedItems = useResolvedItems(initialItems, debounceTimeout),
1811
1905
  normalizedItems = _useResolvedItems.items,
1812
1906
  loading = _useResolvedItems.loading,
1813
1907
  fetchItems = _useResolvedItems.fetchItems;
1814
1908
  var isAllNonAsyncItemsSelected = typeof initialItems !== 'function' && selectedItems.length === normalizedItems.length;
1909
+ // special 'item' used as Select All entry in the dropdown list
1815
1910
  var selectAll = {
1816
1911
  value: useRandomId('select-all'),
1817
- label: selectAllLabel
1912
+ label: labelSelectAll
1818
1913
  };
1914
+ // special 'item' used as a replacement selected item tag for when
1915
+ // there are more selected element than maxChips
1819
1916
  var summarySelectedItems = React.useMemo(function () {
1820
1917
  return {
1821
1918
  value: EMPTY_INPUT,
1822
- label: isAllNonAsyncItemsSelected ? allItemsSelectedLabel : selectedItems.length + ' valgte'
1919
+ label: isAllNonAsyncItemsSelected ? labelAllItemsSelected : selectedItems.length + ' ' + ariaLabelChosenPlural
1823
1920
  };
1824
- }, [isAllNonAsyncItemsSelected, selectedItems, allItemsSelectedLabel]);
1921
+ }, [isAllNonAsyncItemsSelected, selectedItems, labelAllItemsSelected, ariaLabelChosenPlural]);
1825
1922
  var _useState = useState([].concat(!hideSelectAll ? [selectAll] : [], normalizedItems)),
1826
1923
  listItems = _useState[0],
1827
1924
  setListItems = _useState[1];
1828
1925
  var filterListItems = function filterListItems(_ref2) {
1829
1926
  var inputValue = _ref2.inputValue;
1830
1927
  return setListItems([].concat(!hideSelectAll ? [selectAll] : [], normalizedItems.filter(function (item) {
1831
- return lowerCaseFilterTest(item, inputValue);
1928
+ return itemFilter(item, inputValue);
1832
1929
  })));
1833
1930
  };
1834
1931
  var updateListItems = function updateListItems(_ref3) {
@@ -1843,32 +1940,49 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1843
1940
  inputValue: inputValue
1844
1941
  });
1845
1942
  }, [normalizedItems]); // eslint-disable-line react-hooks/exhaustive-deps
1846
- var _useMultipleSelection = useMultipleSelection({
1847
- selectedItems: selectedItems,
1848
- itemToString: itemToString,
1849
- onSelectedItemsChange: function onSelectedItemsChange(changes) {
1850
- var _changes$selectedItem;
1851
- onChange((_changes$selectedItem = changes.selectedItems) != null ? _changes$selectedItem : []);
1852
- }
1853
- }),
1854
- getSelectedItemProps = _useMultipleSelection.getSelectedItemProps,
1855
- getDropdownProps = _useMultipleSelection.getDropdownProps,
1856
- removeSelectedItem = _useMultipleSelection.removeSelectedItem;
1857
1943
  var _useMultiselectUtils = useMultiselectUtils({
1858
1944
  listItems: listItems,
1859
- selectAllValue: selectAll.value,
1945
+ selectAll: selectAll,
1860
1946
  selectedItems: selectedItems
1861
1947
  }),
1862
1948
  hasSelectedItems = _useMultiselectUtils.hasSelectedItems,
1863
1949
  handleListItemClicked = _useMultiselectUtils.handleListItemClicked,
1864
1950
  selectAllCheckboxState = _useMultiselectUtils.selectAllCheckboxState;
1865
- var stateReducer = React.useCallback(function (_, _ref4) {
1866
- var changes = _ref4.changes,
1867
- type = _ref4.type;
1951
+ var _useMultipleSelection = useMultipleSelection({
1952
+ selectedItems: selectedItems,
1953
+ itemToString: itemToString,
1954
+ onStateChange: function onStateChange(_ref4) {
1955
+ var newSelectedItems = _ref4.selectedItems,
1956
+ type = _ref4.type;
1957
+ switch (type) {
1958
+ case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownBackspace:
1959
+ case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownDelete:
1960
+ case useMultipleSelection.stateChangeTypes.DropdownKeyDownBackspace:
1961
+ case useMultipleSelection.stateChangeTypes.FunctionRemoveSelectedItem:
1962
+ {
1963
+ if (newSelectedItems !== undefined) onChange(newSelectedItems);
1964
+ break;
1965
+ }
1966
+ }
1967
+ },
1968
+ // Accessibility
1969
+ getA11yRemovalMessage: function getA11yRemovalMessage$1(options) {
1970
+ return getA11yRemovalMessage(_extends({}, options, {
1971
+ selectAllItem: selectAll,
1972
+ removedItem: lastRemovedItem
1973
+ }));
1974
+ }
1975
+ }),
1976
+ getSelectedItemProps = _useMultipleSelection.getSelectedItemProps,
1977
+ getDropdownProps = _useMultipleSelection.getDropdownProps;
1978
+ var stateReducer = React.useCallback(function (_, _ref5) {
1979
+ var changes = _ref5.changes,
1980
+ type = _ref5.type;
1868
1981
  if (changes.highlightedIndex !== undefined && (changes == null ? void 0 : changes.highlightedIndex) >= 0) {
1869
1982
  setLastHighlightedIndex(changes == null ? void 0 : changes.highlightedIndex);
1870
1983
  }
1871
1984
  switch (type) {
1985
+ // keep menu open and edit input value on item selection
1872
1986
  case useCombobox.stateChangeTypes.InputKeyDownEnter:
1873
1987
  case useCombobox.stateChangeTypes.ItemClick:
1874
1988
  {
@@ -1883,6 +1997,7 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1883
1997
  inputValue: clearInputOnSelect ? EMPTY_INPUT : (_inputRef$current$val = inputRef == null ? void 0 : (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.value) != null ? _inputRef$current$val : EMPTY_INPUT
1884
1998
  });
1885
1999
  }
2000
+ // edit input value when selected items is updated outside component
1886
2001
  case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
1887
2002
  {
1888
2003
  var _inputRef$current$val2, _inputRef$current2;
@@ -1890,6 +2005,7 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1890
2005
  inputValue: clearInputOnSelect ? EMPTY_INPUT : (_inputRef$current$val2 = inputRef == null ? void 0 : (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.value) != null ? _inputRef$current$val2 : EMPTY_INPUT
1891
2006
  });
1892
2007
  }
2008
+ // remove leading whitespace, select item with spacebar if input is empty and filter list items
1893
2009
  case useCombobox.stateChangeTypes.InputChange:
1894
2010
  {
1895
2011
  var _changes$inputValue;
@@ -1899,10 +2015,11 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1899
2015
  setInputValue(changes.inputValue.replace(leadingWhitespaceTest, EMPTY_INPUT));
1900
2016
  if (isSpacePressedOnEmptyInput) {
1901
2017
  openMenu();
1902
- if (isOpen && changes.highlightedIndex) {
2018
+ if (isOpen && changes.highlightedIndex !== undefined) {
1903
2019
  handleListItemClicked({
1904
2020
  clickedItem: listItems[changes.highlightedIndex],
1905
- onChange: onChange
2021
+ onChange: onChange,
2022
+ setLastRemovedItem: setLastRemovedItem
1906
2023
  });
1907
2024
  }
1908
2025
  }
@@ -1913,6 +2030,7 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1913
2030
  }
1914
2031
  return changes;
1915
2032
  }
2033
+ // reset input value when leaving input field
1916
2034
  case useCombobox.stateChangeTypes.InputBlur:
1917
2035
  {
1918
2036
  return _extends({}, changes, {
@@ -1929,9 +2047,9 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1929
2047
  itemToString: itemToString,
1930
2048
  selectedItem: null,
1931
2049
  stateReducer: stateReducer,
1932
- onStateChange: function onStateChange(_ref5) {
1933
- var type = _ref5.type,
1934
- clickedItem = _ref5.selectedItem;
2050
+ onStateChange: function onStateChange(_ref6) {
2051
+ var type = _ref6.type,
2052
+ clickedItem = _ref6.selectedItem;
1935
2053
  // clickedItem means item chosen either via mouse or keyboard
1936
2054
  if (!clickedItem) return;
1937
2055
  switch (type) {
@@ -1940,14 +2058,29 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1940
2058
  if (!selectOnBlur) break;
1941
2059
  case useCombobox.stateChangeTypes.InputKeyDownEnter: // eslint-disable-line no-fallthrough
1942
2060
  case useCombobox.stateChangeTypes.ItemClick:
1943
- handleListItemClicked({
1944
- clickedItem: clickedItem,
1945
- onChange: onChange
1946
- });
2061
+ {
2062
+ handleListItemClicked({
2063
+ clickedItem: clickedItem,
2064
+ onChange: onChange,
2065
+ setLastRemovedItem: setLastRemovedItem
2066
+ });
2067
+ }
1947
2068
  }
2069
+ },
2070
+ // Accessibility
2071
+ getA11yStatusMessage: function getA11yStatusMessage$1(options) {
2072
+ return getA11yStatusMessage(_extends({}, options, {
2073
+ selectAllItemIncluded: !hideSelectAll
2074
+ }));
2075
+ },
2076
+ // The following A11y-helper does not work due to a bug (https://github.com/downshift-js/downshift/issues/1227)
2077
+ // but is left here for when it is fixed
2078
+ getA11ySelectionMessage: function getA11ySelectionMessage$1(options) {
2079
+ return getA11ySelectionMessage(_extends({}, options, {
2080
+ selectAllItem: selectAll
2081
+ }));
1948
2082
  }
1949
2083
  }, rest)),
1950
- getComboboxProps = _useCombobox.getComboboxProps,
1951
2084
  getInputProps = _useCombobox.getInputProps,
1952
2085
  getItemProps = _useCombobox.getItemProps,
1953
2086
  getLabelProps = _useCombobox.getLabelProps,
@@ -1967,18 +2100,17 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1967
2100
  inputValue: inputValue
1968
2101
  });
1969
2102
  };
1970
- // role=combobox leads to strange VoiceOver behavior and is therefor omitted
1971
- // const { role: _, ...comboboxProps } = getComboboxProps();
1972
- var _getComboboxProps = getComboboxProps(),
1973
- comboboxProps = _extends({}, (_objectDestructuringEmpty(_getComboboxProps), _getComboboxProps));
1974
2103
  return React.createElement("div", {
1975
- className: "eds-dropdown__wrapper"
2104
+ className: classNames('eds-dropdown__wrapper', className),
2105
+ style: style
1976
2106
  }, React.createElement(BaseFormControl, _extends({
1977
- append: React.createElement(FieldAppend, {
2107
+ append: React.createElement(FieldAppend$1, {
2108
+ ariaLabelCloseList: ariaLabelCloseList,
2109
+ ariaLabelOpenList: ariaLabelOpenList,
1978
2110
  selectedItems: selectedItems,
1979
2111
  isOpen: isOpen,
1980
2112
  clearable: clearable,
1981
- clearSelectedItemsLabel: clearAllItemsAriaLabel,
2113
+ labelClearSelectedItems: labelClearAllItems,
1982
2114
  focusable: false,
1983
2115
  loading: loading,
1984
2116
  loadingText: loadingText,
@@ -1986,18 +2118,16 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1986
2118
  onClear: handleOnClear,
1987
2119
  getToggleButtonProps: getToggleButtonProps
1988
2120
  }),
1989
- className: classNames('eds-dropdown', className),
2121
+ className: "eds-dropdown",
1990
2122
  disabled: disabled,
1991
2123
  feedback: feedback,
1992
2124
  isFilled: hasSelectedItems || inputValue !== EMPTY_INPUT,
1993
2125
  label: label,
1994
- labelProps: _extends({
1995
- 'aria-label': label + ", multiselect, " + selectedItems.length + " valgte elementer"
1996
- }, getLabelProps()),
2126
+ labelId: getLabelProps().id,
2127
+ labelProps: getLabelProps(),
1997
2128
  readOnly: readOnly,
1998
- style: style,
1999
2129
  variant: variant
2000
- }, comboboxProps, rest), React.createElement("div", {
2130
+ }, rest), React.createElement("div", {
2001
2131
  className: classNames('eds-dropdown__selected-items-and-input', {
2002
2132
  'eds-dropdown__selected-items-and-input--filled': hasSelectedItems
2003
2133
  }),
@@ -2005,19 +2135,34 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
2005
2135
  var _inputRef$current4;
2006
2136
  if (e.target === e.currentTarget) (_inputRef$current4 = inputRef.current) == null ? void 0 : _inputRef$current4.focus();
2007
2137
  }
2008
- }, selectedItems.length < maxTags ? selectedItems.map(function (selectedItem, index) {
2138
+ }, selectedItems.length < maxChips ? React.createElement(React.Fragment, null, selectedItems.length > 1 ? React.createElement(VisuallyHidden, {
2139
+ onClick: function onClick() {
2140
+ var _inputRef$current5;
2141
+ return (_inputRef$current5 = inputRef.current) == null ? void 0 : _inputRef$current5.focus();
2142
+ }
2143
+ }, ariaLabelJumpToInput) : React.createElement(React.Fragment, null), selectedItems.map(function (selectedItem, index) {
2009
2144
  return React.createElement(SelectedItemTag, {
2145
+ ariaLabelChosen: ariaLabelChosenSingular,
2010
2146
  ariaLabelRemoveSelected: ariaLabelRemoveSelected,
2011
2147
  disabled: disabled,
2012
2148
  getSelectedItemProps: getSelectedItemProps,
2013
2149
  index: index,
2014
2150
  key: selectedItem.value,
2015
2151
  readOnly: readOnly,
2016
- removeSelectedItem: removeSelectedItem,
2152
+ removeSelectedItem: function removeSelectedItem() {
2153
+ var _inputRef$current6;
2154
+ handleListItemClicked({
2155
+ clickedItem: selectedItem,
2156
+ onChange: onChange,
2157
+ setLastRemovedItem: setLastRemovedItem
2158
+ });
2159
+ inputRef == null ? void 0 : (_inputRef$current6 = inputRef.current) == null ? void 0 : _inputRef$current6.focus();
2160
+ },
2017
2161
  selectedItem: selectedItem
2018
2162
  });
2019
- }) : React.createElement(SelectedItemTag, {
2020
- ariaLabelRemoveSelected: clearAllItemsAriaLabel,
2163
+ })) : React.createElement(SelectedItemTag, {
2164
+ ariaLabelRemoveSelected: labelClearAllItems,
2165
+ ariaLabelChosen: "",
2021
2166
  disabled: disabled,
2022
2167
  readOnly: readOnly,
2023
2168
  removeSelectedItem: handleOnClear,
@@ -2025,16 +2170,17 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
2025
2170
  }), React.createElement("input", _extends({
2026
2171
  placeholder: placeholder,
2027
2172
  className: "eds-dropdown__input eds-form-control",
2028
- disabled: readOnly || disabled,
2029
- role: "combobox" // eslint-disable-line jsx-a11y/role-has-required-aria-props
2173
+ disabled: readOnly || disabled
2030
2174
  }, getInputProps(getDropdownProps({
2031
- preventKeyAction: isOpen,
2032
- onFocus: function onFocus() {
2033
- if (!isOpen && openOnFocus) openMenu();
2175
+ onClick: function onClick(e) {
2176
+ if (!isOpen && isVoiceOverClick(e)) openMenu();
2034
2177
  },
2178
+ preventKeyAction: isOpen,
2035
2179
  ref: inputRef,
2036
2180
  value: inputValue != null ? inputValue : EMPTY_INPUT
2037
2181
  })))))), React.createElement(DropdownList, {
2182
+ ariaLabelChosenSingular: ariaLabelChosenSingular,
2183
+ ariaLabelSelectedItem: ariaLabelSelectedItem,
2038
2184
  getItemProps: getItemProps,
2039
2185
  getMenuProps: getMenuProps,
2040
2186
  highlightedIndex: highlightedIndex,
@@ -2050,17 +2196,22 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
2050
2196
  }));
2051
2197
  };
2052
2198
 
2053
- var _excluded = ["className", "clearable", "disabled", "disableLabelAnimation", "feedback", "items", "label", "labelTooltip", "listStyle", "loadingText", "onChange", "placeholder", "prepend", "readOnly", "selectedItem", "selectOnBlur", "style", "variant"];
2054
- var DropdownBeta = function DropdownBeta(_ref) {
2199
+ var _excluded$1 = ["ariaLabelCloseList", "ariaLabelOpenList", "className", "clearable", "disabled", "disableLabelAnimation", "feedback", "items", "label", "labelClearSelectedItem", "listStyle", "loadingText", "onChange", "placeholder", "prepend", "readOnly", "selectedItem", "selectOnBlur", "style", "variant"];
2200
+ var Dropdown = function Dropdown(_ref) {
2055
2201
  var _ref3, _selectedItem$label;
2056
- var className = _ref.className,
2202
+ var ariaLabelCloseList = _ref.ariaLabelCloseList,
2203
+ ariaLabelOpenList = _ref.ariaLabelOpenList,
2204
+ className = _ref.className,
2205
+ _ref$clearable = _ref.clearable,
2206
+ clearable = _ref$clearable === void 0 ? false : _ref$clearable,
2057
2207
  _ref$disabled = _ref.disabled,
2058
2208
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
2059
2209
  disableLabelAnimation = _ref.disableLabelAnimation,
2060
2210
  feedback = _ref.feedback,
2061
2211
  initialItems = _ref.items,
2062
2212
  label = _ref.label,
2063
- labelTooltip = _ref.labelTooltip,
2213
+ _ref$labelClearSelect = _ref.labelClearSelectedItem,
2214
+ labelClearSelectedItem = _ref$labelClearSelect === void 0 ? 'fjern valgt' : _ref$labelClearSelect,
2064
2215
  listStyle = _ref.listStyle,
2065
2216
  loadingText = _ref.loadingText,
2066
2217
  onChange = _ref.onChange,
@@ -2074,25 +2225,27 @@ var DropdownBeta = function DropdownBeta(_ref) {
2074
2225
  style = _ref.style,
2075
2226
  _ref$variant = _ref.variant,
2076
2227
  variant = _ref$variant === void 0 ? 'info' : _ref$variant,
2077
- rest = _objectWithoutPropertiesLoose(_ref, _excluded);
2078
- // TODO Husk å @deprecate searchable-prop-en til Dropdown når denne komponenten skal ha official release
2228
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$1);
2079
2229
  var _useResolvedItems = useResolvedItems(initialItems),
2080
2230
  normalizedItems = _useResolvedItems.items,
2081
2231
  loading = _useResolvedItems.loading;
2082
2232
  var isFilled = selectedItem !== null || placeholder !== undefined;
2083
2233
  var _useSelect = useSelect({
2084
2234
  items: normalizedItems,
2235
+ defaultHighlightedIndex: selectedItem ? undefined : 0,
2085
2236
  selectedItem: selectedItem,
2086
2237
  onStateChange: function onStateChange(_ref2) {
2087
2238
  var type = _ref2.type,
2088
2239
  clickedItem = _ref2.selectedItem;
2089
2240
  switch (type) {
2090
2241
  // @ts-expect-error This falltrough is wanted
2091
- case useSelect.stateChangeTypes.InputBlur:
2242
+ case useSelect.stateChangeTypes.ToggleButtonBlur:
2092
2243
  if (!selectOnBlur) break;
2093
- case useSelect.stateChangeTypes.MenuKeyDownEnter: // eslint-disable-line no-fallthrough
2244
+ case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter: // eslint-disable-line no-fallthrough
2094
2245
  case useSelect.stateChangeTypes.ItemClick:
2095
- onChange == null ? void 0 : onChange(clickedItem !== undefined ? clickedItem : null);
2246
+ {
2247
+ onChange == null ? void 0 : onChange(clickedItem !== undefined ? clickedItem : null);
2248
+ }
2096
2249
  }
2097
2250
  },
2098
2251
  itemToString: itemToString
@@ -2104,12 +2257,16 @@ var DropdownBeta = function DropdownBeta(_ref) {
2104
2257
  getToggleButtonProps = _useSelect.getToggleButtonProps,
2105
2258
  highlightedIndex = _useSelect.highlightedIndex;
2106
2259
  return React.createElement("div", {
2107
- className: "eds-dropdown__wrapper"
2260
+ className: classNames('eds-dropdown__wrapper', className),
2261
+ style: style
2108
2262
  }, React.createElement(BaseFormControl, _extends({
2109
- append: React.createElement(FieldAppend, {
2110
- clearable: true,
2111
- clearSelectedItemsLabel: "Fjern valgt",
2112
- focusable: true,
2263
+ append: React.createElement(FieldAppend$1, {
2264
+ ariaHiddenToggleButton: true,
2265
+ ariaLabelCloseList: ariaLabelCloseList,
2266
+ ariaLabelOpenList: ariaLabelOpenList,
2267
+ clearable: clearable,
2268
+ labelClearSelectedItems: labelClearSelectedItem,
2269
+ focusable: false,
2113
2270
  getToggleButtonProps: getToggleButtonProps,
2114
2271
  isOpen: isOpen,
2115
2272
  loading: loading,
@@ -2120,7 +2277,7 @@ var DropdownBeta = function DropdownBeta(_ref) {
2120
2277
  disabled: readOnly || disabled,
2121
2278
  selectedItems: [selectedItem]
2122
2279
  }),
2123
- className: classNames('eds-dropdown', className, {
2280
+ className: classNames('eds-dropdown', {
2124
2281
  'eds-dropdown--not-filled': !isFilled
2125
2282
  }),
2126
2283
  disabled: disabled,
@@ -2130,14 +2287,14 @@ var DropdownBeta = function DropdownBeta(_ref) {
2130
2287
  label: label,
2131
2288
  labelId: getLabelProps().id,
2132
2289
  labelProps: getLabelProps(),
2133
- labelTooltip: labelTooltip,
2134
2290
  prepend: prepend,
2135
2291
  readOnly: readOnly,
2136
- style: style,
2137
2292
  variant: variant
2138
2293
  }, rest), React.createElement("div", _extends({
2139
2294
  className: "eds-dropdown__selected-item-button"
2140
- }, getToggleButtonProps()), (_ref3 = (_selectedItem$label = selectedItem == null ? void 0 : selectedItem.label) != null ? _selectedItem$label : React.createElement("span", {
2295
+ }, getToggleButtonProps({
2296
+ id: undefined
2297
+ })), (_ref3 = (_selectedItem$label = selectedItem == null ? void 0 : selectedItem.label) != null ? _selectedItem$label : React.createElement("span", {
2141
2298
  className: classNames('eds-dropdown__selected-item-button__placeholder', {
2142
2299
  'eds-dropdown__selected-item-button__placeholder--readonly': readOnly
2143
2300
  })
@@ -2154,7 +2311,91 @@ var DropdownBeta = function DropdownBeta(_ref) {
2154
2311
  }));
2155
2312
  };
2156
2313
 
2314
+ var _excluded = ["className", "disabled", "disableLabelAnimation", "feedback", "items", "label", "loadingText", "onChange", "prepend", "readOnly", "selectedItem", "style", "value", "variant"];
2315
+ var NativeDropdown = function NativeDropdown(_ref) {
2316
+ var _ref2;
2317
+ var className = _ref.className,
2318
+ _ref$disabled = _ref.disabled,
2319
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
2320
+ disableLabelAnimation = _ref.disableLabelAnimation,
2321
+ feedback = _ref.feedback,
2322
+ items = _ref.items,
2323
+ label = _ref.label,
2324
+ loadingText = _ref.loadingText,
2325
+ _onChange = _ref.onChange,
2326
+ prepend = _ref.prepend,
2327
+ _ref$readOnly = _ref.readOnly,
2328
+ readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
2329
+ selectedItem = _ref.selectedItem,
2330
+ style = _ref.style,
2331
+ value = _ref.value,
2332
+ variant = _ref.variant,
2333
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded);
2334
+ var _useResolvedItems = useResolvedItems(items),
2335
+ normalizedItems = _useResolvedItems.items,
2336
+ loading = _useResolvedItems.loading;
2337
+ var nativeDropdownId = useRandomId('eds-dropdown-native');
2338
+ return React.createElement(BaseFormControl, {
2339
+ disabled: disabled,
2340
+ readOnly: readOnly,
2341
+ prepend: prepend,
2342
+ append: React.createElement(FieldAppend, {
2343
+ hidden: disabled || readOnly,
2344
+ loading: loading,
2345
+ loadingText: loadingText
2346
+ }),
2347
+ className: className,
2348
+ style: style,
2349
+ label: label,
2350
+ labelId: nativeDropdownId,
2351
+ variant: variant,
2352
+ feedback: feedback,
2353
+ disableLabelAnimation: disableLabelAnimation,
2354
+ isFilled: true
2355
+ }, React.createElement("select", _extends({
2356
+ "aria-invalid": variant === 'error',
2357
+ "aria-labelledby": nativeDropdownId,
2358
+ "aria-busy": loading,
2359
+ className: "eds-form-control eds-dropdown--native",
2360
+ disabled: disabled || readOnly,
2361
+ onChange: function onChange(event) {
2362
+ var _normalizedItems$find;
2363
+ _onChange == null ? void 0 : _onChange({
2364
+ value: event.target.value,
2365
+ selectedItem: (_normalizedItems$find = normalizedItems.find(function (item) {
2366
+ return item.value === event.target.value;
2367
+ })) != null ? _normalizedItems$find : null,
2368
+ target: event.target
2369
+ });
2370
+ },
2371
+ value: (_ref2 = value != null ? value : selectedItem == null ? void 0 : selectedItem.value) != null ? _ref2 : undefined
2372
+ }, rest), normalizedItems.map(function (item) {
2373
+ return React.createElement("option", {
2374
+ key: item.value,
2375
+ value: item.value
2376
+ }, item.label);
2377
+ })));
2378
+ };
2379
+ var FieldAppend = function FieldAppend(_ref3) {
2380
+ var loading = _ref3.loading,
2381
+ loadingText = _ref3.loadingText,
2382
+ hidden = _ref3.hidden;
2383
+ if (loading) {
2384
+ return React.createElement("div", {
2385
+ className: "eds-dropdown-native__loading-dots"
2386
+ }, React.createElement(LoadingDots, {
2387
+ "aria-label": loadingText
2388
+ }));
2389
+ }
2390
+ if (hidden) {
2391
+ return React.createElement(React.Fragment, null);
2392
+ }
2393
+ return React.createElement(DownArrowIcon, {
2394
+ inline: true
2395
+ });
2396
+ };
2397
+
2157
2398
  warnAboutMissingStyles('dropdown', 'form', 'a11y', 'chip');
2158
2399
 
2159
- export { Dropdown, DropdownBeta, MultiSelect, MultiSelectBeta, NativeDropdown, SearchableDropdownBeta };
2400
+ export { Dropdown, DropdownDeprecated, MultiSelect, MultiSelectDeprecated, NativeDropdown, SearchableDropdown };
2160
2401
  //# sourceMappingURL=dropdown.esm.js.map