@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,195 @@
1
+ import { type Command, Extension } from "@tiptap/core"
2
+ import { type EditorState, Plugin, type PluginKey } from "@tiptap/pm/state"
3
+
4
+ import { type Menu, menusPluginKey, type OpenMenuInfo } from "./types.js"
5
+
6
+ import { createStateOnlyPluginObjApply } from "../../utils/createStateOnlyPluginObjApply.js"
7
+
8
+ declare module "@tiptap/core" {
9
+
10
+ // eslint-disable-next-line @typescript-eslint/naming-convention
11
+ interface Commands<ReturnType> {
12
+ menus: {
13
+ /** Can be used to close the open menu. Use force to close pinned menus. */
14
+ closeOtherMenus: (forceUnpin?: boolean) => ReturnType
15
+ /** This will temporarily open and "pin" the menu, disabling the auto-prioritizing, until it's closed with `force: true`. */
16
+ pinOpenMenu: (options: Pick<OpenMenuInfo, "name">) => ReturnType
17
+ /**
18
+ * Register a menu to be hnadled by the Menus extension.
19
+ *
20
+ * The ideal place to register them is usually in the onCreate hook of the extension. Do not do it from addProseMirrorPlugins as this will cause the menus to be registered more times than they should be.
21
+ *
22
+ * To be technical, this happens because the DocumentApi creates a state using a copy of the editor's plugins from the extension manager. The problem is not the copy but that the plugin property is actually a getter that calls `addProseMirrorPlugins` so the functon must not have side-effects.
23
+ */
24
+ registerMenu: <TPluginKey extends PluginKey<any>>(menu: Menu<TPluginKey>) => ReturnType
25
+ /**
26
+ * Since most mark menus don't have a close command, this is can be used to temporarily disable them.
27
+ *
28
+ * This should not be used to more permanantly turn off mark menus, as internally this is used to temporarily disable AND enable them. All optional mark menus have options to disable them.
29
+ */
30
+ disableMarkMenus: () => ReturnType
31
+ /**
32
+ * Enables showing of mark menus again.
33
+ */
34
+ enableMarkMenus: () => ReturnType
35
+
36
+ }
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Helps coordinate the display of different menus, never allowing more than one to be opened, sorting by priority, and autoclosing others. \*.
42
+ *
43
+ * If this extension is available, extensions with menus will register themselves, some with a higher priority than others.
44
+ *
45
+ * On each transaction, the extension will check in order of priority if any of the registered menus should be opened and save which menu that is to it's `menusPluginKey`, closing other open menus.
46
+ *
47
+ * The MarkMenuManager component is used in the editor wrapper to easily display "mark" menus with the help of this extension. If it is not used, they won't show since they must be added manually. The commponent reads the saved state and if the menu is a mark menu and a renderer has been provided for it using the `menusInjectionKey`, it renders the menu. The editor wrapper provides the `menus` option which takes care of providing the menus.
48
+ *
49
+ * \* Note that menus may choose to not implement or not provide a close command. In cases like "mark" menus this is fine if using the MarkMenuManager since it will only ever display one menu, but can otherwise break the intended purpose of the extension.
50
+ */
51
+
52
+ // eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-empty-object-type
53
+ export const Menus = Extension.create<{}, { menus: Menu[] }>({
54
+ name: "menus",
55
+ addStorage() {
56
+ return {
57
+ menus: []
58
+ }
59
+ },
60
+ addCommands() {
61
+ return {
62
+ enableMarkMenus: (): Command => ({ tr, dispatch }) => {
63
+ if (dispatch) {
64
+ tr.setMeta(menusPluginKey, {
65
+ canShow: true
66
+ })
67
+ }
68
+ return true
69
+ },
70
+ disableMarkMenus: (): Command => ({ tr, dispatch }) => {
71
+ if (dispatch) {
72
+ tr.setMeta(menusPluginKey, {
73
+ canShow: false
74
+ })
75
+ }
76
+ return true
77
+ },
78
+
79
+ registerMenu: <TPluginKey extends PluginKey<any>>(menu: Menu<TPluginKey>): Command => () => {
80
+ const menus = this.storage.menus
81
+ const existingIndex = menus.findIndex(m => m.name === menu.name)
82
+ if (existingIndex >= 0) {
83
+ // eslint-disable-next-line no-console
84
+ console.warn("Menu already registered, replacing.", {
85
+ existing: menus[existingIndex],
86
+ new: menu
87
+ })
88
+ menus.splice(existingIndex, 1, menu)
89
+ }
90
+ menus.push(menu)
91
+ menus.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))
92
+ return true
93
+ },
94
+ unregisterMenu: (menu: Menu): Command => ({ tr }) => {
95
+ const menus = this.storage.menus
96
+ const index = menus.indexOf(menu)
97
+ if (index !== -1) {
98
+ menus.splice(index, 1)
99
+ tr.setMeta(menusPluginKey, { menus })
100
+ return true
101
+ }
102
+ return false
103
+ },
104
+ pinOpenMenu: (options: Pick<OpenMenuInfo, "name">): Command => ({ dispatch, tr, commands }) => {
105
+ const menus = this.storage.menus
106
+ const menu = menus.find(m => m.name === options.name)
107
+ if (!menu) {
108
+ // eslint-disable-next-line no-console
109
+ console.warn("Menu to open not found.", options)
110
+ return false
111
+ }
112
+ commands.closeOtherMenus(true)
113
+ if (dispatch) {
114
+ tr.setMeta(menusPluginKey, {
115
+ state: true,
116
+ pin: true,
117
+ menu
118
+ })
119
+ }
120
+ return true
121
+ },
122
+ closeOtherMenus: (forceUnpin: boolean = false): Command => ({ dispatch, tr, state, commands }) => {
123
+ const other = menusPluginKey.getState(state)
124
+ if (other?.pin && !forceUnpin) return false
125
+ const otherMenu = other?.menu
126
+ if (otherMenu?.closeCommand) {
127
+ commands[otherMenu.closeCommand]()
128
+ if (dispatch) {
129
+ tr.setMeta(menusPluginKey, {
130
+ state: false,
131
+ menu: undefined
132
+ })
133
+ }
134
+ return true
135
+ }
136
+ return false
137
+ }
138
+ }
139
+ },
140
+ addProseMirrorPlugins() {
141
+ const self = this
142
+ return [
143
+ new Plugin({
144
+ key: menusPluginKey,
145
+ state: {
146
+ init() {
147
+ return {
148
+ state: false,
149
+ pin: false,
150
+ canShow: true
151
+ }
152
+ },
153
+ apply: createStateOnlyPluginObjApply(menusPluginKey)
154
+ },
155
+ appendTransaction(trs, oldState, newState) {
156
+ const menuWasSetByTrs = trs.some(tr => tr.getMeta(menusPluginKey))
157
+ if (menuWasSetByTrs) return undefined
158
+ const menus = self.storage.menus
159
+ const activeMenu = getActiveMenu(menus, newState)
160
+ const value = menusPluginKey.getState(newState)
161
+ const valueWas = menusPluginKey.getState(oldState)
162
+ if (valueWas?.pin) { return undefined }
163
+ if (value?.state !== !!activeMenu || value?.menu?.name !== activeMenu?.name) {
164
+ return newState.tr.setMeta(menusPluginKey, {
165
+ state: !!activeMenu,
166
+ menu: activeMenu
167
+ ? {
168
+ name: activeMenu.name,
169
+ type: activeMenu.type,
170
+ closeCommand: activeMenu.closeCommand
171
+ }
172
+ : undefined
173
+ })
174
+ }
175
+ return undefined
176
+ }
177
+ })
178
+ ]
179
+ }
180
+ })
181
+
182
+ function getActiveMenu(menus: Menu[] | undefined, state: EditorState): Menu | undefined {
183
+ if (!menus) return undefined
184
+ for (const menu of menus) {
185
+ const menuState = menu.pluginKey.getState(state)
186
+ if (menuState === undefined) {
187
+ // eslint-disable-next-line no-console
188
+ console.warn("Menu plugin state is undefined. Did you register a plugin with this key?", menu.pluginKey, menu.name)
189
+ }
190
+ if (menu.canShow(state, menuState)) {
191
+ return menu
192
+ }
193
+ }
194
+ return undefined
195
+ }
@@ -0,0 +1,203 @@
1
+ <template>
2
+ <!-- @vue-expect-error -->
3
+ <WPopup
4
+ :model-value="!!activeMarkMenu"
5
+ :preferred-horizontal="['center-most']"
6
+ :preferred-vertical="['top-most']"
7
+ :modify-position="modifyPopupToMenuBounds"
8
+ :use-backdrop="false"
9
+ class="[&>div]:transition-[left,top] duration-30"
10
+ ref="popupComponent"
11
+ >
12
+ <template #popup="{ extractEl }">
13
+ <div
14
+ tabindex="0"
15
+ class="p-2"
16
+ :ref="_ => { extractEl(_); menuEl = _ as HTMLElement }"
17
+ @keydown.esc="close"
18
+ >
19
+ <component
20
+ v-if="menuRenderer?.component"
21
+ :editor="editor"
22
+ :is="menuRenderer.component"
23
+ ref="component"
24
+ v-bind="menuRenderer?.props?.(editor as any) ?? { editor }"
25
+ @close="close"
26
+ @copy="copy"
27
+ />
28
+ </div>
29
+ </template>
30
+ </WPopup>
31
+ </template>
32
+
33
+ <script setup lang="ts">
34
+ import type { Editor } from "@tiptap/vue-3"
35
+ import WPopup from "@witchcraft/ui/components/LibPopup"
36
+ import { copy } from "@witchcraft/ui/helpers/copy"
37
+ import type { IPopupReference, PopupPositionModifier, SimpleDOMRect } from "@witchcraft/ui/types"
38
+ import {
39
+ computed,
40
+ inject,
41
+ nextTick,
42
+ ref,
43
+ useTemplateRef,
44
+ watch,
45
+ watchEffect
46
+ } from "vue"
47
+
48
+ import { findUpwards } from "../../../utils/findUpwards.js"
49
+ import { type MenuRenderInfo, menusInjectionKey, menusPluginKey } from "../types.js"
50
+
51
+ const props = withDefaults(defineProps<{
52
+ editor: Editor
53
+ }>(), {
54
+ })
55
+ const menus = inject(menusInjectionKey, ref({} as Record<string, MenuRenderInfo>))
56
+
57
+ const activeMarkMenu = ref<string | undefined>()
58
+ const menuRenderer = computed(() => {
59
+ if (!activeMarkMenu.value) return undefined
60
+ const menuCompInfo = menus?.value?.[activeMarkMenu.value]
61
+ return menuCompInfo
62
+ })
63
+
64
+ const popupComponent = useTemplateRef("popupComponent")
65
+ const menuEl = ref<HTMLElement | null>(null)
66
+ const virtualEditorEl = ref<IPopupReference | null>(null)
67
+ const virtualCursorEl = ref<IPopupReference | null>(null)
68
+
69
+ function virtualCursorGetBoundingClientRect(): SimpleDOMRect {
70
+ const opts = menuRenderer.value?.popupOptions
71
+ const selection = props.editor.state.selection
72
+ const doc = props.editor.state.doc
73
+ const $fromItem = findUpwards(doc, selection.from, $pos => $pos.node().type.name === "item")?.$pos
74
+
75
+ const end = props.editor.view.coordsAtPos(selection.to)
76
+ const start = props.editor.view.coordsAtPos(selection.from)
77
+ // attempt to pin to the top of the item if it's close enough
78
+ const itemStart = props.editor.view.coordsAtPos($fromItem?.pos ?? selection.from)
79
+ const pinToItemDistance = typeof opts?.pinToItemDistance === "function"
80
+ ? opts?.pinToItemDistance(props.editor.state as any)
81
+ : opts?.pinToItemDistance ?? 0
82
+ // absolute just in case, doubts it's possible
83
+ const itemStartIsShortDistance = Math.abs(start.top - itemStart.top) < pinToItemDistance
84
+
85
+ const leftMost = Math.min(start.left, end.left)
86
+ const rightMost = Math.max(start.right, end.right)
87
+ const topMost = Math.min(start.top, end.top, itemStartIsShortDistance ? itemStart.top : Infinity)
88
+ const bottomMost = Math.max(start.bottom, end.bottom)
89
+ return {
90
+ x: leftMost,
91
+ y: topMost,
92
+ top: topMost,
93
+ bottom: bottomMost,
94
+ left: leftMost,
95
+ right: rightMost,
96
+ width: rightMost - leftMost,
97
+ height: bottomMost - topMost
98
+ }
99
+ }
100
+
101
+ function virtualEditorGetBoundingClientRect(): SimpleDOMRect {
102
+ // constrain it horizontally to the editor
103
+ // but not vertically
104
+ // this is so we can later modify the position when we know the height of the menu
105
+ // so at most it's allowed to be one menu height above the editor unless it hit the window already (which is handled here)
106
+ // it being below shouldn't be a problem since we're using top-most positioning
107
+ // it's guarded against below anyways
108
+ const editorRect = props.editor.view.dom.getBoundingClientRect()
109
+ const bodyRect = document.body.getBoundingClientRect()
110
+ return {
111
+ x: editorRect.x,
112
+ left: editorRect.left,
113
+ right: editorRect.right,
114
+ width: editorRect.width,
115
+
116
+ y: 0,
117
+ top: 0,
118
+ bottom: bodyRect.bottom,
119
+ height: bodyRect.height
120
+ }
121
+ }
122
+
123
+ const modifyPopupToMenuBounds: PopupPositionModifier = (pos, reference, popup, _bg, space) => {
124
+ const editorRect = props.editor.view.dom.closest(".editor-wrapper")?.getBoundingClientRect()
125
+ if (!editorRect) {
126
+ throw new Error("MarkMenuManager: The wrapping scrollable editor component must have the `editor-wrapper` class for mark menus to work as they need to know the position of the scrollable wrapper.")
127
+ }
128
+ const yMin = Math.max(editorRect.top - popup.height, 0)
129
+ if (pos.y < yMin) pos.y = yMin
130
+
131
+ // under no circumstances should the menu be over the cursor
132
+ // the popup menu algorithm doesn't allow for not covering the reference element
133
+ // so we manually stick it above/below
134
+ if (reference && pos.y + popup.height > reference.top) {
135
+ pos.y = space.bottom > space.top
136
+ ? reference.bottom
137
+ : reference.top - popup.height
138
+ }
139
+ return pos
140
+ }
141
+
142
+ function close(e?: Event): void {
143
+ e?.preventDefault()
144
+ props.editor.commands.closeOtherMenus()
145
+ }
146
+
147
+ function documentRefocusBlur(e: Event) {
148
+ document.removeEventListener("focus", documentRefocusBlur)
149
+ checkMenuBlur(e)
150
+ }
151
+ function checkMenuBlur(e: Event) {
152
+ if ("relatedTarget" in e) {
153
+ // allow window to lose focus and menu to stay open if it was focused
154
+ // only blur if when we focus back we're outside the menu
155
+ if (e.relatedTarget === null) {
156
+ document.addEventListener("focus", documentRefocusBlur)
157
+ } else if (!menuEl.value?.contains(e.relatedTarget as Node)) {
158
+ close(e)
159
+ }
160
+ }
161
+ }
162
+
163
+ watchEffect(() => {
164
+ if (activeMarkMenu.value) {
165
+ document.addEventListener("click", checkMenuBlur)
166
+ virtualCursorEl.value = { getBoundingClientRect: virtualCursorGetBoundingClientRect }
167
+ popupComponent.value?.setReference(virtualCursorEl.value)
168
+ virtualEditorEl.value = { getBoundingClientRect: virtualEditorGetBoundingClientRect }
169
+ popupComponent.value?.setBackground(virtualEditorEl.value)
170
+ } else {
171
+ document.removeEventListener("click", checkMenuBlur)
172
+ virtualCursorEl.value = null
173
+ popupComponent.value?.setReference(virtualCursorEl.value!)
174
+ virtualEditorEl.value = null
175
+ popupComponent.value?.setBackground(virtualEditorEl.value)
176
+ }
177
+ })
178
+ const recompute = () => {
179
+ nextTick(() => {
180
+ popupComponent.value?.recompute()
181
+ })
182
+ }
183
+ function updateState() {
184
+ const state = menusPluginKey.getState(props.editor.state)
185
+ if (state?.menu?.type === "mark" && state.canShow) {
186
+ activeMarkMenu.value = state?.menu?.name
187
+ recompute()
188
+ } else {
189
+ activeMarkMenu.value = undefined
190
+ }
191
+ }
192
+
193
+ // mmm feels weird when moving upwards
194
+ // const debouncedRecompute = throttle(recompute, 1000, { leading: true, trailing: true })
195
+ // menu is mounted once then hidden so we have to listen directly
196
+ // also tiptap's shouldShow does not work well
197
+ // hooking into transactions directly to avoid issues
198
+ watch(() => props.editor, (newVal, oldVal) => {
199
+ oldVal.off("transaction", updateState)
200
+ newVal.on("transaction", updateState)
201
+ })
202
+ props.editor.on("transaction", updateState)
203
+ </script>
@@ -0,0 +1,64 @@
1
+ import type { Editor } from "@tiptap/core"
2
+ import { type EditorState, PluginKey } from "@tiptap/pm/state"
3
+ import type { Component, InjectionKey, Ref } from "vue"
4
+
5
+ export interface MenuCloseCommands {
6
+ }
7
+ /**
8
+ * Menus describe how to close them again with this key.
9
+ *
10
+ * It can be used by other menus to close any open menus before opening itself (see {@link closeOtherMenus}).
11
+ *
12
+ * The close command must not need to take any arguments.
13
+ *
14
+ * You can extend the `MenuCloseCommands` interface to add more commands.
15
+ */
16
+
17
+ export const menusPluginKey = new PluginKey<MenusPluginState>("menus")
18
+ export type MenusPluginState = {
19
+ state: boolean
20
+ menu?: OpenMenuInfo
21
+ pin: boolean
22
+ canShow: boolean
23
+ }
24
+
25
+ export interface BaseMenu<
26
+ T extends PluginKey<any> | undefined = PluginKey<any> | undefined
27
+ > {
28
+ name: string
29
+ closeCommand: keyof MenuCloseCommands | undefined
30
+ type: "context" | "floating" | "mark"
31
+ pluginKey: T extends PluginKey<any> ? T : never
32
+ priority?: number
33
+ canShow: T extends PluginKey<any> ? (state: EditorState, pluginState: ReturnType<T["getState"]>) => boolean : never
34
+ }
35
+ export type OpenMenuInfo = Omit<BaseMenu, "pluginKey" | "canShow">
36
+ export interface ContextMenu<
37
+ T extends PluginKey<any> | undefined = PluginKey<any> | undefined
38
+ > extends BaseMenu<T> {
39
+ type: "context"
40
+ }
41
+ export interface FloatingMenu<
42
+ T extends PluginKey<any> | undefined = PluginKey<any> | undefined
43
+ > extends BaseMenu<T> {
44
+ type: "floating"
45
+ }
46
+ export interface MarkMenu<
47
+ T extends PluginKey<any> = PluginKey<any>
48
+ > extends BaseMenu<T> {
49
+ type: "mark"
50
+ }
51
+ export type Menu<T extends PluginKey<any> = PluginKey<any>> = MarkMenu<T> | FloatingMenu<T> | ContextMenu<T>
52
+
53
+ export type MenuRenderInfo = {
54
+ props?: (editor: Editor) => Record<string, any>
55
+ component: Component
56
+ popupOptions?: {
57
+ /**
58
+ * Attempts to pin the mark menu to the top of the item if the cursor is this close or less to it. Set to a number greater than zero or return a number greater than 0 to enable it.
59
+ */
60
+ pinToItemDistance?: number | ((state: EditorState) => number)
61
+ }
62
+ }
63
+
64
+ export const menusInjectionKey = Symbol("menusInjectionKey") as InjectionKey<(Ref<Record<string, MenuRenderInfo>>)>
@@ -0,0 +1,5 @@
1
+ import type { MarkMenu, Menu } from "../types.js"
2
+
3
+ export function isMarkMenu(menu: Menu): menu is MarkMenu {
4
+ return menu.type === "mark"
5
+ }
@@ -0,0 +1,40 @@
1
+ import { type Command, getNodeType } from "@tiptap/core"
2
+ import type { NodeType } from "@tiptap/pm/model"
3
+
4
+ declare module "@tiptap/core" {
5
+ // eslint-disable-next-line @typescript-eslint/naming-convention
6
+ interface Commands<ReturnType> {
7
+ tableEnter: {
8
+ /**
9
+ * Handles enter in a table. Splits the table at the next row, inserting a default item, or if it can't, after the table. Does not delete the selection as it's just weird since delete in a table just clears them.
10
+ *
11
+ * @redirectable
12
+ */
13
+ tableEnter: (pos?: number) => ReturnType
14
+ }
15
+ }
16
+ }
17
+
18
+ export const tableEnter = (
19
+ tableTypesOrNames: (string | NodeType)[] = ["table", "tableRow", "tableCell", "tableHeader"],
20
+ itemTypeOrName: string | NodeType = "item"
21
+ ) => (pos?: number): Command => ({ state, dispatch, tr }) => {
22
+ const itemType = getNodeType(itemTypeOrName, state.schema)
23
+ const tableType = tableTypesOrNames.map(name => getNodeType(name, state.schema))
24
+ const { $from, empty } = state.selection
25
+ const $pos = pos !== undefined ? tr.doc.resolve(pos) : $from
26
+ const parent = $pos.node(-1)
27
+ if (tableType.includes(parent.type)) {
28
+ const item = itemType.createAndFill()
29
+ if (!item) return false
30
+ if (dispatch) {
31
+ if (pos === undefined && !empty) {
32
+ // its just weird
33
+ // tr.delete($from.pos, $to.pos);
34
+ }
35
+ tr.insert($from.after(-2), item)
36
+ }
37
+ return true
38
+ }
39
+ return false
40
+ }
@@ -0,0 +1,60 @@
1
+ import {
2
+ Table as TiptapTable,
3
+ TableCell as TiptapTableCell,
4
+ TableHeader as TiptapTableHeader,
5
+ TableRow as TiptapTableRow
6
+ } from "@tiptap/extension-table"
7
+
8
+ import { tableEnter } from "./commands/tableEnter.js"
9
+
10
+ // eslint-disable-next-line @typescript-eslint/naming-convention
11
+ export const TableRow = TiptapTableRow.extend({
12
+ // force table rows to contain something, otherwise create and fill won't work as expected
13
+ content: "(tableCell | tableHeader)+",
14
+ addKeyboardShortcuts() {
15
+ return {}
16
+ }
17
+ })
18
+
19
+ // eslint-disable-next-line @typescript-eslint/naming-convention
20
+ export const TableCell = TiptapTableCell.extend({
21
+ content: "block",
22
+ addKeyboardShortcuts() {
23
+ return {}
24
+ }
25
+ })
26
+
27
+ // eslint-disable-next-line @typescript-eslint/naming-convention
28
+ export const TableHeader = TiptapTableHeader.extend({
29
+ content: "block",
30
+ addKeyboardShortcuts() {
31
+ return {}
32
+ }
33
+ })
34
+
35
+ // eslint-disable-next-line @typescript-eslint/naming-convention
36
+ export const Table = TiptapTable.extend({
37
+ addOptions() {
38
+ return {
39
+ ...(this as any).parent?.(),
40
+ resizable: true,
41
+ lastColumnResizable: false
42
+ }
43
+ },
44
+ addCommands() {
45
+ return {
46
+ tableEnter: tableEnter()
47
+ }
48
+ },
49
+ addKeyboardShortcuts() {
50
+ return {}
51
+ }
52
+ })
53
+
54
+ // eslint-disable-next-line @typescript-eslint/naming-convention
55
+ export const TableExtensions = [Table, TableRow, TableCell, TableHeader]
56
+
57
+ export type NodeTableName = "table"
58
+ export type NodeTableRowName = "tableRow"
59
+ export type NodeTableCellName = "tableCell"
60
+ export type NodeTableHeaderName = "tableHeader"
@@ -0,0 +1,128 @@
1
+ import { type EditorOptions, type Extension, getSchema, type Mark, type Node } from "@tiptap/core"
2
+ import { Bold } from "@tiptap/extension-bold"
3
+ import { Code } from "@tiptap/extension-code"
4
+ import { Dropcursor } from "@tiptap/extension-dropcursor"
5
+ import { Gapcursor } from "@tiptap/extension-gapcursor"
6
+ import { Italic } from "@tiptap/extension-italic"
7
+ import { Paragraph } from "@tiptap/extension-paragraph"
8
+ import { Strike } from "@tiptap/extension-strike"
9
+ import { Subscript } from "@tiptap/extension-subscript"
10
+ import { Superscript } from "@tiptap/extension-superscript"
11
+ import { Text } from "@tiptap/extension-text"
12
+ import { Underline } from "@tiptap/extension-underline"
13
+ import type { Schema } from "@tiptap/pm/model"
14
+
15
+ import { Base } from "./features/Base/Base.js"
16
+ import { Blockquote, Cite, type NodeBlockquoteName, type NodeCiteName } from "./features/Blockquote/Blockquote.js"
17
+ import { Item, type NodeItemName } from "./features/Blocks/Item.js"
18
+ import { List, type NodeListName } from "./features/Blocks/List.js"
19
+ import { CodeBlock, type NodeCodeBlockName } from "./features/CodeBlock/CodeBlock.js"
20
+ import { CommandBar } from "./features/CommandsMenus/CommandBar.js"
21
+ import { Document, type NodeDocumentName } from "./features/Document/Document.js"
22
+ import { EmbeddedDocument, type NodeEmbeddedDocumentName } from "./features/EmbeddedDocument/EmbeddedDocument.js"
23
+ import { HardBreak } from "./features/HardBreak/HardBreak.js"
24
+ import { Heading, type NodeHeadingName } from "./features/Heading/Heading.js"
25
+ import { Highlight, type MarkHighlightName } from "./features/Highlight/Highlight.js"
26
+ import { History } from "./features/History/History.js"
27
+ import { Iframe, type NodeIframeName } from "./features/Iframe/Iframe.js"
28
+ import { Image } from "./features/Image/Image.js"
29
+ import { Link } from "./features/Link/Link.js"
30
+ import { Menus } from "./features/Menus/Menus.js"
31
+ import { type NodeTableCellName, type NodeTableHeaderName, type NodeTableName, type NodeTableRowName, TableExtensions } from "./features/Tables/index.js"
32
+
33
+ function stripShortcuts<T extends Node | Mark | Extension>(c: T): T {
34
+ return c.extend({
35
+ addKeyboardShortcuts() {
36
+ return {}
37
+ }
38
+ }) as any
39
+ }
40
+
41
+ export const extensions: EditorOptions["extensions"] = [
42
+ Document,
43
+ Gapcursor,
44
+ Dropcursor,
45
+ // custom
46
+ stripShortcuts(Paragraph.extend({
47
+ group: "block"
48
+ })),
49
+ CommandBar,
50
+ Base,
51
+ List,
52
+ Item,
53
+ Heading,
54
+ CodeBlock,
55
+ Iframe,
56
+ EmbeddedDocument,
57
+ Link, // needs to be before other marks so we don't get link splitting
58
+ HardBreak,
59
+ Image,
60
+ Highlight,
61
+ ...TableExtensions,
62
+ ...[
63
+
64
+ // do not use configured extensions here
65
+ // see https://github.com/ueberdosis/tiptap/issues/4081
66
+
67
+ Text,
68
+ // styling
69
+ Blockquote,
70
+ Cite,
71
+ Code,
72
+ Italic,
73
+ Underline,
74
+ Strike,
75
+ Subscript,
76
+ Superscript,
77
+
78
+ Bold,
79
+ // embedding
80
+ // other
81
+ History
82
+ ].map(e => stripShortcuts(e)),
83
+ Menus
84
+ ]
85
+
86
+ // mostly for the test builder, so we can have proper typing
87
+ // though the tests should use the full testExtensions
88
+ type NodeParagraphName = "paragraph"
89
+ type NodeTextName = "text"
90
+ type MarkHardBreakName = "hardBreak"
91
+ type MarkUnderlineName = "underline"
92
+ type MarkStrikeName = "strike"
93
+ type MarkSubscriptName = "subscript"
94
+ type MarkSuperscriptName = "superscript"
95
+ type MarkCodeName = "code"
96
+ type MarkItalicName = "italic"
97
+ type MarkBoldName = "bold"
98
+ type NodeImageName = "image"
99
+
100
+ const _schema = getSchema(extensions) as Schema<
101
+ NodeListName
102
+ | NodeItemName
103
+ | NodeHeadingName
104
+ | NodeDocumentName
105
+ | NodeCodeBlockName
106
+ | NodeIframeName
107
+ | NodeEmbeddedDocumentName
108
+ | NodeParagraphName
109
+ | NodeTextName
110
+ | NodeImageName
111
+ | NodeTableName
112
+ | NodeTableHeaderName
113
+ | NodeTableRowName
114
+ | NodeTableCellName
115
+ | NodeBlockquoteName
116
+ | NodeCiteName,
117
+ | MarkHardBreakName
118
+ | MarkHighlightName
119
+ | MarkUnderlineName
120
+ | MarkStrikeName
121
+ | MarkSubscriptName
122
+ | MarkSuperscriptName
123
+ | MarkCodeName
124
+ | MarkItalicName
125
+ | MarkBoldName
126
+ | MarkHighlightName
127
+ >
128
+ export const schema = _schema