@carbon/ibm-products 1.16.0 → 1.17.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 (59) hide show
  1. package/css/index-full-carbon.css +32 -7
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +6 -3
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +9 -3
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +4 -1
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +32 -7
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +6 -3
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +32 -7
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +6 -3
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/DataSpreadsheet/DataSpreadsheet.js +1 -0
  18. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +6 -2
  19. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +5 -2
  20. package/es/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +57 -12
  21. package/es/components/DataSpreadsheet/utils/checkSelectedHeaderCell.js +16 -0
  22. package/es/components/DataSpreadsheet/utils/createCellSelectionArea.js +10 -5
  23. package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +6 -2
  24. package/es/components/Datagrid/Datagrid/Datagrid.js +24 -12
  25. package/es/components/Datagrid/Datagrid/DatagridHead.js +8 -16
  26. package/es/components/Datagrid/Datagrid/DatagridHeaderRow.js +10 -10
  27. package/es/components/Datagrid/Datagrid/index.js +6 -7
  28. package/es/components/Datagrid/index.js +1 -1
  29. package/es/components/ExportModal/ExportModal.js +10 -5
  30. package/es/components/SidePanel/SidePanel.js +5 -1
  31. package/es/components/WebTerminal/WebTerminal.js +36 -11
  32. package/es/components/WebTerminal/WebTerminalContentWrapper.js +49 -0
  33. package/es/components/WebTerminal/index.js +2 -1
  34. package/es/components/index.js +1 -1
  35. package/es/global/js/package-settings.js +1 -0
  36. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +1 -0
  37. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +7 -2
  38. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +6 -2
  39. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +61 -11
  40. package/lib/components/DataSpreadsheet/utils/checkSelectedHeaderCell.js +26 -0
  41. package/lib/components/DataSpreadsheet/utils/createCellSelectionArea.js +10 -5
  42. package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +6 -2
  43. package/lib/components/Datagrid/Datagrid/Datagrid.js +25 -8
  44. package/lib/components/Datagrid/Datagrid/DatagridHead.js +8 -16
  45. package/lib/components/Datagrid/Datagrid/DatagridHeaderRow.js +10 -10
  46. package/lib/components/Datagrid/Datagrid/index.js +3 -5
  47. package/lib/components/Datagrid/index.js +2 -2
  48. package/lib/components/ExportModal/ExportModal.js +9 -4
  49. package/lib/components/SidePanel/SidePanel.js +5 -1
  50. package/lib/components/WebTerminal/WebTerminal.js +36 -10
  51. package/lib/components/WebTerminal/WebTerminalContentWrapper.js +58 -0
  52. package/lib/components/WebTerminal/index.js +9 -1
  53. package/lib/components/index.js +6 -0
  54. package/lib/global/js/package-settings.js +1 -0
  55. package/package.json +9 -9
  56. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +10 -0
  57. package/scss/components/SidePanel/_side-panel.scss +22 -3
  58. package/scss/components/WebTerminal/_storybook-styles.scss +5 -0
  59. package/scss/components/WebTerminal/_web-terminal.scss +14 -4
@@ -1,11 +1,14 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
1
2
  // /**
2
3
  // * Copyright IBM Corp. 2022, 2022
3
4
  // *
4
5
  // * This source code is licensed under the Apache-2.0 license found in the
5
6
  // * LICENSE file in the root directory of this source tree.
6
7
  // */
7
- import { useEffect } from 'react';
8
+ import { useEffect, useState } from 'react';
8
9
  import { px } from '@carbon/layout';
