@atlaskit/editor-common 88.10.0 → 88.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/count-nodes/package.json +15 -0
  3. package/dist/cjs/analytics/types/enums.js +1 -0
  4. package/dist/cjs/insert/index.js +27 -1
  5. package/dist/cjs/media-single/CommentBadgeNext.js +61 -0
  6. package/dist/cjs/media-single/ExternalImageBadge.js +5 -48
  7. package/dist/cjs/media-single/MediaBadges.js +76 -0
  8. package/dist/cjs/media-single/index.js +15 -1
  9. package/dist/cjs/messages/insert-block.js +10 -0
  10. package/dist/cjs/monitoring/error.js +1 -1
  11. package/dist/cjs/styles/shared/blockquote.js +6 -0
  12. package/dist/cjs/styles/shared/media-single.js +1 -1
  13. package/dist/cjs/styles/shared/table.js +9 -2
  14. package/dist/cjs/ui/DropList/index.js +1 -1
  15. package/dist/cjs/ui/Emoji/index.js +1 -0
  16. package/dist/cjs/ui/MediaSingle/styled.js +1 -1
  17. package/dist/cjs/utils/document.js +0 -180
  18. package/dist/cjs/utils/index.js +32 -1
  19. package/dist/cjs/utils/processRawValue.js +185 -0
  20. package/dist/es2019/analytics/types/enums.js +1 -0
  21. package/dist/es2019/insert/index.js +30 -1
  22. package/dist/es2019/media-single/CommentBadgeNext.js +51 -0
  23. package/dist/es2019/media-single/ExternalImageBadge.js +5 -40
  24. package/dist/es2019/media-single/MediaBadges.js +63 -0
  25. package/dist/es2019/media-single/index.js +3 -1
  26. package/dist/es2019/messages/insert-block.js +10 -0
  27. package/dist/es2019/monitoring/error.js +1 -1
  28. package/dist/es2019/styles/shared/blockquote.js +6 -0
  29. package/dist/es2019/styles/shared/media-single.js +1 -1
  30. package/dist/es2019/styles/shared/table.js +27 -14
  31. package/dist/es2019/ui/DropList/index.js +1 -1
  32. package/dist/es2019/ui/Emoji/index.js +1 -0
  33. package/dist/es2019/ui/MediaSingle/styled.js +2 -1
  34. package/dist/es2019/utils/document.js +0 -183
  35. package/dist/es2019/utils/index.js +44 -2
  36. package/dist/es2019/utils/processRawValue.js +183 -0
  37. package/dist/esm/analytics/types/enums.js +1 -0
  38. package/dist/esm/insert/index.js +27 -1
  39. package/dist/esm/media-single/CommentBadgeNext.js +51 -0
  40. package/dist/esm/media-single/ExternalImageBadge.js +5 -45
  41. package/dist/esm/media-single/MediaBadges.js +66 -0
  42. package/dist/esm/media-single/index.js +3 -1
  43. package/dist/esm/messages/insert-block.js +10 -0
  44. package/dist/esm/monitoring/error.js +1 -1
  45. package/dist/esm/styles/shared/blockquote.js +6 -0
  46. package/dist/esm/styles/shared/media-single.js +1 -1
  47. package/dist/esm/styles/shared/table.js +9 -2
  48. package/dist/esm/ui/DropList/index.js +1 -1
  49. package/dist/esm/ui/Emoji/index.js +1 -0
  50. package/dist/esm/ui/MediaSingle/styled.js +1 -1
  51. package/dist/esm/utils/document.js +0 -179
  52. package/dist/esm/utils/index.js +44 -2
  53. package/dist/esm/utils/processRawValue.js +179 -0
  54. package/dist/types/analytics/types/enums.d.ts +1 -0
  55. package/dist/types/media-single/CommentBadgeNext.d.ts +11 -0
  56. package/dist/types/media-single/ExternalImageBadge.d.ts +2 -5
  57. package/dist/types/media-single/MediaBadges.d.ts +12 -0
  58. package/dist/types/media-single/index.d.ts +2 -0
  59. package/dist/types/messages/insert-block.d.ts +10 -0
  60. package/dist/types/utils/document.d.ts +2 -6
  61. package/dist/types/utils/index.d.ts +42 -2
  62. package/dist/types/utils/processRawValue.d.ts +6 -0
  63. package/dist/types-ts4.5/analytics/types/enums.d.ts +1 -0
  64. package/dist/types-ts4.5/media-single/CommentBadgeNext.d.ts +11 -0
  65. package/dist/types-ts4.5/media-single/ExternalImageBadge.d.ts +2 -5
  66. package/dist/types-ts4.5/media-single/MediaBadges.d.ts +12 -0
  67. package/dist/types-ts4.5/media-single/index.d.ts +2 -0
  68. package/dist/types-ts4.5/messages/insert-block.d.ts +10 -0
  69. package/dist/types-ts4.5/utils/document.d.ts +2 -6
  70. package/dist/types-ts4.5/utils/index.d.ts +42 -2
  71. package/dist/types-ts4.5/utils/processRawValue.d.ts +6 -0
  72. package/is-performance-api-available/package.json +15 -0
  73. package/package.json +9 -4
  74. package/performance/measure-render/package.json +15 -0
  75. package/performance/navigation/package.json +15 -0
  76. package/process-raw-value/package.json +15 -0
