@atlaskit/editor-core 216.10.1 → 216.11.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 +33 -0
- package/afm-cc/tsconfig.json +0 -1
- package/afm-jira/tsconfig.json +0 -1
- package/afm-products/tsconfig.json +0 -1
- package/dist/cjs/composable-editor/editor-internal.js +1 -0
- package/dist/cjs/composable-editor/hooks/useMemoEditorProps.js +2 -1
- package/dist/cjs/create-editor/ReactEditorView.js +92 -21
- package/dist/cjs/ui/Appearance/FullPage/FullPage.js +10 -2
- package/dist/cjs/utils/getNodesCount.js +1 -0
- package/dist/cjs/utils/getNodesCountWithExtensionKeys.js +32 -0
- package/dist/cjs/version-wrapper.js +1 -1
- package/dist/es2019/composable-editor/editor-internal.js +1 -0
- package/dist/es2019/composable-editor/hooks/useMemoEditorProps.js +2 -1
- package/dist/es2019/create-editor/ReactEditorView.js +82 -17
- package/dist/es2019/ui/Appearance/FullPage/FullPage.js +10 -2
- package/dist/es2019/utils/getNodesCount.js +1 -0
- package/dist/es2019/utils/getNodesCountWithExtensionKeys.js +26 -0
- package/dist/es2019/version-wrapper.js +1 -1
- package/dist/esm/composable-editor/editor-internal.js +1 -0
- package/dist/esm/composable-editor/hooks/useMemoEditorProps.js +2 -1
- package/dist/esm/create-editor/ReactEditorView.js +93 -22
- package/dist/esm/ui/Appearance/FullPage/FullPage.js +10 -2
- package/dist/esm/utils/getNodesCount.js +1 -0
- package/dist/esm/utils/getNodesCountWithExtensionKeys.js +26 -0
- package/dist/esm/version-wrapper.js +1 -1
- package/dist/types/create-editor/ReactEditorView.d.ts +5 -0
- package/dist/types/types/editor-appearance-component.d.ts +5 -0
- package/dist/types/types/editor-props.d.ts +26 -0
- package/dist/types/utils/getNodesCountWithExtensionKeys.d.ts +12 -0
- package/dist/types-ts4.5/create-editor/ReactEditorView.d.ts +5 -0
- package/dist/types-ts4.5/types/editor-appearance-component.d.ts +5 -0
- package/dist/types-ts4.5/types/editor-props.d.ts +26 -0
- package/dist/types-ts4.5/utils/getNodesCountWithExtensionKeys.d.ts +12 -0
- package/package.json +6 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# @atlaskit/editor-core
|
|
2
2
|
|
|
3
|
+
## 216.11.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies
|
|
8
|
+
|
|
9
|
+
## 216.11.2
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [`0eed66892511e`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/0eed66892511e) -
|
|
14
|
+
EDITOR-5120 - Add additional ProseMirror rendered analytics attributes behind the
|
|
15
|
+
platform_editor_prosemirror_rendered_data experiment.
|
|
16
|
+
- Updated dependencies
|
|
17
|
+
|
|
18
|
+
## 216.11.1
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- Updated dependencies
|
|
23
|
+
|
|
24
|
+
## 216.11.0
|
|
25
|
+
|
|
26
|
+
### Minor Changes
|
|
27
|
+
|
|
28
|
+
- [`cbc1403b3cae1`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/cbc1403b3cae1) -
|
|
29
|
+
[EDITOR-5094](https://hello.jira.atlassian.cloud/browse/EDITOR-5094) - add PerfPortal segments for
|
|
30
|
+
editor SSR logic
|
|
31
|
+
|
|
32
|
+
### Patch Changes
|
|
33
|
+
|
|
34
|
+
- Updated dependencies
|
|
35
|
+
|
|
3
36
|
## 216.10.1
|
|
4
37
|
|
|
5
38
|
### Patch Changes
|
package/afm-cc/tsconfig.json
CHANGED
package/afm-jira/tsconfig.json
CHANGED
|
@@ -129,6 +129,7 @@ var EditorInternal = exports.EditorInternal = /*#__PURE__*/(0, _react.memo)(func
|
|
|
129
129
|
minHeight: props.minHeight,
|
|
130
130
|
onSave: props.onSave ? handleSave : undefined,
|
|
131
131
|
onCancel: props.onCancel,
|
|
132
|
+
onSSRMeasure: props.onSSRMeasure,
|
|
132
133
|
popupsMountPoint: props.popupsMountPoint,
|
|
133
134
|
popupsBoundariesElement: props.popupsBoundariesElement,
|
|
134
135
|
popupsScrollableElement: props.popupsScrollableElement,
|
|
@@ -94,6 +94,7 @@ var useMemoEditorProps = exports.useMemoEditorProps = function useMemoEditorProp
|
|
|
94
94
|
mention: passedProps.mention,
|
|
95
95
|
mentionInsertDisplayName: passedProps.mentionInsertDisplayName,
|
|
96
96
|
uploadErrorHandler: passedProps.uploadErrorHandler,
|
|
97
|
+
onSSRMeasure: passedProps.onSSRMeasure,
|
|
97
98
|
waitForMediaUpload: passedProps.waitForMediaUpload,
|
|
98
99
|
extensionHandlers: passedProps.extensionHandlers,
|
|
99
100
|
allowTextColor: passedProps.allowTextColor,
|
|
@@ -118,7 +119,7 @@ var useMemoEditorProps = exports.useMemoEditorProps = function useMemoEditorProp
|
|
|
118
119
|
};
|
|
119
120
|
var nextProps = _objectSpread(_objectSpread({}, defaultProps), allProps);
|
|
120
121
|
return nextProps;
|
|
121
|
-
}, [passedProps.preset, passedProps.appearance, passedProps.contentMode, passedProps.contentComponents, passedProps.primaryToolbarIconBefore, passedProps.secondaryToolbarComponents, passedProps.persistScrollGutter, passedProps.quickInsert, passedProps.shouldFocus, passedProps.disabled, passedProps.contextPanel, passedProps.errorReporterHandler, passedProps.contentTransformerProvider, passedProps.maxHeight, passedProps.minHeight, passedProps.placeholder, passedProps.placeholderBracketHint, passedProps.performanceTracking, passedProps.inputSamplingLimit, passedProps.defaultValue, passedProps.assistiveLabel, passedProps.assistiveDescribedBy, passedProps.popupsMountPoint, passedProps.popupsBoundariesElement, passedProps.popupsScrollableElement, passedProps.editorActions, passedProps.onEditorReady, passedProps.onDestroy, passedProps.onChange, passedProps.onCancel, passedProps.extensionProviders, passedProps.UNSAFE_useAnalyticsContext, passedProps.useStickyToolbar, passedProps.featureFlags, passedProps.onSave, passedProps.sanitizePrivateContent, passedProps.media, passedProps.collabEdit, passedProps.primaryToolbarComponents, passedProps.allowUndoRedoButtons, passedProps.linking, passedProps.activityProvider, passedProps.searchProvider, passedProps.annotationProviders, passedProps.collabEditProvider, passedProps.presenceProvider, passedProps.emojiProvider, passedProps.taskDecisionProvider, passedProps.legacyImageUploadProvider, passedProps.mentionProvider, passedProps.autoformattingProvider, passedProps.macroProvider, passedProps.contextIdentifierProvider, passedProps.allowExpand, passedProps.allowNestedTasks, passedProps.allowBlockType, passedProps.allowTasksAndDecisions, passedProps.allowBreakout, passedProps.allowRule, passedProps.allowHelpDialog, passedProps.allowPanel, passedProps.allowExtension, passedProps.allowConfluenceInlineComment, passedProps.allowTemplatePlaceholders, passedProps.allowDate, passedProps.allowLayouts, passedProps.allowStatus, passedProps.allowTextAlignment, passedProps.allowIndentation, passedProps.showIndentationButtons, passedProps.allowFindReplace, passedProps.allowBorderMark, passedProps.allowFragmentMark, passedProps.autoScrollIntoView, passedProps.elementBrowser, passedProps.maxContentSize, passedProps.saveOnEnter, passedProps.feedbackInfo, passedProps.mention, passedProps.mentionInsertDisplayName, passedProps.uploadErrorHandler, passedProps.waitForMediaUpload, passedProps.extensionHandlers, passedProps.allowTextColor, passedProps.allowTables, passedProps.insertMenuItems, passedProps.UNSAFE_cards, passedProps.smartLinks, passedProps.allowAnalyticsGASV3, passedProps.codeBlock, passedProps.textFormatting, passedProps.__livePage, passedProps.AppearanceComponent, passedProps.skipValidation, passedProps.syncBlock, passedProps.syncedBlockProvider, passedProps.pasteWarningOptions]);
|
|
122
|
+
}, [passedProps.preset, passedProps.appearance, passedProps.contentMode, passedProps.contentComponents, passedProps.primaryToolbarIconBefore, passedProps.secondaryToolbarComponents, passedProps.persistScrollGutter, passedProps.quickInsert, passedProps.shouldFocus, passedProps.disabled, passedProps.contextPanel, passedProps.errorReporterHandler, passedProps.contentTransformerProvider, passedProps.maxHeight, passedProps.minHeight, passedProps.placeholder, passedProps.placeholderBracketHint, passedProps.performanceTracking, passedProps.inputSamplingLimit, passedProps.defaultValue, passedProps.assistiveLabel, passedProps.assistiveDescribedBy, passedProps.popupsMountPoint, passedProps.popupsBoundariesElement, passedProps.popupsScrollableElement, passedProps.editorActions, passedProps.onEditorReady, passedProps.onDestroy, passedProps.onChange, passedProps.onCancel, passedProps.onSSRMeasure, passedProps.extensionProviders, passedProps.UNSAFE_useAnalyticsContext, passedProps.useStickyToolbar, passedProps.featureFlags, passedProps.onSave, passedProps.sanitizePrivateContent, passedProps.media, passedProps.collabEdit, passedProps.primaryToolbarComponents, passedProps.allowUndoRedoButtons, passedProps.linking, passedProps.activityProvider, passedProps.searchProvider, passedProps.annotationProviders, passedProps.collabEditProvider, passedProps.presenceProvider, passedProps.emojiProvider, passedProps.taskDecisionProvider, passedProps.legacyImageUploadProvider, passedProps.mentionProvider, passedProps.autoformattingProvider, passedProps.macroProvider, passedProps.contextIdentifierProvider, passedProps.allowExpand, passedProps.allowNestedTasks, passedProps.allowBlockType, passedProps.allowTasksAndDecisions, passedProps.allowBreakout, passedProps.allowRule, passedProps.allowHelpDialog, passedProps.allowPanel, passedProps.allowExtension, passedProps.allowConfluenceInlineComment, passedProps.allowTemplatePlaceholders, passedProps.allowDate, passedProps.allowLayouts, passedProps.allowStatus, passedProps.allowTextAlignment, passedProps.allowIndentation, passedProps.showIndentationButtons, passedProps.allowFindReplace, passedProps.allowBorderMark, passedProps.allowFragmentMark, passedProps.autoScrollIntoView, passedProps.elementBrowser, passedProps.maxContentSize, passedProps.saveOnEnter, passedProps.feedbackInfo, passedProps.mention, passedProps.mentionInsertDisplayName, passedProps.uploadErrorHandler, passedProps.waitForMediaUpload, passedProps.extensionHandlers, passedProps.allowTextColor, passedProps.allowTables, passedProps.insertMenuItems, passedProps.UNSAFE_cards, passedProps.smartLinks, passedProps.allowAnalyticsGASV3, passedProps.codeBlock, passedProps.textFormatting, passedProps.__livePage, passedProps.AppearanceComponent, passedProps.skipValidation, passedProps.syncBlock, passedProps.syncedBlockProvider, passedProps.pasteWarningOptions]);
|
|
122
123
|
return memodProps;
|
|
123
124
|
};
|
|
124
125
|
var _default = exports.default = useMemoEditorProps;
|
|
@@ -17,10 +17,12 @@ var _analytics = require("@atlaskit/editor-common/analytics");
|
|
|
17
17
|
var _coreUtils = require("@atlaskit/editor-common/core-utils");
|
|
18
18
|
var _eventDispatcher = require("@atlaskit/editor-common/event-dispatcher");
|
|
19
19
|
var _hooks = require("@atlaskit/editor-common/hooks");
|
|
20
|
+
var _isPerformanceApiAvailable = require("@atlaskit/editor-common/is-performance-api-available");
|
|
20
21
|
var _nodeVisibility = require("@atlaskit/editor-common/node-visibility");
|
|
21
22
|
var _normalizeFeatureFlags = require("@atlaskit/editor-common/normalize-feature-flags");
|
|
22
23
|
var _measureRender = require("@atlaskit/editor-common/performance/measure-render");
|
|
23
24
|
var _navigation = require("@atlaskit/editor-common/performance/navigation");
|
|
25
|
+
var _ssrMeasures = require("@atlaskit/editor-common/performance/ssr-measures");
|
|
24
26
|
var _preset = require("@atlaskit/editor-common/preset");
|
|
25
27
|
var _processRawValue = require("@atlaskit/editor-common/process-raw-value");
|
|
26
28
|
var _uiReact = require("@atlaskit/editor-common/ui-react");
|
|
@@ -30,12 +32,14 @@ var _state2 = require("@atlaskit/editor-prosemirror/state");
|
|
|
30
32
|
var _view = require("@atlaskit/editor-prosemirror/view");
|
|
31
33
|
var _editorSsrRenderer = require("@atlaskit/editor-ssr-renderer");
|
|
32
34
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
35
|
+
var _interactionIdContext = require("@atlaskit/react-ufo/interaction-id-context");
|
|
33
36
|
var _interactionMetrics = require("@atlaskit/react-ufo/interaction-metrics");
|
|
34
37
|
var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
|
|
35
38
|
var _expVal = require("@atlaskit/tmp-editor-statsig/expVal");
|
|
36
39
|
var _useProviders = require("../composable-editor/hooks/useProviders");
|
|
37
40
|
var _featureFlagsFromProps = require("../utils/feature-flags-from-props");
|
|
38
41
|
var _getNodesCount = require("../utils/getNodesCount");
|
|
42
|
+
var _getNodesCountWithExtensionKeys = require("../utils/getNodesCountWithExtensionKeys");
|
|
39
43
|
var _getNodesVisibleInViewport = require("../utils/getNodesVisibleInViewport");
|
|
40
44
|
var _isChromeless = require("../utils/is-chromeless");
|
|
41
45
|
var _isFullPage = require("../utils/is-full-page");
|
|
@@ -58,10 +62,15 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
|
|
|
58
62
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
59
63
|
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) { (0, _defineProperty2.default)(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; } // eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead
|
|
60
64
|
var EDIT_AREA_ID = 'ak-editor-textarea';
|
|
65
|
+
var SSR_TRACE_SEGMENT_NAME = 'reactEditorView';
|
|
66
|
+
var bootStartTime = (0, _isPerformanceApiAvailable.isPerformanceAPIAvailable)() ? performance.now() : undefined;
|
|
61
67
|
function ReactEditorView(props) {
|
|
62
68
|
var _pluginInjectionAPI$c, _media, _linking, _document$querySelect, _props$render, _props$render2;
|
|
69
|
+
// Should be always the first statement in the component
|
|
70
|
+
var firstRenderStartTimestampRef = (0, _react.useRef)(performance.now());
|
|
63
71
|
var preset = props.preset,
|
|
64
72
|
_props$editorProps = props.editorProps,
|
|
73
|
+
onSSRMeasure = _props$editorProps.onSSRMeasure,
|
|
65
74
|
nextAppearance = _props$editorProps.appearance,
|
|
66
75
|
disabled = _props$editorProps.disabled,
|
|
67
76
|
editorPropFeatureFlags = _props$editorProps.featureFlags,
|
|
@@ -467,9 +476,11 @@ function ReactEditorView(props) {
|
|
|
467
476
|
distortedDuration = _ref3.distortedDuration;
|
|
468
477
|
var proseMirrorRenderedSeverity = (0, _analytics2.getAnalyticsEventSeverity)(duration, _consts.PROSEMIRROR_RENDERED_NORMAL_SEVERITY_THRESHOLD, _consts.PROSEMIRROR_RENDERED_DEGRADED_SEVERITY_THRESHOLD);
|
|
469
478
|
if (viewRef.current) {
|
|
470
|
-
var _pluginInjectionAPI$c2;
|
|
471
|
-
var
|
|
479
|
+
var _nodesAndExtensionKey, _pluginInjectionAPI$c2;
|
|
480
|
+
var nodesAndExtensionKeys = (0, _expValEquals.expValEquals)('platform_editor_prosemirror_rendered_data', 'isEnabled', true) ? (0, _getNodesCountWithExtensionKeys.getNodesCountWithExtensionKeys)(viewRef.current.state.doc) : undefined;
|
|
481
|
+
var nodes = (_nodesAndExtensionKey = nodesAndExtensionKeys === null || nodesAndExtensionKeys === void 0 ? void 0 : nodesAndExtensionKeys.nodes) !== null && _nodesAndExtensionKey !== void 0 ? _nodesAndExtensionKey : (0, _getNodesCount.getNodesCount)(viewRef.current.state.doc);
|
|
472
482
|
var ttfb = (0, _navigation.getResponseEndTime)();
|
|
483
|
+
var requestToResponseTime = (0, _navigation.getRequestToResponseTime)();
|
|
473
484
|
var contextIdentifier = (_pluginInjectionAPI$c2 = pluginInjectionAPI.current.api().base) === null || _pluginInjectionAPI$c2 === void 0 ? void 0 : _pluginInjectionAPI$c2.sharedState.currentState();
|
|
474
485
|
var nodesInViewport = (0, _getNodesVisibleInViewport.getNodesVisibleInViewport)(viewRef.current.dom);
|
|
475
486
|
var nodeSize = viewRef.current.state.doc.nodeSize;
|
|
@@ -497,10 +508,51 @@ function ReactEditorView(props) {
|
|
|
497
508
|
} : {},
|
|
498
509
|
totalNodes = _ref4.totalNodes,
|
|
499
510
|
nodeSizeBucket = _ref4.nodeSizeBucket;
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
511
|
+
if ((0, _expValEquals.expValEquals)('platform_editor_prosemirror_rendered_data', 'isEnabled', true)) {
|
|
512
|
+
var _nodesAndExtensionKey2;
|
|
513
|
+
var extensionKeys = (_nodesAndExtensionKey2 = nodesAndExtensionKeys === null || nodesAndExtensionKeys === void 0 ? void 0 : nodesAndExtensionKeys.extensionKeys) !== null && _nodesAndExtensionKey2 !== void 0 ? _nodesAndExtensionKey2 : {};
|
|
514
|
+
var interaction = (0, _interactionMetrics.getActiveInteraction)();
|
|
515
|
+
var pageLoadType = interaction === null || interaction === void 0 ? void 0 : interaction.type;
|
|
516
|
+
var pageType = interaction === null || interaction === void 0 ? void 0 : interaction.routeName;
|
|
517
|
+
var timings = function () {
|
|
518
|
+
if (requestToResponseTime === undefined && bootStartTime === undefined) {
|
|
519
|
+
return undefined;
|
|
520
|
+
}
|
|
521
|
+
var timingValues = {};
|
|
522
|
+
if (requestToResponseTime !== undefined) {
|
|
523
|
+
timingValues['requestStart->responseEnd'] = Math.round(requestToResponseTime);
|
|
524
|
+
}
|
|
525
|
+
if (bootStartTime !== undefined) {
|
|
526
|
+
timingValues.bootToRender = Math.round(startTime - bootStartTime);
|
|
527
|
+
}
|
|
528
|
+
return timingValues;
|
|
529
|
+
}();
|
|
530
|
+
var attributes = {
|
|
531
|
+
duration: duration,
|
|
532
|
+
startTime: startTime,
|
|
533
|
+
nodes: nodes,
|
|
534
|
+
nodesInViewport: nodesInViewport,
|
|
535
|
+
nodeSize: nodeSize,
|
|
536
|
+
nodeSizeBucket: nodeSizeBucket,
|
|
537
|
+
totalNodes: totalNodes,
|
|
538
|
+
ttfb: ttfb,
|
|
539
|
+
severity: proseMirrorRenderedSeverity,
|
|
540
|
+
objectId: contextIdentifier === null || contextIdentifier === void 0 ? void 0 : contextIdentifier.objectId,
|
|
541
|
+
distortedDuration: distortedDuration,
|
|
542
|
+
pageLoadType: pageLoadType,
|
|
543
|
+
pageType: pageType,
|
|
544
|
+
timings: timings,
|
|
545
|
+
extensionKeys: extensionKeys,
|
|
546
|
+
ufoInteractionId: (0, _interactionIdContext.getInteractionId)().current
|
|
547
|
+
};
|
|
548
|
+
dispatchAnalyticsEvent({
|
|
549
|
+
action: _analytics.ACTION.PROSEMIRROR_RENDERED,
|
|
550
|
+
actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
|
|
551
|
+
attributes: attributes,
|
|
552
|
+
eventType: _analytics.EVENT_TYPE.OPERATIONAL
|
|
553
|
+
});
|
|
554
|
+
} else {
|
|
555
|
+
var _attributes = {
|
|
504
556
|
duration: duration,
|
|
505
557
|
startTime: startTime,
|
|
506
558
|
nodes: nodes,
|
|
@@ -512,9 +564,14 @@ function ReactEditorView(props) {
|
|
|
512
564
|
severity: proseMirrorRenderedSeverity,
|
|
513
565
|
objectId: contextIdentifier === null || contextIdentifier === void 0 ? void 0 : contextIdentifier.objectId,
|
|
514
566
|
distortedDuration: distortedDuration
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
|
|
567
|
+
};
|
|
568
|
+
dispatchAnalyticsEvent({
|
|
569
|
+
action: _analytics.ACTION.PROSEMIRROR_RENDERED,
|
|
570
|
+
actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
|
|
571
|
+
attributes: _attributes,
|
|
572
|
+
eventType: _analytics.EVENT_TYPE.OPERATIONAL
|
|
573
|
+
});
|
|
574
|
+
}
|
|
518
575
|
}
|
|
519
576
|
});
|
|
520
577
|
pluginInjectionAPI.current.onEditorViewUpdated({
|
|
@@ -778,20 +835,29 @@ function ReactEditorView(props) {
|
|
|
778
835
|
if (!(0, _coreUtils.isSSR)() || !(0, _expValEquals.expValEquals)('platform_editor_ssr_renderer', 'isEnabled', true)) {
|
|
779
836
|
return null;
|
|
780
837
|
}
|
|
781
|
-
var
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
838
|
+
var doCreatePluginList = function doCreatePluginList() {
|
|
839
|
+
return (0, _createPluginsList.default)(props.preset,
|
|
840
|
+
// Don't pass props.editorProps directly, because editoProps in the dependency will lead to
|
|
841
|
+
// multiple repaints, because props.editorPros is not stable object.
|
|
842
|
+
{
|
|
843
|
+
allowBlockType: allowBlockType
|
|
844
|
+
}, pluginInjectionAPI.current);
|
|
845
|
+
};
|
|
846
|
+
var plugins = (0, _platformFeatureFlags.fg)('platform_editor_better_editor_ssr_spans') ? (0, _ssrMeasures.profileSSROperation)("".concat(SSR_TRACE_SEGMENT_NAME, "/createPluginsList"), doCreatePluginList, onSSRMeasure) : doCreatePluginList();
|
|
847
|
+
var doCreateSchema = function doCreateSchema() {
|
|
848
|
+
return (0, _createSchema.createSchema)((0, _createEditor.processPluginsList)(plugins));
|
|
849
|
+
};
|
|
850
|
+
var schema = (0, _platformFeatureFlags.fg)('platform_editor_better_editor_ssr_spans') ? (0, _ssrMeasures.profileSSROperation)("".concat(SSR_TRACE_SEGMENT_NAME, "/createSchema"), doCreateSchema, onSSRMeasure) : doCreateSchema();
|
|
851
|
+
var doBuildDoc = function doBuildDoc() {
|
|
852
|
+
return buildDoc(schema);
|
|
853
|
+
};
|
|
854
|
+
var doc = (0, _platformFeatureFlags.fg)('platform_editor_better_editor_ssr_spans') ? (0, _ssrMeasures.profileSSROperation)("".concat(SSR_TRACE_SEGMENT_NAME, "/buildDoc"), doBuildDoc, onSSRMeasure) : doBuildDoc();
|
|
789
855
|
return {
|
|
790
856
|
plugins: plugins,
|
|
791
857
|
schema: schema,
|
|
792
858
|
doc: doc
|
|
793
859
|
};
|
|
794
|
-
}, [allowBlockType, buildDoc, props.preset]);
|
|
860
|
+
}, [allowBlockType, buildDoc, props.preset, onSSRMeasure]);
|
|
795
861
|
var _props$editorProps3 = props.editorProps,
|
|
796
862
|
assistiveLabel = _props$editorProps3.assistiveLabel,
|
|
797
863
|
assistiveDescribedBy = _props$editorProps3.assistiveDescribedBy;
|
|
@@ -814,6 +880,7 @@ function ReactEditorView(props) {
|
|
|
814
880
|
id: EDIT_AREA_ID,
|
|
815
881
|
"aria-describedby": assistiveDescribedBy,
|
|
816
882
|
"data-editor-id": editorId.current,
|
|
883
|
+
onSSRMeasure: onSSRMeasure,
|
|
817
884
|
onEditorStateChanged: function onEditorStateChanged(state) {
|
|
818
885
|
ssrEditorStateRef.current = state;
|
|
819
886
|
// Notify listeners about the initial SSR state
|
|
@@ -823,7 +890,7 @@ function ReactEditorView(props) {
|
|
|
823
890
|
});
|
|
824
891
|
}
|
|
825
892
|
});
|
|
826
|
-
}, [ssrDeps, props.intl, props.portalProviderAPI, assistiveLabel, assistiveDescribedBy,
|
|
893
|
+
}, [ssrDeps, props.intl, props.portalProviderAPI, assistiveLabel, isPageAppearance, assistiveDescribedBy, onSSRMeasure]);
|
|
827
894
|
var editor = (0, _react.useMemo)(function () {
|
|
828
895
|
// SSR editor will be available only in SSR environment,
|
|
829
896
|
// in a browser `ssrEditor` will be `null`, and we will render a normal one ProseMirror.
|
|
@@ -840,7 +907,11 @@ function ReactEditorView(props) {
|
|
|
840
907
|
// Render tracking is firing too many events in Jira so we are disabling them for now. See - https://product-fabric.atlassian.net/browse/ED-25616
|
|
841
908
|
// Also firing too many events for the legacy content macro, so disabling for now. See - https://product-fabric.atlassian.net/browse/ED-26650
|
|
842
909
|
var renderTrackingEnabled = !(0, _platformFeatureFlags.fg)('platform_editor_disable_rerender_tracking_jira') && !featureFlags.lcmPreventRenderTracking;
|
|
843
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
910
|
+
return /*#__PURE__*/_react.default.createElement(_ssrMeasures.SSRRenderMeasure, {
|
|
911
|
+
segmentName: SSR_TRACE_SEGMENT_NAME,
|
|
912
|
+
startTimestampRef: firstRenderStartTimestampRef,
|
|
913
|
+
onSSRMeasure: (0, _platformFeatureFlags.fg)('platform_editor_better_editor_ssr_spans') ? onSSRMeasure : undefined
|
|
914
|
+
}, /*#__PURE__*/_react.default.createElement(_uiReact.ReactEditorViewContext.Provider, {
|
|
844
915
|
value: {
|
|
845
916
|
editorRef: editorRef,
|
|
846
917
|
editorView: viewRef.current,
|
|
@@ -861,7 +932,7 @@ function ReactEditorView(props) {
|
|
|
861
932
|
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
862
933
|
editorRef: editorRef,
|
|
863
934
|
editorAPI: (0, _expVal.expVal)('platform_editor_no_state_plugin_injection_api', 'isEnabled', false) ? pluginInjectionAPI.current.api() : editorAPI
|
|
864
|
-
})) !== null && _props$render !== void 0 ? _props$render : editor : editor);
|
|
935
|
+
})) !== null && _props$render !== void 0 ? _props$render : editor : editor));
|
|
865
936
|
}
|
|
866
937
|
|
|
867
938
|
// Preserving exact type generated by TypeScript
|
|
@@ -11,6 +11,7 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
11
11
|
var _react2 = require("@emotion/react");
|
|
12
12
|
var _browser = require("@atlaskit/editor-common/browser");
|
|
13
13
|
var _hooks = require("@atlaskit/editor-common/hooks");
|
|
14
|
+
var _ssrMeasures = require("@atlaskit/editor-common/performance/ssr-measures");
|
|
14
15
|
var _ui = require("@atlaskit/editor-common/ui");
|
|
15
16
|
var _useSharedPluginStateSelector = require("@atlaskit/editor-common/use-shared-plugin-state-selector");
|
|
16
17
|
var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
|
|
@@ -30,6 +31,7 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
|
|
|
30
31
|
|
|
31
32
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
|
|
32
33
|
|
|
34
|
+
var SSR_TRACE_SEGMENT_NAME = 'reactEditorView/fullPageAppearance';
|
|
33
35
|
var useShowKeyline = function useShowKeyline(contentAreaRef) {
|
|
34
36
|
var _useState = (0, _react.useState)(false),
|
|
35
37
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
@@ -71,6 +73,8 @@ var hasCustomComponents = function hasCustomComponents(components) {
|
|
|
71
73
|
};
|
|
72
74
|
var FullPageEditor = exports.FullPageEditor = function FullPageEditor(props) {
|
|
73
75
|
var _scrollContentContain, _scrollContentContain2, _scrollContentContain3, _wrapperElementRef$cu;
|
|
76
|
+
// Should be always the first statement in the component
|
|
77
|
+
var firstRenderStartTimestampRef = (0, _react.useRef)(performance.now());
|
|
74
78
|
var wrapperElementRef = (0, _react.useMemo)(function () {
|
|
75
79
|
return props.innerRef;
|
|
76
80
|
}, [props.innerRef]);
|
|
@@ -144,7 +148,11 @@ var FullPageEditor = exports.FullPageEditor = function FullPageEditor(props) {
|
|
|
144
148
|
}
|
|
145
149
|
var isToolbarAIFCEnabled = Boolean(editorAPI === null || editorAPI === void 0 ? void 0 : editorAPI.toolbar);
|
|
146
150
|
var popupsBoundariesElement = props.popupsBoundariesElement || (scrollContentContainerRef === null || scrollContentContainerRef === void 0 || (_scrollContentContain = scrollContentContainerRef.current) === null || _scrollContentContain === void 0 ? void 0 : _scrollContentContain.containerArea) || undefined;
|
|
147
|
-
return (0, _react2.jsx)(
|
|
151
|
+
return (0, _react2.jsx)(_ssrMeasures.SSRRenderMeasure, {
|
|
152
|
+
segmentName: SSR_TRACE_SEGMENT_NAME,
|
|
153
|
+
startTimestampRef: firstRenderStartTimestampRef,
|
|
154
|
+
onSSRMeasure: (0, _platformFeatureFlags.fg)('platform_editor_better_editor_ssr_spans') ? props.onSSRMeasure : undefined
|
|
155
|
+
}, (0, _react2.jsx)(_ui.ContextPanelWidthProvider, null, (0, _react2.jsx)("div", {
|
|
148
156
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage -- Ignored via go/DSP-18766
|
|
149
157
|
css: _StyledComponents.fullPageEditorWrapper
|
|
150
158
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
|
|
@@ -221,5 +229,5 @@ var FullPageEditor = exports.FullPageEditor = function FullPageEditor(props) {
|
|
|
221
229
|
viewMode: state.editorViewMode,
|
|
222
230
|
hasHadInteraction: hasHadInteraction,
|
|
223
231
|
contentMode: props.contentMode
|
|
224
|
-
})));
|
|
232
|
+
}))));
|
|
225
233
|
};
|
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.getNodesCount = getNodesCount;
|
|
7
|
+
// When experiment platform_editor_prosemirror_rendered_data is removed, review whether this helper is still needed.
|
|
7
8
|
function getNodesCount(node) {
|
|
8
9
|
var count = {};
|
|
9
10
|
node.nodesBetween(0, node.nodeSize - 2, function (node) {
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getNodesCountWithExtensionKeys = getNodesCountWithExtensionKeys;
|
|
7
|
+
/**
|
|
8
|
+
* Counts node types and extension keys in a single traversal.
|
|
9
|
+
* We exclude the end-of-doc token by iterating to nodeSize - 2,
|
|
10
|
+
* which matches the typical ProseMirror pattern for traversing all child nodes.
|
|
11
|
+
*/
|
|
12
|
+
function getNodesCountWithExtensionKeys(node) {
|
|
13
|
+
var nodes = {};
|
|
14
|
+
var extensionKeys = {};
|
|
15
|
+
var extensionNodeNames = ['extension', 'bodiedExtension', 'inlineExtension', 'multiBodiedExtension'];
|
|
16
|
+
node.nodesBetween(0, node.nodeSize - 2, function (currentNode) {
|
|
17
|
+
var _currentNode$attrs;
|
|
18
|
+
nodes[currentNode.type.name] = (nodes[currentNode.type.name] || 0) + 1;
|
|
19
|
+
if (!extensionNodeNames.includes(currentNode.type.name)) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
var extensionKey = (_currentNode$attrs = currentNode.attrs) === null || _currentNode$attrs === void 0 ? void 0 : _currentNode$attrs.extensionKey;
|
|
23
|
+
if (!extensionKey) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
extensionKeys[extensionKey] = (extensionKeys[extensionKey] || 0) + 1;
|
|
27
|
+
});
|
|
28
|
+
return {
|
|
29
|
+
nodes: nodes,
|
|
30
|
+
extensionKeys: extensionKeys
|
|
31
|
+
};
|
|
32
|
+
}
|
|
@@ -118,6 +118,7 @@ export const EditorInternal = /*#__PURE__*/memo(({
|
|
|
118
118
|
minHeight: props.minHeight,
|
|
119
119
|
onSave: props.onSave ? handleSave : undefined,
|
|
120
120
|
onCancel: props.onCancel,
|
|
121
|
+
onSSRMeasure: props.onSSRMeasure,
|
|
121
122
|
popupsMountPoint: props.popupsMountPoint,
|
|
122
123
|
popupsBoundariesElement: props.popupsBoundariesElement,
|
|
123
124
|
popupsScrollableElement: props.popupsScrollableElement,
|
|
@@ -84,6 +84,7 @@ export const useMemoEditorProps = passedProps => {
|
|
|
84
84
|
mention: passedProps.mention,
|
|
85
85
|
mentionInsertDisplayName: passedProps.mentionInsertDisplayName,
|
|
86
86
|
uploadErrorHandler: passedProps.uploadErrorHandler,
|
|
87
|
+
onSSRMeasure: passedProps.onSSRMeasure,
|
|
87
88
|
waitForMediaUpload: passedProps.waitForMediaUpload,
|
|
88
89
|
extensionHandlers: passedProps.extensionHandlers,
|
|
89
90
|
allowTextColor: passedProps.allowTextColor,
|
|
@@ -111,7 +112,7 @@ export const useMemoEditorProps = passedProps => {
|
|
|
111
112
|
...allProps
|
|
112
113
|
};
|
|
113
114
|
return nextProps;
|
|
114
|
-
}, [passedProps.preset, passedProps.appearance, passedProps.contentMode, passedProps.contentComponents, passedProps.primaryToolbarIconBefore, passedProps.secondaryToolbarComponents, passedProps.persistScrollGutter, passedProps.quickInsert, passedProps.shouldFocus, passedProps.disabled, passedProps.contextPanel, passedProps.errorReporterHandler, passedProps.contentTransformerProvider, passedProps.maxHeight, passedProps.minHeight, passedProps.placeholder, passedProps.placeholderBracketHint, passedProps.performanceTracking, passedProps.inputSamplingLimit, passedProps.defaultValue, passedProps.assistiveLabel, passedProps.assistiveDescribedBy, passedProps.popupsMountPoint, passedProps.popupsBoundariesElement, passedProps.popupsScrollableElement, passedProps.editorActions, passedProps.onEditorReady, passedProps.onDestroy, passedProps.onChange, passedProps.onCancel, passedProps.extensionProviders, passedProps.UNSAFE_useAnalyticsContext, passedProps.useStickyToolbar, passedProps.featureFlags, passedProps.onSave, passedProps.sanitizePrivateContent, passedProps.media, passedProps.collabEdit, passedProps.primaryToolbarComponents, passedProps.allowUndoRedoButtons, passedProps.linking, passedProps.activityProvider, passedProps.searchProvider, passedProps.annotationProviders, passedProps.collabEditProvider, passedProps.presenceProvider, passedProps.emojiProvider, passedProps.taskDecisionProvider, passedProps.legacyImageUploadProvider, passedProps.mentionProvider, passedProps.autoformattingProvider, passedProps.macroProvider, passedProps.contextIdentifierProvider, passedProps.allowExpand, passedProps.allowNestedTasks, passedProps.allowBlockType, passedProps.allowTasksAndDecisions, passedProps.allowBreakout, passedProps.allowRule, passedProps.allowHelpDialog, passedProps.allowPanel, passedProps.allowExtension, passedProps.allowConfluenceInlineComment, passedProps.allowTemplatePlaceholders, passedProps.allowDate, passedProps.allowLayouts, passedProps.allowStatus, passedProps.allowTextAlignment, passedProps.allowIndentation, passedProps.showIndentationButtons, passedProps.allowFindReplace, passedProps.allowBorderMark, passedProps.allowFragmentMark, passedProps.autoScrollIntoView, passedProps.elementBrowser, passedProps.maxContentSize, passedProps.saveOnEnter, passedProps.feedbackInfo, passedProps.mention, passedProps.mentionInsertDisplayName, passedProps.uploadErrorHandler, passedProps.waitForMediaUpload, passedProps.extensionHandlers, passedProps.allowTextColor, passedProps.allowTables, passedProps.insertMenuItems, passedProps.UNSAFE_cards, passedProps.smartLinks, passedProps.allowAnalyticsGASV3, passedProps.codeBlock, passedProps.textFormatting, passedProps.__livePage, passedProps.AppearanceComponent, passedProps.skipValidation, passedProps.syncBlock, passedProps.syncedBlockProvider, passedProps.pasteWarningOptions]);
|
|
115
|
+
}, [passedProps.preset, passedProps.appearance, passedProps.contentMode, passedProps.contentComponents, passedProps.primaryToolbarIconBefore, passedProps.secondaryToolbarComponents, passedProps.persistScrollGutter, passedProps.quickInsert, passedProps.shouldFocus, passedProps.disabled, passedProps.contextPanel, passedProps.errorReporterHandler, passedProps.contentTransformerProvider, passedProps.maxHeight, passedProps.minHeight, passedProps.placeholder, passedProps.placeholderBracketHint, passedProps.performanceTracking, passedProps.inputSamplingLimit, passedProps.defaultValue, passedProps.assistiveLabel, passedProps.assistiveDescribedBy, passedProps.popupsMountPoint, passedProps.popupsBoundariesElement, passedProps.popupsScrollableElement, passedProps.editorActions, passedProps.onEditorReady, passedProps.onDestroy, passedProps.onChange, passedProps.onCancel, passedProps.onSSRMeasure, passedProps.extensionProviders, passedProps.UNSAFE_useAnalyticsContext, passedProps.useStickyToolbar, passedProps.featureFlags, passedProps.onSave, passedProps.sanitizePrivateContent, passedProps.media, passedProps.collabEdit, passedProps.primaryToolbarComponents, passedProps.allowUndoRedoButtons, passedProps.linking, passedProps.activityProvider, passedProps.searchProvider, passedProps.annotationProviders, passedProps.collabEditProvider, passedProps.presenceProvider, passedProps.emojiProvider, passedProps.taskDecisionProvider, passedProps.legacyImageUploadProvider, passedProps.mentionProvider, passedProps.autoformattingProvider, passedProps.macroProvider, passedProps.contextIdentifierProvider, passedProps.allowExpand, passedProps.allowNestedTasks, passedProps.allowBlockType, passedProps.allowTasksAndDecisions, passedProps.allowBreakout, passedProps.allowRule, passedProps.allowHelpDialog, passedProps.allowPanel, passedProps.allowExtension, passedProps.allowConfluenceInlineComment, passedProps.allowTemplatePlaceholders, passedProps.allowDate, passedProps.allowLayouts, passedProps.allowStatus, passedProps.allowTextAlignment, passedProps.allowIndentation, passedProps.showIndentationButtons, passedProps.allowFindReplace, passedProps.allowBorderMark, passedProps.allowFragmentMark, passedProps.autoScrollIntoView, passedProps.elementBrowser, passedProps.maxContentSize, passedProps.saveOnEnter, passedProps.feedbackInfo, passedProps.mention, passedProps.mentionInsertDisplayName, passedProps.uploadErrorHandler, passedProps.waitForMediaUpload, passedProps.extensionHandlers, passedProps.allowTextColor, passedProps.allowTables, passedProps.insertMenuItems, passedProps.UNSAFE_cards, passedProps.smartLinks, passedProps.allowAnalyticsGASV3, passedProps.codeBlock, passedProps.textFormatting, passedProps.__livePage, passedProps.AppearanceComponent, passedProps.skipValidation, passedProps.syncBlock, passedProps.syncedBlockProvider, passedProps.pasteWarningOptions]);
|
|
115
116
|
return memodProps;
|
|
116
117
|
};
|
|
117
118
|
export default useMemoEditorProps;
|