edytor 0.0.5 → 0.0.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"edytor.esm.js","sources":["../src/utils/yClasses/yLeaf.ts","../src/utils/yClasses/yNode.ts","../src/utils/yClasses/EdytorDoc.ts","../src/operations/deleteText.ts","../src/operations/formatText.ts","../src/operations/insertText.ts","../src/operations/merge.ts","../src/operations/removeEmptyText.ts","../src/operations/splitLeaf.ts","../src/operations/splitNode.ts","../src/operations/nestNode.ts","../src/operations/moveNode.ts","../src/utils/nodes.ts","../src/utils/common.ts","../src/utils/leaves.ts","../src/utils/dropper.ts","../src/utils/selection.ts","../src/events/onBeforeInput.ts","../src/events/onKeyDown.ts","../src/events/onDrop.ts","../src/yjs/webrtcProvider.ts","../src/yjs/wsProvider.ts"],"sourcesContent":["import { nanoid } from \"..\";\nimport { Map, Text } from \"yjs\";\n\nexport type YLeafProps = {\n data?: any;\n text?: string;\n id?: string;\n};\n\nexport const createLeaf = (props?: YLeafProps) => {\n const leaf = new Map();\n leaf.set(\"id\", props?.id || nanoid());\n leaf.set(\"text\", new Text(props?.text || \"\"));\n if (props) {\n const { id, text, data, ...marks } = props;\n leaf.set(\"text\", new Text(text || \"\"));\n data && leaf.set(\"data\", new Map(Object.entries(data)));\n marks &&\n Object.keys(marks).forEach((mark) => {\n leaf.set(mark, marks[mark]);\n });\n }\n return leaf;\n};\n","import { nanoid } from \"..\";\nimport { Map, Array } from \"yjs\";\nimport { YArray, YMap } from \"yjs/dist/src/internals\";\nimport { YLeaf } from \"../../\";\nimport { createLeaf } from \"./yLeaf\";\n\nexport type YNodeProps = {\n data?: any;\n content?: YLeaf[] | YArray<YLeaf>;\n children?: YNode[] | YArray<YNode>;\n id?: string;\n};\n\nexport const createNode = (type: string, props?: YNodeProps): YMap<any> => {\n const node = new Map();\n node.set(\"id\", props?.id || nanoid());\n node.set(\"type\", type);\n if (props?.data) {\n node.set(\"data\", new Map(Object.entries(props.data)));\n }\n node.set(\"content\", props?.content instanceof Array ? props.content : Array.from(props?.content || [createLeaf()]));\n node.set(\"children\", props?.children instanceof Array ? props.children : Array.from(props?.children || []));\n return node;\n};\n\nexport class YNode extends Map<any> {}\n","import { Doc } from \"yjs\";\nimport { YLeaf, YNode } from \".\";\nimport { createLeaf } from \"./yLeaf\";\nimport { createNode } from \"./yNode\";\nexport interface jsonLeaf extends Record<string, any> {\n text: string;\n data?: object;\n}\nexport type jsonNode = {\n type: string;\n content?: jsonLeaf[];\n data?: object;\n children?: jsonNode[];\n};\n\nexport const getContent = (leaf: jsonLeaf): YLeaf => {\n return createLeaf(leaf);\n};\nexport const getChildren = ({ type, content = [], children = [], ...props }: jsonNode): YNode => {\n return createNode(type, { ...props, children: children.map(getChildren), content: content.map(getContent) });\n};\nexport class EdytorDoc extends Doc {\n constructor(value?: jsonNode[]) {\n super();\n if (value) {\n }\n }\n}\n\nexport const DocFromJson = (value: jsonNode[]) => {\n const doc = new Doc();\n const array = doc.getArray(\"children\");\n array.insert(0, value.map(getChildren));\n return doc;\n};\n","import { Editor, EdytorSelection } from \"../types\";\nimport {\n copyNode,\n deleteLeafText,\n getIndex,\n getNode,\n getPath,\n hasChildren,\n leafLength,\n leafNodeChildrenLength,\n leafNodeContent,\n leafNodeContentLength,\n leafNodeContentStringLength,\n leafString,\n LeavesHarvest,\n mergeContentWithNextLeaf,\n mergeContentWithPrevLeaf,\n createLeaf,\n traverse,\n YLeaf\n} from \"../utils\";\nimport { nestNode } from \"./nestNode\";\n\ntype deleteTextOpts = {\n mode: \"forward\" | \"backward\" | \"none\";\n selection?: EdytorSelection;\n};\nexport const deleteText = (editor: Editor, { mode, selection }: deleteTextOpts) => {\n const { start, end, type, length, edges, setPosition } = selection || editor.selection;\n\n switch (type) {\n case \"collapsed\": {\n if (mode === \"backward\" && edges.startNode) {\n console.log(start.nodeIndex, leafNodeChildrenLength(start.leaf), start.path.length);\n // unnest node if its the last of its parent and if he is nested\n if (start.nodeIndex === start.node.parent.length - 1 && start.path.length > 1 && start.nodeIndex !== 0) {\n console.log(start.leafId);\n const node = copyNode(start.node);\n start.node.parent.delete(start.nodeIndex);\n start.node.parent.parent.parent.insert(getIndex(start.node.parent.parent) + 1, [node]);\n setPosition(start.leafId, { offset: 0 });\n } else {\n // merge node with the prev one if it's not the last of its parent regardless of its nesting\n mergeContentWithPrevLeaf(editor);\n return setPosition(start.leafId, { offset: 0 });\n }\n }\n if (mode === \"backward\" && edges.startLeaf) {\n // delete content in the prev leaf because we are at its edge start, and escape current leaf\n const prevLeaf = leafNodeContent(start.leaf).get(start.leafIndex - 1);\n deleteLeafText(prevLeaf, leafLength(prevLeaf) - 1, length || 1);\n return setPosition(prevLeaf.get(\"id\"), { offset: leafLength(prevLeaf) });\n }\n\n if (mode === \"forward\" && edges.endNode) {\n // merge node with the next node because we are at edge end of it\n return mergeContentWithNextLeaf(editor);\n }\n if (mode === \"forward\" && edges.endLeaf) {\n // delete content in the next leaf because we are at its edge end\n const nextLeaf = leafNodeContent(start.leaf).get(start.leafIndex + 1);\n return deleteLeafText(nextLeaf, 0, length || 1);\n }\n\n deleteLeafText(start.leaf, start.offset + (mode === \"backward\" ? -length || -1 : length), length || 1);\n setPosition(start.leaf.get(\"id\"), { offset: start.offset + (mode === \"backward\" ? -length || -1 : length) });\n break;\n }\n case \"singlenode\": {\n deleteLeafText(start.leaf, start.offset, length, true);\n if (hasChildren(getNode(start.leaf))) {\n leafNodeContent(start.leaf).insert(0, [createLeaf()]);\n }\n setPosition(start.leaf.get(\"id\"), { offset: start.offset });\n break;\n }\n case \"multileaves\":\n case \"multinodes\":\n {\n const startPathString = start.path.join(\",\");\n const endPathString = end.path.join(\",\");\n editor.doc.transact(() => {\n const { reap, burn } = new LeavesHarvest();\n traverse(\n editor,\n (leaf, isText) => {\n if (isText) {\n const path = getPath(leaf);\n const l = leafLength(leaf);\n if (path.join(\",\") === startPathString) {\n deleteLeafText(leaf, start.offset, l);\n reap(leaf, false);\n } else if (path > start.path && path < end.path) {\n deleteLeafText(leaf, 0, l);\n reap(leaf, true);\n } else if (path.join(\",\") === endPathString) {\n deleteLeafText(leaf, 0, end.offset);\n reap(leaf, end.offset === l);\n }\n }\n },\n { start: start.path[0], end: end.path[0] + 1 }\n );\n return burn(editor);\n });\n }\n setPosition(start.leaf.get(\"id\"), { offset: start.offset });\n break;\n }\n};\n","import { YMap, YText } from \"yjs/dist/src/internals\";\nimport { Editor, Position, EdytorSelection } from \"../types\";\nimport { mergeLeafs, splitLeaf } from \".\";\nimport {\n deleteLeafText,\n getIndex,\n getPath,\n isLeafEmpty,\n leafLength,\n leafNodeContent,\n leafText,\n createLeaf,\n traverse,\n YLeaf\n} from \"../utils\";\n\nexport type formatTextOperation = {\n at?: Position;\n value: any;\n range?: EdytorSelection;\n format: string;\n yText?: YText;\n};\nexport type formatAtEqualPathOperation = {\n format: string;\n value: any;\n start: EdytorSelection[\"start\"];\n end: EdytorSelection[\"end\"];\n length: EdytorSelection[\"length\"];\n data?: object;\n};\n\nexport const applyMarksFromParent = (parent: YMap<any>, leafs: YMap<any>[]) => {\n Array.from(parent.keys(), (key) => {\n if (key !== \"text\") {\n leafs.forEach((leaf) => {\n leaf.set(key, parent.get(key));\n });\n }\n });\n};\n\nexport const formatAtEqualPath = ({ format, value, start, end }: formatAtEqualPathOperation) => {\n const length = end.offset - start.offset;\n const leaf = start.leaf;\n const text = leafText(leaf);\n\n const content = text.toString();\n const index = getIndex(leaf);\n\n const isMarkActive = leaf.has(format);\n\n if (isMarkActive && leafLength(leaf) === length) {\n leaf.delete(format);\n return leaf;\n } else {\n const remainingText = content.substring(end.offset, leafLength(leaf));\n if (remainingText.length == 0 && leafLength(leaf) === end.offset - start.offset) {\n leaf.set(format, value);\n return leaf;\n } else {\n deleteLeafText(leaf, start.offset, leafLength(leaf));\n\n const formatedLeaf = createLeaf({\n ...leaf.toJSON(),\n id: undefined,\n [format]: value,\n text: content.substring(start.offset, end.offset)\n });\n\n let newLeaves = [formatedLeaf];\n\n if (remainingText.length > 0) {\n newLeaves.push(createLeaf({ ...leaf.toJSON(), id: undefined, text: remainingText }));\n }\n\n if (isMarkActive) {\n formatedLeaf.delete(format);\n }\n newLeaves.length && leafNodeContent(leaf).insert(index + 1, newLeaves);\n return formatedLeaf;\n }\n }\n};\n\nexport const formatText = (editor: Editor, mark: Record<string, any>) => {\n const [[format, value]] = Object.entries(mark);\n console.log(format);\n let newPath = 0;\n const { start, end, type, length, setPosition, selectedText } = editor.selection;\n\n editor.doc.transact(() => {\n switch (type) {\n case \"collapsed\": {\n const isMarkActive = start.leaf.has(format);\n\n if (isMarkActive && isLeafEmpty(start.leaf)) {\n start.leaf.delete(format);\n newPath = leafNodeContent(start.leaf)\n .toArray()\n .indexOf(start.leaf);\n } else {\n if (isLeafEmpty(start.leaf)) {\n isMarkActive ? start.leaf.delete(format) : start.leaf.set(format, value);\n } else {\n splitLeaf(editor, { yText: start.leaf.get(\"text\"), at: start });\n const newChild = createLeaf({ text: \"\", [format]: value });\n applyMarksFromParent(start.leaf, [newChild]);\n\n if (isMarkActive) newChild.delete(format);\n\n leafNodeContent(start.leaf).insert(start.path.slice().reverse()[0] + 1, [newChild]);\n\n if (isLeafEmpty(start.leaf)) {\n leafNodeContent(start.leaf).delete(start.path.slice().reverse()[0]);\n }\n newPath = leafNodeContent(start.leaf)\n .toArray()\n .indexOf(newChild);\n }\n }\n mergeLeafs(leafNodeContent(start.leaf));\n break;\n // return newPath;\n }\n case \"singlenode\": {\n editor.doc.transact(() => {\n const formatedLeaf = formatAtEqualPath({ format, value, start, end, length });\n mergeLeafs(leafNodeContent(start.leaf));\n const isRemoved = formatedLeaf._item.deleted;\n\n if (!isRemoved) {\n setPosition(start.leaf.get(\"id\"), { offset: start.offset });\n setTimeout(() => {\n setPosition(formatedLeaf.get(\"id\"), { offset: 0, end: leafLength(formatedLeaf) });\n });\n } else {\n const remainingLeaf = formatedLeaf.parent.get(start.leafIndex - 1);\n const offset = leafText(remainingLeaf)\n .toJSON()\n .indexOf(selectedText);\n setTimeout(() => {\n setPosition(remainingLeaf.get(\"id\"), {\n offset,\n end: offset + selectedText.length\n });\n });\n }\n });\n break;\n }\n case \"multileaves\":\n case \"multinodes\": {\n const startPathString = start.path.join(\",\");\n const endPathString = end.path.join(\",\");\n let started = false;\n let ended = false;\n\n traverse(\n editor,\n (leaf, isText) => {\n if (isText) {\n const path = getPath(leaf);\n const isStart = path.join(\",\") === startPathString;\n const isEnd = path.join(\",\") === getPath(end.leaf).join(\",\");\n console.log({ isEnd }, endPathString, getPath(end.leaf).join(\",\"), path.join(\",\"));\n if (isStart) {\n started = true;\n }\n\n const startOffset = isStart ? start.offset : 0;\n const endOffset = isEnd ? end.offset : leafLength(leaf);\n started &&\n !ended &&\n formatAtEqualPath({\n format,\n start: { leaf, offset: startOffset },\n end: { offset: endOffset },\n value\n });\n console.log({ ended });\n if (isEnd) {\n ended = true;\n }\n\n mergeLeafs(leafNodeContent(leaf));\n }\n },\n { start: start.path[0], end: end.path[0] + 1 }\n );\n break;\n }\n }\n });\n\n return newPath;\n};\n","import { Editor } from \"../types\";\nimport {\n deleteLeafText,\n getPath,\n insertTextInLeaf,\n leafLength,\n LeavesHarvest,\n replaceLeafText,\n traverse,\n YLeaf\n} from \"../utils\";\n\nexport type insertTextOperation = {\n text: string | null;\n};\nexport const insertText = (editor: Editor, { text }: insertTextOperation) => {\n if (!text || text === null || !text.length) return;\n\n const { start, end, type, length, setPosition } = editor.selection;\n if (type === \"notInDoc\") return console.error(\"Path is not in document space\");\n\n switch (type) {\n case \"collapsed\": {\n insertTextInLeaf(start.leaf, start.offset, text);\n setPosition(start.leaf.get(\"id\"), { offset: start.offset + text.length });\n break;\n }\n case \"singlenode\": {\n replaceLeafText(start.leaf, start.offset, length, text);\n setPosition(start.leaf.get(\"id\"), { offset: start.offset + text.length });\n break;\n }\n case \"multileaves\":\n case \"multinodes\": {\n const startPathString = start.path.join(\",\");\n const endPathString = end.path.join(\",\");\n editor.doc.transact(() => {\n const { reap, burn } = new LeavesHarvest();\n traverse(\n editor,\n (leaf, isText) => {\n if (isText) {\n const path = getPath(leaf);\n if (path.join(\",\") === startPathString) {\n replaceLeafText(leaf, start.offset, leafLength(leaf), text);\n reap(leaf);\n } else if (path > start.path && path < end.path) {\n deleteLeafText(leaf, 0, leafLength(leaf));\n reap(leaf);\n } else if (path.join(\",\") === endPathString) {\n deleteLeafText(leaf, 0, end.offset);\n reap(leaf);\n }\n }\n },\n { start: start.path[0], end: end.path[0] + 1 }\n );\n burn(editor);\n });\n setPosition(start.leaf.get(\"id\"), { offset: start.offset + text.length });\n }\n }\n};\n","import { YArray, YMap } from \"yjs/dist/src/internals\";\nimport { getIndex } from \"../utils\";\n\nexport const areLeafsMergeable = (nodes: YMap<any>[]) => {\n let keys = nodes.map((node) => Array.from(node.keys())).flat();\n return nodes.every((node) => {\n return keys.every((key) => node.has(key));\n });\n};\n\nexport const mergeLeafs = (leafs: YArray<YMap<any>>) => {\n let currentLeaf = leafs.get(0);\n let leafsToDelete = [] as YMap<any>[];\n leafs.forEach((_, i) => {\n const leaf = leafs.get(i + 1);\n if (!leaf) return;\n\n if (areLeafsMergeable([currentLeaf, leaf])) {\n const firstText = currentLeaf.get(\"text\");\n currentLeaf.get(\"text\").insert(firstText.length, leaf.get(\"text\").toString());\n leafsToDelete.push(leaf);\n } else {\n currentLeaf = leaf;\n }\n });\n\n leafsToDelete.forEach((leaf) => {\n leafs.delete(getIndex(leaf));\n });\n};\n","import { YText, YArray, YMap } from \"yjs/dist/src/internals\";\n\nexport const removeEmptyText = (yText: YText) => {\n let array = yText?.parent?.parent as YArray<YMap<any>> | undefined;\n const index = (array: YArray<any>, node: YMap<any>) => array?.toArray().indexOf(node);\n array?.delete(index(array, yText.parent as YMap<any>)!);\n while (array && array.length === 0) {\n const pop = array.parent as YMap<any>;\n const pop_pop = pop.parent as YArray<YMap<any>>;\n if (pop_pop) {\n const i = index(pop_pop, pop);\n i !== -1 && pop_pop.delete(i);\n array = pop_pop;\n } else {\n array = undefined;\n }\n }\n};\n","import * as Y from \"yjs\";\nimport { YText, YArray, YMap } from \"yjs/dist/src/internals\";\nimport { Editor, Position } from \"../types\";\nimport { applyMarksFromParent } from \".\";\n\ntype splitLeafOperation = {\n yText: YText;\n at: Position;\n};\nexport const splitLeaf = (editor: Editor | Pick<Editor, \"toYJS\">, { yText, at }: splitLeafOperation) => {\n const content = yText.toString();\n\n const rightText = content.substring(at.offset, yText.length);\n if (at.offset === yText.length) return;\n const newText = new Y.Text(rightText);\n const newLeave = new Y.Map();\n newLeave.set(\"text\", newText);\n applyMarksFromParent(yText.parent as YMap<any>, [newLeave]);\n\n const parent = yText?.parent?.parent as YArray<any>;\n yText.delete(at.offset, yText.length);\n parent.insert(at.path.slice().reverse()[0] + 1, [newLeave]);\n};\n","import { YArray, YText } from \"yjs/dist/src/internals\";\nimport { Editor, Position, EdytorSelection } from \"../types\";\nimport { deleteText } from \".\";\nimport { YNode, YLeaf } from \"..\";\nimport {\n leafNodeContent,\n leafString,\n leafLength,\n deleteLeafText,\n leafNode,\n getIndex,\n leafNodeContentLength,\n hasChildren,\n getNodeChildren,\n createLeaf,\n createNode\n} from \"../utils\";\n\nexport type splitNodeOperation = {\n at: Position;\n range?: EdytorSelection;\n yText?: YText;\n};\n\nexport const splitNode = (editor: Editor) => {\n const { start, end, type, length, setPosition, edges } = editor.selection;\n\n const leaf = start.leaf;\n const leafContent = leafNodeContent(start.leaf);\n const node = leafNode(start.leaf);\n\n const indexOfLeaf = getIndex(start.leaf);\n const indexOfNode = getIndex(node);\n\n const split = () => {\n const nextLeaves = leafContent.toArray().filter((_, i) => i > indexOfLeaf);\n\n const rightText = leafString(start.leaf).substring(start?.offset, leafLength(start.leaf));\n deleteLeafText(start.leaf, start?.offset, rightText.length, false);\n\n const newParent = hasChildren(node) ? getNodeChildren(node) : (node.parent as YArray<any>);\n const newLeaf = createLeaf({ ...leaf.toJSON(), id: undefined, text: rightText });\n newParent.insert(hasChildren(node) ? 0 : indexOfNode + 1, [\n createNode(editor.defaultBlock, {\n children: [],\n content: [newLeaf].concat(nextLeaves.map((leaf) => createLeaf(leaf.toJSON())))\n })\n ]);\n leafContent.delete(indexOfLeaf + 1, leafNodeContentLength(start.leaf) - indexOfLeaf - 1);\n setTimeout(() => {\n setPosition(newLeaf.get(\"id\"), { offset: 0 });\n }, 10);\n };\n\n let doSplit = (!edges.startNode || !edges.endNode) && type !== \"multinodes\";\n\n if ((edges.endNode || edges.startNode) && type === \"collapsed\") {\n const newNode = createNode(editor.defaultBlock);\n (node.parent as YArray<any>).insert(indexOfNode + (edges.endNode ? 1 : 0), [newNode]);\n return setTimeout(() => {\n setPosition(\n newNode\n .get(\"content\")\n .get(0)\n .get(\"id\"),\n { offset: 0 }\n );\n });\n }\n\n switch (type) {\n case \"collapsed\": {\n doSplit && split();\n break;\n }\n case \"singlenode\": {\n deleteText(editor, { mode: \"backward\" });\n doSplit && split();\n !doSplit && setPosition(start.leaf.get(\"id\"), { offset: start.offset });\n\n break;\n }\n case \"multileaves\":\n case \"multinodes\": {\n deleteText(editor, { mode: \"backward\" });\n doSplit && split();\n !doSplit && setPosition(start.leaf.get(\"id\"), { offset: start.offset });\n }\n }\n};\n","import { Editor, getNode, getNodeContainer, getPath, YNode, getChildren, getContent } from \"..\";\nimport { createNode, getNodeAtPath, traverse } from \"../utils\";\n\nexport const nestNode = (editor: Editor) => {\n const { start, type, end, setPosition } = editor.selection;\n\n const startNode = getNode(start.leaf);\n const startJsonNode = startNode.toJSON();\n const startPath = getPath(startNode);\n const [index, ...newPath] = startPath.slice().reverse();\n const prevNode = getNodeAtPath(editor, [...newPath, index - 1]);\n const startContainer = getNodeContainer(startNode);\n switch (type) {\n case \"singlenode\":\n case \"collapsed\": {\n if (!prevNode) return;\n const id = start.leaf.get(\"id\");\n const prevChildren = prevNode.get(\"children\");\n startContainer.delete(index);\n\n prevChildren.insert(prevChildren.length, [\n createNode(startJsonNode.type, {\n ...startJsonNode,\n children: startJsonNode.children.map(getChildren),\n content: startJsonNode.content.map(getContent)\n })\n ]);\n\n setPosition(id, { offset: start.offset });\n break;\n }\n case \"multileaves\":\n case \"multinodes\": {\n let length = 0;\n let newNodes = [];\n const id = start.leaf.get(\"id\");\n const startPathString = start.path.slice(0, start.path.length - 1).join(\"\");\n const endPathString = end.path.slice(0, start.path.length - 1).join(\"\");\n traverse(\n editor,\n (node, isText) => {\n if (!isText) {\n const path = getPath(node).join(\"\");\n\n if (path.length === startPath.length) {\n if (path <= endPathString && path >= startPathString) {\n length++;\n const jsonNode = node.toJSON();\n newNodes.push(\n createNode(jsonNode.type, {\n ...jsonNode,\n children: jsonNode.children.map(getChildren),\n content: jsonNode.content.map(getContent)\n })\n );\n }\n }\n }\n },\n { start: start.path[0], end: end.path[0] + 1 }\n );\n if (!prevNode) return;\n\n const prevChildren = prevNode.get(\"children\");\n\n startContainer.delete(index, length);\n prevChildren.insert(prevChildren.length, newNodes);\n setPosition(id, { offset: start.offset });\n break;\n }\n }\n};\n","import { getIndex } from \"..\";\nimport { YArray } from \"../../../../node_modules/yjs/dist/src/internals\";\nimport { copyNode } from \"../utils\";\n\nexport type moveNodeOperation = {\n from: {\n container: YArray<any> | any;\n at: number | number[];\n };\n to: {\n container: YArray<any>;\n at: number;\n };\n};\nexport const moveNode = ({ from, to }: moveNodeOperation) => {\n const indexes = Array.isArray(from.at) ? from.at : [from.at];\n const [firstIndex] = indexes;\n const firstNode = from.container.get(firstIndex);\n\n const nodesCopies = indexes.map((index) => {\n const node = from.container.get(index);\n return copyNode(node);\n });\n\n to.container.insert(to.at, nodesCopies);\n from.container.delete(getIndex(firstNode), indexes.length);\n return nodesCopies[0]\n .get(\"content\")\n .get(0)\n .get(\"id\");\n};\n","import { YArray, YMap } from \"yjs/dist/src/internals\";\nimport { mergeLeafs } from \"../operations\";\nimport { Editor } from \"../types\";\nimport { getIndex, getNode, traverse } from \"./common\";\nimport { leafNodeContent, leafNodeContentLength, leafString } from \"./leaves\";\nimport { createLeaf, createNode, EdytorDoc, getChildren, getContent, YLeaf, YNode } from \"./yClasses\";\n\nexport const mergeContentWithPrevLeaf = (editor: Editor) => {\n const { start } = editor.selection;\n let prevLeaf;\n let stop = false;\n\n traverse(editor, (node, isText) => {\n if (isText) {\n if (node === start.leaf) {\n stop = true;\n } else if (!stop) {\n prevLeaf = node;\n }\n }\n });\n if (!prevLeaf) return;\n\n leafNodeContent(prevLeaf).insert(\n leafNodeContentLength(prevLeaf),\n leafNodeContent(start.leaf)\n .toArray()\n .map((leaf: YLeaf) => {\n return createLeaf(leaf.toJSON());\n })\n );\n mergeLeafs(leafNodeContent(prevLeaf));\n (start.leaf.parent.parent as YArray<YNode>).delete(getIndex(getNode(start.leaf)));\n};\n\nexport const mergeContentWithNextLeaf = (editor: Editor) => {\n const { start } = editor.selection;\n let nextLeaf;\n let stop = false;\n\n editor.doc.traverse((node, isText) => {\n if (isText) {\n if (node === start.leaf) {\n stop = true;\n } else if (stop) {\n nextLeaf = node;\n stop = false;\n }\n }\n });\n\n //TODO the children should be pull to the depth level of the removed parent\n console.log(leafNodeContent(nextLeaf).toArray());\n leafNodeContent(start.leaf).insert(\n leafNodeContentLength(start.leaf),\n leafNodeContent(nextLeaf)\n .toArray()\n .map((leaf: YLeaf) => {\n return createLeaf(leaf.toJSON());\n })\n );\n mergeLeafs(leafNodeContent(start.leaf));\n console.log(start.leaf.parent.toJSON());\n const node = getNode(nextLeaf);\n if (hasChildren(node)) {\n console.log(node.get(\"children\").toJSON());\n node.parent.insert(\n getIndex(node),\n node\n .get(\"children\")\n .toJSON()\n .map((node) => createNode(node.type, node))\n );\n }\n node.parent.delete(getIndex(node));\n return nextLeaf;\n};\n\nexport const deleteNode = (node, defaultBlock: string) => {\n if (isNodeEmpty(node)) {\n (node.parent as YArray<YNode>).delete(getIndex(node));\n } else if (isNodeContentEmpty(node)) {\n const children = getNodeChildren(node).toJSON();\n const index = getIndex(node);\n node.parent.delete(index);\n node.parent.insert(\n index,\n children.map(({ type, ...props }) => createNode(type, props))\n );\n }\n if (node.parent === (node.doc.getArray(\"children\") && node.doc.getArray(\"children\").length === 0)) {\n (node.parent as YArray<YNode>).insert(0, [createNode(defaultBlock, { content: [createLeaf()] })]);\n }\n};\n\nexport const getNodeContainer = (node) => node.parent as YArray<YNode>;\nexport const getNodeChildren = (node) => node.get(\"children\") as YArray<YNode>;\nexport const getNodeContent = (node) => node.get(\"content\") as YArray<YNode>;\nexport const hasChildren = (node) => getNodeChildren(node).length > 0;\nexport const isNodeEmpty = (node) => isNodeContentEmpty(node) && !hasChildren(node);\nexport const isNodeContentEmpty = (node) =>\n getNodeContent(node).length === 0 ||\n getNodeContent(node)\n .toArray()\n .map(leafString)\n .join(\"\").length === 0;\n\nexport const copyNode = (node: YNode) => {\n const jsonNode = node.toJSON();\n return createNode(jsonNode.type, {\n ...jsonNode,\n children: jsonNode.children.map(getChildren),\n content: jsonNode.content.map(getContent)\n });\n};\n","import { customAlphabet } from \"nanoid\";\nimport { YArray, YMap } from \"yjs/dist/src/internals\";\nimport { Editor } from \"../types\";\nimport { leafString } from \"./leaves\";\nimport { getNodeChildren, getNodeContent } from \"./nodes\";\nimport { YLeaf } from \"./yClasses\";\nexport const nanoid = () => \"y-\" + customAlphabet(\"346789ABCDEFGHJKLMNPQRTUV-WXYabcdefghijkmnpqrtwxyz\", 20)();\n\ntype YNode = YMap<any>;\n\nexport const getNode = (node): YNode => node?.parent?.parent as YNode;\n\nexport const getIndex = (node: YNode): number => {\n let index = 0;\n let stop = false;\n let n = node.parent._start;\n while (n !== null && !stop) {\n if (n.countable && !n.deleted) {\n const c = n.content.getContent();\n for (let i = 0; i < c.length; i++) {\n if (c[i] === node) {\n stop = true;\n break;\n }\n index++;\n }\n }\n n = n.right;\n }\n return index;\n};\n\nexport const getPath = (node: YNode): number[] => {\n let p = [] as number[];\n let n = node;\n while (!!n) {\n p.push(getIndex(n));\n n = getNode(n);\n }\n return p.reverse();\n};\n\nexport const getId = (node): string => node.get(\"id\");\n\nexport const getLeafAtPath = (editor: Editor, [start, ...path]: number[]): YLeaf => {\n let node = editor.children.get(start);\n let i = 0;\n while (i < path.length - 1) {\n const index = path[i];\n i++;\n node = node.get(\"children\").get(index);\n }\n\n return node && node.get(\"content\").get(path.slice().reverse()[0]);\n};\nexport const getNodeAtPath = (editor: Editor, [start, ...path]: number[]): YNode => {\n let node = editor.children.get(start);\n for (let i = 0; i < path.length; i++) {\n const index = path[i];\n if (node.get) {\n node = node.get(\"children\").get(index);\n } else {\n node = undefined;\n }\n }\n return node;\n};\nexport const getContainerAtPath = (editor: Editor, path: number[]): YArray<any> => {\n if (path.length === 1) {\n return editor.children;\n } else {\n return getNodeAtPath(editor, path.slice(1, path.length)).get(\"children\");\n }\n};\nexport const traverse = (\n editor: Editor,\n cb: (node: YMap<any>, isText: boolean, path: number[]) => void,\n opts?: {\n start?: number;\n end?: number;\n }\n) => {\n const t = (node: YNode | YLeaf, path: number[]) => {\n if (node.has(\"text\")) {\n cb(node, true, path);\n } else {\n const array = getNodeContent(node)\n .toArray()\n //@ts-ignore\n .concat(getNodeChildren(node).toArray());\n cb(node, false, path);\n\n for (let i = 0; i < array.length; i++) {\n t(array[i], [...path.slice(0, path.length - 1), 0, i]);\n }\n }\n };\n const array = editor.children.toArray().slice(opts?.start || 0, opts?.end || editor.children.length) as YNode[];\n for (let i = 0; i < array.length; i++) {\n t(array[i], [i + (opts?.start || 0)]);\n }\n};\n\nexport const toString = (editor: Editor): string => {\n let t = \"\";\n const array = editor.children.toArray() as YNode[];\n for (let i = 0; i < array.length; i++) {\n t += leafString(array[i]);\n }\n return t;\n};\n","import { YArray, YMap, YText } from \"yjs/dist/src/internals\";\nimport { Editor } from \"../types\";\nimport { getIndex } from \"./common\";\nimport { deleteNode } from \"./nodes\";\nimport { YLeaf, YNode } from \"./yClasses\";\n\nexport class LeavesHarvest {\n leaves: { [id: string]: { shouldDeleteNode: boolean; content: YArray<YLeaf>; node: YMap<any>; indexes: number[] } };\n constructor() {\n this.leaves = {};\n }\n\n reap = (leaf, shouldDeleteNode = false) => {\n if (!isLeafEmpty(leaf)) return;\n const id = leafNodeId(leaf);\n if (!this.leaves[id]) {\n this.leaves[id] = {\n shouldDeleteNode,\n content: leafNodeContent(leaf),\n node: leafNode(leaf),\n indexes: []\n };\n }\n\n this.leaves[id].indexes.push(getIndex(leaf));\n };\n\n burn = (editor: Editor) => {\n Object.values(this.leaves).forEach(({ shouldDeleteNode, content, node, indexes }, i) => {\n content.delete(indexes[0], indexes.length);\n if (content.length === 0 && !shouldDeleteNode) {\n content.insert(0, [createLeaf()]);\n } else if (shouldDeleteNode) return deleteNode(node, editor?.defaultBlock);\n });\n };\n}\n\nexport const leafData = (leaf): YMap<any> => leaf.get(\"data\");\nexport const leafText = (leaf): YText => leaf.get(\"text\");\nexport const leafLength = (leaf): number => leafText(leaf).length;\nexport const leafString = (leaf): string => leafText(leaf).toString();\n\nexport const isLeafEmpty = (leaf) => leafText(leaf) === undefined || leafLength(leaf) === 0;\nexport const deleteLeafText = (leaf, index: number, length: number, shouldRemoveIfEmpty?: boolean) => {\n leafText(leaf).delete(index, length);\n\n shouldRemoveIfEmpty && removeIfEmpty(leaf);\n};\nexport const insertTextInLeaf = (leaf, index: number, text) => {\n leafText(leaf).insert(index, text);\n};\nexport const replaceLeafText = (leaf, start: number, length: number, text: string) => {\n const currentText = leafString(leaf).split(\"\");\n currentText.splice(start, length, ...text.split(\"\"));\n return setLeafText(leaf, currentText.join(\"\"));\n};\nexport const setLeafText = (leaf, text: string) => {\n const t = leafText(leaf);\n t.delete(0, t.length);\n t.insert(0, text);\n};\n\nexport const setLeafData = (leaf, data: object) => {\n if (leaf.has(\"data\")) {\n Object.keys(data).forEach((key) => {\n leafData(leaf).set(key, data[key]);\n });\n } else {\n leaf.set(\"data\", new Map(Object.entries(data)));\n }\n};\n\nexport const removeIfEmpty = (leaf) => {\n if (isLeafEmpty(leaf)) {\n leafNodeContent(leaf).delete(getIndex(leaf));\n // if (leafNodeContentLength(leaf) === 0) {\n // deleteNode(leafNode(leaf));\n // }\n }\n};\n\nexport const leafNode = (leaf): YNode => leaf.parent.parent as YNode;\nexport const leafNodeId = (leaf): string => leafNode(leaf).get(\"id\");\n\nexport const leafNodeContent = (leaf): YArray<YLeaf> => leaf.parent as YArray<YLeaf>;\n\nexport const leafNodeContentLength = (leaf): number => leafNodeContent(leaf).length;\nexport const leafNodeContentStringLength = (leaf): number =>\n leafNodeContent(leaf)\n .toArray()\n .reduce((acc, leaf) => acc + leafLength(leaf), 0);\n\nexport const leafNodeChildren = (leaf): YArray<YNode> => leafNode(leaf).get(\"children\") as YArray<YNode>;\n\nexport const leafNodeChildrenLength = (leaf): number => leafNodeChildren(leaf).length;\n","import { moveNode } from \"../operations\";\nimport { Editor, EdytorSelection } from \"../types\";\nimport { getIndex, getPath } from \"./common\";\nimport { EdytorDoc } from \"./yClasses\";\n\nexport class Dropper {\n from;\n to;\n node;\n startPath;\n container: HTMLDivElement;\n editor: Editor;\n doc: EdytorDoc;\n editorId: string;\n ID_TO_NODE: Map<any, any>;\n selection: EdytorSelection;\n allowNesting: boolean;\n\n init = (editor, container) => {\n this.editor = editor;\n this.doc = editor.doc;\n this.container = container;\n this.editorId = editor.editorId;\n this.selection = editor.selection;\n this.ID_TO_NODE = editor.ID_TO_NODE;\n this.allowNesting = editor.allowNesting;\n };\n startDrag = (node, e: DragEvent) => {\n this.node = node;\n const dndIndicator = document.getElementById(\"dndIndicator\");\n dndIndicator.style.opacity = \"1\";\n\n const element = document.getElementById(node.get(\"id\")) as HTMLElement;\n element.style.opacity = \"0.4\";\n document.body.style.cursor = \"grabbing\";\n\n this.from = {\n container: node.parent,\n at: getIndex(node)\n };\n this.startPath = getPath(node);\n e.dataTransfer?.setDragImage(element, e.offsetX, e.offsetY);\n document.addEventListener(\"mousemove\", this.onDrag);\n document.addEventListener(\"mouseup\", this.dragEnd);\n };\n dragEnd = () => {\n const element = document.getElementById(this.node.get(\"id\")) as HTMLElement;\n if (element) element.style.opacity = \"1\";\n document.body.style.cursor = \"auto\";\n document.removeEventListener(\"mousemove\", this.onDrag);\n document.removeEventListener(\"mouseup\", this.dragEnd);\n const id = moveNode({ from: this.from, to: this.to });\n const dndIndicator = document.getElementById(\"dndIndicator\");\n dndIndicator.style.opacity = \"0\";\n setTimeout(() => {\n console.log(id);\n this.selection.setPosition(id, { offset: 0 });\n });\n };\n\n getHoveredNode = (target: HTMLElement) => {\n let hoveredNode;\n let element = target;\n let i = 0;\n while (!hoveredNode && element?.id !== this.editorId && element && i < 100) {\n if (element.hasAttribute(\"data-edytor-block\")) {\n hoveredNode = this.ID_TO_NODE.get(element.id);\n break;\n }\n element = element.parentElement;\n i++;\n }\n if (!hoveredNode) return {};\n\n return { hoveredElement: element, hoveredNode };\n };\n onDrag = (e: MouseEvent) => {\n const { hoveredElement, hoveredNode } = this.getHoveredNode(e.target as HTMLElement);\n const dndIndicator = document.getElementById(\"dndIndicator\");\n\n if (!hoveredNode || !hoveredElement || !dndIndicator || hoveredNode === this.node) return;\n const rectHovered = hoveredElement.getBoundingClientRect();\n const isOnTop = e.y < rectHovered.top + rectHovered.height / 2;\n const rect = rectHovered;\n const isNested = this.allowNesting && !isOnTop && e.x > rect.left + rect.width / 5;\n\n const top = isOnTop ? rect.top : rect.top + rect.height;\n const deltaX = isNested ? 30 : 0;\n\n let path = getPath(hoveredNode);\n\n let [index, ...startOfPath] = path.slice().reverse();\n\n if (this.startPath.join(\"\") === startOfPath.join(\"\")) {\n return;\n // this.to= undefined\n }\n\n dndIndicator.style.width = `${rect.width - deltaX}px`;\n dndIndicator.style.top = `${top + window.pageYOffset}px`;\n dndIndicator.style.left = `${rect.left + deltaX}px`;\n\n index = index + (isOnTop ? 0 : 1);\n if (index === -1) index = 0;\n this.to = {\n container: isNested ? hoveredNode.get(\"children\") : path.length === 1 ? this.editor.children : hoveredNode.parent,\n at: isNested ? 0 : index\n };\n };\n}\n","import { Editor, Position } from \"../types\";\nimport { getIndex, getPath, leafLength, leafNode, leafNodeContentLength, YLeaf, YNode } from \".\";\n\nexport class EdytorSelection {\n editor: Editor;\n observers: ((selection: EdytorSelection) => void)[];\n container: HTMLDivElement;\n\n start: Position;\n end: Position;\n selectedText: string;\n arePathsEquals: boolean;\n editorOffset: number;\n length: number;\n range?: Range;\n boundingRect?: DOMRect;\n edges: {\n startLeaf: boolean;\n startNode: boolean;\n endLeaf: boolean;\n endNode: boolean;\n };\n selection?: Selection;\n focused: boolean;\n type?: \"multinodes\" | \"collapsed\" | \"singlenode\" | \"multileaves\" | \"notInDoc\";\n\n constructor() {\n this.observers = [];\n }\n init = (editor: Editor, container) => {\n this.container = container;\n this.editor = editor;\n document.addEventListener(\"selectionchange\", this.onSelection);\n this.container.addEventListener(\"focus\", this.onFocus);\n this.container.addEventListener(\"blur\", this.onBlur);\n };\n onFocus = () => {\n this.focused = true;\n this.onChange();\n };\n\n onBlur = () => {\n this.focused = false;\n this.onChange();\n };\n destroy = () => {\n document.removeEventListener(\"selectionchange\", this.onSelection);\n };\n onSelection = (e: any) => {\n if (e.target?.activeElement === this.container) this.getRange();\n };\n observe = (observer) => {\n this.observers = this.observers ? this.observers.concat(observer) : [observer];\n };\n unobserve = (observer) => {\n this.observers = this.observers ? this.observers.filter((o) => o !== observer) : [];\n };\n\n getLeaf = (\n anchorNode: HTMLElement,\n current: \"anchorNode\" | \"focusNode\"\n ): [YLeaf | undefined, YNode | undefined, number[], HTMLElement | undefined] => {\n if (this[current] && this[current].node === anchorNode) {\n // serve cached result to avoid loops to getPath and node\n return this[current].value;\n }\n\n let leaf;\n let node = anchorNode;\n\n while (!leaf && node !== this.container && node) {\n leaf = this.editor.ID_TO_NODE.get(node.id);\n if (!leaf) {\n node = node.parentElement;\n }\n }\n\n if (!leaf) return [undefined, undefined, undefined, undefined];\n const value = [leaf, leafNode(leaf), getPath(leaf), node];\n this[current] = { value, node: anchorNode };\n return value;\n };\n\n getNodeBoundingRect = (node: YNode): { nodeHtml: HTMLElement } => {\n const nodeHtml = this.container.querySelector(`#${node.get(\"id\")}`) as HTMLElement;\n return { nodeHtml };\n };\n getRange = (): EdytorSelection => {\n const selection = window.getSelection();\n const { anchorNode, focusNode, anchorOffset, focusOffset, isCollapsed, rangeCount } = selection;\n\n if (focusNode === null) return;\n const [leaf1, node1, path1, leafHtml1] = this.getLeaf(anchorNode as HTMLElement, \"anchorNode\");\n const [leaf2, node2, path2, leafHtml2] = this.getLeaf(focusNode as HTMLElement, \"focusNode\");\n\n if (!leaf1) return;\n const equalPaths = path1.join(\"\") === path2.join(\"\");\n const isFollowing = equalPaths ? anchorOffset < focusOffset : path1.join() < path2.join();\n const range = rangeCount >= 1 ? selection?.getRangeAt(0) : undefined;\n\n this.start = {\n ...this.getNodeBoundingRect(isFollowing ? node1 : node2),\n node: isFollowing ? node1 : node2,\n leafId: (isFollowing ? leaf1 : leaf2).get(\"id\"),\n leafIndex: isFollowing ? path1[path1.length - 1] : path2[path2.length - 1],\n nodeIndex: isFollowing ? path1[path1.length - 2] : path2[path2.length - 2],\n path: isFollowing ? path1 : path2,\n leafHtml: isFollowing ? leafHtml1 : leafHtml2,\n offset: isFollowing ? anchorOffset : focusOffset,\n leaf: isFollowing ? leaf1 : leaf2\n } as Position;\n\n this.end =\n isCollapsed || node2 === null\n ? this.start\n : {\n ...this.getNodeBoundingRect(!isFollowing ? node1 : node2),\n node: !isFollowing ? node1 : node2,\n leafId: (!isFollowing ? leaf1 : leaf2).get(\"id\"),\n leafIndex: !isFollowing ? path1[path1.length - 1] : path2[path2.length - 1],\n nodeIndex: !isFollowing ? path1[path1.length - 2] : path2[path2.length - 2],\n path: !isFollowing ? path1 : path2,\n leafHtml: !isFollowing ? leafHtml1 : leafHtml2,\n offset: !isFollowing ? anchorOffset : focusOffset,\n leaf: !isFollowing ? leaf1 : leaf2\n };\n this.selectedText = range ? range.toString() : \"\";\n this.arePathsEquals = equalPaths;\n this.length = this.selectedText.length;\n this.range = range;\n this.selection = selection;\n this.edges = {\n startLeaf: this.start.offset === 0,\n startNode: this.start.offset === 0 && getIndex(this.start.leaf) === 0,\n endLeaf: this.end.offset === leafLength(this.end.leaf),\n endNode:\n this.end.offset === leafLength(this.end.leaf) &&\n getIndex(this.start.leaf) === leafNodeContentLength(this.end.leaf) - 1\n };\n this.type = isCollapsed\n ? \"collapsed\"\n : equalPaths\n ? \"singlenode\"\n : this.start.node === this.end.node\n ? \"multileaves\"\n : \"multinodes\";\n this.onChange();\n };\n\n onChange = () => {\n this.observers.forEach((o) => o(this));\n };\n\n setPosition = (\n id: string,\n { offset, delta, end }: { offset?: number; delta?: number; end?: number; select?: boolean }\n ) => {\n let node = this.container.querySelector(`#${id}`) as ChildNode;\n\n while (node && node.nodeType !== 3 && node?.firstChild) {\n node = node.firstChild;\n }\n\n const pos = offset || this.start?.offset + delta;\n const hasRange = this.range || this.selection;\n if (!hasRange) {\n this.range = document.createRange();\n this.selection = window.getSelection();\n }\n this.range.setStart(node, pos);\n if (end) {\n this.range.setEnd(node, end);\n } else {\n this.range.collapse(true);\n }\n\n this.selection?.removeAllRanges();\n this.selection?.addRange(this.range);\n\n this.start = {\n ...this.start,\n leafHtml: this.container.querySelector(`#${id}`),\n offset: offset || this.start?.offset + delta\n };\n };\n}\n","import { replaceLeafText } from \"../utils\";\nimport { onBeforeInputData } from \"../types\";\nimport { splitNode, insertText, deleteText, formatText } from \"../operations\";\n\nconst prevent = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n};\n\nconst getDataTransfer = (e: any): string => e.dataTransfer.getData(\"text/plain\");\n\nexport const onBeforeInput = ([doc, onChange, editor]: onBeforeInputData, e: InputEvent) => {\n prevent(e);\n // console.log(e);\n const { start, length } = editor.selection;\n\n switch (e.inputType) {\n case \"insertFromPaste\":\n case \"insertLineBreak\":\n // case \"insertCompositionText\":\n // case \"insertFromDrop\":\n case \"insertText\": {\n const text =\n e.inputType === \"insertLineBreak\"\n ? \"\\n\"\n : e.inputType === \"insertFromPaste\"\n ? getDataTransfer(e)\n : (e.data as string);\n\n insertText(editor, {\n text\n });\n\n break;\n }\n case \"deleteContentBackward\": {\n deleteText(editor, { mode: \"backward\" });\n\n break;\n }\n case \"deleteByDrag\":\n case \"deleteByCut\":\n case \"deleteContentForward\": {\n deleteText(editor, { mode: \"forward\" });\n\n break;\n }\n\n case \"insertParagraph\": {\n splitNode(editor);\n\n break;\n }\n\n case \"insertFromDrop\": {\n setTimeout(() => {\n const text = getDataTransfer(e);\n if (text) {\n insertText(editor, {\n text\n });\n }\n }, 50);\n break;\n }\n case \"deleteSoftLineBackward\": {\n break;\n }\n case \"deleteWordForward\": {\n break;\n }\n case \"insertFromYank\": {\n break;\n }\n case \"formatSetBlockTextDirection\": {\n break;\n }\n case \"formatSetInlineTextDirection\": {\n break;\n }\n case \"deleteWordBackward\": {\n break;\n }\n case \"insertCompositionText\": {\n break;\n }\n case \"formatItalic\":\n case \"formatBold\": {\n break;\n }\n\n case \"insertReplacementText\": {\n doc().doc.transact(() => {\n replaceLeafText(start.leaf, start.offset, length, getDataTransfer(e));\n });\n }\n }\n\n onChange && onChange(editor);\n};\n","import { Editor } from \"../types\";\nimport isHotkey from \"is-hotkey\";\nimport { formatText, nestNode } from \"../operations\";\n\nexport const onKeyDown = (editor: Editor, e: KeyboardEvent) => {\n if (e.key === \"Tab\") {\n e.preventDefault();\n editor.allowNesting && nestNode(editor);\n }\n if (e.metaKey) {\n if (e.key === \"z\" && e.metaKey) {\n e.preventDefault();\n return editor.undoManager.undo();\n }\n if (e.key === \"Z\" && e.metaKey && e.shiftKey) {\n e.preventDefault();\n return editor.undoManager.redo();\n }\n\n for (let i = 0; i < editor.hotkeys.length; i++) {\n const { keys, operation, mark } = editor.hotkeys[i];\n if (isHotkey(keys, e)) {\n e.preventDefault();\n e.stopPropagation();\n if (typeof operation === \"function\") {\n return operation(editor);\n }\n switch (operation) {\n case \"formatText\": {\n return formatText(editor, mark);\n }\n }\n break;\n }\n }\n }\n};\n","import { Editor } from \"../types\";\n\nexport const onDrop = (editor: Editor, e: DragEvent) => {\n if (e.dataTransfer?.files.length > 0) {\n e.preventDefault();\n console.log(e.dataTransfer?.files);\n }\n};\nexport const onDragOver = (editor: Editor, e: DragEvent) => {\n e.preventDefault();\n\n if (e.dataTransfer?.files.length > 0) {\n e.preventDefault();\n console.log(e.dataTransfer?.files);\n }\n};\n","// import { WebrtcProvider } from \"y-webrtc\";\nimport { Doc } from \"yjs\";\n\ntype WebrtcProviderOptions = {\n signaling: Array<string>;\n password: string | null;\n awareness: any;\n maxConns: number;\n filterBcConns: boolean;\n peerOpts: any;\n};\nexport const createWebRtcProvider = (doc: Doc, room = \"hello\", opts: WebrtcProviderOptions) => {\n // const fakeDoc = new Doc();\n // const provider = new WebrtcProvider(room, doc, opts);\n // provider.emit(\"ping\", [\"lkeazlk\"]);\n // provider.connect();\n // provider.on(\"ping\", () => {\n // console.log(\"ping\");\n // });\n // provider.on(\"*\", (event) => {\n // console.log(event);\n // });\n // provider.on(\"connect\", (event) => {\n // console.log(event);\n // });\n // return provider;\n};\n","import { Doc } from \"yjs\";\nimport { WebsocketProvider } from \"y-websocket\";\n\nexport const createWSProvider = (room?) => {\n return new Promise((res) => {\n const doc = new Doc();\n const dev = \"ws://localhost:1234\";\n const prod = \"wss://edytor-production.up.railway.app\";\n console.log(process.env.NODE_ENV);\n const provider = new WebsocketProvider(process.env.NODE_ENV === \"production\" ? prod : dev, room || \"edytor\", doc, {\n connect: true\n });\n provider.on(\"status\", ({ status }) => {\n if (status === \"connected\") {\n return res(provider);\n }\n });\n });\n};\n"],"names":["createLeaf","props","leaf","Map","set","id","nanoid","Text","text","data","marks","Object","entries","keys","forEach","mark","createNode","type","node","content","Array","from","children","YNode","getContent","getChildren","map","EdytorDoc","value","Doc","DocFromJson","doc","array","getArray","insert","deleteText","editor","mode","selection","start","end","length","edges","setPosition","startNode","console","log","nodeIndex","leafNodeChildrenLength","path","parent","leafId","copyNode","getIndex","offset","mergeContentWithPrevLeaf","startLeaf","prevLeaf","leafNodeContent","get","leafIndex","deleteLeafText","leafLength","endNode","mergeContentWithNextLeaf","endLeaf","nextLeaf","hasChildren","getNode","startPathString","join","endPathString","transact","LeavesHarvest","reap","burn","traverse","isText","getPath","l","applyMarksFromParent","leafs","key","formatAtEqualPath","format","leafText","toString","index","isMarkActive","has","remainingText","substring","formatedLeaf","toJSON","undefined","newLeaves","push","formatText","newPath","selectedText","isLeafEmpty","toArray","indexOf","splitLeaf","yText","at","newChild","slice","reverse","mergeLeafs","isRemoved","_item","deleted","setTimeout","remainingLeaf","started","ended","isStart","isEnd","startOffset","endOffset","insertText","error","insertTextInLeaf","replaceLeafText","areLeafsMergeable","nodes","flat","every","currentLeaf","leafsToDelete","_","i","firstText","removeEmptyText","pop","pop_pop","rightText","newText","Y","newLeave","splitNode","leafContent","leafNode","indexOfLeaf","indexOfNode","split","nextLeaves","filter","leafString","newParent","getNodeChildren","newLeaf","defaultBlock","concat","leafNodeContentLength","doSplit","newNode","nestNode","startJsonNode","startPath","prevNode","getNodeAtPath","startContainer","getNodeContainer","prevChildren","newNodes","jsonNode","moveNode","to","indexes","isArray","firstIndex","firstNode","container","nodesCopies","stop","deleteNode","isNodeEmpty","isNodeContentEmpty","getNodeContent","customAlphabet","n","_start","countable","c","right","p","getId","getLeafAtPath","getContainerAtPath","cb","opts","t","shouldDeleteNode","leafNodeId","leaves","values","leafData","shouldRemoveIfEmpty","removeIfEmpty","currentText","splice","setLeafText","setLeafData","leafNodeContentStringLength","reduce","acc","leafNodeChildren","Dropper","editorId","ID_TO_NODE","allowNesting","e","dndIndicator","document","getElementById","style","opacity","element","body","cursor","dataTransfer","setDragImage","offsetX","offsetY","addEventListener","onDrag","dragEnd","removeEventListener","target","hoveredNode","hasAttribute","parentElement","hoveredElement","getHoveredNode","rectHovered","getBoundingClientRect","isOnTop","y","top","height","rect","isNested","x","left","width","deltaX","startOfPath","window","pageYOffset","EdytorSelection","onSelection","onFocus","onBlur","focused","onChange","activeElement","getRange","observer","observers","o","anchorNode","current","nodeHtml","querySelector","getSelection","focusNode","anchorOffset","focusOffset","isCollapsed","rangeCount","getLeaf","leaf1","node1","path1","leafHtml1","leaf2","node2","path2","leafHtml2","equalPaths","isFollowing","range","getRangeAt","getNodeBoundingRect","leafHtml","arePathsEquals","delta","nodeType","firstChild","pos","hasRange","createRange","setStart","setEnd","collapse","removeAllRanges","addRange","prevent","preventDefault","stopPropagation","getDataTransfer","getData","onBeforeInput","inputType","onKeyDown","metaKey","undoManager","undo","shiftKey","redo","hotkeys","operation","isHotkey","onDrop","files","onDragOver","createWebRtcProvider","room","createWSProvider","Promise","res","dev","prod","process","env","NODE_ENV","provider","WebsocketProvider","connect","on","status"],"mappings":"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"}
1
+ {"version":3,"file":"edytor.esm.js","sources":["../src/utils/yClasses/yLeaf.ts","../src/utils/yClasses/yNode.ts","../src/utils/yClasses/EdytorDoc.ts","../src/operations/deleteText.ts","../src/operations/formatText.ts","../src/operations/insertText.ts","../src/operations/merge.ts","../src/operations/removeEmptyText.ts","../src/operations/splitLeaf.ts","../src/operations/splitNode.ts","../src/operations/nestNode.ts","../src/operations/moveNode.ts","../src/utils/nodes.ts","../src/utils/common.ts","../src/utils/leaves.ts","../src/utils/dropper.ts","../src/utils/selection.ts","../src/events/onBeforeInput.ts","../src/events/onKeyDown.ts","../src/events/onDrop.ts","../src/yjs/wsProvider.ts"],"sourcesContent":["import { nanoid } from \"..\";\nimport { Map, Text } from \"yjs\";\n\nexport type YLeafProps = {\n data?: any;\n text?: string;\n id?: string;\n};\n\nexport const createLeaf = (props?: YLeafProps) => {\n const leaf = new Map();\n leaf.set(\"id\", props?.id || nanoid());\n leaf.set(\"text\", new Text(props?.text || \"\"));\n if (props) {\n const { id, text, data, ...marks } = props;\n leaf.set(\"text\", new Text(text || \"\"));\n data && leaf.set(\"data\", new Map(Object.entries(data)));\n marks &&\n Object.keys(marks).forEach((mark) => {\n leaf.set(mark, marks[mark]);\n });\n }\n return leaf;\n};\n","import { nanoid } from \"..\";\nimport { Map, Array } from \"yjs\";\nimport { YArray, YMap } from \"yjs/dist/src/internals\";\nimport { YLeaf } from \"../../\";\nimport { createLeaf } from \"./yLeaf\";\n\nexport type YNodeProps = {\n data?: any;\n content?: YLeaf[] | YArray<YLeaf>;\n children?: YNode[] | YArray<YNode>;\n id?: string;\n};\n\nexport const createNode = (type: string, props?: YNodeProps): YMap<any> => {\n const node = new Map();\n node.set(\"id\", props?.id || nanoid());\n node.set(\"type\", type);\n if (props?.data) {\n node.set(\"data\", new Map(Object.entries(props.data)));\n }\n node.set(\"content\", props?.content instanceof Array ? props.content : Array.from(props?.content || [createLeaf()]));\n node.set(\"children\", props?.children instanceof Array ? props.children : Array.from(props?.children || []));\n return node;\n};\n\nexport class YNode extends Map<any> {}\n","import { Doc } from \"yjs\";\nimport { YNode } from \".\";\nimport { createLeaf } from \"./yLeaf\";\nimport { createNode } from \"./yNode\";\nexport interface jsonLeaf extends Record<string, any> {\n text: string;\n data?: object;\n}\nexport type jsonNode = {\n type: string;\n content?: jsonLeaf[];\n data?: object;\n children?: jsonNode[];\n};\n\nexport const getChildren = ({ type, content = [], children = [], ...props }: jsonNode): YNode => {\n return createNode(type, { ...props, children: children.map(getChildren), content: content.map(createLeaf) });\n};\nexport class EdytorDoc extends Doc {}\n\nexport const DocFromJson = (value: jsonNode[], initialDoc?: Doc) => {\n const array = (initialDoc || new Doc()).getArray(\"children\");\n array.insert(0, value.map(getChildren));\n return array.doc;\n};\n","import { Editor, EdytorSelection } from \"../types\";\nimport {\n copyNode,\n deleteLeafText,\n getIndex,\n getNode,\n getPath,\n hasChildren,\n leafLength,\n leafNodeChildrenLength,\n leafNodeContent,\n LeavesHarvest,\n mergeContentWithNextLeaf,\n mergeContentWithPrevLeaf,\n createLeaf,\n traverse,\n isNodeContentEmpty\n} from \"../utils\";\n\ntype deleteTextOpts = {\n mode: \"forward\" | \"backward\" | \"none\";\n selection?: EdytorSelection;\n};\nexport const deleteText = (editor: Editor, { mode, selection }: deleteTextOpts) => {\n const { start, end, type, length, edges, setPosition } = selection || editor.selection;\n\n switch (type) {\n case \"collapsed\": {\n if (mode === \"backward\" && edges.startNode) {\n if (edges.startDocument) return;\n\n // unnest node if its the last of its parent and if he is nested or it's the first its the only child of its parent\n if (\n start.nodeIndex === start.node.parent.length - 1 &&\n start.path.length > 2 &&\n (start.nodeIndex !== 0 || start.node.parent.length === 1)\n ) {\n const node = copyNode(start.node);\n const nodeGrandParent = start.node.parent.parent;\n const index = getIndex(nodeGrandParent);\n start.node.parent.delete(start.nodeIndex);\n nodeGrandParent.parent.insert(index + 1, [node]);\n return setPosition(start.leafId, { offset: 0 });\n } else {\n return editor.doc.transact(() => {\n const [prevLeaf, offset] = mergeContentWithPrevLeaf(editor);\n setTimeout(() => {\n setPosition(prevLeaf.get(\"id\"), { offset });\n });\n });\n }\n }\n if (mode === \"backward\" && edges.startLeaf) {\n // delete content in the prev leaf because we are at its edge start, and escape current leaf\n const prevLeaf = leafNodeContent(start.leaf).get(start.leafIndex - 1);\n deleteLeafText(prevLeaf, leafLength(prevLeaf) - 1, length || 1);\n return setPosition(prevLeaf.get(\"id\"), { offset: leafLength(prevLeaf) });\n }\n\n if (mode === \"forward\" && edges.endNode) {\n // merge node with the next node because we are at edge end of it\n return editor.doc.transact(() => {\n mergeContentWithNextLeaf(editor);\n setTimeout(() => {\n setPosition(start.leafId, { offset: start.offset });\n });\n });\n }\n if (mode === \"forward\" && edges.endLeaf) {\n // delete content in the next leaf because we are at its edge end\n const nextLeaf = leafNodeContent(start.leaf).get(start.leafIndex + 1);\n return deleteLeafText(nextLeaf, 0, length || 1);\n }\n\n // just delete text\n deleteLeafText(start.leaf, start.offset + (mode === \"backward\" ? -length || -1 : length), length || 1);\n setPosition(start.leaf.get(\"id\"), { offset: start.offset + (mode === \"backward\" ? -length || -1 : length) });\n break;\n }\n case \"singlenode\": {\n deleteLeafText(start.leaf, start.offset, length, true);\n if (isNodeContentEmpty(start.node)) {\n leafNodeContent(start.leaf).insert(0, [createLeaf()]);\n }\n setPosition(start.leafId, { offset: start.offset });\n break;\n }\n case \"multileaves\":\n case \"multinodes\":\n {\n const startPathString = start.path.join(\",\");\n const endPathString = end.path.join(\",\");\n editor.doc.transact(() => {\n const { reap, burn } = new LeavesHarvest();\n traverse(\n editor,\n (leaf, isText) => {\n if (isText) {\n const path = getPath(leaf);\n const l = leafLength(leaf);\n if (path.join(\",\") === startPathString) {\n deleteLeafText(leaf, start.offset, l);\n reap(leaf, false);\n } else if (path > start.path && path < end.path) {\n deleteLeafText(leaf, 0, l);\n reap(leaf, true);\n } else if (path.join(\",\") === endPathString) {\n deleteLeafText(leaf, 0, end.offset);\n reap(leaf, end.offset === l);\n }\n }\n },\n { start: start.path[0], end: end.path[0] + 1 }\n );\n return burn(editor);\n });\n }\n setPosition(start.leaf.get(\"id\"), { offset: start.offset });\n break;\n }\n};\n","import { YMap, YText } from \"yjs/dist/src/internals\";\nimport { Editor, Position, EdytorSelection } from \"../types\";\nimport { mergeLeafs, splitLeaf } from \".\";\nimport {\n deleteLeafText,\n getIndex,\n getPath,\n isLeafEmpty,\n leafLength,\n leafNodeContent,\n leafText,\n createLeaf,\n traverse\n} from \"../utils\";\n\nexport type formatTextOperation = {\n at?: Position;\n value: any;\n range?: EdytorSelection;\n format: string;\n yText?: YText;\n};\nexport type formatAtEqualPathOperation = {\n format: string;\n value: any;\n start: EdytorSelection[\"start\"];\n end: EdytorSelection[\"end\"];\n length: EdytorSelection[\"length\"];\n data?: object;\n};\n\nexport const applyMarksFromParent = (parent: YMap<any>, leafs: YMap<any>[]) => {\n Array.from(parent.keys(), (key) => {\n if (key !== \"text\" && key !== \"id\" && key !== \"data\") {\n leafs.forEach((leaf) => {\n leaf.set(key, parent.get(key));\n });\n }\n });\n};\n\nexport const formatAtEqualPath = ({ format, value, start, end }: formatAtEqualPathOperation) => {\n const length = end.offset - start.offset;\n const leaf = start.leaf;\n const text = leafText(leaf);\n\n const content = text.toString();\n const index = getIndex(leaf);\n\n const isMarkActive = leaf.has(format);\n\n if (isMarkActive && leafLength(leaf) === length) {\n leaf.delete(format);\n return leaf;\n } else {\n const remainingText = content.substring(end.offset, leafLength(leaf));\n if (remainingText.length == 0 && leafLength(leaf) === end.offset - start.offset) {\n leaf.set(format, value);\n return leaf;\n } else {\n deleteLeafText(leaf, start.offset, leafLength(leaf));\n\n const formatedLeaf = createLeaf({\n ...leaf.toJSON(),\n id: undefined,\n [format]: value,\n text: content.substring(start.offset, end.offset)\n });\n\n let newLeaves = [formatedLeaf];\n\n if (remainingText.length > 0) {\n newLeaves.push(createLeaf({ ...leaf.toJSON(), id: undefined, text: remainingText }));\n }\n\n if (isMarkActive) {\n formatedLeaf.delete(format);\n }\n newLeaves.length && leafNodeContent(leaf).insert(index + 1, newLeaves);\n return formatedLeaf;\n }\n }\n};\n\nexport const formatText = (editor: Editor, mark: Record<string, any>) => {\n const [[format, value]] = Object.entries(mark);\n console.log(format);\n let newPath = 0;\n const { start, end, type, length, setPosition, selectedText } = editor.selection;\n\n editor.doc.transact(() => {\n switch (type) {\n case \"collapsed\": {\n const isMarkActive = start.leaf.has(format) && start.leaf.get(format) === value;\n if (isLeafEmpty(start.leaf)) {\n // if the leaf is empty we only toggle the mark\n isMarkActive ? start.leaf.delete(format) : start.leaf.set(format, value);\n } else {\n // if leaf is not empty we split the current leaf in half to insert an empty fragment with the desired mark\n splitLeaf(editor);\n const fragment = createLeaf({ text: \"\", [format]: value });\n // we are applying the current marks on the fragment\n applyMarksFromParent(start.leaf, [fragment]);\n // we remove the mark if its here\n if (isMarkActive) fragment.delete(format);\n // we insert the fragment after the spitted leaf\n leafNodeContent(start.leaf).insert(start.leafIndex + 1, [fragment]);\n // we remove the spitted leaf if empty\n if (isLeafEmpty(start.leaf)) {\n leafNodeContent(start.leaf).delete(start.leafIndex);\n }\n setTimeout(() => {\n setPosition(fragment.get(\"id\") as string, { offset: 0 });\n console.log(leafNodeContent(start.leaf).toJSON());\n });\n }\n\n // we merge leaves to avoid two subsequent leaves with the same marks\n mergeLeafs(leafNodeContent(start.leaf));\n break;\n }\n case \"singlenode\": {\n const formatedLeaf = formatAtEqualPath({ format, value, start, end, length });\n mergeLeafs(leafNodeContent(start.leaf));\n const isRemoved = formatedLeaf._item.deleted;\n\n if (!isRemoved) {\n setPosition(start.leaf.get(\"id\"), { offset: start.offset });\n setTimeout(() => {\n setPosition(formatedLeaf.get(\"id\"), { offset: 0, end: leafLength(formatedLeaf) });\n });\n } else {\n const remainingLeaf = formatedLeaf.parent.get(start.leafIndex - 1);\n const offset = leafText(remainingLeaf)\n .toJSON()\n .indexOf(selectedText);\n setTimeout(() => {\n setPosition(remainingLeaf.get(\"id\"), {\n offset,\n end: offset + selectedText.length\n });\n });\n }\n\n break;\n }\n case \"multileaves\":\n case \"multinodes\": {\n const startPathString = start.path.join(\",\");\n const endPathString = end.path.join(\",\");\n let started = false;\n let ended = false;\n\n traverse(\n editor,\n (leaf, isText) => {\n if (isText) {\n const path = getPath(leaf);\n const isStart = path.join(\",\") === startPathString;\n const isEnd = path.join(\",\") === getPath(end.leaf).join(\",\");\n console.log({ isEnd }, endPathString, getPath(end.leaf).join(\",\"), path.join(\",\"));\n if (isStart) {\n started = true;\n }\n\n const startOffset = isStart ? start.offset : 0;\n const endOffset = isEnd ? end.offset : leafLength(leaf);\n started &&\n !ended &&\n formatAtEqualPath({\n format,\n start: { leaf, offset: startOffset },\n end: { offset: endOffset },\n value\n });\n console.log({ ended });\n if (isEnd) {\n ended = true;\n }\n\n mergeLeafs(leafNodeContent(leaf));\n }\n },\n { start: start.path[0], end: end.path[0] + 1 }\n );\n break;\n }\n }\n });\n\n return newPath;\n};\n","import { Editor } from \"../types\";\nimport {\n deleteLeafText,\n getPath,\n insertTextInLeaf,\n leafLength,\n LeavesHarvest,\n replaceLeafText,\n traverse,\n YLeaf\n} from \"../utils\";\n\nexport type insertTextOperation = {\n text: string | null;\n};\nexport const insertText = (editor: Editor, { text }: insertTextOperation) => {\n if (!text || text === null || !text.length) return;\n\n const { start, end, type, length, setPosition } = editor.selection;\n if (type === \"notInDoc\") return console.error(\"Path is not in document space\");\n\n switch (type) {\n case \"collapsed\": {\n insertTextInLeaf(start.leaf, start.offset, text);\n setPosition(start.leaf.get(\"id\"), { offset: start.offset + text.length });\n break;\n }\n case \"singlenode\": {\n replaceLeafText(start.leaf, start.offset, length, text);\n setPosition(start.leaf.get(\"id\"), { offset: start.offset + text.length });\n break;\n }\n case \"multileaves\":\n case \"multinodes\": {\n const startPathString = start.path.join(\",\");\n const endPathString = end.path.join(\",\");\n editor.doc.transact(() => {\n const { reap, burn } = new LeavesHarvest();\n traverse(\n editor,\n (leaf, isText) => {\n if (isText) {\n const path = getPath(leaf);\n if (path.join(\",\") === startPathString) {\n replaceLeafText(leaf, start.offset, leafLength(leaf), text);\n reap(leaf);\n } else if (path > start.path && path < end.path) {\n deleteLeafText(leaf, 0, leafLength(leaf));\n reap(leaf);\n } else if (path.join(\",\") === endPathString) {\n deleteLeafText(leaf, 0, end.offset);\n reap(leaf);\n }\n }\n },\n { start: start.path[0], end: end.path[0] + 1 }\n );\n burn(editor);\n });\n setPosition(start.leaf.get(\"id\"), { offset: start.offset + text.length });\n }\n }\n};\n","import { YArray, YMap } from \"yjs/dist/src/internals\";\nimport { getIndex } from \"../utils\";\n\nexport const areLeafsMergeable = (nodes: YMap<any>[]) => {\n let keys = nodes.map((node) => Array.from(node.keys())).flat();\n return nodes.every((node) => {\n return keys.every((key) => node.has(key));\n });\n};\n\nexport const mergeLeafs = (leafs: YArray<YMap<any>>) => {\n let currentLeaf = leafs.get(0);\n let leafsToDelete = [] as YMap<any>[];\n leafs.forEach((_, i) => {\n const leaf = leafs.get(i + 1);\n if (!leaf) return;\n\n if (areLeafsMergeable([currentLeaf, leaf])) {\n const firstText = currentLeaf.get(\"text\");\n currentLeaf.get(\"text\").insert(firstText.length, leaf.get(\"text\").toString());\n leafsToDelete.push(leaf);\n } else {\n currentLeaf = leaf;\n }\n });\n\n leafsToDelete.forEach((leaf) => {\n leafs.delete(getIndex(leaf));\n });\n};\n","import { YText, YArray, YMap } from \"yjs/dist/src/internals\";\n\nexport const removeEmptyText = (yText: YText) => {\n let array = yText?.parent?.parent as YArray<YMap<any>> | undefined;\n const index = (array: YArray<any>, node: YMap<any>) => array?.toArray().indexOf(node);\n array?.delete(index(array, yText.parent as YMap<any>)!);\n while (array && array.length === 0) {\n const pop = array.parent as YMap<any>;\n const pop_pop = pop.parent as YArray<YMap<any>>;\n if (pop_pop) {\n const i = index(pop_pop, pop);\n i !== -1 && pop_pop.delete(i);\n array = pop_pop;\n } else {\n array = undefined;\n }\n }\n};\n","import { Editor } from \"../types\";\nimport { createLeaf, deleteLeafText, leafNodeContent, leafString } from \"../utils\";\nexport const splitLeaf = (editor: Editor) => {\n const {\n start: { leaf, leafIndex, offset }\n } = editor.selection;\n const content = leafString(leaf);\n const rightText = content.substring(offset, content.length);\n if (offset === content.length) return;\n deleteLeafText(leaf, offset, rightText.length);\n leafNodeContent(leaf).insert(leafIndex + 1, [createLeaf({ ...leaf.toJSON(), text: rightText, id: undefined })]);\n};\n","import { YArray, YText } from \"yjs/dist/src/internals\";\nimport { Editor, Position, EdytorSelection } from \"../types\";\nimport { deleteText } from \".\";\nimport { YNode, YLeaf } from \"..\";\nimport {\n leafNodeContent,\n leafString,\n leafLength,\n deleteLeafText,\n leafNode,\n getIndex,\n leafNodeContentLength,\n hasChildren,\n getNodeChildren,\n createLeaf,\n createNode\n} from \"../utils\";\n\nexport type splitNodeOperation = {\n at: Position;\n range?: EdytorSelection;\n yText?: YText;\n};\n\nexport const splitNode = (editor: Editor) => {\n const { start, end, type, length, setPosition, edges } = editor.selection;\n\n const leaf = start.leaf;\n const leafContent = leafNodeContent(start.leaf);\n const node = leafNode(start.leaf);\n\n const indexOfLeaf = getIndex(start.leaf);\n const indexOfNode = getIndex(node);\n\n const split = () => {\n const nextLeaves = leafContent.toArray().filter((_, i) => i > indexOfLeaf);\n\n const rightText = leafString(start.leaf).substring(start?.offset, leafLength(start.leaf));\n deleteLeafText(start.leaf, start?.offset, rightText.length, false);\n\n const newParent = hasChildren(node) ? getNodeChildren(node) : (node.parent as YArray<any>);\n const newLeaf = createLeaf({ ...leaf.toJSON(), id: undefined, text: rightText });\n newParent.insert(hasChildren(node) ? 0 : indexOfNode + 1, [\n createNode(editor.defaultBlock, {\n children: [],\n content: [newLeaf].concat(nextLeaves.map((leaf) => createLeaf(leaf.toJSON())))\n })\n ]);\n setPosition(newLeaf.get(\"id\") as string, { offset: 0 });\n leafContent.delete(indexOfLeaf + 1, leafNodeContentLength(start.leaf) - indexOfLeaf - 1);\n };\n\n let doSplit = (!edges.startNode || !edges.endNode) && type !== \"multinodes\";\n\n if ((edges.endNode || edges.startNode) && type === \"collapsed\") {\n // if cursor is at edge node with insert a default block before of after the current node\n const newNode = createNode(editor.defaultBlock);\n (node.parent as YArray<any>).insert(indexOfNode + (edges.endNode ? 1 : 0), [newNode]);\n return setTimeout(() => {\n setPosition(\n newNode\n .get(\"content\")\n .get(0)\n .get(\"id\"),\n { offset: 0 }\n );\n });\n }\n\n switch (type) {\n case \"collapsed\": {\n doSplit && split();\n break;\n }\n case \"singlenode\": {\n deleteText(editor, { mode: \"backward\" });\n doSplit && split();\n !doSplit && setPosition(start.leaf.get(\"id\"), { offset: start.offset });\n\n break;\n }\n case \"multileaves\":\n case \"multinodes\": {\n deleteText(editor, { mode: \"backward\" });\n doSplit && split();\n !doSplit && setPosition(start.leaf.get(\"id\"), { offset: start.offset });\n }\n }\n};\n","import { Editor, getNode, getNodeContainer, getPath } from \"..\";\nimport { copyNode, getNodeAtPath, traverse } from \"../utils\";\n\nexport const nestNode = (editor: Editor) => {\n const { start, type, end, setPosition } = editor.selection;\n\n const startNode = getNode(start.leaf);\n const nodeCopy = copyNode(startNode);\n const startPath = getPath(startNode);\n const [index, ...newPath] = startPath.slice().reverse();\n const prevNode = getNodeAtPath(editor, [...newPath, index - 1]);\n const startContainer = getNodeContainer(startNode);\n switch (type) {\n case \"singlenode\":\n case \"collapsed\": {\n if (!prevNode) return;\n const id = start.leaf.get(\"id\");\n const prevChildren = prevNode.get(\"children\");\n startContainer.delete(index);\n prevChildren.insert(prevChildren.length, [nodeCopy]);\n setPosition(id, { offset: start.offset });\n break;\n }\n case \"multileaves\":\n case \"multinodes\": {\n let length = 0;\n let newNodes = [];\n const id = start.leaf.get(\"id\");\n const startPathString = start.path.slice(0, start.path.length - 1).join(\"\");\n const endPathString = end.path.slice(0, start.path.length - 1).join(\"\");\n traverse(\n editor,\n (node, isText) => {\n if (!isText) {\n const path = getPath(node).join(\"\");\n if (path.length === startPath.length) {\n if (path <= endPathString && path >= startPathString) {\n length++;\n newNodes.push(copyNode(node));\n }\n }\n }\n },\n { start: start.path[0], end: end.path[0] + 1 }\n );\n if (!prevNode) return;\n\n const prevChildren = prevNode.get(\"children\");\n\n startContainer.delete(index, length);\n prevChildren.insert(prevChildren.length, newNodes);\n setPosition(id, { offset: start.offset });\n break;\n }\n }\n};\n","import { getIndex } from \"..\";\nimport { YArray } from \"../../../../node_modules/yjs/dist/src/internals\";\nimport { copyNode } from \"../utils\";\n\nexport type moveNodeOperation = {\n from: {\n container: YArray<any> | any;\n at: number | number[];\n };\n to: {\n container: YArray<any>;\n at: number;\n };\n};\nexport const moveNode = ({ from, to }: moveNodeOperation) => {\n const indexes = Array.isArray(from.at) ? from.at : [from.at];\n const [firstIndex] = indexes;\n const firstNode = from.container.get(firstIndex);\n\n const nodesCopies = indexes.map((index) => {\n const node = from.container.get(index);\n return copyNode(node);\n });\n\n to.container.insert(to.at, nodesCopies);\n from.container.delete(getIndex(firstNode), indexes.length);\n return nodesCopies[0]\n .get(\"content\")\n .get(0)\n .get(\"id\");\n};\n","import { YArray, YMap } from \"yjs/dist/src/internals\";\nimport { mergeLeafs } from \"../operations\";\nimport { Editor } from \"../types\";\nimport { getIndex, getNode, traverse } from \"./common\";\nimport { leafLength, leafNodeContent, leafNodeContentLength, leafString } from \"./leaves\";\nimport { createLeaf, createNode, getChildren, YNode } from \"./yClasses\";\n\nexport const mergeContentWithPrevLeaf = (editor: Editor) => {\n const { start } = editor.selection;\n let prevLeaf;\n let stop = false;\n\n traverse(editor, (node, isText) => {\n if (isText) {\n if (node === start.leaf) {\n stop = true;\n } else if (!stop) {\n prevLeaf = node;\n }\n }\n });\n if (!prevLeaf) return;\n const prevLeafLength = leafLength(prevLeaf);\n leafNodeContent(prevLeaf).insert(\n leafNodeContentLength(prevLeaf),\n leafNodeContent(start.leaf)\n .toArray()\n .map((leaf: YMap<any>) => {\n return createLeaf(leaf.toJSON());\n })\n );\n mergeLeafs(leafNodeContent(prevLeaf));\n\n const children = start.node\n .get(\"children\")\n .toArray()\n .map(copyNode);\n if (children.length) {\n start.node.parent.insert(start.nodeIndex, children);\n }\n start.node.parent.delete(start.nodeIndex + children.length);\n return [prevLeaf, prevLeafLength];\n // (start.leaf.parent.parent as YArray<YNode>).delete(index);\n};\n\nexport const mergeContentWithNextLeaf = (editor: Editor) => {\n const { start } = editor.selection;\n\n // 1 .get the next leaf\n let nextLeaf;\n let stop = false;\n\n traverse(editor, (node, isText) => {\n if (isText) {\n if (node === start.leaf) {\n stop = true;\n } else if (stop) {\n nextLeaf = node;\n stop = false;\n }\n }\n });\n // end of document do nothing\n if (!nextLeaf) return;\n\n // 2 .merge the next leaf with the start leaf\n leafNodeContent(start.leaf).insert(\n leafNodeContentLength(start.leaf),\n leafNodeContent(nextLeaf)\n .toArray()\n .map((leaf: YMap<any>) => {\n return createLeaf(leaf.toJSON());\n })\n );\n mergeLeafs(leafNodeContent(start.leaf));\n\n // 3 get the merged node children if any and place it where the merged node was\n const node = getNode(nextLeaf);\n const index = getIndex(node);\n const parent = node.parent as YArray<any>;\n const children = node.get(\"children\").toArray();\n children.length > 0 && parent.insert(index, children.map(copyNode));\n parent.delete(index + children.length);\n return nextLeaf;\n};\n\nexport const deleteNode = (node, defaultBlock: string) => {\n if (isNodeEmpty(node)) {\n (node.parent as YArray<YNode>).delete(getIndex(node));\n } else if (isNodeContentEmpty(node)) {\n const children = getNodeChildren(node).toJSON();\n const index = getIndex(node);\n node.parent.delete(index);\n node.parent.insert(\n index,\n children.map(({ type, ...props }) => createNode(type, props))\n );\n }\n if (node.parent === (node.doc.getArray(\"children\") && node.doc.getArray(\"children\").length === 0)) {\n (node.parent as YArray<YNode>).insert(0, [createNode(defaultBlock, { content: [createLeaf()] })]);\n }\n};\n\nexport const getNodeContainer = (node) => node.parent as YArray<YNode>;\nexport const getNodeChildren = (node) => node.get(\"children\") as YArray<YNode>;\nexport const getNodeContent = (node) => node.get(\"content\") as YArray<YNode>;\nexport const hasChildren = (node) => getNodeChildren(node).length > 0;\nexport const isNodeEmpty = (node) => isNodeContentEmpty(node) && !hasChildren(node);\nexport const isNodeContentEmpty = (node) =>\n getNodeContent(node).length === 0 ||\n getNodeContent(node)\n .toArray()\n .map(leafString)\n .join(\"\").length === 0;\n\nexport const copyNode = (node: YNode) => {\n const jsonNode = node.toJSON();\n return createNode(jsonNode.type, {\n ...jsonNode,\n children: jsonNode.children.map(getChildren),\n content: jsonNode.content.map(createLeaf)\n });\n};\n\nexport const nodeString = (node: YNode) => {\n let text = \"\";\n getNodeContent(node).forEach((leaf) => {\n text += leafString(leaf);\n });\n getNodeChildren(node).forEach((node) => {\n text += nodeString(node);\n });\n return text;\n};\n","import { customAlphabet } from \"nanoid\";\nimport { YArray, YMap } from \"yjs/dist/src/internals\";\nimport { Editor, EditorWithChildren, YLeaf } from \"../types\";\nimport { leafString } from \"./leaves\";\nimport { getNodeChildren, getNodeContent, nodeString } from \"./nodes\";\n\nexport const nanoid = () => \"y-\" + customAlphabet(\"346789ABCDEFGHJKLMNPQRTUV-WXYabcdefghijkmnpqrtwxyz\", 20)();\n\ntype YNode = YMap<any>;\n\nexport const getNode = (node): YNode => node?.parent?.parent as YNode;\n\nexport const getIndex = (node: YNode): number => {\n let index = 0;\n let stop = false;\n let n = node.parent._start;\n while (n !== null && !stop) {\n if (n.countable && !n.deleted) {\n const c = n.content.getContent();\n for (let i = 0; i < c.length; i++) {\n if (c[i] === node) {\n stop = true;\n break;\n }\n index++;\n }\n }\n n = n.right;\n }\n return index;\n};\n\nexport const getPath = (node: YNode): number[] => {\n let p = [] as number[];\n let n = node;\n while (!!n) {\n p.push(getIndex(n));\n n = getNode(n);\n }\n return p.reverse();\n};\n\nexport const getId = (node): string => node.get(\"id\");\n\nexport const getLeafAtPath = (editor: Editor | EditorWithChildren, [start, ...path]: number[]): YLeaf => {\n let node = editor.children.get(start);\n let i = 0;\n while (i < path.length - 1) {\n const index = path[i];\n i++;\n node = node.get(\"children\").get(index);\n }\n\n return node && node.get(\"content\").get(path.slice().reverse()[0]);\n};\nexport const getNodeAtPath = (editor: Editor, [start, ...path]: number[]): YNode => {\n let node = editor.children.get(start);\n for (let i = 0; i < path.length; i++) {\n const index = path[i];\n if (node.get) {\n node = node.get(\"children\").get(index);\n } else {\n node = undefined;\n }\n }\n return node;\n};\nexport const getContainerAtPath = (editor: Editor, path: number[]): YArray<any> => {\n if (path.length === 1) {\n return editor.children;\n } else {\n return getNodeAtPath(editor, path.slice(1, path.length)).get(\"children\");\n }\n};\nexport const traverse = (\n editor: Editor | EditorWithChildren,\n cb: (node: YMap<any>, isText: boolean, path: number[]) => void,\n opts?: {\n start?: number;\n end?: number;\n }\n) => {\n const t = (node: YNode | YLeaf, path: number[]) => {\n if (node.has(\"text\")) {\n cb(node, true, path);\n } else {\n const array = getNodeContent(node)\n .toArray()\n //@ts-ignore\n .concat(getNodeChildren(node).toArray());\n cb(node, false, path);\n\n for (let i = 0; i < array.length; i++) {\n t(array[i], [...path.slice(0, path.length - 1), 0, i]);\n }\n }\n };\n const array = editor.children.toArray().slice(opts?.start || 0, opts?.end || editor.children.length) as YNode[];\n for (let i = 0; i < array.length; i++) {\n t(array[i], [i + (opts?.start || 0)]);\n }\n};\n\nexport const toString = (editor: Editor | EditorWithChildren): string => {\n let t = \"\";\n const array = editor.children.toArray() as YNode[];\n for (let i = 0; i < array.length; i++) {\n t += nodeString(array[i]);\n }\n return t;\n};\n","import { YArray, YMap, YText } from \"yjs/dist/src/internals\";\nimport { Editor } from \"../types\";\nimport { getIndex } from \"./common\";\nimport { deleteNode } from \"./nodes\";\nimport { YLeaf, YNode } from \"./yClasses\";\n\nexport class LeavesHarvest {\n leaves: { [id: string]: { shouldDeleteNode: boolean; content: YArray<YLeaf>; node: YMap<any>; indexes: number[] } };\n constructor() {\n this.leaves = {};\n }\n\n reap = (leaf, shouldDeleteNode = false) => {\n if (!isLeafEmpty(leaf)) return;\n const id = leafNodeId(leaf);\n if (!this.leaves[id]) {\n this.leaves[id] = {\n shouldDeleteNode,\n content: leafNodeContent(leaf),\n node: leafNode(leaf),\n indexes: []\n };\n }\n\n this.leaves[id].indexes.push(getIndex(leaf));\n };\n\n burn = (editor: Editor) => {\n Object.values(this.leaves).forEach(({ shouldDeleteNode, content, node, indexes }, i) => {\n content.delete(indexes[0], indexes.length);\n if (content.length === 0 && !shouldDeleteNode) {\n content.insert(0, [createLeaf()]);\n } else if (shouldDeleteNode) return deleteNode(node, editor?.defaultBlock);\n });\n };\n}\n\nexport const leafData = (leaf): YMap<any> => leaf.get(\"data\");\nexport const leafText = (leaf): YText => leaf.get(\"text\");\nexport const leafLength = (leaf): number => leafText(leaf).length;\nexport const leafString = (leaf): string => leafText(leaf).toString();\n\nexport const isLeafEmpty = (leaf) => leafText(leaf) === undefined || leafLength(leaf) === 0;\nexport const deleteLeafText = (leaf, index: number, length: number, shouldRemoveIfEmpty?: boolean) => {\n leafText(leaf).delete(index, length);\n\n shouldRemoveIfEmpty && removeIfEmpty(leaf);\n};\nexport const insertTextInLeaf = (leaf, index: number, text) => {\n leafText(leaf).insert(index, text);\n};\nexport const replaceLeafText = (leaf, start: number, length: number, text: string) => {\n const currentText = leafString(leaf).split(\"\");\n currentText.splice(start, length, ...text.split(\"\"));\n return setLeafText(leaf, currentText.join(\"\"));\n};\nexport const setLeafText = (leaf, text: string) => {\n const t = leafText(leaf);\n t.delete(0, t.length);\n t.insert(0, text);\n};\n\nexport const setLeafData = (leaf, data: object) => {\n if (leaf.has(\"data\")) {\n Object.keys(data).forEach((key) => {\n leafData(leaf).set(key, data[key]);\n });\n } else {\n leaf.set(\"data\", new Map(Object.entries(data)));\n }\n};\n\nexport const removeIfEmpty = (leaf) => {\n if (isLeafEmpty(leaf)) {\n console.log(\"isEmpty\", leafNodeContent(leaf).toJSON());\n leafNodeContent(leaf).delete(getIndex(leaf));\n // if (leafNodeContentLength(leaf) === 0) {\n // deleteNode(leafNode(leaf));\n // }\n }\n};\n\nexport const leafNode = (leaf): YNode => leaf.parent.parent as YNode;\nexport const leafNodeId = (leaf): string => leafNode(leaf).get(\"id\");\n\nexport const leafNodeContent = (leaf): YArray<YLeaf> => leaf.parent as YArray<YLeaf>;\n\nexport const leafNodeContentLength = (leaf): number => leafNodeContent(leaf).length;\nexport const leafNodeContentStringLength = (leaf): number =>\n leafNodeContent(leaf)\n .toArray()\n .reduce((acc, leaf) => acc + leafLength(leaf), 0);\n\nexport const leafNodeChildren = (leaf): YArray<YNode> => leafNode(leaf).get(\"children\") as YArray<YNode>;\n\nexport const leafNodeChildrenLength = (leaf): number => leafNodeChildren(leaf).length;\n","import { moveNode } from \"../operations\";\nimport { Editor, EdytorSelection } from \"../types\";\nimport { getIndex, getPath } from \"./common\";\nimport { EdytorDoc } from \"./yClasses\";\n\nexport class Dropper {\n from;\n to;\n node;\n startPath;\n container: HTMLDivElement;\n editor: Editor;\n doc: EdytorDoc;\n editorId: string;\n ID_TO_NODE: Map<any, any>;\n selection: EdytorSelection;\n allowNesting: boolean;\n\n init = (editor, container) => {\n this.editor = editor;\n this.doc = editor.doc;\n this.container = container;\n this.editorId = editor.editorId;\n this.selection = editor.selection;\n this.ID_TO_NODE = editor.ID_TO_NODE;\n this.allowNesting = editor.allowNesting;\n };\n startDrag = (node, e: DragEvent) => {\n if (!this.editor.dnd.active) return;\n this.node = node;\n const dndIndicator = document.getElementById(\"dndIndicator\");\n dndIndicator.style.opacity = \"1\";\n\n const element = document.getElementById(node.get(\"id\")) as HTMLElement;\n element.style.opacity = \"0.4\";\n document.body.style.cursor = \"grabbing\";\n\n this.from = {\n container: node.parent,\n at: getIndex(node)\n };\n this.startPath = getPath(node);\n e.dataTransfer?.setDragImage(element, e.offsetX, e.offsetY);\n document.addEventListener(\"mousemove\", this.onDrag);\n document.addEventListener(\"mouseup\", this.dragEnd);\n };\n dragEnd = () => {\n const element = document.getElementById(this.node.get(\"id\")) as HTMLElement;\n if (element) element.style.opacity = \"1\";\n document.body.style.cursor = \"auto\";\n document.removeEventListener(\"mousemove\", this.onDrag);\n document.removeEventListener(\"mouseup\", this.dragEnd);\n const id = moveNode({ from: this.from, to: this.to });\n const dndIndicator = document.getElementById(\"dndIndicator\");\n dndIndicator.style.opacity = \"0\";\n setTimeout(() => {\n console.log(id);\n this.selection.setPosition(id, { offset: 0 });\n });\n };\n\n getHoveredNode = (target: HTMLElement) => {\n let hoveredNode;\n let element = target;\n let i = 0;\n while (!hoveredNode && element?.id !== this.editorId && element && i < 100) {\n if (element.hasAttribute(\"data-edytor-block\")) {\n hoveredNode = this.ID_TO_NODE.get(element.id);\n break;\n }\n element = element.parentElement;\n i++;\n }\n if (!hoveredNode) return {};\n\n return { hoveredElement: element, hoveredNode };\n };\n onDrag = (e: MouseEvent) => {\n if (!this.editor.dnd.active) return;\n const { hoveredElement, hoveredNode } = this.getHoveredNode(e.target as HTMLElement);\n const dndIndicator = document.getElementById(\"dndIndicator\");\n\n if (!hoveredNode || !hoveredElement || !dndIndicator || hoveredNode === this.node) return;\n const rectHovered = hoveredElement.getBoundingClientRect();\n const isOnTop = e.y < rectHovered.top + rectHovered.height / 2;\n const rect = rectHovered;\n const isNested = this.allowNesting && !isOnTop && e.x > rect.left + rect.width / 5;\n\n const top = isOnTop ? rect.top : rect.top + rect.height;\n const deltaX = isNested ? 30 : 0;\n\n let path = getPath(hoveredNode);\n\n let [index, ...startOfPath] = path.slice().reverse();\n\n if (this.startPath.join(\"\") === startOfPath.join(\"\")) {\n return;\n // this.to= undefined\n }\n\n dndIndicator.style.width = `${rect.width - deltaX}px`;\n dndIndicator.style.top = `${top + window.pageYOffset}px`;\n dndIndicator.style.left = `${rect.left + deltaX}px`;\n\n index = index + (isOnTop ? 0 : 1);\n if (index === -1) index = 0;\n this.to = {\n container: isNested ? hoveredNode.get(\"children\") : path.length === 1 ? this.editor.children : hoveredNode.parent,\n at: isNested ? 0 : index\n };\n };\n}\n","import { Editor, Position, YLeaf } from \"../types\";\nimport { getIndex, getPath, leafLength, leafNode, leafNodeContentLength, YNode } from \".\";\n\nexport class EdytorSelection {\n editor: Editor;\n observers: ((selection: EdytorSelection) => void)[];\n container: HTMLDivElement;\n collaborationPosition: {\n node: string;\n leaf: string;\n offset: number;\n };\n start: Position;\n end: Position;\n selectedText: string;\n arePathsEquals: boolean;\n editorOffset: number;\n length: number;\n range?: Range;\n boundingRect?: DOMRect;\n edges: {\n startDocument: boolean;\n endDocument: boolean;\n startLeaf: boolean;\n startNode: boolean;\n endLeaf: boolean;\n endNode: boolean;\n };\n selection?: Selection;\n focused: boolean;\n type?: \"multinodes\" | \"collapsed\" | \"singlenode\" | \"multileaves\" | \"notInDoc\";\n\n constructor() {\n this.observers = [];\n }\n init = (editor: Editor, container) => {\n this.container = container;\n this.editor = editor;\n document.addEventListener(\"selectionchange\", this.onSelection);\n this.container.addEventListener(\"focus\", this.onFocus);\n this.container.addEventListener(\"blur\", this.onBlur);\n };\n onFocus = () => {\n this.focused = true;\n this.onChange();\n };\n\n onBlur = () => {\n this.focused = false;\n this.onChange();\n };\n destroy = () => {\n document.removeEventListener(\"selectionchange\", this.onSelection);\n };\n onSelection = (e: any) => {\n if (e.target?.activeElement === this.container) this.getRange();\n };\n observe = (observer) => {\n this.observers = this.observers ? this.observers.concat(observer) : [observer];\n };\n unobserve = (observer) => {\n this.observers = this.observers ? this.observers.filter((o) => o !== observer) : [];\n };\n\n getLeaf = (\n anchorNode: HTMLElement,\n current: \"anchorNode\" | \"focusNode\"\n ): [YLeaf | undefined, YNode | undefined, number[], HTMLElement | undefined] => {\n if (this[current] && this[current].node === anchorNode) {\n // serve cached result to avoid loops to getPath and node\n return this[current].value;\n }\n\n let leaf;\n let node = anchorNode;\n\n while (!leaf && node !== this.container && node) {\n leaf = this.editor.ID_TO_NODE.get(node.id);\n if (!leaf) {\n node = node.parentElement;\n }\n }\n\n if (!leaf) return [undefined, undefined, undefined, undefined];\n const value = [leaf, leafNode(leaf), getPath(leaf), node];\n this[current] = { value, node: anchorNode };\n return value as [YLeaf, YNode, number[], HTMLElement];\n };\n\n getNodeBoundingRect = (node: YNode): { nodeHtml: HTMLElement } => {\n const nodeHtml = this.container.querySelector(`#${node.get(\"id\")}`) as HTMLElement;\n return { nodeHtml };\n };\n getRange = (): EdytorSelection => {\n const selection = window.getSelection();\n const { anchorNode, focusNode, anchorOffset, focusOffset, isCollapsed, rangeCount } = selection;\n\n if (focusNode === null) return;\n const [leaf1, node1, path1, leafHtml1] = this.getLeaf(anchorNode as HTMLElement, \"anchorNode\");\n const [leaf2, node2, path2, leafHtml2] = this.getLeaf(focusNode as HTMLElement, \"focusNode\");\n\n if (!leaf1) return;\n const equalPaths = path1.join(\"\") === path2.join(\"\");\n const isFollowing = equalPaths ? anchorOffset < focusOffset : path1.join() < path2.join();\n const range = rangeCount >= 1 ? selection?.getRangeAt(0) : undefined;\n\n this.start = {\n ...this.getNodeBoundingRect(isFollowing ? node1 : node2),\n node: isFollowing ? node1 : node2,\n leafId: (isFollowing ? leaf1 : leaf2).get(\"id\"),\n leafIndex: isFollowing ? path1[path1.length - 1] : path2[path2.length - 1],\n nodeIndex: isFollowing ? path1[path1.length - 2] : path2[path2.length - 2],\n path: isFollowing ? path1 : path2,\n leafHtml: isFollowing ? leafHtml1 : leafHtml2,\n offset: isFollowing ? anchorOffset : focusOffset,\n leaf: isFollowing ? leaf1 : leaf2\n } as Position;\n\n this.end =\n isCollapsed || node2 === null\n ? this.start\n : {\n ...this.getNodeBoundingRect(!isFollowing ? node1 : node2),\n node: !isFollowing ? node1 : node2,\n leafId: (!isFollowing ? leaf1 : leaf2).get(\"id\"),\n leafIndex: !isFollowing ? path1[path1.length - 1] : path2[path2.length - 1],\n nodeIndex: !isFollowing ? path1[path1.length - 2] : path2[path2.length - 2],\n path: !isFollowing ? path1 : path2,\n leafHtml: !isFollowing ? leafHtml1 : leafHtml2,\n offset: !isFollowing ? anchorOffset : focusOffset,\n leaf: !isFollowing ? leaf1 : leaf2\n };\n this.selectedText = range ? range.toString() : \"\";\n this.arePathsEquals = equalPaths;\n this.length = this.selectedText.length;\n this.range = range;\n this.selection = selection;\n const startNode = this.start.offset === 0 && getIndex(this.start.leaf) === 0;\n const endNode =\n this.end.offset === leafLength(this.end.leaf) &&\n getIndex(this.start.leaf) === leafNodeContentLength(this.end.leaf) - 1;\n this.edges = {\n startLeaf: this.start.offset === 0,\n endLeaf: this.end.offset === leafLength(this.end.leaf),\n startNode,\n endNode,\n startDocument: startNode && this.start.path.join(\"\") === \"00\",\n endDocument: false\n };\n\n this.type = isCollapsed\n ? \"collapsed\"\n : equalPaths\n ? \"singlenode\"\n : this.start.node === this.end.node\n ? \"multileaves\"\n : \"multinodes\";\n this.onChange();\n };\n\n onChange = () => {\n this.observers.forEach((o) => o(this));\n // console.log(this.editor.awareness);\n // if (this.collaborationPosition?.node !== this.start.node.get(\"id\")) {\n // this.collaborationPosition = {\n // node: this.start.node.get(\"id\"),\n // leaf: this.start.leaf.get(\"id\"),\n // offset: this.start.offset\n // };\n // this.editor.awareness.setLocalStateField(\"position\", this.collaborationPosition);\n // }\n };\n\n setPosition = (\n id: string,\n { offset, delta, end }: { offset?: number; delta?: number; end?: number; select?: boolean }\n ) => {\n let node = this.container.querySelector(`#${id}`) as ChildNode;\n console.log({ node });\n while (node && node.nodeType !== 3 && node?.firstChild) {\n node = node.firstChild;\n }\n\n const pos = offset || this.start?.offset + delta;\n const hasRange = this.range || this.selection;\n if (!hasRange) {\n this.range = document.createRange();\n this.selection = window.getSelection();\n }\n this.range.setStart(node, pos);\n if (end) {\n this.range.setEnd(node, end);\n } else {\n this.range.collapse(true);\n }\n\n this.selection?.removeAllRanges();\n this.selection?.addRange(this.range);\n\n this.start = {\n ...this.start,\n leafHtml: this.container.querySelector(`#${id}`),\n offset: offset || this.start?.offset + delta\n };\n };\n}\n","import { replaceLeafText } from \"../utils\";\nimport { onBeforeInputData } from \"../types\";\nimport { splitNode, insertText, deleteText, formatText } from \"../operations\";\n\nconst prevent = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n};\n\nconst getDataTransfer = (e: any): string => e.dataTransfer.getData(\"text/plain\");\n\nexport const onBeforeInput = ([doc, onChange, editor]: onBeforeInputData, e: InputEvent) => {\n // console.log(e);\n const { start, length, setPosition } = editor.selection;\n\n // if (e.composedPath().some((el) => el.getAttribute && el.getAttribute(\"data-edytor-void\") === \"true\")) {\n // return;\n // }\n const tag = e.target?.tagName;\n if (tag === \"TEXTAREA\" || tag === \"INPUT\") return;\n prevent(e);\n switch (e.inputType) {\n case \"insertFromPaste\":\n case \"insertLineBreak\":\n // case \"insertCompositionText\":\n // case \"insertFromDrop\":\n case \"insertText\": {\n const text =\n e.inputType === \"insertLineBreak\"\n ? \"\\n\"\n : e.inputType === \"insertFromPaste\"\n ? getDataTransfer(e)\n : (e.data as string);\n\n insertText(editor, {\n text\n });\n\n break;\n }\n case \"deleteContentBackward\": {\n deleteText(editor, { mode: \"backward\" });\n\n break;\n }\n case \"deleteByDrag\":\n case \"deleteByCut\":\n case \"deleteContentForward\": {\n deleteText(editor, { mode: \"forward\" });\n break;\n }\n\n case \"insertParagraph\": {\n splitNode(editor);\n break;\n }\n\n case \"insertFromDrop\": {\n setTimeout(() => {\n const text = getDataTransfer(e);\n if (text) {\n insertText(editor, {\n text\n });\n }\n }, 50);\n break;\n }\n case \"deleteSoftLineBackward\": {\n break;\n }\n case \"deleteWordForward\": {\n break;\n }\n case \"insertFromYank\": {\n break;\n }\n case \"formatSetBlockTextDirection\": {\n break;\n }\n case \"formatSetInlineTextDirection\": {\n break;\n }\n case \"deleteWordBackward\": {\n break;\n }\n case \"insertCompositionText\": {\n break;\n }\n case \"formatItalic\":\n case \"formatBold\": {\n break;\n }\n\n case \"insertReplacementText\": {\n replaceLeafText(start.leaf, start.offset, length, getDataTransfer(e));\n setPosition(start.leafId, { offset: start.offset });\n }\n }\n\n onChange && onChange(editor);\n};\n","import { Editor } from \"../types\";\nimport isHotkey from \"is-hotkey\";\nimport { formatText, nestNode } from \"../operations\";\n\nexport const onKeyDown = (editor: Editor, e: KeyboardEvent) => {\n if (e.key === \"Tab\") {\n e.preventDefault();\n editor.allowNesting && nestNode(editor);\n }\n if (e.metaKey) {\n if (e.key === \"z\" && e.metaKey) {\n e.preventDefault();\n return editor.undoManager.undo();\n }\n if (e.key === \"Z\" && e.metaKey && e.shiftKey) {\n e.preventDefault();\n return editor.undoManager.redo();\n }\n\n if (editor.hotkeys) {\n for (let i = 0; i < editor.hotkeys.length; i++) {\n const { keys, operation, mark } = editor.hotkeys[i];\n if (isHotkey(keys, e)) {\n e.preventDefault();\n e.stopPropagation();\n if (typeof operation === \"function\") {\n return operation(editor);\n }\n switch (operation) {\n case \"formatText\": {\n return formatText(editor, mark);\n }\n }\n break;\n }\n }\n }\n }\n};\n\nexport const defaultHotkeys = [\n { operation: \"formatText\", keys: \"mod+b\", mark: { bold: true } },\n { operation: \"formatText\", keys: \"mod+i\", mark: { italic: true } },\n { operation: \"formatText\", keys: \"mod+u\", mark: { underline: true } },\n { operation: \"formatText\", keys: \"mod+shift+c\", mark: { code: true } },\n { operation: \"formatText\", keys: \"mod+shift+x\", mark: { strikethrough: true } },\n { operation: \"formatText\", keys: \"mod+shift+h\", mark: { highlight: true } }\n];\n","import { Editor } from \"../types\";\n\nexport const onDrop = (editor: Editor, e: DragEvent) => {\n if (e.dataTransfer?.files.length > 0) {\n e.preventDefault();\n console.log(e.dataTransfer?.files);\n }\n};\nexport const onDragOver = (editor: Editor, e: DragEvent) => {\n e.preventDefault();\n\n if (e.dataTransfer?.files.length > 0) {\n e.preventDefault();\n console.log(e.dataTransfer?.files);\n }\n};\n","import { Doc } from \"yjs\";\nimport { WebsocketProvider } from \"y-websocket\";\n\nexport const createWSProvider = (room?) => {\n return new Promise((res) => {\n const doc = new Doc();\n const dev = \"ws://localhost:1234\";\n const prod = \"wss://edytor-production.up.railway.app\";\n console.log(process.env.NODE_ENV);\n const provider = new WebsocketProvider(process.env.NODE_ENV === \"production\" ? prod : prod, room || \"edytor\", doc, {\n connect: true\n });\n provider.on(\"status\", ({ status }) => {\n if (status === \"connected\") {\n return res(provider);\n }\n });\n });\n};\n"],"names":["createLeaf","props","leaf","Map","set","id","nanoid","Text","text","data","marks","Object","entries","keys","forEach","mark","createNode","type","node","content","Array","from","children","YNode","getChildren","map","EdytorDoc","Doc","DocFromJson","value","initialDoc","array","getArray","insert","doc","deleteText","editor","mode","selection","start","end","length","edges","setPosition","startNode","startDocument","nodeIndex","parent","path","copyNode","nodeGrandParent","index","getIndex","leafId","offset","transact","mergeContentWithPrevLeaf","prevLeaf","setTimeout","get","startLeaf","leafNodeContent","leafIndex","deleteLeafText","leafLength","endNode","mergeContentWithNextLeaf","endLeaf","nextLeaf","isNodeContentEmpty","startPathString","join","endPathString","LeavesHarvest","reap","burn","traverse","isText","getPath","l","applyMarksFromParent","leafs","key","formatAtEqualPath","format","leafText","toString","isMarkActive","has","remainingText","substring","formatedLeaf","toJSON","undefined","newLeaves","push","formatText","console","log","newPath","selectedText","isLeafEmpty","splitLeaf","fragment","mergeLeafs","isRemoved","_item","deleted","remainingLeaf","indexOf","started","ended","isStart","isEnd","startOffset","endOffset","insertText","error","insertTextInLeaf","replaceLeafText","areLeafsMergeable","nodes","flat","every","currentLeaf","leafsToDelete","_","i","firstText","removeEmptyText","yText","toArray","pop","pop_pop","leafString","rightText","splitNode","leafContent","leafNode","indexOfLeaf","indexOfNode","split","nextLeaves","filter","newParent","hasChildren","getNodeChildren","newLeaf","defaultBlock","concat","leafNodeContentLength","doSplit","newNode","nestNode","getNode","nodeCopy","startPath","slice","reverse","prevNode","getNodeAtPath","startContainer","getNodeContainer","prevChildren","newNodes","moveNode","to","indexes","isArray","at","firstIndex","firstNode","container","nodesCopies","stop","prevLeafLength","deleteNode","isNodeEmpty","getNodeContent","jsonNode","nodeString","customAlphabet","n","_start","countable","c","getContent","right","p","getId","getLeafAtPath","getContainerAtPath","cb","opts","t","shouldDeleteNode","leafNodeId","leaves","values","leafData","shouldRemoveIfEmpty","removeIfEmpty","currentText","splice","setLeafText","setLeafData","leafNodeContentStringLength","reduce","acc","leafNodeChildren","leafNodeChildrenLength","Dropper","editorId","ID_TO_NODE","allowNesting","e","dnd","active","dndIndicator","document","getElementById","style","opacity","element","body","cursor","dataTransfer","setDragImage","offsetX","offsetY","addEventListener","onDrag","dragEnd","removeEventListener","target","hoveredNode","hasAttribute","parentElement","hoveredElement","getHoveredNode","rectHovered","getBoundingClientRect","isOnTop","y","top","height","rect","isNested","x","left","width","deltaX","startOfPath","window","pageYOffset","EdytorSelection","onSelection","onFocus","onBlur","focused","onChange","activeElement","getRange","observer","observers","o","anchorNode","current","nodeHtml","querySelector","getSelection","focusNode","anchorOffset","focusOffset","isCollapsed","rangeCount","getLeaf","leaf1","node1","path1","leafHtml1","leaf2","node2","path2","leafHtml2","equalPaths","isFollowing","range","getRangeAt","getNodeBoundingRect","leafHtml","arePathsEquals","endDocument","delta","nodeType","firstChild","pos","hasRange","createRange","setStart","setEnd","collapse","removeAllRanges","addRange","prevent","preventDefault","stopPropagation","getDataTransfer","getData","onBeforeInput","tag","tagName","inputType","onKeyDown","metaKey","undoManager","undo","shiftKey","redo","hotkeys","operation","isHotkey","defaultHotkeys","bold","italic","underline","code","strikethrough","highlight","onDrop","files","onDragOver","createWSProvider","room","Promise","res","prod","process","env","NODE_ENV","provider","WebsocketProvider","connect","on","status"],"mappings":"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"}
@@ -1,2 +1,69 @@
1
1
  import { Editor } from "../types";
