@entur/dropdown 3.0.14 → 4.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.
@@ -0,0 +1,14 @@
1
+ /// <reference types="react" />
2
+ import { NormalizedDropdownItemType } from '../useNormalizedItems';
3
+ import './dropdown.scss';
4
+ export declare type SearchableDropdownProps = {
5
+ items: NormalizedDropdownItemType[];
6
+ value: NormalizedDropdownItemType;
7
+ onChange: (value: NormalizedDropdownItemType | undefined | null) => void;
8
+ label: string;
9
+ placeholder?: string;
10
+ clearable?: boolean;
11
+ openOnFocus?: boolean;
12
+ className?: string;
13
+ };
14
+ export declare const SearchableDropdownBeta: ({ items, value, onChange, label, placeholder, clearable, openOnFocus, className, ...rest }: SearchableDropdownProps) => JSX.Element;
@@ -0,0 +1 @@
1
+ export * from './SearchableDropdown';
@@ -87,7 +87,7 @@ function _objectWithoutPropertiesLoose(source, excluded) {
87
87
  return target;
88
88
  }
89
89
 
90
- var _excluded$8 = ["children", "onChange", "onInputValueChange", "highlightFirstItemOnOpen", "className", "style", "searchable"];
90
+ var _excluded$9 = ["children", "onChange", "onInputValueChange", "highlightFirstItemOnOpen", "className", "style", "searchable"];
91
91
  var DownshiftContext = /*#__PURE__*/React__default["default"].createContext(null);
