@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
@@ -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);
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.DropdownMenu = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _ui = require("@atlaskit/editor-common/ui");
10
+ var _uiMenu = require("@atlaskit/editor-common/ui-menu");
11
+ var _uiReact = require("@atlaskit/editor-common/ui-react");
12
+ var _menu = require("@atlaskit/menu");
13
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
14
+ var _consts = require("../consts");
15
+ var DropListWithOutsideListeners = (0, _uiReact.withReactEditorViewOuterListeners)(_ui.DropList);
16
+ var DropdownMenu = exports.DropdownMenu = function DropdownMenu(_ref) {
17
+ var target = _ref.target,
18
+ items = _ref.items,
19
+ section = _ref.section,
20
+ disableKeyboardHandling = _ref.disableKeyboardHandling,
21
+ onItemActivated = _ref.onItemActivated,
22
+ handleClose = _ref.handleClose,
23
+ onMouseEnter = _ref.onMouseEnter,
24
+ onMouseLeave = _ref.onMouseLeave;
25
+ var innerMenu = function innerMenu() {
26
+ return /*#__PURE__*/_react.default.createElement(DropListWithOutsideListeners, {
27
+ isOpen: true,
28
+ shouldFitContainer: true,
29
+ position: ['bottom', 'left'].join(' '),
30
+ handleClickOutside: function handleClickOutside() {
31
+ return handleClose('editor');
32
+ },
33
+ handleEscapeKeydown: function handleEscapeKeydown() {
34
+ if (!disableKeyboardHandling) {
35
+ handleClose('handle');
36
+ }
37
+ },
38
+ handleEnterKeydown: function handleEnterKeydown(e) {
39
+ if (!disableKeyboardHandling) {
40
+ e.preventDefault();
41
+ e.stopPropagation();
42
+ }
43
+ },
44
+ targetRef: target
45
+ }, /*#__PURE__*/_react.default.createElement("div", {
46
+ style: {
47
+ height: 0,
48
+ minWidth: _consts.dragMenuDropdownWidth
49
+ }
50
+ }), /*#__PURE__*/_react.default.createElement(_menu.MenuGroup, {
51
+ role: "menu"
52
+ }, items.map(function (group, index) {
53
+ return /*#__PURE__*/_react.default.createElement(_menu.Section, {
54
+ hasSeparator: (section === null || section === void 0 ? void 0 : section.hasSeparator) && index > 0,
55
+ title: section === null || section === void 0 ? void 0 : section.title,
56
+ key: index
57
+ }, group.items.map(function (item) {
58
+ var _item$key;
59
+ return /*#__PURE__*/_react.default.createElement(_uiMenu.DropdownMenuItem, {
60
+ shouldUseDefaultRole: false,
61
+ key: (_item$key = item.key) !== null && _item$key !== void 0 ? _item$key : String(item.content),
62
+ item: item,
63
+ onItemActivated: onItemActivated,
64
+ onMouseEnter: onMouseEnter,
65
+ onMouseLeave: onMouseLeave
66
+ });
67
+ }));
68
+ })));
69
+ };
70
+ if (disableKeyboardHandling) {
71
+ return innerMenu();
72
+ }
73
+ return /*#__PURE__*/_react.default.createElement(_uiMenu.ArrowKeyNavigationProvider, {
74
+ closeOnTab: true,
75
+ type: _uiMenu.ArrowKeyNavigationType.MENU,
76
+ onSelection: function onSelection(index) {
77
+ var results = items.flatMap(function (item) {
78
+ return 'items' in item ? item.items : item;
79
+ });
80
+
81
+ // onSelection is called when any focusable element is 'activated'
82
+ // this is an issue as some menu items have toggles, which cause the index value
83
+ // in the callback to be outside of array length.
84
+ // The logic below normalises the index value based on the number
85
+ // of menu items with 2 focusable elements, and adjusts the index to ensure
86
+ // the correct menu item is sent in onItemActivated callback
87
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.table.new-cell-context-menu-styling')) {
88
+ var keys = ['row_numbers', 'header_row', 'header_column'];
89
+ var doubleItemCount = 0;
90
+ var firstIndex = results.findIndex(function (value) {
91
+ return keys.includes(value.key);
92
+ });
93
+ if (firstIndex === -1 || index <= firstIndex) {
94
+ onItemActivated && onItemActivated({
95
+ item: results[index]
96
+ });
97
+ return;
98
+ }
99
+ for (var i = firstIndex; i < results.length; i += 1) {
100
+ if (keys.includes(results[i].key)) {
101
+ doubleItemCount += 1;
102
+ }
103
+ if (firstIndex % 2 === 0 && index - doubleItemCount === i) {
104
+ onItemActivated && onItemActivated({
105
+ item: results[i]
106
+ });
107
+ return;
108
+ }
109
+ if (firstIndex % 2 === 1 && index - doubleItemCount === i) {
110
+ onItemActivated && onItemActivated({
111
+ item: results[i]
112
+ });
113
+ return;
114
+ }
115
+ }
116
+ } else {
117
+ onItemActivated && onItemActivated({
118
+ item: results[index]
119
+ });
120
+ }
121
+ }
122
+ }, innerMenu());
123
+ };
@@ -30,10 +30,10 @@ var FloatingDragMenu = function FloatingDragMenu(_ref) {
30
30
  }
