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