@atlaskit/renderer 151.0.1 → 151.0.3

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 CHANGED
@@ -1,5 +1,26 @@
1
1
  # @atlaskit/renderer
2
2
 
3
+ ## 151.0.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [`72696d778e3ae`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/72696d778e3ae) -
8
+ Reduce renderer table cell cloning and map active cell highlights through document changes behind
9
+ platform_editor_table_q4_perf_patch.
10
+
11
+ Only evaluate the performance patch when platform_editor_table_q4_loveability is enabled.
12
+
13
+ - Updated dependencies
14
+
15
+ ## 151.0.2
16
+
17
+ ### Patch Changes
18
+
19
+ - [`bc79027197d91`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/bc79027197d91) -
20
+ Clean up the platform_ssr_smartlink_cards feature gate, retaining SSR cards when enabled by the
21
+ consumer.
22
+ - Updated dependencies
23
+
3
24
  ## 151.0.1
4
25
 
5
26
  ### Patch Changes
@@ -15,7 +15,6 @@ var _datasource = require("@atlaskit/editor-common/utils/datasource");
15
15
  var _WidthProvider = require("@atlaskit/editor-common/WidthProvider");
16
16
  var _editorSmartLinkDraggable = require("@atlaskit/editor-smart-link-draggable");
17
17
  var _datasourceTableViewWithWrappers = require("@atlaskit/link-datasource/datasource-table-view-with-wrappers");
18
- var _fg = require("@atlaskit/platform-feature-flags/fg");
19
18
  var _lazy = require("@atlaskit/smart-card/card/lazy");
20
19
  var _ssr = require("@atlaskit/smart-card/ssr");
21
20
  var _consts = require("../../consts");
@@ -162,7 +161,7 @@ function BlockCard(props) {
162
161
  });
163
162
  }
164
163
  var cardComponent;