31
31
  var inStickyMode = stickyHeaders === null || stickyHeaders === void 0 ? void 0 : stickyHeaders.sticky;
32
32
  var targetHandleRef = direction === 'row' ? document.querySelector('#drag-handle-button-row') : document.querySelector('#drag-handle-button-column');
33
+ var offset = direction === 'row' ? [-9, 6] : [0, -7];
33
34
  if (!targetHandleRef || !(editorView.state.selection instanceof _cellSelection.CellSelection)) {
34
35
  return null;
35
36
  }
36
- var offset = direction === 'row' ? [-9, 6] : [0, -7];
37
37
 
38
38
  // TODO: we will need to adjust the alignment and offset values depending on whether this is a row or column menu.
39
39
  return /*#__PURE__*/_react.default.createElement(_ui.Popup, {
@@ -55,10 +55,10 @@ var FloatingDragMenu = function FloatingDragMenu(_ref) {
55
55
  }, /*#__PURE__*/_react.default.createElement(_DragMenu.default, {
56
56
  editorView: editorView,
57
57
  isOpen: isOpen,
58
- boundariesElement: boundariesElement,
59
58
  tableNode: tableNode,
60
59
  direction: direction,
61
60
  index: index,
61
+ target: targetHandleRef || undefined,
62
62
  targetCellPosition: targetCellPosition,
63
63
  getEditorContainerWidth: getEditorContainerWidth,
64
64
  editorAnalyticsAPI: editorAnalyticsAPI,
@@ -35,7 +35,6 @@ var ColumnControls = exports.ColumnControls = function ColumnControls(_ref) {
35
35
  tableActive = _ref.tableActive,
36
36
  tableRef = _ref.tableRef,
37
37
  hoveredCell = _ref.hoveredCell,
38
- isResizing = _ref.isResizing,
39
38
  stickyTop = _ref.stickyTop,
40
39
  localId = _ref.localId,
41
40
  isInDanger = _ref.isInDanger,
@@ -105,13 +104,13 @@ var ColumnControls = exports.ColumnControls = function ColumnControls(_ref) {
105
104
  (0, _commands.clearHoverSelection)()(state, dispatch);
106
105
  }
107
106
  }, [editorView, tableActive]);
108
- var handleMouseUp = (0, _react.useCallback)(function (event) {
107
+ var toggleDragMenuHandler = (0, _react.useCallback)(function (trigger, event) {
109
108
  var state = editorView.state,
110
109
  dispatch = editorView.dispatch;
111
- if (event.shiftKey) {
110
+ if (event !== null && event !== void 0 && event.shiftKey) {
112
111
  return;
113
112
  }
114
- (0, _commands2.toggleDragMenu)(undefined, 'column', colIndex)(state, dispatch);
113
+ (0, _commands2.toggleDragMenu)(undefined, 'column', colIndex, trigger)(state, dispatch);
115
114
  }, [editorView, colIndex]);
116
115
  var colIndexes = (0, _react.useMemo)(function () {
117
116
  return [colIndex];
@@ -120,35 +119,20 @@ var ColumnControls = exports.ColumnControls = function ColumnControls(_ref) {
120
119
  var _getScrollOffset;
121
120
  columnControlsRef.current.scrollLeft = (_getScrollOffset = getScrollOffset === null || getScrollOffset === void 0 ? void 0 : getScrollOffset()) !== null && _getScrollOffset !== void 0 ? _getScrollOffset : 0;
122
121
  }
123
- var generateHandleByType = function generateHandleByType(type) {
122
+ var generateHandleByType = function generateHandleByType(type, appearance, gridColumn, indexes) {
124
123
  var _rowHeights$reduce, _colWidths$reduce;
125
- if (!hoveredCell || !(colWidths !== null && colWidths !== void 0 && colWidths.length)) {
126
- return null;
127
- }
128
124
  var isHover = type === 'hover';
129
- var isColumnsSelected = selectedColIndexes.length > 0;
130
125
  var previewHeight = (_rowHeights$reduce = rowHeights === null || rowHeights === void 0 ? void 0 : rowHeights.reduce(function (sum, cur) {
131
126
  return sum + cur;
132
127
  }, 0)) !== null && _rowHeights$reduce !== void 0 ? _rowHeights$reduce : 0;
133
- var showCondition = isHover ? isColumnsSelected && !selectedColIndexes.includes(colIndex) && Number.isFinite(hoveredCell === null || hoveredCell === void 0 ? void 0 : hoveredCell.colIndex) : selectedColIndexes.length < (colWidths === null || colWidths === void 0 ? void 0 : colWidths.length) && Number.isFinite(hoveredCell === null || hoveredCell === void 0 ? void 0 : hoveredCell.colIndex);
134
- if (!showCondition) {
135
- return null;
136
- }
137
- var gridColumnPosition = "".concat(colIndex + 1, " / span 1");
138
- var selectedColumnPosition = "".concat(selectedColIndexes[0] + 1, " / span ").concat(selectedColIndexes.length);
139
- var hoveredAppearance = selectedColIndexes.includes(colIndex) ? isInDanger ? 'danger' : 'selected' : 'default';
140
- var currentSelectionAppearance = isColumnsSelected ? isInDanger ? 'danger' : 'selected' : hoveredAppearance;
141
- var isSelecting = isColumnsSelected && !isHover;
142
-
143
- // this indexes are used to calculate the drag and drop source
144
- var indexes = isColumnsSelected ? isHover ? colIndexes : selectedColIndexes : colIndexes;
145
128
  var previewWidth = (_colWidths$reduce = colWidths === null || colWidths === void 0 ? void 0 : colWidths.reduce(function (sum, v, i) {
146
129
  return sum + (v !== null && v !== void 0 ? v : _styles.tableCellMinWidth) * (indexes.includes(i) ? 1 : 0);
147
130
  }, 0)) !== null && _colWidths$reduce !== void 0 ? _colWidths$reduce : _styles.tableCellMinWidth;
148
131
  return /*#__PURE__*/_react.default.createElement("div", {
149
132
  key: type,
150
133
  style: {
151
- gridColumn: isSelecting ? selectedColumnPosition : gridColumnPosition,
134
+ gridColumn: gridColumn,
135
+ gridRow: '1',
152
136
  display: 'flex',
153
137
  justifyContent: 'center',
154
138
  alignItems: 'center',
@@ -158,33 +142,38 @@ var ColumnControls = exports.ColumnControls = function ColumnControls(_ref) {
158
142
  width: '100%',
159
143
  position: 'relative'
160
144
  },
161
- "data-column-control-index": hoveredCell.colIndex,
162
- "data-testid": "table-floating-column-".concat(isSelecting ? selectedColIndexes[0] : colIndex, "-drag-handle")
145
+ "data-testid": "table-floating-column-".concat(isHover ? colIndex : selectedColIndexes[0], "-drag-handle")
163
146
  }, /*#__PURE__*/_react.default.createElement(_DragHandle.DragHandle, {
164
147
  isDragMenuTarget: !isHover,
165
148
  direction: "column",
166
149
  tableLocalId: localId || '',
167
150
  indexes: indexes,
168
- forceDefaultHandle: isHover ? false : isColumnsSelected,
169
151
  previewWidth: previewWidth,
152
+ forceDefaultHandle: !isHover,
170
153
  previewHeight: previewHeight,
171
- appearance: isSelecting ? currentSelectionAppearance : hoveredAppearance,
154
+ appearance: appearance,
172
155
  onClick: handleClick,
173
156
  onMouseOver: handleMouseOver,
174
157
  onMouseOut: handleMouseOut,
175
- onMouseUp: handleMouseUp,
158
+ toggleDragMenu: toggleDragMenuHandler,
176
159
  editorView: editorView
177
160
  }));
178
161
  };
179
- var columnHandles = function columnHandles(hoveredCell) {
180
- if (!hoveredCell) {
162
+ var columnHandles = function columnHandles() {
163
+ var handles = [];
164
+ var isColumnSelected = selectedColIndexes.length > 0;
165
+ var isEntireTableSelected = (colWidths || []).length > selectedColIndexes.length;
166
+ if (!tableActive) {
181
167
  return null;
182
168
  }
183
- if (hoveredCell.colIndex === undefined) {
184
- return generateHandleByType('selected');
169
+
170
+ // placeholder / selected need to always render at least one handle
171
+ // so it can be focused via keyboard shortcuts
172
+ handles.push(generateHandleByType('selected', isColumnSelected && isEntireTableSelected ? isInDanger ? 'danger' : 'selected' : 'placeholder', "".concat(selectedColIndexes[0] + 1, " / span ").concat(selectedColIndexes.length), selectedColIndexes));
173
+ if (hoveredCell && isTableHovered && colIndex !== undefined && !selectedColIndexes.includes(colIndex)) {
174
+ handles.push(generateHandleByType('hover', 'default', "".concat(colIndex + 1, " / span 1"), colIndexes));
185
175
  }
186
- var sortedHandles = [generateHandleByType('hover'), generateHandleByType('selected')];
187
- return hoveredCell.colIndex < selectedColIndexes[0] ? sortedHandles : sortedHandles.reverse();
176
+ return handles;
188
177
  };
189
178
  var containerWidth = isNumberColumnEnabled && tableContainerWidth ? tableContainerWidth - _editorSharedStyles.akEditorTableNumberColumnWidth : tableContainerWidth;
190
179
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -201,7 +190,7 @@ var ColumnControls = exports.ColumnControls = function ColumnControls(_ref) {
201
190
  overflowX: stickyTop ? 'hidden' : 'visible',
202
191
  pointerEvents: isDragging ? 'none' : undefined
203
192
  }
204
- }, !isResizing && columnParams.map(function (_ref2, index) {
193
+ }, columnParams.map(function (_ref2, index) {
205
194
  var startIndex = _ref2.startIndex,
206
195
  endIndex = _ref2.endIndex;
207
196
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -219,6 +208,6 @@ var ColumnControls = exports.ColumnControls = function ColumnControls(_ref) {
219
208
  right: '0'
220
209
  } : {}
221
210
  }));
222
- }), tableActive && isTableHovered && !isResizing && columnHandles(hoveredCell)));
211
+ }), columnHandles()));
223
212
  };
224
213
  var _default = exports.default = ColumnControls;
@@ -105,7 +105,7 @@ var TableFloatingColumnControls = exports.TableFloatingColumnControls = function
105
105
  }
106
106
  return [0];
107
107
  }, [tableRef, tableRect.height]);
