@atlaskit/editor-plugin-show-diff 19.0.0 → 19.0.2

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 +26 -0
  2. package/dist/cjs/pm-plugins/calculateDiff/calculateDiffDecorations.js +53 -61
  3. package/dist/cjs/pm-plugins/decorations/colorSchemes/attributions.js +0 -1
  4. package/dist/cjs/pm-plugins/decorations/colorSchemes/factory.js +1 -2
  5. package/dist/cjs/pm-plugins/decorations/createAnchorDecorationWidgets.js +4 -1
  6. package/dist/cjs/pm-plugins/decorations/utils/getAttrChangeRanges.js +7 -8
  7. package/dist/cjs/pm-plugins/decorations/utils/wrapBlockNodeViewStyles.js +1 -2
  8. package/dist/cjs/pm-plugins/decorations/utils/wrapBlockNodeViewStyles.legacy.js +1 -2
  9. package/dist/cjs/ui/ContributorTag/contributorTagController.js +6 -1
  10. package/dist/es2019/pm-plugins/calculateDiff/calculateDiffDecorations.js +8 -15
  11. package/dist/es2019/pm-plugins/decorations/colorSchemes/attributions.js +0 -1
  12. package/dist/es2019/pm-plugins/decorations/colorSchemes/factory.js +1 -2
  13. package/dist/es2019/pm-plugins/decorations/createAnchorDecorationWidgets.js +4 -1
  14. package/dist/es2019/pm-plugins/decorations/utils/getAttrChangeRanges.js +7 -8
  15. package/dist/es2019/pm-plugins/decorations/utils/wrapBlockNodeViewStyles.js +1 -2
  16. package/dist/es2019/pm-plugins/decorations/utils/wrapBlockNodeViewStyles.legacy.js +2 -3
  17. package/dist/es2019/ui/ContributorTag/contributorTagController.js +4 -0
  18. package/dist/esm/pm-plugins/calculateDiff/calculateDiffDecorations.js +53 -61
  19. package/dist/esm/pm-plugins/decorations/colorSchemes/attributions.js +0 -1
  20. package/dist/esm/pm-plugins/decorations/colorSchemes/factory.js +1 -2
  21. package/dist/esm/pm-plugins/decorations/createAnchorDecorationWidgets.js +4 -1
  22. package/dist/esm/pm-plugins/decorations/utils/getAttrChangeRanges.js +7 -8
  23. package/dist/esm/pm-plugins/decorations/utils/wrapBlockNodeViewStyles.js +1 -2
  24. package/dist/esm/pm-plugins/decorations/utils/wrapBlockNodeViewStyles.legacy.js +2 -3
  25. package/dist/esm/ui/ContributorTag/contributorTagController.js +6 -1
  26. package/dist/types/pm-plugins/decorations/colorSchemes/factory.d.ts +1 -2
  27. package/dist/types/pm-plugins/decorations/utils/getAttrChangeRanges.d.ts +1 -1
  28. package/package.json +5 -5
  29. package/tsconfig.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # @atlaskit/editor-plugin-show-diff
2
2
 
3
+ ## 19.0.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [`202069bab1e36`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/202069bab1e36) -
8
+ Clean up the shipped `platform_editor_enghealth_a11y_jan_fixes` experiment. Toolbar dropdown items
9
+ now always render with `role="menuitem"` and without `aria-pressed`, the block menu always has
10
+ `role="menu"`, and show-diff deleted content always uses the a11y-fixed styles.
11
+ - [`5a9dc1baf2bde`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/5a9dc1baf2bde) -
12
+ EDITOR-9232 Clamp out-of-range suggestion slice override measurements behind
13
+ platform_editor_ai_show_diff_patch_2
14
+ - [`8e881a291b8c9`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/8e881a291b8c9) -
15
+ Keep existing parent list markers unhighlighted for nested additions behind
16
+ platform_editor_ai_review_moment.
17
+ - Updated dependencies
18
+
19
+ ## 19.0.1
20
+
21
+ ### Patch Changes
22
+
23
+ - [`27d5e74498554`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/27d5e74498554) -
24
+ Clean up feature gate `platform_editor_reduce_diff_attr_sensitivity`
25
+ - [`6fc3ffdbe2bf3`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/6fc3ffdbe2bf3) -
26
+ Use Rovo's registered brand colour in its fixed participant palette slot.
27
+ - Updated dependencies
28
+
3
29
  ## 19.0.0
4
30
 
5
31
  ### Minor Changes
@@ -253,6 +253,9 @@ var calculateNodesForBlockDecoration = function calculateNodesForBlockDecoration
253
253
  // table/row/paragraph decorations there are redundant and cause expensive per-cell
254
254
  // re-render. Blocks outside the table keep their normal decorations.
255
255
  var coarseTables = coarseTableCellsOnly ? tableRanges(doc, from, to) : [];
256
+ // nodesBetween visits ancestors that start before the changed range.
257
+ // Only fully contained blocks should mark existing list bullets as new.
258
+ var requireContainedBlocks = (0, _unsafeExpValNoExposure.UNSAFE_expValNoExposure)('platform_editor_ai_review_moment', 'isEnabled', false) === true;
256
259
  // Iterate over the document nodes within the range
257
260
  doc.nodesBetween(from, to, function (node, pos) {
258
261
  if (coarseTableCellsOnly && isInsideTable(coarseTables, pos)) {
@@ -261,7 +264,7 @@ var calculateNodesForBlockDecoration = function calculateNodesForBlockDecoration
261
264
  return;
262
265
  }
263
266
  }
264
- if (node.isBlock && (!(0, _isExtendedEnabled.isExtendedEnabled)(diffType) || pos + node.nodeSize <= to)) {
267
+ if (node.isBlock && (!(0, _isExtendedEnabled.isExtendedEnabled)(diffType) || (!requireContainedBlocks || pos >= from) && pos + node.nodeSize <= to)) {
265
268
  var _nodeEnd = pos + node.nodeSize;
266
269
  var _isActive = isRangeActive(activeIndexPos, pos, _nodeEnd);
267
270
  decorations.push.apply(decorations, (0, _toConsumableArray2.default)((0, _createBlockChangedDecoration.createBlockChangedDecoration)({
@@ -419,14 +422,14 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref8
419
422
  steppedDoc = result.doc;
420
423
  }
421
424
  }
422
- // Gate the complete attribution fix: mapped positions and step-time nodes are used together.
423
- // The fallback deliberately preserves the legacy raw-position lookups for rollout safety.
425
+ // Mapped positions and step-time nodes are used together so an attr change is attributed to the
426
+ // node it actually happened on, even when later steps move it.
424
427
  } catch (err) {
425
428
  _iterator2.e(err);
426
429
  } finally {
427
430
  _iterator2.f();
428
431
  }
429
- var attrStepContexts = (0, _fg.fg)('platform_editor_reduce_diff_attr_sensitivity') ? pendingAttrSteps.flatMap(function (_ref1) {
432
+ var attrStepContexts = pendingAttrSteps.flatMap(function (_ref1) {
430
433
  var afterNode = _ref1.afterNode,
431
434
  attributionKey = _ref1.attributionKey,
432
435
  beforeNode = _ref1.beforeNode,
@@ -447,17 +450,6 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref8
447
450
  }), {}, {
448
451
  step: step
449
452
  })];
450
- }) : pendingAttrSteps.map(function (_ref10) {
451
- var attributionKey = _ref10.attributionKey,
452
- step = _ref10.step;
453
- return {
454
- attributionKey: attributionKey,
455
- afterNode: tr.doc.nodeAt(step.pos),
456
- beforeNode: originalDoc.nodeAt(step.pos),
457
- finalPos: step.pos,
458
- originalPos: step.pos,
459
- step: step
460
- };
461
453
  });
462
454
 
463
455
  // Rather than using .eq() we use a custom function that only checks for structural
@@ -800,13 +792,13 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref8
800
792
  // smart path. Only add the legacy step-range decoration when no equivalent changeset range was
801
793
  // produced; otherwise the same content receives two inline decorations (and two navigation
802
794
  // changes), usually one attribution colour and one default purple decoration.
803
- (0, _getMarkChangeRanges.getMarkChangeRanges)(simplifiedSteps, simplifiedStepAttributions, (0, _fg.fg)('confluence_ncs_step_diffing_version_history') ? stepMaps : undefined).filter(function (_ref11) {
795
+ (0, _getMarkChangeRanges.getMarkChangeRanges)(simplifiedSteps, simplifiedStepAttributions, (0, _fg.fg)('confluence_ncs_step_diffing_version_history') ? stepMaps : undefined).filter(function (_ref10) {
796
+ var fromB = _ref10.fromB,
797
+ toB = _ref10.toB;
798
+ return !isHandledByTable(fromB, toB);
799
+ }).filter(function (_ref11) {
804
800
  var fromB = _ref11.fromB,
805
801
  toB = _ref11.toB;
806
- return !isHandledByTable(fromB, toB);
807
- }).filter(function (_ref12) {
808
- var fromB = _ref12.fromB,
809
- toB = _ref12.toB;
810
802
  return !(0, _fg.fg)('confluence_ncs_step_diffing_version_history') || !changes.some(function (change) {
811
803
  return change.fromB === fromB && change.toB === toB;
812
804
  });
@@ -828,13 +820,13 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref8
828
820
  tagMountContext: tagMountContext
829
821
  })));
830
822
  });
