@atlaskit/editor-plugin-table 7.20.1 → 7.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/cjs/nodeviews/TableResizer.js +25 -2
  3. package/dist/cjs/nodeviews/TableStickyScrollbar.js +8 -1
  4. package/dist/cjs/nodeviews/lazy-node-views.js +133 -0
  5. package/dist/cjs/plugin.js +39 -4
  6. package/dist/cjs/pm-plugins/keymap.js +1 -1
  7. package/dist/cjs/pm-plugins/main.js +19 -15
  8. package/dist/cjs/ui/FloatingContextualButton/index.js +4 -2
  9. package/dist/cjs/ui/FloatingContextualMenu/ContextualMenu.js +11 -11
  10. package/dist/es2019/nodeviews/TableResizer.js +25 -2
  11. package/dist/es2019/nodeviews/TableStickyScrollbar.js +8 -1
  12. package/dist/es2019/nodeviews/lazy-node-views.js +116 -0
  13. package/dist/es2019/plugin.js +38 -2
  14. package/dist/es2019/pm-plugins/keymap.js +1 -1
  15. package/dist/es2019/pm-plugins/main.js +19 -7
  16. package/dist/es2019/ui/FloatingContextualButton/index.js +5 -3
  17. package/dist/es2019/ui/FloatingContextualMenu/ContextualMenu.js +11 -11
  18. package/dist/esm/nodeviews/TableResizer.js +25 -2
  19. package/dist/esm/nodeviews/TableStickyScrollbar.js +8 -1
  20. package/dist/esm/nodeviews/lazy-node-views.js +116 -0
  21. package/dist/esm/plugin.js +39 -4
  22. package/dist/esm/pm-plugins/keymap.js +1 -1
  23. package/dist/esm/pm-plugins/main.js +19 -15
  24. package/dist/esm/ui/FloatingContextualButton/index.js +5 -3
  25. package/dist/esm/ui/FloatingContextualMenu/ContextualMenu.js +11 -11
  26. package/dist/types/nodeviews/lazy-node-views.d.ts +26 -0
  27. package/dist/types-ts4.5/nodeviews/lazy-node-views.d.ts +26 -0
  28. package/package.json +7 -4
  29. package/src/nodeviews/TableResizer.tsx +26 -1
  30. package/src/nodeviews/TableStickyScrollbar.ts +8 -1
  31. package/src/nodeviews/lazy-node-views.ts +196 -0
  32. package/src/plugin.tsx +53 -2
  33. package/src/pm-plugins/keymap.ts +1 -1
  34. package/src/pm-plugins/main.ts +18 -19
  35. package/src/ui/FloatingContextualButton/index.tsx +7 -5
  36. package/src/ui/FloatingContextualMenu/ContextualMenu.tsx +11 -13
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @atlaskit/editor-plugin-table
2
2
 
3
+ ## 7.21.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#120893](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/120893)
8
+ [`67a22e5eb05a2`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/67a22e5eb05a2) -
9
+ [ux] [ECA11Y-113] This change adds the keyboard shortcut (Shift+F10) to the Cell Options Tooltip
10
+ and to the Editor Help dialog. This change is behind the `platform_editor_a11y_table_context_menu`
11
+ feature flag.
12
+
13
+ ### Patch Changes
14
+
15
+ - [#120665](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/120665)
16
+ [`a4ee6908e0e2c`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/a4ee6908e0e2c) -
17
+ [ED-23943] Milestone: Initial LazyNodeViewLoading implementation for Table
18
+ - Updated dependencies
19
+
20
+ ## 7.20.2
21
+
22
+ ### Patch Changes
23
+
24
+ - Updated dependencies
25
+
3
26
  ## 7.20.1
4
27
 
5
28
  ### Patch Changes
@@ -16,6 +16,7 @@ var _guideline = require("@atlaskit/editor-common/guideline");
16
16
  var _hooks = require("@atlaskit/editor-common/hooks");
17
17
  var _keymaps = require("@atlaskit/editor-common/keymaps");
18
18
  var _messages = require("@atlaskit/editor-common/messages");
19
+ var _monitoring = require("@atlaskit/editor-common/monitoring");
19
20
  var _resizer = require("@atlaskit/editor-common/resizer");
20
21
  var _utils = require("@atlaskit/editor-common/utils");
21
22
  var _commands = require("@atlaskit/editor-prosemirror/commands");
@@ -101,7 +102,7 @@ var getVisibleGuidelines = function getVisibleGuidelines(guidelines, containerWi
101
102
  });
102
103
  };
