@pingux/astro 1.41.0-alpha.1 → 1.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/NOTICE.html +4707 -0
  3. package/lib/Patterns/AttributeMappingDisplayViewPattern.stories.hidden.js +138 -0
  4. package/lib/Patterns/AttributeMappingEditViewPattern.stories.hidden.js +145 -0
  5. package/lib/Patterns/ListAndPanelPattern.stories.hidden.js +381 -0
  6. package/lib/Patterns/MessagesPattern.stories.hidden.js +69 -0
  7. package/lib/Patterns/SaveBarPattern.stories.hidden.js +80 -0
  8. package/lib/Patterns/UnsavedChangesPattern.stories.hidden.js +106 -0
  9. package/lib/cjs/Patterns/AttributeMappingDisplayViewPattern.stories.hidden.js +158 -0
  10. package/lib/cjs/Patterns/AttributeMappingEditViewPattern.stories.hidden.js +167 -0
  11. package/lib/cjs/Patterns/ListAndPanelPattern.stories.hidden.js +418 -0
  12. package/lib/cjs/Patterns/MessagesPattern.stories.hidden.js +99 -0
  13. package/lib/cjs/Patterns/SaveBarPattern.stories.hidden.js +109 -0
  14. package/lib/cjs/Patterns/UnsavedChangesPattern.stories.hidden.js +136 -0
  15. package/lib/cjs/components/Bracket/Bracket.stories.js +1 -3
  16. package/lib/cjs/components/Breadcrumbs/Breadcrumbs.js +1 -1
  17. package/lib/cjs/components/Breadcrumbs/Breadcrumbs.stories.js +2 -18
  18. package/lib/cjs/components/Card/Card.js +117 -2
  19. package/lib/cjs/components/Card/Card.stories.js +45 -17
  20. package/lib/cjs/components/Card/Card.test.js +50 -0
  21. package/lib/cjs/components/ComboBoxField/ComboBoxField.stories.js +13 -1
  22. package/lib/cjs/components/ComboBoxField/ComboBoxField.test.js +75 -4
  23. package/lib/cjs/components/DataTable/DataTable.js +56 -12
  24. package/lib/cjs/components/DataTable/DataTable.stories.js +84 -17
  25. package/lib/cjs/components/DataTable/DataTable.test.js +38 -6
  26. package/lib/cjs/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.js +1 -1
  27. package/lib/cjs/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.stories.js +18 -3
  28. package/lib/cjs/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.test.js +19 -5
  29. package/lib/cjs/components/Image/Image.stories.js +2 -2
  30. package/lib/cjs/components/ListBox/ListBoxSection.js +8 -1
  31. package/lib/cjs/components/ListView/ListView.stories.js +6 -4
  32. package/lib/cjs/components/OverlayPanel/OverlayPanel.stories.js +2 -1
  33. package/lib/cjs/components/SelectField/SelectField.stories.js +13 -1
  34. package/lib/cjs/components/SelectField/SelectField.test.js +75 -0
  35. package/lib/cjs/recipes/ConditionalFilter.stories.js +0 -1
  36. package/lib/cjs/recipes/ScrollableListView.stories.js +3 -2
  37. package/lib/cjs/recipes/TrialExperienceIndustryButtons.stories.js +4 -8
  38. package/lib/cjs/styles/variants/boxes.js +6 -6
  39. package/lib/cjs/utils/devUtils/constants/text.js +11 -0
  40. package/lib/components/Bracket/Bracket.stories.js +1 -3
  41. package/lib/components/Breadcrumbs/Breadcrumbs.js +1 -1
  42. package/lib/components/Breadcrumbs/Breadcrumbs.stories.js +0 -13
  43. package/lib/components/Card/Card.js +110 -2
  44. package/lib/components/Card/Card.stories.js +35 -10
  45. package/lib/components/Card/Card.test.js +36 -0
  46. package/lib/components/ComboBoxField/ComboBoxField.stories.js +13 -1
  47. package/lib/components/ComboBoxField/ComboBoxField.test.js +70 -5
  48. package/lib/components/DataTable/DataTable.js +56 -12
  49. package/lib/components/DataTable/DataTable.stories.js +75 -17
  50. package/lib/components/DataTable/DataTable.test.js +36 -6
  51. package/lib/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.js +1 -1
  52. package/lib/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.stories.js +18 -3
  53. package/lib/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.test.js +16 -5
  54. package/lib/components/Image/Image.stories.js +2 -2
  55. package/lib/components/ListBox/ListBoxSection.js +7 -2
  56. package/lib/components/ListView/ListView.stories.js +6 -4
  57. package/lib/components/OverlayPanel/OverlayPanel.stories.js +2 -1
  58. package/lib/components/SelectField/SelectField.stories.js +13 -1
  59. package/lib/components/SelectField/SelectField.test.js +68 -1
  60. package/lib/recipes/ConditionalFilter.stories.js +0 -1
  61. package/lib/recipes/ScrollableListView.stories.js +3 -2
  62. package/lib/recipes/TrialExperienceIndustryButtons.stories.js +4 -8
  63. package/lib/styles/variants/boxes.js +6 -6
  64. package/lib/utils/devUtils/constants/text.js +1 -0
  65. package/package.json +1 -1
