@atlaskit/editor-plugin-table 7.21.3 → 7.21.5

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 (68) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/cjs/nodeviews/TableComponent.js +17 -2
  3. package/dist/cjs/pm-plugins/keymap.js +4 -6
  4. package/dist/cjs/pm-plugins/main.js +1 -1
  5. package/dist/cjs/pm-plugins/table-resizing/event-handlers.js +40 -12
  6. package/dist/cjs/pm-plugins/table-resizing/utils/resize-column.js +99 -51
  7. package/dist/cjs/toolbar.js +4 -1
  8. package/dist/cjs/ui/ColumnResizeWidget/index.js +4 -1
  9. package/dist/cjs/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.js +4 -1
  10. package/dist/cjs/ui/FloatingContextualButton/index.js +4 -1
  11. package/dist/cjs/ui/FloatingContextualMenu/ContextualMenu.js +4 -1
  12. package/dist/cjs/ui/FloatingContextualMenu/index.js +4 -1
  13. package/dist/cjs/ui/FloatingDragMenu/DragMenu.js +4 -1
  14. package/dist/cjs/utils/alignment.js +1 -1
  15. package/dist/es2019/nodeviews/TableComponent.js +17 -2
  16. package/dist/es2019/pm-plugins/keymap.js +4 -6
  17. package/dist/es2019/pm-plugins/main.js +1 -1
  18. package/dist/es2019/pm-plugins/table-resizing/event-handlers.js +41 -13
  19. package/dist/es2019/pm-plugins/table-resizing/utils/resize-column.js +97 -48
  20. package/dist/es2019/toolbar.js +4 -1
  21. package/dist/es2019/ui/ColumnResizeWidget/index.js +4 -1
  22. package/dist/es2019/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.js +4 -1
  23. package/dist/es2019/ui/FloatingContextualButton/index.js +4 -1
  24. package/dist/es2019/ui/FloatingContextualMenu/ContextualMenu.js +4 -1
  25. package/dist/es2019/ui/FloatingContextualMenu/index.js +4 -1
  26. package/dist/es2019/ui/FloatingDragMenu/DragMenu.js +4 -1
  27. package/dist/es2019/utils/alignment.js +1 -1
  28. package/dist/esm/nodeviews/TableComponent.js +17 -2
  29. package/dist/esm/pm-plugins/keymap.js +4 -6
  30. package/dist/esm/pm-plugins/main.js +1 -1
  31. package/dist/esm/pm-plugins/table-resizing/event-handlers.js +40 -12
  32. package/dist/esm/pm-plugins/table-resizing/utils/resize-column.js +99 -51
  33. package/dist/esm/toolbar.js +4 -1
  34. package/dist/esm/ui/ColumnResizeWidget/index.js +4 -1
  35. package/dist/esm/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.js +4 -1
  36. package/dist/esm/ui/FloatingContextualButton/index.js +4 -1
  37. package/dist/esm/ui/FloatingContextualMenu/ContextualMenu.js +4 -1
  38. package/dist/esm/ui/FloatingContextualMenu/index.js +4 -1
  39. package/dist/esm/ui/FloatingDragMenu/DragMenu.js +4 -1
  40. package/dist/esm/utils/alignment.js +1 -1
  41. package/dist/types/pm-plugins/table-resizing/utils/resize-column.d.ts +23 -1
  42. package/dist/types/ui/ColumnResizeWidget/index.d.ts +4 -1
  43. package/dist/types/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.d.ts +4 -1
  44. package/dist/types/ui/FloatingContextualMenu/ContextualMenu.d.ts +4 -1
  45. package/dist/types/ui/FloatingContextualMenu/index.d.ts +4 -1
  46. package/dist/types/ui/FloatingDragMenu/DragMenu.d.ts +4 -1
  47. package/dist/types/utils/alignment.d.ts +1 -1
  48. package/dist/types-ts4.5/pm-plugins/table-resizing/utils/resize-column.d.ts +23 -1
  49. package/dist/types-ts4.5/ui/ColumnResizeWidget/index.d.ts +4 -1
  50. package/dist/types-ts4.5/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.d.ts +4 -1
  51. package/dist/types-ts4.5/ui/FloatingContextualMenu/ContextualMenu.d.ts +4 -1
  52. package/dist/types-ts4.5/ui/FloatingContextualMenu/index.d.ts +4 -1
  53. package/dist/types-ts4.5/ui/FloatingDragMenu/DragMenu.d.ts +4 -1
  54. package/dist/types-ts4.5/utils/alignment.d.ts +1 -1
  55. package/package.json +6 -6
  56. package/src/nodeviews/TableComponent.tsx +14 -0
  57. package/src/pm-plugins/keymap.ts +30 -32
  58. package/src/pm-plugins/main.ts +3 -1
  59. package/src/pm-plugins/table-resizing/event-handlers.ts +37 -25
  60. package/src/pm-plugins/table-resizing/utils/resize-column.ts +142 -70
  61. package/src/toolbar.tsx +4 -1
  62. package/src/ui/ColumnResizeWidget/index.tsx +4 -1
  63. package/src/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.tsx +4 -1
  64. package/src/ui/FloatingContextualButton/index.tsx +4 -1
  65. package/src/ui/FloatingContextualMenu/ContextualMenu.tsx +4 -1
  66. package/src/ui/FloatingContextualMenu/index.tsx +4 -1
  67. package/src/ui/FloatingDragMenu/DragMenu.tsx +4 -1
  68. package/src/utils/alignment.ts +8 -6
