@entur/dropdown 4.0.13 → 5.0.0-RC.1

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