165
- if (smartLinks !== null && smartLinks !== void 0 && smartLinks.ssr && url && (0, _fg.fg)('platform_ssr_smartlink_cards')) {
164
+ if (smartLinks !== null && smartLinks !== void 0 && smartLinks.ssr && url) {
166
165
  cardComponent = (0, _react.jsx)(_ssr.CardSSR, (0, _extends2.default)({
167
166
  appearance: "block",
168
167
  platform: platform
@@ -12,9 +12,9 @@ var _runtime = require("@compiled/react/runtime");
12
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
13
  var _react = _interopRequireWildcard(require("react"));
14
14
  var _annotation = require("@atlaskit/adf-schema/annotation");
15
- var _analytics = require("@atlaskit/editor-common/analytics");
16
- var _mediaSingle = require("@atlaskit/editor-common/media-single");
17
- var _types = require("@atlaskit/editor-common/types");
15
+ var _inlineCommentEvents = require("@atlaskit/editor-common/analytics/types/inline-comment-events");
16
+ var _CommentBadgeNext = require("@atlaskit/editor-common/media-single/CommentBadgeNext");
17
+ var _emitter = require("@atlaskit/editor-common/types/emitter");
18
18
  var _AnnotationManagerContext = require("../../ui/annotations/contexts/AnnotationManagerContext");
19
19
  var _AnnotationRangeContext = require("../../ui/annotations/contexts/AnnotationRangeContext");
20
20
  var _useInlineCommentSubscriber = require("../../ui/annotations/hooks/use-inline-comment-subscriber");
@@ -76,11 +76,11 @@ var ExtensionCommentsEnabled = function ExtensionCommentsEnabled(_ref) {
76
76
  var onBlur = function onBlur() {
77
77
  return setFocusedId(undefined);
78
78
  };
79
- updateSubscriber.on(_types.AnnotationUpdateEvent.SET_ANNOTATION_FOCUS, onFocus);
80
- updateSubscriber.on(_types.AnnotationUpdateEvent.REMOVE_ANNOTATION_FOCUS, onBlur);
79
+ updateSubscriber.on(_emitter.AnnotationUpdateEvent.SET_ANNOTATION_FOCUS, onFocus);
80
+ updateSubscriber.on(_emitter.AnnotationUpdateEvent.REMOVE_ANNOTATION_FOCUS, onBlur);
81
81
  return function () {
82
- updateSubscriber.off(_types.AnnotationUpdateEvent.SET_ANNOTATION_FOCUS, onFocus);
83
- updateSubscriber.off(_types.AnnotationUpdateEvent.REMOVE_ANNOTATION_FOCUS, onBlur);
82
+ updateSubscriber.off(_emitter.AnnotationUpdateEvent.SET_ANNOTATION_FOCUS, onFocus);
83
+ updateSubscriber.off(_emitter.AnnotationUpdateEvent.REMOVE_ANNOTATION_FOCUS, onBlur);
84
84
  };
85
85
  }, [updateSubscriber]);
86
86
  var onClick = (0, _react.useCallback)(function (event) {
@@ -89,11 +89,11 @@ var ExtensionCommentsEnabled = function ExtensionCommentsEnabled(_ref) {
89
89
  // Anchor the thread to this chart, not an icon inside the badge or a nested renderer.
90
90
  var extension = event.currentTarget.closest('.ak-renderer-extension');
91
91
  if (extension && activeIds.length) {
92
- updateSubscriber === null || updateSubscriber === void 0 || updateSubscriber.emit(_types.AnnotationUpdateEvent.ON_ANNOTATION_CLICK, {
92
+ updateSubscriber === null || updateSubscriber === void 0 || updateSubscriber.emit(_emitter.AnnotationUpdateEvent.ON_ANNOTATION_CLICK, {
93
93
  annotationIds: activeIds,
94
94
  eventTarget: extension,
95
95
  eventTargetType: 'extension',
96
- viewMethod: _analytics.VIEW_METHOD.BADGE
96
+ viewMethod: _inlineCommentEvents.VIEW_METHOD.BADGE
97
97
  });
98
98
  }
99
99
  }, [activeIds, updateSubscriber]);
@@ -121,7 +121,7 @@ var ExtensionCommentsEnabled = function ExtensionCommentsEnabled(_ref) {
121
121
  });
122
122
  }), enabled && activeIds.length > 0 && updateSubscriber && /*#__PURE__*/_react.default.createElement("div", {
123
123
  className: (0, _runtime.ax)(["_kqswstnw _154iu2gc _1xi2u2gc"])
124
- }, /*#__PURE__*/_react.default.createElement(_mediaSingle.CommentBadgeNext, {
124
+ }, /*#__PURE__*/_react.default.createElement(_CommentBadgeNext.CommentBadgeNext, {
125
125
  status: active ? 'active' : entered ? 'entered' : 'default',
126
126
  onClick: onClick,
127
127
  onMouseEnter: onMouseEnter,
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.withTableCellEdgeProps = exports.getCachedTableEdges = exports.cacheTableEdges = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
11
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
12
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
13
+ // The table node includes the number-column setting. Cache only its edge data.
14
+ var edgeCache = new WeakMap();
15
+ var noEdges = {
16
+ reachesTop: false,
17
+ reachesBottom: false,
18
+ reachesLeft: false,
19
+ reachesRight: false
20
+ };
21
+ var getCachedTableEdges = exports.getCachedTableEdges = function getCachedTableEdges(node) {
22
+ return edgeCache.get(node);
23
+ };
24
+ var cacheTableEdges = exports.cacheTableEdges = function cacheTableEdges(node, edges) {
25
+ // The existing geometry builder provides every cell; retain only the perimeter.
26
+ var _iterator = _createForOfIteratorHelper(edges),
27
+ _step;
28
+ try {
29
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
30
+ var _step$value = (0, _slicedToArray2.default)(_step.value, 2),
31
+ offset = _step$value[0],
32
+ props = _step$value[1];
33
+ if (!props.reachesTop && !props.reachesBottom && !props.reachesLeft && !props.reachesRight) {
34
+ edges.delete(offset);
35
+ }
36
+ }
37
+ } catch (err) {
38
+ _iterator.e(err);
39
+ } finally {
40
+ _iterator.f();
41
+ }
42
+ edgeCache.set(node, edges);
43
+ };
44
+ var withTableCellEdgeProps = exports.withTableCellEdgeProps = function withTableCellEdgeProps(element) {
45
+ var edges = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noEdges;
46
+ var current = element.props;
47
+ if (Boolean(current.reachesTop) === edges.reachesTop && Boolean(current.reachesBottom) === edges.reachesBottom && Boolean(current.reachesLeft) === edges.reachesLeft && Boolean(current.reachesRight) === edges.reachesRight) {
48
+ return element;
49
+ }
50
+ // Also clears stale edges when a previously decorated element becomes an interior cell.
51
+ return /*#__PURE__*/_react.default.cloneElement(element, edges);
52
+ };
@@ -24,6 +24,7 @@ var _utils = require("@atlaskit/editor-common/utils");
24
24
  var _compareNodes = require("@atlaskit/editor-common/utils/compareNodes");
25
25
  var _compose = require("@atlaskit/editor-common/utils/compose");
26
26
  var _constants = require("@atlaskit/editor-shared-styles/constants");
27
+ var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
27
28
  var _fg = require("@atlaskit/platform-feature-flags/fg");
28
29
  var _editorExperiment = require("@atlaskit/tmp-editor-statsig/editor-experiment");
29
30
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
@@ -32,6 +33,7 @@ var _rendererContext = require("../../renderer-context");
32
33
  var _style = require("../../ui/Renderer/style");
33
34
  var _SmartCardStorage = require("../../ui/SmartCardStorage");
34
35
  var _appearance = require("../utils/appearance");
36
+ var _cachedCellEdges = require("./table/cached-cell-edges");
35
37
  var _contentMode2 = require("./table/content-mode");
36
38
  var _sticky = require("./table/sticky");
37
39
  var _table2 = require("./table/table");
@@ -796,6 +798,12 @@ var TableContainer = exports.TableContainer = /*#__PURE__*/function (_React$Comp
796
798
  }]);
797
799
  }(_react.default.Component);
798
800
  var getCellEdgePropsByCellOffset = function getCellEdgePropsByCellOffset(tableNode, isNumberColumnEnabled) {
801
+ // The serializer uses the node attribute. Other callers can supply a different render prop.
802
+ var useCachedEdges = (0, _expValEquals.expValEquals)('platform_editor_table_q4_loveability', 'isEnabled', true) && (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_table_q4_perf_patch') && Boolean(isNumberColumnEnabled) === Boolean(tableNode.attrs.isNumberColumnEnabled);
803
+ var cached = useCachedEdges ? (0, _cachedCellEdges.getCachedTableEdges)(tableNode) : undefined;
804
+ if (cached) {
805
+ return cached;
806
+ }
799
807
  var cellEdgePropsByCellOffset = new Map();
800
808
  var cellRightByCellOffset = new Map();
801
809
  var occupiedGrid = [];
@@ -843,6 +851,9 @@ var getCellEdgePropsByCellOffset = function getCellEdgePropsByCellOffset(tableNo
843
851
  edgeProps.reachesRight = cellRight >= tableWidth;
844
852
  }
845
853
  });
854
+ if (useCachedEdges) {
855
+ (0, _cachedCellEdges.cacheTableEdges)(tableNode, cellEdgePropsByCellOffset);
856
+ }
846
857
  return cellEdgePropsByCellOffset;
847
858
  };
848
859
  var isRenderedTableCell = function isRenderedTableCell(element) {
@@ -851,6 +862,7 @@ var isRenderedTableCell = function isRenderedTableCell(element) {
851
862
  return nodeType === 'tableCell' || nodeType === 'tableHeader' || element.type === _tableCell.TableCell || element.type === _tableCell.TableHeader;
852
863
  };
853
864
  var addTableCellEdgePropsThroughWrappers = function addTableCellEdgePropsThroughWrappers(rows, tableNode, isNumberColumnEnabled) {
865
+ var useCachedEdges = (0, _expValEquals.expValEquals)('platform_editor_table_q4_loveability', 'isEnabled', true) && (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_table_q4_perf_patch');
854
866
  try {
855
867
  if (!tableNode) {
856
868
  return rows;
@@ -867,6 +879,9 @@ var addTableCellEdgePropsThroughWrappers = function addTableCellEdgePropsThrough
867
879
  var edgeProps = cellEdgePropsByCellOffset.get(cellOffset);
868
880
  cellIndex += 1;
869
881
  cellOffset += cellNode.nodeSize;
882
+ if (useCachedEdges) {
883
+ return (0, _cachedCellEdges.withTableCellEdgeProps)(element, edgeProps);
884
+ }
870
885
  return edgeProps ? /*#__PURE__*/_react.default.cloneElement(element, edgeProps) : element;
871
886
  }
872
887
  var _ref5 = element.props,
@@ -11,7 +11,7 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
11
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
12
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
13
  var _react = _interopRequireDefault(require("react"));
14
- var _taskDecision = require("@atlaskit/task-decision");
14
+ var _resourcedTaskItem = _interopRequireDefault(require("@atlaskit/task-decision/resourced-task-item"));
15
15
  var _excluded = ["objectAri", "isRenderer"];
16
16
  function TaskItemWithProviders(props) {
17
17
  var objectAri = props.objectAri,
@@ -59,7 +59,7 @@ function TaskItemWithProviders(props) {
59
59
  var resolvedObjectId = resolvedContextProvider && resolvedContextProvider.objectId || objectAri;
60
60
  return /*#__PURE__*/_react.default.createElement("div", {
61
61
  "data-task-local-id": props.taskId || ''
62
- }, /*#__PURE__*/_react.default.createElement(_taskDecision.ResourcedTaskItem, (0, _extends2.default)({}, otherProps, {
62
+ }, /*#__PURE__*/_react.default.createElement(_resourcedTaskItem.default, (0, _extends2.default)({}, otherProps, {
63
63
  objectAri: resolvedObjectId,
64
64
  isRenderer: isRenderer
65
65
  })));
@@ -79,7 +79,7 @@ var DEGRADED_SEVERITY_THRESHOLD = exports.DEGRADED_SEVERITY_THRESHOLD = 3000;
79
79
  var TABLE_INFO_TIMEOUT = 10000;
80
80
  var RENDER_EVENT_SAMPLE_RATE = 0.1;
81
81
  var packageName = "@atlaskit/renderer";
82
- var packageVersion = "151.0.1";
82
+ var packageVersion = "151.0.2";
83
83
  var setAsQueryContainerStyles = (0, _react2.css)({
84
84
  containerName: 'ak-renderer-wrapper',
85
85
  containerType: 'inline-size'
@@ -13,7 +13,6 @@ import { canRenderDatasource } from '@atlaskit/editor-common/utils/datasource';
13
13
  import { WidthConsumer } from '@atlaskit/editor-common/WidthProvider';
14
14
  import { SmartLinkDraggable, SMART_LINK_DRAG_TYPES, SMART_LINK_APPEARANCE } from '@atlaskit/editor-smart-link-draggable';
15
15
  import { DatasourceTableViewWithWrappers as DatasourceTableView } from '@atlaskit/link-datasource/datasource-table-view-with-wrappers';
16
- import { fg } from '@atlaskit/platform-feature-flags/fg';
17
16
  import { Card } from '@atlaskit/smart-card/card/lazy';
18
17
  import { CardSSR } from '@atlaskit/smart-card/ssr';
19
18
  import { RendererCssClassName } from '../../consts';
@@ -151,7 +150,7 @@ export default function BlockCard(props) {
151
150
  });
152
151
  }
153
152
  let cardComponent;
154
- if (smartLinks !== null && smartLinks !== void 0 && smartLinks.ssr && url && fg('platform_ssr_smartlink_cards')) {
153
+ if (smartLinks !== null && smartLinks !== void 0 && smartLinks.ssr && url) {
155
154
  cardComponent = jsx(CardSSR, _extends({
156
155
  appearance: "block",
157
156
  platform: platform
@@ -3,9 +3,9 @@ import "./extension-comments.compiled.css";
3
3
  import { ax, ix } from "@compiled/react/runtime";
4
4
  import React, { useCallback, useEffect, useMemo, useState } from 'react';
5
5
  import { AnnotationMarkStates, AnnotationTypes } from '@atlaskit/adf-schema/annotation';
6
- import { VIEW_METHOD } from '@atlaskit/editor-common/analytics';
7
- import { CommentBadgeNext } from '@atlaskit/editor-common/media-single';
8
- import { AnnotationUpdateEvent } from '@atlaskit/editor-common/types';
6
+ import { VIEW_METHOD } from '@atlaskit/editor-common/analytics/types/inline-comment-events';
7
+ import { CommentBadgeNext } from '@atlaskit/editor-common/media-single/CommentBadgeNext';
8
+ import { AnnotationUpdateEvent } from '@atlaskit/editor-common/types/emitter';
9
9
  import { useAnnotationManagerState } from '../../ui/annotations/contexts/AnnotationManagerContext';
10
10
  import { useAnnotationRangeState } from '../../ui/annotations/contexts/AnnotationRangeContext';
11
11
  import { useInlineCommentSubscriberContext } from '../../ui/annotations/hooks/use-inline-comment-subscriber';
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ // The table node includes the number-column setting. Cache only its edge data.
3
+ const edgeCache = new WeakMap();
4
+ const noEdges = {
5
+ reachesTop: false,
6
+ reachesBottom: false,
7
+ reachesLeft: false,
8
+ reachesRight: false
9
+ };
10
+ export const getCachedTableEdges = node => edgeCache.get(node);
11
+ export const cacheTableEdges = (node, edges) => {
12
+ // The existing geometry builder provides every cell; retain only the perimeter.
13
+ for (const [offset, props] of edges) {
14
+ if (!props.reachesTop && !props.reachesBottom && !props.reachesLeft && !props.reachesRight) {
15
+ edges.delete(offset);
16
+ }
17
+ }
18
+ edgeCache.set(node, edges);
19
+ };
20
+ export const withTableCellEdgeProps = (element, edges = noEdges) => {
21
+ const current = element.props;
22
+ if (Boolean(current.reachesTop) === edges.reachesTop && Boolean(current.reachesBottom) === edges.reachesBottom && Boolean(current.reachesLeft) === edges.reachesLeft && Boolean(current.reachesRight) === edges.reachesRight) {
23
+ return element;
24
+ }
25
+ // Also clears stale edges when a previously decorated element becomes an interior cell.
26
+ return /*#__PURE__*/React.cloneElement(element, edges);
27
+ };
@@ -13,6 +13,7 @@ import { convertProsemirrorTableNodeToArrayOfRows, hasMergedCell } from '@atlask
13
13
  import { createCompareNodes } from '@atlaskit/editor-common/utils/compareNodes';
14
14
  import { compose } from '@atlaskit/editor-common/utils/compose';
15
15
  import { akEditorDefaultLayoutWidth, akEditorFullWidthLayoutWidth, akEditorMaxWidthLayoutWidth } from '@atlaskit/editor-shared-styles/constants';
16
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
16
17
  import { fg } from '@atlaskit/platform-feature-flags/fg';
17
18
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/editor-experiment';
18
19
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
@@ -21,6 +22,7 @@ import { useRendererContext } from '../../renderer-context';
21
22
  import { FullPagePadding } from '../../ui/Renderer/style';
22
23
  import { withSmartCardStorage } from '../../ui/SmartCardStorage';
23
24
  import { isCommentAppearance, isFullWidthOrFullPageAppearance, isFullWidthAppearance, isMaxWidthAppearance, isFullPageAppearance } from '../utils/appearance';
25
+ import { cacheTableEdges, getCachedTableEdges, withTableCellEdgeProps } from './table/cached-cell-edges';
24
26
  import { isContentModeSupported } from './table/content-mode';
25
27
  import { StickyTable, tableStickyPadding, OverflowParent } from './table/sticky';
26
28
  import { Table } from './table/table';
@@ -735,6 +737,12 @@ export class TableContainer extends React.Component {
735
737
  }
736
738
  }
737
739
  const getCellEdgePropsByCellOffset = (tableNode, isNumberColumnEnabled) => {
740
+ // The serializer uses the node attribute. Other callers can supply a different render prop.
741
+ const useCachedEdges = expValEquals('platform_editor_table_q4_loveability', 'isEnabled', true) && isExperimentEnabled('platform_editor_table_q4_perf_patch') && Boolean(isNumberColumnEnabled) === Boolean(tableNode.attrs.isNumberColumnEnabled);
742
+ const cached = useCachedEdges ? getCachedTableEdges(tableNode) : undefined;
743
+ if (cached) {
744
+ return cached;
745
+ }
738
746
  const cellEdgePropsByCellOffset = new Map();
739
747
  const cellRightByCellOffset = new Map();
740
748
  const occupiedGrid = [];
@@ -782,6 +790,9 @@ const getCellEdgePropsByCellOffset = (tableNode, isNumberColumnEnabled) => {
782
790
  edgeProps.reachesRight = cellRight >= tableWidth;
783
791
  }
784
792
  });
793
+ if (useCachedEdges) {
794
+ cacheTableEdges(tableNode, cellEdgePropsByCellOffset);
795
+ }
785
796
  return cellEdgePropsByCellOffset;
786
797
  };
787
798
  const isRenderedTableCell = element => {
@@ -791,6 +802,7 @@ const isRenderedTableCell = element => {
791
802
  return nodeType === 'tableCell' || nodeType === 'tableHeader' || element.type === TableCell || element.type === TableHeader;
792
803
  };
793
804
  const addTableCellEdgePropsThroughWrappers = (rows, tableNode, isNumberColumnEnabled) => {
805
+ const useCachedEdges = expValEquals('platform_editor_table_q4_loveability', 'isEnabled', true) && isExperimentEnabled('platform_editor_table_q4_perf_patch');
794
806
  try {
795
807
  if (!tableNode) {
796
808
  return rows;
@@ -807,6 +819,9 @@ const addTableCellEdgePropsThroughWrappers = (rows, tableNode, isNumberColumnEna
807
819
  const edgeProps = cellEdgePropsByCellOffset.get(cellOffset);
808
820
  cellIndex += 1;
809
821
  cellOffset += cellNode.nodeSize;
822
+ if (useCachedEdges) {
823
+ return withTableCellEdgeProps(element, edgeProps);
824
+ }
810
825
  return edgeProps ? /*#__PURE__*/React.cloneElement(element, edgeProps) : element;
811
826
  }
812
827
  const {
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import React from 'react';
3
- import { ResourcedTaskItem } from '@atlaskit/task-decision';
3
+ import ResourcedTaskItem from '@atlaskit/task-decision/resourced-task-item';
4
4
  export default function TaskItemWithProviders(props) {
5
5
  const {
6
6
  objectAri,
@@ -64,7 +64,7 @@ export const DEGRADED_SEVERITY_THRESHOLD = 3000;
64
64
  const TABLE_INFO_TIMEOUT = 10000;
65
65
  const RENDER_EVENT_SAMPLE_RATE = 0.1;
66
66
  const packageName = "@atlaskit/renderer";
67
- const packageVersion = "151.0.1";
67
+ const packageVersion = "151.0.2";
68
68
  const setAsQueryContainerStyles = css({
69
69
  containerName: 'ak-renderer-wrapper',
70
70
  containerType: 'inline-size'
@@ -13,7 +13,6 @@ import { canRenderDatasource } from '@atlaskit/editor-common/utils/datasource';
13
13
  import { WidthConsumer } from '@atlaskit/editor-common/WidthProvider';
14
14
  import { SmartLinkDraggable, SMART_LINK_DRAG_TYPES, SMART_LINK_APPEARANCE } from '@atlaskit/editor-smart-link-draggable';
15
15
  import { DatasourceTableViewWithWrappers as DatasourceTableView } from '@atlaskit/link-datasource/datasource-table-view-with-wrappers';
16
- import { fg } from '@atlaskit/platform-feature-flags/fg';
17
16
  import { Card } from '@atlaskit/smart-card/card/lazy';
18
17
  import { CardSSR } from '@atlaskit/smart-card/ssr';
19
18
  import { RendererCssClassName } from '../../consts';
@@ -154,7 +153,7 @@ export default function BlockCard(props) {
154
153
  });
155
154
  }
156
155
  var cardComponent;
157
- if (smartLinks !== null && smartLinks !== void 0 && smartLinks.ssr && url && fg('platform_ssr_smartlink_cards')) {
156
+ if (smartLinks !== null && smartLinks !== void 0 && smartLinks.ssr && url) {
158
157
  cardComponent = jsx(CardSSR, _extends({
159
158
  appearance: "block",
160
159
  platform: platform
@@ -4,9 +4,9 @@ import "./extension-comments.compiled.css";
4
4
  import { ax, ix } from "@compiled/react/runtime";
5
5
  import React, { useCallback, useEffect, useMemo, useState } from 'react';
6
6
  import { AnnotationMarkStates, AnnotationTypes } from '@atlaskit/adf-schema/annotation';
7
- import { VIEW_METHOD } from '@atlaskit/editor-common/analytics';
8
- import { CommentBadgeNext } from '@atlaskit/editor-common/media-single';
9
- import { AnnotationUpdateEvent } from '@atlaskit/editor-common/types';
7
+ import { VIEW_METHOD } from '@atlaskit/editor-common/analytics/types/inline-comment-events';
8
+ import { CommentBadgeNext } from '@atlaskit/editor-common/media-single/CommentBadgeNext';
9
+ import { AnnotationUpdateEvent } from '@atlaskit/editor-common/types/emitter';
10
10
  import { useAnnotationManagerState } from '../../ui/annotations/contexts/AnnotationManagerContext';
11
11
  import { useAnnotationRangeState } from '../../ui/annotations/contexts/AnnotationRangeContext';
12
12
  import { useInlineCommentSubscriberContext } from '../../ui/annotations/hooks/use-inline-comment-subscriber';
@@ -0,0 +1,45 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ import React from 'react';
6
+ // The table node includes the number-column setting. Cache only its edge data.
7
+ var edgeCache = new WeakMap();
8
+ var noEdges = {
9
+ reachesTop: false,
10
+ reachesBottom: false,
11
+ reachesLeft: false,
12
+ reachesRight: false
13
+ };
14
+ export var getCachedTableEdges = function getCachedTableEdges(node) {
15
+ return edgeCache.get(node);
16
+ };
17
+ export var cacheTableEdges = function cacheTableEdges(node, edges) {
18
+ // The existing geometry builder provides every cell; retain only the perimeter.
19
+ var _iterator = _createForOfIteratorHelper(edges),
20
+ _step;
21
+ try {
22
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
23
+ var _step$value = _slicedToArray(_step.value, 2),
24
+ offset = _step$value[0],
25
+ props = _step$value[1];
26
+ if (!props.reachesTop && !props.reachesBottom && !props.reachesLeft && !props.reachesRight) {
27
+ edges.delete(offset);
28
+ }
29
+ }
30
+ } catch (err) {
31
+ _iterator.e(err);
32
+ } finally {
33
+ _iterator.f();
34
+ }
35
+ edgeCache.set(node, edges);
36
+ };
37
+ export var withTableCellEdgeProps = function withTableCellEdgeProps(element) {
38
+ var edges = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noEdges;
39
+ var current = element.props;
40
+ if (Boolean(current.reachesTop) === edges.reachesTop && Boolean(current.reachesBottom) === edges.reachesBottom && Boolean(current.reachesLeft) === edges.reachesLeft && Boolean(current.reachesRight) === edges.reachesRight) {
41
+ return element;
42
+ }
43
+ // Also clears stale edges when a previously decorated element becomes an interior cell.
44
+ return /*#__PURE__*/React.cloneElement(element, edges);
45
+ };
@@ -26,6 +26,7 @@ import { convertProsemirrorTableNodeToArrayOfRows, hasMergedCell } from '@atlask
26
26
  import { createCompareNodes } from '@atlaskit/editor-common/utils/compareNodes';
27
27
  import { compose } from '@atlaskit/editor-common/utils/compose';
28
28
  import { akEditorDefaultLayoutWidth, akEditorFullWidthLayoutWidth, akEditorMaxWidthLayoutWidth } from '@atlaskit/editor-shared-styles/constants';
29
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
29
30
  import { fg } from '@atlaskit/platform-feature-flags/fg';
30
31
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/editor-experiment';
31
32
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
@@ -34,6 +35,7 @@ import { useRendererContext } from '../../renderer-context';
34
35
  import { FullPagePadding } from '../../ui/Renderer/style';
35
36
  import { withSmartCardStorage } from '../../ui/SmartCardStorage';
36
37
  import { isCommentAppearance, isFullWidthOrFullPageAppearance, isFullWidthAppearance, isMaxWidthAppearance, isFullPageAppearance } from '../utils/appearance';
38
+ import { cacheTableEdges, getCachedTableEdges, withTableCellEdgeProps } from './table/cached-cell-edges';
37
39
  import { isContentModeSupported } from './table/content-mode';
38
40
  import { StickyTable, tableStickyPadding, OverflowParent } from './table/sticky';
39
41
  import { Table } from './table/table';
@@ -791,6 +793,12 @@ export var TableContainer = /*#__PURE__*/function (_React$Component) {
791
793
  }]);
792
794
  }(React.Component);
793
795
  var getCellEdgePropsByCellOffset = function getCellEdgePropsByCellOffset(tableNode, isNumberColumnEnabled) {
796
+ // The serializer uses the node attribute. Other callers can supply a different render prop.
797
+ var useCachedEdges = expValEquals('platform_editor_table_q4_loveability', 'isEnabled', true) && isExperimentEnabled('platform_editor_table_q4_perf_patch') && Boolean(isNumberColumnEnabled) === Boolean(tableNode.attrs.isNumberColumnEnabled);
798
+ var cached = useCachedEdges ? getCachedTableEdges(tableNode) : undefined;
799
+ if (cached) {
800
+ return cached;
801
+ }
794
802
  var cellEdgePropsByCellOffset = new Map();
795
803
  var cellRightByCellOffset = new Map();
796
804
  var occupiedGrid = [];
@@ -838,6 +846,9 @@ var getCellEdgePropsByCellOffset = function getCellEdgePropsByCellOffset(tableNo
838
846
  edgeProps.reachesRight = cellRight >= tableWidth;
839
847
  }
840
848
  });
849
+ if (useCachedEdges) {
850
+ cacheTableEdges(tableNode, cellEdgePropsByCellOffset);
851
+ }
841
852
  return cellEdgePropsByCellOffset;
842
853
  };
843
854
  var isRenderedTableCell = function isRenderedTableCell(element) {
@@ -846,6 +857,7 @@ var isRenderedTableCell = function isRenderedTableCell(element) {
846
857
  return nodeType === 'tableCell' || nodeType === 'tableHeader' || element.type === TableCell || element.type === TableHeader;
847
858
  };
848
859
  var addTableCellEdgePropsThroughWrappers = function addTableCellEdgePropsThroughWrappers(rows, tableNode, isNumberColumnEnabled) {
860
+ var useCachedEdges = expValEquals('platform_editor_table_q4_loveability', 'isEnabled', true) && isExperimentEnabled('platform_editor_table_q4_perf_patch');
849
861
  try {
850
862
  if (!tableNode) {
851
863
  return rows;
@@ -862,6 +874,9 @@ var addTableCellEdgePropsThroughWrappers = function addTableCellEdgePropsThrough
862
874
  var edgeProps = cellEdgePropsByCellOffset.get(cellOffset);
863
875
  cellIndex += 1;
864
876
  cellOffset += cellNode.nodeSize;
877
+ if (useCachedEdges) {
878
+ return withTableCellEdgeProps(element, edgeProps);
879
+ }
865
880
  return edgeProps ? /*#__PURE__*/React.cloneElement(element, edgeProps) : element;
866
881
  }
867
882
  var _ref5 = element.props,
@@ -5,7 +5,7 @@ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProper
5
5
  var _excluded = ["objectAri", "isRenderer"];
6
6
  import _regeneratorRuntime from "@babel/runtime/regenerator";
7
7
  import React from 'react';
8
- import { ResourcedTaskItem } from '@atlaskit/task-decision';
8
+ import ResourcedTaskItem from '@atlaskit/task-decision/resourced-task-item';
9
9
  export default function TaskItemWithProviders(props) {
10
10
  var objectAri = props.objectAri,
11
11
  isRenderer = props.isRenderer,
@@ -69,7 +69,7 @@ export var DEGRADED_SEVERITY_THRESHOLD = 3000;
69
69
  var TABLE_INFO_TIMEOUT = 10000;
70
70
  var RENDER_EVENT_SAMPLE_RATE = 0.1;
71
71
  var packageName = "@atlaskit/renderer";
72
- var packageVersion = "151.0.1";
72
+ var packageVersion = "151.0.2";
73
73
  var setAsQueryContainerStyles = css({
74
74
  containerName: 'ak-renderer-wrapper',
75
75
  containerType: 'inline-size'
@@ -5,7 +5,8 @@ import type { Parameters } from '@atlaskit/editor-common/extensions/extension-pa
5
5
  import type { MentionNodeDataProvider } from '@atlaskit/editor-common/mention';
6
6
  import type ProviderFactory from '@atlaskit/editor-common/provider-factory/provider-factory';
7
7
  import type { Fragment, Mark, Node } from '@atlaskit/editor-prosemirror/model';
8
- import type { EmojiProviderLookupOrder, EmojiResourceConfig } from '@atlaskit/emoji/resource';
8
+ import type { EmojiResourceConfig } from '@atlaskit/emoji/emoji-resource';
9
+ import type { EmojiProviderLookupOrder } from '@atlaskit/emoji/types';
9
10
  import type { AnalyticsEventPayload } from '../analytics/events';
10
11
  import type { Serializer } from '../serializer';
11
12
  import type { MediaOptions } from '../types/mediaOptions';
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
3
+ import type { TableCellEdgeProps } from '../tableCell';
4
+ type EdgeMap = Map<number, TableCellEdgeProps>;
5
+ export declare const getCachedTableEdges: (node: PMNode) => EdgeMap | undefined;
6
+ export declare const cacheTableEdges: (node: PMNode, edges: EdgeMap) => void;
7
+ export declare const withTableCellEdgeProps: (element: React.ReactElement, edges?: TableCellEdgeProps) => React.ReactElement;
8
+ export {};
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import type { ReactNode } from 'react';
3
3
  import type { ContextIdentifierProvider } from '@atlaskit/editor-common/provider-factory/context-identifier-provider';
4
- import type { ContentRef, TaskDecisionProvider } from '@atlaskit/task-decision';
4
+ import type { ContentRef, TaskDecisionProvider } from '@atlaskit/task-decision/types';
5
5
  interface Props {
6
6
  children?: ReactNode;
7
7
  contentRef?: ContentRef;
@@ -10,7 +10,8 @@ import type { AnnotationProviders } from '@atlaskit/editor-common/types/annotati
10
10
  import type { UnsupportedContentLevelsTracking } from '@atlaskit/editor-common/utils/get-unsupported-content-level-data';
11
11
  import type { ADFStage } from '@atlaskit/editor-common/utils/validator';
12
12
  import type { Schema } from '@atlaskit/editor-prosemirror/model';
13
- import type { EmojiProviderLookupOrder, EmojiResourceConfig } from '@atlaskit/emoji/resource';
13
+ import type { EmojiResourceConfig } from '@atlaskit/emoji/emoji-resource';
14
+ import type { EmojiProviderLookupOrder } from '@atlaskit/emoji/types';
14
15
  import type { ReactSerializerInit, RendererContext, Serializer } from '../';
15
16
  import type { TextHighlighter, ExtensionViewportSize } from '../react/types';
16
17
  import type { RenderOutputStat } from '../render-document';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/renderer",
3
- "version": "151.0.1",
3
+ "version": "151.0.3",
4
4
  "description": "Renderer component",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -73,7 +73,7 @@
73
73
  "@atlaskit/status": "^5.13.0",
74
74
  "@atlaskit/task-decision": "^21.12.0",
75
75
  "@atlaskit/theme": "^28.2.0",
76
- "@atlaskit/tmp-editor-statsig": "^240.0.0",
76
+ "@atlaskit/tmp-editor-statsig": "^241.0.0",
77
77
  "@atlaskit/tokens": "^20.6.0",
78
78
  "@atlaskit/tooltip": "^24.4.0",
79
79
  "@atlaskit/visually-hidden": "^4.4.0",
@@ -112,10 +112,10 @@
112
112
  "@atlaskit/media-state": "^4.0.0",
113
113
  "@atlaskit/media-test-helpers": "^43.0.0",
114
114
  "@atlaskit/mention": "^30.3.0",
115
- "@atlaskit/modal-dialog": "^17.0.0",
115
+ "@atlaskit/modal-dialog": "^17.1.0",
116
116
  "@atlaskit/navigation-system": "^11.3.0",
117
117
  "@atlaskit/primitives": "^22.6.0",
118
- "@atlaskit/profilecard": "^27.1.0",
118
+ "@atlaskit/profilecard": "^27.2.0",
119
119
  "@atlaskit/radio": "^10.2.0",
120
120
  "@atlaskit/range": "^12.2.0",
121
121
  "@atlaskit/section-message": "^10.2.0",
@@ -184,9 +184,6 @@
184
184
  "platform_ssr_smartlink_embeds": {
185
185
  "type": "boolean"
186
186
  },
187
- "platform_ssr_smartlink_cards": {
188
- "type": "boolean"
189
- },
190
187
  "platform_editor_custom_emoji_unicode_fallback": {
191
188
  "type": "boolean",
192
189
  "referenceOnly": true