92
92
  var DownshiftProvider = function DownshiftProvider(_ref) {
93
93
  var children = _ref.children,
@@ -105,7 +105,7 @@ var DownshiftProvider = function DownshiftProvider(_ref) {
105
105
  style = _ref.style,
106
106
  _ref$searchable = _ref.searchable,
107
107
  searchable = _ref$searchable === void 0 ? false : _ref$searchable,
108
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
108
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$9);
109
109
 
110
110
  var handleStateChange = function handleStateChange(changes, stateAndHelpers) {
111
111
  if (changes.type === Downshift__default["default"].stateChangeTypes.controlledPropUpdatedSelectedItem) {
@@ -175,10 +175,10 @@ var useDownshift = function useDownshift() {
175
175
  return context;
176
176
  };
177
177
 
178
- var _excluded$7 = ["items"];
178
+ var _excluded$8 = ["items"];
179
179
  var DropdownList = function DropdownList(_ref) {
180
180
  var items = _ref.items,
181
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
181
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
182
182
 
183
183
  var _useDownshift = useDownshift(),
184
184
  highlightedIndex = _useDownshift.highlightedIndex,
@@ -228,18 +228,18 @@ var DropdownToggleButton$1 = function DropdownToggleButton() {
228
228
  }), React__default["default"].createElement(icons.DownArrowIcon, null));
229
229
  };
230
230
 
231
- var _excluded$6 = ["className", "children"];
231
+ var _excluded$7 = ["className", "children"];
232
232
  var DropdownLoadingDots = function DropdownLoadingDots(_ref) {
233
233
  var className = _ref.className,
234
234
  children = _ref.children,
235
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
235
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
236
236
 
237
237
  return React__default["default"].createElement("div", _extends({
238
238
  className: classNames__default["default"]('eds-inline-spinner', className)
239
239
  }, rest), React__default["default"].createElement(loader.LoadingDots, null), React__default["default"].createElement(a11y.VisuallyHidden, null, children));
240
240
  };
241
241
 
242
- var _excluded$5 = ["children", "className", "items", "loading", "loadingText", "placeholder", "style", "listStyle", "clearable", "label", "isFilled", "disableLabelAnimation"];
242
+ var _excluded$6 = ["children", "className", "items", "loading", "loadingText", "placeholder", "style", "listStyle", "clearable", "label", "isFilled", "disableLabelAnimation"];
243
243
  var BaseDropdown = function BaseDropdown(_ref) {
244
244
  var children = _ref.children,
245
245
  className = _ref.className,
@@ -255,7 +255,7 @@ var BaseDropdown = function BaseDropdown(_ref) {
255
255
  _ref$isFilled = _ref.isFilled,
256
256
  isFilled = _ref$isFilled === void 0 ? false : _ref$isFilled,
257
257
  disableLabelAnimation = _ref.disableLabelAnimation,
258
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
258
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
259
259
 
260
260
  var _useDownshift = useDownshift(),
261
261
  getLabelProps = _useDownshift.getLabelProps;
@@ -264,7 +264,7 @@ var BaseDropdown = function BaseDropdown(_ref) {
264
264
  className: "eds-dropdown-wrapper",
265
265
  style: style
266
266
  }, React__default["default"].createElement(form.BaseFormControl, _extends({
267
- append: React__default["default"].createElement(Appendix$1, {
267
+ append: React__default["default"].createElement(Appendix$2, {
268
268
  clearable: clearable,
269
269
  loading: loading,
270
270
  loadingText: loadingText,
@@ -303,7 +303,7 @@ var ClearButton$1 = function ClearButton(_ref2) {
303
303
  }));
304
304
  };
305
305
 
306
- var Appendix$1 = function Appendix(_ref3) {
306
+ var Appendix$2 = function Appendix(_ref3) {
307
307
  var clearable = _ref3.clearable,
308
308
  loading = _ref3.loading,
309
309
  loadingText = _ref3.loadingText,
@@ -320,7 +320,7 @@ var Appendix$1 = function Appendix(_ref3) {
320
320
  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);
321
321
  };
322
322
 
323
- var _excluded$4 = ["disabled", "placeholder", "selectOnTab", "openOnFocus", "listStyle", "items", "label", "disableLabelAnimation", "loading", "loadingText", "className", "clearable"];
323
+ var _excluded$5 = ["disabled", "placeholder", "selectOnTab", "openOnFocus", "listStyle", "items", "label", "disableLabelAnimation", "loading", "loadingText", "className", "clearable"];
324
324
  var RegularDropdown = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
325
325
  var disabled = _ref.disabled,
326
326
  _ref$placeholder = _ref.placeholder,
@@ -337,7 +337,7 @@ var RegularDropdown = /*#__PURE__*/React__default["default"].forwardRef(function
337
337
  loadingText = _ref.loadingText,
338
338
  className = _ref.className,
339
339
  clearable = _ref.clearable,
340
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
340
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
341
341
 
342
342
  var _useDownshift = useDownshift(),
343
343
  getToggleButtonProps = _useDownshift.getToggleButtonProps,
@@ -402,7 +402,7 @@ var RegularDropdown = /*#__PURE__*/React__default["default"].forwardRef(function
402
402
  }), selectedItem ? selectedItem.label : placeholder));
403
403
  });
404
404
 
405
- var _excluded$3 = ["disabled", "className", "items", "loading", "loadingText", "readOnly", "prepend", "selectOnTab", "openOnFocus", "listStyle", "clearable", "itemFilter", "label", "disableLabelAnimation", "placeholder"];
405
+ var _excluded$4 = ["disabled", "className", "items", "loading", "loadingText", "readOnly", "prepend", "selectOnTab", "openOnFocus", "listStyle", "clearable", "itemFilter", "label", "disableLabelAnimation", "placeholder"];
406
406
 
407
407
  function LowerCaseFilterTest(item, input) {
408
408
  if (!input) {
@@ -437,7 +437,7 @@ var SearchableDropdown = /*#__PURE__*/React__default["default"].forwardRef(funct
437
437
  label = _ref.label,
438
438
  disableLabelAnimation = _ref.disableLabelAnimation,
439
439
  placeholder = _ref.placeholder,
440
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
440
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
441
441
 
442
442
  var _useDownshift = useDownshift(),
443
443
  getInputProps = _useDownshift.getInputProps,
@@ -1383,7 +1383,7 @@ debounceTimeout) {
1383
1383
  };
1384
1384
  };
1385
1385
 
1386
- var _excluded$2 = ["highlightFirstItemOnOpen", "debounceTimeout", "disabled", "feedback", "items", "label", "loadingText", "onChange", "placeholder", "prepend", "readOnly", "searchable", "selectOnTab", "openOnFocus", "variant", "value", "clearable", "className", "style", "listStyle", "itemFilter", "disableLabelAnimation"];
1386
+ var _excluded$3 = ["highlightFirstItemOnOpen", "debounceTimeout", "disabled", "feedback", "items", "label", "loadingText", "onChange", "placeholder", "prepend", "readOnly", "searchable", "selectOnTab", "openOnFocus", "variant", "value", "clearable", "className", "style", "listStyle", "itemFilter", "disableLabelAnimation"];
1387
1387
  var Dropdown = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
1388
1388
  var highlightFirstItemOnOpen = _ref.highlightFirstItemOnOpen,
1389
1389
  debounceTimeout = _ref.debounceTimeout,
@@ -1411,7 +1411,7 @@ var Dropdown = /*#__PURE__*/React__default["default"].forwardRef(function (_ref,
1411
1411
  listStyle = _ref.listStyle,
1412
1412
  itemFilter = _ref.itemFilter,
1413
1413
  disableLabelAnimation = _ref.disableLabelAnimation,
1414
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
1414
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
1415
1415
 
1416
1416
  var _useResolvedItems = useResolvedItems(items, debounceTimeout),
1417
1417
  normalizedItems = _useResolvedItems.items,
@@ -1460,7 +1460,7 @@ var Dropdown = /*#__PURE__*/React__default["default"].forwardRef(function (_ref,
1460
1460
  }, searchAbleProps))));
1461
1461
  });
1462
1462
 
1463
- var _excluded$1 = ["className", "disabled", "readOnly", "items", "loadingText", "prepend", "style", "label", "variant", "feedback", "disableLabelAnimation"];
1463
+ var _excluded$2 = ["className", "disabled", "readOnly", "items", "loadingText", "prepend", "style", "label", "variant", "feedback", "disableLabelAnimation"];
1464
1464
  var NativeDropdown = function NativeDropdown(_ref) {
1465
1465
  var className = _ref.className,
1466
1466
  _ref$disabled = _ref.disabled,
@@ -1475,7 +1475,7 @@ var NativeDropdown = function NativeDropdown(_ref) {
1475
1475
  variant = _ref.variant,
1476
1476
  feedback = _ref.feedback,
1477
1477
  disableLabelAnimation = _ref.disableLabelAnimation,
1478
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$1);
1478
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
1479
1479
 
1480
1480
  var _useResolvedItems = useResolvedItems(items),
1481
1481
  normalizedItems = _useResolvedItems.items,
@@ -1517,7 +1517,7 @@ var NativeDropdown = function NativeDropdown(_ref) {
1517
1517
  })));
