@atlaskit/editor-plugin-table 5.7.10 → 5.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/afm-cc/tsconfig.json +3 -0
  3. package/dist/cjs/commands/column-resize.js +155 -0
  4. package/dist/cjs/commands/go-to-next-cell.js +15 -0
  5. package/dist/cjs/commands/selection.js +16 -3
  6. package/dist/cjs/plugin.js +2 -1
  7. package/dist/cjs/pm-plugins/keymap.js +9 -0
  8. package/dist/cjs/pm-plugins/table-resizing/event-handlers.js +18 -7
  9. package/dist/cjs/pm-plugins/table-resizing/utils/index.js +6 -0
  10. package/dist/cjs/types.js +2 -0
  11. package/dist/cjs/ui/FloatingDragMenu/DragMenu.js +187 -17
  12. package/dist/cjs/ui/FloatingDragMenu/index.js +4 -2
  13. package/dist/cjs/ui/FloatingDragMenu/styles.js +19 -0
  14. package/dist/cjs/ui/consts.js +2 -1
  15. package/dist/es2019/commands/column-resize.js +149 -0
  16. package/dist/es2019/commands/go-to-next-cell.js +13 -0
  17. package/dist/es2019/commands/selection.js +16 -3
  18. package/dist/es2019/plugin.js +2 -1
  19. package/dist/es2019/pm-plugins/keymap.js +10 -1
  20. package/dist/es2019/pm-plugins/table-resizing/event-handlers.js +19 -8
  21. package/dist/es2019/pm-plugins/table-resizing/utils/index.js +1 -1
  22. package/dist/es2019/types.js +2 -0
  23. package/dist/es2019/ui/FloatingDragMenu/DragMenu.js +177 -7
  24. package/dist/es2019/ui/FloatingDragMenu/index.js +4 -2
  25. package/dist/es2019/ui/FloatingDragMenu/styles.js +62 -0
  26. package/dist/es2019/ui/consts.js +2 -1
  27. package/dist/esm/commands/column-resize.js +149 -0
  28. package/dist/esm/commands/go-to-next-cell.js +15 -0
  29. package/dist/esm/commands/selection.js +16 -3
  30. package/dist/esm/plugin.js +2 -1
  31. package/dist/esm/pm-plugins/keymap.js +10 -1
  32. package/dist/esm/pm-plugins/table-resizing/event-handlers.js +19 -8
  33. package/dist/esm/pm-plugins/table-resizing/utils/index.js +1 -1
  34. package/dist/esm/types.js +2 -0
  35. package/dist/esm/ui/FloatingDragMenu/DragMenu.js +177 -7
  36. package/dist/esm/ui/FloatingDragMenu/index.js +4 -2
  37. package/dist/esm/ui/FloatingDragMenu/styles.js +12 -0
  38. package/dist/esm/ui/consts.js +2 -1
  39. package/dist/types/commands/column-resize.d.ts +5 -0
  40. package/dist/types/pm-plugins/table-resizing/utils/index.d.ts +1 -1
  41. package/dist/types/types.d.ts +2 -0
  42. package/dist/types/ui/FloatingDragMenu/DragMenu.d.ts +1 -2
  43. package/dist/types/ui/FloatingDragMenu/index.d.ts +3 -2
  44. package/dist/types/ui/FloatingDragMenu/styles.d.ts +3 -0
  45. package/dist/types/ui/consts.d.ts +1 -1
  46. package/dist/types-ts4.5/commands/column-resize.d.ts +5 -0
  47. package/dist/types-ts4.5/pm-plugins/table-resizing/utils/index.d.ts +1 -1
  48. package/dist/types-ts4.5/types.d.ts +2 -0
  49. package/dist/types-ts4.5/ui/FloatingDragMenu/DragMenu.d.ts +1 -2
  50. package/dist/types-ts4.5/ui/FloatingDragMenu/index.d.ts +3 -2
  51. package/dist/types-ts4.5/ui/FloatingDragMenu/styles.d.ts +3 -0
  52. package/dist/types-ts4.5/ui/consts.d.ts +1 -1
  53. package/package.json +6 -2
  54. package/src/__tests__/unit/ui/FloatingDragMenu.tsx +295 -0
  55. package/src/commands/column-resize.ts +257 -0
  56. package/src/commands/go-to-next-cell.ts +21 -0
  57. package/src/commands/selection.ts +19 -2
  58. package/src/plugin.tsx +1 -0
  59. package/src/pm-plugins/keymap.ts +35 -0
  60. package/src/pm-plugins/table-resizing/event-handlers.ts +33 -21
  61. package/src/pm-plugins/table-resizing/utils/index.ts +1 -0
  62. package/src/types.ts +3 -0
  63. package/src/ui/FloatingDragMenu/DragMenu.tsx +226 -7
  64. package/src/ui/FloatingDragMenu/index.tsx +4 -1
  65. package/src/ui/FloatingDragMenu/styles.ts +71 -0
  66. package/src/ui/consts.ts +6 -1
  67. package/tsconfig.app.json +3 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # @atlaskit/editor-plugin-table
2
2
 
