@atlaskit/editor-plugin-table 7.8.1 → 7.10.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 (57) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/commands/column-resize.js +18 -6
  3. package/dist/cjs/commands/misc.js +5 -1
  4. package/dist/cjs/commands-with-analytics.js +2 -2
  5. package/dist/cjs/nodeviews/TableComponent.js +11 -3
  6. package/dist/cjs/toolbar.js +4 -3
  7. package/dist/cjs/utils/index.js +12 -0
  8. package/dist/cjs/utils/nodes.js +6 -1
  9. package/dist/cjs/utils/table.js +34 -1
  10. package/dist/es2019/commands/column-resize.js +18 -6
  11. package/dist/es2019/commands/misc.js +5 -1
  12. package/dist/es2019/commands-with-analytics.js +2 -2
  13. package/dist/es2019/nodeviews/TableComponent.js +12 -4
  14. package/dist/es2019/toolbar.js +4 -3
  15. package/dist/es2019/utils/index.js +2 -2
  16. package/dist/es2019/utils/nodes.js +5 -0
  17. package/dist/es2019/utils/table.js +36 -1
  18. package/dist/esm/commands/column-resize.js +18 -6
  19. package/dist/esm/commands/misc.js +5 -1
  20. package/dist/esm/commands-with-analytics.js +2 -2
  21. package/dist/esm/nodeviews/TableComponent.js +12 -4
  22. package/dist/esm/toolbar.js +4 -3
  23. package/dist/esm/utils/index.js +2 -2
  24. package/dist/esm/utils/nodes.js +5 -0
  25. package/dist/esm/utils/table.js +33 -0
  26. package/dist/types/commands/column-resize.d.ts +5 -4
  27. package/dist/types/commands/misc.d.ts +1 -1
  28. package/dist/types/commands-with-analytics.d.ts +2 -1
  29. package/dist/types/nodeviews/TableComponent.d.ts +6 -54
  30. package/dist/types/plugin.d.ts +1 -1
  31. package/dist/types/ui/TableFloatingColumnControls/ColumnControls/index.d.ts +18 -22
  32. package/dist/types/ui/TableFloatingControls/CornerControls/DragCornerControls.d.ts +36 -44
  33. package/dist/types/ui/TableFloatingControls/index.d.ts +18 -22
  34. package/dist/types/utils/index.d.ts +2 -2
  35. package/dist/types/utils/nodes.d.ts +1 -0
  36. package/dist/types/utils/table.d.ts +3 -0
  37. package/dist/types-ts4.5/commands/column-resize.d.ts +5 -4
  38. package/dist/types-ts4.5/commands/misc.d.ts +1 -1
  39. package/dist/types-ts4.5/commands-with-analytics.d.ts +2 -1
  40. package/dist/types-ts4.5/nodeviews/TableComponent.d.ts +6 -54
  41. package/dist/types-ts4.5/plugin.d.ts +1 -1
  42. package/dist/types-ts4.5/ui/TableFloatingColumnControls/ColumnControls/index.d.ts +18 -22
  43. package/dist/types-ts4.5/ui/TableFloatingControls/CornerControls/DragCornerControls.d.ts +36 -44
  44. package/dist/types-ts4.5/ui/TableFloatingControls/index.d.ts +18 -22
  45. package/dist/types-ts4.5/utils/index.d.ts +2 -2
  46. package/dist/types-ts4.5/utils/nodes.d.ts +1 -0
  47. package/dist/types-ts4.5/utils/table.d.ts +3 -0
  48. package/package.json +4 -4
  49. package/src/commands/column-resize.ts +31 -8
  50. package/src/commands/misc.ts +9 -1
  51. package/src/commands-with-analytics.ts +7 -1
  52. package/src/nodeviews/TableComponent.tsx +21 -6
  53. package/src/plugin.tsx +1 -1
  54. package/src/toolbar.tsx +10 -1
  55. package/src/utils/index.ts +2 -1
  56. package/src/utils/nodes.ts +10 -0
  57. package/src/utils/table.ts +36 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlaskit/editor-plugin-table
2
2
 
3
+ ## 7.10.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#85498](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/85498) [`ae3b8e85ce49`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/ae3b8e85ce49) - [ux] [ECA11Y-17] Added screen reader announcement for insertion and removal of table columns and rows
8
+
9
+ ## 7.9.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [#91653](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/91653) [`57a3511f76c1`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/57a3511f76c1) - ECA11Y-203: Added cursor back to the cell, after changing cell background
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies
18
+
3
19
  ## 7.8.1
4
20
 
5
21
  ### Patch Changes
@@ -78,7 +78,9 @@ var initiateKeyboardColumnResizing = exports.initiateKeyboardColumnResizing = fu
78
78
  var selectionRect = (0, _utils.isSelectionType)(selection, 'cell') ? (0, _utils.getSelectionRect)(selection) : (0, _utils.findCellRectClosestToPos)(selection.$from);
79
79
  var cell = (0, _utils.findCellClosestToPos)(selection.$from);
80
80
  if (ariaNotify && getIntl) {
81
- ariaNotify(getIntl().formatMessage(_messages.tableMessages.startedColumnResize));
81
+ ariaNotify(getIntl().formatMessage(_messages.tableMessages.startedColumnResize), {
82
+ priority: 'important'
83
+ });
82
84
  }
