@equinor/eds-core-react 0.26.0 → 0.28.0-dev12052022

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 (170) hide show
  1. package/dist/eds-core-react.cjs.js +1603 -2493
  2. package/dist/esm/components/Accordion/Accordion.js +8 -11
  3. package/dist/esm/components/Accordion/Accordion.tokens.js +14 -14
  4. package/dist/esm/components/Accordion/AccordionHeader.js +20 -32
  5. package/dist/esm/components/Accordion/AccordionHeaderActions.js +5 -7
  6. package/dist/esm/components/Accordion/AccordionHeaderTitle.js +6 -8
  7. package/dist/esm/components/Accordion/AccordionItem.js +12 -15
  8. package/dist/esm/components/Accordion/AccordionPanel.js +8 -9
  9. package/dist/esm/components/Autocomplete/Autocomplete.js +141 -159
  10. package/dist/esm/components/Autocomplete/Autocomplete.tokens.js +31 -15
  11. package/dist/esm/components/Autocomplete/Option.js +21 -16
  12. package/dist/esm/components/Avatar/Avatar.js +7 -8
  13. package/dist/esm/components/Banner/Banner.js +6 -10
  14. package/dist/esm/components/Banner/Banner.tokens.js +12 -12
  15. package/dist/esm/components/Banner/BannerActions.js +4 -6
  16. package/dist/esm/components/Banner/BannerIcon.js +5 -8
  17. package/dist/esm/components/Banner/BannerMessage.js +1 -3
  18. package/dist/esm/components/Breadcrumbs/Breadcrumb.js +5 -9
  19. package/dist/esm/components/Breadcrumbs/Breadcrumbs.js +11 -16
  20. package/dist/esm/components/Breadcrumbs/Breadcrumbs.tokens.js +3 -3
  21. package/dist/esm/components/Button/Button.js +16 -30
  22. package/dist/esm/components/Button/ButtonGroup/ButtonGroup.js +2 -4
  23. package/dist/esm/components/Button/ToggleButton/ToggleButton.js +7 -14
  24. package/dist/esm/components/Button/tokens/button.js +14 -14
  25. package/dist/esm/components/Button/tokens/contained.js +9 -9
  26. package/dist/esm/components/Button/tokens/contained_icon.js +3 -3
  27. package/dist/esm/components/Button/tokens/ghost.js +9 -9
  28. package/dist/esm/components/Button/tokens/icon.js +13 -13
  29. package/dist/esm/components/Button/tokens/outlined.js +10 -10
  30. package/dist/esm/components/Card/Card.js +5 -8
  31. package/dist/esm/components/Card/Card.tokens.js +6 -6
  32. package/dist/esm/components/Card/CardActions.js +5 -8
  33. package/dist/esm/components/Card/CardContent.js +1 -2
  34. package/dist/esm/components/Card/CardHeader.js +1 -3
  35. package/dist/esm/components/Card/CardHeaderTitle.js +1 -3
  36. package/dist/esm/components/Card/CardMedia.js +4 -6
  37. package/dist/esm/components/Checkbox/Checkbox.js +6 -7
  38. package/dist/esm/components/Checkbox/Checkbox.tokens.js +12 -12
  39. package/dist/esm/components/Checkbox/Input.js +10 -14
  40. package/dist/esm/components/Chip/Chip.js +20 -31
  41. package/dist/esm/components/Chip/Chip.tokens.js +20 -20
  42. package/dist/esm/components/Chip/Icon.js +1 -3
  43. package/dist/esm/components/Dialog/Dialog.js +11 -16
  44. package/dist/esm/components/Dialog/Dialog.tokens.js +5 -5
  45. package/dist/esm/components/Dialog/DialogActions.js +5 -4
  46. package/dist/esm/components/Dialog/DialogContent.js +4 -6
  47. package/dist/esm/components/Dialog/DialogHeader.js +1 -3
  48. package/dist/esm/components/Dialog/DialogTitle.js +2 -3
  49. package/dist/esm/components/Divider/Divider.js +9 -12
  50. package/dist/esm/components/Divider/Divider.tokens.js +6 -6
  51. package/dist/esm/components/EdsProvider/eds.context.js +6 -9
  52. package/dist/esm/components/Icon/Icon.js +19 -29
  53. package/dist/esm/components/Icon/library.js +0 -1
  54. package/dist/esm/components/Input/Input.js +26 -40
  55. package/dist/esm/components/Input/Input.tokens.js +18 -18
  56. package/dist/esm/components/InputWrapper/HelperText/HelperText.js +4 -6
  57. package/dist/esm/components/InputWrapper/HelperText/HelperText.token.js +2 -2
  58. package/dist/esm/components/InputWrapper/InputWrapper.js +9 -13
  59. package/dist/esm/components/InputWrapper/InputWrapper.tokens.js +18 -18
  60. package/dist/esm/components/Label/Label.js +8 -8
  61. package/dist/esm/components/Label/Label.tokens.js +2 -2
  62. package/dist/esm/components/List/List.js +4 -5
  63. package/dist/esm/components/List/ListItem.js +2 -3
  64. package/dist/esm/components/Menu/Menu.context.js +5 -12
  65. package/dist/esm/components/Menu/Menu.js +38 -50
  66. package/dist/esm/components/Menu/Menu.tokens.js +14 -14
  67. package/dist/esm/components/Menu/MenuItem.js +15 -21
  68. package/dist/esm/components/Menu/MenuList.js +9 -18
  69. package/dist/esm/components/Menu/MenuSection.js +5 -3
  70. package/dist/esm/components/Pagination/Pagination.js +14 -24
  71. package/dist/esm/components/Pagination/Pagination.tokens.js +3 -3
  72. package/dist/esm/components/Pagination/PaginationItem.js +3 -5
  73. package/dist/esm/components/Pagination/paginationControl.js +2 -10
  74. package/dist/esm/components/Paper/Paper.js +1 -3
  75. package/dist/esm/components/Paper/Paper.tokens.js +1 -1
  76. package/dist/esm/components/Popover/Popover.js +32 -48
  77. package/dist/esm/components/Popover/Popover.tokens.js +8 -8
  78. package/dist/esm/components/Popover/PopoverActions.js +1 -3
  79. package/dist/esm/components/Popover/PopoverContent.js +4 -4
  80. package/dist/esm/components/Popover/PopoverHeader.js +1 -3
  81. package/dist/esm/components/Popover/PopoverTitle.js +1 -3
  82. package/dist/esm/components/Progress/Circular/CircularProgress.js +12 -26
  83. package/dist/esm/components/Progress/Circular/CircularProgress.tokens.js +5 -5
  84. package/dist/esm/components/Progress/Dots/DotProgress.js +4 -9
  85. package/dist/esm/components/Progress/Dots/DotProgress.tokens.js +4 -4
  86. package/dist/esm/components/Progress/Linear/LinearProgress.js +8 -16
  87. package/dist/esm/components/Progress/Linear/LinearProgress.tokens.js +2 -2
  88. package/dist/esm/components/Progress/Star/StarProgress.js +8 -12
  89. package/dist/esm/components/Radio/Radio.js +10 -12
  90. package/dist/esm/components/Radio/Radio.tokens.js +12 -12
  91. package/dist/esm/components/Scrim/Scrim.js +5 -9
  92. package/dist/esm/components/Search/Search.js +6 -13
  93. package/dist/esm/components/Select/NativeSelect/NativeSelect.js +12 -16
  94. package/dist/esm/components/Select/NativeSelect/NativeSelect.tokens.js +5 -5
  95. package/dist/esm/components/SideBar/SideBar.context.js +4 -8
  96. package/dist/esm/components/SideBar/SideBar.js +17 -22
  97. package/dist/esm/components/SideBar/SideBar.tokens.js +17 -17
  98. package/dist/esm/components/SideBar/SideBarButton/index.js +12 -17
  99. package/dist/esm/components/SideBar/SideBarContent.js +1 -3
  100. package/dist/esm/components/SideBar/SideBarFooter.js +1 -3
  101. package/dist/esm/components/SideBar/SideBarToggle.js +7 -10
  102. package/dist/esm/components/SideBar/SidebarLink/index.js +24 -28
  103. package/dist/esm/components/SideSheet/SideSheet.js +14 -15
  104. package/dist/esm/components/SideSheet/SideSheet.tokens.js +6 -6
  105. package/dist/esm/components/Slider/MinMax.js +2 -2
  106. package/dist/esm/components/Slider/Output.js +4 -4
  107. package/dist/esm/components/Slider/Slider.js +27 -48
  108. package/dist/esm/components/Slider/Slider.tokens.js +14 -14
  109. package/dist/esm/components/Slider/SliderInput.js +10 -11
  110. package/dist/esm/components/Snackbar/Snackbar.js +13 -19
  111. package/dist/esm/components/Snackbar/Snackbar.tokens.js +9 -9
  112. package/dist/esm/components/Snackbar/SnackbarAction.js +1 -3
  113. package/dist/esm/components/Switch/Switch.js +8 -10
  114. package/dist/esm/components/Switch/Switch.styles.js +5 -6
  115. package/dist/esm/components/Switch/Switch.tokens.js +18 -18
  116. package/dist/esm/components/Switch/SwitchDefault.js +10 -11
  117. package/dist/esm/components/Switch/SwitchSmall.js +11 -12
  118. package/dist/esm/components/Table/Body.js +1 -2
  119. package/dist/esm/components/Table/Caption.js +1 -1
  120. package/dist/esm/components/Table/Cell.js +1 -4
  121. package/dist/esm/components/Table/DataCell/DataCell.js +9 -12
  122. package/dist/esm/components/Table/DataCell/DataCell.tokens.js +17 -18
  123. package/dist/esm/components/Table/Head/Head.js +2 -3
  124. package/dist/esm/components/Table/Head/Head.tokens.js +2 -2
  125. package/dist/esm/components/Table/HeaderCell/HeaderCell.js +7 -12
  126. package/dist/esm/components/Table/HeaderCell/HeaderCell.tokens.js +14 -14
  127. package/dist/esm/components/Table/Row/Row.js +0 -2
  128. package/dist/esm/components/Table/Row/Row.tokens.js +2 -2
  129. package/dist/esm/components/Table/Table.js +4 -3
  130. package/dist/esm/components/TableOfContents/LinkItem.js +1 -2
  131. package/dist/esm/components/TableOfContents/TableOfContents.js +7 -9
  132. package/dist/esm/components/TableOfContents/TableOfContents.tokens.js +12 -12
  133. package/dist/esm/components/Tabs/Tab.js +6 -7
  134. package/dist/esm/components/Tabs/TabList.js +13 -22
  135. package/dist/esm/components/Tabs/TabPanel.js +0 -1
  136. package/dist/esm/components/Tabs/TabPanels.js +3 -5
  137. package/dist/esm/components/Tabs/Tabs.js +24 -37
  138. package/dist/esm/components/Tabs/Tabs.tokens.js +13 -13
  139. package/dist/esm/components/TextField/TextField.js +17 -23
  140. package/dist/esm/components/Textarea/Textarea.js +11 -19
  141. package/dist/esm/components/Tooltip/Tooltip.js +37 -50
  142. package/dist/esm/components/Tooltip/Tooltip.tokens.js +7 -7
  143. package/dist/esm/components/TopBar/Actions.js +4 -3
  144. package/dist/esm/components/TopBar/CustomContent.js +4 -3
  145. package/dist/esm/components/TopBar/Header.js +4 -3
  146. package/dist/esm/components/TopBar/TopBar.js +10 -12
  147. package/dist/esm/components/TopBar/TopBar.tokens.js +2 -2
  148. package/dist/esm/components/Typography/Typography.js +15 -23
  149. package/dist/esm/components/Typography/Typography.tokens.js +10 -12
  150. package/dist/esm/index.js +0 -2
  151. package/dist/esm/node_modules/.pnpm/ramda@0.28.0/node_modules/ramda/es/internal/_curry2.js +0 -2
  152. package/dist/esm/node_modules/.pnpm/ramda@0.28.0/node_modules/ramda/es/internal/_curry3.js +0 -3
  153. package/dist/esm/node_modules/.pnpm/ramda@0.28.0/node_modules/ramda/es/mergeDeepRight.js +2 -2
  154. package/dist/esm/node_modules/.pnpm/ramda@0.28.0/node_modules/ramda/es/mergeDeepWithKey.js +2 -1
  155. package/dist/esm/node_modules/.pnpm/ramda@0.28.0/node_modules/ramda/es/mergeWithKey.js +2 -4
  156. package/dist/types/components/Select/index.d.ts +0 -2
  157. package/dist/types/components/SideBar/SideBarButton/index.d.ts +6 -3
  158. package/dist/types/components/SideBar/SideBarToggle.d.ts +2 -2
  159. package/dist/types/components/Slider/Slider.d.ts +4 -4
  160. package/package.json +6 -5
  161. package/dist/esm/components/Select/MultiSelect/MultiSelect.js +0 -226
  162. package/dist/esm/components/Select/Select.tokens.js +0 -92
  163. package/dist/esm/components/Select/SingleSelect/SingleSelect.js +0 -160
  164. package/dist/esm/components/Select/commonStyles.js +0 -43
  165. package/dist/types/components/Select/MultiSelect/MultiSelect.d.ts +0 -49
  166. package/dist/types/components/Select/MultiSelect/index.d.ts +0 -1
  167. package/dist/types/components/Select/Select.tokens.d.ts +0 -3
  168. package/dist/types/components/Select/SingleSelect/SingleSelect.d.ts +0 -49
  169. package/dist/types/components/Select/SingleSelect/index.d.ts +0 -1
  170. package/dist/types/components/Select/commonStyles.d.ts +0 -27
