@entur/dropdown 4.0.9 → 5.0.0-beta.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.
@@ -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"];
463
+ var _excluded$c = ["items"];
462
464
  var DropdownList$1 = function DropdownList(_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,
@@ -509,17 +511,17 @@ var DropdownToggleButton$1 = function DropdownToggleButton() {
509
511
  }), React__default["default"].createElement(icons.DownArrowIcon, null));
510
512
  };
511
513
 
512
- var _excluded$8 = ["className", "children"];
514
+ var _excluded$b = ["className", "children"];
513
515
  var DropdownLoadingDots = function DropdownLoadingDots(_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"];
524
+ var _excluded$a = ["children", "className", "items", "loading", "loadingText", "placeholder", "style", "listStyle", "clearable", "label", "isFilled", "disableLabelAnimation"];
523
525
  var BaseDropdown = function BaseDropdown(_ref) {
524
526
  var children = _ref.children,
525
527
  className = _ref.className,
@@ -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,
@@ -578,7 +580,7 @@ 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,
@@ -592,7 +594,7 @@ var Appendix$2 = function Appendix(_ref3) {
592
594
  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);
593
595
  };
594
596
 
595
- var _excluded$6 = ["disabled", "placeholder", "selectOnTab", "openOnFocus", "listStyle", "items", "label", "disableLabelAnimation", "loading", "loadingText", "className", "clearable"];
597
+ var _excluded$9 = ["disabled", "placeholder", "selectOnTab", "openOnFocus", "listStyle", "items", "label", "disableLabelAnimation", "loading", "loadingText", "className", "clearable"];
596
598
  var RegularDropdown = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
597
599
  var disabled = _ref.disabled,
598
600
  _ref$placeholder = _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,
@@ -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;
@@ -702,7 +704,7 @@ var SearchableDropdown = /*#__PURE__*/React__default["default"].forwardRef(funct
702
704
  label = _ref.label,
703
705
  disableLabelAnimation = _ref.disableLabelAnimation,
704
706
  placeholder = _ref.placeholder,
705
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
707
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
706
708
  var _useDownshift = useDownshift(),
707
709
  getInputProps = _useDownshift.getInputProps,
708
710
  inputValue = _useDownshift.inputValue,
@@ -891,7 +893,7 @@ debounceTimeout) {
891
893
  if (isItemsFunction) {
892
894
  fetchItems('');
893
895
  }
894
- }, [isItemsFunction, fetchItems]);
896
+ }, [isItemsFunction]); // eslint-disable-line react-hooks/exhaustive-deps
895
897
  return {
896
898
  items: normalizedItems,
897
899
  loading: isItemsFunction ? loading : false,
@@ -899,7 +901,7 @@ debounceTimeout) {
899
901
  };
900
902
  };
901
903
 
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"];
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"];
903
905
  var Dropdown = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
904
906
  var highlightFirstItemOnOpen = _ref.highlightFirstItemOnOpen,
905
907
  debounceTimeout = _ref.debounceTimeout,
@@ -927,7 +929,7 @@ var Dropdown = /*#__PURE__*/React__default["default"].forwardRef(function (_ref,
927
929
  listStyle = _ref.listStyle,
928
930
  itemFilter = _ref.itemFilter,
929
931
  disableLabelAnimation = _ref.disableLabelAnimation,
930
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
932
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
931
933
  var _useResolvedItems = useResolvedItems(items, debounceTimeout),
932
934
  normalizedItems = _useResolvedItems.items,
933
935
  loading = _useResolvedItems.loading,
@@ -974,7 +976,7 @@ var Dropdown = /*#__PURE__*/React__default["default"].forwardRef(function (_ref,
974
976
  }, searchAbleProps))));
975
977
  });
976
978
 
977
- var _excluded$3 = ["className", "disabled", "readOnly", "items", "loadingText", "prepend", "style", "label", "variant", "feedback", "disableLabelAnimation"];
979
+ var _excluded$6 = ["className", "disabled", "readOnly", "items", "loadingText", "prepend", "style", "label", "variant", "feedback", "disableLabelAnimation"];
978
980
  var NativeDropdown = function NativeDropdown(_ref) {
979
981
  var className = _ref.className,
980
982
  _ref$disabled = _ref.disabled,
@@ -989,7 +991,7 @@ var NativeDropdown = function NativeDropdown(_ref) {
989
991
  variant = _ref.variant,
990
992
  feedback = _ref.feedback,
991
993
  disableLabelAnimation = _ref.disableLabelAnimation,
992
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
994
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
993
995
  var _useResolvedItems = useResolvedItems(items),
994
996
  normalizedItems = _useResolvedItems.items,
995
997
  loading = _useResolvedItems.loading;
@@ -1032,7 +1034,7 @@ var NativeDropdown = function NativeDropdown(_ref) {
1032
1034
  })));
1033
1035
  };
1034
1036
 
1035
- var _excluded$2 = ["items", "itemsSelectedLabel", "label", "feedback", "variant", "disabled", "readOnly", "onChange", "className", "clearable", "loading", "loadingText", "openOnFocus", "style", "listStyle", "initialSelectedItems", "debounceTimeout"];
1037
+ var _excluded$5 = ["className", "clearable", "debounceTimeout", "disabled", "feedback", "initialSelectedItems", "items", "itemsSelectedLabel", "label", "listStyle", "loading", "loadingText", "onChange", "openOnFocus", "readOnly", "style", "variant"];
1036
1038
  var MultiSelectContext = /*#__PURE__*/React__default["default"].createContext(null);
1037
1039
  var useMultiSelectContext = function useMultiSelectContext() {
1038
1040
  var context = React__default["default"].useContext(MultiSelectContext);
@@ -1059,36 +1061,36 @@ actionAndChanges) {
1059
1061
  }
1060
1062
  }
1061
1063
  var MultiSelect = function MultiSelect(_ref) {
1062
- var input = _ref.items,
1064
+ var className = _ref.className,
1065
+ _ref$clearable = _ref.clearable,
1066
+ clearable = _ref$clearable === void 0 ? false : _ref$clearable,
1067
+ debounceTimeout = _ref.debounceTimeout,
1068
+ disabled = _ref.disabled,
1069
+ feedback = _ref.feedback,
1070
+ _ref$initialSelectedI = _ref.initialSelectedItems,
1071
+ initialSelectedItems = _ref$initialSelectedI === void 0 ? [] : _ref$initialSelectedI,
1072
+ input = _ref.items,
1063
1073
  _ref$itemsSelectedLab = _ref.itemsSelectedLabel,
1064
1074
  itemsSelectedLabel = _ref$itemsSelectedLab === void 0 ? function (items) {
1065
1075
  return SelectedItemsLabel(items);
1066
1076
  } : _ref$itemsSelectedLab,
1067
1077
  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,
1078
+ listStyle = _ref.listStyle,
1080
1079
  _ref$loading = _ref.loading,
1081
1080
  loading = _ref$loading === void 0 ? false : _ref$loading,
1082
1081
  _ref$loadingText = _ref.loadingText,
1083
1082
  loadingText = _ref$loadingText === void 0 ? '' : _ref$loadingText,
1083
+ _ref$onChange = _ref.onChange,
1084
+ onChange = _ref$onChange === void 0 ? function () {
1085
+ return undefined;
1086
+ } : _ref$onChange,
1084
1087
  _ref$openOnFocus = _ref.openOnFocus,
1085
1088
  openOnFocus = _ref$openOnFocus === void 0 ? false : _ref$openOnFocus,
1089
+ _ref$readOnly = _ref.readOnly,
1090
+ readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
1086
1091
  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);