103
104
  var TableResizer = exports.TableResizer = function TableResizer(_ref) {
104
- var _findTable, _editorView$state, _pluginInjectionApi$a2;
105
+ var _editorView$state, _pluginInjectionApi$a2;
105
106
  var children = _ref.children,
106
107
  width = _ref.width,
107
108
  maxWidth = _ref.maxWidth,
@@ -142,7 +143,29 @@ var TableResizer = exports.TableResizer = function TableResizer(_ref) {
142
143
  setSnappingEnabled = _useState2[1];
143
144
  var _useIntl = (0, _reactIntlNext.useIntl)(),
144
145
  formatMessage = _useIntl.formatMessage;
145
- var isTableSelected = ((_findTable = (0, _utils2.findTable)((_editorView$state = editorView.state) === null || _editorView$state === void 0 ? void 0 : _editorView$state.selection)) === null || _findTable === void 0 ? void 0 : _findTable.pos) === getPos();
146
+ var currentSelection = (_editorView$state = editorView.state) === null || _editorView$state === void 0 ? void 0 : _editorView$state.selection;
147
+ var tableFromSelection = (0, _react.useMemo)(function () {
148
+ return (0, _utils2.findTable)(currentSelection);
149
+ }, [currentSelection]);
150
+ var tableFromSelectionPosition = tableFromSelection === null || tableFromSelection === void 0 ? void 0 : tableFromSelection.pos;
151
+ var isTableSelected = (0, _react.useMemo)(function () {
152
+ // Avoid call getPos if there is no table in the current selection,
153
+ if (typeof tableFromSelectionPosition !== 'number') {
154
+ return false;
155
+ }
156
+ var currentNodePosition;
157
+ try {
158
+ // The React Table and the ProseMirror can endup out-of-sync
159
+ // ProseMirror always assume the DOM is not managed by other framework
160
+ currentNodePosition = getPos();
161
+ } catch (e) {
162
+ (0, _monitoring.logException)(e, {
163
+ location: 'editor-plugin-table/table-resizer'
164
+ });
165
+ return false;
166
+ }
167
+ return tableFromSelectionPosition === currentNodePosition;
168
+ }, [tableFromSelectionPosition, getPos]);
146
169
  var resizerMinWidth = getResizerMinWidth(node);
147
170
  var handleSize = getResizerHandleHeight(tableRef);
148
171
  var _useMeasureFramerate = (0, _analytics2.useMeasureFramerate)(),
@@ -9,6 +9,7 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
9
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
11
  var _ui = require("@atlaskit/editor-common/ui");
12
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
12
13
  var _types = require("../types");
13
14
  var TableStickyScrollbar = exports.TableStickyScrollbar = /*#__PURE__*/function () {
14
15
  function TableStickyScrollbar(wrapper, view) {
@@ -23,7 +24,13 @@ var TableStickyScrollbar = exports.TableStickyScrollbar = /*#__PURE__*/function
23
24
  });
24
25
  this.wrapper = wrapper;
25
26
  this.view = view;
26
- this.init();
27
+ if ((0, _platformFeatureFlags.fg)('platform_editor_lazy-node-views')) {
28
+ requestAnimationFrame(function () {
29
+ _this.init();
30
+ });
31
+ } else {
32
+ this.init();
33
+ }
27
34
  }
28
35
  (0, _createClass2.default)(TableStickyScrollbar, [{
29
36
  key: "dispose",
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.lazyTableView = exports.lazyTableRowView = exports.lazyTableHeaderView = exports.lazyTableCellView = void 0;
8
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
9
+ var _lazyNodeView = require("@atlaskit/editor-common/lazy-node-view");
10
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
11
+ var _table = require("./table");
12
+ var _TableCell = _interopRequireDefault(require("./TableCell"));
13
+ var _TableRow = _interopRequireDefault(require("./TableRow"));
14
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != (0, _typeof2.default)(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } // TODO: Clean up ED-23976
16
+ var lazyTableView = exports.lazyTableView = function lazyTableView(options) {
17
+ if (!(0, _platformFeatureFlags.fg)('platform_editor_lazy-node-views')) {
18
+ return function (node, view, getPos) {
19
+ return (0, _table.createTableView)(node, view, getPos, options.portalProviderAPI, options.eventDispatcher, options.getEditorContainerWidth, options.getEditorFeatureFlags, options.dispatchAnalyticsEvent, options.pluginInjectionApi, options.isTableAlignmentEnabled);
20
+ };
21
+ }
22
+ var loader = function loader() {
23
+ var result = Promise.resolve().then(function () {
24
+ return _interopRequireWildcard(require( /* webpackChunkName: "@atlaskit-internal_editor-plugin-table_nodeview" */
25
+ './table'));
26
+ }).then(function (_ref) {
27
+ var createTableView = _ref.createTableView;
28
+ return function (node, view, getPos, decorations, getNodeViewOptions) {
29
+ var _getNodeViewOptions = getNodeViewOptions(),
30
+ portalProviderAPI = _getNodeViewOptions.portalProviderAPI,
31
+ eventDispatcher = _getNodeViewOptions.eventDispatcher,
32
+ getEditorContainerWidth = _getNodeViewOptions.getEditorContainerWidth,
33
+ getEditorFeatureFlags = _getNodeViewOptions.getEditorFeatureFlags,
34
+ dispatchAnalyticsEvent = _getNodeViewOptions.dispatchAnalyticsEvent,
35
+ pluginInjectionApi = _getNodeViewOptions.pluginInjectionApi,
36
+ isTableAlignmentEnabled = _getNodeViewOptions.isTableAlignmentEnabled;
37
+ return createTableView(node, view, getPos, portalProviderAPI, eventDispatcher, getEditorContainerWidth, getEditorFeatureFlags, dispatchAnalyticsEvent, pluginInjectionApi, isTableAlignmentEnabled);
38
+ };
39
+ });
40
+ return result;
41
+ };
42
+ return (0, _lazyNodeView.withLazyLoading)({
43
+ nodeName: 'table',
44
+ getNodeViewOptions: function getNodeViewOptions() {
45
+ return options;
46
+ },
47
+ loader: loader
48
+ });
49
+ };
50
+ var lazyTableCellView = exports.lazyTableCellView = function lazyTableCellView(options) {
51
+ if (!(0, _platformFeatureFlags.fg)('platform_editor_lazy-node-views')) {
52
+ return function (node, view, getPos) {
53
+ return new _TableCell.default(node, view, getPos, options.eventDispatcher);
54
+ };
55
+ }
56
+ var loader = function loader() {
57
+ var result = Promise.resolve().then(function () {
58
+ return _interopRequireWildcard(require( /* webpackChunkName: "@atlaskit-internal_editor-plugin-table_nodeview" */
59
+ './TableCell'));
60
+ }).then(function (_ref2) {
61
+ var TableCell = _ref2.default;
62
+ return function (node, view, getPos, decorations, getNodeViewOptions) {
63
+ var _getNodeViewOptions2 = getNodeViewOptions(),
64
+ eventDispatcher = _getNodeViewOptions2.eventDispatcher;
65
+ return new TableCell(node, view, getPos, eventDispatcher);
66
+ };
67
+ });
68
+ return result;
69
+ };
70
+ return (0, _lazyNodeView.withLazyLoading)({
71
+ nodeName: 'tableCell',
72
+ getNodeViewOptions: function getNodeViewOptions() {
73
+ return options;
74
+ },
75
+ loader: loader
76
+ });
77
+ };
78
+ var lazyTableHeaderView = exports.lazyTableHeaderView = function lazyTableHeaderView(options) {
79
+ if (!(0, _platformFeatureFlags.fg)('platform_editor_lazy-node-views')) {
80
+ return function (node, view, getPos) {
81
+ return new _TableCell.default(node, view, getPos, options.eventDispatcher);
82
+ };
83
+ }
84
+ var loader = function loader() {
85
+ var result = Promise.resolve().then(function () {
86
+ return _interopRequireWildcard(require( /* webpackChunkName: "@atlaskit-internal_editor-plugin-table-cell_nodeview" */
87
+ './TableCell'));
88
+ }).then(function (_ref3) {
89
+ var TableCell = _ref3.default;
90
+ return function (node, view, getPos, decorations, getNodeViewOptions) {
91
+ var _getNodeViewOptions3 = getNodeViewOptions(),
92
+ eventDispatcher = _getNodeViewOptions3.eventDispatcher;
93
+ return new TableCell(node, view, getPos, eventDispatcher);
94
+ };
95
+ });
96
+ return result;
97
+ };
98
+ return (0, _lazyNodeView.withLazyLoading)({
99
+ nodeName: 'tableHeader',
100
+ getNodeViewOptions: function getNodeViewOptions() {
101
+ return options;
102
+ },
103
+ loader: loader
104
+ });
105
+ };
106
+ var lazyTableRowView = exports.lazyTableRowView = function lazyTableRowView(options) {
107
+ if (!(0, _platformFeatureFlags.fg)('platform_editor_lazy-node-views')) {
108
+ return function (node, view, getPos) {
109
+ return new _TableRow.default(node, view, getPos, options.eventDispatcher);
110
+ };
111
+ }
112
+ var loader = function loader() {
113
+ var result = Promise.resolve().then(function () {
114
+ return _interopRequireWildcard(require( /* webpackChunkName: "@atlaskit-internal_editor-plugin-table-row_nodeview" */
115
+ './TableRow'));
116
+ }).then(function (_ref4) {
117
+ var TableRow = _ref4.default;
118
+ return function (node, view, getPos, decorations, getNodeViewOptions) {
119
+ var _getNodeViewOptions4 = getNodeViewOptions(),
120
+ eventDispatcher = _getNodeViewOptions4.eventDispatcher;
121
+ return new TableRow(node, view, getPos, eventDispatcher);
122
+ };
123
+ });
124
+ return result;
125
+ };
126
+ return (0, _lazyNodeView.withLazyLoading)({
127
+ nodeName: 'tableRow',
128
+ getNodeViewOptions: function getNodeViewOptions() {
129
+ return options;
130
+ },
131
+ loader: loader
132
+ });
133
+ };
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
8
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
10
  var _react = _interopRequireDefault(require("react"));
10
11
  var _adfSchema = require("@atlaskit/adf-schema");
@@ -34,6 +35,7 @@ var _stickyHeaders = require("./pm-plugins/sticky-headers");
34
35
  var _tableAnalytics = require("./pm-plugins/table-analytics");
35
36
  var _tableLocalId = require("./pm-plugins/table-local-id");
36
37
  var _tableResizing = require("./pm-plugins/table-resizing");
38
+ var _colgroup = require("./pm-plugins/table-resizing/utils/colgroup");
37
39
  var _tableSelectionKeymap = require("./pm-plugins/table-selection-keymap");
38
40
  var _tableWidth = require("./pm-plugins/table-width");
39
41
  var _viewModeSort = require("./pm-plugins/view-mode-sort");
@@ -54,6 +56,39 @@ var defaultGetEditorFeatureFlags = function defaultGetEditorFeatureFlags() {
54
56
 
55
57
  // TODO: duplicating type instead of importing media plugin causing a circular dependency
56
58
 
59
+ // TODO: ED-23944 Move this override to `toDOM` function on table adf-schema nodespec
60
+ var tableNodeSpecWithFixedToDOM = function tableNodeSpecWithFixedToDOM(tableOptions) {
61
+ if (!(0, _platformFeatureFlags.fg)('platform_editor_lazy-node-views')) {
62
+ return _adfSchema.table;
63
+ }
64
+ return _objectSpread(_objectSpread({}, _adfSchema.table), {}, {
65
+ toDOM: function toDOM(node) {
66
+ var attrs = {
67
+ 'data-number-column': node.attrs.isNumberColumnEnabled,
68
+ 'data-layout': node.attrs.layout,
69
+ 'data-autosize': node.attrs.__autoSize,
70
+ 'data-table-local-id': node.attrs.localId,
71
+ 'data-table-width': node.attrs.width
72
+ };
73
+ var colgroup = '';
74
+ var _pluginConfig = (0, _createPluginConfig.pluginConfig)(tableOptions),
75
+ allowColumnResizing = _pluginConfig.allowColumnResizing;
76
+ if (allowColumnResizing) {
77
+ colgroup = ['colgroup', {}].concat((0, _toConsumableArray2.default)((0, _colgroup.generateColgroup)(node)));
78
+ }
79
+ return ['div', {
80
+ class: 'tableView-content-wrap'
81
+ }, ['div', {
82
+ class: 'pm-table-container'
83
+ }, ['div', {
84
+ class: 'pm-table-wrapper',
85
+ 'data-number-column': node.attrs.isNumberColumnEnabled,
86
+ 'data-layout': node.attrs.layout
87
+ }, ['table', attrs, colgroup, ['tbody', 0]]]]];
88
+ }
89
+ });
90
+ };
91
+
57
92
  /**
58
93
  * Table plugin to be added to an `EditorPresetBuilder` and used with `ComposableEditor`
59
94
  * from `@atlaskit/editor-core`.
@@ -137,7 +172,7 @@ var tablesPlugin = function tablesPlugin(_ref) {
137
172
  nodes: function nodes() {
138
173
  return [{
139
174
  name: 'table',
140
- node: _adfSchema.table
175
+ node: tableNodeSpecWithFixedToDOM(options === null || options === void 0 ? void 0 : options.tableOptions)
141
176
  }, {
142
177
  name: 'tableHeader',
143
178
  node: _adfSchema.tableHeader
@@ -180,8 +215,8 @@ var tablesPlugin = function tablesPlugin(_ref) {
180
215
  isTableScalingEnabled = _ref5.isTableScalingEnabled,
181
216
  isNewColumnResizingEnabled = _ref5.isNewColumnResizingEnabled,
182
217
  isTableAlignmentEnabled = _ref5.isTableAlignmentEnabled;
183
- var _pluginConfig = (0, _createPluginConfig.pluginConfig)(tableOptions),
184
- allowColumnResizing = _pluginConfig.allowColumnResizing;
218
+ var _pluginConfig2 = (0, _createPluginConfig.pluginConfig)(tableOptions),
219
+ allowColumnResizing = _pluginConfig2.allowColumnResizing;
185
220
  return allowColumnResizing ? (0, _tableResizing.createPlugin)(dispatch, {
186
221
  lastColumnResizable: !fullWidthEnabled
187
222
  }, defaultGetEditorContainerWidth, getEditorFeatureFlags || defaultGetEditorFeatureFlags, editorAnalyticsAPI, isTableScalingEnabled || false, isNewColumnResizingEnabled, isTableAlignmentEnabled) : undefined;
@@ -362,7 +397,7 @@ var tablesPlugin = function tablesPlugin(_ref) {
362
397
  isCellMenuOpenByKeyboard = _ref19.isCellMenuOpenByKeyboard;
363
398
  var allowControls = pluginConfig.allowControls;
364
399
  var stickyHeader = stickyHeadersState ? (0, _stickyHeaders.findStickyHeaderForTable)(stickyHeadersState, tablePos) : undefined;
365
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, targetCellPosition && (tableRef || isCellMenuOpenByKeyboard && (0, _platformFeatureFlags.fg)('platform.editor.a11y-table-context-menu_y4c9c')) && !isResizing && options && options.allowContextualMenu && /*#__PURE__*/_react.default.createElement(_FloatingContextualButton.default, {
400
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, targetCellPosition && (tableRef || isCellMenuOpenByKeyboard && (0, _platformFeatureFlags.fg)('platform_editor_a11y_table_context_menu')) && !isResizing && options && options.allowContextualMenu && /*#__PURE__*/_react.default.createElement(_FloatingContextualButton.default, {
366
401
  isNumberColumnEnabled: tableNode && tableNode.attrs.isNumberColumnEnabled,
367
402
  editorView: editorView,
368
403
  tableNode: tableNode,
@@ -82,7 +82,7 @@ function keymapPlugin(getEditorContainerWidth, editorAnalyticsAPI, dragAndDropEn
82
82
  ariaNotify: ariaNotifyPlugin,
83
83
  getIntl: getIntl
84
84
  }), list);
85
- if ((0, _platformFeatureFlags.fg)('platform.editor.a11y-table-context-menu_y4c9c')) {
85
+ if ((0, _platformFeatureFlags.fg)('platform_editor_a11y_table_context_menu')) {
86
86
  (0, _keymaps.bindKeymapWithCommand)(_keymaps.focusToContextMenuTrigger.common, (0, _commands2.setFocusToCellMenu)(), list);
87
87
  }
88
88
  return (0, _keymap.keymap)(list);
@@ -19,9 +19,7 @@ var _commands = require("../commands");
19
19
  var _columnResize = require("../commands/column-resize");
20
20
  var _misc = require("../commands/misc");
21
21
  var _eventHandlers = require("../event-handlers");
22
- var _table = require("../nodeviews/table");
23
- var _TableCell = _interopRequireDefault(require("../nodeviews/TableCell"));
24
- var _TableRow = _interopRequireDefault(require("../nodeviews/TableRow"));
22
+ var _lazyNodeViews = require("../nodeviews/lazy-node-views");
25
23
  var _plugin = require("../pm-plugins/decorations/plugin");
26
24
  var _transforms2 = require("../transforms");
27
25
  var _types = require("../types");
@@ -258,18 +256,24 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatchAnalytic
258
256
  return false;
259
257
  },
260
258
  nodeViews: {
261
- table: function table(node, view, getPos) {
262
- return (0, _table.createTableView)(node, view, getPos, portalProviderAPI, eventDispatcher, getEditorContainerWidth, getEditorFeatureFlags, dispatchAnalyticsEvent, pluginInjectionApi, isTableAlignmentEnabled);
263
- },
264
- tableRow: function tableRow(node, view, getPos) {
265
- return new _TableRow.default(node, view, getPos, eventDispatcher);
266
- },
267
- tableCell: function tableCell(node, view, getPos) {
268
- return new _TableCell.default(node, view, getPos, eventDispatcher);
269
- },
270
- tableHeader: function tableHeader(node, view, getPos) {
271
- return new _TableCell.default(node, view, getPos, eventDispatcher);
272
- }
259
+ table: (0, _lazyNodeViews.lazyTableView)({
260
+ portalProviderAPI: portalProviderAPI,
261
+ eventDispatcher: eventDispatcher,
262
+ getEditorContainerWidth: getEditorContainerWidth,
263
+ getEditorFeatureFlags: getEditorFeatureFlags,
264
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
265
+ pluginInjectionApi: pluginInjectionApi,
266
+ isTableAlignmentEnabled: isTableAlignmentEnabled
267
+ }),
268
+ tableRow: (0, _lazyNodeViews.lazyTableRowView)({
269
+ eventDispatcher: eventDispatcher
270
+ }),
271
+ tableCell: (0, _lazyNodeViews.lazyTableCellView)({
272
+ eventDispatcher: eventDispatcher
273
+ }),
274
+ tableHeader: (0, _lazyNodeViews.lazyTableHeaderView)({
275
+ eventDispatcher: eventDispatcher
276
+ })
273
277
  },
274
278
  handleDOMEvents: {
275
279
  focus: _eventHandlers.handleFocus,
@@ -11,6 +11,7 @@ var _react2 = require("@emotion/react");
11
11
  var _reactIntlNext = require("react-intl-next");
12
12
  var _analytics = require("@atlaskit/editor-common/analytics");
13
13
  var _errorBoundary = require("@atlaskit/editor-common/error-boundary");
14
+ var _keymaps = require("@atlaskit/editor-common/keymaps");
14
15
  var _messages = require("@atlaskit/editor-common/messages");
15
16
  var _ui = require("@atlaskit/editor-common/ui");
16
17
  var _uiMenu = require("@atlaskit/editor-common/ui-menu");
@@ -56,7 +57,7 @@ var FloatingContextualButtonInner = /*#__PURE__*/_react.default.memo(function (p
56
57
  var targetCellRef;
57
58
  targetCellRef = (0, _utils.findDomRefAtPos)(targetCellPosition, domAtPos);
58
59
  (0, _react.useEffect)(function () {
59
- if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-table-context-menu_y4c9c')) {
60
+ if ((0, _platformFeatureFlags.fg)('platform_editor_a11y_table_context_menu')) {
60
61
  if (isCellMenuOpenByKeyboard && !isContextualMenuOpen) {
61
62
  var state = editorView.state,
62
63
  dispatch = editorView.dispatch;
@@ -81,12 +82,13 @@ var FloatingContextualButtonInner = /*#__PURE__*/_react.default.memo(function (p
81
82
  className: _types.TableCssClassName.CONTEXTUAL_MENU_BUTTON,
82
83
  selected: isContextualMenuOpen,
83
84
  title: labelCellOptions,
85
+ keymap: (0, _platformFeatureFlags.fg)('platform_editor_a11y_table_context_menu') ? _keymaps.focusToContextMenuTrigger : undefined,
84
86
  onClick: handleClick,
85
87
  iconBefore: (0, _react2.jsx)(_chevronDown.default, {
86
88
  label: ""
87
89
  }),
88
90
  "aria-label": labelCellOptions,
89
- "aria-expanded": (0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-table-context-menu_y4c9c') ? isContextualMenuOpen : undefined
91
+ "aria-expanded": (0, _platformFeatureFlags.fg)('platform_editor_a11y_table_context_menu') ? isContextualMenuOpen : undefined
90
92
  }));
91
93
  var parentSticky = targetCellRef.parentElement && targetCellRef.parentElement.className.indexOf('sticky') > -1;
92
94
  if (stickyHeader && parentSticky && tableWrapper) {
@@ -94,7 +94,7 @@ var ContextualMenu = exports.ContextualMenu = /*#__PURE__*/function (_Component)
94
94
  var background = (0, _editorPalette.hexToEditorBackgroundPaletteColor)((node === null || node === void 0 || (_node$attrs = node.attrs) === null || _node$attrs === void 0 ? void 0 : _node$attrs.background) || '#ffffff');
95
95
  var selectedRowIndex;
96
96
  var selectedColumnIndex;
97
- if ((0, _platformFeatureFlags.fg)('platform.editor.a11y-table-context-menu_y4c9c')) {
97
+ if ((0, _platformFeatureFlags.fg)('platform_editor_a11y_table_context_menu')) {
98
98
  var selectedRowAndColumnFromPalette = (0, _uiColor.getSelectedRowAndColumnFromPalette)(_uiColor.cellBackgroundColorPalette, background, _consts.colorPalletteColumns);
99
99
  selectedRowIndex = selectedRowAndColumnFromPalette.selectedRowIndex;
100
100
  selectedColumnIndex = selectedRowAndColumnFromPalette.selectedColumnIndex;
@@ -122,7 +122,7 @@ var ContextualMenu = exports.ContextualMenu = /*#__PURE__*/function (_Component)
122
122
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
123
123
  ,
124
124
  className: isDragAndDropEnabled ? _types.TableCssClassName.CONTEXTUAL_MENU_ICON_SMALL : _types.TableCssClassName.CONTEXTUAL_MENU_ICON
125
- }), (0, _platformFeatureFlags.fg)('platform.editor.a11y-table-context-menu_y4c9c') ? isSubmenuOpen && (0, _react2.jsx)("div", {
125
+ }), (0, _platformFeatureFlags.fg)('platform_editor_a11y_table_context_menu') ? isSubmenuOpen && (0, _react2.jsx)("div", {
126
126
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
127
127
  className: _types.TableCssClassName.CONTEXTUAL_SUBMENU,
128
128
  ref: _this.handleSubMenuRef
@@ -167,7 +167,7 @@ var ContextualMenu = exports.ContextualMenu = /*#__PURE__*/function (_Component)
167
167
  hexToPaletteColor: _editorPalette.hexToEditorBackgroundPaletteColor
168
168
  }
169
169
  }))),
170
- 'aria-expanded': (0, _platformFeatureFlags.fg)('platform.editor.a11y-table-context-menu_y4c9c') ? isSubmenuOpen : undefined
170
+ 'aria-expanded': (0, _platformFeatureFlags.fg)('platform_editor_a11y_table_context_menu') ? isSubmenuOpen : undefined
171
171
  };
172
172
  }
173
173
  });
@@ -469,7 +469,7 @@ var ContextualMenu = exports.ContextualMenu = /*#__PURE__*/function (_Component)
469
469
  tableWithFixedColumnWidthsOption = _ref4$tableWithFixedC === void 0 ? false : _ref4$tableWithFixedC;
470
470
  // context menu opened by keyboard and any item except 'background' activated
471
471
  // or color has been chosen from color palette
472
- if (isCellMenuOpenByKeyboard && (item.value.name !== 'background' || item.value.name === 'background' && _this.state.isSubmenuOpen) && (0, _platformFeatureFlags.fg)('platform.editor.a11y-table-context-menu_y4c9c')) {
472
+ if (isCellMenuOpenByKeyboard && (item.value.name !== 'background' || item.value.name === 'background' && _this.state.isSubmenuOpen) && (0, _platformFeatureFlags.fg)('platform_editor_a11y_table_context_menu')) {
473
473
  var tr = state.tr;
474
474
  tr.setMeta(_pluginKey.pluginKey, {
475
475
  type: 'SET_CELL_MENU_OPEN',
@@ -536,7 +536,7 @@ var ContextualMenu = exports.ContextualMenu = /*#__PURE__*/function (_Component)
536
536
  // 1st time when user chooses the background color item.
537
537
  // 2nd when color has been chosen from color palette.
538
538
  // here we are handling the 1st call relying on the isSubmenuOpen state value
539
- if (isCellMenuOpenByKeyboard && !_this.state.isSubmenuOpen && (0, _platformFeatureFlags.fg)('platform.editor.a11y-table-context-menu_y4c9c')) {
539
+ if (isCellMenuOpenByKeyboard && !_this.state.isSubmenuOpen && (0, _platformFeatureFlags.fg)('platform_editor_a11y_table_context_menu')) {
540
540
  _this.setState({
541
541
  isSubmenuOpen: true
542
542
  });
@@ -565,7 +565,7 @@ var ContextualMenu = exports.ContextualMenu = /*#__PURE__*/function (_Component)
565
565
  dispatch = _this$props12$editorV.dispatch,
566
566
  dom = _this$props12$editorV.dom,
567
567
  isCellMenuOpenByKeyboard = _this$props12.isCellMenuOpenByKeyboard;
568
- if ((0, _platformFeatureFlags.fg)('platform.editor.a11y-table-context-menu_y4c9c')) {
568
+ if ((0, _platformFeatureFlags.fg)('platform_editor_a11y_table_context_menu')) {
569
569
  if (payload) {
570
570
  var event = payload.event;
571
571
  if (event && event instanceof KeyboardEvent) {
@@ -657,7 +657,7 @@ var ContextualMenu = exports.ContextualMenu = /*#__PURE__*/function (_Component)
657
657
  (0, _createClass2.default)(ContextualMenu, [{
658
658
  key: "componentDidMount",
659
659
  value: function componentDidMount() {
660
- if ((0, _platformFeatureFlags.fg)('platform.editor.a11y-table-context-menu_y4c9c')) {
660
+ if ((0, _platformFeatureFlags.fg)('platform_editor_a11y_table_context_menu')) {
661
661
  // ArrowKeyNavigationProvider in DropdownMenu expects that menu handle will stay focused
662
662
  // until user pressed ArrowDown.
663
663
  // Behavior above fails the A11Y requirement about first item in menu should be focused immediately.
@@ -684,7 +684,7 @@ var ContextualMenu = exports.ContextualMenu = /*#__PURE__*/function (_Component)
684
684
  isDragAndDropEnabled = _getPluginState13.isDragAndDropEnabled;
685
685
  var items = isDragAndDropEnabled ? this.createNewContextMenuItems() : this.createOriginalContextMenuItems();
686
686
  var isOpenAllowed = false;
687
- if ((0, _platformFeatureFlags.fg)('platform.editor.a11y-table-context-menu_y4c9c')) {
687
+ if ((0, _platformFeatureFlags.fg)('platform_editor_a11y_table_context_menu')) {
688
688
  isOpenAllowed = isCellMenuOpenByKeyboard ? this.state.isOpenAllowed : isOpen;
689
689
  } else {
690
690
  isOpenAllowed = isOpen;
@@ -700,7 +700,7 @@ var ContextualMenu = exports.ContextualMenu = /*#__PURE__*/function (_Component)
700
700
  ,
701
701
  arrowKeyNavigationProviderOptions: {
702
702
  type: _uiMenu.ArrowKeyNavigationType.MENU,
703
- disableArrowKeyNavigation: isCellMenuOpenByKeyboard && !this.state.isSubmenuOpen && (0, _platformFeatureFlags.fg)('platform.editor.a11y-table-context-menu_y4c9c') ? false : true
703
+ disableArrowKeyNavigation: isCellMenuOpenByKeyboard && !this.state.isSubmenuOpen && (0, _platformFeatureFlags.fg)('platform_editor_a11y_table_context_menu') ? false : true
704
704
  },
705
705
  items: items,
706
706
  isOpen: isOpenAllowed,
@@ -710,7 +710,7 @@ var ContextualMenu = exports.ContextualMenu = /*#__PURE__*/function (_Component)
710
710
  onMouseLeave: this.handleItemMouseLeave,
711
711
  fitHeight: 188,
712
712
  fitWidth: isDragAndDropEnabled ? _consts.contextualMenuDropdownWidthDnD : _consts.contextualMenuDropdownWidth,
713
- shouldFocusFirstItem: (0, _platformFeatureFlags.fg)('platform.editor.a11y-table-context-menu_y4c9c') ? function () {
713
+ shouldFocusFirstItem: (0, _platformFeatureFlags.fg)('platform_editor_a11y_table_context_menu') ? function () {
714
714
  return Boolean(isCellMenuOpenByKeyboard);
715
715
  } : undefined,
716
716
  boundariesElement: boundariesElement,
@@ -718,7 +718,7 @@ var ContextualMenu = exports.ContextualMenu = /*#__PURE__*/function (_Component)
718
718
  section: isDragAndDropEnabled ? {
719
719
  hasSeparator: true
720
720
  } : undefined,
721
- allowEnterDefaultBehavior: (0, _platformFeatureFlags.fg)('platform.editor.a11y-table-context-menu_y4c9c') ? this.state.isSubmenuOpen : false
721
+ allowEnterDefaultBehavior: (0, _platformFeatureFlags.fg)('platform_editor_a11y_table_context_menu') ? this.state.isSubmenuOpen : false
722
722
  }));
723
723
  }
724
724
  }]);
@@ -6,6 +6,7 @@ import { getGuidelinesWithHighlights } from '@atlaskit/editor-common/guideline';
6
6
  import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
7
7
  import { focusTableResizer, ToolTipContent } from '@atlaskit/editor-common/keymaps';
8
8
  import { tableMessages as messages } from '@atlaskit/editor-common/messages';
9
+ import { logException } from '@atlaskit/editor-common/monitoring';
9
10
  import { ResizerNext } from '@atlaskit/editor-common/resizer';
10
11
  import { browser } from '@atlaskit/editor-common/utils';
11
12
  import { chainCommands } from '@atlaskit/editor-prosemirror/commands';
@@ -110,7 +111,7 @@ export const TableResizer = ({
110
111
  pluginInjectionApi,
111
112
  isFullWidthModeEnabled
112
113
  }) => {
113
- var _findTable, _editorView$state, _pluginInjectionApi$a2;
114
+ var _editorView$state, _pluginInjectionApi$a2;
114
115
  const currentGap = useRef(0);
115
116
  // track resizing state - use ref over state to avoid re-render
116
117
  const isResizing = useRef(false);
@@ -129,7 +130,29 @@ export const TableResizer = ({
129
130
  const {
130
131
  formatMessage
131
132
  } = useIntl();
132
- const isTableSelected = ((_findTable = findTable((_editorView$state = editorView.state) === null || _editorView$state === void 0 ? void 0 : _editorView$state.selection)) === null || _findTable === void 0 ? void 0 : _findTable.pos) === getPos();
133
+ const currentSelection = (_editorView$state = editorView.state) === null || _editorView$state === void 0 ? void 0 : _editorView$state.selection;
134
+ const tableFromSelection = useMemo(() => {
135
+ return findTable(currentSelection);
136
+ }, [currentSelection]);
137
+ const tableFromSelectionPosition = tableFromSelection === null || tableFromSelection === void 0 ? void 0 : tableFromSelection.pos;
138
+ const isTableSelected = useMemo(() => {
139
+ // Avoid call getPos if there is no table in the current selection,
140
+ if (typeof tableFromSelectionPosition !== 'number') {
141
+ return false;
142
+ }
143
+ let currentNodePosition;
144
+ try {
145
+ // The React Table and the ProseMirror can endup out-of-sync
146
+ // ProseMirror always assume the DOM is not managed by other framework
147
+ currentNodePosition = getPos();
148
+ } catch (e) {
149
+ logException(e, {
150
+ location: 'editor-plugin-table/table-resizer'
151
+ });
152
+ return false;
153
+ }
154
+ return tableFromSelectionPosition === currentNodePosition;
155
+ }, [tableFromSelectionPosition, getPos]);
133
156
  const resizerMinWidth = getResizerMinWidth(node);
134
157
  const handleSize = getResizerHandleHeight(tableRef);
135
158
  const {
@@ -1,5 +1,6 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import { findOverflowScrollParent } from '@atlaskit/editor-common/ui';
3
+ import { fg } from '@atlaskit/platform-feature-flags';
3
4
  import { TableCssClassName as ClassName } from '../types';
4
5
  export class TableStickyScrollbar {
5
6
  constructor(wrapper, view) {
@@ -12,7 +13,13 @@ export class TableStickyScrollbar {
12
13
  });
13
14
  this.wrapper = wrapper;
14
15
  this.view = view;
15
- this.init();
16
+ if (fg('platform_editor_lazy-node-views')) {
17
+ requestAnimationFrame(() => {
18
+ this.init();
19
+ });
20
+ } else {
21
+ this.init();
22
+ }
16
23
  }
17
24
  dispose() {
18
25
  if (this.stickyScrollbarContainerElement) {