@pingux/astro 1.27.0 → 1.28.1

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 (69) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/NOTICE.html +2 -2
  3. package/lib/cjs/components/DataTable/DataTable.js +481 -0
  4. package/lib/cjs/components/DataTable/DataTable.stories.js +310 -0
  5. package/lib/cjs/components/DataTable/DataTable.styles.js +156 -0
  6. package/lib/cjs/components/DataTable/DataTable.test.js +1307 -0
  7. package/lib/cjs/components/DataTable/DataTableChip.js +63 -0
  8. package/lib/cjs/components/DataTable/DataTableChip.test.js +38 -0
  9. package/lib/cjs/components/DataTable/DataTableMenu.js +51 -0
  10. package/lib/cjs/components/DataTable/DataTableMenu.test.js +20 -0
  11. package/lib/cjs/components/DataTable/DataTableMultiLine.js +75 -0
  12. package/lib/cjs/components/DataTable/DataTableMultiLine.test.js +30 -0
  13. package/lib/cjs/components/DataTable/DataTableVirtualizer.js +188 -0
  14. package/lib/cjs/components/DataTable/index.js +54 -0
  15. package/lib/cjs/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.js +8 -2
  16. package/lib/cjs/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.test.js +35 -0
  17. package/lib/cjs/components/MultivaluesField/MultivaluesField.js +10 -10
  18. package/lib/cjs/components/PageHeader/PageHeader.js +7 -1
  19. package/lib/cjs/context/DataTableContext/index.js +31 -0
  20. package/lib/cjs/index.js +67 -2
  21. package/lib/cjs/recipes/CountryPicker.stories.js +25 -12
  22. package/lib/cjs/recipes/EditableInput.stories.js +55 -46
  23. package/lib/cjs/recipes/FlippableCaretMenuButton.stories.js +38 -30
  24. package/lib/cjs/recipes/ListAndPanel.stories.js +102 -87
  25. package/lib/cjs/recipes/MaskedValue.stories.js +8 -5
  26. package/lib/cjs/recipes/NeutralInput.stories.js +6 -3
  27. package/lib/cjs/recipes/OneWayToBidirectionalArrow.stories.js +38 -33
  28. package/lib/cjs/recipes/PageHeader.stories.js +73 -0
  29. package/lib/cjs/recipes/RowLineChart.stories.js +58 -70
  30. package/lib/cjs/recipes/SelectedFieldOverlay.story.js +25 -21
  31. package/lib/cjs/recipes/TrialExperienceStatusBar.stories.js +81 -72
  32. package/lib/cjs/styles/forms/index.js +1 -1
  33. package/lib/cjs/styles/forms/label.js +1 -1
  34. package/lib/cjs/styles/forms/select.js +1 -1
  35. package/lib/cjs/styles/variants/variants.js +4 -1
  36. package/lib/components/DataTable/DataTable.js +436 -0
  37. package/lib/components/DataTable/DataTable.stories.js +273 -0
  38. package/lib/components/DataTable/DataTable.styles.js +137 -0
  39. package/lib/components/DataTable/DataTable.test.js +1256 -0
  40. package/lib/components/DataTable/DataTableChip.js +33 -0
  41. package/lib/components/DataTable/DataTableChip.test.js +31 -0
  42. package/lib/components/DataTable/DataTableMenu.js +24 -0
  43. package/lib/components/DataTable/DataTableMenu.test.js +13 -0
  44. package/lib/components/DataTable/DataTableMultiLine.js +46 -0
  45. package/lib/components/DataTable/DataTableMultiLine.test.js +22 -0
  46. package/lib/components/DataTable/DataTableVirtualizer.js +157 -0
  47. package/lib/components/DataTable/index.js +5 -0
  48. package/lib/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.js +7 -2
  49. package/lib/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.test.js +25 -0
  50. package/lib/components/MultivaluesField/MultivaluesField.js +10 -10
  51. package/lib/components/PageHeader/PageHeader.js +8 -1
  52. package/lib/context/DataTableContext/index.js +5 -0
  53. package/lib/index.js +4 -1
  54. package/lib/recipes/CountryPicker.stories.js +24 -12
  55. package/lib/recipes/EditableInput.stories.js +55 -46
  56. package/lib/recipes/FlippableCaretMenuButton.stories.js +38 -30
  57. package/lib/recipes/ListAndPanel.stories.js +102 -87
  58. package/lib/recipes/MaskedValue.stories.js +8 -5
  59. package/lib/recipes/NeutralInput.stories.js +6 -3
  60. package/lib/recipes/OneWayToBidirectionalArrow.stories.js +38 -33
  61. package/lib/recipes/PageHeader.stories.js +53 -0
  62. package/lib/recipes/RowLineChart.stories.js +58 -70
  63. package/lib/recipes/SelectedFieldOverlay.story.js +25 -21
  64. package/lib/recipes/TrialExperienceStatusBar.stories.js +81 -72
  65. package/lib/styles/forms/index.js +1 -1
  66. package/lib/styles/forms/label.js +1 -1
  67. package/lib/styles/forms/select.js +1 -1
  68. package/lib/styles/variants/variants.js +3 -1
  69. package/package.json +54 -56
