@webiny/lexical-nodes 6.0.0-beta.0 → 6.0.0-rc.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 (83) hide show
  1. package/FontColorNode.d.ts +24 -22
  2. package/FontColorNode.js +114 -103
  3. package/FontColorNode.js.map +1 -1
  4. package/HeadingNode.d.ts +30 -20
  5. package/HeadingNode.js +185 -176
  6. package/HeadingNode.js.map +1 -1
  7. package/ImageNode.d.ts +2 -12
  8. package/ImageNode.js +119 -193
  9. package/ImageNode.js.map +1 -1
  10. package/LinkNode.d.ts +6 -6
  11. package/LinkNode.js +249 -347
  12. package/LinkNode.js.map +1 -1
  13. package/ListItemNode.d.ts +6 -5
  14. package/ListItemNode.js +275 -352
  15. package/ListItemNode.js.map +1 -1
  16. package/ListNode.d.ts +32 -19
  17. package/ListNode.js +170 -210
  18. package/ListNode.js.map +1 -1
  19. package/ParagraphNode.d.ts +30 -20
  20. package/ParagraphNode.js +144 -201
  21. package/ParagraphNode.js.map +1 -1
  22. package/QuoteNode.d.ts +27 -20
  23. package/QuoteNode.js +102 -208
  24. package/QuoteNode.js.map +1 -1
  25. package/README.md +9 -4
  26. package/components/ImageNode/ImageComponent.d.ts +2 -7
  27. package/components/ImageNode/ImageComponent.js +72 -166
  28. package/components/ImageNode/ImageComponent.js.map +1 -1
  29. package/components/ImageNode/ImageResizer.d.ts +1 -8
  30. package/components/ImageNode/ImageResizer.js +80 -95
  31. package/components/ImageNode/ImageResizer.js.map +1 -1
  32. package/generateInitialLexicalValue.d.ts +4 -0
  33. package/generateInitialLexicalValue.js +27 -0
  34. package/generateInitialLexicalValue.js.map +1 -0
  35. package/index.d.ts +19 -23
  36. package/index.js +50 -233
  37. package/index.js.map +1 -1
  38. package/package.json +22 -19
  39. package/prepareLexicalState.d.ts +2 -0
  40. package/prepareLexicalState.js +53 -0
  41. package/prepareLexicalState.js.map +1 -0
  42. package/types.d.ts +5 -9
  43. package/types.js +1 -5
  44. package/types.js.map +1 -1
  45. package/utils/clearNodeFormating.d.ts +2 -2
  46. package/utils/clearNodeFormating.js +12 -18
  47. package/utils/clearNodeFormating.js.map +1 -1
  48. package/utils/formatList.d.ts +4 -4
  49. package/utils/formatList.js +171 -208
  50. package/utils/formatList.js.map +1 -1
  51. package/utils/formatToHeading.d.ts +2 -2
  52. package/utils/formatToHeading.js +8 -15
  53. package/utils/formatToHeading.js.map +1 -1
  54. package/utils/formatToParagraph.d.ts +1 -1
  55. package/utils/formatToParagraph.js +8 -16
  56. package/utils/formatToParagraph.js.map +1 -1
  57. package/utils/formatToQuote.d.ts +1 -1
  58. package/utils/formatToQuote.js +10 -17
  59. package/utils/formatToQuote.js.map +1 -1
  60. package/utils/getStyleId.d.ts +11 -0
  61. package/utils/getStyleId.js +14 -0
  62. package/utils/getStyleId.js.map +1 -0
  63. package/utils/listNode.d.ts +14 -4
  64. package/utils/listNode.js +43 -49
  65. package/utils/listNode.js.map +1 -1
  66. package/utils/toggleLink.d.ts +1 -1
  67. package/utils/toggleLink.js +41 -45
  68. package/utils/toggleLink.js.map +1 -1
  69. package/TypographyNode.d.ts +0 -39
  70. package/TypographyNode.js +0 -147
  71. package/TypographyNode.js.map +0 -1
  72. package/components/ImageNode/ContentEditable.css +0 -22
  73. package/components/ImageNode/ContentEditable.d.ts +0 -12
  74. package/components/ImageNode/ContentEditable.js +0 -26
  75. package/components/ImageNode/ContentEditable.js.map +0 -1
  76. package/components/ImageNode/ImageComponent.css +0 -43
  77. package/components/ImageNode/Placeholder.css +0 -20
  78. package/components/ImageNode/Placeholder.d.ts +0 -15
  79. package/components/ImageNode/Placeholder.js +0 -30
  80. package/components/ImageNode/Placeholder.js.map +0 -1
  81. package/components/ImageNode/SharedHistoryContext.d.ts +0 -10
  82. package/components/ImageNode/SharedHistoryContext.js +0 -27
  83. package/components/ImageNode/SharedHistoryContext.js.map +0 -1
