@pingux/astro 1.16.1-alpha.0 → 1.17.0-alpha.10

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 (47) hide show
  1. package/lib/cjs/components/Button/Button.stories.js +8 -3
  2. package/lib/cjs/components/Button/Button.test.js +5 -0
  3. package/lib/cjs/components/Chip/Chip.stories.js +18 -1
  4. package/lib/cjs/components/CollapsiblePanel/CollapsiblePanel.js +2 -0
  5. package/lib/cjs/components/CollapsiblePanel/CollapsiblePanel.stories.js +125 -32
  6. package/lib/cjs/components/CollapsiblePanelContainer/CollapsiblePanelContainer.js +4 -22
  7. package/lib/cjs/components/CollapsiblePanelContainer/CollapsiblePanelContainer.test.js +8 -8
  8. package/lib/cjs/components/CollapsiblePanelItem/CollapsiblePanelItem.js +2 -2
  9. package/lib/cjs/components/ComboBoxField/ComboBoxField.js +40 -7
  10. package/lib/cjs/components/ComboBoxField/ComboBoxField.stories.js +58 -2
  11. package/lib/cjs/components/ComboBoxField/ComboBoxField.test.js +123 -25
  12. package/lib/cjs/components/Image/Image.js +14 -3
  13. package/lib/cjs/components/Image/Image.stories.js +17 -8
  14. package/lib/cjs/components/Image/Image.test.js +9 -0
  15. package/lib/cjs/components/Link/Link.test.js +5 -0
  16. package/lib/cjs/components/ListView/ListView.js +1 -0
  17. package/lib/cjs/components/MultivaluesField/MultivaluesField.stories.js +142 -21
  18. package/lib/cjs/components/OverlayPanel/OverlayPanel.stories.js +1 -1
  19. package/lib/cjs/components/RockerButton/RockerButton.js +5 -9
  20. package/lib/cjs/styles/variants/boxes.js +19 -0
  21. package/lib/cjs/styles/variants/buttons.js +20 -3
  22. package/lib/cjs/styles/variants/collapsiblePanel.js +26 -7
  23. package/lib/cjs/styles/variants/overlayPanel.js +2 -2
  24. package/lib/components/Button/Button.stories.js +8 -3
  25. package/lib/components/Button/Button.test.js +3 -0
  26. package/lib/components/Chip/Chip.stories.js +14 -0
  27. package/lib/components/CollapsiblePanel/CollapsiblePanel.js +2 -0
  28. package/lib/components/CollapsiblePanel/CollapsiblePanel.stories.js +113 -31
  29. package/lib/components/CollapsiblePanelContainer/CollapsiblePanelContainer.js +1 -15
  30. package/lib/components/CollapsiblePanelContainer/CollapsiblePanelContainer.test.js +6 -6
  31. package/lib/components/CollapsiblePanelItem/CollapsiblePanelItem.js +2 -2
  32. package/lib/components/ComboBoxField/ComboBoxField.js +40 -8
  33. package/lib/components/ComboBoxField/ComboBoxField.stories.js +51 -0
  34. package/lib/components/ComboBoxField/ComboBoxField.test.js +106 -25
  35. package/lib/components/Image/Image.js +15 -4
  36. package/lib/components/Image/Image.stories.js +17 -8
  37. package/lib/components/Image/Image.test.js +9 -0
  38. package/lib/components/Link/Link.test.js +3 -0
  39. package/lib/components/ListView/ListView.js +1 -0
  40. package/lib/components/MultivaluesField/MultivaluesField.stories.js +142 -20
  41. package/lib/components/OverlayPanel/OverlayPanel.stories.js +1 -1
  42. package/lib/components/RockerButton/RockerButton.js +6 -10
  43. package/lib/styles/variants/boxes.js +19 -0
  44. package/lib/styles/variants/buttons.js +20 -3
  45. package/lib/styles/variants/collapsiblePanel.js +26 -7
  46. package/lib/styles/variants/overlayPanel.js +2 -2
  47. package/package.json +1 -1
