@atlaskit/editor-plugin-table 7.16.11 → 7.16.12
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/.eslintrc.js +3 -3
- package/CHANGELOG.md +8 -0
- package/dist/cjs/commands/misc.js +3 -3
- package/dist/cjs/nodeviews/TableCell.js +10 -10
- package/dist/cjs/nodeviews/TableContainer.js +41 -6
- package/dist/cjs/nodeviews/TableResizer.js +7 -7
- package/dist/cjs/nodeviews/TableRow.js +23 -23
- package/dist/cjs/pm-plugins/table-resizing/plugin.js +3 -3
- package/dist/cjs/pm-plugins/table-resizing/utils/resize-state.js +4 -4
- package/dist/cjs/pm-plugins/table-resizing/utils/scale-table.js +3 -3
- package/dist/cjs/ui/FloatingContextualMenu/styles.js +1 -1
- package/dist/cjs/ui/FloatingDragMenu/styles.js +1 -1
- package/dist/cjs/ui/common-styles.js +13 -13
- package/dist/cjs/ui/ui-styles.js +25 -25
- package/dist/cjs/utils/merged-cells.js +3 -3
- package/dist/es2019/commands/misc.js +3 -3
- package/dist/es2019/nodeviews/TableContainer.js +43 -5
- package/dist/es2019/nodeviews/TableResizer.js +7 -7
- package/dist/es2019/nodeviews/TableRow.js +21 -21
- package/dist/es2019/pm-plugins/table-resizing/plugin.js +3 -3
- package/dist/es2019/pm-plugins/table-resizing/utils/resize-state.js +4 -4
- package/dist/es2019/pm-plugins/table-resizing/utils/scale-table.js +3 -3
- package/dist/es2019/ui/FloatingContextualMenu/styles.js +47 -47
- package/dist/es2019/ui/FloatingDragMenu/styles.js +30 -30
- package/dist/es2019/ui/common-styles.js +802 -816
- package/dist/es2019/ui/ui-styles.js +665 -678
- package/dist/es2019/utils/merged-cells.js +3 -3
- package/dist/esm/commands/misc.js +3 -3
- package/dist/esm/nodeviews/TableCell.js +10 -10
- package/dist/esm/nodeviews/TableContainer.js +42 -7
- package/dist/esm/nodeviews/TableResizer.js +7 -7
- package/dist/esm/nodeviews/TableRow.js +23 -23
- package/dist/esm/pm-plugins/table-resizing/plugin.js +3 -3
- package/dist/esm/pm-plugins/table-resizing/utils/resize-state.js +4 -4
- package/dist/esm/pm-plugins/table-resizing/utils/scale-table.js +3 -3
- package/dist/esm/ui/FloatingContextualMenu/styles.js +1 -1
- package/dist/esm/ui/FloatingDragMenu/styles.js +1 -1
- package/dist/esm/ui/common-styles.js +13 -13
- package/dist/esm/ui/ui-styles.js +25 -25
- package/dist/esm/utils/merged-cells.js +3 -3
- package/dist/types/pm-plugins/decorations/utils/index.d.ts +1 -1
- package/dist/types/pm-plugins/drag-and-drop/utils/autoscrollers.d.ts +1 -1
- package/dist/types/pm-plugins/drag-and-drop/utils/getDragBehaviour.d.ts +1 -1
- package/dist/types/pm-plugins/table-resizing/utils/index.d.ts +1 -1
- package/dist/types/ui/ColumnResizeWidget/index.d.ts +1 -1
- package/dist/types/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.d.ts +1 -1
- package/dist/types/ui/FloatingToolbarLabel/FloatingToolbarLabel.d.ts +1 -1
- package/dist/types/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.d.ts +1 -1
- package/dist/types/ui/TableFloatingControls/CornerControls/index.d.ts +1 -1
- package/dist/types/ui/icons/DragHandleDisabledIcon.d.ts +1 -1
- package/dist/types-ts4.5/pm-plugins/decorations/utils/index.d.ts +1 -1
- package/dist/types-ts4.5/pm-plugins/drag-and-drop/utils/autoscrollers.d.ts +1 -1
- package/dist/types-ts4.5/pm-plugins/drag-and-drop/utils/getDragBehaviour.d.ts +1 -1
- package/dist/types-ts4.5/pm-plugins/table-resizing/utils/index.d.ts +1 -1
- package/dist/types-ts4.5/ui/ColumnResizeWidget/index.d.ts +1 -1
- package/dist/types-ts4.5/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.d.ts +1 -1
- package/dist/types-ts4.5/ui/FloatingToolbarLabel/FloatingToolbarLabel.d.ts +1 -1
- package/dist/types-ts4.5/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.d.ts +1 -1
- package/dist/types-ts4.5/ui/TableFloatingControls/CornerControls/index.d.ts +1 -1
- package/dist/types-ts4.5/ui/icons/DragHandleDisabledIcon.d.ts +1 -1
- package/docs/0-intro.tsx +9 -7
- package/package.json +2 -2
- package/report.api.md +67 -66
- package/src/commands/clear.ts +36 -44
- package/src/commands/collapse.ts +8 -8
- package/src/commands/column-resize.ts +412 -452
- package/src/commands/delete.ts +14 -14
- package/src/commands/display-mode.ts +10 -11
- package/src/commands/go-to-next-cell.ts +48 -54
- package/src/commands/hover.ts +210 -227
- package/src/commands/index.ts +35 -35
- package/src/commands/insert.ts +208 -235
- package/src/commands/misc.ts +655 -748
- package/src/commands/referentiality.ts +9 -9
- package/src/commands/selection.ts +433 -563
- package/src/commands/sort.ts +68 -86
- package/src/commands/split-cell.ts +14 -14
- package/src/commands/toggle.ts +69 -67
- package/src/commands-with-analytics.ts +570 -639
- package/src/create-plugin-config.ts +13 -13
- package/src/event-handlers.ts +513 -612
- package/src/handlers.ts +120 -133
- package/src/nodeviews/ExternalDropTargets.tsx +68 -73
- package/src/nodeviews/OverflowShadowsObserver.ts +148 -157
- package/src/nodeviews/TableCell.ts +47 -54
- package/src/nodeviews/TableComponent.tsx +1018 -1112
- package/src/nodeviews/TableComponentWithSharedState.tsx +91 -94
- package/src/nodeviews/TableContainer.tsx +363 -339
- package/src/nodeviews/TableNodeViewBase.ts +19 -24
- package/src/nodeviews/TableResizer.tsx +565 -657
- package/src/nodeviews/TableRow.ts +580 -629
- package/src/nodeviews/TableStickyScrollbar.ts +173 -190
- package/src/nodeviews/__mocks__/OverflowShadowsObserver.ts +8 -8
- package/src/nodeviews/__mocks__/OverridableMock.ts +14 -15
- package/src/nodeviews/table.tsx +345 -375
- package/src/nodeviews/types.ts +21 -24
- package/src/nodeviews/update-overflow-shadows.ts +8 -14
- package/src/plugin.tsx +578 -603
- package/src/pm-plugins/analytics/actions.ts +10 -12
- package/src/pm-plugins/analytics/commands.ts +31 -37
- package/src/pm-plugins/analytics/plugin-factory.ts +4 -2
- package/src/pm-plugins/analytics/plugin-key.ts +1 -3
- package/src/pm-plugins/analytics/plugin.ts +60 -70
- package/src/pm-plugins/analytics/reducer.ts +19 -19
- package/src/pm-plugins/analytics/types.ts +10 -10
- package/src/pm-plugins/analytics/utils/moved-event.ts +38 -38
- package/src/pm-plugins/decorations/plugin.ts +58 -77
- package/src/pm-plugins/decorations/utils/column-controls.ts +59 -71
- package/src/pm-plugins/decorations/utils/column-resizing.ts +50 -57
- package/src/pm-plugins/decorations/utils/compose-decorations.ts +6 -6
- package/src/pm-plugins/decorations/utils/index.ts +3 -6
- package/src/pm-plugins/decorations/utils/types.ts +7 -12
- package/src/pm-plugins/default-table-selection.ts +3 -3
- package/src/pm-plugins/drag-and-drop/actions.ts +25 -25
- package/src/pm-plugins/drag-and-drop/commands-with-analytics.ts +158 -190
- package/src/pm-plugins/drag-and-drop/commands.ts +154 -170
- package/src/pm-plugins/drag-and-drop/consts.ts +4 -5
- package/src/pm-plugins/drag-and-drop/plugin-factory.ts +23 -20
- package/src/pm-plugins/drag-and-drop/plugin-key.ts +1 -3
- package/src/pm-plugins/drag-and-drop/plugin.ts +329 -383
- package/src/pm-plugins/drag-and-drop/reducer.ts +30 -30
- package/src/pm-plugins/drag-and-drop/types.ts +8 -8
- package/src/pm-plugins/drag-and-drop/utils/autoscrollers.ts +38 -41
- package/src/pm-plugins/drag-and-drop/utils/getDragBehaviour.ts +3 -6
- package/src/pm-plugins/drag-and-drop/utils/monitor.ts +57 -70
- package/src/pm-plugins/keymap.ts +208 -220
- package/src/pm-plugins/main.ts +348 -400
- package/src/pm-plugins/plugin-factory.ts +32 -34
- package/src/pm-plugins/safari-delete-composition-text-issue-workaround.ts +83 -97
- package/src/pm-plugins/sticky-headers/commands.ts +2 -6
- package/src/pm-plugins/sticky-headers/plugin-key.ts +1 -3
- package/src/pm-plugins/sticky-headers/plugin-state.ts +41 -44
- package/src/pm-plugins/sticky-headers/plugin.ts +4 -4
- package/src/pm-plugins/sticky-headers/types.ts +8 -8
- package/src/pm-plugins/sticky-headers/util.ts +10 -10
- package/src/pm-plugins/table-analytics.ts +70 -72
- package/src/pm-plugins/table-local-id.ts +180 -184
- package/src/pm-plugins/table-resizing/commands.ts +72 -85
- package/src/pm-plugins/table-resizing/event-handlers.ts +298 -317
- package/src/pm-plugins/table-resizing/plugin-factory.ts +10 -10
- package/src/pm-plugins/table-resizing/plugin-key.ts +1 -3
- package/src/pm-plugins/table-resizing/plugin.ts +61 -68
- package/src/pm-plugins/table-resizing/reducer.ts +30 -33
- package/src/pm-plugins/table-resizing/utils/colgroup.ts +84 -84
- package/src/pm-plugins/table-resizing/utils/column-state.ts +78 -81
- package/src/pm-plugins/table-resizing/utils/content-width.ts +94 -114
- package/src/pm-plugins/table-resizing/utils/dom.ts +93 -110
- package/src/pm-plugins/table-resizing/utils/index.ts +29 -34
- package/src/pm-plugins/table-resizing/utils/misc.ts +94 -119
- package/src/pm-plugins/table-resizing/utils/resize-column.ts +93 -106
- package/src/pm-plugins/table-resizing/utils/resize-logic.ts +240 -257
- package/src/pm-plugins/table-resizing/utils/resize-state.ts +343 -372
- package/src/pm-plugins/table-resizing/utils/scale-table.ts +202 -207
- package/src/pm-plugins/table-resizing/utils/types.ts +17 -17
- package/src/pm-plugins/table-resizing/utils/unit-to-number.ts +1 -2
- package/src/pm-plugins/table-selection-keymap.ts +25 -51
- package/src/pm-plugins/table-width.ts +191 -204
- package/src/pm-plugins/view-mode-sort/index.ts +223 -227
- package/src/pm-plugins/view-mode-sort/plugin-key.ts +3 -2
- package/src/pm-plugins/view-mode-sort/types.ts +12 -12
- package/src/pm-plugins/view-mode-sort/utils.ts +108 -117
- package/src/reducer.ts +139 -155
- package/src/toolbar.tsx +815 -905
- package/src/transforms/column-width.ts +186 -213
- package/src/transforms/delete-columns.ts +208 -222
- package/src/transforms/delete-rows.ts +117 -121
- package/src/transforms/fix-tables.ts +190 -215
- package/src/transforms/merge.ts +263 -269
- package/src/transforms/replace-table.ts +27 -43
- package/src/transforms/split.ts +65 -75
- package/src/types.ts +421 -427
- package/src/ui/ColumnResizeWidget/index.tsx +40 -47
- package/src/ui/DragHandle/HandleIconComponent.tsx +9 -13
- package/src/ui/DragHandle/index.tsx +221 -250
- package/src/ui/DragPreview/index.tsx +35 -35
- package/src/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.tsx +33 -41
- package/src/ui/FloatingContextualButton/FixedButton.tsx +154 -157
- package/src/ui/FloatingContextualButton/index.tsx +109 -115
- package/src/ui/FloatingContextualButton/styles.ts +43 -46
- package/src/ui/FloatingContextualMenu/ContextualMenu.tsx +634 -694
- package/src/ui/FloatingContextualMenu/index.tsx +83 -101
- package/src/ui/FloatingContextualMenu/styles.ts +57 -65
- package/src/ui/FloatingDeleteButton/DeleteButton.tsx +37 -37
- package/src/ui/FloatingDeleteButton/getPopUpOptions.ts +47 -57
- package/src/ui/FloatingDeleteButton/index.tsx +319 -350
- package/src/ui/FloatingDragMenu/DragMenu.tsx +555 -596
- package/src/ui/FloatingDragMenu/DropdownMenu.tsx +152 -162
- package/src/ui/FloatingDragMenu/index.tsx +88 -102
- package/src/ui/FloatingDragMenu/styles.ts +51 -54
- package/src/ui/FloatingInsertButton/InsertButton.tsx +204 -217
- package/src/ui/FloatingInsertButton/getPopupOptions.ts +100 -115
- package/src/ui/FloatingInsertButton/index.tsx +248 -292
- package/src/ui/FloatingToolbarLabel/FloatingToolbarLabel.tsx +24 -29
- package/src/ui/TableFloatingColumnControls/ColumnControls/index.tsx +308 -329
- package/src/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.tsx +85 -94
- package/src/ui/TableFloatingColumnControls/ColumnDropTargets/index.tsx +46 -46
- package/src/ui/TableFloatingColumnControls/index.tsx +116 -136
- package/src/ui/TableFloatingControls/CornerControls/ClassicCornerControls.tsx +79 -91
- package/src/ui/TableFloatingControls/CornerControls/DragCornerControls.tsx +95 -102
- package/src/ui/TableFloatingControls/CornerControls/index.tsx +1 -4
- package/src/ui/TableFloatingControls/CornerControls/types.ts +8 -8
- package/src/ui/TableFloatingControls/FloatingControlsWithSelection.tsx +50 -50
- package/src/ui/TableFloatingControls/NumberColumn/index.tsx +111 -124
- package/src/ui/TableFloatingControls/RowControls/ClassicControls.tsx +86 -105
- package/src/ui/TableFloatingControls/RowControls/DragControls.tsx +305 -341
- package/src/ui/TableFloatingControls/RowDropTarget/index.tsx +72 -75
- package/src/ui/TableFloatingControls/index.tsx +191 -193
- package/src/ui/TableFullWidthLabel/index.tsx +20 -20
- package/src/ui/common-styles.ts +880 -912
- package/src/ui/consts.ts +29 -74
- package/src/ui/icons/AddColLeftIcon.tsx +33 -39
- package/src/ui/icons/AddColRightIcon.tsx +33 -39
- package/src/ui/icons/AddRowAboveIcon.tsx +16 -22
- package/src/ui/icons/AddRowBelowIcon.tsx +33 -39
- package/src/ui/icons/DisplayModeIcon.tsx +31 -31
- package/src/ui/icons/DragHandleDisabledIcon.tsx +19 -21
- package/src/ui/icons/DragHandleIcon.tsx +12 -12
- package/src/ui/icons/DragInMotionIcon.tsx +45 -52
- package/src/ui/icons/MergeCellsIcon.tsx +22 -28
- package/src/ui/icons/MinimisedHandle.tsx +9 -9
- package/src/ui/icons/SplitCellIcon.tsx +30 -36
- package/src/ui/ui-styles.ts +769 -798
- package/src/utils/alignment.ts +1 -1
- package/src/utils/analytics.ts +192 -208
- package/src/utils/collapse.ts +55 -64
- package/src/utils/column-controls.ts +237 -254
- package/src/utils/create.ts +30 -30
- package/src/utils/decoration.ts +482 -502
- package/src/utils/dom.ts +127 -134
- package/src/utils/drag-menu.ts +322 -373
- package/src/utils/get-allow-add-column-custom-step.ts +4 -5
- package/src/utils/guidelines.ts +10 -21
- package/src/utils/index.ts +68 -68
- package/src/utils/merged-cells.ts +245 -254
- package/src/utils/nodes.ts +91 -106
- package/src/utils/paste.ts +119 -135
- package/src/utils/row-controls.ts +199 -213
- package/src/utils/selection.ts +77 -87
- package/src/utils/snapping.ts +84 -97
- package/src/utils/table.ts +44 -44
- package/src/utils/transforms.ts +5 -5
- package/src/utils/update-plugin-state-decorations.ts +5 -9
|
@@ -1,30 +1,20 @@
|
|
|
1
1
|
import type { CellAttributes } from '@atlaskit/adf-schema';
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
getParentNodeWidth,
|
|
4
|
+
getTableContainerWidth,
|
|
5
|
+
layoutToWidth,
|
|
6
6
|
} from '@atlaskit/editor-common/node-width';
|
|
7
7
|
import { calcTableWidth } from '@atlaskit/editor-common/styles';
|
|
8
8
|
import type { GetEditorContainerWidth } from '@atlaskit/editor-common/types';
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
} from '@atlaskit/editor-common/ui';
|
|
13
|
-
import {
|
|
14
|
-
calcTableColumnWidths,
|
|
15
|
-
containsClassName,
|
|
16
|
-
} from '@atlaskit/editor-common/utils';
|
|
17
|
-
import type {
|
|
18
|
-
NodeSpec,
|
|
19
|
-
Node as PMNode,
|
|
20
|
-
ResolvedPos,
|
|
21
|
-
} from '@atlaskit/editor-prosemirror/model';
|
|
9
|
+
import { getBreakpoint, mapBreakpointToLayoutMaxWidth } from '@atlaskit/editor-common/ui';
|
|
10
|
+
import { calcTableColumnWidths, containsClassName } from '@atlaskit/editor-common/utils';
|
|
11
|
+
import type { NodeSpec, Node as PMNode, ResolvedPos } from '@atlaskit/editor-prosemirror/model';
|
|
22
12
|
import type { EditorState } from '@atlaskit/editor-prosemirror/state';
|
|
23
13
|
import type { EditorView } from '@atlaskit/editor-prosemirror/view';
|
|
24
14
|
import {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
15
|
+
akEditorFullWidthLayoutWidth,
|
|
16
|
+
akEditorGutterPadding,
|
|
17
|
+
akEditorTableNumberColumnWidth,
|
|
28
18
|
} from '@atlaskit/editor-shared-styles';
|
|
29
19
|
|
|
30
20
|
import type { TableOptions } from '../../../nodeviews/types';
|
|
@@ -34,108 +24,99 @@ import { MAX_SCALING_PERCENT } from './consts';
|
|
|
34
24
|
|
|
35
25
|
// Translates named layouts in number values.
|
|
36
26
|
export function getLayoutSize(
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
27
|
+
tableLayout: 'default' | 'wide' | 'full-width',
|
|
28
|
+
containerWidth: number = 0,
|
|
29
|
+
options: TableOptions,
|
|
40
30
|
): number {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
true,
|
|
56
|
-
);
|
|
57
|
-
if (calculatedTableWidth !== 'inherit') {
|
|
58
|
-
return calculatedTableWidth;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
return layoutToWidth[tableLayout] || containerWidth;
|
|
31
|
+
const { isFullWidthModeEnabled } = options;
|
|
32
|
+
|
|
33
|
+
if (isFullWidthModeEnabled) {
|
|
34
|
+
return containerWidth
|
|
35
|
+
? Math.min(containerWidth - akEditorGutterPadding * 2, akEditorFullWidthLayoutWidth)
|
|
36
|
+
: akEditorFullWidthLayoutWidth;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const calculatedTableWidth = calcTableWidth(tableLayout, containerWidth, true);
|
|
40
|
+
if (calculatedTableWidth !== 'inherit') {
|
|
41
|
+
return calculatedTableWidth;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return layoutToWidth[tableLayout] || containerWidth;
|
|
62
45
|
}
|
|
63
46
|
|
|
64
47
|
export function getDefaultLayoutMaxWidth(containerWidth?: number): number {
|
|
65
|
-
|
|
48
|
+
return mapBreakpointToLayoutMaxWidth(getBreakpoint(containerWidth));
|
|
66
49
|
}
|
|
67
50
|
|
|
68
51
|
// Does the current position point at a cell.
|
|
69
52
|
export function pointsAtCell($pos: ResolvedPos) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
53
|
+
return (
|
|
54
|
+
($pos.parent.type.spec as NodeSpec & { tableRole: string }).tableRole === 'row' &&
|
|
55
|
+
$pos.nodeAfter
|
|
56
|
+
);
|
|
74
57
|
}
|
|
75
58
|
|
|
76
59
|
// Get the current col width, handles colspan.
|
|
77
60
|
export function currentColWidth(
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
61
|
+
view: EditorView,
|
|
62
|
+
cellPos: number,
|
|
63
|
+
{ colspan, colwidth }: CellAttributes,
|
|
81
64
|
): number {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
65
|
+
let width = colwidth && colwidth[colwidth.length - 1];
|
|
66
|
+
if (width) {
|
|
67
|
+
return width;
|
|
68
|
+
}
|
|
69
|
+
// Not fixed, read current width from DOM
|
|
70
|
+
let domWidth = (view.domAtPos(cellPos + 1).node as HTMLElement).offsetWidth;
|
|
71
|
+
let parts = colspan || 0;
|
|
72
|
+
if (colwidth) {
|
|
73
|
+
for (let i = 0; i < (colspan || 0); i++) {
|
|
74
|
+
if (colwidth[i]) {
|
|
75
|
+
domWidth -= colwidth[i];
|
|
76
|
+
parts--;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return domWidth / parts;
|
|
99
82
|
}
|
|
100
83
|
|
|
101
84
|
// Attempts to find a parent TD/TH depending on target element.
|
|
102
85
|
export function domCellAround(target: HTMLElement | null): HTMLElement | null {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
86
|
+
while (target && target.nodeName !== 'TD' && target.nodeName !== 'TH') {
|
|
87
|
+
target = containsClassName(target, 'ProseMirror')
|
|
88
|
+
? null
|
|
89
|
+
: (target.parentNode as HTMLElement | null);
|
|
90
|
+
}
|
|
91
|
+
return target;
|
|
109
92
|
}
|
|
110
93
|
|
|
111
94
|
interface getTableMaxWidthProps {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
95
|
+
table: PMNode;
|
|
96
|
+
tableStart: number;
|
|
97
|
+
state: EditorState;
|
|
98
|
+
layout: 'default' | 'wide' | 'full-width';
|
|
99
|
+
getEditorContainerWidth: GetEditorContainerWidth;
|
|
117
100
|
}
|
|
118
101
|
|
|
119
102
|
export const getTableMaxWidth = ({
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
103
|
+
table,
|
|
104
|
+
tableStart,
|
|
105
|
+
state,
|
|
106
|
+
layout,
|
|
107
|
+
getEditorContainerWidth,
|
|
125
108
|
}: getTableMaxWidthProps) => {
|
|
126
|
-
|
|
127
|
-
|
|
109
|
+
const containerWidth = getEditorContainerWidth();
|
|
110
|
+
const parentWidth = getParentNodeWidth(tableStart, state, containerWidth);
|
|
128
111
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
table.attrs.width ||
|
|
132
|
-
getLayoutSize(layout, containerWidth.width, {});
|
|
112
|
+
let maxWidth =
|
|
113
|
+
parentWidth || table.attrs.width || getLayoutSize(layout, containerWidth.width, {});
|
|
133
114
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
115
|
+
if (table.attrs.isNumberColumnEnabled) {
|
|
116
|
+
maxWidth -= akEditorTableNumberColumnWidth;
|
|
117
|
+
}
|
|
137
118
|
|
|
138
|
-
|
|
119
|
+
return maxWidth as number;
|
|
139
120
|
};
|
|
140
121
|
|
|
141
122
|
/**
|
|
@@ -144,37 +125,31 @@ export const getTableMaxWidth = ({
|
|
|
144
125
|
* @returns calculated width of <table /> element derived from sum of colwidths on tableCell or tableHeader nodes or falls back to container width
|
|
145
126
|
*/
|
|
146
127
|
export const getTableElementWidth = (table: PMNode) => {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
128
|
+
if (hasTableBeenResized(table)) {
|
|
129
|
+
// TODO: is there a scenario where ADF columns are SMALLER than container width?
|
|
130
|
+
return calcTableColumnWidths(table).reduce((sum, width) => sum + width, 0);
|
|
131
|
+
}
|
|
151
132
|
|
|
152
|
-
|
|
133
|
+
return getTableContainerElementWidth(table);
|
|
153
134
|
};
|
|
154
135
|
|
|
155
136
|
export const getTableContainerElementWidth = (table: PMNode) => {
|
|
156
|
-
|
|
137
|
+
return getTableContainerWidth(table);
|
|
157
138
|
};
|
|
158
139
|
|
|
159
|
-
export const getTableScalingPercent = (
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
let scalePercent = (renderWidth - 1) / tableWidth;
|
|
167
|
-
scalePercent = Math.max(scalePercent, 1 - MAX_SCALING_PERCENT);
|
|
168
|
-
return Math.min(scalePercent, 1);
|
|
140
|
+
export const getTableScalingPercent = (table: PMNode, tableRef: HTMLElement | null) => {
|
|
141
|
+
const tableWidth = getTableContainerElementWidth(table);
|
|
142
|
+
let renderWidth = tableRef?.parentElement?.clientWidth || tableWidth;
|
|
143
|
+
// minus 1 here to avoid any 1px scroll in Firefox
|
|
144
|
+
let scalePercent = (renderWidth - 1) / tableWidth;
|
|
145
|
+
scalePercent = Math.max(scalePercent, 1 - MAX_SCALING_PERCENT);
|
|
146
|
+
return Math.min(scalePercent, 1);
|
|
169
147
|
};
|
|
170
148
|
|
|
171
|
-
export const getStaticTableScalingPercent = (
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
)
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
let scalePercent = (tableRenderWidth - 1) / tableWidth;
|
|
178
|
-
scalePercent = Math.max(scalePercent, 1 - MAX_SCALING_PERCENT);
|
|
179
|
-
return Math.min(scalePercent, 1);
|
|
149
|
+
export const getStaticTableScalingPercent = (table: PMNode, tableRenderWidth: number) => {
|
|
150
|
+
const tableWidth = getTableContainerElementWidth(table);
|
|
151
|
+
// minus 1 here to avoid any 1px scroll in Firefox
|
|
152
|
+
let scalePercent = (tableRenderWidth - 1) / tableWidth;
|
|
153
|
+
scalePercent = Math.max(scalePercent, 1 - MAX_SCALING_PERCENT);
|
|
154
|
+
return Math.min(scalePercent, 1);
|
|
180
155
|
};
|
|
@@ -9,124 +9,111 @@ import { updateColgroup } from './resize-state';
|
|
|
9
9
|
import type { ResizeState } from './types';
|
|
10
10
|
|
|
11
11
|
export const resizeColumn = (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
resizeState: ResizeState,
|
|
13
|
+
colIndex: number,
|
|
14
|
+
amount: number,
|
|
15
|
+
tableRef: HTMLElement | null,
|
|
16
|
+
tableNode: PmNode,
|
|
17
|
+
selectedColumns?: number[],
|
|
18
|
+
isTableScalingEnabled = false,
|
|
19
19
|
): ResizeState => {
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
let scalePercent = 1;
|
|
21
|
+
let resizeAmount = amount;
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
if (isTableScalingEnabled) {
|
|
24
|
+
scalePercent = getTableScalingPercent(tableNode, tableRef);
|
|
25
|
+
resizeAmount = amount / scalePercent;
|
|
26
|
+
}
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
const newState =
|
|
29
|
+
resizeAmount > 0
|
|
30
|
+
? growColumn(resizeState, colIndex, resizeAmount, selectedColumns)
|
|
31
|
+
: resizeAmount < 0
|
|
32
|
+
? shrinkColumn(resizeState, colIndex, resizeAmount, selectedColumns)
|
|
33
|
+
: resizeState;
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
updateColgroup(newState, tableRef, tableNode, isTableScalingEnabled);
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
return newState;
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
// try not scale table during resize
|
|
41
41
|
export const resizeColumnAndTable = (
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
42
|
+
resizeState: ResizeState,
|
|
43
|
+
colIndex: number,
|
|
44
|
+
amount: number,
|
|
45
|
+
tableRef: HTMLElement,
|
|
46
|
+
tableNode: PmNode,
|
|
47
|
+
selectedColumns?: number[],
|
|
48
|
+
isTableScalingEnabled = false,
|
|
49
|
+
originalTableWidth?: number,
|
|
50
50
|
): ResizeState => {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
if (!isOverflowed) {
|
|
102
|
-
updateTablePreview(delta, tableRef, tableNode);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
return {
|
|
106
|
-
...newState,
|
|
107
|
-
tableWidth: isOverflowed
|
|
108
|
-
? tableContainerWidth
|
|
109
|
-
: resizeState.tableWidth + delta,
|
|
110
|
-
};
|
|
51
|
+
// TODO: can we use document state, and apply scaling factor?
|
|
52
|
+
const tableWidth = tableRef.clientWidth;
|
|
53
|
+
const tableContainerWidth = tableRef.closest('.pm-table-container')?.clientWidth;
|
|
54
|
+
|
|
55
|
+
const isOverflowed = !!(tableWidth && tableContainerWidth && tableWidth > tableContainerWidth);
|
|
56
|
+
|
|
57
|
+
let resizeAmount = amount * 2;
|
|
58
|
+
|
|
59
|
+
// todo: reimplement - use getTableScalingPercentFrozen to get scaled percent before table width changes dynamically
|
|
60
|
+
// let scalePercent = 1;
|
|
61
|
+
// if (isTableScalingEnabled) {
|
|
62
|
+
// import from ./misc
|
|
63
|
+
// scalePercent = getStaticTableScalingPercent(
|
|
64
|
+
// tableNode,
|
|
65
|
+
// originalTableWidth || resizeState.maxSize,
|
|
66
|
+
// );
|
|
67
|
+
// resizeAmount = amount / scalePercent;
|
|
68
|
+
// }
|
|
69
|
+
|
|
70
|
+
// need to look at the resize amount and try to adjust the colgroups
|
|
71
|
+
if (isOverflowed) {
|
|
72
|
+
resizeAmount =
|
|
73
|
+
amount < 0
|
|
74
|
+
? amount
|
|
75
|
+
: resizeAmount - (tableNode.attrs.width + resizeAmount - tableContainerWidth) / 2;
|
|
76
|
+
} else {
|
|
77
|
+
resizeAmount =
|
|
78
|
+
amount > 0 && tableContainerWidth
|
|
79
|
+
? resizeAmount - (tableNode.attrs.width + resizeAmount - tableContainerWidth) / 2
|
|
80
|
+
: resizeAmount;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const newState = updateAffectedColumn(resizeState, colIndex, resizeAmount);
|
|
84
|
+
|
|
85
|
+
// this function only updates the colgroup in DOM, it reverses the scalePercent
|
|
86
|
+
// todo: change isScalingEnabled to true when reimplementing scaling
|
|
87
|
+
updateColgroup(newState, tableRef, tableNode, false);
|
|
88
|
+
|
|
89
|
+
// use the difference in width from affected column to update overall table width
|
|
90
|
+
const delta = newState.cols[colIndex].width - resizeState.cols[colIndex].width;
|
|
91
|
+
|
|
92
|
+
if (!isOverflowed) {
|
|
93
|
+
updateTablePreview(delta, tableRef, tableNode);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return {
|
|
97
|
+
...newState,
|
|
98
|
+
tableWidth: isOverflowed ? tableContainerWidth : resizeState.tableWidth + delta,
|
|
99
|
+
};
|
|
111
100
|
};
|
|
112
101
|
|
|
113
102
|
const updateTablePreview = (
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
103
|
+
resizeAmount: number,
|
|
104
|
+
tableRef: HTMLElement | null,
|
|
105
|
+
tableNode: PmNode,
|
|
117
106
|
) => {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
(resizingItem as HTMLElement).style.width = newWidth;
|
|
131
|
-
}
|
|
107
|
+
const currentWidth = getTableContainerElementWidth(tableNode);
|
|
108
|
+
const resizingContainer = tableRef?.closest(`.${ClassName.TABLE_RESIZER_CONTAINER}`);
|
|
109
|
+
const resizingItem = resizingContainer?.querySelector('.resizer-item');
|
|
110
|
+
|
|
111
|
+
if (resizingItem) {
|
|
112
|
+
const newWidth = `${currentWidth + resizeAmount}px`;
|
|
113
|
+
if (tableRef) {
|
|
114
|
+
tableRef.style.width = newWidth;
|
|
115
|
+
}
|
|
116
|
+
(resizingContainer as HTMLElement).style.width = newWidth;
|
|
117
|
+
(resizingItem as HTMLElement).style.width = newWidth;
|
|
118
|
+
}
|
|
132
119
|
};
|