1092
+ variant = _ref.variant,
1093
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
1092
1094
  var _useResolvedItems = useResolvedItems(input, debounceTimeout),
1093
1095
  items = _useResolvedItems.items;
1094
1096
  var _useState = React.useState(initialSelectedItems),
@@ -1154,7 +1156,7 @@ var MultiSelect = function MultiSelect(_ref) {
1154
1156
  isFilled: selectedItems.length > 0 || isOpen,
1155
1157
  disabled: disabled,
1156
1158
  readOnly: readOnly,
1157
- append: React__default["default"].createElement(Appendix$1, {
1159
+ append: React__default["default"].createElement(Appendix, {
1158
1160
  hasSelected: clearable && selectedItems.length > 0,
1159
1161
  loading: loading,
1160
1162
  loadingText: loadingText,
@@ -1223,7 +1225,7 @@ var ClearButton = function ClearButton(_ref3) {
1223
1225
  className: "eds-dropdown__divider"
1224
1226
  }));
1225
1227
  };
1226
- var Appendix$1 = function Appendix(_ref4) {
1228
+ var Appendix = function Appendix(_ref4) {
1227
1229
  var loading = _ref4.loading,
1228
1230
  loadingText = _ref4.loadingText,
1229
1231
  readOnly = _ref4.readOnly,
@@ -1273,46 +1275,91 @@ function SelectedItemsLabel(items) {
1273
1275
  }).toString() : items.length + " elementer valgt";
1274
1276
  }
1275
1277
 
1276
- var _excluded$1 = ["selectedItem", "isOpen", "getMenuProps", "getItemProps", "filteredItems", "highlightedIndex", "listStyle"];
1278
+ var _excluded$4 = ["selectedItems", "listItems", "inputValue", "isOpen", "getMenuProps", "getItemProps", "highlightedIndex", "showSelectAllInList", "loading", "selectAllCheckboxState", "selectAllItem", "listStyle", "noMatchesText", "loadingText", "selectedItemAriaLabel"];
1277
1279
  var DropdownList = function DropdownList(_ref) {
1278
- var selectedItem = _ref.selectedItem,
1280
+ var selectedItems = _ref.selectedItems,
1281
+ listItems = _ref.listItems,
1279
1282
  isOpen = _ref.isOpen,
1280
1283
  getMenuProps = _ref.getMenuProps,
1281
1284
  getItemProps = _ref.getItemProps,
1282
- filteredItems = _ref.filteredItems,
1283
1285
  highlightedIndex = _ref.highlightedIndex,
1286
+ _ref$loading = _ref.loading,
1287
+ loading = _ref$loading === void 0 ? false : _ref$loading,
1288
+ selectAllCheckboxState = _ref.selectAllCheckboxState,
1289
+ selectAllItem = _ref.selectAllItem,
1284
1290
  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
+ _ref$noMatchesText = _ref.noMatchesText,
1292
+ noMatchesText = _ref$noMatchesText === void 0 ? 'Ingen treff for søket' : _ref$noMatchesText,
1293
+ _ref$loadingText = _ref.loadingText,
1294
+ loadingText = _ref$loadingText === void 0 ? 'Laster inn …' : _ref$loadingText,
1295
+ _ref$selectedItemAria = _ref.selectedItemAriaLabel,
1296
+ selectedItemAriaLabel = _ref$selectedItemAria === void 0 ? ', valgt element' : _ref$selectedItemAria,
1297
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
1298
+ var isMultiselect = selectAllItem !== undefined;
1299
+ var isNoMatches = !loading && (listItems.length === 0 || listItems.length === 1 && listItems[0].value === (selectAllItem == null ? void 0 : selectAllItem.value));
1300
+ var itemIsSelected = function itemIsSelected(item) {
1301
+ return selectedItems.some(function (selectedItem) {
1302
+ return selectedItem.value === item.value;
1303
+ });
1304
+ };
1305
+ var selectAllListItemContent = function selectAllListItemContent() {
1306
+ return React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(form.Checkbox, {
1307
+ checked: selectAllCheckboxState == null ? void 0 : selectAllCheckboxState(),
1308
+ "aria-hidden": "true",
1309
+ onChange: function onChange() {
1310
+ return;
1311
+ }
1312
+ }), React__default["default"].createElement("span", {
1313
+ className: "eds-dropdown__list__item-text"
1314
+ }, selectAllItem == null ? void 0 : selectAllItem.label));
1315
+ };
1316
+ var listItemContent = function listItemContent(item) {
1317
+ return React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(form.Checkbox, {
1318
+ style: !isMultiselect ? {
1319
+ display: 'none'
1320
+ } : {},
1321
+ checked: itemIsSelected(item),
1322
+ "aria-hidden": "true",
1323
+ onChange: function onChange() {
1324
+ return;
1325
+ }
1326
+ }), React__default["default"].createElement("span", {
1327
+ className: "eds-dropdown__list__item-text"
1328
+ }, item.label, React__default["default"].createElement(a11y.VisuallyHidden, null, selectedItemAriaLabel)), item.icons && React__default["default"].createElement("span", null, item.icons.map(function (Icon, index) {
1329
+ return React__default["default"].createElement(Icon, {
1330
+ key: index,
1331
+ inline: true,
1332
+ className: "eds-dropdown__list__item-icon"
1333
+ });
1334
+ })));
1335
+ };
1336
+ return React__default["default"].createElement("ul", _extends({}, getMenuProps(), {
1337
+ className: classNames__default["default"]('eds-dropdown__list', {
1338
+ 'eds-dropdown__list--open': isOpen
1339
+ }),
1291
1340
  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
1299
- })
1300
- }, getItemProps({
1301
- key: "" + index + item.value,
1302
- item: item,
1303
- 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);
1341
+ }), isOpen && listItems.length > 0 && listItems.map(function (item, index) {
1342
+ var itemIsSelectAll = item.value === (selectAllItem == null ? void 0 : selectAllItem.value);
1343
+ if (itemIsSelectAll && listItems.length <= 2) return React__default["default"].createElement(React__default["default"].Fragment, null);
1344
+ return React__default["default"].createElement("li", _extends({
1345
+ key: item.value,
1346
+ className: classNames__default["default"]('eds-dropdown__list__item', {
1347
+ 'eds-dropdown__list__item--select-all': itemIsSelectAll,
1348
+ 'eds-dropdown__list__item--highlighted': highlightedIndex === index,
1349
+ 'eds-dropdown__list__item--selected': !isMultiselect && itemIsSelected(item)
1350
+ })
1351
+ }, getItemProps({
1352
+ key: "" + index + item.value,
1353
+ item: item,
1354
+ index: index
1355
+ })), itemIsSelectAll ? selectAllListItemContent() : listItemContent(item));
1356
+ }), isOpen && isNoMatches && React__default["default"].createElement("li", {
1357
+ className: "eds-dropdown__list__item"
1358
+ }, noMatchesText), isOpen && loading && React__default["default"].createElement("li", {
1359
+ className: "eds-dropdown__list__item"
1360
+ }, loadingText));
1313
1361
  };