@@ -4,6 +4,7 @@ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProper
4
4
  import _objectSpread from '@babel/runtime/helpers/objectSpread2';
5
5
  import { forwardRef, useRef, useState, useEffect, useMemo, useCallback } from 'react';
6
6
  import { useMultipleSelection, useCombobox } from 'downshift';
7
+ import { useVirtualizer } from '@tanstack/react-virtual';
7
8
  import styled, { css, ThemeProvider } from 'styled-components';
8
9
  import { Button } from '../Button/index.js';
9
10
  import { List } from '../List/index.js';
@@ -28,7 +29,7 @@ var StyledList = styled(List).withConfig({
28
29
  componentId: "sc-yvif0e-1"
29
30
  })(function (_ref) {
30
31
  var theme = _ref.theme;
31
- return css(["background-color:", ";box-shadow:", ";", " overflow-y:auto;max-height:300px;padding:0;"], theme.background, theme.boxShadow, bordersTemplate(theme.border));
32
+ return css(["background-color:", ";box-shadow:", ";", " overflow-y:auto;overflow-x:hidden;max-height:300px;padding:0;display:grid;"], theme.background, theme.boxShadow, bordersTemplate(theme.border));
32
33
  });
33
34
  var StyledButton = styled(Button).withConfig({
34
35
  displayName: "Autocomplete__StyledButton",
@@ -37,14 +38,12 @@ var StyledButton = styled(Button).withConfig({
37
38
  var button = _ref2.theme.entities.button;
38
39
  return css(["height:", ";width:", ";"], button.height, button.height);
39
40
  });
40
-
41
41
  var findIndex = function findIndex(_ref3) {
42
42
  var calc = _ref3.calc,
43
- index = _ref3.index,
44
- optionDisabled = _ref3.optionDisabled,
45
- availableItems = _ref3.availableItems;
43
+ index = _ref3.index,
44
+ optionDisabled = _ref3.optionDisabled,
45
+ availableItems = _ref3.availableItems;
46
46
  var nextItem = availableItems[index];
47
-
48
47
  if (optionDisabled(nextItem)) {
49
48
  var nextIndex = calc(index);
50
49
  return findIndex({
@@ -54,14 +53,12 @@ var findIndex = function findIndex(_ref3) {
54
53
  optionDisabled: optionDisabled
55
54
  });
56
55
  }
57
-
58
56
  return index;
59
57
  };
60
-
61
58
  var findNextIndex = function findNextIndex(_ref4) {
62
59
  var index = _ref4.index,
63
- optionDisabled = _ref4.optionDisabled,
64
- availableItems = _ref4.availableItems;
60
+ optionDisabled = _ref4.optionDisabled,
61
+ availableItems = _ref4.availableItems;
65
62
  var options = {
66
63
  index: index,
67
64
  optionDisabled: optionDisabled,
@@ -71,21 +68,18 @@ var findNextIndex = function findNextIndex(_ref4) {
71
68
  }
72
69
  };
73
70
  var nextIndex = findIndex(options);
74
-
75
71
  if (nextIndex > availableItems.length - 1) {
76
72
  // jump to start of list
77
73
  return findIndex(_objectSpread(_objectSpread({}, options), {}, {
78
74
  index: 0
79
75
  }));
80
76
  }
81
-
82
77
  return nextIndex;
83
78
  };
84
-
85
79
  var findPrevIndex = function findPrevIndex(_ref5) {
86
80
  var index = _ref5.index,
87
- optionDisabled = _ref5.optionDisabled,
88
- availableItems = _ref5.availableItems;
81
+ optionDisabled = _ref5.optionDisabled,
82
+ availableItems = _ref5.availableItems;
89
83
  var options = {
90
84
  index: index,
91
85
  optionDisabled: optionDisabled,
@@ -95,70 +89,61 @@ var findPrevIndex = function findPrevIndex(_ref5) {
95
89
  }
96
90
  };
97
91
  var prevIndex = findIndex(options);
98
-
99
92
  if (prevIndex < 0) {
100
93
  // jump to end of list
101
94
  return findIndex(_objectSpread(_objectSpread({}, options), {}, {
102
95
  index: availableItems.length - 1
103
96
  }));
104
97
  }
105
-
106
98
  return prevIndex;
107
99
  };
108
-
109
100
  function AutocompleteInner(props, ref) {
110
101
  var _props$options = props.options,
111
- options = _props$options === void 0 ? [] : _props$options,
112
- label = props.label,
113
- meta = props.meta,
114
- className = props.className,
115
- style = props.style,
116
- _props$disabled = props.disabled,
117
- disabled = _props$disabled === void 0 ? false : _props$disabled,
118
- _props$readOnly = props.readOnly,
119
- readOnly = _props$readOnly === void 0 ? false : _props$readOnly,
120
- _props$hideClearButto = props.hideClearButton,
121
- hideClearButton = _props$hideClearButto === void 0 ? false : _props$hideClearButto,
122
- onOptionsChange = props.onOptionsChange,
123
- selectedOptions = props.selectedOptions,
124
- multiple = props.multiple,
125
- _props$initialSelecte = props.initialSelectedOptions,
126
- initialSelectedOptions = _props$initialSelecte === void 0 ? [] : _props$initialSelecte,
127
- disablePortal = props.disablePortal,
128
- _props$optionDisabled = props.optionDisabled,
129
- optionDisabled = _props$optionDisabled === void 0 ? function () {
130
- return false;
131
- } : _props$optionDisabled,
132
- optionsFilter = props.optionsFilter,
133
- autoWidth = props.autoWidth,
134
- placeholder = props.placeholder,
135
- optionLabel = props.optionLabel,
136
- _props$clearSearchOnC = props.clearSearchOnChange,
137
- clearSearchOnChange = _props$clearSearchOnC === void 0 ? true : _props$clearSearchOnC,
138
- other = _objectWithoutProperties(props, _excluded);
139
-
102
+ options = _props$options === void 0 ? [] : _props$options,
103
+ label = props.label,
104
+ meta = props.meta,
105
+ className = props.className,
106
+ style = props.style,
107
+ _props$disabled = props.disabled,
108
+ disabled = _props$disabled === void 0 ? false : _props$disabled,
109
+ _props$readOnly = props.readOnly,
110
+ readOnly = _props$readOnly === void 0 ? false : _props$readOnly,
111
+ _props$hideClearButto = props.hideClearButton,
112
+ hideClearButton = _props$hideClearButto === void 0 ? false : _props$hideClearButto,
113
+ onOptionsChange = props.onOptionsChange,
114
+ selectedOptions = props.selectedOptions,
115
+ multiple = props.multiple,
116
+ _props$initialSelecte = props.initialSelectedOptions,
117
+ initialSelectedOptions = _props$initialSelecte === void 0 ? [] : _props$initialSelecte,
118
+ disablePortal = props.disablePortal,
119
+ _props$optionDisabled = props.optionDisabled,
120
+ optionDisabled = _props$optionDisabled === void 0 ? function () {
121
+ return false;
122
+ } : _props$optionDisabled,
123
+ optionsFilter = props.optionsFilter,
124
+ autoWidth = props.autoWidth,
125
+ placeholder = props.placeholder,
126
+ optionLabel = props.optionLabel,
127
+ _props$clearSearchOnC = props.clearSearchOnChange,
128
+ clearSearchOnChange = _props$clearSearchOnC === void 0 ? true : _props$clearSearchOnC,
129
+ other = _objectWithoutProperties(props, _excluded);
140
130
  var anchorRef = useRef(null);
141
131
  var isControlled = Boolean(selectedOptions);
142
-
143
132
  var _useState = useState(options),
144
- _useState2 = _slicedToArray(_useState, 2),
145
- inputOptions = _useState2[0],
146
- setInputOptions = _useState2[1];
147
-
133
+ _useState2 = _slicedToArray(_useState, 2),
134
+ inputOptions = _useState2[0],
135
+ setInputOptions = _useState2[1];
148
136
  var _useState3 = useState(inputOptions),
149
- _useState4 = _slicedToArray(_useState3, 2),
150
- availableItems = _useState4[0],
151
- setAvailableItems = _useState4[1];
152
-
137
+ _useState4 = _slicedToArray(_useState3, 2),
138
+ availableItems = _useState4[0],
139
+ setAvailableItems = _useState4[1];
153
140
  var _useState5 = useState(''),
154
- _useState6 = _slicedToArray(_useState5, 2),
155
- typedInputValue = _useState6[0],
156
- setTypedInputValue = _useState6[1];
157
-
141
+ _useState6 = _slicedToArray(_useState5, 2),
142
+ typedInputValue = _useState6[0],
143
+ setTypedInputValue = _useState6[1];
158
144
  useEffect(function () {
159
145
  var availableHash = JSON.stringify(inputOptions);
160
146
  var optionsHash = JSON.stringify(options);
161
-
162
147
  if (availableHash !== optionsHash) {
163
148
  setInputOptions(options);
164
149
  }
@@ -169,10 +154,8 @@ function AutocompleteInner(props, ref) {
169
154
  var disabledItems = useMemo(function () {
170
155
  return options.filter(optionDisabled);
171
156
  }, [options, optionDisabled]);
172
-
173
157
  var _useEds = useEds(),
174
- density = _useEds.density;
175
-
158
+ density = _useEds.density;
176
159
  var token = useToken({
177
160
  density: density
178
161
  }, multiple ? multiSelect : selectTokens);
@@ -180,7 +163,6 @@ function AutocompleteInner(props, ref) {
180
163
  var multipleSelectionProps = {
181
164
  initialSelectedItems: multiple ? initialSelectedOptions : initialSelectedOptions[0] ? [initialSelectedOptions[0]] : []
182
165
  };
183
-
184
166
  if (multiple) {
185
167
  multipleSelectionProps = _objectSpread(_objectSpread({}, multipleSelectionProps), {}, {
186
168
  onSelectedItemsChange: function onSelectedItemsChange(changes) {
@@ -192,27 +174,23 @@ function AutocompleteInner(props, ref) {
192
174
  }
193
175
  }
194
176
  });
195
-
196
177
  if (isControlled) {
197
178
  multipleSelectionProps = _objectSpread(_objectSpread({}, multipleSelectionProps), {}, {
198
179
  selectedItems: selectedOptions
199
180
  });
200
181
  }
201
182
  }
202
-
203
183
  var _useMultipleSelection = useMultipleSelection(multipleSelectionProps),
204
- getDropdownProps = _useMultipleSelection.getDropdownProps,
205
- addSelectedItem = _useMultipleSelection.addSelectedItem,
206
- removeSelectedItem = _useMultipleSelection.removeSelectedItem,
207
- selectedItems = _useMultipleSelection.selectedItems,
208
- resetSelection = _useMultipleSelection.reset,
209
- setSelectedItems = _useMultipleSelection.setSelectedItems;
210
-
184
+ getDropdownProps = _useMultipleSelection.getDropdownProps,
185
+ addSelectedItem = _useMultipleSelection.addSelectedItem,
186
+ removeSelectedItem = _useMultipleSelection.removeSelectedItem,
187
+ selectedItems = _useMultipleSelection.selectedItems,
188
+ resetSelection = _useMultipleSelection.reset,
189
+ setSelectedItems = _useMultipleSelection.setSelectedItems;
211
190
  var getLabel = useCallback(function (item) {
212
191
  if (!item) {
213
192
  return '';
214
193
  }
215
-
216
194
  if (_typeof(item) === 'object') {
217
195
  if (optionLabel) {
218
196
  return optionLabel(item);
@@ -220,17 +198,26 @@ function AutocompleteInner(props, ref) {
220
198
  throw new Error('Missing label. When using objects for options make sure to define the `optionLabel` property');
221
199
  }
222
200
  }
223
-
224
201
  if (typeof item === 'string') {
225
202
  return item;
226
203
  }
227
-
228
204
  try {
229
205
  return item === null || item === void 0 ? void 0 : item.toString();
230
206
  } catch (error) {
231
207
  throw new Error('Unable to find label, make sure your are using options as documented');
232
208
  }
233
209
  }, [optionLabel]);
210
+ var scrollContainer = useRef(null);
211
+ var rowVirtualizer = useVirtualizer({
212
+ count: availableItems.length,
213
+ getScrollElement: function getScrollElement() {
214
+ return scrollContainer.current;
215
+ },
216
+ estimateSize: useCallback(function () {
217
+ return 48;
218
+ }, []),
219
+ overscan: 10
220
+ });
234
221
  var comboBoxProps = {
235
222
  items: availableItems,
236
223
  initialSelectedItem: initialSelectedOptions[0],
@@ -241,28 +228,31 @@ function AutocompleteInner(props, ref) {
241
228
  if (optionsFilter) {
242
229
  return optionsFilter(item, inputValue);
243
230
  }
244
-
245
231
  return getLabel(item).toLowerCase().includes(inputValue.toLowerCase());
246
232
  }));
247
233
  },
248
- onIsOpenChange: function onIsOpenChange(_ref7) {
249
- var selectedItem = _ref7.selectedItem;
250
-
234
+ onHighlightedIndexChange: function onHighlightedIndexChange(_ref7) {
235
+ var highlightedIndex = _ref7.highlightedIndex,
236
+ type = _ref7.type;
237
+ if (type !== useCombobox.stateChangeTypes.ItemMouseMove && type !== useCombobox.stateChangeTypes.MenuMouseLeave && highlightedIndex >= 0) {
238
+ rowVirtualizer.scrollToIndex(highlightedIndex);
239
+ }
240
+ },
241
+ onIsOpenChange: function onIsOpenChange(_ref8) {
242
+ var selectedItem = _ref8.selectedItem;
251
243
  if (!multiple && selectedItem !== null) {
252
244
  setAvailableItems(options);
253
245
  }
254
246
  },
255
- onStateChange: function onStateChange(_ref8) {
256
- var type = _ref8.type,
257
- selectedItem = _ref8.selectedItem;
258
-
247
+ onStateChange: function onStateChange(_ref9) {
248
+ var type = _ref9.type,
249
+ selectedItem = _ref9.selectedItem;
259
250
  switch (type) {
260
251
  case useCombobox.stateChangeTypes.InputChange:
252
+ case useCombobox.stateChangeTypes.InputBlur:
261
253
  break;
262
-
263
254
  case useCombobox.stateChangeTypes.InputKeyDownEnter:
264
255
  case useCombobox.stateChangeTypes.ItemClick:
265
- case useCombobox.stateChangeTypes.InputBlur:
266
256
  if (selectedItem && !optionDisabled(selectedItem)) {
267
257
  if (multiple) {
268
258
  selectedItems.includes(selectedItem) ? removeSelectedItem(selectedItem) : addSelectedItem(selectedItem);
@@ -270,14 +260,12 @@ function AutocompleteInner(props, ref) {
270
260
  setSelectedItems([selectedItem]);
271
261
  }
272
262
  }
273
-
274
263
  break;
275
264
  }
276
265
  },
277
266
  stateReducer: function stateReducer(_, actionAndChanges) {
278
267
  var changes = actionAndChanges.changes,
279
- type = actionAndChanges.type;
280
-
268
+ type = actionAndChanges.type;
281
269
  switch (type) {
282
270
  case useCombobox.stateChangeTypes.InputKeyDownArrowDown:
283
271
  case useCombobox.stateChangeTypes.InputKeyDownHome:
@@ -288,7 +276,6 @@ function AutocompleteInner(props, ref) {
288
276
  optionDisabled: optionDisabled
289
277
  })
290
278
  });
291
-
292
279
  case useCombobox.stateChangeTypes.InputKeyDownArrowUp:
293
280
  case useCombobox.stateChangeTypes.InputKeyDownEnd:
294
281
  return _objectSpread(_objectSpread({}, changes), {}, {
@@ -298,13 +285,11 @@ function AutocompleteInner(props, ref) {
298
285
  optionDisabled: optionDisabled
299
286
  })
300
287
  });
301
-
302
288
  default:
303
289
  return changes;
304
290
  }
305
291
  }
306
292
  };
307
-
308
293
  if (!multiple) {
309
294
  comboBoxProps = _objectSpread(_objectSpread({}, comboBoxProps), {}, {
310
295
  onSelectedItemChange: function onSelectedItemChange(changes) {
@@ -316,22 +301,19 @@ function AutocompleteInner(props, ref) {
316
301
  }
317
302
  }
318
303
  });
319
-
320
304
  if (isControlled) {
321
305
  comboBoxProps = _objectSpread(_objectSpread({}, comboBoxProps), {}, {
322
306
  selectedItem: selectedOptions[0] || null
323
307
  });
324
308
  }
325
309
  }
326
-
327
310
  if (multiple) {
328
311
  placeholderText = typeof placeholderText !== 'undefined' ? placeholderText : "".concat(selectedItems.length, "/").concat(options.length - disabledItems.length, " selected");
329
312
  comboBoxProps = _objectSpread(_objectSpread({}, comboBoxProps), {}, {
330
313
  selectedItem: null,
331
314
  stateReducer: function stateReducer(state, actionAndChanges) {
332
315
  var changes = actionAndChanges.changes,
333
- type = actionAndChanges.type;
334
-
316
+ type = actionAndChanges.type;
335
317
  switch (type) {
336
318
  case useCombobox.stateChangeTypes.InputKeyDownArrowDown:
337
319
  case useCombobox.stateChangeTypes.InputKeyDownHome:
@@ -342,7 +324,6 @@ function AutocompleteInner(props, ref) {
342
324
  optionDisabled: optionDisabled
343
325
  })
344
326
  });
345
-
346
327
  case useCombobox.stateChangeTypes.InputKeyDownArrowUp:
347
328
  case useCombobox.stateChangeTypes.InputKeyDownEnd:
348
329
  return _objectSpread(_objectSpread({}, changes), {}, {
@@ -352,7 +333,6 @@ function AutocompleteInner(props, ref) {
352
333
  optionDisabled: optionDisabled
353
334
  })
354
335
  });
355
-
356
336
  case useCombobox.stateChangeTypes.InputKeyDownEnter:
357
337
  case useCombobox.stateChangeTypes.ItemClick:
358
338
  return _objectSpread(_objectSpread({}, changes), {}, {
@@ -361,79 +341,69 @@ function AutocompleteInner(props, ref) {
361
341
  highlightedIndex: state.highlightedIndex,
362
342
  inputValue: !clearSearchOnChange ? typedInputValue : ''
363
343
  });
364
-
365
344
  case useCombobox.stateChangeTypes.InputBlur:
366
345
  setTypedInputValue('');
367
346
  return _objectSpread(_objectSpread({}, changes), {}, {
368
347
  inputValue: ''
369
348
  });
370
-
371
349
  case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
372
350
  return _objectSpread(_objectSpread({}, changes), {}, {
373
351
  inputValue: !clearSearchOnChange ? typedInputValue : changes.inputValue
374
352
  });
375
-
376
353
  default:
377
354
  return changes;
378
355
  }
379
356
  }
380
357
  });
381
358
  }
382
-
383
359
  var _useCombobox = useCombobox(comboBoxProps),
384
- isOpen = _useCombobox.isOpen,
385
- getToggleButtonProps = _useCombobox.getToggleButtonProps,
386
- getLabelProps = _useCombobox.getLabelProps,
387
- getMenuProps = _useCombobox.getMenuProps,
388
- getInputProps = _useCombobox.getInputProps,
389
- getComboboxProps = _useCombobox.getComboboxProps,
390
- highlightedIndex = _useCombobox.highlightedIndex,
391
- getItemProps = _useCombobox.getItemProps,
392
- openMenu = _useCombobox.openMenu,
393
- inputValue = _useCombobox.inputValue,
394
- resetCombobox = _useCombobox.reset;
395
-
360
+ isOpen = _useCombobox.isOpen,
361
+ getToggleButtonProps = _useCombobox.getToggleButtonProps,
362
+ getLabelProps = _useCombobox.getLabelProps,
363
+ getMenuProps = _useCombobox.getMenuProps,
364
+ getInputProps = _useCombobox.getInputProps,
365
+ highlightedIndex = _useCombobox.highlightedIndex,
366
+ getItemProps = _useCombobox.getItemProps,
367
+ openMenu = _useCombobox.openMenu,
368
+ inputValue = _useCombobox.inputValue,
369
+ resetCombobox = _useCombobox.reset;
396
370
  useEffect(function () {
397
371
  if (isControlled) {
398
372
  setSelectedItems(selectedOptions);
399
373
  }
400
374
  }, [isControlled, selectedOptions, setSelectedItems]);
401
-
402
375
  var openSelect = function openSelect() {
403
376
  if (!isOpen && !(disabled || readOnly)) {
404
377
  openMenu();
405
378
  }
406
379
  };
407
-
408
380
  var _useFloating = useFloating({
409
- placement: 'bottom-start',
410
- middleware: [offset(4), flip(), shift({
411
- padding: 8
412
- }), size({
413
- apply: function apply(_ref9) {
414
- var rects = _ref9.rects,
415
- availableHeight = _ref9.availableHeight,
416
- elements = _ref9.elements;
417
- var anchorWidth = "".concat(rects.reference.width, "px");
418
- Object.assign(elements.floating.style, {
419
- width: "".concat(autoWidth ? anchorWidth : 'auto'),
420
- maxHeight: "".concat(availableHeight, "px")
421
- });
422
- },
423
- padding: 10
424
- })]
425
- }),
426
- x = _useFloating.x,
427
- y = _useFloating.y,
428
- refs = _useFloating.refs,
429
- update = _useFloating.update,
430
- reference = _useFloating.reference,
431
- floating = _useFloating.floating,
432
- strategy = _useFloating.strategy;
433
-
381
+ placement: 'bottom-start',
382
+ middleware: [offset(4), flip(), shift({
383
+ padding: 8
384
+ }), size({
385
+ apply: function apply(_ref10) {
386
+ var rects = _ref10.rects,
387
+ availableHeight = _ref10.availableHeight,
388
+ elements = _ref10.elements;
389
+ var anchorWidth = "".concat(rects.reference.width, "px");
390
+ Object.assign(elements.floating.style, {
391
+ width: "".concat(autoWidth ? anchorWidth : 'auto'),
392
+ maxHeight: "".concat(availableHeight, "px")
393
+ });
394
+ },
395
+ padding: 10
396
+ })]
397
+ }),
398
+ x = _useFloating.x,
399
+ y = _useFloating.y,
400
+ refs = _useFloating.refs,
401
+ update = _useFloating.update,
402
+ reference = _useFloating.reference,
403
+ floating = _useFloating.floating,
404
+ strategy = _useFloating.strategy;
434
405
  var _useInteractions = useInteractions([]),