@@ -97,10 +97,29 @@ var ROW_HEIGHTS = {
97
97
  }
98
98
  };
99
99
  /**
100
- * DataTable component using react aria Spectrum TableView
101
- * Primarily utilizes [TableView](https://react-spectrum.adobe.com/react-spectrum/TableView.html)
102
- * Cross platform state management react hook for DataTable
103
- * Primarily utilizes [useTableState](https://react-spectrum.adobe.com/react-stately/useTableState.html)
100
+ * Inspired by [TableView](https://react-spectrum.adobe.com/react-spectrum/TableView.html)
101
+ * from React Spectrum and [useTableState](https://react-spectrum.adobe.com/react-stately/useTableState.html)
102
+ * from React Stately.
103
+ *
104
+ * DataTable is a complex collection component that is built from many child elements including
105
+ * columns, rows and cells. Columns are defined within DataTableHeader element via DataTableColumn
106
+ * and rows are defined within a DataTableBody element via DataTableRow. Rows contain DataTableCell
107
+ * elements that correspond to each column.
108
+ *
109
+ * [TableHeader](https://react-spectrum.adobe.com/react-aria/useTable.html#:~:text=defined%20using%20the-,TableHeader,-%2C%20Column%2C)
110
+ * uses the alias DataTableHeader.
111
+ *
112
+ * [Column](https://react-spectrum.adobe.com/react-aria/useTable.html#:~:text=the%20TableHeader%2C-,Column,-%2C%20TableBody%2C)
113
+ * uses the alias DataTableColumn.
114
+ *
115
+ * [Cell](https://react-spectrum.adobe.com/react-aria/useTable.html#:~:text=Row%2C%20and-,Cell,-components%2C%20which%20support)
116
+ * uses the alias DataTableCell.
117
+ *
118
+ * [Row](https://react-spectrum.adobe.com/react-aria/useTable.html#:~:text=%2C%20TableBody%2C-,Row,-%2C%20and%20Cell%20components)
119
+ * uses the alias DataTableCell.
120
+ *
121
+ * [TableBody](https://react-spectrum.adobe.com/react-aria/useTable.html#:~:text=%2C%20Column%2C-,TableBody,-%2C%20Row%2C%20and)
122
+ * uses the alias DataTableBody.
104
123
  */
105
124
 
106
125
  var DataTable = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
@@ -256,12 +275,30 @@ var DataTable = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
256
275
  });
