@carbon/ibm-products 1.8.0 → 1.11.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 (111) hide show
  1. package/css/index-full-carbon.css +270 -5656
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +6 -6
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +58 -3432
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +3 -3
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +238 -3922
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +6 -6
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +238 -3923
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +6 -6
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/AddSelect/AddSelect.js +147 -53
  18. package/es/components/AddSelect/AddSelectBreadcrumbs.js +4 -4
  19. package/es/components/AddSelect/AddSelectColumn.js +195 -0
  20. package/es/components/AddSelect/AddSelectList.js +67 -8
  21. package/es/components/AddSelect/AddSelectSidebar.js +8 -15
  22. package/es/components/AddSelect/add-select-utils.js +64 -0
  23. package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -1
  24. package/es/components/ButtonMenu/ButtonMenu.js +1 -1
  25. package/es/components/DataSpreadsheet/DataSpreadsheet.js +505 -167
  26. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +244 -17
  27. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +74 -8
  28. package/es/components/DataSpreadsheet/hooks/useMoveActiveCell.js +27 -0
  29. package/es/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +28 -0
  30. package/es/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +41 -0
  31. package/es/components/DataSpreadsheet/utils/checkActiveHeaderCell.js +34 -0
  32. package/es/components/DataSpreadsheet/utils/createActiveCellFn.js +58 -0
  33. package/es/components/DataSpreadsheet/utils/createCellSelectionArea.js +49 -0
  34. package/es/components/DataSpreadsheet/{generateData.js → utils/generateData.js} +6 -0
  35. package/es/components/DataSpreadsheet/{getCellSize.js → utils/getCellSize.js} +0 -0
  36. package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +46 -0
  37. package/es/components/DataSpreadsheet/utils/handleMultipleKeys.js +82 -0
  38. package/es/components/DataSpreadsheet/utils/removeCellSelections.js +30 -0
  39. package/es/components/InlineEdit/InlineEdit.js +80 -39
  40. package/es/components/OptionsTile/OptionsTile.js +31 -21
  41. package/es/components/OptionsTile/index.js +1 -1
  42. package/es/components/PageHeader/PageHeader.js +26 -15
  43. package/es/components/PageHeader/PageHeaderTitle.js +2 -1
  44. package/es/components/PageHeader/PageHeaderUtils.js +24 -29
  45. package/es/components/TagSet/TagSet.js +12 -3
  46. package/es/components/UserProfileImage/UserProfileImage.js +2 -1
  47. package/es/global/js/utils/DisplayBox.js +31 -0
  48. package/es/global/js/utils/deepCloneObject.js +26 -0
  49. package/lib/components/AddSelect/AddSelect.js +150 -54
  50. package/lib/components/AddSelect/AddSelectBreadcrumbs.js +2 -3
  51. package/lib/components/AddSelect/AddSelectColumn.js +219 -0
  52. package/lib/components/AddSelect/AddSelectList.js +65 -8
  53. package/lib/components/AddSelect/AddSelectSidebar.js +14 -15
  54. package/lib/components/AddSelect/add-select-utils.js +78 -0
  55. package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -1
  56. package/lib/components/ButtonMenu/ButtonMenu.js +1 -1
  57. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +514 -170
  58. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +251 -18
  59. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +82 -9
  60. package/lib/components/DataSpreadsheet/hooks/useMoveActiveCell.js +37 -0
  61. package/lib/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +39 -0
  62. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +52 -0
  63. package/lib/components/DataSpreadsheet/utils/checkActiveHeaderCell.js +45 -0
  64. package/lib/components/DataSpreadsheet/{createActiveCellFn.js → utils/createActiveCellFn.js} +22 -9
  65. package/lib/components/DataSpreadsheet/utils/createCellSelectionArea.js +60 -0
  66. package/lib/components/DataSpreadsheet/{generateData.js → utils/generateData.js} +6 -0
  67. package/lib/components/DataSpreadsheet/{getCellSize.js → utils/getCellSize.js} +0 -0
  68. package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +59 -0
  69. package/lib/components/DataSpreadsheet/utils/handleMultipleKeys.js +92 -0
  70. package/lib/components/DataSpreadsheet/utils/removeCellSelections.js +41 -0
  71. package/lib/components/InlineEdit/InlineEdit.js +82 -40
  72. package/lib/components/OptionsTile/OptionsTile.js +30 -20
  73. package/lib/components/PageHeader/PageHeader.js +25 -15
  74. package/lib/components/PageHeader/PageHeaderTitle.js +2 -1
  75. package/lib/components/PageHeader/PageHeaderUtils.js +24 -29
  76. package/lib/components/TagSet/TagSet.js +13 -3
  77. package/lib/components/UserProfileImage/UserProfileImage.js +2 -1
  78. package/lib/global/js/utils/DisplayBox.js +46 -0
  79. package/lib/global/js/utils/deepCloneObject.js +37 -0
  80. package/package.json +17 -17
  81. package/scss/components/ActionBar/_storybook-styles.scss +8 -0
  82. package/scss/components/ActionSet/_storybook-styles.scss +1 -3
  83. package/scss/components/AddSelect/_add-select.scss +99 -14
  84. package/scss/components/BreadcrumbWithOverflow/_breadcrumb-with-overflow.scss +7 -3
  85. package/scss/components/BreadcrumbWithOverflow/_storybook-styles.scss +8 -0
  86. package/scss/components/ButtonSetWithOverflow/_storybook-styles.scss +8 -0
  87. package/scss/components/CreateInfluencer/_create-influencer.scss +2 -0
  88. package/scss/components/CreateModal/_create-modal.scss +1 -0
  89. package/scss/components/CreateSidePanel/_create-side-panel.scss +1 -1
  90. package/scss/components/CreateSidePanel/_storybook-styles.scss +1 -1
  91. package/scss/components/CreateTearsheet/_create-tearsheet.scss +1 -0
  92. package/scss/components/CreateTearsheetNarrow/_create-tearsheet-narrow.scss +1 -0
  93. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +42 -6
  94. package/scss/components/EditSidePanel/_edit-side-panel.scss +9 -0
  95. package/scss/components/EditSidePanel/_storybook-styles.scss +1 -1
  96. package/scss/components/InlineEdit/_inline-edit.scss +53 -43
  97. package/scss/components/InlineEdit/_storybook-styles.scss +2 -0
  98. package/scss/components/LoadingBar/_loading-bar.scss +13 -0
  99. package/scss/components/NotificationsPanel/_notifications-panel.scss +3 -0
  100. package/scss/components/OptionsTile/_index.scss +1 -1
  101. package/scss/components/OptionsTile/_options-tile.scss +17 -17
  102. package/scss/components/OptionsTile/_storybook-styles.scss +4 -4
  103. package/scss/components/PageHeader/_page-header.scss +5 -2
  104. package/scss/components/SidePanel/_side-panel.scss +19 -12
  105. package/scss/components/StatusIcon/_status-icon.scss +1 -0
  106. package/scss/components/TagSet/_storybook-styles.scss +8 -0
  107. package/scss/components/Tearsheet/_tearsheet.scss +1 -2
  108. package/scss/components/UserProfileImage/_user-profile-image.scss +9 -0
  109. package/scss/components/WebTerminal/_web-terminal.scss +2 -0
  110. package/scss/global/styles/_display-box.scss +62 -0
  111. package/es/components/DataSpreadsheet/createActiveCellFn.js +0 -45