@@ -11,14 +11,7 @@ exports.hasVisibleContent = hasVisibleContent;
11
11
  exports.isEmptyDocument = isEmptyDocument;
12
12
  exports.isSelectionEndOfParagraph = void 0;
13
13
  exports.nodesBetweenChanged = nodesBetweenChanged;
14
- exports.processRawValue = processRawValue;
15
- var _transforms = require("@atlaskit/adf-utils/transforms");
16
- var _model = require("@atlaskit/editor-prosemirror/model");
17
- var _analytics = require("../analytics");
18
14
  var _editorCoreUtils = require("./editor-core-utils");
19
- var _privacyFilter = require("./filter/privacy-filter");
20
- var _trackUnsupportedContent = require("./track-unsupported-content");
21
- var _validateUsingSpec = require("./validate-using-spec");
22
15
  var getStepRange = exports.getStepRange = function getStepRange(transaction) {
23
16
  var from = -1;
24
17
  var to = -1;
@@ -79,179 +72,6 @@ function nodesBetweenChanged(tr, f, startPos) {
79
72
  }
80
73
  tr.doc.nodesBetween(stepRange.from, stepRange.to, f, startPos);
81
74
  }
82
- function processRawValue(schema, value, providerFactory, sanitizePrivateContent, contentTransformer, dispatchAnalyticsEvent) {
83
- if (!value) {
84
- return;
85
- }
86
- var node;
87
- if (typeof value === 'string') {
88
- try {
89
- if (contentTransformer) {
90
- var doc = contentTransformer.parse(value);
91
- node = doc.toJSON();
92
- } else {
93
- node = JSON.parse(value);
94
- }
95
- } catch (e) {
96
- // eslint-disable-next-line no-console
97
- console.error("Error processing value: ".concat(value, " isn't a valid JSON"));
98
- return;
99
- }
100
- } else {
101
- node = value;
102
- }
103
- if (Array.isArray(node)) {
104
- // eslint-disable-next-line no-console
105
- console.error("Error processing value: ".concat(node, " is an array, but it must be an object."));
106
- return;
107
- }
108
- try {
109
- // ProseMirror always require a child under doc
110
- if (node.type === 'doc') {
111
- if (Array.isArray(node.content) && node.content.length === 0) {
112
- node.content.push({
113
- type: 'paragraph',
114
- content: []
115
- });
116
- }
117
- // Just making sure doc is always valid
118
- if (!node.version) {
119
- node.version = 1;
120
- }
121
- }
122
- if (contentTransformer) {
123
- return _model.Node.fromJSON(schema, node);
124
- }
125
-
126
- // link mark on mediaSingle is deprecated, need to move link mark to child media node
127
- // https://product-fabric.atlassian.net/browse/ED-14043
128
- var _transformMediaLinkMa = (0, _transforms.transformMediaLinkMarks)(node),
129
- transformedAdf = _transformMediaLinkMa.transformedAdf,
130
- isTransformed = _transformMediaLinkMa.isTransformed;
131
- if (isTransformed && dispatchAnalyticsEvent) {
132
- dispatchAnalyticsEvent({
133
- action: _analytics.ACTION.MEDIA_LINK_TRANSFORMED,
134
- actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
135
- eventType: _analytics.EVENT_TYPE.OPERATIONAL
136
- });
137
- }
138
-
139
- // See: HOT-97965 https://product-fabric.atlassian.net/browse/ED-14400
140
- // We declared in code mark spec that links and marks should not co-exist on
141
- // text nodes. This util strips code marks from bad text nodes and preserves links.
142
- // Otherwise, prosemirror will try to repair the invalid document by stripping links
143
- // and preserving code marks during content changes.
144
- var _transformTextLinkCod = (0, _transforms.transformTextLinkCodeMarks)(transformedAdf);
145
- transformedAdf = _transformTextLinkCod.transformedAdf;
146
- isTransformed = _transformTextLinkCod.isTransformed;
147
- if (isTransformed && dispatchAnalyticsEvent) {
148
- dispatchAnalyticsEvent({
149
- action: _analytics.ACTION.TEXT_LINK_MARK_TRANSFORMED,
150
- actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
151
- eventType: _analytics.EVENT_TYPE.OPERATIONAL
152
- });
153
- }
154
- var discardedMarks = [];
155
- var _transformDedupeMarks = (0, _transforms.transformDedupeMarks)(transformedAdf);
156
- transformedAdf = _transformDedupeMarks.transformedAdf;
157
- isTransformed = _transformDedupeMarks.isTransformed;
158
- discardedMarks = _transformDedupeMarks.discardedMarks;
159
- if (isTransformed && dispatchAnalyticsEvent) {
160
- dispatchAnalyticsEvent({
161
- action: _analytics.ACTION.DEDUPE_MARKS_TRANSFORMED_V2,
162
- actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
163
- eventType: _analytics.EVENT_TYPE.OPERATIONAL,
164
- attributes: {
165
- /** UGC WARNING
166
- *
167
- * DO NOT include the `mark` attributes inside, we map here to only
168
- * extract the mark type as that is the only non-UGC safe information
169
- * that we can add to event-attributes
170
- *
171
- */
172
- discardedMarkTypes: discardedMarks.map(function (mark) {
173
- return mark.type;
174
- })
175
- }
176
- });
177
- }
178
- var _transformNodesMissin = (0, _transforms.transformNodesMissingContent)(transformedAdf);
179
- transformedAdf = _transformNodesMissin.transformedAdf;
180
- isTransformed = _transformNodesMissin.isTransformed;
181
- if (isTransformed && dispatchAnalyticsEvent) {
182
- dispatchAnalyticsEvent({
183
- action: _analytics.ACTION.NODES_MISSING_CONTENT_TRANSFORMED,
184
- actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
185
- eventType: _analytics.EVENT_TYPE.OPERATIONAL
186
- });
187
- }
188
- var _transformIndentation = (0, _transforms.transformIndentationMarks)(transformedAdf);
189
- transformedAdf = _transformIndentation.transformedAdf;
190
- isTransformed = _transformIndentation.isTransformed;
191
- if (isTransformed && dispatchAnalyticsEvent) {
192
- dispatchAnalyticsEvent({
193
- action: _analytics.ACTION.INDENTATION_MARKS_TRANSFORMED,
194
- actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
195
- eventType: _analytics.EVENT_TYPE.OPERATIONAL
196
- });
197
- }
198
- var _transformInvalidMedi = (0, _transforms.transformInvalidMediaContent)(transformedAdf);
199
- transformedAdf = _transformInvalidMedi.transformedAdf;
200
- isTransformed = _transformInvalidMedi.isTransformed;
201
- if (isTransformed && dispatchAnalyticsEvent) {
202
- dispatchAnalyticsEvent({
203
- action: _analytics.ACTION.INVALID_MEDIA_CONTENT_TRANSFORMED,
204
- actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
205
- eventType: _analytics.EVENT_TYPE.OPERATIONAL
206
- });
207
- }
208
- var entity = (0, _validateUsingSpec.validateADFEntity)(schema, transformedAdf || node, dispatchAnalyticsEvent);
209
- var newEntity = maySanitizePrivateContent(entity, providerFactory, sanitizePrivateContent);
210
- var parsedDoc = _model.Node.fromJSON(schema, newEntity);
211
-
212
- // throws an error if the document is invalid
213
- try {
214
- parsedDoc.check();
215
- } catch (err) {
216
- if (dispatchAnalyticsEvent) {
217
- dispatchAnalyticsEvent({
218
- action: _analytics.ACTION.INVALID_PROSEMIRROR_DOCUMENT,
219
- actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
220
- eventType: _analytics.EVENT_TYPE.OPERATIONAL
221
- });
222
- }
223
- throw err;
224
- }
225
- if (dispatchAnalyticsEvent) {
226
- (0, _trackUnsupportedContent.findAndTrackUnsupportedContentNodes)(parsedDoc, schema, dispatchAnalyticsEvent);
227
- }
228
- return parsedDoc;
229
- } catch (e) {
230
- if (dispatchAnalyticsEvent) {
231
- dispatchAnalyticsEvent({
232
- action: _analytics.ACTION.DOCUMENT_PROCESSING_ERROR,
233
- actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
234
- eventType: _analytics.EVENT_TYPE.OPERATIONAL
235
- });
236
- }
237
-
238
- // eslint-disable-next-line no-console
239
- console.error("Error processing document:\n".concat(e instanceof Error ? e.message : String(e), "\n\n"), JSON.stringify(node));
240
- if (isProseMirrorSchemaCheckError(e)) {
241
- throw e;
242
- }
243
- return;
244
- }
245
- }
246
- function isProseMirrorSchemaCheckError(error) {
247
- return error instanceof RangeError && (!!error.message.match(/^Invalid collection of marks for node/) || !!error.message.match(/^Invalid content for node/));
248
- }
249
- var maySanitizePrivateContent = function maySanitizePrivateContent(entity, providerFactory, sanitizePrivateContent) {
250
- if (sanitizePrivateContent && providerFactory) {
251
- return (0, _privacyFilter.sanitizeNodeForPrivacy)(entity, providerFactory);
252
- }
253
- return entity;
254
- };
255
75
 
