@webiny/lexical-nodes 5.38.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/FontColorNode.d.ts +43 -0
  2. package/FontColorNode.js +125 -0
  3. package/FontColorNode.js.map +1 -0
  4. package/HeadingNode.d.ts +32 -0
  5. package/HeadingNode.js +193 -0
  6. package/HeadingNode.js.map +1 -0
  7. package/ImageNode.d.ts +58 -0
  8. package/ImageNode.js +217 -0
  9. package/ImageNode.js.map +1 -0
  10. package/LICENSE +21 -0
  11. package/LinkNode.d.ts +106 -0
  12. package/LinkNode.js +531 -0
  13. package/LinkNode.js.map +1 -0
  14. package/ListItemNode.d.ts +44 -0
  15. package/ListItemNode.js +442 -0
  16. package/ListItemNode.js.map +1 -0
  17. package/ListNode.d.ts +42 -0
  18. package/ListNode.js +290 -0
  19. package/ListNode.js.map +1 -0
  20. package/ParagraphNode.d.ts +31 -0
  21. package/ParagraphNode.js +220 -0
  22. package/ParagraphNode.js.map +1 -0
  23. package/QuoteNode.d.ts +33 -0
  24. package/QuoteNode.js +227 -0
  25. package/QuoteNode.js.map +1 -0
  26. package/README.md +6 -0
  27. package/TypographyNode.d.ts +41 -0
  28. package/TypographyNode.js +153 -0
  29. package/TypographyNode.js.map +1 -0
  30. package/components/ImageNode/ContentEditable.css +22 -0
  31. package/components/ImageNode/ContentEditable.d.ts +12 -0
  32. package/components/ImageNode/ContentEditable.js +26 -0
  33. package/components/ImageNode/ContentEditable.js.map +1 -0
  34. package/components/ImageNode/ImageComponent.css +43 -0
  35. package/components/ImageNode/ImageComponent.d.ts +16 -0
  36. package/components/ImageNode/ImageComponent.js +254 -0
  37. package/components/ImageNode/ImageComponent.js.map +1 -0
  38. package/components/ImageNode/ImageResizer.d.ts +26 -0
  39. package/components/ImageNode/ImageResizer.js +215 -0
  40. package/components/ImageNode/ImageResizer.js.map +1 -0
  41. package/components/ImageNode/Placeholder.css +20 -0
  42. package/components/ImageNode/Placeholder.d.ts +15 -0
  43. package/components/ImageNode/Placeholder.js +30 -0
  44. package/components/ImageNode/Placeholder.js.map +1 -0
  45. package/components/ImageNode/SharedHistoryContext.d.ts +11 -0
  46. package/components/ImageNode/SharedHistoryContext.js +28 -0
  47. package/components/ImageNode/SharedHistoryContext.js.map +1 -0
  48. package/index.d.ts +22 -0
  49. package/index.js +226 -0
  50. package/index.js.map +1 -0
  51. package/package.json +32 -0
  52. package/types.d.ts +15 -0
  53. package/types.js +7 -0
  54. package/types.js.map +1 -0
  55. package/utils/clearNodeFormating.d.ts +2 -0
  56. package/utils/clearNodeFormating.js +30 -0
  57. package/utils/clearNodeFormating.js.map +1 -0
  58. package/utils/formatList.d.ts +19 -0
  59. package/utils/formatList.js +449 -0
  60. package/utils/formatList.js.map +1 -0
  61. package/utils/formatToHeading.d.ts +3 -0
  62. package/utils/formatToHeading.js +27 -0
  63. package/utils/formatToHeading.js.map +1 -0
  64. package/utils/formatToParagraph.d.ts +2 -0
  65. package/utils/formatToParagraph.js +22 -0
  66. package/utils/formatToParagraph.js.map +1 -0
  67. package/utils/formatToQuote.d.ts +2 -0
  68. package/utils/formatToQuote.js +27 -0
  69. package/utils/formatToQuote.js.map +1 -0
  70. package/utils/listNode.d.ts +11 -0
  71. package/utils/listNode.js +109 -0
  72. package/utils/listNode.js.map +1 -0
