@atlaskit/editor-plugin-table 7.3.0 → 7.3.2

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 (98) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/afm-cc/tsconfig.json +3 -0
  3. package/dist/cjs/commands/misc.js +4 -2
  4. package/dist/cjs/commands/selection.js +4 -2
  5. package/dist/cjs/pm-plugins/drag-and-drop/commands.js +3 -1
  6. package/dist/cjs/pm-plugins/drag-and-drop/plugin.js +33 -1
  7. package/dist/cjs/pm-plugins/drag-and-drop/reducer.js +2 -1
  8. package/dist/cjs/pm-plugins/table-selection-keymap.js +2 -2
  9. package/dist/cjs/ui/DragHandle/HandleIconComponent.js +1 -3
  10. package/dist/cjs/ui/DragHandle/index.js +24 -10
  11. package/dist/cjs/ui/FloatingDragMenu/DragMenu.js +75 -33
  12. package/dist/cjs/ui/FloatingDragMenu/DropdownMenu.js +123 -0
  13. package/dist/cjs/ui/FloatingDragMenu/index.js +2 -2
  14. package/dist/cjs/ui/TableFloatingColumnControls/ColumnControls/index.js +24 -35
  15. package/dist/cjs/ui/TableFloatingColumnControls/index.js +1 -2
  16. package/dist/cjs/ui/TableFloatingControls/CornerControls/DragCornerControls.js +4 -0
  17. package/dist/cjs/ui/TableFloatingControls/RowControls/DragControls.js +26 -33
  18. package/dist/cjs/ui/common-styles.js +1 -1
  19. package/dist/cjs/ui/consts.js +3 -2
  20. package/dist/es2019/commands/misc.js +4 -4
  21. package/dist/es2019/commands/selection.js +4 -4
  22. package/dist/es2019/pm-plugins/drag-and-drop/commands.js +3 -3
  23. package/dist/es2019/pm-plugins/drag-and-drop/plugin.js +34 -1
  24. package/dist/es2019/pm-plugins/drag-and-drop/reducer.js +2 -1
  25. package/dist/es2019/pm-plugins/table-selection-keymap.js +2 -2
  26. package/dist/es2019/ui/DragHandle/HandleIconComponent.js +1 -3
  27. package/dist/es2019/ui/DragHandle/index.js +27 -10
  28. package/dist/es2019/ui/FloatingDragMenu/DragMenu.js +72 -32
  29. package/dist/es2019/ui/FloatingDragMenu/DropdownMenu.js +109 -0
  30. package/dist/es2019/ui/FloatingDragMenu/index.js +2 -2
  31. package/dist/es2019/ui/TableFloatingColumnControls/ColumnControls/index.js +24 -35
  32. package/dist/es2019/ui/TableFloatingColumnControls/index.js +1 -2
  33. package/dist/es2019/ui/TableFloatingControls/CornerControls/DragCornerControls.js +4 -0
  34. package/dist/es2019/ui/TableFloatingControls/RowControls/DragControls.js +26 -33
  35. package/dist/es2019/ui/common-styles.js +11 -1
  36. package/dist/es2019/ui/consts.js +2 -1
  37. package/dist/esm/commands/misc.js +4 -2
  38. package/dist/esm/commands/selection.js +4 -2
  39. package/dist/esm/pm-plugins/drag-and-drop/commands.js +3 -2
  40. package/dist/esm/pm-plugins/drag-and-drop/plugin.js +33 -1
  41. package/dist/esm/pm-plugins/drag-and-drop/reducer.js +2 -1
  42. package/dist/esm/pm-plugins/table-selection-keymap.js +2 -2
  43. package/dist/esm/ui/DragHandle/HandleIconComponent.js +1 -3
  44. package/dist/esm/ui/DragHandle/index.js +23 -9
  45. package/dist/esm/ui/FloatingDragMenu/DragMenu.js +74 -35
  46. package/dist/esm/ui/FloatingDragMenu/DropdownMenu.js +116 -0
  47. package/dist/esm/ui/FloatingDragMenu/index.js +2 -2
  48. package/dist/esm/ui/TableFloatingColumnControls/ColumnControls/index.js +24 -35
  49. package/dist/esm/ui/TableFloatingColumnControls/index.js +1 -2
  50. package/dist/esm/ui/TableFloatingControls/CornerControls/DragCornerControls.js +4 -0
  51. package/dist/esm/ui/TableFloatingControls/RowControls/DragControls.js +26 -33
  52. package/dist/esm/ui/common-styles.js +1 -1
  53. package/dist/esm/ui/consts.js +2 -1
  54. package/dist/types/commands/misc.d.ts +2 -2
  55. package/dist/types/commands/selection.d.ts +2 -2
  56. package/dist/types/pm-plugins/drag-and-drop/actions.d.ts +1 -0
  57. package/dist/types/pm-plugins/drag-and-drop/commands.d.ts +2 -1
  58. package/dist/types/pm-plugins/drag-and-drop/types.d.ts +2 -0
  59. package/dist/types/ui/DragHandle/HandleIconComponent.d.ts +1 -2
  60. package/dist/types/ui/DragHandle/index.d.ts +3 -2
  61. package/dist/types/ui/FloatingDragMenu/DragMenu.d.ts +7 -8
  62. package/dist/types/ui/FloatingDragMenu/DropdownMenu.d.ts +30 -0
  63. package/dist/types/ui/TableFloatingColumnControls/ColumnControls/index.d.ts +1 -2
  64. package/dist/types/ui/TableFloatingControls/RowControls/DragControls.d.ts +1 -1
  65. package/dist/types/ui/consts.d.ts +1 -0
  66. package/dist/types-ts4.5/commands/misc.d.ts +2 -2
  67. package/dist/types-ts4.5/commands/selection.d.ts +2 -2
  68. package/dist/types-ts4.5/pm-plugins/drag-and-drop/actions.d.ts +1 -0
  69. package/dist/types-ts4.5/pm-plugins/drag-and-drop/commands.d.ts +2 -1
  70. package/dist/types-ts4.5/pm-plugins/drag-and-drop/types.d.ts +2 -0
  71. package/dist/types-ts4.5/ui/DragHandle/HandleIconComponent.d.ts +1 -2
  72. package/dist/types-ts4.5/ui/DragHandle/index.d.ts +3 -2
  73. package/dist/types-ts4.5/ui/FloatingDragMenu/DragMenu.d.ts +7 -8
  74. package/dist/types-ts4.5/ui/FloatingDragMenu/DropdownMenu.d.ts +30 -0
  75. package/dist/types-ts4.5/ui/TableFloatingColumnControls/ColumnControls/index.d.ts +1 -2
  76. package/dist/types-ts4.5/ui/TableFloatingControls/RowControls/DragControls.d.ts +1 -1
  77. package/dist/types-ts4.5/ui/consts.d.ts +1 -0
  78. package/package.json +3 -2
  79. package/src/commands/misc.ts +17 -4
  80. package/src/commands/selection.ts +12 -4
  81. package/src/pm-plugins/drag-and-drop/actions.ts +1 -0
  82. package/src/pm-plugins/drag-and-drop/commands.ts +3 -0
  83. package/src/pm-plugins/drag-and-drop/plugin.ts +47 -0
  84. package/src/pm-plugins/drag-and-drop/reducer.ts +1 -0
  85. package/src/pm-plugins/drag-and-drop/types.ts +3 -0
  86. package/src/pm-plugins/table-selection-keymap.ts +2 -2
  87. package/src/ui/DragHandle/HandleIconComponent.tsx +2 -9
  88. package/src/ui/DragHandle/index.tsx +39 -16
  89. package/src/ui/FloatingDragMenu/DragMenu.tsx +362 -310
  90. package/src/ui/FloatingDragMenu/DropdownMenu.tsx +150 -0
  91. package/src/ui/FloatingDragMenu/index.tsx +3 -3
  92. package/src/ui/TableFloatingColumnControls/ColumnControls/index.tsx +72 -91
  93. package/src/ui/TableFloatingColumnControls/index.tsx +1 -2
  94. package/src/ui/TableFloatingControls/CornerControls/DragCornerControls.tsx +5 -0
  95. package/src/ui/TableFloatingControls/RowControls/DragControls.tsx +89 -104
  96. package/src/ui/common-styles.ts +11 -1
  97. package/src/ui/consts.ts +1 -0
  98. package/tsconfig.app.json +3 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @atlaskit/editor-plugin-table
