@atlaskit/editor-plugin-table 7.2.3 → 7.3.1

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 (135) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/afm-cc/tsconfig.json +3 -0
  3. package/dist/cjs/commands/column-resize.js +115 -45
  4. package/dist/cjs/commands/go-to-next-cell.js +7 -11
  5. package/dist/cjs/commands/misc.js +7 -4
  6. package/dist/cjs/commands/selection.js +7 -5
  7. package/dist/cjs/event-handlers.js +38 -25
  8. package/dist/cjs/pm-plugins/drag-and-drop/commands.js +3 -1
  9. package/dist/cjs/pm-plugins/drag-and-drop/plugin.js +33 -1
  10. package/dist/cjs/pm-plugins/drag-and-drop/reducer.js +2 -1
  11. package/dist/cjs/pm-plugins/keymap.js +1 -0
  12. package/dist/cjs/pm-plugins/main.js +43 -9
  13. package/dist/cjs/pm-plugins/table-resizing/event-handlers.js +37 -7
  14. package/dist/cjs/pm-plugins/table-resizing/plugin.js +20 -6
  15. package/dist/cjs/pm-plugins/table-selection-keymap.js +2 -2
  16. package/dist/cjs/reducer.js +5 -2
  17. package/dist/cjs/ui/DragHandle/HandleIconComponent.js +1 -3
  18. package/dist/cjs/ui/DragHandle/index.js +22 -10
  19. package/dist/cjs/ui/FloatingDragMenu/DragMenu.js +75 -33
  20. package/dist/cjs/ui/FloatingDragMenu/DropdownMenu.js +123 -0
  21. package/dist/cjs/ui/FloatingDragMenu/index.js +2 -2
  22. package/dist/cjs/ui/TableFloatingColumnControls/ColumnControls/index.js +24 -35
  23. package/dist/cjs/ui/TableFloatingColumnControls/index.js +1 -2
  24. package/dist/cjs/ui/TableFloatingControls/CornerControls/DragCornerControls.js +4 -0
  25. package/dist/cjs/ui/TableFloatingControls/RowControls/DragControls.js +26 -33
  26. package/dist/cjs/ui/common-styles.js +1 -1
  27. package/dist/cjs/ui/consts.js +3 -2
  28. package/dist/es2019/commands/column-resize.js +100 -35
  29. package/dist/es2019/commands/go-to-next-cell.js +7 -9
  30. package/dist/es2019/commands/misc.js +7 -6
  31. package/dist/es2019/commands/selection.js +9 -9
  32. package/dist/es2019/event-handlers.js +17 -3
  33. package/dist/es2019/pm-plugins/drag-and-drop/commands.js +3 -3
  34. package/dist/es2019/pm-plugins/drag-and-drop/plugin.js +34 -1
  35. package/dist/es2019/pm-plugins/drag-and-drop/reducer.js +2 -1
  36. package/dist/es2019/pm-plugins/keymap.js +3 -2
  37. package/dist/es2019/pm-plugins/main.js +41 -5
  38. package/dist/es2019/pm-plugins/table-resizing/event-handlers.js +37 -4
  39. package/dist/es2019/pm-plugins/table-resizing/plugin.js +16 -1
  40. package/dist/es2019/pm-plugins/table-selection-keymap.js +2 -2
  41. package/dist/es2019/reducer.js +5 -2
  42. package/dist/es2019/ui/DragHandle/HandleIconComponent.js +1 -3
  43. package/dist/es2019/ui/DragHandle/index.js +25 -10
  44. package/dist/es2019/ui/FloatingDragMenu/DragMenu.js +72 -32
  45. package/dist/es2019/ui/FloatingDragMenu/DropdownMenu.js +109 -0
  46. package/dist/es2019/ui/FloatingDragMenu/index.js +2 -2
  47. package/dist/es2019/ui/TableFloatingColumnControls/ColumnControls/index.js +24 -35
  48. package/dist/es2019/ui/TableFloatingColumnControls/index.js +1 -2
  49. package/dist/es2019/ui/TableFloatingControls/CornerControls/DragCornerControls.js +4 -0
  50. package/dist/es2019/ui/TableFloatingControls/RowControls/DragControls.js +26 -33
  51. package/dist/es2019/ui/common-styles.js +11 -1
  52. package/dist/es2019/ui/consts.js +2 -1
  53. package/dist/esm/commands/column-resize.js +105 -35
  54. package/dist/esm/commands/go-to-next-cell.js +7 -11
  55. package/dist/esm/commands/misc.js +7 -4
  56. package/dist/esm/commands/selection.js +9 -7
  57. package/dist/esm/event-handlers.js +38 -25
  58. package/dist/esm/pm-plugins/drag-and-drop/commands.js +3 -2
  59. package/dist/esm/pm-plugins/drag-and-drop/plugin.js +33 -1
  60. package/dist/esm/pm-plugins/drag-and-drop/reducer.js +2 -1
  61. package/dist/esm/pm-plugins/keymap.js +3 -2
  62. package/dist/esm/pm-plugins/main.js +38 -4
  63. package/dist/esm/pm-plugins/table-resizing/event-handlers.js +34 -4
  64. package/dist/esm/pm-plugins/table-resizing/plugin.js +15 -1
  65. package/dist/esm/pm-plugins/table-selection-keymap.js +2 -2
  66. package/dist/esm/reducer.js +5 -2
  67. package/dist/esm/ui/DragHandle/HandleIconComponent.js +1 -3
  68. package/dist/esm/ui/DragHandle/index.js +21 -9
  69. package/dist/esm/ui/FloatingDragMenu/DragMenu.js +74 -35
  70. package/dist/esm/ui/FloatingDragMenu/DropdownMenu.js +116 -0
  71. package/dist/esm/ui/FloatingDragMenu/index.js +2 -2
  72. package/dist/esm/ui/TableFloatingColumnControls/ColumnControls/index.js +24 -35
  73. package/dist/esm/ui/TableFloatingColumnControls/index.js +1 -2
  74. package/dist/esm/ui/TableFloatingControls/CornerControls/DragCornerControls.js +4 -0
  75. package/dist/esm/ui/TableFloatingControls/RowControls/DragControls.js +26 -33
  76. package/dist/esm/ui/common-styles.js +1 -1
  77. package/dist/esm/ui/consts.js +2 -1
  78. package/dist/types/commands/column-resize.d.ts +2 -0
  79. package/dist/types/commands/misc.d.ts +3 -3
  80. package/dist/types/commands/selection.d.ts +2 -2
  81. package/dist/types/pm-plugins/drag-and-drop/actions.d.ts +1 -0
  82. package/dist/types/pm-plugins/drag-and-drop/commands.d.ts +2 -1
  83. package/dist/types/pm-plugins/drag-and-drop/types.d.ts +2 -0
  84. package/dist/types/types.d.ts +16 -0
  85. package/dist/types/ui/DragHandle/HandleIconComponent.d.ts +1 -2
  86. package/dist/types/ui/DragHandle/index.d.ts +3 -2
  87. package/dist/types/ui/FloatingDragMenu/DragMenu.d.ts +7 -8
  88. package/dist/types/ui/FloatingDragMenu/DropdownMenu.d.ts +30 -0
  89. package/dist/types/ui/TableFloatingColumnControls/ColumnControls/index.d.ts +1 -2
  90. package/dist/types/ui/TableFloatingControls/RowControls/DragControls.d.ts +1 -1
  91. package/dist/types/ui/consts.d.ts +1 -0
  92. package/dist/types-ts4.5/commands/column-resize.d.ts +2 -0
  93. package/dist/types-ts4.5/commands/misc.d.ts +3 -3
  94. package/dist/types-ts4.5/commands/selection.d.ts +2 -2
  95. package/dist/types-ts4.5/pm-plugins/drag-and-drop/actions.d.ts +1 -0
  96. package/dist/types-ts4.5/pm-plugins/drag-and-drop/commands.d.ts +2 -1
  97. package/dist/types-ts4.5/pm-plugins/drag-and-drop/types.d.ts +2 -0
  98. package/dist/types-ts4.5/types.d.ts +16 -0
  99. package/dist/types-ts4.5/ui/DragHandle/HandleIconComponent.d.ts +1 -2
  100. package/dist/types-ts4.5/ui/DragHandle/index.d.ts +3 -2
  101. package/dist/types-ts4.5/ui/FloatingDragMenu/DragMenu.d.ts +7 -8
  102. package/dist/types-ts4.5/ui/FloatingDragMenu/DropdownMenu.d.ts +30 -0
  103. package/dist/types-ts4.5/ui/TableFloatingColumnControls/ColumnControls/index.d.ts +1 -2
  104. package/dist/types-ts4.5/ui/TableFloatingControls/RowControls/DragControls.d.ts +1 -1
  105. package/dist/types-ts4.5/ui/consts.d.ts +1 -0
  106. package/package.json +4 -3
  107. package/src/commands/column-resize.ts +155 -40
  108. package/src/commands/go-to-next-cell.ts +6 -15
  109. package/src/commands/misc.ts +19 -4
  110. package/src/commands/selection.ts +17 -9
  111. package/src/event-handlers.ts +21 -4
  112. package/src/pm-plugins/drag-and-drop/actions.ts +1 -0
  113. package/src/pm-plugins/drag-and-drop/commands.ts +3 -0
  114. package/src/pm-plugins/drag-and-drop/plugin.ts +47 -0
  115. package/src/pm-plugins/drag-and-drop/reducer.ts +1 -0
  116. package/src/pm-plugins/drag-and-drop/types.ts +3 -0
  117. package/src/pm-plugins/keymap.ts +3 -0
  118. package/src/pm-plugins/main.ts +47 -2
  119. package/src/pm-plugins/table-resizing/event-handlers.ts +33 -5
  120. package/src/pm-plugins/table-resizing/plugin.ts +18 -1
  121. package/src/pm-plugins/table-selection-keymap.ts +2 -2
  122. package/src/reducer.ts +5 -2
  123. package/src/types.ts +16 -0
  124. package/src/ui/DragHandle/HandleIconComponent.tsx +2 -9
  125. package/src/ui/DragHandle/index.tsx +37 -16
  126. package/src/ui/FloatingDragMenu/DragMenu.tsx +362 -310
  127. package/src/ui/FloatingDragMenu/DropdownMenu.tsx +150 -0
  128. package/src/ui/FloatingDragMenu/index.tsx +3 -3
  129. package/src/ui/TableFloatingColumnControls/ColumnControls/index.tsx +72 -91
  130. package/src/ui/TableFloatingColumnControls/index.tsx +1 -2
  131. package/src/ui/TableFloatingControls/CornerControls/DragCornerControls.tsx +5 -0
  132. package/src/ui/TableFloatingControls/RowControls/DragControls.tsx +89 -104
  133. package/src/ui/common-styles.ts +11 -1
  134. package/src/ui/consts.ts +1 -0
  135. package/tsconfig.app.json +3 -0
