@atlaskit/editor-plugin-show-diff 8.4.5 → 8.4.7

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 (29) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/pm-plugins/areDocsEqualByBlockStructureAndText.js +6 -10
  3. package/dist/cjs/pm-plugins/calculateDiff/calculateDiffDecorations.js +13 -20
  4. package/dist/cjs/pm-plugins/calculateDiff/diffBySteps.js +141 -4
  5. package/dist/cjs/pm-plugins/decorations/createBlockChangedDecoration.js +13 -27
  6. package/dist/cjs/pm-plugins/decorations/createNodeChangedDecorationWidget.js +12 -34
  7. package/dist/cjs/pm-plugins/decorations/utils/getAttrChangeRanges.js +30 -32
  8. package/dist/cjs/pm-plugins/decorations/utils/wrapBlockNodeView.js +5 -9
  9. package/dist/cjs/pm-plugins/main.js +13 -18
  10. package/dist/cjs/showDiffPlugin.js +1 -3
  11. package/dist/es2019/pm-plugins/areDocsEqualByBlockStructureAndText.js +6 -10
  12. package/dist/es2019/pm-plugins/calculateDiff/calculateDiffDecorations.js +13 -20
  13. package/dist/es2019/pm-plugins/calculateDiff/diffBySteps.js +137 -4
  14. package/dist/es2019/pm-plugins/decorations/createBlockChangedDecoration.js +15 -27
  15. package/dist/es2019/pm-plugins/decorations/createNodeChangedDecorationWidget.js +10 -32
  16. package/dist/es2019/pm-plugins/decorations/utils/getAttrChangeRanges.js +24 -26
  17. package/dist/es2019/pm-plugins/decorations/utils/wrapBlockNodeView.js +6 -10
  18. package/dist/es2019/pm-plugins/main.js +13 -18
  19. package/dist/es2019/showDiffPlugin.js +1 -3
  20. package/dist/esm/pm-plugins/areDocsEqualByBlockStructureAndText.js +6 -10
  21. package/dist/esm/pm-plugins/calculateDiff/calculateDiffDecorations.js +13 -20
  22. package/dist/esm/pm-plugins/calculateDiff/diffBySteps.js +141 -4
  23. package/dist/esm/pm-plugins/decorations/createBlockChangedDecoration.js +14 -27
  24. package/dist/esm/pm-plugins/decorations/createNodeChangedDecorationWidget.js +12 -34
  25. package/dist/esm/pm-plugins/decorations/utils/getAttrChangeRanges.js +30 -32
  26. package/dist/esm/pm-plugins/decorations/utils/wrapBlockNodeView.js +6 -10
  27. package/dist/esm/pm-plugins/main.js +13 -18
  28. package/dist/esm/showDiffPlugin.js +1 -3
  29. package/package.json +7 -14
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlaskit/editor-plugin-show-diff
2
2
 