2
2
 
3
+ ## 7.3.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [#72081](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/72081) [`4487160917d2`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/4487160917d2) - [ux] ED-22052: adds button type attribute to non atlaskit button instances
8
+
9
+ ## 7.3.1
10
+
11
+ ### Patch Changes
12
+
13
+ - [#69911](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/69911) [`50161fb5966e`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/50161fb5966e) - [ux] Added keyboard shortcut to drag handle and keyboard navigation for drag menu
14
+ - Updated dependencies
15
+
3
16
  ## 7.3.0
4
17
 
5
18
  ### Minor Changes
@@ -51,6 +51,9 @@
51
51
  {
52
52
  "path": "../../../design-system/icon/afm-cc/tsconfig.json"
53
53
  },
54
+ {
55
+ "path": "../../../design-system/menu/afm-cc/tsconfig.json"
56
+ },
54
57
  {
55
58
  "path": "../../../platform/feature-flags/afm-cc/tsconfig.json"
56
59
  },
@@ -328,6 +328,7 @@ var setMultipleCellAttrs = exports.setMultipleCellAttrs = function setMultipleCe
328
328
  };
329
329
  };
330
330
  var selectColumn = exports.selectColumn = function selectColumn(column, expand) {
331
+ var triggeredByKeyboard = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
331
332
  return (0, _pluginFactory.createCommand)(function (state) {
332
333
  var cells = (0, _utils2.getCellsInColumn)(column)(state.tr.selection);
333
334
  if (!cells || !cells.length || typeof cells[0].pos !== 'number') {
@@ -344,7 +345,7 @@ var selectColumn = exports.selectColumn = function selectColumn(column, expand)
344
345
  }
345
346
  };
346
347
  }, function (tr) {
347
- return (0, _utils2.selectColumn)(column, expand)(tr).setMeta('addToHistory', false);
348
+ return (0, _utils2.selectColumn)(column, expand)(tr).setMeta('addToHistory', false).setMeta('selectedColumnViaKeyboard', triggeredByKeyboard);
348
349
  });
