@witchcraft/editor 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (593) hide show
  1. package/@types/@tiptap/core/index.d.ts +3 -0
  2. package/README.md +111 -0
  3. package/dist/module.d.mts +15 -0
  4. package/dist/module.json +9 -0
  5. package/dist/module.mjs +68 -0
  6. package/dist/runtime/assets/base.css +1 -0
  7. package/dist/runtime/assets/handle-arrow.svg +16 -0
  8. package/dist/runtime/assets/handle-border-circles-single.svg +44 -0
  9. package/dist/runtime/assets/handle-border-circles.svg +27 -0
  10. package/dist/runtime/assets/handle-temp.svg +1 -0
  11. package/dist/runtime/assets/utils.css +1 -0
  12. package/dist/runtime/components/CodeBlockThemePicker.d.vue.ts +12 -0
  13. package/dist/runtime/components/CodeBlockThemePicker.vue +123 -0
  14. package/dist/runtime/components/CodeBlockThemePicker.vue.d.ts +12 -0
  15. package/dist/runtime/components/Commands.d.vue.ts +10 -0
  16. package/dist/runtime/components/Commands.vue +60 -0
  17. package/dist/runtime/components/Commands.vue.d.ts +10 -0
  18. package/dist/runtime/components/Editor.d.vue.ts +40 -0
  19. package/dist/runtime/components/Editor.vue +208 -0
  20. package/dist/runtime/components/Editor.vue.d.ts +40 -0
  21. package/dist/runtime/components/EditorDemoApp.d.vue.ts +2 -0
  22. package/dist/runtime/components/EditorDemoApp.vue +104 -0
  23. package/dist/runtime/components/EditorDemoApp.vue.d.ts +2 -0
  24. package/dist/runtime/components/EditorDemoControls.d.vue.ts +12 -0
  25. package/dist/runtime/components/EditorDemoControls.vue +36 -0
  26. package/dist/runtime/components/EditorDemoControls.vue.d.ts +12 -0
  27. package/dist/runtime/components/TestWrapper.d.vue.ts +11 -0
  28. package/dist/runtime/components/TestWrapper.vue +63 -0
  29. package/dist/runtime/components/TestWrapper.vue.d.ts +11 -0
  30. package/dist/runtime/composables/useEditor.d.ts +9 -0
  31. package/dist/runtime/composables/useEditor.js +17 -0
  32. package/dist/runtime/composables/useWindowDebugging.d.ts +3 -0
  33. package/dist/runtime/composables/useWindowDebugging.js +16 -0
  34. package/dist/runtime/demo/App.d.vue.ts +2 -0
  35. package/dist/runtime/demo/App.vue +101 -0
  36. package/dist/runtime/demo/App.vue.d.ts +2 -0
  37. package/dist/runtime/demo/README.md +1 -0
  38. package/dist/runtime/demo/main.d.ts +1 -0
  39. package/dist/runtime/demo/main.js +4 -0
  40. package/dist/runtime/demo/tailwind.css +1 -0
  41. package/dist/runtime/env.d.ts +2 -0
  42. package/dist/runtime/injectionKeys.d.ts +6 -0
  43. package/dist/runtime/injectionKeys.js +3 -0
  44. package/dist/runtime/main.lib.d.ts +2 -0
  45. package/dist/runtime/main.lib.js +2 -0
  46. package/dist/runtime/pm/commands/backspace.d.ts +12 -0
  47. package/dist/runtime/pm/commands/backspace.js +26 -0
  48. package/dist/runtime/pm/commands/changeAttrs.d.ts +9 -0
  49. package/dist/runtime/pm/commands/changeAttrs.js +15 -0
  50. package/dist/runtime/pm/commands/deleteSelection.d.ts +9 -0
  51. package/dist/runtime/pm/commands/deleteSelection.js +8 -0
  52. package/dist/runtime/pm/commands/enter.d.ts +14 -0
  53. package/dist/runtime/pm/commands/enter.js +9 -0
  54. package/dist/runtime/pm/commands/insertBreak.d.ts +9 -0
  55. package/dist/runtime/pm/commands/insertBreak.js +22 -0
  56. package/dist/runtime/pm/features/Base/Base.d.ts +4 -0
  57. package/dist/runtime/pm/features/Base/Base.js +32 -0
  58. package/dist/runtime/pm/features/Base/commands/deleteNodes.d.ts +10 -0
  59. package/dist/runtime/pm/features/Base/commands/deleteNodes.js +29 -0
  60. package/dist/runtime/pm/features/Base/commands/setCursorVisible.d.ts +12 -0
  61. package/dist/runtime/pm/features/Base/commands/setCursorVisible.js +7 -0
  62. package/dist/runtime/pm/features/Base/plugins/debugSelectionPlugin.d.ts +9 -0
  63. package/dist/runtime/pm/features/Base/plugins/debugSelectionPlugin.js +48 -0
  64. package/dist/runtime/pm/features/Base/plugins/isCursorVisiblePlugin.d.ts +3 -0
  65. package/dist/runtime/pm/features/Base/plugins/isCursorVisiblePlugin.js +26 -0
  66. package/dist/runtime/pm/features/Base/plugins/isUsingTouchPlugin.d.ts +3 -0
  67. package/dist/runtime/pm/features/Base/plugins/isUsingTouchPlugin.js +38 -0
  68. package/dist/runtime/pm/features/Base/plugins/selectingIndicator.d.ts +5 -0
  69. package/dist/runtime/pm/features/Base/plugins/selectingIndicator.js +35 -0
  70. package/dist/runtime/pm/features/Base/plugins/unfocusedSelectionIndicatorPlugin.d.ts +33 -0
  71. package/dist/runtime/pm/features/Base/plugins/unfocusedSelectionIndicatorPlugin.js +66 -0
  72. package/dist/runtime/pm/features/Base/types.d.ts +3 -0
  73. package/dist/runtime/pm/features/Base/types.js +0 -0
  74. package/dist/runtime/pm/features/BaseShortcuts/BaseShortcuts.d.ts +3 -0
  75. package/dist/runtime/pm/features/BaseShortcuts/BaseShortcuts.js +34 -0
  76. package/dist/runtime/pm/features/Blockquote/Blockquote.d.ts +5 -0
  77. package/dist/runtime/pm/features/Blockquote/Blockquote.js +65 -0
  78. package/dist/runtime/pm/features/Blockquote/commands/blockquoteEnter.d.ts +11 -0
  79. package/dist/runtime/pm/features/Blockquote/commands/blockquoteEnter.js +31 -0
  80. package/dist/runtime/pm/features/Blockquote/commands/blockquoteShiftEnter.d.ts +11 -0
  81. package/dist/runtime/pm/features/Blockquote/commands/blockquoteShiftEnter.js +12 -0
  82. package/dist/runtime/pm/features/Blocks/Blocks.d.ts +2 -0
  83. package/dist/runtime/pm/features/Blocks/Blocks.js +2 -0
  84. package/dist/runtime/pm/features/Blocks/Item.d.ts +11 -0
  85. package/dist/runtime/pm/features/Blocks/Item.js +157 -0
  86. package/dist/runtime/pm/features/Blocks/List.d.ts +4 -0
  87. package/dist/runtime/pm/features/Blocks/List.js +59 -0
  88. package/dist/runtime/pm/features/Blocks/commands/changeItemType.d.ts +20 -0
  89. package/dist/runtime/pm/features/Blocks/commands/changeItemType.js +40 -0
  90. package/dist/runtime/pm/features/Blocks/commands/changeTypeAttr.d.ts +14 -0
  91. package/dist/runtime/pm/features/Blocks/commands/changeTypeAttr.js +28 -0
  92. package/dist/runtime/pm/features/Blocks/commands/copyOrMoveItem.d.ts +23 -0
  93. package/dist/runtime/pm/features/Blocks/commands/copyOrMoveItem.js +124 -0
  94. package/dist/runtime/pm/features/Blocks/commands/deleteItem.d.ts +12 -0
  95. package/dist/runtime/pm/features/Blocks/commands/deleteItem.js +8 -0
  96. package/dist/runtime/pm/features/Blocks/commands/indentItem.d.ts +12 -0
  97. package/dist/runtime/pm/features/Blocks/commands/indentItem.js +58 -0
  98. package/dist/runtime/pm/features/Blocks/commands/itemMenuCommands.d.ts +18 -0
  99. package/dist/runtime/pm/features/Blocks/commands/itemMenuCommands.js +40 -0
  100. package/dist/runtime/pm/features/Blocks/commands/moveItem.d.ts +12 -0
  101. package/dist/runtime/pm/features/Blocks/commands/moveItem.js +80 -0
  102. package/dist/runtime/pm/features/Blocks/commands/setNode.d.ts +20 -0
  103. package/dist/runtime/pm/features/Blocks/commands/setNode.js +87 -0
  104. package/dist/runtime/pm/features/Blocks/commands/splitItem.d.ts +17 -0
  105. package/dist/runtime/pm/features/Blocks/commands/splitItem.js +87 -0
  106. package/dist/runtime/pm/features/Blocks/commands/unindentItem.d.ts +12 -0
  107. package/dist/runtime/pm/features/Blocks/commands/unindentItem.js +42 -0
  108. package/dist/runtime/pm/features/Blocks/components/DragTreeHandle.d.vue.ts +0 -0
  109. package/dist/runtime/pm/features/Blocks/components/DragTreeHandle.vue +122 -0
  110. package/dist/runtime/pm/features/Blocks/components/DragTreeHandle.vue.d.ts +0 -0
  111. package/dist/runtime/pm/features/Blocks/components/ItemMenu.d.vue.ts +6 -0
  112. package/dist/runtime/pm/features/Blocks/components/ItemMenu.vue +78 -0
  113. package/dist/runtime/pm/features/Blocks/components/ItemMenu.vue.d.ts +6 -0
  114. package/dist/runtime/pm/features/Blocks/components/ItemNodeView.d.vue.ts +92 -0
  115. package/dist/runtime/pm/features/Blocks/components/ItemNodeView.vue +350 -0
  116. package/dist/runtime/pm/features/Blocks/components/ItemNodeView.vue.d.ts +92 -0
  117. package/dist/runtime/pm/features/Blocks/components/defaultItemMenu.d.ts +5 -0
  118. package/dist/runtime/pm/features/Blocks/components/defaultItemMenu.js +42 -0
  119. package/dist/runtime/pm/features/Blocks/composables/useDragWithThreshold.d.ts +1 -0
  120. package/dist/runtime/pm/features/Blocks/composables/useDragWithThreshold.js +0 -0
  121. package/dist/runtime/pm/features/Blocks/composables/useHandleHeight.d.ts +5 -0
  122. package/dist/runtime/pm/features/Blocks/composables/useHandleHeight.js +22 -0
  123. package/dist/runtime/pm/features/Blocks/composables/useHasChildren.d.ts +5 -0
  124. package/dist/runtime/pm/features/Blocks/composables/useHasChildren.js +10 -0
  125. package/dist/runtime/pm/features/Blocks/composables/useNodeStates.d.ts +7 -0
  126. package/dist/runtime/pm/features/Blocks/composables/useNodeStates.js +20 -0
  127. package/dist/runtime/pm/features/Blocks/itemMenuMenuItems.d.ts +20 -0
  128. package/dist/runtime/pm/features/Blocks/itemMenuMenuItems.js +138 -0
  129. package/dist/runtime/pm/features/Blocks/plugins/ensureLastItemIsContentPlugin.d.ts +11 -0
  130. package/dist/runtime/pm/features/Blocks/plugins/ensureLastItemIsContentPlugin.js +36 -0
  131. package/dist/runtime/pm/features/Blocks/plugins/itemBlockIdPlugin.d.ts +8 -0
  132. package/dist/runtime/pm/features/Blocks/plugins/itemBlockIdPlugin.js +30 -0
  133. package/dist/runtime/pm/features/Blocks/plugins/itemHasSingularSelectionPlugin.d.ts +3 -0
  134. package/dist/runtime/pm/features/Blocks/plugins/itemHasSingularSelectionPlugin.js +30 -0
  135. package/dist/runtime/pm/features/Blocks/plugins/itemMenuPlugin.d.ts +4 -0
  136. package/dist/runtime/pm/features/Blocks/plugins/itemMenuPlugin.js +17 -0
  137. package/dist/runtime/pm/features/Blocks/states/stateful.d.ts +2 -0
  138. package/dist/runtime/pm/features/Blocks/states/stateful.js +37 -0
  139. package/dist/runtime/pm/features/Blocks/states/task/cancelled.svg +32 -0
  140. package/dist/runtime/pm/features/Blocks/states/task/checked.svg +27 -0
  141. package/dist/runtime/pm/features/Blocks/states/task/checked2.svg +24 -0
  142. package/dist/runtime/pm/features/Blocks/states/task/partial.svg +24 -0
  143. package/dist/runtime/pm/features/Blocks/states/task/partial2.svg +31 -0
  144. package/dist/runtime/pm/features/Blocks/states/task/unchecked.svg +20 -0
  145. package/dist/runtime/pm/features/Blocks/types.d.ts +43 -0
  146. package/dist/runtime/pm/features/Blocks/types.js +2 -0
  147. package/dist/runtime/pm/features/Blocks/utils/createItemMenuCommandExecuter.d.ts +3 -0
  148. package/dist/runtime/pm/features/Blocks/utils/createItemMenuCommandExecuter.js +24 -0
  149. package/dist/runtime/pm/features/Blocks/utils/fixBlockIds.d.ts +4 -0
  150. package/dist/runtime/pm/features/Blocks/utils/fixBlockIds.js +23 -0
  151. package/dist/runtime/pm/features/Blocks/utils/isValidId.d.ts +2 -0
  152. package/dist/runtime/pm/features/Blocks/utils/isValidId.js +7 -0
  153. package/dist/runtime/pm/features/CodeBlock/CodeBlock.d.ts +16 -0
  154. package/dist/runtime/pm/features/CodeBlock/CodeBlock.js +91 -0
  155. package/dist/runtime/pm/features/CodeBlock/build/generateHighlightJsInfo.d.ts +1 -0
  156. package/dist/runtime/pm/features/CodeBlock/build/generateHighlightJsInfo.js +63 -0
  157. package/dist/runtime/pm/features/CodeBlock/commands/codeBlockEnterOrSplit.d.ts +9 -0
  158. package/dist/runtime/pm/features/CodeBlock/commands/codeBlockEnterOrSplit.js +28 -0
  159. package/dist/runtime/pm/features/CodeBlock/commands/codeBlockIndent.d.ts +9 -0
  160. package/dist/runtime/pm/features/CodeBlock/commands/codeBlockIndent.js +39 -0
  161. package/dist/runtime/pm/features/CodeBlock/commands/codeBlockUnindent.d.ts +9 -0
  162. package/dist/runtime/pm/features/CodeBlock/commands/codeBlockUnindent.js +50 -0
  163. package/dist/runtime/pm/features/CodeBlock/commands/focusCodeBlockLanguage.d.ts +9 -0
  164. package/dist/runtime/pm/features/CodeBlock/commands/focusCodeBlockLanguage.js +27 -0
  165. package/dist/runtime/pm/features/CodeBlock/components/CodeBlockView.d.vue.ts +92 -0
  166. package/dist/runtime/pm/features/CodeBlock/components/CodeBlockView.vue +112 -0
  167. package/dist/runtime/pm/features/CodeBlock/components/CodeBlockView.vue.d.ts +92 -0
  168. package/dist/runtime/pm/features/CodeBlock/composables/useAsyncCodeBlockHighlighting.d.ts +28 -0
  169. package/dist/runtime/pm/features/CodeBlock/composables/useAsyncCodeBlockHighlighting.js +137 -0
  170. package/dist/runtime/pm/features/CodeBlock/composables/useHighlightJsTheme.d.ts +37 -0
  171. package/dist/runtime/pm/features/CodeBlock/composables/useHighlightJsTheme.js +101 -0
  172. package/dist/runtime/pm/features/CodeBlock/highlightJsInfo.d.ts +17 -0
  173. package/dist/runtime/pm/features/CodeBlock/highlightJsInfo.js +711 -0
  174. package/dist/runtime/pm/features/CodeBlock/types.d.ts +4 -0
  175. package/dist/runtime/pm/features/CodeBlock/types.js +2 -0
  176. package/dist/runtime/pm/features/Collaboration/Collaboration.d.ts +66 -0
  177. package/dist/runtime/pm/features/Collaboration/Collaboration.js +169 -0
  178. package/dist/runtime/pm/features/CommandsMenus/CommandBar.d.ts +19 -0
  179. package/dist/runtime/pm/features/CommandsMenus/CommandBar.js +97 -0
  180. package/dist/runtime/pm/features/CommandsMenus/commandBarMenuItems.d.ts +20 -0
  181. package/dist/runtime/pm/features/CommandsMenus/commandBarMenuItems.js +188 -0
  182. package/dist/runtime/pm/features/CommandsMenus/components/CommandBar.d.vue.ts +8 -0
  183. package/dist/runtime/pm/features/CommandsMenus/components/CommandBar.vue +58 -0
  184. package/dist/runtime/pm/features/CommandsMenus/components/CommandBar.vue.d.ts +8 -0
  185. package/dist/runtime/pm/features/CommandsMenus/components/CommandBarItem.d.vue.ts +12 -0
  186. package/dist/runtime/pm/features/CommandsMenus/components/CommandBarItem.vue +42 -0
  187. package/dist/runtime/pm/features/CommandsMenus/components/CommandBarItem.vue.d.ts +12 -0
  188. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuGroup.d.vue.ts +10 -0
  189. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuGroup.vue +55 -0
  190. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuGroup.vue.d.ts +10 -0
  191. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuItem.d.vue.ts +11 -0
  192. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuItem.vue +58 -0
  193. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuItem.vue.d.ts +11 -0
  194. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuList.d.vue.ts +11 -0
  195. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuList.vue +54 -0
  196. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuList.vue.d.ts +11 -0
  197. package/dist/runtime/pm/features/CommandsMenus/components/TextIcon.d.vue.ts +5 -0
  198. package/dist/runtime/pm/features/CommandsMenus/components/TextIcon.vue +13 -0
  199. package/dist/runtime/pm/features/CommandsMenus/components/TextIcon.vue.d.ts +5 -0
  200. package/dist/runtime/pm/features/CommandsMenus/icons/HighlightIcon.d.vue.ts +8 -0
  201. package/dist/runtime/pm/features/CommandsMenus/icons/HighlightIcon.vue +45 -0
  202. package/dist/runtime/pm/features/CommandsMenus/icons/HighlightIcon.vue.d.ts +8 -0
  203. package/dist/runtime/pm/features/CommandsMenus/icons/SubscriptIcon.d.vue.ts +2 -0
  204. package/dist/runtime/pm/features/CommandsMenus/icons/SubscriptIcon.vue +5 -0
  205. package/dist/runtime/pm/features/CommandsMenus/icons/SubscriptIcon.vue.d.ts +2 -0
  206. package/dist/runtime/pm/features/CommandsMenus/icons/SuperscriptIcon.d.vue.ts +2 -0
  207. package/dist/runtime/pm/features/CommandsMenus/icons/SuperscriptIcon.vue +5 -0
  208. package/dist/runtime/pm/features/CommandsMenus/icons/SuperscriptIcon.vue.d.ts +2 -0
  209. package/dist/runtime/pm/features/CommandsMenus/types.d.ts +61 -0
  210. package/dist/runtime/pm/features/CommandsMenus/types.js +5 -0
  211. package/dist/runtime/pm/features/CommandsMenus/utils/defaultCommandExecutor.d.ts +3 -0
  212. package/dist/runtime/pm/features/CommandsMenus/utils/defaultCommandExecutor.js +11 -0
  213. package/dist/runtime/pm/features/CommandsMenus/utils/findCommand.d.ts +10 -0
  214. package/dist/runtime/pm/features/CommandsMenus/utils/findCommand.js +16 -0
  215. package/dist/runtime/pm/features/CommandsMenus/utils/popupPositionModifier.d.ts +5 -0
  216. package/dist/runtime/pm/features/CommandsMenus/utils/popupPositionModifier.js +9 -0
  217. package/dist/runtime/pm/features/CommandsMenus/utils/popupVerticalPositioner.d.ts +5 -0
  218. package/dist/runtime/pm/features/CommandsMenus/utils/popupVerticalPositioner.js +11 -0
  219. package/dist/runtime/pm/features/Document/Document.d.ts +3 -0
  220. package/dist/runtime/pm/features/Document/Document.js +6 -0
  221. package/dist/runtime/pm/features/DocumentApi/DocumentApi.d.ts +85 -0
  222. package/dist/runtime/pm/features/DocumentApi/DocumentApi.js +161 -0
  223. package/dist/runtime/pm/features/DocumentApi/composables/useEditorContent.d.ts +13 -0
  224. package/dist/runtime/pm/features/DocumentApi/composables/useEditorContent.js +76 -0
  225. package/dist/runtime/pm/features/DocumentApi/composables/useTestDocumentApi.d.ts +23 -0
  226. package/dist/runtime/pm/features/DocumentApi/composables/useTestDocumentApi.js +70 -0
  227. package/dist/runtime/pm/features/DocumentApi/types.d.ts +133 -0
  228. package/dist/runtime/pm/features/DocumentApi/types.js +1 -0
  229. package/dist/runtime/pm/features/DocumentApi/utils/convertFullTransactionForPartialState.d.ts +3 -0
  230. package/dist/runtime/pm/features/DocumentApi/utils/convertFullTransactionForPartialState.js +37 -0
  231. package/dist/runtime/pm/features/DocumentApi/utils/convertTrForInstance.d.ts +4 -0
  232. package/dist/runtime/pm/features/DocumentApi/utils/convertTrForInstance.js +13 -0
  233. package/dist/runtime/pm/features/DocumentApi/utils/convertTransactionForFullState.d.ts +2 -0
  234. package/dist/runtime/pm/features/DocumentApi/utils/convertTransactionForFullState.js +22 -0
  235. package/dist/runtime/pm/features/DocumentApi/utils/copyMeta.d.ts +2 -0
  236. package/dist/runtime/pm/features/DocumentApi/utils/copyMeta.js +6 -0
  237. package/dist/runtime/pm/features/DocumentApi/utils/getEmbedJson.d.ts +1 -0
  238. package/dist/runtime/pm/features/DocumentApi/utils/getEmbedJson.js +14 -0
  239. package/dist/runtime/pm/features/DocumentApi/utils/getEmbedNodeFromDoc.d.ts +1 -0
  240. package/dist/runtime/pm/features/DocumentApi/utils/getEmbedNodeFromDoc.js +14 -0
  241. package/dist/runtime/pm/features/DocumentApi/utils/getStateEmbedRange.d.ts +9 -0
  242. package/dist/runtime/pm/features/DocumentApi/utils/getStateEmbedRange.js +19 -0
  243. package/dist/runtime/pm/features/DocumentApi/utils/isEmbedId.d.ts +2 -0
  244. package/dist/runtime/pm/features/DocumentApi/utils/isEmbedId.js +3 -0
  245. package/dist/runtime/pm/features/EmbeddedDocument/Embedded.d.ts +24 -0
  246. package/dist/runtime/pm/features/EmbeddedDocument/Embedded.js +73 -0
  247. package/dist/runtime/pm/features/EmbeddedDocument/EmbeddedDocument.d.ts +23 -0
  248. package/dist/runtime/pm/features/EmbeddedDocument/EmbeddedDocument.js +70 -0
  249. package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedDocumentPicker.d.vue.ts +14 -0
  250. package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedDocumentPicker.vue +171 -0
  251. package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedDocumentPicker.vue.d.ts +14 -0
  252. package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedNodeView.d.vue.ts +92 -0
  253. package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedNodeView.vue +172 -0
  254. package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedNodeView.vue.d.ts +92 -0
  255. package/dist/runtime/pm/features/EmbeddedDocument/composables/useEmbeddedEditor.d.ts +31 -0
  256. package/dist/runtime/pm/features/EmbeddedDocument/composables/useEmbeddedEditor.js +199 -0
  257. package/dist/runtime/pm/features/EmbeddedDocument/types.d.ts +49 -0
  258. package/dist/runtime/pm/features/EmbeddedDocument/types.js +6 -0
  259. package/dist/runtime/pm/features/EmbeddedDocument/utils/isEmbeddedBlock.d.ts +9 -0
  260. package/dist/runtime/pm/features/EmbeddedDocument/utils/isEmbeddedBlock.js +3 -0
  261. package/dist/runtime/pm/features/EmbeddedDocument/utils/redirectFromEmbedded.d.ts +28 -0
  262. package/dist/runtime/pm/features/EmbeddedDocument/utils/redirectFromEmbedded.js +17 -0
  263. package/dist/runtime/pm/features/FileLoader/FileLoader.d.ts +16 -0
  264. package/dist/runtime/pm/features/FileLoader/FileLoader.js +99 -0
  265. package/dist/runtime/pm/features/FileLoader/FileLoaderHandler/FileLoaderHandler.d.ts +28 -0
  266. package/dist/runtime/pm/features/FileLoader/FileLoaderHandler/FileLoaderHandler.js +69 -0
  267. package/dist/runtime/pm/features/FileLoader/FileLoaderHandler/TestFileLoaderHandler.d.ts +11 -0
  268. package/dist/runtime/pm/features/FileLoader/FileLoaderHandler/TestFileLoaderHandler.js +49 -0
  269. package/dist/runtime/pm/features/FileLoader/commands/insertFile.d.ts +17 -0
  270. package/dist/runtime/pm/features/FileLoader/commands/insertFile.js +39 -0
  271. package/dist/runtime/pm/features/FileLoader/components/FileLoaderNodeView.d.vue.ts +92 -0
  272. package/dist/runtime/pm/features/FileLoader/components/FileLoaderNodeView.vue +38 -0
  273. package/dist/runtime/pm/features/FileLoader/components/FileLoaderNodeView.vue.d.ts +92 -0
  274. package/dist/runtime/pm/features/FileLoader/plugins/fileLoaderPlugin.d.ts +5 -0
  275. package/dist/runtime/pm/features/FileLoader/plugins/fileLoaderPlugin.js +61 -0
  276. package/dist/runtime/pm/features/FileLoader/types.d.ts +73 -0
  277. package/dist/runtime/pm/features/FileLoader/types.js +0 -0
  278. package/dist/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNode.d.ts +4 -0
  279. package/dist/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNode.js +27 -0
  280. package/dist/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNodes.d.ts +9 -0
  281. package/dist/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNodes.js +22 -0
  282. package/dist/runtime/pm/features/FileLoader/utils/findLoadingNodePos.d.ts +2 -0
  283. package/dist/runtime/pm/features/FileLoader/utils/findLoadingNodePos.js +11 -0
  284. package/dist/runtime/pm/features/FileLoader/utils/optionsCheck.d.ts +3 -0
  285. package/dist/runtime/pm/features/FileLoader/utils/optionsCheck.js +8 -0
  286. package/dist/runtime/pm/features/FileLoader/utils/readAsDataUrl.d.ts +1 -0
  287. package/dist/runtime/pm/features/FileLoader/utils/readAsDataUrl.js +12 -0
  288. package/dist/runtime/pm/features/HardBreak/HardBreak.d.ts +5 -0
  289. package/dist/runtime/pm/features/HardBreak/HardBreak.js +14 -0
  290. package/dist/runtime/pm/features/Heading/Heading.d.ts +24 -0
  291. package/dist/runtime/pm/features/Heading/Heading.js +85 -0
  292. package/dist/runtime/pm/features/Heading/commands/changeLevelAttr.d.ts +16 -0
  293. package/dist/runtime/pm/features/Heading/commands/changeLevelAttr.js +33 -0
  294. package/dist/runtime/pm/features/Heading/types.d.ts +14 -0
  295. package/dist/runtime/pm/features/Heading/types.js +0 -0
  296. package/dist/runtime/pm/features/Highlight/Highlight.d.ts +72 -0
  297. package/dist/runtime/pm/features/Highlight/Highlight.js +163 -0
  298. package/dist/runtime/pm/features/Highlight/retyped/tiptapHighlight.d.ts +3 -0
  299. package/dist/runtime/pm/features/Highlight/retyped/tiptapHighlight.js +5 -0
  300. package/dist/runtime/pm/features/Highlight/types.d.ts +27 -0
  301. package/dist/runtime/pm/features/Highlight/types.js +2 -0
  302. package/dist/runtime/pm/features/History/History.d.ts +35 -0
  303. package/dist/runtime/pm/features/History/History.js +63 -0
  304. package/dist/runtime/pm/features/Iframe/Iframe.d.ts +21 -0
  305. package/dist/runtime/pm/features/Iframe/Iframe.js +127 -0
  306. package/dist/runtime/pm/features/Iframe/IframeParsers.d.ts +37 -0
  307. package/dist/runtime/pm/features/Iframe/IframeParsers.js +88 -0
  308. package/dist/runtime/pm/features/Iframe/components/IframeNodeView.d.vue.ts +92 -0
  309. package/dist/runtime/pm/features/Iframe/components/IframeNodeView.vue +82 -0
  310. package/dist/runtime/pm/features/Iframe/components/IframeNodeView.vue.d.ts +92 -0
  311. package/dist/runtime/pm/features/Iframe/types.d.ts +5 -0
  312. package/dist/runtime/pm/features/Iframe/types.js +0 -0
  313. package/dist/runtime/pm/features/Image/Image.d.ts +2 -0
  314. package/dist/runtime/pm/features/Image/Image.js +13 -0
  315. package/dist/runtime/pm/features/Link/Link.d.ts +38 -0
  316. package/dist/runtime/pm/features/Link/Link.js +241 -0
  317. package/dist/runtime/pm/features/Link/components/BubbleMenuExternalLink.d.vue.ts +28 -0
  318. package/dist/runtime/pm/features/Link/components/BubbleMenuExternalLink.vue +114 -0
  319. package/dist/runtime/pm/features/Link/components/BubbleMenuExternalLink.vue.d.ts +28 -0
  320. package/dist/runtime/pm/features/Link/components/BubbleMenuInternalLink.d.vue.ts +29 -0
  321. package/dist/runtime/pm/features/Link/components/BubbleMenuInternalLink.vue +107 -0
  322. package/dist/runtime/pm/features/Link/components/BubbleMenuInternalLink.vue.d.ts +29 -0
  323. package/dist/runtime/pm/features/Link/components/BubbleMenuLink.d.vue.ts +11 -0
  324. package/dist/runtime/pm/features/Link/components/BubbleMenuLink.vue +126 -0
  325. package/dist/runtime/pm/features/Link/components/BubbleMenuLink.vue.d.ts +11 -0
  326. package/dist/runtime/pm/features/Link/components/BubbleMenuLinkActions.d.vue.ts +18 -0
  327. package/dist/runtime/pm/features/Link/components/BubbleMenuLinkActions.vue +57 -0
  328. package/dist/runtime/pm/features/Link/components/BubbleMenuLinkActions.vue.d.ts +18 -0
  329. package/dist/runtime/pm/features/Link/types.d.ts +44 -0
  330. package/dist/runtime/pm/features/Link/types.js +3 -0
  331. package/dist/runtime/pm/features/Menus/Menus.d.ts +45 -0
  332. package/dist/runtime/pm/features/Menus/Menus.js +142 -0
  333. package/dist/runtime/pm/features/Menus/components/MarkMenuManager.d.vue.ts +6 -0
  334. package/dist/runtime/pm/features/Menus/components/MarkMenuManager.vue +166 -0
  335. package/dist/runtime/pm/features/Menus/components/MarkMenuManager.vue.d.ts +6 -0
  336. package/dist/runtime/pm/features/Menus/types.d.ts +51 -0
  337. package/dist/runtime/pm/features/Menus/types.js +3 -0
  338. package/dist/runtime/pm/features/Menus/utils/isMarkMenu.d.ts +2 -0
  339. package/dist/runtime/pm/features/Menus/utils/isMarkMenu.js +3 -0
  340. package/dist/runtime/pm/features/Tables/commands/tableEnter.d.ts +15 -0
  341. package/dist/runtime/pm/features/Tables/commands/tableEnter.js +19 -0
  342. package/dist/runtime/pm/features/Tables/index.d.ts +9 -0
  343. package/dist/runtime/pm/features/Tables/index.js +44 -0
  344. package/dist/runtime/pm/schema.d.ts +4 -0
  345. package/dist/runtime/pm/schema.js +80 -0
  346. package/dist/runtime/pm/testSchema.d.ts +5 -0
  347. package/dist/runtime/pm/testSchema.js +30 -0
  348. package/dist/runtime/pm/utils/createDropIndicator.d.ts +23 -0
  349. package/dist/runtime/pm/utils/createDropIndicator.js +32 -0
  350. package/dist/runtime/pm/utils/createStateOnlyPluginApply.d.ts +2 -0
  351. package/dist/runtime/pm/utils/createStateOnlyPluginApply.js +9 -0
  352. package/dist/runtime/pm/utils/createStateOnlyPluginObjApply.d.ts +2 -0
  353. package/dist/runtime/pm/utils/createStateOnlyPluginObjApply.js +14 -0
  354. package/dist/runtime/pm/utils/dropPointInfo.d.ts +56 -0
  355. package/dist/runtime/pm/utils/dropPointInfo.js +28 -0
  356. package/dist/runtime/pm/utils/findUpwards.d.ts +20 -0
  357. package/dist/runtime/pm/utils/findUpwards.js +18 -0
  358. package/dist/runtime/pm/utils/getChildChunks.d.ts +3 -0
  359. package/dist/runtime/pm/utils/getChildChunks.js +15 -0
  360. package/dist/runtime/pm/utils/getDiffReplacementRange.d.ts +20 -0
  361. package/dist/runtime/pm/utils/getDiffReplacementRange.js +9 -0
  362. package/dist/runtime/pm/utils/getElMaxVisualSize.d.ts +9 -0
  363. package/dist/runtime/pm/utils/getElMaxVisualSize.js +7 -0
  364. package/dist/runtime/pm/utils/getElPropertyAsInt.d.ts +1 -0
  365. package/dist/runtime/pm/utils/getElPropertyAsInt.js +8 -0
  366. package/dist/runtime/pm/utils/getGroupNodeNames.d.ts +2 -0
  367. package/dist/runtime/pm/utils/getGroupNodeNames.js +7 -0
  368. package/dist/runtime/pm/utils/getMarkPosition.d.ts +11 -0
  369. package/dist/runtime/pm/utils/getMarkPosition.js +34 -0
  370. package/dist/runtime/pm/utils/getMarksInSelection.d.ts +3 -0
  371. package/dist/runtime/pm/utils/getMarksInSelection.js +16 -0
  372. package/dist/runtime/pm/utils/getTypeByName.d.ts +2 -0
  373. package/dist/runtime/pm/utils/getTypeByName.js +5 -0
  374. package/dist/runtime/pm/utils/index.d.ts +15 -0
  375. package/dist/runtime/pm/utils/index.js +15 -0
  376. package/dist/runtime/pm/utils/internal/createNodeTypesList.d.ts +2 -0
  377. package/dist/runtime/pm/utils/internal/createNodeTypesList.js +17 -0
  378. package/dist/runtime/pm/utils/internal/debugMap.d.ts +7 -0
  379. package/dist/runtime/pm/utils/internal/debugMap.js +24 -0
  380. package/dist/runtime/pm/utils/internal/debugNode.d.ts +2 -0
  381. package/dist/runtime/pm/utils/internal/debugNode.js +18 -0
  382. package/dist/runtime/pm/utils/internal/debugSel.d.ts +5 -0
  383. package/dist/runtime/pm/utils/internal/debugSel.js +8 -0
  384. package/dist/runtime/pm/utils/internal/recurse.d.ts +2 -0
  385. package/dist/runtime/pm/utils/internal/recurse.js +39 -0
  386. package/dist/runtime/pm/utils/internal/stripBlockId.d.ts +2 -0
  387. package/dist/runtime/pm/utils/internal/stripBlockId.js +9 -0
  388. package/dist/runtime/pm/utils/mapSelection.d.ts +8 -0
  389. package/dist/runtime/pm/utils/mapSelection.js +12 -0
  390. package/dist/runtime/pm/utils/nodesBetween.d.ts +21 -0
  391. package/dist/runtime/pm/utils/nodesBetween.js +21 -0
  392. package/dist/runtime/pm/utils/pointToPmPoint.d.ts +2 -0
  393. package/dist/runtime/pm/utils/pointToPmPoint.js +3 -0
  394. package/dist/runtime/pm/utils/splitIntoChunks.d.ts +32 -0
  395. package/dist/runtime/pm/utils/splitIntoChunks.js +31 -0
  396. package/dist/runtime/testDocuments.d.ts +53 -0
  397. package/dist/runtime/testDocuments.js +122 -0
  398. package/dist/runtime/types/index.d.ts +53 -0
  399. package/dist/runtime/types/index.js +9 -0
  400. package/dist/types.d.mts +3 -0
  401. package/package.json +238 -0
  402. package/src/module.ts +101 -0
  403. package/src/runtime/assets/base.css +83 -0
  404. package/src/runtime/assets/handle-arrow.svg +16 -0
  405. package/src/runtime/assets/handle-border-circles-single.svg +44 -0
  406. package/src/runtime/assets/handle-border-circles.svg +27 -0
  407. package/src/runtime/assets/handle-temp.svg +1 -0
  408. package/src/runtime/assets/utils.css +9 -0
  409. package/src/runtime/components/CodeBlockThemePicker.vue +125 -0
  410. package/src/runtime/components/Commands.vue +67 -0
  411. package/src/runtime/components/Editor.vue +330 -0
  412. package/src/runtime/components/EditorDemoApp.vue +118 -0
  413. package/src/runtime/components/EditorDemoControls.vue +38 -0
  414. package/src/runtime/components/TestWrapper.vue +74 -0
  415. package/src/runtime/composables/useEditor.ts +29 -0
  416. package/src/runtime/composables/useWindowDebugging.ts +20 -0
  417. package/src/runtime/demo/App.vue +114 -0
  418. package/src/runtime/demo/README.md +1 -0
  419. package/src/runtime/demo/main.ts +8 -0
  420. package/src/runtime/demo/tailwind.css +4 -0
  421. package/src/runtime/env.d.ts +2 -0
  422. package/src/runtime/injectionKeys.ts +10 -0
  423. package/src/runtime/main.lib.ts +2 -0
  424. package/src/runtime/pm/commands/backspace.ts +44 -0
  425. package/src/runtime/pm/commands/changeAttrs.ts +37 -0
  426. package/src/runtime/pm/commands/deleteSelection.ts +22 -0
  427. package/src/runtime/pm/commands/enter.ts +27 -0
  428. package/src/runtime/pm/commands/insertBreak.ts +40 -0
  429. package/src/runtime/pm/features/Base/Base.ts +39 -0
  430. package/src/runtime/pm/features/Base/commands/deleteNodes.ts +54 -0
  431. package/src/runtime/pm/features/Base/commands/setCursorVisible.ts +24 -0
  432. package/src/runtime/pm/features/Base/plugins/debugSelectionPlugin.ts +57 -0
  433. package/src/runtime/pm/features/Base/plugins/isCursorVisiblePlugin.ts +28 -0
  434. package/src/runtime/pm/features/Base/plugins/isUsingTouchPlugin.ts +40 -0
  435. package/src/runtime/pm/features/Base/plugins/selectingIndicator.ts +38 -0
  436. package/src/runtime/pm/features/Base/plugins/unfocusedSelectionIndicatorPlugin.ts +107 -0
  437. package/src/runtime/pm/features/Base/types.ts +3 -0
  438. package/src/runtime/pm/features/BaseShortcuts/BaseShortcuts.ts +39 -0
  439. package/src/runtime/pm/features/Blockquote/Blockquote.ts +75 -0
  440. package/src/runtime/pm/features/Blockquote/commands/blockquoteEnter.ts +51 -0
  441. package/src/runtime/pm/features/Blockquote/commands/blockquoteShiftEnter.ts +26 -0
  442. package/src/runtime/pm/features/Blocks/Blocks.ts +3 -0
  443. package/src/runtime/pm/features/Blocks/Item.ts +176 -0
  444. package/src/runtime/pm/features/Blocks/List.ts +67 -0
  445. package/src/runtime/pm/features/Blocks/commands/changeItemType.ts +64 -0
  446. package/src/runtime/pm/features/Blocks/commands/changeTypeAttr.ts +47 -0
  447. package/src/runtime/pm/features/Blocks/commands/copyOrMoveItem.ts +179 -0
  448. package/src/runtime/pm/features/Blocks/commands/deleteItem.ts +24 -0
  449. package/src/runtime/pm/features/Blocks/commands/indentItem.ts +105 -0
  450. package/src/runtime/pm/features/Blocks/commands/itemMenuCommands.ts +62 -0
  451. package/src/runtime/pm/features/Blocks/commands/moveItem.ts +128 -0
  452. package/src/runtime/pm/features/Blocks/commands/setNode.ts +186 -0
  453. package/src/runtime/pm/features/Blocks/commands/splitItem.ts +116 -0
  454. package/src/runtime/pm/features/Blocks/commands/unindentItem.ts +82 -0
  455. package/src/runtime/pm/features/Blocks/components/DragTreeHandle.vue +142 -0
  456. package/src/runtime/pm/features/Blocks/components/ItemMenu.vue +88 -0
  457. package/src/runtime/pm/features/Blocks/components/ItemNodeView.vue +394 -0
  458. package/src/runtime/pm/features/Blocks/components/defaultItemMenu.ts +45 -0
  459. package/src/runtime/pm/features/Blocks/composables/useDragWithThreshold.ts +0 -0
  460. package/src/runtime/pm/features/Blocks/composables/useHandleHeight.ts +28 -0
  461. package/src/runtime/pm/features/Blocks/composables/useHasChildren.ts +14 -0
  462. package/src/runtime/pm/features/Blocks/composables/useNodeStates.ts +29 -0
  463. package/src/runtime/pm/features/Blocks/itemMenuMenuItems.ts +143 -0
  464. package/src/runtime/pm/features/Blocks/plugins/ensureLastItemIsContentPlugin.ts +52 -0
  465. package/src/runtime/pm/features/Blocks/plugins/itemBlockIdPlugin.ts +40 -0
  466. package/src/runtime/pm/features/Blocks/plugins/itemHasSingularSelectionPlugin.ts +32 -0
  467. package/src/runtime/pm/features/Blocks/plugins/itemMenuPlugin.ts +21 -0
  468. package/src/runtime/pm/features/Blocks/states/stateful.ts +41 -0
  469. package/src/runtime/pm/features/Blocks/states/task/cancelled.svg +32 -0
  470. package/src/runtime/pm/features/Blocks/states/task/checked.svg +27 -0
  471. package/src/runtime/pm/features/Blocks/states/task/checked2.svg +24 -0
  472. package/src/runtime/pm/features/Blocks/states/task/partial.svg +24 -0
  473. package/src/runtime/pm/features/Blocks/states/task/partial2.svg +31 -0
  474. package/src/runtime/pm/features/Blocks/states/task/unchecked.svg +20 -0
  475. package/src/runtime/pm/features/Blocks/types.ts +51 -0
  476. package/src/runtime/pm/features/Blocks/utils/createItemMenuCommandExecuter.ts +47 -0
  477. package/src/runtime/pm/features/Blocks/utils/fixBlockIds.ts +28 -0
  478. package/src/runtime/pm/features/Blocks/utils/isValidId.ts +8 -0
  479. package/src/runtime/pm/features/CodeBlock/CodeBlock.ts +104 -0
  480. package/src/runtime/pm/features/CodeBlock/build/generateHighlightJsInfo.js +63 -0
  481. package/src/runtime/pm/features/CodeBlock/commands/codeBlockEnterOrSplit.ts +55 -0
  482. package/src/runtime/pm/features/CodeBlock/commands/codeBlockIndent.ts +67 -0
  483. package/src/runtime/pm/features/CodeBlock/commands/codeBlockUnindent.ts +74 -0
  484. package/src/runtime/pm/features/CodeBlock/commands/focusCodeBlockLanguage.ts +44 -0
  485. package/src/runtime/pm/features/CodeBlock/components/CodeBlockView.vue +126 -0
  486. package/src/runtime/pm/features/CodeBlock/composables/useAsyncCodeBlockHighlighting.ts +185 -0
  487. package/src/runtime/pm/features/CodeBlock/composables/useHighlightJsTheme.ts +150 -0
  488. package/src/runtime/pm/features/CodeBlock/highlightJsInfo.ts +733 -0
  489. package/src/runtime/pm/features/CodeBlock/types.ts +7 -0
  490. package/src/runtime/pm/features/Collaboration/Collaboration.ts +295 -0
  491. package/src/runtime/pm/features/CommandsMenus/CommandBar.ts +130 -0
  492. package/src/runtime/pm/features/CommandsMenus/commandBarMenuItems.ts +209 -0
  493. package/src/runtime/pm/features/CommandsMenus/components/CommandBar.vue +63 -0
  494. package/src/runtime/pm/features/CommandsMenus/components/CommandBarItem.vue +48 -0
  495. package/src/runtime/pm/features/CommandsMenus/components/CommandMenuGroup.vue +59 -0
  496. package/src/runtime/pm/features/CommandsMenus/components/CommandMenuItem.vue +67 -0
  497. package/src/runtime/pm/features/CommandsMenus/components/CommandMenuList.vue +60 -0
  498. package/src/runtime/pm/features/CommandsMenus/components/TextIcon.vue +14 -0
  499. package/src/runtime/pm/features/CommandsMenus/icons/HighlightIcon.vue +51 -0
  500. package/src/runtime/pm/features/CommandsMenus/icons/SubscriptIcon.vue +5 -0
  501. package/src/runtime/pm/features/CommandsMenus/icons/SuperscriptIcon.vue +5 -0
  502. package/src/runtime/pm/features/CommandsMenus/types.ts +73 -0
  503. package/src/runtime/pm/features/CommandsMenus/utils/defaultCommandExecutor.ts +22 -0
  504. package/src/runtime/pm/features/CommandsMenus/utils/findCommand.ts +37 -0
  505. package/src/runtime/pm/features/CommandsMenus/utils/popupPositionModifier.ts +14 -0
  506. package/src/runtime/pm/features/CommandsMenus/utils/popupVerticalPositioner.ts +16 -0
  507. package/src/runtime/pm/features/Document/Document.ts +9 -0
  508. package/src/runtime/pm/features/DocumentApi/DocumentApi.ts +272 -0
  509. package/src/runtime/pm/features/DocumentApi/composables/useEditorContent.ts +105 -0
  510. package/src/runtime/pm/features/DocumentApi/composables/useTestDocumentApi.ts +95 -0
  511. package/src/runtime/pm/features/DocumentApi/types.ts +143 -0
  512. package/src/runtime/pm/features/DocumentApi/utils/convertFullTransactionForPartialState.ts +54 -0
  513. package/src/runtime/pm/features/DocumentApi/utils/convertTrForInstance.ts +24 -0
  514. package/src/runtime/pm/features/DocumentApi/utils/convertTransactionForFullState.ts +39 -0
  515. package/src/runtime/pm/features/DocumentApi/utils/copyMeta.ts +8 -0
  516. package/src/runtime/pm/features/DocumentApi/utils/getEmbedJson.ts +16 -0
  517. package/src/runtime/pm/features/DocumentApi/utils/getEmbedNodeFromDoc.ts +15 -0
  518. package/src/runtime/pm/features/DocumentApi/utils/getStateEmbedRange.ts +26 -0
  519. package/src/runtime/pm/features/DocumentApi/utils/isEmbedId.ts +5 -0
  520. package/src/runtime/pm/features/EmbeddedDocument/Embedded.ts +110 -0
  521. package/src/runtime/pm/features/EmbeddedDocument/EmbeddedDocument.ts +102 -0
  522. package/src/runtime/pm/features/EmbeddedDocument/components/EmbeddedDocumentPicker.vue +188 -0
  523. package/src/runtime/pm/features/EmbeddedDocument/components/EmbeddedNodeView.vue +187 -0
  524. package/src/runtime/pm/features/EmbeddedDocument/composables/useEmbeddedEditor.ts +302 -0
  525. package/src/runtime/pm/features/EmbeddedDocument/types.ts +61 -0
  526. package/src/runtime/pm/features/EmbeddedDocument/utils/isEmbeddedBlock.ts +12 -0
  527. package/src/runtime/pm/features/EmbeddedDocument/utils/redirectFromEmbedded.ts +48 -0
  528. package/src/runtime/pm/features/FileLoader/FileLoader.ts +120 -0
  529. package/src/runtime/pm/features/FileLoader/FileLoaderHandler/FileLoaderHandler.ts +100 -0
  530. package/src/runtime/pm/features/FileLoader/FileLoaderHandler/TestFileLoaderHandler.ts +61 -0
  531. package/src/runtime/pm/features/FileLoader/commands/insertFile.ts +87 -0
  532. package/src/runtime/pm/features/FileLoader/components/FileLoaderNodeView.vue +38 -0
  533. package/src/runtime/pm/features/FileLoader/plugins/fileLoaderPlugin.ts +70 -0
  534. package/src/runtime/pm/features/FileLoader/types.ts +91 -0
  535. package/src/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNode.ts +39 -0
  536. package/src/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNodes.ts +42 -0
  537. package/src/runtime/pm/features/FileLoader/utils/findLoadingNodePos.ts +16 -0
  538. package/src/runtime/pm/features/FileLoader/utils/optionsCheck.ts +16 -0
  539. package/src/runtime/pm/features/FileLoader/utils/readAsDataUrl.ts +12 -0
  540. package/src/runtime/pm/features/HardBreak/HardBreak.ts +21 -0
  541. package/src/runtime/pm/features/Heading/Heading.ts +130 -0
  542. package/src/runtime/pm/features/Heading/commands/changeLevelAttr.ts +55 -0
  543. package/src/runtime/pm/features/Heading/types.ts +17 -0
  544. package/src/runtime/pm/features/Highlight/Highlight.ts +234 -0
  545. package/src/runtime/pm/features/Highlight/retyped/tiptapHighlight.d.ts +3 -0
  546. package/src/runtime/pm/features/Highlight/retyped/tiptapHighlight.js +5 -0
  547. package/src/runtime/pm/features/Highlight/types.ts +25 -0
  548. package/src/runtime/pm/features/History/History.ts +112 -0
  549. package/src/runtime/pm/features/Iframe/Iframe.ts +163 -0
  550. package/src/runtime/pm/features/Iframe/IframeParsers.ts +116 -0
  551. package/src/runtime/pm/features/Iframe/components/IframeNodeView.vue +83 -0
  552. package/src/runtime/pm/features/Iframe/types.ts +7 -0
  553. package/src/runtime/pm/features/Image/Image.ts +16 -0
  554. package/src/runtime/pm/features/Link/Link.ts +313 -0
  555. package/src/runtime/pm/features/Link/components/BubbleMenuExternalLink.vue +125 -0
  556. package/src/runtime/pm/features/Link/components/BubbleMenuInternalLink.vue +130 -0
  557. package/src/runtime/pm/features/Link/components/BubbleMenuLink.vue +149 -0
  558. package/src/runtime/pm/features/Link/components/BubbleMenuLinkActions.vue +65 -0
  559. package/src/runtime/pm/features/Link/types.ts +53 -0
  560. package/src/runtime/pm/features/Menus/Menus.ts +195 -0
  561. package/src/runtime/pm/features/Menus/components/MarkMenuManager.vue +203 -0
  562. package/src/runtime/pm/features/Menus/types.ts +64 -0
  563. package/src/runtime/pm/features/Menus/utils/isMarkMenu.ts +5 -0
  564. package/src/runtime/pm/features/Tables/commands/tableEnter.ts +40 -0
  565. package/src/runtime/pm/features/Tables/index.ts +60 -0
  566. package/src/runtime/pm/schema.ts +128 -0
  567. package/src/runtime/pm/testSchema.ts +34 -0
  568. package/src/runtime/pm/utils/createDropIndicator.ts +61 -0
  569. package/src/runtime/pm/utils/createStateOnlyPluginApply.ts +11 -0
  570. package/src/runtime/pm/utils/createStateOnlyPluginObjApply.ts +16 -0
  571. package/src/runtime/pm/utils/dropPointInfo.ts +85 -0
  572. package/src/runtime/pm/utils/findUpwards.ts +43 -0
  573. package/src/runtime/pm/utils/getChildChunks.ts +24 -0
  574. package/src/runtime/pm/utils/getDiffReplacementRange.ts +32 -0
  575. package/src/runtime/pm/utils/getElMaxVisualSize.ts +14 -0
  576. package/src/runtime/pm/utils/getElPropertyAsInt.ts +8 -0
  577. package/src/runtime/pm/utils/getGroupNodeNames.ts +9 -0
  578. package/src/runtime/pm/utils/getMarkPosition.ts +57 -0
  579. package/src/runtime/pm/utils/getMarksInSelection.ts +19 -0
  580. package/src/runtime/pm/utils/getTypeByName.ts +7 -0
  581. package/src/runtime/pm/utils/index.ts +17 -0
  582. package/src/runtime/pm/utils/internal/createNodeTypesList.ts +25 -0
  583. package/src/runtime/pm/utils/internal/debugMap.ts +36 -0
  584. package/src/runtime/pm/utils/internal/debugNode.ts +38 -0
  585. package/src/runtime/pm/utils/internal/debugSel.ts +10 -0
  586. package/src/runtime/pm/utils/internal/recurse.ts +44 -0
  587. package/src/runtime/pm/utils/internal/stripBlockId.ts +10 -0
  588. package/src/runtime/pm/utils/mapSelection.ts +21 -0
  589. package/src/runtime/pm/utils/nodesBetween.ts +47 -0
  590. package/src/runtime/pm/utils/pointToPmPoint.ts +5 -0
  591. package/src/runtime/pm/utils/splitIntoChunks.ts +68 -0
  592. package/src/runtime/testDocuments.ts +130 -0
  593. package/src/runtime/types/index.ts +56 -0