83
85
  if (selectionRect && cell && view) {
84
86
  return updateResizeHandleAndStatePosition(selectionRect.top, selectionRect.right, cell.pos)(state, dispatch);
@@ -122,12 +124,16 @@ var activateNextResizeArea = exports.activateNextResizeArea = function activateN
122
124
  if (direction === 1) {
123
125
  ariaNotify(getIntl().formatMessage(_messages.tableMessages.focusedOtherResize, {
124
126
  direction: 'right'
125
- }));
127
+ }), {
128
+ priority: 'important'
129
+ });
126
130
  }
127
131
  if (direction === -1) {
128
132
  ariaNotify(getIntl().formatMessage(_messages.tableMessages.focusedOtherResize, {
129
133
  direction: 'left'
130
- }));
134
+ }), {
135
+ priority: 'important'
136
+ });
131
137
  }
132
138
  }
133
139
  if ($nextCell) {
@@ -223,10 +229,14 @@ var changeColumnWidthByStep = exports.changeColumnWidthByStep = function changeC
223
229
  }));
224
230
  if (newResizeState.cols.length === colIndex + 1) {
225
231
  if (newResizeState.overflow === true) {
226
- ariaNotify(getIntl().formatMessage(_messages.tableMessages.columnResizeLast));
232
+ ariaNotify(getIntl().formatMessage(_messages.tableMessages.columnResizeLast), {
233
+ priority: 'important'
234
+ });
227
235
  }
228
236
  if (newResizeState.overflow === false) {
229
- ariaNotify(getIntl().formatMessage(_messages.tableMessages.columnResizeOverflow));
237
+ ariaNotify(getIntl().formatMessage(_messages.tableMessages.columnResizeOverflow), {
238
+ priority: 'important'
239
+ });
230
240
  }
231
241
  }
232
242
  }
@@ -262,7 +272,9 @@ var stopKeyboardColumnResizing = exports.stopKeyboardColumnResizing = function s
262
272
  return customTr.setMeta('scrollIntoView', false);
263
273
  })(state, fakeDispatch);
264
274
  if (ariaNotify && getIntl) {
265
- ariaNotify(getIntl().formatMessage(_messages.tableMessages.columnResizeStop));
275
+ ariaNotify(getIntl().formatMessage(_messages.tableMessages.columnResizeStop), {
276
+ priority: 'important'
277
+ });
266
278
  }
267
279
  if (dispatch) {
268
280
  dispatch(customTr);
@@ -301,7 +301,7 @@ var moveCursorBackward = exports.moveCursorBackward = function moveCursorBackwar
301
301
  }
302
302
  return true;
303
303
  };
304
- var setMultipleCellAttrs = exports.setMultipleCellAttrs = function setMultipleCellAttrs(attrs, targetCellPosition) {
304
+ var setMultipleCellAttrs = exports.setMultipleCellAttrs = function setMultipleCellAttrs(attrs, targetCellPosition, editorView) {
305
305
  return function (state, dispatch) {
306
306
  var cursorPos;
307
307
  var tr = state.tr;
@@ -319,6 +319,10 @@ var setMultipleCellAttrs = exports.setMultipleCellAttrs = function setMultipleCe
319
319
  }
320
320
  if (tr.docChanged && cursorPos !== undefined) {
321
321
  if (dispatch) {
322
+ if (cursorPos !== undefined) {
323
+ editorView === null || editorView === void 0 || editorView.focus();
324
+ tr.setSelection(new _state.TextSelection(tr.doc.resolve(cursorPos)));
325
+ }
322
326
  dispatch(tr);
323
327
  }
324
328
  return true;
@@ -122,7 +122,7 @@ var splitCellWithAnalytics = exports.splitCellWithAnalytics = function splitCell
122
122
  };
123
123
  };
124
124
  var setColorWithAnalytics = exports.setColorWithAnalytics = function setColorWithAnalytics(editorAnalyticsAPI) {
125
- return function (inputMethod, cellColor, targetCellPosition) {
125
+ return function (inputMethod, cellColor, targetCellPosition, editorView) {
126
126
  return (0, _analytics2.withEditorAnalyticsAPI)(function (_ref4) {
127
127
  var selection = _ref4.selection;
128
128
  var _getSelectedCellInfo4 = (0, _utils2.getSelectedCellInfo)(selection),
@@ -148,7 +148,7 @@ var setColorWithAnalytics = exports.setColorWithAnalytics = function setColorWit
148
148
  };
149
149
  })(editorAnalyticsAPI)((0, _misc.setMultipleCellAttrs)({
150
150
  background: cellColor
151
- }, targetCellPosition));
151
+ }, targetCellPosition, editorView));
152
152
  };
153
153
  };