@@ -35,7 +35,7 @@ delete variants.ICON;
35
35
  delete variants.ICON_BUTTON;
36
36
  delete variants.INVERTED; // add designer approved variants for devs to use here
37
37
 
38
- var variantOptions = ['critical', 'danger', 'default', 'inline', 'link', 'primary', 'success', 'text'];
38
+ var variantOptions = ['critical', 'danger', 'default', 'inline', 'inlinePrimary', 'link', 'primary', 'success', 'text'];
39
39
  var _default = {
40
40
  title: 'Button',
41
41
  component: _index.Button,
@@ -101,10 +101,15 @@ var TextIconButton = function TextIconButton() {
101
101
  exports.TextIconButton = TextIconButton;
102
102
 
103
103
  var InlineButton = function InlineButton() {
104
- return (0, _react2.jsx)(_index.Button, {
104
+ return (0, _react2.jsx)(_index.Box, null, (0, _react2.jsx)(_index.Button, {
105
105
  mb: "sm",
106
+ mr: "auto",
106
107
  variant: "inline"
107
- }, "Inline");
108
+ }, "Inline"), (0, _react2.jsx)(_index.Button, {
109
+ mb: "sm",
110
+ mr: "auto",
111
+ variant: "inlinePrimary"
112
+ }, "Inline primary"));
108
113
  };
109
114
 
110
115
  exports.InlineButton = InlineButton;
@@ -137,6 +137,11 @@ test('color block button renders in default state', function () {
137
137
 
138
138
  expect(button).toHaveClass('is-focused');
139
139
  expect(button).toHaveFocus();
140
+
141
+ _userEvent["default"].tab();
142
+
143
+ expect(button).not.toHaveClass('is-focused');
144
+ expect(button).not.toHaveFocus();
140
145
  });
141
146
  test('color block button renders in configured state', function () {
142
147
  getComponent({
@@ -8,7 +8,7 @@ _Object$defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
10
 
11
- exports["default"] = exports.Default = exports.ChipWithIcon = exports.ChipWithCustomColors = void 0;
11
+ exports["default"] = exports.Default = exports.Count = exports.ChipWithIcon = exports.ChipWithCustomColors = void 0;
12
12
 
13
13
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
14
14
 
@@ -30,6 +30,8 @@ var _Icon = _interopRequireDefault(require("../Icon"));
30
30
 
31
31
  var _IconButton = _interopRequireDefault(require("../IconButton"));
32
32
 
33
+ var _Box = _interopRequireDefault(require("../Box"));
34
+
33
35
  var _colors = require("../../styles/colors.js");
34
36
 
35
37
  var _react2 = require("@emotion/react");
@@ -88,6 +90,21 @@ var Default = function Default(_ref5) {
88
90
 
89
91
  exports.Default = Default;
90
92
 
93
+ var Count = function Count(_ref6) {
94
+ var args = (0, _extends2["default"])({}, _ref6);
95
+ return (0, _react2.jsx)(_Box["default"], null, (0, _react2.jsx)(_Chip["default"], (0, _extends2["default"])({
96
+ color: "white"
97
+ }, args, {
98
+ label: "1",
99
+ variant: "boxes.chipCount"
100
+ })), (0, _react2.jsx)("br", null), (0, _react2.jsx)(_Chip["default"], (0, _extends2["default"])({}, args, {
101
+ label: "1",
102
+ variant: "boxes.countNeutral"
103
+ })));
104
+ };
105
+
106
+ exports.Count = Count;
107
+
91
108
  var ChipWithCustomColors = function ChipWithCustomColors() {
92
109
  return (0, _react2.jsx)(_Chip["default"], {
93
110
  label: "Custom Colors",
@@ -98,6 +98,7 @@ var CollapsiblePanel = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
98
98
  variant: "collapsiblePanelTitle"
99
99
  }, listTitle), selectedFilterCount && (0, _react2.jsx)(_CollapsiblePanelBadge["default"], {
100
100
  margin: "0",
101
+ className: "title-badge",
101
102
  selectedFilterCount: selectedFilterCount
102
103
  })), (0, _react2.jsx)(_index.Box, {
103
104
  pl: "xs",
@@ -106,6 +107,7 @@ var CollapsiblePanel = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
106
107
  items: items,
107
108
  onSelectionChange: onSelectionChange,
108
109
  selectionMode: "none",
110
+ selectionStyle: "highlight",
109
111
  style: {
110
112
  width: '100%'
111
113
  },
@@ -2,13 +2,25 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
4
 
5
- var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
5
+ var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
6
+
7
+ var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
6
8
 
7
9
  var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
8
10
 
9
- var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
11
+ var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
10
12
 
11
- var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
13
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
14
+
15
+ var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
16
+
17
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
18
+
19
+ var _filterInstanceProperty2 = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
20
+
21
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
22
+
23
+ var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
12
24
 
13
25
  _Object$defineProperty(exports, "__esModule", {
14
26
  value: true
@@ -18,15 +30,27 @@ exports["default"] = exports.Default = exports.CollapsiblePanelWithBadge = void
18
30
 
19
31
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
20
32
 
33
+ var _some = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/some"));
34
+
35
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
36
+
37
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
38
+
39
+ var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
40
+
41
+ var _sort = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/sort"));
42
+
43
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
44
+
21
45
  var _react = _interopRequireWildcard(require("react"));
22
46
 
23
47
  var _AccountGroupIcon = _interopRequireDefault(require("mdi-react/AccountGroupIcon"));
24
48
 
25
- var _CloseIcon = _interopRequireDefault(require("mdi-react/CloseIcon"));
26
-
27
49
  var _ChevronRightIcon = _interopRequireDefault(require("mdi-react/ChevronRightIcon"));
28
50
 
29
- var _FilterIcon = _interopRequireDefault(require("mdi-react/FilterIcon"));
51
+ var _CheckIcon = _interopRequireDefault(require("mdi-react/CheckIcon"));
52
+
53
+ var _CloseIcon = _interopRequireDefault(require("mdi-react/CloseIcon"));
30
54
 
31
55
  var _SearchIcon = _interopRequireDefault(require("mdi-react/SearchIcon"));
32
56
 
@@ -44,6 +68,10 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "functi
44
68
 
45
69
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
46
70
 
71
+ function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty2(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
72
+
73
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context2, _context3; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context2 = ownKeys(Object(source), !0)).call(_context2, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context3 = ownKeys(Object(source))).call(_context3, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
74
+
47
75
  var _default = {
48
76
  title: 'CollapsiblePanel',
49
77
  component: _CollapsiblePanel["default"],
@@ -69,13 +97,14 @@ var _default = {
69
97
  }
70
98
  };
71
99
  exports["default"] = _default;
72
- var items = [{
100
+ var data = [{
73
101
  id: '1',
74
102
  icon: 'Group',
75
103
  key: 'Avengers',
76
104
  name: 'Avengers',
77
105
  subtitle: 'Default',
78
- chipValue: '25'
106
+ chipValue: '25',
107
+ isDefaultSelected: true
79
108
  }, {
80
109
  id: '2',
81
110
  icon: 'Group',
@@ -96,7 +125,8 @@ var items = [{
96
125
  key: 'Digital Investors',
97
126
  name: 'Digital Investors',
98
127
  subtitle: 'N America',
99
- chipValue: '12'
128
+ chipValue: '12',
129
+ isDefaultSelected: true
100
130
  }, {
101
131
  id: '5',
102
132
  icon: 'Group',
@@ -133,23 +163,6 @@ var items = [{
133
163
  subtitle: '',
134
164
  chipValue: '29'
135
165
  }];
136
- var mockData = [{
137
- id: '10',
138
- key: 'Avengers',
139
- name: 'Avengers'
140
- }, {
141
- id: '11',
142
- key: 'Digital Investors',
143
- name: 'Digital Investors'
144
- }, {
145
- id: '12',
146
- key: 'A very long title as well',
147
- name: 'A very long title as well'
148
- }];
149
-
150
- var changeSelection = function changeSelection(selected) {
151
- console.log(selected);
152
- };
153
166
 
154
167
  var Default = function Default(args) {
155
168
  return (0, _react2.jsx)(_CollapsiblePanel["default"], args);
@@ -158,11 +171,41 @@ var Default = function Default(args) {
158
171
  exports.Default = Default;
159
172
 
160
173
  var CollapsiblePanelWithBadge = function CollapsiblePanelWithBadge(args) {
174
+ var _useState = (0, _react.useState)(data),
175
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
176
+ items = _useState2[0],
177
+ setItems = _useState2[1];
178
+
161
179
  var _useOverlayPanelState = (0, _hooks.useOverlayPanelState)(),
162
180
  state = _useOverlayPanelState.state,
163
181
  onClose = _useOverlayPanelState.onClose;
164
182
 
165
183
  var triggerRef = (0, _react.useRef)();
184
+ var selectedItems = (0, _react.useMemo)(function () {
185
+ var _context;
186
+
187
+ return (0, _sort["default"])(_context = (0, _filter["default"])(items).call(items, function (item) {
188
+ return item.isDefaultSelected || item.isSelected;
189
+ }) // sort elements to display "default selected" at first place
190
+ ).call(_context, function (a, b) {
191
+ return Number(!!b.isDefaultSelected) - Number(!!a.isDefaultSelected);
192
+ });
193
+ }, [items]);
194
+
195
+ var changeSelection = function changeSelection(key) {
196
+ setItems(function (prevItems) {
197
+ return (0, _map["default"])(prevItems).call(prevItems, function (el) {
198
+ if (el.key === key) {
199
+ return _objectSpread(_objectSpread({}, el), {}, {
200
+ isSelected: !el.isSelected
201
+ });
202
+ }
203
+
204
+ return el;
205
+ });
206
+ });
207
+ };
208
+
166
209
  return (0, _react2.jsx)(_index.OverlayProvider, null, (0, _react2.jsx)(_index.Button, {
167
210
  ref: triggerRef,
168
211
  onPress: state.open
@@ -219,7 +262,10 @@ var CollapsiblePanelWithBadge = function CollapsiblePanelWithBadge(args) {
219
262
  pt: "25px"
220
263
  }, (0, _react2.jsx)(_index.Box, {
221
264
  isRow: true,
222
- justifyContent: "space-between"
265
+ justifyContent: "space-between",
266
+ sx: {
267
+ marginTop: '5px'
268
+ }
223
269
  }, (0, _react2.jsx)(_index.Box, {
224
270
  width: "100%"
225
271
  }, (0, _react2.jsx)(_index.SearchField, {
@@ -228,11 +274,13 @@ var CollapsiblePanelWithBadge = function CollapsiblePanelWithBadge(args) {
228
274
  placeholder: "Search",
229
275
  width: "100%",
230
276
  mt: "0px",
231
- mr: "sm"
277
+ mr: "sm",
278
+ mb: "xs"
232
279
  }), (0, _react2.jsx)(_index.ListView, {
233
280
  items: items,
234
281
  style: {
235
- width: '108%'
282
+ width: '100%',
283
+ outline: 'none'
236
284
  }
237
285
  }, function (item) {
238
286
  return (0, _react2.jsx)(_index.Item, {
@@ -240,8 +288,12 @@ var CollapsiblePanelWithBadge = function CollapsiblePanelWithBadge(args) {
240
288
  textValue: item.name,
241
289
  "data-id": item.key,
242
290
  listItemProps: {
291
+ isRow: true,
243
292
  sx: {
244
293
  bg: 'white',
294
+ width: '100%',
295
+ justifyContent: 'space-between',
296
+ alignItems: 'center',
245
297
  '&.is-hovered': {
246
298
  bg: 'accent.99'
247
299
  }
@@ -271,9 +323,46 @@ var CollapsiblePanelWithBadge = function CollapsiblePanelWithBadge(args) {
271
323
  }
272
324
  })), (0, _react2.jsx)(_index.Text, {
273
325
  variant: "listSubtitle"
274
- }, item.subtitle))));
326
+ }, item.subtitle))), item.isDefaultSelected ? (0, _react2.jsx)(_index.Box, {
327
+ isRow: true,
328
+ sx: {
329
+ border: '1px solid',
330
+ borderColor: 'neutral.80',
331
+ borderRadius: 5,
332
+ minHeight: 22,
333
+ justifyContent: 'center',
334
+ alignItems: 'center',
335
+ p: 'xs',
336
+ maxWidth: '50%'
337
+ }
338
+ }, (0, _react2.jsx)(_index.Icon, {
339
+ icon: _CheckIcon["default"],
340
+ color: "neutral.20",
341
+ size: 13,
342
+ sx: {
343
+ flexShrink: 0
344
+ }
345
+ }), (0, _react2.jsx)(_index.Text, {
346
+ sx: {
347
+ fontSize: 'sm',
348
+ pl: 'xs',
349
+ maxHeight: 32,
350
+ overflow: 'hidden'
351
+ }
352
+ }, "Added by Filter")) : (0, _react2.jsx)(_index.CheckboxField, {
353
+ controlProps: {
354
+ color: 'neutral.10',
355
+ 'aria-label': 'Select'
356
+ },
357
+ onChange: function onChange() {
358
+ return changeSelection(item.key);
359
+ },
360
+ isSelected: (0, _some["default"])(selectedItems).call(selectedItems, function (el) {
361
+ return el.key === item.key;
362
+ })
363
+ }));
275
364
  })), (0, _react2.jsx)(_CollapsiblePanel["default"], (0, _extends2["default"])({
276
- items: mockData,
365
+ items: selectedItems,
277
366
  onSelectionChange: changeSelection,
278
367
  selectedFilterCount: "1000+"
279
368
  }, args), function (item) {
@@ -283,7 +372,11 @@ var CollapsiblePanelWithBadge = function CollapsiblePanelWithBadge(args) {
283
372
  "data-id": item.key
284
373
  }, (0, _react2.jsx)(_index.CollapsiblePanelItem, {
285
374
  text: item.name,
286
- icon: _FilterIcon["default"]
375
+ icon: item.isDefaultSelected ? _CheckIcon["default"] : _CloseIcon["default"],
376
+ onPress: function onPress() {
377
+ return changeSelection(item.key);
378
+ },
379
+ isDefaultSelected: item.isDefaultSelected
287
380
  }));
288
381
  })))));
289
382
  };
@@ -2,25 +2,13 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
4
 
5
- var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
6
-
7
- var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
8
-
9
- var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
10
-
11
- var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
12
-
13
- var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
14
-
15
- var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
16
-
17
5
  var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
18
6
 
19
- var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
7
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
20
8
 
21
- var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
9
+ var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
22
10
 
23
- var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
11
+ var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
24
12
 
25
13
  _Object$defineProperty(exports, "__esModule", {
26
14
  value: true
@@ -30,8 +18,6 @@ exports["default"] = void 0;
30
18
 
31
19
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
32
20
 
33
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
34
-
35
21
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
36
22
 
37
23
  var _react = _interopRequireWildcard(require("react"));
@@ -58,10 +44,6 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "functi
58
44
 
59
45
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
60
46
 
61
- function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
62
-
63
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
64
-
65
47
  /**
66
48
  * The CollapsiblePanelContainer serves as a wrapper around a list and its associated trigger,
67
49
  * linking the list's open state with the trigger's press state and providing necessary context.
@@ -128,7 +110,7 @@ var CollapsiblePanelContainer = /*#__PURE__*/(0, _react.forwardRef)(function (pr
128
110
  "data-testid": "collapsible-panel-badge",
129
111
  margin: "auto",
130
112
  selectedFilterCount: selectedFilterCount
131
- })), state.isOpen && _objectSpread({}, children));
113
+ })), children);
132
114
  });
133
115
  CollapsiblePanelContainer.propTypes = {
134
116
  /** Amount of selected items indicator. */
@@ -74,17 +74,17 @@ test('updates aria label when button is clicked', function () {
74
74
 
75
75
  var button = _testWrapper.screen.getByTestId(collapsiblePanelButtonId);
76
76
 
77
- _userEvent["default"].click(button);
77
+ var container = _testWrapper.screen.getByTestId(testId);
78
78
 
79
- var collapsiblePanel = _testWrapper.screen.queryByTestId(collapsiblePanelId);
79
+ _userEvent["default"].click(button);
80
80
 
81
81
  expect(button).toHaveAttribute('aria-label', 'Close filter menu?');
82
- expect(collapsiblePanel).toBeInTheDocument();
82
+ expect(container).toHaveClass('is-open');
83
83
 
84
84
  _userEvent["default"].click(button);
85
85
 
86
86
  expect(button).toHaveAttribute('aria-label', 'Open filter menu?');
87
- expect(collapsiblePanel).not.toBeInTheDocument();
87
+ expect(container).not.toHaveClass('is-open');
88
88
  });
89
89
  test('shows children when isOpen is true', function () {
90
90
  getComponent({
@@ -100,13 +100,13 @@ test('should hide children when pressing the escape key', function () {
100
100
 
101
101
  var button = _testWrapper.screen.getByTestId(collapsiblePanelButtonId);
102
102
 
103
- _userEvent["default"].click(button);
103
+ var container = _testWrapper.screen.getByTestId(testId);
104
104
 
105
- var collapsiblePanel = _testWrapper.screen.queryByTestId(collapsiblePanelId);
105
+ _userEvent["default"].click(button);
106
106
 
107
- expect(collapsiblePanel).toBeInTheDocument();
107
+ expect(container).toHaveClass('is-open');
108
108
 
109
109
  _userEvent["default"].type(button, '{esc}');
110
110
 
111
- expect(collapsiblePanel).not.toBeInTheDocument();
111
+ expect(container).not.toHaveClass('is-open');
112
112
  });
@@ -47,8 +47,8 @@ var CollapsiblePanelItem = /*#__PURE__*/(0, _react.forwardRef)(function (props,
47
47
  variant: "collapsiblePanellItem"
48
48
  }, text), iconElement && (isDefaultSelected ? iconElement : (0, _react2.jsx)(_index.IconButton, {
49
49
  sx: {
50
- width: 13,
51
- height: 13,
50
+ width: 20,
51
+ height: 20,
52
52
  alignSelf: 'auto',
53
53
  '& path': {
54
54
  fill: 'inherit'
@@ -38,6 +38,8 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-c
38
38
 
39
39
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
40
40
 
41
+ var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
42
+
41
43
  var _react = _interopRequireWildcard(require("react"));
42
44
 
43
45
  var _propTypes = _interopRequireDefault(require("prop-types"));
@@ -78,7 +80,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
78
80
 
79
81
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
80
82
 
81
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
83
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context2, _context3; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context2 = ownKeys(Object(source), !0)).call(_context2, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context3 = ownKeys(Object(source))).call(_context3, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
82
84
 
83
85
  /**
84
86
  * Combines an input with a listbox for a filterable dropdown list.
@@ -103,13 +105,14 @@ var ComboBoxField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
103
105
  onFocusChange = props.onFocusChange,
104
106
  onKeyDown = props.onKeyDown,
105
107
  onKeyUp = props.onKeyUp,
108
+ hasAddOption = props.hasAddOption,
106
109
  hasCustomValue = props.hasCustomValue,
107
110
  hasNoEmptySelection = props.hasNoEmptySelection,
108
111
  defaultSelectedKey = props.defaultSelectedKey,
109
112
  selectedKey = props.selectedKey,
110
113
  onSelectionChange = props.onSelectionChange,
111
- defaultItems = props.defaultItems,
112
- items = props.items,
114
+ initialDefaultItems = props.defaultItems,
115
+ initialItems = props.items,
113
116
  onOpenChange = props.onOpenChange,
114
117
  loadingState = props.loadingState,
115
118
  onLoadMore = props.onLoadMore,
@@ -137,13 +140,11 @@ var ComboBoxField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
137
140
  onFocusChange: onFocusChange,
138
141
  onKeyDown: onKeyDown,
139
142
  onKeyUp: onKeyUp,
140
- allowsCustomValue: hasCustomValue,
143
+ allowsCustomValue: hasAddOption || hasCustomValue,
141
144
  disallowEmptySelection: hasNoEmptySelection,
142
145
  defaultSelectedKey: defaultSelectedKey,
143
146
  selectedKey: selectedKey,
144
147
  onSelectionChange: onSelectionChange,
145
- defaultItems: defaultItems,
146
- items: items,
147
148
  onOpenChange: onOpenChange,
148
149
  loadingState: loadingState,
149
150
  onLoadMore: onLoadMore,
@@ -169,18 +170,47 @@ var ComboBoxField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
169
170
 
170
171
  var onSelectionChangeHandler = function onSelectionChangeHandler(key) {
171
172
  var newVal = key || selectedKey || '';
173
+
174
+ if (hasAddOption && selectedKey !== inputValue) {
175
+ newVal = inputValue;
176
+ }
177
+
172
178
  if (onSelectionChange) onSelectionChange(newVal);
173
179
  };
174
180
 
181
+ var shouldShowAddOption = hasAddOption && inputValue && selectedKey !== inputValue;
182
+ var addOption = "ADD: ".concat(inputValue);
183
+
184
+ var getItemsArr = function getItemsArr(initialArr) {
185
+ if (initialArr && shouldShowAddOption) {
186
+ var _context;
187
+
188
+ return (0, _concat["default"])(_context = []).call(_context, initialArr, [{
189
+ name: addOption,
190
+ key: addOption
191
+ }]);
192
+ }
193
+
194
+ return initialArr;
195
+ };
196
+
197
+ var defaultItems = getItemsArr(initialDefaultItems);
198
+ var items = getItemsArr(initialItems);
199
+
175
200
  var _useFilter = (0, _i18n.useFilter)({
176
201
  sensitivity: 'base'
177
202
  }),
178
203
  contains = _useFilter.contains;
179
204
 
180
205
  var state = (0, _combobox2.useComboBoxState)(_objectSpread(_objectSpread({}, comboBoxOptions), {}, {
181
- onSelectionChange: hasCustomValue ? onSelectionChangeHandler : onSelectionChange,
206
+ defaultItems: defaultItems,
207
+ items: items,
208
+ onSelectionChange: hasAddOption || hasCustomValue ? onSelectionChangeHandler : onSelectionChange,
182
209
  defaultFilter: typeof defaultFilter !== 'undefined' ? defaultFilter : contains
183
210
  }));
211
+ (0, _react.useEffect)(function () {
212
+ if (shouldShowAddOption) state.selectionManager.setFocusedKey(addOption);
213
+ }, [shouldShowAddOption, state, addOption]);
184
214
 
185
215
  var _useComboBox = (0, _combobox.useComboBox)(_objectSpread(_objectSpread({}, comboBoxOptions), {}, {
186
216
  buttonRef: buttonRef,
@@ -286,6 +316,9 @@ var ComboBoxField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
286
316
  }, listbox));
287
317
  });
288
318
  ComboBoxField.propTypes = {
319
+ /* Whether or not adding new options to the list is enabled. */
320
+ hasAddOption: _propTypes["default"].bool,
321
+
289
322
  /** Whether the ComboBox allows a non-item matching input value to be set. */
290
323
  hasCustomValue: _propTypes["default"].bool,
291
324
 
@@ -14,7 +14,11 @@ _Object$defineProperty(exports, "__esModule", {
14
14
  value: true
15
15
  });
16
16
 
17
- exports["default"] = exports.WithoutStatusIndicator = exports.WithSections = exports.WithCustomInputValue = exports.WithCustomHeight = exports.Required = exports.HelperText = exports.FocusMenuTrigger = exports.DisabledKeys = exports.Disabled = exports.Default = exports.CustomDefaultFilter = exports.ControlledWithCustomValue = exports.ControlledSelection = exports.ControlledMenu = exports.ControlledInput = exports.ControlledFiltering = exports.AsyncLoading = exports.AllowCustomValue = void 0;
17
+ exports["default"] = exports.WithoutStatusIndicator = exports.WithSections = exports.WithCustomInputValue = exports.WithCustomHeight = exports.Required = exports.HelperText = exports.FocusMenuTrigger = exports.DisabledKeys = exports.Disabled = exports.Default = exports.CustomDefaultFilter = exports.ControlledWithCustomValue = exports.ControlledWithAddOption = exports.ControlledSelection = exports.ControlledMenu = exports.ControlledInput = exports.ControlledFiltering = exports.AsyncLoading = exports.AllowCustomValue = void 0;
18
+
19
+ var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
20
+
21
+ var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
18
22
 
19
23
  var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
20
24
 
@@ -562,4 +566,56 @@ var CustomDefaultFilter = function CustomDefaultFilter() {
562
566
  }));
563
567
  };
564
568
 
565
- exports.CustomDefaultFilter = CustomDefaultFilter;
569
+ exports.CustomDefaultFilter = CustomDefaultFilter;
570
+
571
+ var ControlledWithAddOption = function ControlledWithAddOption() {
572
+ var _useState11 = (0, _react.useState)(items),
573
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
574
+ options = _useState12[0],
575
+ setOptions = _useState12[1];
576
+
577
+ var _useState13 = (0, _react.useState)(''),
578
+ _useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
579
+ inputValue = _useState14[0],
580
+ setInputValue = _useState14[1];
581
+
582
+ var _useState15 = (0, _react.useState)(''),
583
+ _useState16 = (0, _slicedToArray2["default"])(_useState15, 2),
584
+ selectedKey = _useState16[0],
585
+ setSelectedKey = _useState16[1];
586
+
587
+ var onSelectionChange = function onSelectionChange(key) {
588
+ // Add new option to options array
589
+ if (key && !(0, _find["default"])(options).call(options, function (_ref2) {
590
+ var name = _ref2.name;
591
+ return name === key;
592
+ })) {
593
+ var _context2;
594
+
595
+ setOptions((0, _concat["default"])(_context2 = []).call(_context2, options, [{
596
+ key: key,
597
+ name: key
598
+ }]));
599
+ }
600
+
601
+ setInputValue(key);
602
+ setSelectedKey(key);
603
+ };
604
+
605
+ return (0, _react2.jsx)(_index.OverlayProvider, null, (0, _react2.jsx)(_ComboBoxField["default"], (0, _extends2["default"])({
606
+ label: "Example label",
607
+ defaultItems: options
608
+ }, actions, {
609
+ inputValue: inputValue,
610
+ selectedKey: selectedKey,
611
+ onInputChange: setInputValue,
612
+ onSelectionChange: onSelectionChange,
613
+ hasAddOption: true
614
+ }), function (item) {
615
+ return (0, _react2.jsx)(_index.Item, {
616
+ key: item.name
617
+ }, item.name);
618
+ }));
619
+ };
620
+
621
+ exports.ControlledWithAddOption = ControlledWithAddOption;