@carbon/ibm-products 2.43.2-canary.30 → 2.43.2-canary.32
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.
- package/css/index-full-carbon.css +5 -0
- package/css/index-full-carbon.css.map +1 -1
- package/css/index-full-carbon.min.css +1 -1
- package/css/index-full-carbon.min.css.map +1 -1
- package/css/index-without-carbon.css +5 -0
- package/css/index-without-carbon.css.map +1 -1
- package/css/index-without-carbon.min.css +1 -1
- package/css/index-without-carbon.min.css.map +1 -1
- package/css/index.css +5 -0
- package/css/index.css.map +1 -1
- package/css/index.min.css +1 -1
- package/css/index.min.css.map +1 -1
- package/es/components/DataSpreadsheet/DataSpreadsheet.d.ts +12 -0
- package/es/components/DataSpreadsheet/DataSpreadsheet.js +22 -3
- package/es/components/DataSpreadsheet/DataSpreadsheetBody.d.ts +12 -0
- package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +22 -6
- package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +3 -0
- package/es/components/StatusIndicator/StatusIndicatorStep.js +87 -0
- package/es/components/index.d.ts +1 -1
- package/es/index.js +1 -0
- package/lib/components/DataSpreadsheet/DataSpreadsheet.d.ts +12 -0
- package/lib/components/DataSpreadsheet/DataSpreadsheet.js +22 -3
- package/lib/components/DataSpreadsheet/DataSpreadsheetBody.d.ts +12 -0
- package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +22 -6
- package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +3 -0
- package/lib/components/StatusIndicator/StatusIndicatorStep.js +94 -0
- package/lib/components/index.d.ts +1 -1
- package/lib/index.js +5 -0
- package/package.json +3 -3
- package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +7 -0
@@ -32,7 +32,7 @@ import { useSpreadsheetOutsideClick } from './hooks/useSpreadsheetOutsideClick.j
|
|
32
32
|
import { useMoveActiveCell } from './hooks/useMoveActiveCell.js';
|
33
33
|
import { useSpreadsheetEdit } from './hooks/useSpreadsheetEdit.js';
|
34
34
|
|
35
|
-
var _excluded = ["cellSize", "className", "columns", "data", "defaultEmptyRowCount", "onDataUpdate", "id", "onActiveCellChange", "onSelectionAreaChange", "selectAllAriaLabel", "spreadsheetAriaLabel", "theme", "totalVisibleColumns"];
|
35
|
+
var _excluded = ["cellSize", "className", "columns", "data", "defaultEmptyRowCount", "onDataUpdate", "id", "onActiveCellChange", "onSelectionAreaChange", "renderRowHeader", "renderRowHeaderDirection", "selectAllAriaLabel", "spreadsheetAriaLabel", "theme", "totalVisibleColumns"];
|
36
36
|
// The block part of our conventional BEM class names (blockClass__E--M).
|
37
37
|
var blockClass = "".concat(pkg.prefix, "--data-spreadsheet");
|
38
38
|
var componentName = 'DataSpreadsheet';
|
@@ -67,6 +67,8 @@ var DataSpreadsheet = /*#__PURE__*/React__default.forwardRef(function (_ref, ref
|
|
67
67
|
onActiveCellChange = _ref$onActiveCellChan === void 0 ? defaults.onActiveCellChange : _ref$onActiveCellChan,
|
68
68
|
_ref$onSelectionAreaC = _ref.onSelectionAreaChange,
|
69
69
|
onSelectionAreaChange = _ref$onSelectionAreaC === void 0 ? defaults.onSelectionAreaChange : _ref$onSelectionAreaC,
|
70
|
+
renderRowHeader = _ref.renderRowHeader,
|
71
|
+
renderRowHeaderDirection = _ref.renderRowHeaderDirection,
|
70
72
|
selectAllAriaLabel = _ref.selectAllAriaLabel,
|
71
73
|
spreadsheetAriaLabel = _ref.spreadsheetAriaLabel,
|
72
74
|
theme = _ref.theme,
|
@@ -138,13 +140,15 @@ var DataSpreadsheet = /*#__PURE__*/React__default.forwardRef(function (_ref, ref
|
|
138
140
|
setActiveCellContent = _useState26[1];
|
139
141
|
var activeCellRef = useRef();
|
140
142
|
var cellEditorRulerRef = useRef();
|
143
|
+
var hasCustomRowHeader = typeof renderRowHeader === 'function';
|
144
|
+
var maxNumRowsCount = data.length.toString().length;
|
141
145
|
var defaultColumn = useMemo(function () {
|
142
146
|
return {
|
143
147
|
width: 150,
|
144
|
-
rowHeaderWidth: 64,
|
148
|
+
rowHeaderWidth: hasCustomRowHeader ? 40 + maxNumRowsCount * 8.56 : 64,
|
145
149
|
rowHeight: cellSizeValue
|
146
150
|
};
|
147
|
-
}, [cellSizeValue]);
|
151
|
+
}, [cellSizeValue, hasCustomRowHeader, maxNumRowsCount]);
|
148
152
|
var _useMultipleKeyTracki = useMultipleKeyTracking({
|
149
153
|
ref: multiKeyTrackingRef,
|
150
154
|
containerHasFocus: containerHasFocus,
|
@@ -654,7 +658,10 @@ var DataSpreadsheet = /*#__PURE__*/React__default.forwardRef(function (_ref, ref
|
|
654
658
|
headerGroups: headerGroups,
|
655
659
|
defaultColumn: defaultColumn,
|
656
660
|
getTableBodyProps: getTableBodyProps,
|
661
|
+
hasCustomRowHeader: hasCustomRowHeader,
|
657
662
|
onDataUpdate: onDataUpdate,
|
663
|
+
renderRowHeaderDirection: renderRowHeaderDirection,
|
664
|
+
renderRowHeader: renderRowHeader,
|
658
665
|
onActiveCellChange: onActiveCellChange,
|
659
666
|
onSelectionAreaChange: onSelectionAreaChange,
|
660
667
|
prepareRow: prepareRow,
|
@@ -753,6 +760,10 @@ DataSpreadsheet.propTypes = {
|
|
753
760
|
* Sets the number of empty rows to be created when there is no data provided
|
754
761
|
*/
|
755
762
|
defaultEmptyRowCount: PropTypes.number,
|
763
|
+
/**
|
764
|
+
* Check if spreadsheet is using custom row header component attached
|
765
|
+
*/
|
766
|
+
hasCustomRowHeader: PropTypes.bool,
|
756
767
|
/**
|
757
768
|
* The spreadsheet id
|
758
769
|
*/
|
@@ -769,6 +780,14 @@ DataSpreadsheet.propTypes = {
|
|
769
780
|
* The event handler that is called when the selection area values change
|
770
781
|
*/
|
771
782
|
onSelectionAreaChange: PropTypes.func,
|
783
|
+
/**
|
784
|
+
* Component next to numbering rows
|
785
|
+
*/
|
786
|
+
renderRowHeader: PropTypes.func,
|
787
|
+
/**
|
788
|
+
* Component next to numbering rows
|
789
|
+
*/
|
790
|
+
renderRowHeaderDirection: PropTypes.oneOf(['left', 'right']),
|
772
791
|
/**
|
773
792
|
* The aria label applied to the Select all button
|
774
793
|
*/
|
@@ -52,6 +52,18 @@ interface DataSpreadsheetBodyProps {
|
|
52
52
|
* The event handler that is called when the active cell changes
|
53
53
|
*/
|
54
54
|
onActiveCellChange?: () => void;
|
55
|
+
/**
|
56
|
+
* Check if user is using custom component
|
57
|
+
*/
|
58
|
+
hasCustomRowHeader?: boolean;
|
59
|
+
/**
|
60
|
+
* Component next to numbering rows
|
61
|
+
*/
|
62
|
+
renderRowHeader?: (index: number) => any[];
|
63
|
+
/**
|
64
|
+
* Component next to numbering rows
|
65
|
+
*/
|
66
|
+
renderRowHeaderDirection?: string;
|
55
67
|
/**
|
56
68
|
* The event handler that is called to set the rows for the empty spreadsheet
|
57
69
|
*/
|
@@ -35,6 +35,9 @@ var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
35
35
|
headerGroups = _ref.headerGroups,
|
36
36
|
id = _ref.id,
|
37
37
|
onDataUpdate = _ref.onDataUpdate,
|
38
|
+
renderRowHeader = _ref.renderRowHeader,
|
39
|
+
renderRowHeaderDirection = _ref.renderRowHeaderDirection,
|
40
|
+
hasCustomRowHeader = _ref.hasCustomRowHeader,
|
38
41
|
prepareRow = _ref.prepareRow,
|
39
42
|
rows = _ref.rows,
|
40
43
|
selectionAreaData = _ref.selectionAreaData,
|
@@ -138,7 +141,7 @@ var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
138
141
|
return;
|
139
142
|
});
|
140
143
|
}
|
141
|
-
}, [selectionAreas, setSelectionAreas, defaultColumn, onSelectionAreaChange, setSelectionAreaData, ref, activeCellCoordinates, setActiveCellInsideSelectionArea, visibleColumns]);
|
144
|
+
}, [selectionAreas, setSelectionAreas, defaultColumn, onSelectionAreaChange, setSelectionAreaData, ref, activeCellCoordinates, setActiveCellInsideSelectionArea, visibleColumns, hasCustomRowHeader]);
|
142
145
|
var populateSelectionAreaCellData = function populateSelectionAreaCellData(_ref2) {
|
143
146
|
var rowStart = _ref2.rowStart,
|
144
147
|
rowEnd = _ref2.rowEnd,
|
@@ -212,7 +215,7 @@ var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
212
215
|
});
|
213
216
|
}
|
214
217
|
}
|
215
|
-
}, [defaultColumn, ref, activeCellCoordinates, previousState === null || previousState === void 0 ? void 0 : previousState.rowHeight, selectionAreas, setActiveCellInsideSelectionArea, setSelectionAreas, visibleColumns]);
|
218
|
+
}, [defaultColumn, ref, activeCellCoordinates, previousState === null || previousState === void 0 ? void 0 : previousState.rowHeight, selectionAreas, setActiveCellInsideSelectionArea, setSelectionAreas, visibleColumns, hasCustomRowHeader]);
|
216
219
|
|
217
220
|
//this method will check for any duplicate selection area and remove.
|
218
221
|
//same selections are those have the same height, width, top, left styles. These inline styles are being set in createCellSelection util.
|
@@ -338,11 +341,12 @@ var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
338
341
|
"data-column-index": "header",
|
339
342
|
type: "button",
|
340
343
|
onClick: handleRowHeaderClickEvent(index),
|
341
|
-
className: cx("".concat(blockClass, "__td"), "".concat(blockClass, "__td-th"), "".concat(blockClass, "--interactive-cell-element"), _defineProperty(_defineProperty({}, "".concat(blockClass, "__td-th--active-header"), (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === index || checkActiveHeaderCell(index, selectionAreas, 'row')), "".concat(blockClass, "__td-th--selected-header"), checkSelectedHeaderCell(index, selectionAreas, 'row', columns))),
|
344
|
+
className: cx("".concat(blockClass, "__td"), "".concat(blockClass, "__td-th"), "".concat(blockClass, "--interactive-cell-element"), _defineProperty(_defineProperty(_defineProperty({}, "".concat(blockClass, "__td_custom"), hasCustomRowHeader ? true : false), "".concat(blockClass, "__td-th--active-header"), !hasCustomRowHeader && ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === index || checkActiveHeaderCell(index, selectionAreas, 'row'))), "".concat(blockClass, "__td-th--selected-header"), !hasCustomRowHeader && checkSelectedHeaderCell(index, selectionAreas, 'row', columns))),
|
342
345
|
style: {
|
343
|
-
width: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth
|
346
|
+
width: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth,
|
347
|
+
flexDirection: hasCustomRowHeader ? renderRowHeaderDirection === 'Left' ? 'row-reverse' : row : undefined
|
344
348
|
}
|
345
|
-
}, index + 1)), row.cells.map(function (cell, index) {
|
349
|
+
}, index + 1, hasCustomRowHeader && typeof renderRowHeader === 'function' && renderRowHeader(index))), row.cells.map(function (cell, index) {
|
346
350
|
var _cell$column;
|
347
351
|
var cellProps = prepareProps(cell.getCellProps(), 'key');
|
348
352
|
return /*#__PURE__*/React__default.createElement("div", _extends({
|
@@ -367,7 +371,7 @@ var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
367
371
|
}, cell.render('Cell')));
|
368
372
|
}));
|
369
373
|
}
|
370
|
-
}, [prepareRow, rows, activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row, selectionAreas, handleRowHeaderClickEvent, handleBodyCellClickEvent, handleBodyCellHoverEvent, defaultColumn, columns]);
|
374
|
+
}, [prepareRow, renderRowHeader, renderRowHeaderDirection, rows, hasCustomRowHeader, activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row, selectionAreas, handleRowHeaderClickEvent, handleBodyCellClickEvent, handleBodyCellHoverEvent, defaultColumn, columns]);
|
371
375
|
var spreadsheetBodyRef = useRef();
|
372
376
|
return /*#__PURE__*/React__default.createElement("div", _extends({
|
373
377
|
ref: spreadsheetBodyRef,
|
@@ -433,6 +437,10 @@ DataSpreadsheetBody.propTypes = {
|
|
433
437
|
*/
|
434
438
|
/**@ts-ignore */
|
435
439
|
getTableBodyProps: PropTypes.func,
|
440
|
+
/**
|
441
|
+
* Check if spreadsheet is using custom row header component attached
|
442
|
+
*/
|
443
|
+
hasCustomRowHeader: PropTypes.bool,
|
436
444
|
/**
|
437
445
|
* Headers provided from useTable hook
|
438
446
|
*/
|
@@ -457,6 +465,14 @@ DataSpreadsheetBody.propTypes = {
|
|
457
465
|
* Prepare row function from react-table
|
458
466
|
*/
|
459
467
|
prepareRow: PropTypes.func,
|
468
|
+
/**
|
469
|
+
* Component next to numbering rows
|
470
|
+
*/
|
471
|
+
renderRowHeader: PropTypes.func,
|
472
|
+
/**
|
473
|
+
* Component next to numbering rows
|
474
|
+
*/
|
475
|
+
renderRowHeaderDirection: PropTypes.string,
|
460
476
|
/**
|
461
477
|
* All of the spreadsheet row data
|
462
478
|
*/
|
@@ -175,6 +175,9 @@ var DataSpreadsheetHeader = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
175
175
|
"data-row-index": "header",
|
176
176
|
"data-column-index": "header",
|
177
177
|
type: "button",
|
178
|
+
style: {
|
179
|
+
width: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth
|
180
|
+
},
|
178
181
|
tabIndex: -1,
|
179
182
|
"aria-label": selectAllAriaLabel,
|
180
183
|
onClick: handleSelectAllClick,
|
@@ -0,0 +1,87 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright IBM Corp. 2020, 2024
|
3
|
+
*
|
4
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
6
|
+
*/
|
7
|
+
|
8
|
+
import { objectWithoutProperties as _objectWithoutProperties, extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
9
|
+
import React__default from 'react';
|
10
|
+
import PropTypes from '../../node_modules/prop-types/index.js';
|
11
|
+
import cx from 'classnames';
|
12
|
+
import { getDevtoolsProps } from '../../global/js/utils/devtools.js';
|
13
|
+
import { pkg } from '../../settings.js';
|
14
|
+
import { InlineLoading } from '@carbon/react';
|
15
|
+
import { CircleStroke, ErrorOutline, CheckmarkOutline } from '@carbon/react/icons';
|
16
|
+
|
17
|
+
var _CircleStroke, _InlineLoading, _ErrorOutline, _CheckmarkOutline;
|
18
|
+
var _excluded = ["className", "description", "errorMessage", "status"];
|
19
|
+
|
20
|
+
// The block part of our conventional BEM class names (blockClass__E--M).
|
21
|
+
var blockClass = "".concat(pkg.prefix, "--status-indicator-step");
|
22
|
+
var componentName = 'StatusIndicatorStep';
|
23
|
+
var defaults = {
|
24
|
+
status: 'inactive'
|
25
|
+
};
|
26
|
+
|
27
|
+
/**
|
28
|
+
* An icon/description pair that describes one step of the `StatusIndicator`.
|
29
|
+
*/
|
30
|
+
var StatusIndicatorStep = /*#__PURE__*/React__default.forwardRef(function (_ref, ref) {
|
31
|
+
var className = _ref.className,
|
32
|
+
description = _ref.description,
|
33
|
+
errorMessage = _ref.errorMessage,
|
34
|
+
_ref$status = _ref.status,
|
35
|
+
status = _ref$status === void 0 ? defaults.status : _ref$status,
|
36
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
37
|
+
return /*#__PURE__*/React__default.createElement("li", _extends({}, rest, {
|
38
|
+
className: cx(blockClass, className, "".concat(blockClass, "--").concat(status)),
|
39
|
+
ref: ref
|
40
|
+
}, getDevtoolsProps(componentName)), /*#__PURE__*/React__default.createElement("div", {
|
41
|
+
className: "".concat(blockClass, "__details")
|
42
|
+
}, /*#__PURE__*/React__default.createElement("div", {
|
43
|
+
className: "".concat(blockClass, "__icon")
|
44
|
+
}, status === 'inactive' && (_CircleStroke || (_CircleStroke = /*#__PURE__*/React__default.createElement(CircleStroke, {
|
45
|
+
size: 16,
|
46
|
+
viewBox: "1 1 14 14"
|
47
|
+
}))), status === 'active' && (_InlineLoading || (_InlineLoading = /*#__PURE__*/React__default.createElement(InlineLoading, null))), status === 'error' && (_ErrorOutline || (_ErrorOutline = /*#__PURE__*/React__default.createElement(ErrorOutline, {
|
48
|
+
size: 16
|
49
|
+
}))), status === 'finished' && (_CheckmarkOutline || (_CheckmarkOutline = /*#__PURE__*/React__default.createElement(CheckmarkOutline, {
|
50
|
+
size: 16
|
51
|
+
})))), /*#__PURE__*/React__default.createElement("div", {
|
52
|
+
className: "".concat(blockClass, "__text")
|
53
|
+
}, description)), status === 'error' && errorMessage && /*#__PURE__*/React__default.createElement("div", {
|
54
|
+
className: "".concat(blockClass, "__error-message")
|
55
|
+
}, errorMessage));
|
56
|
+
});
|
57
|
+
|
58
|
+
// Return a placeholder if not released and not enabled by feature flag
|
59
|
+
StatusIndicatorStep = pkg.checkComponentEnabled(StatusIndicatorStep, componentName);
|
60
|
+
|
61
|
+
// The display name of the component, used by React. Note that displayName
|
62
|
+
// is used in preference to relying on function.name.
|
63
|
+
StatusIndicatorStep.displayName = componentName;
|
64
|
+
|
65
|
+
// The types and DocGen commentary for the component props,
|
66
|
+
// in alphabetical order (for consistency).
|
67
|
+
// See https://www.npmjs.com/package/prop-types#usage.
|
68
|
+
StatusIndicatorStep.propTypes = {
|
69
|
+
/**
|
70
|
+
* Provide an optional class to be applied to the containing node.
|
71
|
+
*/
|
72
|
+
className: PropTypes.string,
|
73
|
+
/**
|
74
|
+
* The text associated with the icon.
|
75
|
+
*/
|
76
|
+
description: PropTypes.string.isRequired,
|
77
|
+
/**
|
78
|
+
* This message will appear below the description if the `status` is "error".
|
79
|
+
*/
|
80
|
+
errorMessage: PropTypes.string,
|
81
|
+
/**
|
82
|
+
* Each `status` represents a different icon..
|
83
|
+
*/
|
84
|
+
status: PropTypes.oneOf(['inactive', 'active', 'error', 'finished']).isRequired
|
85
|
+
};
|
86
|
+
|
87
|
+
export { StatusIndicatorStep };
|
package/es/components/index.d.ts
CHANGED
@@ -50,7 +50,6 @@ export { Nav } from "./Nav";
|
|
50
50
|
export { StringFormatter } from "./StringFormatter";
|
51
51
|
export { UserAvatar } from "./UserAvatar";
|
52
52
|
export { ScrollGradient } from "./ScrollGradient";
|
53
|
-
export { StatusIndicator } from "./StatusIndicator";
|
54
53
|
export { TagOverflow } from "./TagOverflow";
|
55
54
|
export { ActionBar } from "./ActionBar";
|
56
55
|
export { ConditionBuilder } from "./ConditionBuilder";
|
@@ -68,5 +67,6 @@ export { EditTearsheet, EditTearsheetForm } from "./EditTearsheet";
|
|
68
67
|
export { Guidebanner, GuidebannerElement, GuidebannerElementButton, GuidebannerElementLink } from "./Guidebanner";
|
69
68
|
export { InlineTip, InlineTipButton, InlineTipLink } from "./InlineTip";
|
70
69
|
export { DescriptionList, DescriptionListBody, DescriptionListCell, DescriptionListRow } from "./DescriptionList";
|
70
|
+
export { StatusIndicator, StatusIndicatorStep } from "./StatusIndicator";
|
71
71
|
export { FilterPanel, FilterPanelAccordion, FilterPanelAccordionItem, FilterPanelCheckbox, FilterPanelCheckboxWithOverflow, FilterPanelGroup, FilterPanelLabel, FilterPanelSearch } from "./FilterPanel";
|
72
72
|
export { FeatureFlags as unstable_FeatureFlags, useFeatureFlag as unstable_useFeatureFlag, useFeatureFlags as unstable_useFeatureFlags } from "./FeatureFlags";
|
package/es/index.js
CHANGED
@@ -122,6 +122,7 @@ export { StringFormatter } from './components/StringFormatter/StringFormatter.js
|
|
122
122
|
export { UserAvatar } from './components/UserAvatar/UserAvatar.js';
|
123
123
|
export { ScrollGradient } from './components/ScrollGradient/ScrollGradient.js';
|
124
124
|
export { StatusIndicator } from './components/StatusIndicator/StatusIndicator.js';
|
125
|
+
export { StatusIndicatorStep } from './components/StatusIndicator/StatusIndicatorStep.js';
|
125
126
|
export { TagOverflow } from './components/TagOverflow/TagOverflow.js';
|
126
127
|
export { ActionBar } from './components/ActionBar/ActionBar.js';
|
127
128
|
export { FilterPanel } from './components/FilterPanel/FilterPanel.js';
|
@@ -28,6 +28,10 @@ interface DataSpreadsheetProps {
|
|
28
28
|
* Sets the number of empty rows to be created when there is no data provided
|
29
29
|
*/
|
30
30
|
defaultEmptyRowCount?: number;
|
31
|
+
/**
|
32
|
+
* Check if has custom row header component attached
|
33
|
+
*/
|
34
|
+
hasCustomRowHeader?: boolean;
|
31
35
|
/**
|
32
36
|
* The spreadsheet id
|
33
37
|
*/
|
@@ -46,6 +50,14 @@ interface DataSpreadsheetProps {
|
|
46
50
|
* The event handler that is called when the selection area values change
|
47
51
|
*/
|
48
52
|
onSelectionAreaChange?: () => void;
|
53
|
+
/**
|
54
|
+
* Position of the custom row numbering component
|
55
|
+
*/
|
56
|
+
renderRowHeaderDirection?: 'left' | 'right';
|
57
|
+
/**
|
58
|
+
* Component next to numbering rows
|
59
|
+
*/
|
60
|
+
renderRowHeader?: (index: number) => any[];
|
49
61
|
/**
|
50
62
|
* The aria label applied to the Select all button
|
51
63
|
*/
|
@@ -41,7 +41,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
41
41
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
42
42
|
var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
|
43
43
|
|
44
|
-
var _excluded = ["cellSize", "className", "columns", "data", "defaultEmptyRowCount", "onDataUpdate", "id", "onActiveCellChange", "onSelectionAreaChange", "selectAllAriaLabel", "spreadsheetAriaLabel", "theme", "totalVisibleColumns"];
|
44
|
+
var _excluded = ["cellSize", "className", "columns", "data", "defaultEmptyRowCount", "onDataUpdate", "id", "onActiveCellChange", "onSelectionAreaChange", "renderRowHeader", "renderRowHeaderDirection", "selectAllAriaLabel", "spreadsheetAriaLabel", "theme", "totalVisibleColumns"];
|
45
45
|
// The block part of our conventional BEM class names (blockClass__E--M).
|
46
46
|
var blockClass = "".concat(settings.pkg.prefix, "--data-spreadsheet");
|
47
47
|
var componentName = 'DataSpreadsheet';
|
@@ -76,6 +76,8 @@ exports.DataSpreadsheet = /*#__PURE__*/React__default["default"].forwardRef(func
|
|
76
76
|
onActiveCellChange = _ref$onActiveCellChan === void 0 ? defaults.onActiveCellChange : _ref$onActiveCellChan,
|
77
77
|
_ref$onSelectionAreaC = _ref.onSelectionAreaChange,
|
78
78
|
onSelectionAreaChange = _ref$onSelectionAreaC === void 0 ? defaults.onSelectionAreaChange : _ref$onSelectionAreaC,
|
79
|
+
renderRowHeader = _ref.renderRowHeader,
|
80
|
+
renderRowHeaderDirection = _ref.renderRowHeaderDirection,
|
79
81
|
selectAllAriaLabel = _ref.selectAllAriaLabel,
|
80
82
|
spreadsheetAriaLabel = _ref.spreadsheetAriaLabel,
|
81
83
|
theme = _ref.theme,
|
@@ -147,13 +149,15 @@ exports.DataSpreadsheet = /*#__PURE__*/React__default["default"].forwardRef(func
|
|
147
149
|
setActiveCellContent = _useState26[1];
|
148
150
|
var activeCellRef = React.useRef();
|
149
151
|
var cellEditorRulerRef = React.useRef();
|
152
|
+
var hasCustomRowHeader = typeof renderRowHeader === 'function';
|
153
|
+
var maxNumRowsCount = data.length.toString().length;
|
150
154
|
var defaultColumn = React.useMemo(function () {
|
151
155
|
return {
|
152
156
|
width: 150,
|
153
|
-
rowHeaderWidth: 64,
|
157
|
+
rowHeaderWidth: hasCustomRowHeader ? 40 + maxNumRowsCount * 8.56 : 64,
|
154
158
|
rowHeight: cellSizeValue
|
155
159
|
};
|
156
|
-
}, [cellSizeValue]);
|
160
|
+
}, [cellSizeValue, hasCustomRowHeader, maxNumRowsCount]);
|
157
161
|
var _useMultipleKeyTracki = useMultipleKeyTracking.useMultipleKeyTracking({
|
158
162
|
ref: multiKeyTrackingRef,
|
159
163
|
containerHasFocus: containerHasFocus,
|
@@ -663,7 +667,10 @@ exports.DataSpreadsheet = /*#__PURE__*/React__default["default"].forwardRef(func
|
|
663
667
|
headerGroups: headerGroups,
|
664
668
|
defaultColumn: defaultColumn,
|
665
669
|
getTableBodyProps: getTableBodyProps,
|
670
|
+
hasCustomRowHeader: hasCustomRowHeader,
|
666
671
|
onDataUpdate: onDataUpdate,
|
672
|
+
renderRowHeaderDirection: renderRowHeaderDirection,
|
673
|
+
renderRowHeader: renderRowHeader,
|
667
674
|
onActiveCellChange: onActiveCellChange,
|
668
675
|
onSelectionAreaChange: onSelectionAreaChange,
|
669
676
|
prepareRow: prepareRow,
|
@@ -762,6 +769,10 @@ exports.DataSpreadsheet.propTypes = {
|
|
762
769
|
* Sets the number of empty rows to be created when there is no data provided
|
763
770
|
*/
|
764
771
|
defaultEmptyRowCount: index["default"].number,
|
772
|
+
/**
|
773
|
+
* Check if spreadsheet is using custom row header component attached
|
774
|
+
*/
|
775
|
+
hasCustomRowHeader: index["default"].bool,
|
765
776
|
/**
|
766
777
|
* The spreadsheet id
|
767
778
|
*/
|
@@ -778,6 +789,14 @@ exports.DataSpreadsheet.propTypes = {
|
|
778
789
|
* The event handler that is called when the selection area values change
|
779
790
|
*/
|
780
791
|
onSelectionAreaChange: index["default"].func,
|
792
|
+
/**
|
793
|
+
* Component next to numbering rows
|
794
|
+
*/
|
795
|
+
renderRowHeader: index["default"].func,
|
796
|
+
/**
|
797
|
+
* Component next to numbering rows
|
798
|
+
*/
|
799
|
+
renderRowHeaderDirection: index["default"].oneOf(['left', 'right']),
|
781
800
|
/**
|
782
801
|
* The aria label applied to the Select all button
|
783
802
|
*/
|
@@ -52,6 +52,18 @@ interface DataSpreadsheetBodyProps {
|
|
52
52
|
* The event handler that is called when the active cell changes
|
53
53
|
*/
|
54
54
|
onActiveCellChange?: () => void;
|
55
|
+
/**
|
56
|
+
* Check if user is using custom component
|
57
|
+
*/
|
58
|
+
hasCustomRowHeader?: boolean;
|
59
|
+
/**
|
60
|
+
* Component next to numbering rows
|
61
|
+
*/
|
62
|
+
renderRowHeader?: (index: number) => any[];
|
63
|
+
/**
|
64
|
+
* Component next to numbering rows
|
65
|
+
*/
|
66
|
+
renderRowHeaderDirection?: string;
|
55
67
|
/**
|
56
68
|
* The event handler that is called to set the rows for the empty spreadsheet
|
57
69
|
*/
|
@@ -44,6 +44,9 @@ var DataSpreadsheetBody = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
44
44
|
headerGroups = _ref.headerGroups,
|
45
45
|
id = _ref.id,
|
46
46
|
onDataUpdate = _ref.onDataUpdate,
|
47
|
+
renderRowHeader = _ref.renderRowHeader,
|
48
|
+
renderRowHeaderDirection = _ref.renderRowHeaderDirection,
|
49
|
+
hasCustomRowHeader = _ref.hasCustomRowHeader,
|
47
50
|
prepareRow = _ref.prepareRow,
|
48
51
|
rows = _ref.rows,
|
49
52
|
selectionAreaData = _ref.selectionAreaData,
|
@@ -147,7 +150,7 @@ var DataSpreadsheetBody = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
147
150
|
return;
|
148
151
|
});
|
149
152
|
}
|
150
|
-
}, [selectionAreas, setSelectionAreas, defaultColumn, onSelectionAreaChange, setSelectionAreaData, ref, activeCellCoordinates, setActiveCellInsideSelectionArea, visibleColumns]);
|
153
|
+
}, [selectionAreas, setSelectionAreas, defaultColumn, onSelectionAreaChange, setSelectionAreaData, ref, activeCellCoordinates, setActiveCellInsideSelectionArea, visibleColumns, hasCustomRowHeader]);
|
151
154
|
var populateSelectionAreaCellData = function populateSelectionAreaCellData(_ref2) {
|
152
155
|
var rowStart = _ref2.rowStart,
|
153
156
|
rowEnd = _ref2.rowEnd,
|
@@ -221,7 +224,7 @@ var DataSpreadsheetBody = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
221
224
|
});
|
222
225
|
}
|
223
226
|
}
|
224
|
-
}, [defaultColumn, ref, activeCellCoordinates, previousState === null || previousState === void 0 ? void 0 : previousState.rowHeight, selectionAreas, setActiveCellInsideSelectionArea, setSelectionAreas, visibleColumns]);
|
227
|
+
}, [defaultColumn, ref, activeCellCoordinates, previousState === null || previousState === void 0 ? void 0 : previousState.rowHeight, selectionAreas, setActiveCellInsideSelectionArea, setSelectionAreas, visibleColumns, hasCustomRowHeader]);
|
225
228
|
|
226
229
|
//this method will check for any duplicate selection area and remove.
|
227
230
|
//same selections are those have the same height, width, top, left styles. These inline styles are being set in createCellSelection util.
|
@@ -347,11 +350,12 @@ var DataSpreadsheetBody = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
347
350
|
"data-column-index": "header",
|
348
351
|
type: "button",
|
349
352
|
onClick: handleRowHeaderClickEvent(index),
|
350
|
-
className: cx__default["default"]("".concat(blockClass, "__td"), "".concat(blockClass, "__td-th"), "".concat(blockClass, "--interactive-cell-element"), _rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty({}, "".concat(blockClass, "__td-th--active-header"), (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === index || checkActiveHeaderCell.checkActiveHeaderCell(index, selectionAreas, 'row')), "".concat(blockClass, "__td-th--selected-header"), checkSelectedHeaderCell.checkSelectedHeaderCell(index, selectionAreas, 'row', columns))),
|
353
|
+
className: cx__default["default"]("".concat(blockClass, "__td"), "".concat(blockClass, "__td-th"), "".concat(blockClass, "--interactive-cell-element"), _rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty({}, "".concat(blockClass, "__td_custom"), hasCustomRowHeader ? true : false), "".concat(blockClass, "__td-th--active-header"), !hasCustomRowHeader && ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === index || checkActiveHeaderCell.checkActiveHeaderCell(index, selectionAreas, 'row'))), "".concat(blockClass, "__td-th--selected-header"), !hasCustomRowHeader && checkSelectedHeaderCell.checkSelectedHeaderCell(index, selectionAreas, 'row', columns))),
|
351
354
|
style: {
|
352
|
-
width: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth
|
355
|
+
width: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth,
|
356
|
+
flexDirection: hasCustomRowHeader ? renderRowHeaderDirection === 'Left' ? 'row-reverse' : row : undefined
|
353
357
|
}
|
354
|
-
}, index + 1)), row.cells.map(function (cell, index) {
|
358
|
+
}, index + 1, hasCustomRowHeader && typeof renderRowHeader === 'function' && renderRowHeader(index))), row.cells.map(function (cell, index) {
|
355
359
|
var _cell$column;
|
356
360
|
var cellProps = propsHelper.prepareProps(cell.getCellProps(), 'key');
|
357
361
|
return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
|
@@ -376,7 +380,7 @@ var DataSpreadsheetBody = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
376
380
|
}, cell.render('Cell')));
|
377
381
|
}));
|
378
382
|
}
|
379
|
-
}, [prepareRow, rows, activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row, selectionAreas, handleRowHeaderClickEvent, handleBodyCellClickEvent, handleBodyCellHoverEvent, defaultColumn, columns]);
|
383
|
+
}, [prepareRow, renderRowHeader, renderRowHeaderDirection, rows, hasCustomRowHeader, activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row, selectionAreas, handleRowHeaderClickEvent, handleBodyCellClickEvent, handleBodyCellHoverEvent, defaultColumn, columns]);
|
380
384
|
var spreadsheetBodyRef = React.useRef();
|
381
385
|
return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
|
382
386
|
ref: spreadsheetBodyRef,
|
@@ -442,6 +446,10 @@ DataSpreadsheetBody.propTypes = {
|
|
442
446
|
*/
|
443
447
|
/**@ts-ignore */
|
444
448
|
getTableBodyProps: index["default"].func,
|
449
|
+
/**
|
450
|
+
* Check if spreadsheet is using custom row header component attached
|
451
|
+
*/
|
452
|
+
hasCustomRowHeader: index["default"].bool,
|
445
453
|
/**
|
446
454
|
* Headers provided from useTable hook
|
447
455
|
*/
|
@@ -466,6 +474,14 @@ DataSpreadsheetBody.propTypes = {
|
|
466
474
|
* Prepare row function from react-table
|
467
475
|
*/
|
468
476
|
prepareRow: index["default"].func,
|
477
|
+
/**
|
478
|
+
* Component next to numbering rows
|
479
|
+
*/
|
480
|
+
renderRowHeader: index["default"].func,
|
481
|
+
/**
|
482
|
+
* Component next to numbering rows
|
483
|
+
*/
|
484
|
+
renderRowHeaderDirection: index["default"].string,
|
469
485
|
/**
|
470
486
|
* All of the spreadsheet row data
|
471
487
|
*/
|
@@ -184,6 +184,9 @@ var DataSpreadsheetHeader = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
184
184
|
"data-row-index": "header",
|
185
185
|
"data-column-index": "header",
|
186
186
|
type: "button",
|
187
|
+
style: {
|
188
|
+
width: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth
|
189
|
+
},
|
187
190
|
tabIndex: -1,
|
188
191
|
"aria-label": selectAllAriaLabel,
|
189
192
|
onClick: handleSelectAllClick,
|
@@ -0,0 +1,94 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright IBM Corp. 2020, 2024
|
3
|
+
*
|
4
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
6
|
+
*/
|
7
|
+
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
11
|
+
|
12
|
+
var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
|
13
|
+
var React = require('react');
|
14
|
+
var index = require('../../node_modules/prop-types/index.js');
|
15
|
+
var cx = require('classnames');
|
16
|
+
var devtools = require('../../global/js/utils/devtools.js');
|
17
|
+
var settings = require('../../settings.js');
|
18
|
+
var react = require('@carbon/react');
|
19
|
+
var icons = require('@carbon/react/icons');
|
20
|
+
|
21
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
22
|
+
|
23
|
+
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
24
|
+
var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
|
25
|
+
|
26
|
+
var _CircleStroke, _InlineLoading, _ErrorOutline, _CheckmarkOutline;
|
27
|
+
var _excluded = ["className", "description", "errorMessage", "status"];
|
28
|
+
|
29
|
+
// The block part of our conventional BEM class names (blockClass__E--M).
|
30
|
+
var blockClass = "".concat(settings.pkg.prefix, "--status-indicator-step");
|
31
|
+
var componentName = 'StatusIndicatorStep';
|
32
|
+
var defaults = {
|
33
|
+
status: 'inactive'
|
34
|
+
};
|
35
|
+
|
36
|
+
/**
|
37
|
+
* An icon/description pair that describes one step of the `StatusIndicator`.
|
38
|
+
*/
|
39
|
+
exports.StatusIndicatorStep = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
|
40
|
+
var className = _ref.className,
|
41
|
+
description = _ref.description,
|
42
|
+
errorMessage = _ref.errorMessage,
|
43
|
+
_ref$status = _ref.status,
|
44
|
+
status = _ref$status === void 0 ? defaults.status : _ref$status,
|
45
|
+
rest = _rollupPluginBabelHelpers.objectWithoutProperties(_ref, _excluded);
|
46
|
+
return /*#__PURE__*/React__default["default"].createElement("li", _rollupPluginBabelHelpers["extends"]({}, rest, {
|
47
|
+
className: cx__default["default"](blockClass, className, "".concat(blockClass, "--").concat(status)),
|
48
|
+
ref: ref
|
49
|
+
}, devtools.getDevtoolsProps(componentName)), /*#__PURE__*/React__default["default"].createElement("div", {
|
50
|
+
className: "".concat(blockClass, "__details")
|
51
|
+
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
52
|
+
className: "".concat(blockClass, "__icon")
|
53
|
+
}, status === 'inactive' && (_CircleStroke || (_CircleStroke = /*#__PURE__*/React__default["default"].createElement(icons.CircleStroke, {
|
54
|
+
size: 16,
|
55
|
+
viewBox: "1 1 14 14"
|
56
|
+
}))), status === 'active' && (_InlineLoading || (_InlineLoading = /*#__PURE__*/React__default["default"].createElement(react.InlineLoading, null))), status === 'error' && (_ErrorOutline || (_ErrorOutline = /*#__PURE__*/React__default["default"].createElement(icons.ErrorOutline, {
|
57
|
+
size: 16
|
58
|
+
}))), status === 'finished' && (_CheckmarkOutline || (_CheckmarkOutline = /*#__PURE__*/React__default["default"].createElement(icons.CheckmarkOutline, {
|
59
|
+
size: 16
|
60
|
+
})))), /*#__PURE__*/React__default["default"].createElement("div", {
|
61
|
+
className: "".concat(blockClass, "__text")
|
62
|
+
}, description)), status === 'error' && errorMessage && /*#__PURE__*/React__default["default"].createElement("div", {
|
63
|
+
className: "".concat(blockClass, "__error-message")
|
64
|
+
}, errorMessage));
|
65
|
+
});
|
66
|
+
|
67
|
+
// Return a placeholder if not released and not enabled by feature flag
|
68
|
+
exports.StatusIndicatorStep = settings.pkg.checkComponentEnabled(exports.StatusIndicatorStep, componentName);
|
69
|
+
|
70
|
+
// The display name of the component, used by React. Note that displayName
|
71
|
+
// is used in preference to relying on function.name.
|
72
|
+
exports.StatusIndicatorStep.displayName = componentName;
|
73
|
+
|
74
|
+
// The types and DocGen commentary for the component props,
|
75
|
+
// in alphabetical order (for consistency).
|
76
|
+
// See https://www.npmjs.com/package/prop-types#usage.
|
77
|
+
exports.StatusIndicatorStep.propTypes = {
|
78
|
+
/**
|
79
|
+
* Provide an optional class to be applied to the containing node.
|
80
|
+
*/
|
81
|
+
className: index["default"].string,
|
82
|
+
/**
|
83
|
+
* The text associated with the icon.
|
84
|
+
*/
|
85
|
+
description: index["default"].string.isRequired,
|
86
|
+
/**
|
87
|
+
* This message will appear below the description if the `status` is "error".
|
88
|
+
*/
|
89
|
+
errorMessage: index["default"].string,
|
90
|
+
/**
|
91
|
+
* Each `status` represents a different icon..
|
92
|
+
*/
|
93
|
+
status: index["default"].oneOf(['inactive', 'active', 'error', 'finished']).isRequired
|
94
|
+
};
|
@@ -50,7 +50,6 @@ export { Nav } from "./Nav";
|
|
50
50
|
export { StringFormatter } from "./StringFormatter";
|
51
51
|
export { UserAvatar } from "./UserAvatar";
|
52
52
|
export { ScrollGradient } from "./ScrollGradient";
|
53
|
-
export { StatusIndicator } from "./StatusIndicator";
|
54
53
|
export { TagOverflow } from "./TagOverflow";
|
55
54
|
export { ActionBar } from "./ActionBar";
|
56
55
|
export { ConditionBuilder } from "./ConditionBuilder";
|
@@ -68,5 +67,6 @@ export { EditTearsheet, EditTearsheetForm } from "./EditTearsheet";
|
|
68
67
|
export { Guidebanner, GuidebannerElement, GuidebannerElementButton, GuidebannerElementLink } from "./Guidebanner";
|
69
68
|
export { InlineTip, InlineTipButton, InlineTipLink } from "./InlineTip";
|
70
69
|
export { DescriptionList, DescriptionListBody, DescriptionListCell, DescriptionListRow } from "./DescriptionList";
|
70
|
+
export { StatusIndicator, StatusIndicatorStep } from "./StatusIndicator";
|
71
71
|
export { FilterPanel, FilterPanelAccordion, FilterPanelAccordionItem, FilterPanelCheckbox, FilterPanelCheckboxWithOverflow, FilterPanelGroup, FilterPanelLabel, FilterPanelSearch } from "./FilterPanel";
|
72
72
|
export { FeatureFlags as unstable_FeatureFlags, useFeatureFlag as unstable_useFeatureFlag, useFeatureFlags as unstable_useFeatureFlags } from "./FeatureFlags";
|
package/lib/index.js
CHANGED
@@ -126,6 +126,7 @@ var StringFormatter = require('./components/StringFormatter/StringFormatter.js')
|
|
126
126
|
var UserAvatar = require('./components/UserAvatar/UserAvatar.js');
|
127
127
|
var ScrollGradient = require('./components/ScrollGradient/ScrollGradient.js');
|
128
128
|
var StatusIndicator = require('./components/StatusIndicator/StatusIndicator.js');
|
129
|
+
var StatusIndicatorStep = require('./components/StatusIndicator/StatusIndicatorStep.js');
|
129
130
|
var TagOverflow = require('./components/TagOverflow/TagOverflow.js');
|
130
131
|
var ActionBar = require('./components/ActionBar/ActionBar.js');
|
131
132
|
var FilterPanel = require('./components/FilterPanel/FilterPanel.js');
|
@@ -535,6 +536,10 @@ Object.defineProperty(exports, 'StatusIndicator', {
|
|
535
536
|
enumerable: true,
|
536
537
|
get: function () { return StatusIndicator.StatusIndicator; }
|
537
538
|
});
|
539
|
+
Object.defineProperty(exports, 'StatusIndicatorStep', {
|
540
|
+
enumerable: true,
|
541
|
+
get: function () { return StatusIndicatorStep.StatusIndicatorStep; }
|
542
|
+
});
|
538
543
|
Object.defineProperty(exports, 'TagOverflow', {
|
539
544
|
enumerable: true,
|
540
545
|
get: function () { return TagOverflow.TagOverflow; }
|