831
- (0, _getAttrChangeRanges.getAttrChangeRanges)(tr.doc, attrStepContexts, originalDoc).filter(function (_ref13) {
823
+ (0, _getAttrChangeRanges.getAttrChangeRanges)(tr.doc, attrStepContexts, originalDoc).filter(function (_ref12) {
824
+ var fromB = _ref12.fromB,
825
+ toB = _ref12.toB;
826
+ return !isHandledByTable(fromB, toB);
827
+ }).filter(function (_ref13) {
832
828
  var fromB = _ref13.fromB,
833
829
  toB = _ref13.toB;
834
- return !isHandledByTable(fromB, toB);
835
- }).filter(function (_ref14) {
836
- var fromB = _ref14.fromB,
837
- toB = _ref14.toB;
838
830
  return !(0, _fg.fg)('confluence_ncs_step_diffing_version_history') || !changes.some(function (change) {
839
831
  return change.fromB === fromB && change.toB === toB;
840
832
  });
@@ -944,49 +936,49 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref8
944
936
  var calculateDiffDecorations = exports.calculateDiffDecorations = (0, _memoizeOne.default)(calculateDiffDecorationsInner,
945
937
  // Cache results unless relevant inputs change. `tagMountContext` is deliberately absent: it is
946
938
  // built once per plugin instance, so it can never be the reason a diff needs recalculating.
947
- function (_ref15, _ref16) {
948
- var _ref20;
939
+ function (_ref14, _ref15) {
940
+ var _ref19;
941
+ var _ref16 = (0, _slicedToArray2.default)(_ref14, 1),
942
+ _ref16$ = _ref16[0],
943
+ pluginState = _ref16$.pluginState,
944
+ state = _ref16$.state,
945
+ colorScheme = _ref16$.colorScheme,
946
+ intl = _ref16$.intl,
947
+ activeIndexPos = _ref16$.activeIndexPos,
948
+ isInverted = _ref16$.isInverted,
949
+ diffType = _ref16$.diffType,
950
+ hideDeletedDiffs = _ref16$.hideDeletedDiffs,
951
+ hideAddedDiffsUnderline = _ref16$.hideAddedDiffsUnderline,
952
+ showIndicators = _ref16$.showIndicators,
953
+ smartThresholds = _ref16$.smartThresholds,
954
+ deletedDiffPlacement = _ref16$.deletedDiffPlacement,
955
+ inlineDeletedDiffPlacement = _ref16$.inlineDeletedDiffPlacement,
956
+ reveal = _ref16$.reveal;
949
957
  var _ref17 = (0, _slicedToArray2.default)(_ref15, 1),
950
958
  _ref17$ = _ref17[0],
951
- pluginState = _ref17$.pluginState,
952
- state = _ref17$.state,
953
- colorScheme = _ref17$.colorScheme,
954
- intl = _ref17$.intl,
955
- activeIndexPos = _ref17$.activeIndexPos,
956
- isInverted = _ref17$.isInverted,
957
- diffType = _ref17$.diffType,
958
- hideDeletedDiffs = _ref17$.hideDeletedDiffs,
959
- hideAddedDiffsUnderline = _ref17$.hideAddedDiffsUnderline,
960
- showIndicators = _ref17$.showIndicators,
961
- smartThresholds = _ref17$.smartThresholds,
962
- deletedDiffPlacement = _ref17$.deletedDiffPlacement,
963
- inlineDeletedDiffPlacement = _ref17$.inlineDeletedDiffPlacement,
964
- reveal = _ref17$.reveal;
965
- var _ref18 = (0, _slicedToArray2.default)(_ref16, 1),
966
- _ref18$ = _ref18[0],
967
- lastPluginState = _ref18$.pluginState,
968
- lastState = _ref18$.state,
969
- lastColorScheme = _ref18$.colorScheme,
970
- lastIntl = _ref18$.intl,
971
- lastActiveIndexPos = _ref18$.activeIndexPos,
972
- lastIsInverted = _ref18$.isInverted,
973
- lastDiffType = _ref18$.diffType,
974
- lastHideDeletedDiffs = _ref18$.hideDeletedDiffs,
975
- lastHideAddedDiffsUnderline = _ref18$.hideAddedDiffsUnderline,
976
- lastShowIndicators = _ref18$.showIndicators,
977
- lastSmartThresholds = _ref18$.smartThresholds,
978
- lastDeletedDiffPlacement = _ref18$.deletedDiffPlacement,
979
- lastInlineDeletedDiffPlacement = _ref18$.inlineDeletedDiffPlacement,
980
- lastReveal = _ref18$.reveal;
959
+ lastPluginState = _ref17$.pluginState,
960
+ lastState = _ref17$.state,
961
+ lastColorScheme = _ref17$.colorScheme,
962
+ lastIntl = _ref17$.intl,
963
+ lastActiveIndexPos = _ref17$.activeIndexPos,
964
+ lastIsInverted = _ref17$.isInverted,
965
+ lastDiffType = _ref17$.diffType,
966
+ lastHideDeletedDiffs = _ref17$.hideDeletedDiffs,
967
+ lastHideAddedDiffsUnderline = _ref17$.hideAddedDiffsUnderline,
968
+ lastShowIndicators = _ref17$.showIndicators,
969
+ lastSmartThresholds = _ref17$.smartThresholds,
970
+ lastDeletedDiffPlacement = _ref17$.deletedDiffPlacement,
971
+ lastInlineDeletedDiffPlacement = _ref17$.inlineDeletedDiffPlacement,
972
+ lastReveal = _ref17$.reveal;
981
973
  var originalDocIsSame = lastPluginState.originalDoc && pluginState.originalDoc && pluginState.originalDoc.eq(lastPluginState.originalDoc);
982
974
  if ((0, _isExtendedEnabled.isExtendedEnabled)(diffType)) {
983
- var _ref19;
984
- return (_ref19 = colorScheme === lastColorScheme && intl.locale === lastIntl.locale && isInverted === lastIsInverted && diffType === lastDiffType && (0, _isEqual.default)(activeIndexPos, lastActiveIndexPos) && originalDocIsSame && (0, _isEqual.default)(pluginState.steps, lastPluginState.steps) && (0, _isEqual.default)(pluginState.stepAttributions, lastPluginState.stepAttributions) &&
975
+ var _ref18;
976
+ return (_ref18 = colorScheme === lastColorScheme && intl.locale === lastIntl.locale && isInverted === lastIsInverted && diffType === lastDiffType && (0, _isEqual.default)(activeIndexPos, lastActiveIndexPos) && originalDocIsSame && (0, _isEqual.default)(pluginState.steps, lastPluginState.steps) && (0, _isEqual.default)(pluginState.stepAttributions, lastPluginState.stepAttributions) &&
985
977
  // Contributors can arrive after the first calculation; without this, tags never appear.
986
978
  (0, _isEqual.default)(pluginState.contributors, lastPluginState.contributors) && state.doc.eq(lastState.doc) && hideDeletedDiffs === lastHideDeletedDiffs && hideAddedDiffsUnderline === lastHideAddedDiffsUnderline && showIndicators === lastShowIndicators && (0, _isEqual.default)(smartThresholds, lastSmartThresholds) && deletedDiffPlacement === lastDeletedDiffPlacement && inlineDeletedDiffPlacement === lastInlineDeletedDiffPlacement &&
987
979
  // Turning the reveal on or off changes the emitted styles, so a cached result from the
988
980
  // other setting would leave the diff painted in the wrong resting state.
989
- (0, _isEqual.default)(reveal, lastReveal)) !== null && _ref19 !== void 0 ? _ref19 : false;
981
+ (0, _isEqual.default)(reveal, lastReveal)) !== null && _ref18 !== void 0 ? _ref18 : false;
990
982
  }
991
- return (_ref20 = originalDocIsSame && (0, _isEqual.default)(pluginState.steps, lastPluginState.steps) && (0, _isEqual.default)(pluginState.stepAttributions, lastPluginState.stepAttributions) && (0, _isEqual.default)(pluginState.contributors, lastPluginState.contributors) && state.doc.eq(lastState.doc) && colorScheme === lastColorScheme && intl.locale === lastIntl.locale && (0, _isEqual.default)(activeIndexPos, lastActiveIndexPos) && hideDeletedDiffs === lastHideDeletedDiffs) !== null && _ref20 !== void 0 ? _ref20 : false;
983
+ return (_ref19 = originalDocIsSame && (0, _isEqual.default)(pluginState.steps, lastPluginState.steps) && (0, _isEqual.default)(pluginState.stepAttributions, lastPluginState.stepAttributions) && (0, _isEqual.default)(pluginState.contributors, lastPluginState.contributors) && state.doc.eq(lastState.doc) && colorScheme === lastColorScheme && intl.locale === lastIntl.locale && (0, _isEqual.default)(activeIndexPos, lastActiveIndexPos) && hideDeletedDiffs === lastHideDeletedDiffs) !== null && _ref19 !== void 0 ? _ref19 : false;
992
984
  });
@@ -106,7 +106,6 @@ var getAgentBrandForColor = function getAgentBrandForColor(attribution, contribu
106
106
  var agentBrand = contributors === null || contributors === void 0 || (_contributors = contributors[(_getAttributionKey = getAttributionKey(attribution)) !== null && _getAttributionKey !== void 0 ? _getAttributionKey : '']) === null || _contributors === void 0 ? void 0 : _contributors.agentKind;
107
107
  return isDiffAgentBrand(agentBrand) ? agentBrand : attribution === null || attribution === void 0 ? void 0 : attribution.agentType;
108
108
  };
109
-
110
109
  /**
111
110
  * Public contributor list to internal key-addressed record. A contributor whose attribution carries
112
111
  * no identity is dropped, since it could never match a step. Later entries win.
@@ -1183,8 +1183,7 @@ function buildDeletedInlineNodeCSSVariables(colors, isActive) {
1183
1183
  *
1184
1184
  * The three `stateful`-only variables are omitted for `static` (standard) so editor-core's fallback
1185
1185
  * wins, which is what standard rendered before:
1186
- * - `--diff-delete-opacity` — the fallback is 0.6 or 0.8 depending on
1187
- * `platform_editor_enghealth_a11y_jan_fixes`, a split the scheme must not flatten.
1186
+ * - `--diff-delete-opacity` — standard falls through to editor-core's 0.8 fallback.
1188
1187
  * - `--diff-delete-ring-width` — traditional's deleted media ring tracks the inherited marker ring
1189
1188
  * width instead of a fixed 1px.
1190
1189
  * - `--diff-delete-text-decoration-color` — standard's blockquote strike must stay `currentColor`.
@@ -131,7 +131,10 @@ var getEdgeCasesForSlice = function getEdgeCasesForSlice(doc, from, slice, measu
131
131
  var targets = [];
132
132
  // edge cases can only be top level nodes, so we only care about the top level nodes in the slice
133
133
  slice.content.forEach(function (node, offset) {
134
- var edgeCase = edgeCases(doc, from + offset, node);
134
+ // the node can be outside the doc if we have a sliceOverride which adds additional new content
135
+ // but we still need to the edgeCases to resolve a node in the doc to attach the widget to
136
+ // and we use the provided measureElement to make sure it is in the right position
137
+ var edgeCase = edgeCases(doc, Math.min(from + offset, doc.content.size - 1), node);
135
138
  if (edgeCase) {
136
139
  targets.push(_objectSpread(_objectSpread({}, edgeCase), {}, {
137
140
  measureElement: measureElement
@@ -11,7 +11,6 @@ var _omit = _interopRequireDefault(require("lodash/omit"));
11
11
  var _setAttrs = require("@atlaskit/adf-schema/steps/set-attrs");
12
12
  var _nodeTypeUtils = require("@atlaskit/editor-common/utils/node-type-utils");
13
13
  var _transform = require("@atlaskit/editor-prosemirror/transform");
14
- var _fg = require("@atlaskit/platform-feature-flags/fg");
15
14
  var _diffableAttrs = require("./diffableAttrs");
16
15
  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; }
17
16
  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; }
@@ -75,10 +74,10 @@ var getAttrChangeRanges = exports.getAttrChangeRanges = function getAttrChangeRa
75
74
  return undefined;
76
75
  }
77
76
  var stepAttrs = getStepAttrs(step);
78
- // SetAttrsStep contains the complete replacement attrs, not only the attrs that changed.
79
- // Keep the legacy payload-based checks until the rollout gate is enabled, and fall back
80
- // to them if either step-time node is unavailable.
81
- var attrsToCheck = (0, _fg.fg)('platform_editor_reduce_diff_attr_sensitivity') && beforeNode && afterNode ? stepAttrs.filter(function (attrName) {
77
+ // SetAttrsStep contains the complete replacement attrs, not only the attrs that changed,
78
+ // so narrow it to the attrs whose values actually differ. Fall back to the full step
79
+ // payload if either step-time node is unavailable.
80
+ var attrsToCheck = beforeNode && afterNode ? stepAttrs.filter(function (attrName) {
82
81
  return !(0, _isEqual.default)(beforeNode.attrs[attrName], afterNode.attrs[attrName]);
83
82
  }) : stepAttrs;
84
83
  var $pos = doc.resolve(finalPos);
@@ -139,12 +138,12 @@ var getAttrChangeRanges = exports.getAttrChangeRanges = function getAttrChangeRa
139
138
  });
140
139
  }
141
140
 
142
- // Extension nodes: highlight changes to user-visible configuration. When enabled,
143
- // transient extension metadata is ignored by the comparison below.
141
+ // Extension nodes: highlight changes to user-visible configuration. Transient extension
142
+ // metadata is ignored by the comparison below.
144
143
  if (nodeAtPos && extensionNodeNames.includes(nodeAtPos.type.name) && attrsToCheck.some(function (v) {
145
144
  return (0, _diffableAttrs.isDiffableAttr)(nodeAtPos.type.name, v);
146
145
  })) {
147
- if ((0, _fg.fg)('platform_editor_reduce_diff_attr_sensitivity') && beforeNode && afterNode && beforeNode.type === afterNode.type && haveSameRelevantExtensionAttrs(beforeNode, afterNode)) {
146
+ if (beforeNode && afterNode && beforeNode.type === afterNode.type && haveSameRelevantExtensionAttrs(beforeNode, afterNode)) {
148
147
  return undefined;
149
148
  }
150
149
  var isInline = nodeAtPos.type.name === 'inlineExtension';
@@ -8,7 +8,6 @@ exports.resolveRemovedLozengeStyle = exports.resolveNestedInsertedNodeStyle = ex
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
10
10
  var _fg = require("@atlaskit/platform-feature-flags/fg");
11
- var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
12
11
  var _isExtendedEnabled = require("../../isExtendedEnabled");
13
12
  var _factory = require("../colorSchemes/factory");
14
13
  var _schemes = require("../colorSchemes/schemes");
@@ -54,7 +53,7 @@ var getChangedContentStyleNext = function getChangedContentStyleNext(colorScheme
54
53
  if ((0, _isExtendedEnabled.isExtendedEnabled)(diffType) && isInserted) {
55
54
  return (0, _factory.buildInsertedInlineStyle)(colors, isActive, hideAddedDiffsUnderline);
56
55
  }
57
- var base = (0, _factory.buildDeletedInlineContentStyle)(colors, isActive ? 'active' : (0, _expValEquals.expValEquals)('platform_editor_enghealth_a11y_jan_fixes', 'isEnabled', true) ? 'new' : 'default');
56
+ var base = (0, _factory.buildDeletedInlineContentStyle)(colors, isActive ? 'active' : 'new');
58
57
 
59
58
  // Text-like blocks (heading, lists, blockquote) render their deleted content through this
60
59
  // getter rather than `getDeletedContentStyle`, so without this they never receive the
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.resolveRemovedLozengeStyleLegacy = exports.resolveNestedInsertedNodeStyleLegacy = exports.resolveCellOverlayStyleLegacy = exports.hasRestingDeletedRingLegacy = exports.getInsertedContentStyleLegacy = exports.getDeletedContentStyleUnboundedLegacy = exports.getDeletedContentStyleLegacy = exports.getChangedNodeStyleLegacy = exports.getChangedContentStyleLegacy = void 0;
7
7
  var _lazyNodeView = require("@atlaskit/editor-common/lazy-node-view");
8
8
  var _fg = require("@atlaskit/platform-feature-flags/fg");
9
- var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
10
9
  var _isExtendedEnabled = require("../../isExtendedEnabled");
11
10
  var _standard = require("../colorSchemes/standard");
12
11
  var _traditional = require("../colorSchemes/traditional");
@@ -101,7 +100,7 @@ var getChangedContentStyleLegacy = exports.getChangedContentStyleLegacy = functi
101
100
  if (isActive) {
102
101
  return (0, _standard.getStandardDeletedContentStyleActive)();
103
102
  }
104
- return (0, _expValEquals.expValEquals)('platform_editor_enghealth_a11y_jan_fixes', 'isEnabled', true) ? (0, _standard.getStandardDeletedContentStyleNew)() : (0, _standard.getStandardDeletedContentStyle)();
103
+ return (0, _standard.getStandardDeletedContentStyleNew)();
105
104
  };
106
105
 
107
106
  /** Pre-refactor node-specific style for a changed block node. */
@@ -38,7 +38,12 @@ var chatgptBrandColor = (0, _getThirdPartyAgentColor.getThirdPartyAgentColor)({
38
38
  });
39
39
 
40
40
  /** Brand accents for agent kinds with no ADS token match. New agents opt in by adding an entry. */
41
- var AGENT_KIND_ACCENT_OVERRIDES = _objectSpread({}, chatgptBrandColor ? {
41
+ var AGENT_KIND_ACCENT_OVERRIDES = _objectSpread({
42
+ rovo: {
43
+ background: "var(--ds-background-neutral-bold, #292A2E)",
44
+ text: "var(--ds-text-inverse, #FFFFFF)"
45
+ }
46
+ }, chatgptBrandColor ? {
42
47
  chatgpt: {
43
48
  background: chatgptBrandColor.bold,
44
49
  text: chatgptBrandColor.boldText
@@ -221,6 +221,9 @@ const calculateNodesForBlockDecoration = ({
221
221
  // table/row/paragraph decorations there are redundant and cause expensive per-cell
222
222
  // re-render. Blocks outside the table keep their normal decorations.
223
223
  const coarseTables = coarseTableCellsOnly ? tableRanges(doc, from, to) : [];
224
+ // nodesBetween visits ancestors that start before the changed range.
225
+ // Only fully contained blocks should mark existing list bullets as new.
226
+ const requireContainedBlocks = UNSAFE_expValNoExposure('platform_editor_ai_review_moment', 'isEnabled', false) === true;
224
227
  // Iterate over the document nodes within the range
225
228
  doc.nodesBetween(from, to, (node, pos) => {
226
229
  if (coarseTableCellsOnly && isInsideTable(coarseTables, pos)) {
@@ -229,7 +232,7 @@ const calculateNodesForBlockDecoration = ({
229
232
  return;
230
233
  }
231
234
  }
232
- if (node.isBlock && (!isExtendedEnabled(diffType) || pos + node.nodeSize <= to)) {
235
+ if (node.isBlock && (!isExtendedEnabled(diffType) || (!requireContainedBlocks || pos >= from) && pos + node.nodeSize <= to)) {
233
236
  const nodeEnd = pos + node.nodeSize;
234
237
  const isActive = isRangeActive(activeIndexPos, pos, nodeEnd);
235
238
  decorations.push(...createBlockChangedDecoration({
@@ -377,9 +380,9 @@ const calculateDiffDecorationsInner = ({
377
380
  steppedDoc = result.doc;
378
381
  }
379
382
  }
380
- // Gate the complete attribution fix: mapped positions and step-time nodes are used together.
381
- // The fallback deliberately preserves the legacy raw-position lookups for rollout safety.
382
- const attrStepContexts = fg('platform_editor_reduce_diff_attr_sensitivity') ? pendingAttrSteps.flatMap(({
383
+ // Mapped positions and step-time nodes are used together so an attr change is attributed to the
384
+ // node it actually happened on, even when later steps move it.
385
+ const attrStepContexts = pendingAttrSteps.flatMap(({
383
386
  afterNode,
384
387
  attributionKey,
385
388
  beforeNode,
@@ -401,17 +404,7 @@ const calculateDiffDecorationsInner = ({
401
404
  }),
402
405
  step
403
406
  }];
404
- }) : pendingAttrSteps.map(({
405
- attributionKey,
406
- step
407
- }) => ({
408
- attributionKey,
409
- afterNode: tr.doc.nodeAt(step.pos),
410
- beforeNode: originalDoc.nodeAt(step.pos),
411
- finalPos: step.pos,
412
- originalPos: step.pos,
413
- step
414
- }));
407
+ });
415
408
 
416
409
  // Rather than using .eq() we use a custom function that only checks for structural
417
410
  // changes and ignores differences in attributes which don't affect decoration positions
@@ -86,7 +86,6 @@ const getAgentBrandForColor = (attribution, contributors) => {
86
86
  const agentBrand = contributors === null || contributors === void 0 ? void 0 : (_contributors = contributors[(_getAttributionKey = getAttributionKey(attribution)) !== null && _getAttributionKey !== void 0 ? _getAttributionKey : '']) === null || _contributors === void 0 ? void 0 : _contributors.agentKind;
87
87
  return isDiffAgentBrand(agentBrand) ? agentBrand : attribution === null || attribution === void 0 ? void 0 : attribution.agentType;
88
88
  };
89
-
90
89
  /**
91
90
  * Public contributor list to internal key-addressed record. A contributor whose attribution carries
92
91
  * no identity is dropped, since it could never match a step. Later entries win.
@@ -1106,8 +1106,7 @@ export function buildDeletedInlineNodeCSSVariables(colors, isActive) {
1106
1106
  *
1107
1107
  * The three `stateful`-only variables are omitted for `static` (standard) so editor-core's fallback
1108
1108
  * wins, which is what standard rendered before:
1109
- * - `--diff-delete-opacity` — the fallback is 0.6 or 0.8 depending on
1110
- * `platform_editor_enghealth_a11y_jan_fixes`, a split the scheme must not flatten.
1109
+ * - `--diff-delete-opacity` — standard falls through to editor-core's 0.8 fallback.
1111
1110
  * - `--diff-delete-ring-width` — traditional's deleted media ring tracks the inherited marker ring
1112
1111
  * width instead of a fixed 1px.
1113
1112
  * - `--diff-delete-text-decoration-color` — standard's blockquote strike must stay `currentColor`.
@@ -118,7 +118,10 @@ const getEdgeCasesForSlice = (doc, from, slice, measureElement) => {
118
118
  const targets = [];
119
119
  // edge cases can only be top level nodes, so we only care about the top level nodes in the slice
120
120
  slice.content.forEach((node, offset) => {
121
- const edgeCase = edgeCases(doc, from + offset, node);
121
+ // the node can be outside the doc if we have a sliceOverride which adds additional new content
122
+ // but we still need to the edgeCases to resolve a node in the doc to attach the widget to
123
+ // and we use the provided measureElement to make sure it is in the right position
124
+ const edgeCase = edgeCases(doc, Math.min(from + offset, doc.content.size - 1), node);
122
125
  if (edgeCase) {
123
126
  targets.push({
124
127
  ...edgeCase,
@@ -3,7 +3,6 @@ import omit from 'lodash/omit';
3
3
  import { SetAttrsStep } from '@atlaskit/adf-schema/steps/set-attrs';
4
4
  import { getBaseNodeTypeName } from '@atlaskit/editor-common/utils/node-type-utils';
5
5
  import { AttrStep } from '@atlaskit/editor-prosemirror/transform';
6
- import { fg } from '@atlaskit/platform-feature-flags/fg';
7
6
  import { getRequiredIncludedDiffableAttrs, isDiffableAttr } from './diffableAttrs';
8
7
  const filterUndefined = x => !!x;
9
8
 
@@ -59,10 +58,10 @@ export const getAttrChangeRanges = (doc, attrStepContexts, originalDoc) => {
59
58
  return undefined;
60
59
  }
61
60
  const stepAttrs = getStepAttrs(step);
62
- // SetAttrsStep contains the complete replacement attrs, not only the attrs that changed.
63
- // Keep the legacy payload-based checks until the rollout gate is enabled, and fall back
64
- // to them if either step-time node is unavailable.
65
- const attrsToCheck = fg('platform_editor_reduce_diff_attr_sensitivity') && beforeNode && afterNode ? stepAttrs.filter(attrName => !isEqual(beforeNode.attrs[attrName], afterNode.attrs[attrName])) : stepAttrs;
61
+ // SetAttrsStep contains the complete replacement attrs, not only the attrs that changed,
62
+ // so narrow it to the attrs whose values actually differ. Fall back to the full step
63
+ // payload if either step-time node is unavailable.
64
+ const attrsToCheck = beforeNode && afterNode ? stepAttrs.filter(attrName => !isEqual(beforeNode.attrs[attrName], afterNode.attrs[attrName])) : stepAttrs;
66
65
  const $pos = doc.resolve(finalPos);
67
66
  const nodeAtPos = doc.nodeAt(finalPos);
68
67
  const originalNodeAtPos = originalPos === undefined ? null : originalDoc.nodeAt(originalPos);
@@ -120,10 +119,10 @@ export const getAttrChangeRanges = (doc, attrStepContexts, originalDoc) => {
120
119
  };
121
120
  }
122
121
 
123
- // Extension nodes: highlight changes to user-visible configuration. When enabled,
124
- // transient extension metadata is ignored by the comparison below.
122
+ // Extension nodes: highlight changes to user-visible configuration. Transient extension
123
+ // metadata is ignored by the comparison below.
125
124
  if (nodeAtPos && extensionNodeNames.includes(nodeAtPos.type.name) && attrsToCheck.some(v => isDiffableAttr(nodeAtPos.type.name, v))) {
126
- if (fg('platform_editor_reduce_diff_attr_sensitivity') && beforeNode && afterNode && beforeNode.type === afterNode.type && haveSameRelevantExtensionAttrs(beforeNode, afterNode)) {
125
+ if (beforeNode && afterNode && beforeNode.type === afterNode.type && haveSameRelevantExtensionAttrs(beforeNode, afterNode)) {
127
126
  return undefined;
128
127
  }
129
128
  const isInline = nodeAtPos.type.name === 'inlineExtension';
@@ -12,7 +12,6 @@
12
12
  */
13
13
  import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
14
14
  import { fg } from '@atlaskit/platform-feature-flags/fg';
15
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
16
15
  import { isExtendedEnabled } from '../../isExtendedEnabled';
17
16
  import { buildAddedCellOverlayRoundedStyle, buildAddedCellOverlayStyle, buildAddedCellOverlayStyleNew, buildDeletedCellOverlayRoundedStyle, buildDeletedCellOverlayStyle, buildDeletedInlineContentStyle, buildDeletedInlineContentStyleExtended, buildDeletedLozengeActiveStyle, buildDeletedLozengeStyle, buildDeletedNodeCSSVariables, buildDeletedQuoteNodeWithLozengeStyle, buildDeletedStrikethroughLine, buildDeletedWrappedBlockOutline, buildInsertedBlockNodeStyle, buildInsertedInlineStyle, buildInsertStyleInBlockExtended, buildInsertStyleInBlockExtendedNoUnderline, buildInsertStyleNode } from '../colorSchemes/factory';
18
17
  import { colorSchemeRegistry, getLegacyColorScheme, standardScheme } from '../colorSchemes/schemes';
@@ -39,7 +38,7 @@ const getChangedContentStyleNext = (colorScheme, isActive = false, isInserted =
39
38
  if (isExtendedEnabled(diffType) && isInserted) {
40
39
  return buildInsertedInlineStyle(colors, isActive, hideAddedDiffsUnderline);
41
40
  }
42
- const base = buildDeletedInlineContentStyle(colors, isActive ? 'active' : expValEquals('platform_editor_enghealth_a11y_jan_fixes', 'isEnabled', true) ? 'new' : 'default');
41
+ const base = buildDeletedInlineContentStyle(colors, isActive ? 'active' : 'new');
43
42
 
44
43
  // Text-like blocks (heading, lists, blockquote) render their deleted content through this
45
44
  // getter rather than `getDeletedContentStyle`, so without this they never receive the
@@ -10,9 +10,8 @@
10
10
  */
11
11
  import { convertToInlineCss } from '@atlaskit/editor-common/lazy-node-view';
12
12
  import { fg } from '@atlaskit/platform-feature-flags/fg';
13
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
14
13
  import { isExtendedEnabled } from '../../isExtendedEnabled';
15
- import { deletedBlockOutline, deletedBlockOutlineActive, deletedBlockOutlineRounded, deletedBlockOutlineRoundedActive, deletedContentStyleUnbounded, deletedInlineContentStyleExtended, deletedStyleQuoteNodeWithLozenge, deletedStyleQuoteNodeWithLozengeActive, editingContentStyleInBlockExtended, editingContentStyleInBlockExtendedNoUnderline, editingStyleExtended, editingStyleExtendedNoUnderline, editingStyleActiveExtended, editingStyleActiveExtendedNoUnderline, editingStyleNode, getStandardDeletedContentStyle, getStandardDeletedContentStyleActive, getStandardDeletedContentStyleNew, addedCellOverlayStyle, addedCellOverlayRoundedStyle, deletedCellOverlayStyle, deletedCellOverlayRoundedStyle } from '../colorSchemes/standard';
14
+ import { deletedBlockOutline, deletedBlockOutlineActive, deletedBlockOutlineRounded, deletedBlockOutlineRoundedActive, deletedContentStyleUnbounded, deletedInlineContentStyleExtended, deletedStyleQuoteNodeWithLozenge, deletedStyleQuoteNodeWithLozengeActive, editingContentStyleInBlockExtended, editingContentStyleInBlockExtendedNoUnderline, editingStyleExtended, editingStyleExtendedNoUnderline, editingStyleActiveExtended, editingStyleActiveExtendedNoUnderline, editingStyleNode, getStandardDeletedContentStyleActive, getStandardDeletedContentStyleNew, addedCellOverlayStyle, addedCellOverlayRoundedStyle, deletedCellOverlayStyle, deletedCellOverlayRoundedStyle } from '../colorSchemes/standard';
16
15
  import { deletedTraditionalBlockOutlineActive, deletedTraditionalBlockOutlineNew, deletedTraditionalBlockOutlineRoundedActive, deletedTraditionalBlockOutlineRoundedNew, deletedTraditionalContentStyleUnbounded, deletedTraditionalContentStyleUnboundedActive, getDeletedTraditionalInlineStyle, deletedTraditionalStyleQuoteNode, deletedTraditionalStyleQuoteNodeActive, traditionalInsertStyle, traditionalInsertStyleActive, traditionalStyleNodeActive, traditionalStyleNodeNew, traditionalAddedCellOverlayRoundedStyle, traditionalAddedCellOverlayStyleNew, deletedTraditionalCellOverlayStyle, deletedTraditionalCellOverlayRoundedStyle } from '../colorSchemes/traditional';
17
16
  const lozengeStyle = convertToInlineCss({
18
17
  display: 'inline-flex',
@@ -90,7 +89,7 @@ export const getChangedContentStyleLegacy = (colorScheme, isActive = false, isIn
90
89
  if (isActive) {
91
90
  return getStandardDeletedContentStyleActive();
92
91
  }
93
- return expValEquals('platform_editor_enghealth_a11y_jan_fixes', 'isEnabled', true) ? getStandardDeletedContentStyleNew() : getStandardDeletedContentStyle();
92
+ return getStandardDeletedContentStyleNew();
94
93
  };
95
94
 
96
95
  /** Pre-refactor node-specific style for a changed block node. */
@@ -28,6 +28,10 @@ const chatgptBrandColor = getThirdPartyAgentColor({
28
28
 
29
29
  /** Brand accents for agent kinds with no ADS token match. New agents opt in by adding an entry. */
30
30
  const AGENT_KIND_ACCENT_OVERRIDES = {
31
+ rovo: {
32
+ background: "var(--ds-background-neutral-bold, #292A2E)",
33
+ text: "var(--ds-text-inverse, #FFFFFF)"
34
+ },
31
35
  ...(chatgptBrandColor ? {
32
36
  chatgpt: {
33
37
  background: chatgptBrandColor.bold,
@@ -246,6 +246,9 @@ var calculateNodesForBlockDecoration = function calculateNodesForBlockDecoration
246
246
  // table/row/paragraph decorations there are redundant and cause expensive per-cell
247
247
  // re-render. Blocks outside the table keep their normal decorations.
248
248
  var coarseTables = coarseTableCellsOnly ? tableRanges(doc, from, to) : [];
249
+ // nodesBetween visits ancestors that start before the changed range.
250
+ // Only fully contained blocks should mark existing list bullets as new.
251
+ var requireContainedBlocks = UNSAFE_expValNoExposure('platform_editor_ai_review_moment', 'isEnabled', false) === true;
249
252
  // Iterate over the document nodes within the range
250
253
  doc.nodesBetween(from, to, function (node, pos) {
251
254
  if (coarseTableCellsOnly && isInsideTable(coarseTables, pos)) {
@@ -254,7 +257,7 @@ var calculateNodesForBlockDecoration = function calculateNodesForBlockDecoration
254
257
  return;
255
258
  }
256
259
  }
257
- if (node.isBlock && (!isExtendedEnabled(diffType) || pos + node.nodeSize <= to)) {
260
+ if (node.isBlock && (!isExtendedEnabled(diffType) || (!requireContainedBlocks || pos >= from) && pos + node.nodeSize <= to)) {
258
261
  var _nodeEnd = pos + node.nodeSize;
259
262
  var _isActive = isRangeActive(activeIndexPos, pos, _nodeEnd);
260
263
  decorations.push.apply(decorations, _toConsumableArray(createBlockChangedDecoration({
@@ -412,14 +415,14 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref8
412
415
  steppedDoc = result.doc;
413
416
  }
414
417
  }
415
- // Gate the complete attribution fix: mapped positions and step-time nodes are used together.
416
- // The fallback deliberately preserves the legacy raw-position lookups for rollout safety.
418
+ // Mapped positions and step-time nodes are used together so an attr change is attributed to the
419
+ // node it actually happened on, even when later steps move it.
417
420
  } catch (err) {
418
421
  _iterator2.e(err);
419
422
  } finally {
420
423
  _iterator2.f();
421
424
  }
422
- var attrStepContexts = fg('platform_editor_reduce_diff_attr_sensitivity') ? pendingAttrSteps.flatMap(function (_ref1) {
425
+ var attrStepContexts = pendingAttrSteps.flatMap(function (_ref1) {
423
426
  var afterNode = _ref1.afterNode,
424
427
  attributionKey = _ref1.attributionKey,
425
428
  beforeNode = _ref1.beforeNode,
@@ -440,17 +443,6 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref8
440
443
  }), {}, {
441
444
  step: step
442
445
  })];
443
- }) : pendingAttrSteps.map(function (_ref10) {
444
- var attributionKey = _ref10.attributionKey,
445
- step = _ref10.step;
446
- return {
447
- attributionKey: attributionKey,
448
- afterNode: tr.doc.nodeAt(step.pos),
449
- beforeNode: originalDoc.nodeAt(step.pos),
450
- finalPos: step.pos,
451
- originalPos: step.pos,
452
- step: step
453
- };
454
446
  });
455
447
 
456
448
  // Rather than using .eq() we use a custom function that only checks for structural
@@ -793,13 +785,13 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref8
793
785
  // smart path. Only add the legacy step-range decoration when no equivalent changeset range was
794
786
  // produced; otherwise the same content receives two inline decorations (and two navigation
795
787
  // changes), usually one attribution colour and one default purple decoration.
796
- getMarkChangeRanges(simplifiedSteps, simplifiedStepAttributions, fg('confluence_ncs_step_diffing_version_history') ? stepMaps : undefined).filter(function (_ref11) {
788
+ getMarkChangeRanges(simplifiedSteps, simplifiedStepAttributions, fg('confluence_ncs_step_diffing_version_history') ? stepMaps : undefined).filter(function (_ref10) {
789
+ var fromB = _ref10.fromB,
790
+ toB = _ref10.toB;
791
+ return !isHandledByTable(fromB, toB);
792
+ }).filter(function (_ref11) {
797
793
  var fromB = _ref11.fromB,
798
794
  toB = _ref11.toB;
799
- return !isHandledByTable(fromB, toB);
800
- }).filter(function (_ref12) {
801
- var fromB = _ref12.fromB,
802
- toB = _ref12.toB;
803
795
  return !fg('confluence_ncs_step_diffing_version_history') || !changes.some(function (change) {
804
796
  return change.fromB === fromB && change.toB === toB;
805
797
  });
@@ -821,13 +813,13 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref8
821
813
  tagMountContext: tagMountContext
822
814
  })));
823
815
  });
824
- getAttrChangeRanges(tr.doc, attrStepContexts, originalDoc).filter(function (_ref13) {
816
+ getAttrChangeRanges(tr.doc, attrStepContexts, originalDoc).filter(function (_ref12) {
817
+ var fromB = _ref12.fromB,
818
+ toB = _ref12.toB;
819
+ return !isHandledByTable(fromB, toB);
820
+ }).filter(function (_ref13) {
825
821
  var fromB = _ref13.fromB,
826
822
  toB = _ref13.toB;
827
- return !isHandledByTable(fromB, toB);
828
- }).filter(function (_ref14) {
829
- var fromB = _ref14.fromB,
830
- toB = _ref14.toB;
831
823
  return !fg('confluence_ncs_step_diffing_version_history') || !changes.some(function (change) {
832
824
  return change.fromB === fromB && change.toB === toB;
833
825
  });
@@ -937,49 +929,49 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref8
937
929
  export var calculateDiffDecorations = memoizeOne(calculateDiffDecorationsInner,
938
930
  // Cache results unless relevant inputs change. `tagMountContext` is deliberately absent: it is
939
931
  // built once per plugin instance, so it can never be the reason a diff needs recalculating.
940
- function (_ref15, _ref16) {
941
- var _ref20;
932
+ function (_ref14, _ref15) {
933
+ var _ref19;
934
+ var _ref16 = _slicedToArray(_ref14, 1),
935
+ _ref16$ = _ref16[0],
936
+ pluginState = _ref16$.pluginState,
937
+ state = _ref16$.state,
938
+ colorScheme = _ref16$.colorScheme,
939
+ intl = _ref16$.intl,
940
+ activeIndexPos = _ref16$.activeIndexPos,
941
+ isInverted = _ref16$.isInverted,
942
+ diffType = _ref16$.diffType,
943
+ hideDeletedDiffs = _ref16$.hideDeletedDiffs,
944
+ hideAddedDiffsUnderline = _ref16$.hideAddedDiffsUnderline,
945
+ showIndicators = _ref16$.showIndicators,
946
+ smartThresholds = _ref16$.smartThresholds,
947
+ deletedDiffPlacement = _ref16$.deletedDiffPlacement,
948
+ inlineDeletedDiffPlacement = _ref16$.inlineDeletedDiffPlacement,
949
+ reveal = _ref16$.reveal;
942
950
  var _ref17 = _slicedToArray(_ref15, 1),
943
951
  _ref17$ = _ref17[0],
944
- pluginState = _ref17$.pluginState,
945
- state = _ref17$.state,
946
- colorScheme = _ref17$.colorScheme,
947
- intl = _ref17$.intl,
948
- activeIndexPos = _ref17$.activeIndexPos,
949
- isInverted = _ref17$.isInverted,
950
- diffType = _ref17$.diffType,
951
- hideDeletedDiffs = _ref17$.hideDeletedDiffs,
952
- hideAddedDiffsUnderline = _ref17$.hideAddedDiffsUnderline,
953
- showIndicators = _ref17$.showIndicators,
954
- smartThresholds = _ref17$.smartThresholds,
955
- deletedDiffPlacement = _ref17$.deletedDiffPlacement,
956
- inlineDeletedDiffPlacement = _ref17$.inlineDeletedDiffPlacement,
957
- reveal = _ref17$.reveal;
958
- var _ref18 = _slicedToArray(_ref16, 1),
959
- _ref18$ = _ref18[0],
960
- lastPluginState = _ref18$.pluginState,
961
- lastState = _ref18$.state,
962
- lastColorScheme = _ref18$.colorScheme,
963
- lastIntl = _ref18$.intl,
964
- lastActiveIndexPos = _ref18$.activeIndexPos,
965
- lastIsInverted = _ref18$.isInverted,
966
- lastDiffType = _ref18$.diffType,
967
- lastHideDeletedDiffs = _ref18$.hideDeletedDiffs,
968
- lastHideAddedDiffsUnderline = _ref18$.hideAddedDiffsUnderline,
969
- lastShowIndicators = _ref18$.showIndicators,
970
- lastSmartThresholds = _ref18$.smartThresholds,
971
- lastDeletedDiffPlacement = _ref18$.deletedDiffPlacement,
972
- lastInlineDeletedDiffPlacement = _ref18$.inlineDeletedDiffPlacement,
973
- lastReveal = _ref18$.reveal;
952
+ lastPluginState = _ref17$.pluginState,
953
+ lastState = _ref17$.state,
954
+ lastColorScheme = _ref17$.colorScheme,
955
+ lastIntl = _ref17$.intl,
956
+ lastActiveIndexPos = _ref17$.activeIndexPos,
957
+ lastIsInverted = _ref17$.isInverted,
958
+ lastDiffType = _ref17$.diffType,
959
+ lastHideDeletedDiffs = _ref17$.hideDeletedDiffs,
960
+ lastHideAddedDiffsUnderline = _ref17$.hideAddedDiffsUnderline,
961
+ lastShowIndicators = _ref17$.showIndicators,
962
+ lastSmartThresholds = _ref17$.smartThresholds,
963
+ lastDeletedDiffPlacement = _ref17$.deletedDiffPlacement,
964
+ lastInlineDeletedDiffPlacement = _ref17$.inlineDeletedDiffPlacement,
965
+ lastReveal = _ref17$.reveal;
974
966
  var originalDocIsSame = lastPluginState.originalDoc && pluginState.originalDoc && pluginState.originalDoc.eq(lastPluginState.originalDoc);
975
967
  if (isExtendedEnabled(diffType)) {
976
- var _ref19;
977
- return (_ref19 = colorScheme === lastColorScheme && intl.locale === lastIntl.locale && isInverted === lastIsInverted && diffType === lastDiffType && isEqual(activeIndexPos, lastActiveIndexPos) && originalDocIsSame && isEqual(pluginState.steps, lastPluginState.steps) && isEqual(pluginState.stepAttributions, lastPluginState.stepAttributions) &&
968
+ var _ref18;
969
+ return (_ref18 = colorScheme === lastColorScheme && intl.locale === lastIntl.locale && isInverted === lastIsInverted && diffType === lastDiffType && isEqual(activeIndexPos, lastActiveIndexPos) && originalDocIsSame && isEqual(pluginState.steps, lastPluginState.steps) && isEqual(pluginState.stepAttributions, lastPluginState.stepAttributions) &&
978
970
  // Contributors can arrive after the first calculation; without this, tags never appear.
979
971
  isEqual(pluginState.contributors, lastPluginState.contributors) && state.doc.eq(lastState.doc) && hideDeletedDiffs === lastHideDeletedDiffs && hideAddedDiffsUnderline === lastHideAddedDiffsUnderline && showIndicators === lastShowIndicators && isEqual(smartThresholds, lastSmartThresholds) && deletedDiffPlacement === lastDeletedDiffPlacement && inlineDeletedDiffPlacement === lastInlineDeletedDiffPlacement &&
980
972
  // Turning the reveal on or off changes the emitted styles, so a cached result from the
981
973
  // other setting would leave the diff painted in the wrong resting state.
982
- isEqual(reveal, lastReveal)) !== null && _ref19 !== void 0 ? _ref19 : false;
974
+ isEqual(reveal, lastReveal)) !== null && _ref18 !== void 0 ? _ref18 : false;
983
975
  }
984
- return (_ref20 = originalDocIsSame && isEqual(pluginState.steps, lastPluginState.steps) && isEqual(pluginState.stepAttributions, lastPluginState.stepAttributions) && isEqual(pluginState.contributors, lastPluginState.contributors) && state.doc.eq(lastState.doc) && colorScheme === lastColorScheme && intl.locale === lastIntl.locale && isEqual(activeIndexPos, lastActiveIndexPos) && hideDeletedDiffs === lastHideDeletedDiffs) !== null && _ref20 !== void 0 ? _ref20 : false;
976
+ return (_ref19 = originalDocIsSame && isEqual(pluginState.steps, lastPluginState.steps) && isEqual(pluginState.stepAttributions, lastPluginState.stepAttributions) && isEqual(pluginState.contributors, lastPluginState.contributors) && state.doc.eq(lastState.doc) && colorScheme === lastColorScheme && intl.locale === lastIntl.locale && isEqual(activeIndexPos, lastActiveIndexPos) && hideDeletedDiffs === lastHideDeletedDiffs) !== null && _ref19 !== void 0 ? _ref19 : false;
985
977
  });
@@ -100,7 +100,6 @@ var getAgentBrandForColor = function getAgentBrandForColor(attribution, contribu
100
100
  var agentBrand = contributors === null || contributors === void 0 || (_contributors = contributors[(_getAttributionKey = getAttributionKey(attribution)) !== null && _getAttributionKey !== void 0 ? _getAttributionKey : '']) === null || _contributors === void 0 ? void 0 : _contributors.agentKind;
101
101
  return isDiffAgentBrand(agentBrand) ? agentBrand : attribution === null || attribution === void 0 ? void 0 : attribution.agentType;
102
102
  };
103
-
104
103
  /**
105
104
  * Public contributor list to internal key-addressed record. A contributor whose attribution carries
106
105
  * no identity is dropped, since it could never match a step. Later entries win.
@@ -1107,8 +1107,7 @@ export function buildDeletedInlineNodeCSSVariables(colors, isActive) {
1107
1107
  *
1108
1108
  * The three `stateful`-only variables are omitted for `static` (standard) so editor-core's fallback
1109
1109
  * wins, which is what standard rendered before:
1110
- * - `--diff-delete-opacity` — the fallback is 0.6 or 0.8 depending on
1111
- * `platform_editor_enghealth_a11y_jan_fixes`, a split the scheme must not flatten.
1110
+ * - `--diff-delete-opacity` — standard falls through to editor-core's 0.8 fallback.
1112
1111
  * - `--diff-delete-ring-width` — traditional's deleted media ring tracks the inherited marker ring
1113
1112
  * width instead of a fixed 1px.
1114
1113
  * - `--diff-delete-text-decoration-color` — standard's blockquote strike must stay `currentColor`.
@@ -125,7 +125,10 @@ var getEdgeCasesForSlice = function getEdgeCasesForSlice(doc, from, slice, measu
125
125
  var targets = [];
126
126
  // edge cases can only be top level nodes, so we only care about the top level nodes in the slice
127
127
  slice.content.forEach(function (node, offset) {
128
- var edgeCase = edgeCases(doc, from + offset, node);
128
+ // the node can be outside the doc if we have a sliceOverride which adds additional new content
129
+ // but we still need to the edgeCases to resolve a node in the doc to attach the widget to
130
+ // and we use the provided measureElement to make sure it is in the right position
131
+ var edgeCase = edgeCases(doc, Math.min(from + offset, doc.content.size - 1), node);
129
132
  if (edgeCase) {
130
133
  targets.push(_objectSpread(_objectSpread({}, edgeCase), {}, {
131
134
  measureElement: measureElement
@@ -6,7 +6,6 @@ import omit from 'lodash/omit';
6
6
  import { SetAttrsStep } from '@atlaskit/adf-schema/steps/set-attrs';
7
7
  import { getBaseNodeTypeName } from '@atlaskit/editor-common/utils/node-type-utils';
8
8
  import { AttrStep } from '@atlaskit/editor-prosemirror/transform';
9
- import { fg } from '@atlaskit/platform-feature-flags/fg';
10
9
  import { getRequiredIncludedDiffableAttrs, isDiffableAttr } from './diffableAttrs';
11
10
  var filterUndefined = function filterUndefined(x) {
12
11
  return !!x;
@@ -68,10 +67,10 @@ export var getAttrChangeRanges = function getAttrChangeRanges(doc, attrStepConte
68
67
  return undefined;
69
68
  }
70
69
  var stepAttrs = getStepAttrs(step);
71
- // SetAttrsStep contains the complete replacement attrs, not only the attrs that changed.
72
- // Keep the legacy payload-based checks until the rollout gate is enabled, and fall back
73
- // to them if either step-time node is unavailable.
74
- var attrsToCheck = fg('platform_editor_reduce_diff_attr_sensitivity') && beforeNode && afterNode ? stepAttrs.filter(function (attrName) {
70
+ // SetAttrsStep contains the complete replacement attrs, not only the attrs that changed,
71
+ // so narrow it to the attrs whose values actually differ. Fall back to the full step
72
+ // payload if either step-time node is unavailable.
73
+ var attrsToCheck = beforeNode && afterNode ? stepAttrs.filter(function (attrName) {
75
74
  return !isEqual(beforeNode.attrs[attrName], afterNode.attrs[attrName]);
76
75
  }) : stepAttrs;
77
76
  var $pos = doc.resolve(finalPos);
@@ -132,12 +131,12 @@ export var getAttrChangeRanges = function getAttrChangeRanges(doc, attrStepConte
132
131
  });
133
132
  }
134
133
 
135
- // Extension nodes: highlight changes to user-visible configuration. When enabled,
136
- // transient extension metadata is ignored by the comparison below.
134
+ // Extension nodes: highlight changes to user-visible configuration. Transient extension
135
+ // metadata is ignored by the comparison below.
137
136
  if (nodeAtPos && extensionNodeNames.includes(nodeAtPos.type.name) && attrsToCheck.some(function (v) {
138
137
  return isDiffableAttr(nodeAtPos.type.name, v);
139
138
  })) {
140
- if (fg('platform_editor_reduce_diff_attr_sensitivity') && beforeNode && afterNode && beforeNode.type === afterNode.type && haveSameRelevantExtensionAttrs(beforeNode, afterNode)) {
139
+ if (beforeNode && afterNode && beforeNode.type === afterNode.type && haveSameRelevantExtensionAttrs(beforeNode, afterNode)) {
141
140
  return undefined;
142
141
  }
143
142
  var isInline = nodeAtPos.type.name === 'inlineExtension';
@@ -15,7 +15,6 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
15
15
  */
16
16
  import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
17
17
  import { fg } from '@atlaskit/platform-feature-flags/fg';
18
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
19
18
  import { isExtendedEnabled } from '../../isExtendedEnabled';
20
19
  import { buildAddedCellOverlayRoundedStyle, buildAddedCellOverlayStyle, buildAddedCellOverlayStyleNew, buildDeletedCellOverlayRoundedStyle, buildDeletedCellOverlayStyle, buildDeletedInlineContentStyle, buildDeletedInlineContentStyleExtended, buildDeletedLozengeActiveStyle, buildDeletedLozengeStyle, buildDeletedNodeCSSVariables, buildDeletedQuoteNodeWithLozengeStyle, buildDeletedStrikethroughLine, buildDeletedWrappedBlockOutline, buildInsertedBlockNodeStyle, buildInsertedInlineStyle, buildInsertStyleInBlockExtended, buildInsertStyleInBlockExtendedNoUnderline, buildInsertStyleNode } from '../colorSchemes/factory';
21
20
  import { colorSchemeRegistry, getLegacyColorScheme, standardScheme } from '../colorSchemes/schemes';
@@ -48,7 +47,7 @@ var getChangedContentStyleNext = function getChangedContentStyleNext(colorScheme
48
47
  if (isExtendedEnabled(diffType) && isInserted) {
49
48
  return buildInsertedInlineStyle(colors, isActive, hideAddedDiffsUnderline);
50
49
  }
51
- var base = buildDeletedInlineContentStyle(colors, isActive ? 'active' : expValEquals('platform_editor_enghealth_a11y_jan_fixes', 'isEnabled', true) ? 'new' : 'default');
50
+ var base = buildDeletedInlineContentStyle(colors, isActive ? 'active' : 'new');
52
51
 
53
52
  // Text-like blocks (heading, lists, blockquote) render their deleted content through this
54
53
  // getter rather than `getDeletedContentStyle`, so without this they never receive the
@@ -10,9 +10,8 @@
10
10
  */
11
11
  import { convertToInlineCss } from '@atlaskit/editor-common/lazy-node-view';
12
12
  import { fg } from '@atlaskit/platform-feature-flags/fg';
13
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
14
13
  import { isExtendedEnabled } from '../../isExtendedEnabled';
15
- import { deletedBlockOutline, deletedBlockOutlineActive, deletedBlockOutlineRounded, deletedBlockOutlineRoundedActive, deletedContentStyleUnbounded, deletedInlineContentStyleExtended, deletedStyleQuoteNodeWithLozenge, deletedStyleQuoteNodeWithLozengeActive, editingContentStyleInBlockExtended, editingContentStyleInBlockExtendedNoUnderline, editingStyleExtended, editingStyleExtendedNoUnderline, editingStyleActiveExtended, editingStyleActiveExtendedNoUnderline, editingStyleNode, getStandardDeletedContentStyle, getStandardDeletedContentStyleActive, getStandardDeletedContentStyleNew, addedCellOverlayStyle, addedCellOverlayRoundedStyle, deletedCellOverlayStyle, deletedCellOverlayRoundedStyle } from '../colorSchemes/standard';
14
+ import { deletedBlockOutline, deletedBlockOutlineActive, deletedBlockOutlineRounded, deletedBlockOutlineRoundedActive, deletedContentStyleUnbounded, deletedInlineContentStyleExtended, deletedStyleQuoteNodeWithLozenge, deletedStyleQuoteNodeWithLozengeActive, editingContentStyleInBlockExtended, editingContentStyleInBlockExtendedNoUnderline, editingStyleExtended, editingStyleExtendedNoUnderline, editingStyleActiveExtended, editingStyleActiveExtendedNoUnderline, editingStyleNode, getStandardDeletedContentStyleActive, getStandardDeletedContentStyleNew, addedCellOverlayStyle, addedCellOverlayRoundedStyle, deletedCellOverlayStyle, deletedCellOverlayRoundedStyle } from '../colorSchemes/standard';
16
15
  import { deletedTraditionalBlockOutlineActive, deletedTraditionalBlockOutlineNew, deletedTraditionalBlockOutlineRoundedActive, deletedTraditionalBlockOutlineRoundedNew, deletedTraditionalContentStyleUnbounded, deletedTraditionalContentStyleUnboundedActive, getDeletedTraditionalInlineStyle, deletedTraditionalStyleQuoteNode, deletedTraditionalStyleQuoteNodeActive, traditionalInsertStyle, traditionalInsertStyleActive, traditionalStyleNodeActive, traditionalStyleNodeNew, traditionalAddedCellOverlayRoundedStyle, traditionalAddedCellOverlayStyleNew, deletedTraditionalCellOverlayStyle, deletedTraditionalCellOverlayRoundedStyle } from '../colorSchemes/traditional';
17
16
  var lozengeStyle = convertToInlineCss({
18
17
  display: 'inline-flex',
@@ -94,7 +93,7 @@ export var getChangedContentStyleLegacy = function getChangedContentStyleLegacy(
94
93
  if (isActive) {
95
94
  return getStandardDeletedContentStyleActive();
96
95
  }
97
- return expValEquals('platform_editor_enghealth_a11y_jan_fixes', 'isEnabled', true) ? getStandardDeletedContentStyleNew() : getStandardDeletedContentStyle();
96
+ return getStandardDeletedContentStyleNew();
98
97
  };
99
98
 
100
99
  /** Pre-refactor node-specific style for a changed block node. */
@@ -31,7 +31,12 @@ var chatgptBrandColor = getThirdPartyAgentColor({
31
31
  });
32
32
 
33
33
  /** Brand accents for agent kinds with no ADS token match. New agents opt in by adding an entry. */
34
- var AGENT_KIND_ACCENT_OVERRIDES = _objectSpread({}, chatgptBrandColor ? {
34
+ var AGENT_KIND_ACCENT_OVERRIDES = _objectSpread({
35
+ rovo: {
36
+ background: "var(--ds-background-neutral-bold, #292A2E)",
37
+ text: "var(--ds-text-inverse, #FFFFFF)"
38
+ }
39
+ }, chatgptBrandColor ? {
35
40
  chatgpt: {
36
41
  background: chatgptBrandColor.bold,
37
42
  text: chatgptBrandColor.boldText
@@ -238,8 +238,7 @@ export declare function buildDeletedInlineNodeCSSVariables(colors: DiffColorSche
238
238
  *
239
239
  * The three `stateful`-only variables are omitted for `static` (standard) so editor-core's fallback
240
240
  * wins, which is what standard rendered before:
241
- * - `--diff-delete-opacity` — the fallback is 0.6 or 0.8 depending on
242
- * `platform_editor_enghealth_a11y_jan_fixes`, a split the scheme must not flatten.
241
+ * - `--diff-delete-opacity` — standard falls through to editor-core's 0.8 fallback.
243
242
  * - `--diff-delete-ring-width` — traditional's deleted media ring tracks the inherited marker ring
244
243
  * width instead of a fixed 1px.
245
244
  * - `--diff-delete-text-decoration-color` — standard's blockquote strike must stay `currentColor`.
@@ -5,8 +5,8 @@ import type { Step as ProseMirrorStep } from '@atlaskit/editor-prosemirror/trans
5
5
  export type InlineAttrChangeNodeName = 'date' | 'emoji' | 'mention' | 'status';
6
6
  type AttrChangeStep = AttrStep | SetAttrsStep;
7
7
  export type AttrStepContext = {
8
- attributionKey?: string;
9
8
  afterNode: PMNode | null;
9
+ attributionKey?: string;
10
10
  beforeNode: PMNode | null;
11
11
  finalPos: number;
12
12
  originalPos?: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-show-diff",
3
- "version": "19.0.0",
3
+ "version": "19.0.2",
4
4
  "description": "ShowDiff plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -39,7 +39,7 @@
39
39
  "@atlaskit/platform-feature-experiments": "^0.3.0",
40
40
  "@atlaskit/platform-feature-flags": "^2.2.0",
41
41
  "@atlaskit/primitives": "^22.5.0",
42
- "@atlaskit/tmp-editor-statsig": "^205.0.0",
42
+ "@atlaskit/tmp-editor-statsig": "^207.0.0",
43
43
  "@atlaskit/tokens": "^20.0.0",
44
44
  "@babel/runtime": "^7.0.0",
45
45
  "@compiled/react": "^1.0.2",
@@ -64,14 +64,14 @@
64
64
  "@atlassian/confluence-presets": "workspace:^",
65
65
  "@atlassian/content-reconciliation": "^0.1.3506",
66
66
  "@atlassian/editor-ai-injected-editors": "^35.0.0",
67
- "@atlassian/editor-plugin-ai": "^75.0.0",
67
+ "@atlassian/editor-plugin-ai": "^75.1.0",
68
68
  "@atlassian/structured-docs-types": "workspace:^",
69
69
  "react": "^19.2.0",
70
70
  "react-dom": "^19.2.0",
71
71
  "react-intl": "^7.0.0"
72
72
  },
73
73
  "peerDependencies": {
74
- "@atlaskit/editor-common": "^125.0.0",
74
+ "@atlaskit/editor-common": "^125.2.0",
75
75
  "react": "^18.2.0 || ^19.2.0",
76
76
  "react-dom": "^18.2.0 || ^19.2.0",
77
77
  "react-intl": "^5.25.1 || ^6.0.0 || ^7.0.0"
@@ -99,7 +99,7 @@
99
99
  "confluence_ncs_step_diffing_version_history": {
100
100
  "type": "boolean"
101
101
  },
102
- "platform_editor_reduce_diff_attr_sensitivity": {
102
+ "platform_editor_diff_inline_mark_changes": {
103
103
  "type": "boolean"
104
104
  }
105
105
  }
package/tsconfig.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "extends": "./tsconfig.dev.json",
2
+ "extends": "./tsconfig.app.json",
3
3
  "compilerOptions": {
4
4
  "disableReferencedProjectLoad": true,
5
5
  "disableSolutionSearching": true