257
276
  DataTable.propTypes = {
258
277
  /**
259
- * Sets the amount of vertical padding within each cell.
260
- * density: 'compact' | 'regular' | 'spacious'
261
- * @default 'regular'
262
- */
278
+ * Sets the amount of vertical padding within each cell.
279
+ * density: 'compact' | 'regular' | 'spacious'
280
+ * @default 'regular'
281
+ */
263
282
  density: _propTypes["default"].string,
264
283
 
284
+ /** Sets the height of table. */
285
+ height: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
286
+
287
+ /** Determine if the header should be hidden. */
288
+ hasHiddenHeader: _propTypes["default"].bool,
289
+
290
+ /** Bool that determines if the items are sortable. */
291
+ isSortable: _propTypes["default"].bool,
292
+
293
+ /** The list of DataTable items. */
294
+ items: _propTypes["default"].arrayOf(_propTypes["default"].shape({})),
295
+
296
+ /** Reflects current loading state. */
297
+ loadingState: _propTypes["default"].oneOf(['error', 'filtering', 'idle', 'loading', 'loadingMore', 'sorting']),
298
+
299
+ /** Handler that is called when a user performs an action on a row. */
300
+ onAction: _propTypes["default"].func,
301
+
265
302
  /**
266
303
  * Sets the overflow behavior for the cell contents.
267
304
  * overflowMode: 'wrap' | 'truncate'
@@ -269,10 +306,17 @@ DataTable.propTypes = {
269
306
  */
270
307
  overflowMode: _propTypes["default"].string,
271
308
 
272
- /** Handler that is called when a user performs an action on a row. */
273
- onAction: _propTypes["default"].func,
274
- width: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
275
- height: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number])
309
+ /** Callback function that fires when more data should be loaded on demand as user scrolls. */
310
+ onLoadMore: _propTypes["default"].func,
311
+
312
+ /** Callback function that fires when sortable column header is pressed. */
313
+ onSortChange: _propTypes["default"].func,
314
+
315
+ /** Defines the current column key to sort by and the sort direction. */
316
+ sortDescriptor: _propTypes["default"].oneOf(['ascending', 'descending']),
317
+
318
+ /** Sets the width of table. */
319
+ width: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number])
276
320
  };
277
321
  DataTable.defaultProps = {
278
322
  width: '100%',
@@ -1,5 +1,19 @@
1
1
  "use strict";
2
2
 
3
+ var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
4
+
5
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
6
+
7
+ var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
8
+
9
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
10
+
11
+ var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
12
+
13
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
14
+
15
+ var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
16
+
3
17
  var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
4
18
 
5
19
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
@@ -12,6 +26,10 @@ exports["default"] = exports.Default = exports.CustomContent = void 0;
12
26
 
13
27
  var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
14
28
 
29
+ var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));
30
+
31
+ var _setTimeout2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set-timeout"));
32
+
15
33
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
16
34
 
17
35
  var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
@@ -30,6 +48,8 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/
30
48
 
31
49
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
32
50
 
51
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
52
+
33
53
  var _react = _interopRequireDefault(require("react"));
34
54
 
35
55
  var _data = require("@react-stately/data");
@@ -42,10 +62,16 @@ var _faker = require("@faker-js/faker");
42
62
 
43
63
  var _isChromatic = _interopRequireDefault(require("chromatic/isChromatic"));
44
64
 
65
+ var _ariaAttributes = require("../../utils/devUtils/props/ariaAttributes");
66
+
45
67
  var _index = require("../../index");
46
68
 
47
69
  var _react2 = require("@emotion/react");
48
70
 
71
+ 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; }
72
+
73
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context8, _context9; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context8 = ownKeys(Object(source), !0)).call(_context8, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context9 = ownKeys(Object(source))).call(_context9, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
74
+
49
75
  var _default = {
50
76
  title: 'Components/DataTable',
51
77
  component: _index.DataTable,
@@ -56,34 +82,68 @@ var _default = {
56
82
  }
57
83
  }
58
84
  },