@@ -57,6 +57,7 @@ function keymapPlugin(getEditorContainerWidth, editorAnalyticsAPI, dragAndDropEn
57
57
  (0, _keymaps.bindKeymapWithCommand)(_keymaps.moveLeft.common, (0, _columnResize.activateNextResizeArea)(-1), list);
58
58
  (0, _keymaps.bindKeymapWithCommand)(_keymaps.decreaseMediaSize.common, (0, _columnResize.changeColumnWidthByStep)(-10, getEditorContainerWidth), list);
59
59
  (0, _keymaps.bindKeymapWithCommand)(_keymaps.increaseMediaSize.common, (0, _columnResize.changeColumnWidthByStep)(10, getEditorContainerWidth), list);
60
+ (0, _keymaps.bindKeymapWithCommand)(_keymaps.escape.common, (0, _columnResize.stopKeyboardColumnResizing)(), list);
60
61
  }
61
62
  return (0, _keymap.keymap)(list);
62
63
  }
@@ -12,7 +12,11 @@ var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
12
12
  var _transforms = require("@atlaskit/editor-common/transforms");
13
13
  var _utils = require("@atlaskit/editor-common/utils");
14
14
  var _utils2 = require("@atlaskit/editor-prosemirror/utils");
15
+ var _editorTables = require("@atlaskit/editor-tables");
16
+ var _utils3 = require("@atlaskit/editor-tables/utils");
17
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
15
18
  var _commands = require("../commands");