256
76
  /**
257
77
  * Returns false if node contains only empty inline nodes and hardBreaks.
@@ -922,7 +922,7 @@ exports.pmHistoryPluginKey = void 0;
922
922
  Object.defineProperty(exports, "processRawValue", {
923
923
  enumerable: true,
924
924
  get: function get() {
925
- return _document.processRawValue;
925
+ return _processRawValue.processRawValue;
926
926
  }
927
927
  });
928
928
  Object.defineProperty(exports, "removeBlockMarks", {
@@ -1186,6 +1186,7 @@ var _referentiality = require("./referentiality");
1186
1186
  var _list = require("./list");
1187
1187
  var _hyperlink = require("./hyperlink");
1188
1188
  var _grid = require("./grid");
1189
+ var _processRawValue = require("./processRawValue");
1189
1190
  var _richMediaUtils = require("./rich-media-utils");
1190
1191
  var _privacyFilter = require("./filter/privacy-filter");
1191
1192
  var _datasource = require("./datasource");
@@ -1208,6 +1209,21 @@ var _pageElementCounts = require("./page-element-counts");
1208
1209
  * Use entry-point `@atlaskit/editor-common/utils/analytics` instead
1209
1210
  */
1210
1211
 
1212
+ /**
1213
+ * @private
1214
+ * @deprecated
1215
+ *
1216
+ * Private API - should not be used. Use `@atlaskit/editor-common/is-performance-api-available` if required.
1217
+ *
1218
+ */
1219
+
1220
+ /**
1221
+ * @private
1222
+ * @deprecated
1223
+ *
1224
+ * Private API - should not be used. Use `@atlaskit/editor-common/performance/navigation` if required.
1225
+ */
1226
+
1211
1227
  /**
1212
1228
  * @deprecated - [ED-23844] moving to own entry point @atlaskit/editor-common/whitespace
1213
1229
  */