10
+ import { pkg } from '../../../settings';
11
+ import { usePreviousValue } from '../../../global/js/hooks';
9
12
  export var useSpreadsheetEdit = function useSpreadsheetEdit(_ref) {
10
13
  var isEditing = _ref.isEditing,
11
14
  rows = _ref.rows,
@@ -15,8 +18,27 @@ export var useSpreadsheetEdit = function useSpreadsheetEdit(_ref) {
15
18
  cellEditorRulerRef = _ref.cellEditorRulerRef,
16
19
  columns = _ref.columns,
17
20
  defaultColumn = _ref.defaultColumn,
18
- cellEditorValue = _ref.cellEditorValue;
21
+ cellEditorValue = _ref.cellEditorValue,
22
+ _ref$blockClass = _ref.blockClass,
23
+ blockClass = _ref$blockClass === void 0 ? "".concat(pkg.prefix, "--data-spreadsheet") : _ref$blockClass;
24
+
25
+ var _useState = useState(null),
26
+ _useState2 = _slicedToArray(_useState, 2),
27
+ nextIndex = _useState2[0],
28
+ setNextIndex = _useState2[1];
29
+
30
+ var previousState = usePreviousValue({
31
+ nextIndex: nextIndex
32
+ });
33
+ useEffect(function () {
34
+ if (!(previousState !== null && previousState !== void 0 && previousState.nextIndex)) {
35
+ setNextIndex(activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column);
36
+ }
37
+ }, [previousState === null || previousState === void 0 ? void 0 : previousState.nextIndex, activeCellCoordinates]);
19
38
  useEffect(function () {
39
+ var rulerWidth = cellEditorRulerRef.current.offsetWidth;
40
+ var cellEditorCurrentWidth = parseInt(cellEditorRef.current.style.width);
41
+
20
42
  if (isEditing) {
21
43
  var _rows$activeCellCoord, _cellProps$column, _cellEditorRef$curren;
22
44
 
@@ -26,25 +48,47 @@ export var useSpreadsheetEdit = function useSpreadsheetEdit(_ref) {
26
48
  cellEditorRef.current.style.left = activeCellLeftPosition;
27
49
  cellEditorRef.current.style.top = activeCellTopPosition;
28
50
  cellEditorRef.current.style.display = 'block';
29
- cellEditorRef.current.style.width = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.width;
30
51
  cellEditorRef.current.style.height = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.height;
31
52
  cellEditorRef.current.style.paddingTop = "".concat((parseInt(activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.height) - 16) / 2 - 1, "px"); // calculate paddingTop based on cellHeight which could be variable depending on the cellSize prop
32
53
 
33
54
  cellEditorRef.current.style.textAlign = (cellProps === null || cellProps === void 0 ? void 0 : (_cellProps$column = cellProps.column) === null || _cellProps$column === void 0 ? void 0 : _cellProps$column.placement) === 'right' ? 'right' : 'left';
34
55
  (_cellEditorRef$curren = cellEditorRef.current) === null || _cellEditorRef$curren === void 0 ? void 0 : _cellEditorRef$curren.focus();
35
- var rulerWidth = cellEditorRulerRef.current.offsetWidth;
36
- var cellWidth = activeCellRef.current.offsetWidth;
37
56
 
38
- if (rulerWidth >= cellWidth) {
39
- var widthMultiplier = Math.floor(rulerWidth / cellWidth) + 1;
40
- var startingColumnPosition = activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column;
57
+ if (rulerWidth < cellEditorCurrentWidth) {
58
+ var _columns$nextIndex;
59
+
60
+ var currentColumnWidth = ((_columns$nextIndex = columns[nextIndex]) === null || _columns$nextIndex === void 0 ? void 0 : _columns$nextIndex.width) || (defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.width); // If the contents of the cell editor is deleted past the point of the next column
61
+
62
+ if (rulerWidth < cellEditorCurrentWidth - currentColumnWidth) {
63
+ cellEditorRef.current.style.width = px(parseInt(cellEditorRef.current.style.width) - currentColumnWidth);
64
+ setNextIndex(function (prev) {
65
+ if (prev === 0) {
66
+ return prev;
67
+ }
68
+
69
+ return prev - 1;
70
+ });
71
+ } // Decrease cell editor width by increment of current column width
72
+
73
+ }
74
+
75
+ if (rulerWidth >= cellEditorCurrentWidth) {
76
+ var _columns;
77
+
78
+ setNextIndex(function (prev) {
79
+ if (prev === columns.length - 1) {
80
+ return prev;
81
+ }
82
+
83
+ return prev + 1;
84
+ });
85
+ var onLastColumnIndex = nextIndex + 1 === columns.length;
86
+ var nextColumnWidth = onLastColumnIndex ? 0 : ((_columns = columns[nextIndex + 1]) === null || _columns === void 0 ? void 0 : _columns.width) || (defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.width);
41
87
  var startingRowPosition = activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row;
42
- var totalColumns = columns.length;
43
88
  var totalRows = rows.length;
44
- var totalMultiplierPossible = totalColumns - startingColumnPosition;
45
89
  var totalCellEditorMaxHeight = (totalRows - startingRowPosition) * defaultColumn.rowHeight;
46
90
  cellEditorRef.current.style.maxHeight = px(totalCellEditorMaxHeight);
47
- cellEditorRef.current.style.width = px(cellWidth * (widthMultiplier <= totalMultiplierPossible ? widthMultiplier : totalMultiplierPossible));
91
+ cellEditorRef.current.style.width = px(nextColumnWidth + cellEditorCurrentWidth);
48
92
  cellEditorRef.current.style.height = px(cellEditorRef.current.scrollHeight); // adds dynamic height to cell editor
49
93
  // Cell editor has reached max height, we need to add the scrolling back.
50
94
  // We also need to subtract 1 to account for the fact that the cell editor
@@ -63,6 +107,7 @@ export var useSpreadsheetEdit = function useSpreadsheetEdit(_ref) {
63
107
  cellEditorRef.current.style.display = 'none';
64
108
  cellEditorRef.current.blur();
65
109
  activeCellRef.current.focus();
110
+ setNextIndex(activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column);
66
111
  }
67
- }, [isEditing, activeCellCoordinates, rows, cellEditorValue, columns.length, defaultColumn, cellEditorValue, activeCellRef, cellEditorRef, cellEditorRulerRef]);
112
+ }, [isEditing, activeCellCoordinates, rows, cellEditorValue, columns.length, defaultColumn, activeCellRef, cellEditorRef, cellEditorRulerRef, columns, blockClass, previousState === null || previousState === void 0 ? void 0 : previousState.cellEditorValue, nextIndex]);
68
113
  };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Copyright IBM Corp. 2022, 2022
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
+ import { deepCloneObject } from '../../../global/js/utils/deepCloneObject';
8
+ export var checkSelectedHeaderCell = function checkSelectedHeaderCell(headerIndex, selectionAreas, headerType) {
9
+ var areasCloned = deepCloneObject(selectionAreas);
10
+ var isSelectedHeader = areasCloned.some(function (area) {
11
+ var _area$header, _area$header2;
12
+
13
+ return (area === null || area === void 0 ? void 0 : (_area$header = area.header) === null || _area$header === void 0 ? void 0 : _area$header.type) === headerType && headerIndex === (area === null || area === void 0 ? void 0 : (_area$header2 = area.header) === null || _area$header2 === void 0 ? void 0 : _area$header2.index);
14
+ });
15
+ return isSelectedHeader;
16
+ };
@@ -11,6 +11,7 @@ export var createCellSelectionArea = function createCellSelectionArea(_ref) {
11
11
  var ref = _ref.ref,
12
12
  area = _ref.area,
13
13
  blockClass = _ref.blockClass,
14
+ columns = _ref.columns,
14
15
  defaultColumn = _ref.defaultColumn,
15
16
  selectionAreas = _ref.selectionAreas,
16
17
  setSelectionAreas = _ref.setSelectionAreas,
@@ -28,24 +29,28 @@ export var createCellSelectionArea = function createCellSelectionArea(_ref) {
28
29
  activeCellElement.setAttribute('data-selection-id', area.matcher);
29
30
  }
30
31
 
31
- var point1Element = document.querySelector("[data-row-index=\"".concat(area.point1.row, "\"][data-column-index=\"").concat(area.point1.column, "\"]")) || document.querySelector(".".concat(blockClass, "__body--td")); // if we can't find the point1 element (this can happen in the case where a virtualized row is not present anymore in the DOM), we get the default height/width of the first body cell we find
32
+ var selectionAreaVariableWidth = 0;
33
+ columns.forEach(function (item, index) {
34
+ if (index >= lowestColumnIndex && index <= greatestColumnIndex) {
35
+ selectionAreaVariableWidth += (item === null || item === void 0 ? void 0 : item.width) || (defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.width);
36
+ }
37
+ });
38
+ var point1Element = document.querySelector("[data-row-index=\"".concat(area.point1.row, "\"][data-column-index=\"").concat(area.point1.column, "\"]")) || document.querySelector(".".concat(blockClass, "__body--td")); // if we can't find the point1 element (this can happen in the case where a virtualized row is not present anymore in the DOM), we get the default height of the first body cell we find
32
39
 
33
- var selectionAreaCellWidth = point1Element.offsetWidth;
34
40
  var selectionAreaCellHeight = point1Element.offsetHeight;
35
- var selectionAreaTotalWidth = selectionAreaCellWidth * (greatestColumnIndex - lowestColumnIndex + 1);
36
41
  var selectionAreaTotalHeight = selectionAreaCellHeight * (greatestRowIndex - lowestRowIndex + 1);
37
42
  var bodyContainer = document.querySelector(".".concat(blockClass, "__list--container")).firstElementChild;
38
43
  var placementElement = bodyContainer.querySelector("[data-row-index=\"".concat(lowestRowIndex, "\"][data-column-index=\"").concat(lowestColumnIndex, "\"]"));
39
44
  var relativePosition = {
40
45
  top: placementElement ? placementElement.getBoundingClientRect().top - bodyContainer.getBoundingClientRect().top : lowestRowIndex === 0 ? 0 : selectionAreaCellHeight * lowestRowIndex,
41
46
  // calculate top value here if virtualized row is not in DOM
42
- left: placementElement ? placementElement.getBoundingClientRect().left - bodyContainer.getBoundingClientRect().left : lowestColumnIndex === 0 ? 0 + (defaultColumn.rowHeaderWidth - 4) : selectionAreaCellWidth * lowestColumnIndex + (defaultColumn.rowHeaderWidth - 4) // calculate left value here if virtualized row is not in DOM, accounting for row header cell width (including borders)
47
+ left: placementElement ? placementElement.getBoundingClientRect().left - bodyContainer.getBoundingClientRect().left : lowestColumnIndex === 0 ? 0 + (defaultColumn.rowHeaderWidth - 4) : defaultColumn.width * lowestColumnIndex + (defaultColumn.rowHeaderWidth - 4) // calculate left value here if virtualized row is not in DOM, accounting for row header cell width (including borders)
43
48
 
44
49
  };
45
50
  var selectionAreaElement = document.querySelector("[data-matcher-id=\"".concat(area.matcher, "\"]")) || document.createElement('div');
46
51
  selectionAreaElement.classList.add("".concat(blockClass, "__selection-area--element"));
47
52
  selectionAreaElement.setAttribute('data-matcher-id', area.matcher);
48
- selectionAreaElement.style.width = px(selectionAreaTotalWidth);
53
+ selectionAreaElement.style.width = px(selectionAreaVariableWidth);
49
54
  selectionAreaElement.style.height = px(selectionAreaTotalHeight);
50
55
  selectionAreaElement.style.left = px(relativePosition.left);
51
56
  selectionAreaElement.style.top = px(relativePosition.top);
@@ -63,10 +63,14 @@ export var handleHeaderCellSelection = function handleHeaderCellSelection(_ref)
63
63
 
64
64
  if (isHoldingCommandKey) {
65
65
  var selectionsFromHeaderCell = selectionsClone.filter(function (item) {
66
- return item.header.type;
66
+ var _item$header;
67
+
68
+ return (_item$header = item.header) === null || _item$header === void 0 ? void 0 : _item$header.type;
67
69
  });
68
70
  var previouslyCreatedHeaderSelection = selectionsFromHeaderCell.filter(function (item) {
69
- return item.header.type === type;
71
+ var _item$header2;
72
+
73
+ return ((_item$header2 = item.header) === null || _item$header2 === void 0 ? void 0 : _item$header2.type) === type;
70
74
  });
71
75
  var isHeaderPartOfPreviousSelection = checkActiveHeaderCell(index, previouslyCreatedHeaderSelection, type); // Prevents row/column header selections from being created multiple times
72
76
 
@@ -1,16 +1,16 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
- var _excluded = ["getTableProps", "withVirtualScroll", "DatagridPagination", "isFetching", "tableId", "CustomizeColumnsModal", "leftPanel", "fullHeightDatagrid", "verticalAlign", "variableRowHeight", "className"];
4
+ var _excluded = ["datagridState"];
5
5
 
6
- /*
7
- * Licensed Materials - Property of IBM
8
- * 5724-Q36
9
- * (c) Copyright IBM Corp. 2020 - 2021
10
- * US Government Users Restricted Rights - Use, duplication or disclosure
11
- * restricted by GSA ADP Schedule Contract with IBM Corp.
6
+ /**
7
+ * Copyright IBM Corp. 2020, 2022
8
+ *
9
+ * This source code is licensed under the Apache-2.0 license found in the
10
+ * LICENSE file in the root directory of this source tree.
12
11
  */
13
12
  import React from 'react';
13
+ import PropTypes from 'prop-types';
14
14
  import { DataTable } from 'carbon-components-react';
15
15
  import cx from 'classnames';
16
16
  import DatagridHead from './DatagridHead';
@@ -18,13 +18,22 @@ import DatagridBody from './DatagridBody';
18
18
  import DatagridToolbar from './DatagridToolbar';
19
19
  import { getDevtoolsProps } from '../../../global/js/utils/devtools';
20
20
  import { pkg } from '../../../settings';
21
+ import pconsole from '../../../global/js/utils/pconsole';
21
22
  var blockClass = "".concat(pkg.prefix, "--datagrid");
22
23
  var componentName = 'Datagrid';
23
24
  var TableContainer = DataTable.TableContainer,
24
25
  Table = DataTable.Table;
25
- var Datagrid = /*#__PURE__*/React.forwardRef(function (datagridState, ref) {
26
+ export var Datagrid = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
26
27
  var _getTableProps;
27
28
 
29
+ var datagridState = _ref.datagridState,
30
+ rest = _objectWithoutProperties(_ref, _excluded);
31
+
32
+ if (!datagridState) {
33
+ pconsole.warn('Datagrid was not passed datagridState which is required to render this component.');
34
+ return null;
35
+ }
36
+
28
37
  var _datagridState$getTab = datagridState.getTableProps,
29
38
  getTableProps = _datagridState$getTab === void 0 ? function () {} : _datagridState$getTab,
30
39
  withVirtualScroll = datagridState.withVirtualScroll,
@@ -37,9 +46,7 @@ var Datagrid = /*#__PURE__*/React.forwardRef(function (datagridState, ref) {
37
46
  _datagridState$vertic = datagridState.verticalAlign,
38
47
  verticalAlign = _datagridState$vertic === void 0 ? 'center' : _datagridState$vertic,
39
48
  variableRowHeight = datagridState.variableRowHeight,
40
- className = datagridState.className,
41
- rest = _objectWithoutProperties(datagridState, _excluded);
42
-
49
+ className = datagridState.className;
43
50
  var rows = DatagridPagination && datagridState.page || datagridState.rows;
44
51
  var dataGrid = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(TableContainer, {
45
52
  className: cx("".concat(blockClass, "__grid-container"), withVirtualScroll || fullHeightDatagrid ? "".concat(blockClass, "__full-height") : '')
@@ -67,4 +74,9 @@ Datagrid = pkg.checkComponentEnabled(Datagrid, componentName); // The display na
67
74
  // is used in preference to relying on function.name.
68
75
 
69
76
  Datagrid.displayName = componentName;
70
- export default Datagrid;
77
+ Datagrid.propTypes = {
78
+ /**
79
+ * The data grid state, much of it being supplied by the useDatagrid hook
80
+ */
81
+ datagridState: PropTypes.object.isRequired
82
+ };
@@ -1,11 +1,8 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
-
3
- /*
4
- * Licensed Materials - Property of IBM
5
- * 5724-Q36
6
- * (c) Copyright IBM Corp. 2020, 2021
7
- * US Government Users Restricted Rights - Use, duplication or disclosure
8
- * restricted by GSA ADP Schedule Contract with IBM Corp.
1
+ /**
2
+ * Copyright IBM Corp. 2020, 2022
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.
9
6
  */
10
7
  import React from 'react';
11
8
  import { DataTable } from 'carbon-components-react';
@@ -16,14 +13,9 @@ var DatagridHead = function DatagridHead(datagridState) {
16
13
  headerGroups = _datagridState$header === void 0 ? [] : _datagridState$header,
17
14
  headRef = datagridState.headRef,
18
15
  HeaderRow = datagridState.HeaderRow;
19
- return /*#__PURE__*/React.createElement(TableHead, null, headerGroups.map(function (headerGroup, index) {
20
- return (
21
- /*#__PURE__*/
22
- // doesn't support header grouping.
23
- React.createElement("div", _extends({}, headerGroup.getHeaderGroupProps(), {
24
- ref: headRef,
25
- key: "header_".concat(index)
26
- }), HeaderRow(datagridState))
16
+ return /*#__PURE__*/React.createElement(TableHead, null, headerGroups.map(function (headerGroup) {
17
+ return (// doesn't support header grouping.
18
+ HeaderRow(datagridState, headRef, headerGroup)
27
19
  );
28
20
  }));
29
21
  };
@@ -1,12 +1,11 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
 
4
- /*
5
- * Licensed Materials - Property of IBM
6
- * 5724-Q36
7
- * (c) Copyright IBM Corp. 2020, 2021
8
- * US Government Users Restricted Rights - Use, duplication or disclosure
9
- * restricted by GSA ADP Schedule Contract with IBM Corp.
4
+ /**
5
+ * Copyright IBM Corp. 2020, 2022
6
+ *
7
+ * This source code is licensed under the Apache-2.0 license found in the
8
+ * LICENSE file in the root directory of this source tree.
10
9
  */
11
10
  // @flow
12
11
  import React from 'react';
@@ -16,10 +15,11 @@ import { selectionColumnId } from '../common-column-ids';
16
15
  import { pkg } from '../../../settings';
17
16
  var blockClass = "".concat(pkg.prefix, "--datagrid");
18
17
 
19
- var HeaderRow = function HeaderRow(datagridState) {
20
- return /*#__PURE__*/React.createElement(TableRow, {
21
- className: "".concat(blockClass, "__head")
22
- }, datagridState.headers.filter(function (_ref) {
18
+ var HeaderRow = function HeaderRow(datagridState, headRef, headerGroup) {
19
+ return /*#__PURE__*/React.createElement(TableRow, _extends({}, headerGroup.getHeaderGroupProps(), {
20
+ className: cx("".concat(blockClass, "__head"), headerGroup.getHeaderGroupProps().className),
21
+ ref: headRef
22
+ }), datagridState.headers.filter(function (_ref) {
23
23
  var isVisible = _ref.isVisible;
24
24
  return isVisible;
25
25
  }).map(function (header) {
@@ -1,8 +1,7 @@
1
- /*
2
- * Licensed Materials - Property of IBM
3
- * 5724-Q36
4
- * (c) Copyright IBM Corp. 2020
5
- * US Government Users Restricted Rights - Use, duplication or disclosure
6
- * restricted by GSA ADP Schedule Contract with IBM Corp.
1
+ /**
2
+ * Copyright IBM Corp. 2020, 2022
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.
7
6
  */
8
- export { default } from './Datagrid';
7
+ export { Datagrid } from './Datagrid';
@@ -5,7 +5,7 @@
5
5
  * US Government Users Restricted Rights - Use, duplication or disclosure
6
6
  * restricted by GSA ADP Schedule Contract with IBM Corp.
7
7
  */
8
- export { default as Datagrid } from './Datagrid';
8
+ export { Datagrid } from './Datagrid';
9
9
  export { default as useDatagrid } from './useDatagrid';
10
10
  export { default as useInfiniteScroll } from './useInfiniteScroll';
11
11
  export { default as useNestedRows } from './useNestedRows';
@@ -14,7 +14,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
14
14
  // This source code is licensed under the Apache-2.0 license found in the
15
15
  // LICENSE file in the root directory of this source tree.
16
16
  //
17
- import React, { useState, useRef, forwardRef } from 'react';
17
+ import React, { useState, useRef, forwardRef, useEffect } from 'react';
18
18
  import { Button, ComposedModal, ModalHeader, ModalFooter, ModalBody, TextInput, RadioButton, RadioButtonGroup, FormGroup, Loading, PasswordInput } from 'carbon-components-react';
19
19
  import cx from 'classnames';
20
20
  import { ErrorFilled16, CheckmarkFilled16 } from '@carbon/icons-react';
@@ -30,8 +30,6 @@ var defaults = {
30
30
  validExtensions: Object.freeze([])
31
31
  };
32
32
  export var ExportModal = /*#__PURE__*/forwardRef(function (_ref, ref) {
33
- var _preformattedExtensio;
34
-
35
33
  var body = _ref.body,
36
34
  className = _ref.className,
37
35
  error = _ref.error,
@@ -60,7 +58,7 @@ export var ExportModal = /*#__PURE__*/forwardRef(function (_ref, ref) {
60
58
  validExtensions = _ref$validExtensions === void 0 ? defaults.validExtensions : _ref$validExtensions,
61
59
  rest = _objectWithoutProperties(_ref, _excluded);
62
60
 
63
- var _useState = useState(filename),
61
+ var _useState = useState(''),
64
62
  _useState2 = _slicedToArray(_useState, 2),
65
63
  name = _useState2[0],
66
64
  setName = _useState2[1];
@@ -71,11 +69,18 @@ export var ExportModal = /*#__PURE__*/forwardRef(function (_ref, ref) {
71
69
  setDirtyInput = _useState4[1]; // by default (if it exists) use the first extension in the extension array
72
70
 
73
71
 
74
- var _useState5 = useState(preformattedExtensions === null || preformattedExtensions === void 0 ? void 0 : (_preformattedExtensio = preformattedExtensions[0]) === null || _preformattedExtensio === void 0 ? void 0 : _preformattedExtensio.extension),
72
+ var _useState5 = useState(''),
75
73
  _useState6 = _slicedToArray(_useState5, 2),
76
74
  extension = _useState6[0],
77
75
  setExtension = _useState6[1];
78
76
 
77
+ useEffect(function () {
78
+ var _preformattedExtensio;
79
+
80
+ setName(filename);
81
+ setExtension(preformattedExtensions === null || preformattedExtensions === void 0 ? void 0 : (_preformattedExtensio = preformattedExtensions[0]) === null || _preformattedExtensio === void 0 ? void 0 : _preformattedExtensio.extension);
82
+ }, [filename, preformattedExtensions]);
83
+
79
84
  var onNameChangeHandler = function onNameChangeHandler(evt) {
80
85
  setName(evt.target.value);
81
86
  };
@@ -272,13 +272,17 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
272
272
 
273
273
  var actionToolbarElement = document.querySelector(".".concat(blockClass, "__action-toolbar"));
274
274
 
275
+ var _labelText = document.querySelector(".".concat(blockClass, "__label-text"));
276
+
275
277
  var _sidePanelSubtitleElementHeight = (_sidePanelSubtitleElement === null || _sidePanelSubtitleElement === void 0 ? void 0 : _sidePanelSubtitleElement.offsetHeight) || 0;
276
278
 
277
279
  var sidePanelActionBarElementHeight = (actionToolbarElement === null || actionToolbarElement === void 0 ? void 0 : actionToolbarElement.offsetHeight) || 0;
278
280
  var titleHeight = (_sidePanelTitleElement === null || _sidePanelTitleElement === void 0 ? void 0 : _sidePanelTitleElement.offsetHeight) + 24;
281
+ var labelHeight = (_labelText === null || _labelText === void 0 ? void 0 : _labelText.offsetHeight) || 0;
279
282
  _sidePanelOuter === null || _sidePanelOuter === void 0 ? void 0 : _sidePanelOuter.style.setProperty("--".concat(blockClass, "--title-text-height"), "".concat(titleHeight, "px"));
280
283
  _sidePanelOuter === null || _sidePanelOuter === void 0 ? void 0 : _sidePanelOuter.style.setProperty("--".concat(blockClass, "--subtitle-container-height"), "".concat(_sidePanelSubtitleElementHeight, "px"));
281
284
  _sidePanelOuter === null || _sidePanelOuter === void 0 ? void 0 : _sidePanelOuter.style.setProperty("--".concat(blockClass, "--action-bar-container-height"), "".concat(sidePanelActionBarElementHeight, "px"));
285
+ _sidePanelOuter === null || _sidePanelOuter === void 0 ? void 0 : _sidePanelOuter.style.setProperty("--".concat(blockClass, "--label-text-height"), "".concat(labelHeight, "px"));
282
286
  }
283
287
  }, [open, animateTitle, animationComplete, shouldRender, panelHeight, title, size, reducedMotion.matches]); // click outside functionality if `includeOverlay` prop is set
284
288
 
@@ -492,7 +496,7 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
492
496
  className: "".concat(blockClass, "__visually-hidden")
493
497
  }, "Focus sentinel"), !animateTitle && renderHeader(), /*#__PURE__*/React.createElement("div", {
494
498
  ref: sidePanelInnerRef,
495
- className: cx("".concat(blockClass, "__inner-content"), (_cx4 = {}, _defineProperty(_cx4, "".concat(blockClass, "__static-inner-content"), !animateTitle), _defineProperty(_cx4, "".concat(blockClass, "__inner-content-with-actions"), actions && actions.length), _cx4))
499
+ className: cx("".concat(blockClass, "__inner-content"), (_cx4 = {}, _defineProperty(_cx4, "".concat(blockClass, "__static-inner-content"), !animateTitle), _defineProperty(_cx4, "".concat(blockClass, "__static-inner-content-no-actions"), !animateTitle && !(actions !== null && actions !== void 0 && actions.length)), _defineProperty(_cx4, "".concat(blockClass, "__inner-content-with-actions"), actions && actions.length), _cx4))
496
500
  }, animateTitle && renderHeader(), /*#__PURE__*/React.createElement("div", {
497
501
  className: "".concat(blockClass, "__body-content")
498
502
  }, children), /*#__PURE__*/React.createElement(ActionSet, {
@@ -22,7 +22,8 @@ import cx from 'classnames';
22
22
  import { pkg } from '../../settings'; // Carbon and package components we use.
23
23
 
24
24
  import { Close16 as Close, Help16 as Help } from '@carbon/icons-react';
25
- import { Button, OverflowMenu, OverflowMenuItem } from 'carbon-components-react'; // The block part of our conventional BEM class names (blockClass__E--M).
25
+ import { Button, OverflowMenu, OverflowMenuItem } from 'carbon-components-react';
26
+ import { moderate02 } from '@carbon/motion'; // The block part of our conventional BEM class names (blockClass__E--M).
26
27
 
27
28
  var componentName = 'WebTerminal';
28
29
  var blockClass = "".concat(pkg.prefix, "--web-terminal"); // Default values for props
@@ -33,7 +34,7 @@ var defaults = {
33
34
  documentationLinksIconDescription: 'Show documentation links'
34
35
  };
35
36
  export var WebTerminal = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
36
- var _ref2;
37
+ var _ref3;
37
38
 
38
39
  var _ref$actions = _ref.actions,
39
40
  actions = _ref$actions === void 0 ? defaults.actions : _ref$actions,
@@ -53,6 +54,12 @@ export var WebTerminal = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
53
54
  shouldRender = _useState2[0],
54
55
  setRender = _useState2[1];
55
56
 
57
+ var _ref2 = window && window.matchMedia ? window.matchMedia('(prefers-reduced-motion: reduce)') : {
58
+ matches: true
59
+ },
60
+ prefersReducedMotion = _ref2.matches;
61
+
62
+ var webTerminalAnimationName = "".concat(open ? 'web-terminal-entrance' : 'web-terminal-exit', " ").concat(moderate02);
56
63
  var showDocumentationLinks = useMemo(function () {
57
64
  return documentationLinks.length > 0;
58
65
  }, [documentationLinks]);
@@ -61,6 +68,9 @@ export var WebTerminal = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
61
68
  setRender(true);
62
69
  }
63
70
  }, [open]);
71
+ /**
72
+ When the web terminal slide in animation is complete, sets render to false.
73
+ */
64
74
 
65
75
  var onAnimationEnd = function onAnimationEnd() {
66
76
  if (!open) {
@@ -68,11 +78,23 @@ export var WebTerminal = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
68
78
  }
69
79
  };
70
80
 
81
+ var handleCloseTerminal = function handleCloseTerminal() {
82
+ /**
83
+ If the user prefers reduced motion, we have to manually set render to false
84
+ because onAnimationEnd will never be called.
85
+ */
86
+ if (prefersReducedMotion) {
87
+ setRender(false);
88
+ }
89
+
90
+ closeTerminal();
91
+ };
92
+
71
93
  return shouldRender ? /*#__PURE__*/React.createElement("div", _extends({}, rest, {
72
94
  ref: ref,
73
- className: cx([className, blockClass, (_ref2 = {}, _defineProperty(_ref2, "".concat(blockClass, "--open"), open), _defineProperty(_ref2, "".concat(blockClass, "--closed"), !open), _ref2)]),
95
+ className: cx([className, blockClass, (_ref3 = {}, _defineProperty(_ref3, "".concat(blockClass, "--open"), open), _defineProperty(_ref3, "".concat(blockClass, "--closed"), !open), _ref3)]),
74
96
  style: {
75
- animation: "".concat(open ? 'web-terminal-entrance 250ms' : 'web-terminal-exit 250ms')
97
+ animation: !prefersReducedMotion && webTerminalAnimationName
76
98
  },
77
99
  onAnimationEnd: onAnimationEnd
78
100
  }), /*#__PURE__*/React.createElement("header", {
@@ -84,16 +106,16 @@ export var WebTerminal = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
84
106
  iconDescription: documentationLinksIconDescription,
85
107
  menuOptionsClass: "".concat(blockClass, "__documentation-overflow"),
86
108
  size: "lg"
87
- }, documentationLinks.map(function (_ref3, i) {
88
- var rest = _extends({}, _ref3);
109
+ }, documentationLinks.map(function (_ref4, i) {
110
+ var rest = _extends({}, _ref4);
89
111
 
90
112
  return /*#__PURE__*/React.createElement(OverflowMenuItem, _extends({
91
113
  key: i
92
114
  }, rest));
93
- })), actions.map(function (_ref4) {
94
- var renderIcon = _ref4.renderIcon,
95
- onClick = _ref4.onClick,
96
- iconDescription = _ref4.iconDescription;
115
+ })), actions.map(function (_ref5) {
116
+ var renderIcon = _ref5.renderIcon,
117
+ onClick = _ref5.onClick,
118
+ iconDescription = _ref5.iconDescription;
97
119
  return /*#__PURE__*/React.createElement(Button, {
98
120
  key: iconDescription,
99
121
  hasIconOnly: true,
@@ -107,7 +129,10 @@ export var WebTerminal = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
107
129
  renderIcon: Close,
108
130
  kind: "ghost",
109
131
  iconDescription: closeIconDescription,
110
- onClick: closeTerminal
132
+ onClick: handleCloseTerminal,
133
+ onAnimationEnd: function onAnimationEnd(event) {
134
+ return event.stopPropagation();
135
+ }
111
136
  })), /*#__PURE__*/React.createElement("div", {
112
137
  className: "".concat(blockClass, "__body")
113
138
  }, children)) : null;
@@ -0,0 +1,49 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
+ var _excluded = ["children", "isTerminalOpen"];
5
+
6
+ /**
7
+ * Copyright IBM Corp. 2020, 2021
8
+ *
9
+ * This source code is licensed under the Apache-2.0 license found in the
10
+ * LICENSE file in the root directory of this source tree.
11
+ */
12
+ // Import portions of React that are needed.
13
+ import React from 'react'; // Other standard imports.
14
+
15
+ import PropTypes from 'prop-types';
16
+ import cx from 'classnames';
17
+ import { pkg } from '../../settings'; // The block part of our conventional BEM class names (blockClass__E--M).
18
+
19
+ var componentName = 'WebTerminalContentWrapper';
20
+ var blockClass = "".concat(pkg.prefix, "--web-terminal-content-wrapper");
21
+ export var WebTerminalContentWrapper = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
22
+ var children = _ref.children,
23
+ isTerminalOpen = _ref.isTerminalOpen,
24
+ rest = _objectWithoutProperties(_ref, _excluded);
25
+
26
+ return /*#__PURE__*/React.createElement("div", _extends({
27
+ ref: ref,
28
+ className: cx([blockClass, _defineProperty({}, "".concat(blockClass, "--open"), isTerminalOpen)])
29
+ }, rest), children);
30
+ }); // Return a placeholder if not released and not enabled by feature flag
31
+
32
+ WebTerminalContentWrapper = pkg.checkComponentEnabled(WebTerminalContentWrapper, componentName); // The display name of the component, used by React. Note that displayName
33
+ // is used in preference to relying on function.name.
34
+
35
+ WebTerminalContentWrapper.displayName = componentName; // The types and DocGen commentary for the component props,
36
+ // in alphabetical order (for consistency).
37
+ // See https://www.npmjs.com/package/prop-types#usage.
38
+
39
+ WebTerminalContentWrapper.propTypes = {
40
+ /**
41
+ * Pass in content as children.
42
+ */
43
+ children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
44
+
45
+ /**
46
+ * A boolean to determine if the terminal is open.
47
+ */
48
+ isTerminalOpen: PropTypes.bool.isRequired
49
+ };
@@ -1 +1,2 @@
1
- export { WebTerminal } from './WebTerminal';
1
+ export { WebTerminal } from './WebTerminal';
2
+ export { WebTerminalContentWrapper } from './WebTerminalContentWrapper';
@@ -32,7 +32,7 @@ export { TagSet } from './TagSet';
32
32
  export { Tearsheet, TearsheetNarrow } from './Tearsheet';
33
33
  export { Toolbar, ToolbarButton, ToolbarGroup } from './Toolbar';
34
34
  export { UserProfileImage } from './UserProfileImage';
35
- export { WebTerminal } from './WebTerminal';
35
+ export { WebTerminal, WebTerminalContentWrapper } from './WebTerminal';
36
36
  export { EditSidePanel } from './EditSidePanel';
37
37
  export { OptionsTile } from './OptionsTile';
38
38
  export { InlineEdit } from './InlineEdit';
@@ -60,6 +60,7 @@ var defaults = {
60
60
  ToolbarButton: false,
61
61
  ToolbarGroup: false,
62
62
  WebTerminal: false,
63
+ WebTerminalContentWrapper: false,
63
64
  EditSidePanel: false,
64
65
  CancelableTextEdit: false,
65
66
  InlineEdit: false,
@@ -613,6 +613,7 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
613
613
  var activeCellValue = activeCellFullData ? Object.values(activeCellFullData.row.values)[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column] : null;
614
614
  setCellEditorValue(activeCellValue);
615
615
  cellEditorRulerRef.current.textContent = activeCellValue;
616
+ cellEditorRef.current.style.width = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.width;
616
617
  }; // Sets the initial placement of the cell editor cursor at the end of the text area
617
618
  // this is not done for us by default in Safari
618
619