@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.
- package/CHANGELOG.md +22 -0
- package/dist/cjs/nodeviews/TableComponent.js +17 -2
- package/dist/cjs/pm-plugins/keymap.js +4 -6
- package/dist/cjs/pm-plugins/main.js +1 -1
- package/dist/cjs/pm-plugins/table-resizing/event-handlers.js +40 -12
- package/dist/cjs/pm-plugins/table-resizing/utils/resize-column.js +99 -51
- package/dist/cjs/toolbar.js +4 -1
- package/dist/cjs/ui/ColumnResizeWidget/index.js +4 -1
- package/dist/cjs/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.js +4 -1
- package/dist/cjs/ui/FloatingContextualButton/index.js +4 -1
- package/dist/cjs/ui/FloatingContextualMenu/ContextualMenu.js +4 -1
- package/dist/cjs/ui/FloatingContextualMenu/index.js +4 -1
- package/dist/cjs/ui/FloatingDragMenu/DragMenu.js +4 -1
- package/dist/cjs/utils/alignment.js +1 -1
- package/dist/es2019/nodeviews/TableComponent.js +17 -2
- package/dist/es2019/pm-plugins/keymap.js +4 -6
- package/dist/es2019/pm-plugins/main.js +1 -1
- package/dist/es2019/pm-plugins/table-resizing/event-handlers.js +41 -13
- package/dist/es2019/pm-plugins/table-resizing/utils/resize-column.js +97 -48
- package/dist/es2019/toolbar.js +4 -1
- package/dist/es2019/ui/ColumnResizeWidget/index.js +4 -1
- package/dist/es2019/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.js +4 -1
- package/dist/es2019/ui/FloatingContextualButton/index.js +4 -1
- package/dist/es2019/ui/FloatingContextualMenu/ContextualMenu.js +4 -1
- package/dist/es2019/ui/FloatingContextualMenu/index.js +4 -1
- package/dist/es2019/ui/FloatingDragMenu/DragMenu.js +4 -1
- package/dist/es2019/utils/alignment.js +1 -1
- package/dist/esm/nodeviews/TableComponent.js +17 -2
- package/dist/esm/pm-plugins/keymap.js +4 -6
- package/dist/esm/pm-plugins/main.js +1 -1
- package/dist/esm/pm-plugins/table-resizing/event-handlers.js +40 -12
- package/dist/esm/pm-plugins/table-resizing/utils/resize-column.js +99 -51
- package/dist/esm/toolbar.js +4 -1
- package/dist/esm/ui/ColumnResizeWidget/index.js +4 -1
- package/dist/esm/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.js +4 -1
- package/dist/esm/ui/FloatingContextualButton/index.js +4 -1
- package/dist/esm/ui/FloatingContextualMenu/ContextualMenu.js +4 -1
- package/dist/esm/ui/FloatingContextualMenu/index.js +4 -1
- package/dist/esm/ui/FloatingDragMenu/DragMenu.js +4 -1
- package/dist/esm/utils/alignment.js +1 -1
- package/dist/types/pm-plugins/table-resizing/utils/resize-column.d.ts +23 -1
- package/dist/types/ui/ColumnResizeWidget/index.d.ts +4 -1
- package/dist/types/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.d.ts +4 -1
- package/dist/types/ui/FloatingContextualMenu/ContextualMenu.d.ts +4 -1
- package/dist/types/ui/FloatingContextualMenu/index.d.ts +4 -1
- package/dist/types/ui/FloatingDragMenu/DragMenu.d.ts +4 -1
- package/dist/types/utils/alignment.d.ts +1 -1
- package/dist/types-ts4.5/pm-plugins/table-resizing/utils/resize-column.d.ts +23 -1
- package/dist/types-ts4.5/ui/ColumnResizeWidget/index.d.ts +4 -1
- package/dist/types-ts4.5/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.d.ts +4 -1
- package/dist/types-ts4.5/ui/FloatingContextualMenu/ContextualMenu.d.ts +4 -1
- package/dist/types-ts4.5/ui/FloatingContextualMenu/index.d.ts +4 -1
- package/dist/types-ts4.5/ui/FloatingDragMenu/DragMenu.d.ts +4 -1
- package/dist/types-ts4.5/utils/alignment.d.ts +1 -1
- package/package.json +6 -6
- package/src/nodeviews/TableComponent.tsx +14 -0
- package/src/pm-plugins/keymap.ts +30 -32
- package/src/pm-plugins/main.ts +3 -1
- package/src/pm-plugins/table-resizing/event-handlers.ts +37 -25
- package/src/pm-plugins/table-resizing/utils/resize-column.ts +142 -70
- package/src/toolbar.tsx +4 -1
- package/src/ui/ColumnResizeWidget/index.tsx +4 -1
- package/src/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.tsx +4 -1
- package/src/ui/FloatingContextualButton/index.tsx +4 -1
- package/src/ui/FloatingContextualMenu/ContextualMenu.tsx +4 -1
- package/src/ui/FloatingContextualMenu/index.tsx +4 -1
- package/src/ui/FloatingDragMenu/DragMenu.tsx +4 -1
- 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
|
-
|
|
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(
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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(
|
|
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,
|
|
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 {
|
|
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
|
-
//
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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 = (
|
|
64
|
-
const
|
|
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 = `${
|
|
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 (
|
|
76
|
-
alignmentContainer.style.justifyContent =
|
|
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
|
};
|
package/dist/es2019/toolbar.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
-
/**
|
|
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
|
-
/**
|
|
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,6 +1,9 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
/* eslint-disable @atlaskit/design-system/prefer-primitives */
|
|
3
|
-
/**
|
|
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';
|
|
@@ -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$
|
|
442
|
-
this === null || this === void 0 || (_this$
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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(
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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(
|
|
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,
|
|
283
|
+
resizeColumn(resizeState, colIndex, resizedDelta, dom, table, undefined, shouldScale, shouldUseIncreasedScalingPercent);
|
|
256
284
|
}
|
|
257
285
|
updateControls()(state);
|
|
258
286
|
}
|