349
350
  };
350
351
  var selectColumns = exports.selectColumns = function selectColumns(columnIndexes) {
@@ -379,6 +380,7 @@ var selectColumns = exports.selectColumns = function selectColumns(columnIndexes
379
380
  });
380
381
  };
381
382
  var selectRow = exports.selectRow = function selectRow(row, expand) {
383
+ var triggeredByKeyboard = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
382
384
  return (0, _pluginFactory.createCommand)(function (state) {
383
385
  var targetCellPosition;
384
386
  var cells = (0, _utils2.getCellsInRow)(row)(state.tr.selection);
@@ -392,7 +394,7 @@ var selectRow = exports.selectRow = function selectRow(row, expand) {
392
394
  }
393
395
  };
394
396
  }, function (tr) {
395
- return (0, _utils2.selectRow)(row, expand)(tr).setMeta('addToHistory', false);
397
+ return (0, _utils2.selectRow)(row, expand)(tr).setMeta('addToHistory', false).setMeta('selectedRowViaKeyboard', triggeredByKeyboard);
396
398
  });
397
399
  };
398
400
  var selectRows = exports.selectRows = function selectRows(rowIndexes) {
@@ -88,6 +88,7 @@ var arrowRightFromCellSelection = function arrowRightFromCellSelection(editorSel
88
88
  };
89
89
  var selectColumns = exports.selectColumns = function selectColumns(editorSelectionAPI) {
90
90
  return function () {
91
+ var triggeredByKeyboard = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
91
92
  return function (state, dispatch) {
92
93
  var selection = state.selection;
93
94
  var table = (0, _utils.findTable)(selection);
@@ -100,7 +101,7 @@ var selectColumns = exports.selectColumns = function selectColumns(editorSelecti
100
101
  })(state, dispatch);
101
102
  }
102
103
  if (table && rect) {
103
- return (0, _misc.selectColumn)(rect.left)(state, dispatch);
104
+ return (0, _misc.selectColumn)(rect.left, undefined, triggeredByKeyboard)(state, dispatch);
104
105
  }
105
106
  return false;
106
107
  };
@@ -108,6 +109,7 @@ var selectColumns = exports.selectColumns = function selectColumns(editorSelecti
108
109
  };
109
110
  var selectRows = exports.selectRows = function selectRows(editorSelectionAPI) {
110
111
  return function () {
112
+ var triggeredByKeyboard = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
111
113
  return function (state, dispatch) {
112
114
  var selection = state.selection;
113
115
  var table = (0, _utils.findTable)(selection);
@@ -120,7 +122,7 @@ var selectRows = exports.selectRows = function selectRows(editorSelectionAPI) {
120
122
  })(state, dispatch);
121
123
  }
122
124
  if (table && rect) {
123
- return (0, _misc.selectRow)(rect.top)(state, dispatch);
125
+ return (0, _misc.selectRow)(rect.top, undefined, triggeredByKeyboard)(state, dispatch);
124
126
  }
125
127
  return false;
126
128
  };
@@ -84,6 +84,7 @@ var moveSource = exports.moveSource = function moveSource(sourceType, sourceInde
84
84
  });
85
85
  };
86
86
  var toggleDragMenu = exports.toggleDragMenu = function toggleDragMenu(isDragMenuOpen, direction, index) {
87
+ var trigger = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'mouse';
87
88
  return (0, _pluginFactory.createCommand)(function (state) {
88
89
  var _getPluginState3 = (0, _pluginFactory.getPluginState)(state),
89
90
  previousOpenState = _getPluginState3.isDragMenuOpen,
@@ -110,7 +111,8 @@ var toggleDragMenu = exports.toggleDragMenu = function toggleDragMenu(isDragMenu
110
111
  data: {
111
112
  isDragMenuOpen: updatedMenuOpenState,
112
113
  direction: direction !== null && direction !== void 0 ? direction : previousDragMenuDirection,
113
- index: index !== null && index !== void 0 ? index : previousDragMenuIndex
114
+ index: index !== null && index !== void 0 ? index : previousDragMenuIndex,
115
+ isKeyboardModeActive: updatedMenuOpenState && trigger === 'keyboard'
114
116
  }
115
117
  };
116
118
  }, function (tr) {
@@ -170,7 +170,8 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatch, eventD
170
170
  dropTargetIndex: 0,
171
171
  isDragMenuOpen: false,
172
172
  dragMenuIndex: 0,
173
- isDragging: false
173
+ isDragging: false,
174
+ isKeyboardModeActive: false
174
175
  };
175
176
  }),
176
177
  key: _pluginKey2.pluginKey,
@@ -182,6 +183,20 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatch, eventD
182
183
  var _getPluginState = (0, _pluginFactory2.getPluginState)(newState),
183
184
  isDragMenuOpen = _getPluginState.isDragMenuOpen,
184
185
  dragMenuIndex = _getPluginState.dragMenuIndex;