435
- getFloatingProps = _useInteractions.getFloatingProps;
436
-
406
+ getFloatingProps = _useInteractions.getFloatingProps;
437
407
  useEffect(function () {
438
408
  reference(anchorRef.current);
439
409
  }, [anchorRef, reference]);
@@ -442,18 +412,15 @@ function AutocompleteInner(props, ref) {
442
412
  return autoUpdate(refs.reference.current, refs.floating.current, update);
443
413
  }
444
414
  }, [refs.reference, refs.floating, update, isOpen]);
445
-
446
415
  var clear = function clear() {
447
416
  resetCombobox();
448
417
  resetSelection();
449
418
  setTypedInputValue('');
450
419
  };
451
-
452
420
  var showClearButton = (selectedItems.length > 0 || inputValue) && !readOnly && !hideClearButton;
453
421
  var selectedItemsLabels = useMemo(function () {
454
422
  return selectedItems.map(getLabel);
455
423
  }, [selectedItems, getLabel]);
456
-
457
424
  var optionsList = /*#__PURE__*/jsx("div", _objectSpread(_objectSpread({}, getFloatingProps({
458
425
  ref: floating,
459
426
  style: {
@@ -463,30 +430,46 @@ function AutocompleteInner(props, ref) {
463
430
  zIndex: 1500
464
431
  }
465
432
  })), {}, {
466
- children: /*#__PURE__*/jsx(StyledList, _objectSpread(_objectSpread({}, getMenuProps({
467
- 'aria-multiselectable': multiple ? 'true' : null
433
+ children: /*#__PURE__*/jsxs(StyledList, _objectSpread(_objectSpread({}, getMenuProps({
434
+ 'aria-multiselectable': multiple ? 'true' : null,
435
+ ref: scrollContainer
468
436
  }, {
469
437
  suppressRefError: true
470
438
  })), {}, {
471
- children: !isOpen ? null : availableItems.map(function (item, index) {
439
+ children: [isOpen && /*#__PURE__*/jsx("li", {
440
+ role: "presentation",
441
+ style: {
442
+ height: "".concat(rowVirtualizer.getTotalSize(), "px"),
443
+ margin: '0',
444
+ gridArea: '1 / -1'
445
+ }
446
+ }, "total-size"), !isOpen ? null : rowVirtualizer.getVirtualItems().map(function (virtualItem) {
447
+ var index = virtualItem.index;
448
+ var item = availableItems[index];
472
449
  var label = getLabel(item);
473
450
  var isDisabled = optionDisabled(item);
474
451
  var isSelected = selectedItemsLabels.includes(label);
475
452
  return /*#__PURE__*/jsx(AutocompleteOption, _objectSpread({
453
+ "data-index": virtualItem.index,
454
+ "aria-setsize": availableItems.length,
455
+ "aria-posinset": index + 1,
476
456
  value: label,
477
457
  multiple: multiple,
478
458
  highlighted: highlightedIndex === index && !isDisabled ? 'true' : 'false',
479
459
  isSelected: isSelected,
480
460
  isDisabled: isDisabled
481
461
  }, getItemProps({
462
+ ref: rowVirtualizer.measureElement,
482
463
  item: item,
483
464
  index: index,
484
- disabled: disabled
485
- })), label);
486
- })
465
+ disabled: disabled,
466
+ style: {
467
+ transform: "translateY(".concat(virtualItem.start, "px)")
468
+ }
469
+ })), virtualItem.key);
470
+ })]
487
471
  }))
488
472
  }));
489
-
490
473
  return /*#__PURE__*/jsx(ThemeProvider, {
491
474
  theme: token,
492
475
  children: /*#__PURE__*/jsxs(Container, {
@@ -497,15 +480,15 @@ function AutocompleteInner(props, ref) {
497
480
  label: label,
498
481
  meta: meta,
499
482
  disabled: disabled
500
- })), /*#__PURE__*/jsx(Container, _objectSpread(_objectSpread({}, getComboboxProps()), {}, {
501
- children: /*#__PURE__*/jsx(Input, _objectSpread(_objectSpread({}, getInputProps( // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
483
+ })), /*#__PURE__*/jsx(Container, {
484
+ children: /*#__PURE__*/jsx(Input, _objectSpread(_objectSpread({}, getInputProps(
485
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
502
486
  getDropdownProps({
503
487
  preventKeyAction: multiple ? isOpen : undefined,
504
488
  disabled: disabled,
505
489
  ref: refs.reference,
506
490
  onChange: function onChange(e) {
507
491
  var _e$currentTarget;
508
-
509
492
  return setTypedInputValue(e === null || e === void 0 ? void 0 : (_e$currentTarget = e.currentTarget) === null || _e$currentTarget === void 0 ? void 0 : _e$currentTarget.value);
510
493
  }
511
494
  }))), {}, {
@@ -538,14 +521,13 @@ function AutocompleteInner(props, ref) {
538
521
  }))]
539
522
  })
540
523
  }, other))
541
- })), disablePortal ? optionsList : /*#__PURE__*/jsx(FloatingPortal, {
524
+ }), disablePortal ? optionsList : /*#__PURE__*/jsx(FloatingPortal, {
542
525
  id: "eds-autocomplete-container",
543
526
  children: optionsList
544
527
  })]
545
528
  })