1518
1518
  };
1519
1519
 
1520
- var _excluded = ["items", "itemsSelectedLabel", "label", "feedback", "variant", "disabled", "readOnly", "onChange", "className", "clearable", "loading", "loadingText", "openOnFocus", "style", "listStyle", "initialSelectedItems", "debounceTimeout"];
1520
+ var _excluded$1 = ["items", "itemsSelectedLabel", "label", "feedback", "variant", "disabled", "readOnly", "onChange", "className", "clearable", "loading", "loadingText", "openOnFocus", "style", "listStyle", "initialSelectedItems", "debounceTimeout"];
1521
1521
  var MultiSelectContext = /*#__PURE__*/React__default["default"].createContext(null);
1522
1522
 
1523
1523
  var useMultiSelectContext = function useMultiSelectContext() {
@@ -1579,7 +1579,7 @@ var MultiSelect = function MultiSelect(_ref) {
1579
1579
  _ref$initialSelectedI = _ref.initialSelectedItems,
1580
1580
  initialSelectedItems = _ref$initialSelectedI === void 0 ? [] : _ref$initialSelectedI,
1581
1581
  debounceTimeout = _ref.debounceTimeout,
1582
- rest = _objectWithoutPropertiesLoose(_ref, _excluded);
1582
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$1);
1583
1583
 
1584
1584
  var _useResolvedItems = useResolvedItems(input, debounceTimeout),
1585
1585
  items = _useResolvedItems.items;
@@ -1655,7 +1655,7 @@ var MultiSelect = function MultiSelect(_ref) {
1655
1655
  isFilled: selectedItems.length > 0 || isOpen,
1656
1656
  disabled: disabled,
1657
1657
  readOnly: readOnly,
1658
- append: React__default["default"].createElement(Appendix, {
1658
+ append: React__default["default"].createElement(Appendix$1, {
1659
1659
  hasSelected: clearable && selectedItems.length > 0,
1660
1660
  loading: loading,
1661
1661
  loadingText: loadingText,
@@ -1728,7 +1728,7 @@ var ClearButton = function ClearButton(_ref3) {
1728
1728
  }));
1729
1729
  };
1730
1730
 
1731
- var Appendix = function Appendix(_ref4) {
1731
+ var Appendix$1 = function Appendix(_ref4) {
1732
1732
  var loading = _ref4.loading,
1733
1733
  loadingText = _ref4.loadingText,
1734
1734
  readOnly = _ref4.readOnly,
@@ -1785,9 +1785,204 @@ function SelectedItemsLabel(items) {
1785
1785
  }).toString() : items.length + " elementer valgt";
1786
1786
  }
1787
1787
 
1788
+ var _excluded = ["items", "value", "onChange", "label", "placeholder", "clearable", "openOnFocus", "className"];
1789
+
1790
+ function lowerCaseFilterTest(item, input) {
1791
+ if (!input) {
1792
+ return true;
1793
+ }
1794
+
1795
+ var sanitizeEscapeCharacters = input.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&');
1796
+ var inputRegex = new RegExp(sanitizeEscapeCharacters, 'i');
1797
+ return inputRegex.test(item.label);
1798
+ }
1799
+
1800
+ var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1801
+ var _selectedItem$label;
1802
+
1803
+ var items = _ref.items,
1804
+ value = _ref.value,
1805
+ onChange = _ref.onChange,
1806
+ _ref$label = _ref.label,
1807
+ label = _ref$label === void 0 ? '!MANGLER LABEL!' : _ref$label,
1808
+ placeholder = _ref.placeholder,
1809
+ _ref$clearable = _ref.clearable,
1810
+ clearable = _ref$clearable === void 0 ? false : _ref$clearable,
1811
+ _ref$openOnFocus = _ref.openOnFocus,
1812
+ openOnFocus = _ref$openOnFocus === void 0 ? false : _ref$openOnFocus,
1813
+ className = _ref.className,
1814
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded);
1815
+
1816
+ var _React$useState = React__default["default"].useState(items),
1817
+ filteredItems = _React$useState[0],
1818
+ setFilteredItems = _React$useState[1];
1819
+
1820
+ var _useState = React.useState(false),
1821
+ hideSelectedItem = _useState[0],
1822
+ setHideSelectedItem = _useState[1];
1823
+
1824
+ var inputRef = React.useRef(null);
1825
+ var stateReducer = React__default["default"].useCallback(function (_, actionAndChanges) {
1826
+ var type = actionAndChanges.type,
1827
+ changes = actionAndChanges.changes;
1828
+
1829
+ switch (type) {
1830
+ case Downshift.useCombobox.stateChangeTypes.ItemClick:
1831
+ case Downshift.useCombobox.stateChangeTypes.InputKeyDownEnter:
1832
+ case Downshift.useCombobox.stateChangeTypes.InputBlur:
1833
+ case Downshift.useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
1834
+ return _extends({}, changes, changes.selectedItem && {
1835
+ inputValue: ''
1836
+ });
1837
+
1838
+ default:
1839
+ return changes;
1840
+ }
1841
+ }, []);
1842
+
1843
+ var _useCombobox = Downshift.useCombobox(_extends({
1844
+ onInputValueChange: function onInputValueChange(_ref2) {
1845
+ var inputValue = _ref2.inputValue;
1846
+ setFilteredItems(items.filter(function (item) {
1847
+ return lowerCaseFilterTest(item, inputValue);
1848
+ }));
1849
+ },
1850
+ items: filteredItems,
1851
+ itemToString: function itemToString(item) {
1852
+ return item ? item.value : '';
1853
+ },
1854
+ stateReducer: stateReducer,
1855
+ selectedItem: value,
1856
+ onSelectedItemChange: function onSelectedItemChange(_ref3) {
1857
+ var newSelectedItem = _ref3.selectedItem;
1858
+ return onChange(newSelectedItem);
1859
+ }
1860
+ }, rest)),
1861
+ isOpen = _useCombobox.isOpen,
1862
+ getToggleButtonProps = _useCombobox.getToggleButtonProps,
1863
+ getLabelProps = _useCombobox.getLabelProps,
1864
+ getMenuProps = _useCombobox.getMenuProps,
1865
+ getInputProps = _useCombobox.getInputProps,
1866
+ getComboboxProps = _useCombobox.getComboboxProps,
1867
+ highlightedIndex = _useCombobox.highlightedIndex,
1868
+ getItemProps = _useCombobox.getItemProps,
1869
+ selectedItem = _useCombobox.selectedItem,
1870
+ openMenu = _useCombobox.openMenu,
1871
+ inputValue = _useCombobox.inputValue,
1872
+ setInputValue = _useCombobox.setInputValue;
1873
+
1874
+ React.useEffect(function () {
1875
+ if (inputValue.toLowerCase() === (value == null ? void 0 : value.label.toLowerCase()) || inputValue.toLowerCase() === (value == null ? void 0 : value.value.toLowerCase())) setInputValue('');
1876
+ }, [value]);
1877
+ return React__default["default"].createElement("div", null, React__default["default"].createElement(form.BaseFormControl, _extends({
1878
+ append: React__default["default"].createElement(Appendix, {
1879
+ selectedItem: selectedItem,
1880
+ isOpen: isOpen,
1881
+ clearable: clearable,
1882
+ loading: false,
1883
+ loadingText: '',
1884
+ readOnly: false,
1885
+ onChange: onChange,
1886
+ getToggleButtonProps: getToggleButtonProps
1887
+ }),
1888
+ className: classNames__default["default"]('eds-searchable-dropdown', className),
1889
+ label: label,
1890
+ isFilled: selectedItem ? true : false,
1891
+ labelProps: getLabelProps()
1892
+ }, getComboboxProps(), rest), !hideSelectedItem && selectedItem && !inputValue && React__default["default"].createElement("span", {
1893
+ className: "eds-searchable-dropdown__selected-item__wrapper"
1894
+ }, React__default["default"].createElement("span", {
1895
+ className: "eds-searchable-dropdown__selected-item",
1896
+ onClick: function onClick() {
1897
+ var _inputRef$current;
1898
+
1899
+ return (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.focus();
1900
+ }
1901
+ }, selectedItem.label)), React__default["default"].createElement("input", _extends({
1902
+ placeholder: (_selectedItem$label = selectedItem == null ? void 0 : selectedItem.label) != null ? _selectedItem$label : placeholder,
1903
+ className: "eds-searchable-dropdown__input eds-form-control"
1904
+ }, getInputProps({
1905
+ onFocus: function onFocus() {
1906
+ if (!isOpen && openOnFocus) openMenu();
1907
+ setHideSelectedItem(true);
1908
+ }
1909
+ }), {
1910
+ onBlur: function onBlur() {
1911
+ setHideSelectedItem(false);
1912
+ },
1913
+ ref: inputRef
1914
+ }))), React__default["default"].createElement("ul", _extends({
1915
+ className: classNames__default["default"]('eds-dropdown-list', {
1916
+ 'eds-dropdown-list--open': isOpen
1917
+ })
1918
+ }, getMenuProps(), rest), isOpen ? filteredItems.map(function (item, index) {
1919
+ return (// eslint-disable-next-line react/jsx-key
1920
+ React__default["default"].createElement("li", _extends({
1921
+ className: classNames__default["default"]('eds-dropdown-list__item', {
1922
+ 'eds-dropdown-list__item--highlighted': highlightedIndex === index,
1923
+ 'eds-dropdown-list__item--selected': selectedItem === item
1924
+ })
1925
+ }, getItemProps({
1926
+ key: "" + index + item.value,
1927
+ item: item,
1928
+ index: index
1929
+ })), React__default["default"].createElement("span", null, item.label), item.icons && React__default["default"].createElement("span", null, item.icons.map(function (Icon, index) {
1930
+ return React__default["default"].createElement(Icon, {
1931
+ key: index,
1932
+ inline: true,
1933
+ className: "eds-dropdown-list__item-icon"
1934
+ });
1935
+ })), selectedItem === item && React__default["default"].createElement(icons.CheckIcon, null))
1936
+ );
1937
+ }) : null));
1938
+ };
1939
+
1940
+ var Appendix = function Appendix(_ref4) {
1941
+ var clearable = _ref4.clearable,
1942
+ loading = _ref4.loading,
1943
+ loadingText = _ref4.loadingText,
1944
+ readOnly = _ref4.readOnly,
1945
+ getToggleButtonProps = _ref4.getToggleButtonProps,
1946
+ selectedItem = _ref4.selectedItem,
1947
+ isOpen = _ref4.isOpen,
1948
+ onChange = _ref4.onChange;
1949
+
1950
+ if (loading) {
1951
+ return React__default["default"].createElement(DropdownLoadingDots, null, loadingText);
1952
+ }
1953
+
1954
+ if (readOnly) {
1955
+ return null;
1956
+ }
1957
+
1958
+ return React__default["default"].createElement("div", {
1959
+ style: {
1960
+ display: 'flex',
1961
+ alignItems: 'center'
1962
+ }
1963
+ }, clearable && selectedItem && React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement("button", {
1964
+ className: "eds-dropdown__clear-button",
1965
+ type: "button",
1966
+ tabIndex: -1,
1967
+ onClick: function onClick() {
1968
+ return onChange(null);
1969
+ }
1970
+ }, React__default["default"].createElement(icons.CloseSmallIcon, null)), React__default["default"].createElement("div", {
1971
+ className: "eds-dropdown__divider"
1972
+ })), React__default["default"].createElement("button", _extends({}, getToggleButtonProps({
1973
+ className: classNames__default["default"]('eds-dropdown__toggle-button', {
1974
+ 'eds-dropdown__toggle-button--open': isOpen
1975
+ })
1976
+ }), {
1977
+ tabIndex: "-1",
1978
+ type: "button"
1979
+ }), React__default["default"].createElement(icons.DownArrowIcon, null)));
1980
+ };
1981
+
1788
1982
  utils.warnAboutMissingStyles('dropdown', 'form', 'a11y', 'chip');
1789
1983
 
1790
1984
  exports.Dropdown = Dropdown;
1791
1985
  exports.MultiSelect = MultiSelect;
1792
1986
  exports.NativeDropdown = NativeDropdown;
1987
+ exports.SearchableDropdownBeta = SearchableDropdownBeta;
1793
1988
  //# sourceMappingURL=dropdown.cjs.development.js.map