@carbon/ibm-products 1.18.2 → 1.20.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. package/css/components/Datagrid/styles/datagrid.css +20 -1
  2. package/css/components/Datagrid/styles/datagrid.css.map +1 -1
  3. package/css/components/Datagrid/styles/draggableElement.css +57 -0
  4. package/css/components/Datagrid/styles/draggableElement.css.map +1 -0
  5. package/css/components/Datagrid/styles/index.css +100 -1
  6. package/css/components/Datagrid/styles/index.css.map +1 -1
  7. package/css/index-full-carbon.css +114 -2
  8. package/css/index-full-carbon.css.map +1 -1
  9. package/css/index-full-carbon.min.css +3 -3
  10. package/css/index-full-carbon.min.css.map +1 -1
  11. package/css/index-without-carbon-released-only.css +241 -0
  12. package/css/index-without-carbon-released-only.css.map +1 -1
  13. package/css/index-without-carbon-released-only.min.css +7 -1
  14. package/css/index-without-carbon-released-only.min.css.map +1 -1
  15. package/css/index-without-carbon.css +114 -2
  16. package/css/index-without-carbon.css.map +1 -1
  17. package/css/index-without-carbon.min.css +3 -3
  18. package/css/index-without-carbon.min.css.map +1 -1
  19. package/css/index.css +114 -2
  20. package/css/index.css.map +1 -1
  21. package/css/index.min.css +3 -3
  22. package/css/index.min.css.map +1 -1
  23. package/es/components/ActionSet/ActionSet.js +1 -0
  24. package/es/components/AddSelect/AddSelect.js +34 -3
  25. package/es/components/AddSelect/AddSelectFilter.js +9 -3
  26. package/es/components/AddSelect/AddSelectList.js +33 -9
  27. package/es/components/AddSelect/AddSelectSidebar.js +19 -11
  28. package/es/components/ComboButton/ComboButton.js +3 -5
  29. package/es/components/CreateSidePanel/CreateSidePanel.js +4 -10
  30. package/es/components/DataSpreadsheet/DataSpreadsheet.js +3 -1
  31. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +4 -3
  32. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +25 -9
  33. package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +1 -3
  34. package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +63 -34
  35. package/es/components/DataSpreadsheet/utils/checkSelectedHeaderCell.js +17 -3
  36. package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +113 -19
  37. package/es/components/Datagrid/Datagrid/DraggableElement.js +9 -19
  38. package/es/components/EditSidePanel/EditSidePanel.js +3 -9
  39. package/es/components/SidePanel/SidePanel.js +2 -2
  40. package/es/global/js/hooks/useWindowResize.js +2 -1
  41. package/es/global/js/hooks/useWindowScroll.js +2 -1
  42. package/es/global/js/package-settings.js +1 -1
  43. package/es/global/js/utils/scrollableAncestor.js +2 -1
  44. package/lib/components/ActionSet/ActionSet.js +1 -0
  45. package/lib/components/AddSelect/AddSelect.js +34 -3
  46. package/lib/components/AddSelect/AddSelectFilter.js +10 -3
  47. package/lib/components/AddSelect/AddSelectList.js +32 -9
  48. package/lib/components/AddSelect/AddSelectSidebar.js +19 -11
  49. package/lib/components/ComboButton/ComboButton.js +5 -8
  50. package/lib/components/CreateSidePanel/CreateSidePanel.js +3 -10
  51. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +3 -1
  52. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +4 -3
  53. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +25 -9
  54. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +1 -4
  55. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +64 -34
  56. package/lib/components/DataSpreadsheet/utils/checkSelectedHeaderCell.js +17 -3
  57. package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +112 -19
  58. package/lib/components/Datagrid/Datagrid/DraggableElement.js +11 -19
  59. package/lib/components/EditSidePanel/EditSidePanel.js +3 -10
  60. package/lib/components/SidePanel/SidePanel.js +2 -2
  61. package/lib/global/js/hooks/useWindowResize.js +3 -1
  62. package/lib/global/js/hooks/useWindowScroll.js +5 -1
  63. package/lib/global/js/package-settings.js +1 -1
  64. package/lib/global/js/utils/scrollableAncestor.js +6 -1
  65. package/package.json +4 -4
  66. package/scss/components/AddSelect/_add-select.scss +6 -0
  67. package/scss/components/ComboButton/_combo-button.scss +2 -1
  68. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +1 -0
  69. package/scss/components/Datagrid/_datagrid.scss +1 -10
  70. package/scss/components/Datagrid/styles/datagrid.scss +17 -1
  71. package/scss/components/Datagrid/styles/draggableElement.scss +58 -0
  72. package/scss/components/Datagrid/styles/index.scss +2 -1
  73. package/scss/components/_index-released-only.scss +1 -0
@@ -23,15 +23,19 @@ var _settings = require("../../settings");
23
23
 
24
24
  var _AddSelectMetaPanel = require("./AddSelectMetaPanel");
25
25
 
26
- var _excluded = ["icon", "avatar"];
26
+ var _excluded = ["meta", "icon", "avatar"];
27
27
  var componentName = 'AddSelectSidebar';