186
+ transactions.forEach(function (transaction) {
187
+ if (transaction.getMeta('selectedRowViaKeyboard')) {
188
+ var button = document.querySelector('#drag-handle-button-row');
189
+ if (button) {
190
+ button.focus();
191
+ }
192
+ }
193
+ if (transaction.getMeta('selectedColumnViaKeyboard')) {
194
+ var _button = document.querySelector('#drag-handle-button-column');
195
+ if (_button) {
196
+ _button.focus();
197
+ }
198
+ }
199
+ });
185
200
 
186
201
  // What's happening here? you asked... In a nutshell;
187
202
  // If the target cell position changes while the drag menu is open then we want to close the drag menu if it has been opened.
@@ -222,6 +237,23 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatch, eventD
222
237
  var _getPluginState2 = (0, _pluginFactory2.getPluginState)(state),
223
238
  decorationSet = _getPluginState2.decorationSet;
224
239
  return decorationSet;
240
+ },
241
+ handleKeyDown: function handleKeyDown(view, event) {
242
+ var _ref8;
243
+ var isDragHandleFocused = ['drag-handle-button-row', 'drag-handle-button-column'].includes((_ref8 = event.target || null) === null || _ref8 === void 0 ? void 0 : _ref8.id);
244
+ var keysToTrap = ['Enter', ' '];
245
+ var keysToTrapWhen = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'];
246
+ var _getPluginState3 = (0, _pluginFactory2.getPluginState)(view.state),
247
+ isDragMenuOpen = _getPluginState3.isDragMenuOpen;
248
+
249
+ // drag handle is focused, and user presses any key return them back to editing
250
+ if (isDragHandleFocused && !isDragMenuOpen && !keysToTrap.includes(event.key)) {
251
+ view.dom.focus();
252
+ return true;
253
+ }
254
+ if (isDragHandleFocused && keysToTrap.includes(event.key) || isDragMenuOpen && keysToTrapWhen.includes(event.key)) {
255
+ return true;
256
+ }
225
257
  }
226
258
  }
227
259
  });
