@decisiv/ui-components 2.0.1-alpha.222 → 2.0.1-alpha.224

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 (34) hide show
  1. package/lib/atoms/InputField/index.d.ts +3 -0
  2. package/lib/atoms/InputField/index.d.ts.map +1 -1
  3. package/lib/atoms/InputField/index.js +9 -2
  4. package/lib/atoms/InputField/styles.d.ts +7 -0
  5. package/lib/atoms/InputField/styles.d.ts.map +1 -0
  6. package/lib/atoms/InputField/styles.js +31 -0
  7. package/lib/atoms/OptionsList/index.d.ts.map +1 -1
  8. package/lib/atoms/OptionsList/index.js +141 -15
  9. package/lib/atoms/OptionsList/index.test.js +89 -36
  10. package/lib/atoms/OptionsList/types.d.ts +16 -0
  11. package/lib/atoms/OptionsList/types.d.ts.map +1 -1
  12. package/lib/atoms/OptionsList/utils.d.ts +3 -1
  13. package/lib/atoms/OptionsList/utils.d.ts.map +1 -1
  14. package/lib/atoms/OptionsList/utils.js +79 -2
  15. package/lib/components/Combobox/index.d.ts.map +1 -1
  16. package/lib/components/Combobox/index.js +4 -2
  17. package/lib/components/Combobox/types.d.ts +1 -0
  18. package/lib/components/Combobox/types.d.ts.map +1 -1
  19. package/lib/components/TagInput/index.d.ts +3 -12
  20. package/lib/components/TagInput/index.d.ts.map +1 -1
  21. package/lib/components/TagInput/index.js +56 -13
  22. package/lib/components/TagInput/index.test.js +66 -0
  23. package/lib/components/TagInput/schema.d.ts.map +1 -1
  24. package/lib/components/TagInput/schema.js +8 -2
  25. package/lib/components/TagInput/types.d.ts +21 -0
  26. package/lib/components/TagInput/types.d.ts.map +1 -0
  27. package/lib/components/TagInput/types.js +5 -0
  28. package/lib/components/Wizard/index.d.ts +9 -1
  29. package/lib/components/Wizard/index.d.ts.map +1 -1
  30. package/lib/components/Wizard/index.js +34 -21
  31. package/lib/components/Wizard/index.test.js +157 -28
  32. package/lib/components/Wizard/schema.d.ts.map +1 -1
  33. package/lib/components/Wizard/schema.js +6 -4
  34. package/package.json +3 -1
@@ -47,6 +47,9 @@ export interface BaseInputFieldProps {
47
47
  withWarningIntent?: boolean;
48
48
  isTextArea?: boolean;
49
49
  multiple?: boolean;
50
+ showContainerCount?: boolean;
51
+ containerMaxCount?: number;
52
+ containerCount?: number;
50
53
  }
51
54
  declare const InputFieldWithRef: RefForwardingComponent<Ref<any>, BaseInputFieldProps>;
52
55
  export default InputFieldWithRef;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atoms/InputField/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EACZ,aAAa,EAEb,GAAG,EACH,sBAAsB,EAIvB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAoB5C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,mBAAmB;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,KAAK,CAAC,iBAAiB,CAAC;IAChC,QAAQ,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAC;IACpC,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC;IAClC,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,MAAM,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,GAAG,CAAC,OAAO,CAAC;IACzC,gBAAgB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,iBAAiB,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC;IACjC,QAAQ,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC;IAClC,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC;IAClC,SAAS,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAoLD,QAAA,MAAM,iBAAiB,EAAE,sBAAsB,CAC7C,GAAG,CAAC,GAAG,CAAC,EACR,mBAAmB,CACK,CAAC;AAQ3B,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atoms/InputField/index.tsx"],"names":[],"mappings":"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"}
@@ -33,6 +33,8 @@ var _RequiredIcon = _interopRequireDefault(require("../RequiredIcon"));
33
33
 
34
34
  var _HelpMessage = _interopRequireDefault(require("./HelpMessage"));
35
35
 