@@ -7,7 +7,7 @@ exports.createActiveCellFn = void 0;
7
7
 
8
8
  var _layout = require("@carbon/layout");
9
9
 
10
- var _settings = require("../../settings");
10
+ var _settings = require("../../../settings");
11
11
 
12
12
  /**
13
13
  * Copyright IBM Corp. 2022, 2022
@@ -24,7 +24,10 @@ var createActiveCellFn = function createActiveCellFn(_ref) {
24
24
  _ref$blockClass = _ref.blockClass,
25
25
  blockClass = _ref$blockClass === void 0 ? "".concat(_settings.pkg.prefix, "--data-spreadsheet") : _ref$blockClass,
26
26
  onActiveCellChange = _ref.onActiveCellChange,
27
- activeCellValue = _ref.activeCellValue;
27
+ activeCellValue = _ref.activeCellValue,
28
+ activeCellRef = _ref.activeCellRef,
29
+ cellEditorRef = _ref.cellEditorRef,
30
+ defaultColumn = _ref.defaultColumn;
28
31
 
29
32
  if (!coords) {
30
33
  return;
@@ -32,24 +35,34 @@ var createActiveCellFn = function createActiveCellFn(_ref) {
32
35
  // to `.${blockClass}__header--container`, otherwise it should be appended to `.${blockClass}__listContainer` firstElementChild
33
36
 
34
37
 
38
+ var point1Element = document.querySelector("[data-row-index=\"".concat(coords.row, "\"][data-column-index=\"").concat(coords.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
39
+
40
+ var selectionAreaCellWidth = point1Element.offsetWidth;
41
+ var selectionAreaCellHeight = point1Element.offsetHeight;
35
42
  var activeElementContainer = addToHeader ? contextRef === null || contextRef === void 0 ? void 0 : contextRef.current.querySelector(".".concat(blockClass, "__header--container")) : contextRef === null || contextRef === void 0 ? void 0 : contextRef.current.querySelector(".".concat(blockClass, "__list--container")).firstElementChild;
36
43
  var relativePosition = {
37
- top: placementElement.getBoundingClientRect().top - activeElementContainer.getBoundingClientRect().top,
38
- left: placementElement.getBoundingClientRect().left - activeElementContainer.getBoundingClientRect().left
44
+ top: placementElement ? placementElement.getBoundingClientRect().top - activeElementContainer.getBoundingClientRect().top : coords.row === 0 ? 0 : selectionAreaCellHeight * coords.row,
45
+ // calculate top value here if virtualized row is not in DOM
46
+ left: placementElement ? placementElement.getBoundingClientRect().left - activeElementContainer.getBoundingClientRect().left : coords.column === 0 ? 0 + (defaultColumn.rowHeaderWidth - 4) : selectionAreaCellWidth * coords.column + (defaultColumn.rowHeaderWidth - 4) // calculate left value here if virtualized row is not in DOM, accounting for row header cell width (including borders)
47
+
39
48
  };
40
- var activeCellButton = (contextRef === null || contextRef === void 0 ? void 0 : contextRef.current.querySelector(".".concat(blockClass, "__active-cell--highlight"))) || document.createElement('button');
41
- activeCellButton.classList.add("".concat(blockClass, "__active-cell--highlight"), "".concat(blockClass, "--interactive-cell-element"));
42
- activeCellButton.style.width = (0, _layout.px)(placementElement === null || placementElement === void 0 ? void 0 : placementElement.offsetWidth);
43
- activeCellButton.style.height = (0, _layout.px)(placementElement === null || placementElement === void 0 ? void 0 : placementElement.offsetHeight);
49
+ var activeCellButton = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current;
50
+ activeCellButton.style.width = (0, _layout.px)(placementElement ? placementElement === null || placementElement === void 0 ? void 0 : placementElement.offsetWidth : selectionAreaCellWidth);
51
+ activeCellButton.style.height = (0, _layout.px)(placementElement ? placementElement === null || placementElement === void 0 ? void 0 : placementElement.offsetHeight : selectionAreaCellHeight);
44
52
  activeCellButton.style.left = (0, _layout.px)(relativePosition.left);
45
53
  activeCellButton.style.top = (0, _layout.px)(relativePosition.top);
54
+ activeCellButton.style.display = 'block';
46
55
  activeCellButton.setAttribute('data-active-row-index', typeof (coords === null || coords === void 0 ? void 0 : coords.row) === 'number' ? coords.row : 'header');
47
56
  activeCellButton.setAttribute('data-active-column-index', typeof (coords === null || coords === void 0 ? void 0 : coords.column) === 'number' ? coords.column : 'header');
48
57
  activeElementContainer.appendChild(activeCellButton);
49
58
  activeCellButton.focus();
50
59
 
60
+ if (!addToHeader) {
61
+ activeElementContainer.appendChild(cellEditorRef.current);
62
+ }
63
+
51
64
  if (typeof (coords === null || coords === void 0 ? void 0 : coords.column) === 'number' && typeof (coords === null || coords === void 0 ? void 0 : coords.row) === 'number') {
52
- onActiveCellChange(activeCellValue);
65
+ onActiveCellChange === null || onActiveCellChange === void 0 ? void 0 : onActiveCellChange(activeCellValue);
53
66
  }
54
67
  };
55
68
 
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createCellSelectionArea = void 0;
7
+
8
+ var _layout = require("@carbon/layout");
9
+
10
+ var _deepCloneObject = require("../../../global/js/utils/deepCloneObject");
11
+
12
+ /**
13
+ * Copyright IBM Corp. 2022, 2022
14
+ *
15
+ * This source code is licensed under the Apache-2.0 license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ */
18
+ var createCellSelectionArea = function createCellSelectionArea(_ref) {
19
+ var area = _ref.area,
20
+ blockClass = _ref.blockClass,
21
+ defaultColumn = _ref.defaultColumn,
22
+ selectionAreas = _ref.selectionAreas,
23
+ setSelectionAreas = _ref.setSelectionAreas;
24
+ var greatestRow = Math.max(area.point1.row, area.point2.row);
25
+ var greatestColumn = Math.max(area.point1.column, area.point2.column);
26
+ var lowestRowIndex = Math.min(area.point1.row, area.point2.row);
27
+ var lowestColumnIndex = Math.min(area.point1.column, area.point2.column);
28
+ 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
29
+
30
+ var selectionAreaCellWidth = point1Element.offsetWidth;
31
+ var selectionAreaCellHeight = point1Element.offsetHeight;
32
+ var selectionAreaTotalWidth = selectionAreaCellWidth * (greatestColumn - lowestColumnIndex + 1);
33
+ var selectionAreaTotalHeight = selectionAreaCellHeight * (greatestRow - lowestRowIndex + 1);
34
+ var bodyContainer = document.querySelector(".".concat(blockClass, "__list--container")).firstElementChild;
35
+ var placementElement = bodyContainer.querySelector("[data-row-index=\"".concat(lowestRowIndex, "\"][data-column-index=\"").concat(lowestColumnIndex, "\"]"));
36
+ var relativePosition = {
37
+ top: placementElement ? placementElement.getBoundingClientRect().top - bodyContainer.getBoundingClientRect().top : lowestRowIndex === 0 ? 0 : selectionAreaCellHeight * lowestRowIndex,
38
+ // calculate top value here if virtualized row is not in DOM
39
+ 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)
40
+
41
+ };
42
+ var selectionAreaElement = document.querySelector("[data-matcher-id=\"".concat(area.matcher, "\"]")) || document.createElement('div');
43
+ selectionAreaElement.classList.add("".concat(blockClass, "__selection-area--element"));
44
+ selectionAreaElement.setAttribute('data-matcher-id', area.matcher);
45
+ selectionAreaElement.style.width = (0, _layout.px)(selectionAreaTotalWidth);
46
+ selectionAreaElement.style.height = (0, _layout.px)(selectionAreaTotalHeight);
47
+ selectionAreaElement.style.left = (0, _layout.px)(relativePosition.left);
48
+ selectionAreaElement.style.top = (0, _layout.px)(relativePosition.top);
49
+ bodyContainer.appendChild(selectionAreaElement);
50
+ var selectionAreasClone = (0, _deepCloneObject.deepCloneObject)(selectionAreas);
51
+ var indexOfCurrentArea = selectionAreasClone.findIndex(function (item) {
52
+ return item.matcher === area.matcher;
53
+ }); // We need to add another property to the selectionAreas object array to
54
+ // let us know if an area has been created for each item already, ie createdArea: true
55
+
56
+ selectionAreasClone[indexOfCurrentArea].areaCreated = true;
57
+ setSelectionAreas(selectionAreasClone);
58
+ };
59
+
60
+ exports.createCellSelectionArea = createCellSelectionArea;
@@ -13,6 +13,12 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
13
13
 