@@ -30,7 +30,8 @@ var _default = exports.default = function _default(pluginState, action) {
30
30
  return _objectSpread(_objectSpread({}, pluginState), {}, {
31
31
  isDragMenuOpen: action.data.isDragMenuOpen,
32
32
  dragMenuDirection: action.data.direction,
33
- dragMenuIndex: action.data.index
33
+ dragMenuIndex: action.data.index,
34
+ isKeyboardModeActive: action.data.isKeyboardModeActive
34
35
  });
35
36
  default:
36
37
  return pluginState;
@@ -14,8 +14,8 @@ function tableSelectionKeymapPlugin(editorSelectionAPI) {
14
14
  (0, _keymaps.bindKeymapWithCommand)(_keymaps.moveRight.common, (0, _selection.arrowRightFromTable)(editorSelectionAPI)(), list);
15
15
  (0, _keymaps.bindKeymapWithCommand)(_keymaps.moveLeft.common, (0, _selection.arrowLeftFromTable)(editorSelectionAPI)(), list);
16
16
  if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y.table-selection_9uv33')) {
17
- (0, _keymaps.bindKeymapArrayWithCommand)(_keymaps.selectColumn, (0, _selection.selectColumns)(editorSelectionAPI)(), list);
18
- (0, _keymaps.bindKeymapArrayWithCommand)(_keymaps.selectRow, (0, _selection.selectRows)(editorSelectionAPI)(), list);
17
+ (0, _keymaps.bindKeymapArrayWithCommand)(_keymaps.selectColumn, (0, _selection.selectColumns)(editorSelectionAPI)(true), list);
18
+ (0, _keymaps.bindKeymapArrayWithCommand)(_keymaps.selectRow, (0, _selection.selectRows)(editorSelectionAPI)(true), list);
19
19
  }
20
20
  if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.table.shift-arrowup-fix')) {
21
21
  (0, _keymaps.bindKeymapWithCommand)(_keymaps.shiftArrowUp.common, (0, _selection.shiftArrowUpFromTable)(editorSelectionAPI)(), list);
@@ -9,10 +9,8 @@ var _react = _interopRequireDefault(require("react"));
9
9
  var _icons = require("../icons");
10
10
  var HandleIconComponent = exports.HandleIconComponent = function HandleIconComponent(props) {
11
11
  var forceDefaultHandle = props.forceDefaultHandle,
12
- isRowHandleHovered = props.isRowHandleHovered,
13
- isColumnHandleHovered = props.isColumnHandleHovered,
12
+ isHandleHovered = props.isHandleHovered,
14
13
  hasMergedCells = props.hasMergedCells;
15
- var isHandleHovered = isRowHandleHovered || isColumnHandleHovered;
16
14
  if (isHandleHovered || forceDefaultHandle) {
17
15
  return hasMergedCells ? /*#__PURE__*/_react.default.createElement(_icons.DragHandleDisabledIcon, null) : /*#__PURE__*/_react.default.createElement(_icons.DragHandleIcon, null);
18
16
  }
@@ -16,7 +16,8 @@ var _messages = require("@atlaskit/editor-common/messages");
16
16
  var _utils = require("@atlaskit/editor-common/utils");
17
17
  var _element = require("@atlaskit/pragmatic-drag-and-drop/adapter/element");
18
18
  var _setCustomNativeDragPreview = require("@atlaskit/pragmatic-drag-and-drop/util/set-custom-native-drag-preview");
19
- var _pluginFactory = require("../../pm-plugins/plugin-factory");
19
+ var _pluginFactory = require("../../pm-plugins/drag-and-drop/plugin-factory");
20
+ var _pluginFactory2 = require("../../pm-plugins/plugin-factory");
20
21
  var _types = require("../../types");
21
22
  var _utils2 = require("../../utils");
22
23
  var _consts = require("../consts");
@@ -38,7 +39,7 @@ var DragHandleComponent = function DragHandleComponent(_ref) {
38
39
  previewHeight = _ref.previewHeight,
39
40
  onMouseOver = _ref.onMouseOver,
40
41
  onMouseOut = _ref.onMouseOut,
41
- _onMouseUp = _ref.onMouseUp,
42
+ toggleDragMenu = _ref.toggleDragMenu,
42
43
  onClick = _ref.onClick,
43
44
  editorView = _ref.editorView,
44
45
  formatMessage = _ref.intl.formatMessage;
@@ -47,10 +48,13 @@ var DragHandleComponent = function DragHandleComponent(_ref) {
47
48
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
48
49
  previewContainer = _useState2[0],
49
50
  setPreviewContainer = _useState2[1];
50
- var _getPluginState = (0, _pluginFactory.getPluginState)(editorView.state),
51
+ var state = editorView.state,
52
+ selection = editorView.state.selection;
53
+ var _getPluginState = (0, _pluginFactory2.getPluginState)(state),
51
54
  hoveredColumns = _getPluginState.hoveredColumns,
52
55
  hoveredRows = _getPluginState.hoveredRows;
53
- var selection = editorView.state.selection;
56
+ var _getDnDPluginState = (0, _pluginFactory.getPluginState)(state),
57
+ isDragMenuOpen = _getDnDPluginState.isDragMenuOpen;
54
58
  var isRow = direction === 'row';
55
59
  var isColumn = direction === 'column';
56
60
  var isRowHandleHovered = isRow && hoveredRows.length > 0;
@@ -60,8 +64,7 @@ var DragHandleComponent = function DragHandleComponent(_ref) {
60
64
  }, [indexes, isRow, selection]);
61
65
  var handleIconProps = {
62
66
  forceDefaultHandle: forceDefaultHandle,
63
- isColumnHandleHovered: isColumnHandleHovered,
64
- isRowHandleHovered: isRowHandleHovered,
67
+ isHandleHovered: isColumnHandleHovered || isRowHandleHovered,
65
68
  hasMergedCells: hasMergedCells
66
69
  };
67
70
  (0, _react.useEffect)(function () {
@@ -121,6 +124,7 @@ var DragHandleComponent = function DragHandleComponent(_ref) {
121
124
  }, [tableLocalId, direction, indexes, isRow, editorView.state.selection, hasMergedCells]);
122
125
  var showDragMenuAnchorId = isRow ? 'drag-handle-button-row' : 'drag-handle-button-column';
123
126
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("button", {
127
+ type: "button",
124
128
  className: _types.TableCssClassName.DRAG_HANDLE_BUTTON_CLICKABLE_ZONE,
125
129
  "data-testid": "table-drag-handle-clickable-zone-button",
126
130
  style: {
@@ -135,6 +139,7 @@ var DragHandleComponent = function DragHandleComponent(_ref) {
135
139
  },
136
140
  onClick: onClick
137
141
  }), /*#__PURE__*/_react.default.createElement("button", {
142
+ type: "button",
138
143
  id: isDragMenuTarget ? showDragMenuAnchorId : undefined,
139
144
  className: (0, _classnames2.default)(_types.TableCssClassName.DRAG_HANDLE_BUTTON_CONTAINER, appearance, (0, _defineProperty2.default)({}, _types.TableCssClassName.DRAG_HANDLE_DISABLED, hasMergedCells)),
140
145
  ref: dragHandleDivRef,
@@ -144,20 +149,29 @@ var DragHandleComponent = function DragHandleComponent(_ref) {
144
149
  },
145
150
  "data-testid": "table-drag-handle-button",
146
151
  "aria-label": formatMessage(isRow ? _messages.tableMessages.rowDragHandle : _messages.tableMessages.columnDragHandle),
152
+ "aria-expanded": isDragMenuOpen && isDragMenuTarget ? 'true' : 'false',
153
+ "aria-haspopup": "menu",
147
154
  onMouseOver: onMouseOver,
148
155
  onMouseOut: onMouseOut,
149
156
  onMouseUp: function onMouseUp(e) {
150
157
  // return focus to editor so copying table selections whilst still works, i cannot call e.preventDefault in a mousemove event as this stops dragstart events from firing
151
158
  // -> this is bad for a11y but is the current standard new copy/paste keyboard shortcuts should be introduced instead
152
159
  editorView.focus();
153
- _onMouseUp && _onMouseUp(e);
160
+ toggleDragMenu && toggleDragMenu('mouse', e);
154
161
  },
155
- onClick: onClick
156
- }, _utils.browser.gecko ? /*#__PURE__*/_react.default.createElement(_HandleIconComponent.HandleIconComponent, handleIconProps) : /*#__PURE__*/_react.default.createElement("span", {
162
+ onClick: onClick,
163
+ onKeyDown: function onKeyDown(e) {
164
+ if (e.key === 'Enter' || e.key === ' ') {
165
+ toggleDragMenu && toggleDragMenu('keyboard');
166
+ }
167
+ }
168
+ }, appearance !== 'placeholder' ?
169
+ // cannot block pointer events in Firefox as it breaks Dragging functionality
170
+ _utils.browser.gecko ? /*#__PURE__*/_react.default.createElement(_HandleIconComponent.HandleIconComponent, handleIconProps) : /*#__PURE__*/_react.default.createElement("span", {
157
171
  style: {
158
172
  pointerEvents: 'none'
159
173
  }
160
- }, /*#__PURE__*/_react.default.createElement(_HandleIconComponent.HandleIconComponent, handleIconProps))), previewContainer && previewWidth !== undefined && previewHeight !== undefined && /*#__PURE__*/_reactDom.default.createPortal( /*#__PURE__*/_react.default.createElement(_DragPreview.DragPreview, {
174
+ }, /*#__PURE__*/_react.default.createElement(_HandleIconComponent.HandleIconComponent, handleIconProps)) : null), previewContainer && previewWidth !== undefined && previewHeight !== undefined && /*#__PURE__*/_reactDom.default.createPortal( /*#__PURE__*/_react.default.createElement(_DragPreview.DragPreview, {
161
175
  direction: direction,
162
176
  width: previewWidth,
163
177
  height: previewHeight
@@ -1,18 +1,20 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports.default = exports.DragMenu = void 0;
8
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
10
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
- var _react = require("react");
11
+ var _react = _interopRequireWildcard(require("react"));
11
12
  var _react2 = require("@emotion/react");
12
13
  var _reactIntlNext = require("react-intl-next");
13
14
  var _analytics = require("@atlaskit/editor-common/analytics");
14
15
  var _messages = require("@atlaskit/editor-common/messages");
15
16
  var _styles = require("@atlaskit/editor-common/styles");
17
+ var _ui = require("@atlaskit/editor-common/ui");
16
18
  var _uiColor = require("@atlaskit/editor-common/ui-color");
17
19
  var _uiMenu = require("@atlaskit/editor-common/ui-menu");
18
20
  var _utils = require("@atlaskit/editor-common/utils");
@@ -32,9 +34,13 @@ var _types = require("../../types");
32
34
  var _utils3 = require("../../utils");
33
35
  var _dragMenu = require("../../utils/drag-menu");
34
36
  var _consts = require("../consts");
37
+ var _DropdownMenu = require("./DropdownMenu");
35
38
  var _styles2 = require("./styles");
39
+ 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); }
40
+ 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; }
36
41
  /* eslint-disable @atlaskit/design-system/prefer-primitives */
37
42
  /** @jsx jsx */
43
+ /** @jsxFrag */
38
44
 
39
45
  var MapDragMenuOptionIdToMessage = {
40
46
  add_row_above: {
@@ -165,17 +171,16 @@ var convertToDropdownItems = function convertToDropdownItems(dragMenuConfig, for
165
171
  menuCallback: menuCallback
166
172
  };
167
173
  };
168
- var DragMenu = exports.DragMenu = function DragMenu(_ref) {
174
+ var ColorPaletteWithListeners = (0, _ui.withOuterListeners)(_uiColor.ColorPalette);
175
+ var DragMenu = exports.DragMenu = /*#__PURE__*/_react.default.memo(function (_ref) {
169
176
  var _pluginConfig$allowBa;
170
177
  var _ref$direction = _ref.direction,
171
178
  direction = _ref$direction === void 0 ? 'row' : _ref$direction,
172
179
  index = _ref.index,
180
+ target = _ref.target,
173
181
  isOpen = _ref.isOpen,
174
182
  editorView = _ref.editorView,
175
183
  tableNode = _ref.tableNode,
176
- mountPoint = _ref.mountPoint,
177
- boundariesElement = _ref.boundariesElement,
178
- scrollableElement = _ref.scrollableElement,
179
184
  targetCellPosition = _ref.targetCellPosition,
180
185
  getEditorContainerWidth = _ref.getEditorContainerWidth,
181
186
  editorAnalyticsAPI = _ref.editorAnalyticsAPI,
@@ -189,6 +194,8 @@ var DragMenu = exports.DragMenu = function DragMenu(_ref) {
189
194
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
190
195
  isSubmenuOpen = _useState2[0],
191
196
  setIsSubmenuOpen = _useState2[1];
197
+ var _getPluginState = (0, _pluginFactory.getPluginState)(state),
198
+ isKeyboardModeActive = _getPluginState.isKeyboardModeActive;
192
199
  var selectionRect = (0, _utils2.isSelectionType)(selection, 'cell') ? (0, _utils2.getSelectionRect)(selection) : (0, _utils2.findCellRectClosestToPos)(selection.$from);
193
200
  var hasMergedCells = direction === 'row' ? _utils3.hasMergedCellsInRow : _utils3.hasMergedCellsInColumn;
194
201
  var shouldMoveDisabled = index !== undefined && hasMergedCells(index)(selection);
@@ -224,7 +231,11 @@ var DragMenu = exports.DragMenu = function DragMenu(_ref) {
224
231
  targetCellPosition = _getTablePluginState2.targetCellPosition;
225
232
  var node = targetCellPosition ? state.doc.nodeAt(targetCellPosition) : null;
226
233
  var background = (0, _editorPalette.hexToEditorBackgroundPaletteColor)((node === null || node === void 0 || (_node$attrs = node.attrs) === null || _node$attrs === void 0 ? void 0 : _node$attrs.background) || '#ffffff');
234
+ var _getSelectedRowAndCol = (0, _uiColor.getSelectedRowAndColumnFromPalette)(_uiColor.cellBackgroundColorPalette, background, _consts.colorPalletteColumns),
235
+ selectedRowIndex = _getSelectedRowAndCol.selectedRowIndex,
236
+ selectedColumnIndex = _getSelectedRowAndCol.selectedColumnIndex;
227
237
  return {
238
+ key: 'background',
228
239
  content: formatMessage(_messages.tableMessages.backgroundColor),
229
240
  value: {
230
241
  name: 'background'
@@ -244,16 +255,33 @@ var DragMenu = exports.DragMenu = function DragMenu(_ref) {
244
255
  }), isSubmenuOpen && (0, _react2.jsx)("div", {
245
256
  className: _types.TableCssClassName.DRAG_SUBMENU,
246
257
  ref: handleSubMenuRef
247
- }, (0, _react2.jsx)(_uiColor.ColorPalette, {
248
- cols: 7,
249
- onClick: setColor,
258
+ }, (0, _react2.jsx)(_uiMenu.ArrowKeyNavigationProvider, {
259
+ type: _uiMenu.ArrowKeyNavigationType.COLOR,
260
+ selectedRowIndex: selectedRowIndex,
261
+ selectedColumnIndex: selectedColumnIndex,
262
+ handleClose: function handleClose() {
263
+ var keyboardEvent = new KeyboardEvent('keydown', {
264
+ key: 'ArrowDown',
265
+ bubbles: true
266
+ });
267
+ setIsSubmenuOpen(false);
268
+ target === null || target === void 0 || target.focus();
269
+ target === null || target === void 0 || target.dispatchEvent(keyboardEvent);
270
+ },
271
+ isPopupPositioned: true,
272
+ isOpenedByKeyboard: isKeyboardModeActive
273
+ }, (0, _react2.jsx)(ColorPaletteWithListeners, {
274
+ cols: _consts.colorPalletteColumns,
275
+ onClick: function onClick(color) {
276
+ setColor(color);
277
+ },
250
278
  selectedColor: background,
251
279
  paletteOptions: {
252
280
  palette: _uiColor.cellBackgroundColorPalette,
253
281
  paletteColorTooltipMessages: _uiColor.backgroundPaletteTooltipMessages,
254
282
  hexToPaletteColor: _editorPalette.hexToEditorBackgroundPaletteColor
255
283
  }
256
- })))
284
+ }))))
257
285
  };
258
286
  };
259
287
  var toggleHeaderColumn = function toggleHeaderColumn() {
@@ -265,8 +293,9 @@ var DragMenu = exports.DragMenu = function DragMenu(_ref) {
265
293
  var toggleRowNumbers = function toggleRowNumbers() {
266
294
  (0, _commandsWithAnalytics.toggleNumberColumnWithAnalytics)(editorAnalyticsAPI)(state, dispatch);
267
295
  };
268
- var createhHeaderRowColumnMenuItem = function createhHeaderRowColumnMenuItem(direction) {
296
+ var createHeaderRowColumnMenuItem = function createHeaderRowColumnMenuItem(direction) {
269
297
  return direction === 'column' ? {
298
+ key: 'header_column',
270
299
  content: formatMessage(_messages.tableMessages.headerColumn),
271
300
  value: {
272
301
  name: 'header_column'
@@ -279,6 +308,7 @@ var DragMenu = exports.DragMenu = function DragMenu(_ref) {
279
308
  isChecked: (0, _utils3.checkIfHeaderColumnEnabled)(selection)
280
309
  }))
281
310
  } : {
311
+ key: 'header_row',
282
312
  content: formatMessage(_messages.tableMessages.headerRow),
283
313
  value: {
284
314
  name: 'header_row'
@@ -294,6 +324,7 @@ var DragMenu = exports.DragMenu = function DragMenu(_ref) {
294
324
  };
295
325
  var createRowNumbersMenuItem = function createRowNumbersMenuItem() {
296
326
  return {
327
+ key: 'row_numbers',
297
328
  content: formatMessage(_messages.tableMessages.rowNumbers),
298
329
  value: {
299
330
  name: 'row_numbers'
@@ -315,10 +346,10 @@ var DragMenu = exports.DragMenu = function DragMenu(_ref) {
315
346
  * @returns true when the menu should be closed, false otherwise
316
347
  */
317
348
  var shouldCloseMenu = function shouldCloseMenu(state) {
318
- var _getPluginState = (0, _pluginFactory.getPluginState)(state),
319
- previousOpenState = _getPluginState.isDragMenuOpen,
320
- previousDragMenuDirection = _getPluginState.dragMenuDirection,
321
- previousDragMenuIndex = _getPluginState.dragMenuIndex;
349
+ var _getPluginState2 = (0, _pluginFactory.getPluginState)(state),
350
+ previousOpenState = _getPluginState2.isDragMenuOpen,
351
+ previousDragMenuDirection = _getPluginState2.dragMenuDirection,
352
+ previousDragMenuIndex = _getPluginState2.dragMenuIndex;
322
353
 
323
354
  // menu open but menu direction changed, means user clicked on drag handle of different row/column
324
355
  // menu open menu direction not changed, but index changed, means user clicked on drag handle of same row/column, different cells.
@@ -330,9 +361,15 @@ var DragMenu = exports.DragMenu = function DragMenu(_ref) {
330
361
  }
331
362
  };
332
363
  var closeMenu = function closeMenu() {
364
+ var focusTarget = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'handle';
333
365
  var state = editorView.state,
334
366
  dispatch = editorView.dispatch;
335
367
  if (shouldCloseMenu(state)) {
368
+ if (target && focusTarget === 'handle') {
369
+ target === null || target === void 0 || target.focus();
370
+ } else {
371
+ editorView.dom.focus();
372
+ }
336
373
  (0, _commands2.toggleDragMenu)(false, direction, index)(state, dispatch);
337
374
  }
338
375
  };
@@ -341,6 +378,9 @@ var DragMenu = exports.DragMenu = function DragMenu(_ref) {
341
378
  var item = _ref2.item;
342
379
  (_menuCallback$item$va = menuCallback[item.value.name]) === null || _menuCallback$item$va === void 0 || _menuCallback$item$va.call(menuCallback, state, dispatch);
343
380
  switch (item.value.name) {
381
+ case 'background':
382
+ setIsSubmenuOpen(!isSubmenuOpen);
383
+ break;
344
384
  case 'header_column':
345
385
  toggleHeaderColumn();
346
386
  break;
@@ -354,7 +394,7 @@ var DragMenu = exports.DragMenu = function DragMenu(_ref) {
354
394
  break;
355
395
  }
356
396
  if (['header_column', 'header_row', 'row_numbers', 'background'].indexOf(item.value.name) <= -1) {
357
- closeMenu();
397
+ closeMenu('editor');
358
398
  }
359
399
  };
360
400
  var handleItemMouseEnter = function handleItemMouseEnter(_ref3) {
@@ -380,6 +420,17 @@ var DragMenu = exports.DragMenu = function DragMenu(_ref) {
380
420
  (0, _commands.clearHoverSelection)()(state, dispatch);
381
421
  }
382
422
  };
423
+ (0, _react.useEffect)(function () {
424
+ // focus on first menu item automatically when menu renders
425
+ // and user is using keyboard
426
+ if (isOpen && target && isKeyboardModeActive) {
427
+ var keyboardEvent = new KeyboardEvent('keydown', {
428
+ key: 'ArrowDown',
429
+ bubbles: true
430
+ });
431
+ target.dispatchEvent(keyboardEvent);
432
+ }
433
+ }, [isOpen, target, isKeyboardModeActive]);
383
434
  if (!menuItems) {
384
435
  return null;
385
436
  }
@@ -387,11 +438,11 @@ var DragMenu = exports.DragMenu = function DragMenu(_ref) {
387
438
  menuItems[0].items.unshift(createBackgroundColorMenuItem());
388
439
  }
389
440
 
390
- // If first row, add toggle for Hearder row, default is true
441
+ // If first row, add toggle for Header row, default is true
391
442
  // If first column, add toggle for Header column, default is false
392
443
  if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.table.new-cell-context-menu-styling') && index === 0) {
393
444
  menuItems.push({
394
- items: [createhHeaderRowColumnMenuItem(direction)]
445
+ items: [createHeaderRowColumnMenuItem(direction)]
395
446
  });
396
447
  }
397
448
 
@@ -401,26 +452,17 @@ var DragMenu = exports.DragMenu = function DragMenu(_ref) {
401
452
  items: [createRowNumbersMenuItem()]
402
453
  });
403
454
  }
404
- return (0, _react2.jsx)(_uiMenu.DropdownMenu, {
405
- mountTo: mountPoint
406
- //This needs be removed when the a11y is completely handled
407
- //Disabling key navigation now as it works only partially
408
- ,
409
- arrowKeyNavigationProviderOptions: {
410
- type: _uiMenu.ArrowKeyNavigationType.MENU,
411
- disableArrowKeyNavigation: true
455
+ return (0, _react2.jsx)(_DropdownMenu.DropdownMenu, {
456
+ disableKeyboardHandling: isSubmenuOpen,
457
+ section: {
458
+ hasSeparator: true
412
459
  },
460
+ target: target,
413
461
  items: menuItems,
414
- isOpen: isOpen,
415
- onOpenChange: closeMenu,
416
462
  onItemActivated: handleMenuItemActivated,
417
463
  onMouseEnter: handleItemMouseEnter,
418
464
  onMouseLeave: handleItemMouseLeave,
419
- fitWidth: _consts.dragMenuDropdownWidth,
420
- boundariesElement: boundariesElement,
421
- section: {
422
- hasSeparator: true
423
- }
465
+ handleClose: closeMenu
424
466
  });
425
- };
467
+ });
426
468
  var _default = exports.default = (0, _reactIntlNext.injectIntl)(DragMenu);