@@ -0,0 +1,436 @@
1
+ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
2
+ import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
3
+ import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
4
+ import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
5
+ import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
6
+ import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
7
+ import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
8
+ import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
9
+ import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
10
+ import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
11
+ import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
12
+ var _excluded = ["children"],
13
+ _excluded2 = ["children"],
14
+ _excluded3 = ["item", "children", "hasActions"];
15
+
16
+ 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; }
17
+
18
+ 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) { _defineProperty(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; }
19
+
20
+ import React, { forwardRef, useCallback, useMemo, useRef } from 'react';
21
+ import { mergeProps } from '@react-aria/utils';
22
+ import { FocusRing, useFocusRing } from '@react-aria/focus';
23
+ import { VisuallyHidden } from '@react-aria/visually-hidden';
24
+ import { layoutInfoToStyle, VirtualizerItem } from '@react-aria/virtualizer';
25
+ import { useTableColumnResizeState, useTableState } from '@react-stately/table';
26
+ import { TableLayout } from '@react-stately/layout';
27
+ import { useTable, useTableCell, useTableColumnHeader, useTableHeaderRow, useTableRow, useTableRowGroup } from '@react-aria/table';
28
+ import PropTypes from 'prop-types';
29
+ import MenuDownIcon from 'mdi-react/MenuDownIcon';
30
+ import MenuUpIcon from 'mdi-react/MenuUpIcon';
31
+ import { DataTableContext, useDataTableContext } from '../../context/DataTableContext';
32
+ import DataTableVirtualizer from './DataTableVirtualizer';
33
+ import { useStatusClasses } from '../../hooks';
34
+ import { Box, Icon, Loader } from '../../index';
35
+ import { jsx as ___EmotionJSX } from "@emotion/react";
36
+ var DEFAULT_HEADER_HEIGHT = {
37
+ medium: 34,
38
+ large: 37.5
39
+ };
40
+ var ROW_HEIGHTS = {
41
+ compact: {
42
+ medium: 32,
43
+ large: 40
44
+ },
45
+ regular: {
46
+ medium: 40,
47
+ large: 50
48
+ },
49
+ spacious: {
50
+ medium: 48,
51
+ large: 75
52
+ }
53
+ };
54
+ /**
55
+ * DataTable component using react aria Spectrum TableView
56
+ * Primarily utilizes [TableView](https://react-spectrum.adobe.com/react-spectrum/TableView.html)
57
+ * Cross platform state management react hook for DataTable
58
+ * Primarily utilizes [useTableState](https://react-spectrum.adobe.com/react-stately/useTableState.html)
59
+ */
60
+
61
+ var DataTable = /*#__PURE__*/forwardRef(function (props, ref) {
62
+ var width = props.width,
63
+ height = props.height,
64
+ onAction = props.onAction;
65
+ var direction = 'ltr'; // useLocale override
66
+
67
+ var scale = 'large'; // useProvider override
68
+
69
+ var getDefaultWidth = useCallback();
70
+ var state = useTableState(_objectSpread({}, props));
71
+ var columnState = useTableColumnResizeState(_objectSpread(_objectSpread({}, props), {}, {
72
+ getDefaultWidth: getDefaultWidth
73
+ }), state.collection);
74
+ var domRef = useRef(ref);
75
+ var bodyRef = useRef();
76
+ var density = props.density || 'regular';
77
+ var layout = useMemo(function () {
78
+ return new TableLayout({
79
+ // If props.rowHeight is auto, then use estimated heights based on scale,
80
+ // otherwise use fixed heights.
81
+ rowHeight: props.overflowMode === 'wrap' ? null : ROW_HEIGHTS[density][scale],
82
+ estimatedRowHeight: props.overflowMode === 'wrap' ? ROW_HEIGHTS[density][scale] : null,
83
+ headingHeight: props.overflowMode === 'wrap' ? null : DEFAULT_HEADER_HEIGHT[scale],
84
+ estimatedHeadingHeight: props.overflowMode === 'wrap' ? DEFAULT_HEADER_HEIGHT[scale] : null
85
+ });
86
+ }, [props.overflowMode, scale, density]);
87
+ layout.collection = state.collection;
88
+ layout.getColumnWidth = columnState.getColumnWidth;
89
+
90
+ var _useTable = useTable(_objectSpread(_objectSpread({}, props), {}, {
91
+ isVirtualized: true,
92
+ layout: layout,
93
+ onRowAction: onAction
94
+ }), state, domRef),
95
+ gridProps = _useTable.gridProps; // This overrides collection view's renderWrapper to support DOM hierarchy.
96
+
97
+
98
+ var renderWrapper = function renderWrapper(parent, reusableView, children, renderChildren) {
99
+ var style = layoutInfoToStyle(reusableView.layoutInfo, direction, parent && parent.layoutInfo);
100
+
101
+ if (style.overflow === 'hidden') {
102
+ style.overflow = 'visible'; // needed to support position: sticky
103
+ }
104
+
105
+ if (reusableView.viewType === 'rowgroup') {
106
+ return ___EmotionJSX(TableRowGroup, {
107
+ key: reusableView.key,
108
+ style: style
109
+ }, renderChildren(children));
110
+ }
111
+
112
+ if (reusableView.viewType === 'header') {
113
+ return ___EmotionJSX(TableHeader, {
114
+ key: reusableView.key,
115
+ style: style
116
+ }, renderChildren(children));
117
+ }
118
+
119
+ if (reusableView.viewType === 'row') {
120
+ return ___EmotionJSX(TableRow, {
121
+ key: reusableView.key,
122
+ item: reusableView.content,
123
+ style: style,
124
+ hasActions: onAction
125
+ }, renderChildren(children));
126
+ }
127
+
128
+ if (reusableView.viewType === 'headerrow') {
129
+ return ___EmotionJSX(TableHeaderRow, {
130
+ key: reusableView.key,
131
+ style: style,
132
+ item: reusableView.content
133
+ }, renderChildren(children));
134
+ }
135
+
136
+ return ___EmotionJSX(VirtualizerItem, {
137
+ key: reusableView.key,
138
+ reusableView: reusableView,
139
+ parent: parent
140
+ });
141
+ };
142
+
143
+ var renderView = function renderView(type, item) {
144
+ switch (type) {
145
+ case 'header':
146
+ case 'rowgroup':
147
+ case 'row':
148
+ case 'headerrow':
149
+ return null;
150
+
151
+ case 'cell':
152
+ {
153
+ return ___EmotionJSX(TableCell, {
154
+ cell: item
155
+ });
156
+ }
157
+
158
+ case 'column':
159
+ return ___EmotionJSX(TableColumnHeader, {
160
+ column: item
161
+ });
162
+
163
+ case 'loader':
164
+ return ___EmotionJSX(CenteredWrapper, null, ___EmotionJSX(Loader, {
165
+ color: "accent.70",
166
+ "aria-label": state.collection.size > 0 ? 'loadingMore' : 'loading'
167
+ }));
168
+
169
+ default:
170
+ return null;
171
+ }
172
+ };
173
+
174
+ var viewport = useRef({
175
+ x: 0,
176
+ y: 0,
177
+ width: 0,
178
+ height: 0
179
+ });
180
+ var onVisibleRectChange = useCallback(function (e) {
181
+ if (viewport.current.width === e.width && viewport.current.height === e.height) {
182
+ return;
183
+ }
184
+
185
+ viewport.current = e;
186
+ }, []);
187
+ return ___EmotionJSX(DataTableContext.Provider, {
188
+ value: {
189
+ state: state,
190
+ layout: layout,
191
+ columnState: columnState
192
+ }
193
+ }, ___EmotionJSX(DataTableVirtualizer, _extends({
194
+ style: {
195
+ whiteSpace: props.overflowMode === 'wrap' ? 'normal' : 'initial'
196
+ }
197
+ }, gridProps, {
198
+ width: width,
199
+ height: height,
200
+ layout: layout,
201
+ collection: state.collection,
202
+ focusedKey: state.selectionManager.focusedKey,
203
+ renderView: renderView,
204
+ renderWrapper: renderWrapper,
205
+ setTableWidth: columnState.setTableWidth,
206
+ onVisibleRectChange: onVisibleRectChange,
207
+ domRef: domRef,
208
+ bodyRef: bodyRef,
209
+ getColumnWidth: columnState.getColumnWidth
210
+ })));
211
+ });
212
+ DataTable.propTypes = {
213
+ /**
214
+ * Sets the amount of vertical padding within each cell.
215
+ * density: 'compact' | 'regular' | 'spacious'
216
+ * @default 'regular'
217
+ */
218
+ density: PropTypes.string,
219
+
220
+ /**
221
+ * Sets the overflow behavior for the cell contents.
222
+ * overflowMode: 'wrap' | 'truncate'
223
+ * @default 'truncate'
224
+ */
225
+ overflowMode: PropTypes.string,
226
+
227
+ /** Handler that is called when a user performs an action on a row. */
228
+ onAction: PropTypes.func,
229
+ width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
230
+ height: PropTypes.oneOfType([PropTypes.string, PropTypes.number])
231
+ };
232
+ DataTable.defaultProps = {
233
+ width: '100%',
234
+ height: 565
235
+ };
236
+
237
+ function TableHeader(_ref) {
238
+ var children = _ref.children,
239
+ otherProps = _objectWithoutProperties(_ref, _excluded);
240
+
241
+ var _useTableRowGroup = useTableRowGroup(),
242
+ rowGroupProps = _useTableRowGroup.rowGroupProps;
243
+
244
+ return ___EmotionJSX(Box, _extends({}, rowGroupProps, otherProps), children);
245
+ }
246
+
247
+ function TableColumnHeader(props) {
248
+ var _state$sortDescriptor, _state$sortDescriptor2;
249
+
250
+ var column = props.column;
251
+ var ref = useRef(null);
252
+
253
+ var _useDataTableContext = useDataTableContext(),
254
+ state = _useDataTableContext.state;
255
+
256
+ var _useTableColumnHeader = useTableColumnHeader({
257
+ node: column,
258
+ isVirtualized: true
259
+ }, state, ref),
260
+ columnHeaderProps = _useTableColumnHeader.columnHeaderProps;
261
+
262
+ var columnProps = column.props;
263
+ var arrowIcon = ((_state$sortDescriptor = state.sortDescriptor) === null || _state$sortDescriptor === void 0 ? void 0 : _state$sortDescriptor.direction) === 'ascending' && column.key === ((_state$sortDescriptor2 = state.sortDescriptor) === null || _state$sortDescriptor2 === void 0 ? void 0 : _state$sortDescriptor2.column) ? ___EmotionJSX(Icon, {
264
+ icon: MenuUpIcon
265
+ }) : ___EmotionJSX(Icon, {
266
+ icon: MenuDownIcon,
267
+ color: "active"
268
+ });
269
+ var allProps = [columnHeaderProps];
270
+
271
+ var _useStatusClasses = useStatusClasses(_defineProperty({
272
+ 'is-column-sortable': columnProps.allowsSorting
273
+ }, "is-align-".concat(columnProps.align), columnProps.align)),
274
+ classNames = _useStatusClasses.classNames;
275
+
276
+ return ___EmotionJSX(FocusRing, {
277
+ focusRingClass: "is-key-focused",
278
+ focusClass: "is-click-focused"
279
+ }, ___EmotionJSX(Box, _extends({}, mergeProps.apply(void 0, allProps), {
280
+ ref: ref,
281
+ variant: "dataTable.tableHeadCell",
282
+ className: classNames
283
+ }), columnProps.hideHeader ? ___EmotionJSX(VisuallyHidden, null, column.rendered) : ___EmotionJSX(Box, null, column.rendered), columnProps.allowsSorting && ___EmotionJSX(Box, null, arrowIcon)));
284
+ }
285
+
286
+ function TableRowGroup(_ref2) {
287
+ var children = _ref2.children,
288
+ otherProps = _objectWithoutProperties(_ref2, _excluded2);
289
+
290
+ var _useTableRowGroup2 = useTableRowGroup(),
291
+ rowGroupProps = _useTableRowGroup2.rowGroupProps;
292
+
293
+ return ___EmotionJSX(Box, _extends({}, rowGroupProps, otherProps), children);
294
+ }
295
+
296
+ function TableRow(_ref3) {
297
+ var item = _ref3.item,
298
+ children = _ref3.children,
299
+ hasActions = _ref3.hasActions,
300
+ otherProps = _objectWithoutProperties(_ref3, _excluded3);
301
+
302
+ var ref = useRef();
303
+
304
+ var _useDataTableContext2 = useDataTableContext(),
305
+ state = _useDataTableContext2.state;
306
+
307
+ var _useTableRow = useTableRow({
308
+ node: item,
309
+ isVirtualized: true
310
+ }, state, ref),
311
+ rowProps = _useTableRow.rowProps;
312
+
313
+ var _useFocusRing = useFocusRing({
314
+ within: true
315
+ }),
316
+ isFocusVisibleWithin = _useFocusRing.isFocusVisible,
317
+ focusWithinProps = _useFocusRing.focusProps;
318
+
319
+ var _useFocusRing2 = useFocusRing(),
320
+ isFocusVisible = _useFocusRing2.isFocusVisible,
321
+ focusProps = _useFocusRing2.focusProps;
322
+
323
+ var props = mergeProps(rowProps, otherProps, focusWithinProps, focusProps);
324
+
325
+ var _useStatusClasses3 = useStatusClasses({
326
+ 'is-row-focus-visible': isFocusVisible || isFocusVisibleWithin
327
+ }),
328
+ classNames = _useStatusClasses3.classNames;
329
+
330
+ return ___EmotionJSX(Box, _extends({}, props, {
331
+ ref: ref,
332
+ variant: "dataTable.tableRow",
333
+ className: classNames
334
+ }), children);
335
+ }
336
+
337
+ function TableHeaderRow(_ref4) {
338
+ var item = _ref4.item,
339
+ children = _ref4.children,
340
+ style = _ref4.style;
341
+
342
+ var _useDataTableContext3 = useDataTableContext(),
343
+ state = _useDataTableContext3.state;
344
+
345
+ var ref = useRef();
346
+
347
+ var _useTableHeaderRow = useTableHeaderRow({
348
+ node: item,
349
+ isVirtualized: true
350
+ }, state, ref),
351
+ rowProps = _useTableHeaderRow.rowProps;
352
+
353
+ return ___EmotionJSX(Box, _extends({}, rowProps, {
354
+ ref: ref,
355
+ style: style
356
+ }), children);
357
+ }
358
+
359
+ function TableCell(_ref5) {
360
+ var cell = _ref5.cell;
361
+
362
+ var _useDataTableContext4 = useDataTableContext(),
363
+ state = _useDataTableContext4.state;
364
+
365
+ var ref = useRef();
366
+ var columnProps = cell.column.props;
367
+
368
+ var _useTableCell = useTableCell({
369
+ node: cell,
370
+ isVirtualized: true
371
+ }, state, ref),
372
+ gridCellProps = _useTableCell.gridCellProps;
373
+
374
+ var _useStatusClasses4 = useStatusClasses(_defineProperty({}, "is-align-".concat(columnProps.align), columnProps.align)),
375
+ classNames = _useStatusClasses4.classNames;
376
+
377
+ return ___EmotionJSX(FocusRing, {
378
+ focusRingClass: "is-key-focused"
379
+ }, ___EmotionJSX(Box, _extends({}, gridCellProps, {
380
+ ref: ref,
381
+ variant: "dataTable.tableCell",
382
+ className: classNames
383
+ }), ___EmotionJSX(Box, {
384
+ variant: "dataTable.tableCellContents"
385
+ }, cell.rendered)));
386
+ }
387
+
388
+ function CenteredWrapper(_ref6) {
389
+ var children = _ref6.children;
390
+
391
+ var _useDataTableContext5 = useDataTableContext(),
392
+ state = _useDataTableContext5.state;
393
+
394
+ return ___EmotionJSX(Box, {
395
+ role: "row",
396
+ "aria-rowindex": state.collection.headerRows.length + state.collection.size + 1,
397
+ variant: "dataTable.tableCenteredWrapper"
398
+ }, ___EmotionJSX(Box, {
399
+ role: "rowheader",
400
+ "aria-colspan": state.collection.columns.length
401
+ }, children));
402
+ }
403
+
404
+ TableCell.propTypes = {
405
+ cell: PropTypes.shape({
406
+ column: PropTypes.shape({
407
+ props: PropTypes.shape({
408
+ align: PropTypes.string
409
+ })
410
+ }),
411
+ parentKey: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
412
+ rendered: PropTypes.node
413
+ })
414
+ };
415
+ TableHeaderRow.propTypes = {
416
+ children: PropTypes.node,
417
+ item: PropTypes.shape({}),
418
+ style: PropTypes.shape({})
419
+ };
420
+ TableRow.propTypes = {
421
+ children: PropTypes.node,
422
+ hasActions: PropTypes.func,
423
+ item: PropTypes.shape({})
424
+ };
425
+ TableColumnHeader.propTypes = {
426
+ column: PropTypes.shape({
427
+ key: PropTypes.string,
428
+ props: PropTypes.shape({
429
+ align: PropTypes.string,
430
+ allowsSorting: PropTypes.bool,
431
+ hideHeader: PropTypes.bool
432
+ }),
433
+ rendered: PropTypes.node
434
+ })
435
+ };
436
+ export default DataTable;
@@ -0,0 +1,273 @@
1
+ import _parseInt from "@babel/runtime-corejs3/core-js-stable/parse-int";
2
+ import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
3
+ import _sortInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/sort";
4
+ import _regeneratorRuntime from "@babel/runtime-corejs3/regenerator";
5
+ import _Object$assign from "@babel/runtime-corejs3/core-js-stable/object/assign";
6
+ import _keysInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/keys";
7
+ import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
8
+ import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
9
+ import _asyncToGenerator from "@babel/runtime-corejs3/helpers/esm/asyncToGenerator";
10
+ import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
11
+ import React from 'react';
12
+ import { useAsyncList } from '@react-stately/data';
13
+ import ApplicationIcon from 'mdi-react/ApplicationIcon';
14
+ import { action } from '@storybook/addon-actions';
15
+ import { faker } from '@faker-js/faker';
16
+ import isChromatic from 'chromatic/isChromatic';
17
+ import { DataTable, DataTableBody, DataTableCell, DataTableColumn, DataTableHeader, DataTableRow, DataTableChip, DataTableMenu, DataTableMultiLine } from '../../index';
18
+ import { jsx as ___EmotionJSX } from "@emotion/react";
19
+ export default {
20
+ title: 'DataTable',
21
+ component: DataTable,
22
+ parameters: {
23
+ docs: {
24
+ source: {
25
+ type: 'code'
26
+ }
27
+ }
28
+ },
29
+ argTypes: {
30
+ density: {
31
+ control: {
32
+ type: 'radio',
33
+ options: ['compact', 'regular', 'spacious']
34
+ },
35
+ defaultValue: 'spacious'
36
+ },
37
+ overflowMode: {
38
+ control: {
39
+ type: 'radio',
40
+ options: ['truncate', 'wrap']
41
+ },
42
+ defaultValue: 'truncate'
43
+ },
44
+ width: {
45
+ defaultValue: '100%',
46
+ control: {
47
+ type: 'text'
48
+ }
49
+ },
50
+ height: {
51
+ defaultValue: 565,
52
+ control: {
53
+ type: 'number'
54
+ }
55
+ }
56
+ }
57
+ };
58
+ export var Default = function Default(args) {
59
+ var columns = [{
60
+ name: 'Country',
61
+ key: 'country'
62
+ }, {
63
+ name: 'Population',
64
+ key: 'population'
65
+ }, {
66
+ name: 'Continent',
67
+ key: 'continent'
68
+ }];
69
+ var rows = [{
70
+ id: 1,
71
+ country: 'USA',
72
+ population: '320,000,000',
73
+ continent: 'North America'
74
+ }, {
75
+ id: 2,
76
+ country: 'Canada',
77
+ population: '37,000,000',
78
+ continent: 'North America'
79
+ }, {
80
+ id: 3,
81
+ country: 'China',
82
+ population: '1,398,000,000',
83
+ continent: 'Asia'
84
+ }, {
85
+ id: 4,
86
+ country: 'France',
87
+ population: '67,000,000',
88
+ continent: 'Europe'
89
+ }];
90
+ return ___EmotionJSX(DataTable, _extends({}, args, {
91
+ "aria-label": "Static table"
92
+ }), ___EmotionJSX(DataTableHeader, {
93
+ columns: columns
94
+ }, function (column) {
95
+ return ___EmotionJSX(DataTableColumn, {
96
+ align: "center"
97
+ }, column.name);
98
+ }), ___EmotionJSX(DataTableBody, {
99
+ items: rows
100
+ }, function (item) {
101
+ return ___EmotionJSX(DataTableRow, null, function (columnKey) {
102
+ return ___EmotionJSX(DataTableCell, null, item[columnKey]);
103
+ });
104
+ }));
105
+ };
106
+ export var CustomContent = function CustomContent(args) {
107
+ /**
108
+ * isChromatic checks if the code is running in Chromatic environment
109
+ * @returns {Boolean}
110
+ * Source: https://www.chromatic.com/docs/ischromatic
111
+ * */
112
+ var chromatic = isChromatic();
113
+ var columns = [{
114
+ name: 'Name/ID',
115
+ key: 'name_id',
116
+ isSortable: true
117
+ }, {
118
+ name: 'Status',
119
+ key: 'status',
120
+ isSortable: false
121
+ }, {
122
+ name: 'Category',
123
+ key: 'category',
124
+ isSortable: false
125
+ }, {
126
+ name: 'Date Submitted',
127
+ key: 'date',
128
+ isSortable: true
129
+ }, {
130
+ name: 'Submitted By',
131
+ key: 'submitted_by',
132
+ isSortable: true
133
+ }, {
134
+ name: 'Menu',
135
+ key: 'menu',
136
+ isSortable: false
137
+ }];
138
+ var list = useAsyncList({
139
+ load: function load(_ref) {
140
+ return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
141
+ var _context, _context2, _context3;
142
+
143
+ var signal, cursor, res, json, random, fakeData, tableData;
144
+ return _regeneratorRuntime.wrap(function _callee$(_context5) {
145
+ while (1) {
146
+ switch (_context5.prev = _context5.next) {
147
+ case 0:
148
+ signal = _ref.signal, cursor = _ref.cursor;
149
+
150
+ if (cursor) {
151
+ // eslint-disable-next-line no-param-reassign
152
+ cursor = cursor.replace(/^http:\/\//i, 'https://');
153
+ }
154
+
155
+ _context5.next = 4;
156
+ return fetch(cursor || 'https://pokeapi.co/api/v2/pokemon', {
157
+ signal: signal
158
+ });
159
+
160
+ case 4:
161
+ res = _context5.sent;
162
+ _context5.next = 7;
163
+ return res.json();
164
+
165
+ case 7:
166
+ json = _context5.sent;
167
+
168
+ random = function random(items) {
169
+ return items[Math.floor(Math.random() * items.length)];
170
+ };
171
+
172
+ fakeData = _mapInstanceProperty(_context = _concatInstanceProperty(_context2 = []).call(_context2, _keysInstanceProperty(_context3 = Array(json.results.length)).call(_context3))).call(_context, function (key) {
173
+ var _context4;
174
+
175
+ return {
176
+ id: key,
177
+ date: chromatic ? '2022-12-25' : "".concat(faker.date.past().toLocaleDateString('fr-CA')),
178
+ category: chromatic ? 'Other' : "".concat(random(['App Catalog', 'Delete Environment', 'Other'])),
179
+ status: ___EmotionJSX(DataTableChip, {
180
+ cell: chromatic ? 'Pending' : "".concat(random(['Pending', 'Rejected', 'Approved', 'Failed']))
181
+ }),
182
+ submitted_by: chromatic ? 'John Doe' : _concatInstanceProperty(_context4 = "".concat(faker.name.firstName(), " ")).call(_context4, faker.name.lastName()),
183
+ name_id: ___EmotionJSX(DataTableMultiLine, {
184
+ cell: [{
185
+ name: chromatic ? 'ACME' : "".concat(faker.company.name()),
186
+ icon: ApplicationIcon,
187
+ accountId: chromatic ? '123456789' : "".concat(faker.finance.routingNumber())
188
+ }]
189
+ }),
190
+ menu: ___EmotionJSX(DataTableMenu, null)
191
+ };
192
+ });
193
+ tableData = _mapInstanceProperty(fakeData).call(fakeData, function (item, i) {
194
+ return _Object$assign({}, item, json.results[i]);
195
+ });
196
+ return _context5.abrupt("return", {
197
+ items: tableData,
198
+ cursor: json.next
199
+ });
200
+
201
+ case 12:
202
+ case "end":
203
+ return _context5.stop();
204
+ }
205
+ }
206
+ }, _callee);
207
+ }))();
208
+ },
209
+ sort: function sort(_ref2) {
210
+ return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
211
+ var items, sortDescriptor, cmp;
212
+ return _regeneratorRuntime.wrap(function _callee2$(_context7) {
213
+ while (1) {
214
+ switch (_context7.prev = _context7.next) {
215
+ case 0:
216
+ items = _ref2.items, sortDescriptor = _ref2.sortDescriptor;
217
+ return _context7.abrupt("return", {
218
+ items: _sortInstanceProperty(items).call(items, function (a, b) {
219
+ var _context6;
220
+
221
+ var first = sortDescriptor.column !== 'name_id' ? a[sortDescriptor.column] : a[sortDescriptor.column].props.cell[0].name;
222
+ var second = sortDescriptor.column !== 'name_id' ? b[sortDescriptor.column] : b[sortDescriptor.column].props.cell[0].name;
223
+
224
+ if (_includesInstanceProperty(_context6 = sortDescriptor.column).call(_context6, 'date')) {
225
+ cmp = new Date(first) < new Date(second) ? -1 : 1;
226
+ } else {
227
+ cmp = (_parseInt(first, 10) || first) < (_parseInt(second, 10) || second) ? -1 : 1;
228
+ }
229
+
230
+ if (sortDescriptor.direction === 'descending') {
231
+ cmp *= -1;
232
+ }
233
+
234
+ return cmp;
235
+ })
236
+ });
237
+
238
+ case 2:
239
+ case "end":
240
+ return _context7.stop();
241
+ }
242
+ }
243
+ }, _callee2);
244
+ }))();
245
+ }
246
+ });
247
+ return ___EmotionJSX(React.Fragment, null, ___EmotionJSX(DataTable, _extends({}, args, {
248
+ sortDescriptor: list.sortDescriptor,
249
+ onSortChange: _sortInstanceProperty(list),
250
+ "aria-label": "Custom content table",
251
+ onAction: action('onAction')
252
+ }), ___EmotionJSX(DataTableHeader, {
253
+ columns: columns
254
+ }, function (column) {
255
+ return ___EmotionJSX(DataTableColumn, {
256
+ width: // eslint-disable-next-line no-nested-ternary
257
+ column.key === 'name_id' ? '26.5%' : column.key === 'menu' ? '5%' : '16%',
258
+ align: column.key !== 'menu' ? 'start' : 'center',
259
+ allowsSorting: column.isSortable,
260
+ hideHeader: column.key === 'menu'
261
+ }, column.name);
262
+ }), ___EmotionJSX(DataTableBody, {
263
+ items: list.items,
264
+ loadingState: list.loadingState,
265
+ onLoadMore: list.loadMore
266
+ }, function (item) {
267
+ return ___EmotionJSX(DataTableRow, {
268
+ key: item.name
269
+ }, function (columnKey) {
270
+ return ___EmotionJSX(DataTableCell, null, item[columnKey]);
271
+ });
272
+ })));
273
+ };