14
14
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15
15
 
16
+ /**
17
+ * Copyright IBM Corp. 2022, 2022
18
+ *
19
+ * This source code is licensed under the Apache-2.0 license found in the
20
+ * LICENSE file in the root directory of this source tree.
21
+ */
16
22
  // cspell:disable
17
23
  var pets = ['dog', 'cat', 'bird', 'lizard', 'frog', 'hamster', 'fish', 'rabbit', 'snake'];
18
24
  var petNames = ['Bruno', 'Willow', 'Kona', 'Heidi', 'Rusty', 'Bonnie', 'Cash', 'Gucci', 'Brody', 'Emma', 'Loki', 'Angel', 'Astro', 'Sherman', 'Layla', 'Peanut', 'Grace', 'Mickey', 'Sasha', 'Finn', 'Tucker', 'Bear', 'Mocha', 'Roscoe']; // cspell:enable
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.handleHeaderCellSelection = void 0;
9
+
10
+ var _uuidv = _interopRequireDefault(require("../../../global/js/utils/uuidv4"));
11
+
12
+ var _removeCellSelections = require("./removeCellSelections");
13
+
14
+ /**
15
+ * Copyright IBM Corp. 2022, 2022
16
+ *
17
+ * This source code is licensed under the Apache-2.0 license found in the
18
+ * LICENSE file in the root directory of this source tree.
19
+ */
20
+ var handleHeaderCellSelection = function handleHeaderCellSelection(_ref) {
21
+ var type = _ref.type,
22
+ activeCellCoordinates = _ref.activeCellCoordinates,
23
+ rows = _ref.rows,
24
+ columns = _ref.columns,
25
+ setActiveCellCoordinates = _ref.setActiveCellCoordinates,
26
+ setCurrentMatcher = _ref.setCurrentMatcher,
27
+ setSelectionAreas = _ref.setSelectionAreas,
28
+ spreadsheetRef = _ref.spreadsheetRef,
29
+ index = _ref.index,
30
+ isKeyboard = _ref.isKeyboard;
31
+ var rowValue = isKeyboard ? activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row : index;
32
+ var columnValue = isKeyboard ? activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column : index;
33
+ var point1 = {
34
+ row: type === 'column' ? 0 : rowValue,
35
+ column: type === 'column' ? columnValue : 0
36
+ };
37
+ var point2 = {
38
+ row: type === 'column' ? rows.length - 1 : rowValue,
39
+ // going to always be the last row
40
+ column: type === 'column' ? columnValue : columns.length - 1
41
+ };
42
+ var tempMatcher = (0, _uuidv.default)();
43
+ setActiveCellCoordinates({
44
+ row: type === 'column' ? 0 : rowValue,
45
+ column: type === 'column' ? columnValue : 0
46
+ });
47
+ setCurrentMatcher(tempMatcher);
48
+ (0, _removeCellSelections.removeCellSelections)({
49
+ spreadsheetRef: spreadsheetRef
50
+ });
51
+ setSelectionAreas([{
52
+ point1: point1,
53
+ point2: point2,
54
+ areaCreated: false,
55
+ matcher: tempMatcher
56
+ }]);
57
+ };
58
+
59
+ exports.handleHeaderCellSelection = handleHeaderCellSelection;
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.handleMultipleKeys = void 0;
7
+
8
+ var _deepCloneObject = require("../../../global/js/utils/deepCloneObject");
9
+
10
+ /**
11
+ * Copyright IBM Corp. 2022, 2022
12
+ *
13
+ * This source code is licensed under the Apache-2.0 license found in the
14
+ * LICENSE file in the root directory of this source tree.
15
+ */
16
+ var handleMultipleKeys = function handleMultipleKeys(_ref) {
17
+ var _selectionAreasClone$;
18
+
19
+ var activeKeys = _ref.activeKeys,
20
+ selectionAreas = _ref.selectionAreas,
21
+ currentMatcher = _ref.currentMatcher,
22
+ rows = _ref.rows,
23
+ setSelectionAreas = _ref.setSelectionAreas,
24
+ columns = _ref.columns;
25
+ var activeKeyValues = activeKeys.current;
26
+ var selectionAreasClone = (0, _deepCloneObject.deepCloneObject)(selectionAreas);
27
+ var indexOfCurrentArea = selectionAreasClone.findIndex(function (item) {
28
+ return item.matcher === currentMatcher;
29
+ });
30
+ var pointToUpdate = (_selectionAreasClone$ = selectionAreasClone[indexOfCurrentArea]) !== null && _selectionAreasClone$ !== void 0 && _selectionAreasClone$.point2 ? selectionAreasClone[indexOfCurrentArea].point2 : selectionAreasClone[indexOfCurrentArea].point1; // Down + Shift
31
+
32
+ if (activeKeyValues.includes('Shift') && activeKeyValues.includes('ArrowDown')) {
33
+ if (rows.length - 1 === pointToUpdate.row) {
34
+ return;
35
+ }
36
+
37
+ var newPoint = {
38
+ row: pointToUpdate.row + 1,
39
+ column: pointToUpdate.column
40
+ };
41
+ selectionAreasClone[indexOfCurrentArea].point2 = newPoint;
42
+ selectionAreasClone[indexOfCurrentArea].areaCreated = false;
43
+ setSelectionAreas(selectionAreasClone);
44
+ } // Right + Shift
45
+
46
+
47
+ if (activeKeyValues.includes('Shift') && activeKeyValues.includes('ArrowRight')) {
48
+ if (columns.length - 1 === pointToUpdate.column) {
49
+ return;
50
+ }
51
+
52
+ var _newPoint = {
53
+ row: pointToUpdate.row,
54
+ column: pointToUpdate.column + 1
55
+ };
56
+ selectionAreasClone[indexOfCurrentArea].point2 = _newPoint;
57
+ selectionAreasClone[indexOfCurrentArea].areaCreated = false;
58
+ setSelectionAreas(selectionAreasClone);
59
+ } // Up + Shift
60
+
61
+
62
+ if (activeKeyValues.includes('Shift') && activeKeyValues.includes('ArrowUp')) {
63
+ if (pointToUpdate.row === 0) {
64
+ return;
65
+ }
66
+
67
+ var _newPoint2 = {
68
+ row: pointToUpdate.row - 1,
69
+ column: pointToUpdate.column
70
+ };
71
+ selectionAreasClone[indexOfCurrentArea].point2 = _newPoint2;
72
+ selectionAreasClone[indexOfCurrentArea].areaCreated = false;
73
+ setSelectionAreas(selectionAreasClone);
74
+ } // Left + Shift
75
+
76
+
77
+ if (activeKeyValues.includes('Shift') && activeKeyValues.includes('ArrowLeft')) {
78
+ if (pointToUpdate.column === 0) {
79
+ return;
80
+ }
81
+
82
+ var _newPoint3 = {
83
+ row: pointToUpdate.row,
84
+ column: pointToUpdate.column - 1
85
+ };
86
+ selectionAreasClone[indexOfCurrentArea].point2 = _newPoint3;
87
+ selectionAreasClone[indexOfCurrentArea].areaCreated = false;
88
+ setSelectionAreas(selectionAreasClone);
89
+ }
90
+ };
91
+
92
+ exports.handleMultipleKeys = handleMultipleKeys;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.removeCellSelections = void 0;
9
+
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+
12
+ var _settings = require("../../../settings");
13
+
14
+ /**
15
+ * Copyright IBM Corp. 2022, 2022
16
+ *
17
+ * This source code is licensed under the Apache-2.0 license found in the
18
+ * LICENSE file in the root directory of this source tree.
19
+ */
20
+ // Removes the cell selection elements
21
+ var removeCellSelections = function removeCellSelections(_ref) {
22
+ var matcher = _ref.matcher,
23
+ spreadsheetRef = _ref.spreadsheetRef,
24
+ _ref$blockClass = _ref.blockClass,
25
+ blockClass = _ref$blockClass === void 0 ? "".concat(_settings.pkg.prefix, "--data-spreadsheet") : _ref$blockClass;
26
+
27
+ if (matcher && typeof matcher === 'string') {
28
+ var selectionToRemove = spreadsheetRef.current.querySelector("[data-matcher-id=\"".concat(matcher, "\"]"));
29
+
30
+ if (selectionToRemove) {
31
+ selectionToRemove.remove();
32
+ }
33
+ } else {
34
+ var cellSelections = spreadsheetRef.current.querySelectorAll(".".concat(blockClass, "__selection-area--element"));
35
+ (0, _toConsumableArray2.default)(cellSelections).forEach(function (element) {
36
+ return element.remove();
37
+ });
38
+ }
39
+ };
40
+
41
+ exports.removeCellSelections = removeCellSelections;
@@ -2,7 +2,7 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
- var _typeof = require("@babel/runtime/helpers/typeof");
5
+ var _typeof3 = require("@babel/runtime/helpers/typeof");
6
6
 
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
@@ -13,6 +13,8 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
13
13
 