154
154
  var addRowAroundSelection = exports.addRowAroundSelection = function addRowAroundSelection(editorAnalyticsAPI) {
@@ -17,6 +17,7 @@ var _react = _interopRequireDefault(require("react"));
17
17
  var _classnames2 = _interopRequireDefault(require("classnames"));
18
18
  var _memoizeOne = _interopRequireDefault(require("memoize-one"));
19
19
  var _rafSchd = _interopRequireDefault(require("raf-schd"));
20
+ var _reactIntlNext = require("react-intl-next");
20
21
  var _analytics = require("@atlaskit/editor-common/analytics");
21
22
  var _nodeWidth = require("@atlaskit/editor-common/node-width");
22
23
  var _styles = require("@atlaskit/editor-common/styles");
@@ -522,6 +523,15 @@ var TableComponent = /*#__PURE__*/function (_React$Component) {
522
523
  this.overflowShadowsObserver.observeShadowSentinels((_this$state$stickyHea = this.state.stickyHeader) === null || _this$state$stickyHea === void 0 ? void 0 : _this$state$stickyHea.sticky);
523
524
  }
524
525
  var currentTable = getNode();
526
+ var previousTable = this.node;
527
+ var isNoOfColumnsChanged = (0, _utils5.tablesHaveDifferentNoOfColumns)(currentTable, previousTable);
528
+ var isNoOfRowsChanged = (0, _utils5.tablesHaveDifferentNoOfRows)(currentTable, previousTable);
529
+ if (isNoOfColumnsChanged || isNoOfRowsChanged) {
530
+ var _this$props$pluginInj;
531
+ (_this$props$pluginInj = this.props.pluginInjectionApi) === null || _this$props$pluginInj === void 0 || (_this$props$pluginInj = _this$props$pluginInj.accessibilityUtils) === null || _this$props$pluginInj === void 0 || _this$props$pluginInj.actions.ariaNotify((0, _utils5.getAssistiveMessage)(previousTable, currentTable, this.props.intl), {
532
+ priority: 'important'
533
+ });
534
+ }
525
535
  if (currentTable.attrs.__autoSize) {
526
536
  // Wait for next tick to handle auto sizing, gives the browser time to do layout calc etc.
527
537
  this.handleAutoSizeDebounced();
@@ -531,8 +541,6 @@ var TableComponent = /*#__PURE__*/function (_React$Component) {
531
541
  else if (allowColumnResizing && this.table && !isMediaFullscreen) {
532
542
  // If col widths (e.g. via collab) or number of columns (e.g. delete a column) have changed,
533
543
  // re-draw colgroup.
534
- var previousTable = this.node;
535
- var isNoOfColumnsChanged = (0, _utils5.tablesHaveDifferentNoOfColumns)(currentTable, previousTable);
536
544
  if ((0, _utils5.tablesHaveDifferentColumnWidths)(currentTable, previousTable) || isNoOfColumnsChanged) {
537
545
  var _view = this.props.view;
538
546
  var shouldRecreateResizeCols = !(options !== null && options !== void 0 && options.isTableResizingEnabled) || !isResizing || isNoOfColumnsChanged && isResizing;
@@ -793,4 +801,4 @@ var TableComponent = /*#__PURE__*/function (_React$Component) {
793
801
  return TableComponent;
794
802
  }(_react.default.Component);
795
803
  (0, _defineProperty3.default)(TableComponent, "displayName", 'TableComponent');
796
- var _default = exports.default = TableComponent;
804
+ var _default = exports.default = (0, _reactIntlNext.injectIntl)(TableComponent);
@@ -383,7 +383,7 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig(getE
383
383
  cellItems = pluginState.isDragAndDropEnabled ? [] : getCellItems(state, getEditorView(), intl, getEditorContainerWidth, editorAnalyticsAPI, _isTableScalingEnabled);
384
384
  var columnSettingsItems;
385
385
  columnSettingsItems = pluginState.isDragAndDropEnabled ? getColumnSettingItems(state, getEditorView(), intl, getEditorContainerWidth, editorAnalyticsAPI, options, _isTableScalingEnabled) : [];
386
- var colorPicker = getColorPicker(state, menu, intl, editorAnalyticsAPI);
386
+ var colorPicker = getColorPicker(state, menu, intl, editorAnalyticsAPI, getEditorView);
387
387
 
388
388
  // Check if we need to show confirm dialog for delete button
389
389
  var confirmDialog;
@@ -562,7 +562,7 @@ var getColumnSettingItems = function getColumnSettingItems(editorState, editorVi
562
562
  }
563
563
  return items;
564
564
  };
565
- var getColorPicker = function getColorPicker(state, menu, _ref5, editorAnalyticsAPI) {
565
+ var getColorPicker = function getColorPicker(state, menu, _ref5, editorAnalyticsAPI, getEditorView) {
566
566
  var _node$attrs;
567
567
  var formatMessage = _ref5.formatMessage;
568
568
  var _getPluginState3 = (0, _pluginFactory.getPluginState)(state),
@@ -588,8 +588,9 @@ var getColorPicker = function getColorPicker(state, menu, _ref5, editorAnalytics
588
588
  selectType: 'color',
589
589
  defaultValue: defaultPalette,
590
590
  options: _uiColor.cellBackgroundColorPalette,
591
+ returnEscToButton: true,
591
592
  onChange: function onChange(option) {
592
- return (0, _commandsWithAnalytics.setColorWithAnalytics)(editorAnalyticsAPI)(_analytics.INPUT_METHOD.FLOATING_TB, option.value, targetCellPosition);
593
+ return (0, _commandsWithAnalytics.setColorWithAnalytics)(editorAnalyticsAPI)(_analytics.INPUT_METHOD.FLOATING_TB, option.value, targetCellPosition, getEditorView());
593
594
  }
594
595
  }, separator(menu.hidden)];
595
596
  };
@@ -129,6 +129,12 @@ Object.defineProperty(exports, "findNearestCellIndexToPoint", {
129
129
  return _dom.findNearestCellIndexToPoint;
130
130
  }
131
131
  });
132
+ Object.defineProperty(exports, "getAssistiveMessage", {
133
+ enumerable: true,
134
+ get: function get() {
135
+ return _table.getAssistiveMessage;
136
+ }
137
+ });
132
138
  Object.defineProperty(exports, "getColumnClassNames", {
133
139
  enumerable: true,
134
140
  get: function get() {
@@ -399,6 +405,12 @@ Object.defineProperty(exports, "tablesHaveDifferentNoOfColumns", {
399
405
  return _nodes.tablesHaveDifferentNoOfColumns;
400
406
  }
401
407
  });
408
+ Object.defineProperty(exports, "tablesHaveDifferentNoOfRows", {
409
+ enumerable: true,
410
+ get: function get() {
411
+ return _nodes.tablesHaveDifferentNoOfRows;
412
+ }
413
+ });
402
414
  Object.defineProperty(exports, "transformSliceToCorrectEmptyTableCells", {
403
415
  enumerable: true,
404
416
  get: function get() {
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.tablesHaveDifferentNoOfColumns = exports.tablesHaveDifferentColumnWidths = exports.supportedHeaderRow = exports.isTableNested = exports.isIsolating = exports.getTableWidth = exports.containsHeaderRow = exports.containsHeaderColumn = exports.checkIfNumberColumnEnabled = exports.checkIfHeaderRowEnabled = exports.checkIfHeaderColumnEnabled = exports.anyChildCellMergedAcrossRow = void 0;
7
+ exports.tablesHaveDifferentNoOfRows = exports.tablesHaveDifferentNoOfColumns = exports.tablesHaveDifferentColumnWidths = exports.supportedHeaderRow = exports.isTableNested = exports.isIsolating = exports.getTableWidth = exports.containsHeaderRow = exports.containsHeaderColumn = exports.checkIfNumberColumnEnabled = exports.checkIfHeaderRowEnabled = exports.checkIfHeaderColumnEnabled = exports.anyChildCellMergedAcrossRow = void 0;
8
8
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
9
  var _utils = require("@atlaskit/editor-common/utils");
10
10
  var _tableMap = require("@atlaskit/editor-tables/table-map");
@@ -75,6 +75,11 @@ var tablesHaveDifferentNoOfColumns = exports.tablesHaveDifferentNoOfColumns = fu
75
75
  var currentMap = _tableMap.TableMap.get(currentTable);
76
76
  return prevMap.width !== currentMap.width;
77
77
  };
78
+ var tablesHaveDifferentNoOfRows = exports.tablesHaveDifferentNoOfRows = function tablesHaveDifferentNoOfRows(currentTable, previousTable) {
79
+ var prevMap = _tableMap.TableMap.get(previousTable);
80
+ var currentMap = _tableMap.TableMap.get(currentTable);
81
+ return prevMap.height !== currentMap.height;
82
+ };
78
83
  function filterNearSelection(selection, findNode, predicate, defaultValue) {
79
84
  var found = findNode(selection);
80
85
  if (!found) {
@@ -4,8 +4,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.getMergedCellsPositions = exports.colsToRect = void 0;
7
+ exports.getMergedCellsPositions = exports.getAssistiveMessage = exports.colsToRect = void 0;
8
8
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _messages = require("@atlaskit/editor-common/messages");
9
10
  var _tableMap = require("@atlaskit/editor-tables/table-map");
10
11
  var _utils = require("@atlaskit/editor-tables/utils");
11
12
  var getMergedCellsPositions = exports.getMergedCellsPositions = function getMergedCellsPositions(tr) {
@@ -32,4 +33,36 @@ var colsToRect = exports.colsToRect = function colsToRect(cols, noOfRows) {
32
33
  top: 0,
33
34
  bottom: noOfRows
34
35
  };
36
+ };
37
+ var getAssistiveMessage = exports.getAssistiveMessage = function getAssistiveMessage(prevTableNode, currentTableNode, intl) {
38
+ var formatMessage = intl.formatMessage;
39
+ var prevTableMap = _tableMap.TableMap.get(prevTableNode);
40
+ var currentTableMap = _tableMap.TableMap.get(currentTableNode);
41
+ if (currentTableMap.width !== prevTableMap.width) {
42
+ var diff = Math.abs(currentTableMap.width - prevTableMap.width);
43
+ if (currentTableMap.width > prevTableMap.width) {
44
+ return formatMessage(_messages.tableMessages.columnsAreInserted, {
45
+ count: diff
46
+ });
47
+ }
48
+ if (currentTableMap.width < prevTableMap.width) {
49
+ return formatMessage(_messages.tableMessages.columnsAreRemoved, {
50
+ count: diff
51
+ });
52
+ }
53
+ }
54
+ if (currentTableMap.height !== prevTableMap.height) {
55
+ var _diff = Math.abs(currentTableMap.height - prevTableMap.height);
56
+ if (currentTableMap.height > prevTableMap.height) {
57
+ return formatMessage(_messages.tableMessages.rowsAreInserted, {
58
+ count: _diff
59
+ });
60
+ }
61
+ if (currentTableMap.height < prevTableMap.height) {
62
+ return formatMessage(_messages.tableMessages.rowsAreRemoved, {
63
+ count: _diff
64
+ });
65
+ }
66
+ }
67
+ return '';
35
68
  };
@@ -71,7 +71,9 @@ export const initiateKeyboardColumnResizing = ({
71
71
  const selectionRect = isSelectionType(selection, 'cell') ? getSelectionRect(selection) : findCellRectClosestToPos(selection.$from);
72
72
  const cell = findCellClosestToPos(selection.$from);
73
73
  if (ariaNotify && getIntl) {
74
- ariaNotify(getIntl().formatMessage(messages.startedColumnResize));
74
+ ariaNotify(getIntl().formatMessage(messages.startedColumnResize), {
75
+ priority: 'important'
76
+ });
75
77
  }
76
78
  if (selectionRect && cell && view) {
77
79
  return updateResizeHandleAndStatePosition(selectionRect.top, selectionRect.right, cell.pos)(state, dispatch);
@@ -117,12 +119,16 @@ export const activateNextResizeArea = ({
117
119
  if (direction === 1) {
118
120
  ariaNotify(getIntl().formatMessage(messages.focusedOtherResize, {
119
121
  direction: 'right'
120
- }));
122
+ }), {
123
+ priority: 'important'
124
+ });
121
125
  }
122
126
  if (direction === -1) {
123
127
  ariaNotify(getIntl().formatMessage(messages.focusedOtherResize, {
124
128
  direction: 'left'
125
- }));
129
+ }), {
130
+ priority: 'important'
131
+ });
126
132
  }
127
133
  }
128
134
  if ($nextCell) {
@@ -218,10 +224,14 @@ export const changeColumnWidthByStep = ({
218
224
  }));
219
225
  if (newResizeState.cols.length === colIndex + 1) {
220
226
  if (newResizeState.overflow === true) {
221
- ariaNotify(getIntl().formatMessage(messages.columnResizeLast));
227
+ ariaNotify(getIntl().formatMessage(messages.columnResizeLast), {
228
+ priority: 'important'
229
+ });
222
230
  }
223
231
  if (newResizeState.overflow === false) {
224
- ariaNotify(getIntl().formatMessage(messages.columnResizeOverflow));
232
+ ariaNotify(getIntl().formatMessage(messages.columnResizeOverflow), {
233
+ priority: 'important'
234
+ });
225
235
  }
226
236
  }
227
237
  }
@@ -254,7 +264,9 @@ export const stopKeyboardColumnResizing = ({
254
264
  type: 'STOP_RESIZING'
255
265
  }, () => customTr.setMeta('scrollIntoView', false))(state, fakeDispatch);
256
266
  if (ariaNotify && getIntl) {
257
- ariaNotify(getIntl().formatMessage(messages.columnResizeStop));
267
+ ariaNotify(getIntl().formatMessage(messages.columnResizeStop), {
268
+ priority: 'important'
269
+ });
258
270
  }
259
271
  if (dispatch) {
260
272
  dispatch(customTr);
@@ -308,7 +308,7 @@ export const moveCursorBackward = (state, dispatch) => {
308
308
  }
309
309
  return true;
310
310
  };
311
- export const setMultipleCellAttrs = (attrs, targetCellPosition) => (state, dispatch) => {
311
+ export const setMultipleCellAttrs = (attrs, targetCellPosition, editorView) => (state, dispatch) => {
312
312
  let cursorPos;
313
313
  let {
314
314
  tr
@@ -327,6 +327,10 @@ export const setMultipleCellAttrs = (attrs, targetCellPosition) => (state, dispa
327
327
  }
328
328
  if (tr.docChanged && cursorPos !== undefined) {
329
329
  if (dispatch) {
330
+ if (cursorPos !== undefined) {
331
+ editorView === null || editorView === void 0 ? void 0 : editorView.focus();
332
+ tr.setSelection(new TextSelection(tr.doc.resolve(cursorPos)));
333
+ }
330
334
  dispatch(tr);
331
335
  }
332
336
  return true;
@@ -106,7 +106,7 @@ export const splitCellWithAnalytics = editorAnalyticsAPI => inputMethod => withE
106
106
  }
107
107
  return;
108
108
  })(editorAnalyticsAPI)(splitCell);
109
- export const setColorWithAnalytics = editorAnalyticsAPI => (inputMethod, cellColor, targetCellPosition) => withEditorAnalyticsAPI(({
109
+ export const setColorWithAnalytics = editorAnalyticsAPI => (inputMethod, cellColor, targetCellPosition, editorView) => withEditorAnalyticsAPI(({
110
110
  selection
111
111
  }) => {
112
112
  const {
@@ -133,7 +133,7 @@ export const setColorWithAnalytics = editorAnalyticsAPI => (inputMethod, cellCol
133
133
  };
134
134
  })(editorAnalyticsAPI)(setMultipleCellAttrs({
135
135
  background: cellColor
136
- }, targetCellPosition));
136
+ }, targetCellPosition, editorView));
137
137
  export const addRowAroundSelection = editorAnalyticsAPI => side => (state, dispatch) => {
138
138
  const {
139
139
  selection
@@ -3,6 +3,7 @@ import React from 'react';
3
3
  import classnames from 'classnames';
4
4
  import memoizeOne from 'memoize-one';
5
5
  import rafSchedule from 'raf-schd';
6
+ import { injectIntl } from 'react-intl-next';
6
7
  import { ACTION_SUBJECT, EVENT_TYPE, TABLE_ACTION } from '@atlaskit/editor-common/analytics';
7
8
  import { getParentNodeWidth, getTableContainerWidth } from '@atlaskit/editor-common/node-width';
8
9
  import { tableMarginSides } from '@atlaskit/editor-common/styles';
@@ -23,7 +24,7 @@ import { updateControls } from '../pm-plugins/table-resizing/utils/dom';
23
24
  import { TableCssClassName as ClassName, ShadowEvent } from '../types';
24
25
  import TableFloatingColumnControls from '../ui/TableFloatingColumnControls';
25
26
  import TableFloatingControls from '../ui/TableFloatingControls';
26
- import { containsHeaderRow, isTableNested, tablesHaveDifferentColumnWidths, tablesHaveDifferentNoOfColumns } from '../utils';
27
+ import { containsHeaderRow, getAssistiveMessage, isTableNested, tablesHaveDifferentColumnWidths, tablesHaveDifferentNoOfColumns, tablesHaveDifferentNoOfRows } from '../utils';
27
28
  import { ExternalDropTargets } from './ExternalDropTargets';
28
29
  import { OverflowShadowsObserver } from './OverflowShadowsObserver';
29
30
  import { TableContainer } from './TableContainer';
@@ -506,6 +507,15 @@ class TableComponent extends React.Component {
506
507
  this.overflowShadowsObserver.observeShadowSentinels((_this$state$stickyHea = this.state.stickyHeader) === null || _this$state$stickyHea === void 0 ? void 0 : _this$state$stickyHea.sticky);
507
508
  }
508
509
  const currentTable = getNode();
510
+ const previousTable = this.node;
511
+ const isNoOfColumnsChanged = tablesHaveDifferentNoOfColumns(currentTable, previousTable);
512
+ const isNoOfRowsChanged = tablesHaveDifferentNoOfRows(currentTable, previousTable);
513
+ if (isNoOfColumnsChanged || isNoOfRowsChanged) {
514
+ var _this$props$pluginInj, _this$props$pluginInj2;
515
+ (_this$props$pluginInj = this.props.pluginInjectionApi) === null || _this$props$pluginInj === void 0 ? void 0 : (_this$props$pluginInj2 = _this$props$pluginInj.accessibilityUtils) === null || _this$props$pluginInj2 === void 0 ? void 0 : _this$props$pluginInj2.actions.ariaNotify(getAssistiveMessage(previousTable, currentTable, this.props.intl), {
516
+ priority: 'important'
517
+ });
518
+ }
509
519
  if (currentTable.attrs.__autoSize) {
510
520
  // Wait for next tick to handle auto sizing, gives the browser time to do layout calc etc.
511
521
  this.handleAutoSizeDebounced();
@@ -515,8 +525,6 @@ class TableComponent extends React.Component {
515
525
  else if (allowColumnResizing && this.table && !isMediaFullscreen) {
516
526
  // If col widths (e.g. via collab) or number of columns (e.g. delete a column) have changed,
517
527
  // re-draw colgroup.
518
- const previousTable = this.node;
519
- const isNoOfColumnsChanged = tablesHaveDifferentNoOfColumns(currentTable, previousTable);
520
528
  if (tablesHaveDifferentColumnWidths(currentTable, previousTable) || isNoOfColumnsChanged) {
521
529
  const {
522
530
  view
@@ -780,4 +788,4 @@ class TableComponent extends React.Component {
780
788
  }
781
789
  }
782
790
  _defineProperty(TableComponent, "displayName", 'TableComponent');
783
- export default TableComponent;
791
+ export default injectIntl(TableComponent);
@@ -372,7 +372,7 @@ export const getToolbarConfig = (getEditorContainerWidth, editorAnalyticsAPI, ge
372
372
  cellItems = pluginState.isDragAndDropEnabled ? [] : getCellItems(state, getEditorView(), intl, getEditorContainerWidth, editorAnalyticsAPI, isTableScalingEnabled);
373
373
  let columnSettingsItems;
374
374
  columnSettingsItems = pluginState.isDragAndDropEnabled ? getColumnSettingItems(state, getEditorView(), intl, getEditorContainerWidth, editorAnalyticsAPI, options, isTableScalingEnabled) : [];
375
- const colorPicker = getColorPicker(state, menu, intl, editorAnalyticsAPI);
375
+ const colorPicker = getColorPicker(state, menu, intl, editorAnalyticsAPI, getEditorView);
376
376
 
377
377
  // Check if we need to show confirm dialog for delete button
378
378
  let confirmDialog;
@@ -538,7 +538,7 @@ const getColumnSettingItems = (editorState, editorView, {
538
538
  };
539
539
  const getColorPicker = (state, menu, {
540
540
  formatMessage
541
- }, editorAnalyticsAPI) => {
541
+ }, editorAnalyticsAPI, getEditorView) => {
542
542
  var _node$attrs;
543
543
  const {
544
544
  targetCellPosition,
@@ -562,7 +562,8 @@ const getColorPicker = (state, menu, {
562
562
  selectType: 'color',
563
563
  defaultValue: defaultPalette,
564
564
  options: cellBackgroundColorPalette,
565
- onChange: option => setColorWithAnalytics(editorAnalyticsAPI)(INPUT_METHOD.FLOATING_TB, option.value, targetCellPosition)
565
+ returnEscToButton: true,
566
+ onChange: option => setColorWithAnalytics(editorAnalyticsAPI)(INPUT_METHOD.FLOATING_TB, option.value, targetCellPosition, getEditorView())
566
567
  }, separator(menu.hidden)];
567
568
  };
568
569
  const clickWithCheckboxHandler = (isChecked, node, editorAnalyticsAPI) => (state, dispatch) => {
@@ -1,12 +1,12 @@
1
1
  export { getSelectedColumnIndexes, getSelectedRowIndexes, normalizeSelection, isSelectionUpdated } from './selection';
2
2
  export { findControlsHoverDecoration, createControlsHoverDecoration, createColumnControlsDecoration, createColumnSelectedDecoration, createCellHoverDecoration, updateDecorations, createResizeHandleDecoration, createColumnInsertLine, createColumnLineResize, createRowInsertLine } from './decoration';
3
- export { isIsolating, containsHeaderColumn, containsHeaderRow, checkIfHeaderColumnEnabled, checkIfHeaderRowEnabled, checkIfNumberColumnEnabled, getTableWidth, tablesHaveDifferentColumnWidths, tablesHaveDifferentNoOfColumns, isTableNested, anyChildCellMergedAcrossRow, supportedHeaderRow } from './nodes';
3
+ export { isIsolating, containsHeaderColumn, containsHeaderRow, checkIfHeaderColumnEnabled, checkIfHeaderRowEnabled, checkIfNumberColumnEnabled, getTableWidth, tablesHaveDifferentColumnWidths, tablesHaveDifferentNoOfColumns, tablesHaveDifferentNoOfRows, isTableNested, anyChildCellMergedAcrossRow, supportedHeaderRow } from './nodes';
4
4
  export { unwrapContentFromTable, removeTableFromFirstChild, removeTableFromLastChild, transformSliceToRemoveOpenTable, transformSliceToCorrectEmptyTableCells, transformSliceToFixHardBreakProblemOnCopyFromCell } from './paste';
5
5
  export { isCell, isCornerButton, isInsertRowButton, isColumnControlsDecorations, isTableControlsButton, isTableContainerOrWrapper, isRowControlsButton, isDragRowControlsButton, isDragColumnFloatingInsertDot, isDragRowFloatingInsertDot, isDragCornerButton, getColumnOrRowIndex, getMousePositionHorizontalRelativeByElement, getMousePositionVerticalRelativeByElement, isResizeHandleDecoration, hasResizeHandler, findNearestCellIndexToPoint } from './dom';
6
6
  export { convertHTMLCellIndexToColumnIndex, getColumnsWidths, isColumnDeleteButtonVisible, getColumnDeleteButtonParams, getColumnClassNames, getColumnIndexMappedToColumnIndexInFirstRow } from './column-controls';
7
7
  export { getRowHeights, isRowDeleteButtonVisible, getRowDeleteButtonParams, getRowsParams, getRowClassNames, copyPreviousRow } from './row-controls';
8
8
  export { getSelectedTableInfo, getSelectedCellInfo } from './analytics';
9
- export { getMergedCellsPositions } from './table';
9
+ export { getMergedCellsPositions, getAssistiveMessage } from './table';
10
10
  export { updatePluginStateDecorations } from './update-plugin-state-decorations';
11
11
  export { hasMergedCellsInColumn, hasMergedCellsInRow, hasMergedCellsInBetween, hasMergedCellsInSelection, findDuplicatePosition, checkEdgeHasMergedCells } from './merged-cells';
12
12
  export { createTableWithWidth } from './create';
@@ -57,6 +57,11 @@ export const tablesHaveDifferentNoOfColumns = (currentTable, previousTable) => {
57
57
  const currentMap = TableMap.get(currentTable);
58
58
  return prevMap.width !== currentMap.width;
59
59
  };
60
+ export const tablesHaveDifferentNoOfRows = (currentTable, previousTable) => {
61
+ const prevMap = TableMap.get(previousTable);
62
+ const currentMap = TableMap.get(currentTable);
63
+ return prevMap.height !== currentMap.height;
64
+ };
60
65
  function filterNearSelection(selection, findNode, predicate, defaultValue) {
61
66
  const found = findNode(selection);
62
67
  if (!found) {
@@ -1,3 +1,4 @@
1
+ import { tableMessages as messages } from '@atlaskit/editor-common/messages';
1
2
  import { TableMap } from '@atlaskit/editor-tables/table-map';
2
3
  import { findTable } from '@atlaskit/editor-tables/utils';
3
4
  export const getMergedCellsPositions = tr => {
@@ -22,4 +23,38 @@ export const colsToRect = (cols, noOfRows) => ({
22
23
  right: Math.max(...cols) + 1,
23
24
  top: 0,
24
25
  bottom: noOfRows
25
- });
26
+ });
27
+ export const getAssistiveMessage = (prevTableNode, currentTableNode, intl) => {
28
+ const {
29
+ formatMessage
30
+ } = intl;
31
+ const prevTableMap = TableMap.get(prevTableNode);
32
+ const currentTableMap = TableMap.get(currentTableNode);
33
+ if (currentTableMap.width !== prevTableMap.width) {
34
+ const diff = Math.abs(currentTableMap.width - prevTableMap.width);
35
+ if (currentTableMap.width > prevTableMap.width) {
36
+ return formatMessage(messages.columnsAreInserted, {
37
+ count: diff
38
+ });
39
+ }
40
+ if (currentTableMap.width < prevTableMap.width) {
41
+ return formatMessage(messages.columnsAreRemoved, {
42
+ count: diff
43
+ });
44
+ }
45
+ }
46
+ if (currentTableMap.height !== prevTableMap.height) {
47
+ const diff = Math.abs(currentTableMap.height - prevTableMap.height);
48
+ if (currentTableMap.height > prevTableMap.height) {
49
+ return formatMessage(messages.rowsAreInserted, {
50
+ count: diff
51
+ });
52
+ }
53
+ if (currentTableMap.height < prevTableMap.height) {
54
+ return formatMessage(messages.rowsAreRemoved, {
55
+ count: diff
56
+ });
57
+ }
58
+ }
59
+ return '';
60
+ };
@@ -72,7 +72,9 @@ export var initiateKeyboardColumnResizing = function initiateKeyboardColumnResiz
72
72
  var selectionRect = isSelectionType(selection, 'cell') ? getSelectionRect(selection) : findCellRectClosestToPos(selection.$from);
73
73
  var cell = findCellClosestToPos(selection.$from);
74
74
  if (ariaNotify && getIntl) {
75
- ariaNotify(getIntl().formatMessage(messages.startedColumnResize));
75
+ ariaNotify(getIntl().formatMessage(messages.startedColumnResize), {
76
+ priority: 'important'
77
+ });
76
78
  }
77
79
  if (selectionRect && cell && view) {
78
80
  return updateResizeHandleAndStatePosition(selectionRect.top, selectionRect.right, cell.pos)(state, dispatch);
@@ -116,12 +118,16 @@ export var activateNextResizeArea = function activateNextResizeArea(_ref2) {
116
118
  if (direction === 1) {
117
119
  ariaNotify(getIntl().formatMessage(messages.focusedOtherResize, {
118
120
  direction: 'right'
119
- }));
121
+ }), {
122
+ priority: 'important'
123
+ });
120
124
  }
121
125
  if (direction === -1) {
122
126
  ariaNotify(getIntl().formatMessage(messages.focusedOtherResize, {
123
127
  direction: 'left'
124
- }));
128
+ }), {
129
+ priority: 'important'
130
+ });
125
131
  }
126
132
  }
127
133
  if ($nextCell) {
@@ -217,10 +223,14 @@ export var changeColumnWidthByStep = function changeColumnWidthByStep(_ref4) {
217
223
  }));
218
224
  if (newResizeState.cols.length === colIndex + 1) {
219
225
  if (newResizeState.overflow === true) {
220
- ariaNotify(getIntl().formatMessage(messages.columnResizeLast));
226
+ ariaNotify(getIntl().formatMessage(messages.columnResizeLast), {
227
+ priority: 'important'
228
+ });
221
229
  }
222
230
  if (newResizeState.overflow === false) {
223
- ariaNotify(getIntl().formatMessage(messages.columnResizeOverflow));
231
+ ariaNotify(getIntl().formatMessage(messages.columnResizeOverflow), {
232
+ priority: 'important'
233
+ });
224
234
  }
225
235
  }
226
236
  }
@@ -256,7 +266,9 @@ export var stopKeyboardColumnResizing = function stopKeyboardColumnResizing(_ref
256
266
  return customTr.setMeta('scrollIntoView', false);
257
267
  })(state, fakeDispatch);
258
268
  if (ariaNotify && getIntl) {
259
- ariaNotify(getIntl().formatMessage(messages.columnResizeStop));
269
+ ariaNotify(getIntl().formatMessage(messages.columnResizeStop), {
270
+ priority: 'important'
271
+ });
260
272
  }
261
273
  if (dispatch) {
262
274
  dispatch(customTr);
@@ -294,7 +294,7 @@ export var moveCursorBackward = function moveCursorBackward(state, dispatch) {
294
294
  }
295
295
  return true;
296
296
  };
297
- export var setMultipleCellAttrs = function setMultipleCellAttrs(attrs, targetCellPosition) {
297
+ export var setMultipleCellAttrs = function setMultipleCellAttrs(attrs, targetCellPosition, editorView) {
298
298
  return function (state, dispatch) {
299
299
  var cursorPos;
300
300
  var tr = state.tr;
@@ -312,6 +312,10 @@ export var setMultipleCellAttrs = function setMultipleCellAttrs(attrs, targetCel
312
312
  }
313
313
  if (tr.docChanged && cursorPos !== undefined) {
314
314
  if (dispatch) {
315
+ if (cursorPos !== undefined) {
316
+ editorView === null || editorView === void 0 || editorView.focus();
317
+ tr.setSelection(new TextSelection(tr.doc.resolve(cursorPos)));
318
+ }
315
319
  dispatch(tr);
316
320
  }
317
321
  return true;
@@ -115,7 +115,7 @@ export var splitCellWithAnalytics = function splitCellWithAnalytics(editorAnalyt
115
115
  };
116
116
  };
117
117
  export var setColorWithAnalytics = function setColorWithAnalytics(editorAnalyticsAPI) {
118
- return function (inputMethod, cellColor, targetCellPosition) {
118
+ return function (inputMethod, cellColor, targetCellPosition, editorView) {
119
119
  return withEditorAnalyticsAPI(function (_ref4) {
120
120
  var selection = _ref4.selection;
121
121
  var _getSelectedCellInfo4 = getSelectedCellInfo(selection),
@@ -141,7 +141,7 @@ export var setColorWithAnalytics = function setColorWithAnalytics(editorAnalytic
141
141
  };
142
142
  })(editorAnalyticsAPI)(setMultipleCellAttrs({
143
143
  background: cellColor
144
- }, targetCellPosition));
144
+ }, targetCellPosition, editorView));
145
145
  };
146
146
  };
147
147
  export var addRowAroundSelection = function addRowAroundSelection(editorAnalyticsAPI) {