108
- if (!tableRef || !tableActive) {
108
+ if (!tableRef || !tableActive || isResizing) {
109
109
  return null;
110
110
  }
111
111
  var colWidths = (0, _utils.getColumnsWidths)(editorView);
@@ -126,7 +126,6 @@ var TableFloatingColumnControls = exports.TableFloatingColumnControls = function
126
126
  editorView: editorView,
127
127
  hoveredCell: hoveredCell,
128
128
  tableRef: tableRef,
129
- isResizing: isResizing,
130
129
  tableActive: tableActive,
131
130
  isTableHovered: isTableHovered,
132
131
  stickyTop: tableActive ? stickyTop : undefined,
@@ -18,6 +18,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
18
18
  var DragCornerControlsComponent = function DragCornerControlsComponent(_ref) {
19
19
  var editorView = _ref.editorView,
20
20
  isInDanger = _ref.isInDanger,
21
+ isResizing = _ref.isResizing,
21
22
  formatMessage = _ref.intl.formatMessage;
22
23
  var handleOnClick = function handleOnClick() {
23
24
  var state = editorView.state,
@@ -37,6 +38,9 @@ var DragCornerControlsComponent = function DragCornerControlsComponent(_ref) {
37
38
  }
38
39
  return (0, _utils.isTableSelected)(selection);
39
40
  }, [editorView.state]);
41
+ if (isResizing) {
42
+ return null;
43
+ }
40
44
  return /*#__PURE__*/_react.default.createElement("button", {
41
45
  className: (0, _classnames.default)(_types.TableCssClassName.DRAG_CORNER_BUTTON, {
42
46
  active: isActive,