36
+ var _styles = require("./styles");
37
+
36
38
  var _schema = _interopRequireDefault(require("./schema"));
37
39
 
38
40
  function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
@@ -90,7 +92,10 @@ function InputField(props, targetRef) {
90
92
  isTextArea = _props$isTextArea === void 0 ? false : _props$isTextArea,
91
93
  _props$multiple = props.multiple,
92
94
  multiple = _props$multiple === void 0 ? false : _props$multiple,
93
- rest = _objectWithoutProperties(props, ["children", "cursor", "disabled", "hideLabel", "helpMessage", "icon", "secondaryElement", "id", "inputContainerRef", "label", "labelId", "maxLength", "onBlur", "onChange", "onClick", "onFocus", "onKeyDown", "overflow", "readOnly", "required", "requiredMessage", "showCharacterCount", "style", "value", "warningMessage", "withWarningIntent", "isTextArea", "multiple"]);
95
+ showContainerCount = props.showContainerCount,
96
+ containerCount = props.containerCount,
97
+ containerMaxCount = props.containerMaxCount,
98
+ rest = _objectWithoutProperties(props, ["children", "cursor", "disabled", "hideLabel", "helpMessage", "icon", "secondaryElement", "id", "inputContainerRef", "label", "labelId", "maxLength", "onBlur", "onChange", "onClick", "onFocus", "onKeyDown", "overflow", "readOnly", "required", "requiredMessage", "showCharacterCount", "style", "value", "warningMessage", "withWarningIntent", "isTextArea", "multiple", "showContainerCount", "containerCount", "containerMaxCount"]);
94
99
 
95
100
  var fallbackTargetRef = (0, _react.useRef)(null);
96
101
  var finalTargetRef = targetRef || fallbackTargetRef;
@@ -194,7 +199,9 @@ function InputField(props, targetRef) {
194
199
  target: _react.default.createElement(_RequiredIcon.default, {
195
200
  "aria-label": requiredMessage
196
201
  })
197
- }, requiredMessage))), children(_objectSpread({}, rest, {
202
+ }, requiredMessage), showContainerCount && containerMaxCount !== undefined && _react.default.createElement(_styles.ContentCounter, {
203
+ surpassed: (containerCount || 0) > containerMaxCount
204
+ }, "".concat(containerCount || 0, "/").concat(containerMaxCount)))), children(_objectSpread({}, rest, {
198
205
  'aria-labelledby': labelId,
199
206
  disabled: disabled,
200
207
  id: targetId,
@@ -0,0 +1,7 @@
1
+ import { HTMLAttributes } from 'react';
2
+ interface SpanProps extends HTMLAttributes<HTMLSpanElement> {
3
+ surpassed?: boolean;
4
+ }
5
+ export declare const ContentCounter: import("styled-components").StyledComponent<"span", any, SpanProps, never>;
6
+ export {};
7
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/atoms/InputField/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AASvC,UAAU,SAAU,SAAQ,cAAc,CAAC,eAAe,CAAC;IACzD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAGD,eAAO,MAAM,cAAc,4EAS1B,CAAC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ContentCounter = void 0;
7
+
8
+ var _styledComponents = _interopRequireWildcard(require("styled-components"));
9
+
10
+ var _toColorString = _interopRequireDefault(require("polished/lib/color/toColorString"));
11
+
12
+ var _rem = _interopRequireDefault(require("polished/lib/helpers/rem"));
13
+
14
+ var _color = _interopRequireDefault(require("@decisiv/design-tokens/lib/color"));
15
+
16
+ var _spacing = _interopRequireDefault(require("@decisiv/design-tokens/lib/spacing"));
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
21
+
22
+ // eslint-disable-next-line import/prefer-default-export
23
+ var ContentCounter = _styledComponents.default.span.withConfig({
24
+ displayName: "styles__ContentCounter",
25
+ componentId: "sc-1mkcosa-0"
26
+ })(["position:absolute;right:", ";", ""], (0, _rem.default)(_spacing.default.base), function (_ref) {
27
+ var surpassed = _ref.surpassed;
28
+ return surpassed && (0, _styledComponents.css)(["color:", ";"], (0, _toColorString.default)(_color.default.status.danger.medium));
29
+ });
30
+
31
+ exports.ContentCounter = ContentCounter;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atoms/OptionsList/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KASN,MAAM,OAAO,CAAC;AAoBf,OAAO,EAGL,gBAAgB,EAGjB,MAAM,SAAS,CAAC;AAajB,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAqZrC,QAAA,MAAM,2BAA2B,2FAA0B,CAAC;AAmC5D,eAAe,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atoms/OptionsList/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KASN,MAAM,OAAO,CAAC;AAqBf,OAAO,EAEL,gBAAgB,EAMjB,MAAM,SAAS,CAAC;AAqBjB,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AA8iBrC,QAAA,MAAM,2BAA2B,2FAA0B,CAAC;AAmC5D,eAAe,2BAA2B,CAAC"}
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  Object.defineProperty(exports, "Container", {
7
7
  enumerable: true,
8
8
  get: function get() {
9
- return _styles.Container;
9
+ return _styles2.Container;
10
10
  }
11
11
  });
12
12
  exports.default = void 0;
@@ -19,6 +19,8 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
19
19
 
20
20
  var _isArray = _interopRequireDefault(require("lodash/isArray"));
21
21
 
22
+ var _reactWindow = require("react-window");
23
+
22
24
  var _Button = require("../../components/Button");
23
25
 
24
26
  var _Grid = _interopRequireDefault(require("../../components/Grid"));
@@ -37,9 +39,11 @@ var _Option = _interopRequireDefault(require("./Option"));
37
39
 
38
40
  var _Category = _interopRequireDefault(require("./Category"));
39
41
 
42
+ var _styles = require("./Category/styles");
43
+
40
44
  var _Footer = _interopRequireDefault(require("./Footer"));
41
45
 
42
- var _styles = require("./styles");
46
+ var _styles2 = require("./styles");
43
47
 
44
48
  var _context = require("./context");
45
49
 
@@ -59,8 +63,6 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
59
63
 
60
64
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
61
65
 
62
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
63
-
64
66
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
65
67
 
66
68
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
@@ -77,6 +79,8 @@ function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d =
77
79
 
78
80
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
79
81
 
82
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
83
+
80
84
  var Row = _Grid.default.Row;
81
85
  var isUsingKeyboard = false;
82
86
 
@@ -88,6 +92,41 @@ if (_canUseDOM.default) {
88
92
  isUsingKeyboard = false;
89
93
  });
90
94
  }
95
+ /**
96
+ * VirtualRow component for VariableSizeList (react-window)
97
+ * Renders a single item (either a Category header or an Option)
98
+ */
99
+
100
+ /* eslint-disable react/prop-types */
101
+
102
+
103
+ var VirtualRow = _react.default.memo(function (_ref) {
104
+ var index = _ref.index,
105
+ style = _ref.style,
106
+ data = _ref.data;
107
+ var flattenedItems = data.flattenedItems,
108
+ borderRadius = data.borderRadius,
109
+ showCheckbox = data.showCheckbox,
110
+ size = data.size;
111
+ var flattenedItem = flattenedItems[index];
112
+ var item = flattenedItem.item,
113
+ type = flattenedItem.type;
114
+ var id = (0, _utils.getId)(item);
115
+ return _react.default.createElement("div", {
116
+ style: style
117
+ }, type === 'category-header' ? _react.default.createElement(_styles.StyledCategory, {
118
+ size: size
119
+ }, item.label) : _react.default.createElement(_Option.default, _extends({}, item, {
120
+ key: id,
121
+ borderRadius: borderRadius,
122
+ showCheckbox: showCheckbox,
123
+ size: size
124
+ })));
125
+ });
126
+ /* eslint-enable react/prop-types */
127
+
128
+
129
+ VirtualRow.displayName = 'VirtualRow';
91
130
 
92
131
  function OptionsList(props, forwardedRef) {
93
132
  var actions = props.actions,
@@ -114,7 +153,8 @@ function OptionsList(props, forwardedRef) {
114
153
  minWidth = props.minWidth,
115
154
  maxWidth = props.maxWidth,
116
155
  maxHeight = props.maxHeight,
117
- pointerEvents = props.pointerEvents;
156
+ pointerEvents = props.pointerEvents,
157
+ enableVirtualization = props.enableVirtualization;
118
158
  var initialIds = selectedIdsProp || defaultSelected;
119
159
 
120
160
  var _useState = (0, _react.useState)(null),
@@ -127,6 +167,40 @@ function OptionsList(props, forwardedRef) {
127
167
  selectedIds = _useState4[0],
128
168
  setSelectedIds = _useState4[1];
129
169
 
170
+ var isDragEnabled = !!onDragEndProp;
171
+ var useVirtualization = enableVirtualization && !isDragEnabled; // Flatten items for virtualization
172
+
173
+ var flattenedItems = (0, _react.useMemo)(function () {
174
+ if (!useVirtualization) return [];
175
+ return (0, _utils.flattenItems)(items);
176
+ }, [items, useVirtualization]); // Get item size for VariableSizeList
177
+
178
+ var getItemSize = (0, _react.useCallback)(function (index) {
179
+ return (0, _utils.getItemHeight)(flattenedItems[index], size);
180
+ }, [flattenedItems, size]); // Calculate total height for the list
181
+
182
+ var totalHeight = (0, _react.useMemo)(function () {
183
+ if (!useVirtualization) return 0;
184
+ var calculated = flattenedItems.reduce(function (acc, item) {
185
+ return acc + (0, _utils.getItemHeight)(item, size);
186
+ }, 0); // If maxHeight is explicitly provided, use it
187
+
188
+ if (maxHeight && typeof maxHeight === 'string') {
189
+ var max = parseInt(maxHeight, 10);
190
+ return Math.min(calculated, max);
191
+ } // Default behavior: use 310px max, but if calculated is less, use calculated
192
+ // This ensures small lists render all items (important for tests)
193
+
194
+
195
+ var defaultMax = 310; // If the list is small enough to fit all items, use calculated height
196
+ // This is important for tests and small lists
197
+
198
+ if (calculated <= defaultMax) {
199
+ return calculated;
200
+ }
201
+
202
+ return defaultMax;
203
+ }, [flattenedItems, size, maxHeight, useVirtualization]);
130
204
  var updateSelectionAndTriggerChange = (0, _react.useCallback)(function (ids) {
131
205
  // Only toggle if we are "uncontrolled"
132
206
  selectedIdsProp === undefined && selectable && setSelectedIds(ids);
@@ -161,8 +235,8 @@ function OptionsList(props, forwardedRef) {
161
235
 
162
236
  var selectableIds = (0, _react.useMemo)(function () {
163
237
  return items.reduce(function (acc, item) {
164
- return [].concat(_toConsumableArray(acc), _toConsumableArray(((0, _utils.isCategory)(item) ? item.items.filter(function (_ref) {
165
- var disabled = _ref.disabled;
238
+ return [].concat(_toConsumableArray(acc), _toConsumableArray(((0, _utils.isCategory)(item) ? item.items.filter(function (_ref2) {
239
+ var disabled = _ref2.disabled;
166
240
  return !disabled;
167
241
  }) : [item.disabled ? undefined : item]).filter(Boolean)));
168
242
  }, []).map(_utils.getId);
@@ -260,9 +334,9 @@ function OptionsList(props, forwardedRef) {
260
334
  handleFocusToggle(event);
261
335
  }, [handleFocusToggle, updateActiveId]);
262
336
  var positions = [];
263
- var onDragEnd = (0, _react.useCallback)(function (_ref2) {
264
- var source = _ref2.source,
265
- destination = _ref2.destination;
337
+ var onDragEnd = (0, _react.useCallback)(function (_ref3) {
338
+ var source = _ref3.source,
339
+ destination = _ref3.destination;
266
340
  if (!onDragEndProp || !destination) return;
267
341
 
268
342
  var _positions$source$ind = _slicedToArray(positions[source.index], 2),
@@ -303,9 +377,17 @@ function OptionsList(props, forwardedRef) {
303
377
  }, [onDragEndProp, positions]);
304
378
 
305
379
  var _useConfig = (0, _ConfigProvider.useConfig)(),
306
- createPortal = _useConfig.createPortal;
380
+ createPortal = _useConfig.createPortal; // Warn developers if they try to use both features
307
381
 
308
- var isDragEnabled = !!onDragEndProp;
382
+
383
+ (0, _react.useEffect)(function () {
384
+ if (process.env.NODE_ENV !== 'production') {
385
+ if (enableVirtualization && isDragEnabled) {
386
+ // eslint-disable-next-line no-console
387
+ console.warn('OptionsList: enableVirtualization is ignored when onDragEnd is provided. ' + 'Virtualization and drag-and-drop are incompatible.');
388
+ }
389
+ }
390
+ }, [enableVirtualization, isDragEnabled]);
309
391
 
310
392
  var renderDraggable = function renderDraggable(item, index) {
311
393
  var id = (0, _utils.getId)(item);
@@ -352,10 +434,36 @@ function OptionsList(props, forwardedRef) {
352
434
  }
353
435
  }, _react.default.createElement(_Grid.default.Container, null, _react.default.createElement(Row, null, _react.default.createElement(_reactBeautifulDnd.DragDropContext, {
354
436
  onDragEnd: onDragEnd
355
- }, _react.default.createElement(_reactBeautifulDnd.Droppable, {
437
+ }, useVirtualization ? _react.default.createElement(_styles2.Container, {
438
+ "aria-activedescendant": activeId,
439
+ "aria-multiselectable": !!multiple,
440
+ ref: setContainerRefFunc,
441
+ onKeyDown: onKeyDown,
442
+ onFocus: onFocus,
443
+ onBlur: onBlur,
444
+ onMouseLeave: function onMouseLeave() {
445
+ return updateActiveId('');
446
+ },
447
+ role: role,
448
+ tabIndex: tabIndex,
449
+ minWidth: minWidth,
450
+ maxWidth: maxWidth,
451
+ maxHeight: maxHeight
452
+ }, _react.default.createElement(_reactWindow.VariableSizeList, {
453
+ height: totalHeight,
454
+ itemCount: flattenedItems.length,
455
+ itemSize: getItemSize,
456
+ width: "100%",
457
+ itemData: {
458
+ flattenedItems: flattenedItems,
459
+ borderRadius: borderRadius,
460
+ showCheckbox: showCheckbox || false,
461
+ size: size
462
+ }
463
+ }, VirtualRow)) : _react.default.createElement(_reactBeautifulDnd.Droppable, {
356
464
  droppableId: "droppable-options-list"
357
465
  }, function (droppableProvided) {
358
- return _react.default.createElement(_styles.Container, _extends({
466
+ return _react.default.createElement(_styles2.Container, _extends({
359
467
  "aria-activedescendant": activeId,
360
468
  "aria-multiselectable": !!multiple,
361
469
  ref: function ref(el) {
@@ -373,7 +481,7 @@ function OptionsList(props, forwardedRef) {
373
481
  minWidth: minWidth,
374
482
  maxWidth: maxWidth,
375
483
  maxHeight: maxHeight
376
- }, droppableProvided.droppableProps), items.map(function (item, index) {
484
+ }, droppableProvided.droppableProps), isDragEnabled ? items.map(function (item, index) {
377
485
  var id = (0, _utils.getId)(item);
378
486
  var indexOffset = positions.length;
379
487
  positions[dndIndex] = [index];
@@ -395,6 +503,24 @@ function OptionsList(props, forwardedRef) {
395
503
  }
396
504
 
397
505
  return renderDraggable(item, dndIndex - 1);
506
+ }) : items.map(function (item) {
507
+ var id = (0, _utils.getId)(item);
508
+
509
+ if ((0, _utils.isCategory)(item)) {
510
+ return _react.default.createElement(_Category.default, _extends({}, item, {
511
+ key: id,
512
+ borderRadius: borderRadius,
513
+ showCheckbox: showCheckbox,
514
+ size: size
515
+ }));
516
+ }
517
+
518
+ return _react.default.createElement(_Option.default, _extends({}, item, {
519
+ key: id,
520
+ borderRadius: borderRadius,
521
+ showCheckbox: showCheckbox,
522
+ size: size
523
+ }));
398
524
  }), droppableProvided.placeholder);
399
525
  }))), actions && _react.default.createElement(Row, null, _react.default.createElement(_Footer.default, {
400
526
  actions: actions
@@ -101,12 +101,65 @@ var defaultProps = {
101
101
  onChange: jest.fn()
102
102
  };
103
103
  describe('OptionsList', function () {
104
+ describe('virtualization', function () {
105
+ it('renders with virtualization enabled', function () {
106
+ var _render = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
107
+ enableVirtualization: true
108
+ })), {
109
+ wrapper: wrapper
110
+ }),
111
+ container = _render.container; // Verify that react-window's List container is rendered
112
+
113
+
114
+ var listContainer = container.querySelector('[style*="overflow"]');
115
+ expect(listContainer).toBeTruthy();
116
+ });
117
+ it('renders without virtualization by default', function () {
118
+ var _render2 = render(_react.default.createElement(_.default, defaultProps), {
119
+ wrapper: wrapper
120
+ }),
121
+ queryByText = _render2.queryByText; // Verify all items are rendered directly (not virtualized)
122
+
123
+
124
+ expect(queryByText(item0Label)).toBeTruthy();
125
+ expect(queryByText('Option 1')).toBeTruthy();
126
+ expect(queryByText(item2Label)).toBeTruthy();
127
+ });
128
+ it('warns when enableVirtualization is used with drag-drop', function () {
129
+ var consoleSpy = jest.spyOn(console, 'warn').mockImplementation();
130
+ var onDragEnd = jest.fn();
131
+ render(_react.default.createElement(_.default, _extends({}, defaultProps, {
132
+ enableVirtualization: true,
133
+ onDragEnd: onDragEnd
134
+ })), {
135
+ wrapper: wrapper
136
+ });
137
+ expect(consoleSpy).toHaveBeenCalledWith('OptionsList: enableVirtualization is ignored when onDragEnd is provided. Virtualization and drag-and-drop are incompatible.');
138
+ consoleSpy.mockRestore();
139
+ });
140
+ it('disables virtualization when drag-drop is enabled', function () {
141
+ var onDragEnd = jest.fn();
142
+
143
+ var _render3 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
144
+ enableVirtualization: true,
145
+ onDragEnd: onDragEnd
146
+ })), {
147
+ wrapper: wrapper
148
+ }),
149
+ queryByText = _render3.queryByText; // All items should be rendered directly (not virtualized) when drag-drop is enabled
150
+
151
+
152
+ expect(queryByText(item0Label)).toBeTruthy();
153
+ expect(queryByText('Option 1')).toBeTruthy();
154
+ expect(queryByText(item2Label)).toBeTruthy();
155
+ });
156
+ });
104
157
  ['small', 'medium'].forEach(function (size) {
105
158
  it('renders items and categories sub items', function () {
106
- var _render = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
159
+ var _render4 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
107
160
  size: size
108
161
  }))),
109
- queryByText = _render.queryByText;
162
+ queryByText = _render4.queryByText;
110
163
 
111
164
  items.forEach(function (item) {
112
165
  var label = item.label;
@@ -126,11 +179,11 @@ describe('OptionsList', function () {
126
179
  return _react.default.createElement("span", null, "".concat(label, " foo"));
127
180
  };
128
181
 
129
- var _render2 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
182
+ var _render5 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
130
183
  renderOptionLabel: renderOptionLabel,
131
184
  size: size
132
185
  }))),
133
- queryByText = _render2.queryByText;
186
+ queryByText = _render5.queryByText;
134
187
 
135
188
  items.forEach(function (item) {
136
189
  var label = item.label;
@@ -146,19 +199,19 @@ describe('OptionsList', function () {
146
199
  });
147
200
  });
148
201
  it('checks that labelDetails when provided ', function () {
149
- var _render3 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
202
+ var _render6 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
150
203
  size: size
151
204
  }))),
152
- getByText = _render3.getByText;
205
+ getByText = _render6.getByText;
153
206
 
154
207
  expect(getByText('test detail label')).toBeInTheDocument();
155
208
  });
156
209
  it('navigates through the options with arrow keys', function () {
157
- var _render4 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
210
+ var _render7 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
158
211
  size: size
159
212
  }))),
160
- getByText = _render4.getByText,
161
- container = _render4.container;
213
+ getByText = _render7.getByText,
214
+ container = _render7.container;
162
215
 
163
216
  var optionsList = container.querySelector('ul'); // simulate it is focused while tabbing
164
217
 
@@ -187,12 +240,12 @@ describe('OptionsList', function () {
187
240
  it('selects an item with Enter or Space key', function () {
188
241
  var onChange = jest.fn();
189
242
 
190
- var _render5 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
243
+ var _render8 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
191
244
  onChange: onChange,
192
245
  size: size
193
246
  }))),
194
- getByLabelText = _render5.getByLabelText,
195
- container = _render5.container;
247
+ getByLabelText = _render8.getByLabelText,
248
+ container = _render8.container;
196
249
 
197
250
  var selectedItem = defaultProps.items[1];
198
251
  var optionsList = container.querySelector('ul'); // simulate it is focused while tabbing
@@ -229,13 +282,13 @@ describe('OptionsList', function () {
229
282
  disabled: true
230
283
  }];
231
284
 
232
- var _render6 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
285
+ var _render9 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
233
286
  items: onlyDisabledItems,
234
287
  onChange: onChange,
235
288
  size: size
236
289
  }))),
237
- getByLabelText = _render6.getByLabelText,
238
- container = _render6.container;
290
+ getByLabelText = _render9.getByLabelText,
291
+ container = _render9.container;
239
292
 
240
293
  var optionsList = container.querySelector('ul'); // simulate it is focused while tabbing
241
294
 
@@ -262,12 +315,12 @@ describe('OptionsList', function () {
262
315
  it('calls onChange with id when item is clicked', function () {
263
316
  var onChange = jest.fn();
264
317
 
265
- var _render7 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
318
+ var _render10 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
266
319
  onChange: onChange,
267
320
  size: size
268
321
  }))),
269
- getByText = _render7.getByText,
270
- getByLabelText = _render7.getByLabelText;
322
+ getByText = _render10.getByText,
323
+ getByLabelText = _render10.getByLabelText;
271
324
 
272
325
  var item = items[0];
273
326
 
@@ -286,12 +339,12 @@ describe('OptionsList', function () {
286
339
  it('does not calls onChange when item is clicked', function () {
287
340
  var onChange = jest.fn();
288
341
 
289
- var _render8 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
342
+ var _render11 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
290
343
  onChange: onChange,
291
344
  size: size
292
345
  }))),
293
- getByText = _render8.getByText,
294
- getByLabelText = _render8.getByLabelText;
346
+ getByText = _render11.getByText,
347
+ getByLabelText = _render11.getByLabelText;
295
348
 
296
349
  _react2.fireEvent.click(getByText(disabledItemLabel));
297
350
 
@@ -305,12 +358,12 @@ describe('OptionsList', function () {
305
358
  it('prefers value over internal', function () {
306
359
  var selected = items[1];
307
360
 
308
- var _render9 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
361
+ var _render12 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
309
362
  selected: selected.id,
310
363
  size: size
311
364
  }))),
312
- getByText = _render9.getByText,
313
- getByLabelText = _render9.getByLabelText;
365
+ getByText = _render12.getByText,
366
+ getByLabelText = _render12.getByLabelText;
314
367
 
315
368
  var item = items[0];
316
369
 
@@ -325,13 +378,13 @@ describe('OptionsList', function () {
325
378
  it('calls onChange with array of selected ids when item is clicked', function () {
326
379
  var onChange = jest.fn();
327
380
 
328
- var _render10 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
381
+ var _render13 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
329
382
  onChange: onChange,
330
383
  multiple: true,
331
384
  size: size
332
385
  }))),
333
- getByText = _render10.getByText,
334
- getByLabelText = _render10.getByLabelText;
386
+ getByText = _render13.getByText,
387
+ getByLabelText = _render13.getByLabelText;
335
388
 
336
389
  var item = items[0];
337
390
 
@@ -370,13 +423,13 @@ describe('OptionsList', function () {
370
423
  onClick: onClick
371
424
  }];
372
425
 
373
- var _render11 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
426
+ var _render14 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
374
427
  actions: actions,
375
428
  multiple: true,
376
429
  size: size
377
430
  }))),
378
- baseElement = _render11.baseElement,
379
- getByText = _render11.getByText;
431
+ baseElement = _render14.baseElement,
432
+ getByText = _render14.getByText;
380
433
 
381
434
  actions.forEach(function (_ref5) {
382
435
  var label = _ref5.text;
@@ -389,11 +442,11 @@ describe('OptionsList', function () {
389
442
  it('has draggable attributes', function () {
390
443
  var mockedFn = jest.fn();
391
444
 
392
- var _render12 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
445
+ var _render15 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
393
446
  size: size,
394
447
  onDragEnd: mockedFn
395
448
  }))),
396
- getByText = _render12.getByText;
449
+ getByText = _render15.getByText;
397
450
 
398
451
  var item = items[0];
399
452
  expect(getByText(item.label).closest('li')).toHaveAttribute('draggable');
@@ -403,10 +456,10 @@ describe('OptionsList', function () {
403
456
  });
404
457
  });
405
458
  it('does not have draggable attributes when onDragEnd is not provided', function () {
406
- var _render13 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
459
+ var _render16 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
407
460
  size: size
408
461
  }))),
409
- getByText = _render13.getByText;
462
+ getByText = _render16.getByText;
410
463
 
411
464
  var item = items[0];
412
465
  expect(getByText(item.label).closest('li')).not.toHaveAttribute('draggable');
@@ -419,11 +472,11 @@ describe('OptionsList', function () {
419
472
  it.skip('calls onDragEnd when drag ends', function () {
420
473
  var mockedFn = jest.fn();
421
474
 
422
- var _render14 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
475
+ var _render17 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
423
476
  size: size,
424
477
  onDragEnd: mockedFn
425
478
  }))),
426
- getByText = _render14.getByText;
479
+ getByText = _render17.getByText;
427
480
 
428
481
  var draggableElement = getByText(items[0].label).closest('li');
429
482
  var dropTarget = getByText('Option 2').closest('li');
@@ -93,6 +93,7 @@ export interface OptionsListProps extends OptionsListDimensions {
93
93
  itemRole?: string;
94
94
  pointerEvents?: string;
95
95
  onDragEnd?: (from: number | number[], to: number | number[]) => void;
96
+ enableVirtualization?: boolean;
96
97
  }
97
98
  export declare type OptionsListContainerRef = HTMLUListElement;
98
99
  export interface StyledCategoryProps {
@@ -112,5 +113,20 @@ export interface ContainerProps {
112
113
  export interface StyledLinkProps extends LinkProps {
113
114
  disabled: boolean;
114
115
  }
116
+ export interface FlattenedItem {
117
+ item: Item;
118
+ type: 'option' | 'category-header';
119
+ originalItem: Item;
120
+ }
121
+ export interface VirtualRowProps {
122
+ index: number;
123
+ style: React.CSSProperties;
124
+ data: {
125
+ flattenedItems: FlattenedItem[];
126
+ borderRadius?: string;
127
+ showCheckbox: boolean;
128
+ size: 'small' | 'medium';
129
+ };
130
+ }
115
131
  export {};
116
132
  //# sourceMappingURL=types.d.ts.map