@atlaskit/editor-plugin-table 7.16.12 → 7.16.14

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.
@@ -1,6 +1,5 @@
1
1
  import { isVerticalPosition } from '@atlaskit/editor-common/guideline';
2
2
  import { akEditorCalculatedWideLayoutWidth, akEditorDefaultLayoutWidth, akEditorFullWidthLayoutWidth, akEditorGutterPadding } from '@atlaskit/editor-shared-styles';
3
- import { tableResizerWidth } from '../ui/consts';
4
3
  const numberOfLanesInDefaultLayoutWidth = 12;
5
4
  const calculateSubSnappingWidths = (totalLanes, totalWidth) => new Array(Math.round(totalLanes / 2) - 1).fill(totalWidth / totalLanes).map((v, i) => v * (i + 1) * 2);
6
5
  export const calculateDefaultSnappings = (lengthOffset = 0) => [...calculateSubSnappingWidths(numberOfLanesInDefaultLayoutWidth, akEditorDefaultLayoutWidth + lengthOffset), akEditorDefaultLayoutWidth + lengthOffset, akEditorCalculatedWideLayoutWidth + lengthOffset, akEditorFullWidthLayoutWidth + lengthOffset];
@@ -9,7 +8,7 @@ export const calculateDefaultTablePreserveSnappings = (lengthOffset = 0, editorC
9
8
  innerGuidelines: false,
10
9
  breakoutPoints: false
11
10
  }) => {
12
- const dynamicFullWidthLine = editorContainerWith - akEditorGutterPadding * 2 >= akEditorFullWidthLayoutWidth ? akEditorFullWidthLayoutWidth : editorContainerWith - akEditorGutterPadding * 2 - tableResizerWidth;
11
+ const dynamicFullWidthLine = editorContainerWith - akEditorGutterPadding * 2 >= akEditorFullWidthLayoutWidth ? akEditorFullWidthLayoutWidth : editorContainerWith - akEditorGutterPadding * 2;
13
12
  const guides = [dynamicFullWidthLine - lengthOffset];
14
13
  if (!exclude.breakoutPoints) {
15
14
  guides.unshift(akEditorDefaultLayoutWidth + lengthOffset, akEditorCalculatedWideLayoutWidth + lengthOffset);
@@ -20,17 +19,17 @@ export const calculateDefaultTablePreserveSnappings = (lengthOffset = 0, editorC
20
19
  return guides;
21
20
  };
22
21
  export const defaultSnappingWidths = calculateDefaultSnappings();
23
-
22
+ export const PRESERVE_TABLE_SNAPPING_LENGTH_OFFSET = 0;
24
23
  // FF TablePreserve for defaultSnappingWidths
25
- export const defaultTablePreserveSnappingWidths = (editorContainerWidth, exclude = {
24
+ export const defaultTablePreserveSnappingWidths = (lengthOffset, editorContainerWidth, exclude = {
26
25
  innerGuidelines: false,
27
26
  breakoutPoints: false
28
27
  }) => {
29
- return editorContainerWidth - akEditorGutterPadding * 2 > akEditorFullWidthLayoutWidth ? calculateDefaultSnappings() : calculateDefaultTablePreserveSnappings(0, editorContainerWidth, exclude);
28
+ return editorContainerWidth - akEditorGutterPadding * 2 > akEditorFullWidthLayoutWidth ? calculateDefaultSnappings() : calculateDefaultTablePreserveSnappings(lengthOffset, editorContainerWidth, exclude); // lengthOffset was hardcoded 0 here, created PRESERVE_TABLE_SNAPPING_LENGTH_OFFSET instead.
30
29
  };
31
30
 
32
31
  /**
33
- * Returns keys of guidelines that are closest to the table and withthin the snapGap
32
+ * Returns keys of guidelines that are closest to the table and within the snapGap
34
33
  */
35
34
  export const findClosestSnap = (currentWidth, snapWidths, guidelines, snapGap = 0, tolerance = 0) => {
36
35
  const closestGapIndex = snapWidths.reduce((prev, curr, index) => Math.abs(curr - currentWidth) < Math.abs(snapWidths[prev] - currentWidth) ? index : prev, 0);
@@ -3,6 +3,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
4
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
5
  import isEqual from 'lodash/isEqual';
6
+ import { getTableContainerWidth } from '@atlaskit/editor-common/node-width';
6
7
  import { closestElement, isParagraph, isTextSelection, mapSlice } from '@atlaskit/editor-common/utils';
7
8
  import { TextSelection } from '@atlaskit/editor-prosemirror/state';
8
9
  import { CellSelection } from '@atlaskit/editor-tables/cell-selection';
@@ -590,6 +591,13 @@ export var setTableAlignment = function setTableAlignment(newAlignment) {
590
591
  var nextTableAttrs = _objectSpread(_objectSpread({}, tableObject.node.attrs), {}, {
591
592
  layout: newAlignment
592
593
  });
594
+
595
+ // table uses old breakout values in layout attribute to determine width
596
+ // but that information is lost when alignment changes, so we need to ensure we retain that info
597
+ if (!tableObject.node.attrs.width) {
598
+ var tableWidth = getTableContainerWidth(tableObject.node);
599
+ nextTableAttrs.width = tableWidth;
600
+ }
593
601
  tr.setNodeMarkup(tableObject.pos, undefined, nextTableAttrs).setMeta('scrollIntoView', false);
594
602
  return tr;
595
603
  };
@@ -597,9 +605,17 @@ export var setTableAlignment = function setTableAlignment(newAlignment) {
597
605
  export var setTableAlignmentWithTableContentWithPos = function setTableAlignmentWithTableContentWithPos(newAlignment, tableNodeWithPos) {
598
606
  return function (_ref3) {
599
607
  var tr = _ref3.tr;
600
- var nextTableAttrs = _objectSpread(_objectSpread({}, tableNodeWithPos.node.attrs), {}, {
608
+ var table = tableNodeWithPos.node;
609
+ var nextTableAttrs = _objectSpread(_objectSpread({}, table.attrs), {}, {
601
610
  layout: newAlignment
602
611
  });
612
+
613
+ // table uses old breakout values in layout attribute to determine width
614
+ // but that information is lost when alignment changes, so we need to ensure we retain that info
615
+ if (!table.attrs.width) {
616
+ var tableWidth = getTableContainerWidth(table);
617
+ nextTableAttrs.width = tableWidth;
618
+ }
603
619
  tr.setNodeMarkup(tableNodeWithPos.pos, undefined, nextTableAttrs).setMeta('scrollIntoView', false);
604
620
  return tr;
605
621
  };
@@ -3,7 +3,7 @@ import React, { forwardRef, useCallback, useEffect, useMemo, useRef, useState }
3
3
  import classNames from 'classnames';
4
4
  import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
5
5
  import { getTableContainerWidth } from '@atlaskit/editor-common/node-width';
6
- import { akEditorDefaultLayoutWidth, akEditorGutterPadding, akEditorMediaResizeHandlerPaddingWide, akEditorMobileBreakoutPoint } from '@atlaskit/editor-shared-styles';
6
+ import { akEditorDefaultLayoutWidth, akEditorGutterPadding, akEditorMobileBreakoutPoint } from '@atlaskit/editor-shared-styles';
7
7
  import { setTableAlignmentWithTableContentWithPos } from '../commands/misc';
8
8
  import { TABLE_MAX_WIDTH } from '../pm-plugins/table-resizing/utils';
9
9
  import { TableCssClassName as ClassName } from '../types';
@@ -121,6 +121,10 @@ export var ResizableTableContainer = /*#__PURE__*/React.memo(function (_ref4) {
121
121
  _useState2 = _slicedToArray(_useState, 2),
122
122
  resizing = _useState2[0],
123
123
  setIsResizing = _useState2[1];
124
+ var _useSharedPluginState2 = useSharedPluginState(pluginInjectionApi, ['table']),
125
+ tableState = _useSharedPluginState2.tableState;
126
+ var _ref5 = tableState,
127
+ isFullWidthModeEnabled = _ref5.isFullWidthModeEnabled;
124
128
  var updateContainerHeight = useCallback(function (height) {
125
129
  var _containerRef$current;
126
130
  // current StickyHeader State is not stable to be fetch.
@@ -174,11 +178,27 @@ export var ResizableTableContainer = /*#__PURE__*/React.memo(function (_ref4) {
174
178
  return (_pluginInjectionApi$c = pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$c2 = pluginInjectionApi.core) === null || _pluginInjectionApi$c2 === void 0 ? void 0 : _pluginInjectionApi$c2.actions.execute(pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$s = pluginInjectionApi.selection) === null || _pluginInjectionApi$s === void 0 ? void 0 : _pluginInjectionApi$s.commands.displayGapCursor(toggle))) !== null && _pluginInjectionApi$c !== void 0 ? _pluginInjectionApi$c : false;
175
179
  }, [pluginInjectionApi]);
176
180
  var tableWidth = getTableContainerWidth(node);
177
- var _useSharedPluginState2 = useSharedPluginState(pluginInjectionApi, ['editorViewMode']),
178
- editorViewModeState = _useSharedPluginState2.editorViewModeState;
179
-
180
- // 76 is currently an accepted padding value considering the spacing for resizer handle
181
- var responsiveContainerWidth = isTableScalingEnabled ? containerWidth - akEditorGutterPadding * 2 - akEditorMediaResizeHandlerPaddingWide / 2 : containerWidth - akEditorGutterPadding * 2 - akEditorMediaResizeHandlerPaddingWide;
181
+ var _useSharedPluginState3 = useSharedPluginState(pluginInjectionApi, ['editorViewMode']),
182
+ editorViewModeState = _useSharedPluginState3.editorViewModeState;
183
+ var responsiveContainerWidth = 0;
184
+ var resizeHandleSpacing = 12;
185
+ // When Full width editor enabled, a Mac OS user can change "ak-editor-content-area" width by
186
+ // updating Settings -> Appearance -> Show scroll bars from "When scrolling" to "Always". It causes
187
+ // issues when viwport width is less than full width Editor's width. To detect avoid them
188
+ // we need to use lineLength to defined responsiveWidth instead of containerWidth
189
+ // (which does not get updated when Mac setting changes) in Full-width editor.
190
+ if (isFullWidthModeEnabled) {
191
+ // When: Show scroll bars -> containerWidth = akEditorGutterPadding * 2 + lineLength;
192
+ // When: Always -> containerWidth = akEditorGutterPadding * 2 + lineLength + scrollbarWidth;
193
+ // scrollbarWidth can vary. Values can be 14, 15, 16 and up to 20px;
194
+ responsiveContainerWidth = isTableScalingEnabled ? lineLength : containerWidth - akEditorGutterPadding * 2 - resizeHandleSpacing;
195
+ } else {
196
+ // 76 is currently an accepted padding value considering the spacing for resizer handle
197
+ // containerWidth = width of a DIV with test id="ak-editor-fp-content-area". It is a parent of
198
+ // a DIV with className="ak-editor-content-area". This DIV has padding left and padding right.
199
+ // padding left = padding right = akEditorGutterPadding = 32
200
+ responsiveContainerWidth = isTableScalingEnabled ? containerWidth - akEditorGutterPadding * 2 : containerWidth - akEditorGutterPadding * 2 - resizeHandleSpacing;
201
+ }
182
202
  var width = Math.min(tableWidth, responsiveContainerWidth);
183
203
  if (!isResizing) {
184
204
  tableWidthRef.current = width;
@@ -198,6 +218,7 @@ export var ResizableTableContainer = /*#__PURE__*/React.memo(function (_ref4) {
198
218
  attachAnalyticsEvent: attachAnalyticsEvent,
199
219
  displayGapCursor: displayGapCursor,
200
220
  isTableAlignmentEnabled: isTableAlignmentEnabled,
221
+ isFullWidthModeEnabled: isFullWidthModeEnabled,
201
222
  isTableScalingEnabled: isTableScalingEnabled,
202
223
  isWholeTableInDanger: isWholeTableInDanger,
203
224
  pluginInjectionApi: pluginInjectionApi,
@@ -236,24 +257,24 @@ export var ResizableTableContainer = /*#__PURE__*/React.memo(function (_ref4) {
236
257
  node: node
237
258
  }, children))));
238
259
  });
239
- export var TableContainer = function TableContainer(_ref5) {
240
- var children = _ref5.children,
241
- node = _ref5.node,
242
- className = _ref5.className,
243
- _ref5$containerWidth = _ref5.containerWidth,
244
- editorWidth = _ref5$containerWidth.width,
245
- lineLength = _ref5$containerWidth.lineLength,
246
- editorView = _ref5.editorView,
247
- getPos = _ref5.getPos,
248
- tableRef = _ref5.tableRef,
249
- isNested = _ref5.isNested,
250
- tableWrapperHeight = _ref5.tableWrapperHeight,
251
- isResizing = _ref5.isResizing,
252
- pluginInjectionApi = _ref5.pluginInjectionApi,
253
- isWholeTableInDanger = _ref5.isWholeTableInDanger,
254
- isTableResizingEnabled = _ref5.isTableResizingEnabled,
255
- isTableScalingEnabled = _ref5.isTableScalingEnabled,
256
- isTableAlignmentEnabled = _ref5.isTableAlignmentEnabled;
260
+ export var TableContainer = function TableContainer(_ref6) {
261
+ var children = _ref6.children,
262
+ node = _ref6.node,
263
+ className = _ref6.className,
264
+ _ref6$containerWidth = _ref6.containerWidth,
265
+ editorWidth = _ref6$containerWidth.width,
266
+ lineLength = _ref6$containerWidth.lineLength,
267
+ editorView = _ref6.editorView,
268
+ getPos = _ref6.getPos,
269
+ tableRef = _ref6.tableRef,
270
+ isNested = _ref6.isNested,
271
+ tableWrapperHeight = _ref6.tableWrapperHeight,
272
+ isResizing = _ref6.isResizing,
273
+ pluginInjectionApi = _ref6.pluginInjectionApi,
274
+ isWholeTableInDanger = _ref6.isWholeTableInDanger,
275
+ isTableResizingEnabled = _ref6.isTableResizingEnabled,
276
+ isTableScalingEnabled = _ref6.isTableScalingEnabled,
277
+ isTableAlignmentEnabled = _ref6.isTableAlignmentEnabled;
257
278
  if (isTableResizingEnabled && !isNested) {
258
279
  return /*#__PURE__*/React.createElement(ResizableTableContainer
259
280
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
@@ -13,6 +13,7 @@ import { tableMessages as messages } from '@atlaskit/editor-common/messages';
13
13
  import { ResizerNext } from '@atlaskit/editor-common/resizer';
14
14
  import { browser } from '@atlaskit/editor-common/utils';
15
15
  import { chainCommands } from '@atlaskit/editor-prosemirror/commands';
16
+ import { akEditorGutterPadding } from '@atlaskit/editor-shared-styles';
16
17
  import { findTable } from '@atlaskit/editor-tables/utils';
17
18
  import { getBooleanFF } from '@atlaskit/platform-feature-flags';
18
19
  import { setTableAlignmentWithTableContentWithPos, updateWidthToWidest } from '../commands/misc';
@@ -22,8 +23,8 @@ import { pluginKey as tableWidthPluginKey } from '../pm-plugins/table-width';
22
23
  import { TABLE_GUIDELINE_VISIBLE_ADJUSTMENT, TABLE_HIGHLIGHT_GAP, TABLE_HIGHLIGHT_TOLERANCE, TABLE_SNAP_GAP } from '../ui/consts';
23
24
  import { ALIGN_CENTER, ALIGN_START, normaliseAlignment } from '../utils/alignment';
24
25
  import { generateResizedPayload, generateResizeFrameRatePayloads, useMeasureFramerate } from '../utils/analytics';
25
- import { defaultGuidelines, defaultGuidelinesForPreserveTable } from '../utils/guidelines';
26
- import { defaultSnappingWidths, defaultTablePreserveSnappingWidths, findClosestSnap } from '../utils/snapping';
26
+ import { defaultGuidelines, defaultGuidelinesForPreserveTable, PRESERVE_TABLE_GUIDELINES_LENGTH_OFFSET } from '../utils/guidelines';
27
+ import { defaultSnappingWidths, defaultTablePreserveSnappingWidths, findClosestSnap, PRESERVE_TABLE_SNAPPING_LENGTH_OFFSET } from '../utils/snapping';
27
28
  var RESIZE_STEP_VALUE = 10;
28
29
  var FULL_WIDTH_EDITOR_CONTENT_WIDTH = 1800;
29
30
  var handles = {
@@ -68,10 +69,26 @@ var getResizerMinWidth = function getResizerMinWidth(node) {
68
69
  * So the guideline container won't make the fabric-editor-popup-scroll-parent overflow
69
70
  * @param guidelines
70
71
  * @param containerWidth editorWidth
72
+ * @param lineLength
73
+ * @param isTableScalingEnabled
74
+ * @param isFullWidthModeEnabled
71
75
  */
72
- var getVisibleGuidelines = function getVisibleGuidelines(guidelines, containerWidth) {
76
+ var getVisibleGuidelines = function getVisibleGuidelines(guidelines, containerWidth, lineLength, isTableScalingEnabled, isFullWidthModeEnabled) {
77
+ var guidelineVisibleAdjustment = TABLE_GUIDELINE_VISIBLE_ADJUSTMENT;
78
+ if (isTableScalingEnabled) {
79
+ // Notes:
80
+ // Example: containerWidth = 1244, lineLength = 1180 (used for when editor full width mode is enabled)
81
+ // Full width/dynamic x coordinate can be float number.
82
+ // Ex: guideline.position.x can be 590.5. So 590.5 * 2 = 1181 (not 1180).
83
+ // For PTW we need to ensure that dynamic guideline never gets excluded: 1181 should be > width + guidelineVisibleAdjustment
84
+ // guidelineVisibleAdjustment is set as a negative value, so we making it positive and adding + 1
85
+ var preserve_table_widths_adjustment = -1 * PRESERVE_TABLE_GUIDELINES_LENGTH_OFFSET + 1;
86
+ guidelineVisibleAdjustment = isFullWidthModeEnabled ? preserve_table_widths_adjustment // guidelineVisibleAdjustment = -2, if lineLength = 1180, 1181 < 1180 + 2 is true.
87
+ : -2 * akEditorGutterPadding + preserve_table_widths_adjustment; // guidelineVisibleAdjustment = -62, if containerWidth is 1244, 1181 < 1244 - 62 = 1182 is true.
88
+ }
89
+ var width = isTableScalingEnabled && isFullWidthModeEnabled ? lineLength : containerWidth;
73
90
  return guidelines.filter(function (guideline) {
74
- return guideline.position && guideline.position.x !== undefined && typeof guideline.position.x === 'number' && Math.abs(guideline.position.x * 2) < containerWidth + TABLE_GUIDELINE_VISIBLE_ADJUSTMENT;
91
+ return guideline.position && guideline.position.x !== undefined && typeof guideline.position.x === 'number' && Math.abs(guideline.position.x * 2) < width + guidelineVisibleAdjustment;
75
92
  });
76
93
  };
77
94
  export var TableResizer = function TableResizer(_ref) {
@@ -94,7 +111,8 @@ export var TableResizer = function TableResizer(_ref) {
94
111
  isTableScalingEnabled = _ref.isTableScalingEnabled,
95
112
  isTableAlignmentEnabled = _ref.isTableAlignmentEnabled,
96
113
  isWholeTableInDanger = _ref.isWholeTableInDanger,
97
- pluginInjectionApi = _ref.pluginInjectionApi;
114
+ pluginInjectionApi = _ref.pluginInjectionApi,
115
+ isFullWidthModeEnabled = _ref.isFullWidthModeEnabled;
98
116
  var currentGap = useRef(0);
99
117
  // track resizing state - use ref over state to avoid re-render
100
118
  var isResizing = useRef(false);
@@ -131,15 +149,17 @@ export var TableResizer = function TableResizer(_ref) {
131
149
  keys = _ref3.keys;
132
150
  if (gap !== currentGap.current) {
133
151
  currentGap.current = gap;
134
- var visibleGuidelines = getVisibleGuidelines(isTableScalingEnabled ? defaultGuidelinesForPreserveTable(containerWidth, excludeGuidelineConfig) : defaultGuidelines, containerWidth);
152
+ var visibleGuidelines = getVisibleGuidelines(isTableScalingEnabled ? defaultGuidelinesForPreserveTable(PRESERVE_TABLE_GUIDELINES_LENGTH_OFFSET, isFullWidthModeEnabled ? lineLength + 2 * akEditorGutterPadding : containerWidth, excludeGuidelineConfig) : defaultGuidelines, containerWidth, lineLength, Boolean(isTableScalingEnabled), Boolean(isFullWidthModeEnabled));
135
153
  displayGuideline(getGuidelinesWithHighlights(gap, TABLE_SNAP_GAP, keys, visibleGuidelines));
136
154
  }
137
- }, [isTableScalingEnabled, excludeGuidelineConfig, containerWidth, displayGuideline]);
155
+ }, [isTableScalingEnabled, excludeGuidelineConfig, containerWidth, displayGuideline, lineLength, isFullWidthModeEnabled]);
138
156
  var guidelineSnaps = useMemo(function () {
139
157
  return snappingEnabled ? {
140
- x: isTableScalingEnabled ? defaultTablePreserveSnappingWidths(containerWidth, excludeGuidelineConfig) : defaultSnappingWidths
158
+ x: isTableScalingEnabled ? defaultTablePreserveSnappingWidths(PRESERVE_TABLE_SNAPPING_LENGTH_OFFSET,
159
+ // was hardcoded to 0, using PRESERVE_TABLE_SNAPPING_LENGTH_OFFSET instead.
160
+ isFullWidthModeEnabled ? lineLength + 2 * akEditorGutterPadding : containerWidth, excludeGuidelineConfig) : defaultSnappingWidths
141
161
  } : undefined;
142
- }, [snappingEnabled, isTableScalingEnabled, excludeGuidelineConfig, containerWidth]);
162
+ }, [snappingEnabled, isTableScalingEnabled, excludeGuidelineConfig, containerWidth, lineLength, isFullWidthModeEnabled]);
143
163
  var switchToCenterAlignment = useCallback(function (pos, node, newWidth, state, dispatch) {
144
164
  if (isTableAlignmentEnabled && node && node.attrs.layout === ALIGN_START && newWidth > lineLength && lineLength < FULL_WIDTH_EDITOR_CONTENT_WIDTH &&
145
165
  // We don't want to switch alignment in Full-width editor
@@ -189,12 +209,12 @@ export var TableResizer = function TableResizer(_ref) {
189
209
  name: TABLE_OVERFLOW_CHANGE_TRIGGER.RESIZED
190
210
  });
191
211
  dispatch(tr);
192
- var visibleGuidelines = getVisibleGuidelines(isTableScalingEnabled ? defaultGuidelinesForPreserveTable(containerWidth, excludeGuidelineConfig) : defaultGuidelines, containerWidth);
212
+ var visibleGuidelines = getVisibleGuidelines(isTableScalingEnabled ? defaultGuidelinesForPreserveTable(PRESERVE_TABLE_GUIDELINES_LENGTH_OFFSET, isFullWidthModeEnabled ? lineLength + 2 * akEditorGutterPadding : containerWidth, excludeGuidelineConfig) : defaultGuidelines, containerWidth, lineLength, Boolean(isTableScalingEnabled), Boolean(isFullWidthModeEnabled));
193
213
  setSnappingEnabled(displayGuideline(visibleGuidelines));
194
214
  if (onResizeStart) {
195
215
  onResizeStart();
196
216
  }
197
- }, [startMeasure, editorView, displayGapCursor, node.attrs.localId, tableRef, isTableScalingEnabled, excludeGuidelineConfig, containerWidth, displayGuideline, onResizeStart]);
217
+ }, [startMeasure, editorView, displayGapCursor, node.attrs.localId, tableRef, isTableScalingEnabled, excludeGuidelineConfig, containerWidth, lineLength, displayGuideline, onResizeStart, isFullWidthModeEnabled]);
198
218
  var handleResize = useCallback(function (originalState, delta) {
199
219
  var _node$attrs$localId, _node$attrs;
200
220
  countFrames();
@@ -214,14 +234,15 @@ export var TableResizer = function TableResizer(_ref) {
214
234
  start: pos + 1,
215
235
  parentWidth: newWidth
216
236
  }, editorView.domAtPos.bind(editorView), isTableScalingEnabled);
217
- var closestSnap = findClosestSnap(newWidth, isTableScalingEnabled ? defaultTablePreserveSnappingWidths(containerWidth, excludeGuidelineConfig) : defaultSnappingWidths, isTableScalingEnabled ? defaultGuidelinesForPreserveTable(containerWidth, excludeGuidelineConfig) : defaultGuidelines, TABLE_HIGHLIGHT_GAP, TABLE_HIGHLIGHT_TOLERANCE);
237
+ var editorContainerWidth = isFullWidthModeEnabled ? lineLength + 2 * akEditorGutterPadding : containerWidth;
238
+ var closestSnap = findClosestSnap(newWidth, isTableScalingEnabled ? defaultTablePreserveSnappingWidths(PRESERVE_TABLE_SNAPPING_LENGTH_OFFSET, editorContainerWidth, excludeGuidelineConfig) : defaultSnappingWidths, isTableScalingEnabled ? defaultGuidelinesForPreserveTable(PRESERVE_TABLE_GUIDELINES_LENGTH_OFFSET, editorContainerWidth, excludeGuidelineConfig) : defaultGuidelines, TABLE_HIGHLIGHT_GAP, TABLE_HIGHLIGHT_TOLERANCE);
218
239
  updateActiveGuidelines(closestSnap);
219
240
 
220
241
  // When snapping to the full width guideline, resize the table to be 1800px
221
242
  var state = editorView.state,
222
243
  dispatch = editorView.dispatch;
223
244
  var currentTableNodeLocalId = (_node$attrs$localId = node === null || node === void 0 || (_node$attrs = node.attrs) === null || _node$attrs === void 0 ? void 0 : _node$attrs.localId) !== null && _node$attrs$localId !== void 0 ? _node$attrs$localId : '';
224
- var fullWidthGuideline = defaultGuidelinesForPreserveTable(containerWidth, excludeGuidelineConfig).filter(function (guideline) {
245
+ var fullWidthGuideline = defaultGuidelinesForPreserveTable(PRESERVE_TABLE_GUIDELINES_LENGTH_OFFSET, editorContainerWidth, excludeGuidelineConfig).filter(function (guideline) {
225
246
  return guideline.isFullWidth;
226
247
  })[0];
227
248
  var isFullWidthGuidelineActive = closestSnap.keys.includes(fullWidthGuideline.key);
@@ -231,7 +252,7 @@ export var TableResizer = function TableResizer(_ref) {
231
252
  }, updateWidthToWidest(_defineProperty({}, currentTableNodeLocalId, shouldUpdateWidthToWidest)))(state, dispatch);
232
253
  updateWidth(shouldUpdateWidthToWidest ? TABLE_MAX_WIDTH : newWidth);
233
254
  return newWidth;
234
- }, [countFrames, isTableScalingEnabled, excludeGuidelineConfig, tableRef, node, editorView, updateActiveGuidelines, containerWidth, updateWidth, getPos, switchToCenterAlignment]);
255
+ }, [countFrames, isTableScalingEnabled, isFullWidthModeEnabled, excludeGuidelineConfig, tableRef, node, editorView, updateActiveGuidelines, containerWidth, lineLength, updateWidth, getPos, switchToCenterAlignment]);
235
256
  var scheduleResize = useMemo(function () {
236
257
  return rafSchd(handleResize);
237
258
  }, [handleResize]);
@@ -9,6 +9,7 @@ import { TableSortOrder as SortOrder } from '@atlaskit/custom-steps';
9
9
  import { INPUT_METHOD } from '@atlaskit/editor-common/analytics';
10
10
  import { addColumnAfter, addRowAfter, backspace, tooltip } from '@atlaskit/editor-common/keymaps';
11
11
  import commonMessages, { tableMessages as messages } from '@atlaskit/editor-common/messages';
12
+ import { getTableContainerWidth } from '@atlaskit/editor-common/node-width';
12
13
  import { cellBackgroundColorPalette, DEFAULT_BORDER_COLOR } from '@atlaskit/editor-common/ui-color';
13
14
  import { closestElement, getChildrenInfo as _getChildrenInfo, getNodeName, isReferencedSource } from '@atlaskit/editor-common/utils';
14
15
  import { findParentDomRefOfType } from '@atlaskit/editor-prosemirror/utils';
@@ -652,7 +653,8 @@ export var getSelectedAlignmentIcon = function getSelectedAlignmentIcon(alignmen
652
653
  };
653
654
  export var isLayoutOptionDisabled = function isLayoutOptionDisabled(selectedNode, getEditorContainerWidth) {
654
655
  var lineLength = getEditorContainerWidth().lineLength;
655
- if (selectedNode && lineLength && selectedNode.attrs.width > lineLength) {
656
+ var tableWidth = getTableContainerWidth(selectedNode);
657
+ if (selectedNode && lineLength && tableWidth > lineLength) {
656
658
  return true;
657
659
  }
658
660
  return false;
@@ -5,11 +5,14 @@ import { calculateDefaultSnappings, calculateDefaultTablePreserveSnappings } fro
5
5
  // NOTE: We have to take 1 pixel off every length due to the fact that the tbody is 1px smaller then the table container.
6
6
  // If we don't do this then the guidelines will not align correctly to the edge of the table
7
7
  export var defaultGuidelines = createFixedGuidelinesFromLengths([0].concat(_toConsumableArray(calculateDefaultSnappings(-1))));
8
- export var defaultGuidelinesForPreserveTable = function defaultGuidelinesForPreserveTable(editorContainerWidth) {
9
- var exclude = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
8
+ export var PRESERVE_TABLE_GUIDELINES_LENGTH_OFFSET = -1;
9
+ export var defaultGuidelinesForPreserveTable = function defaultGuidelinesForPreserveTable(lengthOffset, editorContainerWidth) {
10
+ var exclude = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
10
11
  innerGuidelines: false,
11
12
  breakoutPoints: false
12
13
  };
13
- var lengths = calculateDefaultTablePreserveSnappings(-1, editorContainerWidth, exclude);
14
+ var lengths = calculateDefaultTablePreserveSnappings(lengthOffset,
15
+ // was hardcoded to -1 here, created PRESERVE_TABLE_GUIDELINES_LENGTH_OFFSET instead.
16
+ editorContainerWidth, exclude);
14
17
  return createFixedGuidelinesFromLengths(lengths, undefined, true);
15
18
  };
@@ -1,7 +1,6 @@
1
1
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
2
  import { isVerticalPosition } from '@atlaskit/editor-common/guideline';
3
3
  import { akEditorCalculatedWideLayoutWidth, akEditorDefaultLayoutWidth, akEditorFullWidthLayoutWidth, akEditorGutterPadding } from '@atlaskit/editor-shared-styles';
4
- import { tableResizerWidth } from '../ui/consts';
5
4
  var numberOfLanesInDefaultLayoutWidth = 12;
6
5
  var calculateSubSnappingWidths = function calculateSubSnappingWidths(totalLanes, totalWidth) {
7
6
  return new Array(Math.round(totalLanes / 2) - 1).fill(totalWidth / totalLanes).map(function (v, i) {
@@ -20,7 +19,7 @@ export var calculateDefaultTablePreserveSnappings = function calculateDefaultTab
20
19
  innerGuidelines: false,
21
20
  breakoutPoints: false
22
21
  };
23
- var dynamicFullWidthLine = editorContainerWith - akEditorGutterPadding * 2 >= akEditorFullWidthLayoutWidth ? akEditorFullWidthLayoutWidth : editorContainerWith - akEditorGutterPadding * 2 - tableResizerWidth;
22
+ var dynamicFullWidthLine = editorContainerWith - akEditorGutterPadding * 2 >= akEditorFullWidthLayoutWidth ? akEditorFullWidthLayoutWidth : editorContainerWith - akEditorGutterPadding * 2;
24
23
  var guides = [dynamicFullWidthLine - lengthOffset];
25
24
  if (!exclude.breakoutPoints) {
26
25
  guides.unshift(akEditorDefaultLayoutWidth + lengthOffset, akEditorCalculatedWideLayoutWidth + lengthOffset);
@@ -31,18 +30,18 @@ export var calculateDefaultTablePreserveSnappings = function calculateDefaultTab
31
30
  return guides;
32
31
  };
33
32
  export var defaultSnappingWidths = calculateDefaultSnappings();
34
-
33
+ export var PRESERVE_TABLE_SNAPPING_LENGTH_OFFSET = 0;
35
34
  // FF TablePreserve for defaultSnappingWidths
36
- export var defaultTablePreserveSnappingWidths = function defaultTablePreserveSnappingWidths(editorContainerWidth) {
37
- var exclude = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
35
+ export var defaultTablePreserveSnappingWidths = function defaultTablePreserveSnappingWidths(lengthOffset, editorContainerWidth) {
36
+ var exclude = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
38
37
  innerGuidelines: false,
39
38
  breakoutPoints: false
40
39
  };
41
- return editorContainerWidth - akEditorGutterPadding * 2 > akEditorFullWidthLayoutWidth ? calculateDefaultSnappings() : calculateDefaultTablePreserveSnappings(0, editorContainerWidth, exclude);
40
+ return editorContainerWidth - akEditorGutterPadding * 2 > akEditorFullWidthLayoutWidth ? calculateDefaultSnappings() : calculateDefaultTablePreserveSnappings(lengthOffset, editorContainerWidth, exclude); // lengthOffset was hardcoded 0 here, created PRESERVE_TABLE_SNAPPING_LENGTH_OFFSET instead.
42
41
  };
43
42
 
44
43
  /**
45
- * Returns keys of guidelines that are closest to the table and withthin the snapGap
44
+ * Returns keys of guidelines that are closest to the table and within the snapGap
46
45
  */
47
46
  export var findClosestSnap = function findClosestSnap(currentWidth, snapWidths, guidelines) {
48
47
  var snapGap = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
@@ -22,10 +22,11 @@ interface TableResizerProps {
22
22
  isTableScalingEnabled?: boolean;
23
23
  isTableAlignmentEnabled?: boolean;
24
24
  isWholeTableInDanger?: boolean;
25
+ isFullWidthModeEnabled?: boolean;
25
26
  }
26
27
  export interface TableResizerImprovementProps extends TableResizerProps {
27
28
  onResizeStop?: () => void;
28
29
  onResizeStart?: () => void;
29
30
  }
30
- export declare const TableResizer: ({ children, width, maxWidth, containerWidth, lineLength, updateWidth, onResizeStop, onResizeStart, editorView, getPos, node, tableRef, displayGuideline, attachAnalyticsEvent, displayGapCursor, isTableScalingEnabled, isTableAlignmentEnabled, isWholeTableInDanger, pluginInjectionApi, }: PropsWithChildren<TableResizerImprovementProps>) => JSX.Element;
31
+ export declare const TableResizer: ({ children, width, maxWidth, containerWidth, lineLength, updateWidth, onResizeStop, onResizeStart, editorView, getPos, node, tableRef, displayGuideline, attachAnalyticsEvent, displayGapCursor, isTableScalingEnabled, isTableAlignmentEnabled, isWholeTableInDanger, pluginInjectionApi, isFullWidthModeEnabled, }: PropsWithChildren<TableResizerImprovementProps>) => JSX.Element;
31
32
  export {};
@@ -1,4 +1,5 @@
1
1
  import type { GuidelineConfig } from '@atlaskit/editor-common/guideline';
2
2
  import type { GuidelineExcludeConfig } from './snapping';
3
3
  export declare const defaultGuidelines: GuidelineConfig[];
4
- export declare const defaultGuidelinesForPreserveTable: (editorContainerWidth: number, exclude?: GuidelineExcludeConfig) => GuidelineConfig[];
4
+ export declare const PRESERVE_TABLE_GUIDELINES_LENGTH_OFFSET = -1;
5
+ export declare const defaultGuidelinesForPreserveTable: (lengthOffset: number, editorContainerWidth: number, exclude?: GuidelineExcludeConfig) => GuidelineConfig[];
@@ -6,9 +6,10 @@ export type GuidelineExcludeConfig = {
6
6
  };
7
7
  export declare const calculateDefaultTablePreserveSnappings: (lengthOffset?: number, editorContainerWith?: number, exclude?: GuidelineExcludeConfig) => number[];
8
8
  export declare const defaultSnappingWidths: number[];
9
- export declare const defaultTablePreserveSnappingWidths: (editorContainerWidth: number, exclude?: GuidelineExcludeConfig) => number[];
9
+ export declare const PRESERVE_TABLE_SNAPPING_LENGTH_OFFSET = 0;
10
+ export declare const defaultTablePreserveSnappingWidths: (lengthOffset: number, editorContainerWidth: number, exclude?: GuidelineExcludeConfig) => number[];
10
11
  /**
11
- * Returns keys of guidelines that are closest to the table and withthin the snapGap
12
+ * Returns keys of guidelines that are closest to the table and within the snapGap
12
13
  */
13
14
  export declare const findClosestSnap: (currentWidth: number, snapWidths: number[], guidelines: GuidelineConfig[], snapGap?: number, tolerance?: number) => {
14
15
  gap: number;
@@ -22,10 +22,11 @@ interface TableResizerProps {
22
22
  isTableScalingEnabled?: boolean;
23
23
  isTableAlignmentEnabled?: boolean;
24
24
  isWholeTableInDanger?: boolean;
25
+ isFullWidthModeEnabled?: boolean;
25
26
  }
26
27
  export interface TableResizerImprovementProps extends TableResizerProps {
27
28
  onResizeStop?: () => void;
28
29
  onResizeStart?: () => void;
29
30
  }
30
- export declare const TableResizer: ({ children, width, maxWidth, containerWidth, lineLength, updateWidth, onResizeStop, onResizeStart, editorView, getPos, node, tableRef, displayGuideline, attachAnalyticsEvent, displayGapCursor, isTableScalingEnabled, isTableAlignmentEnabled, isWholeTableInDanger, pluginInjectionApi, }: PropsWithChildren<TableResizerImprovementProps>) => JSX.Element;
31
+ export declare const TableResizer: ({ children, width, maxWidth, containerWidth, lineLength, updateWidth, onResizeStop, onResizeStart, editorView, getPos, node, tableRef, displayGuideline, attachAnalyticsEvent, displayGapCursor, isTableScalingEnabled, isTableAlignmentEnabled, isWholeTableInDanger, pluginInjectionApi, isFullWidthModeEnabled, }: PropsWithChildren<TableResizerImprovementProps>) => JSX.Element;
31
32
  export {};
@@ -1,4 +1,5 @@
1
1
  import type { GuidelineConfig } from '@atlaskit/editor-common/guideline';
2
2
  import type { GuidelineExcludeConfig } from './snapping';
3
3
  export declare const defaultGuidelines: GuidelineConfig[];
4
- export declare const defaultGuidelinesForPreserveTable: (editorContainerWidth: number, exclude?: GuidelineExcludeConfig) => GuidelineConfig[];
4
+ export declare const PRESERVE_TABLE_GUIDELINES_LENGTH_OFFSET = -1;
5
+ export declare const defaultGuidelinesForPreserveTable: (lengthOffset: number, editorContainerWidth: number, exclude?: GuidelineExcludeConfig) => GuidelineConfig[];
@@ -6,9 +6,10 @@ export type GuidelineExcludeConfig = {
6
6
  };
7
7
  export declare const calculateDefaultTablePreserveSnappings: (lengthOffset?: number, editorContainerWith?: number, exclude?: GuidelineExcludeConfig) => number[];
8
8
  export declare const defaultSnappingWidths: number[];
9
- export declare const defaultTablePreserveSnappingWidths: (editorContainerWidth: number, exclude?: GuidelineExcludeConfig) => number[];
9
+ export declare const PRESERVE_TABLE_SNAPPING_LENGTH_OFFSET = 0;
10
+ export declare const defaultTablePreserveSnappingWidths: (lengthOffset: number, editorContainerWidth: number, exclude?: GuidelineExcludeConfig) => number[];
10
11
  /**
11
- * Returns keys of guidelines that are closest to the table and withthin the snapGap
12
+ * Returns keys of guidelines that are closest to the table and within the snapGap
12
13
  */
13
14
  export declare const findClosestSnap: (currentWidth: number, snapWidths: number[], guidelines: GuidelineConfig[], snapGap?: number, tolerance?: number) => {
14
15
  gap: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-table",
3
- "version": "7.16.12",
3
+ "version": "7.16.14",
4
4
  "description": "Table plugin for the @atlaskit/editor",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -31,7 +31,7 @@
31
31
  "@atlaskit/adf-schema": "^36.10.7",
32
32
  "@atlaskit/button": "^17.17.0",
33
33
  "@atlaskit/custom-steps": "^0.2.0",
34
- "@atlaskit/editor-common": "^81.1.0",
34
+ "@atlaskit/editor-common": "^81.2.0",
35
35
  "@atlaskit/editor-palette": "1.6.0",
36
36
  "@atlaskit/editor-plugin-accessibility-utils": "^1.1.0",
37
37
  "@atlaskit/editor-plugin-analytics": "^1.2.0",
@@ -1,6 +1,7 @@
1
1
  import isEqual from 'lodash/isEqual';
2
2
 
3
- import type { CellAttributes, TableLayout } from '@atlaskit/adf-schema';
3
+ import type { CellAttributes, TableAttributes, TableLayout } from '@atlaskit/adf-schema';
4
+ import { getTableContainerWidth } from '@atlaskit/editor-common/node-width';
4
5
  import type { Command, EditorCommand } from '@atlaskit/editor-common/types';
5
6
  import {
6
7
  closestElement,
@@ -735,7 +736,14 @@ export const setTableAlignment =
735
736
  const nextTableAttrs = {
736
737
  ...tableObject.node.attrs,
737
738
  layout: newAlignment,
738
- };
739
+ } as TableAttributes;
740
+
741
+ // table uses old breakout values in layout attribute to determine width
742
+ // but that information is lost when alignment changes, so we need to ensure we retain that info
743
+ if (!tableObject.node.attrs.width) {
744
+ const tableWidth = getTableContainerWidth(tableObject.node);
745
+ nextTableAttrs.width = tableWidth;
746
+ }
739
747
 
740
748
  tr.setNodeMarkup(tableObject.pos, undefined, nextTableAttrs).setMeta('scrollIntoView', false);
741
749
 
@@ -745,10 +753,18 @@ export const setTableAlignment =
745
753
  export const setTableAlignmentWithTableContentWithPos =
746
754
  (newAlignment: TableLayout, tableNodeWithPos: NodeWithPos): EditorCommand =>
747
755
  ({ tr }) => {
756
+ const table = tableNodeWithPos.node;
748
757
  const nextTableAttrs = {
749
- ...tableNodeWithPos.node.attrs,
758
+ ...table.attrs,
750
759
  layout: newAlignment,
751
- };
760
+ } as TableAttributes;
761
+
762
+ // table uses old breakout values in layout attribute to determine width
763
+ // but that information is lost when alignment changes, so we need to ensure we retain that info
764
+ if (!table.attrs.width) {
765
+ const tableWidth = getTableContainerWidth(table);
766
+ nextTableAttrs.width = tableWidth;
767
+ }
752
768
 
753
769
  tr.setNodeMarkup(tableNodeWithPos.pos, undefined, nextTableAttrs).setMeta(
754
770
  'scrollIntoView',
@@ -13,13 +13,12 @@ import type { EditorView } from '@atlaskit/editor-prosemirror/view';
13
13
  import {
14
14
  akEditorDefaultLayoutWidth,
15
15
  akEditorGutterPadding,
16
- akEditorMediaResizeHandlerPaddingWide,
17
16
  akEditorMobileBreakoutPoint,
18
17
  } from '@atlaskit/editor-shared-styles';
19
18
 
20
19
  import { setTableAlignmentWithTableContentWithPos } from '../commands/misc';
21
20
  import { TABLE_MAX_WIDTH } from '../pm-plugins/table-resizing/utils';
22
- import type { PluginInjectionAPI } from '../types';
21
+ import type { PluginInjectionAPI, TableSharedState } from '../types';
23
22
  import { TableCssClassName as ClassName } from '../types';
24
23
 
25
24
  import { TableResizer } from './TableResizer';
@@ -185,6 +184,8 @@ export const ResizableTableContainer = React.memo(
185
184
  const containerRef = useRef<HTMLDivElement | null>(null);
186
185
  const tableWidthRef = useRef<number>(akEditorDefaultLayoutWidth);
187
186
  const [resizing, setIsResizing] = useState(false);
187
+ const { tableState } = useSharedPluginState(pluginInjectionApi, ['table']);
188
+ const { isFullWidthModeEnabled } = tableState as TableSharedState;
188
189
 
189
190
  const updateContainerHeight = useCallback((height: number | 'auto') => {
190
191
  // current StickyHeader State is not stable to be fetch.
@@ -260,11 +261,29 @@ export const ResizableTableContainer = React.memo(
260
261
  const tableWidth = getTableContainerWidth(node);
261
262
  const { editorViewModeState } = useSharedPluginState(pluginInjectionApi, ['editorViewMode']);
262
263
 
263
- // 76 is currently an accepted padding value considering the spacing for resizer handle
264
- const responsiveContainerWidth = isTableScalingEnabled
265
- ? containerWidth - akEditorGutterPadding * 2 - akEditorMediaResizeHandlerPaddingWide / 2
266
- : containerWidth - akEditorGutterPadding * 2 - akEditorMediaResizeHandlerPaddingWide;
267
-
264
+ let responsiveContainerWidth = 0;
265
+ const resizeHandleSpacing = 12;
266
+ // When Full width editor enabled, a Mac OS user can change "ak-editor-content-area" width by
267
+ // updating Settings -> Appearance -> Show scroll bars from "When scrolling" to "Always". It causes
268
+ // issues when viwport width is less than full width Editor's width. To detect avoid them
269
+ // we need to use lineLength to defined responsiveWidth instead of containerWidth
270
+ // (which does not get updated when Mac setting changes) in Full-width editor.
271
+ if (isFullWidthModeEnabled) {
272
+ // When: Show scroll bars -> containerWidth = akEditorGutterPadding * 2 + lineLength;
273
+ // When: Always -> containerWidth = akEditorGutterPadding * 2 + lineLength + scrollbarWidth;
274
+ // scrollbarWidth can vary. Values can be 14, 15, 16 and up to 20px;
275
+ responsiveContainerWidth = isTableScalingEnabled
276
+ ? lineLength
277
+ : containerWidth - akEditorGutterPadding * 2 - resizeHandleSpacing;
278
+ } else {
279
+ // 76 is currently an accepted padding value considering the spacing for resizer handle
280
+ // containerWidth = width of a DIV with test id="ak-editor-fp-content-area". It is a parent of
281
+ // a DIV with className="ak-editor-content-area". This DIV has padding left and padding right.
282
+ // padding left = padding right = akEditorGutterPadding = 32
283
+ responsiveContainerWidth = isTableScalingEnabled
284
+ ? containerWidth - akEditorGutterPadding * 2
285
+ : containerWidth - akEditorGutterPadding * 2 - resizeHandleSpacing;
286
+ }
268
287
  let width = Math.min(tableWidth, responsiveContainerWidth);
269
288
 
270
289
  if (!isResizing) {
@@ -286,6 +305,7 @@ export const ResizableTableContainer = React.memo(
286
305
  attachAnalyticsEvent,
287
306
  displayGapCursor,
288
307
  isTableAlignmentEnabled,
308
+ isFullWidthModeEnabled,
289
309
  isTableScalingEnabled,
290
310
  isWholeTableInDanger,
291
311
  pluginInjectionApi,