@@ -1221,6 +1237,21 @@ var _pageElementCounts = require("./page-element-counts");
1221
1237
 
1222
1238
  // prosemirror-history does not export its plugin key
1223
1239
  var pmHistoryPluginKey = exports.pmHistoryPluginKey = 'history$';
1240
+
1241
+ /**
1242
+ * @private
1243
+ * @deprecated
1244
+ *
1245
+ * Use `@atlaskit/editor-common/process-raw-value` entry-point instead.
1246
+ */
1247
+
1248
+ /**
1249
+ * @private
1250
+ * @deprecated
1251
+ *
1252
+ * Private API - do not use.
1253
+ */
1254
+
1224
1255
  function shallowEqual() {
1225
1256
  var obj1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1226
1257
  var obj2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.processRawValue = processRawValue;
7
+ var _transforms = require("@atlaskit/adf-utils/transforms");
8
+ var _model = require("@atlaskit/editor-prosemirror/model");
9
+ var _analytics = require("../analytics");
10
+ var _privacyFilter = require("./filter/privacy-filter");
11
+ var _trackUnsupportedContent = require("./track-unsupported-content");
12
+ var _validateUsingSpec = require("./validate-using-spec");
13
+ function processRawValue(schema, value, providerFactory, sanitizePrivateContent, contentTransformer, dispatchAnalyticsEvent) {
14
+ if (!value) {
15
+ return;
16
+ }
17
+ var node;
18
+ if (typeof value === 'string') {
19
+ try {
20
+ if (contentTransformer) {
21
+ var doc = contentTransformer.parse(value);
22
+ node = doc.toJSON();
23
+ } else {
24
+ node = JSON.parse(value);
25
+ }
26
+ } catch (e) {
27
+ // eslint-disable-next-line no-console
28
+ console.error("Error processing value: ".concat(value, " isn't a valid JSON"));
29
+ return;
30
+ }
31
+ } else {
32
+ node = value;
33
+ }
34
+ if (Array.isArray(node)) {
35
+ // eslint-disable-next-line no-console
36
+ console.error("Error processing value: ".concat(node, " is an array, but it must be an object."));
37
+ return;
38
+ }
39
+ try {
40
+ // ProseMirror always require a child under doc
41
+ if (node.type === 'doc') {
42
+ if (Array.isArray(node.content) && node.content.length === 0) {
43
+ node.content.push({
44
+ type: 'paragraph',
45
+ content: []
46
+ });
47
+ }
48
+ // Just making sure doc is always valid
49
+ if (!node.version) {
50
+ node.version = 1;
51
+ }
52
+ }
53
+ if (contentTransformer) {
54
+ return _model.Node.fromJSON(schema, node);
55
+ }
56
+
57
+ // link mark on mediaSingle is deprecated, need to move link mark to child media node
58
+ // https://product-fabric.atlassian.net/browse/ED-14043
59
+ var _transformMediaLinkMa = (0, _transforms.transformMediaLinkMarks)(node),
60
+ transformedAdf = _transformMediaLinkMa.transformedAdf,
61
+ isTransformed = _transformMediaLinkMa.isTransformed;
62
+ if (isTransformed && dispatchAnalyticsEvent) {
63
+ dispatchAnalyticsEvent({
64
+ action: _analytics.ACTION.MEDIA_LINK_TRANSFORMED,
65
+ actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
66
+ eventType: _analytics.EVENT_TYPE.OPERATIONAL
67
+ });
68
+ }
69
+
70
+ // See: HOT-97965 https://product-fabric.atlassian.net/browse/ED-14400
71
+ // We declared in code mark spec that links and marks should not co-exist on
72
+ // text nodes. This util strips code marks from bad text nodes and preserves links.
73
+ // Otherwise, prosemirror will try to repair the invalid document by stripping links
74
+ // and preserving code marks during content changes.
75
+ var _transformTextLinkCod = (0, _transforms.transformTextLinkCodeMarks)(transformedAdf);
76
+ transformedAdf = _transformTextLinkCod.transformedAdf;
77
+ isTransformed = _transformTextLinkCod.isTransformed;
78
+ if (isTransformed && dispatchAnalyticsEvent) {
79
+ dispatchAnalyticsEvent({
80
+ action: _analytics.ACTION.TEXT_LINK_MARK_TRANSFORMED,
81
+ actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
82
+ eventType: _analytics.EVENT_TYPE.OPERATIONAL
83
+ });
84
+ }
85
+ var discardedMarks = [];
86
+ var _transformDedupeMarks = (0, _transforms.transformDedupeMarks)(transformedAdf);
87
+ transformedAdf = _transformDedupeMarks.transformedAdf;
88
+ isTransformed = _transformDedupeMarks.isTransformed;
89
+ discardedMarks = _transformDedupeMarks.discardedMarks;
90
+ if (isTransformed && dispatchAnalyticsEvent) {
91
+ dispatchAnalyticsEvent({
92
+ action: _analytics.ACTION.DEDUPE_MARKS_TRANSFORMED_V2,
93
+ actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
94
+ eventType: _analytics.EVENT_TYPE.OPERATIONAL,
95
+ attributes: {
96
+ /** UGC WARNING
97
+ *
98
+ * DO NOT include the `mark` attributes inside, we map here to only
99
+ * extract the mark type as that is the only non-UGC safe information
100
+ * that we can add to event-attributes
101
+ *
102
+ */
103
+ discardedMarkTypes: discardedMarks.map(function (mark) {
104
+ return mark.type;
105
+ })
106
+ }
107
+ });
108
+ }
109
+ var _transformNodesMissin = (0, _transforms.transformNodesMissingContent)(transformedAdf);
110
+ transformedAdf = _transformNodesMissin.transformedAdf;
111
+ isTransformed = _transformNodesMissin.isTransformed;
112
+ if (isTransformed && dispatchAnalyticsEvent) {
113
+ dispatchAnalyticsEvent({
114
+ action: _analytics.ACTION.NODES_MISSING_CONTENT_TRANSFORMED,
115
+ actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
116
+ eventType: _analytics.EVENT_TYPE.OPERATIONAL
117
+ });
118
+ }
119
+ var _transformIndentation = (0, _transforms.transformIndentationMarks)(transformedAdf);
120
+ transformedAdf = _transformIndentation.transformedAdf;
121
+ isTransformed = _transformIndentation.isTransformed;
122
+ if (isTransformed && dispatchAnalyticsEvent) {
123
+ dispatchAnalyticsEvent({
124
+ action: _analytics.ACTION.INDENTATION_MARKS_TRANSFORMED,
125
+ actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
126
+ eventType: _analytics.EVENT_TYPE.OPERATIONAL
127
+ });
128
+ }
129
+ var _transformInvalidMedi = (0, _transforms.transformInvalidMediaContent)(transformedAdf);
130
+ transformedAdf = _transformInvalidMedi.transformedAdf;
131
+ isTransformed = _transformInvalidMedi.isTransformed;
132
+ if (isTransformed && dispatchAnalyticsEvent) {
133
+ dispatchAnalyticsEvent({
134
+ action: _analytics.ACTION.INVALID_MEDIA_CONTENT_TRANSFORMED,
135
+ actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
136
+ eventType: _analytics.EVENT_TYPE.OPERATIONAL
137
+ });
138
+ }
139
+ var entity = (0, _validateUsingSpec.validateADFEntity)(schema, transformedAdf || node, dispatchAnalyticsEvent);
140
+ var newEntity = maySanitizePrivateContent(entity, providerFactory, sanitizePrivateContent);
141
+ var parsedDoc = _model.Node.fromJSON(schema, newEntity);
142
+
143
+ // throws an error if the document is invalid
144
+ try {
145
+ parsedDoc.check();
146
+ } catch (err) {
147
+ if (dispatchAnalyticsEvent) {
148
+ dispatchAnalyticsEvent({
149
+ action: _analytics.ACTION.INVALID_PROSEMIRROR_DOCUMENT,
150
+ actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
151
+ eventType: _analytics.EVENT_TYPE.OPERATIONAL
152
+ });
153
+ }
154
+ throw err;
155
+ }
156
+ if (dispatchAnalyticsEvent) {
157
+ (0, _trackUnsupportedContent.findAndTrackUnsupportedContentNodes)(parsedDoc, schema, dispatchAnalyticsEvent);
158
+ }
159
+ return parsedDoc;
160
+ } catch (e) {
161
+ if (dispatchAnalyticsEvent) {
162
+ dispatchAnalyticsEvent({
163
+ action: _analytics.ACTION.DOCUMENT_PROCESSING_ERROR,
164
+ actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
165
+ eventType: _analytics.EVENT_TYPE.OPERATIONAL
166
+ });
167
+ }
168
+
169
+ // eslint-disable-next-line no-console
170
+ console.error("Error processing document:\n".concat(e instanceof Error ? e.message : String(e), "\n\n"), JSON.stringify(node));
171
+ if (isProseMirrorSchemaCheckError(e)) {
172
+ throw e;
173
+ }
174
+ return;
175
+ }
176
+ }
177
+ function isProseMirrorSchemaCheckError(error) {
178
+ return error instanceof RangeError && (!!error.message.match(/^Invalid collection of marks for node/) || !!error.message.match(/^Invalid content for node/));
179
+ }
180
+ var maySanitizePrivateContent = function maySanitizePrivateContent(entity, providerFactory, sanitizePrivateContent) {
181
+ if (sanitizePrivateContent && providerFactory) {
182
+ return (0, _privacyFilter.sanitizeNodeForPrivacy)(entity, providerFactory);
183
+ }
184
+ return entity;
185
+ };
@@ -163,6 +163,7 @@ export let INPUT_METHOD = /*#__PURE__*/function (INPUT_METHOD) {
163
163
  INPUT_METHOD["FLOATING_TB"] = "floatingToolbar";
164
164
  INPUT_METHOD["FORMATTING"] = "autoformatting";
165
165
  INPUT_METHOD["INSERT_MENU"] = "insertMenu";
166
+ INPUT_METHOD["INSERT_MENU_RIGHT_RAIL"] = "insertMenuRightRail";
166
167
  INPUT_METHOD["KEYBOARD"] = "keyboard";
167
168
  INPUT_METHOD["MEDIA_PICKER"] = "mediaPicker";
168
169
  INPUT_METHOD["MACRO_BROWSER"] = "macroBrowser";
@@ -239,6 +239,20 @@ export const insertSelectedItem = (maybeNode, opts = {}) => (state, tr, start) =
239
239
  */
240
240
  } else if (node instanceof Node && node.isInline || isInputFragment) {
241
241
  const fragment = isInputFragment ? node : Fragment.fromArray([node, state.schema.text(' ')]);
242
+
243
+ // For platform_editor_element_level_templates experiment only
244
+ // clean up ticket ED-24873
245
+ // @ts-ignore
246
+ if (opts.isTemplate) {
247
+ return insertTemplateFragment({
248
+ fragment,
249
+ tr,
250
+ position: {
251
+ start,
252
+ end: start
253
+ }
254
+ });
255
+ }
242
256
  tr = tr.replaceWith(start, start, fragment);
243
257
  if (opts.selectInlineNode) {
244
258
  // Select inserted node
@@ -285,4 +299,19 @@ export function contentAllowedInCodeBlock(state) {
285
299
  return isAllowedChild = node.type === state.schema.nodes.listItem || node.type === state.schema.nodes.bulletList || node.type === state.schema.nodes.orderedList || node.type === state.schema.nodes.paragraph || node.isInline || node.type === state.schema.nodes.panel || node.isText;
286
300
  });
287
301
  return isAllowedChild;
288
- }
302
+ }
303
+
304
+ // For platform_editor_element_level_templates experiment only
305
+ // clean up ticket ED-24873
306
+ const insertTemplateFragment = ({
307
+ fragment,
308
+ tr,
309
+ position
310
+ }) => {
311
+ const {
312
+ start
313
+ } = position;
314
+ const trWithInsert = pmSafeInsert(fragment, start)(tr);
315
+ tr.setSelection(trWithInsert.selection);
316
+ return tr;
317
+ };
@@ -0,0 +1,51 @@
1
+ import React, { useMemo } from 'react';
2
+ import { useIntl } from 'react-intl-next';
3
+ import CommentIcon from '@atlaskit/icon/glyph/comment';
4
+ import { Pressable, xcss } from '@atlaskit/primitives';
5
+ import Tooltip from '@atlaskit/tooltip';
6
+ import { commentMessages as messages } from '../media';
7
+ const baseStyles = xcss({
8
+ borderRadius: 'border.radius'
9
+ });
10
+ const smallBadgeStyles = xcss({
11
+ height: 'space.200',
12
+ width: 'space.200'
13
+ });
14
+ const mediumBadgeStyles = xcss({
15
+ height: 'space.300',
16
+ width: 'space.300'
17
+ });
18
+ export const CommentBadgeNext = ({
19
+ status = 'default',
20
+ onClick,
21
+ onMouseEnter,
22
+ onMouseLeave,
23
+ badgeSize
24
+ }) => {
25
+ const intl = useIntl();
26
+ const title = intl.formatMessage(messages.viewCommentsOnMedia);
27
+ const colourToken = useMemo(() => {
28
+ switch (status) {
29
+ case 'active':
30
+ return 'color.background.accent.yellow.subtlest.pressed';
31
+ case 'entered':
32
+ return 'color.background.accent.yellow.subtlest.hovered';
33
+ default:
34
+ return 'color.background.accent.yellow.subtlest';
35
+ }
36
+ }, [status]);
37
+ return /*#__PURE__*/React.createElement(Tooltip, {
38
+ position: "top",
39
+ content: title
40
+ }, /*#__PURE__*/React.createElement(Pressable, {
41
+ xcss: [baseStyles, badgeSize === 'medium' ? mediumBadgeStyles : smallBadgeStyles],
42
+ padding: "space.0",
43
+ onClick: onClick,
44
+ onMouseEnter: onMouseEnter,
45
+ onMouseLeave: onMouseLeave,
46
+ backgroundColor: colourToken
47
+ }, /*#__PURE__*/React.createElement(CommentIcon, {
48
+ label: title,
49
+ size: badgeSize
50
+ })));
51
+ };
@@ -1,62 +1,27 @@
1
- import React, { useEffect, useState } from 'react';
2
- import debounce from 'lodash/debounce';
1
+ import React from 'react';
3
2
  import { useIntl } from 'react-intl-next';