59
- argTypes: {
85
+ argTypes: _objectSpread({
60
86
  density: {
61
87
  control: {
62
- type: 'radio',
63
- options: ['compact', 'regular', 'spacious']
88
+ disable: true
64
89
  },
65
90
  defaultValue: 'spacious'
66
91
  },
67
92
  overflowMode: {
68
93
  control: {
69
- type: 'radio',
70
- options: ['truncate', 'wrap']
94
+ disable: true
71
95
  },
72
96
  defaultValue: 'truncate'
73
97
  },
74
98
  width: {
75
- defaultValue: '100%',
99
+ description: 'Sets the width of the data table.',
76
100
  control: {
77
- type: 'text'
101
+ disable: true
78
102
  }
79
103
  },
80
104
  height: {
81
- defaultValue: 565,
105
+ description: 'Sets the height of the data table.',
106
+ control: {
107
+ disable: true
108
+ }
109
+ },
110
+ sortDescriptor: {
111
+ description: 'Defines the current column key to sort by and the sort direction.',
112
+ control: {
113
+ disable: true
114
+ }
115
+ },
116
+ onSortChange: {
117
+ description: 'Callback function that fires when sortable column header is pressed.'
118
+ },
119
+ allowsSorting: {
120
+ description: 'Determine if the column supports sorting.',
121
+ control: {
122
+ disable: true
123
+ }
124
+ },
125
+ hideHeader: {
126
+ description: 'Determine if the header should be hidden.',
127
+ control: {
128
+ disable: true
129
+ }
130
+ },
131
+ loadingState: {
132
+ description: 'Reflects current loading state.',
82
133
  control: {
83
- type: 'number'
134
+ disable: true
84
135
  }
136
+ },
137
+ onLoadMore: {
138
+ description: 'Callback function that fires when more data should be loaded on demand as user scrolls.'
139
+ },
140
+ items: {
141
+ control: {
142
+ disable: true
143
+ },
144
+ description: 'The list of DataTable items.'
85
145
  }
86
- }
146
+ }, _ariaAttributes.ariaAttributeBaseArgTypes)
87
147
  };
88
148
  exports["default"] = _default;
89
149
 
@@ -120,7 +180,8 @@ var Default = function Default(args) {
120
180
  continent: 'Europe'
121
181
  }];