1314
1362
 
1315
- var _excluded = ["items", "selectedItem", "onChange", "label", "placeholder", "clearable", "openOnFocus", "readonly", "feedback", "variant", "className", "listStyle"];
1316
1363
  function lowerCaseFilterTest(item, input) {
1317
1364
  if (!input) {
1318
1365
  return true;
@@ -1321,69 +1368,279 @@ function lowerCaseFilterTest(item, input) {
1321
1368
  var inputRegex = new RegExp(sanitizeEscapeCharacters, 'i');
1322
1369
  return inputRegex.test(item.label);
1323
1370
  }
1371
+ var itemToString = function itemToString(item) {
1372
+ return item ? item.label : '';
1373
+ };
1374
+ var useMultiselectUtils = function useMultiselectUtils(_ref) {
1375
+ var listItems = _ref.listItems,
1376
+ selectedItems = _ref.selectedItems,
1377
+ selectAllValue = _ref.selectAllValue;
1378
+ var hasSelectedItems = selectedItems.length > 0;
1379
+ var listItemsWithoutSelectAll = listItems.filter(function (item) {
1380
+ return item.value !== selectAllValue;
1381
+ });
1382
+ var allListItemsAreSelected = listItemsWithoutSelectAll.filter(function (item) {
1383
+ return !selectedItems.includes(item);
1384
+ }).length === 0;
1385
+ var someListItemsAreSelected = listItemsWithoutSelectAll.some(function (item) {
1386
+ return selectedItems.includes(item);
1387
+ });
1388
+ var addClickedItemToSelectedItems = function addClickedItemToSelectedItems(clickedItem, onChange) {
1389
+ return onChange([].concat(selectedItems, [clickedItem]));
1390
+ };
1391
+ var clickedItemIsInSelectedItems = function clickedItemIsInSelectedItems(clickedItem) {
1392
+ return selectedItems.some(function (selectedItem) {
1393
+ return selectedItem.value === clickedItem.value;
1394
+ });
1395
+ };
1396
+ var clickedItemIsSelectAll = function clickedItemIsSelectAll(clickedItem) {
1397
+ return clickedItem.value === selectAllValue;
1398
+ };
1399
+ var removeClickedItemFromSelectedItems = function removeClickedItemFromSelectedItems(clickedItem, onChange) {
1400
+ return onChange(selectedItems.filter(function (selectedItem) {
1401
+ return selectedItem.value !== clickedItem.value;
1402
+ }));
1403
+ };
1404
+ var selectAllCheckboxState = function selectAllCheckboxState() {
1405
+ if (allListItemsAreSelected) return true;
1406
+ if (someListItemsAreSelected) return 'indeterminate';
1407
+ return false;
1408
+ };
1409
+ var selectAllUnselectedItemsInListItems = function selectAllUnselectedItemsInListItems(onChange) {
1410
+ onChange([].concat(selectedItems, listItemsWithoutSelectAll.filter(function (item) {
1411
+ return !selectedItems.includes(item);
1412
+ })));
1413
+ };
1414
+ var unselectAllListItems = function unselectAllListItems(onChange) {
1415
+ onChange(selectedItems.filter(function (item) {
1416
+ return !listItemsWithoutSelectAll.includes(item);
1417
+ }));
1418
+ };
1419
+ return {
1420
+ addClickedItemToSelectedItems: addClickedItemToSelectedItems,
1421
+ allListItemsAreSelected: allListItemsAreSelected,
1422
+ clickedItemIsInSelectedItems: clickedItemIsInSelectedItems,
1423
+ clickedItemIsSelectAll: clickedItemIsSelectAll,
1424
+ hasSelectedItems: hasSelectedItems,
1425
+ listItemsWithoutSelectAll: listItemsWithoutSelectAll,
1426
+ removeClickedItemFromSelectedItems: removeClickedItemFromSelectedItems,
1427
+ selectAllCheckboxState: selectAllCheckboxState,
1428
+ selectAllUnselectedItemsInListItems: selectAllUnselectedItemsInListItems,
1429
+ someListItemsAreSelected: someListItemsAreSelected,
1430
+ unselectAllListItems: unselectAllListItems
1431
+ };
1432
+ };
1433
+
1434
+ var _excluded$3 = ["tabIndex"];
1435
+ var SelectedElementsTag = function SelectedElementsTag(_ref) {
1436
+ var getSelectedItemProps = _ref.getSelectedItemProps,
1437
+ removeSelectedItem = _ref.removeSelectedItem,
1438
+ selectedItem = _ref.selectedItem,
1439
+ index = _ref.index,
1440
+ ariaLabelRemoveSelected = _ref.ariaLabelRemoveSelected;
1441
+ var _getSelectedItemProps = getSelectedItemProps({
1442
+ selectedItem: selectedItem,
1443
+ index: index
1444
+ }),
1445
+ selectedItemProps = _objectWithoutPropertiesLoose(_getSelectedItemProps, _excluded$3);
1446
+ return React__default["default"].createElement(chip.TagChip, _extends({
1447
+ className: classNames__default["default"]('eds-dropdown__selected-element-tag')
1448
+ }, selectedItemProps, {
1449
+ onClose: function onClose(e) {
1450
+ e.stopPropagation();
1451
+ removeSelectedItem(selectedItem);
1452
+ },
1453
+ closeButtonAriaLabel: selectedItem.label + ", " + ariaLabelRemoveSelected + " ",
1454
+ key: selectedItem.value
1455
+ }), React__default["default"].createElement("span", {
1456
+ "aria-hidden": "true"
1457
+ }, selectedItem.label));
1458
+ };
1459
+ var FieldAppend = function FieldAppend(_ref2) {
1460
+ var clearable = _ref2.clearable,
1461
+ readOnly = _ref2.readOnly,
1462
+ getToggleButtonProps = _ref2.getToggleButtonProps,
1463
+ selectedItems = _ref2.selectedItems,
1464
+ _ref2$loading = _ref2.loading,
1465
+ loading = _ref2$loading === void 0 ? false : _ref2$loading,
1466
+ _ref2$loadingText = _ref2.loadingText,
1467
+ loadingText = _ref2$loadingText === void 0 ? 'Laster resultater …' : _ref2$loadingText,
1468
+ ariaLabelClearItems = _ref2.ariaLabelClearItems,
1469
+ clearSelectedItemsLabel = _ref2.clearSelectedItemsLabel,
1470
+ isOpen = _ref2.isOpen,
1471
+ onClear = _ref2.onClear,
1472
+ _ref2$focusable = _ref2.focusable,
1473
+ focusable = _ref2$focusable === void 0 ? false : _ref2$focusable;
1474
+ if (loading) {
1475
+ return React__default["default"].createElement(DropdownLoadingDots, null, loadingText);
1476
+ }
1477
+ if (readOnly) {
1478
+ return null;
1479
+ }
1480
+ return React__default["default"].createElement("div", {
1481
+ className: "eds-dropdown-appendix"
1482
+ }, 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, {
1483
+ onClear: onClear,
1484
+ focusable: focusable,
1485
+ clearSelectedItemsLabel: clearSelectedItemsLabel,
1486
+ ariaLabelClearItems: ariaLabelClearItems
1487
+ }), React__default["default"].createElement("div", {
1488
+ className: "eds-dropdown-appendix__divider"
1489
+ })), React__default["default"].createElement(ToggleButton, {
1490
+ getToggleButtonProps: getToggleButtonProps,
1491
+ isOpen: isOpen,
1492
+ focusable: focusable
1493
+ }));
1494
+ };
1495
+ var ClearableButton = function ClearableButton(_ref3) {
1496
+ var onClear = _ref3.onClear,
1497
+ _ref3$clearSelectedIt = _ref3.clearSelectedItemsLabel,
1498
+ clearSelectedItemsLabel = _ref3$clearSelectedIt === void 0 ? 'Fjern valgte' : _ref3$clearSelectedIt,
1499
+ _ref3$ariaLabelClearI = _ref3.ariaLabelClearItems,
1500
+ ariaLabelClearItems = _ref3$ariaLabelClearI === void 0 ? 'Fjern valgte' : _ref3$ariaLabelClearI,
1501
+ _ref3$focusable = _ref3.focusable,
1502
+ focusable = _ref3$focusable === void 0 ? false : _ref3$focusable;
1503
+ return React__default["default"].createElement(tooltip.Tooltip, {
1504
+ "aria-hidden": "true",
1505
+ placement: "right",
1506
+ content: clearSelectedItemsLabel
1507
+ }, React__default["default"].createElement(button.IconButton, {
1508
+ className: "eds-dropdown-appendix__clear-button",
1509
+ type: "button",
1510
+ tabIndex: focusable ? 0 : 1,
1511
+ onClick: onClear,
1512
+ "aria-label": ariaLabelClearItems
1513
+ }, React__default["default"].createElement(icons.CloseSmallIcon, {
1514
+ "aria-hidden": "true"
1515
+ })));
1516
+ };
1517
+ var ToggleButton = function ToggleButton(_ref4) {
1518
+ var getToggleButtonProps = _ref4.getToggleButtonProps,
1519
+ isOpen = _ref4.isOpen,
1520
+ _ref4$closeAriaLabel = _ref4.closeAriaLabel,
1521
+ closeAriaLabel = _ref4$closeAriaLabel === void 0 ? 'Lukk liste med valg' : _ref4$closeAriaLabel,
1522
+ _ref4$openAriaLabel = _ref4.openAriaLabel,
1523
+ openAriaLabel = _ref4$openAriaLabel === void 0 ? 'Åpne liste med valg' : _ref4$openAriaLabel,
1524
+ _ref4$focusable = _ref4.focusable,
1525
+ focusable = _ref4$focusable === void 0 ? false : _ref4$focusable;
1526
+ return React__default["default"].createElement(button.IconButton, _extends({}, getToggleButtonProps({
1527
+ className: classNames__default["default"]('eds-dropdown-appendix__toggle-button', {
1528
+ 'eds-dropdown-appendix__toggle-button--open': isOpen
1529
+ })
1530
+ }), {
1531
+ "aria-label": isOpen ? closeAriaLabel : openAriaLabel,
1532
+ tabIndex: focusable ? 0 : 1,
1533
+ type: "button"
1534
+ }), React__default["default"].createElement(icons.DownArrowIcon, {
1535
+ "aria-hidden": "true"
1536
+ }));
1537
+ };
1538
+
1539
+ var _excluded$2 = ["className", "clearable", "debounceTimeout", "disableLabelAnimation", "feedback", "itemFilter", "items", "label", "listStyle", "onChange", "openOnFocus", "placeholder", "readonly", "selectedItem", "selectOnBlur", "variant"];
1324
1540
  // TODO Husk å @deprecate searchable-prop-en til Dropdown når denne komponenten skal ha official release
