@atlaskit/editor-plugin-show-diff 3.1.0 → 3.1.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @atlaskit/editor-plugin-show-diff
2
2
 
3
+ ## 3.1.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [`63e63c69cd679`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/63e63c69cd679) -
8
+ Add styling for bullet point markers on diff
9
+
10
+ ## 3.1.1
11
+
12
+ ### Patch Changes
13
+
14
+ - [`174d939cfd1ba`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/174d939cfd1ba) -
15
+ Use valid positioning for deleted diff content to avoid invalid nesting diffs
16
+
3
17
  ## 3.1.0
4
18
 
5
19
  ### Minor Changes
@@ -140,7 +140,8 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref)
140
140
  change: change,
141
141
  doc: originalDoc,
142
142
  nodeViewSerializer: nodeViewSerializer,
143
- colourScheme: colourScheme
143
+ colourScheme: colourScheme,
144
+ newDoc: tr.doc
144
145
  });
145
146
  if (decoration) {
146
147
  decorations.push(decoration);
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.createInlineChangedDecoration = exports.createDeletedContentDecoration = exports.createBlockChangedDecoration = void 0;
7
7
  var _lazyNodeView = require("@atlaskit/editor-common/lazy-node-view");
8
8
  var _view = require("@atlaskit/editor-prosemirror/view");
9
+ var _findSafeInsertPos = require("./findSafeInsertPos");
9
10
  var editingStyle = (0, _lazyNodeView.convertToInlineCss)({
10
11
  background: "var(--ds-background-accent-purple-subtlest, #F3F0FF)",
11
12
  textDecoration: 'underline',
@@ -39,13 +40,16 @@ var getEditorStyleNode = function getEditorStyleNode(nodeName, colourScheme) {
39
40
  return colourScheme === 'traditional' ? traditionalStyleQuoteNode : editingStyleQuoteNode;
40
41
  case 'mediaSingle':
41
42
  case 'mediaGroup':
42
- case 'embedCard':
43
43
  case 'table':
44
44
  case 'tableRow':
45
45
  case 'tableCell':
46
46
  case 'tableHeader':
47
47
  return undefined;
48
48
  // Handle table separately to avoid border issues
49
+ case 'embedCard':
50
+ return (0, _lazyNodeView.convertToInlineCss)({
51
+ '--diff-decoration-marker-color': colourScheme === 'traditional' ? "var(--ds-border-accent-green, #22A06B)" : "var(--ds-border-accent-purple, #8270DB)"
52
+ });
49
53
  case 'paragraph':
50
54
  case 'heading':
51
55
  case 'hardBreak':
@@ -56,9 +60,11 @@ var getEditorStyleNode = function getEditorStyleNode(nodeName, colourScheme) {
56
60
  case 'taskItem':
57
61
  case 'bulletList':
58
62
  case 'orderedList':
59
- case 'listItem':
60
63
  return undefined;
61
- // Lists do not need special styling
64
+ case 'listItem':
65
+ return (0, _lazyNodeView.convertToInlineCss)({
66
+ '--diff-decoration-marker-color': colourScheme === 'traditional' ? "var(--ds-border-accent-green, #22A06B)" : "var(--ds-border-accent-purple, #8270DB)"
67
+ });
62
68
  case 'layoutSection':
63
69
  return undefined;
64
70
  // Layout nodes do not need special styling
@@ -107,8 +113,7 @@ var traditionalStyleCardBlockNode = (0, _lazyNodeView.convertToInlineCss)({
107
113
  var createBlockChangedDecoration = exports.createBlockChangedDecoration = function createBlockChangedDecoration(change, colourScheme) {
108
114
  return _view.Decoration.node(change.from, change.to, {
109
115
  style: getEditorStyleNode(change.name, colourScheme),
110
- 'data-testid': 'show-diff-changed-decoration-node',
111
- class: "show-diff-changed-decoration-node-".concat(colourScheme || 'standard')
116
+ 'data-testid': 'show-diff-changed-decoration-node'
112
117
  }, {});
113
118
  };
114
119
  var deletedContentStyle = (0, _lazyNodeView.convertToInlineCss)({
@@ -151,7 +156,8 @@ var createDeletedContentDecoration = exports.createDeletedContentDecoration = fu
151
156
  var change = _ref.change,
152
157
  doc = _ref.doc,
153
158
  nodeViewSerializer = _ref.nodeViewSerializer,
154
- colourScheme = _ref.colourScheme;
159
+ colourScheme = _ref.colourScheme,
160
+ newDoc = _ref.newDoc;
155
161
  var slice = doc.slice(change.fromA, change.toA);
156
162
  if (slice.content.content.length === 0) {
157
163
  return;
@@ -277,5 +283,6 @@ var createDeletedContentDecoration = exports.createDeletedContentDecoration = fu
277
283
 
278
284
  // Widget decoration used for deletions as the content is not in the document
279
285
  // and we want to display the deleted content with a style.
280
- return _view.Decoration.widget(change.fromB, dom, {});
286
+ var safeInsertPos = (0, _findSafeInsertPos.findSafeInsertPos)(newDoc, change.fromB, slice);
287
+ return _view.Decoration.widget(safeInsertPos, dom, {});
281
288
  };
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.findSafeInsertPos = findSafeInsertPos;
7
+ var _utils = require("@atlaskit/editor-prosemirror/utils");
8
+ /**
9
+ * Find a safe position to insert a deletion slice at the given position.
10
+ * @param doc
11
+ * @param pos
12
+ * @param slice
13
+ * @returns
14
+ */
15
+ function findSafeInsertPos(doc, pos, slice) {
16
+ if (pos > doc.content.size) {
17
+ return doc.content.size;
18
+ }
19
+ var $pos = doc.resolve(pos);
20
+ while (!(0, _utils.canInsert)($pos, slice.content) && ((_slice$content$firstC = slice.content.firstChild) === null || _slice$content$firstC === void 0 ? void 0 : _slice$content$firstC.type.name) !== 'paragraph') {
21
+ var _slice$content$firstC;
22
+ if ($pos.pos + 1 > doc.content.size) {
23
+ break;
24
+ }
25
+ $pos = doc.resolve($pos.pos + 1);
26
+ }
27
+ return $pos.pos;
28
+ }
@@ -124,7 +124,8 @@ const calculateDiffDecorationsInner = ({
124
124
  change,
125
125
  doc: originalDoc,
126
126
  nodeViewSerializer,
127
- colourScheme
127
+ colourScheme,
128
+ newDoc: tr.doc
128
129
  });
129
130
  if (decoration) {
130
131
  decorations.push(decoration);
@@ -1,5 +1,6 @@
1
1
  import { convertToInlineCss } from '@atlaskit/editor-common/lazy-node-view';
2
2
  import { Decoration } from '@atlaskit/editor-prosemirror/view';
3
+ import { findSafeInsertPos } from './findSafeInsertPos';
3
4
  const editingStyle = convertToInlineCss({
4
5
  background: "var(--ds-background-accent-purple-subtlest, #F3F0FF)",
5
6
  textDecoration: 'underline',
@@ -31,13 +32,16 @@ const getEditorStyleNode = (nodeName, colourScheme) => {
31
32
  return colourScheme === 'traditional' ? traditionalStyleQuoteNode : editingStyleQuoteNode;
32
33
  case 'mediaSingle':
33
34
  case 'mediaGroup':
34
- case 'embedCard':
35
35
  case 'table':
36
36
  case 'tableRow':
37
37
  case 'tableCell':
38
38
  case 'tableHeader':
39
39
  return undefined;
40
40
  // Handle table separately to avoid border issues
41
+ case 'embedCard':
42
+ return convertToInlineCss({
43
+ '--diff-decoration-marker-color': colourScheme === 'traditional' ? "var(--ds-border-accent-green, #22A06B)" : "var(--ds-border-accent-purple, #8270DB)"
44
+ });
41
45
  case 'paragraph':
42
46
  case 'heading':
43
47
  case 'hardBreak':
@@ -48,9 +52,11 @@ const getEditorStyleNode = (nodeName, colourScheme) => {
48
52
  case 'taskItem':
49
53
  case 'bulletList':
50
54
  case 'orderedList':
51
- case 'listItem':
52
55
  return undefined;
53
- // Lists do not need special styling
56
+ case 'listItem':
57
+ return convertToInlineCss({
58
+ '--diff-decoration-marker-color': colourScheme === 'traditional' ? "var(--ds-border-accent-green, #22A06B)" : "var(--ds-border-accent-purple, #8270DB)"
59
+ });
54
60
  case 'layoutSection':
55
61
  return undefined;
56
62
  // Layout nodes do not need special styling
@@ -98,8 +104,7 @@ const traditionalStyleCardBlockNode = convertToInlineCss({
98
104
  */
99
105
  export const createBlockChangedDecoration = (change, colourScheme) => Decoration.node(change.from, change.to, {
100
106
  style: getEditorStyleNode(change.name, colourScheme),
101
- 'data-testid': 'show-diff-changed-decoration-node',
102
- class: `show-diff-changed-decoration-node-${colourScheme || 'standard'}`
107
+ 'data-testid': 'show-diff-changed-decoration-node'
103
108
  }, {});
104
109
  const deletedContentStyle = convertToInlineCss({
105
110
  color: "var(--ds-text-accent-gray, #44546F)",
@@ -137,7 +142,8 @@ export const createDeletedContentDecoration = ({
137
142
  change,
138
143
  doc,
139
144
  nodeViewSerializer,
140
- colourScheme
145
+ colourScheme,
146
+ newDoc
141
147
  }) => {
142
148
  const slice = doc.slice(change.fromA, change.toA);
143
149
  if (slice.content.content.length === 0) {
@@ -256,5 +262,6 @@ export const createDeletedContentDecoration = ({
256
262
 
257
263
  // Widget decoration used for deletions as the content is not in the document
258
264
  // and we want to display the deleted content with a style.
259
- return Decoration.widget(change.fromB, dom, {});
265
+ const safeInsertPos = findSafeInsertPos(newDoc, change.fromB, slice);
266
+ return Decoration.widget(safeInsertPos, dom, {});
260
267
  };
@@ -0,0 +1,23 @@
1
+ import { canInsert } from '@atlaskit/editor-prosemirror/utils';
2
+
3
+ /**
4
+ * Find a safe position to insert a deletion slice at the given position.
5
+ * @param doc
6
+ * @param pos
7
+ * @param slice
8
+ * @returns
9
+ */
10
+ export function findSafeInsertPos(doc, pos, slice) {
11
+ if (pos > doc.content.size) {
12
+ return doc.content.size;
13
+ }
14
+ let $pos = doc.resolve(pos);
15
+ while (!canInsert($pos, slice.content) && ((_slice$content$firstC = slice.content.firstChild) === null || _slice$content$firstC === void 0 ? void 0 : _slice$content$firstC.type.name) !== 'paragraph') {
16
+ var _slice$content$firstC;
17
+ if ($pos.pos + 1 > doc.content.size) {
18
+ break;
19
+ }
20
+ $pos = doc.resolve($pos.pos + 1);
21
+ }
22
+ return $pos.pos;
23
+ }
@@ -134,7 +134,8 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref)
134
134
  change: change,
135
135
  doc: originalDoc,
136
136
  nodeViewSerializer: nodeViewSerializer,
137
- colourScheme: colourScheme
137
+ colourScheme: colourScheme,
138
+ newDoc: tr.doc
138
139
  });
139
140
  if (decoration) {
140
141
  decorations.push(decoration);
@@ -1,5 +1,6 @@
1
1
  import { convertToInlineCss } from '@atlaskit/editor-common/lazy-node-view';
2
2
  import { Decoration } from '@atlaskit/editor-prosemirror/view';
3
+ import { findSafeInsertPos } from './findSafeInsertPos';
3
4
  var editingStyle = convertToInlineCss({
4
5
  background: "var(--ds-background-accent-purple-subtlest, #F3F0FF)",
5
6
  textDecoration: 'underline',
@@ -33,13 +34,16 @@ var getEditorStyleNode = function getEditorStyleNode(nodeName, colourScheme) {
33
34
  return colourScheme === 'traditional' ? traditionalStyleQuoteNode : editingStyleQuoteNode;
34
35
  case 'mediaSingle':
35
36
  case 'mediaGroup':
36
- case 'embedCard':
37
37
  case 'table':
38
38
  case 'tableRow':
39
39
  case 'tableCell':
40
40
  case 'tableHeader':
41
41
  return undefined;
42
42
  // Handle table separately to avoid border issues
43
+ case 'embedCard':
44
+ return convertToInlineCss({
45
+ '--diff-decoration-marker-color': colourScheme === 'traditional' ? "var(--ds-border-accent-green, #22A06B)" : "var(--ds-border-accent-purple, #8270DB)"
46
+ });
43
47
  case 'paragraph':
44
48
  case 'heading':
45
49
  case 'hardBreak':
@@ -50,9 +54,11 @@ var getEditorStyleNode = function getEditorStyleNode(nodeName, colourScheme) {
50
54
  case 'taskItem':
51
55
  case 'bulletList':
52
56
  case 'orderedList':
53
- case 'listItem':
54
57
  return undefined;
55
- // Lists do not need special styling
58
+ case 'listItem':
59
+ return convertToInlineCss({
60
+ '--diff-decoration-marker-color': colourScheme === 'traditional' ? "var(--ds-border-accent-green, #22A06B)" : "var(--ds-border-accent-purple, #8270DB)"
61
+ });
56
62
  case 'layoutSection':
57
63
  return undefined;
58
64
  // Layout nodes do not need special styling
@@ -101,8 +107,7 @@ var traditionalStyleCardBlockNode = convertToInlineCss({
101
107
  export var createBlockChangedDecoration = function createBlockChangedDecoration(change, colourScheme) {
102
108
  return Decoration.node(change.from, change.to, {
103
109
  style: getEditorStyleNode(change.name, colourScheme),
104
- 'data-testid': 'show-diff-changed-decoration-node',
105
- class: "show-diff-changed-decoration-node-".concat(colourScheme || 'standard')
110
+ 'data-testid': 'show-diff-changed-decoration-node'
106
111
  }, {});
107
112
  };
108
113
  var deletedContentStyle = convertToInlineCss({
@@ -145,7 +150,8 @@ export var createDeletedContentDecoration = function createDeletedContentDecorat
145
150
  var change = _ref.change,
146
151
  doc = _ref.doc,
147
152
  nodeViewSerializer = _ref.nodeViewSerializer,
148
- colourScheme = _ref.colourScheme;
153
+ colourScheme = _ref.colourScheme,
154
+ newDoc = _ref.newDoc;
149
155
  var slice = doc.slice(change.fromA, change.toA);
150
156
  if (slice.content.content.length === 0) {
151
157
  return;
@@ -271,5 +277,6 @@ export var createDeletedContentDecoration = function createDeletedContentDecorat
271
277
 
272
278
  // Widget decoration used for deletions as the content is not in the document
273
279
  // and we want to display the deleted content with a style.
274
- return Decoration.widget(change.fromB, dom, {});
280
+ var safeInsertPos = findSafeInsertPos(newDoc, change.fromB, slice);
281
+ return Decoration.widget(safeInsertPos, dom, {});
275
282
  };
@@ -0,0 +1,23 @@
1
+ import { canInsert } from '@atlaskit/editor-prosemirror/utils';
2
+
3
+ /**
4
+ * Find a safe position to insert a deletion slice at the given position.
5
+ * @param doc
6
+ * @param pos
7
+ * @param slice
8
+ * @returns
9
+ */
10
+ export function findSafeInsertPos(doc, pos, slice) {
11
+ if (pos > doc.content.size) {
12
+ return doc.content.size;
13
+ }
14
+ var $pos = doc.resolve(pos);
15
+ while (!canInsert($pos, slice.content) && ((_slice$content$firstC = slice.content.firstChild) === null || _slice$content$firstC === void 0 ? void 0 : _slice$content$firstC.type.name) !== 'paragraph') {
16
+ var _slice$content$firstC;
17
+ if ($pos.pos + 1 > doc.content.size) {
18
+ break;
19
+ }
20
+ $pos = doc.resolve($pos.pos + 1);
21
+ }
22
+ return $pos.pos;
23
+ }
@@ -27,7 +27,8 @@ interface DeletedContentDecorationProps {
27
27
  change: Change;
28
28
  colourScheme?: 'standard' | 'traditional';
29
29
  doc: PMNode;
30
+ newDoc: PMNode;
30
31
  nodeViewSerializer: NodeViewSerializer;
31
32
  }
32
- export declare const createDeletedContentDecoration: ({ change, doc, nodeViewSerializer, colourScheme, }: DeletedContentDecorationProps) => Decoration | undefined;
33
+ export declare const createDeletedContentDecoration: ({ change, doc, nodeViewSerializer, colourScheme, newDoc, }: DeletedContentDecorationProps) => Decoration | undefined;
33
34
  export {};
@@ -0,0 +1,9 @@
1
+ import type { Node as PMNode, Slice } from '@atlaskit/editor-prosemirror/model';
2
+ /**
3
+ * Find a safe position to insert a deletion slice at the given position.
4
+ * @param doc
5
+ * @param pos
6
+ * @param slice
7
+ * @returns
8
+ */
9
+ export declare function findSafeInsertPos(doc: PMNode, pos: number, slice: Slice): number;
@@ -27,7 +27,8 @@ interface DeletedContentDecorationProps {
27
27
  change: Change;
28
28
  colourScheme?: 'standard' | 'traditional';
29
29
  doc: PMNode;
30
+ newDoc: PMNode;
30
31
  nodeViewSerializer: NodeViewSerializer;
31
32
  }
32
- export declare const createDeletedContentDecoration: ({ change, doc, nodeViewSerializer, colourScheme, }: DeletedContentDecorationProps) => Decoration | undefined;
33
+ export declare const createDeletedContentDecoration: ({ change, doc, nodeViewSerializer, colourScheme, newDoc, }: DeletedContentDecorationProps) => Decoration | undefined;
33
34
  export {};
@@ -0,0 +1,9 @@
1
+ import type { Node as PMNode, Slice } from '@atlaskit/editor-prosemirror/model';
2
+ /**
3
+ * Find a safe position to insert a deletion slice at the given position.
4
+ * @param doc
5
+ * @param pos
6
+ * @param slice
7
+ * @returns
8
+ */
9
+ export declare function findSafeInsertPos(doc: PMNode, pos: number, slice: Slice): number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-show-diff",
3
- "version": "3.1.0",
3
+ "version": "3.1.2",
4
4
  "description": "ShowDiff plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -37,7 +37,7 @@
37
37
  "prosemirror-changeset": "^2.2.1"
38
38
  },
39
39
  "peerDependencies": {
40
- "@atlaskit/editor-common": "^110.14.0",
40
+ "@atlaskit/editor-common": "^110.17.0",
41
41
  "react": "^18.2.0"
42
42
  },
43
43
  "techstack": {