122
182
  return (0, _react2.jsx)(_index.DataTable, (0, _extends2["default"])({}, args, {
123
- "aria-label": "Static table"
183
+ "aria-label": "Static table",
184
+ height: "100%"
124
185
  }), (0, _react2.jsx)(_index.DataTableHeader, {
125
186
  columns: columns
126
187
  }, function (column) {
@@ -170,12 +231,17 @@ var CustomContent = function CustomContent(args) {
170
231
  key: 'menu',
171
232
  isSortable: false
172
233
  }];
234
+
235
+ var random = function random(items) {
236
+ return items[Math.floor(Math.random() * items.length)];
237
+ };
238
+
173
239
  var list = (0, _data.useAsyncList)({
174
240
  load: function load(_ref) {
175
241
  return (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
176
242
  var _context, _context2, _context3;
177
243
 
178
- var signal, cursor, res, json, random, fakeData, tableData;
244
+ var signal, cursor, res, json, fakeData, tableData;
179
245
  return _regenerator["default"].wrap(function _callee$(_context5) {
180
246
  while (1) {
181
247
  switch (_context5.prev = _context5.next) {
@@ -199,11 +265,12 @@ var CustomContent = function CustomContent(args) {
199
265
 
200
266
  case 7:
201
267
  json = _context5.sent;
268
+ _context5.next = 10;
269
+ return new _promise["default"](function (resolve) {
270
+ return (0, _setTimeout2["default"])(resolve, cursor ? 2000 : 3000);
271
+ });
202
272
 
203
- random = function random(items) {
204
- return items[Math.floor(Math.random() * items.length)];
205
- };
206
-
273
+ case 10:
207
274
  fakeData = (0, _map["default"])(_context = (0, _concat["default"])(_context2 = []).call(_context2, (0, _keys["default"])(_context3 = Array(json.results.length)).call(_context3))).call(_context, function (key) {
208
275
  var _context4;
209
276
 
@@ -233,7 +300,7 @@ var CustomContent = function CustomContent(args) {
233
300
  cursor: json.next
234
301
  });
235
302
 
236
- case 12:
303
+ case 13:
237
304
  case "end":
238
305
  return _context5.stop();
239
306
  }
@@ -936,7 +936,7 @@ describe('Sortable DataTable with useAsyncList', function () {
936
936
  var sortableDataTable = function sortableDataTable(_ref16) {
937
937
  var result = _ref16.result;
938
938
  return (0, _react2.render)((0, _react3.jsx)(_DataTable["default"], (0, _extends2["default"])({}, defaultProps, {
939
- sortDescriptor: result.current.sortDescriptor,
939
+ sortDescriptor: result.current.sortDescriptor.direction,
940
940
  onSortChange: (0, _sort2["default"])(result.current)
941
941
  }), (0, _react3.jsx)(_index.DataTableHeader, {
942
942
  columns: columns
@@ -1290,16 +1290,48 @@ describe('Sortable DataTable with useAsyncList', function () {
1290
1290
  })));
1291
1291
 
1292
1292
  case 31:
1293
- expect(result.current.items[0].country).toBe('USA');
1294
- expect(result.current.items[1].country).toBe('France');
1295
- expect(result.current.items[2].country).toBe('China');
1296
- expect(result.current.items[3].country).toBe('Canada');
1293
+ expect(result.current.items[0].country).toBe('Canada');
1294
+ expect(result.current.items[1].country).toBe('China');
1295
+ expect(result.current.items[2].country).toBe('France');
1296
+ expect(result.current.items[3].country).toBe('USA');
1297
+ expect(result.current.items[0].continent).toBe('North America');
1298
+ expect(result.current.items[1].continent).toBe('Asia');
1299
+ expect(result.current.items[2].continent).toBe('Europe');
1300
+ expect(result.current.items[3].continent).toBe('North America');
1301
+ expect(result.current.items[0].population).toBe(37000000);
1302
+ expect(result.current.items[1].population).toBe(1398000000);
1303
+ expect(result.current.items[2].population).toBe(67000000);
1304
+ expect(result.current.items[3].population).toBe(320000000);
1297
1305
 
1298
- case 35:
1306
+ case 43:
1299
1307
  case "end":
1300
1308
  return _context34.stop();
1301
1309
  }
1302
1310
  }
1303
1311
  }, _callee30);
1304
1312
  })));
1313
+ });
1314
+ describe('Empty DataTable', function () {
1315
+ var staticDataTable = function staticDataTable() {
1316
+ return (0, _react2.render)((0, _react3.jsx)(_DataTable["default"], {
1317
+ "aria-label": "Table"
1318
+ }, (0, _react3.jsx)(_index.DataTableHeader, {
1319
+ columns: columns
1320
+ }, function (column) {
1321
+ return (0, _react3.jsx)(_index.DataTableColumn, {
1322
+ align: "center"
1323
+ }, column.name);
1324
+ }), (0, _react3.jsx)(_index.DataTableBody, null, [])));
1325
+ };
1326
+
1327
+ it('should display header row only when there are no items', function () {
1328
+ staticDataTable();
1329
+
1330
+ var staticTable = _react2.screen.getByRole('grid');
1331
+
1332
+ var tRows = (0, _react2.within)(staticTable).getByRole('row');
1333
+ expect(staticTable).toBeInTheDocument();
1334
+ expect(staticTable).toBeVisible();
1335
+ expect(tRows).toBeInTheDocument();
1336
+ });
1305
1337
  });
@@ -324,7 +324,7 @@ var EnvironmentBreadcrumb = /*#__PURE__*/(0, _react.forwardRef)(function (props,
324
324
  iconProps: {
325
325
  color: 'neutral.70',
326
326
  mx: 5,
327
- size: 16
327
+ size: 'xs'
328
328
  }
329
329
  }, others), (0, _react2.jsx)(_index.Item, {
330
330
  key: "name",
@@ -108,6 +108,7 @@ var defaultEnvironments = [{
108
108
  }];
109
109
  var environmentsWithSections = [{
110
110
  name: 'Recent',
111
+ key: 'Recent',
111
112
  options: [{
112
113
  name: 'Default'
113
114
  }, {
@@ -117,6 +118,7 @@ var environmentsWithSections = [{
117
118
  }]
118
119
  }, {
119
120
  name: 'All',
121
+ key: 'All',
120
122
  options: [{
121
123
  name: 'Consumer Banking Prod'
122
124
  }, {
@@ -133,6 +135,17 @@ var environmentsWithSections = [{
133
135
  }, {
134
136
  name: 'Mine'
135
137
  }]
138
+ }, {
139
+ name: null,
140
+ key: 'Other',
141
+ options: [{
142
+ name: 'Default'
143
+ }, {
144
+ name: 'Auth test',
145
+ isSandbox: true
146
+ }, {
147
+ name: 'Mike’s Workforce'
148
+ }]
136
149
  }];
137
150
 
138
151
  var Default = function Default(args) {
@@ -270,12 +283,14 @@ var WithSections = function WithSections() {
270
283
  items: environments,
271
284
  name: "Globochem",
272
285
  selectedItem: envNode,
273
- onSelectionChange: handleEnvPress
286
+ onSelectionChange: handleEnvPress,
287
+ isDefaultOpen: true
274
288
  }, function (_ref3) {
275
289
  var sectionName = _ref3.name,
276
- sectionOptions = _ref3.options;
290
+ sectionOptions = _ref3.options,
291
+ sectionKey = _ref3.key;
277
292
  return (0, _react2.jsx)(_index.Section, {
278
- key: sectionName,
293
+ key: sectionKey,
279
294
  title: sectionName,
280
295
  items: sectionOptions
281
296
  }, function (_ref4) {
@@ -63,6 +63,7 @@ var items = [{
63
63
  }];
64
64
  var itemsWithSections = [{
65
65
  name: 'Heading 1',
66
+ key: 'Heading 1',
66
67
  options: [{
67
68
  name: 'Foo'
68
69
  }, {
@@ -72,12 +73,13 @@ var itemsWithSections = [{
72
73
  }]
73
74
  }, {
74
75
  name: 'Heading 2',
76
+ key: 'Heading 2',
75
77
  options: [{
76
- name: 'Foo'
78
+ name: 'Foo1'
77
79
  }, {
78
- name: 'Zod'
80
+ name: 'Bar1'
79
81
  }, {
80
- name: 'Zay'
82
+ name: 'Baz1'
81
83
  }]
82
84
  }];
83
85
  var defaultProps = {
@@ -118,7 +120,8 @@ var getSectionsComponent = function getSectionsComponent() {
118
120
  return (0, _testWrapper.render)((0, _react2.jsx)(_index.OverlayProvider, null, (0, _react2.jsx)(_index.EnvironmentBreadcrumb, (0, _extends2["default"])({}, defaultWithSectionsProps, props), function (section) {
119
121
  return (// eslint-disable-next-line testing-library/no-node-access
120
122
  (0, _react2.jsx)(_collections.Section, {
121
- key: section.name,
123
+ key: section.key,
124
+ name: section.name,
122
125
  title: section.name,
123
126
  items: section.options
124
127
  }, function (item) {
@@ -241,6 +244,17 @@ test('should render items with sections passed in props', function () {
241
244
 
242
245
  _userEvent["default"].click(_testWrapper.screen.getByText(testSelectedItem));
243
246
 
247
+ expect(_testWrapper.screen.getAllByRole('group')).toHaveLength(2);
248
+ expect(_testWrapper.screen.queryByRole('listbox')).toBeInTheDocument();
249
+ expect(_testWrapper.screen.queryAllByRole('option')).toHaveLength(6);
250
+ });
251
+ test('should render the separators', function () {
252
+ getSectionsComponent();
253
+
254
+ _userEvent["default"].click(_testWrapper.screen.getByText(testSelectedItem));
255
+
256
+ expect(_testWrapper.screen.queryAllByRole('separator')).toHaveLength(3);
257
+
244
258
  var groups = _testWrapper.screen.getAllByRole('group');
245
259
 
246
260
  expect(groups).toHaveLength(2);
@@ -409,7 +423,7 @@ test('should hide section title if no search results within it', function () {
409
423
  _userEvent["default"].click(_testWrapper.screen.getByText(testSelectedItem)); // Search for option exclusive to only one section
410
424
 
411
425
 
412
- _userEvent["default"].type(_testWrapper.screen.getByRole('searchbox'), 'Zod'); // 'Heading 1' should not be rendered, but 'Heading 2' should be
426
+ _userEvent["default"].type(_testWrapper.screen.getByRole('searchbox'), 'Bar1'); // 'Heading 1' should not be rendered, but 'Heading 2' should be
413
427
 
414
428
 
415
429
  expect(_testWrapper.screen.queryByText(itemsWithSections[0].name)).not.toBeInTheDocument();
@@ -125,7 +125,7 @@ exports.FallbackImage = FallbackImage;
125
125
 
126
126
  var WithSkeletonLoadSuccess = function WithSkeletonLoadSuccess(_ref2) {
127
127
  var useLocalSrc = _ref2.useLocalSrc;
128
- var imageSrc = useLocalSrc ? _images.pingImg : 'https://deelay.me/3000/https://picsum.photos/150/150';
128
+ var imageSrc = useLocalSrc ? _images.pingImg : 'https://app.requestly.io/delay/3000/https://picsum.photos/150/150';
129
129
  return (0, _react2.jsx)(_["default"], {
130
130
  src: imageSrc,
131
131
  sx: {
@@ -143,7 +143,7 @@ WithSkeletonLoadSuccess.args = {
143
143
 
144
144
  var WithSkeletonLoadTimeout = function WithSkeletonLoadTimeout() {
145
145
  return (0, _react2.jsx)(_["default"], {
146
- src: "https://deelay.me/7000/https://picsum.photos/150/150",
146
+ src: "https://app.requestly.io/delay/7000/https://picsum.photos/150/150",
147
147
  sx: {
148
148
  width: '150px',
149
149
  height: '150px'
@@ -28,8 +28,12 @@ var _i18n = require("@react-aria/i18n");
28
28
 
29
29
  var _virtualizer = require("@react-aria/virtualizer");
30
30
 
31
+ var _ListBoxContext = require("./ListBoxContext");
32
+
31
33
  var _Box = _interopRequireDefault(require("../Box"));
32
34
 
35
+ var _Separator = _interopRequireDefault(require("../Separator"));
36
+
33
37
  var _react2 = require("@emotion/react");
34
38
 
35
39
  function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -58,6 +62,7 @@ var ListBoxSection = function ListBoxSection(props) {
58
62
  var _useLocale = (0, _i18n.useLocale)(),
59
63
  direction = _useLocale.direction;
60
64
 
65
+ var state = (0, _react.useContext)(_ListBoxContext.ListBoxContext);
61
66
  return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({
62
67
  as: "ul",
63
68
  ref: headerRef,
@@ -66,7 +71,9 @@ var ListBoxSection = function ListBoxSection(props) {
66
71
  sx: {
67
72
  paddingInlineStart: '0px'
68
73
  }
69
- }, groupProps), item.rendered && (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({}, headingProps, {
74
+ }, groupProps), item.key !== state.collection.getFirstKey() && (0, _react2.jsx)(_Separator["default"], {
75
+ mt: "0px"
76
+ }), item.rendered && (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({}, headingProps, {
70
77
  variant: "boxes.listBoxSectionTitle"
71
78
  }), item.rendered)), (0, _react2.jsx)(_Box["default"], {
72
79
  style: (0, _virtualizer.layoutInfoToStyle)(reusableView.layoutInfo, direction)
@@ -572,14 +572,15 @@ var ListElement = function ListElement(_ref) {
572
572
  }, (0, _react2.jsx)(_Icon["default"], {
573
573
  icon: _FormSelectIcon["default"],
574
574
  mr: "sm",
575
- color: "text.primary",
575
+ color: "accent.40",
576
576
  size: "md"
577
577
  }), (0, _react2.jsx)(_Text["default"], {
578
578
  variant: "itemTitle",
579
579
  alignSelf: "center"
580
580
  }, item.name)), (0, _react2.jsx)(_Box["default"], {
581
581
  isRow: true,
582
- alignSelf: "center"
582
+ alignSelf: "center",
583
+ gap: "sm"
583
584
  }, (0, _react2.jsx)(_IconButton["default"], {
584
585
  "aria-label": "create-icon"
585
586
  }, (0, _react2.jsx)(_Icon["default"], {
@@ -611,14 +612,15 @@ var Default = function Default(_ref2) {
611
612
  }, (0, _react2.jsx)(_Icon["default"], {
612
613
  icon: _FormSelectIcon["default"],
613
614
  mr: "sm",
614
- color: "text.primary",
615
+ color: "accent.40",
615
616
  size: "md"
616
617
  }), (0, _react2.jsx)(_Text["default"], {
617
618
  variant: "itemTitle",
618
619
  alignSelf: "center"
619
620
  }, item.name)), (0, _react2.jsx)(_Box["default"], {
620
621
  isRow: true,
621
- alignSelf: "center"
622
+ alignSelf: "center",
623
+ gap: "sm"
622
624
  }, (0, _react2.jsx)(_IconButton["default"], {
623
625
  "aria-label": "create-icon"
624
626
  }, (0, _react2.jsx)(_Icon["default"], {
@@ -207,7 +207,8 @@ var InnerPanel = function InnerPanel(_ref2) {
207
207
  }, "Open Panel"), outer), messagesOpen && (0, _react2.jsx)(_index.Messages, {
208
208
  sx: {
209
209
  zIndex: 11
210
- }
210
+ },
211
+ onClose: toggleMessagesOpen
211
212
  }, (0, _react2.jsx)(_collections.Item, {
212
213
  key: "message2",
213
214
  status: "success"
@@ -122,6 +122,7 @@ var animals = [{
122
122
  }];
123
123
  var withSection = [{
124
124
  name: 'Animals',
125
+ key: 'Animals',
125
126
  children: [{
126
127
  name: 'Aardvark'
127
128
  }, {
@@ -131,6 +132,7 @@ var withSection = [{
131
132
  }]
132
133
  }, {
133
134
  name: 'People',
135
+ key: 'People',
134
136
  children: [{
135
137
  name: 'Michael'
136
138
  }, {
@@ -138,6 +140,16 @@ var withSection = [{
138
140
  }, {
139
141
  name: 'Creed'
140
142
  }]
143
+ }, {
144
+ name: null,
145
+ key: 'Fruit',
146
+ children: [{
147
+ name: 'Apple'
148
+ }, {
149
+ name: 'Strawberry'
150
+ }, {
151
+ name: 'Blueberry'
152
+ }]
141
153
  }];
142
154
  var _default = {
143
155
  title: 'Form/SelectField',
@@ -221,7 +233,7 @@ var WithSections = function WithSections(args) {
221
233
  items: withSection
222
234
  }, args), function (section) {
223
235
  return (0, _react2.jsx)(_2.Section, {
224
- key: section.name,
236
+ key: section.key,
225
237
  items: section.children,
226
238
  title: section.name
227
239
  }, function (item) {