@@ -13,6 +13,7 @@ import { META_KEYS } from '../table-analytics';
13
13
  import { evenColumns, setDragging, stopResizing } from './commands';
14
14
  import { getPluginState } from './plugin-factory';
15
15
  import { currentColWidth, getResizeState, getTableMaxWidth, pointsAtCell, resizeColumn, resizeColumnAndTable, updateControls } from './utils';
16
+ import { scaleResizeState } from './utils/resize-column';
16
17
  export const handleMouseDown = (view, event, localResizeHandlePos, getEditorContainerWidth, getEditorFeatureFlags, isTableScalingEnabled, editorAnalyticsAPI, isNewColumnResizingEnabled, isTableAlignmentEnabled) => {
17
18
  const {
18
19
  state,
@@ -21,7 +22,8 @@ export const handleMouseDown = (view, event, localResizeHandlePos, getEditorCont
21
22
  const editorDisabled = !view.editable;
22
23
  const domAtPos = view.domAtPos.bind(view);
23
24
  const {
24
- lineLength
25
+ lineLength,
26
+ width: editorWidth
25
27
  } = getEditorContainerWidth();
26
28
  if (editorDisabled || localResizeHandlePos === null || !pointsAtCell(state.doc.resolve(localResizeHandlePos))) {
27
29
  return false;
@@ -61,7 +63,7 @@ export const handleMouseDown = (view, event, localResizeHandlePos, getEditorCont
61
63
  if (isTableScalingWithFixedColumnWidthsOptionEnabled) {
62
64
  shouldScale = shouldScale && originalTable.attrs.displayMode !== 'fixed';
63
65
  }
64
- const resizeState = getResizeState({
66
+ let resizeState = getResizeState({
65
67
  minWidth: tableCellMinWidth,
66
68
  maxSize,
67
69
  table: originalTable,
@@ -89,6 +91,17 @@ export const handleMouseDown = (view, event, localResizeHandlePos, getEditorCont
89
91
  // When we start resizing a column we need to ensure the underlying tooltip is removed from the decoration to avoid
90
92
  // unnecessary tooltips being displayed during drag.
91
93
  updateResizeHandleDecorations(undefined, undefined, false)(state, dispatch);
94
+
95
+ // for new column resizing, take the current scaled version of table widths and use those as the basis for resizing
96
+ // implication: the scaled version of the table becomes the source of truth
97
+ if (isNewColumnResizingEnabled && shouldScale) {
98
+ resizeState = scaleResizeState({
99
+ resizeState,
100
+ tableRef: dom,
101
+ tableNode: originalTable,
102
+ editorWidth
103
+ });
104
+ }
92
105
  function finish(event) {
93
106
  window.removeEventListener('mouseup', finish);
94
107
  window.removeEventListener('mousemove', move);
@@ -158,19 +171,24 @@ export const handleMouseDown = (view, event, localResizeHandlePos, getEditorCont
158
171
  const resizedDelta = clientX - startX;
159
172
  const shouldUseIncreasedScalingPercent = isTableScalingWithFixedColumnWidthsOptionEnabled && fg('platform.editor.table.use-increased-scaling-percent');
160
173
  if (isNewColumnResizingEnabled && !isTableNested(state, tablePos)) {
161
- const newResizeState = resizeColumnAndTable(resizeState, colIndex, resizedDelta, dom, originalTable, resizingSelectedColumns ? selectedColumns : undefined, shouldScale,
162
- // isTableScalingEnabled
163
- undefined,
164
- // originalTableWidth
165
- shouldUseIncreasedScalingPercent, lineLength, isTableAlignmentEnabled);
174
+ const newResizeState = resizeColumnAndTable({
175
+ resizeState,
176
+ colIndex,
177
+ amount: resizedDelta,
178
+ tableRef: dom,
179
+ tableNode: originalTable,
180
+ width: editorWidth,
181
+ lineLength,
182
+ isTableAlignmentEnabled
183
+ });
166
184
  tr = updateColumnWidths(newResizeState, table, start)(tr);
167
185
 
168
186
  // If the table is aligned to the start and the table width is greater than the line length, we should change the alignment to center
169
- const shouldChangeAlignment = shouldChangeAlignmentToCenterResized(isTableAlignmentEnabled, originalTable, lineLength, newResizeState.tableWidth);
187
+ const shouldChangeAlignment = shouldChangeAlignmentToCenterResized(isTableAlignmentEnabled, originalTable, lineLength, newResizeState.maxSize);
170
188
  if (shouldChangeAlignment) {
171
189
  tr = tr.setNodeMarkup(start - 1, state.schema.nodes.table, {
172
190
  ...table.attrs,
173
- width: newResizeState.tableWidth,
191
+ width: newResizeState.maxSize,
174
192
  layout: ALIGN_CENTER
175
193
  });
176
194
  editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 ? void 0 : editorAnalyticsAPI.attachAnalyticsEvent({
@@ -178,7 +196,7 @@ export const handleMouseDown = (view, event, localResizeHandlePos, getEditorCont
178
196
  actionSubject: ACTION_SUBJECT.TABLE,
179
197
  actionSubjectId: null,
180
198
  attributes: {
181
- tableWidth: newResizeState.tableWidth,
199
+ tableWidth: newResizeState.maxSize,
182
200
  newAlignment: ALIGN_CENTER,
183
201
  previousAlignment: ALIGN_START,
184
202
  totalRowCount: totalRowCount,
@@ -189,7 +207,7 @@ export const handleMouseDown = (view, event, localResizeHandlePos, getEditorCont
189
207
  eventType: EVENT_TYPE.TRACK
190
208
  })(tr);
191
209
  } else {
192
- tr.setNodeAttribute(start - 1, 'width', newResizeState.tableWidth);
210
+ tr.setNodeAttribute(start - 1, 'width', newResizeState.maxSize);
193
211
  }
194
212
  } else {
195
213
  const newResizeState = resizeColumn(resizeState, colIndex, resizedDelta, dom, originalTable, resizingSelectedColumns ? selectedColumns : undefined, shouldScale, shouldUseIncreasedScalingPercent);
@@ -267,10 +285,20 @@ export const handleMouseDown = (view, event, localResizeHandlePos, getEditorCont
267
285
  if (isTableScalingWithFixedColumnWidthsOptionEnabled) {
268
286
  shouldScale = shouldScale && originalTable.attrs.displayMode !== 'fixed';
269
287
  }
288
+ const resizedDelta = clientX - dragging.startX;
270
289
  if (isNewColumnResizingEnabled && !isTableNested(state, tablePos)) {
271
- resizeColumnAndTable(resizeState, colIndex, clientX - dragging.startX, dom, table, undefined, shouldScale, undefined, shouldUseIncreasedScalingPercent, lineLength, isTableAlignmentEnabled);
290
+ resizeColumnAndTable({
291
+ resizeState,
292
+ colIndex,
293
+ amount: resizedDelta,
294
+ tableRef: dom,
295
+ tableNode: originalTable,
296
+ width: editorWidth,
297
+ lineLength,
298
+ isTableAlignmentEnabled
299
+ });
272
300
  } else {
273
- resizeColumn(resizeState, colIndex, clientX - dragging.startX, dom, table, undefined, shouldScale, shouldUseIncreasedScalingPercent);
301
+ resizeColumn(resizeState, colIndex, resizedDelta, dom, table, undefined, shouldScale, shouldUseIncreasedScalingPercent);
274
302
  }
275
303
  updateControls()(state);
276
304
  }
@@ -1,8 +1,9 @@
1
1
  // Resize a given column by an amount from the current state
2
2
 
3
+ import { akEditorFullWidthLayoutWidth, akEditorGutterPaddingDynamic } from '@atlaskit/editor-shared-styles';
3
4
  import { TableCssClassName as ClassName } from '../../../types';
4
5
  import { ALIGN_CENTER, ALIGN_START, shouldChangeAlignmentToCenterResized } from '../../../utils/alignment';
5
- import { getTableContainerElementWidth, getTableScalingPercent } from './misc';
6
+ import { getTableScalingPercent } from './misc';
6
7
  import { growColumn, shrinkColumn, updateAffectedColumn } from './resize-logic';
7
8
  import { updateColgroup } from './resize-state';
8
9
  export const resizeColumn = (resizeState, colIndex, amount, tableRef, tableNode, selectedColumns, isTableScalingEnabled = false, shouldUseIncreasedScalingPercent = false) => {
@@ -16,64 +17,112 @@ export const resizeColumn = (resizeState, colIndex, amount, tableRef, tableNode,
16
17
  updateColgroup(newState, tableRef, tableNode, isTableScalingEnabled, shouldUseIncreasedScalingPercent);
17
18
  return newState;
18
19
  };
20
+ export const resizeColumnAndTable = ({
21
+ resizeState,
22
+ colIndex,
23
+ amount,
24
+ tableRef,
25
+ tableNode,
26
+ lineLength,
27
+ width: editorWidth,
28
+ isTableAlignmentEnabled
29
+ }) => {
30
+ const editorContainerWidth = getEditorContainerWidth(editorWidth);
31
+ const isTableLeftAligned = tableNode.attrs.layout === ALIGN_START;
32
+ let resizeAmount = isTableLeftAligned ? amount : amount * 2;
33
+ const willTableHitEditorEdge = resizeState.maxSize + resizeAmount > editorContainerWidth;
34
+ const willResizedTableStayInOverflow = resizeState.overflow && resizeState.tableWidth + resizeAmount / 2 > resizeState.maxSize;
19
35
 
20
- // try not scale table during resize
21
- export const resizeColumnAndTable = (resizeState, colIndex, amount, tableRef, tableNode, selectedColumns, isTableScalingEnabled = false, originalTableWidth, shouldUseIncreasedScalingPercent = false, lineLength, isTableAlignmentEnabled = false) => {
22
- var _tableRef$closest;
23
- // TODO: can we use document state, and apply scaling factor?
24
- const tableWidth = tableRef.clientWidth;
25
- const tableContainerWidth = (_tableRef$closest = tableRef.closest('.pm-table-container')) === null || _tableRef$closest === void 0 ? void 0 : _tableRef$closest.clientWidth;
26
- const isOverflowed = !!(tableWidth && tableContainerWidth && tableWidth > tableContainerWidth);
27
- let resizeAmount = tableNode.attrs.layout === ALIGN_START && !isOverflowed ? amount : amount * 2;
28
-
29
- // todo: reimplement - use getTableScalingPercentFrozen to get scaled percent before table width changes dynamically
30
- // let scalePercent = 1;
31
- // if (isTableScalingEnabled) {
32
- // import from ./misc
33
- // scalePercent = getStaticTableScalingPercent(
34
- // tableNode,
35
- // originalTableWidth || resizeState.maxSize,
36
- // );
37
- // resizeAmount = amount / scalePercent;
38
- // }
39
-
40
- // need to look at the resize amount and try to adjust the colgroups
41
- if (isOverflowed) {
42
- resizeAmount = amount < 0 ? amount : resizeAmount - (tableNode.attrs.width + resizeAmount - tableContainerWidth) / 2;
36
+ // STEP 1: Update col width
37
+ if (willTableHitEditorEdge || willResizedTableStayInOverflow) {
38
+ var _tableRef$closest;
39
+ const tableContainerWidth = (_tableRef$closest = tableRef.closest('.pm-table-container')) === null || _tableRef$closest === void 0 ? void 0 : _tableRef$closest.clientWidth;
40
+ resizeAmount = amount < 0 ? amount : resizeAmount - (resizeState.maxSize + resizeAmount - tableContainerWidth) / 2;
43
41
  }
44
- const newState = updateAffectedColumn(resizeState, colIndex, resizeAmount);
45
-
46
- // this function only updates the colgroup in DOM, it reverses the scalePercent
47
- // todo: change isScalingEnabled to true when reimplementing scaling
48
- updateColgroup(newState, tableRef, tableNode, false, shouldUseIncreasedScalingPercent);
42
+ if (!willResizedTableStayInOverflow && !willTableHitEditorEdge) {
43
+ const diff = -(resizeState.tableWidth - resizeState.maxSize);
44
+ const rest = amount - diff;
45
+ const final = isTableLeftAligned ? diff + rest : diff + rest * 2;
46
+ resizeAmount = final;
47
+ }
48
+ let newState = updateAffectedColumn(resizeState, colIndex, resizeAmount);
49
49
 
50
- // use the difference in width from affected column to update overall table width
50
+ // STEP 2: Update table container width
51
+ // columns have a min width, so delta !== resizeAmount when this is reached, use this for calculations
51
52
  const delta = newState.cols[colIndex].width - resizeState.cols[colIndex].width;
52
- if (!isOverflowed) {
53
- // If the table is aligned to the start and the table width is greater than the line length, we should change the alignment to center
54
- const shouldChangeAlignment = shouldChangeAlignmentToCenterResized(isTableAlignmentEnabled, tableNode, lineLength, newState.tableWidth + delta);
55
- shouldChangeAlignment ? updateTablePreview(delta, tableRef, tableNode, ALIGN_CENTER) : updateTablePreview(delta, tableRef, tableNode);
53
+ newState.maxSize = Math.round(resizeState.overflow ? willResizedTableStayInOverflow ?
54
+ // CASE 1A: table will stay in overflow
55
+ // do not grow the table because resize is happening in the overflow region
56
+ // and the overall table container needs to be retained
57
+ resizeState.maxSize :
58
+ // CASE 1B: table will no longer be in overflow, so adjust container width
59
+ // ensure the table is resized without any 'big jumps' by working out
60
+ // the difference between the new table width and the max size and adding the resize
61
+ resizeState.maxSize + (resizeState.tableWidth - resizeState.maxSize + delta) : willTableHitEditorEdge ?
62
+ // CASE 2: table will hit editor edge
63
+ editorContainerWidth :
64
+ // CASE 3: table is being resized from a non-overflow state
65
+ resizeState.maxSize + delta);
66
+
67
+ // do not apply scaling logic because resize state is already scaled
68
+ updateColgroup(newState, tableRef, tableNode, false, false);
69
+ if (!willTableHitEditorEdge && !willResizedTableStayInOverflow) {
70
+ updateTablePreview(tableRef, newState.maxSize, shouldChangeAlignmentToCenterResized(isTableAlignmentEnabled, tableNode, lineLength, newState.maxSize));
56
71
  }
57
- return {
58
- ...newState,
59
- // resizeState.tableWidth sometimes is off by ~3px on load on resized table when !isOverflowed, using resizeState.maxSize instead
60
- tableWidth: isOverflowed ? tableContainerWidth : resizeState.maxSize + delta
61
- };
72
+ return newState;
62
73
  };
63
- const updateTablePreview = (resizeAmount, tableRef, tableNode, tableAligment) => {
64
- const currentWidth = getTableContainerElementWidth(tableNode);
65
- const resizingContainer = tableRef === null || tableRef === void 0 ? void 0 : tableRef.closest(`.${ClassName.TABLE_RESIZER_CONTAINER}`);
74
+ const updateTablePreview = (tableRef, newTableWidth, shouldChangeAlignment) => {
75
+ const resizingContainer = tableRef.closest(`.${ClassName.TABLE_RESIZER_CONTAINER}`);
66
76
  const resizingItem = resizingContainer === null || resizingContainer === void 0 ? void 0 : resizingContainer.querySelector('.resizer-item');
67
77
  const alignmentContainer = resizingContainer === null || resizingContainer === void 0 ? void 0 : resizingContainer.parentElement;
68
78
  if (resizingItem) {
69
- const newWidth = `${currentWidth + resizeAmount}px`;
70
- if (tableRef) {
71
- tableRef.style.width = newWidth;
72
- }
79
+ const newWidth = `${newTableWidth}px`;
73
80
  resizingContainer.style.width = newWidth;
74
81
  resizingItem.style.width = newWidth;
75
- if (tableAligment && alignmentContainer) {
76
- alignmentContainer.style.justifyContent = tableAligment;
82
+ if (shouldChangeAlignment && alignmentContainer) {
83
+ alignmentContainer.style.justifyContent = ALIGN_CENTER;
77
84
  }
78
85
  }
86
+ };
87
+ const getEditorContainerWidth = editorWidth => Math.min(editorWidth - akEditorGutterPaddingDynamic() * 2, akEditorFullWidthLayoutWidth);
88
+
89
+ /**
90
+ * Apply a scaling factor to resize state
91
+ */
92
+ export const scaleResizeState = ({
93
+ resizeState,
94
+ tableRef,
95
+ tableNode,
96
+ editorWidth
97
+ }) => {
98
+ // check if table is scaled, if not then avoid applying scaling values down
99
+ if (resizeState.maxSize < getEditorContainerWidth(editorWidth)) {
100
+ return resizeState;
101
+ }
102
+ const scalePercent = getTableScalingPercent(tableNode, tableRef);
103
+ let cols = resizeState.cols.map(col => ({
104
+ ...col,
105
+ width: Math.round(Math.max(col.width * scalePercent, col.minWidth))
106
+ }));
107
+ const scaledTableWidth = Math.round(resizeState.tableWidth * scalePercent);
108
+ const calculatedTableWidth = cols.reduce((prev, curr) => prev + curr.width, 0);
109
+
110
+ // using Math.round can cause the sum of col widths to be larger than the table width
111
+ // distribute the difference to the smallest column
112
+ if (calculatedTableWidth > scaledTableWidth) {
113
+ const diff = calculatedTableWidth - scaledTableWidth;
114
+ cols = cols.map(col => {
115
+ return col.width - diff >= col.minWidth ? {
116
+ ...col,
117
+ width: col.width - diff
118
+ } : col;
119
+ });
120
+ }
121
+ return {
122
+ ...resizeState,
123
+ widths: cols.map(col => col.width),
124
+ tableWidth: scaledTableWidth,
125
+ maxSize: Math.round(resizeState.maxSize * scalePercent),
126
+ cols
127
+ };
79
128
  };
@@ -1,5 +1,8 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
- /** @jsx jsx */
2
+ /**
3
+ * @jsxRuntime classic
4
+ * @jsx jsx
5
+ */
3
6
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
4
7
  import { jsx } from '@emotion/react';
5
8
  import { TableSortOrder as SortOrder } from '@atlaskit/custom-steps';
@@ -1,5 +1,8 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
- /** @jsx jsx */
2
+ /**
3
+ * @jsxRuntime classic
4
+ * @jsx jsx
5
+ */
3
6
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
4
7
  import { jsx } from '@emotion/react';
5
8
  import { useIntl } from 'react-intl-next';
@@ -1,4 +1,7 @@
1
- /** @jsx jsx */
1
+ /**
2
+ * @jsxRuntime classic
3
+ * @jsx jsx
4
+ */
2
5
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
3
6
  import { jsx } from '@emotion/react';
4
7
  import { ButtonGroup } from '@atlaskit/button';
@@ -1,4 +1,7 @@
1
- /** @jsx jsx */
1
+ /**
2
+ * @jsxRuntime classic
3
+ * @jsx jsx
4
+ */
2
5
  import React, { useEffect } from 'react';
3
6
 
4
7
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
@@ -1,6 +1,9 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  /* eslint-disable @atlaskit/design-system/prefer-primitives */
3
- /** @jsx jsx */
3
+ /**
4
+ * @jsxRuntime classic
5
+ * @jsx jsx
6
+ */
4
7
  import React, { Component } from 'react';
5
8
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
6
9
  import { jsx } from '@emotion/react';
@@ -1,4 +1,7 @@
1
- /** @jsx jsx */
1
+ /**
2
+ * @jsxRuntime classic
3
+ * @jsx jsx
4
+ */
2
5
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
3
6
  import { jsx } from '@emotion/react';
4
7
  import { Popup } from '@atlaskit/editor-common/ui';
@@ -1,5 +1,8 @@
1
1
  /* eslint-disable @atlaskit/design-system/prefer-primitives */
2
- /** @jsx jsx */
2
+ /**
3
+ * @jsxRuntime classic
4
+ * @jsx jsx
5
+ */
3
6
  /** @jsxFrag */
4
7
  import React, { useEffect, useState } from 'react';
5
8
 
@@ -11,4 +11,4 @@ export const normaliseAlignment = layout => layout === ALIGN_CENTER || layout ==
11
11
  /**
12
12
  * We don't want to switch alignment in Full-width editor
13
13
  */
14
- export const shouldChangeAlignmentToCenterResized = (isTableAlignmentEnabled, tableNode, lineLength, updatedTableWidth) => isTableAlignmentEnabled && tableNode && tableNode.attrs.layout === ALIGN_START && lineLength && updatedTableWidth > lineLength && lineLength < FULL_WIDTH_EDITOR_CONTENT_WIDTH;
14
+ export const shouldChangeAlignmentToCenterResized = (isTableAlignmentEnabled, tableNode, lineLength, updatedTableWidth) => Boolean(isTableAlignmentEnabled && tableNode && tableNode.attrs.layout === ALIGN_START && lineLength && updatedTableWidth > lineLength && lineLength < FULL_WIDTH_EDITOR_CONTENT_WIDTH);
@@ -28,6 +28,7 @@ import { findTable, isTableSelected } from '@atlaskit/editor-tables/utils';
28
28
  import { fg } from '@atlaskit/platform-feature-flags';
29
29
  import { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';
30
30
  import { autoSizeTable, clearHoverSelection } from '../commands';
31
+ import { handleMouseOut, isTableInFocus } from '../event-handlers';
31
32
  import { autoScrollerFactory } from '../pm-plugins/drag-and-drop/utils';
32
33
  import { getPluginState } from '../pm-plugins/plugin-factory';
33
34
  import { findStickyHeaderForTable, pluginKey as stickyHeadersPluginKey } from '../pm-plugins/sticky-headers';
@@ -67,6 +68,12 @@ var TableComponent = /*#__PURE__*/function (_React$Component) {
67
68
  scroll: 0,
68
69
  parentWidth: undefined
69
70
  }, _defineProperty(_defineProperty2, ShadowEvent.SHOW_BEFORE_SHADOW, false), _defineProperty(_defineProperty2, ShadowEvent.SHOW_AFTER_SHADOW, false), _defineProperty(_defineProperty2, "tableWrapperWidth", undefined), _defineProperty(_defineProperty2, "tableWrapperHeight", undefined), _defineProperty2));
71
+ _defineProperty(_assertThisInitialized(_this), "handleMouseOut", function (event) {
72
+ if (!isTableInFocus(_this.props.view)) {
73
+ return false;
74
+ }
75
+ return handleMouseOut(_this.props.view, event);
76
+ });
70
77
  _defineProperty(_assertThisInitialized(_this), "handleMouseEnter", function () {
71
78
  var node = _this.props.getNode();
72
79
  var pos = _this.props.getPos();
@@ -357,6 +364,10 @@ var TableComponent = /*#__PURE__*/function (_React$Component) {
357
364
  this === null || this === void 0 || (_this$table = this.table) === null || _this$table === void 0 || _this$table.addEventListener('mouseenter', this.handleMouseEnter);
358
365
  }
359
366
  }
367
+ if (fg('editor_react_18_fix_table_delete_col_decorations')) {
368
+ var _this$table2;
369
+ this === null || this === void 0 || (_this$table2 = this.table) === null || _this$table2 === void 0 || _this$table2.addEventListener('mouseout', this.handleMouseOut);
370
+ }
360
371
  var _getEditorFeatureFlag = getEditorFeatureFlags(),
361
372
  _getEditorFeatureFlag2 = _getEditorFeatureFlag.tableWithFixedColumnWidthsOption,
362
373
  tableWithFixedColumnWidthsOption = _getEditorFeatureFlag2 === void 0 ? false : _getEditorFeatureFlag2,
@@ -438,8 +449,12 @@ var TableComponent = /*#__PURE__*/function (_React$Component) {
438
449
  window.removeEventListener('resize', this.handleWindowResizeDebounced);
439
450
  }
440
451
  if (fg('platform.editor.table.live-pages-sorting_4malx')) {
441
- var _this$table2;
442
- this === null || this === void 0 || (_this$table2 = this.table) === null || _this$table2 === void 0 || _this$table2.removeEventListener('mouseenter', this.handleMouseEnter);
452
+ var _this$table3;
453
+ this === null || this === void 0 || (_this$table3 = this.table) === null || _this$table3 === void 0 || _this$table3.removeEventListener('mouseenter', this.handleMouseEnter);
454
+ }
455
+ if (fg('editor_react_18_fix_table_delete_col_decorations')) {
456
+ var _this$table4;
457
+ this === null || this === void 0 || (_this$table4 = this.table) === null || _this$table4 === void 0 || _this$table4.removeEventListener('mouseout', this.handleMouseOut);
443
458
  }
444
459
  if (this.overflowShadowsObserver) {
445
460
  this.overflowShadowsObserver.dispose();
@@ -33,12 +33,10 @@ export function keymapPlugin(getEditorContainerWidth, editorAnalyticsAPI, dragAn
33
33
  bindKeymapWithCommand(addRowAfter.common, addRowAroundSelection(editorAnalyticsAPI)('BOTTOM'), list);
34
34
  bindKeymapWithCommand(addColumnBefore.common, addColumnBeforeCommand(isTableScalingEnabled, isCellBackgroundDuplicated, isTableFixedColumnWidthsOptionEnabled, shouldUseIncreasedScalingPercent), list);
35
35
  bindKeymapWithCommand(addColumnAfter.common, addColumnAfterCommand(isTableScalingEnabled, isCellBackgroundDuplicated, isTableFixedColumnWidthsOptionEnabled, shouldUseIncreasedScalingPercent), list);
36
- if (fg('platform.editor.a11y-help-dialog-shortcut-keys-position_aghfg')) {
37
- bindKeymapWithCommand(addRowBeforeVO.common, addRowAroundSelection(editorAnalyticsAPI)('TOP'), list);
38
- bindKeymapWithCommand(addRowAfterVO.common, addRowAroundSelection(editorAnalyticsAPI)('BOTTOM'), list);
39
- bindKeymapWithCommand(addColumnBeforeVO.common, addColumnBeforeCommand(isTableScalingEnabled, isCellBackgroundDuplicated, isTableFixedColumnWidthsOptionEnabled, shouldUseIncreasedScalingPercent), list);
40
- bindKeymapWithCommand(addColumnAfterVO.common, addColumnAfterCommand(isTableScalingEnabled, isCellBackgroundDuplicated, isTableFixedColumnWidthsOptionEnabled, shouldUseIncreasedScalingPercent), list);
41
- }
36
+ bindKeymapWithCommand(addRowBeforeVO.common, addRowAroundSelection(editorAnalyticsAPI)('TOP'), list);
37
+ bindKeymapWithCommand(addRowAfterVO.common, addRowAroundSelection(editorAnalyticsAPI)('BOTTOM'), list);
38
+ bindKeymapWithCommand(addColumnBeforeVO.common, addColumnBeforeCommand(isTableScalingEnabled, isCellBackgroundDuplicated, isTableFixedColumnWidthsOptionEnabled, shouldUseIncreasedScalingPercent), list);
39
+ bindKeymapWithCommand(addColumnAfterVO.common, addColumnAfterCommand(isTableScalingEnabled, isCellBackgroundDuplicated, isTableFixedColumnWidthsOptionEnabled, shouldUseIncreasedScalingPercent), list);
42
40
  if (dragAndDropEnabled) {
43
41
  // Move row/column shortcuts
44
42
  /**
@@ -275,7 +275,7 @@ export var createPlugin = function createPlugin(dispatchAnalyticsEvent, dispatch
275
275
  mousedown: withCellTracking(handleMouseDown),
276
276
  mouseover: withCellTracking(whenTableInFocus(handleMouseOver)),
277
277
  mouseleave: handleMouseLeave,
278
- mouseout: whenTableInFocus(handleMouseOut),
278
+ mouseout: fg('editor_react_18_fix_table_delete_col_decorations') ? undefined : whenTableInFocus(handleMouseOut),
279
279
  mousemove: whenTableInFocus(handleMouseMove),
280
280
  mouseenter: handleMouseEnter,
281
281
  mouseup: whenTableInFocus(handleMouseUp),
@@ -16,13 +16,15 @@ import { META_KEYS } from '../table-analytics';
16
16
  import { evenColumns, setDragging, stopResizing } from './commands';
17
17
  import { getPluginState } from './plugin-factory';
18
18
  import { currentColWidth, getResizeState, getTableMaxWidth, pointsAtCell, resizeColumn, resizeColumnAndTable, updateControls } from './utils';
19
+ import { scaleResizeState } from './utils/resize-column';
19
20
  export var handleMouseDown = function handleMouseDown(view, event, localResizeHandlePos, getEditorContainerWidth, getEditorFeatureFlags, isTableScalingEnabled, editorAnalyticsAPI, isNewColumnResizingEnabled, isTableAlignmentEnabled) {
20
21
  var state = view.state,
21
22
  dispatch = view.dispatch;
22
23
  var editorDisabled = !view.editable;
23
24
  var domAtPos = view.domAtPos.bind(view);
24
25
  var _getEditorContainerWi = getEditorContainerWidth(),
25
- lineLength = _getEditorContainerWi.lineLength;
26
+ lineLength = _getEditorContainerWi.lineLength,
27
+ editorWidth = _getEditorContainerWi.width;
26
28
  if (editorDisabled || localResizeHandlePos === null || !pointsAtCell(state.doc.resolve(localResizeHandlePos))) {
27
29
  return false;
28
30
  }
@@ -88,6 +90,17 @@ export var handleMouseDown = function handleMouseDown(view, event, localResizeHa
88
90
  // When we start resizing a column we need to ensure the underlying tooltip is removed from the decoration to avoid
89
91
  // unnecessary tooltips being displayed during drag.
90
92
  updateResizeHandleDecorations(undefined, undefined, false)(state, dispatch);
93
+
94
+ // for new column resizing, take the current scaled version of table widths and use those as the basis for resizing
95
+ // implication: the scaled version of the table becomes the source of truth
96
+ if (isNewColumnResizingEnabled && shouldScale) {
97
+ resizeState = scaleResizeState({
98
+ resizeState: resizeState,
99
+ tableRef: dom,
100
+ tableNode: originalTable,
101
+ editorWidth: editorWidth
102
+ });
103
+ }
91
104
  function finish(event) {
92
105
  window.removeEventListener('mouseup', finish);
93
106
  window.removeEventListener('mousemove', move);
@@ -147,18 +160,23 @@ export var handleMouseDown = function handleMouseDown(view, event, localResizeHa
147
160
  var resizedDelta = clientX - startX;
148
161
  var shouldUseIncreasedScalingPercent = isTableScalingWithFixedColumnWidthsOptionEnabled && fg('platform.editor.table.use-increased-scaling-percent');
149
162
  if (isNewColumnResizingEnabled && !isTableNested(state, tablePos)) {
150
- var newResizeState = resizeColumnAndTable(resizeState, colIndex, resizedDelta, dom, originalTable, resizingSelectedColumns ? selectedColumns : undefined, _shouldScale,
151
- // isTableScalingEnabled
152
- undefined,
153
- // originalTableWidth
154
- shouldUseIncreasedScalingPercent, lineLength, isTableAlignmentEnabled);
163
+ var newResizeState = resizeColumnAndTable({
164
+ resizeState: resizeState,
165
+ colIndex: colIndex,
166
+ amount: resizedDelta,
167
+ tableRef: dom,
168
+ tableNode: originalTable,
169
+ width: editorWidth,
170
+ lineLength: lineLength,
171
+ isTableAlignmentEnabled: isTableAlignmentEnabled
172
+ });
155
173
  tr = updateColumnWidths(newResizeState, table, start)(tr);
156
174
 
157
175
  // If the table is aligned to the start and the table width is greater than the line length, we should change the alignment to center
158
- var shouldChangeAlignment = shouldChangeAlignmentToCenterResized(isTableAlignmentEnabled, originalTable, lineLength, newResizeState.tableWidth);
176
+ var shouldChangeAlignment = shouldChangeAlignmentToCenterResized(isTableAlignmentEnabled, originalTable, lineLength, newResizeState.maxSize);
159
177
  if (shouldChangeAlignment) {
160
178
  tr = tr.setNodeMarkup(start - 1, state.schema.nodes.table, _objectSpread(_objectSpread({}, table.attrs), {}, {
161
- width: newResizeState.tableWidth,
179
+ width: newResizeState.maxSize,
162
180
  layout: ALIGN_CENTER
163
181
  }));
164
182
  editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({
@@ -166,7 +184,7 @@ export var handleMouseDown = function handleMouseDown(view, event, localResizeHa
166
184
  actionSubject: ACTION_SUBJECT.TABLE,
167
185
  actionSubjectId: null,
168
186
  attributes: {
169
- tableWidth: newResizeState.tableWidth,
187
+ tableWidth: newResizeState.maxSize,
170
188
  newAlignment: ALIGN_CENTER,
171
189
  previousAlignment: ALIGN_START,
172
190
  totalRowCount: totalRowCount,
@@ -177,7 +195,7 @@ export var handleMouseDown = function handleMouseDown(view, event, localResizeHa
177
195
  eventType: EVENT_TYPE.TRACK
178
196
  })(tr);
179
197
  } else {
180
- tr.setNodeAttribute(start - 1, 'width', newResizeState.tableWidth);
198
+ tr.setNodeAttribute(start - 1, 'width', newResizeState.maxSize);
181
199
  }
182
200
  } else {
183
201
  var _newResizeState = resizeColumn(resizeState, colIndex, resizedDelta, dom, originalTable, resizingSelectedColumns ? selectedColumns : undefined, _shouldScale, shouldUseIncreasedScalingPercent);
@@ -249,10 +267,20 @@ export var handleMouseDown = function handleMouseDown(view, event, localResizeHa
249
267
  if (isTableScalingWithFixedColumnWidthsOptionEnabled) {
250
268
  shouldScale = shouldScale && originalTable.attrs.displayMode !== 'fixed';
251
269
  }
270
+ var resizedDelta = clientX - dragging.startX;
252
271
  if (isNewColumnResizingEnabled && !isTableNested(state, tablePos)) {
253
- resizeColumnAndTable(resizeState, colIndex, clientX - dragging.startX, dom, table, undefined, shouldScale, undefined, shouldUseIncreasedScalingPercent, lineLength, isTableAlignmentEnabled);
272
+ resizeColumnAndTable({
273
+ resizeState: resizeState,
274
+ colIndex: colIndex,
275
+ amount: resizedDelta,
276
+ tableRef: dom,
277
+ tableNode: originalTable,
278
+ width: editorWidth,
279
+ lineLength: lineLength,
280
+ isTableAlignmentEnabled: isTableAlignmentEnabled
281
+ });
254
282
  } else {
255
- resizeColumn(resizeState, colIndex, clientX - dragging.startX, dom, table, undefined, shouldScale, shouldUseIncreasedScalingPercent);
283
+ resizeColumn(resizeState, colIndex, resizedDelta, dom, table, undefined, shouldScale, shouldUseIncreasedScalingPercent);
256
284
  }
257
285
  updateControls()(state);
258
286
  }