3
+ ## 5.8.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#57215](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/57215) [`73841c209537`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/73841c209537) - [ux] ECA11Y-107: Add basic keyboard navigation for resize sliders
8
+
9
+ ### Patch Changes
10
+
11
+ - [#66092](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/66092) [`b436457c489f`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/b436457c489f) - [ux] ED-21241: Add new menu items to the drag handle menus
12
+ - Updated dependencies
13
+
3
14
  ## 5.7.10
4
15
 
5
16
  ### Patch Changes
@@ -60,6 +60,9 @@
60
60
  {
61
61
  "path": "../../../design-system/theme/afm-cc/tsconfig.json"
62
62
  },
63
+ {
64
+ "path": "../../../design-system/toggle/afm-cc/tsconfig.json"
65
+ },
63
66
  {
64
67
  "path": "../../../design-system/tokens/afm-cc/tsconfig.json"
65
68
  },
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.initiateKeyboardColumnResizing = exports.changeColumnWidthByStep = exports.activateNextResizeArea = void 0;
7
+ var _styles = require("@atlaskit/editor-common/styles");
8
+ var _editorTables = require("@atlaskit/editor-tables");
9
+ var _utils = require("@atlaskit/editor-tables/src/utils");
10
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
11
+ var _pluginFactory = require("../pm-plugins/table-resizing/plugin-factory");
12
+ var _utils2 = require("../pm-plugins/table-resizing/utils");
13
+ var _transforms = require("../transforms");
14
+ var _utils3 = require("../utils");
15
+ var _index = require("./index");
16
+ var updateResizeHandleAndStatePosition = function updateResizeHandleAndStatePosition(rowIndex, columnIndex, nextResizeHandlePos) {
17
+ return function (state, dispatch) {
18
+ (0, _index.addResizeHandleDecorations)(rowIndex, columnIndex, true)(state, dispatch);
19
+ // Currently only 'right' position is used in showResizeHandleLine
20
+ (0, _index.showResizeHandleLine)({
21
+ left: 0,
22
+ right: columnIndex
23
+ })(state, dispatch);
24
+ (0, _pluginFactory.createCommand)({
25
+ type: 'SET_RESIZE_HANDLE_POSITION',
26
+ data: {
27
+ resizeHandlePos: nextResizeHandlePos
28
+ }
29
+ })(state, dispatch);
30
+ return false;
31
+ };
32
+ };
33
+ var initiateKeyboardColumnResizing = exports.initiateKeyboardColumnResizing = function initiateKeyboardColumnResizing(state, dispatch, view) {
34
+ if (!(0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
35
+ return false;
36
+ }
37
+ var selection = state.selection;
38
+ var selectionRect = (0, _utils.isSelectionType)(selection, 'cell') ? (0, _utils.getSelectionRect)(selection) : (0, _utils.findCellRectClosestToPos)(selection.$from);
39
+ var cell = (0, _utils.findCellClosestToPos)(selection.$from);
40
+ if (selectionRect && cell && view) {
41
+ var cellAttrs = cell.node.attrs;
42
+ var width = (0, _utils2.currentColWidth)(view, cell.pos, cellAttrs);
43
+ updateResizeHandleAndStatePosition(selectionRect.top, selectionRect.right, cell.pos)(state, dispatch);
44
+ (0, _pluginFactory.createCommand)({
45
+ type: 'SET_DRAGGING',
46
+ data: {
47
+ dragging: {
48
+ startX: 0,
49
+ startWidth: width
50
+ }
51
+ }
52
+ })(state, dispatch);
53
+ return true;
54
+ }
55
+ return false;
56
+ };
57
+ var activateNextResizeArea = exports.activateNextResizeArea = function activateNextResizeArea(direction) {
58
+ return function (state, dispatch) {
59
+ if (!(0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
60
+ return false;
61
+ }
62
+ var _ref = (0, _pluginFactory.getPluginState)(state) || {},
63
+ resizeHandlePos = _ref.resizeHandlePos,
64
+ dragging = _ref.dragging;
65
+ // If No resizing has initiated, skip to regular handler
66
+ if (!resizeHandlePos || !dragging) {
67
+ return false;
68
+ }
69
+ var selection = state.selection;
70
+ var cell = (0, _utils.findCellClosestToPos)(selection.$from);
71
+ if (!cell) {
72
+ // cursor position may be changed by mouse to be outside of table;
73
+ return false;
74
+ }
75
+ var $currentCell = state.doc.resolve(resizeHandlePos);
76
+ if (!$currentCell) {
77
+ return false;
78
+ }
79
+ var tableNode = $currentCell.node(-1);
80
+ var closestTable = (0, _utils.findTableClosestToPos)($currentCell);
81
+ var tableMap = _editorTables.TableMap.get(tableNode);
82
+ if (!tableNode || !closestTable || !tableMap) {
83
+ return false;
84
+ }
85
+ var currentCellRect = tableMap.findCell($currentCell.pos - $currentCell.start(-1));
86
+ var $nextCell = (0, _utils.nextCell)($currentCell, 'horiz', direction);
87
+ if ($nextCell) {
88
+ // we are somewhere in between the side columns of the table
89
+ var offset = $nextCell.pos - $nextCell.start(-1);
90
+ var rectForNextCell = tableMap.findCell(offset);
91
+ updateResizeHandleAndStatePosition(rectForNextCell.top, rectForNextCell.right, $nextCell.pos)(state, dispatch);
92
+ } else {
93
+ // current position is in the one of the side columns of the table(left or right)
94
+ if (currentCellRect.left === 0) {
95
+ var lastCellInCurrentRow = tableMap.positionAt(currentCellRect.top, tableMap.width - 1, tableNode) + closestTable.start;
96
+ var $lastCell = state.doc.resolve(lastCellInCurrentRow);
97
+ updateResizeHandleAndStatePosition(currentCellRect.top, tableMap.width, $lastCell.pos)(state, dispatch);
98
+ } else if (tableMap.width === currentCellRect.right) {
99
+ var firsCellInCurrentRow = tableMap.positionAt(currentCellRect.top, 0, tableNode) + closestTable.start;
100
+ var _$nextCell = state.doc.resolve(firsCellInCurrentRow);
101
+ updateResizeHandleAndStatePosition(currentCellRect.top, 1, _$nextCell.pos)(state, dispatch);
102
+ }
103
+ }
104
+ return true;
105
+ };
106
+ };
107
+ var changeColumnWidthByStep = exports.changeColumnWidthByStep = function changeColumnWidthByStep(stepSize, getEditorContainerWidth) {
108
+ return function (state, dispatch, view) {
109
+ if (!(0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
110
+ return false;
111
+ }
112
+ var _getTableResizingPlug = (0, _pluginFactory.getPluginState)(state),
113
+ resizeHandlePos = _getTableResizingPlug.resizeHandlePos,
114
+ dragging = _getTableResizingPlug.dragging;
115
+ if (!view || !resizeHandlePos || !dragging) {
116
+ return false;
117
+ }
118
+ var $cell = state.doc.resolve(resizeHandlePos);
119
+ var tableStartPosition = $cell.start(-1);
120
+ var originalTable = $cell.node(-1);
121
+ var map = _editorTables.TableMap.get(originalTable);
122
+ var domAtPos = view.domAtPos.bind(view);
123
+ var colIndex = map.colCount($cell.pos - tableStartPosition) + ($cell.nodeAfter ? $cell.nodeAfter.attrs.colspan : 1) - 1;
124
+ var dom = domAtPos(tableStartPosition).node;
125
+ if (dom && dom.nodeName !== 'TABLE') {
126
+ dom = dom.closest('table');
127
+ }
128
+ var maxSize = (0, _utils2.getTableMaxWidth)({
129
+ table: originalTable,
130
+ tableStart: tableStartPosition,
131
+ state: state,
132
+ layout: originalTable.attrs.layout,
133
+ getEditorContainerWidth: getEditorContainerWidth
134
+ });
135
+ var initialResizeState = (0, _utils2.getResizeState)({
136
+ minWidth: _styles.tableCellMinWidth,
137
+ maxSize: maxSize,
138
+ table: originalTable,
139
+ tableRef: dom,
140
+ start: tableStartPosition,
141
+ domAtPos: domAtPos
142
+ });
143
+ (0, _utils2.updateControls)()(state);
144
+ var selectionRect = (0, _utils.getSelectionRect)(state.selection);
145
+ var selectedColumns = selectionRect ? (0, _utils3.getSelectedColumnIndexes)(selectionRect) : [];
146
+ // only selected (or selected - 1) columns should be distributed
147
+ var resizingSelectedColumns = selectedColumns.indexOf(colIndex) > -1 || selectedColumns.indexOf(colIndex + 1) > -1;
148
+ var newResizeState = (0, _utils2.resizeColumn)(initialResizeState, colIndex, stepSize, dom, resizingSelectedColumns ? selectedColumns : undefined);
149
+ var tr = (0, _transforms.updateColumnWidths)(newResizeState, originalTable, tableStartPosition)(state.tr);
150
+ if (dispatch) {
151
+ dispatch(tr);
152
+ }
153
+ return true;
154
+ };
155
+ };
@@ -8,7 +8,10 @@ var _analytics = require("@atlaskit/editor-common/analytics");
8
8
  var _utils = require("@atlaskit/editor-prosemirror/utils");
9
9
  var _tableMap = require("@atlaskit/editor-tables/table-map");
10
10
  var _utils2 = require("@atlaskit/editor-tables/utils");
11
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
11
12
  var _commandsWithAnalytics = require("../commands-with-analytics");
13
+ var _pluginFactory = require("../pm-plugins/table-resizing/plugin-factory");
14
+ var _hover = require("./hover");
12
15
  // #region Constants
13
16
 
14
17
  var TAB_FORWARD_DIRECTION = 1;
@@ -20,6 +23,18 @@ var goToNextCell = exports.goToNextCell = function goToNextCell(editorAnalyticsA
20
23
  if (!table) {
21
24
  return false;
22
25
  }
26
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
27
+ var _getResizePluginState;
28
+ var isColumnResizing = !!((_getResizePluginState = (0, _pluginFactory.getPluginState)(state)) !== null && _getResizePluginState !== void 0 && _getResizePluginState.dragging);
29
+ if (isColumnResizing) {
30
+ (0, _pluginFactory.createCommand)({
31
+ type: 'STOP_RESIZING'
32
+ }, function (originalTr) {
33
+ return (state.tr || originalTr).setMeta('scrollIntoView', false);
34
+ })(state, dispatch);
35
+ (0, _hover.hideResizeHandleLine)()(state, dispatch);
36
+ }
37
+ }
23
38
  var map = _tableMap.TableMap.get(table.node);
24
39
  var _state$schema$nodes = state.schema.nodes,
25
40
  tableCell = _state$schema$nodes.tableCell,
@@ -9,7 +9,9 @@ var _state = require("@atlaskit/editor-prosemirror/state");
9
9
  var _cellSelection = require("@atlaskit/editor-tables/cell-selection");
10
10
  var _tableMap = require("@atlaskit/editor-tables/table-map");
11
11
  var _utils = require("@atlaskit/editor-tables/utils");
12
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
12
13
  var _misc = require("../commands/misc");
14
+ var _pluginFactory = require("../pm-plugins/table-resizing/plugin-factory");
13
15
  var _toolbar = require("../toolbar");
14
16
  var TableSelectionDirection = exports.TableSelectionDirection = /*#__PURE__*/function (TableSelectionDirection) {
15
17
  TableSelectionDirection["TopToBottom"] = "TopToBottom";
@@ -198,9 +200,14 @@ var arrowLeftFromText = function arrowLeftFromText(editorSelectionAPI) {
198
200
  var table = (0, _utils.findTable)(selection);
199
201
  if (table) {
200
202
  var $from = selection.$from;
203
+ var isColumnResizing = false;
204
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
205
+ var columResizePluginState = (0, _pluginFactory.getPluginState)(state) || {};
206
+ isColumnResizing = Boolean(columResizePluginState === null || columResizePluginState === void 0 ? void 0 : columResizePluginState.dragging);
207
+ }
201
208
  if (isSelectionAtStartOfTable($from, selection) && $from.parent.type.name === 'paragraph' && $from.depth === table.depth + 3 &&
202
209
  // + 3 for: row, cell & paragraph nodes
203
- editorSelectionAPI) {
210
+ editorSelectionAPI && !isColumnResizing) {
204
211
  var selectionState = editorSelectionAPI.sharedState.currentState() || {};
205
212
  if ((selectionState === null || selectionState === void 0 ? void 0 : selectionState.selectionRelativeToNode) === _selection.RelativeSelectionPos.Before) {
206
213
  // we have a text selection at start of first table cell, directly inside a top level paragraph,
@@ -227,8 +234,14 @@ var arrowRightFromText = function arrowRightFromText(editorSelectionAPI) {
227
234
  var table = (0, _utils.findTable)(selection);
228
235
  if (table) {
229
236
  var $to = selection.$to;
230
- if (isSelectionAtEndOfTable($to, selection) && $to.parent.type.name === 'paragraph' && $to.depth === table.depth + 3 // + 3 for: row, cell & paragraph nodes
231
- ) {
237
+ var isColumnResizing = false;
238
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
239
+ var columResizePluginState = (0, _pluginFactory.getPluginState)(state) || {};
240
+ isColumnResizing = Boolean(columResizePluginState === null || columResizePluginState === void 0 ? void 0 : columResizePluginState.dragging);
241
+ }
242
+ if (isSelectionAtEndOfTable($to, selection) && $to.parent.type.name === 'paragraph' && $to.depth === table.depth + 3 &&
243
+ // + 3 for: row, cell & paragraph nodes
244
+ !isColumnResizing) {
232
245
  // we have a text selection at end of last table cell, directly inside a top level paragraph,
233
246
  // and want to set a full table cell selection
234
247
  return selectFullTable(editorSelectionAPI)({
@@ -362,7 +362,8 @@ var tablesPlugin = function tablesPlugin(_ref) {
362
362
  canDrag: dragAndDropState === null || dragAndDropState === void 0 ? void 0 : dragAndDropState.canDrag,
363
363
  getEditorContainerWidth: defaultGetEditorContainerWidth,
364
364
  editorAnalyticsAPI: editorAnalyticsAPI,
365
- stickyHeaders: stickyHeader
365
+ stickyHeaders: stickyHeader,
366
+ pluginConfig: pluginConfig
366
367
  }), allowControls && !isDragAndDropEnabled && !isResizing && /*#__PURE__*/_react.default.createElement(_FloatingDeleteButton.default, {
367
368
  editorView: editorView,
368
369
  selection: editorView.state.selection,
@@ -9,8 +9,10 @@ var _analytics = require("@atlaskit/editor-common/analytics");
9
9
  var _keymaps = require("@atlaskit/editor-common/keymaps");
10
10
  var _commands = require("@atlaskit/editor-prosemirror/commands");
11
11
  var _keymap = require("@atlaskit/editor-prosemirror/keymap");
12
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
12
13
  var _commands2 = require("../commands");
13
14
  var _commandsWithAnalytics = require("../commands-with-analytics");
15
+ var _columnResize = require("../commands/column-resize");
14
16
  var _insert = require("../commands/insert");
15
17
  var _commandsWithAnalytics2 = require("../pm-plugins/drag-and-drop/commands-with-analytics");
16
18
  var _analytics2 = require("../utils/analytics");
@@ -49,6 +51,13 @@ function keymapPlugin(getEditorContainerWidth, editorAnalyticsAPI, dragAndDropEn
49
51
  (0, _keymaps.bindKeymapWithCommand)(_keymaps.deleteColumn.common, (0, _commandsWithAnalytics.deleteSelectedRowsOrColumnsWithAnalyticsViaShortcut)(editorAnalyticsAPI), list);
50
52
  (0, _keymaps.bindKeymapWithCommand)(_keymaps.deleteRow.common, (0, _commandsWithAnalytics.deleteSelectedRowsOrColumnsWithAnalyticsViaShortcut)(editorAnalyticsAPI), list);
51
53
  }
54
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
55
+ (0, _keymaps.bindKeymapWithCommand)(_keymaps.startColumnResizing.common, _columnResize.initiateKeyboardColumnResizing, list);
56
+ (0, _keymaps.bindKeymapWithCommand)(_keymaps.moveRight.common, (0, _columnResize.activateNextResizeArea)(1), list);
57
+ (0, _keymaps.bindKeymapWithCommand)(_keymaps.moveLeft.common, (0, _columnResize.activateNextResizeArea)(-1), list);
58
+ (0, _keymaps.bindKeymapWithCommand)(_keymaps.decreaseMediaSize.common, (0, _columnResize.changeColumnWidthByStep)(-10, getEditorContainerWidth), list);
59
+ (0, _keymaps.bindKeymapWithCommand)(_keymaps.increaseMediaSize.common, (0, _columnResize.changeColumnWidthByStep)(10, getEditorContainerWidth), list);
60
+ }
52
61
  return (0, _keymap.keymap)(list);
53
62
  }
54
63
  var _default = exports.default = keymapPlugin;
@@ -41,13 +41,24 @@ var handleMouseDown = exports.handleMouseDown = function handleMouseDown(view, e
41
41
  if (dom && dom.nodeName !== 'TABLE') {
42
42
  dom = dom.closest('table');
43
43
  }
44
- var containerWidth = getEditorContainerWidth();
45
- var parentWidth = (0, _nodeWidth.getParentNodeWidth)(start, state, containerWidth);
46
- var maxSize = (0, _platformFeatureFlags.getBooleanFF)('platform.editor.custom-table-width') ? parentWidth ||
47
- // its safe to reference table width from node as this will not have changed
48
- originalTable.attrs.width || (0, _utils3.getLayoutSize)(dom.getAttribute('data-layout'), containerWidth.width, {}) : parentWidth || (0, _utils3.getLayoutSize)(dom.getAttribute('data-layout'), containerWidth.width, {});
49
- if (originalTable.attrs.isNumberColumnEnabled) {
50
- maxSize -= _editorSharedStyles.akEditorTableNumberColumnWidth;
44
+ var maxSize;
45
+ if (!(0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
46
+ var containerWidth = getEditorContainerWidth();
47
+ var parentWidth = (0, _nodeWidth.getParentNodeWidth)(start, state, containerWidth);
48
+ maxSize = (0, _platformFeatureFlags.getBooleanFF)('platform.editor.custom-table-width') ? parentWidth ||
49
+ // its safe to reference table width from node as this will not have changed
50
+ originalTable.attrs.width || (0, _utils3.getLayoutSize)(dom.getAttribute('data-layout'), containerWidth.width, {}) : parentWidth || (0, _utils3.getLayoutSize)(dom.getAttribute('data-layout'), containerWidth.width, {});
51
+ if (originalTable.attrs.isNumberColumnEnabled) {
52
+ maxSize -= _editorSharedStyles.akEditorTableNumberColumnWidth;
53
+ }
54
+ } else {
55
+ maxSize = (0, _utils3.getTableMaxWidth)({
56
+ table: originalTable,
57
+ tableStart: start,
58
+ state: state,
59
+ layout: originalTable.attrs.layout,
60
+ getEditorContainerWidth: getEditorContainerWidth
61
+ });
51
62
  }
52
63
  var resizeState = (0, _utils3.getResizeState)({
53
64
  minWidth: _styles.tableCellMinWidth,
@@ -123,6 +123,12 @@ Object.defineProperty(exports, "getResizeState", {
123
123
  return _resizeState.getResizeState;
124
124
  }
125
125
  });
126
+ Object.defineProperty(exports, "getTableMaxWidth", {
127
+ enumerable: true,
128
+ get: function get() {
129
+ return _misc.getTableMaxWidth;
130
+ }
131
+ });
126
132
  Object.defineProperty(exports, "getTotalWidth", {
127
133
  enumerable: true,
128
134
  get: function get() {
package/dist/cjs/types.js CHANGED
@@ -105,6 +105,8 @@ var TableCssClassName = exports.TableCssClassName = _objectSpread(_objectSpread(
105
105
  DRAG_HANDLE_DISABLED: "".concat(_adfSchema.tablePrefixSelector, "-drag-handle-disabled"),
106
106
  /** minimised handle class */
107
107
  DRAG_HANDLE_MINIMISED: "".concat(_adfSchema.tablePrefixSelector, "-drag-handle-minimised"),
108
+ DRAG_SUBMENU: "".concat(_adfSchema.tablePrefixSelector, "-drag-submenu"),
109
+ DRAG_SUBMENU_ICON: "".concat(_adfSchema.tablePrefixSelector, "-drag-submenu-icon"),
108
110
  /** Other classes */
109
111
  NUMBERED_COLUMN: "".concat(_adfSchema.tablePrefixSelector, "-numbered-column"),
110
112
  NUMBERED_COLUMN_BUTTON: "".concat(_adfSchema.tablePrefixSelector, "-numbered-column__button"),
@@ -5,18 +5,33 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.DragMenu = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
8
9
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
- var _react = require("@emotion/react");
10
+ var _react = require("react");
11
+ var _react2 = require("@emotion/react");
12
+ var _analytics = require("@atlaskit/editor-common/analytics");
13
+ var _styles = require("@atlaskit/editor-common/styles");
14
+ var _uiColor = require("@atlaskit/editor-common/ui-color");
10
15
  var _uiMenu = require("@atlaskit/editor-common/ui-menu");
16
+ var _utils = require("@atlaskit/editor-common/utils");
17
+ var _editorPalette = require("@atlaskit/editor-palette");
11
18
  var _shortcut = require("@atlaskit/editor-shared-styles/shortcut");
12
19
  var _tableMap = require("@atlaskit/editor-tables/table-map");
13
- var _utils = require("@atlaskit/editor-tables/utils");
20
+ var _utils2 = require("@atlaskit/editor-tables/utils");
21
+ var _backgroundColor = _interopRequireDefault(require("@atlaskit/icon/glyph/editor/background-color"));
22
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
23
+ var _toggle = _interopRequireDefault(require("@atlaskit/toggle"));
14
24
  var _commands = require("../../commands");
25
+ var _commandsWithAnalytics = require("../../commands-with-analytics");
15
26
  var _commands2 = require("../../pm-plugins/drag-and-drop/commands");
16
27
  var _pluginFactory = require("../../pm-plugins/drag-and-drop/plugin-factory");
17
- var _utils2 = require("../../utils");
28
+ var _pluginFactory2 = require("../../pm-plugins/plugin-factory");
29
+ var _types = require("../../types");
30
+ var _utils3 = require("../../utils");
18
31
  var _dragMenu = require("../../utils/drag-menu");
19
32
  var _consts = require("../consts");
33
+ var _styles2 = require("./styles");
34
+ /* eslint-disable @atlaskit/design-system/prefer-primitives */
20
35
  /** @jsx jsx */
21
36
 
22
37
  var groupedDragMenuConfig = [['add_row_above', 'add_row_below', 'add_column_left', 'add_column_right', 'distribute_columns', 'clear_cells', 'delete_row', 'delete_column'], ['move_column_left', 'move_column_right', 'move_row_up', 'move_row_down'], ['sort_column_asc', 'sort_column_desc']];
@@ -39,15 +54,14 @@ var convertToDropdownItems = function convertToDropdownItems(dragMenuConfig) {
39
54
  name: item.id
40
55
  },
41
56
  isDisabled: item.disabled,
42
- elemBefore: item.icon ? (0, _react.jsx)("div", {
57
+ elemBefore: item.icon ? (0, _react2.jsx)("div", {
43
58
  style: {
44
- marginRight: "var(--ds-space-negative-075, -6px)",
45
59
  display: 'flex'
46
60
  }
47
- }, (0, _react.jsx)(item.icon, {
61
+ }, (0, _react2.jsx)(item.icon, {
48
62
  label: item.title
49
63
  })) : undefined,
50
- elemAfter: item.keymap ? (0, _react.jsx)("div", {
64
+ elemAfter: item.keymap ? (0, _react2.jsx)("div", {
51
65
  css: _shortcut.shortcutStyle
52
66
  }, item.keymap) : undefined
53
67
  });
@@ -65,6 +79,7 @@ var convertToDropdownItems = function convertToDropdownItems(dragMenuConfig) {
65
79
  };
66
80
  };
67
81
  var DragMenu = exports.DragMenu = function DragMenu(_ref) {
82
+ var _pluginConfig$allowBa;
68
83
  var _ref$direction = _ref.direction,
69
84
  direction = _ref$direction === void 0 ? 'row' : _ref$direction,
70
85
  index = _ref.index,
@@ -77,23 +92,136 @@ var DragMenu = exports.DragMenu = function DragMenu(_ref) {
77
92
  targetCellPosition = _ref.targetCellPosition,
78
93
  getEditorContainerWidth = _ref.getEditorContainerWidth,
79
94
  canDrag = _ref.canDrag,
80
- editorAnalyticsAPI = _ref.editorAnalyticsAPI;
81
- var tableMap = tableNode ? _tableMap.TableMap.get(tableNode) : undefined;
95
+ editorAnalyticsAPI = _ref.editorAnalyticsAPI,
96
+ pluginConfig = _ref.pluginConfig;
82
97
  var state = editorView.state,
83
98
  dispatch = editorView.dispatch;
84
99
  var selection = state.selection;
85
- var selectionRect = (0, _utils.isSelectionType)(selection, 'cell') ? (0, _utils.getSelectionRect)(selection) : (0, _utils.findCellRectClosestToPos)(selection.$from);
86
- var hasMergedCells = direction === 'row' ? _utils2.hasMergedCellsInRow : _utils2.hasMergedCellsInColumn;
100
+ var tableMap = tableNode ? _tableMap.TableMap.get(tableNode) : undefined;
101
+ var _useState = (0, _react.useState)(false),
102
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
103
+ isSubmenuOpen = _useState2[0],
104
+ setIsSubmenuOpen = _useState2[1];
105
+ var selectionRect = (0, _utils2.isSelectionType)(selection, 'cell') ? (0, _utils2.getSelectionRect)(selection) : (0, _utils2.findCellRectClosestToPos)(selection.$from);
106
+ var hasMergedCells = direction === 'row' ? _utils3.hasMergedCellsInRow : _utils3.hasMergedCellsInColumn;
87
107
  var shouldMoveDisabled = index !== undefined && hasMergedCells(index)(selection);
88
- var hasMergedCellsInTable = (0, _utils2.getMergedCellsPositions)(state.tr).length > 0;
108
+ var hasMergedCellsInTable = (0, _utils3.getMergedCellsPositions)(state.tr).length > 0;
109
+ var allowBackgroundColor = (_pluginConfig$allowBa = pluginConfig === null || pluginConfig === void 0 ? void 0 : pluginConfig.allowBackgroundColor) !== null && _pluginConfig$allowBa !== void 0 ? _pluginConfig$allowBa : false;
89
110
  var dragMenuConfig = (0, _dragMenu.getDragMenuConfig)(direction, getEditorContainerWidth, !!canDrag && !shouldMoveDisabled, hasMergedCellsInTable, editorView, tableMap, index, targetCellPosition, selectionRect, editorAnalyticsAPI);
90
111
  var _convertToDropdownIte = convertToDropdownItems(dragMenuConfig),
91
112
  menuItems = _convertToDropdownIte.menuItems,
92
113
  menuCallback = _convertToDropdownIte.menuCallback;
114
+ var handleSubMenuRef = function handleSubMenuRef(ref) {
115
+ var parent = (0, _utils.closestElement)(editorView.dom, '.fabric-editor-popup-scroll-parent');
116
+ if (!(parent && ref)) {
117
+ return;
118
+ }
119
+ var boundariesRect = parent.getBoundingClientRect();
120
+ var rect = ref.getBoundingClientRect();
121
+ if (rect.left + rect.width > boundariesRect.width) {
122
+ ref.style.left = "-".concat(rect.width, "px");
123
+ }
124
+ };
125
+ var setColor = function setColor(color) {
126
+ var _getTablePluginState = (0, _pluginFactory2.getPluginState)(editorView.state),
127
+ targetCellPosition = _getTablePluginState.targetCellPosition;
128
+ var state = editorView.state,
129
+ dispatch = editorView.dispatch;
130
+ (0, _commandsWithAnalytics.setColorWithAnalytics)(editorAnalyticsAPI)(_analytics.INPUT_METHOD.CONTEXT_MENU, color, targetCellPosition)(state, dispatch);
131
+ closeMenu();
132
+ setIsSubmenuOpen(false);
133
+ };
134
+ var createBackgroundColorMenuItem = function createBackgroundColorMenuItem() {
135
+ var _node$attrs;
136
+ var _getTablePluginState2 = (0, _pluginFactory2.getPluginState)(editorView.state),
137
+ targetCellPosition = _getTablePluginState2.targetCellPosition;
138
+ var node = targetCellPosition ? state.doc.nodeAt(targetCellPosition) : null;
139
+ 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');
140
+ return {
141
+ content: 'Background color',
142
+ value: {
143
+ name: 'background'
144
+ },
145
+ elemBefore: (0, _react2.jsx)(_backgroundColor.default, {
146
+ label: 'background color',
147
+ size: "medium"
148
+ }),
149
+ elemAfter: (0, _react2.jsx)("div", {
150
+ className: _styles.DropdownMenuSharedCssClassName.SUBMENU,
151
+ css: _styles2.dragMenuBackgroundColorStyles
152
+ }, (0, _react2.jsx)("div", {
153
+ css: (0, _styles2.cellColourPreviewStyles)(background),
154
+ className: _types.TableCssClassName.DRAG_SUBMENU_ICON
155
+ }), isSubmenuOpen && (0, _react2.jsx)("div", {
156
+ className: _types.TableCssClassName.DRAG_SUBMENU,
157
+ ref: handleSubMenuRef
158
+ }, (0, _react2.jsx)(_uiColor.ColorPalette, {
159
+ cols: 7,
160
+ onClick: setColor,
161
+ selectedColor: background,
162
+ paletteOptions: {
163
+ palette: _uiColor.cellBackgroundColorPalette,
164
+ paletteColorTooltipMessages: _uiColor.backgroundPaletteTooltipMessages,
165
+ hexToPaletteColor: _editorPalette.hexToEditorBackgroundPaletteColor
166
+ }
167
+ })))
168
+ };
169
+ };
170
+ var toggleHeaderColumn = function toggleHeaderColumn() {
171
+ (0, _commandsWithAnalytics.toggleHeaderColumnWithAnalytics)(editorAnalyticsAPI)(state, dispatch);
172
+ };
173
+ var toggleHeaderRow = function toggleHeaderRow() {
174
+ (0, _commandsWithAnalytics.toggleHeaderRowWithAnalytics)(editorAnalyticsAPI)(state, dispatch);
175
+ };
176
+ var toggleRowNumbers = function toggleRowNumbers() {
177
+ (0, _commandsWithAnalytics.toggleNumberColumnWithAnalytics)(editorAnalyticsAPI)(state, dispatch);
178
+ };
179
+ var createhHeaderRowColumnMenuItem = function createhHeaderRowColumnMenuItem(direction) {
180
+ return direction === 'column' ? {
181
+ content: 'Header column',
182
+ value: {
183
+ name: 'header_column'
184
+ },
185
+ elemAfter: (0, _react2.jsx)("div", {
186
+ css: _styles2.toggleStyles
187
+ }, (0, _react2.jsx)(_toggle.default, {
188
+ id: "toggle-header-column",
189
+ onChange: toggleHeaderColumn,
190
+ isChecked: (0, _utils3.checkIfHeaderColumnEnabled)(selection)
191
+ }))
192
+ } : {
193
+ content: 'Header row',
194
+ value: {
195
+ name: 'header_row'
196
+ },
197
+ elemAfter: (0, _react2.jsx)("div", {
198
+ css: _styles2.toggleStyles
199
+ }, (0, _react2.jsx)(_toggle.default, {
200
+ id: "toggle-header-row",
201
+ onChange: toggleHeaderRow,
202
+ isChecked: (0, _utils3.checkIfHeaderRowEnabled)(selection)
203
+ }))
204
+ };
205
+ };
206
+ var createRowNumbersMenuItem = function createRowNumbersMenuItem() {
207
+ return {
208
+ content: 'Row numbers',
209
+ value: {
210
+ name: 'row_numbers'
211
+ },
212
+ elemAfter: (0, _react2.jsx)("div", {
213
+ css: _styles2.toggleStyles
214
+ }, (0, _react2.jsx)(_toggle.default, {
215
+ id: "toggle-row-numbers",
216
+ onChange: toggleRowNumbers,
217
+ isChecked: (0, _utils3.checkIfNumberColumnEnabled)(selection)
218
+ }))
219
+ };
220
+ };
93
221
 
94
222
  /**
95
223
  * This function is to check if the menu should be closed or not.
96
- * As when continously clicking on drag handle on different rows/columns,
224
+ * As when continously clicking on tyle handle on different rows/columns,
97
225
  * should open the menu corresponding to the position of the drag handle.
98
226
  * @returns true when the menu should be closed, false otherwise
99
227
  */
@@ -123,18 +251,42 @@ var DragMenu = exports.DragMenu = function DragMenu(_ref) {
123
251
  var _menuCallback$item$va;
124
252
  var item = _ref2.item;
125
253
  (_menuCallback$item$va = menuCallback[item.value.name]) === null || _menuCallback$item$va === void 0 || _menuCallback$item$va.call(menuCallback, state, dispatch);
126
- closeMenu();
254
+ switch (item.value.name) {
255
+ case 'header_column':
256
+ toggleHeaderColumn();
257
+ break;
258
+ case 'header_row':
259
+ toggleHeaderRow();
260
+ break;
261
+ case 'row_numbers':
262
+ toggleRowNumbers();
263
+ break;
264
+ default:
265
+ break;
266
+ }
267
+ if (['header_column', 'header_row', 'row_numbers', 'background'].indexOf(item.value.name) <= -1) {
268
+ closeMenu();
269
+ }
127
270
  };
128
271
  var handleItemMouseEnter = function handleItemMouseEnter(_ref3) {
129
272
  var _item$value$name;
130
273
  var item = _ref3.item;
131
- if (!selectionRect || !((_item$value$name = item.value.name) !== null && _item$value$name !== void 0 && _item$value$name.startsWith('delete'))) {
274
+ if (!selectionRect) {
132
275
  return;
133
276
  }
134
- (item.value.name === 'delete_column' ? (0, _commands.hoverColumns)((0, _utils2.getSelectedColumnIndexes)(selectionRect), true) : (0, _commands.hoverRows)((0, _utils2.getSelectedRowIndexes)(selectionRect), true))(state, dispatch);
277
+ if (item.value.name === 'background' && !isSubmenuOpen) {
278
+ setIsSubmenuOpen(true);
279
+ }
280
+ if (!((_item$value$name = item.value.name) !== null && _item$value$name !== void 0 && _item$value$name.startsWith('delete'))) {
281
+ return;
282
+ }
283
+ (item.value.name === 'delete_column' ? (0, _commands.hoverColumns)((0, _utils3.getSelectedColumnIndexes)(selectionRect), true) : (0, _commands.hoverRows)((0, _utils3.getSelectedRowIndexes)(selectionRect), true))(state, dispatch);
135
284
  };
136
285
  var handleItemMouseLeave = function handleItemMouseLeave(_ref4) {
137
286
  var item = _ref4.item;
287
+ if (item.value.name === 'background' && isSubmenuOpen) {
288
+ setIsSubmenuOpen(false);
289
+ }
138
290
  if (['sort_column_asc', 'sort_column_desc', 'delete_column', 'delete_row'].indexOf(item.value.name) > -1) {
139
291
  (0, _commands.clearHoverSelection)()(state, dispatch);
140
292
  }
@@ -142,7 +294,25 @@ var DragMenu = exports.DragMenu = function DragMenu(_ref) {
142
294
  if (!menuItems) {
143
295
  return null;
144
296
  }
145
- return (0, _react.jsx)(_uiMenu.DropdownMenu, {
297
+ if (allowBackgroundColor && (0, _platformFeatureFlags.getBooleanFF)('platform.editor.table.new-cell-context-menu-styling')) {
298
+ menuItems[0].items.unshift(createBackgroundColorMenuItem());
299
+ }
300
+
301
+ // If first row, add toggle for Hearder row, default is true
302
+ // If first column, add toggle for Header column, default is false
303
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.table.new-cell-context-menu-styling') && index === 0) {
304
+ menuItems.push({
305
+ items: [createhHeaderRowColumnMenuItem(direction)]
306
+ });
307
+ }
308
+
309
+ // All rows, add toggle for numbered rows, default is false
310
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.table.new-cell-context-menu-styling') && direction === 'row') {
311
+ index === 0 ? menuItems[menuItems.length - 1].items.push(createRowNumbersMenuItem()) : menuItems.push({
312
+ items: [createRowNumbersMenuItem()]
313
+ });
314
+ }
315
+ return (0, _react2.jsx)(_uiMenu.DropdownMenu, {
146
316
  mountTo: mountPoint
147
317
  //This needs be removed when the a11y is completely handled
148
318
  //Disabling key navigation now as it works only partially
@@ -24,7 +24,8 @@ var FloatingDragMenu = function FloatingDragMenu(_ref) {
24
24
  getEditorContainerWidth = _ref.getEditorContainerWidth,
25
25
  canDrag = _ref.canDrag,
26
26
  editorAnalyticsAPI = _ref.editorAnalyticsAPI,
27
- stickyHeaders = _ref.stickyHeaders;
27
+ stickyHeaders = _ref.stickyHeaders,
28
+ pluginConfig = _ref.pluginConfig;
28
29
  if (!isOpen || !targetCellPosition || editorView.state.doc.nodeSize <= targetCellPosition) {
29
30
  return null;
30
31
  }
@@ -62,7 +63,8 @@ var FloatingDragMenu = function FloatingDragMenu(_ref) {
62
63
  targetCellPosition: targetCellPosition,
63
64
  getEditorContainerWidth: getEditorContainerWidth,
64
65
  canDrag: canDrag,
65
- editorAnalyticsAPI: editorAnalyticsAPI
66
+ editorAnalyticsAPI: editorAnalyticsAPI,
67
+ pluginConfig: pluginConfig
66
68
  }));
67
69
  };
68
70
  FloatingDragMenu.displayName = 'FloatingDragMenu';