19
+ var _columnResize = require("../commands/column-resize");
16
20
  var _misc = require("../commands/misc");
17
21
  var _eventHandlers = require("../event-handlers");
18
22
  var _table = require("../nodeviews/table");
@@ -21,7 +25,7 @@ var _TableRow = _interopRequireDefault(require("../nodeviews/TableRow"));
21
25
  var _plugin = require("../pm-plugins/decorations/plugin");
22
26
  var _transforms2 = require("../transforms");
23
27
  var _types = require("../types");
24
- var _utils3 = require("../utils");
28
+ var _utils4 = require("../utils");
25
29
  var _paste = require("../utils/paste");
26
30
  var _defaultTableSelection = require("./default-table-selection");
27
31
  var _pluginFactory = require("./plugin-factory");
@@ -106,7 +110,7 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatchAnalytic
106
110
  var domAtPos = editorView.domAtPos.bind(editorView);
107
111
  editorViewRef = editorView;
108
112
  return {
109
- update: function update(view) {
113
+ update: function update(view, prevState) {
110
114
  var state = view.state,
111
115
  dispatch = view.dispatch;
112
116
  var selection = state.selection;
@@ -117,6 +121,28 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatchAnalytic
117
121
  if (parent) {
118
122
  tableRef = parent.querySelector('table') || undefined;
119
123
  }
124
+ var tableNode = (0, _utils3.findTable)(state.selection);
125
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
126
+ // when cursor leaves the table we need to stop column resizing
127
+ var pluginPrevState = (0, _pluginFactory.getPluginState)(prevState);
128
+ var isStopKeyboardColumResizing = pluginPrevState.isResizeHandleWidgetAdded && pluginPrevState.isKeyboardResize;
129
+ if (isStopKeyboardColumResizing) {
130
+ var isTableNodesDifferent = (pluginPrevState === null || pluginPrevState === void 0 ? void 0 : pluginPrevState.tableNode) !== (tableNode === null || tableNode === void 0 ? void 0 : tableNode.node);
131
+ if (pluginPrevState !== null && pluginPrevState !== void 0 && pluginPrevState.tableNode && tableNode && isTableNodesDifferent) {
132
+ var oldRowsNumber = _editorTables.TableMap.get(pluginPrevState.tableNode).height;
133
+ var newRowsNumber = _editorTables.TableMap.get(tableNode.node).height;
134
+ if (oldRowsNumber !== newRowsNumber ||
135
+ // Add/delete row
136
+ tableNode.node.attrs.localId !== pluginPrevState.tableNode.attrs.localId) {
137
+ // Jump to another table
138
+ (0, _columnResize.stopKeyboardColumnResizing)()(state, dispatch);
139
+ }
140
+ } else if (!tableNode) {
141
+ // selection outside of table
142
+ (0, _columnResize.stopKeyboardColumnResizing)()(state, dispatch);
143
+ }
144
+ }
145
+ }
120
146
  }
121
147
  if (pluginState.tableRef !== tableRef) {
122
148
  (0, _commands.setTableRef)(tableRef)(state, dispatch);
@@ -156,7 +182,7 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatchAnalytic
156
182
  if (!(0, _coreUtils.insideTable)(editorState) && (0, _paste.isHeaderRowRequired)(editorState)) {
157
183
  slice = (0, _misc.transformSliceToAddTableHeaders)(slice, schema);
158
184
  }
159
- slice = (0, _utils3.transformSliceToFixHardBreakProblemOnCopyFromCell)(slice, schema);
185
+ slice = (0, _utils4.transformSliceToFixHardBreakProblemOnCopyFromCell)(slice, schema);
160
186
 
161
187
  // We do this separately, so it also applies to drag/drop events
162
188
  // This needs to go before `transformSliceToRemoveOpenExpand`
@@ -167,14 +193,14 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatchAnalytic
167
193
  slice = (0, _transforms.transformSliceToRemoveOpenExpand)(slice, schema);
168
194
 
169
195
  /** If a partial paste of table, paste only table's content */
170
- slice = (0, _utils3.transformSliceToRemoveOpenTable)(slice, schema);
196
+ slice = (0, _utils4.transformSliceToRemoveOpenTable)(slice, schema);
171
197
 
172
198
  /** If a partial paste of bodied extension, paste only text */
173
199
  slice = (0, _transforms.transformSliceToRemoveOpenBodiedExtension)(slice, schema);
174
200
 
175
201
  /** If a partial paste of multi bodied extension, paste only children */
176
202
  slice = (0, _transforms.transformSliceToRemoveOpenMultiBodiedExtension)(slice, schema);
177
- slice = (0, _utils3.transformSliceToCorrectEmptyTableCells)(slice, schema);
203
+ slice = (0, _utils4.transformSliceToCorrectEmptyTableCells)(slice, schema);
178
204
  if (!pluginConfig.allowColumnResizing) {
179
205
  slice = (0, _misc.transformSliceToRemoveColumnsWidths)(slice, schema);
180
206
  }
@@ -190,7 +216,7 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatchAnalytic
190
216
  var state = _ref2.state,
191
217
  dispatch = _ref2.dispatch;
192
218
  var decorationSet = _plugin.pluginKey.getState(state);
193
- if ((0, _utils3.findControlsHoverDecoration)(decorationSet).length) {
219
+ if ((0, _utils4.findControlsHoverDecoration)(decorationSet).length) {
194
220
  (0, _commands.clearHoverSelection)()(state, dispatch);
195
221
  }
196
222
 
@@ -213,9 +239,17 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatchAnalytic
213
239
  var maybeTr = (0, _utils.closestElement)(domRef, 'tr');
214
240
  return maybeTr ? maybeTr.classList.contains('sticky') : false;
215
241
  },
216
- handleTextInput: function handleTextInput(_ref3, _from, _to, text) {
217
- var state = _ref3.state,
218
- dispatch = _ref3.dispatch;
242
+ handleTextInput: function handleTextInput(view, _from, _to, text) {
243
+ var state = view.state,
244
+ dispatch = view.dispatch;
245
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
246
+ var _getPluginState = (0, _pluginFactory.getPluginState)(state),
247
+ isKeyboardResize = _getPluginState.isKeyboardResize;
248
+ if (isKeyboardResize) {
249
+ (0, _columnResize.stopKeyboardColumnResizing)()(state, dispatch);
250
+ return false;
251
+ }
252
+ }
219
253
  var tr = (0, _transforms2.replaceSelectedTable)(state, text, _analytics.INPUT_METHOD.KEYBOARD, editorAnalyticsAPI);
220
254
  if (tr.selectionSet) {
221
255
  dispatch(tr);
@@ -11,12 +11,14 @@ var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
11
11
  var _tableMap = require("@atlaskit/editor-tables/table-map");
12
12
  var _utils = require("@atlaskit/editor-tables/utils");
13
13
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
14
+ var _columnResize = require("../../commands/column-resize");
14
15
  var _misc = require("../../commands/misc");
15
16
  var _transforms = require("../../transforms");
16
17
  var _utils2 = require("../../utils");
18
+ var _pluginFactory = require("../plugin-factory");
17
19
  var _tableAnalytics = require("../table-analytics");
18
20
  var _commands = require("./commands");
19
- var _pluginFactory = require("./plugin-factory");
21
+ var _pluginFactory2 = require("./plugin-factory");
20
22
  var _utils3 = require("./utils");
21
23
  var handleMouseDown = exports.handleMouseDown = function handleMouseDown(view, event, localResizeHandlePos, getEditorContainerWidth, getEditorFeatureFlags, editorAnalyticsAPI) {
22
24
  var state = view.state,
@@ -26,6 +28,8 @@ var handleMouseDown = exports.handleMouseDown = function handleMouseDown(view, e
26
28
  if (editorDisabled || localResizeHandlePos === null || !(0, _utils3.pointsAtCell)(state.doc.resolve(localResizeHandlePos))) {
27
29
  return false;
28
30
  }
31
+ var _getTablePluginState = (0, _pluginFactory.getPluginState)(state),
32
+ isKeyboardResize = _getTablePluginState.isKeyboardResize;
29
33
  event.preventDefault();
30
34
  var tr = view.state.tr;
31
35
  tr.setMeta(_tableAnalytics.META_KEYS.OVERFLOW_TRIGGER, {
@@ -92,9 +96,11 @@ var handleMouseDown = exports.handleMouseDown = function handleMouseDown(view, e
92
96
  var clientX = event.clientX;
93
97
  var state = view.state,
94
98
  dispatch = view.dispatch;
95
- var _getPluginState = (0, _pluginFactory.getPluginState)(state),
99
+ var _getPluginState = (0, _pluginFactory2.getPluginState)(state),
96
100
  dragging = _getPluginState.dragging,
97
101
  resizeHandlePos = _getPluginState.resizeHandlePos;
102
+ var _getTablePluginState2 = (0, _pluginFactory.getPluginState)(state),
103
+ isTableHovered = _getTablePluginState2.isTableHovered;
98
104
  if (resizeHandlePos === null) {
99
105
  return (0, _commands.stopResizing)()(state, dispatch);
100
106
  }
@@ -107,9 +113,20 @@ var handleMouseDown = exports.handleMouseDown = function handleMouseDown(view, e
107
113
  var start = $cell.start(-1);
108
114
  var table = $cell.node(-1);
109
115
 
110
- // If we let go in the same place we started, dont need to do anything.
116
+ // If we let go in the same place we started, don't need to do anything.
111
117
  if (dragging && clientX === dragging.startX) {
112
- return (0, _commands.stopResizing)()(state, dispatch);
118
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
119
+ if (isKeyboardResize || !isTableHovered) {
120
+ /** if column resize had started via keyboard but continued by mouse
121
+ * or mouse pointer leaves the table but mouse button still pressed
122
+ */
123
+ return (0, _columnResize.stopKeyboardColumnResizing)()(state, dispatch, view);
124
+ } else {
125
+ return (0, _commands.stopResizing)()(state, dispatch);
126
+ }
127
+ } else {
128
+ return (0, _commands.stopResizing)()(state, dispatch);
129
+ }
113
130
  }
114
131
  var tr = state.tr;
115
132
  if (dragging) {
@@ -143,17 +160,30 @@ var handleMouseDown = exports.handleMouseDown = function handleMouseDown(view, e
143
160
  })(tr);
144
161
  }
145
162
  }
146
- return (0, _commands.stopResizing)(tr)(state, dispatch);
163
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
164
+ if (isKeyboardResize || !isTableHovered) {
165
+ /** if column resize had started via keyboard but continued by mouse
166
+ * or mouse pointer leaves the table but mouse button still pressed
167
+ */
168
+ return (0, _columnResize.stopKeyboardColumnResizing)(tr)(state, dispatch, view);
169
+ } else {
170
+ return (0, _commands.stopResizing)(tr)(state, dispatch);
171
+ }
172
+ } else {
173
+ return (0, _commands.stopResizing)(tr)(state, dispatch);
174
+ }
147
175
  }
148
176
  }
149
177
  function move(event) {
150
178
  var clientX = event.clientX,
151
179
  which = event.which;
152
180
  var state = view.state;
153
- var _getPluginState2 = (0, _pluginFactory.getPluginState)(state),
181
+ var _getPluginState2 = (0, _pluginFactory2.getPluginState)(state),
154
182
  dragging = _getPluginState2.dragging,
155
183
  resizeHandlePos = _getPluginState2.resizeHandlePos;
156
- if (!which || !dragging || resizeHandlePos === null || !(0, _utils3.pointsAtCell)(state.doc.resolve(resizeHandlePos))) {
184
+ var _getTablePluginState3 = (0, _pluginFactory.getPluginState)(state),
185
+ isTableHovered = _getTablePluginState3.isTableHovered;
186
+ if (!which || !dragging || resizeHandlePos === null || !(0, _utils3.pointsAtCell)(state.doc.resolve(resizeHandlePos)) || !isTableHovered && (0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
157
187
  return finish(event);
158
188
  }
159
189
  var $cell = state.doc.resolve(resizeHandlePos);
@@ -8,10 +8,12 @@ exports.createPlugin = createPlugin;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _classnames2 = _interopRequireDefault(require("classnames"));
10
10
  var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
11
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
11
12
  var _types = require("../../types");
13
+ var _pluginFactory = require("../plugin-factory");
12
14
  var _commands = require("./commands");
13
15
  var _eventHandlers = require("./event-handlers");
14
- var _pluginFactory = require("./plugin-factory");
16
+ var _pluginFactory2 = require("./plugin-factory");
15
17
  var _pluginKey = require("./plugin-key");
16
18
  var _utils = require("./utils");
17
19
  function createPlugin(dispatch, _ref, getEditorContainerWidth, getEditorFeatureFlags, editorAnalyticsAPI) {
@@ -19,7 +21,7 @@ function createPlugin(dispatch, _ref, getEditorContainerWidth, getEditorFeatureF
19
21
  lastColumnResizable = _ref$lastColumnResiza === void 0 ? true : _ref$lastColumnResiza;
20
22
  return new _safePlugin.SafePlugin({
21
23
  key: _pluginKey.pluginKey,
22
- state: (0, _pluginFactory.createPluginState)(dispatch, {
24
+ state: (0, _pluginFactory2.createPluginState)(dispatch, {
23
25
  lastColumnResizable: lastColumnResizable,
24
26
  resizeHandlePos: null,
25
27
  dragging: null,
@@ -28,7 +30,7 @@ function createPlugin(dispatch, _ref, getEditorContainerWidth, getEditorFeatureF
28
30
  props: {
29
31
  attributes: function attributes(state) {
30
32
  var _classnames;
31
- var pluginState = (0, _pluginFactory.getPluginState)(state);
33
+ var pluginState = (0, _pluginFactory2.getPluginState)(state);
32
34
  return {
33
35
  class: (0, _classnames2.default)(_types.TableCssClassName.RESIZING_PLUGIN, (_classnames = {}, (0, _defineProperty2.default)(_classnames, _types.TableCssClassName.RESIZE_CURSOR, pluginState.resizeHandlePos !== null), (0, _defineProperty2.default)(_classnames, _types.TableCssClassName.IS_RESIZING, !!pluginState.dragging), _classnames))
34
36
  };
@@ -38,10 +40,22 @@ function createPlugin(dispatch, _ref, getEditorContainerWidth, getEditorFeatureF
38
40
  var state = view.state;
39
41
  var resizeHandlePos =
40
42
  // we're setting `resizeHandlePos` via command in unit tests
41
- (0, _pluginFactory.getPluginState)(state).resizeHandlePos || (0, _utils.getResizeCellPos)(view, event);
42
- var _getPluginState = (0, _pluginFactory.getPluginState)(state),
43
+ (0, _pluginFactory2.getPluginState)(state).resizeHandlePos || (0, _utils.getResizeCellPos)(view, event);
44
+ var _getPluginState = (0, _pluginFactory2.getPluginState)(state),
43
45
  dragging = _getPluginState.dragging;
44
- if (resizeHandlePos !== null && !dragging) {
46
+ var isColumnKeyboardResizeStarted = false;
47
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
48
+ /*
49
+ We need to start listening mouse events if column resize started from keyboard.
50
+ This will allow continue resizing via mouse
51
+ */
52
+ var _getTablePluginState = (0, _pluginFactory.getPluginState)(state),
53
+ isKeyboardResize = _getTablePluginState.isKeyboardResize;
54
+ if (isKeyboardResize) {
55
+ isColumnKeyboardResizeStarted = isKeyboardResize;
56
+ }
57
+ }
58
+ if (resizeHandlePos !== null && (!dragging || isColumnKeyboardResizeStarted)) {
45
59
  if ((0, _eventHandlers.handleMouseDown)(view, event, resizeHandlePos, getEditorContainerWidth, getEditorFeatureFlags, editorAnalyticsAPI)) {
46
60
  var _state = view.state,
47
61
  _dispatch = view.dispatch;
@@ -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);
@@ -64,8 +64,9 @@ var _default = exports.default = function _default(pluginState, action) {
64
64
  resizeHandleColumnIndex: undefined,
65
65
  resizeHandleRowIndex: undefined
66
66
  });
67
+ case 'START_KEYBOARD_COLUMN_RESIZE':
67
68
  case 'ADD_RESIZE_HANDLE_DECORATIONS':
68
- if (action.data.resizeHandleColumnIndex === pluginState.resizeHandleColumnIndex && action.data.resizeHandleRowIndex === pluginState.resizeHandleRowIndex && action.data.resizeHandleIncludeTooltip === pluginState.resizeHandleIncludeTooltip) {
69
+ if (action.data.resizeHandleColumnIndex === pluginState.resizeHandleColumnIndex && action.data.resizeHandleRowIndex === pluginState.resizeHandleRowIndex && action.data.resizeHandleIncludeTooltip === pluginState.resizeHandleIncludeTooltip && action.data.isKeyboardResize === pluginState.isKeyboardResize) {
69
70
  return pluginState;
70
71
  }
71
72
  return _objectSpread(_objectSpread(_objectSpread({}, pluginState), action.data), {}, {
@@ -84,6 +85,7 @@ var _default = exports.default = function _default(pluginState, action) {
84
85
  resizeHandleRowIndex: resizeHandleRowIndex !== null && resizeHandleRowIndex !== void 0 ? resizeHandleRowIndex : pluginState.resizeHandleRowIndex,
85
86
  resizeHandleIncludeTooltip: resizeHandleIncludeTooltip !== null && resizeHandleIncludeTooltip !== void 0 ? resizeHandleIncludeTooltip : pluginState.resizeHandleIncludeTooltip
86
87
  });
88
+ case 'STOP_KEYBOARD_COLUMN_RESIZE':
87
89
  case 'REMOVE_RESIZE_HANDLE_DECORATIONS':
88
90
  if (!pluginState.isResizeHandleWidgetAdded) {
89
91
  return pluginState;
@@ -91,7 +93,8 @@ var _default = exports.default = function _default(pluginState, action) {
91
93
  return _objectSpread(_objectSpread(_objectSpread({}, pluginState), action.data), {}, {
92
94
  resizeHandleColumnIndex: undefined,
93
95
  resizeHandleRowIndex: undefined,
94
- isResizeHandleWidgetAdded: false
96
+ isResizeHandleWidgetAdded: false,
97
+ isKeyboardResize: undefined
95
98
  });
96
99
  case 'SET_TABLE_REF':
97
100
  case 'HOVER_ROWS':
@@ -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 () {
@@ -144,20 +147,29 @@ var DragHandleComponent = function DragHandleComponent(_ref) {
144
147
  },
145
148
  "data-testid": "table-drag-handle-button",
146
149
  "aria-label": formatMessage(isRow ? _messages.tableMessages.rowDragHandle : _messages.tableMessages.columnDragHandle),
150
+ "aria-expanded": isDragMenuOpen && isDragMenuTarget ? 'true' : 'false',
151
+ "aria-haspopup": "menu",
147
152
  onMouseOver: onMouseOver,
148
153
  onMouseOut: onMouseOut,
149
154
  onMouseUp: function onMouseUp(e) {
150
155
  // 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
156
  // -> this is bad for a11y but is the current standard new copy/paste keyboard shortcuts should be introduced instead
152
157
  editorView.focus();
153
- _onMouseUp && _onMouseUp(e);
158
+ toggleDragMenu && toggleDragMenu('mouse', e);
154
159
  },
155
- onClick: onClick
156
- }, _utils.browser.gecko ? /*#__PURE__*/_react.default.createElement(_HandleIconComponent.HandleIconComponent, handleIconProps) : /*#__PURE__*/_react.default.createElement("span", {
160
+ onClick: onClick,
161
+ onKeyDown: function onKeyDown(e) {
162
+ if (e.key === 'Enter' || e.key === ' ') {
163
+ toggleDragMenu && toggleDragMenu('keyboard');
164
+ }
165
+ }
166
+ }, appearance !== 'placeholder' ?
167
+ // cannot block pointer events in Firefox as it breaks Dragging functionality
168
+ _utils.browser.gecko ? /*#__PURE__*/_react.default.createElement(_HandleIconComponent.HandleIconComponent, handleIconProps) : /*#__PURE__*/_react.default.createElement("span", {
157
169
  style: {
158
170
  pointerEvents: 'none'
159
171
  }
160
- }, /*#__PURE__*/_react.default.createElement(_HandleIconComponent.HandleIconComponent, handleIconProps))), previewContainer && previewWidth !== undefined && previewHeight !== undefined && /*#__PURE__*/_reactDom.default.createPortal( /*#__PURE__*/_react.default.createElement(_DragPreview.DragPreview, {
172
+ }, /*#__PURE__*/_react.default.createElement(_HandleIconComponent.HandleIconComponent, handleIconProps)) : null), previewContainer && previewWidth !== undefined && previewHeight !== undefined && /*#__PURE__*/_reactDom.default.createPortal( /*#__PURE__*/_react.default.createElement(_DragPreview.DragPreview, {
161
173
  direction: direction,
162
174
  width: previewWidth,
163
175
  height: previewHeight