@@ -0,0 +1,449 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.$handleIndent = $handleIndent;
8
+ exports.$handleListInsertParagraph = $handleListInsertParagraph;
9
+ exports.$handleOutdent = $handleOutdent;
10
+ exports.indentList = indentList;
11
+ exports.insertList = insertList;
12
+ exports.mergeLists = mergeLists;
13
+ exports.outdentList = outdentList;
14
+ exports.removeList = removeList;
15
+ exports.updateChildrenListItemValue = updateChildrenListItemValue;
16
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
17
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
18
+ var _lexical = require("lexical");
19
+ var _ListNode = require("../ListNode");
20
+ var _utils = require("@lexical/utils");
21
+ var _ListItemNode = require("../ListItemNode");
22
+ var _ParagraphNode = require("../ParagraphNode");
23
+ var _listNode = require("./listNode");
24
+ var DEFAULT_LIST_START_NUMBER = 1;
25
+ function $isSelectingEmptyListItem(anchorNode, nodes) {
26
+ return (0, _ListItemNode.$isListItemNode)(anchorNode) && (nodes.length === 0 || nodes.length === 1 && anchorNode.is(nodes[0]) && anchorNode.getChildrenSize() === 0);
27
+ }
28
+ function $getListItemValue(listItem) {
29
+ var list = listItem.getParent();
30
+ var value = 1;
31
+ if (list !== null) {
32
+ if (!(0, _ListNode.$isListNode)(list)) {
33
+ console.log("$getListItemValue: webiny list node is not parent of webiny list item node");
34
+ return DEFAULT_LIST_START_NUMBER;
35
+ } else {
36
+ value = list.getStart();
37
+ }
38
+ }
39
+ var siblings = listItem.getPreviousSiblings();
40
+ for (var i = 0; i < siblings.length; i++) {
41
+ var sibling = siblings[i];
42
+ if ((0, _ListItemNode.$isListItemNode)(sibling) && !(0, _ListNode.$isListNode)(sibling.getFirstChild())) {
43
+ value++;
44
+ }
45
+ }
46
+ return value;
47
+ }
48
+ function insertList(editor, listType, styleId) {
49
+ editor.update(function () {
50
+ var selection = (0, _lexical.$getSelection)();
51
+ if ((0, _lexical.$isRangeSelection)(selection) || (0, _lexical.DEPRECATED_$isGridSelection)(selection)) {
52
+ var nodes = selection.getNodes();
53
+ var anchor = selection.anchor;
54
+ var anchorNode = anchor.getNode();
55
+ var anchorNodeParent = anchorNode.getParent();
56
+ if ($isSelectingEmptyListItem(anchorNode, nodes)) {
57
+ var list = (0, _ListNode.$createListNode)(listType, styleId);
58
+ if ((0, _lexical.$isRootOrShadowRoot)(anchorNodeParent)) {
59
+ anchorNode.replace(list);
60
+ var listItem = (0, _ListItemNode.$createListItemNode)();
61
+ if ((0, _lexical.$isElementNode)(anchorNode)) {
62
+ listItem.setFormat(anchorNode.getFormatType());
63
+ listItem.setIndent(anchorNode.getIndent());
64
+ }
65
+ list.append(listItem);
66
+ } else if ((0, _ListItemNode.$isListItemNode)(anchorNode)) {
67
+ var parent = anchorNode.getParentOrThrow();
68
+ append(list, parent.getChildren());
69
+ parent.replace(list);
70
+ }
71
+ return;
72
+ } else {
73
+ var handled = new Set();
74
+ for (var i = 0; i < nodes.length; i++) {
75
+ var node = nodes[i];
76
+ if ((0, _lexical.$isElementNode)(node) && node.isEmpty() && !handled.has(node.getKey())) {
77
+ createListOrMerge(node, listType, styleId);
78
+ continue;
79
+ }
80
+ if ((0, _lexical.$isLeafNode)(node)) {
81
+ var _parent = node.getParent();
82
+ while (_parent != null) {
83
+ var parentKey = _parent.getKey();
84
+ if ((0, _ListNode.$isListNode)(_parent)) {
85
+ if (!handled.has(parentKey)) {
86
+ var newListNode = (0, _ListNode.$createListNode)(listType, styleId);
87
+ append(newListNode, _parent.getChildren());
88
+ _parent.replace(newListNode);
89
+ updateChildrenListItemValue(newListNode);
90
+ handled.add(parentKey);
91
+ }
92
+ break;
93
+ } else {
94
+ var nextParent = _parent.getParent();
95
+ if ((0, _lexical.$isRootOrShadowRoot)(nextParent) && !handled.has(parentKey)) {
96
+ handled.add(parentKey);
97
+ createListOrMerge(_parent, listType, styleId);
98
+ break;
99
+ }
100
+ _parent = nextParent;
101
+ }
102
+ }
103
+ }
104
+ }
105
+ }
106
+ }
107
+ });
108
+ }
109
+ function append(node, nodesToAppend) {
110
+ node.splice(node.getChildrenSize(), 0, nodesToAppend);
111
+ }
112
+ function createListOrMerge(node, listType, styleId) {
113
+ if ((0, _ListNode.$isListNode)(node)) {
114
+ return node;
115
+ }
116
+ var previousSibling = node.getPreviousSibling();
117
+ var nextSibling = node.getNextSibling();
118
+ var listItem = (0, _ListItemNode.$createListItemNode)();
119
+ listItem.setFormat(node.getFormatType());
120
+ listItem.setIndent(node.getIndent());
121
+ append(listItem, node.getChildren());
122
+ if ((0, _ListNode.$isListNode)(previousSibling) && listType === previousSibling.getListType()) {
123
+ previousSibling.append(listItem);
124
+ node.remove();
125
+ // if the same type of list is on both sides, merge them.
126
+
127
+ if ((0, _ListNode.$isListNode)(nextSibling) && listType === nextSibling.getListType()) {
128
+ append(previousSibling, nextSibling.getChildren());
129
+ nextSibling.remove();
130
+ }
131
+ return previousSibling;
132
+ } else if ((0, _ListNode.$isListNode)(nextSibling) && listType === nextSibling.getListType()) {
133
+ nextSibling.getFirstChildOrThrow().insertBefore(listItem);
134
+ node.remove();
135
+ return nextSibling;
136
+ } else {
137
+ var list = (0, _ListNode.$createListNode)(listType, styleId);
138
+ list.append(listItem);
139
+ node.replace(list);
140
+ updateChildrenListItemValue(list);
141
+ return list;
142
+ }
143
+ }
144
+
145
+ /**
146
+ * A recursive function that goes through each list and their children, including nested lists,
147
+ * appending list2 children after list1 children and updating ListItemNode values.
148
+ * @param list1 - The first list to be merged.
149
+ * @param list2 - The second list to be merged.
150
+ */
151
+ function mergeLists(list1, list2) {
152
+ var listItem1 = list1.getLastChild();
153
+ var listItem2 = list2.getFirstChild();
154
+ if (listItem1 && listItem2 && (0, _listNode.isNestedListNode)(listItem1) && (0, _listNode.isNestedListNode)(listItem2)) {
155
+ mergeLists(listItem1.getFirstChild(), listItem2.getFirstChild());
156
+ listItem2.remove();
157
+ }
158
+ var toMerge = list2.getChildren();
159
+ if (toMerge.length > 0) {
160
+ list1.append.apply(list1, (0, _toConsumableArray2.default)(toMerge));
161
+ updateChildrenListItemValue(list1);
162
+ }
163
+ list2.remove();
164
+ }
165
+ function removeList(editor) {
166
+ editor.update(function () {
167
+ var selection = (0, _lexical.$getSelection)();
168
+ if ((0, _lexical.$isRangeSelection)(selection)) {
169
+ var listNodes = new Set();
170
+ var nodes = selection.getNodes();
171
+ var anchorNode = selection.anchor.getNode();
172
+ if ($isSelectingEmptyListItem(anchorNode, nodes)) {
173
+ listNodes.add((0, _listNode.$getTopListNode)(anchorNode));
174
+ } else {
175
+ for (var i = 0; i < nodes.length; i++) {
176
+ var node = nodes[i];
177
+ if ((0, _lexical.$isLeafNode)(node)) {
178
+ var listItemNode = (0, _utils.$getNearestNodeOfType)(node, _ListItemNode.ListItemNode);
179
+ if (listItemNode != null) {
180
+ listNodes.add((0, _listNode.$getTopListNode)(listItemNode));
181
+ }
182
+ }
183
+ }
184
+ }
185
+ var _iterator = (0, _createForOfIteratorHelper2.default)(listNodes),
186
+ _step;
187
+ try {
188
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
189
+ var listNode = _step.value;
190
+ var insertionPoint = listNode;
191
+ var listItems = (0, _listNode.$getAllListItems)(listNode);
192
+ var _iterator2 = (0, _createForOfIteratorHelper2.default)(listItems),
193
+ _step2;
194
+ try {
195
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
196
+ var _listItemNode = _step2.value;
197
+ var paragraph = (0, _ParagraphNode.$createParagraphNode)();
198
+ append(paragraph, _listItemNode.getChildren());
199
+ insertionPoint.insertAfter(paragraph);
200
+ insertionPoint = paragraph;
201
+
202
+ // When the anchor and focus fall on the textNode
203
+ // we don't have to change the selection because the textNode will be appended to
204
+ // the newly generated paragraph.
205
+ // When selection is in empty nested list item, selection is actually on the listItemNode.
206
+ // When the corresponding listItemNode is deleted and replaced by the newly generated paragraph
207
+ // we should manually set the selection's focus and anchor to the newly generated paragraph.
208
+ if (_listItemNode.__key === selection.anchor.key) {
209
+ selection.anchor.set(paragraph.getKey(), 0, "element");
210
+ }
211
+ if (_listItemNode.__key === selection.focus.key) {
212
+ selection.focus.set(paragraph.getKey(), 0, "element");
213
+ }
214
+ _listItemNode.remove();
215
+ }
216
+ } catch (err) {
217
+ _iterator2.e(err);
218
+ } finally {
219
+ _iterator2.f();
220
+ }
221
+ listNode.remove();
222
+ }
223
+ } catch (err) {
224
+ _iterator.e(err);
225
+ } finally {
226
+ _iterator.f();
227
+ }
228
+ }
229
+ });
230
+ }
231
+ function updateChildrenListItemValue(list, children) {
232
+ var childrenOrExisting = children || list.getChildren();
233
+ if (childrenOrExisting !== undefined) {
234
+ for (var i = 0; i < childrenOrExisting.length; i++) {
235
+ var child = childrenOrExisting[i];
236
+ if ((0, _ListItemNode.$isListItemNode)(child)) {
237
+ var prevValue = child.getValue();
238
+ var nextValue = $getListItemValue(child);
239
+ if (prevValue !== nextValue) {
240
+ child.setValue(nextValue);
241
+ }
242
+ }
243
+ }
244
+ }
245
+ }
246
+ function $handleIndent(WebinyListItemNodes) {
247
+ // go through each node and decide where to move it.
248
+ var removed = new Set();
249
+ WebinyListItemNodes.forEach(function (WebinyListItemNode) {
250
+ if ((0, _listNode.isNestedListNode)(WebinyListItemNode) || removed.has(WebinyListItemNode.getKey())) {
251
+ return;
252
+ }
253
+ var parent = WebinyListItemNode.getParent();
254
+
255
+ // We can cast both of the below `isNestedListNode` only returns a boolean type instead of a user-defined type guards
256
+ var nextSibling = WebinyListItemNode.getNextSibling();
257
+ var previousSibling = WebinyListItemNode.getPreviousSibling();
258
+ // if there are nested lists on either side, merge them all together.
259
+
260
+ if ((0, _listNode.isNestedListNode)(nextSibling) && (0, _listNode.isNestedListNode)(previousSibling)) {
261
+ var innerList = previousSibling.getFirstChild();
262
+ if ((0, _ListNode.$isListNode)(innerList)) {
263
+ innerList.append(WebinyListItemNode);
264
+ var nextInnerList = nextSibling.getFirstChild();
265
+ if ((0, _ListNode.$isListNode)(nextInnerList)) {
266
+ var children = nextInnerList.getChildren();
267
+ append(innerList, children);
268
+ nextSibling.remove();
269
+ removed.add(nextSibling.getKey());
270
+ }
271
+ updateChildrenListItemValue(innerList);
272
+ }
273
+ } else if ((0, _listNode.isNestedListNode)(nextSibling)) {
274
+ // if the WebinyListItemNode is next to a nested ListNode, merge them
275
+ var _innerList = nextSibling.getFirstChild();
276
+ if ((0, _ListNode.$isListNode)(_innerList)) {
277
+ var firstChild = _innerList.getFirstChild();
278
+ if (firstChild !== null) {
279
+ firstChild.insertBefore(WebinyListItemNode);
280
+ }
281
+ updateChildrenListItemValue(_innerList);
282
+ }
283
+ } else if ((0, _listNode.isNestedListNode)(previousSibling)) {
284
+ var _innerList2 = previousSibling.getFirstChild();
285
+ if ((0, _ListNode.$isListNode)(_innerList2)) {
286
+ _innerList2.append(WebinyListItemNode);
287
+ updateChildrenListItemValue(_innerList2);
288
+ }
289
+ } else {
290
+ // otherwise, we need to create a new nested ListNode
291
+
292
+ if ((0, _ListNode.$isListNode)(parent)) {
293
+ var newListItem = (0, _ListItemNode.$createListItemNode)();
294
+ var newList = (0, _ListNode.$createListNode)(parent.getListType(), parent.getStyleId());
295
+ newListItem.append(newList);
296
+ newList.append(WebinyListItemNode);
297
+ if (previousSibling) {
298
+ previousSibling.insertAfter(newListItem);
299
+ } else if (nextSibling) {
300
+ nextSibling.insertBefore(newListItem);
301
+ } else {
302
+ parent.append(newListItem);
303
+ }
304
+ }
305
+ }
306
+ if ((0, _ListNode.$isListNode)(parent)) {
307
+ updateChildrenListItemValue(parent);
308
+ }
309
+ });
310
+ }
311
+ function $handleOutdent(WebinyListItemNodes) {
312
+ // go through each node and decide where to move it.
313
+
314
+ WebinyListItemNodes.forEach(function (WebinyListItemNode) {
315
+ if ((0, _listNode.isNestedListNode)(WebinyListItemNode)) {
316
+ return;
317
+ }
318
+ var parentList = WebinyListItemNode.getParent();
319
+ var grandparentListItem = parentList ? parentList.getParent() : undefined;
320
+ var greatGrandparentList = grandparentListItem ? grandparentListItem.getParent() : undefined;
321
+ // If it doesn't have these ancestors, it's not indented.
322
+
323
+ if ((0, _ListNode.$isListNode)(greatGrandparentList) && (0, _ListItemNode.$isListItemNode)(grandparentListItem) && (0, _ListNode.$isListNode)(parentList)) {
324
+ // if it's the first child in it's parent list, insert it into the
325
+ // great grandparent list before the grandparent
326
+ var firstChild = parentList ? parentList.getFirstChild() : undefined;
327
+ var lastChild = parentList ? parentList.getLastChild() : undefined;
328
+ if (WebinyListItemNode.is(firstChild)) {
329
+ grandparentListItem.insertBefore(WebinyListItemNode);
330
+ if (parentList.isEmpty()) {
331
+ grandparentListItem.remove();
332
+ }
333
+ // if it's the last child in it's parent list, insert it into the
334
+ // great grandparent list after the grandparent.
335
+ } else if (WebinyListItemNode.is(lastChild)) {
336
+ grandparentListItem.insertAfter(WebinyListItemNode);
337
+ if (parentList.isEmpty()) {
338
+ grandparentListItem.remove();
339
+ }
340
+ } else {
341
+ // otherwise, we need to split the siblings into two new nested lists
342
+ var listType = parentList.getListType();
343
+ var themeStyleId = parentList.getStyleId();
344
+ var previousSiblingsListItem = (0, _ListItemNode.$createListItemNode)();
345
+ var previousSiblingsList = (0, _ListNode.$createListNode)(listType, themeStyleId);
346
+ previousSiblingsListItem.append(previousSiblingsList);
347
+ WebinyListItemNode.getPreviousSiblings().forEach(function (sibling) {
348
+ return previousSiblingsList.append(sibling);
349
+ });
350
+ var nextSiblingsListItem = (0, _ListItemNode.$createListItemNode)();
351
+ var nextSiblingsList = (0, _ListNode.$createListNode)(listType, themeStyleId);
352
+ nextSiblingsListItem.append(nextSiblingsList);
353
+ append(nextSiblingsList, WebinyListItemNode.getNextSiblings());
354
+ // put the sibling nested lists on either side of the grandparent list item in the great grandparent.
355
+ grandparentListItem.insertBefore(previousSiblingsListItem);
356
+ grandparentListItem.insertAfter(nextSiblingsListItem);
357
+ // replace the grandparent list item (now between the siblings) with the outdented list item.
358
+ grandparentListItem.replace(WebinyListItemNode);
359
+ }
360
+ updateChildrenListItemValue(parentList);
361
+ updateChildrenListItemValue(greatGrandparentList);
362
+ }
363
+ });
364
+ }
365
+ function maybeIndentOrOutdent(direction) {
366
+ var selection = (0, _lexical.$getSelection)();
367
+ if (!(0, _lexical.$isRangeSelection)(selection)) {
368
+ return;
369
+ }
370
+ var selectedNodes = selection.getNodes();
371
+ var webinyListItemNodes = [];
372
+ if (selectedNodes.length === 0) {
373
+ selectedNodes.push(selection.anchor.getNode());
374
+ }
375
+ if (selectedNodes.length === 1) {
376
+ // Only 1 node selected. Selection may not contain the ListNodeItem so we traverse the tree to
377
+ // find whether this is part of a WebinyListItemNode
378
+ var nearestWebinyListItemNode = (0, _listNode.findNearestListItemNode)(selectedNodes[0]);
379
+ if (nearestWebinyListItemNode !== null) {
380
+ webinyListItemNodes = [nearestWebinyListItemNode];
381
+ }
382
+ } else {
383
+ webinyListItemNodes = (0, _listNode.getUniqueListItemNodes)(selectedNodes);
384
+ }
385
+ if (webinyListItemNodes.length > 0) {
386
+ if (direction === "indent") {
387
+ $handleIndent(webinyListItemNodes);
388
+ } else {
389
+ $handleOutdent(webinyListItemNodes);
390
+ }
391
+ }
392
+ }
393
+ function indentList() {
394
+ maybeIndentOrOutdent("indent");
395
+ }
396
+ function outdentList() {
397
+ maybeIndentOrOutdent("outdent");
398
+ }
399
+ function $handleListInsertParagraph() {
400
+ var selection = (0, _lexical.$getSelection)();
401
+ if (!(0, _lexical.$isRangeSelection)(selection) || !selection.isCollapsed()) {
402
+ return false;
403
+ }
404
+
405
+ // Only run this code on empty list items
406
+ var anchor = selection.anchor.getNode();
407
+ if (!(0, _ListItemNode.$isListItemNode)(anchor) || anchor.getTextContent() !== "") {
408
+ return false;
409
+ }
410
+ var topListNode = (0, _listNode.$getTopListNode)(anchor);
411
+ var parent = anchor.getParent();
412
+ if (!(0, _ListNode.$isListNode)(parent)) {
413
+ console.log("A WebinyListItemNode must have a WebinyListNode for a parent.");
414
+ return false;
415
+ }
416
+ var grandparent = (parent === null || parent === void 0 ? void 0 : parent.getParent()) || null;
417
+ var replacementNode;
418
+ if ((0, _lexical.$isRootOrShadowRoot)(grandparent)) {
419
+ replacementNode = (0, _ParagraphNode.$createParagraphNode)();
420
+ topListNode.insertAfter(replacementNode);
421
+ } else if ((0, _ListItemNode.$isListItemNode)(grandparent)) {
422
+ replacementNode = (0, _ListItemNode.$createListItemNode)();
423
+ grandparent.insertAfter(replacementNode);
424
+ } else {
425
+ return false;
426
+ }
427
+ replacementNode.select();
428
+ var nextSiblings = anchor.getNextSiblings();
429
+ if (nextSiblings.length > 0) {
430
+ var newList = (0, _ListNode.$createListNode)(parent === null || parent === void 0 ? void 0 : parent.getListType(), parent === null || parent === void 0 ? void 0 : parent.getStyleId());
431
+ if ((0, _lexical.$isParagraphNode)(replacementNode)) {
432
+ replacementNode.insertAfter(newList);
433
+ } else {
434
+ var newListItem = (0, _ListItemNode.$createListItemNode)();
435
+ newListItem.append(newList);
436
+ replacementNode.insertAfter(newListItem);
437
+ }
438
+ nextSiblings.forEach(function (sibling) {
439
+ sibling.remove();
440
+ newList.append(sibling);
441
+ });
442
+ }
443
+
444
+ // Don't leave hanging nested empty lists
445
+ (0, _listNode.$removeHighestEmptyListParent)(anchor);
446
+ return true;
447
+ }
448
+
449
+ //# sourceMappingURL=formatList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_lexical","require","_ListNode","_utils","_ListItemNode","_ParagraphNode","_listNode","DEFAULT_LIST_START_NUMBER","$isSelectingEmptyListItem","anchorNode","nodes","$isListItemNode","length","is","getChildrenSize","$getListItemValue","listItem","list","getParent","value","$isListNode","console","log","getStart","siblings","getPreviousSiblings","i","sibling","getFirstChild","insertList","editor","listType","styleId","update","selection","$getSelection","$isRangeSelection","DEPRECATED_$isGridSelection","getNodes","anchor","getNode","anchorNodeParent","$createListNode","$isRootOrShadowRoot","replace","$createListItemNode","$isElementNode","setFormat","getFormatType","setIndent","getIndent","append","parent","getParentOrThrow","getChildren","handled","Set","node","isEmpty","has","getKey","createListOrMerge","$isLeafNode","parentKey","newListNode","updateChildrenListItemValue","add","nextParent","nodesToAppend","splice","previousSibling","getPreviousSibling","nextSibling","getNextSibling","getListType","remove","getFirstChildOrThrow","insertBefore","mergeLists","list1","list2","listItem1","getLastChild","listItem2","isNestedListNode","toMerge","apply","_toConsumableArray2","default","removeList","listNodes","$getTopListNode","listItemNode","$getNearestNodeOfType","ListItemNode","_iterator","_createForOfIteratorHelper2","_step","s","n","done","listNode","insertionPoint","listItems","$getAllListItems","_iterator2","_step2","paragraph","$createParagraphNode","insertAfter","__key","key","set","focus","err","e","f","children","childrenOrExisting","undefined","child","prevValue","getValue","nextValue","setValue","$handleIndent","WebinyListItemNodes","removed","forEach","WebinyListItemNode","innerList","nextInnerList","firstChild","newListItem","newList","getStyleId","$handleOutdent","parentList","grandparentListItem","greatGrandparentList","lastChild","themeStyleId","previousSiblingsListItem","previousSiblingsList","nextSiblingsListItem","nextSiblingsList","getNextSiblings","maybeIndentOrOutdent","direction","selectedNodes","webinyListItemNodes","push","nearestWebinyListItemNode","findNearestListItemNode","getUniqueListItemNodes","indentList","outdentList","$handleListInsertParagraph","isCollapsed","getTextContent","topListNode","grandparent","replacementNode","select","nextSiblings","$isParagraphNode","$removeHighestEmptyListParent"],"sources":["formatList.ts"],"sourcesContent":["import {\n $getSelection,\n $isElementNode,\n $isLeafNode,\n $isParagraphNode,\n $isRangeSelection,\n $isRootOrShadowRoot,\n DEPRECATED_$isGridSelection,\n ElementNode,\n LexicalEditor,\n LexicalNode,\n NodeKey\n} from \"lexical\";\nimport { $createListNode, $isListNode, ListNode } from \"~/ListNode\";\nimport { $getNearestNodeOfType } from \"@lexical/utils\";\nimport { $createListItemNode, $isListItemNode, ListItemNode } from \"~/ListItemNode\";\nimport { ListType } from \"@lexical/list\";\nimport { $createParagraphNode, ParagraphNode } from \"~/ParagraphNode\";\nimport {\n $getAllListItems,\n $getTopListNode,\n $removeHighestEmptyListParent,\n findNearestListItemNode,\n getUniqueListItemNodes,\n isNestedListNode\n} from \"~/utils/listNode\";\n\nconst DEFAULT_LIST_START_NUMBER = 1;\n\nfunction $isSelectingEmptyListItem(\n anchorNode: ListItemNode | LexicalNode,\n nodes: Array<LexicalNode>\n): boolean {\n return (\n $isListItemNode(anchorNode) &&\n (nodes.length === 0 ||\n (nodes.length === 1 && anchorNode.is(nodes[0]) && anchorNode.getChildrenSize() === 0))\n );\n}\n\nfunction $getListItemValue(listItem: ListItemNode): number {\n const list = listItem.getParent();\n\n let value = 1;\n\n if (list !== null) {\n if (!$isListNode(list)) {\n console.log(\n \"$getListItemValue: webiny list node is not parent of webiny list item node\"\n );\n return DEFAULT_LIST_START_NUMBER;\n } else {\n value = list.getStart();\n }\n }\n\n const siblings = listItem.getPreviousSiblings();\n for (let i = 0; i < siblings.length; i++) {\n const sibling = siblings[i];\n\n if ($isListItemNode(sibling) && !$isListNode(sibling.getFirstChild())) {\n value++;\n }\n }\n return value;\n}\n\nexport function insertList(editor: LexicalEditor, listType: ListType, styleId?: string): void {\n editor.update(() => {\n const selection = $getSelection();\n\n if ($isRangeSelection(selection) || DEPRECATED_$isGridSelection(selection)) {\n const nodes = selection.getNodes();\n const anchor = selection.anchor;\n const anchorNode = anchor.getNode();\n const anchorNodeParent = anchorNode.getParent();\n\n if ($isSelectingEmptyListItem(anchorNode, nodes)) {\n const list = $createListNode(listType, styleId);\n\n if ($isRootOrShadowRoot(anchorNodeParent)) {\n anchorNode.replace(list);\n const listItem = $createListItemNode();\n if ($isElementNode(anchorNode)) {\n listItem.setFormat(anchorNode.getFormatType());\n listItem.setIndent(anchorNode.getIndent());\n }\n list.append(listItem);\n } else if ($isListItemNode(anchorNode)) {\n const parent = anchorNode.getParentOrThrow();\n append(list, parent.getChildren());\n parent.replace(list);\n }\n\n return;\n } else {\n const handled = new Set();\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if ($isElementNode(node) && node.isEmpty() && !handled.has(node.getKey())) {\n createListOrMerge(node, listType, styleId);\n continue;\n }\n\n if ($isLeafNode(node)) {\n let parent = node.getParent();\n while (parent != null) {\n const parentKey = parent.getKey();\n\n if ($isListNode(parent)) {\n if (!handled.has(parentKey)) {\n const newListNode = $createListNode(listType, styleId);\n append(newListNode, parent.getChildren());\n parent.replace(newListNode);\n updateChildrenListItemValue(newListNode);\n handled.add(parentKey);\n }\n\n break;\n } else {\n const nextParent = parent.getParent();\n\n if ($isRootOrShadowRoot(nextParent) && !handled.has(parentKey)) {\n handled.add(parentKey);\n createListOrMerge(parent, listType, styleId);\n break;\n }\n\n parent = nextParent;\n }\n }\n }\n }\n }\n }\n });\n}\n\nfunction append(node: ElementNode, nodesToAppend: Array<LexicalNode>) {\n node.splice(node.getChildrenSize(), 0, nodesToAppend);\n}\n\nfunction createListOrMerge(node: ElementNode, listType: ListType, styleId?: string): ListNode {\n if ($isListNode(node)) {\n return node;\n }\n\n const previousSibling = node.getPreviousSibling();\n const nextSibling = node.getNextSibling();\n const listItem = $createListItemNode();\n listItem.setFormat(node.getFormatType());\n listItem.setIndent(node.getIndent());\n append(listItem, node.getChildren());\n\n if ($isListNode(previousSibling) && listType === previousSibling.getListType()) {\n previousSibling.append(listItem);\n node.remove();\n // if the same type of list is on both sides, merge them.\n\n if ($isListNode(nextSibling) && listType === nextSibling.getListType()) {\n append(previousSibling, nextSibling.getChildren());\n nextSibling.remove();\n }\n return previousSibling;\n } else if ($isListNode(nextSibling) && listType === nextSibling.getListType()) {\n nextSibling.getFirstChildOrThrow().insertBefore(listItem);\n node.remove();\n return nextSibling;\n } else {\n const list = $createListNode(listType, styleId);\n list.append(listItem);\n node.replace(list);\n updateChildrenListItemValue(list);\n return list;\n }\n}\n\n/**\n * A recursive function that goes through each list and their children, including nested lists,\n * appending list2 children after list1 children and updating ListItemNode values.\n * @param list1 - The first list to be merged.\n * @param list2 - The second list to be merged.\n */\nexport function mergeLists(list1: ListNode, list2: ListNode): void {\n const listItem1 = list1.getLastChild();\n const listItem2 = list2.getFirstChild();\n\n if (listItem1 && listItem2 && isNestedListNode(listItem1) && isNestedListNode(listItem2)) {\n mergeLists(listItem1.getFirstChild(), listItem2.getFirstChild());\n listItem2.remove();\n }\n\n const toMerge = list2.getChildren();\n if (toMerge.length > 0) {\n list1.append(...toMerge);\n updateChildrenListItemValue(list1);\n }\n\n list2.remove();\n}\n\nexport function removeList(editor: LexicalEditor): void {\n editor.update(() => {\n const selection = $getSelection();\n\n if ($isRangeSelection(selection)) {\n const listNodes = new Set<ListNode>();\n const nodes = selection.getNodes();\n const anchorNode = selection.anchor.getNode();\n\n if ($isSelectingEmptyListItem(anchorNode, nodes)) {\n listNodes.add($getTopListNode(anchorNode));\n } else {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if ($isLeafNode(node)) {\n const listItemNode = $getNearestNodeOfType(node, ListItemNode);\n\n if (listItemNode != null) {\n listNodes.add($getTopListNode(listItemNode));\n }\n }\n }\n }\n\n for (const listNode of listNodes) {\n let insertionPoint: ListNode | ParagraphNode = listNode;\n\n const listItems = $getAllListItems(listNode);\n\n for (const listItemNode of listItems) {\n const paragraph = $createParagraphNode();\n\n append(paragraph, listItemNode.getChildren());\n\n insertionPoint.insertAfter(paragraph);\n insertionPoint = paragraph;\n\n // When the anchor and focus fall on the textNode\n // we don't have to change the selection because the textNode will be appended to\n // the newly generated paragraph.\n // When selection is in empty nested list item, selection is actually on the listItemNode.\n // When the corresponding listItemNode is deleted and replaced by the newly generated paragraph\n // we should manually set the selection's focus and anchor to the newly generated paragraph.\n if (listItemNode.__key === selection.anchor.key) {\n selection.anchor.set(paragraph.getKey(), 0, \"element\");\n }\n if (listItemNode.__key === selection.focus.key) {\n selection.focus.set(paragraph.getKey(), 0, \"element\");\n }\n\n listItemNode.remove();\n }\n listNode.remove();\n }\n }\n });\n}\n\nexport function updateChildrenListItemValue(list: ListNode, children?: Array<LexicalNode>): void {\n const childrenOrExisting = children || list.getChildren();\n if (childrenOrExisting !== undefined) {\n for (let i = 0; i < childrenOrExisting.length; i++) {\n const child = childrenOrExisting[i];\n if ($isListItemNode(child)) {\n const prevValue = child.getValue();\n const nextValue = $getListItemValue(child);\n\n if (prevValue !== nextValue) {\n child.setValue(nextValue);\n }\n }\n }\n }\n}\n\nexport function $handleIndent(WebinyListItemNodes: Array<ListItemNode>): void {\n // go through each node and decide where to move it.\n const removed = new Set<NodeKey>();\n\n WebinyListItemNodes.forEach((WebinyListItemNode: ListItemNode) => {\n if (isNestedListNode(WebinyListItemNode) || removed.has(WebinyListItemNode.getKey())) {\n return;\n }\n\n const parent = WebinyListItemNode.getParent();\n\n // We can cast both of the below `isNestedListNode` only returns a boolean type instead of a user-defined type guards\n const nextSibling = WebinyListItemNode.getNextSibling<ListItemNode>() as ListItemNode;\n const previousSibling =\n WebinyListItemNode.getPreviousSibling<ListItemNode>() as ListItemNode;\n // if there are nested lists on either side, merge them all together.\n\n if (isNestedListNode(nextSibling) && isNestedListNode(previousSibling)) {\n const innerList = previousSibling.getFirstChild();\n\n if ($isListNode(innerList)) {\n innerList.append(WebinyListItemNode);\n const nextInnerList = nextSibling.getFirstChild();\n\n if ($isListNode(nextInnerList)) {\n const children = nextInnerList.getChildren();\n append(innerList, children);\n nextSibling.remove();\n removed.add(nextSibling.getKey());\n }\n updateChildrenListItemValue(innerList);\n }\n } else if (isNestedListNode(nextSibling)) {\n // if the WebinyListItemNode is next to a nested ListNode, merge them\n const innerList = nextSibling.getFirstChild();\n\n if ($isListNode(innerList)) {\n const firstChild = innerList.getFirstChild();\n\n if (firstChild !== null) {\n firstChild.insertBefore(WebinyListItemNode);\n }\n updateChildrenListItemValue(innerList);\n }\n } else if (isNestedListNode(previousSibling)) {\n const innerList = previousSibling.getFirstChild();\n\n if ($isListNode(innerList)) {\n innerList.append(WebinyListItemNode);\n updateChildrenListItemValue(innerList);\n }\n } else {\n // otherwise, we need to create a new nested ListNode\n\n if ($isListNode(parent)) {\n const newListItem = $createListItemNode();\n const newList = $createListNode(parent.getListType(), parent.getStyleId());\n newListItem.append(newList);\n newList.append(WebinyListItemNode);\n\n if (previousSibling) {\n previousSibling.insertAfter(newListItem);\n } else if (nextSibling) {\n nextSibling.insertBefore(newListItem);\n } else {\n parent.append(newListItem);\n }\n }\n }\n\n if ($isListNode(parent)) {\n updateChildrenListItemValue(parent);\n }\n });\n}\n\nexport function $handleOutdent(WebinyListItemNodes: Array<ListItemNode>): void {\n // go through each node and decide where to move it.\n\n WebinyListItemNodes.forEach(WebinyListItemNode => {\n if (isNestedListNode(WebinyListItemNode)) {\n return;\n }\n const parentList = WebinyListItemNode.getParent();\n const grandparentListItem = parentList ? parentList.getParent() : undefined;\n const greatGrandparentList = grandparentListItem\n ? grandparentListItem.getParent()\n : undefined;\n // If it doesn't have these ancestors, it's not indented.\n\n if (\n $isListNode(greatGrandparentList) &&\n $isListItemNode(grandparentListItem) &&\n $isListNode(parentList)\n ) {\n // if it's the first child in it's parent list, insert it into the\n // great grandparent list before the grandparent\n const firstChild = parentList ? parentList.getFirstChild() : undefined;\n const lastChild = parentList ? parentList.getLastChild() : undefined;\n\n if (WebinyListItemNode.is(firstChild)) {\n grandparentListItem.insertBefore(WebinyListItemNode);\n\n if (parentList.isEmpty()) {\n grandparentListItem.remove();\n }\n // if it's the last child in it's parent list, insert it into the\n // great grandparent list after the grandparent.\n } else if (WebinyListItemNode.is(lastChild)) {\n grandparentListItem.insertAfter(WebinyListItemNode);\n\n if (parentList.isEmpty()) {\n grandparentListItem.remove();\n }\n } else {\n // otherwise, we need to split the siblings into two new nested lists\n const listType = parentList.getListType();\n const themeStyleId = parentList.getStyleId();\n const previousSiblingsListItem = $createListItemNode();\n const previousSiblingsList = $createListNode(listType, themeStyleId);\n previousSiblingsListItem.append(previousSiblingsList);\n WebinyListItemNode.getPreviousSiblings().forEach(sibling =>\n previousSiblingsList.append(sibling)\n );\n const nextSiblingsListItem = $createListItemNode();\n const nextSiblingsList = $createListNode(listType, themeStyleId);\n nextSiblingsListItem.append(nextSiblingsList);\n append(nextSiblingsList, WebinyListItemNode.getNextSiblings());\n // put the sibling nested lists on either side of the grandparent list item in the great grandparent.\n grandparentListItem.insertBefore(previousSiblingsListItem);\n grandparentListItem.insertAfter(nextSiblingsListItem);\n // replace the grandparent list item (now between the siblings) with the outdented list item.\n grandparentListItem.replace(WebinyListItemNode);\n }\n updateChildrenListItemValue(parentList);\n updateChildrenListItemValue(greatGrandparentList);\n }\n });\n}\n\nfunction maybeIndentOrOutdent(direction: \"indent\" | \"outdent\"): void {\n const selection = $getSelection();\n\n if (!$isRangeSelection(selection)) {\n return;\n }\n const selectedNodes = selection.getNodes();\n let webinyListItemNodes: Array<ListItemNode> = [];\n\n if (selectedNodes.length === 0) {\n selectedNodes.push(selection.anchor.getNode());\n }\n\n if (selectedNodes.length === 1) {\n // Only 1 node selected. Selection may not contain the ListNodeItem so we traverse the tree to\n // find whether this is part of a WebinyListItemNode\n const nearestWebinyListItemNode = findNearestListItemNode(selectedNodes[0]);\n\n if (nearestWebinyListItemNode !== null) {\n webinyListItemNodes = [nearestWebinyListItemNode];\n }\n } else {\n webinyListItemNodes = getUniqueListItemNodes(selectedNodes);\n }\n\n if (webinyListItemNodes.length > 0) {\n if (direction === \"indent\") {\n $handleIndent(webinyListItemNodes);\n } else {\n $handleOutdent(webinyListItemNodes);\n }\n }\n}\n\nexport function indentList(): void {\n maybeIndentOrOutdent(\"indent\");\n}\n\nexport function outdentList(): void {\n maybeIndentOrOutdent(\"outdent\");\n}\n\nexport function $handleListInsertParagraph(): boolean {\n const selection = $getSelection();\n\n if (!$isRangeSelection(selection) || !selection.isCollapsed()) {\n return false;\n }\n\n // Only run this code on empty list items\n const anchor = selection.anchor.getNode();\n\n if (!$isListItemNode(anchor) || anchor.getTextContent() !== \"\") {\n return false;\n }\n const topListNode = $getTopListNode(anchor);\n const parent = anchor.getParent();\n\n if (!$isListNode(parent)) {\n console.log(\"A WebinyListItemNode must have a WebinyListNode for a parent.\");\n return false;\n }\n\n const grandparent = parent?.getParent() || null;\n\n let replacementNode;\n\n if ($isRootOrShadowRoot(grandparent)) {\n replacementNode = $createParagraphNode();\n topListNode.insertAfter(replacementNode);\n } else if ($isListItemNode(grandparent)) {\n replacementNode = $createListItemNode();\n grandparent.insertAfter(replacementNode);\n } else {\n return false;\n }\n replacementNode.select();\n\n const nextSiblings = anchor.getNextSiblings();\n\n if (nextSiblings.length > 0) {\n const newList = $createListNode(parent?.getListType(), parent?.getStyleId());\n\n if ($isParagraphNode(replacementNode)) {\n replacementNode.insertAfter(newList);\n } else {\n const newListItem = $createListItemNode();\n newListItem.append(newList);\n replacementNode.insertAfter(newListItem);\n }\n nextSiblings.forEach(sibling => {\n sibling.remove();\n newList.append(sibling);\n });\n }\n\n // Don't leave hanging nested empty lists\n $removeHighestEmptyListParent(anchor);\n\n return true;\n}\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { LexicalEditor } from "lexical";
2
+ import { HeadingTagType } from "@lexical/rich-text";
3
+ export declare const formatToHeading: (editor: LexicalEditor, tag: HeadingTagType, typographyStyleId?: string) => void;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.formatToHeading = void 0;
7
+ var _lexical = require("lexical");
8
+ var _selection = require("@lexical/selection");
9
+ var _HeadingNode = require("../HeadingNode");
10
+ /*
11
+ * Will change the selected HTML tag to specified heading or h1-h6.
12
+ * For example if the selection is p with content inside after formatting the root tag
13
+ * will be h1 with heading 1 theme style and the same content inside.
14
+ * */
15
+ var formatToHeading = function formatToHeading(editor, tag, typographyStyleId) {
16
+ editor.update(function () {
17
+ var selection = (0, _lexical.$getSelection)();
18
+ if ((0, _lexical.$isRangeSelection)(selection) || (0, _lexical.DEPRECATED_$isGridSelection)(selection)) {
19
+ (0, _selection.$setBlocksType)(selection, function () {
20
+ return (0, _HeadingNode.$createHeadingNode)(tag, typographyStyleId);
21
+ });
22
+ }
23
+ });
24
+ };
25
+ exports.formatToHeading = formatToHeading;
26
+
27
+ //# sourceMappingURL=formatToHeading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_lexical","require","_selection","_HeadingNode","formatToHeading","editor","tag","typographyStyleId","update","selection","$getSelection","$isRangeSelection","DEPRECATED_$isGridSelection","$setBlocksType","$createHeadingNode","exports"],"sources":["formatToHeading.ts"],"sourcesContent":["import {\n $getSelection,\n $isRangeSelection,\n DEPRECATED_$isGridSelection,\n LexicalEditor\n} from \"lexical\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport { HeadingTagType } from \"@lexical/rich-text\";\nimport { $createHeadingNode } from \"~/HeadingNode\";\n\n/*\n * Will change the selected HTML tag to specified heading or h1-h6.\n * For example if the selection is p with content inside after formatting the root tag\n * will be h1 with heading 1 theme style and the same content inside.\n * */\nexport const formatToHeading = (\n editor: LexicalEditor,\n tag: HeadingTagType,\n typographyStyleId?: string\n) => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection) || DEPRECATED_$isGridSelection(selection)) {\n $setBlocksType(selection, () => $createHeadingNode(tag, typographyStyleId));\n }\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAMA,IAAAC,UAAA,GAAAD,OAAA;AAEA,IAAAE,YAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACA;AACO,IAAMG,eAAe,GAAG,SAAlBA,eAAeA,CACxBC,MAAqB,EACrBC,GAAmB,EACnBC,iBAA0B,EACzB;EACDF,MAAM,CAACG,MAAM,CAAC,YAAM;IAChB,IAAMC,SAAS,GAAG,IAAAC,sBAAa,EAAC,CAAC;IACjC,IAAI,IAAAC,0BAAiB,EAACF,SAAS,CAAC,IAAI,IAAAG,oCAA2B,EAACH,SAAS,CAAC,EAAE;MACxE,IAAAI,yBAAc,EAACJ,SAAS,EAAE;QAAA,OAAM,IAAAK,+BAAkB,EAACR,GAAG,EAAEC,iBAAiB,CAAC;MAAA,EAAC;IAC/E;EACJ,CAAC,CAAC;AACN,CAAC;AAACQ,OAAA,CAAAX,eAAA,GAAAA,eAAA"}
@@ -0,0 +1,2 @@
1
+ import { LexicalEditor } from "lexical";
2
+ export declare const formatToParagraph: (editor: LexicalEditor, typographyStyleId?: string) => void;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.formatToParagraph = void 0;
7
+ var _lexical = require("lexical");
8
+ var _selection = require("@lexical/selection");
9
+ var _ParagraphNode = require("../ParagraphNode");
10
+ var formatToParagraph = function formatToParagraph(editor, typographyStyleId) {
11
+ editor.update(function () {
12
+ var selection = (0, _lexical.$getSelection)();
13
+ if ((0, _lexical.$isRangeSelection)(selection) || (0, _lexical.DEPRECATED_$isGridSelection)(selection)) {
14
+ (0, _selection.$setBlocksType)(selection, function () {
15
+ return (0, _ParagraphNode.$createParagraphNode)(typographyStyleId);
16
+ });
17
+ }
18
+ });
19
+ };
20
+ exports.formatToParagraph = formatToParagraph;
21
+
22
+ //# sourceMappingURL=formatToParagraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_lexical","require","_selection","_ParagraphNode","formatToParagraph","editor","typographyStyleId","update","selection","$getSelection","$isRangeSelection","DEPRECATED_$isGridSelection","$setBlocksType","$createParagraphNode","exports"],"sources":["formatToParagraph.ts"],"sourcesContent":["import {\n $getSelection,\n $isRangeSelection,\n DEPRECATED_$isGridSelection,\n LexicalEditor\n} from \"lexical\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport { $createParagraphNode } from \"~/ParagraphNode\";\n\nexport const formatToParagraph = (editor: LexicalEditor, typographyStyleId?: string) => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection) || DEPRECATED_$isGridSelection(selection)) {\n $setBlocksType(selection, () => $createParagraphNode(typographyStyleId));\n }\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAMA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AAEO,IAAMG,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIC,MAAqB,EAAEC,iBAA0B,EAAK;EACpFD,MAAM,CAACE,MAAM,CAAC,YAAM;IAChB,IAAMC,SAAS,GAAG,IAAAC,sBAAa,EAAC,CAAC;IACjC,IAAI,IAAAC,0BAAiB,EAACF,SAAS,CAAC,IAAI,IAAAG,oCAA2B,EAACH,SAAS,CAAC,EAAE;MACxE,IAAAI,yBAAc,EAACJ,SAAS,EAAE;QAAA,OAAM,IAAAK,mCAAoB,EAACP,iBAAiB,CAAC;MAAA,EAAC;IAC5E;EACJ,CAAC,CAAC;AACN,CAAC;AAACQ,OAAA,CAAAV,iBAAA,GAAAA,iBAAA"}
@@ -0,0 +1,2 @@
1
+ import { LexicalEditor } from "lexical";
2
+ export declare const formatToQuote: (editor: LexicalEditor, themeStyleId?: string) => void;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.formatToQuote = void 0;
7
+ var _lexical = require("lexical");
8
+ var _selection = require("@lexical/selection");
9
+ var _QuoteNode = require("../QuoteNode");
10
+ /*
11
+ * Will change the selected root HTML tag to specified quoteblock tag.
12
+ * For example if the selection is paragraph <p> with content inside after formatting the root tag
13
+ * will be quoteblock with same content inside.
14
+ * */
15
+ var formatToQuote = function formatToQuote(editor, themeStyleId) {
16
+ editor.update(function () {
17
+ var selection = (0, _lexical.$getSelection)();
18
+ if ((0, _lexical.$isRangeSelection)(selection) || (0, _lexical.DEPRECATED_$isGridSelection)(selection)) {
19
+ (0, _selection.$setBlocksType)(selection, function () {
20
+ return (0, _QuoteNode.$createQuoteNode)(themeStyleId);
21
+ });
22
+ }
23
+ });
24
+ };
25
+ exports.formatToQuote = formatToQuote;
26
+
27
+ //# sourceMappingURL=formatToQuote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_lexical","require","_selection","_QuoteNode","formatToQuote","editor","themeStyleId","update","selection","$getSelection","$isRangeSelection","DEPRECATED_$isGridSelection","$setBlocksType","$createQuoteNode","exports"],"sources":["formatToQuote.ts"],"sourcesContent":["import {\n $getSelection,\n $isRangeSelection,\n DEPRECATED_$isGridSelection,\n LexicalEditor\n} from \"lexical\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport { $createQuoteNode } from \"~/QuoteNode\";\n\n/*\n * Will change the selected root HTML tag to specified quoteblock tag.\n * For example if the selection is paragraph <p> with content inside after formatting the root tag\n * will be quoteblock with same content inside.\n * */\nexport const formatToQuote = (editor: LexicalEditor, themeStyleId?: string) => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection) || DEPRECATED_$isGridSelection(selection)) {\n $setBlocksType(selection, () => $createQuoteNode(themeStyleId));\n }\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAMA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACA;AACO,IAAMG,aAAa,GAAG,SAAhBA,aAAaA,CAAIC,MAAqB,EAAEC,YAAqB,EAAK;EAC3ED,MAAM,CAACE,MAAM,CAAC,YAAM;IAChB,IAAMC,SAAS,GAAG,IAAAC,sBAAa,EAAC,CAAC;IACjC,IAAI,IAAAC,0BAAiB,EAACF,SAAS,CAAC,IAAI,IAAAG,oCAA2B,EAACH,SAAS,CAAC,EAAE;MACxE,IAAAI,yBAAc,EAACJ,SAAS,EAAE;QAAA,OAAM,IAAAK,2BAAgB,EAACP,YAAY,CAAC;MAAA,EAAC;IACnE;EACJ,CAAC,CAAC;AACN,CAAC;AAACQ,OAAA,CAAAV,aAAA,GAAAA,aAAA"}
@@ -0,0 +1,11 @@
1
+ import type { LexicalNode } from "lexical";
2
+ import { ListNode } from "../ListNode";
3
+ import { ListItemNode } from "../ListItemNode";
4
+ export declare function $getListDepth(listNode: ListNode): number;
5
+ export declare function $getTopListNode(listItem: LexicalNode): ListNode;
6
+ export declare function $getAllListItems(node: ListNode): Array<ListItemNode>;
7
+ export declare function isNestedListNode(node: LexicalNode | null | undefined): boolean;
8
+ export declare function findNearestListItemNode(node: LexicalNode): ListItemNode | null;
9
+ export declare function getUniqueListItemNodes(nodeList: Array<LexicalNode>): Array<ListItemNode>;
10
+ export declare function $removeHighestEmptyListParent(sublist: ListItemNode | ListNode): void;
11
+ export declare function wrapInListItem(node: LexicalNode): ListItemNode;