@@ -1 +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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","ignoreList":[]}
1
+ {"version":3,"names":["$getSelection","$isElementNode","$isLeafNode","$isParagraphNode","$isRangeSelection","$isRootOrShadowRoot","$createListNode","$isListNode","$getNearestNodeOfType","$createListItemNode","$isListItemNode","ListItemNode","$createParagraphNode","$getAllListItems","$getTopListNode","$removeHighestEmptyListParent","findNearestListItemNode","getUniqueListItemNodes","isNestedListNode","DEFAULT_LIST_START_NUMBER","$isSelectingEmptyListItem","anchorNode","nodes","length","is","getChildrenSize","$getListItemValue","listItem","list","getParent","value","console","log","getStart","siblings","getPreviousSiblings","i","sibling","getFirstChild","insertList","editor","listType","styleId","update","selection","getNodes","anchor","getNode","anchorNodeParent","replace","setFormat","getFormatType","setIndent","getIndent","append","parent","getParentOrThrow","getChildren","handled","Set","node","isEmpty","has","getKey","createListOrMerge","parentKey","newListNode","updateChildrenListItemValue","add","nextParent","nodesToAppend","splice","previousSibling","getPreviousSibling","nextSibling","getNextSibling","getListType","remove","getFirstChildOrThrow","insertBefore","mergeLists","list1","list2","listItem1","getLastChild","listItem2","toMerge","removeList","listNodes","listItemNode","listNode","insertionPoint","listItems","paragraph","insertAfter","__key","key","set","focus","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","indentList","outdentList","$handleListInsertParagraph","isCollapsed","getTextContent","topListNode","grandparent","replacementNode","select","nextSiblings"],"sources":["formatList.ts"],"sourcesContent":["import type { ElementNode, LexicalEditor, LexicalNode, NodeKey } from \"lexical\";\nimport {\n $getSelection,\n $isElementNode,\n $isLeafNode,\n $isParagraphNode,\n $isRangeSelection,\n $isRootOrShadowRoot\n} from \"lexical\";\nimport type { ListNode } from \"~/ListNode.js\";\nimport { $createListNode, $isListNode } from \"~/ListNode.js\";\nimport { $getNearestNodeOfType } from \"@lexical/utils\";\nimport { $createListItemNode, $isListItemNode, ListItemNode } from \"~/ListItemNode.js\";\nimport type { ListType } from \"@lexical/list\";\nimport type { ParagraphNode } from \"~/ParagraphNode.js\";\nimport { $createParagraphNode } from \"~/ParagraphNode.js\";\nimport {\n $getAllListItems,\n $getTopListNode,\n $removeHighestEmptyListParent,\n findNearestListItemNode,\n getUniqueListItemNodes,\n isNestedListNode\n} from \"~/utils/listNode.js\";\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 (selection && $isRangeSelection(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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","ignoreList":[]}
@@ -1,3 +1,3 @@
1
- import { LexicalEditor } from "lexical";
2
- import { HeadingTagType } from "@lexical/rich-text";
1
+ import type { LexicalEditor } from "lexical";
2
+ import type { HeadingTagType } from "@lexical/rich-text";
3
3
  export declare const formatToHeading: (editor: LexicalEditor, tag: HeadingTagType, typographyStyleId?: string) => void;
@@ -1,24 +1,17 @@
1
- "use strict";
1
+ import { $getSelection, $isRangeSelection } from "lexical";
2
+ import { $setBlocksType } from "@lexical/selection";
3
+ import { $createHeadingNode } from "../HeadingNode.js";
2
4
 
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
5
  /*
11
6
  * Will change the selected HTML tag to specified heading or h1-h6.
12
7
  * For example if the selection is p with content inside after formatting the root tag
13
8
  * will be h1 with heading 1 theme style and the same content inside.
14
9
  * */
15
- var formatToHeading = exports.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
- });
10
+ export const formatToHeading = (editor, tag, typographyStyleId) => {
11
+ editor.update(() => {
12
+ const selection = $getSelection();
13
+ if ($isRangeSelection(selection)) {
14
+ $setBlocksType(selection, () => $createHeadingNode(tag, typographyStyleId));
22
15
  }
23
16
  });
24
17
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_lexical","require","_selection","_HeadingNode","formatToHeading","exports","editor","tag","typographyStyleId","update","selection","$getSelection","$isRangeSelection","DEPRECATED_$isGridSelection","$setBlocksType","$createHeadingNode"],"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,GAAAC,OAAA,CAAAD,eAAA,GAAG,SAAlBA,eAAeA,CACxBE,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","ignoreList":[]}
1
+ {"version":3,"names":["$getSelection","$isRangeSelection","$setBlocksType","$createHeadingNode","formatToHeading","editor","tag","typographyStyleId","update","selection"],"sources":["formatToHeading.ts"],"sourcesContent":["import type { LexicalEditor } from \"lexical\";\nimport { $getSelection, $isRangeSelection } from \"lexical\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport type { HeadingTagType } from \"@lexical/rich-text\";\nimport { $createHeadingNode } from \"~/HeadingNode.js\";\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)) {\n $setBlocksType(selection, () => $createHeadingNode(tag, typographyStyleId));\n }\n });\n};\n"],"mappings":"AACA,SAASA,aAAa,EAAEC,iBAAiB,QAAQ,SAAS;AAC1D,SAASC,cAAc,QAAQ,oBAAoB;AAEnD,SAASC,kBAAkB;;AAE3B;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,eAAe,GAAGA,CAC3BC,MAAqB,EACrBC,GAAmB,EACnBC,iBAA0B,KACzB;EACDF,MAAM,CAACG,MAAM,CAAC,MAAM;IAChB,MAAMC,SAAS,GAAGT,aAAa,CAAC,CAAC;IACjC,IAAIC,iBAAiB,CAACQ,SAAS,CAAC,EAAE;MAC9BP,cAAc,CAACO,SAAS,EAAE,MAAMN,kBAAkB,CAACG,GAAG,EAAEC,iBAAiB,CAAC,CAAC;IAC/E;EACJ,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import { LexicalEditor } from "lexical";
1
+ import type { LexicalEditor } from "lexical";
2
2
  export declare const formatToParagraph: (editor: LexicalEditor, typographyStyleId?: string) => void;
@@ -1,19 +1,11 @@
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 = exports.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
- });
1
+ import { $getSelection, $isRangeSelection } from "lexical";
2
+ import { $setBlocksType } from "@lexical/selection";
3
+ import { $createParagraphNode } from "../ParagraphNode.js";
4
+ export const formatToParagraph = (editor, typographyStyleId) => {
5
+ editor.update(() => {
6
+ const selection = $getSelection();
7
+ if ($isRangeSelection(selection)) {
8
+ $setBlocksType(selection, () => $createParagraphNode(typographyStyleId));
17
9
  }
18
10
  });
19
11
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_lexical","require","_selection","_ParagraphNode","formatToParagraph","exports","editor","typographyStyleId","update","selection","$getSelection","$isRangeSelection","DEPRECATED_$isGridSelection","$setBlocksType","$createParagraphNode"],"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,GAAAC,OAAA,CAAAD,iBAAA,GAAG,SAApBA,iBAAiBA,CAAIE,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","ignoreList":[]}
1
+ {"version":3,"names":["$getSelection","$isRangeSelection","$setBlocksType","$createParagraphNode","formatToParagraph","editor","typographyStyleId","update","selection"],"sources":["formatToParagraph.ts"],"sourcesContent":["import type { LexicalEditor } from \"lexical\";\nimport { $getSelection, $isRangeSelection } from \"lexical\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport { $createParagraphNode } from \"~/ParagraphNode.js\";\n\nexport const formatToParagraph = (editor: LexicalEditor, typographyStyleId?: string) => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n $setBlocksType(selection, () => $createParagraphNode(typographyStyleId));\n }\n });\n};\n"],"mappings":"AACA,SAASA,aAAa,EAAEC,iBAAiB,QAAQ,SAAS;AAC1D,SAASC,cAAc,QAAQ,oBAAoB;AACnD,SAASC,oBAAoB;AAE7B,OAAO,MAAMC,iBAAiB,GAAGA,CAACC,MAAqB,EAAEC,iBAA0B,KAAK;EACpFD,MAAM,CAACE,MAAM,CAAC,MAAM;IAChB,MAAMC,SAAS,GAAGR,aAAa,CAAC,CAAC;IACjC,IAAIC,iBAAiB,CAACO,SAAS,CAAC,EAAE;MAC9BN,cAAc,CAACM,SAAS,EAAE,MAAML,oBAAoB,CAACG,iBAAiB,CAAC,CAAC;IAC5E;EACJ,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import { LexicalEditor } from "lexical";
1
+ import type { LexicalEditor } from "lexical";
2
2
  export declare const formatToQuote: (editor: LexicalEditor, themeStyleId?: string) => void;
@@ -1,24 +1,17 @@
1
- "use strict";
1
+ import { $getSelection, $isRangeSelection } from "lexical";
2
+ import { $setBlocksType } from "@lexical/selection";
3
+ import { $createQuoteNode } from "../QuoteNode.js";
2
4
 
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
5
  /*
11
- * Will change the selected root HTML tag to specified quoteblock tag.
6
+ * Will change the selected root HTML tag to specified blockquote tag.
12
7
  * For example if the selection is paragraph <p> with content inside after formatting the root tag
13
- * will be quoteblock with same content inside.
8
+ * will be blockquote with same content inside.
14
9
  * */
15
- var formatToQuote = exports.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
- });
10
+ export const formatToQuote = (editor, themeStyleId) => {
11
+ editor.update(() => {
12
+ const selection = $getSelection();
13
+ if ($isRangeSelection(selection)) {
14
+ $setBlocksType(selection, () => $createQuoteNode(themeStyleId));
22
15
  }
23
16
  });
24
17
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_lexical","require","_selection","_QuoteNode","formatToQuote","exports","editor","themeStyleId","update","selection","$getSelection","$isRangeSelection","DEPRECATED_$isGridSelection","$setBlocksType","$createQuoteNode"],"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,GAAAC,OAAA,CAAAD,aAAA,GAAG,SAAhBA,aAAaA,CAAIE,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","ignoreList":[]}
1
+ {"version":3,"names":["$getSelection","$isRangeSelection","$setBlocksType","$createQuoteNode","formatToQuote","editor","themeStyleId","update","selection"],"sources":["formatToQuote.ts"],"sourcesContent":["import type { LexicalEditor } from \"lexical\";\nimport { $getSelection, $isRangeSelection } from \"lexical\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport { $createQuoteNode } from \"~/QuoteNode.js\";\n\n/*\n * Will change the selected root HTML tag to specified blockquote tag.\n * For example if the selection is paragraph <p> with content inside after formatting the root tag\n * will be blockquote with same content inside.\n * */\nexport const formatToQuote = (editor: LexicalEditor, themeStyleId?: string) => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n $setBlocksType(selection, () => $createQuoteNode(themeStyleId));\n }\n });\n};\n"],"mappings":"AACA,SAASA,aAAa,EAAEC,iBAAiB,QAAQ,SAAS;AAC1D,SAASC,cAAc,QAAQ,oBAAoB;AACnD,SAASC,gBAAgB;;AAEzB;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,aAAa,GAAGA,CAACC,MAAqB,EAAEC,YAAqB,KAAK;EAC3ED,MAAM,CAACE,MAAM,CAAC,MAAM;IAChB,MAAMC,SAAS,GAAGR,aAAa,CAAC,CAAC;IACjC,IAAIC,iBAAiB,CAACO,SAAS,CAAC,EAAE;MAC9BN,cAAc,CAACM,SAAS,EAAE,MAAML,gBAAgB,CAACG,YAAY,CAAC,CAAC;IACnE;EACJ,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ import type { ThemeStyleValue } from "../types.js";
2
+ type StylesInput = {
3
+ styleId?: string;
4
+ styles?: ThemeStyleValue[];
5
+ };
6
+ /**
7
+ * In older versions, we used to have styles as an array of objects. We must handle that
8
+ * scenario to not break content for older projects.
9
+ */
10
+ export declare const getStyleId: (input: StylesInput) => string | undefined;
11
+ export {};
@@ -0,0 +1,14 @@
1
+ /**
2
+ * In older versions, we used to have styles as an array of objects. We must handle that
3
+ * scenario to not break content for older projects.
4
+ */
5
+ export const getStyleId = input => {
6
+ if (input.styleId) {
7
+ return input.styleId;
8
+ }
9
+ const styles = input.styles ?? [];
10
+ const style = styles.find(x => x.type === "typography");
11
+ return style?.styleId || undefined;
12
+ };
13
+
14
+ //# sourceMappingURL=getStyleId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getStyleId","input","styleId","styles","style","find","x","type","undefined"],"sources":["getStyleId.ts"],"sourcesContent":["import type { ThemeStyleValue } from \"~/types.js\";\n\ntype StylesInput = {\n styleId?: string;\n styles?: ThemeStyleValue[];\n};\n\n/**\n * In older versions, we used to have styles as an array of objects. We must handle that\n * scenario to not break content for older projects.\n */\nexport const getStyleId = (input: StylesInput) => {\n if (input.styleId) {\n return input.styleId;\n }\n\n const styles = input.styles ?? [];\n const style = styles.find(x => x.type === \"typography\");\n\n return style?.styleId || undefined;\n};\n"],"mappings":"AAOA;AACA;AACA;AACA;AACA,OAAO,MAAMA,UAAU,GAAIC,KAAkB,IAAK;EAC9C,IAAIA,KAAK,CAACC,OAAO,EAAE;IACf,OAAOD,KAAK,CAACC,OAAO;EACxB;EAEA,MAAMC,MAAM,GAAGF,KAAK,CAACE,MAAM,IAAI,EAAE;EACjC,MAAMC,KAAK,GAAGD,MAAM,CAACE,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,IAAI,KAAK,YAAY,CAAC;EAEvD,OAAOH,KAAK,EAAEF,OAAO,IAAIM,SAAS;AACtC,CAAC","ignoreList":[]}
@@ -1,11 +1,21 @@
1
- import type { LexicalNode } from "lexical";
2
- import { ListNode } from "../ListNode";
3
- import { ListItemNode } from "../ListItemNode";
1
+ import type { LexicalNode, Spread } from "lexical";
2
+ import type { ListNode } from "../ListNode.js";
3
+ import type { ListItemNode } from "../ListItemNode.js";
4
4
  export declare function $getListDepth(listNode: ListNode): number;
5
5
  export declare function $getTopListNode(listItem: LexicalNode): ListNode;
6
6
  export declare function $getAllListItems(node: ListNode): Array<ListItemNode>;
7
- export declare function isNestedListNode(node: LexicalNode | null | undefined): boolean;
7
+ declare const NestedListNodeBrand: unique symbol;
8
+ /**
9
+ * Checks to see if the passed node is a ListItemNode and has a ListNode as a child.
10
+ * @param node - The node to be checked.
11
+ * @returns true if the node is a ListItemNode and has a ListNode child, false otherwise.
12
+ */
13
+ export declare function isNestedListNode(node: LexicalNode | null | undefined): node is Spread<{
14
+ getFirstChild(): ListNode;
15
+ [NestedListNodeBrand]: never;
16
+ }, ListItemNode>;
8
17
  export declare function findNearestListItemNode(node: LexicalNode): ListItemNode | null;
9
18
  export declare function getUniqueListItemNodes(nodeList: Array<LexicalNode>): Array<ListItemNode>;
10
19
  export declare function $removeHighestEmptyListParent(sublist: ListItemNode | ListNode): void;
11
20
  export declare function wrapInListItem(node: LexicalNode): ListItemNode;
21
+ export {};
package/utils/listNode.js CHANGED
@@ -1,25 +1,12 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.$getAllListItems = $getAllListItems;
7
- exports.$getListDepth = $getListDepth;
8
- exports.$getTopListNode = $getTopListNode;
9
- exports.$removeHighestEmptyListParent = $removeHighestEmptyListParent;
10
- exports.findNearestListItemNode = findNearestListItemNode;
11
- exports.getUniqueListItemNodes = getUniqueListItemNodes;
12
- exports.isNestedListNode = isNestedListNode;
13
- exports.wrapInListItem = wrapInListItem;
14
- var _ListNode = require("../ListNode");
15
- var _ListItemNode = require("../ListItemNode");
16
- function $getListDepth(listNode) {
17
- var depth = 1;
18
- var parent = listNode.getParent();
1
+ import { $isListNode } from "../ListNode.js";
2
+ import { $createListItemNode, $isListItemNode } from "../ListItemNode.js";
3
+ export function $getListDepth(listNode) {
4
+ let depth = 1;
5
+ let parent = listNode.getParent();
19
6
  while (parent !== null) {
20
- if ((0, _ListItemNode.$isListItemNode)(parent)) {
21
- var parentList = parent.getParent();
22
- if ((0, _ListNode.$isListNode)(parentList)) {
7
+ if ($isListItemNode(parent)) {
8
+ const parentList = parent.getParent();
9
+ if ($isListNode(parentList)) {
23
10
  depth++;
24
11
  parent = parentList?.getParent() || null;
25
12
  continue;
@@ -30,28 +17,28 @@ function $getListDepth(listNode) {
30
17
  }
31
18
  return depth;
32
19
  }
33
- function $getTopListNode(listItem) {
34
- var list = listItem.getParent();
35
- if (!(0, _ListNode.$isListNode)(list)) {
20
+ export function $getTopListNode(listItem) {
21
+ let list = listItem.getParent();
22
+ if (!$isListNode(list)) {
36
23
  console.log("A WebinyListItemNode must have a ListNode for a parent.");
37
24
  return listItem;
38
25
  }
39
- var parent = list;
26
+ let parent = list;
40
27
  while (parent !== null) {
41
28
  parent = parent.getParent();
42
- if ((0, _ListNode.$isListNode)(parent)) {
29
+ if ($isListNode(parent)) {
43
30
  list = parent;
44
31
  }
45
32
  }
46
33
  return list;
47
34
  }
48
- function $getAllListItems(node) {
49
- var listItemNodes = [];
50
- var listChildren = node.getChildren().filter(_ListItemNode.$isListItemNode);
51
- for (var i = 0; i < listChildren.length; i++) {
52
- var listItemNode = listChildren[i];
53
- var firstChild = listItemNode?.getFirstChild();
54
- if ((0, _ListNode.$isListNode)(firstChild)) {
35
+ export function $getAllListItems(node) {
36
+ let listItemNodes = [];
37
+ const listChildren = node.getChildren().filter($isListItemNode);
38
+ for (let i = 0; i < listChildren.length; i++) {
39
+ const listItemNode = listChildren[i];
40
+ const firstChild = listItemNode?.getFirstChild();
41
+ if ($isListNode(firstChild)) {
55
42
  listItemNodes = listItemNodes.concat($getAllListItems(firstChild));
56
43
  } else {
57
44
  listItemNodes.push(listItemNode);
@@ -59,50 +46,57 @@ function $getAllListItems(node) {
59
46
  }
60
47
  return listItemNodes;
61
48
  }
62
- function isNestedListNode(node) {
63
- return (0, _ListItemNode.$isListItemNode)(node) && (0, _ListNode.$isListNode)(node?.getFirstChild());
49
+ const NestedListNodeBrand = Symbol.for("@lexical/NestedListNodeBrand");
50
+
51
+ /**
52
+ * Checks to see if the passed node is a ListItemNode and has a ListNode as a child.
53
+ * @param node - The node to be checked.
54
+ * @returns true if the node is a ListItemNode and has a ListNode child, false otherwise.
55
+ */
56
+ export function isNestedListNode(node) {
57
+ return $isListItemNode(node) && $isListNode(node.getFirstChild());
64
58
  }
65
59
 
66
60
  // TODO: rewrite with $findMatchingParent or *nodeOfType
67
- function findNearestListItemNode(node) {
68
- var currentNode = node;
61
+ export function findNearestListItemNode(node) {
62
+ let currentNode = node;
69
63
  while (currentNode !== null) {
70
- if ((0, _ListItemNode.$isListItemNode)(currentNode)) {
64
+ if ($isListItemNode(currentNode)) {
71
65
  return currentNode;
72
66
  }
73
67
  currentNode = currentNode.getParent();
74
68
  }
75
69
  return null;
76
70
  }
77
- function getUniqueListItemNodes(nodeList) {
78
- var keys = new Set();
79
- for (var i = 0; i < nodeList.length; i++) {
80
- var node = nodeList[i];
81
- if ((0, _ListItemNode.$isListItemNode)(node)) {
71
+ export function getUniqueListItemNodes(nodeList) {
72
+ const keys = new Set();
73
+ for (let i = 0; i < nodeList.length; i++) {
74
+ const node = nodeList[i];
75
+ if ($isListItemNode(node)) {
82
76
  keys.add(node);
83
77
  }
84
78
  }
85
79
  return Array.from(keys);
86
80
  }
87
- function $removeHighestEmptyListParent(sublist) {
81
+ export function $removeHighestEmptyListParent(sublist) {
88
82
  // Nodes may be repeatedly indented, to create deeply nested lists that each
89
83
  // contain just one bullet.
90
84
  // Our goal is to remove these (empty) deeply nested lists. The easiest
91
85
  // way to do that is crawl back up the tree until we find a node that has siblings
92
86
  // (e.g. is actually part of the list contents) and delete that, or delete
93
87
  // the root of the list (if no list nodes have siblings.)
94
- var emptyListPtr = sublist;
88
+ let emptyListPtr = sublist;
95
89
  while (emptyListPtr.getNextSibling() == null && emptyListPtr.getPreviousSibling() == null) {
96
- var parent = emptyListPtr.getParent();
97
- if (parent == null || !((0, _ListItemNode.$isListItemNode)(emptyListPtr) || (0, _ListNode.$isListNode)(emptyListPtr))) {
90
+ const parent = emptyListPtr.getParent();
91
+ if (parent == null || !($isListItemNode(emptyListPtr) || $isListNode(emptyListPtr))) {
98
92
  break;
99
93
  }
100
94
  emptyListPtr = parent;
101
95
  }
102
96
  emptyListPtr.remove();
103
97
  }
104
- function wrapInListItem(node) {
105
- var listItemWrapper = (0, _ListItemNode.$createListItemNode)();
98
+ export function wrapInListItem(node) {
99
+ const listItemWrapper = $createListItemNode();
106
100
  return listItemWrapper.append(node);
107
101
  }
108
102
 
@@ -1 +1 @@
1
- {"version":3,"names":["_ListNode","require","_ListItemNode","$getListDepth","listNode","depth","parent","getParent","$isListItemNode","parentList","$isListNode","console","log","$getTopListNode","listItem","list","$getAllListItems","node","listItemNodes","listChildren","getChildren","filter","i","length","listItemNode","firstChild","getFirstChild","concat","push","isNestedListNode","findNearestListItemNode","currentNode","getUniqueListItemNodes","nodeList","keys","Set","add","Array","from","$removeHighestEmptyListParent","sublist","emptyListPtr","getNextSibling","getPreviousSibling","remove","wrapInListItem","listItemWrapper","$createListItemNode","append"],"sources":["listNode.ts"],"sourcesContent":["import type { LexicalNode } from \"lexical\";\n\nimport { $isListNode, ListNode } from \"~/ListNode\";\nimport { $createListItemNode, $isListItemNode, ListItemNode } from \"~/ListItemNode\";\n\nexport function $getListDepth(listNode: ListNode): number {\n let depth = 1;\n let parent = listNode.getParent();\n\n while (parent !== null) {\n if ($isListItemNode(parent)) {\n const parentList = parent.getParent();\n\n if ($isListNode(parentList)) {\n depth++;\n parent = parentList?.getParent() || null;\n continue;\n }\n console.log(\"A WebinyListItemNode must have a WebinyListNode for a parent.\");\n }\n\n return depth;\n }\n\n return depth;\n}\n\nexport function $getTopListNode(listItem: LexicalNode): ListNode {\n let list = listItem.getParent<ListNode>();\n\n if (!$isListNode(list)) {\n console.log(\"A WebinyListItemNode must have a ListNode for a parent.\");\n return listItem as ListNode;\n }\n\n let parent: ListNode | null = list;\n\n while (parent !== null) {\n parent = parent.getParent();\n\n if ($isListNode(parent)) {\n list = parent;\n }\n }\n\n return list;\n}\n\nexport function $getAllListItems(node: ListNode): Array<ListItemNode> {\n let listItemNodes: Array<ListItemNode> = [];\n const listChildren: Array<ListItemNode> = node.getChildren().filter($isListItemNode);\n\n for (let i = 0; i < listChildren.length; i++) {\n const listItemNode = listChildren[i];\n const firstChild = listItemNode?.getFirstChild();\n\n if ($isListNode(firstChild)) {\n listItemNodes = listItemNodes.concat($getAllListItems(firstChild));\n } else {\n listItemNodes.push(listItemNode);\n }\n }\n\n return listItemNodes;\n}\n\nexport function isNestedListNode(node: LexicalNode | null | undefined): boolean {\n return $isListItemNode(node) && $isListNode(node?.getFirstChild());\n}\n\n// TODO: rewrite with $findMatchingParent or *nodeOfType\nexport function findNearestListItemNode(node: LexicalNode): ListItemNode | null {\n let currentNode: LexicalNode | null = node;\n\n while (currentNode !== null) {\n if ($isListItemNode(currentNode)) {\n return currentNode;\n }\n currentNode = currentNode.getParent();\n }\n\n return null;\n}\n\nexport function getUniqueListItemNodes(nodeList: Array<LexicalNode>): Array<ListItemNode> {\n const keys = new Set<ListItemNode>();\n\n for (let i = 0; i < nodeList.length; i++) {\n const node = nodeList[i];\n\n if ($isListItemNode(node)) {\n keys.add(node);\n }\n }\n\n return Array.from(keys);\n}\n\nexport function $removeHighestEmptyListParent(sublist: ListItemNode | ListNode) {\n // Nodes may be repeatedly indented, to create deeply nested lists that each\n // contain just one bullet.\n // Our goal is to remove these (empty) deeply nested lists. The easiest\n // way to do that is crawl back up the tree until we find a node that has siblings\n // (e.g. is actually part of the list contents) and delete that, or delete\n // the root of the list (if no list nodes have siblings.)\n let emptyListPtr = sublist;\n\n while (emptyListPtr.getNextSibling() == null && emptyListPtr.getPreviousSibling() == null) {\n const parent = emptyListPtr.getParent<ListItemNode | ListNode>();\n\n if (parent == null || !($isListItemNode(emptyListPtr) || $isListNode(emptyListPtr))) {\n break;\n }\n\n emptyListPtr = parent;\n }\n\n emptyListPtr.remove();\n}\n\nexport function wrapInListItem(node: LexicalNode): ListItemNode {\n const listItemWrapper = $createListItemNode();\n return listItemWrapper.append(node);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["$isListNode","$createListItemNode","$isListItemNode","$getListDepth","listNode","depth","parent","getParent","parentList","console","log","$getTopListNode","listItem","list","$getAllListItems","node","listItemNodes","listChildren","getChildren","filter","i","length","listItemNode","firstChild","getFirstChild","concat","push","NestedListNodeBrand","Symbol","for","isNestedListNode","findNearestListItemNode","currentNode","getUniqueListItemNodes","nodeList","keys","Set","add","Array","from","$removeHighestEmptyListParent","sublist","emptyListPtr","getNextSibling","getPreviousSibling","remove","wrapInListItem","listItemWrapper","append"],"sources":["listNode.ts"],"sourcesContent":["import type { LexicalNode, Spread } from \"lexical\";\n\nimport type { ListNode } from \"~/ListNode.js\";\nimport { $isListNode } from \"~/ListNode.js\";\nimport type { ListItemNode } from \"~/ListItemNode.js\";\nimport { $createListItemNode, $isListItemNode } from \"~/ListItemNode.js\";\n\nexport function $getListDepth(listNode: ListNode): number {\n let depth = 1;\n let parent = listNode.getParent();\n\n while (parent !== null) {\n if ($isListItemNode(parent)) {\n const parentList = parent.getParent();\n\n if ($isListNode(parentList)) {\n depth++;\n parent = parentList?.getParent() || null;\n continue;\n }\n console.log(\"A WebinyListItemNode must have a WebinyListNode for a parent.\");\n }\n\n return depth;\n }\n\n return depth;\n}\n\nexport function $getTopListNode(listItem: LexicalNode): ListNode {\n let list = listItem.getParent<ListNode>();\n\n if (!$isListNode(list)) {\n console.log(\"A WebinyListItemNode must have a ListNode for a parent.\");\n return listItem as ListNode;\n }\n\n let parent: ListNode | null = list;\n\n while (parent !== null) {\n parent = parent.getParent();\n\n if ($isListNode(parent)) {\n list = parent;\n }\n }\n\n return list;\n}\n\nexport function $getAllListItems(node: ListNode): Array<ListItemNode> {\n let listItemNodes: Array<ListItemNode> = [];\n const listChildren: Array<ListItemNode> = node.getChildren().filter($isListItemNode);\n\n for (let i = 0; i < listChildren.length; i++) {\n const listItemNode = listChildren[i];\n const firstChild = listItemNode?.getFirstChild();\n\n if ($isListNode(firstChild)) {\n listItemNodes = listItemNodes.concat($getAllListItems(firstChild));\n } else {\n listItemNodes.push(listItemNode);\n }\n }\n\n return listItemNodes;\n}\n\nconst NestedListNodeBrand: unique symbol = Symbol.for(\"@lexical/NestedListNodeBrand\");\n\n/**\n * Checks to see if the passed node is a ListItemNode and has a ListNode as a child.\n * @param node - The node to be checked.\n * @returns true if the node is a ListItemNode and has a ListNode child, false otherwise.\n */\nexport function isNestedListNode(\n node: LexicalNode | null | undefined\n): node is Spread<{ getFirstChild(): ListNode; [NestedListNodeBrand]: never }, ListItemNode> {\n return $isListItemNode(node) && $isListNode(node.getFirstChild());\n}\n\n// TODO: rewrite with $findMatchingParent or *nodeOfType\nexport function findNearestListItemNode(node: LexicalNode): ListItemNode | null {\n let currentNode: LexicalNode | null = node;\n\n while (currentNode !== null) {\n if ($isListItemNode(currentNode)) {\n return currentNode;\n }\n currentNode = currentNode.getParent();\n }\n\n return null;\n}\n\nexport function getUniqueListItemNodes(nodeList: Array<LexicalNode>): Array<ListItemNode> {\n const keys = new Set<ListItemNode>();\n\n for (let i = 0; i < nodeList.length; i++) {\n const node = nodeList[i];\n\n if ($isListItemNode(node)) {\n keys.add(node);\n }\n }\n\n return Array.from(keys);\n}\n\nexport function $removeHighestEmptyListParent(sublist: ListItemNode | ListNode) {\n // Nodes may be repeatedly indented, to create deeply nested lists that each\n // contain just one bullet.\n // Our goal is to remove these (empty) deeply nested lists. The easiest\n // way to do that is crawl back up the tree until we find a node that has siblings\n // (e.g. is actually part of the list contents) and delete that, or delete\n // the root of the list (if no list nodes have siblings.)\n let emptyListPtr = sublist;\n\n while (emptyListPtr.getNextSibling() == null && emptyListPtr.getPreviousSibling() == null) {\n const parent = emptyListPtr.getParent<ListItemNode | ListNode>();\n\n if (parent == null || !($isListItemNode(emptyListPtr) || $isListNode(emptyListPtr))) {\n break;\n }\n\n emptyListPtr = parent;\n }\n\n emptyListPtr.remove();\n}\n\nexport function wrapInListItem(node: LexicalNode): ListItemNode {\n const listItemWrapper = $createListItemNode();\n return listItemWrapper.append(node);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { LinkAttributes } from "../LinkNode";
1
+ import type { LinkAttributes } from "../LinkNode.js";
2
2
  /**
3
3
  * Generates or updates a LinkNode. It can also delete a LinkNode if the URL is null,
4
4
  * but saves any children and brings them up to the parent node.