546
529
  });
547
530
  }
548
-
549
531
  var Autocomplete = /*#__PURE__*/forwardRef(AutocompleteInner);
550
532
 
551
533
  export { Autocomplete };
@@ -3,25 +3,25 @@ import { tokens } from '@equinor/eds-tokens';
3
3
  import mergeDeepRight from '../../node_modules/.pnpm/ramda@0.28.0/node_modules/ramda/es/mergeDeepRight.js';
4
4
 
5
5
  var typography = tokens.typography,
6
- colors = tokens.colors,
7
- _tokens$shape = tokens.shape,
8
- straight = _tokens$shape.straight,
9
- borderRadius = _tokens$shape.corners.borderRadius,
10
- _tokens$spacings$comf = tokens.spacings.comfortable,
11
- spacingSmall = _tokens$spacings$comf.small,
12
- spacingMediumSmall = _tokens$spacings$comf.medium_small,
13
- spacingMedium = _tokens$spacings$comf.medium,
14
- spacingLarge = _tokens$spacings$comf.large,
15
- xx_small = _tokens$spacings$comf.xx_small,
16
- boxShadow = tokens.elevation.temporary_nav;
6
+ colors = tokens.colors,
7
+ _tokens$shape = tokens.shape,
8
+ straight = _tokens$shape.straight,
9
+ borderRadius = _tokens$shape.corners.borderRadius,
10
+ _tokens$spacings$comf = tokens.spacings.comfortable,
11
+ spacingSmall = _tokens$spacings$comf.small,
12
+ spacingMediumSmall = _tokens$spacings$comf.medium_small,
13
+ spacingMedium = _tokens$spacings$comf.medium,
14
+ spacingLarge = _tokens$spacings$comf.large,
15
+ xx_small = _tokens$spacings$comf.xx_small,
16
+ boxShadow = tokens.elevation.temporary_nav;
17
17
  var selectTokens = {
18
18
  background: colors.ui.background__default.rgba,
19
19
  boxShadow: boxShadow,
20
20
  minHeight: straight.minHeight,
21
21
  spacings: {
22
- top: spacingMedium,
22
+ top: '0',
23
23
  right: spacingLarge,
24
- bottom: spacingMedium,
24
+ bottom: '0',
25
25
  left: spacingLarge
26
26
  },
27
27
  typography: _objectSpread(_objectSpread({}, typography.navigation.menu_title), {}, {
@@ -53,6 +53,14 @@ var selectTokens = {
53
53
  right: spacingSmall,
54
54
  top: '6px'
55
55
  }
56
+ },
57
+ label: {
58
+ spacings: {
59
+ left: '0',
60
+ right: '0',
61
+ top: spacingMedium,
62
+ bottom: spacingMedium
63
+ }
56
64
  }
57
65
  },
58
66
  modes: {
@@ -60,8 +68,8 @@ var selectTokens = {
60
68
  spacings: {
61
69
  left: spacingSmall,
62
70
  right: spacingSmall,
63
- top: spacingSmall,
64
- bottom: spacingSmall
71
+ top: '0',
72
+ bottom: '0'
65
73
  },
66
74
  entities: {
67
75
  button: {
@@ -70,6 +78,14 @@ var selectTokens = {
70
78
  right: spacingSmall,
71
79
  top: '0'
72
80
  }
81
+ },
82
+ label: {
83
+ spacings: {
84
+ left: '0',
85
+ right: '0',
86
+ top: spacingSmall,
87
+ bottom: spacingSmall
88
+ }
73
89
  }
74
90
  }
75
91
  }