28
28
 
29
29
  var AddSelectSidebar = function AddSelectSidebar(_ref) {
30
- var closeIconDescription = _ref.closeIconDescription,
30
+ var _modifiers$options;
31
+
32
+ var appliedModifiers = _ref.appliedModifiers,
33
+ closeIconDescription = _ref.closeIconDescription,
31
34
  displayMetalPanel = _ref.displayMetalPanel,
32
35
  influencerTitle = _ref.influencerTitle,
33
36
  items = _ref.items,
34
37
  metaPanelTitle = _ref.metaPanelTitle,
38
+ modifiers = _ref.modifiers,
35
39
  multiSelection = _ref.multiSelection,
36
40
  noSelectionDescription = _ref.noSelectionDescription,
37
41
  noSelectionTitle = _ref.noSelectionTitle,
@@ -39,6 +43,8 @@ var AddSelectSidebar = function AddSelectSidebar(_ref) {
39
43
  setDisplayMetaPanel = _ref.setDisplayMetaPanel,
40
44
  setMultiSelection = _ref.setMultiSelection;
41
45
  var blockClass = "".concat(_settings.pkg.prefix, "--add-select__sidebar");
46
+ var hasModifiers = (modifiers === null || modifiers === void 0 ? void 0 : (_modifiers$options = modifiers.options) === null || _modifiers$options === void 0 ? void 0 : _modifiers$options.length) > 0;
47
+ var hasSelections = multiSelection.length > 0;
42
48
 
43
49
  var handleItemRemove = function handleItemRemove(id) {
44
50
  var newSelections = multiSelection.filter(function (v) {
@@ -53,31 +59,31 @@ var AddSelectSidebar = function AddSelectSidebar(_ref) {
53
59
  }); // certain properties should not be displayed in the sidebar
54
60
  // eslint-disable-next-line no-unused-vars
55
61
 
56
- var icon = selectedItem.icon,
62
+ var meta = selectedItem.meta,
63
+ icon = selectedItem.icon,
57
64
  avatar = selectedItem.avatar,
58
65
  newItem = (0, _objectWithoutProperties2.default)(selectedItem, _excluded);
59
66
  acc.push(newItem);
60
67
  return acc;
61
68
  }, []);
62
69
 
63
- var getTitle = function getTitle(_ref2) {
64
- var title = _ref2.title,
65
- subtitle = _ref2.subtitle,
66
- id = _ref2.id;
70
+ var getTitle = function getTitle(item) {
67
71
  return /*#__PURE__*/_react.default.createElement("div", {
68
72
  className: "".concat(blockClass, "-accordion-title")
69
73
  }, /*#__PURE__*/_react.default.createElement("div", {
70
74
  className: "".concat(blockClass, "-selected-item")
71
75
  }, /*#__PURE__*/_react.default.createElement("p", {
72
76
  className: "".concat(blockClass, "-selected-item-title")
73
- }, title), /*#__PURE__*/_react.default.createElement("p", {
77
+ }, item.title), /*#__PURE__*/_react.default.createElement("p", {
74
78
  className: "".concat(blockClass, "-selected-item-subtitle")
75
- }, subtitle)), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
79
+ }, item.subtitle)), hasModifiers && /*#__PURE__*/_react.default.createElement("div", null, appliedModifiers.find(function (modifier) {
80
+ return modifier.id === item.id;
81
+ })[modifiers.id]), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
76
82
  renderIcon: _iconsReact.SubtractAlt32,
77
83
  iconDescription: removeIconDescription,
78
84
  hasIconOnly: true,
79
85
  onClick: function onClick() {
80
- return handleItemRemove(id);
86
+ return handleItemRemove(item.id);
81
87
  },
82
88
  kind: "ghost",
83
89
  className: "".concat(blockClass, "-item-remove-button"),
@@ -103,7 +109,7 @@ var AddSelectSidebar = function AddSelectSidebar(_ref) {
103
109
  }, influencerTitle), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Tag, {
104
110
  type: "gray",
105
111
  size: "sm"
106
- }, multiSelection.length)), multiSelection.length > 0 ? /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Accordion, {
112
+ }, multiSelection.length)), hasSelections ? /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Accordion, {
107
113
  align: "start"
108
114
  }, sidebarItems.map(function (item) {
109
115
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.AccordionItem, {
@@ -130,11 +136,13 @@ var AddSelectSidebar = function AddSelectSidebar(_ref) {
130
136
 
131
137
  exports.AddSelectSidebar = AddSelectSidebar;
132
138
  AddSelectSidebar.propTypes = {
139
+ appliedModifiers: _propTypes.default.array,
133
140
  closeIconDescription: _propTypes.default.string,
134
141
  displayMetalPanel: _propTypes.default.object,
135
142
  influencerTitle: _propTypes.default.string,
136
143
  items: _propTypes.default.array,
137
144
  metaPanelTitle: _propTypes.default.string,
145
+ modifiers: _propTypes.default.object,
138
146
  multiSelection: _propTypes.default.array,
139
147
  noSelectionDescription: _propTypes.default.string,
140
148
  noSelectionTitle: _propTypes.default.string,
@@ -23,14 +23,12 @@ var _iconsReact = require("@carbon/icons-react");
23
23
 
24
24
  var _carbonComponentsReact = require("carbon-components-react");
25
25
 
26
- var _OverflowMenu = require("carbon-components-react/lib/components/OverflowMenu/OverflowMenu");
27
-
28
- var _setupGetInstanceId = _interopRequireDefault(require("carbon-components-react/lib/tools/setupGetInstanceId"));
29
-
30
26
  var _classnames = _interopRequireDefault(require("classnames"));
31
27
 
32
28
  var _propTypes = require("prop-types");
33
29
 
30
+ var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
31
+
34
32
  var _react = _interopRequireWildcard(require("react"));
35
33
 
36
34
  var _excluded = ["children", "className", "overflowMenu"],
@@ -45,7 +43,6 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
45
43
 
46
44
  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; }
47
45
 
48
- var getInstanceId = (0, _setupGetInstanceId.default)();
49
46
  var blockClass = 'security--combo-button';
50
47
  /**
51
48
  * The combo button consolidates similar actions, while exposing the most commonly used one.
@@ -57,7 +54,7 @@ var ComboButton = function ComboButton(_ref) {
57
54
  overflowMenu = _ref.overflowMenu,
58
55
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
59
56
 
60
- var _useRef = (0, _react.useRef)(getInstanceId()),
57
+ var _useRef = (0, _react.useRef)((0, _uuidv.default)()),
61
58
  instanceId = _useRef.current;
62
59
 
63
60
  var _useState = (0, _react.useState)(false),
@@ -83,7 +80,7 @@ var ComboButton = function ComboButton(_ref) {
83
80
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, {
84
81
  className: (0, _classnames.default)(blockClass, className),
85
82
  "data-floating-menu-container": true
86
- }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, primaryAction), restActions.length > 0 && /*#__PURE__*/_react.default.createElement(_OverflowMenu.OverflowMenu, (0, _extends2.default)({}, overflowMenu, {
83
+ }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, primaryAction), restActions.length > 0 && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenu, (0, _extends2.default)({}, overflowMenu, {
87
84
  className: "".concat(blockClass, "__overflow-menu"),
88
85
  menuOptionsClass: "".concat(blockClass, "__overflow-menu__list"),
89
86
  onClick: function onClick() {
@@ -121,5 +118,5 @@ ComboButton.propTypes = {
121
118
  className: _propTypes.string,
122
119
 
123
120
  /** Provide the [props of the `OverflowMenu`](https://react.carbondesignsystem.com/?path=/docs/overflowmenu) */
124
- overflowMenu: (0, _propTypes.shape)(_OverflowMenu.OverflowMenu.propTypes)
121
+ overflowMenu: (0, _propTypes.shape)(_carbonComponentsReact.OverflowMenu.propTypes)
125
122
  };
@@ -27,8 +27,6 @@ var _carbonComponentsReact = require("carbon-components-react");
27
27
 
28
28
  var _SidePanel = require("../SidePanel");
29
29
 
30
- var _ActionSet = require("../ActionSet");
31
-
32
30
  var _excluded = ["className", "children", "disableSubmit", "formTitle", "formDescription", "onRequestClose", "onRequestSubmit", "open", "primaryButtonText", "secondaryButtonText", "selectorPageContent", "selectorPrimaryFocus", "subtitle", "title"];
33
31
 
34
32
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
@@ -37,7 +35,6 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
37
35
 
38
36
  // The block part of our conventional BEM class names (blockClass__E--M).
39
37
  var blockClass = "".concat(_settings.pkg.prefix, "--create-side-panel");
40
- var sidePanelBlockClass = "".concat(_settings.pkg.prefix, "--side-panel");
41
38
  var componentName = 'CreateSidePanel'; // NOTE: the component SCSS is not imported here: it is rolled up separately.
42
39
 
43
40
  /**
@@ -74,7 +71,6 @@ var CreateSidePanel = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
74
71
  onClick: onRequestClose,
75
72
  kind: 'secondary'
76
73
  }];
77
- var actionContainerClassNames = (0, _classnames.default)(["".concat(blockClass, "__actions-container"), "".concat(sidePanelBlockClass, "__actions-container")]);
78
74
  return selectorPageContent && /*#__PURE__*/_react.default.createElement(_SidePanel.SidePanel, (0, _extends2.default)({}, rest, _objectSpread({
79
75
  open: open,
80
76
  ref: ref,
@@ -88,18 +84,15 @@ var CreateSidePanel = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
88
84
  slideIn: true,
89
85
  animateTitle: false,
90
86
  className: (0, _classnames.default)(blockClass, className),
91
- size: "md"
87
+ size: "md",
88
+ actions: actions
92
89
  }), /*#__PURE__*/_react.default.createElement("h3", {
93
90
  className: "".concat(blockClass, "__form-title-text ").concat(blockClass, "__content-text")
94
91
  }, formTitle), /*#__PURE__*/_react.default.createElement("p", {
95
92
  className: "".concat(blockClass, "__form-description-text ").concat(blockClass, "__content-text")
96
93
  }, formDescription), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Form, {
97
94
  className: "".concat(blockClass, "__form")
98
- }, children, /*#__PURE__*/_react.default.createElement(_ActionSet.ActionSet, {
99
- actions: actions,
100
- className: actionContainerClassNames,
101
- size: "md"
102
- })));
95
+ }, children));
103
96
  });
104
97
 
105
98
  exports.CreateSidePanel = CreateSidePanel;
@@ -701,7 +701,8 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
701
701
  spreadsheetRef: spreadsheetRef,
702
702
  isKeyboard: isKeyboard,
703
703
  setSelectionAreaData: setSelectionAreaData,
704
- index: index
704
+ index: index,
705
+ currentMatcher: currentMatcher
705
706
  }; // Select an entire column
706
707
 
707
708
  if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' && (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) !== 'header') {
@@ -802,6 +803,7 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
802
803
  activeCellCoordinates: activeCellCoordinates,
803
804
  cellSize: cellSize,
804
805
  columns: columns,
806
+ currentMatcher: currentMatcher,
805
807
  defaultColumn: defaultColumn,
806
808
  headerGroups: headerGroups,
807
809
  rows: rows,
@@ -197,7 +197,8 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
197
197
  setActiveCellCoordinates: setActiveCellCoordinates,
198
198
  rows: rows,
199
199
  activeCellCoordinates: activeCellCoordinates,
200
- defaultColumn: defaultColumn
200
+ defaultColumn: defaultColumn,
201
+ selectionAreas: selectionAreas
201
202
  }); // Make sure that if the cellSize prop changes, the active