1325
1541
  // TODO Husk å generelt legge inn støtte for typeof value === string
1326
1542
  var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1327
1543
  var _selectedItem$label;
1328
- var items = _ref.items,
1329
- value = _ref.selectedItem,
1330
- onChange = _ref.onChange,
1331
- label = _ref.label,
1332
- placeholder = _ref.placeholder,
1544
+ var className = _ref.className,
1333
1545
  _ref$clearable = _ref.clearable,
1334
1546
  clearable = _ref$clearable === void 0 ? false : _ref$clearable,
1547
+ debounceTimeout = _ref.debounceTimeout,
1548
+ _ref$disableLabelAnim = _ref.disableLabelAnimation,
1549
+ disableLabelAnimation = _ref$disableLabelAnim === void 0 ? false : _ref$disableLabelAnim,
1550
+ feedback = _ref.feedback,
1551
+ _ref$itemFilter = _ref.itemFilter,
1552
+ itemFilter = _ref$itemFilter === void 0 ? lowerCaseFilterTest : _ref$itemFilter,
1553
+ initialItems = _ref.items,
1554
+ label = _ref.label,
1555
+ listStyle = _ref.listStyle,
1556
+ onChange = _ref.onChange,
1335
1557
  _ref$openOnFocus = _ref.openOnFocus,
1336
1558
  openOnFocus = _ref$openOnFocus === void 0 ? false : _ref$openOnFocus,
1559
+ placeholder = _ref.placeholder,
1337
1560
  _ref$readonly = _ref.readonly,
1338
1561
  readonly = _ref$readonly === void 0 ? false : _ref$readonly,
1339
- feedback = _ref.feedback,
1562
+ value = _ref.selectedItem,
1563
+ _ref$selectOnBlur = _ref.selectOnBlur,
1564
+ selectOnBlur = _ref$selectOnBlur === void 0 ? false : _ref$selectOnBlur,
1340
1565
  _ref$variant = _ref.variant,
1341
1566
  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];
1567
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
1348
1568
  var _useState = React.useState(false),
1349
1569
  hideSelectedItem = _useState[0],
1350
1570
  setHideSelectedItem = _useState[1];
1351
1571
  var inputRef = React.useRef(null);
