@atlaskit/renderer 111.0.2 → 111.1.1

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,25 @@
1
1
  # @atlaskit/renderer
2
2
 
3
+ ## 111.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#147863](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/147863)
8
+ [`422082d3df962`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/422082d3df962) -
9
+ Remove TTI tracking analytics
10
+
11
+ ## 111.1.0
12
+
13
+ ### Minor Changes
14
+
15
+ - [#147660](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/147660)
16
+ [`a407a8fbc874b`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/a407a8fbc874b) -
17
+ ED-24365 Support commenting inside bodied extension content in the Renderer
18
+
19
+ ### Patch Changes
20
+
21
+ - Updated dependencies
22
+
3
23
  ## 111.0.2
4
24
 
5
25
  ### Patch Changes
@@ -13,6 +13,7 @@ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/creat
13
13
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
14
  var _react = _interopRequireDefault(require("react"));
15
15
  var _model = require("@atlaskit/editor-prosemirror/model");
16
+ var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
16
17
  var _links = require("./utils/links");
17
18
  var _nodes = require("./nodes");
18
19
  var _textWrapper = _interopRequireDefault(require("./nodes/text-wrapper"));
@@ -57,7 +58,6 @@ var ReactSerializer = exports.default = /*#__PURE__*/function () {
57
58
  (0, _defineProperty2.default)(this, "allowWrapCodeBlock", false);
58
59
  (0, _defineProperty2.default)(this, "allowPlaceholderText", true);
59
60
  (0, _defineProperty2.default)(this, "allowCustomPanels", false);
60
- (0, _defineProperty2.default)(this, "startPos", 1);
61
61
  (0, _defineProperty2.default)(this, "surroundTextNodesWithTextWrapper", false);
62
62
  (0, _defineProperty2.default)(this, "allowAnnotations", false);
63
63
  (0, _defineProperty2.default)(this, "serializeFragmentChild", function (node, _ref) {
@@ -161,6 +161,13 @@ var ReactSerializer = exports.default = /*#__PURE__*/function () {
161
161
  });
162
162
  return props;
163
163
  });
164
+ if ((0, _experiments.editorExperiment)('comment_on_bodied_extensions', true)) {
165
+ this.initStartPos = init.startPos || 1;
166
+ this.startPos = init.startPos || 1;
167
+ } else {
168
+ this.initStartPos = 1;
169
+ this.startPos = 1;
170
+ }
164
171
  this.providers = init.providers;
165
172
  this.eventHandlers = init.eventHandlers;
166
173
  this.extensionHandlers = init.extensionHandlers;
@@ -198,7 +205,7 @@ var ReactSerializer = exports.default = /*#__PURE__*/function () {
198
205
  value: function resetState() {
199
206
  this.headingIds = [];
200
207
  this.expandHeadingIds = [];
201
- this.startPos = 1;
208
+ this.startPos = this.initStartPos;
202
209
  }
203
210
  }, {
204
211
  key: "getNodeProps",
@@ -531,6 +538,7 @@ var ReactSerializer = exports.default = /*#__PURE__*/function () {
531
538
  key: "getProps",
532
539
  value: function getProps(node) {
533
540
  var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
541
+ var startPos = this.startPos + path.length;
534
542
  return _objectSpread({
535
543
  text: node.text,
536
544
  providers: this.providers,
@@ -553,8 +561,9 @@ var ReactSerializer = exports.default = /*#__PURE__*/function () {
553
561
  dataAttributes: {
554
562
  // We need to account for depth (path.length gives up depth) here
555
563
  // but depth doesnt increment the pos, only accounted for.
556
- 'data-renderer-start-pos': this.startPos + path.length
564
+ 'data-renderer-start-pos': startPos
557
565
  },
566
+ startPos: startPos,
558
567
  path: path
559
568
  }, node.attrs);
560
569
  }
@@ -13,6 +13,7 @@ var _ErrorBoundary = require("../../ui/Renderer/ErrorBoundary");
13
13
  var _ExtensionRenderer = _interopRequireDefault(require("../../ui/ExtensionRenderer"));
14
14
  var _enums = require("../../analytics/enums");
15
15
  var _analytics = require("@atlaskit/editor-common/analytics");
16
+ var _annotations = require("../../ui/annotations");
16
17
  var BodiedExtension = function BodiedExtension(props) {
17
18
  var children = props.children,
18
19
  _props$layout = props.layout,
@@ -31,6 +32,10 @@ var BodiedExtension = function BodiedExtension(props) {
31
32
  componentId: _analytics.ACTION_SUBJECT_ID.EXTENSION_BODIED,
32
33
  createAnalyticsEvent: createAnalyticsEvent,
33
34
  additionalInfo: "".concat(extensionType, ": ").concat(extensionKey, " ")
35
+ }, /*#__PURE__*/_react.default.createElement(_annotations.AnnotationsPositionContext.Provider, {
36
+ value: {
37
+ startPos: props.startPos + 1
38
+ }
34
39
  }, /*#__PURE__*/_react.default.createElement(_ExtensionRenderer.default, (0, _extends2.default)({}, props, {
35
40
  type: "bodiedExtension"
36
41
  }), function (_ref) {
@@ -51,6 +56,6 @@ var BodiedExtension = function BodiedExtension(props) {
51
56
  return (0, _extension.renderExtension)(children, layout, {
52
57
  isTopLevel: path.length < 1
53
58
  }, removeOverflow);
54
- }));
59
+ })));
55
60
  };
56
61
  var _default = exports.default = BodiedExtension;
@@ -5,7 +5,9 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.defaultNodeComponents = exports.default = exports.RendererWithAnalytics = exports.Renderer = exports.NORMAL_SEVERITY_THRESHOLD = exports.DEGRADED_SEVERITY_THRESHOLD = void 0;
8
+ exports.NORMAL_SEVERITY_THRESHOLD = exports.DEGRADED_SEVERITY_THRESHOLD = void 0;
9
+ exports.Renderer = Renderer;
10
+ exports.defaultNodeComponents = exports.default = exports.__RendererClassComponent = exports.RendererWithAnalytics = void 0;
9
11
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
13
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -19,10 +21,10 @@ var _react2 = require("@emotion/react");
19
21
  var _schemaDefault = require("@atlaskit/adf-schema/schema-default");
20
22
  var _traverse = require("@atlaskit/adf-utils/traverse");
21
23
  var _providerFactory = require("@atlaskit/editor-common/provider-factory");
24
+ var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
22
25
  var _ui = require("@atlaskit/editor-common/ui");
23
26
  var _performanceMeasures = require("@atlaskit/editor-common/performance-measures");
24
27
  var _utils = require("@atlaskit/editor-common/utils");
25
- var _measureTti = require("@atlaskit/editor-common/performance/measure-tti");
26
28
  var _measureRender = require("@atlaskit/editor-common/performance/measure-render");
27
29
  var _browser = require("@atlaskit/editor-common/browser");
28
30
  var _navigation = require("@atlaskit/editor-common/performance/navigation");
@@ -63,14 +65,18 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
63
65
  var NORMAL_SEVERITY_THRESHOLD = exports.NORMAL_SEVERITY_THRESHOLD = 2000;
64
66
  var DEGRADED_SEVERITY_THRESHOLD = exports.DEGRADED_SEVERITY_THRESHOLD = 3000;
65
67
  var packageName = "@atlaskit/renderer";
66
- var packageVersion = "111.0.2";
68
+ var packageVersion = "111.1.1";
67
69
  var defaultNodeComponents = exports.defaultNodeComponents = _nodes.nodeToReact;
68
- var Renderer = exports.Renderer = /*#__PURE__*/function (_PureComponent) {
69
- (0, _inherits2.default)(Renderer, _PureComponent);
70
- var _super = _createSuper(Renderer);
71
- function Renderer(props) {
70
+
71
+ /**
72
+ * Exported due to enzyme test reliance on this component.
73
+ */
74
+ var __RendererClassComponent = exports.__RendererClassComponent = /*#__PURE__*/function (_PureComponent) {
75
+ (0, _inherits2.default)(__RendererClassComponent, _PureComponent);
76
+ var _super = _createSuper(__RendererClassComponent);
77
+ function __RendererClassComponent(props) {
72
78
  var _this;
73
- (0, _classCallCheck2.default)(this, Renderer);
79
+ (0, _classCallCheck2.default)(this, __RendererClassComponent);
74
80
  _this = _super.call(this, props);
75
81
  /**
76
82
  * This is used in measuring the Renderer Mount time and is then
@@ -152,24 +158,9 @@ var Renderer = exports.Renderer = /*#__PURE__*/function (_PureComponent) {
152
158
  _this.editorRef = props.innerRef || /*#__PURE__*/_react.default.createRef();
153
159
  _this.id = (0, _v.default)();
154
160
  (0, _performanceMeasures.startMeasure)("Renderer Render Time: ".concat(_this.id));
155
- var _featureFlags = _this.featureFlags(_this.props.featureFlags).featureFlags;
156
- if (_featureFlags !== null && _featureFlags !== void 0 && _featureFlags.rendererTtiTracking) {
157
- (0, _measureTti.measureTTI)(function (tti, ttiFromInvocation, canceled) {
158
- _this.fireAnalyticsEvent({
159
- action: _analytics.ACTION.RENDERER_TTI,
160
- actionSubject: _analytics.ACTION_SUBJECT.RENDERER,
161
- attributes: {
162
- tti: tti,
163
- ttiFromInvocation: ttiFromInvocation,
164
- canceled: canceled
165
- },
166
- eventType: _analytics.EVENT_TYPE.OPERATIONAL
167
- });
168
- });
169
- }
170
161
  return _this;
171
162
  }
172
- (0, _createClass2.default)(Renderer, [{
163
+ (0, _createClass2.default)(__RendererClassComponent, [{
173
164
  key: "anchorLinkAnalytics",
174
165
  value: function anchorLinkAnalytics() {
175
166
  var hash = window.location.hash && decodeURIComponent(window.location.hash.slice(1));
@@ -257,6 +248,7 @@ var Renderer = exports.Renderer = /*#__PURE__*/function (_PureComponent) {
257
248
  var _this$featureFlags = this.featureFlags(props.featureFlags),
258
249
  featureFlags = _this$featureFlags.featureFlags;
259
250
  return {
251
+ startPos: props.startPos,
260
252
  providers: this.providerFactory,
261
253
  eventHandlers: props.eventHandlers,
262
254
  extensionHandlers: props.extensionHandlers,
@@ -445,8 +437,21 @@ var Renderer = exports.Renderer = /*#__PURE__*/function (_PureComponent) {
445
437
  }
446
438
  }
447
439
  }]);
448
- return Renderer;
440
+ return __RendererClassComponent;
449
441
  }(_react.PureComponent);
442
+ function Renderer(props) {
443
+ var _React$useContext = _react.default.useContext(_annotations.AnnotationsPositionContext),
444
+ startPos = _React$useContext.startPos;
445
+
446
+ // eslint-disable-next-line react/jsx-pascal-case
447
+ return (0, _react2.jsx)(__RendererClassComponent, (0, _extends2.default)({}, props, {
448
+ startPos: startPos
449
+ }));
450
+ }
451
+
452
+ // Usage notes:
453
+ // Used by Confluence for View page renderer
454
+ // For the nested renderers - see RendererWithAnnotationSelection.
450
455
  var RendererWithAnalytics = exports.RendererWithAnalytics = /*#__PURE__*/_react.default.memo(function (props) {
451
456
  return (0, _react2.jsx)(_analyticsNamespacedContext.FabricEditorAnalyticsContext, {
452
457
  data: {
@@ -560,25 +565,54 @@ var RendererWrapper = /*#__PURE__*/_react.default.memo(function (props) {
560
565
  })
561
566
  }, children))));
562
567
  });
568
+ var RootRendererContext = /*#__PURE__*/_react.default.createContext(null);
563
569
  function RendererActionsInternalUpdater(_ref) {
564
570
  var children = _ref.children,
565
571
  doc = _ref.doc,
566
572
  schema = _ref.schema,
567
573
  onAnalyticsEvent = _ref.onAnalyticsEvent;
574
+ var rootRendererContextValue = _react.default.useContext(RootRendererContext);
568
575
  var actions = (0, _react.useContext)(_RendererActionsContext.RendererContext);
569
576
  var rendererRef = (0, _react.useRef)(null);
577
+
578
+ // This doc is used by the renderer actions when applying comments to the document.
579
+ // (via hand crafted steps based on non prosemirror based position calculations)
580
+ // It is set to the root renderer's doc as otherwise the resulting document will
581
+ // be incorrect (nested renderers use a fake document which represents a subset
582
+ // of the actual document).
583
+ var _doc;
584
+ if ((0, _experiments.editorExperiment)('comment_on_bodied_extensions', true) && rootRendererContextValue) {
585
+ // If rootRendererContextValue is set -- we are inside a nested renderer
586
+ // and should always use the doc from the root renderer
587
+ _doc = rootRendererContextValue.doc;
588
+ } else {
589
+ // If rootRendererContextValue is not set -- we are in the root renderer
590
+ // and set the doc to the current doc.
591
+ _doc = doc;
592
+ }
570
593
  (0, _react.useLayoutEffect)(function () {
571
- if (doc) {
572
- actions._privateRegisterRenderer(rendererRef, doc, schema, onAnalyticsEvent);
594
+ if (_doc) {
595
+ actions._privateRegisterRenderer(rendererRef, _doc, schema, onAnalyticsEvent);
573
596
  } else {
574
597
  actions._privateUnregisterRenderer();
575
598
  }
576
599
  return function () {
577
600
  return actions._privateUnregisterRenderer();
578
601
  };
579
- }, [actions, schema, doc, onAnalyticsEvent]);
602
+ }, [actions, schema, _doc, onAnalyticsEvent]);
603
+ if ((0, _experiments.editorExperiment)('comment_on_bodied_extensions', true)) {
604
+ return (0, _react2.jsx)(RootRendererContext.Provider, {
605
+ value: {
606
+ doc: _doc
607
+ }
608
+ }, children);
609
+ }
580
610
  return children;
581
611
  }
612
+
613
+ // Usage notes:
614
+ // Used by Confluence for nested renderers
615
+ // For the View page renderer - see RendererWithAnalytics
582
616
  var RendererWithAnnotationSelection = function RendererWithAnnotationSelection(props) {
583
617
  var allowAnnotations = props.allowAnnotations,
584
618
  adfDocument = props.document;
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "AnnotationMark", {
10
10
  return _element.MarkElement;
11
11
  }
12
12
  });
13
- exports.AnnotationsWrapper = void 0;
13
+ exports.AnnotationsWrapper = exports.AnnotationsPositionContext = void 0;
14
14
  Object.defineProperty(exports, "TextWithAnnotationDraft", {
15
15
  enumerable: true,
16
16
  get: function get() {
@@ -40,6 +40,14 @@ var LoadAnnotations = /*#__PURE__*/_react.default.memo(function (_ref) {
40
40
  });
41
41
  return null;
42
42
  });
43
+
44
+ // This is used by renderers when setting the data-start-pos attribute on commentable nodes
45
+ // By default it is 1 (the possible starting position of any document).
46
+ // The bodied extension component then sets a new value for this context based on its on position
47
+ // in the document.
48
+ var AnnotationsPositionContext = exports.AnnotationsPositionContext = /*#__PURE__*/_react.default.createContext({
49
+ startPos: 1
50
+ });
43
51
  var AnnotationsWrapper = exports.AnnotationsWrapper = function AnnotationsWrapper(props) {
44
52
  var _annotationProvider$i, _annotationProvider$i2;
45
53
  var children = props.children,
@@ -2,6 +2,7 @@ import _extends from "@babel/runtime/helpers/extends";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import React from 'react';
4
4
  import { MarkType } from '@atlaskit/editor-prosemirror/model';
5
+ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
5
6
  import { isNestedHeaderLinksEnabled } from './utils/links';
6
7
  import { Doc, DocWithSelectAllTrap, mergeTextNodes, isTextWrapper, isTextNode, toReact } from './nodes';
7
8
  import TextWrapperComponent from './nodes/text-wrapper';
@@ -41,7 +42,6 @@ export default class ReactSerializer {
41
42
  _defineProperty(this, "allowWrapCodeBlock", false);
42
43
  _defineProperty(this, "allowPlaceholderText", true);
43
44
  _defineProperty(this, "allowCustomPanels", false);
44
- _defineProperty(this, "startPos", 1);
45
45
  _defineProperty(this, "surroundTextNodesWithTextWrapper", false);
46
46
  _defineProperty(this, "allowAnnotations", false);
47
47
  _defineProperty(this, "serializeFragmentChild", (node, {
@@ -147,6 +147,13 @@ export default class ReactSerializer {
147
147
  };
148
148
  return props;
149
149
  });
150
+ if (editorExperiment('comment_on_bodied_extensions', true)) {
151
+ this.initStartPos = init.startPos || 1;
152
+ this.startPos = init.startPos || 1;
153
+ } else {
154
+ this.initStartPos = 1;
155
+ this.startPos = 1;
156
+ }
150
157
  this.providers = init.providers;
151
158
  this.eventHandlers = init.eventHandlers;
152
159
  this.extensionHandlers = init.extensionHandlers;
@@ -182,7 +189,7 @@ export default class ReactSerializer {
182
189
  resetState() {
183
190
  this.headingIds = [];
184
191
  this.expandHeadingIds = [];
185
- this.startPos = 1;
192
+ this.startPos = this.initStartPos;
186
193
  }
187
194
  getNodeProps(node, parentInfo) {
188
195
  const path = parentInfo ? parentInfo.path : undefined;
@@ -463,6 +470,7 @@ export default class ReactSerializer {
463
470
  };
464
471
  }
465
472
  getProps(node, path = []) {
473
+ const startPos = this.startPos + path.length;
466
474
  return {
467
475
  text: node.text,
468
476
  providers: this.providers,
@@ -485,8 +493,9 @@ export default class ReactSerializer {
485
493
  dataAttributes: {
486
494
  // We need to account for depth (path.length gives up depth) here
487
495
  // but depth doesnt increment the pos, only accounted for.
488
- 'data-renderer-start-pos': this.startPos + path.length
496
+ 'data-renderer-start-pos': startPos
489
497
  },
498
+ startPos,
490
499
  path,
491
500
  ...node.attrs
492
501
  };
@@ -6,6 +6,7 @@ import { ErrorBoundary } from '../../ui/Renderer/ErrorBoundary';
6
6
  import ExtensionRenderer from '../../ui/ExtensionRenderer';
7
7
  import { ACTION_SUBJECT } from '../../analytics/enums';
8
8
  import { ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
9
+ import { AnnotationsPositionContext } from '../../ui/annotations';
9
10
  const BodiedExtension = props => {
10
11
  const {
11
12
  children,
@@ -23,6 +24,10 @@ const BodiedExtension = props => {
23
24
  componentId: ACTION_SUBJECT_ID.EXTENSION_BODIED,
24
25
  createAnalyticsEvent: createAnalyticsEvent,
25
26
  additionalInfo: `${extensionType}: ${extensionKey} `
27
+ }, /*#__PURE__*/React.createElement(AnnotationsPositionContext.Provider, {
28
+ value: {
29
+ startPos: props.startPos + 1
30
+ }
26
31
  }, /*#__PURE__*/React.createElement(ExtensionRenderer, _extends({}, props, {
27
32
  type: "bodiedExtension"
28
33
  }), ({
@@ -44,6 +49,6 @@ const BodiedExtension = props => {
44
49
  return renderExtension(children, layout, {
45
50
  isTopLevel: path.length < 1
46
51
  }, removeOverflow);
47
- }));
52
+ })));
48
53
  };
49
54
  export default BodiedExtension;
@@ -10,10 +10,10 @@ import { jsx } from '@emotion/react';
10
10
  import { getSchemaBasedOnStage } from '@atlaskit/adf-schema/schema-default';
11
11
  import { reduce } from '@atlaskit/adf-utils/traverse';
12
12
  import { ProviderFactory, ProviderFactoryProvider } from '@atlaskit/editor-common/provider-factory';
13
+ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
13
14
  import { UnsupportedBlock, BaseTheme, WidthProvider, WithCreateAnalyticsEvent, IntlErrorBoundary } from '@atlaskit/editor-common/ui';
14
15
  import { startMeasure, stopMeasure } from '@atlaskit/editor-common/performance-measures';
15
16
  import { getAnalyticsAppearance, getAnalyticsEventSeverity, shouldForceTracking } from '@atlaskit/editor-common/utils';
16
- import { measureTTI } from '@atlaskit/editor-common/performance/measure-tti';
17
17
  import { getDistortedDurationMonitor } from '@atlaskit/editor-common/performance/measure-render';
18
18
  import { browser } from '@atlaskit/editor-common/browser';
19
19
  import { getResponseEndTime } from '@atlaskit/editor-common/performance/navigation';
@@ -33,7 +33,7 @@ import { Provider as SmartCardStorageProvider } from '../SmartCardStorage';
33
33
  import { BreakoutSSRInlineScript } from './breakout-ssr';
34
34
  import { RendererActionsContext, RendererContext as ActionsContext } from '../RendererActionsContext';
35
35
  import { ActiveHeaderIdProvider } from '../active-header-id-provider';
36
- import { AnnotationsWrapper } from '../annotations';
36
+ import { AnnotationsPositionContext, AnnotationsWrapper } from '../annotations';
37
37
  import { getActiveHeadingId, isNestedHeaderLinksEnabled } from '../../react/utils/links';
38
38
  import { findInTree } from '../../utils';
39
39
  import { isInteractiveElement } from './click-to-edit';
@@ -45,9 +45,13 @@ import { nodeToReact } from '../../react/nodes';
45
45
  export const NORMAL_SEVERITY_THRESHOLD = 2000;
46
46
  export const DEGRADED_SEVERITY_THRESHOLD = 3000;
47
47
  const packageName = "@atlaskit/renderer";
48
- const packageVersion = "111.0.2";
48
+ const packageVersion = "111.1.1";
49
49
  export const defaultNodeComponents = nodeToReact;
50
- export class Renderer extends PureComponent {
50
+
51
+ /**
52
+ * Exported due to enzyme test reliance on this component.
53
+ */
54
+ export class __RendererClassComponent extends PureComponent {
51
55
  constructor(props) {
52
56
  super(props);
53
57
  /**
@@ -134,21 +138,6 @@ export class Renderer extends PureComponent {
134
138
  this.editorRef = props.innerRef || /*#__PURE__*/React.createRef();
135
139
  this.id = uuid();
136
140
  startMeasure(`Renderer Render Time: ${this.id}`);
137
- const _featureFlags = this.featureFlags(this.props.featureFlags).featureFlags;
138
- if (_featureFlags !== null && _featureFlags !== void 0 && _featureFlags.rendererTtiTracking) {
139
- measureTTI((tti, ttiFromInvocation, canceled) => {
140
- this.fireAnalyticsEvent({
141
- action: ACTION.RENDERER_TTI,
142
- actionSubject: ACTION_SUBJECT.RENDERER,
143
- attributes: {
144
- tti,
145
- ttiFromInvocation,
146
- canceled
147
- },
148
- eventType: EVENT_TYPE.OPERATIONAL
149
- });
150
- });
151
- }
152
141
  }
153
142
  anchorLinkAnalytics() {
154
143
  const hash = window.location.hash && decodeURIComponent(window.location.hash.slice(1));
@@ -236,6 +225,7 @@ export class Renderer extends PureComponent {
236
225
  featureFlags
237
226
  } = this.featureFlags(props.featureFlags);
238
227
  return {
228
+ startPos: props.startPos,
239
229
  providers: this.providerFactory,
240
230
  eventHandlers: props.eventHandlers,
241
231
  extensionHandlers: props.extensionHandlers,
@@ -422,6 +412,20 @@ export class Renderer extends PureComponent {
422
412
  }
423
413
  }
424
414
  }
415
+ export function Renderer(props) {
416
+ const {
417
+ startPos
418
+ } = React.useContext(AnnotationsPositionContext);
419
+
420
+ // eslint-disable-next-line react/jsx-pascal-case
421
+ return jsx(__RendererClassComponent, _extends({}, props, {
422
+ startPos: startPos
423
+ }));
424
+ }
425
+
426
+ // Usage notes:
427
+ // Used by Confluence for View page renderer
428
+ // For the nested renderers - see RendererWithAnnotationSelection.
425
429
  export const RendererWithAnalytics = /*#__PURE__*/React.memo(props => jsx(FabricEditorAnalyticsContext, {
426
430
  data: {
427
431
  appearance: getAnalyticsAppearance(props.appearance),
@@ -533,24 +537,53 @@ const RendererWrapper = /*#__PURE__*/React.memo(props => {
533
537
  })
534
538
  }, children))));
535
539
  });
540
+ const RootRendererContext = /*#__PURE__*/React.createContext(null);
536
541
  function RendererActionsInternalUpdater({
537
542
  children,
538
543
  doc,
539
544
  schema,
540
545
  onAnalyticsEvent
541
546
  }) {
547
+ const rootRendererContextValue = React.useContext(RootRendererContext);
542
548
  const actions = useContext(ActionsContext);
543
549
  const rendererRef = useRef(null);
550
+
551
+ // This doc is used by the renderer actions when applying comments to the document.
552
+ // (via hand crafted steps based on non prosemirror based position calculations)
553
+ // It is set to the root renderer's doc as otherwise the resulting document will
554
+ // be incorrect (nested renderers use a fake document which represents a subset
555
+ // of the actual document).
556
+ let _doc;
557
+ if (editorExperiment('comment_on_bodied_extensions', true) && rootRendererContextValue) {
558
+ // If rootRendererContextValue is set -- we are inside a nested renderer
559
+ // and should always use the doc from the root renderer
560
+ _doc = rootRendererContextValue.doc;
561
+ } else {
562
+ // If rootRendererContextValue is not set -- we are in the root renderer
563
+ // and set the doc to the current doc.
564
+ _doc = doc;
565
+ }
544
566
  useLayoutEffect(() => {
545
- if (doc) {
546
- actions._privateRegisterRenderer(rendererRef, doc, schema, onAnalyticsEvent);
567
+ if (_doc) {
568
+ actions._privateRegisterRenderer(rendererRef, _doc, schema, onAnalyticsEvent);
547
569
  } else {
548
570
  actions._privateUnregisterRenderer();
549
571
  }
550
572
  return () => actions._privateUnregisterRenderer();
551
- }, [actions, schema, doc, onAnalyticsEvent]);
573
+ }, [actions, schema, _doc, onAnalyticsEvent]);
574
+ if (editorExperiment('comment_on_bodied_extensions', true)) {
575
+ return jsx(RootRendererContext.Provider, {
576
+ value: {
577
+ doc: _doc
578
+ }
579
+ }, children);
580
+ }
552
581
  return children;
553
582
  }
583
+
584
+ // Usage notes:
585
+ // Used by Confluence for nested renderers
586
+ // For the View page renderer - see RendererWithAnalytics
554
587
  const RendererWithAnnotationSelection = props => {
555
588
  const {
556
589
  allowAnnotations,
@@ -20,6 +20,14 @@ const LoadAnnotations = /*#__PURE__*/React.memo(({
20
20
  });
21
21
  return null;
22
22
  });
23
+
24
+ // This is used by renderers when setting the data-start-pos attribute on commentable nodes
25
+ // By default it is 1 (the possible starting position of any document).
26
+ // The bodied extension component then sets a new value for this context based on its on position
27
+ // in the document.
28
+ export const AnnotationsPositionContext = /*#__PURE__*/React.createContext({
29
+ startPos: 1
30
+ });
23
31
  export const AnnotationsWrapper = props => {
24
32
  var _annotationProvider$i, _annotationProvider$i2;
25
33
  const {
@@ -9,6 +9,7 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
9
9
  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; }
10
10
  import React from 'react';
11
11
  import { MarkType } from '@atlaskit/editor-prosemirror/model';
12
+ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
12
13
  import { isNestedHeaderLinksEnabled } from './utils/links';
13
14
  import { Doc, DocWithSelectAllTrap, mergeTextNodes, isTextWrapper, isTextNode, toReact } from './nodes';
14
15
  import TextWrapperComponent from './nodes/text-wrapper';
@@ -50,7 +51,6 @@ var ReactSerializer = /*#__PURE__*/function () {
50
51
  _defineProperty(this, "allowWrapCodeBlock", false);
51
52
  _defineProperty(this, "allowPlaceholderText", true);
52
53
  _defineProperty(this, "allowCustomPanels", false);
53
- _defineProperty(this, "startPos", 1);
54
54
  _defineProperty(this, "surroundTextNodesWithTextWrapper", false);
55
55
  _defineProperty(this, "allowAnnotations", false);
56
56
  _defineProperty(this, "serializeFragmentChild", function (node, _ref) {
@@ -154,6 +154,13 @@ var ReactSerializer = /*#__PURE__*/function () {
154
154
  });
155
155
  return props;
156
156
  });
157
+ if (editorExperiment('comment_on_bodied_extensions', true)) {
158
+ this.initStartPos = init.startPos || 1;
159
+ this.startPos = init.startPos || 1;
160
+ } else {
161
+ this.initStartPos = 1;
162
+ this.startPos = 1;
163
+ }
157
164
  this.providers = init.providers;
158
165
  this.eventHandlers = init.eventHandlers;
159
166
  this.extensionHandlers = init.extensionHandlers;
@@ -191,7 +198,7 @@ var ReactSerializer = /*#__PURE__*/function () {
191
198
  value: function resetState() {
192
199
  this.headingIds = [];
193
200
  this.expandHeadingIds = [];
194
- this.startPos = 1;
201
+ this.startPos = this.initStartPos;
195
202
  }
196
203
  }, {
197
204
  key: "getNodeProps",
@@ -524,6 +531,7 @@ var ReactSerializer = /*#__PURE__*/function () {
524
531
  key: "getProps",
525
532
  value: function getProps(node) {
526
533
  var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
534
+ var startPos = this.startPos + path.length;
527
535
  return _objectSpread({
528
536
  text: node.text,
529
537
  providers: this.providers,
@@ -546,8 +554,9 @@ var ReactSerializer = /*#__PURE__*/function () {
546
554
  dataAttributes: {
547
555
  // We need to account for depth (path.length gives up depth) here
548
556
  // but depth doesnt increment the pos, only accounted for.
549
- 'data-renderer-start-pos': this.startPos + path.length
557
+ 'data-renderer-start-pos': startPos
550
558
  },
559
+ startPos: startPos,
551
560
  path: path
552
561
  }, node.attrs);
553
562
  }
@@ -6,6 +6,7 @@ import { ErrorBoundary } from '../../ui/Renderer/ErrorBoundary';
6
6
  import ExtensionRenderer from '../../ui/ExtensionRenderer';
7
7
  import { ACTION_SUBJECT } from '../../analytics/enums';
8
8
  import { ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
9
+ import { AnnotationsPositionContext } from '../../ui/annotations';
9
10
  var BodiedExtension = function BodiedExtension(props) {
10
11
  var children = props.children,
11
12
  _props$layout = props.layout,
@@ -24,6 +25,10 @@ var BodiedExtension = function BodiedExtension(props) {
24
25
  componentId: ACTION_SUBJECT_ID.EXTENSION_BODIED,
25
26
  createAnalyticsEvent: createAnalyticsEvent,
26
27
  additionalInfo: "".concat(extensionType, ": ").concat(extensionKey, " ")
28
+ }, /*#__PURE__*/React.createElement(AnnotationsPositionContext.Provider, {
29
+ value: {
30
+ startPos: props.startPos + 1
31
+ }
27
32
  }, /*#__PURE__*/React.createElement(ExtensionRenderer, _extends({}, props, {
28
33
  type: "bodiedExtension"
29
34
  }), function (_ref) {
@@ -44,6 +49,6 @@ var BodiedExtension = function BodiedExtension(props) {
44
49
  return renderExtension(children, layout, {
45
50
  isTopLevel: path.length < 1
46
51
  }, removeOverflow);
47
- }));
52
+ })));
48
53
  };
49
54
  export default BodiedExtension;
@@ -20,10 +20,10 @@ import { jsx } from '@emotion/react';
20
20
  import { getSchemaBasedOnStage } from '@atlaskit/adf-schema/schema-default';
21
21
  import { reduce } from '@atlaskit/adf-utils/traverse';
22
22
  import { ProviderFactory, ProviderFactoryProvider } from '@atlaskit/editor-common/provider-factory';
23
+ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
23
24
  import { UnsupportedBlock, BaseTheme, WidthProvider, WithCreateAnalyticsEvent, IntlErrorBoundary } from '@atlaskit/editor-common/ui';
24
25
  import { startMeasure, stopMeasure } from '@atlaskit/editor-common/performance-measures';
25
26
  import { getAnalyticsAppearance, getAnalyticsEventSeverity, shouldForceTracking } from '@atlaskit/editor-common/utils';
26
- import { measureTTI } from '@atlaskit/editor-common/performance/measure-tti';
27
27
  import { getDistortedDurationMonitor } from '@atlaskit/editor-common/performance/measure-render';
28
28
  import { browser } from '@atlaskit/editor-common/browser';
29
29
  import { getResponseEndTime } from '@atlaskit/editor-common/performance/navigation';
@@ -43,7 +43,7 @@ import { Provider as SmartCardStorageProvider } from '../SmartCardStorage';
43
43
  import { BreakoutSSRInlineScript } from './breakout-ssr';
44
44
  import { RendererActionsContext, RendererContext as ActionsContext } from '../RendererActionsContext';
45
45
  import { ActiveHeaderIdProvider } from '../active-header-id-provider';
46
- import { AnnotationsWrapper } from '../annotations';
46
+ import { AnnotationsPositionContext, AnnotationsWrapper } from '../annotations';
47
47
  import { getActiveHeadingId, isNestedHeaderLinksEnabled } from '../../react/utils/links';
48
48
  import { findInTree } from '../../utils';
49
49
  import { isInteractiveElement } from './click-to-edit';
@@ -55,14 +55,18 @@ import { nodeToReact } from '../../react/nodes';
55
55
  export var NORMAL_SEVERITY_THRESHOLD = 2000;
56
56
  export var DEGRADED_SEVERITY_THRESHOLD = 3000;
57
57
  var packageName = "@atlaskit/renderer";
58
- var packageVersion = "111.0.2";
58
+ var packageVersion = "111.1.1";
59
59
  export var defaultNodeComponents = nodeToReact;
60
- export var Renderer = /*#__PURE__*/function (_PureComponent) {
61
- _inherits(Renderer, _PureComponent);
62
- var _super = _createSuper(Renderer);
63
- function Renderer(props) {
60
+
61
+ /**
62
+ * Exported due to enzyme test reliance on this component.
63
+ */
64
+ export var __RendererClassComponent = /*#__PURE__*/function (_PureComponent) {
65
+ _inherits(__RendererClassComponent, _PureComponent);
66
+ var _super = _createSuper(__RendererClassComponent);
67
+ function __RendererClassComponent(props) {
64
68
  var _this;
65
- _classCallCheck(this, Renderer);
69
+ _classCallCheck(this, __RendererClassComponent);
66
70
  _this = _super.call(this, props);
67
71
  /**
68
72
  * This is used in measuring the Renderer Mount time and is then
@@ -144,24 +148,9 @@ export var Renderer = /*#__PURE__*/function (_PureComponent) {
144
148
  _this.editorRef = props.innerRef || /*#__PURE__*/React.createRef();
145
149
  _this.id = uuid();
146
150
  startMeasure("Renderer Render Time: ".concat(_this.id));
147
- var _featureFlags = _this.featureFlags(_this.props.featureFlags).featureFlags;
148
- if (_featureFlags !== null && _featureFlags !== void 0 && _featureFlags.rendererTtiTracking) {
149
- measureTTI(function (tti, ttiFromInvocation, canceled) {
150
- _this.fireAnalyticsEvent({
151
- action: ACTION.RENDERER_TTI,
152
- actionSubject: ACTION_SUBJECT.RENDERER,
153
- attributes: {
154
- tti: tti,
155
- ttiFromInvocation: ttiFromInvocation,
156
- canceled: canceled
157
- },
158
- eventType: EVENT_TYPE.OPERATIONAL
159
- });
160
- });
161
- }
162
151
  return _this;
163
152
  }
164
- _createClass(Renderer, [{
153
+ _createClass(__RendererClassComponent, [{
165
154
  key: "anchorLinkAnalytics",
166
155
  value: function anchorLinkAnalytics() {
167
156
  var hash = window.location.hash && decodeURIComponent(window.location.hash.slice(1));
@@ -249,6 +238,7 @@ export var Renderer = /*#__PURE__*/function (_PureComponent) {
249
238
  var _this$featureFlags = this.featureFlags(props.featureFlags),
250
239
  featureFlags = _this$featureFlags.featureFlags;
251
240
  return {
241
+ startPos: props.startPos,
252
242
  providers: this.providerFactory,
253
243
  eventHandlers: props.eventHandlers,
254
244
  extensionHandlers: props.extensionHandlers,
@@ -437,8 +427,21 @@ export var Renderer = /*#__PURE__*/function (_PureComponent) {
437
427
  }
438
428
  }
439
429
  }]);
440
- return Renderer;
430
+ return __RendererClassComponent;
441
431
  }(PureComponent);
432
+ export function Renderer(props) {
433
+ var _React$useContext = React.useContext(AnnotationsPositionContext),
434
+ startPos = _React$useContext.startPos;
435
+
436
+ // eslint-disable-next-line react/jsx-pascal-case
437
+ return jsx(__RendererClassComponent, _extends({}, props, {
438
+ startPos: startPos
439
+ }));
440
+ }
441
+
442
+ // Usage notes:
443
+ // Used by Confluence for View page renderer
444
+ // For the nested renderers - see RendererWithAnnotationSelection.
442
445
  export var RendererWithAnalytics = /*#__PURE__*/React.memo(function (props) {
443
446
  return jsx(FabricEditorAnalyticsContext, {
444
447
  data: {
@@ -552,25 +555,54 @@ var RendererWrapper = /*#__PURE__*/React.memo(function (props) {
552
555
  })
553
556
  }, children))));
554
557
  });
558
+ var RootRendererContext = /*#__PURE__*/React.createContext(null);
555
559
  function RendererActionsInternalUpdater(_ref) {
556
560
  var children = _ref.children,
557
561
  doc = _ref.doc,
558
562
  schema = _ref.schema,
559
563
  onAnalyticsEvent = _ref.onAnalyticsEvent;
564
+ var rootRendererContextValue = React.useContext(RootRendererContext);
560
565
  var actions = useContext(ActionsContext);
561
566
  var rendererRef = useRef(null);
567
+
568
+ // This doc is used by the renderer actions when applying comments to the document.
569
+ // (via hand crafted steps based on non prosemirror based position calculations)
570
+ // It is set to the root renderer's doc as otherwise the resulting document will
571
+ // be incorrect (nested renderers use a fake document which represents a subset
572
+ // of the actual document).
573
+ var _doc;
574
+ if (editorExperiment('comment_on_bodied_extensions', true) && rootRendererContextValue) {
575
+ // If rootRendererContextValue is set -- we are inside a nested renderer
576
+ // and should always use the doc from the root renderer
577
+ _doc = rootRendererContextValue.doc;
578
+ } else {
579
+ // If rootRendererContextValue is not set -- we are in the root renderer
580
+ // and set the doc to the current doc.
581
+ _doc = doc;
582
+ }
562
583
  useLayoutEffect(function () {
563
- if (doc) {
564
- actions._privateRegisterRenderer(rendererRef, doc, schema, onAnalyticsEvent);
584
+ if (_doc) {
585
+ actions._privateRegisterRenderer(rendererRef, _doc, schema, onAnalyticsEvent);
565
586
  } else {
566
587
  actions._privateUnregisterRenderer();
567
588
  }
568
589
  return function () {
569
590
  return actions._privateUnregisterRenderer();
570
591
  };
571
- }, [actions, schema, doc, onAnalyticsEvent]);
592
+ }, [actions, schema, _doc, onAnalyticsEvent]);
593
+ if (editorExperiment('comment_on_bodied_extensions', true)) {
594
+ return jsx(RootRendererContext.Provider, {
595
+ value: {
596
+ doc: _doc
597
+ }
598
+ }, children);
599
+ }
572
600
  return children;
573
601
  }
602
+
603
+ // Usage notes:
604
+ // Used by Confluence for nested renderers
605
+ // For the View page renderer - see RendererWithAnalytics
574
606
  var RendererWithAnnotationSelection = function RendererWithAnnotationSelection(props) {
575
607
  var allowAnnotations = props.allowAnnotations,
576
608
  adfDocument = props.document;
@@ -19,6 +19,14 @@ var LoadAnnotations = /*#__PURE__*/React.memo(function (_ref) {
19
19
  });
20
20
  return null;
21
21
  });
22
+
23
+ // This is used by renderers when setting the data-start-pos attribute on commentable nodes
24
+ // By default it is 1 (the possible starting position of any document).
25
+ // The bodied extension component then sets a new value for this context based on its on position
26
+ // in the document.
27
+ export var AnnotationsPositionContext = /*#__PURE__*/React.createContext({
28
+ startPos: 1
29
+ });
22
30
  export var AnnotationsWrapper = function AnnotationsWrapper(props) {
23
31
  var _annotationProvider$i, _annotationProvider$i2;
24
32
  var children = props.children,
@@ -12,6 +12,12 @@ import type { MediaOptions } from '../types/mediaOptions';
12
12
  import type { SmartLinksOptions } from '../types/smartLinksOptions';
13
13
  import type { EmojiResourceConfig } from '@atlaskit/emoji/resource';
14
14
  export interface ReactSerializerInit {
15
+ /**
16
+ * Used for to set positions on nodes for annotations.
17
+ *
18
+ * When not provided defaults to 1.
19
+ */
20
+ startPos?: number;
15
21
  providers?: ProviderFactory;
16
22
  eventHandlers?: EventHandlers;
17
23
  extensionHandlers?: ExtensionHandlers;
@@ -79,6 +85,7 @@ export default class ReactSerializer implements Serializer<JSX.Element> {
79
85
  private allowAltTextOnImages?;
80
86
  private stickyHeaders?;
81
87
  private allowMediaLinking?;
88
+ private initStartPos;
82
89
  private startPos;
83
90
  private surroundTextNodesWithTextWrapper;
84
91
  private media?;
@@ -19,6 +19,7 @@ interface Props {
19
19
  layout?: ExtensionLayout;
20
20
  localId?: string;
21
21
  marks?: PMMark[];
22
+ startPos: number;
22
23
  }
23
24
  declare const BodiedExtension: (props: React.PropsWithChildren<Props>) => JSX.Element;
24
25
  export default BodiedExtension;
@@ -9,7 +9,12 @@ import type { RendererProps } from '../renderer-props';
9
9
  export declare const NORMAL_SEVERITY_THRESHOLD = 2000;
10
10
  export declare const DEGRADED_SEVERITY_THRESHOLD = 3000;
11
11
  export declare const defaultNodeComponents: NodeComponentsProps;
12
- export declare class Renderer extends PureComponent<RendererProps> {
12
+ /**
13
+ * Exported due to enzyme test reliance on this component.
14
+ */
15
+ export declare class __RendererClassComponent extends PureComponent<RendererProps & {
16
+ startPos?: number;
17
+ }> {
13
18
  private providerFactory;
14
19
  private serializer;
15
20
  private editorRef;
@@ -21,10 +26,14 @@ export declare class Renderer extends PureComponent<RendererProps> {
21
26
  * deleted once that measurement occurs.
22
27
  */
23
28
  private renderedMeasurementDistortedDurationMonitor?;
24
- constructor(props: RendererProps);
29
+ constructor(props: RendererProps & {
30
+ startPos: number;
31
+ });
25
32
  private anchorLinkAnalytics;
26
33
  componentDidMount(): void;
27
- UNSAFE_componentWillReceiveProps(nextProps: RendererProps): void;
34
+ UNSAFE_componentWillReceiveProps(nextProps: RendererProps & {
35
+ startPos: number;
36
+ }): void;
28
37
  private deriveSerializerProps;
29
38
  private featureFlags;
30
39
  private fireAnalyticsEvent;
@@ -34,6 +43,7 @@ export declare class Renderer extends PureComponent<RendererProps> {
34
43
  render(): jsx.JSX.Element;
35
44
  componentWillUnmount(): void;
36
45
  }
46
+ export declare function Renderer(props: RendererProps): jsx.JSX.Element;
37
47
  export declare const RendererWithAnalytics: React.MemoExoticComponent<(props: RendererProps) => jsx.JSX.Element>;
38
48
  declare const RendererWithAnnotationSelection: (props: RendererProps) => jsx.JSX.Element;
39
49
  export default RendererWithAnnotationSelection;
@@ -1,5 +1,8 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  import { type AnnotationsWrapperProps } from './types';
3
+ export declare const AnnotationsPositionContext: React.Context<{
4
+ startPos: number;
5
+ }>;
3
6
  export declare const AnnotationsWrapper: (props: AnnotationsWrapperProps) => JSX.Element;
4
7
  export { TextWithAnnotationDraft } from './draft';
5
8
  export { MarkElement as AnnotationMark } from './element';
@@ -15,10 +15,18 @@ export type AnnotationsWrapperProps = React.PropsWithChildren<{
15
15
  adfDocument: JSONDocNode;
16
16
  annotationProvider: AnnotationProviders | null | undefined;
17
17
  rendererRef: React.RefObject<HTMLDivElement>;
18
+ /**
19
+ * This is set (by consumers) for nested renderers when they are
20
+ * rendering bodied extension content.
21
+ */
18
22
  isNestedRender: boolean;
19
23
  onLoadComplete?: ({ numberOfUnresolvedInlineComments, }: {
20
24
  numberOfUnresolvedInlineComments: number;
21
25
  }) => void;
26
+ /**
27
+ * This is set internally -- and should not be set by consumers.
28
+ */
29
+ _startPos?: number;
22
30
  }>;
23
31
  export type TextPosition = {
24
32
  start: number;
@@ -12,6 +12,12 @@ import type { MediaOptions } from '../types/mediaOptions';
12
12
  import type { SmartLinksOptions } from '../types/smartLinksOptions';
13
13
  import type { EmojiResourceConfig } from '@atlaskit/emoji/resource';
14
14
  export interface ReactSerializerInit {
15
+ /**
16
+ * Used for to set positions on nodes for annotations.
17
+ *
18
+ * When not provided defaults to 1.
19
+ */
20
+ startPos?: number;
15
21
  providers?: ProviderFactory;
16
22
  eventHandlers?: EventHandlers;
17
23
  extensionHandlers?: ExtensionHandlers;
@@ -79,6 +85,7 @@ export default class ReactSerializer implements Serializer<JSX.Element> {
79
85
  private allowAltTextOnImages?;
80
86
  private stickyHeaders?;
81
87
  private allowMediaLinking?;
88
+ private initStartPos;
82
89
  private startPos;
83
90
  private surroundTextNodesWithTextWrapper;
84
91
  private media?;
@@ -19,6 +19,7 @@ interface Props {
19
19
  layout?: ExtensionLayout;
20
20
  localId?: string;
21
21
  marks?: PMMark[];
22
+ startPos: number;
22
23
  }
23
24
  declare const BodiedExtension: (props: React.PropsWithChildren<Props>) => JSX.Element;
24
25
  export default BodiedExtension;
@@ -9,7 +9,12 @@ import type { RendererProps } from '../renderer-props';
9
9
  export declare const NORMAL_SEVERITY_THRESHOLD = 2000;
10
10
  export declare const DEGRADED_SEVERITY_THRESHOLD = 3000;
11
11
  export declare const defaultNodeComponents: NodeComponentsProps;
12
- export declare class Renderer extends PureComponent<RendererProps> {
12
+ /**
13
+ * Exported due to enzyme test reliance on this component.
14
+ */
15
+ export declare class __RendererClassComponent extends PureComponent<RendererProps & {
16
+ startPos?: number;
17
+ }> {
13
18
  private providerFactory;
14
19
  private serializer;
15
20
  private editorRef;
@@ -21,10 +26,14 @@ export declare class Renderer extends PureComponent<RendererProps> {
21
26
  * deleted once that measurement occurs.
22
27
  */
23
28
  private renderedMeasurementDistortedDurationMonitor?;
24
- constructor(props: RendererProps);
29
+ constructor(props: RendererProps & {
30
+ startPos: number;
31
+ });
25
32
  private anchorLinkAnalytics;
26
33
  componentDidMount(): void;
27
- UNSAFE_componentWillReceiveProps(nextProps: RendererProps): void;
34
+ UNSAFE_componentWillReceiveProps(nextProps: RendererProps & {
35
+ startPos: number;
36
+ }): void;
28
37
  private deriveSerializerProps;
29
38
  private featureFlags;
30
39
  private fireAnalyticsEvent;
@@ -34,6 +43,7 @@ export declare class Renderer extends PureComponent<RendererProps> {
34
43
  render(): jsx.JSX.Element;
35
44
  componentWillUnmount(): void;
36
45
  }
46
+ export declare function Renderer(props: RendererProps): jsx.JSX.Element;
37
47
  export declare const RendererWithAnalytics: React.MemoExoticComponent<(props: RendererProps) => jsx.JSX.Element>;
38
48
  declare const RendererWithAnnotationSelection: (props: RendererProps) => jsx.JSX.Element;
39
49
  export default RendererWithAnnotationSelection;
@@ -1,5 +1,8 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  import { type AnnotationsWrapperProps } from './types';
3
+ export declare const AnnotationsPositionContext: React.Context<{
4
+ startPos: number;
5
+ }>;
3
6
  export declare const AnnotationsWrapper: (props: AnnotationsWrapperProps) => JSX.Element;
4
7
  export { TextWithAnnotationDraft } from './draft';
5
8
  export { MarkElement as AnnotationMark } from './element';
@@ -15,10 +15,18 @@ export type AnnotationsWrapperProps = React.PropsWithChildren<{
15
15
  adfDocument: JSONDocNode;
16
16
  annotationProvider: AnnotationProviders | null | undefined;
17
17
  rendererRef: React.RefObject<HTMLDivElement>;
18
+ /**
19
+ * This is set (by consumers) for nested renderers when they are
20
+ * rendering bodied extension content.
21
+ */
18
22
  isNestedRender: boolean;
19
23
  onLoadComplete?: ({ numberOfUnresolvedInlineComments, }: {
20
24
  numberOfUnresolvedInlineComments: number;
21
25
  }) => void;
26
+ /**
27
+ * This is set internally -- and should not be set by consumers.
28
+ */
29
+ _startPos?: number;
22
30
  }>;
23
31
  export type TextPosition = {
24
32
  start: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/renderer",
3
- "version": "111.0.2",
3
+ "version": "111.1.1",
4
4
  "description": "Renderer component",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"