2
2
  export declare const onKeyDown: (editor: Editor, e: KeyboardEvent) => any;
3
+ export declare const defaultHotkeys: ({
4
+ operation: string;
5
+ keys: string;
6
+ mark: {
7
+ bold: boolean;
8
+ italic?: undefined;
9
+ underline?: undefined;
10
+ code?: undefined;
11
+ strikethrough?: undefined;
12
+ highlight?: undefined;
13
+ };
14
+ } | {
15
+ operation: string;
16
+ keys: string;
17
+ mark: {
18
+ italic: boolean;
19
+ bold?: undefined;
20
+ underline?: undefined;
21
+ code?: undefined;
22
+ strikethrough?: undefined;
23
+ highlight?: undefined;
24
+ };
25
+ } | {
26
+ operation: string;
27
+ keys: string;
28
+ mark: {
29
+ underline: boolean;
30
+ bold?: undefined;
31
+ italic?: undefined;
32
+ code?: undefined;
33
+ strikethrough?: undefined;
34
+ highlight?: undefined;
35
+ };
36
+ } | {
37
+ operation: string;
38
+ keys: string;
39
+ mark: {
40
+ code: boolean;
41
+ bold?: undefined;
42
+ italic?: undefined;
43
+ underline?: undefined;
44
+ strikethrough?: undefined;
45
+ highlight?: undefined;
46
+ };
47
+ } | {
48
+ operation: string;
49
+ keys: string;
50
+ mark: {
51
+ strikethrough: boolean;
52
+ bold?: undefined;
53
+ italic?: undefined;
54
+ underline?: undefined;
55
+ code?: undefined;
56
+ highlight?: undefined;
57
+ };
58
+ } | {
59
+ operation: string;
60
+ keys: string;
61
+ mark: {
62
+ highlight: boolean;
63
+ bold?: undefined;
64
+ italic?: undefined;
65
+ underline?: undefined;
66
+ code?: undefined;
67
+ strikethrough?: undefined;
68
+ };
69
+ })[];