edytor 0.0.7 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +225 -5
- package/dist/block/block.svelte.d.ts +123 -0
- package/dist/block/block.svelte.js +430 -0
- package/dist/block/block.utils.d.ts +82 -0
- package/dist/block/block.utils.js +499 -0
- package/dist/block/content.svelte.d.ts +14 -0
- package/dist/block/content.svelte.js +40 -0
- package/dist/block/inlineBlock.svelte.d.ts +30 -0
- package/dist/block/inlineBlock.svelte.js +53 -0
- package/dist/components/Block.svelte +27 -0
- package/dist/components/Block.svelte.d.ts +7 -0
- package/dist/components/Content.svelte +44 -0
- package/dist/components/Content.svelte.d.ts +7 -0
- package/dist/components/Edytor.svelte +165 -0
- package/dist/components/Edytor.svelte.d.ts +33 -0
- package/dist/components/InlineBlock.svelte +17 -0
- package/dist/components/InlineBlock.svelte.d.ts +7 -0
- package/dist/components/Mark.svelte +38 -0
- package/dist/components/Mark.svelte.d.ts +11 -0
- package/dist/components/ReadonlyEditor.svelte +46 -0
- package/dist/components/ReadonlyEditor.svelte.d.ts +4 -0
- package/dist/components/Text.svelte +37 -0
- package/dist/components/Text.svelte.d.ts +7 -0
- package/dist/components/readonlyElements.svelte.d.ts +82 -0
- package/dist/components/readonlyElements.svelte.js +144 -0
- package/dist/constants.d.ts +4 -0
- package/dist/constants.js +4 -0
- package/dist/dnd.svelte.d.ts +17 -0
- package/dist/dnd.svelte.js +125 -0
- package/dist/edytor.svelte.d.ts +94 -0
- package/dist/edytor.svelte.js +262 -0
- package/dist/edytor.utils.d.ts +3 -0
- package/dist/edytor.utils.js +78 -0
- package/dist/events/onBeforeInput.d.ts +2 -2
- package/dist/events/onBeforeInput.js +338 -0
- package/dist/events/onKeyDown.d.ts +2 -69
- package/dist/events/onKeyDown.js +18 -0
- package/dist/hotkeys.d.ts +27 -0
- package/dist/hotkeys.js +282 -0
- package/dist/index.d.ts +7 -5
- package/dist/index.js +7 -8
- package/dist/localProvider.d.ts +82 -0
- package/dist/localProvider.js +267 -0
- package/dist/plugins/arrowMove/arrowMove.d.ts +2 -0
- package/dist/plugins/arrowMove/arrowMove.js +66 -0
- package/dist/plugins/code/CodePlugin.svelte +218 -0
- package/dist/plugins/code/CodePlugin.svelte.d.ts +23 -0
- package/dist/plugins/code/prism.css +141 -0
- package/dist/plugins/image/ImagePlugin.svelte +22 -0
- package/dist/plugins/image/ImagePlugin.svelte.d.ts +20 -0
- package/dist/plugins/index.d.ts +3 -0
- package/dist/plugins/index.js +3 -0
- package/dist/plugins/mention/MentionPlugin.svelte +40 -0
- package/dist/plugins/mention/MentionPlugin.svelte.d.ts +20 -0
- package/dist/plugins/richtext/RichTextPlugin.svelte +241 -0
- package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +26 -0
- package/dist/plugins.d.ts +202 -0
- package/dist/plugins.js +19 -0
- package/dist/selection/selection.svelte.d.ts +68 -0
- package/dist/selection/selection.svelte.js +391 -0
- package/dist/selection/selection.utils.d.ts +14 -0
- package/dist/selection/selection.utils.js +153 -0
- package/dist/text/deltas.d.ts +11 -0
- package/dist/text/deltas.js +109 -0
- package/dist/text/text.svelte.d.ts +70 -0
- package/dist/text/text.svelte.js +119 -0
- package/dist/text/text.utils.d.ts +40 -0
- package/dist/text/text.utils.js +174 -0
- package/dist/utils/json.d.ts +32 -0
- package/dist/utils/json.js +2 -0
- package/dist/utils/jsx.d.ts +25 -0
- package/dist/utils/jsx.js +66 -0
- package/dist/utils/serialize.d.ts +1 -0
- package/dist/utils/serialize.js +1 -0
- package/dist/utils.d.ts +6 -0
- package/dist/utils.js +19 -0
- package/package.json +81 -33
- package/dist/edytor.cjs.development.js +0 -1762
- package/dist/edytor.cjs.development.js.map +0 -1
- package/dist/edytor.cjs.production.min.js +0 -2
- package/dist/edytor.cjs.production.min.js.map +0 -1
- package/dist/edytor.esm.js +0 -1691
- package/dist/edytor.esm.js.map +0 -1
- package/dist/events/index.d.ts +0 -3
- package/dist/events/onDrop.d.ts +0 -3
- package/dist/operations/deleteText.d.ts +0 -7
- package/dist/operations/formatText.d.ts +0 -20
- package/dist/operations/index.d.ts +0 -9
- package/dist/operations/insertText.d.ts +0 -5
- package/dist/operations/merge.d.ts +0 -3
- package/dist/operations/moveNode.d.ts +0 -12
- package/dist/operations/nestNode.d.ts +0 -2
- package/dist/operations/removeEmptyText.d.ts +0 -2
- package/dist/operations/splitLeaf.d.ts +0 -2
- package/dist/operations/splitNode.d.ts +0 -9
- package/dist/types.d.ts +0 -140
- package/dist/utils/common.d.ts +0 -17
- package/dist/utils/dropper.d.ts +0 -26
- package/dist/utils/index.d.ts +0 -6
- package/dist/utils/leaves.d.ts +0 -34
- package/dist/utils/nodes.d.ts +0 -14
- package/dist/utils/selection.d.ts +0 -51
- package/dist/utils/yClasses/EdytorDoc.d.ts +0 -16
- package/dist/utils/yClasses/index.d.ts +0 -3
- package/dist/utils/yClasses/yLeaf.d.ts +0 -7
- package/dist/utils/yClasses/yNode.d.ts +0 -12
- package/dist/yjs/index.d.ts +0 -1
- package/dist/yjs/wsProvider.d.ts +0 -1
- package/index.ts +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"edytor.cjs.development.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 getPath,\n leafLength,\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 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 // 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 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 // merge with previous node if we are not nested\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 previous leaf because we are at its edge start\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) => copyNode(from.container.get(index)));\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 { createLeaf, 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 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 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","provider","WebsocketProvider","connect","on","status"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("yjs"),n=require("nanoid"),o=(e=require("is-hotkey"))&&"object"==typeof e&&"default"in e?e.default:e,r=require("y-websocket");function a(){return(a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e}).apply(this,arguments)}function i(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,(Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function s(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)t.indexOf(n=a[o])>=0||(r[n]=e[n]);return r}var f=["id","text","data"],l=function(e){var n=new t.Map;if(n.set("id",(null==e?void 0:e.id)||R()),n.set("text",new t.Text((null==e?void 0:e.text)||"")),e){var o=e.text,r=e.data,a=s(e,f);n.set("text",new t.Text(o||"")),r&&n.set("data",new t.Map(Object.entries(r))),a&&Object.keys(a).forEach((function(e){n.set(e,a[e])}))}return n},d=function(e,n){var o=new t.Map;return o.set("id",(null==n?void 0:n.id)||R()),o.set("type",e),null!=n&&n.data&&o.set("data",new t.Map(Object.entries(n.data))),o.set("content",(null==n?void 0:n.content)instanceof t.Array?n.content:t.Array.from((null==n?void 0:n.content)||[l()])),o.set("children",(null==n?void 0:n.children)instanceof t.Array?n.children:t.Array.from((null==n?void 0:n.children)||[])),o},c=function(e){function t(){return e.apply(this,arguments)||this}return i(t,e),t}(t.Map),u=["type","content","children"],p=function e(t){var n=t.type,o=t.content,r=void 0===o?[]:o,i=t.children,f=void 0===i?[]:i,c=s(t,u);return d(n,a({},c,{children:f.map(e),content:r.map(l)}))},g=function(e){function t(){return e.apply(this,arguments)||this}return i(t,e),t}(t.Doc),h=function(e,t){var n=t.mode,o=t.selection||e.selection,r=o.start,a=o.end,i=o.length,s=o.edges,f=o.setPosition;switch(o.type){case"collapsed":if("backward"===n&&s.startNode){if(s.startDocument)return;if(r.nodeIndex===r.node.parent.length-1&&r.path.length>2&&(0!==r.nodeIndex||1===r.node.parent.length)){var d=_(r.node),c=r.node.parent.parent,u=F(c);return r.node.parent.delete(r.nodeIndex),c.parent.insert(u+1,[d]),f(r.leafId,{offset:0})}return e.doc.transact((function(){var t=D(e),n=t[0],o=t[1];setTimeout((function(){f(n.get("id"),{offset:o})}))}))}if("backward"===n&&s.startLeaf){var p=oe(r.leaf).get(r.leafIndex-1);return Q(p,z(p)-1,i||1),f(p.get("id"),{offset:z(p)})}if("forward"===n&&s.endNode)return e.doc.transact((function(){j(e),setTimeout((function(){f(r.leafId,{offset:r.offset})}))}));if("forward"===n&&s.endLeaf){var g=oe(r.leaf).get(r.leafIndex+1);return Q(g,0,i||1)}Q(r.leaf,r.offset+("backward"===n?-i||-1:i),i||1),f(r.leaf.get("id"),{offset:r.offset+("backward"===n?-i||-1:i)});break;case"singlenode":Q(r.leaf,r.offset,i,!0),B(r.node)&&oe(r.leaf).insert(0,[l()]),f(r.leafId,{offset:r.offset});break;case"multileaves":case"multinodes":var h=r.path.join(","),v=a.path.join(",");e.doc.transact((function(){var t=new K,n=t.reap,o=t.burn;return W(e,(function(e,t){if(t){var o=q(e),i=z(e);o.join(",")===h?(Q(e,r.offset,i),n(e,!1)):o>r.path&&o<a.path?(Q(e,0,i),n(e,!0)):o.join(",")===v&&(Q(e,0,a.offset),n(e,a.offset===i))}}),{start:r.path[0],end:a.path[0]+1}),o(e)})),f(r.leaf.get("id"),{offset:r.offset})}},v=function(e,t){Array.from(e.keys(),(function(n){"text"!==n&&"id"!==n&&"data"!==n&&t.forEach((function(t){t.set(n,e.get(n))}))}))},m=function(e){var t=e.format,n=e.value,o=e.start,r=e.end,i=r.offset-o.offset,s=o.leaf,f=X(s).toString(),d=F(s),c=s.has(t);if(c&&z(s)===i)return s.delete(t),s;var u,p=f.substring(r.offset,z(s));if(0==p.length&&z(s)===r.offset-o.offset)return s.set(t,n),s;Q(s,o.offset,z(s));var g=l(a({},s.toJSON(),((u={id:void 0})[t]=n,u.text=f.substring(o.offset,r.offset),u))),h=[g];return p.length>0&&h.push(l(a({},s.toJSON(),{id:void 0,text:p}))),c&&g.delete(t),h.length&&oe(s).insert(d+1,h),g},x=function(e,t){var n=Object.entries(t)[0],o=n[0],r=n[1];console.log(o);var a=e.selection,i=a.start,s=a.end,f=a.type,d=a.length,c=a.setPosition,u=a.selectedText;return e.doc.transact((function(){switch(f){case"collapsed":var t=i.leaf.has(o)&&i.leaf.get(o)===r;if(G(i.leaf))t?i.leaf.delete(o):i.leaf.set(o,r);else{var n;N(e);var a=l(((n={text:""})[o]=r,n));v(i.leaf,[a]),t&&a.delete(o),oe(i.leaf).insert(i.leafIndex+1,[a]),G(i.leaf)&&oe(i.leaf).delete(i.leafIndex),setTimeout((function(){c(a.get("id"),{offset:0}),console.log(oe(i.leaf).toJSON())}))}k(oe(i.leaf));break;case"singlenode":var p=m({format:o,value:r,start:i,end:s,length:d});if(k(oe(i.leaf)),p._item.deleted){var g=p.parent.get(i.leafIndex-1),h=X(g).toJSON().indexOf(u);setTimeout((function(){c(g.get("id"),{offset:h,end:h+u.length})}))}else c(i.leaf.get("id"),{offset:i.offset}),setTimeout((function(){c(p.get("id"),{offset:0,end:z(p)})}));break;case"multileaves":case"multinodes":var x=i.path.join(","),y=s.path.join(","),b=!1,w=!1;W(e,(function(e,t){if(t){var n=q(e),a=n.join(",")===x,f=n.join(",")===q(s.leaf).join(",");console.log({isEnd:f},y,q(s.leaf).join(","),n.join(",")),a&&(b=!0);var l=a?i.offset:0,d=f?s.offset:z(e);b&&!w&&m({format:o,start:{leaf:e,offset:l},end:{offset:d},value:r}),console.log({ended:w}),f&&(w=!0),k(oe(e))}}),{start:i.path[0],end:s.path[0]+1})}})),0},y=function(e,t){var n=t.text;if(n&&null!==n&&n.length){var o=e.selection,r=o.start,a=o.end,i=o.type,s=o.length,f=o.setPosition;if("notInDoc"===i)return console.error("Path is not in document space");switch(i){case"collapsed":V(r.leaf,r.offset,n),f(r.leaf.get("id"),{offset:r.offset+n.length});break;case"singlenode":Z(r.leaf,r.offset,s,n),f(r.leaf.get("id"),{offset:r.offset+n.length});break;case"multileaves":case"multinodes":var l=r.path.join(","),d=a.path.join(",");e.doc.transact((function(){var t=new K,o=t.reap,i=t.burn;W(e,(function(e,t){if(t){var i=q(e);i.join(",")===l?(Z(e,r.offset,z(e),n),o(e)):i>r.path&&i<a.path?(Q(e,0,z(e)),o(e)):i.join(",")===d&&(Q(e,0,a.offset),o(e))}}),{start:r.path[0],end:a.path[0]+1}),i(e)})),f(r.leaf.get("id"),{offset:r.offset+n.length})}}},b=function(e){var t=e.map((function(e){return Array.from(e.keys())})).flat();return e.every((function(e){return t.every((function(t){return e.has(t)}))}))},k=function(e){var t=e.get(0),n=[];e.forEach((function(o,r){var a=e.get(r+1);if(a)if(b([t,a])){var i=t.get("text");t.get("text").insert(i.length,a.get("text").toString()),n.push(a)}else t=a})),n.forEach((function(t){e.delete(F(t))}))},N=function(e){var t=e.selection.start,n=t.leaf,o=t.leafIndex,r=t.offset,i=U(n),s=i.substring(r,i.length);r!==i.length&&(Q(n,r,s.length),oe(n).insert(o+1,[l(a({},n.toJSON(),{text:s,id:void 0}))]))},w=function(e){var t=e.selection,n=t.start,o=t.type,r=t.setPosition,i=t.edges,s=n.leaf,f=oe(n.leaf),c=te(n.leaf),u=F(n.leaf),p=F(c),g=function(){var t=f.toArray().filter((function(e,t){return t>u})),o=U(n.leaf).substring(null==n?void 0:n.offset,z(n.leaf));Q(n.leaf,null==n?void 0:n.offset,o.length,!1);var i=P(c)?A(c):c.parent,g=l(a({},s.toJSON(),{id:void 0,text:o}));i.insert(P(c)?0:p+1,[d(e.defaultBlock,{children:[],content:[g].concat(t.map((function(e){return l(e.toJSON())})))})]),r(g.get("id"),{offset:0}),f.delete(u+1,re(n.leaf)-u-1)},v=!(i.startNode&&i.endNode||"multinodes"===o);if((i.endNode||i.startNode)&&"collapsed"===o){var m=d(e.defaultBlock);return c.parent.insert(p+(i.endNode?1:0),[m]),setTimeout((function(){r(m.get("content").get(0).get("id"),{offset:0})}))}switch(o){case"collapsed":v&&g();break;case"singlenode":h(e,{mode:"backward"}),v&&g(),!v&&r(n.leaf.get("id"),{offset:n.offset});break;case"multileaves":case"multinodes":h(e,{mode:"backward"}),v&&g(),!v&&r(n.leaf.get("id"),{offset:n.offset})}},T=function(e){var t=e.selection,n=t.start,o=t.type,r=t.end,a=t.setPosition,i=M(n.leaf),s=_(i),f=q(i),l=f.slice().reverse(),d=l[0],c=l.slice(1),u=H(e,[].concat(c,[d-1])),p=L(i);switch(o){case"singlenode":case"collapsed":if(!u)return;var g=n.leaf.get("id"),h=u.get("children");p.delete(d),h.insert(h.length,[s]),a(g,{offset:n.offset});break;case"multileaves":case"multinodes":var v=0,m=[],x=n.leaf.get("id"),y=n.path.slice(0,n.path.length-1).join(""),b=r.path.slice(0,n.path.length-1).join("");if(W(e,(function(e,t){if(!t){var n=q(e).join("");n.length===f.length&&n<=b&&n>=y&&(v++,m.push(_(e)))}}),{start:n.path[0],end:r.path[0]+1}),!u)return;var k=u.get("children");p.delete(d,v),k.insert(k.length,m),a(x,{offset:n.offset})}},E=function(e){var t=e.from,n=e.to,o=Array.isArray(t.at)?t.at:[t.at],r=t.container.get(o[0]),a=o.map((function(e){return _(t.container.get(e))}));return n.container.insert(n.at,a),t.container.delete(F(r),o.length),a[0].get("content").get(0).get("id")},I=["type"],D=function(e){var t,n=e.selection.start,o=!1;if(W(e,(function(e,r){r&&(e===n.leaf?o=!0:o||(t=e))})),t){var r=z(t);oe(t).insert(re(t),oe(n.leaf).toArray().map((function(e){return l(e.toJSON())}))),k(oe(t));var a=n.node.get("children").toArray().map(_);return a.length&&n.node.parent.insert(n.nodeIndex,a),n.node.parent.delete(n.nodeIndex+a.length),[t,r]}},j=function(e){var t,n=e.selection.start,o=!1;if(W(e,(function(e,r){r&&(e===n.leaf?o=!0:o&&(t=e,o=!1))})),t){oe(n.leaf).insert(re(n.leaf),oe(t).toArray().map((function(e){return l(e.toJSON())}))),k(oe(n.leaf));var r=M(t),a=F(r),i=r.parent,s=r.get("children").toArray();return s.length>0&&i.insert(a,s.map(_)),i.delete(a+s.length),t}},O=function(e,t){if(C(e))e.parent.delete(F(e));else if(B(e)){var n=A(e).toJSON(),o=F(e);e.parent.delete(o),e.parent.insert(o,n.map((function(e){var t=e.type,n=s(e,I);return d(t,n)})))}e.parent===(e.doc.getArray("children")&&0===e.doc.getArray("children").length)&&e.parent.insert(0,[d(t,{content:[l()]})])},L=function(e){return e.parent},A=function(e){return e.get("children")},S=function(e){return e.get("content")},P=function(e){return A(e).length>0},C=function(e){return B(e)&&!P(e)},B=function(e){return 0===S(e).length||0===S(e).toArray().map(U).join("").length},_=function(e){var t=e.toJSON();return d(t.type,a({},t,{children:t.children.map(p),content:t.content.map(l)}))},J=function e(t){var n="";return S(t).forEach((function(e){n+=U(e)})),A(t).forEach((function(t){n+=e(t)})),n},R=function(){return"y-"+n.customAlphabet("346789ABCDEFGHJKLMNPQRTUV-WXYabcdefghijkmnpqrtwxyz",20)()},M=function(e){var t;return null==e||null==(t=e.parent)?void 0:t.parent},F=function(e){for(var t=0,n=!1,o=e.parent._start;null!==o&&!n;){if(o.countable&&!o.deleted)for(var r=o.content.getContent(),a=0;a<r.length;a++){if(r[a]===e){n=!0;break}t++}o=o.right}return t},q=function(e){for(var t=[],n=e;n;)t.push(F(n)),n=M(n);return t.reverse()},H=function(e,t){for(var n=t[0],o=t.slice(1),r=e.children.get(n),a=0;a<o.length;a++){var i=o[a];r=r.get?r.get("children").get(i):void 0}return r},W=function(e,t,n){for(var o=function e(n,o){if(n.has("text"))t(n,!0,o);else{var r=S(n).toArray().concat(A(n).toArray());t(n,!1,o);for(var a=0;a<r.length;a++)e(r[a],[].concat(o.slice(0,o.length-1),[0,a]))}},r=e.children.toArray().slice((null==n?void 0:n.start)||0,(null==n?void 0:n.end)||e.children.length),a=0;a<r.length;a++)o(r[a],[a+((null==n?void 0:n.start)||0)])},K=function(){var e=this;this.reap=function(t,n){if(void 0===n&&(n=!1),G(t)){var o=ne(t);e.leaves[o]||(e.leaves[o]={shouldDeleteNode:n,content:oe(t),node:te(t),indexes:[]}),e.leaves[o].indexes.push(F(t))}},this.burn=function(t){Object.values(e.leaves).forEach((function(e,n){var o=e.shouldDeleteNode,r=e.content,a=e.node,i=e.indexes;if(r.delete(i[0],i.length),0!==r.length||o){if(o)return O(a,null==t?void 0:t.defaultBlock)}else r.insert(0,[l()])}))},this.leaves={}},Y=function(e){return e.get("data")},X=function(e){return e.get("text")},z=function(e){return X(e).length},U=function(e){return X(e).toString()},G=function(e){return void 0===X(e)||0===z(e)},Q=function(e,t,n,o){X(e).delete(t,n),o&&ee(e)},V=function(e,t,n){X(e).insert(t,n)},Z=function(e,t,n,o){var r=U(e).split("");return r.splice.apply(r,[t,n].concat(o.split(""))),$(e,r.join(""))},$=function(e,t){var n=X(e);n.delete(0,n.length),n.insert(0,t)},ee=function(e){G(e)&&(console.log("isEmpty",oe(e).toJSON()),oe(e).delete(F(e)))},te=function(e){return e.parent.parent},ne=function(e){return te(e).get("id")},oe=function(e){return e.parent},re=function(e){return oe(e).length},ae=function(e){return te(e).get("children")},ie=function(e){return e.dataTransfer.getData("text/plain")};exports.DocFromJson=function(e,n){var o=(n||new t.Doc).getArray("children");return o.insert(0,e.map(p)),o.doc},exports.Dropper=function(){var e=this;this.init=function(t,n){e.editor=t,e.doc=t.doc,e.container=n,e.editorId=t.editorId,e.selection=t.selection,e.ID_TO_NODE=t.ID_TO_NODE,e.allowNesting=t.allowNesting},this.startDrag=function(t,n){var o;if(e.editor.dnd.active){e.node=t,document.getElementById("dndIndicator").style.opacity="1";var r=document.getElementById(t.get("id"));r.style.opacity="0.4",document.body.style.cursor="grabbing",e.from={container:t.parent,at:F(t)},e.startPath=q(t),null==(o=n.dataTransfer)||o.setDragImage(r,n.offsetX,n.offsetY),document.addEventListener("mousemove",e.onDrag),document.addEventListener("mouseup",e.dragEnd)}},this.dragEnd=function(){var t=document.getElementById(e.node.get("id"));t&&(t.style.opacity="1"),document.body.style.cursor="auto",document.removeEventListener("mousemove",e.onDrag),document.removeEventListener("mouseup",e.dragEnd);var n=E({from:e.from,to:e.to});document.getElementById("dndIndicator").style.opacity="0",setTimeout((function(){e.selection.setPosition(n,{offset:0})}))},this.getHoveredNode=function(t){for(var n,o=t,r=0;!n&&(null==(a=o)?void 0:a.id)!==e.editorId&&o&&r<100;){var a;if(o.hasAttribute("data-edytor-block")){n=e.ID_TO_NODE.get(o.id);break}o=o.parentElement,r++}return n?{hoveredElement:o,hoveredNode:n}:{}},this.onDrag=function(t){if(e.editor.dnd.active){var n=e.getHoveredNode(t.target),o=n.hoveredElement,r=n.hoveredNode,a=document.getElementById("dndIndicator");if(r&&o&&a&&r!==e.node){var i=o.getBoundingClientRect(),s=t.y<i.top+i.height/2,f=i,l=e.allowNesting&&!s&&t.x>f.left+f.width/5,d=s?f.top:f.top+f.height,c=l?30:0,u=q(r),p=u.slice().reverse(),g=p[0],h=p.slice(1);e.startPath.join("")!==h.join("")&&(a.style.width=f.width-c+"px",a.style.top=d+window.pageYOffset+"px",a.style.left=f.left+c+"px",-1===(g+=s?0:1)&&(g=0),e.to={container:l?r.get("children"):1===u.length?e.editor.children:r.parent,at:l?0:g})}}}},exports.EdytorDoc=g,exports.EdytorSelection=function(){var e=this;this.init=function(t,n){e.container=n,e.editor=t,document.addEventListener("selectionchange",e.onSelection),e.container.addEventListener("focus",e.onFocus),e.container.addEventListener("blur",e.onBlur)},this.onFocus=function(){e.focused=!0,e.onChange()},this.onBlur=function(){e.focused=!1,e.onChange()},this.destroy=function(){document.removeEventListener("selectionchange",e.onSelection)},this.onSelection=function(t){var n;(null==(n=t.target)?void 0:n.activeElement)===e.container&&e.getRange()},this.observe=function(t){e.observers=e.observers?e.observers.concat(t):[t]},this.unobserve=function(t){e.observers=e.observers?e.observers.filter((function(e){return e!==t})):[]},this.getLeaf=function(t,n){if(e[n]&&e[n].node===t)return e[n].value;for(var o,r=t;!o&&r!==e.container&&r;)(o=e.editor.ID_TO_NODE.get(r.id))||(r=r.parentElement);if(!o)return[void 0,void 0,void 0,void 0];var a=[o,te(o),q(o),r];return e[n]={value:a,node:t},a},this.getNodeBoundingRect=function(t){return{nodeHtml:e.container.querySelector("#"+t.get("id"))}},this.getRange=function(){var t=window.getSelection(),n=t.focusNode,o=t.anchorOffset,r=t.focusOffset,i=t.isCollapsed,s=t.rangeCount;if(null!==n){var f=e.getLeaf(t.anchorNode,"anchorNode"),l=f[0],d=f[1],c=f[2],u=f[3],p=e.getLeaf(n,"focusNode"),g=p[0],h=p[1],v=p[2],m=p[3];if(l){var x=c.join("")===v.join(""),y=x?o<r:c.join()<v.join(),b=s>=1?null==t?void 0:t.getRangeAt(0):void 0;e.start=a({},e.getNodeBoundingRect(y?d:h),{node:y?d:h,leafId:(y?l:g).get("id"),leafIndex:y?c[c.length-1]:v[v.length-1],nodeIndex:y?c[c.length-2]:v[v.length-2],path:y?c:v,leafHtml:y?u:m,offset:y?o:r,leaf:y?l:g}),e.end=i||null===h?e.start:a({},e.getNodeBoundingRect(y?h:d),{node:y?h:d,leafId:(y?g:l).get("id"),leafIndex:y?v[v.length-1]:c[c.length-1],nodeIndex:y?v[v.length-2]:c[c.length-2],path:y?v:c,leafHtml:y?m:u,offset:y?r:o,leaf:y?g:l}),e.selectedText=b?b.toString():"",e.arePathsEquals=x,e.length=e.selectedText.length,e.range=b,e.selection=t;var k=0===e.start.offset&&0===F(e.start.leaf),N=e.end.offset===z(e.end.leaf)&&F(e.start.leaf)===re(e.end.leaf)-1;e.edges={startLeaf:0===e.start.offset,endLeaf:e.end.offset===z(e.end.leaf),startNode:k,endNode:N,startDocument:k&&"00"===e.start.path.join(""),endDocument:!1},e.type=i?"collapsed":x?"singlenode":e.start.node===e.end.node?"multileaves":"multinodes",e.onChange()}}},this.onChange=function(){e.observers.forEach((function(t){return t(e)}))},this.setPosition=function(t,n){var o,r,i,s,f=n.offset,l=n.delta,d=n.end,c=e.container.querySelector("#"+t);for(console.log({node:c});c&&3!==c.nodeType&&null!=(u=c)&&u.firstChild;){var u;c=c.firstChild}var p=f||(null==(o=e.start)?void 0:o.offset)+l;e.range||e.selection||(e.range=document.createRange(),e.selection=window.getSelection()),e.range.setStart(c,p),d?e.range.setEnd(c,d):e.range.collapse(!0),null==(r=e.selection)||r.removeAllRanges(),null==(i=e.selection)||i.addRange(e.range),e.start=a({},e.start,{leafHtml:e.container.querySelector("#"+t),offset:f||(null==(s=e.start)?void 0:s.offset)+l})},this.observers=[]},exports.LeavesHarvest=K,exports.YNode=c,exports.applyMarksFromParent=v,exports.areLeafsMergeable=b,exports.copyNode=_,exports.createLeaf=l,exports.createNode=d,exports.createWSProvider=function(e){return new Promise((function(n){var o=new t.Doc;console.log("production");var a=new r.WebsocketProvider("wss://edytor-production.up.railway.app",e||"edytor",o,{connect:!0});a.on("status",(function(e){if("connected"===e.status)return n(a)}))}))},exports.defaultHotkeys=[{operation:"formatText",keys:"mod+b",mark:{bold:!0}},{operation:"formatText",keys:"mod+i",mark:{italic:!0}},{operation:"formatText",keys:"mod+u",mark:{underline:!0}},{operation:"formatText",keys:"mod+shift+c",mark:{code:!0}},{operation:"formatText",keys:"mod+shift+x",mark:{strikethrough:!0}},{operation:"formatText",keys:"mod+shift+h",mark:{highlight:!0}}],exports.deleteLeafText=Q,exports.deleteNode=O,exports.deleteText=h,exports.formatAtEqualPath=m,exports.formatText=x,exports.getChildren=p,exports.getContainerAtPath=function(e,t){return 1===t.length?e.children:H(e,t.slice(1,t.length)).get("children")},exports.getId=function(e){return e.get("id")},exports.getIndex=F,exports.getLeafAtPath=function(e,t){for(var n=t[0],o=t.slice(1),r=e.children.get(n),a=0;a<o.length-1;){var i=o[a];a++,r=r.get("children").get(i)}return r&&r.get("content").get(o.slice().reverse()[0])},exports.getNode=M,exports.getNodeAtPath=H,exports.getNodeChildren=A,exports.getNodeContainer=L,exports.getNodeContent=S,exports.getPath=q,exports.hasChildren=P,exports.insertText=y,exports.insertTextInLeaf=V,exports.isLeafEmpty=G,exports.isNodeContentEmpty=B,exports.isNodeEmpty=C,exports.leafData=Y,exports.leafLength=z,exports.leafNode=te,exports.leafNodeChildren=ae,exports.leafNodeChildrenLength=function(e){return ae(e).length},exports.leafNodeContent=oe,exports.leafNodeContentLength=re,exports.leafNodeContentStringLength=function(e){return oe(e).toArray().reduce((function(e,t){return e+z(t)}),0)},exports.leafNodeId=ne,exports.leafString=U,exports.leafText=X,exports.mergeContentWithNextLeaf=j,exports.mergeContentWithPrevLeaf=D,exports.mergeLeafs=k,exports.moveNode=E,exports.nanoid=R,exports.nestNode=T,exports.nodeString=J,exports.onBeforeInput=function(e,t){var n,o=e[1],r=e[2],a=r.selection,i=a.start,s=a.length,f=a.setPosition,l=null==(n=t.target)?void 0:n.tagName;if("TEXTAREA"!==l&&"INPUT"!==l){switch(function(e){e.preventDefault(),e.stopPropagation()}(t),t.inputType){case"insertFromPaste":case"insertLineBreak":case"insertText":var d="insertLineBreak"===t.inputType?"\n":"insertFromPaste"===t.inputType?ie(t):t.data;y(r,{text:d});break;case"deleteContentBackward":h(r,{mode:"backward"});break;case"deleteByDrag":case"deleteByCut":case"deleteContentForward":h(r,{mode:"forward"});break;case"insertParagraph":w(r);break;case"insertFromDrop":setTimeout((function(){var e=ie(t);e&&y(r,{text:e})}),50);break;case"deleteSoftLineBackward":case"deleteWordForward":case"insertFromYank":case"formatSetBlockTextDirection":case"formatSetInlineTextDirection":case"deleteWordBackward":case"insertCompositionText":break;case"formatItalic":case"formatBold":break;case"insertReplacementText":Z(i.leaf,i.offset,s,ie(t)),f(i.leafId,{offset:i.offset})}o&&o(r)}},exports.onDragOver=function(e,t){var n,o;t.preventDefault(),(null==(n=t.dataTransfer)?void 0:n.files.length)>0&&(t.preventDefault(),console.log(null==(o=t.dataTransfer)?void 0:o.files))},exports.onDrop=function(e,t){var n,o;(null==(n=t.dataTransfer)?void 0:n.files.length)>0&&(t.preventDefault(),console.log(null==(o=t.dataTransfer)?void 0:o.files))},exports.onKeyDown=function(e,t){if("Tab"===t.key&&(t.preventDefault(),e.allowNesting&&T(e)),t.metaKey){if("z"===t.key&&t.metaKey)return t.preventDefault(),e.undoManager.undo();if("Z"===t.key&&t.metaKey&&t.shiftKey)return t.preventDefault(),e.undoManager.redo();if(e.hotkeys)for(var n=0;n<e.hotkeys.length;n++){var r=e.hotkeys[n],a=r.operation,i=r.mark;if(o(r.keys,t)){if(t.preventDefault(),t.stopPropagation(),"function"==typeof a)return a(e);switch(a){case"formatText":return x(e,i)}break}}}},exports.removeEmptyText=function(e){var t,n,o=null==e||null==(t=e.parent)?void 0:t.parent,r=function(e,t){return null==e?void 0:e.toArray().indexOf(t)};for(null==(n=o)||n.delete(r(o,e.parent));o&&0===o.length;){var a=o.parent,i=a.parent;if(i){var s=r(i,a);-1!==s&&i.delete(s),o=i}else o=void 0}},exports.removeIfEmpty=ee,exports.replaceLeafText=Z,exports.setLeafData=function(e,t){e.has("data")?Object.keys(t).forEach((function(n){Y(e).set(n,t[n])})):e.set("data",new Map(Object.entries(t)))},exports.setLeafText=$,exports.splitLeaf=N,exports.splitNode=w,exports.toString=function(e){for(var t="",n=e.children.toArray(),o=0;o<n.length;o++)t+=J(n[o]);return t},exports.traverse=W;
|
|
2
|
-
//# sourceMappingURL=edytor.cjs.production.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"edytor.cjs.production.min.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/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/events/onBeforeInput.ts","../src/utils/dropper.ts","../src/utils/selection.ts","../src/yjs/wsProvider.ts","../src/events/onKeyDown.ts","../src/events/onDrop.ts","../src/operations/removeEmptyText.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 getPath,\n leafLength,\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 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 // 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 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 // merge with previous node if we are not nested\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 previous leaf because we are at its edge start\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 { 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) => copyNode(from.container.get(index)));\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 { createLeaf, 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 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 { 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 { 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 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 { 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","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 { 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"],"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","deleteText","editor","mode","selection","start","end","length","edges","setPosition","startNode","startDocument","nodeIndex","parent","path","copyNode","nodeGrandParent","index","getIndex","insert","leafId","offset","doc","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","value","leafText","toString","isMarkActive","has","remainingText","substring","formatedLeaf","toJSON","undefined","newLeaves","push","formatText","console","log","selectedText","isLeafEmpty","splitLeaf","fragment","mergeLeafs","_item","deleted","remainingLeaf","indexOf","started","ended","isStart","isEnd","startOffset","endOffset","insertText","error","insertTextInLeaf","replaceLeafText","areLeafsMergeable","nodes","flat","every","currentLeaf","leafsToDelete","_","i","firstText","leafString","rightText","splitNode","leafContent","leafNode","indexOfLeaf","indexOfNode","split","nextLeaves","toArray","filter","newParent","hasChildren","getNodeChildren","newLeaf","defaultBlock","concat","leafNodeContentLength","doSplit","newNode","nestNode","getNode","nodeCopy","startPath","slice","reverse","newPath","prevNode","getNodeAtPath","startContainer","getNodeContainer","prevChildren","newNodes","moveNode","to","indexes","isArray","at","firstNode","container","nodesCopies","stop","prevLeafLength","deleteNode","isNodeEmpty","getArray","getNodeContent","jsonNode","nodeString","customAlphabet","_node$parent","n","_start","countable","c","getContent","right","p","cb","opts","t","array","shouldDeleteNode","leafNodeId","_this","leaves","values","leafData","shouldRemoveIfEmpty","removeIfEmpty","currentText","splice","setLeafText","leafNodeChildren","getDataTransfer","e","dataTransfer","getData","initialDoc","editorId","ID_TO_NODE","allowNesting","dnd","active","document","getElementById","style","opacity","element","body","cursor","setDragImage","offsetX","offsetY","addEventListener","onDrag","dragEnd","removeEventListener","target","hoveredNode","hasAttribute","parentElement","hoveredElement","getHoveredNode","dndIndicator","rectHovered","getBoundingClientRect","isOnTop","y","top","height","rect","isNested","x","left","width","deltaX","startOfPath","window","pageYOffset","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","_node","firstChild","pos","createRange","setStart","setEnd","collapse","removeAllRanges","addRange","room","Promise","res","process","provider","WebsocketProvider","connect","on","status","operation","bold","italic","underline","code","strikethrough","highlight","reduce","acc","tag","_e$target","tagName","preventDefault","stopPropagation","prevent","inputType","files","_e$dataTransfer4","_e$dataTransfer2","metaKey","undoManager","undo","shiftKey","redo","hotkeys","isHotkey","yText","_yText$parent","pop","pop_pop"],"mappings":"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"}
|