14
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
15
 
16
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
17
+
16
18
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
19
 
18
20
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
@@ -31,21 +33,24 @@ var _carbonComponentsReact = require("carbon-components-react");
31
33
 
32
34
  var _iconsReact = require("@carbon/icons-react");
33
35
 
34
- var _excluded = ["cancelDescription", "className", "disabled", "editDescription", "editVisibleOnHoverOnly", "id", "invalid", "invalidText", "labelText", "light", "onCancel", "onSave", "onChange", "placeholder", "saveDescription", "size", "value", "warn", "warnText"];
36
+ var _excluded = ["buttonTooltipAlignment", "buttonTooltipPosition", "cancelDescription", "className", "disabled", "editAlwaysVisible", "editDescription", "id", "invalid", "invalidText", "labelText", "light", "onCancel", "onSave", "onChange", "placeholder", "saveDescription", "size", "value"];
35
37
 
36
38
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
37
39
 
38
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
40
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
39
41
 
40
42
  // The block part of our conventional BEM class names (blockClass__E--M).
41
43
  var blockClass = "".concat(_settings.pkg.prefix, "--inline-edit");
42
44
  var componentName = 'InlineEdit'; // NOTE: the component SCSS is not imported here: it is rolled up separately.
43
45
 
44
46
  var defaults = {
47
+ buttonTooltipAlignment: 'center',
48
+ buttonTooltipPosition: 'top',
45
49
  light: true,
46
50
  // defaults to true to reflect design
47
51
  size: 'md'
48
52
  };
