@atlaskit/editor-plugin-table 12.2.6 → 12.2.7
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 +8 -0
- package/package.json +4 -4
- package/afm-cc/tsconfig.json +0 -123
- package/afm-dev-agents/tsconfig.json +0 -123
- package/afm-jira/tsconfig.json +0 -123
- package/afm-passionfruit/tsconfig.json +0 -123
- package/afm-post-office/tsconfig.json +0 -123
- package/afm-rovo-extension/tsconfig.json +0 -123
- package/afm-townsquare/tsconfig.json +0 -123
- package/afm-volt/tsconfig.json +0 -114
- package/build/tsconfig.json +0 -23
- package/docs/0-intro.tsx +0 -57
- package/src/index.ts +0 -21
- package/src/nodeviews/ExternalDropTargets.tsx +0 -91
- package/src/nodeviews/OverflowShadowsObserver.ts +0 -156
- package/src/nodeviews/TableCell.ts +0 -134
- package/src/nodeviews/TableComponent.tsx +0 -1590
- package/src/nodeviews/TableComponentWithSharedState.tsx +0 -278
- package/src/nodeviews/TableContainer.tsx +0 -926
- package/src/nodeviews/TableNodeViewBase.ts +0 -29
- package/src/nodeviews/TableResizer.tsx +0 -884
- package/src/nodeviews/TableRow.ts +0 -830
- package/src/nodeviews/TableStickyScrollbar.ts +0 -211
- package/src/nodeviews/__mocks__/OverflowShadowsObserver.ts +0 -15
- package/src/nodeviews/__mocks__/OverridableMock.ts +0 -26
- package/src/nodeviews/table-container-styles.ts +0 -9
- package/src/nodeviews/table-node-views.ts +0 -76
- package/src/nodeviews/table.tsx +0 -530
- package/src/nodeviews/toDOM.ts +0 -244
- package/src/nodeviews/types.ts +0 -36
- package/src/nodeviews/update-overflow-shadows.ts +0 -11
- package/src/pm-plugins/analytics/actions.ts +0 -21
- package/src/pm-plugins/analytics/commands.ts +0 -47
- package/src/pm-plugins/analytics/plugin-factory.ts +0 -9
- package/src/pm-plugins/analytics/plugin-key.ts +0 -5
- package/src/pm-plugins/analytics/plugin.ts +0 -80
- package/src/pm-plugins/analytics/reducer.ts +0 -27
- package/src/pm-plugins/analytics/types.ts +0 -20
- package/src/pm-plugins/analytics/utils/moved-event.ts +0 -51
- package/src/pm-plugins/commands/clear.ts +0 -43
- package/src/pm-plugins/commands/collapse.ts +0 -17
- package/src/pm-plugins/commands/column-resize.ts +0 -478
- package/src/pm-plugins/commands/commands-with-analytics.ts +0 -715
- package/src/pm-plugins/commands/delete.ts +0 -42
- package/src/pm-plugins/commands/display-mode.ts +0 -18
- package/src/pm-plugins/commands/go-to-next-cell.ts +0 -198
- package/src/pm-plugins/commands/hover.ts +0 -242
- package/src/pm-plugins/commands/index.ts +0 -51
- package/src/pm-plugins/commands/insert.ts +0 -438
- package/src/pm-plugins/commands/misc.ts +0 -811
- package/src/pm-plugins/commands/referentiality.ts +0 -15
- package/src/pm-plugins/commands/selection.ts +0 -537
- package/src/pm-plugins/commands/sort.ts +0 -102
- package/src/pm-plugins/commands/split-cell.ts +0 -28
- package/src/pm-plugins/commands/toggle.ts +0 -109
- package/src/pm-plugins/create-plugin-config.ts +0 -17
- package/src/pm-plugins/decorations/plugin.ts +0 -107
- package/src/pm-plugins/decorations/utils/column-controls.ts +0 -91
- package/src/pm-plugins/decorations/utils/column-resizing.ts +0 -71
- package/src/pm-plugins/decorations/utils/compose-decorations.ts +0 -9
- package/src/pm-plugins/decorations/utils/types.ts +0 -16
- package/src/pm-plugins/default-table-selection.ts +0 -14
- package/src/pm-plugins/drag-and-drop/actions.ts +0 -48
- package/src/pm-plugins/drag-and-drop/commands-with-analytics.ts +0 -222
- package/src/pm-plugins/drag-and-drop/commands.ts +0 -194
- package/src/pm-plugins/drag-and-drop/consts.ts +0 -7
- package/src/pm-plugins/drag-and-drop/plugin-factory.ts +0 -33
- package/src/pm-plugins/drag-and-drop/plugin-key.ts +0 -5
- package/src/pm-plugins/drag-and-drop/plugin.ts +0 -398
- package/src/pm-plugins/drag-and-drop/reducer.ts +0 -38
- package/src/pm-plugins/drag-and-drop/types.ts +0 -18
- package/src/pm-plugins/drag-and-drop/utils/autoscrollers.ts +0 -49
- package/src/pm-plugins/drag-and-drop/utils/getDragBehaviour.ts +0 -9
- package/src/pm-plugins/drag-and-drop/utils/monitor.ts +0 -73
- package/src/pm-plugins/handlers.ts +0 -161
- package/src/pm-plugins/keymap.ts +0 -436
- package/src/pm-plugins/main.ts +0 -433
- package/src/pm-plugins/plugin-factory.ts +0 -42
- package/src/pm-plugins/plugin-key.ts +0 -8
- package/src/pm-plugins/reducer.ts +0 -145
- package/src/pm-plugins/safari-delete-composition-text-issue-workaround.ts +0 -102
- package/src/pm-plugins/sticky-headers/commands.ts +0 -8
- package/src/pm-plugins/sticky-headers/plugin-key.ts +0 -5
- package/src/pm-plugins/sticky-headers/plugin-state.ts +0 -52
- package/src/pm-plugins/sticky-headers/plugin.ts +0 -12
- package/src/pm-plugins/sticky-headers/types.ts +0 -20
- package/src/pm-plugins/sticky-headers/util.ts +0 -18
- package/src/pm-plugins/table-analytics.ts +0 -100
- package/src/pm-plugins/table-local-id.ts +0 -213
- package/src/pm-plugins/table-resizing/commands.ts +0 -116
- package/src/pm-plugins/table-resizing/event-handlers.ts +0 -352
- package/src/pm-plugins/table-resizing/plugin-factory.ts +0 -29
- package/src/pm-plugins/table-resizing/plugin-key.ts +0 -5
- package/src/pm-plugins/table-resizing/plugin.ts +0 -94
- package/src/pm-plugins/table-resizing/reducer.ts +0 -37
- package/src/pm-plugins/table-resizing/utils/colgroup.ts +0 -306
- package/src/pm-plugins/table-resizing/utils/column-state.ts +0 -120
- package/src/pm-plugins/table-resizing/utils/consts.ts +0 -11
- package/src/pm-plugins/table-resizing/utils/content-width.ts +0 -118
- package/src/pm-plugins/table-resizing/utils/dom.ts +0 -132
- package/src/pm-plugins/table-resizing/utils/misc.ts +0 -282
- package/src/pm-plugins/table-resizing/utils/resize-column.ts +0 -34
- package/src/pm-plugins/table-resizing/utils/resize-logic.ts +0 -289
- package/src/pm-plugins/table-resizing/utils/resize-state.ts +0 -417
- package/src/pm-plugins/table-resizing/utils/scale-table.ts +0 -290
- package/src/pm-plugins/table-resizing/utils/types.ts +0 -25
- package/src/pm-plugins/table-resizing/utils/unit-to-number.ts +0 -1
- package/src/pm-plugins/table-selection-keymap.ts +0 -64
- package/src/pm-plugins/table-size-selector.ts +0 -39
- package/src/pm-plugins/table-width-in-comment-fix.ts +0 -113
- package/src/pm-plugins/table-width.ts +0 -153
- package/src/pm-plugins/transforms/column-width.ts +0 -249
- package/src/pm-plugins/transforms/delete-columns.ts +0 -281
- package/src/pm-plugins/transforms/delete-rows.ts +0 -154
- package/src/pm-plugins/transforms/fix-tables.ts +0 -249
- package/src/pm-plugins/transforms/merge.ts +0 -301
- package/src/pm-plugins/transforms/replace-table.ts +0 -38
- package/src/pm-plugins/transforms/split.ts +0 -90
- package/src/pm-plugins/utils/alignment.ts +0 -33
- package/src/pm-plugins/utils/analytics.ts +0 -238
- package/src/pm-plugins/utils/collapse.ts +0 -93
- package/src/pm-plugins/utils/column-controls.ts +0 -250
- package/src/pm-plugins/utils/create.ts +0 -64
- package/src/pm-plugins/utils/decoration.ts +0 -672
- package/src/pm-plugins/utils/dom.ts +0 -251
- package/src/pm-plugins/utils/drag-menu.tsx +0 -491
- package/src/pm-plugins/utils/get-allow-add-column-custom-step.ts +0 -10
- package/src/pm-plugins/utils/guidelines.ts +0 -30
- package/src/pm-plugins/utils/merged-cells.ts +0 -239
- package/src/pm-plugins/utils/nodes.ts +0 -162
- package/src/pm-plugins/utils/paste.ts +0 -386
- package/src/pm-plugins/utils/row-controls.ts +0 -211
- package/src/pm-plugins/utils/selection.ts +0 -17
- package/src/pm-plugins/utils/snapping.ts +0 -136
- package/src/pm-plugins/utils/table.ts +0 -60
- package/src/pm-plugins/utils/update-plugin-state-decorations.ts +0 -13
- package/src/pm-plugins/view-mode-sort/consts.ts +0 -3
- package/src/pm-plugins/view-mode-sort/index.ts +0 -291
- package/src/pm-plugins/view-mode-sort/plugin-key.ts +0 -7
- package/src/pm-plugins/view-mode-sort/types.ts +0 -23
- package/src/pm-plugins/view-mode-sort/utils.ts +0 -136
- package/src/tablePlugin.tsx +0 -971
- package/src/tablePluginType.ts +0 -102
- package/src/types/index.ts +0 -592
- package/src/ui/ColumnResizeWidget/index.tsx +0 -61
- package/src/ui/ContentComponent.tsx +0 -311
- package/src/ui/DragHandle/HandleIconComponent.tsx +0 -21
- package/src/ui/DragHandle/index.tsx +0 -391
- package/src/ui/DragPreview/index.tsx +0 -51
- package/src/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.tsx +0 -59
- package/src/ui/FloatingContextualButton/FixedButton.tsx +0 -203
- package/src/ui/FloatingContextualButton/index.tsx +0 -168
- package/src/ui/FloatingContextualButton/styles.ts +0 -69
- package/src/ui/FloatingContextualMenu/ContextualMenu.tsx +0 -931
- package/src/ui/FloatingContextualMenu/index.tsx +0 -141
- package/src/ui/FloatingContextualMenu/styles.ts +0 -77
- package/src/ui/FloatingDeleteButton/DeleteButton.tsx +0 -54
- package/src/ui/FloatingDeleteButton/getPopUpOptions.ts +0 -65
- package/src/ui/FloatingDeleteButton/index.tsx +0 -383
- package/src/ui/FloatingDeleteButton/types.ts +0 -3
- package/src/ui/FloatingDragMenu/DragMenu.tsx +0 -668
- package/src/ui/FloatingDragMenu/DropdownMenu.tsx +0 -221
- package/src/ui/FloatingDragMenu/index.tsx +0 -136
- package/src/ui/FloatingDragMenu/styles.ts +0 -83
- package/src/ui/FloatingInsertButton/InsertButton.tsx +0 -263
- package/src/ui/FloatingInsertButton/getPopupOptions.ts +0 -131
- package/src/ui/FloatingInsertButton/index.tsx +0 -314
- package/src/ui/FloatingToolbarLabel/FloatingToolbarLabel.tsx +0 -31
- package/src/ui/SizeSelector/index.tsx +0 -74
- package/src/ui/TableFloatingColumnControls/ColumnControls/index.tsx +0 -397
- package/src/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.tsx +0 -105
- package/src/ui/TableFloatingColumnControls/ColumnDropTargets/index.tsx +0 -63
- package/src/ui/TableFloatingColumnControls/index.tsx +0 -151
- package/src/ui/TableFloatingControls/CornerControls/ClassicCornerControls.tsx +0 -106
- package/src/ui/TableFloatingControls/CornerControls/DragCornerControls.tsx +0 -143
- package/src/ui/TableFloatingControls/CornerControls/types.ts +0 -12
- package/src/ui/TableFloatingControls/FloatingControlsWithSelection.tsx +0 -88
- package/src/ui/TableFloatingControls/NumberColumn/index.tsx +0 -175
- package/src/ui/TableFloatingControls/RowControls/ClassicControls.tsx +0 -131
- package/src/ui/TableFloatingControls/RowControls/DragControls.tsx +0 -429
- package/src/ui/TableFloatingControls/RowDropTarget/index.tsx +0 -96
- package/src/ui/TableFloatingControls/index.tsx +0 -275
- package/src/ui/TableFullWidthLabel/index.tsx +0 -38
- package/src/ui/common-styles.ts +0 -1218
- package/src/ui/consts.ts +0 -109
- package/src/ui/event-handlers.ts +0 -662
- package/src/ui/global-styles.tsx +0 -55
- package/src/ui/hooks/useInternalTablePluginStateSelector.ts +0 -38
- package/src/ui/icons/AddColLeftIcon.tsx +0 -37
- package/src/ui/icons/AddColRightIcon.tsx +0 -37
- package/src/ui/icons/AddRowAboveIcon.tsx +0 -22
- package/src/ui/icons/AddRowBelowIcon.tsx +0 -39
- package/src/ui/icons/DragHandleDisabledIcon.tsx +0 -25
- package/src/ui/icons/DragHandleIcon.tsx +0 -16
- package/src/ui/icons/DragInMotionIcon.tsx +0 -54
- package/src/ui/icons/MergeCellsIcon.tsx +0 -26
- package/src/ui/icons/MinimisedHandle.tsx +0 -15
- package/src/ui/icons/SortingIconWrapper.tsx +0 -43
- package/src/ui/icons/SplitCellIcon.tsx +0 -34
- package/src/ui/toolbar.tsx +0 -1153
- package/src/ui/ui-styles.ts +0 -960
- package/tsconfig.app.json +0 -135
- package/tsconfig.dev.json +0 -54
- package/tsconfig.json +0 -18
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
import rafSchedule from 'raf-schd';
|
|
2
|
-
|
|
3
|
-
import { TableCssClassName as ClassName, ShadowEvent } from '../types';
|
|
4
|
-
|
|
5
|
-
import { updateShadowListForStickyStyles } from './update-overflow-shadows';
|
|
6
|
-
|
|
7
|
-
export class OverflowShadowsObserver {
|
|
8
|
-
private tableIntersectionObserver?: IntersectionObserver;
|
|
9
|
-
private updateShadowState: (shadowKey: ShadowEvent, value: boolean) => void;
|
|
10
|
-
private table: HTMLElement;
|
|
11
|
-
private wrapper: HTMLDivElement;
|
|
12
|
-
|
|
13
|
-
private leftShadowSentinel: HTMLElement | null = null;
|
|
14
|
-
private rightShadowSentinel: HTMLElement | null = null;
|
|
15
|
-
private shadowsObserved: boolean = false;
|
|
16
|
-
|
|
17
|
-
private isSticky = false;
|
|
18
|
-
private stickyRowHeight = 0;
|
|
19
|
-
|
|
20
|
-
// updateShadowState is a method to update shadow key
|
|
21
|
-
constructor(
|
|
22
|
-
updateShadowState: (shadowKey: ShadowEvent, value: boolean) => void,
|
|
23
|
-
table: HTMLElement,
|
|
24
|
-
wrapper: HTMLDivElement,
|
|
25
|
-
) {
|
|
26
|
-
this.updateShadowState = updateShadowState;
|
|
27
|
-
this.table = table;
|
|
28
|
-
this.wrapper = wrapper;
|
|
29
|
-
|
|
30
|
-
this.init();
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
private init = () => {
|
|
34
|
-
const table = this.table;
|
|
35
|
-
|
|
36
|
-
if (!this.wrapper || !table) {
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
if (!this.tableIntersectionObserver) {
|
|
41
|
-
const intersectonOnbserverCallback = (entry: IntersectionObserverEntry) => {
|
|
42
|
-
if (entry.target !== this.leftShadowSentinel && entry.target !== this.rightShadowSentinel) {
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
this.updateStickyShadowsHeightIfChanged();
|
|
47
|
-
this.updateShadowState(
|
|
48
|
-
this.leftShadowSentinel === entry.target
|
|
49
|
-
? ShadowEvent.SHOW_BEFORE_SHADOW
|
|
50
|
-
: ShadowEvent.SHOW_AFTER_SHADOW,
|
|
51
|
-
entry.intersectionRatio !== 1,
|
|
52
|
-
);
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
this.tableIntersectionObserver = new IntersectionObserver(
|
|
56
|
-
(entries: IntersectionObserverEntry[], _: IntersectionObserver) => {
|
|
57
|
-
entries.forEach((entry) => intersectonOnbserverCallback(entry));
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
threshold: [0, 1],
|
|
61
|
-
root: this.wrapper,
|
|
62
|
-
rootMargin: '0px',
|
|
63
|
-
},
|
|
64
|
-
);
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
private updateStickyShadowsHeightIfChanged() {
|
|
70
|
-
if (!this.isSticky) {
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
const stickyCell = this.getStickyCell();
|
|
74
|
-
if (!stickyCell) {
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
this.updateStickyShadows();
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
private getStickyCell() {
|
|
82
|
-
const stickyRow = this.wrapper?.querySelector('tr.sticky');
|
|
83
|
-
const stickyCell = stickyRow && stickyRow.firstElementChild;
|
|
84
|
-
return stickyCell;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
observeShadowSentinels = (isSticky?: boolean) => {
|
|
88
|
-
if (this.isSticky === isSticky) {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
this.isSticky = !!isSticky;
|
|
93
|
-
|
|
94
|
-
// reset height
|
|
95
|
-
this.stickyRowHeight = 0;
|
|
96
|
-
// update sticky shadows
|
|
97
|
-
this.updateStickyShadowsHeightIfChanged();
|
|
98
|
-
|
|
99
|
-
this.leftShadowSentinel = this.table?.querySelector(`.${ClassName.TABLE_SHADOW_SENTINEL_LEFT}`);
|
|
100
|
-
this.rightShadowSentinel = this.table?.querySelector(
|
|
101
|
-
`.${ClassName.TABLE_SHADOW_SENTINEL_RIGHT}`,
|
|
102
|
-
);
|
|
103
|
-
|
|
104
|
-
if (
|
|
105
|
-
this.tableIntersectionObserver &&
|
|
106
|
-
this.leftShadowSentinel &&
|
|
107
|
-
this.rightShadowSentinel &&
|
|
108
|
-
!this.shadowsObserved
|
|
109
|
-
) {
|
|
110
|
-
this.tableIntersectionObserver.disconnect();
|
|
111
|
-
this.tableIntersectionObserver.observe(this.leftShadowSentinel);
|
|
112
|
-
this.tableIntersectionObserver.observe(this.rightShadowSentinel);
|
|
113
|
-
this.shadowsObserved = true;
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Takes a heightStyle if it can be computed in a less expensive manner,
|
|
119
|
-
* e.g. bounds on an IntersectionObserverEntry, otherwise proceed with
|
|
120
|
-
* reading it from sticky cell
|
|
121
|
-
*/
|
|
122
|
-
updateStickyShadows = rafSchedule((stickyRowHeight?: number) => {
|
|
123
|
-
if (!this.isSticky) {
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
const stickyCell = this.getStickyCell();
|
|
127
|
-
if (!stickyCell || !this.wrapper?.parentElement) {
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// Reflow Warning! - stickyCell.clientHeight
|
|
132
|
-
const newStickyRowHeight = stickyRowHeight || stickyCell.clientHeight + 1;
|
|
133
|
-
|
|
134
|
-
if (newStickyRowHeight !== this.stickyRowHeight) {
|
|
135
|
-
this.stickyRowHeight = newStickyRowHeight;
|
|
136
|
-
const heightStyleOrCompute = `${newStickyRowHeight}px`;
|
|
137
|
-
// Use getElementsByClassName here for a live node list to capture
|
|
138
|
-
// sticky shadows
|
|
139
|
-
const liveRightShadows = this.wrapper?.parentElement?.getElementsByClassName(
|
|
140
|
-
`${ClassName.TABLE_RIGHT_SHADOW}`,
|
|
141
|
-
);
|
|
142
|
-
const liveLeftShadows = this.wrapper?.parentElement?.getElementsByClassName(
|
|
143
|
-
`${ClassName.TABLE_LEFT_SHADOW}`,
|
|
144
|
-
);
|
|
145
|
-
updateShadowListForStickyStyles(heightStyleOrCompute, liveLeftShadows);
|
|
146
|
-
updateShadowListForStickyStyles(heightStyleOrCompute, liveRightShadows);
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
dispose() {
|
|
151
|
-
if (this.tableIntersectionObserver) {
|
|
152
|
-
this.tableIntersectionObserver.disconnect();
|
|
153
|
-
this.tableIntersectionObserver = undefined;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import type { CellDomAttrs } from '@atlaskit/adf-schema';
|
|
2
|
-
import { getCellAttrs, getCellDomAttrs } from '@atlaskit/adf-schema';
|
|
3
|
-
import {
|
|
4
|
-
ACTION_SUBJECT,
|
|
5
|
-
type EditorAnalyticsAPI,
|
|
6
|
-
EVENT_TYPE,
|
|
7
|
-
TABLE_ACTION,
|
|
8
|
-
} from '@atlaskit/editor-common/analytics';
|
|
9
|
-
import type { EventDispatcher } from '@atlaskit/editor-common/event-dispatcher';
|
|
10
|
-
import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
|
|
11
|
-
import type { EditorView, NodeView } from '@atlaskit/editor-prosemirror/view';
|
|
12
|
-
|
|
13
|
-
import TableNodeView from './TableNodeViewBase';
|
|
14
|
-
|
|
15
|
-
const DEFAULT_COL_SPAN = 1;
|
|
16
|
-
const DEFAULT_ROW_SPAN = 1;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* For performance reasons we do this in the background - it shouldn't block the main thread
|
|
20
|
-
*/
|
|
21
|
-
function delayUntilIdle(cb: Function) {
|
|
22
|
-
if (typeof window === 'undefined') {
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
// eslint-disable-next-line compat/compat
|
|
26
|
-
if (window.requestIdleCallback !== undefined) {
|
|
27
|
-
// eslint-disable-next-line compat/compat
|
|
28
|
-
return window.requestIdleCallback(() => cb(), { timeout: 500 });
|
|
29
|
-
}
|
|
30
|
-
return window.requestAnimationFrame(() => cb());
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Ignored via go/ees005
|
|
34
|
-
// eslint-disable-next-line require-unicode-regexp
|
|
35
|
-
const cssVariablePattern = /^VAR\(--.*\)$/;
|
|
36
|
-
|
|
37
|
-
export default class TableCell extends TableNodeView<HTMLElement> implements NodeView {
|
|
38
|
-
private delayHandle: number | undefined;
|
|
39
|
-
|
|
40
|
-
constructor(
|
|
41
|
-
node: PMNode,
|
|
42
|
-
view: EditorView,
|
|
43
|
-
getPos: () => number | undefined,
|
|
44
|
-
eventDispatcher: EventDispatcher,
|
|
45
|
-
editorAnalyticsAPI: EditorAnalyticsAPI | undefined,
|
|
46
|
-
) {
|
|
47
|
-
super(node, view, getPos, eventDispatcher);
|
|
48
|
-
|
|
49
|
-
// CONFCLOUD-78239: Previously we had a bug which tried to invert the heading colour of a table
|
|
50
|
-
// Obviously design tokens can't be inverted and so it would result in `VAR(--DS-BACKGROUND-ACCENT-GRAY-SUBTLEST, #F4F5F7)`
|
|
51
|
-
// which is not a valid CSS variable.
|
|
52
|
-
//
|
|
53
|
-
// We should follow-up and remove this in TODO-xx in 6 months once we're confident
|
|
54
|
-
// that this has fixed most of the cases in the wild.
|
|
55
|
-
//
|
|
56
|
-
// This is a workaround to fix those cases on the fly. Note it is super specific on purpose
|
|
57
|
-
// so that it just fixes the heading token (other tokens should be unaffected)
|
|
58
|
-
// At some point in the future
|
|
59
|
-
if (cssVariablePattern.test(node.attrs.background)) {
|
|
60
|
-
this.delayHandle = delayUntilIdle(() => {
|
|
61
|
-
const pos = getPos();
|
|
62
|
-
if (pos) {
|
|
63
|
-
const tr = view.state.tr;
|
|
64
|
-
tr.setNodeAttribute(pos, 'background', node.attrs.background.toLowerCase())
|
|
65
|
-
// Ensures dispatch does not contribute to undo history (otherwise user requires multiple undo's to revert table)
|
|
66
|
-
.setMeta('addToHistory', false);
|
|
67
|
-
editorAnalyticsAPI?.attachAnalyticsEvent({
|
|
68
|
-
action: TABLE_ACTION.TABLE_CELL_BACKGROUND_FIXED,
|
|
69
|
-
actionSubject: ACTION_SUBJECT.TABLE,
|
|
70
|
-
actionSubjectId: null,
|
|
71
|
-
eventType: EVENT_TYPE.TRACK,
|
|
72
|
-
})(tr);
|
|
73
|
-
view.dispatch(tr);
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
destroy = () => {
|
|
80
|
-
if (this.delayHandle && typeof window !== 'undefined') {
|
|
81
|
-
// eslint-disable-next-line compat/compat
|
|
82
|
-
window?.cancelIdleCallback?.(this.delayHandle);
|
|
83
|
-
window?.cancelAnimationFrame?.(this.delayHandle);
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
update(node: PMNode) {
|
|
88
|
-
const didUpdate = this.updateNodeView(node);
|
|
89
|
-
if (didUpdate) {
|
|
90
|
-
this.node = node;
|
|
91
|
-
}
|
|
92
|
-
return didUpdate;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
private updateNodeView(node: PMNode) {
|
|
96
|
-
if (this.node.type !== node.type) {
|
|
97
|
-
return false;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
const attrs = getCellDomAttrs(this.node);
|
|
101
|
-
const nextAttrs = getCellDomAttrs(node);
|
|
102
|
-
|
|
103
|
-
const { colspan, rowspan } = getCellAttrs(this.dom);
|
|
104
|
-
|
|
105
|
-
// need to rerender when colspan/rowspan in dom are different from the node attrs
|
|
106
|
-
// this can happen when undoing merge cells
|
|
107
|
-
if (
|
|
108
|
-
colspan !== (node.attrs.colspan || DEFAULT_COL_SPAN) ||
|
|
109
|
-
rowspan !== (node.attrs.rowspan || DEFAULT_ROW_SPAN)
|
|
110
|
-
) {
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// added + changed attributes
|
|
115
|
-
const addedAttrs = Object.entries(nextAttrs).filter(
|
|
116
|
-
([key, value]) => attrs[key as keyof CellDomAttrs] !== value,
|
|
117
|
-
);
|
|
118
|
-
|
|
119
|
-
const removedAttrs = Object.keys(attrs).filter((key) => !nextAttrs.hasOwnProperty(key));
|
|
120
|
-
|
|
121
|
-
if (addedAttrs.length || removedAttrs.length) {
|
|
122
|
-
addedAttrs.forEach(([key, value]) => this.dom.setAttribute(key, value || ''));
|
|
123
|
-
removedAttrs.forEach((key) => this.dom.removeAttribute(key));
|
|
124
|
-
return true;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Return true to not re-render this node view
|
|
128
|
-
if (this.node.sameMarkup(node)) {
|
|
129
|
-
return true;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
return false;
|
|
133
|
-
}
|
|
134
|
-
}
|