1352
- var stateReducer = React__default["default"].useCallback(function (_, actionAndChanges) {
1353
- var type = actionAndChanges.type,
1354
- changes = actionAndChanges.changes;
1572
+ var _useResolvedItems = useResolvedItems(initialItems, debounceTimeout),
1573
+ normalizedItems = _useResolvedItems.items,
1574
+ loading = _useResolvedItems.loading,
1575
+ fetchItems = _useResolvedItems.fetchItems;
1576
+ var _React$useState = React__default["default"].useState(normalizedItems),
1577
+ listItems = _React$useState[0],
1578
+ setListItems = _React$useState[1];
1579
+ var filterListItems = function filterListItems(_ref2) {
1580
+ var inputValue = _ref2.inputValue;
1581
+ return setListItems(normalizedItems.filter(function (item) {
1582
+ return itemFilter(item, inputValue);
1583
+ }));
1584
+ };
1585
+ React__default["default"].useEffect(function () {
1586
+ filterListItems({
1587
+ inputValue: inputValue
1588
+ });
1589
+ }, [normalizedItems]); // eslint-disable-line react-hooks/exhaustive-deps
1590
+ var stateReducer = React__default["default"].useCallback(function (_, _ref3) {
1591
+ var type = _ref3.type,
1592
+ changes = _ref3.changes;
1355
1593
  switch (type) {
1356
1594
  case Downshift.useCombobox.stateChangeTypes.ItemClick:
1357
1595
  case Downshift.useCombobox.stateChangeTypes.InputKeyDownEnter:
1358
1596
  case Downshift.useCombobox.stateChangeTypes.InputBlur:
1359
1597
  case Downshift.useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
1360
- return _extends({}, changes, changes.selectedItem && {
1361
- inputValue: ''
1362
- });
1598
+ {
1599
+ filterListItems({
1600
+ inputValue: ''
1601
+ });
1602
+ return _extends({}, changes, {
1603
+ inputValue: '' // reset input value to show placeholder on focus
1604
+ });
1605
+ }
1606
+
1607
+ case Downshift.useCombobox.stateChangeTypes.InputChange:
1608
+ {
1609
+ var _changes$inputValue;
1610
+ var leadingWhitespaceTest = /^\s+/g;
1611
+ if ((_changes$inputValue = changes.inputValue) != null && _changes$inputValue.match(leadingWhitespaceTest)) setInputValue(changes.inputValue.replace(leadingWhitespaceTest, ''));else {
1612
+ var _changes$inputValue2, _changes$inputValue3;
1613
+ fetchItems((_changes$inputValue2 = changes.inputValue) != null ? _changes$inputValue2 : '');
1614
+ filterListItems({
1615
+ inputValue: (_changes$inputValue3 = changes.inputValue) != null ? _changes$inputValue3 : ''
1616
+ });
1617
+ }
1618
+ return changes;
1619
+ }
1363
1620
  default:
1364
1621
  return changes;
1365
1622
  }
1366
- }, []);
1623
+ }, [fetchItems, filterListItems]);
1367
1624
  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,
1625
+ items: listItems,
1380
1626
  selectedItem: value,
1381
- onSelectedItemChange: function onSelectedItemChange(_ref3) {
1382
- var newSelectedItem = _ref3.selectedItem;
1383
- return onChange(newSelectedItem != null ? newSelectedItem : null);
1627
+ itemToString: itemToString,
1628
+ stateReducer: stateReducer,
1629
+ onStateChange: function onStateChange(_ref4) {
1630
+ var type = _ref4.type,
1631
+ clickedItem = _ref4.selectedItem;
1632
+ switch (type) {
1633
+ // @ts-expect-error This falltrough is wanted
1634
+ case Downshift.useCombobox.stateChangeTypes.InputBlur:
1635
+ if (!selectOnBlur) break;
1636
+ case Downshift.useCombobox.stateChangeTypes.InputKeyDownEnter: // eslint-disable-line no-fallthrough
1637
+ case Downshift.useCombobox.stateChangeTypes.ItemClick:
1638
+ onChange(clickedItem != null ? clickedItem : null);
1639
+ }
1384
1640
  }
1385
1641
  }, rest)),
1386
1642
  isOpen = _useCombobox.isOpen,
1643
+ openMenu = _useCombobox.openMenu,
1387
1644
  getToggleButtonProps = _useCombobox.getToggleButtonProps,
1388
1645
  getLabelProps = _useCombobox.getLabelProps,
1389
1646
  getMenuProps = _useCombobox.getMenuProps,
@@ -1392,39 +1649,46 @@ var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1392
1649
  highlightedIndex = _useCombobox.highlightedIndex,
1393
1650
  getItemProps = _useCombobox.getItemProps,
1394
1651
  selectedItem = _useCombobox.selectedItem,
