@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.
- package/FontColorNode.d.ts +24 -22
- package/FontColorNode.js +114 -103
- package/FontColorNode.js.map +1 -1
- package/HeadingNode.d.ts +30 -20
- package/HeadingNode.js +185 -176
- package/HeadingNode.js.map +1 -1
- package/ImageNode.d.ts +2 -12
- package/ImageNode.js +119 -193
- package/ImageNode.js.map +1 -1
- package/LinkNode.d.ts +6 -6
- package/LinkNode.js +249 -347
- package/LinkNode.js.map +1 -1
- package/ListItemNode.d.ts +6 -5
- package/ListItemNode.js +275 -352
- package/ListItemNode.js.map +1 -1
- package/ListNode.d.ts +32 -19
- package/ListNode.js +170 -210
- package/ListNode.js.map +1 -1
- package/ParagraphNode.d.ts +30 -20
- package/ParagraphNode.js +144 -201
- package/ParagraphNode.js.map +1 -1
- package/QuoteNode.d.ts +27 -20
- package/QuoteNode.js +102 -208
- package/QuoteNode.js.map +1 -1
- package/README.md +9 -4
- package/components/ImageNode/ImageComponent.d.ts +2 -7
- package/components/ImageNode/ImageComponent.js +72 -166
- package/components/ImageNode/ImageComponent.js.map +1 -1
- package/components/ImageNode/ImageResizer.d.ts +1 -8
- package/components/ImageNode/ImageResizer.js +80 -95
- package/components/ImageNode/ImageResizer.js.map +1 -1
- package/generateInitialLexicalValue.d.ts +4 -0
- package/generateInitialLexicalValue.js +27 -0
- package/generateInitialLexicalValue.js.map +1 -0
- package/index.d.ts +19 -23
- package/index.js +50 -233
- package/index.js.map +1 -1
- package/package.json +22 -19
- package/prepareLexicalState.d.ts +2 -0
- package/prepareLexicalState.js +53 -0
- package/prepareLexicalState.js.map +1 -0
- package/types.d.ts +5 -9
- package/types.js +1 -5
- package/types.js.map +1 -1
- package/utils/clearNodeFormating.d.ts +2 -2
- package/utils/clearNodeFormating.js +12 -18
- package/utils/clearNodeFormating.js.map +1 -1
- package/utils/formatList.d.ts +4 -4
- package/utils/formatList.js +171 -208
- package/utils/formatList.js.map +1 -1
- package/utils/formatToHeading.d.ts +2 -2
- package/utils/formatToHeading.js +8 -15
- package/utils/formatToHeading.js.map +1 -1
- package/utils/formatToParagraph.d.ts +1 -1
- package/utils/formatToParagraph.js +8 -16
- package/utils/formatToParagraph.js.map +1 -1
- package/utils/formatToQuote.d.ts +1 -1
- package/utils/formatToQuote.js +10 -17
- package/utils/formatToQuote.js.map +1 -1
- package/utils/getStyleId.d.ts +11 -0
- package/utils/getStyleId.js +14 -0
- package/utils/getStyleId.js.map +1 -0
- package/utils/listNode.d.ts +14 -4
- package/utils/listNode.js +43 -49
- package/utils/listNode.js.map +1 -1
- package/utils/toggleLink.d.ts +1 -1
- package/utils/toggleLink.js +41 -45
- package/utils/toggleLink.js.map +1 -1
- package/TypographyNode.d.ts +0 -39
- package/TypographyNode.js +0 -147
- package/TypographyNode.js.map +0 -1
- package/components/ImageNode/ContentEditable.css +0 -22
- package/components/ImageNode/ContentEditable.d.ts +0 -12
- package/components/ImageNode/ContentEditable.js +0 -26
- package/components/ImageNode/ContentEditable.js.map +0 -1
- package/components/ImageNode/ImageComponent.css +0 -43
- package/components/ImageNode/Placeholder.css +0 -20
- package/components/ImageNode/Placeholder.d.ts +0 -15
- package/components/ImageNode/Placeholder.js +0 -30
- package/components/ImageNode/Placeholder.js.map +0 -1
- package/components/ImageNode/SharedHistoryContext.d.ts +0 -10
- package/components/ImageNode/SharedHistoryContext.js +0 -27
- package/components/ImageNode/SharedHistoryContext.js.map +0 -1
package/utils/formatList.js.map
CHANGED
|
@@ -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;
|
package/utils/formatToHeading.js
CHANGED
|
@@ -1,24 +1,17 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
16
|
-
editor.update(
|
|
17
|
-
|
|
18
|
-
if (
|
|
19
|
-
(
|
|
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":["
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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":["
|
|
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":[]}
|
package/utils/formatToQuote.d.ts
CHANGED
|
@@ -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;
|
package/utils/formatToQuote.js
CHANGED
|
@@ -1,24 +1,17 @@
|
|
|
1
|
-
|
|
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
|
|
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
|
|
8
|
+
* will be blockquote with same content inside.
|
|
14
9
|
* */
|
|
15
|
-
|
|
16
|
-
editor.update(
|
|
17
|
-
|
|
18
|
-
if (
|
|
19
|
-
|
|
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":["
|
|
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":[]}
|
package/utils/listNode.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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 (
|
|
21
|
-
|
|
22
|
-
if (
|
|
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
|
-
|
|
35
|
-
if (
|
|
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
|
-
|
|
26
|
+
let parent = list;
|
|
40
27
|
while (parent !== null) {
|
|
41
28
|
parent = parent.getParent();
|
|
42
|
-
if (
|
|
29
|
+
if ($isListNode(parent)) {
|
|
43
30
|
list = parent;
|
|
44
31
|
}
|
|
45
32
|
}
|
|
46
33
|
return list;
|
|
47
34
|
}
|
|
48
|
-
function $getAllListItems(node) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
for (
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if (
|
|
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
|
-
|
|
63
|
-
|
|
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
|
-
|
|
61
|
+
export function findNearestListItemNode(node) {
|
|
62
|
+
let currentNode = node;
|
|
69
63
|
while (currentNode !== null) {
|
|
70
|
-
if (
|
|
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
|
-
|
|
79
|
-
for (
|
|
80
|
-
|
|
81
|
-
if (
|
|
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
|
-
|
|
88
|
+
let emptyListPtr = sublist;
|
|
95
89
|
while (emptyListPtr.getNextSibling() == null && emptyListPtr.getPreviousSibling() == null) {
|
|
96
|
-
|
|
97
|
-
if (parent == null || !(
|
|
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
|
-
|
|
98
|
+
export function wrapInListItem(node) {
|
|
99
|
+
const listItemWrapper = $createListItemNode();
|
|
106
100
|
return listItemWrapper.append(node);
|
|
107
101
|
}
|
|
108
102
|
|
package/utils/listNode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
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":[]}
|
package/utils/toggleLink.d.ts
CHANGED