3
+ ## 8.4.7
4
+
5
+ ### Patch Changes
6
+
7
+ - [`8132cf74d023d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/8132cf74d023d) -
8
+ EDITOR-7377: Fix granular diffs to show diffs at word boundaries (non-whitespace characters)
9
+ - Updated dependencies
10
+
11
+ ## 8.4.6
12
+
13
+ ### Patch Changes
14
+
15
+ - [`5e34be0ba10b6`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/5e34be0ba10b6) -
16
+ Cleanup show diff experiments
17
+ - Updated dependencies
18
+
3
19
  ## 8.4.5
4
20
 
5
21
  ### Patch Changes
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.areDocsEqualByBlockStructureAndText = areDocsEqualByBlockStructureAndText;
7
7
  var _transform = require("@atlaskit/editor-prosemirror/transform");
8
- var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
9
8
  /**
10
9
  * Returns a copy of the document with all marks removed from all text.
11
10
  * This normalises mark fragmentation — e.g. annotation marks reordering can split
@@ -47,13 +46,10 @@ function areDocsEqualByBlockStructureAndText(doc1, doc2) {
47
46
  if (doc1.textContent !== doc2.textContent) {
48
47
  return false;
49
48
  }
50
- if ((0, _expValEquals.expValEquals)('platform_editor_show_diff_improvements', 'isEnabled', true)) {
51
- // Strip marks before comparing so that mark-driven text fragmentation
52
- // (e.g. annotation mark reordering producing different childCounts) does not
53
- // cause false inequalities.
54
- var stripped1 = stripMarks(doc1);
55
- var stripped2 = stripMarks(doc2);
56
- return doc1.nodeSize === doc2.nodeSize && isBlockStructureEqual(stripped1, stripped2);
57
- }
58
- return doc1.nodeSize === doc2.nodeSize && isBlockStructureEqual(doc1, doc2);
49
+ // Strip marks before comparing so that mark-driven text fragmentation
50
+ // (e.g. annotation mark reordering producing different childCounts) does not
51
+ // cause false inequalities.
52
+ var stripped1 = stripMarks(doc1);
53
+ var stripped2 = stripMarks(doc2);
54
+ return doc1.nodeSize === doc2.nodeSize && isBlockStructureEqual(stripped1, stripped2);
59
55
  }
@@ -13,7 +13,6 @@ var _memoizeOne = _interopRequireDefault(require("memoize-one"));
13
13
  var _prosemirrorChangeset = require("prosemirror-changeset");
14
14
  var _document = require("@atlaskit/editor-common/utils/document");
15
15
  var _view = require("@atlaskit/editor-prosemirror/view");
16
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
17
16
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
18
17
  var _areDocsEqualByBlockStructureAndText = require("../areDocsEqualByBlockStructureAndText");
19
18
  var _createBlockChangedDecoration = require("../decorations/createBlockChangedDecoration");
@@ -131,25 +130,19 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref3
131
130
  _iterator.f();
132
131
  }
133
132
  if (!(0, _document.areNodesEqualIgnoreAttrs)(steppedDoc, tr.doc)) {
134
- var recoveredViaContentEquality = (0, _platformFeatureFlags.fg)('platform_editor_show_diff_equality_fallback') ? (0, _areDocsEqualByBlockStructureAndText.areDocsEqualByBlockStructureAndText)(steppedDoc, tr.doc) : undefined;
135
- if ((0, _expValEquals.expValEquals)('platform_editor_are_nodes_equal_ignore_mark_order', 'isEnabled', true)) {
136
- var _api$analytics;
137
- api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || _api$analytics.actions.fireAnalyticsEvent({
138
- eventType: 'track',
139
- action: 'nodesNotEqual',
140
- actionSubject: 'showDiff',
141
- attributes: {
142
- docSizeEqual: steppedDoc.nodeSize === tr.doc.nodeSize,
143
- colorScheme: colorScheme,
144
- recoveredViaContentEquality: recoveredViaContentEquality
145
- }
146
- });
147
- }
148
- if ((0, _platformFeatureFlags.fg)('platform_editor_show_diff_equality_fallback')) {
149
- if (!recoveredViaContentEquality) {
150
- return _view.DecorationSet.empty;
133
+ var _api$analytics;
134
+ var recoveredViaContentEquality = (0, _areDocsEqualByBlockStructureAndText.areDocsEqualByBlockStructureAndText)(steppedDoc, tr.doc);
135
+ api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || _api$analytics.actions.fireAnalyticsEvent({
136
+ eventType: 'track',
137
+ action: 'nodesNotEqual',
138
+ actionSubject: 'showDiff',
139
+ attributes: {
140
+ docSizeEqual: steppedDoc.nodeSize === tr.doc.nodeSize,
141
+ colorScheme: colorScheme,
142
+ recoveredViaContentEquality: recoveredViaContentEquality
151
143
  }
152
- } else {
144
+ });
145
+ if (!recoveredViaContentEquality) {
153
146
  return _view.DecorationSet.empty;
154
147
  }
155
148
  }
@@ -221,7 +214,7 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref3
221
214
  }));
222
215
  });
223
216
  (0, _getAttrChangeRanges.getAttrChangeRanges)(tr.doc, attrSteps).forEach(function (change) {
224
- if ((0, _expValEquals.expValEquals)('platform_editor_show_diff_improvements', 'isEnabled', true) && change.isInline) {
217
+ if (change.isInline) {
225
218
  // Inline nodes (e.g. date) need an inline decoration rather than a block decoration
226
219
  var isActive = activeIndexPos && change.fromB === activeIndexPos.from && change.toB === activeIndexPos.to;
227
220
  decorations.push((0, _createInlineChangedDecoration.createInlineChangedDecoration)({
@@ -20,6 +20,107 @@ var mapPosition = function mapPosition(mapping, pos) {
20
20
  return mapping.map(pos);
21
21
  };
22
22
 
23
+ /**
24
+ * Given a ProseMirror doc and a position range [from, to], expand
25
+ * both endpoints outward to the nearest word boundaries.
26
+ *
27
+ * A "word character" is any non-whitespace, non-punctuation character, plus hyphen.
28
+ * This covers accented/Unicode letters (e.g. é, ñ, ü) while still stopping at
29
+ * commas, periods, and other punctuation. Hyphens are explicitly included so that
30
+ * hyphenated words (e.g. "deep-sea") are treated as a single word.
31
+ * Expansion stops at whitespace, punctuation (excluding hyphen), or the textblock edges.
32
+ *
33
+ * If `from` and `to` resolve into different parent nodes, or if the
34
+ * parent is not a textblock, the range is returned unchanged.
35
+ */
36
+ var expandToWordBoundaries = function expandToWordBoundaries(doc, from, to) {
37
+ var $from = doc.resolve(from);
38
+
39
+ // Only expand inside a textblock.
40
+ if (!$from.parent.isTextblock) {
41
+ return {
42
+ from: from,
43
+ to: to
44
+ };
45
+ }
46
+
47
+ // When `from !== to`, verify both ends are in the same textblock.
48
+ if (from !== to) {
49
+ var $to = doc.resolve(to);
50
+ if ($from.parent !== $to.parent) {
51
+ return {
52
+ from: from,
53
+ to: to
54
+ };
55
+ }
56
+ }
57
+ var parent = $from.parent;
58
+ var text = parent.textContent;
59
+ var parentStart = $from.start(); // absolute position of the first character in the textblock
60
+
61
+ // Convert absolute doc positions to zero-based string indices.
62
+ var fromIdx = from - parentStart;
63
+ var toIdx = to - parentStart;
64
+
65
+ // any non whitespace and non punctuation chars
66
+ // @ts-ignore TS1501: This regular expression flag is only available when targeting 'es6' or later.
67
+ var isWordChar = function isWordChar(ch) {
68
+ return /(?:[\x2D0-9A-Z_a-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088F\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5C\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDC-\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C8A\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7DC\uA7F1-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDDC0-\uDDF3\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD40-\uDD59\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDD40-\uDD65\uDD6F-\uDD85\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDEC2-\uDEC7\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61\uDF80-\uDF89\uDF8B\uDF8E\uDF90-\uDFB5\uDFB7\uDFD1\uDFD3]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDED0-\uDEE3\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8\uDFC0-\uDFE0\uDFF0-\uDFF9]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDDB0-\uDDDB\uDDE0-\uDDE9\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDF50-\uDF59\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD80E\uD80F\uD81C-\uD822\uD840-\uD868\uD86A-\uD86D\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD88C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46\uDC60-\uDFFF]|\uD810[\uDC00-\uDFFA]|\uD811[\uDC00-\uDE46]|\uD818[\uDD00-\uDD1D\uDD30-\uDD39]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDD40-\uDD6C\uDD70-\uDD79\uDE40-\uDE96\uDEA0-\uDEB8\uDEBB-\uDED3\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3\uDFF2-\uDFF6]|\uD823[\uDC00-\uDCD5\uDCFF-\uDD1E\uDD80-\uDDF2]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD833[\uDCF0-\uDCF9]|\uD834[\uDEC0-\uDED3\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDCD0-\uDCEB\uDCF0-\uDCF9\uDDD0-\uDDED\uDDF0-\uDDFA\uDEC0-\uDEDE\uDEE0-\uDEE2\uDEE4\uDEE5\uDEE7-\uDEED\uDEF0-\uDEF4\uDEFE\uDEFF\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEAD\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD88D[\uDC00-\uDC79])/.test(ch);
69
+ };
70
+
71
+ // Detect whether the position sits mid-word: there is a word character
72
+ // on both sides of the position (or, for a non-empty range, on the
73
+ // outer side of each endpoint).
74
+ var isMidWord = function isMidWord(idx) {
75
+ return idx > 0 && idx < text.length && isWordChar(text[idx - 1]) && isWordChar(text[idx]);
76
+ };
77
+
78
+ // For a zero-width range (pure insertion / deletion point), only expand
79
+ // if the point is mid-word — i.e. both the char before and after are
80
+ // word characters. Otherwise the point is already at a word boundary.
81
+ if (from === to) {
82
+ if (!isMidWord(fromIdx)) {
83
+ return {
84
+ from: from,
85
+ to: to
86
+ };
87
+ }
88
+ // Expand both directions from the mid-word point.
89
+ while (fromIdx > 0 && isWordChar(text[fromIdx - 1])) {
90
+ fromIdx--;
91
+ }
92
+ while (toIdx < text.length && isWordChar(text[toIdx])) {
93
+ toIdx++;
94
+ }
95
+ return {
96
+ from: parentStart + fromIdx,
97
+ to: parentStart + toIdx
98
+ };
99
+ }
100
+
101
+ // Non-empty range: expand each endpoint outward if it is mid-word.
102
+
103
+ // Expand left only if `from` is truly mid-word: the character at `from`
104
+ // (inside the range) and the character before `from` are both word chars.
105
+ if (fromIdx > 0 && fromIdx < text.length && isWordChar(text[fromIdx]) && isWordChar(text[fromIdx - 1])) {
106
+ while (fromIdx > 0 && isWordChar(text[fromIdx - 1])) {
107
+ fromIdx--;
108
+ }
109
+ }
110
+
111
+ // Expand right only if `to` is truly mid-word: the character just before
112
+ // `to` (last char of the range) and the character at `to` are both word chars.
113
+ if (toIdx > 0 && toIdx < text.length && isWordChar(text[toIdx - 1]) && isWordChar(text[toIdx])) {
114
+ while (toIdx < text.length && isWordChar(text[toIdx])) {
115
+ toIdx++;
116
+ }
117
+ }
118
+ return {
119
+ from: parentStart + fromIdx,
120
+ to: parentStart + toIdx
121
+ };
122
+ };
123
+
23
124
  /**
24
125
  * Compare marks between two nodes
25
126
  * We have to check each child because adding a mark splits text into multiple nodes
@@ -186,10 +287,46 @@ var diffBySteps = exports.diffBySteps = function diffBySteps(originalDoc, steps)
186
287
  try {
187
288
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
188
289
  var granularChange = _step3.value;
189
- var granularFromA = mapPosition(beforeStepToOriginal, granularChange.fromA);
190
- var granularToA = mapPosition(beforeStepToOriginal, granularChange.toA);
191
- var granularFromB = mapPosition(afterStepToFinal, granularChange.fromB);
192
- var granularToB = mapPosition(afterStepToFinal, granularChange.toB);
290
+ // Expand each granular change to the nearest word boundaries in
291
+ // both the pre-step doc (A-side) and the post-step doc (B-side).
292
+ // This ensures that a mid-word edit like "sanitised" → "sanitized"
293
+ // shows as deleting the whole original word and inserting the whole
294
+ // new word, rather than a single-character swap.
295
+ var expandedA = expandToWordBoundaries(rangedStep.before, granularChange.fromA, granularChange.toA);
296
+ var expandedB = expandToWordBoundaries(rangedStep.doc, granularChange.fromB, granularChange.toB);
297
+
298
+ // When one side expanded further than the other (e.g. a space
299
+ // was inserted mid-word: "altogether" → "all together"), the
300
+ // less-expanded side must grow to match — otherwise the renderer
301
+ // shows a partial word as plain text next to a deletion/insertion.
302
+ // We compare left and right deltas independently so partial
303
+ // expansion on one side doesn't prevent the other side from
304
+ // being pulled out further.
305
+ var aLeftDelta = granularChange.fromA - expandedA.from;
306
+ var aRightDelta = expandedA.to - granularChange.toA;
307
+ var bLeftDelta = granularChange.fromB - expandedB.from;
308
+ var bRightDelta = expandedB.to - granularChange.toB;
309
+ var finalA = expandedA;
310
+ var finalB = expandedB;
311
+
312
+ // If A expanded further on either side, nudge B outward
313
+ // by the excess and re-expand to snap to word boundaries.
314
+ if (aLeftDelta > bLeftDelta || aRightDelta > bRightDelta) {
315
+ var extraLeft = Math.max(0, aLeftDelta - bLeftDelta);
316
+ var extraRight = Math.max(0, aRightDelta - bRightDelta);
317
+ finalB = expandToWordBoundaries(rangedStep.doc, Math.max(expandedB.from - extraLeft, 0), expandedB.to + extraRight);
318
+ }
319
+
320
+ // If B expanded further on either side, nudge A outward.
321
+ if (bLeftDelta > aLeftDelta || bRightDelta > aRightDelta) {
322
+ var _extraLeft = Math.max(0, bLeftDelta - aLeftDelta);
323
+ var _extraRight = Math.max(0, bRightDelta - aRightDelta);
324
+ finalA = expandToWordBoundaries(rangedStep.before, Math.max(expandedA.from - _extraLeft, 0), expandedA.to + _extraRight);
325
+ }
326
+ var granularFromA = mapPosition(beforeStepToOriginal, finalA.from);
327
+ var granularToA = mapPosition(beforeStepToOriginal, finalA.to);
328
+ var granularFromB = mapPosition(afterStepToFinal, finalB.from);
329
+ var granularToB = mapPosition(afterStepToFinal, finalB.to);
193
330
  changes.push({
194
331
  fromA: granularFromA,
195
332
  toA: granularToA,
@@ -1,14 +1,11 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.createBlockChangedDecoration = void 0;
8
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
7
  var _lazyNodeView = require("@atlaskit/editor-common/lazy-node-view");
10
8
  var _view = require("@atlaskit/editor-prosemirror/view");
11
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
12
9
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
13
10
  var _standard = require("./colorSchemes/standard");
14
11
  var _traditional = require("./colorSchemes/traditional");
@@ -35,7 +32,7 @@ var getBlockNodeStyle = function getBlockNodeStyle(_ref) {
35
32
  // Handle table separately to avoid border issues
36
33
  'tableRow', 'paragraph',
37
34
  // Paragraph and heading nodes do not need special styling
38
- 'heading', 'hardBreak', 'decisionList', 'taskList'].concat((0, _toConsumableArray2.default)((0, _expValEquals.expValEquals)('platform_editor_show_diff_improvements', 'isEnabled', true) ? [] : ['taskItem']), ['bulletList', 'orderedList', 'layoutSection']).includes(nodeName)) {
35
+ 'heading', 'hardBreak', 'decisionList', 'taskList', 'bulletList', 'orderedList', 'layoutSection'].includes(nodeName)) {
39
36
  // Layout nodes do not need special styling
40
37
  return undefined;
41
38
  }
@@ -52,51 +49,51 @@ var getBlockNodeStyle = function getBlockNodeStyle(_ref) {
52
49
  if (['extension', 'embedCard', 'listItem'].includes(nodeName)) {
53
50
  if ((0, _expValEquals.expValEquals)('platform_editor_diff_plugin_extended', 'isEnabled', true)) {
54
51
  if (isInserted) {
55
- return isTraditional && isActive ? _traditional.traditionalDecorationMarkerVariableActive : isTraditional ? (0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation') ? _traditional.traditionalDecorationMarkerVariableNew : _traditional.traditionalDecorationMarkerVariable : _standard.standardDecorationMarkerVariable;
52
+ return isTraditional && isActive ? _traditional.traditionalDecorationMarkerVariableActive : isTraditional ? _traditional.traditionalDecorationMarkerVariableNew : _standard.standardDecorationMarkerVariable;
56
53
  } else {
57
- return isTraditional && isActive ? _traditional.traditionalDeletedDecorationMarkerVariableActive : isTraditional ? (0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation') ? _traditional.traditionalDeletedDecorationMarkerVariableNew : _traditional.traditionalDeletedDecorationMarkerVariable : _standard.deletedContentStyleNew;
54
+ return isTraditional && isActive ? _traditional.traditionalDeletedDecorationMarkerVariableActive : isTraditional ? _traditional.traditionalDeletedDecorationMarkerVariableNew : _standard.deletedContentStyleNew;
58
55
  }
59
56
  }
60
- return isTraditional && isActive ? _traditional.traditionalDecorationMarkerVariableActive : isTraditional ? (0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation') ? _traditional.traditionalDecorationMarkerVariableNew : _traditional.traditionalDecorationMarkerVariable : _standard.standardDecorationMarkerVariable;
57
+ return isTraditional && isActive ? _traditional.traditionalDecorationMarkerVariableActive : isTraditional ? _traditional.traditionalDecorationMarkerVariableNew : _standard.standardDecorationMarkerVariable;
61
58
  }
62
59
  if (nodeName === 'blockquote') {
63
60
  if ((0, _expValEquals.expValEquals)('platform_editor_diff_plugin_extended', 'isEnabled', true)) {
64
61
  if (isInserted) {
65
- return isTraditional ? isActive ? _traditional.traditionalStyleQuoteNodeActive : (0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation') ? _traditional.traditionalStyleQuoteNodeNew : _traditional.traditionalStyleQuoteNode : _standard.editingStyleQuoteNode;
62
+ return isTraditional ? isActive ? _traditional.traditionalStyleQuoteNodeActive : _traditional.traditionalStyleQuoteNodeNew : _standard.editingStyleQuoteNode;
66
63
  } else {
67
64
  return isTraditional ? _traditional.deletedTraditionalStyleQuoteNode : _standard.deletedStyleQuoteNode;
68
65
  }
69
66
  }
70
- return isTraditional ? isActive ? _traditional.traditionalStyleQuoteNodeActive : (0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation') ? _traditional.traditionalStyleQuoteNodeNew : _traditional.traditionalStyleQuoteNode : _standard.editingStyleQuoteNode;
67
+ return isTraditional ? isActive ? _traditional.traditionalStyleQuoteNodeActive : _traditional.traditionalStyleQuoteNodeNew : _standard.editingStyleQuoteNode;
71
68
  }
72
69
  if (nodeName === 'rule') {
73
70
  if ((0, _expValEquals.expValEquals)('platform_editor_diff_plugin_extended', 'isEnabled', true)) {
74
71
  if (isInserted) {
75
- return isTraditional ? isActive ? _traditional.traditionalStyleRuleNodeActive : (0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation') ? _traditional.traditionalStyleRuleNodeNew : _traditional.traditionalStyleRuleNode : _standard.editingStyleRuleNode;
72
+ return isTraditional ? isActive ? _traditional.traditionalStyleRuleNodeActive : _traditional.traditionalStyleRuleNodeNew : _standard.editingStyleRuleNode;
76
73
  } else {
77
74
  return isTraditional ? (0, _traditional.getDeletedTraditionalInlineStyle)(false) : _standard.deletedContentStyleNew;
78
75
  }
79
76
  }
80
- return isTraditional ? isActive ? _traditional.traditionalStyleRuleNodeActive : (0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation') ? _traditional.traditionalStyleRuleNodeNew : _traditional.traditionalStyleRuleNode : _standard.editingStyleRuleNode;
77
+ return isTraditional ? isActive ? _traditional.traditionalStyleRuleNodeActive : _traditional.traditionalStyleRuleNodeNew : _standard.editingStyleRuleNode;
81
78
  }
82
79
  if (nodeName === 'blockCard') {
83
80
  if ((0, _expValEquals.expValEquals)('platform_editor_diff_plugin_extended', 'isEnabled', true)) {
84
81
  if (isInserted) {
85
- return isTraditional ? isActive ? _traditional.traditionalStyleCardBlockNodeActive : (0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation') ? _traditional.traditionalStyleCardBlockNodeNew : _traditional.traditionalStyleCardBlockNode : _standard.editingStyleCardBlockNode;
82
+ return isTraditional ? isActive ? _traditional.traditionalStyleCardBlockNodeActive : _traditional.traditionalStyleCardBlockNodeNew : _standard.editingStyleCardBlockNode;
86
83
  } else {
87
84
  return isTraditional ? (0, _traditional.getDeletedTraditionalInlineStyle)(false) : _standard.deletedContentStyleNew;
88
85
  }
89
86
  }
90
- return isTraditional ? isActive ? _traditional.traditionalStyleCardBlockNodeActive : (0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation') ? _traditional.traditionalStyleCardBlockNodeNew : _traditional.traditionalStyleCardBlockNode : _standard.editingStyleCardBlockNode;
87
+ return isTraditional ? isActive ? _traditional.traditionalStyleCardBlockNodeActive : _traditional.traditionalStyleCardBlockNodeNew : _standard.editingStyleCardBlockNode;
91
88
  }
92
89
  if ((0, _expValEquals.expValEquals)('platform_editor_diff_plugin_extended', 'isEnabled', true)) {
93
90
  if (isInserted) {
94
- return isTraditional ? isActive ? _traditional.traditionalStyleNodeActive : (0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation') ? _traditional.traditionalStyleNodeNew : _traditional.traditionalStyleNode : _standard.editingStyleNode;
91
+ return isTraditional ? isActive ? _traditional.traditionalStyleNodeActive : _traditional.traditionalStyleNodeNew : _standard.editingStyleNode;
95
92
  } else {
96
93
  return isTraditional ? (0, _traditional.getDeletedTraditionalInlineStyle)(false) : _standard.deletedContentStyleNew;
97
94
  }
98
95
  }
99
- return isTraditional ? isActive ? _traditional.traditionalStyleNodeActive : (0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation') ? _traditional.traditionalStyleNodeNew : _traditional.traditionalStyleNode : _standard.editingStyleNode;
96
+ return isTraditional ? isActive ? _traditional.traditionalStyleNodeActive : _traditional.traditionalStyleNodeNew : _standard.editingStyleNode;
100
97
  };
101
98
 
102
99
  /**
@@ -151,18 +148,7 @@ var createBlockChangedDecoration = exports.createBlockChangedDecoration = functi
151
148
  });
152
149
  }
153
150
  var className = getNodeClass(change.name);
154
- if ((0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation')) {
155
- if (style || className) {
156
- decorations.push(_view.Decoration.node(change.from, change.to, {
157
- style: style,
158
- 'data-testid': 'show-diff-changed-decoration-node',
159
- class: className
160
- }, {
161
- key: 'diff-block',
162
- nodeName: change.name
163
- }));
164
- }
165
- } else {
151
+ if (style || className) {
166
152
  decorations.push(_view.Decoration.node(change.from, change.to, {
167
153
  style: style,
168
154
  'data-testid': 'show-diff-changed-decoration-node',
@@ -9,7 +9,6 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
9
9
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
10
  var _lazyNodeView = require("@atlaskit/editor-common/lazy-node-view");
11
11
  var _view = require("@atlaskit/editor-prosemirror/view");
12
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
13
12
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
14
13
  var _standard = require("./colorSchemes/standard");
15
14
  var _traditional = require("./colorSchemes/traditional");
@@ -56,21 +55,6 @@ var getDeletedContentStyle = function getDeletedContentStyle(colorScheme) {
56
55
  return (0, _expValEquals.expValEquals)('platform_editor_enghealth_a11y_jan_fixes', 'isEnabled', true) ? _standard.deletedContentStyleNew : _standard.deletedContentStyle;
57
56
  };
58
57
 
59
- /**
60
- * Wraps content with deleted styling without opacity (for use when content is a direct child of dom)
61
- */
62
- var createDeletedStyleWrapperWithoutOpacity = function createDeletedStyleWrapperWithoutOpacity(colorScheme, isActive) {
63
- var wrapper = document.createElement('span');
64
- if ((0, _expValEquals.expValEquals)('platform_editor_diff_plugin_extended', 'isEnabled', true)) {
65
- wrapper.setAttribute('style',
66
- // Merge into existing styles when cleaning up
67
- getDeletedContentStyle(colorScheme, isActive) + _standard.deletedInlineContentBackground);
68
- } else {
69
- wrapper.setAttribute('style', getDeletedContentStyle(colorScheme, isActive));
70
- }
71
- return wrapper;
72
- };
73
-
74
58
  /**
75
59
  * CSS backgrounds don't work when applied to a wrapper around a paragraph, so
76
60
  * the wrapper needs to be injected inside the node around the child content
@@ -131,7 +115,7 @@ var createNodeChangedDecorationWidget = exports.createNodeChangedDecorationWidge
131
115
  _ref2$isInserted = _ref2.isInserted,
132
116
  isInserted = _ref2$isInserted === void 0 ? false : _ref2$isInserted;
133
117
  var slice = doc.slice(change.fromA, change.toA);
134
- var shouldSkipDeletedEmptyParagraphDecoration = !isInserted && (slice === null || slice === void 0 || (_slice$content = slice.content) === null || _slice$content === void 0 ? void 0 : _slice$content.childCount) === 1 && (slice === null || slice === void 0 || (_slice$content2 = slice.content) === null || _slice$content2 === void 0 || (_slice$content2 = _slice$content2.firstChild) === null || _slice$content2 === void 0 ? void 0 : _slice$content2.type.name) === 'paragraph' && (slice === null || slice === void 0 || (_slice$content3 = slice.content) === null || _slice$content3 === void 0 || (_slice$content3 = _slice$content3.firstChild) === null || _slice$content3 === void 0 ? void 0 : _slice$content3.content.size) === 0 && (0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation');
118
+ var shouldSkipDeletedEmptyParagraphDecoration = !isInserted && (slice === null || slice === void 0 || (_slice$content = slice.content) === null || _slice$content === void 0 ? void 0 : _slice$content.childCount) === 1 && (slice === null || slice === void 0 || (_slice$content2 = slice.content) === null || _slice$content2 === void 0 || (_slice$content2 = _slice$content2.firstChild) === null || _slice$content2 === void 0 ? void 0 : _slice$content2.type.name) === 'paragraph' && (slice === null || slice === void 0 || (_slice$content3 = slice.content) === null || _slice$content3 === void 0 || (_slice$content3 = _slice$content3.firstChild) === null || _slice$content3 === void 0 ? void 0 : _slice$content3.content.size) === 0;
135
119
  // Widget decoration used for deletions as the content is not in the document
136
120
  // and we want to display the deleted content with a style.
137
121
  var safeInsertPos = (0, _findSafeInsertPos.findSafeInsertPos)(newDoc, change.fromB, slice);
@@ -254,24 +238,18 @@ var createNodeChangedDecorationWidget = exports.createNodeChangedDecorationWidge
254
238
  } else {
255
239
  var fallbackNode = fallbackSerialization();
256
240
  if (fallbackNode) {
257
- if ((0, _expValEquals.expValEquals)('platform_editor_diff_plugin_extended', 'isEnabled', true) || (0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation')) {
258
- if (fallbackNode instanceof HTMLElement) {
259
- var injectedNode = injectInnerWrapper({
260
- node: fallbackNode,
261
- colorScheme: colorScheme,
262
- isActive: isActive,
263
- isInserted: isInserted
264
- });
265
- dom.append(injectedNode);
266
- } else {
267
- var _wrapper2 = createContentWrapper(colorScheme, isActive, isInserted);
268
- _wrapper2.append(fallbackNode);
269
- dom.append(_wrapper2);
270
- }
241
+ if (fallbackNode instanceof HTMLElement) {
242
+ var injectedNode = injectInnerWrapper({
243
+ node: fallbackNode,
244
+ colorScheme: colorScheme,
245
+ isActive: isActive,
246
+ isInserted: isInserted
247
+ });
248
+ dom.append(injectedNode);
271
249
  } else {
272
- var _wrapper3 = createDeletedStyleWrapperWithoutOpacity(colorScheme, isActive);
273
- _wrapper3.append(fallbackNode);
274
- dom.append(_wrapper3);
250
+ var _wrapper2 = createContentWrapper(colorScheme, isActive, isInserted);
251
+ _wrapper2.append(fallbackNode);
252
+ dom.append(_wrapper2);
275
253
  }
276
254
  }
277
255
  }
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.stepIsValidAttrChange = exports.getAttrChangeRanges = void 0;
7
7
  var _steps = require("@atlaskit/adf-schema/steps");
8
8
  var _transform = require("@atlaskit/editor-prosemirror/transform");
9
- var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
10
9
  var filterUndefined = function filterUndefined(x) {
11
10
  return !!x;
12
11
  };
@@ -42,39 +41,38 @@ var getAttrChangeRanges = exports.getAttrChangeRanges = function getAttrChangeRa
42
41
  var stepAttrs = getStepAttrs(step);
43
42
  var $pos = doc.resolve(step.pos);
44
43
  var nodeAtPos = doc.nodeAt(step.pos);
45
- if ((0, _expValEquals.expValEquals)('platform_editor_show_diff_improvements', 'isEnabled', true)) {
46
- // date node: timestamp attribute change — highlight the date node itself (inline)
47
- if (stepAttrs.some(function (v) {
48
- return dateAttrs.includes(v);
49
- }) && (nodeAtPos === null || nodeAtPos === void 0 ? void 0 : nodeAtPos.type.name) === 'date') {
50
- return {
51
- fromB: step.pos,
52
- toB: step.pos + nodeAtPos.nodeSize,
53
- isInline: true
54
- };
55
- }
56
44
 
57
- // taskItem node: state attribute change — highlight the taskItem node
58
- if (stepAttrs.some(function (v) {
59
- return taskItemAttrs.includes(v);
60
- }) && (nodeAtPos === null || nodeAtPos === void 0 ? void 0 : nodeAtPos.type.name) === 'taskItem') {
61
- return {
62
- fromB: step.pos,
63
- toB: step.pos + nodeAtPos.nodeSize
64
- };
65
- }
45
+ // date node: timestamp attribute change — highlight the date node itself (inline)
46
+ if (stepAttrs.some(function (v) {
47
+ return dateAttrs.includes(v);
48
+ }) && (nodeAtPos === null || nodeAtPos === void 0 ? void 0 : nodeAtPos.type.name) === 'date') {
49
+ return {
50
+ fromB: step.pos,
51
+ toB: step.pos + nodeAtPos.nodeSize,
52
+ isInline: true
53
+ };
54
+ }
66
55
 
67
- // extension nodes: any attribute change except localId — highlight the node
68
- if (nodeAtPos && extensionNodeNames.includes(nodeAtPos.type.name) && stepAttrs.some(function (v) {
69
- return !extensionExcludedAttrs.includes(v);
70
- })) {
71
- var isInline = nodeAtPos.type.name === 'inlineExtension';
72
- return {
73
- fromB: step.pos,
74
- toB: step.pos + nodeAtPos.nodeSize,
75
- isInline: isInline
76
- };
77
- }
56
+ // taskItem node: state attribute change — highlight the taskItem node
57
+ if (stepAttrs.some(function (v) {
58
+ return taskItemAttrs.includes(v);
59
+ }) && (nodeAtPos === null || nodeAtPos === void 0 ? void 0 : nodeAtPos.type.name) === 'taskItem') {
60
+ return {
61
+ fromB: step.pos,
62
+ toB: step.pos + nodeAtPos.nodeSize
63
+ };
64
+ }
65
+
66
+ // extension nodes: any attribute change except localId — highlight the node
67
+ if (nodeAtPos && extensionNodeNames.includes(nodeAtPos.type.name) && stepAttrs.some(function (v) {
68
+ return !extensionExcludedAttrs.includes(v);
69
+ })) {
70
+ var isInline = nodeAtPos.type.name === 'inlineExtension';
71
+ return {
72
+ fromB: step.pos,
73
+ toB: step.pos + nodeAtPos.nodeSize,
74
+ isInline: isInline
75
+ };
78
76
  }
79
77
 
80
78
  // media node: id/collection/url attribute change — highlight the mediaSingle parent
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.wrapBlockNodeView = void 0;
7
7
  var _lazyNodeView = require("@atlaskit/editor-common/lazy-node-view");
8
8
  var _messages = require("@atlaskit/editor-common/messages");
9
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
10
9
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
11
10
  var _standard = require("../colorSchemes/standard");
12
11
  var _traditional = require("../colorSchemes/traditional");
@@ -87,10 +86,7 @@ var getChangedNodeStyle = function getChangedNodeStyle(nodeName, colorScheme) {
87
86
  return undefined;
88
87
  }
89
88
  if (isTraditional) {
90
- if ((0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation')) {
91
- return isActive ? _traditional.traditionalStyleNodeActive : _traditional.traditionalStyleNodeNew;
92
- }
93
- return isActive ? _traditional.traditionalStyleNodeActive : _traditional.traditionalStyleNode;
89
+ return isActive ? _traditional.traditionalStyleNodeActive : _traditional.traditionalStyleNodeNew;
94
90
  }
95
91
  return _standard.editingStyleNode;
96
92
  }
@@ -103,13 +99,13 @@ var getChangedNodeStyle = function getChangedNodeStyle(nodeName, colorScheme) {
103
99
  case 'expand':
104
100
  case 'decisionList':
105
101
  if (isTraditional) {
106
- return isActive ? _traditional.deletedTraditionalBlockOutlineActive : (0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation') ? _traditional.deletedTraditionalBlockOutlineNew : _traditional.deletedTraditionalBlockOutline;
102
+ return isActive ? _traditional.deletedTraditionalBlockOutlineActive : _traditional.deletedTraditionalBlockOutlineNew;
107
103
  }
108
104
  return isActive ? _standard.deletedBlockOutlineActive : _standard.deletedBlockOutline;
109
105
  case 'panel':
110
106
  case 'codeBlock':
111
107
  if (isTraditional) {
112
- return isActive ? _traditional.deletedTraditionalBlockOutlineRoundedActive : (0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation') ? _traditional.deletedTraditionalBlockOutlineRoundedNew : _traditional.deletedTraditionalBlockOutlineRounded;
108
+ return isActive ? _traditional.deletedTraditionalBlockOutlineRoundedActive : _traditional.deletedTraditionalBlockOutlineRoundedNew;
113
109
  }
114
110
  return isActive ? _standard.deletedBlockOutlineRoundedActive : _standard.deletedBlockOutlineRounded;
115
111
  default:
@@ -152,7 +148,7 @@ var maybeAddDeletedOutlineNewClass = function maybeAddDeletedOutlineNewClass(_re
152
148
  if (name !== 'mediaSingle' && name !== 'embedCard') {
153
149
  return;
154
150
  }
155
- if (colorScheme === 'traditional' && !isActive && (0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation')) {
151
+ if (colorScheme === 'traditional' && !isActive) {
156
152
  nodeView.classList.add('show-diff-deleted-outline-new');
157
153
  }
158
154
  };
@@ -176,7 +172,7 @@ var applyCellOverlayStyles = function applyCellOverlayStyles(_ref2) {
176
172
  isInserted = _ref2.isInserted;
177
173
  element.querySelectorAll('td, th').forEach(function (cell) {
178
174
  var overlay = document.createElement('span');
179
- var overlayStyle = colorScheme === 'traditional' ? isInserted ? (0, _platformFeatureFlags.fg)('platform_editor_show_diff_scroll_navigation') ? _traditional.traditionalAddedCellOverlayStyleNew : _traditional.traditionalAddedCellOverlayStyle : _traditional.deletedTraditionalCellOverlayStyle : isInserted ? _standard.addedCellOverlayStyle : _standard.deletedCellOverlayStyle;
175
+ var overlayStyle = colorScheme === 'traditional' ? isInserted ? _traditional.traditionalAddedCellOverlayStyleNew : _traditional.deletedTraditionalCellOverlayStyle : isInserted ? _standard.addedCellOverlayStyle : _standard.deletedCellOverlayStyle;
180
176
  overlay.setAttribute('style', overlayStyle);
181
177
  cell.appendChild(overlay);
182
178
  });