202
203
  // cell also gets updated with the new size and new top placement
203
204
  // value. All of the cell selections will be updated as well
@@ -421,7 +422,7 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
421
422
  "data-column-index": "header",
422
423
  type: "button",
423
424
  onClick: handleRowHeaderClick(index),
424
- className: (0, _classnames.default)("".concat(blockClass, "__td"), "".concat(blockClass, "__td-th"), "".concat(blockClass, "--interactive-cell-element"), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__td-th--active-header"), (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === index || (0, _checkActiveHeaderCell.checkActiveHeaderCell)(index, selectionAreas, 'row')), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__td-th--selected-header"), (0, _checkSelectedHeaderCell.checkSelectedHeaderCell)(index, selectionAreas, 'row')), _cx)),
425
+ className: (0, _classnames.default)("".concat(blockClass, "__td"), "".concat(blockClass, "__td-th"), "".concat(blockClass, "--interactive-cell-element"), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__td-th--active-header"), (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === index || (0, _checkActiveHeaderCell.checkActiveHeaderCell)(index, selectionAreas, 'row')), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__td-th--selected-header"), (0, _checkSelectedHeaderCell.checkSelectedHeaderCell)(index, selectionAreas, 'row', columns)), _cx)),
425
426
  style: {
426
427
  width: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth
427
428
  }
