@lobehub/editor 4.27.3 → 4.27.4

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/es/headless.js CHANGED
@@ -2580,7 +2580,7 @@ function handleReplaceForApplyDelay(oldNode, newNode, modifyBlockNodes, diffNode
2580
2580
  }
2581
2581
  const before = $createDiffContentNode("before");
2582
2582
  const after = $createDiffContentNode("after");
2583
- oldNode.getChildren().forEach((child) => before.append($cloneNode(child, editor)));
2583
+ oldNode.getChildren().forEach((child) => before.append(child));
2584
2584
  newNode.getChildren().forEach((child) => after.append($cloneNode(child, editor)));
2585
2585
  const diffNode = $createDiffNode("modify");
2586
2586
  diffNode.append(before, after);
@@ -2594,10 +2594,19 @@ function handleReplaceForApplyDelay(oldNode, newNode, modifyBlockNodes, diffNode
2594
2594
  oldNode.replace(newNode, false);
2595
2595
  return;
2596
2596
  }
2597
+ if ($isListItemNode(oldNode) && $isListItemNode(newNode)) {
2598
+ const before = $createParagraphNode();
2599
+ const after = $createParagraphNode();
2600
+ oldNode.getChildren().forEach((child) => before.append(child));
2601
+ newNode.getChildren().forEach((child) => after.append(child));
2602
+ oldNode.clear();
2603
+ oldNode.append($createDiffNode("listItemModify").append(before, after));
2604
+ return;
2605
+ }
2597
2606
  if (oldNode === oldBlock) {
2598
2607
  const diffNode = $createDiffNode("modify");
2599
- diffNode.append($cloneNode(oldBlock, editor), newNode);
2600
2608
  oldNode.replace(diffNode, false);
2609
+ diffNode.append($createDiffContentNode("before").append(oldBlock), $createDiffContentNode("after").append(newNode));
2601
2610
  } else {
2602
2611
  if (!modifyBlockNodes.has(oldBlock.getKey())) {
2603
2612
  modifyBlockNodes.add(oldBlock.getKey());
@@ -2829,7 +2838,8 @@ function handleRemove(editor, key, delay) {
2829
2838
  case "modify": {
2830
2839
  const children = originDiffNode.getChildren();
2831
2840
  const newDiff = $createDiffNode("remove");
2832
- newDiff.append(children[0]);
2841
+ const before = children[0];
2842
+ newDiff.append(...$isDiffContentNode(before) ? before.getChildren() : [before]);
2833
2843
  originDiffNode.replace(newDiff, false);
2834
2844
  return;
2835
2845
  }
@@ -2944,6 +2954,11 @@ function handleInsert(editor, payload, dataSource) {
2944
2954
  const originDiffNode = $closest(referenceNode, (node) => node.getType() === DiffNode.getType());
2945
2955
  if (originDiffNode) referenceNode = originDiffNode;
2946
2956
  newNodes.map((node) => {
2957
+ if ($isListItemNode(node)) {
2958
+ const diffNode = $createDiffNode("listItemAdd");
2959
+ node.getChildren().forEach((child) => diffNode.append(child));
2960
+ return node.append(diffNode);
2961
+ }
2947
2962
  const diffNode = $createDiffNode("add");
2948
2963
  diffNode.append(node);
2949
2964
  return diffNode;
@@ -3117,7 +3132,7 @@ function doAction(editor, node, action) {
3117
3132
  });
3118
3133
  node.getParentOrThrow().selectEnd();
3119
3134
  node.remove();
3120
- } else if (action === 0) node.remove();
3135
+ } else if (action === 0) node.getParentOrThrow().remove();
3121
3136
  }
3122
3137
  }
3123
3138
  function registerLiteXMLDiffCommand(editor) {
@@ -4920,6 +4935,7 @@ const LitexmlPlugin = class extends KernelPlugin {
4920
4935
  else nodeToXML(after, lines, indent);
4921
4936
  break;
4922
4937
  }
4938
+ case "listItemAdd":
4923
4939
  case "add":
4924
4940
  diffNode.getChildren().forEach((child) => nodeToXML(child, lines, indent));
4925
4941
  break;
@@ -4971,6 +4987,7 @@ const LitexmlPlugin = class extends KernelPlugin {
4971
4987
  else ctx.processChild(ctx, after);
4972
4988
  break;
4973
4989
  }
4990
+ case "listItemAdd":
4974
4991
  case "add":
4975
4992
  diffNode.getChildren().forEach((child) => ctx.processChild(ctx, child));
4976
4993
  break;
@@ -10022,7 +10039,8 @@ const ListPlugin = class extends KernelPlugin {
10022
10039
  if ($isRootNode(node.getParent())) return 0;
10023
10040
  const parent = node.getParent();
10024
10041
  if (!parent) return 0;
10025
- return getLevel($getNearestNodeOfType(parent, ListNode)) + 1;
10042
+ const parentList = $getNearestNodeOfType(parent, ListNode);
10043
+ return parentList ? getLevel(parentList) + 1 : 0;
10026
10044
  };
10027
10045
  markdownService.registerMarkdownWriter(ListItemNode.getType(), (ctx, node) => {
10028
10046
  const parent = node.getParent();
@@ -130,7 +130,8 @@ const ListPlugin = class extends KernelPlugin {
130
130
  if ($isRootNode(node.getParent())) return 0;
131
131
  const parent = node.getParent();
132
132
  if (!parent) return 0;
133
- return getLevel($getNearestNodeOfType(parent, ListNode)) + 1;
133
+ const parentList = $getNearestNodeOfType(parent, ListNode);
134
+ return parentList ? getLevel(parentList) + 1 : 0;
134
135
  };
135
136
  markdownService.registerMarkdownWriter(ListItemNode.getType(), (ctx, node) => {
136
137
  const parent = node.getParent();
@@ -125,7 +125,7 @@ function doAction(editor, node, action) {
125
125
  });
126
126
  node.getParentOrThrow().selectEnd();
127
127
  node.remove();
128
- } else if (action === 0) node.remove();
128
+ } else if (action === 0) node.getParentOrThrow().remove();
129
129
  }
130
130
  }
131
131
  function registerLiteXMLDiffCommand(editor) {
@@ -96,7 +96,7 @@ function handleReplaceForApplyDelay(oldNode, newNode, modifyBlockNodes, diffNode
96
96
  }
97
97
  const before = $createDiffContentNode("before");
98
98
  const after = $createDiffContentNode("after");
99
- oldNode.getChildren().forEach((child) => before.append($cloneNode(child, editor)));
99
+ oldNode.getChildren().forEach((child) => before.append(child));
100
100
  newNode.getChildren().forEach((child) => after.append($cloneNode(child, editor)));
101
101
  const diffNode = $createDiffNode("modify");
102
102
  diffNode.append(before, after);
@@ -110,10 +110,19 @@ function handleReplaceForApplyDelay(oldNode, newNode, modifyBlockNodes, diffNode
110
110
  oldNode.replace(newNode, false);
111
111
  return;
112
112
  }
113
+ if ($isListItemNode(oldNode) && $isListItemNode(newNode)) {
114
+ const before = $createParagraphNode();
115
+ const after = $createParagraphNode();
116
+ oldNode.getChildren().forEach((child) => before.append(child));
117
+ newNode.getChildren().forEach((child) => after.append(child));
118
+ oldNode.clear();
119
+ oldNode.append($createDiffNode("listItemModify").append(before, after));
120
+ return;
121
+ }
113
122
  if (oldNode === oldBlock) {
114
123
  const diffNode = $createDiffNode("modify");
115
- diffNode.append($cloneNode(oldBlock, editor), newNode);
116
124
  oldNode.replace(diffNode, false);
125
+ diffNode.append($createDiffContentNode("before").append(oldBlock), $createDiffContentNode("after").append(newNode));
117
126
  } else {
118
127
  if (!modifyBlockNodes.has(oldBlock.getKey())) {
119
128
  modifyBlockNodes.add(oldBlock.getKey());
@@ -345,7 +354,8 @@ function handleRemove(editor, key, delay) {
345
354
  case "modify": {
346
355
  const children = originDiffNode.getChildren();
347
356
  const newDiff = $createDiffNode("remove");
348
- newDiff.append(children[0]);
357
+ const before = children[0];
358
+ newDiff.append(...$isDiffContentNode(before) ? before.getChildren() : [before]);
349
359
  originDiffNode.replace(newDiff, false);
350
360
  return;
351
361
  }
@@ -461,6 +471,11 @@ function handleInsert(editor, payload, dataSource) {
461
471
  const originDiffNode = $closest(referenceNode, (node) => node.getType() === DiffNode.getType());
462
472
  if (originDiffNode) referenceNode = originDiffNode;
463
473
  newNodes.map((node) => {
474
+ if ($isListItemNode(node)) {
475
+ const diffNode = $createDiffNode("listItemAdd");
476
+ node.getChildren().forEach((child) => diffNode.append(child));
477
+ return node.append(diffNode);
478
+ }
464
479
  const diffNode = $createDiffNode("add");
465
480
  diffNode.append(node);
466
481
  return diffNode;
@@ -86,6 +86,7 @@ const LitexmlPlugin = class extends KernelPlugin {
86
86
  else nodeToXML(after, lines, indent);
87
87
  break;
88
88
  }
89
+ case "listItemAdd":
89
90
  case "add":
90
91
  diffNode.getChildren().forEach((child) => nodeToXML(child, lines, indent));
91
92
  break;
@@ -137,6 +138,7 @@ const LitexmlPlugin = class extends KernelPlugin {
137
138
  else ctx.processChild(ctx, after);
138
139
  break;
139
140
  }
141
+ case "listItemAdd":
140
142
  case "add":
141
143
  diffNode.getChildren().forEach((child) => ctx.processChild(ctx, child));
142
144
  break;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/editor",
3
- "version": "4.27.3",
3
+ "version": "4.27.4",
4
4
  "description": "A powerful and extensible rich text editor built on Meta's Lexical framework, providing a modern editing experience with React integration.",
5
5
  "keywords": [
6
6
  "lobehub",