@equinor/eds-core-react 0.27.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.
@@ -18,6 +18,7 @@ var reactDomInteractions = require('@floating-ui/react-dom-interactions');
18
18
  var ReactDom = require('react-dom');
19
19
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
20
20
  var downshift = require('downshift');
21
+ var reactVirtual = require('@tanstack/react-virtual');
21
22
 
22
23
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
23
24
 
@@ -1653,7 +1654,7 @@ var Text$2 = styled__default["default"].span.withConfig({
1653
1654
  displayName: "Label__Text",
1654
1655
  componentId: "sc-1gi2bcn-1"
1655
1656
  })(["margin:0;"]);
1656
- var Label$2 = /*#__PURE__*/react.forwardRef(function Label(props, ref) {
1657
+ var Label$3 = /*#__PURE__*/react.forwardRef(function Label(props, ref) {
1657
1658
  var _props$label = props.label,
1658
1659
  label = _props$label === void 0 ? '' : _props$label,
1659
1660
  meta = props.meta,
@@ -1908,7 +1909,7 @@ var HelperText = styled__default["default"](TextfieldHelperText).withConfig({
1908
1909
  displayName: "InputWrapper__HelperText",
1909
1910
  componentId: "sc-v6o9z1-1"
1910
1911
  })(["margin-top:8px;margin-left:8px;"]);
1911
- var Label$1 = styled__default["default"](Label$2).withConfig({
1912
+ var Label$2 = styled__default["default"](Label$3).withConfig({
1912
1913
  displayName: "InputWrapper__Label",
1913
1914
  componentId: "sc-v6o9z1-2"
1914
1915
  })(["margin-left:8px;margin-right:8px;"]);
@@ -1940,7 +1941,7 @@ var InputWrapper$2 = /*#__PURE__*/react.forwardRef(function InputWrapper(_ref, r
1940
1941
  theme: token,
1941
1942
  children: /*#__PURE__*/jsxRuntime.jsxs(Container$4, _objectSpread__default["default"](_objectSpread__default["default"]({}, other), {}, {
1942
1943
  ref: ref,
1943
- children: [hasLabel && /*#__PURE__*/jsxRuntime.jsx(Label$1, _objectSpread__default["default"]({}, _objectSpread__default["default"]({
1944
+ children: [hasLabel && /*#__PURE__*/jsxRuntime.jsx(Label$2, _objectSpread__default["default"]({}, _objectSpread__default["default"]({
1944
1945
  label: label
1945
1946
  }, labelProps))), children, hasHelperText && /*#__PURE__*/jsxRuntime.jsx(HelperText, _objectSpread__default["default"]({
1946
1947
  color: helperTextColor
@@ -7244,7 +7245,7 @@ var NativeSelect = /*#__PURE__*/react.forwardRef(function NativeSelect(_ref2, re
7244
7245
  return /*#__PURE__*/jsxRuntime.jsx(styled.ThemeProvider, {
7245
7246
  theme: token,
7246
7247
  children: /*#__PURE__*/jsxRuntime.jsxs(Container$2, _objectSpread__default["default"](_objectSpread__default["default"]({}, containerProps), {}, {
7247
- children: [showLabel && /*#__PURE__*/jsxRuntime.jsx(Label$2, _objectSpread__default["default"]({}, labelProps)), /*#__PURE__*/jsxRuntime.jsx(StyledSelect, _objectSpread__default["default"](_objectSpread__default["default"]({}, selectProps), {}, {
7248
+ children: [showLabel && /*#__PURE__*/jsxRuntime.jsx(Label$3, _objectSpread__default["default"]({}, labelProps)), /*#__PURE__*/jsxRuntime.jsx(StyledSelect, _objectSpread__default["default"](_objectSpread__default["default"]({}, selectProps), {}, {
7248
7249
  children: children
7249
7250
  }))]
7250
7251
  }))
@@ -7946,7 +7947,7 @@ var StyledLabel = styled__default["default"].label.withConfig({
7946
7947
  var isDisabled = _ref.isDisabled;
7947
7948
  return isDisabled ? 'not-allowed' : 'pointer';
7948
7949
  });
7949
- var Label = styled__default["default"].span.withConfig({
7950
+ var Label$1 = styled__default["default"].span.withConfig({
7950
7951
  displayName: "Switch__Label",
7951
7952
  componentId: "sc-sdaahx-1"
7952
7953
  })(function (_ref2) {
@@ -7982,7 +7983,7 @@ var Switch = /*#__PURE__*/react.forwardRef(function Switch(_ref3, ref) {
7982
7983
  disabled: disabled
7983
7984
  }, rest), {}, {
7984
7985
  ref: ref
7985
- })), label && /*#__PURE__*/jsxRuntime.jsx(Label, {
7986
+ })), label && /*#__PURE__*/jsxRuntime.jsx(Label$1, {
7986
7987
  children: label
7987
7988
  })]
7988
7989
  }) : size === 'small' ? /*#__PURE__*/jsxRuntime.jsx(SwitchSmall, _objectSpread__default["default"](_objectSpread__default["default"]({
@@ -8019,9 +8020,9 @@ var selectTokens = {
8019
8020
  boxShadow: boxShadow,
8020
8021
  minHeight: straight.minHeight,
8021
8022
  spacings: {
8022
- top: spacingMedium,
8023
+ top: '0',
8023
8024
  right: spacingLarge,
8024
- bottom: spacingMedium,
8025
+ bottom: '0',
8025
8026
  left: spacingLarge
8026
8027
  },
8027
8028
  typography: _objectSpread__default["default"](_objectSpread__default["default"]({}, typography.navigation.menu_title), {}, {
@@ -8053,6 +8054,14 @@ var selectTokens = {
8053
8054
  right: spacingSmall,
8054
8055
  top: '6px'
8055
8056
  }
8057
+ },
8058
+ label: {
8059
+ spacings: {
8060
+ left: '0',
8061
+ right: '0',
8062
+ top: spacingMedium,
8063
+ bottom: spacingMedium
8064
+ }
8056
8065
  }
8057
8066
  },
8058
8067
  modes: {
@@ -8060,8 +8069,8 @@ var selectTokens = {
8060
8069
  spacings: {
8061
8070
  left: spacingSmall,
8062
8071
  right: spacingSmall,
8063
- top: spacingSmall,
8064
- bottom: spacingSmall
8072
+ top: '0',
8073
+ bottom: '0'
8065
8074
  },
8066
8075
  entities: {
8067
8076
  button: {
@@ -8070,6 +8079,14 @@ var selectTokens = {
8070
8079
  right: spacingSmall,
8071
8080
  top: '0'
8072
8081
  }
8082
+ },
8083
+ label: {
8084
+ spacings: {
8085
+ left: '0',
8086
+ right: '0',
8087
+ top: spacingSmall,
8088
+ bottom: spacingSmall
8089
+ }
8073
8090
  }
8074
8091
  }
8075
8092
  }
@@ -8093,7 +8110,7 @@ var multiSelect = mergeDeepRight$1(selectTokens, {
8093
8110
  });
8094
8111
 
8095
8112
  var _excluded$6 = ["value", "multiple", "isSelected", "isDisabled", "onClick", "aria-selected"];
8096
- var StyledListItem = styled__default["default"](List$1.Item).withConfig({
8113
+ var StyledListItem = styled__default["default"].li.withConfig({
8097
8114
  displayName: "Option__StyledListItem",
8098
8115
  componentId: "sc-1ly11zu-0"
8099
8116
  })(function (_ref) {
@@ -8102,16 +8119,23 @@ var StyledListItem = styled__default["default"](List$1.Item).withConfig({
8102
8119
  active = _ref.active,
8103
8120
  isdisabled = _ref.isdisabled;
8104
8121
  var backgroundColor = highlighted === 'true' ? theme.states.hover.background : active === 'true' ? theme.states.active.background : theme.background;
8105
- return styled.css(["display:flex;align-items:center;margin:0;list-style:none;background-color:", ";user-select:none;cursor:", ";", " ", " ", ""], backgroundColor, highlighted === 'true' ? 'pointer' : 'default', edsUtils.typographyTemplate(theme.typography), edsUtils.spacingsTemplate(theme.spacings), isdisabled === 'true' ? styled.css(["color:", ";"], theme.states.disabled.typography.color) : '');
8106
- });
8107
- var AutocompleteOption = /*#__PURE__*/react.forwardRef(function AutocompleteOption(_ref2, ref) {
8108
- var value = _ref2.value,
8109
- multiple = _ref2.multiple,
8110
- isSelected = _ref2.isSelected,
8111
- isDisabled = _ref2.isDisabled,
8112
- _onClick = _ref2.onClick,
8113
- ariaSelected = _ref2['aria-selected'],
8114
- other = _objectWithoutProperties__default["default"](_ref2, _excluded$6);
8122
+ return styled.css(["display:flex;grid-area:1 / -1;align-items:center;align-self:start;margin:0;list-style:none;background-color:", ";user-select:none;word-break:break-word;cursor:", ";", " ", " ", ""], backgroundColor, highlighted === 'true' ? 'pointer' : 'default', edsUtils.typographyTemplate(theme.typography), edsUtils.spacingsTemplate(theme.spacings), isdisabled === 'true' ? styled.css(["color:", ";"], theme.states.disabled.typography.color) : '');
8123
+ });
8124
+ var Label = styled__default["default"].span.withConfig({
8125
+ displayName: "Option__Label",
8126
+ componentId: "sc-1ly11zu-1"
8127
+ })(function (_ref2) {
8128
+ var theme = _ref2.theme;
8129
+ return styled.css(["", ""], edsUtils.spacingsTemplate(theme.entities.label.spacings));
8130
+ });
8131
+ var AutocompleteOption = /*#__PURE__*/react.forwardRef(function AutocompleteOption(_ref3, ref) {
8132
+ var value = _ref3.value,
8133
+ multiple = _ref3.multiple,
8134
+ isSelected = _ref3.isSelected,
8135
+ isDisabled = _ref3.isDisabled,
8136
+ _onClick = _ref3.onClick,
8137
+ ariaSelected = _ref3['aria-selected'],
8138
+ other = _objectWithoutProperties__default["default"](_ref3, _excluded$6);
8115
8139
  return /*#__PURE__*/jsxRuntime.jsxs(StyledListItem, _objectSpread__default["default"](_objectSpread__default["default"]({
8116
8140
  ref: ref,
8117
8141
  isdisabled: isDisabled ? 'true' : 'false',
@@ -8129,7 +8153,7 @@ var AutocompleteOption = /*#__PURE__*/react.forwardRef(function AutocompleteOpti
8129
8153
  onChange: function onChange() {
8130
8154
  return null;
8131
8155
  }
8132
- }), /*#__PURE__*/jsxRuntime.jsx("span", {
8156
+ }), /*#__PURE__*/jsxRuntime.jsx(Label, {
8133
8157
  children: value
8134
8158
  })]
8135
8159
  }));
@@ -8145,7 +8169,7 @@ var StyledList = styled__default["default"](List$1).withConfig({
8145
8169
  componentId: "sc-yvif0e-1"
8146
8170
  })(function (_ref) {
8147
8171
  var theme = _ref.theme;
8148
- return styled.css(["background-color:", ";box-shadow:", ";", " overflow-y:auto;max-height:300px;padding:0;"], theme.background, theme.boxShadow, edsUtils.bordersTemplate(theme.border));
8172
+ return styled.css(["background-color:", ";box-shadow:", ";", " overflow-y:auto;overflow-x:hidden;max-height:300px;padding:0;display:grid;"], theme.background, theme.boxShadow, edsUtils.bordersTemplate(theme.border));
8149
8173
  });
8150
8174
  var StyledButton = styled__default["default"](Button).withConfig({
8151
8175
  displayName: "Autocomplete__StyledButton",
@@ -8323,6 +8347,17 @@ function AutocompleteInner(props, ref) {
8323
8347
  throw new Error('Unable to find label, make sure your are using options as documented');
8324
8348
  }
8325
8349
  }, [optionLabel]);
8350
+ var scrollContainer = react.useRef(null);
8351
+ var rowVirtualizer = reactVirtual.useVirtualizer({
8352
+ count: availableItems.length,
8353
+ getScrollElement: function getScrollElement() {
8354
+ return scrollContainer.current;
8355
+ },
8356
+ estimateSize: react.useCallback(function () {
8357
+ return 48;
8358
+ }, []),
8359
+ overscan: 10
8360
+ });
8326
8361
  var comboBoxProps = {
8327
8362
  items: availableItems,
8328
8363
  initialSelectedItem: initialSelectedOptions[0],
@@ -8336,21 +8371,28 @@ function AutocompleteInner(props, ref) {
8336
8371
  return getLabel(item).toLowerCase().includes(inputValue.toLowerCase());
8337
8372
  }));
8338
8373
  },
8339
- onIsOpenChange: function onIsOpenChange(_ref7) {
8340
- var selectedItem = _ref7.selectedItem;
8374
+ onHighlightedIndexChange: function onHighlightedIndexChange(_ref7) {
8375
+ var highlightedIndex = _ref7.highlightedIndex,
8376
+ type = _ref7.type;
8377
+ if (type !== downshift.useCombobox.stateChangeTypes.ItemMouseMove && type !== downshift.useCombobox.stateChangeTypes.MenuMouseLeave && highlightedIndex >= 0) {
8378
+ rowVirtualizer.scrollToIndex(highlightedIndex);
8379
+ }
8380
+ },
8381
+ onIsOpenChange: function onIsOpenChange(_ref8) {
8382
+ var selectedItem = _ref8.selectedItem;
8341
8383
  if (!multiple && selectedItem !== null) {
8342
8384
  setAvailableItems(options);
8343
8385
  }
8344
8386
  },
8345
- onStateChange: function onStateChange(_ref8) {
8346
- var type = _ref8.type,
8347
- selectedItem = _ref8.selectedItem;
8387
+ onStateChange: function onStateChange(_ref9) {
8388
+ var type = _ref9.type,
8389
+ selectedItem = _ref9.selectedItem;
8348
8390
  switch (type) {
8349
8391
  case downshift.useCombobox.stateChangeTypes.InputChange:
8392
+ case downshift.useCombobox.stateChangeTypes.InputBlur:
8350
8393
  break;
8351
8394
  case downshift.useCombobox.stateChangeTypes.InputKeyDownEnter:
8352
8395
  case downshift.useCombobox.stateChangeTypes.ItemClick:
8353
- case downshift.useCombobox.stateChangeTypes.InputBlur:
8354
8396
  if (selectedItem && !optionDisabled(selectedItem)) {
8355
8397
  if (multiple) {
8356
8398
  selectedItems.includes(selectedItem) ? removeSelectedItem(selectedItem) : addSelectedItem(selectedItem);
@@ -8480,10 +8522,10 @@ function AutocompleteInner(props, ref) {
8480
8522
  middleware: [reactDomInteractions.offset(4), reactDomInteractions.flip(), reactDomInteractions.shift({
8481
8523
  padding: 8
8482
8524
  }), reactDomInteractions.size({
8483
- apply: function apply(_ref9) {
8484
- var rects = _ref9.rects,
8485
- availableHeight = _ref9.availableHeight,
8486
- elements = _ref9.elements;
8525
+ apply: function apply(_ref10) {
8526
+ var rects = _ref10.rects,
8527
+ availableHeight = _ref10.availableHeight,
8528
+ elements = _ref10.elements;
8487
8529
  var anchorWidth = "".concat(rects.reference.width, "px");
8488
8530
  Object.assign(elements.floating.style, {
8489
8531
  width: "".concat(autoWidth ? anchorWidth : 'auto'),
@@ -8528,27 +8570,44 @@ function AutocompleteInner(props, ref) {
8528
8570
  zIndex: 1500
8529
8571
  }
8530
8572
  })), {}, {
8531
- children: /*#__PURE__*/jsxRuntime.jsx(StyledList, _objectSpread__default["default"](_objectSpread__default["default"]({}, getMenuProps({
8532
- 'aria-multiselectable': multiple ? 'true' : null
8573
+ children: /*#__PURE__*/jsxRuntime.jsxs(StyledList, _objectSpread__default["default"](_objectSpread__default["default"]({}, getMenuProps({
8574
+ 'aria-multiselectable': multiple ? 'true' : null,
8575
+ ref: scrollContainer
8533
8576
  }, {
8534
8577
  suppressRefError: true
8535
8578
  })), {}, {
8536
- children: !isOpen ? null : availableItems.map(function (item, index) {
8579
+ children: [isOpen && /*#__PURE__*/jsxRuntime.jsx("li", {
8580
+ role: "presentation",
8581
+ style: {
8582
+ height: "".concat(rowVirtualizer.getTotalSize(), "px"),
8583
+ margin: '0',
8584
+ gridArea: '1 / -1'
8585
+ }
8586
+ }, "total-size"), !isOpen ? null : rowVirtualizer.getVirtualItems().map(function (virtualItem) {
8587
+ var index = virtualItem.index;
8588
+ var item = availableItems[index];
8537
8589
  var label = getLabel(item);
8538
8590
  var isDisabled = optionDisabled(item);
8539
8591
  var isSelected = selectedItemsLabels.includes(label);
8540
8592
  return /*#__PURE__*/jsxRuntime.jsx(AutocompleteOption, _objectSpread__default["default"]({
8593
+ "data-index": virtualItem.index,
8594
+ "aria-setsize": availableItems.length,
8595
+ "aria-posinset": index + 1,
8541
8596
  value: label,
8542
8597
  multiple: multiple,
8543
8598
  highlighted: highlightedIndex === index && !isDisabled ? 'true' : 'false',
8544
8599
  isSelected: isSelected,
8545
8600
  isDisabled: isDisabled
8546
8601
  }, getItemProps({
8602
+ ref: rowVirtualizer.measureElement,
8547
8603
  item: item,
8548
8604
  index: index,
8549
- disabled: disabled
8550
- })), label);
8551
- })
8605
+ disabled: disabled,
8606
+ style: {
8607
+ transform: "translateY(".concat(virtualItem.start, "px)")
8608
+ }
8609
+ })), virtualItem.key);
8610
+ })]
8552
8611
  }))
8553
8612
  }));
8554
8613
  return /*#__PURE__*/jsxRuntime.jsx(styled.ThemeProvider, {
@@ -8557,7 +8616,7 @@ function AutocompleteInner(props, ref) {
8557
8616
  className: className,
8558
8617
  style: style,
8559
8618
  ref: ref,
8560
- children: [/*#__PURE__*/jsxRuntime.jsx(Label$2, _objectSpread__default["default"](_objectSpread__default["default"]({}, getLabelProps()), {}, {
8619
+ children: [/*#__PURE__*/jsxRuntime.jsx(Label$3, _objectSpread__default["default"](_objectSpread__default["default"]({}, getLabelProps()), {}, {
8561
8620
  label: label,
8562
8621
  meta: meta,
8563
8622
  disabled: disabled
@@ -9088,7 +9147,7 @@ exports.EdsProvider = EdsProvider;
9088
9147
  exports.Icon = Icon$1;
9089
9148
  exports.Input = Input$4;
9090
9149
  exports.InputWrapper = InputWrapper$2;
9091
- exports.Label = Label$2;
9150
+ exports.Label = Label$3;
9092
9151
  exports.LinearProgress = LinearProgress;
9093
9152
  exports.List = List$1;
9094
9153
  exports.Menu = Menu;
@@ -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",
@@ -206,6 +207,17 @@ function AutocompleteInner(props, ref) {
206
207
  throw new Error('Unable to find label, make sure your are using options as documented');
207
208
  }
208
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
+ });
209
221
  var comboBoxProps = {
210
222
  items: availableItems,
211
223
  initialSelectedItem: initialSelectedOptions[0],
@@ -219,21 +231,28 @@ function AutocompleteInner(props, ref) {
219
231
  return getLabel(item).toLowerCase().includes(inputValue.toLowerCase());
220
232
  }));
221
233
  },
222
- onIsOpenChange: function onIsOpenChange(_ref7) {
223
- var selectedItem = _ref7.selectedItem;
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;
224
243
  if (!multiple && selectedItem !== null) {
225
244
  setAvailableItems(options);
226
245
  }
227
246
  },
228
- onStateChange: function onStateChange(_ref8) {
229
- var type = _ref8.type,
230
- selectedItem = _ref8.selectedItem;
247
+ onStateChange: function onStateChange(_ref9) {
248
+ var type = _ref9.type,
249
+ selectedItem = _ref9.selectedItem;
231
250
  switch (type) {
232
251
  case useCombobox.stateChangeTypes.InputChange:
252
+ case useCombobox.stateChangeTypes.InputBlur:
233
253
  break;
234
254
  case useCombobox.stateChangeTypes.InputKeyDownEnter:
235
255
  case useCombobox.stateChangeTypes.ItemClick:
236
- case useCombobox.stateChangeTypes.InputBlur:
237
256
  if (selectedItem && !optionDisabled(selectedItem)) {
238
257
  if (multiple) {
239
258
  selectedItems.includes(selectedItem) ? removeSelectedItem(selectedItem) : addSelectedItem(selectedItem);
@@ -363,10 +382,10 @@ function AutocompleteInner(props, ref) {
363
382
  middleware: [offset(4), flip(), shift({
364
383
  padding: 8
365
384
  }), size({
366
- apply: function apply(_ref9) {
367
- var rects = _ref9.rects,
368
- availableHeight = _ref9.availableHeight,
369
- elements = _ref9.elements;
385
+ apply: function apply(_ref10) {
386
+ var rects = _ref10.rects,
387
+ availableHeight = _ref10.availableHeight,
388
+ elements = _ref10.elements;
370
389
  var anchorWidth = "".concat(rects.reference.width, "px");
371
390
  Object.assign(elements.floating.style, {
372
391
  width: "".concat(autoWidth ? anchorWidth : 'auto'),
@@ -411,27 +430,44 @@ function AutocompleteInner(props, ref) {
411
430
  zIndex: 1500
412
431
  }
413
432
  })), {}, {
414
- children: /*#__PURE__*/jsx(StyledList, _objectSpread(_objectSpread({}, getMenuProps({
415
- 'aria-multiselectable': multiple ? 'true' : null
433
+ children: /*#__PURE__*/jsxs(StyledList, _objectSpread(_objectSpread({}, getMenuProps({
434
+ 'aria-multiselectable': multiple ? 'true' : null,
435
+ ref: scrollContainer
416
436
  }, {
417
437
  suppressRefError: true
418
438
  })), {}, {
419
- 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];
420
449
  var label = getLabel(item);
421
450
  var isDisabled = optionDisabled(item);
422
451
  var isSelected = selectedItemsLabels.includes(label);
423
452
  return /*#__PURE__*/jsx(AutocompleteOption, _objectSpread({
453
+ "data-index": virtualItem.index,
454
+ "aria-setsize": availableItems.length,
455
+ "aria-posinset": index + 1,
424
456
  value: label,
425
457
  multiple: multiple,
426
458
  highlighted: highlightedIndex === index && !isDisabled ? 'true' : 'false',
427
459
  isSelected: isSelected,
428
460
  isDisabled: isDisabled
429
461
  }, getItemProps({
462
+ ref: rowVirtualizer.measureElement,
430
463
  item: item,
431
464
  index: index,
432
- disabled: disabled
433
- })), label);
434
- })
465
+ disabled: disabled,
466
+ style: {
467
+ transform: "translateY(".concat(virtualItem.start, "px)")
468
+ }
469
+ })), virtualItem.key);
470
+ })]
435
471
  }))
436
472
  }));
437
473
  return /*#__PURE__*/jsx(ThemeProvider, {
@@ -19,9 +19,9 @@ var selectTokens = {
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
  }
@@ -2,13 +2,12 @@ import _objectSpread from '@babel/runtime/helpers/objectSpread2';
2
2
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
3
3
  import { forwardRef } from 'react';
4
4
  import styled, { css } from 'styled-components';
5
- import { List } from '../List/index.js';
6
5
  import { typographyTemplate, spacingsTemplate } from '@equinor/eds-utils';
7
6
  import { jsxs, jsx } from 'react/jsx-runtime';
8
7
  import { Checkbox } from '../Checkbox/Checkbox.js';
9
8
 
10
9
  var _excluded = ["value", "multiple", "isSelected", "isDisabled", "onClick", "aria-selected"];
11
- var StyledListItem = styled(List.Item).withConfig({
10
+ var StyledListItem = styled.li.withConfig({
12
11
  displayName: "Option__StyledListItem",
13
12
  componentId: "sc-1ly11zu-0"
14
13
  })(function (_ref) {
@@ -17,16 +16,23 @@ var StyledListItem = styled(List.Item).withConfig({
17
16
  active = _ref.active,
18
17
  isdisabled = _ref.isdisabled;
19
18
  var backgroundColor = highlighted === 'true' ? theme.states.hover.background : active === 'true' ? theme.states.active.background : theme.background;
20
- return css(["display:flex;align-items:center;margin:0;list-style:none;background-color:", ";user-select:none;cursor:", ";", " ", " ", ""], backgroundColor, highlighted === 'true' ? 'pointer' : 'default', typographyTemplate(theme.typography), spacingsTemplate(theme.spacings), isdisabled === 'true' ? css(["color:", ";"], theme.states.disabled.typography.color) : '');
19
+ return css(["display:flex;grid-area:1 / -1;align-items:center;align-self:start;margin:0;list-style:none;background-color:", ";user-select:none;word-break:break-word;cursor:", ";", " ", " ", ""], backgroundColor, highlighted === 'true' ? 'pointer' : 'default', typographyTemplate(theme.typography), spacingsTemplate(theme.spacings), isdisabled === 'true' ? css(["color:", ";"], theme.states.disabled.typography.color) : '');
21
20
  });
22
- var AutocompleteOption = /*#__PURE__*/forwardRef(function AutocompleteOption(_ref2, ref) {
23
- var value = _ref2.value,
24
- multiple = _ref2.multiple,
25
- isSelected = _ref2.isSelected,
26
- isDisabled = _ref2.isDisabled,
27
- _onClick = _ref2.onClick,
28
- ariaSelected = _ref2['aria-selected'],
29
- other = _objectWithoutProperties(_ref2, _excluded);
21
+ var Label = styled.span.withConfig({
22
+ displayName: "Option__Label",
23
+ componentId: "sc-1ly11zu-1"
24
+ })(function (_ref2) {
25
+ var theme = _ref2.theme;
26
+ return css(["", ""], spacingsTemplate(theme.entities.label.spacings));
27
+ });
28
+ var AutocompleteOption = /*#__PURE__*/forwardRef(function AutocompleteOption(_ref3, ref) {
29
+ var value = _ref3.value,
30
+ multiple = _ref3.multiple,
31
+ isSelected = _ref3.isSelected,
32
+ isDisabled = _ref3.isDisabled,
33
+ _onClick = _ref3.onClick,
34
+ ariaSelected = _ref3['aria-selected'],
35
+ other = _objectWithoutProperties(_ref3, _excluded);
30
36
  return /*#__PURE__*/jsxs(StyledListItem, _objectSpread(_objectSpread({
31
37
  ref: ref,
32
38
  isdisabled: isDisabled ? 'true' : 'false',
@@ -44,7 +50,7 @@ var AutocompleteOption = /*#__PURE__*/forwardRef(function AutocompleteOption(_re
44
50
  onChange: function onChange() {
45
51
  return null;
46
52
  }
47
- }), /*#__PURE__*/jsx("span", {
53
+ }), /*#__PURE__*/jsx(Label, {
48
54
  children: value
49
55
  })]
50
56
  }));
@@ -11,8 +11,8 @@ export declare type SliderProps = {
11
11
  onChange?: (event: ChangeEvent<HTMLInputElement>, newValue: number[] | number) => void;
12
12
  /** Function to be called when value is committed by mouseup event */
13
13
  onChangeCommitted?: (event: MouseEvent | KeyboardEvent, newValue: number[] | number) => void;
14
- /** Function for formatting the output, e.g. with dates */
15
- outputFunction?: (text: number) => string;
14
+ /** Function for formatting the displayed value. E.g. formatting dates, or adding a unit suffix */
15
+ outputFunction?: (value: number) => string;
16
16
  /** Max value */
17
17
  max?: number;
18
18
  /** Min value */
@@ -38,8 +38,8 @@ export declare const Slider: import("react").ForwardRefExoticComponent<{
38
38
  onChange?: (event: ChangeEvent<HTMLInputElement>, newValue: number[] | number) => void;
39
39
  /** Function to be called when value is committed by mouseup event */
40
40
  onChangeCommitted?: (event: MouseEvent | KeyboardEvent, newValue: number[] | number) => void;
41
- /** Function for formatting the output, e.g. with dates */
42
- outputFunction?: (text: number) => string;
41
+ /** Function for formatting the displayed value. E.g. formatting dates, or adding a unit suffix */
42
+ outputFunction?: (value: number) => string;
43
43
  /** Max value */
44
44
  max?: number;
45
45
  /** Min value */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@equinor/eds-core-react",
3
- "version": "0.27.0",
3
+ "version": "0.28.0-dev12052022",
4
4
  "description": "The React implementation of the Equinor Design System",
5
5
  "sideEffects": [
6
6
  "**/*.css"
@@ -79,11 +79,12 @@
79
79
  },
80
80
  "dependencies": {
81
81
  "@babel/runtime": "^7.19.0",
82
- "@equinor/eds-icons": "0.16.0",
83
- "@equinor/eds-tokens": "0.9.0",
84
- "@equinor/eds-utils": "0.7.0",
85
82
  "@floating-ui/react-dom-interactions": "^0.10.1",
86
- "downshift": "^7.0.1"
83
+ "@tanstack/react-virtual": "3.0.0-beta.30",
84
+ "downshift": "^7.0.1",
85
+ "@equinor/eds-icons": "0.17.0",
86
+ "@equinor/eds-tokens": "0.9.0",
87
+ "@equinor/eds-utils": "0.7.0"
87
88
  },
88
89
  "engines": {
89
90
  "pnpm": ">=4",