@@ -0,0 +1,187 @@
1
+ <template>
2
+ <!-- @vue-expect-error -->
3
+ <node-view-wrapper
4
+ :class="`
5
+ group/embedded-doc
6
+ relative
7
+ after:pointer-events-none
8
+ after:content-['']
9
+ after:absolute after:inset-0
10
+ after:border after:border-neutral-500 after:rounded-sm
11
+ after:drop-shadow-xs
12
+ focus-within:after:border-accent-500
13
+ focus:after:border-accent-500
14
+ `"
15
+ tabindex="0"
16
+ v-bind="{
17
+ ...node.attrs,
18
+ embedId: undefined,
19
+ embedDocId: node.attrs.embedId.docId,
20
+ embedBlockId: node.attrs.embedId.blockId
21
+ }"
22
+ @pointerdown="setEditorSelection"
23
+ >
24
+ <div
25
+ class="text-sm relative"
26
+ contenteditable="false"
27
+ >
28
+ <div
29
+ class="bg-neutral-100 dark:bg-neutral-900 flex p-1 gap-2 no-wrap justify-between align-center"
30
+ contenteditable="false"
31
+ >
32
+ <div
33
+ v-if="name"
34
+ class="pl-1"
35
+ >
36
+ File: {{ name }}
37
+ </div>
38
+ <div
39
+ v-else
40
+ class="pl-1 text-center w-full"
41
+ >
42
+ Blank Embed
43
+ </div>
44
+ <!-- @vue-expect-error -->
45
+ <WButton
46
+ v-if="editor?.isEditable"
47
+ title="Change embed link."
48
+ :border="true"
49
+ @click="showChangeEmbed = true"
50
+ >
51
+ <WIcon><i-fa-solid-link class="w-[0.7rem]"/></WIcon>
52
+ </WButton>
53
+ <!-- @vue-expect-error -->
54
+ <WPopup
55
+ :use-backdrop="true"
56
+ :preferred-horizontal="['center-screen']"
57
+ :preferred-vertical="['center-screen']"
58
+ class="backdrop:bg-neutral-900/50 backdrop:dark:bg-neutral-100/50"
59
+ v-model="showChangeEmbed"
60
+ >
61
+ <template #popup="{ extractEl }">
62
+ <EmbeddedDocumentPicker
63
+ :is-shown="showChangeEmbed"
64
+ :embed-id="embedId"
65
+ v-extract-root-el="extractEl"
66
+ @submit="pickEmbed"
67
+ @cancel="showChangeEmbed = false"
68
+ />
69
+ </template>
70
+ >
71
+ </WPopup>
72
+ </div>
73
+ <Transition>
74
+ <div
75
+ v-if="showUndoWarning"
76
+ class="absolute inset-0 bg-red-100 dark:bg-red-900 text-red-600 dark:text-red-400 px-2"
77
+ contenteditable="false"
78
+ >
79
+ Warning: Undo applied to document part that is not visible/embedded.
80
+ </div>
81
+ </Transition>
82
+ </div>
83
+
84
+ <div v-if="!name"/>
85
+ <div
86
+ v-else-if="isEmbeddedTooDeep"
87
+ class="px-2 text-center"
88
+ contenteditable="false"
89
+ >
90
+ Cannot preview nested content deeper than one level.
91
+ </div>
92
+ <div
93
+ v-else-if="isRecursivelyEmbedded"
94
+ class="px-2 text-center"
95
+ contenteditable="false"
96
+ >
97
+ Cannot preview recursively embedded content.
98
+ </div>
99
+
100
+ <template
101
+ v-else-if="content"
102
+ >
103
+ <component
104
+ :is-embedded="true"
105
+ :content="content"
106
+ :editor-options="editorOptions"
107
+ :is="editorComponent"
108
+ ref="editorWrapper"
109
+ />
110
+ </template>
111
+ <div
112
+ v-else
113
+ class="px-2 text-center"
114
+ >
115
+ {{ isLoading ? "Loading..." : "Could not find reference to wanted block." }}
116
+ </div>
117
+ </node-view-wrapper>
118
+ </template>
119
+
120
+ <script setup lang="ts">
121
+ import { nodeViewProps, NodeViewWrapper } from "@tiptap/vue-3"
122
+ import WIcon from "@witchcraft/ui/components/Icon"
123
+ import WButton from "@witchcraft/ui/components/LibButton"
124
+ import WPopup from "@witchcraft/ui/components/LibPopup"
125
+ import { vExtractRootEl } from "@witchcraft/ui/directives/vExtractRootEl"
126
+ import { computed, inject, ref, watch } from "vue"
127
+
128
+ import EmbeddedDocumentPicker from "./EmbeddedDocumentPicker.vue"
129
+
130
+ import IFaSolidLink from "~icons/fa-solid/link"
131
+
132
+ import Editor from "../../../../components/Editor.vue"
133
+ import type { MaybeEmbedId } from "../../DocumentApi/types.js"
134
+ import { useEmbeddedEditor } from "../composables/useEmbeddedEditor.js"
135
+ import { embeddedEditorComponentInjectionKey } from "../types.js"
136
+
137
+ const props = defineProps(nodeViewProps)
138
+
139
+ const editorComponent = inject(embeddedEditorComponentInjectionKey, Editor)
140
+ const editorWrapper = ref<InstanceType<typeof Editor> | null>(null)
141
+ // const el = ref<HTMLElement | null>(null)
142
+ const innerEditor = computed(() => editorWrapper.value?.editor)
143
+
144
+ const embedId = computed(() => props.node.attrs.embedId as MaybeEmbedId)
145
+ const showChangeEmbed = ref(false)
146
+
147
+ function pickEmbed(newEmbedId: MaybeEmbedId): void {
148
+ showChangeEmbed.value = false
149
+ props.updateAttributes({ ...props.node.attrs, embedId: { ...newEmbedId } })
150
+ }
151
+
152
+ function setEditorSelection(): void {
153
+ const pos = props.getPos()
154
+ if (props.editor.state.selection.from !== pos && pos) {
155
+ props.editor?.commands.setNodeSelection(pos)
156
+ }
157
+ }
158
+
159
+ function autoFocusOnSelection(): void {
160
+ if (props.editor.state.selection.from === props.getPos()
161
+ && document.activeElement !== innerEditor.value?.view.dom
162
+ ) {
163
+ innerEditor.value?.commands.focus()
164
+ }
165
+ }
166
+
167
+ watch([() => props.editor.state.selection.from, innerEditor], () => {
168
+ autoFocusOnSelection()
169
+ })
170
+
171
+ const {
172
+ content,
173
+ // api,
174
+ isEmbeddedTooDeep,
175
+ // isEmbeddedBlock,
176
+ isRecursivelyEmbedded,
177
+ showUndoWarning,
178
+ name,
179
+ isLoading,
180
+ editorOptions
181
+ } = useEmbeddedEditor(
182
+ embedId,
183
+ innerEditor,
184
+ props.editor,
185
+ props.getPos
186
+ )
187
+ </script>
@@ -0,0 +1,302 @@
1
+ import { castType } from "@alanscodelog/utils/castType"
2
+ import type { Content, Editor, EditorOptions } from "@tiptap/core"
3
+ import type { EditorState, Transaction } from "@tiptap/pm/state"
4
+ import { computed, type ComputedRef, inject, onBeforeUnmount, onMounted, provide, type Ref, ref, type ShallowRef, watch } from "vue"
5
+
6
+ import { getDiffReplacementRange } from "../../../utils/getDiffReplacementRange.js"
7
+ import { type DocId, documentApiInjectionKey, type DocumentApiInterface, type EmbedId, type MaybeEmbedId, type OnUpdateDocumentCallback } from "../../DocumentApi/types.js"
8
+ import { convertFullTransactionForPartialState } from "../../DocumentApi/utils/convertFullTransactionForPartialState.js"
9
+ import { getStateEmbedRange } from "../../DocumentApi/utils/getStateEmbedRange.js"
10
+ import { isEmbedId } from "../../DocumentApi/utils/isEmbedId.js"
11
+ import { Embedded } from "../Embedded.js"
12
+ import { embededEditorOptionsInjectionKey, isDeepEmbeddedInjectionKey, isEmbeddedBlockInjectionKey, isEmbeddedInjectionKey, parentEditorIdInjectionKey } from "../types.js"
13
+
14
+ type WarningState = {
15
+ smallTimeout: number | undefined
16
+ timeout: number | undefined
17
+ justWarned: boolean
18
+ }
19
+
20
+ function defaultOnUndoWarning(
21
+ r: Ref<boolean>,
22
+ state: WarningState,
23
+ undoTimeouts: [number, number] = [50, 2000]
24
+ ): void {
25
+ clearTimeout(state.smallTimeout)
26
+ clearTimeout(state.timeout)
27
+ r.value = false
28
+ // the key is getting held
29
+ if (state.justWarned) {
30
+ r.value = true
31
+ }
32
+ state.justWarned = true
33
+
34
+ // makes it do a little flash
35
+ state.smallTimeout = setTimeout(() => {
36
+ state.justWarned = false
37
+ r.value = true
38
+ clearTimeout(state.timeout)
39
+ state.timeout = setTimeout(() => {
40
+ r.value = false
41
+ }, undoTimeouts[1]) as any as number
42
+ }, undoTimeouts[0]) as any as number
43
+ }
44
+ function defaultOnUndoOk(r: Ref<boolean>, state: WarningState): void {
45
+ clearTimeout(state.smallTimeout)
46
+ clearTimeout(state.timeout)
47
+ r.value = false
48
+ }
49
+
50
+ /** Sets up nearly everything for the embedded editor nodeview. */
51
+ export function useEmbeddedEditor(
52
+ embedIdRef: ComputedRef<MaybeEmbedId> | Ref<MaybeEmbedId>,
53
+ /* The embedded editor instance. */
54
+ editor: ShallowRef<Editor | undefined>,
55
+ /* The root editor instance, for forwarding commands the embedded editor can't handle. See {@link Embedded}. */
56
+ rootEditor: Editor,
57
+ /** For forwarding commands the embedded editor can't handle. See {@link Embedded}. */
58
+ getPos: () => number | undefined,
59
+ {
60
+ undoTimeouts = [50, 2000],
61
+ selfSymbol = Symbol(`embedded-editor`),
62
+ onUndoWarning,
63
+ onUndoOk,
64
+ alwaysLoad = false,
65
+ injectIsEmbedded = true,
66
+ injectIsDeepEmbedded = true
67
+ }: {
68
+ /* The small and normal timeouts for the default undo warning functions. */
69
+ undoTimeouts?: [number, number]
70
+
71
+ /* This function will be called with the returned undoWarning ref when an undo would happen outside the embedded block.
72
+ *
73
+ * The default function will set the ref to false for 50ms (the small timeout), then true for 2000 (the normal timeout) so there is a brief flash with each undo. If it's called again before the 50ms, it will set the ref to true, so as to not flash when the undo key is held.
74
+ */
75
+ onUndoWarning?: ((ref: Ref<boolean>) => void)
76
+ /* This function will be called with the returned undoWarning ref when an undo would happen inside the embedded block.
77
+ *
78
+ * The default function will set the ref to false and clear the timeouts of the default warning function.
79
+ * */
80
+ onUndoOk?: ((ref: Ref<boolean>) => void)
81
+ /* A symbol to identify the embedded node view instance by. */
82
+ selfSymbol?: symbol
83
+ /** By default, documents will not be loaded if they are embedded too deeply or recursively embedded. Passing true will ignore all checks and load them anyways. This also usually requires disabling the injections with the `injectIsEmbedded` and `injectIsDeepEmbedded` options. */
84
+ alwaysLoad?: boolean
85
+ /** By default, the composable injects the `isEmbedded*InjectionKey`s. Passing false will not inject them. */
86
+ injectIsEmbedded?: boolean
87
+ /** By default, the composable injects `isDeepEmbeddedInjectionKey` with true if it is false. Passing false will not inject it. */
88
+ injectIsDeepEmbedded?: boolean
89
+ } = {}
90
+ ): {
91
+ content: Ref<Content | null>
92
+ api: DocumentApiInterface
93
+ selfSymbol: symbol
94
+ isEmbeddedTooDeep: boolean
95
+ isEmbeddedBlock?: Ref<boolean>
96
+ isRecursivelyEmbedded: ComputedRef<boolean>
97
+ showUndoWarning: Ref<boolean>
98
+ /** If name is undefined, the embed is a new embed without a document id. */
99
+ name: ComputedRef<string | undefined>
100
+ isLoading: Ref<boolean>
101
+ /** The root editor needs to provide it's options so we can pass them to the embedded editor. If we don't, extra extensions (e.g. BaseShortcuts) and options won't be registered on the embedded editor. See the `embeddedEditorOptionsInjectionKey` for why `autofocus` is ommitted. */
102
+ editorOptions: Partial<Omit<EditorOptions, "autofocus">>
103
+ } {
104
+ const showUndoWarning = ref(false)
105
+ const content = ref<Content | null>(null)
106
+ const api = inject(documentApiInjectionKey)
107
+ if (!api) {
108
+ throw new Error("No embed api provided.")
109
+ }
110
+
111
+ const editorOptions = inject(embededEditorOptionsInjectionKey)
112
+ if (!editorOptions) {
113
+ throw new Error("No editor options provided.")
114
+ }
115
+ editorOptions.extensions = [
116
+ ...(editorOptions.extensions ?? []).filter(ext => ext.name !== Embedded.name),
117
+ Embedded.configure({
118
+ rootEditor,
119
+ getPos,
120
+ getEmbedId: () => embedIdRef.value
121
+ })
122
+ ]
123
+
124
+ const isEmbeddedTooDeep = inject(isDeepEmbeddedInjectionKey, false)
125
+ if (injectIsDeepEmbedded && !isEmbeddedTooDeep) {
126
+ provide(isDeepEmbeddedInjectionKey, true)
127
+ }
128
+ const isEmbeddedBlock = computed(() => !!embedIdRef.value.blockId)
129
+ if (injectIsEmbedded) {
130
+ provide(isEmbeddedInjectionKey, true)
131
+ provide(isEmbeddedBlockInjectionKey, isEmbeddedBlock)
132
+ }
133
+
134
+ const parentId = inject(parentEditorIdInjectionKey, undefined)
135
+ const isRecursivelyEmbedded = computed(() => parentId?.value === embedIdRef.value.docId)
136
+
137
+ const isLoading = ref(false)
138
+
139
+ const name = computed(() => isEmbedId(embedIdRef.value) ? api.getEmbedTitle(embedIdRef.value) : undefined)
140
+
141
+ const warningState: WarningState = {
142
+ smallTimeout: undefined,
143
+ timeout: undefined,
144
+ justWarned: false
145
+ }
146
+ function forwardDispatchToFullState(tr?: Transaction): void {
147
+ castType<EmbedId>(embedIdRef.value)
148
+ const stateBefore = api!.getFromCache(embedIdRef.value)
149
+ if (!stateBefore) {
150
+ throw new Error("Expected stateBefore to exist.")
151
+ }
152
+ if (!tr) return
153
+ const diff = getDiffReplacementRange(stateBefore.doc, tr.doc)
154
+ const { start, end } = getStateEmbedRange(tr.doc, embedIdRef.value)
155
+ if (diff && end !== undefined && start !== undefined
156
+ && (diff.start < start || diff.end > end)
157
+ ) {
158
+ onUndoWarning
159
+ ? onUndoWarning(showUndoWarning)
160
+ : defaultOnUndoWarning(showUndoWarning, warningState, undoTimeouts)
161
+ } else {
162
+ onUndoOk
163
+ ? onUndoOk(showUndoWarning)
164
+ : defaultOnUndoOk(showUndoWarning, warningState)
165
+ }
166
+ // forwarded transactions bypass the on transaction hook
167
+ // so we set ignore to false
168
+ // and don't pass our symbol here
169
+ // so we can receive the transaction and update the embedded document
170
+ // we also don't convert the transaction's steps
171
+ tr.setMeta("no-step-convert", true)
172
+ tr.setMeta("no-schema-convert", true)
173
+ if (!embedIdRef.value.blockId) {
174
+ tr.setMeta("no-step-convert", true)
175
+ }
176
+ api!.updateDocument?.(
177
+ embedIdRef.value,
178
+ tr,
179
+ undefined
180
+ )
181
+ }
182
+ function onTransaction({ transaction }: { transaction: Transaction }): void {
183
+ castType<EmbedId>(embedIdRef.value)
184
+ if (!transaction.docChanged || transaction.getMeta("ignore")) {
185
+ return
186
+ }
187
+ if (!embedIdRef.value.blockId) {
188
+ transaction.setMeta("no-step-convert", true)
189
+ }
190
+ api!.updateDocument?.(
191
+ embedIdRef.value,
192
+ transaction,
193
+ selfSymbol
194
+ )
195
+ }
196
+
197
+ const onUpdateDocument: OnUpdateDocumentCallback = (
198
+ incomingEmbedId: DocId,
199
+ tr: Transaction,
200
+ _stateBefore: EditorState,
201
+ _incomingState: EditorState,
202
+ incomingSelfSymbol?: symbol
203
+ ): void => {
204
+ castType<EmbedId>(embedIdRef.value)
205
+ if (
206
+ incomingSelfSymbol === selfSymbol
207
+ || embedIdRef.value.docId !== incomingEmbedId.docId
208
+ || !tr.docChanged
209
+ || tr.getMeta("ignore")
210
+ ) {
211
+ return
212
+ }
213
+ if (content.value) {
214
+ const convertedTr = convertFullTransactionForPartialState(
215
+ editor.value!.state!,
216
+ tr,
217
+ embedIdRef.value
218
+ )
219
+ if (convertedTr) {
220
+ if (!convertedTr.before.eq(editor.value!.state.doc)) {
221
+ return
222
+ }
223
+ editor.value!.view.dispatch(convertedTr)
224
+ } else {
225
+ // the link got broken, the node was deleted
226
+ unloadDocument(embedIdRef.value, { partial: true })
227
+ }
228
+ } else {
229
+ void loadDocument(embedIdRef.value, { partial: true })
230
+ }
231
+ }
232
+ let attached = false
233
+ async function loadDocument(embedId: MaybeEmbedId, { partial = false }: { partial?: boolean } = {}): Promise<void> {
234
+ if (!isEmbedId(embedId)) return
235
+ if (!alwaysLoad && (isRecursivelyEmbedded.value || isEmbeddedTooDeep)) return
236
+ if (!partial) {
237
+ isLoading.value = true
238
+ await api!.load(embedId)
239
+ }
240
+ const res = api!.getEmbeddedContent?.(embedId)
241
+ if (!res) return
242
+ if (!partial) {
243
+ api!.addEventListener?.("update", onUpdateDocument)
244
+ }
245
+ content.value = res
246
+
247
+ watch(editor, () => {
248
+ // void nextTick(() => {
249
+ // this needs to be set if the document changes
250
+ // because the editor gets unmounted and
251
+ // a new version of the extension
252
+ // without the callbacks is created
253
+ editor.value!.commands.setHistoryRedirect(
254
+ () => api!.getFromCache(embedId),
255
+ forwardDispatchToFullState
256
+ )
257
+ // wait for the editor to exist
258
+ editor.value?.on("transaction", onTransaction)
259
+ isLoading.value = false
260
+ attached = true
261
+ }, { once: true })
262
+ }
263
+ function unloadDocument(embedId: MaybeEmbedId, { partial = false }: { partial?: boolean } = {}): void {
264
+ if (!isEmbedId(embedId)) return
265
+ if (!alwaysLoad && (isRecursivelyEmbedded.value || isEmbeddedTooDeep)) return
266
+ editor.value?.off("transaction", onTransaction)
267
+ if (!partial && attached) {
268
+ api!.removeEventListener?.("update", onUpdateDocument)
269
+ api!.unload(embedId)
270
+ attached = false
271
+ }
272
+ // the extension is destroyed when the editor is unmounted
273
+ editor.value?.commands.setHistoryRedirect(undefined, undefined)
274
+ content.value = null
275
+ }
276
+
277
+ watch(embedIdRef, (newVal, oldVal) => {
278
+ if (newVal.docId !== oldVal.docId || newVal.blockId !== oldVal.blockId) {
279
+ unloadDocument(oldVal)
280
+ void loadDocument(newVal)
281
+ }
282
+ })
283
+
284
+ onMounted(async () => {
285
+ await loadDocument(embedIdRef.value)
286
+ })
287
+ onBeforeUnmount(() => {
288
+ unloadDocument(embedIdRef.value)
289
+ })
290
+ return {
291
+ content,
292
+ api,
293
+ selfSymbol,
294
+ isEmbeddedTooDeep,
295
+ isEmbeddedBlock,
296
+ isRecursivelyEmbedded,
297
+ showUndoWarning,
298
+ name,
299
+ isLoading,
300
+ editorOptions
301
+ }
302
+ }
@@ -0,0 +1,61 @@
1
+ import type { Dispatch, Editor, EditorOptions } from "@tiptap/core"
2
+ import type { ComputedRef, InjectionKey, Ref } from "vue"
3
+
4
+ import type { MaybeEmbedId } from "../DocumentApi/types.js"
5
+
6
+ export interface EmbeddedDocumentNodeOptions extends WithOnTriggerByEmbeddedBlockOptions {
7
+ rootEditor: Editor
8
+ /** Provided by the embedded node view. */
9
+ getPos: () => number | undefined
10
+ getEmbedId: () => MaybeEmbedId
11
+ }
12
+
13
+ /** Tells the editor and embedded doc view whether it's deeply embedded (more than one level) or not. */
14
+ export const isDeepEmbeddedInjectionKey = Symbol("isEmbeddedInjectionKey") as InjectionKey<boolean>
15
+ /** Tells the editor and embedded doc view whether it's embedded or not. */
16
+ export const isEmbeddedInjectionKey = Symbol("isEmbeddedInjectionKey") as InjectionKey<boolean>
17
+
18
+ /* Tells the editor whether it's a single block embed so it can set the right class on the wrapper. See {@link isEmbeddedBlock}. */
19
+ export const isEmbeddedBlockInjectionKey = Symbol("isEmbeddedBlockInjectionKey") as InjectionKey<ComputedRef<boolean> | Ref<boolean>>
20
+
21
+ /** Injects the editor component to use for embedded editors. */
22
+ export const embeddedEditorComponentInjectionKey = Symbol("embeddedEditorComponentInjectionKey") as InjectionKey<new (...args: any) => { editor?: Editor }>
23
+
24
+ /** Injects the parent editor id so the embedded editor can know who is embedding it (to track recursive/disallowed embeds). */
25
+ export const parentEditorIdInjectionKey = Symbol("parentEditorIdInjectionKey") as InjectionKey<Ref<string | undefined>>
26
+
27
+ /**
28
+ * Injects the editor options so the embedded editor can use the same ones as it's parent.
29
+ *
30
+ * Note that autofocus is always disabled for embedded editors, hence it's omission.
31
+ */
32
+ export const embededEditorOptionsInjectionKey = Symbol("embededEditorOptionsInjectionKey") as InjectionKey<Partial<Omit<EditorOptions, "autofocus">>>
33
+
34
+ export type WithOnTriggerByEmbeddedBlockOptions = {
35
+ /**
36
+ * When the editor is embedded and it's embedding a single block, certain commands are nullified and just return true and do nothing because they would break the embedding (e.g. enter, split, indent, etc).
37
+ *
38
+ * All such commands forward to the `embeddedCommandRedirect` command if it's available (otherwise a warning is logged). The `Embedded` extension takes care of registering this redirect and can redirect some of the commands to the root editor, but not all of them.
39
+ *
40
+ * You can use this function to handle the redirection yourself. You will get passed both editor instances (root and embedded) to facilitate communication. If you can handle the command, you should return a boolean as with a regular command. Otherwise you can return undefined to let the default handler take care of it.
41
+ *
42
+ * Note that if the change moves the node, the component will get remounted and the embedded editor will no longer exist (to, for example, focus it).
43
+ *
44
+ * The included EmbeddedNodeView takes care of auto-focusing when the selection matches it's position. So as a workaround for focus at least, you can use `tr.setNodeSelection(nodePos + offset)`. Note the use of `offset`. The node's position will have probably changed depending on the command so you will need to know how much to offset it or have some way to find it's position again. While the embedId is provided, it's not guaranteed there is only one node embedding that id, there might be multiple. A better way is to first find the parent embedding item id before executing your command, note the `blockId`, then use it to find the node again.
45
+ *
46
+ * See {@link redirectFromEmbedded} for creating redirectable commands.
47
+ */
48
+ embeddedBlockCommandRedirect?: (
49
+ commandName: string,
50
+ args: any,
51
+ context: {
52
+ editor: Editor
53
+ rootEditor: Editor
54
+ nodePos: number | undefined
55
+ embedId: MaybeEmbedId
56
+ dispatch: Dispatch
57
+ }
58
+ ) => boolean | undefined
59
+ }
60
+
61
+ export type OnTriggerByEmbeddedBlock = WithOnTriggerByEmbeddedBlockOptions["embeddedBlockCommandRedirect"]
@@ -0,0 +1,12 @@
1
+ import type { EditorView } from "@tiptap/pm/view"
2
+
3
+ /**
4
+ * Returns whether the current view is a block embed embedded in another view.
5
+ *
6
+ * This is done by checking if the immediate parent has the class `editor-is-embedded-block` which the editor component adds when it receives the {@link isEmbeddedBlockInjectionKey} injection key.
7
+ *
8
+ * We cannot do this via state since a document can be both embedded and not embedded at the same time.
9
+ */
10
+ export function isEmbeddedBlock(view: EditorView): boolean {
11
+ return view.dom.parentElement?.classList.contains("editor-is-embedded-block") ?? false
12
+ }
@@ -0,0 +1,48 @@
1
+ import type { SingleCommands } from "@tiptap/core"
2
+ import type { EditorView } from "@tiptap/pm/view"
3
+
4
+ import { isEmbeddedBlock } from "./isEmbeddedBlock.js"
5
+
6
+ /**
7
+ * Commands that can split a block or modify it's position (indent/unindent) should not be called when the editor is in embedded block mode.
8
+ *
9
+ * This takes care of redirecting the command if possible (see {@link WithOnTriggerByEmbeddedBlockOptions.onTriggerByEmbeddedBlock}), otherwise it logs a warning.
10
+ *
11
+ * If the command should not be called at all and offers no redirect, don't pass the redirect parameter and it will log a different warning.
12
+ *
13
+ * You can use it in a command like this:
14
+ *
15
+ * ```ts
16
+ * commandName: (arg:any) => ({ commands, view, dispatch }) => {
17
+ * const redirect = isEmbeddedBlock(view, "commandName", { args:[arg], view, commands, dispatch }))
18
+ * if (redirect.redirected) { return redirect.result }
19
+ * }
20
+ * ```
21
+ */
22
+ export function redirectFromEmbedded(
23
+ view: EditorView,
24
+ name: string,
25
+ redirect?: {
26
+ args: any[]
27
+ view: EditorView
28
+ commands: SingleCommands
29
+ }
30
+ ): { redirected: true, result: any } | { redirected: false } {
31
+ if (isEmbeddedBlock(view)) {
32
+ if (redirect && "embeddedCommandRedirect" in redirect.commands) {
33
+ const result = redirect.commands.embeddedCommandRedirect(
34
+ name,
35
+ redirect.args
36
+ )
37
+ return { redirected: true, result }
38
+ }
39
+
40
+ // eslint-disable-next-line no-console
41
+ console.warn(redirect
42
+ ? `Command ${name} called from an embedded editor. This command supports command redirection, but no "embeddedCommandRedirect" command found. Command ignored (returning true to prevent further action).`
43
+ : `Command ${name} should not be called from an embedded editor. Command ignored (returning true to prevent further action).`
44
+ )
45
+ return { redirected: true, result: true }
46
+ }
47
+ return { redirected: false }
48
+ }