@@ -450,7 +451,7 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
450
451
  }, cell.render('Cell')));
451
452
  }));
452
453
  }
453
- }, [prepareRow, rows, activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row, selectionAreas, handleRowHeaderClick, handleBodyCellClick, handleBodyCellHover, defaultColumn]);
454
+ }, [prepareRow, rows, activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row, selectionAreas, handleRowHeaderClick, handleBodyCellClick, handleBodyCellHover, defaultColumn, columns]);
454
455
  var spreadsheetBodyRef = (0, _react.useRef)();
455
456
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
456
457
  ref: spreadsheetBodyRef,
@@ -52,6 +52,7 @@ var DataSpreadsheetHeader = /*#__PURE__*/(0, _react.forwardRef)(function (_ref,
52
52
  var activeCellCoordinates = _ref.activeCellCoordinates,
53
53
  cellSize = _ref.cellSize,
54
54
  columns = _ref.columns,
55
+ currentMatcher = _ref.currentMatcher,
55
56
  defaultColumn = _ref.defaultColumn,
56
57
  headerGroups = _ref.headerGroups,
57
58
  scrollBarSize = _ref.scrollBarSize,
@@ -94,6 +95,7 @@ var DataSpreadsheetHeader = /*#__PURE__*/(0, _react.forwardRef)(function (_ref,
94
95
  var handleColumnHeaderClick = function handleColumnHeaderClick(index) {
95
96
  return function (event) {
96
97
  var isHoldingCommandKey = event.metaKey || event.ctrlKey;
98
+ var isHoldingShiftKey = event.shiftKey;
97
99
  (0, _handleHeaderCellSelection.handleHeaderCellSelection)({
98
100
  type: 'column',
99
101
  activeCellCoordinates: activeCellCoordinates,
@@ -105,7 +107,9 @@ var DataSpreadsheetHeader = /*#__PURE__*/(0, _react.forwardRef)(function (_ref,
105
107
  spreadsheetRef: ref,
106
108
  index: index,
107
109
  setSelectionAreaData: setSelectionAreaData,
108
- isHoldingCommandKey: isHoldingCommandKey
110
+ isHoldingCommandKey: isHoldingCommandKey,
111
+ isHoldingShiftKey: isHoldingShiftKey,
112
+ currentMatcher: currentMatcher
109
113
  });
110
114
  };
111
115
  };
@@ -126,23 +130,30 @@ var DataSpreadsheetHeader = /*#__PURE__*/(0, _react.forwardRef)(function (_ref,
126
130
  return function (event) {
127
131
  var _selectionAreaToClone;
128
132
 
133
+ if (event.shiftKey) {
134
+ // Remove columns, need to call handleHeaderCellSelection
135
+ return;
136
+ }
137
+
129
138
  setSelectedHeaderReorderActive(true);
139
+ var selectionAreaToClone = selectionAreas.filter(function (item) {
140
+ return (item === null || item === void 0 ? void 0 : item.matcher) === currentMatcher;
141
+ });
142
+ var selectionAreaElement = ref.current.querySelector("[data-matcher-id=\"".concat((_selectionAreaToClone = selectionAreaToClone[0]) === null || _selectionAreaToClone === void 0 ? void 0 : _selectionAreaToClone.matcher, "\"]"));
130
143
  var clickXPosition = event.clientX;
131
144
  var headerButtonCoords = event.target.getBoundingClientRect();
145
+ var headerIndex = event.target.getAttribute('data-column-index');
132
146
  var offsetXValue = clickXPosition - headerButtonCoords.left;
147
+ var lowestColumnIndexFromSelectionArea = Math.min(selectionAreaToClone[0].point1.column, selectionAreaToClone[0].point2.column);
148
+ var selectionAreaCoords = selectionAreaElement.getBoundingClientRect();
149
+ var updatedOffsetDifference = lowestColumnIndexFromSelectionArea < parseInt(headerIndex) ? offsetXValue + (headerButtonCoords.left - selectionAreaCoords.left) : offsetXValue;
133
150
  var bodyContainer = document.querySelector(".".concat(blockClass, "__list--container")).firstElementChild;
134
- var selectionAreaToClone = selectionAreas.filter(function (item) {
135
- var _item$header;
136
-
137
- return (item === null || item === void 0 ? void 0 : (_item$header = item.header) === null || _item$header === void 0 ? void 0 : _item$header.index) === index;
138
- });
139
- var selectionAreaElement = ref.current.querySelector("[data-matcher-id=\"".concat((_selectionAreaToClone = selectionAreaToClone[0]) === null || _selectionAreaToClone === void 0 ? void 0 : _selectionAreaToClone.matcher, "\"]"));
140
151
  var selectionAreaClonedElement = selectionAreaElement.cloneNode();
141
152
  var reorderIndicatorLine = selectionAreaElement.cloneNode();
142
153
  reorderIndicatorLine.className = "".concat(blockClass, "__reorder-indicator-line");
143
154
  reorderIndicatorLine.style.width = (0, _layout.px)(2);
144
155
  selectionAreaClonedElement.classList.add("".concat(blockClass, "__selection-area--element-cloned"));
145
- selectionAreaClonedElement.setAttribute('data-clone-offset-x', offsetXValue);
156
+ selectionAreaClonedElement.setAttribute('data-clone-offset-x', updatedOffsetDifference);
146
157
  selectionAreaClonedElement.setAttribute('data-column-index-original', index);
147
158
  bodyContainer.appendChild(selectionAreaClonedElement);
148
159
  bodyContainer.appendChild(reorderIndicatorLine);
@@ -192,7 +203,7 @@ var DataSpreadsheetHeader = /*#__PURE__*/(0, _react.forwardRef)(function (_ref,
192
203
  }, "\xA0")), headerGroup.headers.map(function (column, index) {
193
204
  var _cx2;
194
205
 
195
- var selectedHeader = (0, _checkSelectedHeaderCell.checkSelectedHeaderCell)(index, selectionAreas, 'column');
206
+ var selectedHeader = (0, _checkSelectedHeaderCell.checkSelectedHeaderCell)(index, selectionAreas, 'column', rows);
196
207
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
197
208
  key: "column_".concat(index),
198
209
  role: "columnheader",
@@ -237,6 +248,11 @@ DataSpreadsheetHeader.propTypes = {
237
248
  */
238
249
  columns: _propTypes.default.array,
239
250
 
251
+ /**
252
+ * uuid that corresponds to the current selection area
253
+ */
254
+ currentMatcher: _propTypes.default.string,
255
+
240
256
  /**
241
257
  * Default spreadsheet sizing values
242
258
  */
@@ -11,8 +11,6 @@ var _layout = require("@carbon/layout");
11
11
 
12
12
  var _settings = require("../../../settings");
13
13
 
14
- var _getScrollbarWidth = require("../../../global/js/utils/getScrollbarWidth");
15
-
16
14
  var _moveColumnIndicatorLine = require("../utils/moveColumnIndicatorLine");
17
15
 
18
16
  /**
@@ -46,7 +44,6 @@ var useSpreadsheetMouseMove = function useSpreadsheetMouseMove(_ref) {
46
44
  spreadsheetCoords: spreadsheetCoords,
47
45
  leftScrollAmount: scrollAmount
48
46
  });
49
- var scrollbarWidth = (0, _getScrollbarWidth.getScrollbarWidth)();
50
47
  var spreadsheetWrapperElement = ref.current;
51
48
  spreadsheetWrapperElement.getBoundingClientRect();
52
49
  var xPositionRelativeToSpreadsheet = event.clientX - spreadsheetCoords.left;
@@ -56,7 +53,7 @@ var useSpreadsheetMouseMove = function useSpreadsheetMouseMove(_ref) {
56
53
  var clonePlacement = Math.max(xPositionRelativeToSpreadsheet - offsetXValue, defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth); // Moves the position of the cloned selection area to follow mouse, and
57
54
  // add the amount horizontally scrolled
58
55
 
59
- clonedSelectionElement.style.left = (0, _layout.px)(totalSpreadsheetScrollingWidth - clonedSelectionWidth - scrollbarWidth >= clonePlacement ? clonePlacement + scrollAmount : totalSpreadsheetScrollingWidth - clonedSelectionWidth - scrollbarWidth);
56
+ clonedSelectionElement.style.left = (0, _layout.px)(totalSpreadsheetScrollingWidth - clonedSelectionWidth >= clonePlacement ? clonePlacement + scrollAmount : totalSpreadsheetScrollingWidth - clonedSelectionWidth);
60
57
  };
61
58
 
62
59
  if (headerCellHoldActive) {
@@ -38,7 +38,8 @@ var useSpreadsheetMouseUp = function useSpreadsheetMouseUp(_ref) {
38
38
  setActiveCellCoordinates = _ref.setActiveCellCoordinates,
39
39
  activeCellCoordinates = _ref.activeCellCoordinates,
40
40
  rows = _ref.rows,
41
- defaultColumn = _ref.defaultColumn;
41
+ defaultColumn = _ref.defaultColumn,
42
+ selectionAreas = _ref.selectionAreas;
42
43
  (0, _react.useEffect)(function () {
43
44
  var handleMouseUp = function handleMouseUp(event) {
44
45
  // Remove the cloned selection area on mouse up
@@ -53,8 +54,12 @@ var useSpreadsheetMouseUp = function useSpreadsheetMouseUp(_ref) {
53
54
 
54
55
  if (selectionAreaCloneElement) {
55
56
  var closestCell = event.target.closest(".".concat(blockClass, "--interactive-cell-element"));
56
- var newColumnIndex = closestCell === null || closestCell === void 0 ? void 0 : closestCell.getAttribute('data-column-index');
57
- var originalColumnIndex = selectionAreaCloneElement === null || selectionAreaCloneElement === void 0 ? void 0 : selectionAreaCloneElement.getAttribute('data-column-index-original');
57
+ var newColumnIndex = parseInt === null || parseInt === void 0 ? void 0 : parseInt(closestCell === null || closestCell === void 0 ? void 0 : closestCell.getAttribute('data-column-index'));
58
+ var originalColumnIndex = parseInt === null || parseInt === void 0 ? void 0 : parseInt(selectionAreaCloneElement === null || selectionAreaCloneElement === void 0 ? void 0 : selectionAreaCloneElement.getAttribute('data-column-index-original'));
59
+ var selectionAreaToClone = selectionAreas.filter(function (item) {
60
+ return (item === null || item === void 0 ? void 0 : item.matcher) === currentMatcher;
61
+ });
62
+ var selectionAreaIndexArray = selectionAreaToClone[0].header.selectedIndexList;
58
63
  var columnToMoveToElement = ref.current.querySelector("[data-row-index=\"header\"][data-column-index=\"".concat(newColumnIndex, "\"]")); // Mouse up element was not part of the spreadsheet component
59
64
 
60
65
  if (!columnToMoveToElement) {
@@ -63,24 +68,11 @@ var useSpreadsheetMouseUp = function useSpreadsheetMouseUp(_ref) {
63
68
 
64
69
  var selectionAreaToMove = ref.current.querySelector("[data-matcher-id=\"".concat(currentMatcher, "\"]"));
65
70
  var spreadsheetPosition = ref.current.getBoundingClientRect();
66
- var newIndexPosition = columnToMoveToElement.getBoundingClientRect();
67
71
  var listContainer = ref.current.querySelector(".".concat(blockClass, "__list--container"));
68
72
  var leftScrollAmount = listContainer.scrollLeft;
69
- var relativeNewPosition = newIndexPosition.left - spreadsheetPosition.left + leftScrollAmount;
70
- var cloneColumnWidth = selectionAreaCloneElement.offsetWidth;
71
- var columnsWidthUpToNewIndex = 0;
72
73
  var newIndexLessThanStarting = newColumnIndex < originalColumnIndex;
73
- visibleColumns.forEach(function (item, index) {
74
- if (newIndexLessThanStarting && index === visibleColumns.length - 1) {
75
- return;
76
- }
77
-
78
- if (index <= newColumnIndex) {
79
- columnsWidthUpToNewIndex += (item === null || item === void 0 ? void 0 : item.width) || (defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.width);
80
- }
81
- });
82
- var updatedSelectionAreaPlacement = newIndexLessThanStarting ? relativeNewPosition : columnsWidthUpToNewIndex - cloneColumnWidth + (defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth);
83
- selectionAreaToMove.style.left = (0, _layout.px)(updatedSelectionAreaPlacement);
74
+ var newIndexGreater = newColumnIndex > originalColumnIndex;
75
+ var differenceBetweenOldNewIndex = newIndexGreater ? newColumnIndex - originalColumnIndex : originalColumnIndex - newColumnIndex;
84
76
  setSelectionAreas(function (prev) {
85
77
  var selectionAreaClone = (0, _deepCloneObject.deepCloneObject)(prev);
86
78
 
@@ -96,26 +88,64 @@ var useSpreadsheetMouseUp = function useSpreadsheetMouseUp(_ref) {
96
88
  return prev;
97
89
  }
98
90
 
99
- selectionAreaClone[indexOfItemToUpdate].header.index = Number(newColumnIndex);
100
- selectionAreaClone[indexOfItemToUpdate].point1.column = Number(newColumnIndex);
101
- selectionAreaClone[indexOfItemToUpdate].point2.column = Number(newColumnIndex);
91
+ if (!selectionAreaIndexArray.includes(newColumnIndex)) {
92
+ // We need to not add just the newColumnIndex, but an array of indexes
93
+ // if there are multiple columns
94
+ var newIndexArray = newIndexGreater ? selectionAreaIndexArray.map(function (num) {
95
+ return num + differenceBetweenOldNewIndex;
96
+ }) : selectionAreaIndexArray.map(function (num) {
97
+ return num - differenceBetweenOldNewIndex;
98
+ });
99
+ selectionAreaClone[indexOfItemToUpdate].header.selectedIndexList = newIndexArray;
100
+ selectionAreaClone[indexOfItemToUpdate].point1.column = Math.min.apply(Math, (0, _toConsumableArray2.default)(newIndexArray));
101
+ selectionAreaClone[indexOfItemToUpdate].point2.column = Math.max.apply(Math, (0, _toConsumableArray2.default)(newIndexArray));
102
+ }
103
+
102
104
  return selectionAreaClone;
103
- });
104
- var columnIdArray = visibleColumns.map(function (column) {
105
- return column.id;
106
- });
107
- var columnIdArrayClone = (0, _toConsumableArray2.default)(columnIdArray); // Remove one element at the original index
105
+ }); // Only reorder columns if the new index is _not_ part of the
106
+ // selectionAreaIndexArray, meaning the new placement is outside
107
+ // of the current selection area. Similarly, the active cell position
108
+ // should only be changed under the same condition.
109
+
110
+ if (!selectionAreaIndexArray.includes(newColumnIndex)) {
111
+ var deleteCount = selectionAreaIndexArray.length;
112
+ var startIndex = Math.min.apply(Math, (0, _toConsumableArray2.default)(selectionAreaIndexArray));
113
+ var columnIdArray = visibleColumns.map(function (column) {
114
+ return column.id;
115
+ });
116
+ var columnIdArrayClone = (0, _toConsumableArray2.default)(columnIdArray);
108
117
 
109
- columnIdArrayClone.splice(originalColumnIndex, 1); // Add one element at the new index
118
+ var getNewColumnOrder = function getNewColumnOrder() {
119
+ var newColumnList = [];
120
+ selectionAreaIndexArray.map(function (index) {
121
+ return newColumnList.push(columnIdArray[index]);
122
+ });
123
+ return newColumnList;
124
+ }; // Remove one element at the original index
110
125
 
111
- columnIdArrayClone.splice(newColumnIndex, 0, columnIdArray[originalColumnIndex]);
112
- setColumnOrder(columnIdArrayClone); // Function provided by useTable (react-table) hook to reorder columns
113
126
 
114
- var newCellCoords = _objectSpread(_objectSpread({}, activeCellCoordinates), {}, {
115
- column: Number(newColumnIndex)
116
- });
127
+ columnIdArrayClone.splice(startIndex, deleteCount);
128
+ var originalPointIndex = selectionAreaIndexArray.findIndex(function (item) {
129
+ return item === originalColumnIndex;
130
+ });
131
+ var updatedNewIndexWithNewOrder = newColumnIndex - originalPointIndex; // Add one element at the new index
132
+
133
+ columnIdArrayClone.splice.apply(columnIdArrayClone, [updatedNewIndexWithNewOrder, 0].concat((0, _toConsumableArray2.default)(getNewColumnOrder())));
134
+ setColumnOrder(columnIdArrayClone); // Function provided by useTable (react-table) hook to reorder columns
135
+
136
+ var newCellCoords = _objectSpread(_objectSpread({}, activeCellCoordinates), {}, {
137
+ column: newIndexGreater ? activeCellCoordinates.column + differenceBetweenOldNewIndex : activeCellCoordinates.column - differenceBetweenOldNewIndex
138
+ });
139
+
140
+ setActiveCellCoordinates(newCellCoords);
141
+ var firstSelectedHeader = Array.from(ref.current.querySelectorAll(".".concat(blockClass, "__th--selected-header")))[0];
142
+ var firstSelectedHeaderCoords = firstSelectedHeader.getBoundingClientRect();
143
+ var newRelativePosition = firstSelectedHeaderCoords.left - spreadsheetPosition.left + leftScrollAmount; // console.log(firstSelectedHeaderCoords.left - spreadsheetPosition.left + leftScrollAmount);
144
+
145
+ var updatedSelectionAreaPlacement = newIndexLessThanStarting ? newRelativePosition : newColumnIndex === originalColumnIndex ? selectionAreaToMove.style.left : newRelativePosition;
146
+ selectionAreaToMove.style.left = (0, _layout.px)(updatedSelectionAreaPlacement);
147
+ } // Remove the cloned column and indicator elements
117
148
 
118
- setActiveCellCoordinates(newCellCoords); // Remove the cloned column and indicator elements
119
149
 
120
150
  var indicatorLineElement = ref.current.querySelector(".".concat(blockClass, "__reorder-indicator-line"));
121
151
  indicatorLineElement === null || indicatorLineElement === void 0 ? void 0 : indicatorLineElement.remove();
@@ -157,7 +187,7 @@ var useSpreadsheetMouseUp = function useSpreadsheetMouseUp(_ref) {
157
187
  return function () {
158
188
  document.removeEventListener('mouseup', handleMouseUp);
159
189
  };
160
- }, [blockClass, currentMatcher, setSelectionAreas, setClickAndHoldActive, setValidStartingPoint, validStartingPoint, ref, setHeaderCellHoldActive, setColumnOrder, visibleColumns, setActiveCellCoordinates, activeCellCoordinates, rows, defaultColumn]);
190
+ }, [blockClass, currentMatcher, setSelectionAreas, setClickAndHoldActive, setValidStartingPoint, validStartingPoint, ref, setHeaderCellHoldActive, setColumnOrder, visibleColumns, setActiveCellCoordinates, activeCellCoordinates, rows, defaultColumn, selectionAreas]);
161
191
  };
162
192
 
163
193
  exports.useSpreadsheetMouseUp = useSpreadsheetMouseUp;
@@ -13,12 +13,26 @@ var _deepCloneObject = require("../../../global/js/utils/deepCloneObject");
13
13
  * This source code is licensed under the Apache-2.0 license found in the
14
14
  * LICENSE file in the root directory of this source tree.
15
15
  */
16
- var checkSelectedHeaderCell = function checkSelectedHeaderCell(headerIndex, selectionAreas, headerType) {
16
+ var checkSelectedHeaderCell = function checkSelectedHeaderCell(headerIndex, selectionAreas, headerType, items) {
17
17
  var areasCloned = (0, _deepCloneObject.deepCloneObject)(selectionAreas);
18
18
  var isSelectedHeader = areasCloned.some(function (area) {
19
- var _area$header, _area$header2;
19
+ var _area$point, _area$point2, _area$point3, _area$point4, _area$point5, _area$point6, _area$point7, _area$point8;
20
20
 
21
- 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);
21
+ var oppositeType = headerType === 'column' ? 'row' : 'column';
22
+ var minOppositeSelection = Math.min(area === null || area === void 0 ? void 0 : (_area$point = area.point1) === null || _area$point === void 0 ? void 0 : _area$point[oppositeType], area === null || area === void 0 ? void 0 : (_area$point2 = area.point2) === null || _area$point2 === void 0 ? void 0 : _area$point2[oppositeType]);
23
+ var maxOppositeSelection = Math.max(area === null || area === void 0 ? void 0 : (_area$point3 = area.point1) === null || _area$point3 === void 0 ? void 0 : _area$point3[oppositeType], area === null || area === void 0 ? void 0 : (_area$point4 = area.point2) === null || _area$point4 === void 0 ? void 0 : _area$point4[oppositeType]);
24
+ var minSelection = Math.min(area === null || area === void 0 ? void 0 : (_area$point5 = area.point1) === null || _area$point5 === void 0 ? void 0 : _area$point5[headerType], area === null || area === void 0 ? void 0 : (_area$point6 = area.point2) === null || _area$point6 === void 0 ? void 0 : _area$point6[headerType]);
25
+ var maxSelection = Math.max(area === null || area === void 0 ? void 0 : (_area$point7 = area.point1) === null || _area$point7 === void 0 ? void 0 : _area$point7[headerType], area === null || area === void 0 ? void 0 : (_area$point8 = area.point2) === null || _area$point8 === void 0 ? void 0 : _area$point8[headerType]);
26
+ var isTrueSelectedState = (items === null || items === void 0 ? void 0 : items.length) - 1 === maxOppositeSelection && minOppositeSelection === 0; // console.log({minSelection, maxSelection});
27
+ // Iterate over all columns included in the selection area
28
+
29
+ for (var i = minSelection; i <= maxSelection; i++) {
30
+ if (headerIndex === i && isTrueSelectedState) {
31
+ return true;
32
+ }
33
+ }
34
+
35
+ return false;
22
36
  });
23
37
  return isSelectedHeader;
24
38
  };