1395
- openMenu = _useCombobox.openMenu,
1396
- inputValue = _useCombobox.inputValue;
1652
+ inputValue = _useCombobox.inputValue,
1653
+ setInputValue = _useCombobox.setInputValue;
1397
1654
  return React__default["default"].createElement("div", {
1398
- className: "eds-searchable-dropdown__wrapper"
1655
+ className: "eds-dropdown__wrapper"
1399
1656
  }, React__default["default"].createElement(form.BaseFormControl, _extends({
1400
- append: React__default["default"].createElement(Appendix, {
1401
- selectedItem: selectedItem,
1657
+ append: React__default["default"].createElement(FieldAppend, {
1658
+ selectedItems: [selectedItem],
1402
1659
  isOpen: isOpen,
1403
1660
  clearable: clearable,
1404
1661
  loading: false,
1405
1662
  loadingText: '',
1406
1663
  readOnly: readonly,
1407
- onChange: onChange,
1664
+ onClear: function onClear() {
1665
+ var _inputRef$current;
1666
+ onChange(null);
1667
+ setInputValue('');
1668
+ (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.focus();
1669
+ if (typeof initialItems === 'function') fetchItems(inputValue != null ? inputValue : '');
1670
+ },
1408
1671
  getToggleButtonProps: getToggleButtonProps
1409
1672
  }),
1410
- className: classNames__default["default"]('eds-searchable-dropdown', className),
1673
+ disableLabelAnimation: disableLabelAnimation,
1674
+ className: classNames__default["default"]('eds-dropdown', className),
1411
1675
  label: label,
1412
- isFilled: selectedItem ? true : false,
1676
+ isFilled: selectedItem || inputValue !== '',
1413
1677
  feedback: feedback,
1414
1678
  variant: variant,
1415
1679
  readOnly: readonly,
1416
1680
  labelProps: getLabelProps()
1417
1681
  }, getComboboxProps(), rest), !hideSelectedItem && selectedItem && !inputValue && React__default["default"].createElement("span", {
1418
- className: "eds-searchable-dropdown__selected-item__wrapper"
1682
+ className: "eds-dropdown__selected-item__wrapper"
1419
1683
  }, React__default["default"].createElement("span", {
1420
- className: "eds-searchable-dropdown__selected-item",
1684
+ className: "eds-dropdown__selected-item",
1421
1685
  onClick: function onClick() {
1422
- var _inputRef$current;
1423
- return (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.focus();
1686
+ var _inputRef$current2;
1687
+ return (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.focus();
1424
1688
  }
1425
1689
  }, selectedItem.label)), React__default["default"].createElement("input", _extends({
1426
1690
  placeholder: (_selectedItem$label = selectedItem == null ? void 0 : selectedItem.label) != null ? _selectedItem$label : placeholder,
1427
- className: "eds-searchable-dropdown__input eds-form-control"
1691
+ className: "eds-dropdown__input eds-form-control"
1428
1692
  }, getInputProps({
1429
1693
  onFocus: function onFocus() {
1430
1694
  if (!isOpen && openOnFocus) openMenu();
@@ -1435,57 +1699,345 @@ var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1435
1699
  },
1436
1700
  ref: inputRef
1437
1701
  })))), React__default["default"].createElement(DropdownList, {
1438
- selectedItem: selectedItem,
1702
+ selectedItems: selectedItem !== null ? [selectedItem] : [],
1439
1703
  isOpen: isOpen,
1440
- filteredItems: filteredItems,
1704
+ listItems: listItems,
1441
1705
  highlightedIndex: highlightedIndex,
1442
1706
  listStyle: listStyle,
1443
1707
  getMenuProps: getMenuProps,
1444
- getItemProps: getItemProps
1708
+ getItemProps: getItemProps,
1709
+ loading: loading
1445
1710
  }));
1446
1711
  };
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
- }
1461
- return React__default["default"].createElement("div", {
1462
- style: {
1463
- display: 'flex',
1464
- alignItems: 'center'
1712
+
1713
+ var _excluded$1 = ["ariaLabelRemoveSelected", "className", "clearable", "debounceTimeout", "feedback", "hideSelectAll", "items", "label", "listStyle", "onChange", "openOnFocus", "placeholder", "readonly", "selectAllLabel", "selectedItems", "selectOnBlur", "style", "variant"];
1714
+ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1715
+ var _ref$ariaLabelRemoveS = _ref.ariaLabelRemoveSelected,
1716
+ ariaLabelRemoveSelected = _ref$ariaLabelRemoveS === void 0 ? 'trykk for å fjerne valg' : _ref$ariaLabelRemoveS,
1717
+ className = _ref.className,
1718
+ _ref$clearable = _ref.clearable,
1719
+ clearable = _ref$clearable === void 0 ? false : _ref$clearable,
1720
+ feedback = _ref.feedback,
1721
+ _ref$hideSelectAll = _ref.hideSelectAll,
1722
+ hideSelectAll = _ref$hideSelectAll === void 0 ? false : _ref$hideSelectAll,
1723
+ initialItems = _ref.items,
1724
+ label = _ref.label,
1725
+ listStyle = _ref.listStyle,
1726
+ onChange = _ref.onChange,
1727
+ _ref$openOnFocus = _ref.openOnFocus,
1728
+ openOnFocus = _ref$openOnFocus === void 0 ? false : _ref$openOnFocus,
1729
+ placeholder = _ref.placeholder,
1730
+ _ref$readonly = _ref.readonly,
1731
+ readonly = _ref$readonly === void 0 ? false : _ref$readonly,
1732
+ _ref$selectAllLabel = _ref.selectAllLabel,
1733
+ selectAllLabel = _ref$selectAllLabel === void 0 ? 'Velg alle' : _ref$selectAllLabel,
1734
+ selectedItems = _ref.selectedItems,
1735
+ _ref$selectOnBlur = _ref.selectOnBlur,
1736
+ selectOnBlur = _ref$selectOnBlur === void 0 ? false : _ref$selectOnBlur,
1737
+ style = _ref.style,
1738
+ _ref$variant = _ref.variant,
1739
+ variant = _ref$variant === void 0 ? 'info' : _ref$variant,
1740
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$1);
1741
+ var _React$useState = React__default["default"].useState(0),
1742
+ lastHighlightedIndex = _React$useState[0],
1743
+ setLastHighlightedIndex = _React$useState[1];
1744
+ var inputRef = React.useRef(null);
1745
+ var _useResolvedItems = useResolvedItems(initialItems),
1746
+ normalizedItems = _useResolvedItems.items,
1747
+ loading = _useResolvedItems.loading,
1748
+ fetchItems = _useResolvedItems.fetchItems;
1749
+ var selectAll = {
1750
+ value: utils.useRandomId('select-all'),
1751
+ label: selectAllLabel
1752
+ };
1753
+ var _useState = React.useState([].concat(!hideSelectAll ? [selectAll] : [], normalizedItems)),
1754
+ listItems = _useState[0],
1755
+ setListItems = _useState[1];
1756
+ var filterListItems = function filterListItems(_ref2) {
1757
+ var inputValue = _ref2.inputValue;
1758
+ return setListItems([].concat(!hideSelectAll ? [selectAll] : [], normalizedItems.filter(function (item) {
1759
+ return lowerCaseFilterTest(item, inputValue);
1760
+ })));
1761
+ };
1762
+ React__default["default"].useEffect(function () {
1763
+ filterListItems({
1764
+ inputValue: inputValue
1765
+ });
1766
+ }, [normalizedItems]); // eslint-disable-line react-hooks/exhaustive-deps
1767
+ var _useMultiselectUtils = useMultiselectUtils({
1768
+ listItems: listItems,
1769
+ selectAllValue: selectAll.value,
1770
+ selectedItems: selectedItems
1771
+ }),
1772
+ addClickedItemToSelectedItems = _useMultiselectUtils.addClickedItemToSelectedItems,
1773
+ allListItemsAreSelected = _useMultiselectUtils.allListItemsAreSelected,
1774
+ clickedItemIsInSelectedItems = _useMultiselectUtils.clickedItemIsInSelectedItems,
1775
+ clickedItemIsSelectAll = _useMultiselectUtils.clickedItemIsSelectAll,
1776
+ hasSelectedItems = _useMultiselectUtils.hasSelectedItems,
1777
+ removeClickedItemFromSelectedItems = _useMultiselectUtils.removeClickedItemFromSelectedItems,
1778
+ selectAllCheckboxState = _useMultiselectUtils.selectAllCheckboxState,
1779
+ selectAllUnselectedItemsInListItems = _useMultiselectUtils.selectAllUnselectedItemsInListItems,
1780
+ unselectAllListItems = _useMultiselectUtils.unselectAllListItems;
1781
+ var _useMultipleSelection = Downshift.useMultipleSelection({
1782
+ selectedItems: selectedItems,
1783
+ itemToString: itemToString,
1784
+ onSelectedItemsChange: function onSelectedItemsChange(changes) {
1785
+ var _changes$selectedItem;
1786
+ onChange((_changes$selectedItem = changes.selectedItems) != null ? _changes$selectedItem : []);
1787
+ }
1788
+ }),
1789
+ getSelectedItemProps = _useMultipleSelection.getSelectedItemProps,
1790
+ getDropdownProps = _useMultipleSelection.getDropdownProps,
1791
+ removeSelectedItem = _useMultipleSelection.removeSelectedItem;
1792
+ var stateReducer = React__default["default"].useCallback(function (_, _ref3) {
1793
+ var _inputRef$current$val, _inputRef$current, _inputRef$current$val2, _inputRef$current2, _changes$inputValue, _changes$inputValue2, _changes$inputValue3;
1794
+ var changes = _ref3.changes,
1795
+ type = _ref3.type;
1796
+ if (changes != null && changes.highlightedIndex && (changes == null ? void 0 : changes.highlightedIndex) >= 0) setLastHighlightedIndex(changes == null ? void 0 : changes.highlightedIndex);
1797
+ switch (type) {
1798
+ case Downshift.useCombobox.stateChangeTypes.InputKeyDownEnter:
1799
+ case Downshift.useCombobox.stateChangeTypes.ItemClick:
1800
+ return _extends({}, changes, {
1801
+ isOpen: true,
1802
+ inputValue: (_inputRef$current$val = inputRef == null ? void 0 : (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.value) != null ? _inputRef$current$val : '' // don't reset input value on select
1803
+ });
1804
+
1805
+ case Downshift.useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
1806
+ return _extends({}, changes, {
1807
+ inputValue: (_inputRef$current$val2 = inputRef == null ? void 0 : (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.value) != null ? _inputRef$current$val2 : '' // don't reset input value on select
1808
+ });
1809
+
1810
+ case Downshift.useCombobox.stateChangeTypes.InputChange:
1811
+ if ((_changes$inputValue = changes.inputValue) != null && _changes$inputValue.match(/^\s+/g)) {
1812
+ var _changes$inputValue$r;
1813
+ // remove leading whitespace if it exists
1814
+ return _extends({}, changes, {
1815
+ inputValue: (_changes$inputValue$r = changes.inputValue.replace(/^\s+/g, '')) != null ? _changes$inputValue$r : ''
1816
+ });
1817
+ }
1818
+ if (typeof initialItems === 'function') fetchItems((_changes$inputValue2 = changes.inputValue) != null ? _changes$inputValue2 : ''); // fetch items only if user provides a function as items
1819
+ filterListItems({
1820
+ inputValue: (_changes$inputValue3 = changes.inputValue) != null ? _changes$inputValue3 : ''
1821
+ });
1822
+ return changes;
1823
+ case Downshift.useCombobox.stateChangeTypes.InputBlur:
1824
+ return _extends({}, changes, {
1825
+ inputValue: ''
1826
+ });
1827
+ default:
1828
+ return changes;
1465
1829
  }
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,
1470
- onClick: function onClick() {
1471
- return onChange(null);
1830
+ }, [hideSelectAll, normalizedItems, filterListItems, initialItems]);
1831
+ var _useCombobox = Downshift.useCombobox(_extends({
1832
+ defaultHighlightedIndex: lastHighlightedIndex,
1833
+ items: listItems,
1834
+ itemToString: itemToString,
1835
+ selectedItem: null,
1836
+ stateReducer: stateReducer,
1837
+ onStateChange: function onStateChange(_ref4) {
1838
+ var type = _ref4.type,
1839
+ clickedItem = _ref4.selectedItem;
1840
+ // clickedItem means item chosen either via mouse or keyboard
1841
+ if (!clickedItem) return;
1842
+ switch (type) {
1843
+ // @ts-expect-error This falltrough is wanted
1844
+ case Downshift.useCombobox.stateChangeTypes.InputBlur:
1845
+ if (!selectOnBlur) break;
1846
+ case Downshift.useCombobox.stateChangeTypes.InputKeyDownEnter: // eslint-disable-line no-fallthrough
1847
+ case Downshift.useCombobox.stateChangeTypes.ItemClick:
1848
+ if (clickedItemIsSelectAll(clickedItem)) {
1849
+ if (allListItemsAreSelected) {
1850
+ return unselectAllListItems(onChange);
1851
+ }
1852
+ return selectAllUnselectedItemsInListItems(onChange);
1853
+ }
1854
+ if (clickedItemIsInSelectedItems(clickedItem)) {
1855
+ return removeClickedItemFromSelectedItems(clickedItem, onChange);
1856
+ }
1857
+ addClickedItemToSelectedItems(clickedItem, onChange);
1858
+ }
1859
+ }
1860
+ }, rest)),
1861
+ getComboboxProps = _useCombobox.getComboboxProps,
1862
+ getInputProps = _useCombobox.getInputProps,
1863
+ getItemProps = _useCombobox.getItemProps,
1864
+ getLabelProps = _useCombobox.getLabelProps,
1865
+ getMenuProps = _useCombobox.getMenuProps,
1866
+ getToggleButtonProps = _useCombobox.getToggleButtonProps,
1867
+ highlightedIndex = _useCombobox.highlightedIndex,
1868
+ inputValue = _useCombobox.inputValue,
1869
+ isOpen = _useCombobox.isOpen,
1870
+ openMenu = _useCombobox.openMenu,
1871
+ setInputValue = _useCombobox.setInputValue;
1872
+ // role=combobox leads to strange VoiceOver behavior and is therefor omitted
1873
+ // const { role: _, ...comboboxProps } = getComboboxProps();
1874
+ var _getComboboxProps = getComboboxProps(),
1875
+ comboboxProps = _extends({}, (_objectDestructuringEmpty(_getComboboxProps), _getComboboxProps));
1876
+ return React__default["default"].createElement("div", {
1877
+ className: "eds-dropdown__wrapper"
1878
+ }, React__default["default"].createElement(form.BaseFormControl, _extends({
1879
+ append: React__default["default"].createElement(FieldAppend, {
1880
+ selectedItems: selectedItems,
1881
+ isOpen: isOpen,
1882
+ clearable: clearable,
1883
+ loading: loading,
1884
+ loadingText: '',
1885
+ readOnly: readonly,
1886
+ onClear: function onClear() {
1887
+ var _inputRef$current3;
1888
+ onChange([]);
1889
+ setInputValue('');
1890
+ (_inputRef$current3 = inputRef.current) == null ? void 0 : _inputRef$current3.focus();
1891
+ if (typeof initialItems === 'function') fetchItems(inputValue != null ? inputValue : '');
1892
+ },
1893
+ getToggleButtonProps: getToggleButtonProps
1894
+ }),
1895
+ className: classNames__default["default"]('eds-dropdown', className),
1896
+ label: label,
1897
+ isFilled: hasSelectedItems || inputValue !== '',
1898
+ feedback: feedback,
1899
+ variant: variant,
1900
+ readOnly: readonly,
1901
+ style: style,
1902
+ labelProps: _extends({
1903
+ 'aria-label': label + ", multiselect, " + selectedItems.length + " valgte elementer"
1904
+ }, getLabelProps())
1905
+ }, comboboxProps, rest), React__default["default"].createElement("div", {
1906
+ className: classNames__default["default"]('eds-dropdown__selected-items-and-input', {
1907
+ 'eds-dropdown__selected-items-and-input--filled': hasSelectedItems
1908
+ }),
1909
+ onClick: function onClick(e) {
1910
+ var _inputRef$current4;
1911
+ if (e.target === e.currentTarget) (_inputRef$current4 = inputRef.current) == null ? void 0 : _inputRef$current4.focus();
1472
1912
  }
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
1478
- })
1479
- }), {
1480
- tabIndex: -1,
1481
- type: "button"
1482
- }), React__default["default"].createElement(icons.DownArrowIcon, null)));
1913
+ }, selectedItems.map(function (selectedItem, index) {
1914
+ return React__default["default"].createElement(SelectedElementsTag, {
1915
+ index: index,
1916
+ key: selectedItem.value,
1917
+ getSelectedItemProps: getSelectedItemProps,
1918
+ selectedItem: selectedItem,
1919
+ removeSelectedItem: removeSelectedItem,
1920
+ ariaLabelRemoveSelected: ariaLabelRemoveSelected
1921
+ });
1922
+ }), React__default["default"].createElement("input", _extends({
1923
+ placeholder: placeholder,
1924
+ className: "eds-dropdown__input eds-form-control",
1925
+ role: "combobox" // eslint-disable-line jsx-a11y/role-has-required-aria-props
1926
+ }, getInputProps(getDropdownProps({
1927
+ preventKeyAction: isOpen,
1928
+ onFocus: function onFocus() {
1929
+ if (!isOpen && openOnFocus) openMenu();
1930
+ },
1931
+ ref: inputRef,
1932
+ value: inputValue != null ? inputValue : ''
1933
+ })))))), React__default["default"].createElement(DropdownList, {
1934
+ listItems: listItems,
1935
+ selectedItems: selectedItems,
1936
+ inputValue: inputValue,
1937
+ isOpen: isOpen,
1938
+ highlightedIndex: highlightedIndex,
1939
+ getMenuProps: getMenuProps,
1940
+ getItemProps: getItemProps,
1941
+ selectAllItem: selectAll,
1942
+ selectAllCheckboxState: selectAllCheckboxState,
1943
+ listStyle: listStyle,
1944
+ loading: loading
1945
+ }));
1946
+ };
1947
+
1948
+ var _excluded = ["className", "clearable", "debounceTimeout", "feedback", "items", "label", "listStyle", "onChange", "openOnFocus", "placeholder", "readonly", "selectedItem", "selectOnBlur", "selectOnTab", "variant"];
1949
+ var DropdownBeta = function DropdownBeta(_ref) {
1950
+ var _selectedItem$label;
1951
+ var className = _ref.className,
1952
+ debounceTimeout = _ref.debounceTimeout,
1953
+ feedback = _ref.feedback,
1954
+ initialItems = _ref.items,
1955
+ label = _ref.label,
1956
+ listStyle = _ref.listStyle,
1957
+ onChange = _ref.onChange,
1958
+ _ref$readonly = _ref.readonly,
1959
+ readonly = _ref$readonly === void 0 ? false : _ref$readonly,
1960
+ selectedItem = _ref.selectedItem,
1961
+ _ref$selectOnBlur = _ref.selectOnBlur,
1962
+ selectOnBlur = _ref$selectOnBlur === void 0 ? false : _ref$selectOnBlur,
1963
+ _ref$variant = _ref.variant,
1964
+ variant = _ref$variant === void 0 ? 'info' : _ref$variant,
1965
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded);
1966
+ var _useResolvedItems = useResolvedItems(initialItems, debounceTimeout),
1967
+ normalizedItems = _useResolvedItems.items,
1968
+ loading = _useResolvedItems.loading;
1969
+ var _useSelect = Downshift.useSelect({
1970
+ items: normalizedItems,
1971
+ selectedItem: selectedItem,
1972
+ onStateChange: function onStateChange(_ref2) {
1973
+ var type = _ref2.type,
1974
+ clickedItem = _ref2.selectedItem;
1975
+ switch (type) {
1976
+ // @ts-expect-error This falltrough is wanted
1977
+ case Downshift.useSelect.stateChangeTypes.InputBlur:
1978
+ if (!selectOnBlur) break;
1979
+ case Downshift.useSelect.stateChangeTypes.MenuKeyDownEnter: // eslint-disable-line no-fallthrough
1980
+ case Downshift.useSelect.stateChangeTypes.ItemClick:
1981
+ onChange == null ? void 0 : onChange(clickedItem !== undefined ? clickedItem : null);
1982
+ }
1983
+ },
1984
+ itemToString: itemToString
1985
+ }),
1986
+ isOpen = _useSelect.isOpen,
1987
+ getToggleButtonProps = _useSelect.getToggleButtonProps,
1988
+ getLabelProps = _useSelect.getLabelProps,
1989
+ getMenuProps = _useSelect.getMenuProps,
1990
+ highlightedIndex = _useSelect.highlightedIndex,
1991
+ getItemProps = _useSelect.getItemProps;
1992
+ return React__default["default"].createElement("div", {
1993
+ className: "eds-dropdown__wrapper"
1994
+ }, React__default["default"].createElement(form.BaseFormControl, _extends({
1995
+ append: React__default["default"].createElement(FieldAppend, {
1996
+ selectedItems: [selectedItem],
1997
+ isOpen: isOpen,
1998
+ clearable: true,
1999
+ loading: loading,
2000
+ loadingText: '',
2001
+ readOnly: readonly,
2002
+ onClear: function onClear() {
2003
+ onChange == null ? void 0 : onChange(null);
2004
+ },
2005
+ getToggleButtonProps: getToggleButtonProps,
2006
+ clearSelectedItemsLabel: "Fjern valgt",
2007
+ ariaLabelClearItems: (selectedItem == null ? void 0 : selectedItem.label) + " valgt, trykk for \xE5 fjerne valget",
2008
+ focusable: true
2009
+ }),
2010
+ className: classNames__default["default"]('eds-dropdown', className, {
2011
+ 'eds-dropdown--not-filled': selectedItem === null
2012
+ }),
2013
+ label: label,
2014
+ labelId: getLabelProps().id,
2015
+ labelProps: getLabelProps(),
2016
+ disableLabelAnimation: true,
2017
+ isFilled: selectedItem !== null,
2018
+ feedback: feedback,
2019
+ variant: variant,
2020
+ readOnly: readonly
2021
+ }, rest), React__default["default"].createElement("div", _extends({
2022
+ className: "eds-dropdown__selected-item-button"
2023
+ }, getToggleButtonProps()), (_selectedItem$label = selectedItem == null ? void 0 : selectedItem.label) != null ? _selectedItem$label : '')), React__default["default"].createElement(DropdownList, {
2024
+ selectedItems: selectedItem !== null ? [selectedItem] : [],
2025
+ isOpen: isOpen,
2026
+ listItems: normalizedItems,
2027
+ highlightedIndex: highlightedIndex,
2028
+ listStyle: listStyle,
2029
+ getMenuProps: getMenuProps,
2030
+ getItemProps: getItemProps,
2031
+ loading: loading
2032
+ }));
1483
2033
  };
1484
2034
 
1485
2035
  utils.warnAboutMissingStyles('dropdown', 'form', 'a11y', 'chip');
1486
2036
 
1487
2037
  exports.Dropdown = Dropdown;
2038
+ exports.DropdownBeta = DropdownBeta;
1488
2039
  exports.MultiSelect = MultiSelect;
2040
+ exports.MultiSelectBeta = MultiSelectBeta;
1489
2041
  exports.NativeDropdown = NativeDropdown;
1490
2042
  exports.SearchableDropdownBeta = SearchableDropdownBeta;
1491
2043
  //# sourceMappingURL=dropdown.cjs.development.js.map