4
3
  import InfoIcon from '@atlaskit/icon/glyph/info';
5
4
  import { Box, xcss } from '@atlaskit/primitives';
6
5
  import Tooltip from '@atlaskit/tooltip';
7
6
  import { externalMediaMessages } from '../media';
8
- import { getBadgeSize } from './CommentBadge';
9
7
  const baseStyles = xcss({
10
- position: 'absolute',
11
- top: 'space.025',
12
8
  borderRadius: 'border.radius',
13
9
  backgroundColor: 'elevation.surface',
14
- zIndex: 'tooltip',
15
10
  lineHeight: "var(--ds-space-200, 16px)",
16
- right: 'var(--right-offset)',
17
11
  cursor: 'pointer'
18
12
  });
19
13
  export const ExternalImageBadge = ({
20
- mediaWidth,
21
- mediaHeight,
22
- commentBadgeRightOffset = 0,
23
- mediaElement
14
+ badgeSize
24
15
  }) => {
25
16
  const intl = useIntl();
26
17
  const message = intl.formatMessage(externalMediaMessages.externalMediaFile);
27
- const [badgeSize, setBadgeSize] = useState(getBadgeSize(mediaWidth, mediaHeight));
28
- // detect resize of media element to adjust badge size
29
- // will combine with the comment badge resize observer when refactoring in the future to avoid multiple resize observers
30
- useEffect(() => {
31
- const observer = new ResizeObserver(debounce(entries => {
32
- const [entry] = entries;
33
- const {
34
- width,
35
- height
36
- } = entry.contentRect;
37
- setBadgeSize(getBadgeSize(width, height));
38
- }));
39
- if (mediaElement) {
40
- observer.observe(mediaElement);
41
- }
42
- return () => {
43
- observer.disconnect();
44
- };
45
- }, [mediaElement]);
46
- const baseRightOffset = badgeSize === 'medium' ? 4 : 2;
47
- const rightOffset = baseRightOffset + commentBadgeRightOffset;
48
- return /*#__PURE__*/React.createElement(Box
49
- // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop
50
- , {
51
- style: {
52
- '--right-offset': `${rightOffset}px`
53
- },
18
+ return /*#__PURE__*/React.createElement(Box, {
54
19
  padding: badgeSize === 'medium' ? 'space.050' : 'space.0',
55
- "data-external-image-badge": "true",
56
20
  xcss: baseStyles,
57
21
  tabIndex: 0
58
22
  }, /*#__PURE__*/React.createElement(Tooltip, {
59
- content: message
23
+ content: message,
24
+ position: "top"
60
25
  }, /*#__PURE__*/React.createElement(InfoIcon, {
61
26
  size: "small",
62
27
  label: message
@@ -0,0 +1,63 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import debounce from 'lodash/debounce';
3
+ import { Box, xcss } from '@atlaskit/primitives';
4
+ const containerStyles = xcss({
5
+ display: 'flex',
6
+ position: 'absolute',
7
+ top: 'space.0',
8
+ right: 'space.0',
9
+ lineHeight: "var(--ds-space-200, 16px)",
10
+ gap: 'space.025',
11
+ zIndex: 'card',
12
+ height: 'fit-content',
13
+ width: 'fit-content',
14
+ margin: 'space.075'
15
+ });
16
+ const resizeOffsetStyles = xcss({
17
+ right: 'space.150'
18
+ });
19
+ const smallBadgeStyles = xcss({
20
+ margin: 'space.025'
21
+ });
22
+ const getBadgeSize = (width, height) => {
23
+ // width is the original width of image, not resized or currently rendered to user. Defaulting to medium for now
24
+ return width && width < 70 || height && height < 70 ? 'small' : 'medium';
25
+ };
26
+ export const MediaBadges = ({
27
+ children,
28
+ mediaElement,
29
+ mediaWidth,
30
+ mediaHeight,
31
+ extendedResizeOffset
32
+ }) => {
33
+ const [badgeSize, setBadgeSize] = useState(getBadgeSize(mediaWidth, mediaHeight));
34
+ useEffect(() => {
35
+ const observer = new ResizeObserver(debounce(entries => {
36
+ const [entry] = entries;
37
+ const {
38
+ width,
39
+ height
40
+ } = entry.contentRect;
41
+ setBadgeSize(getBadgeSize(width, height));
42
+ }));
43
+ if (mediaElement) {
44
+ observer.observe(mediaElement);
45
+ }
46
+ return () => {
47
+ observer.disconnect();
48
+ };
49
+ }, [mediaElement]);
50
+ if (typeof children === 'function') {
51
+ children = children({
52
+ badgeSize
53
+ });
54
+ }
55
+ if (!mediaElement || React.Children.count(children) === 0) {
56
+ return null;
57
+ }
58
+ return /*#__PURE__*/React.createElement(Box, {
59
+ testId: "media-badges",
60
+ "data-media-badges": "true",
61
+ xcss: [containerStyles, extendedResizeOffset && resizeOffsetStyles, badgeSize === 'small' && smallBadgeStyles]
62
+ }, children);
63
+ };
@@ -1,4 +1,6 @@
1
1
  export { MEDIA_SINGLE_DEFAULT_MIN_PIXEL_WIDTH, MEDIA_SINGLE_VIDEO_MIN_PIXEL_WIDTH, MEDIA_SINGLE_SNAP_GAP, MEDIA_SINGLE_HIGHLIGHT_GAP, MEDIA_SINGLE_GUTTER_SIZE, MEDIA_SINGLE_RESIZE_THROTTLE_TIME, Layout as MediaSingleLayout, DEFAULT_IMAGE_WIDTH, DEFAULT_IMAGE_HEIGHT, wrappedLayouts, CAPTION_PLACEHOLDER_ID } from './constants';
2
2
  export { getMediaSinglePixelWidth, calcMediaSinglePixelWidth, calcMediaSingleMaxWidth, getMediaSingleInitialWidth, calculateOffsetLeft, roundToNearest, calcMinWidth, getMaxWidthForNestedNode, getMaxWidthForNestedNodeNext, currentMediaNodeWithPos } from './utils';
3
3
  export { CommentBadge } from './CommentBadge';
4
- export { ExternalImageBadge } from './ExternalImageBadge';
4
+ export { CommentBadgeNext } from './CommentBadgeNext';
5
+ export { ExternalImageBadge } from './ExternalImageBadge';
6
+ export { MediaBadges } from './MediaBadges';