53
+ var buttons = ['cancel', 'edit', 'save'];
49
54
  /**
50
55
  * TODO: A description of the component.
51
56
  */
@@ -53,11 +58,13 @@ var defaults = {
53
58
  var InlineEdit = /*#__PURE__*/_react.default.forwardRef(function (_ref, refIn) {
54
59
  var _cx, _refInput$current, _refInput$current$inn, _cx3;
55
60
 
56
- var cancelDescription = _ref.cancelDescription,
61
+ var buttonTooltipAlignment = _ref.buttonTooltipAlignment,
62
+ buttonTooltipPosition = _ref.buttonTooltipPosition,
63
+ cancelDescription = _ref.cancelDescription,
57
64
  className = _ref.className,
58
65
  disabled = _ref.disabled,
66
+ editAlwaysVisible = _ref.editAlwaysVisible,
59
67
  editDescription = _ref.editDescription,
60
- editVisibleOnHoverOnly = _ref.editVisibleOnHoverOnly,
61
68
  id = _ref.id,
62
69
  invalid = _ref.invalid,
63
70
  invalidText = _ref.invalidText,
@@ -72,8 +79,6 @@ var InlineEdit = /*#__PURE__*/_react.default.forwardRef(function (_ref, refIn) {
72
79
  _ref$size = _ref.size,
73
80
  size = _ref$size === void 0 ? defaults.size : _ref$size,
74
81
  value = _ref.value,
75
- warn = _ref.warn,
76
- warnText = _ref.warnText,
77
82
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
78
83
  var refInput = (0, _react.useRef)(null);
79
84
  var localRef = (0, _react.useRef)(null);
@@ -89,9 +94,25 @@ var InlineEdit = /*#__PURE__*/_react.default.forwardRef(function (_ref, refIn) {
89
94
  internalValue = _useState4[0],
90
95
  setInternalValue = _useState4[1];
91
96
 
92
- var showValidation = invalid || warn;
93
- var validationText = invalidText || warnText;
94
- var validationIcon = showValidation ? invalid ? /*#__PURE__*/_react.default.createElement(_iconsReact.WarningFilled16, null) : /*#__PURE__*/_react.default.createElement(_iconsReact.WarningAltFilled16, null) : null;
97
+ var showValidation = invalid; // || warn;
98
+
99
+ var validationText = invalidText; // || warnText;
100
+
101
+ var validationIcon = showValidation ? /*#__PURE__*/_react.default.createElement(_iconsReact.WarningFilled16, null) : null; // sanitize the tooltip values
102
+
103
+ var alignIsObject = (0, _typeof2.default)(buttonTooltipAlignment) === 'object';
104
+ var directionIsObject = (0, _typeof2.default)(buttonTooltipPosition) === 'object';
105
+ var tipPositions = buttons.reduce(function (acc, button) {
106
+ var _ref2, _ref3;
107
+
108
+ var tooltipAlignment = (_ref2 = alignIsObject ? buttonTooltipAlignment[button] : buttonTooltipAlignment) !== null && _ref2 !== void 0 ? _ref2 : defaults.buttonTooltipAlignment;
109
+ var tooltipPosition = (_ref3 = directionIsObject ? buttonTooltipPosition[button] : buttonTooltipPosition) !== null && _ref3 !== void 0 ? _ref3 : defaults.buttonTooltipPosition;
110
+ acc[button] = {
111
+ tooltipAlignment: tooltipAlignment,
112
+ tooltipPosition: tooltipPosition
113
+ };
114
+ return acc;
115
+ }, {});
95
116
 
96
117
  var doSetEditing = function doSetEditing(value) {
97
118
  if (value === false) {
@@ -103,6 +124,7 @@ var InlineEdit = /*#__PURE__*/_react.default.forwardRef(function (_ref, refIn) {
103
124
  };
104
125
 
105
126
  var handleEdit = function handleEdit(ev) {
127
+ /* istanbul ignore else */
106
128
  if (!disabled) {
107
129
  var rightOfInput = ev.currentTarget.classList.contains("".concat(blockClass, "__edit")) || ev.target.classList.contains("".concat(blockClass, "__after-input-elements"));
108
130
  var leftOfInput = ev.currentTarget = ev.target.classList.contains("".concat(blockClass)); // clicking on the content editable element should not set either of these to true
@@ -149,9 +171,12 @@ var InlineEdit = /*#__PURE__*/_react.default.forwardRef(function (_ref, refIn) {
149
171
  if (onChange) {
150
172
  onChange(refInput.current.innerText);
151
173
  }
152
- };
174
+ }; // pasting into contentEditable not supported by userEvent
175
+
153
176
 
154
- var handlePaste = function handlePaste(ev) {
177
+ var handlePaste =
178
+ /* istanbul ignore next */
179
+ function handlePaste(ev) {
155
180
  ev.preventDefault(); // Get clipboard as plain text
156
181
 
157
182
  var text = (ev.clipboardData || window.clipboardData).getData('text/plain'); // remove \n
@@ -196,9 +221,16 @@ var InlineEdit = /*#__PURE__*/_react.default.forwardRef(function (_ref, refIn) {
196
221
  };
197
222
 
198
223
  var handleKeyDown = function handleKeyDown(ev) {
199
- if (ev.key === 'Enter') {
200
- ev.preventDefault();
201
- refInput.current.blur(); // will cause save
224
+ switch (ev.key) {
225
+ case 'Enter':
226
+ ev.preventDefault();
227
+ refInput.current.blur(); // will cause save
228
+
229
+ break;
230
+
231
+ case 'Escape':
232
+ handleCancel();
233
+ break;
202
234
  }
203
235
  };
204
236
  /*
@@ -232,7 +264,7 @@ var InlineEdit = /*#__PURE__*/_react.default.forwardRef(function (_ref, refIn) {
232
264
  _react.default.createElement("div", {
233
265
  className: (0, _classnames.default)(blockClass, // Apply the block class to the main HTML element
234
266
  className, // Apply any supplied class names to the main HTML element.
235
- "".concat(blockClass, "--").concat(size), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--disabled"), disabled), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--editing"), editing), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--invalid"), invalid), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--warn"), warn), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--light"), light), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--overflows"), refInput.current && refInput.current.scrollWidth > refInput.current.offsetWidth), _cx)),
267
+ "".concat(blockClass, "--").concat(size), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--disabled"), disabled), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--editing"), editing), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--invalid"), invalid), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--light"), light), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--overflows"), refInput.current && refInput.current.scrollWidth > refInput.current.offsetWidth), _cx)),
236
268
  onClick: handleEdit // disabled eslint for click handler
237
269
  ,
238
270
  onBlur: handleBlur,
@@ -263,14 +295,14 @@ var InlineEdit = /*#__PURE__*/_react.default.forwardRef(function (_ref, refIn) {
263
295
  className: (0, _classnames.default)("".concat(blockClass, "__toolbar"), (_cx3 = {}, (0, _defineProperty2.default)(_cx3, "".concat(blockClass, "__toolbar--animation"), toolbarAnimation), (0, _defineProperty2.default)(_cx3, "".concat(blockClass, "__toolbar--saveable"), refInput.current && value !== internalValue), _cx3))
264
296
  }, showValidation && /*#__PURE__*/_react.default.createElement("div", {
265
297
  className: "".concat(blockClass, "__validation-icon")
266
- }, validationIcon), editing ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
298
+ }, validationIcon), editing ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, (0, _extends2.default)({
267
299
  className: "".concat(blockClass, "__cancel"),
268
300
  kind: "ghost",
269
301
  hasIconOnly: true,
270
302
  iconDescription: cancelDescription,
271
303
  onClick: handleCancel,
272
304
  renderIcon: _iconsReact.Close16
273
- }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
305
+ }, tipPositions.cancel)), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, (0, _extends2.default)({
274
306
  className: "".concat(blockClass, "__save"),
275
307
  kind: "ghost",
276
308
  hasIconOnly: true,
@@ -278,9 +310,8 @@ var InlineEdit = /*#__PURE__*/_react.default.forwardRef(function (_ref, refIn) {
278
310
  onClick: handleSave,
279
311
  renderIcon: _iconsReact.Checkmark16,
280
312
  disabled: value === internalValue
281
- })) : /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
282
- "aria-hidden": "true",
283
- className: (0, _classnames.default)("".concat(blockClass, "__edit"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__edit--hover-visible"), editVisibleOnHoverOnly)),
313
+ }, tipPositions.save))) : /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, (0, _extends2.default)({
314
+ className: (0, _classnames.default)("".concat(blockClass, "__edit"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__edit--always-visible"), editAlwaysVisible)),
284
315
  kind: "ghost",
285
316
  hasIconOnly: true,
286
317
  iconDescription: editDescription,
@@ -288,7 +319,7 @@ var InlineEdit = /*#__PURE__*/_react.default.forwardRef(function (_ref, refIn) {
288
319
  renderIcon: disabled ? _iconsReact.EditOff16 : _iconsReact.Edit16,
289
320
  disabled: disabled,
290
321
  tabIndex: -1
291
- }))), /*#__PURE__*/_react.default.createElement("div", {
322
+ }, tipPositions.edit)))), /*#__PURE__*/_react.default.createElement("div", {
292
323
  className: (0, _classnames.default)("".concat(blockClass, "__disabled-cover"))
293
324
  }), showValidation && validationText && validationText.length > 0 && /*#__PURE__*/_react.default.createElement("div", {
294
325
  className: "".concat(blockClass, "__validation-text ").concat(_settings.carbon.prefix, "--form-requirement")
@@ -306,6 +337,28 @@ InlineEdit.displayName = componentName; // The types and DocGen commentary for t
306
337
  // See https://www.npmjs.com/package/prop-types#usage.
307
338
 
308
339
  InlineEdit.propTypes = {
340
+ /**
341
+ * buttonTooltipAlignment from the standard tooltip. Default center.
342
+ *
343
+ * Can be passed either as one of tooltip options or as an object specifying cancel, edit and save separately
344
+ */
345
+ buttonTooltipAlignment: _propTypes.default.oneOfType([_propTypes.default.oneOf(['start', 'center', 'end']), _propTypes.default.shape({
346
+ cancel: _propTypes.default.oneOf(['start', 'center', 'end']),
347
+ edit: _propTypes.default.oneOf(['start', 'center', 'end']),
348
+ save: _propTypes.default.oneOf(['start', 'center', 'end'])
349
+ })]),
350
+
351
+ /**
352
+ * buttonTooltipPosition from the standard tooltip
353
+ *
354
+ * Can be passed either as one of tooltip options or as an object specifying cancel, edit and save separately
355
+ */
356
+ buttonTooltipPosition: _propTypes.default.oneOfType([_propTypes.default.oneOf(['top', 'right', 'bottom', 'left']), _propTypes.default.shape({
357
+ cancel: _propTypes.default.oneOf(['top', 'right', 'bottom', 'left']),
358
+ edit: _propTypes.default.oneOf(['top', 'right', 'bottom', 'left']),
359
+ save: _propTypes.default.oneOf(['top', 'right', 'bottom', 'left'])
360
+ })]),
361
+
309
362
  /**
310
363
  * label for cancel button
311
364
  */
@@ -322,15 +375,14 @@ InlineEdit.propTypes = {
322
375
  disabled: _propTypes.default.bool,
323
376
 
324
377
  /**
325
- * Label for the edit button
378
+ * By default the edit icon is shown on hover only.
326
379
  */
327
- editDescription: _propTypes.default.string.isRequired,
380
+ editAlwaysVisible: _propTypes.default.bool,
328
381
 
329
382
  /**
330
- * In some scenarios the edit icon only needs to be shown on hover. These cases are where continual visibility of
331
- * the edit icon is redundant. E.g. a spreadsheet a property panel.
383
+ * Label for the edit button
332
384
  */
333
- editVisibleOnHoverOnly: _propTypes.default.bool,
385
+ editDescription: _propTypes.default.string.isRequired,
334
386
 
335
387
  /**
336
388
  * ID for inline edit
@@ -365,14 +417,14 @@ InlineEdit.propTypes = {
365
417
  /**
366
418
  * method called on input event (it's a React thing onChange behaves like on input).
367
419
  *
368
- * NOTE: caller to handle invalid/warn states and associated text
420
+ * NOTE: caller to handle invalid states and associated text
369
421
  */
370
422
  onChange: _propTypes.default.func,
371
423
 
372
424
  /**
373
425
  * method called on change event
374
426
  *
375
- * NOTE: caller to handle invalid/warn states and associated text
427
+ * NOTE: caller to handle invalid states and associated text
376
428
  */
377
429
  onSave: _propTypes.default.func,
378
430
 
@@ -394,15 +446,5 @@ InlineEdit.propTypes = {
394
446
  /**
395
447
  * initial/unedited value
396
448
  */
397
- value: _propTypes.default.string,
398
-
399
- /**
400
- * set warn state for input
401
- */
402
- warn: _propTypes.default.bool,
403
-
404
- /**
405
- * text shown when warn true
406
- */
407
- warnText: _propTypes.default.string
449
+ value: _propTypes.default.string
408
450
  };