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